3 years agoAutomatic update of translations.
Andre Heinecke [Fri, 4 Mar 2016 13:31:51 +0000 (14:31 +0100)]
Automatic update of translations.

* po: Auto update.

3 years agoMinor string fixes.
Andre Heinecke [Fri, 4 Mar 2016 13:30:42 +0000 (14:30 +0100)]
Minor string fixes.

* src/gpgoladdin.cpp (GetCustomUI_old, GetCustomUI_MIME): Fix
 punctuation and a typo.

3 years agoRevert all mails on disable instead of wipe
Andre Heinecke [Fri, 4 Mar 2016 13:28:48 +0000 (14:28 +0100)]
Revert all mails on disable instead of wipe

* src/gpgoladdin.cpp (GpgolAddin::OnDisconnection): Change
 from wipe to revert. Unlocalize error.

There error there indicates a bug / misunderstanding of outlook
and should never be shown usually.

3 years agoAdd german translations
Andre Heinecke [Fri, 4 Mar 2016 13:27:59 +0000 (14:27 +0100)]
Add german translations

* po/de.po: Translate new strings.

3 years agoUpdate Portugese translations
Andre Heinecke [Fri, 4 Mar 2016 13:20:54 +0000 (14:20 +0100)]
Update Portugese translations

* po/pt.po: Update and convert to utf-8

Translation provided by Marco A.G. Pinto.

3 years agoAutomatic update of translations.
Andre Heinecke [Fri, 4 Mar 2016 13:18:14 +0000 (14:18 +0100)]
Automatic update of translations.

* po: Auto update.

3 years agoChange upcoming version down to 1.4.0
Andre Heinecke [Fri, 4 Mar 2016 13:10:27 +0000 (14:10 +0100)]
Change upcoming version down to 1.4.0

* NEWS: Update accordingly.
* Change version to 1.4.0

The 1.4.0 release will have the new "full mime support" mode
as an option. Before we make that default in 2.0 we want
to improve some additional things.

3 years agoAdd option to switch from old to new UI
Andre Heinecke [Fri, 4 Mar 2016 13:06:24 +0000 (14:06 +0100)]
Add option to switch from old to new UI

* src/ Fix windres call to include config.h
* src/addin-options.cpp (enable_disable_opts): Enable buttons
 depending on mime_ui.
 (options_window_proc): Add handling for mime_ui checkbox.
* src/common.h (struct opts): Add mime_ui option.
* src/dialogs.h (IDC_ENABLE_SMIME): Define.
* src/dialogs.rc: Add checkbox for mime_ui.
* src/gpgoladdin.cpp: Switch ui code depending on opt.mime_ui.
* src/main.c (read_options, write_options): Handle mime_ui.
* src/mapihelp.cpp (get_msgcls_from_pgp_lines): Handle mime_ui.

3 years agoSearch for uiserver more agressively
Andre Heinecke [Thu, 25 Feb 2016 14:12:22 +0000 (15:12 +0100)]
Search for uiserver more agressively

This is supposed to work for both gpg4win 2.x and 3.x and the new
install layout.

* (gpg4win-3-reg-keys): Remove option.
* src/common.c (default_homedir): Fallback to Gpg4win 2 regkey.
  (get_gpg4win_dir): New. Search at multiple places.
  (get_data_dir): Use get_gpg4win_dir.
* src/common.h (get_gpg4win_dir): Declare.
  (GPG4WIN_REGKEY_2, GPG4WIN_REGKEY_3): New for old and ney keys.
* src/engine-assuan.c (get_uiserver_name): Rewrite to look for more
* src/main.c (get_locale_dir): Use get_gpg4win_dir.

This fixes gpgol for the new install layout where the uiserver
executables are installed in the bin subdirectory.

3 years agoUpdate NEWS with latest changes.
Andre Heinecke [Thu, 7 Jan 2016 11:38:56 +0000 (12:38 +0100)]
Update NEWS with latest changes.

* NEWS: Update.

3 years agoFix crash when using Exchange Active Sync
Andre Heinecke [Mon, 4 Jan 2016 15:23:46 +0000 (16:23 +0100)]
Fix crash when using Exchange Active Sync

* src/mapihelp.cpp (get_msgcls_from_pgp_lines): Do not crash when
internetcharsetbody_tag is not available.

In this case the function previously dereferenced the uninitialized
stream pointer.

3 years agoTry to get exchange address from cache first.
Andre Heinecke [Fri, 18 Dec 2015 17:59:35 +0000 (18:59 +0100)]
Try to get exchange address from cache first.

* src/mapihelp.cpp (resolve_ex_from_address): Try cache first.
* src/mymapi.h (MAPI_CACHE_ONLY): Define.

According to MSDN there is a value for MAPI_CACHE_OK which would
basically do what we want. Look in the cache and if it's not cached
look it up from the server. But the value is not documented
and also not in OutlookSpy.

This fixes a hang when the exchange connection is not good.

3 years agoAdd a way to resolve Exchange Address in MAPI
Andre Heinecke [Fri, 18 Dec 2015 11:35:05 +0000 (12:35 +0100)]
Add a way to resolve Exchange Address in MAPI

* src/mapihelp.cpp (resolve_ex_from_address): New.
 (mapi_get_from_address): Use it.

This fixes the case for decrypt where we can't access the
Mailitem to get the sender because we decrypt / verify
before the Mailitem is loaded.
The PidTagSenderSmtpAddress_W and
do not work for mails in the sent mails folder,.. There
was no property from which the SMTP Adress could be extracted.

3 years agoAdd helper to get MAPISession through OOM
Andre Heinecke [Fri, 18 Dec 2015 11:29:17 +0000 (12:29 +0100)]
Add helper to get MAPISession through OOM

* src/oomhelp.cpp (get_oom_mapi_session): New.
* src/oomhelp.h (get_oom_mapi_session): Declare.

This avoids the necessity to logon / logoff mapi and ensures
we have the MAPISession the application uses.

3 years agoMake GpgolAddin class a singleton
Andre Heinecke [Fri, 18 Dec 2015 11:26:18 +0000 (12:26 +0100)]
Make GpgolAddin class a singleton

* src/gpgoladdin.cpp (GpgolAddin::get_instance): New.
* src/gpgoladdin.h (GpgolAddin::get_instance): Declare.
 (GpgolAddin::get_application): Expose application reference.

This makes the Application reference we get on connection
globally accessible which is useful as it can serve as an
entry point into OOM.

3 years agoAdd more fallbacks for sender resolution
Andre Heinecke [Fri, 18 Dec 2015 10:15:29 +0000 (11:15 +0100)]
Add more fallbacks for sender resolution

* src/mail.cpp (Mail::update_sender): Add another Fallback
 for Sender address resolution.

Sometimes we don't have neither SendUsingAccount object.
(Probably if the account is exchange and the default account).
In that case fall back to the Sender.

3 years agoAdd disabled support for inline editors
Andre Heinecke [Thu, 17 Dec 2015 12:35:35 +0000 (13:35 +0100)]
Add disabled support for inline editors

* src/gpgoladdin.cpp (GpgolRibbonExtender::GetIDsOfNames): Map Ids.
 (GpgolRibbonExtender::Invoke): Dispatch to correct functions.
 (GpgolRibbonExtender::GetCustomUI): Add UI for this.
* src/ribbon-callbacks.cpp (mark_mime_action, get_crypt_pressed):
 Prepare to be called from explorer context.
 (get_crypt_pressed): Return False on error.
 (mime_sign, mime_encrypt): Removed.
* src/ribbon-callbacks.h: Add Ids and update prototypes.

The code is disabled for now because sending does not work that
nice. Should be fairly simple to fix though and something for
the future.

3 years agoFix encrypt only when protocol is provided
Andre Heinecke [Wed, 16 Dec 2015 16:30:06 +0000 (17:30 +0100)]
Fix encrypt only when protocol is provided

* src/engine-assuan.c (op_assuan_encrypt): Add codepath for
 protocol provided and sign not set.

This codepath was just missing. It's used now if S/MIME support
is disabled.

GnuPG-Bug-Id: 2191

4 years agoBump version to get 2.0 betas
Andre Heinecke [Fri, 11 Dec 2015 16:46:16 +0000 (17:46 +0100)]
Bump version to get 2.0 betas

* NEWS: Add News so far.
* Bump version.

4 years agoRemove unused variable
Andre Heinecke [Thu, 10 Dec 2015 18:46:49 +0000 (19:46 +0100)]
Remove unused variable

* src/addin-options.cpp (options_dialog_box): Remove unused variable.

Left this out of the previous commit by accident and only
noticed after pushing.

4 years agoFix x64 build by cleaning up debug statements.
Andre Heinecke [Thu, 10 Dec 2015 18:43:34 +0000 (19:43 +0100)]
Fix x64 build by cleaning up debug statements.

* src/addin-options.cpp: Remove some debug output

GetLastError was printed wrongly on 64 bit

4 years agoDisable S/MIME support by default
Andre Heinecke [Thu, 10 Dec 2015 18:38:40 +0000 (19:38 +0100)]
Disable S/MIME support by default

* src/main.c (read_options): Default to false for S/MIME support.

4 years agoSet protocol to OpenPGP if S/MIME is disabled
Andre Heinecke [Thu, 10 Dec 2015 18:34:52 +0000 (19:34 +0100)]
Set protocol to OpenPGP if S/MIME is disabled

* src/mail.cpp (do_crypto): Set protocol according to opts.

4 years agoFix logic error in save avoidance
Andre Heinecke [Thu, 10 Dec 2015 18:26:30 +0000 (19:26 +0100)]
Fix logic error in save avoidance

* src/mailitem-events.cpp (Write): Only check for needs_save again.
 (Read): Set needs save if a smime message should be reverted.

4 years agoMake default encrypt and default sign work
Andre Heinecke [Thu, 10 Dec 2015 18:25:04 +0000 (19:25 +0100)]
Make default encrypt and default sign work

* src/mailitem-events.cpp (Open): Set draft_info_flags according
 to settings.

4 years agoAdd Options control to ribbon and prep. Sigstat
Andre Heinecke [Thu, 10 Dec 2015 18:19:38 +0000 (19:19 +0100)]
Add Options control to ribbon and prep. Sigstat

* src/gpgoladdin.cpp (getCustomUI): Add dialogBoxLauncher for opts.
  (getCustomUI): Prepare for status in reader window.
  (GpgolRibbonExtender::Invoke): Call the functions.
  (GpgolRibbonExtender::GetIDsOfNames): New names.
* src/mail.cpp (Mail::insert_plaintext): Invalidate ribbon.
* src/ribbon-callbacks.cpp (get_crypt_status): New.
* src/ribbon-callbacks.h: Add prototypes

The signature status code basically works but the UI does not
work. Using toggle buttons does not work because the user can
change them. Disabling them greys them out and this does not
look right.

4 years agoRemove unused definition of registry key
Andre Heinecke [Thu, 10 Dec 2015 18:17:15 +0000 (19:17 +0100)]
Remove unused definition of registry key

* src/config-dialog.c (GNUPG_REGKEY): Removed.

Reg key is now changed so that value was wrong.

4 years agoAdd new options dialog for gpgol > 2010
Andre Heinecke [Thu, 10 Dec 2015 18:14:21 +0000 (19:14 +0100)]
Add new options dialog for gpgol > 2010

* src/ Add new files.
* src/addin-options.cpp: New.
* src/addin-options.h: New.
* src/dialogs.h: Add ID's
* src/dialogs.rc: Add Dialog layout.

Reusing the old options dialog was too much hassle as that dialog
is part of the settings page in outlook.

4 years agoReduce syncs by canceling writes
Andre Heinecke [Thu, 10 Dec 2015 13:47:34 +0000 (14:47 +0100)]
Reduce syncs by canceling writes

* src/mail.cpp (is_smime, needs_save): New.
* src/mail.h: Declare and add new properties.
* src/mailitem-events.cpp (MailitemEvents::Invoke): Cancel most
* src/revert.cpp (mailitem_revert): Use is_smime.

There are nearly no cases where we want to accept a write
event for one of our crypto mails. If we cancel the write
our changes won't be synced to the server.
When closing a message we have to save / revert to avoid
the "Properties of the message have changed" dialog which
is totally confusing to users.
We also want to write / revert in case S/MIME is disabled
and we've encountered an S/MIME mail that was changed
by us.

4 years agoMake sure config.h is included before gpg-error.h
Andre Heinecke [Wed, 9 Dec 2015 10:59:23 +0000 (11:59 +0100)]
Make sure config.h is included before gpg-error.h

* src/application-events.cpp, src/exechelp.c, src/rfc2047parse.c:
 Include config.h first.

If we don't include config.h before gpg-error including it
will lead to errors because of the GPG_ERR_SOURCE_DEFAULT
definition in config.h

4 years agoAdd option to use Gpg4win-3 registry keys
Andre Heinecke [Wed, 9 Dec 2015 10:52:09 +0000 (11:52 +0100)]
Add option to use Gpg4win-3 registry keys

* Add --enable-gpg4win-3-reg-keys
* src/common.h: Include config.h

The registry key layout changed with gpg4win-3 to no longer
conflict with GnuPG registry keys.

4 years agoUse callbacks for toggle btn state and refresh ui
Andre Heinecke [Fri, 4 Dec 2015 16:02:35 +0000 (17:02 +0100)]
Use callbacks for toggle btn state and refresh ui

* src/application-events.cpp (ApplicationEvents::Invoke): Invalidate
  UI when a new Item is loaded.
* src/gpgoladdin.cpp (GpgolRibbonExtender::Invoke): Store RibbonUI
  instances. Forward calls for new ID's.
  (GpgolRibbonExtender::GetCustomUI): Add callbacks.
  (GpgolRibbonExtender::GetIDsOfNames): Add CB ID's-
  (gpgoladdin_invalidate_ui): Invalidate UI. Invalidate causes
  all callback to be triggered again in their correct contexts.
* src/gpgoladdin.h: Add prototype for gpgoladdin_invalidate_ui.
* src/ribbon-callbacks.cpp (mark_mime_action): Work on base message.
  (get_crypt_pressed): Callback for toggle buttons.
* src/ribbon-callbacks.h: Add ids and prototypes

This effectively is the first step to have a customised Ribbon UI
for a mail context. Also fixes toggle button behavior in mime send
mode and:

GnuPG-Bug-Id: 2141

4 years agoMove blocking multitry save code into mapihelp
Andre Heinecke [Fri, 4 Dec 2015 15:59:32 +0000 (16:59 +0100)]
Move blocking multitry save code into mapihelp

* src/revert.cpp (finalize_mapi): Remove wait code.
* src/mapihelp.cpp (mapi_do_save_changes): Try multiple times.

I randomly don't get failures saving back to mapi. Just happens
in encryption for send. Blocking the UI is not nice but usally
saving works after 1-5 tries. I've seen it as early as one try
and as much as 5.

4 years agoRevert "Add Tracepoints for issue 1837"
Andre Heinecke [Fri, 4 Dec 2015 10:00:59 +0000 (11:00 +0100)]
Revert "Add Tracepoints for issue 1837"

This reverts commit 7016fec9aef7be53f164829f7c76e28c6a83e228.

* src/gpgoladdin.cpp (getCustomUI): Fix conflicts.

The trace information is no longer useful the underlying problem
was the unload of the dll caused by the wrong behavior of

4 years agoAdd Revert support for S/MIME mails.
Andre Heinecke [Thu, 3 Dec 2015 18:24:56 +0000 (19:24 +0100)]
Add Revert support for S/MIME mails.

* src/revert.cpp (gpgol_mailitem_revert): Handle S/MIME mails.
* src/mapihelp.h: Add missing prototype for get_gpgolmsgclass_tag.

For S/MIME it is really mostly a problem of removing the attachments.

4 years agoTry harder to save reverted mails
Andre Heinecke [Thu, 3 Dec 2015 18:21:06 +0000 (19:21 +0100)]
Try harder to save reverted mails

* src/revert.cpp (finalize_mapi): Try several secons to store.

Sometimes we get an error object has changed here. This
appears to be related to other MAPI io happening, and coincides
with a busy disk. So we do some evil sleeping in the GUI thread.
This actually works. If we don't and have errors
there we are in a bad place as we don't know if the message has
been reverted.

4 years agoAdd revert support for mulitpart signed PGP MIME
Andre Heinecke [Thu, 3 Dec 2015 14:49:51 +0000 (15:49 +0100)]
Add revert support for mulitpart signed PGP MIME

* src/mimemaker.c (restore_msg_from_moss): Don't set gpgol
* src/revert.cpp (gpgol_mailitem_revert): Add support for

Multipart signed is directly restore from the mosstmpl. This
is very fragile though and only works good for mails sent by
gpgol because Outlook mangles the innter MIME boundaries for
mails from at least KMail and Enigmail. So the signature is
broken after the mail went through outlook.

4 years agoTry yet another way to find sender address
Andre Heinecke [Thu, 3 Dec 2015 14:44:30 +0000 (15:44 +0100)]
Try yet another way to find sender address

* src/mail.cpp (Mail::update_sender): Use SendUsingAccount.
Session.CurrentUser did not work for the case in which you
are currently browsing the Folder of UserA and try to send
a mail with UserB. SendUsingAccount appears more reliable.
Also works with exchange.

4 years agoTry harder to match outlooks internal filename enc
Andre Heinecke [Thu, 3 Dec 2015 14:38:10 +0000 (15:38 +0100)]
Try harder to match outlooks internal filename enc

* src/common.c (qp_encode): New. Simple quoted printable encoder.
  (b64_encode): Fix termination of return value.
* src/common.h: Add prototype
* src/mimemaker.c (utf8_to_rfc2047b): Use infer content encoding
  to switch between base64 and quoted printable.

As outlook rewrites the attachment filenames in unencrypted mails
we have to guess how they will look so that we sign them correctly.
If it turns out that this is to buggy we should probably replace
non ascii characters in that case.

4 years agoAdd revert support for PGP MulitpartEncrypted
Andre Heinecke [Wed, 2 Dec 2015 19:32:56 +0000 (20:32 +0100)]
Add revert support for PGP MulitpartEncrypted

* src/mimemaker.c (restore_msg_from_moss): Create a mosstmpl
  attachment. Currently only works for PGP MultipartEncrypted.
* src/mimemaker.h: Add prototype.
* src/oomhelp.h: Add DASL for attachment MIME tag.
* src/revert.cpp (finalize_mapi): Dont restore message class.
  (gpgol_mailitem_revert): Collect info first. Then work. Handle
  MOSS attachments. Do Magic.

For S/MIME we will want to add an option to also restore the
message class. The important thing here is how the message
class is mangled to trigger the SMIME.MultipartSigned behavior
without visibly changing the icon in the message list.

4 years agoMove some debug output into debug_oom
Andre Heinecke [Wed, 2 Dec 2015 19:31:10 +0000 (20:31 +0100)]
Move some debug output into debug_oom

* src/oomhelp.cpp (get_oom_object): Be quieter by default.

4 years agoFix view of sent mails with S/MIME disabled
Andre Heinecke [Wed, 2 Dec 2015 18:59:53 +0000 (19:59 +0100)]
Fix view of sent mails with S/MIME disabled

* src/mapihelp.cpp (mapi_change_message_class): Respect overrides
  even with S/MIME disabled.

I don't see why this would be a problem with S/MIME disabled and
I hope that it was originally a typo. We need the override to
force Outlook to reconsider the data of sent mails.

4 years agoDisable MIME style support for clearsigned mails
Andre Heinecke [Tue, 1 Dec 2015 15:09:50 +0000 (16:09 +0100)]
Disable MIME style support for clearsigned mails

* src/mapihelp.cpp (get_msgcls_from_pgp_lines): Disable clearsigned
  detection for Outlook 2010 and later

As we don't and probably won't handle this in revert we better
not touch it at all to avoid removing the signature information.

4 years agoActivate MIME style handling for PGPMessages >OL14
Andre Heinecke [Tue, 1 Dec 2015 14:57:06 +0000 (15:57 +0100)]
Activate MIME style handling for PGPMessages >OL14

* src/mapihelp.cpp (get_msgcls_from_pgp_lines): Remove check
  for outlook version.

Now that we can revert PGPMessages the reason for this check
is no longer valid.

4 years agoAdd revert to mail class and use it instead wipe
Andre Heinecke [Tue, 1 Dec 2015 14:54:06 +0000 (15:54 +0100)]
Add revert to mail class and use it instead wipe

* src/mail.cpp (Mail::revert_all_mails, Mail::revert): New.
* src/mail.h: Update accordingly.
* src/mailitem-events.cpp (MailitemEvents::Invoke): Revert instead
  of wipe.

The wipe code remains intact for now. If we find out that reverting
is the wrong approach we can fall back to wipining again by changing
the call in mailitem-events.

For now most messages will be wiped anyway as revert is only
supported for PGPMESSAGE messages.

4 years agoAdd mail revert implementation that works on OOM
Andre Heinecke [Tue, 1 Dec 2015 14:21:03 +0000 (15:21 +0100)]
Add mail revert implementation that works on OOM

* src/revert.cpp (gpgol_mailitem_revert): Revert mail in OOM.
* src/revert.h: Add prototype.

Using OOM appeared to be necessary. At least I have not found
a way to modify the Body through MAPI in a way that it survived
the write event. It appeared that during the Write event the
OOM Body is synced back to mapi. Same for the attachment model
in OOM. Some weirdeness there. Now we use OOM as much as possible.

There is some duplication with the old code but I didn't want
to touch the old code to aviod regressions. Although I doubt
very much that the old code works correctly.

For now the code returns an error for all messages apart
from PGP Message.

4 years agoAdd OOM PropertyAccessor helper methods
Andre Heinecke [Tue, 1 Dec 2015 14:15:46 +0000 (15:15 +0100)]
Add OOM PropertyAccessor helper methods

* src/oomhelp.cpp (set_pa_variant): New. Set a property.
  (get_pa_int): New. Get an int property.
  (get_pa_variant): New. Get a generic property as variant.
  (get_pa_string): Refactored to use get_pa_variant.
* src/oomhelp.h: Add prototpyes and DASL defs.

This code might not be necessary as you mainly can access
MAPI directly. But it can be useful in case MAPI is out of
sync and gives weird values. This is added mostly as an
experiment for now as MAPI is usually easier to use.

4 years agoFix reg key lookup for x64 and prep for new key
Andre Heinecke [Fri, 27 Nov 2015 16:22:41 +0000 (17:22 +0100)]
Fix reg key lookup for x64 and prep for new key

* src/common.h (GNUPG_REGKEY): Use 32 bit key on 64 bit. Prepare
  for gpg4win 3. Key layout

4 years agoStart UIServer on demand
Andre Heinecke [Fri, 27 Nov 2015 15:23:57 +0000 (16:23 +0100)]
Start UIServer on demand

* src/engine-assuan.c (op_assuan_init): Don't test connection.
The old spawning code with the retry counter made this unfeasible.
Starting on demand has the charm that it is properly handled
if the user stops the UIServer or the UIServer crashes (which of course
only Kleo does).

This should also give us a big boost in the startup timing benchmark
Outlook runs to suggest "Addins that are making Outlook slow".

GnuPG-Bug-Id: 2137

4 years agoRework connect_uiserver call based on gpgex
Andre Heinecke [Fri, 27 Nov 2015 15:22:13 +0000 (16:22 +0100)]
Rework connect_uiserver call based on gpgex

* src/engine-assuan.c (connect_uiserver): Use proper locking. Improve
 retry handling.

4 years agoAdd process spawning code from gpgex
Andre Heinecke [Fri, 27 Nov 2015 15:15:47 +0000 (16:15 +0100)]
Add process spawning code from gpgex

* src/common.c, src/common.h (gpgol_spawn_detached): New.
* src/exechelp.h, src/exechelp.c: New.
* src/ Add exechelp files.

While the spawning in gpgol_spawn_detached was quite similar
it makes sense to move that out in it's own source file and
use the same mutex that gpgex uses.

4 years agoGenerate libmapi32 for 64 bit systems corecctly
Andre Heinecke [Fri, 27 Nov 2015 14:34:10 +0000 (15:34 +0100)]
Generate libmapi32 for 64 bit systems corecctly

* Add conditional for 64 bit build
* src/ Add 64 bit flags for dlltool if necessary.
* src/mapi32.def: Add C calling convention names where necessary.

4 years agoFix size_t / unsigned int conversion for x64
Andre Heinecke [Fri, 27 Nov 2015 14:26:42 +0000 (15:26 +0100)]
Fix size_t / unsigned int conversion for x64

* src/mlang-charset.cpp (ansi_charset_to_utf8): Fix call to
 ConvertStringToUnicode to use unsigned int for size.

4 years agoPost release updates
Werner Koch [Tue, 24 Nov 2015 08:42:23 +0000 (09:42 +0100)]
Post release updates


4 years agoRelease 1.3.0 gpgol-1.3.0
Werner Koch [Tue, 24 Nov 2015 08:36:01 +0000 (09:36 +0100)]
Release 1.3.0

4 years agopo: Auto-update
Werner Koch [Tue, 24 Nov 2015 08:35:31 +0000 (09:35 +0100)]
po: Auto-update


4 years agoFix make distcheck.
Werner Koch [Tue, 24 Nov 2015 08:34:47 +0000 (09:34 +0100)]
Fix make distcheck.


4 years agoNews for 1.3.0 release
Andre Heinecke [Mon, 23 Nov 2015 16:07:31 +0000 (17:07 +0100)]
News for 1.3.0 release

* NEWS: Add some news.

4 years agoBe more tolerant when parsing RFC2047
Andre Heinecke [Mon, 23 Nov 2015 15:25:34 +0000 (16:25 +0100)]
Be more tolerant when parsing RFC2047

* src/rfc2047parse.c (G_MIME_RFC2047_WORKAROUNDS): Enable.

With enabling the workarounds we try to treat everything between
the =? ?= markers of a word as an encoded word and don't bail
if there are not correctly encoded chaacters in there.
Enigmail does not encode dots in filenames. GMimes understanding
of the RFC differes about that point.

4 years agoAdd gmime-table-private header
Andre Heinecke [Sun, 22 Nov 2015 16:24:10 +0000 (17:24 +0100)]
Add gmime-table-private header

* src/gmime-table-private.h: New, from GMime
* src/ Update accordingly.

Neccessary file for rfc2047parser. Forgot to add this with
the according commit.

4 years agoUse mlang charset conversion in RFC2047 parser
Andre Heinecke [Sun, 22 Nov 2015 16:13:46 +0000 (17:13 +0100)]
Use mlang charset conversion in RFC2047 parser

* src/rfc2047parse.c (rfc2047_decode_tokens): Use malang-charset
  (_rfc2047_token, rfc2047_token_new_encoded_word): Unconstify charset.
  (rfc2047_token_free): New. Also free charset.
  (rfc2047_tokens_free): Use token_free.
  (g_mime_utils_header_decode_phrase): Cleanup redundant code.
  (rfc2047_parse): Ditto.

At least with a latin1 encoded mail from Kmail this worked and
it's probably the same conversion Outlook uses internally so
his should support everything that outlook supports.

4 years agoFallback to content-type name if no cd/filename
Andre Heinecke [Sun, 22 Nov 2015 16:11:07 +0000 (17:11 +0100)]
Fallback to content-type name if no cd/filename

* src/mimeparser.c (t2body): Fallback to ct/name if cd/filename
  not found or not parsed.

This is neccessary for enigmail attachments which uses an
rfc 2038 (i think) content-dispositon filename but an
RFC 2047 content-type / name so that Outlook can understand
the filename from the content-type / name. We understand this
now, too.

4 years agoParse RFC2047 attachment names
Andre Heinecke [Sun, 22 Nov 2015 16:09:36 +0000 (17:09 +0100)]
Parse RFC2047 attachment names

* src/mimeparser.c (start_attachment): Expect filename as utf8 and
  set it as Unicode property in MAPI.
  (t2body): Parse the attachment filename.

4 years agoUse RFC2047 for attachment names
Andre Heinecke [Sun, 22 Nov 2015 16:06:45 +0000 (17:06 +0100)]
Use RFC2047 for attachment names

* src/mimemaker.c (utf8_to_rfc2047b): New. Convert utf8 to rfc2047
  base64 encoding.

We always use UTF8 and Base64 for simplicity. (I wish this was
everything thats allowed,..)

4 years agoAdd base64 encoder
Andre Heinecke [Sun, 22 Nov 2015 16:05:32 +0000 (17:05 +0100)]
Add base64 encoder

* src/common.c, src/common.h (b64_encode): New.

Will be used to encode RFC2047 strings.

4 years agoAdd MIME language to UTF8 conversion code
Andre Heinecke [Sun, 22 Nov 2015 16:02:05 +0000 (17:02 +0100)]
Add MIME language to UTF8 conversion code

* src/mlang-charset.cpp, src/mlang-charset.h: New.
* src/ Update accordingly.

This is COM based code but as we are a COM addin anyway
we can utilize it to convert MIME strings to unicode and
then from unicode to UTF8.
Our internal "we do everything in UTF-8" has a bit overhead
here but I prefer it.

4 years agoAdd rfc2047 parser based on GMime
Andre Heinecke [Sun, 22 Nov 2015 14:41:35 +0000 (15:41 +0100)]
Add rfc2047 parser based on GMime

* src/rfc2047parse.c, src/rfc2047parse.h: New.
* src/ Update accordingly.
To properly handle attachment names the same way as outlook
does we need to be able to parse rfc2047 words at least.
From the rfc's I'm not sure if we need to parse multiple words
but let's assume we do for added compatibility. And this was
an easy part of GMime to extract.

For now it only handles UTF8 binary and quoted printable.

4 years agoFix DllCanUnloadNow behavior
Andre Heinecke [Thu, 19 Nov 2015 16:42:50 +0000 (17:42 +0100)]
Fix DllCanUnloadNow behavior

* src/gpgoladdin.cpp (DllCanUnloadNow): Only return OK if the addin
is not connected.

The addinlocks variable made no sense to use for this. Now we just
check if we are connected or not. When we are not connected no
callbacks are used and it is safe to unload gpgol. Otherwise
we can't be safely unloaded.

GnuPG-Bug-Id: 1837

4 years agoRemove unused include
Andre Heinecke [Fri, 13 Nov 2015 16:27:01 +0000 (17:27 +0100)]
Remove unused include

* src/attachment.cpp: Remove unused include.

objidlbase.h is not part of mingw-2.0 but luckily we don't
need it anway and it's just a leftover from an experiment.

4 years agoUse gpgrt_asprintf
Andre Heinecke [Fri, 13 Nov 2015 16:18:28 +0000 (17:18 +0100)]
Use gpgrt_asprintf

* src/attachment.cpp (do_crypt), src/gpgoladdin.cpp (GetCustomUI):
  Use gpgrt_asprintf.

We link libgpg-error anyway so let's make use of it. Fixes
the build on debian wheezy

4 years agoRemove unsed vasprintf implementation
Andre Heinecke [Fri, 13 Nov 2015 16:17:38 +0000 (17:17 +0100)]
Remove unsed vasprintf implementation

* src/missing/vasprintf.c: Removed.

This didn't compile anymore with gcc-4.9

4 years agoRevert "Use libmapi32 from mingw"
Andre Heinecke [Fri, 13 Nov 2015 14:14:36 +0000 (15:14 +0100)]
Revert "Use libmapi32 from mingw"

This reverts commit 6533170a34d9e6f7191e41b31045ad0b4b4af1df.

With libmapi32.a from mingw we get unresolved symbol errors
on runtime.

4 years agoDisable msgclass changing code for in Body Crypto
Andre Heinecke [Fri, 13 Nov 2015 09:40:17 +0000 (10:40 +0100)]
Disable msgclass changing code for in Body Crypto

* src/mapihelp.cpp (get_msgcls_from_pgp_lines): Disable for
  Outlook >= 2010.

For now we want to ignore clearsigned and PGP/Inline
signed code as we still have the old body based interface
for those. And before we handle them we should tackle
some interoperability issues arising from our current
handling (e.g. fix the wipe to restore the PGP body)

4 years agoCheck PGP Body tags for additional msgtypes
Andre Heinecke [Fri, 13 Nov 2015 09:34:11 +0000 (10:34 +0100)]
Check PGP Body tags for additional msgtypes

* src/mapihelp.cpp (change_message_class_ipm_note),
  (change_message_class_ipm_note_secure_cex): Also check
  multipart/alternative and multipart/mixed.

Especially PGP/Inline mails sent by Outlook with the old code
is often times multipart/alternative as Outlook sends this by

4 years agoAdd workaround for opaque signed encrypted data
Andre Heinecke [Thu, 12 Nov 2015 16:36:21 +0000 (17:36 +0100)]
Add workaround for opaque signed encrypted data

* src/ribbon-callbacks.cpp (do_reader_action): Only use the
mime handling when there is no "BEGIN PGP MESSAGE" in body.

The sign verify split of the old addon allowed you to first
opaque sign a message, then encrypt it. The mime code now
only detects the encryption as this is a standard thing. The
signature is not verified as it is treated as just another plaintext.

4 years agoActually add French translation from afb7e445c
Andre Heinecke [Thu, 12 Nov 2015 15:37:01 +0000 (16:37 +0100)]
Actually add French translation from afb7e445c

Woops forgot to git add

4 years agoRegenerate po files
Andre Heinecke [Thu, 12 Nov 2015 14:54:02 +0000 (15:54 +0100)]
Regenerate po files

* de.po, pt.po, sv.po, zh_CN.po, zh_TW.po: Automatic update.

4 years agoAdd traditional / simplified chinese localization
Andre Heinecke [Thu, 12 Nov 2015 13:37:24 +0000 (14:37 +0100)]
Add traditional / simplified chinese localization

* zh_CN.po, zh_TW.po: New.
* po/LINGUAS: Update accordingly.
Localization provided by Mingye Wang (Arthur2e5) <>
on 2015.09.20

4 years agoAdd French translation
Andre Heinecke [Thu, 12 Nov 2015 11:54:58 +0000 (12:54 +0100)]
Add French translation

* LINGUAS: Add fr
* po/fr.po: New.

Translation provided by Olivier Serve on 2015.10.01

4 years agoRemove deleted files from
Andre Heinecke [Thu, 12 Nov 2015 11:50:26 +0000 (12:50 +0100)]
Remove deleted files from

* po/ Remove deleted files

4 years agoDo not release eventsink when disabled
Andre Heinecke [Thu, 12 Nov 2015 09:55:19 +0000 (10:55 +0100)]
Do not release eventsink when disabled

* src/gpgoladdin.cpp (GpgolAddin::~GpgolAddin): Do not release
m_appliactionEventSink when disabled. Use NULL guarded release.

When we are disabled OnStartupComplete never creates the event
sink but the addin's dtor is called on unload.

4 years agoFix double free when addin is disabled
Andre Heinecke [Thu, 12 Nov 2015 09:50:08 +0000 (10:50 +0100)]
Fix double free when addin is disabled

* src/gpgoladdin.cpp (GpgolAddin::~GpgolAddin): Do not release

The RibbonExtender is already released by outlook. So we released
an invalid object here. This worked often enough but could of course

4 years agoAdd mkinstalldirs script
Andre Heinecke [Wed, 4 Nov 2015 16:09:48 +0000 (17:09 +0100)]
Add mkinstalldirs script

* build-aux/mkinstalldirs: New. Copied from gpgme.

This fixes make install which was broken after the latest build
system upgrade.

4 years agoUse libmapi32 from mingw
Andre Heinecke [Wed, 4 Nov 2015 15:50:22 +0000 (16:50 +0100)]
Use libmapi32 from mingw

* Remove our own libmapi32 creation
* mapi32.def: Removed.

The libmapi32 that comes with debian stable (jessie) has all the symbols
we need. And this solves a linker problem when building for x64.

4 years agoFix int to pointer cast when creating worker
Andre Heinecke [Wed, 4 Nov 2015 15:45:33 +0000 (16:45 +0100)]
Fix int to pointer cast when creating worker

* src/engine-assuan.c (async_worker_thread): Expect parameter to be
 a pointer instead of a value.
 (op_assuan_init): Pass a reference instead.

While the old code was not broken building for x64 created a
warning. And I also don't think you should do it even if it works

4 years agoHandle handle to int casts
Andre Heinecke [Wed, 4 Nov 2015 15:42:40 +0000 (16:42 +0100)]
Handle handle to int casts

 * src/engine-assuan.c (handle_to_int): New.
  (send_options, op_assuan_init, op_assuan_encrypt),
  (op_assuan_sign, op_assuan_decrypt, op_assuan_verify): Use it.

Doing this in a function explictly ensures that we only downcast
Handle pointers. For them this is allowed and we can locally
deactive the warning.

4 years agoAdd format string macro for size_t
Andre Heinecke [Wed, 4 Nov 2015 15:38:13 +0000 (16:38 +0100)]
Add format string macro for size_t

* src/util.h (SIZE_T_FORMAT): Use a macro for a portable way of
  printing size_t.
* src/engine.c (engine_filter, engine_wait): Use it in debug output.

%z is not available for us.

4 years agoDefine out code that does not compile for x64
Andre Heinecke [Wed, 4 Nov 2015 15:33:33 +0000 (16:33 +0100)]
Define out code that does not compile for x64

* src/config-dialog.c (config_dialog_box): Define out for x64
* src/olflange-dlgs.c (GPGOptionsDlgProc): Define out call to

This code is only used in older outlook versions which are not
avaibale for 64 bit. And I rather not compile it then change it
and cause regressions in those versions.

4 years agoFix pointer to int cast in debug output
Andre Heinecke [Wed, 4 Nov 2015 15:25:22 +0000 (16:25 +0100)]
Fix pointer to int cast in debug output

* src/oomhelp.cpp (dump_excepinfo): Fix deferredFill output format.

4 years agoRemove dead code
Andre Heinecke [Wed, 4 Nov 2015 15:18:30 +0000 (16:18 +0100)]
Remove dead code

* Update gpgol_Sources accordingly.
* main.c (init_options, read_options): Remove password_ttl setting.
  (DllMain): No longer initialize passcache.
* passcache.c, passcache.h, passphrase-dialog.c, recipient-dialog.c,
  verify-dialog.c: Removed. This is handled by the uiserver now.

This is code from a time before assuan architecture and unlikely
to be useful again.

4 years agoFix recipient lookup
Andre Heinecke [Wed, 4 Nov 2015 10:24:54 +0000 (11:24 +0100)]
Fix recipient lookup

* src/message.cpp (get_recipients): Actually fallback to the
  email property in case the smtp address property is not set.

4 years agoWipe all decrypted mails on disconnect.
Andre Heinecke [Mon, 2 Nov 2015 16:46:55 +0000 (17:46 +0100)]
Wipe all decrypted mails on disconnect.

* src/mail.cpp (wipe_all_mails): New.
* src/gpgoladdin.cpp (~GpgOLAddin): Add more debug output.
  (OnDisconnection): Call wipe all mails.

This should cover the case that we decrypted a message and
are deactivated before the write / save event that removes
the plaintext in that message again.

nuPG-Bug-Id: 2138

4 years agoSave mailitem on close
Andre Heinecke [Mon, 2 Nov 2015 16:24:15 +0000 (17:24 +0100)]
Save mailitem on close

* src/mail.h (Mail::is_crypto_mail): New.
* src/mailitem-events.cpp (EVENT_SINK_INVOKE): Call Save on
This prevents the "The properties of the message have changed"
Dialog but has the side effect that the plain text has to be removed
from the mail as the Save will trigger a Write event.

4 years agoAdd more debug output for msg wipes.
Andre Heinecke [Mon, 2 Nov 2015 16:22:14 +0000 (17:22 +0100)]
Add more debug output for msg wipes.

* src/mail.cpp (Mail::insert_plaintext): Check if msg already
  needs wipe and log it. Log plaintext with msg ptr.
  (Mail::wipe): Log wipe error.

4 years agoFix handling sent and exchange to exchange mails.
Andre Heinecke [Mon, 2 Nov 2015 14:16:46 +0000 (15:16 +0100)]
Fix handling sent and exchange to exchange mails.

* src/mail.cpp (Mail::process_message): Always change message class.

Changing the message class in the before read event causes
Outlook to reconsider what it knows about a message and to read
information again from the unwrapped basemessage. While this
may have a negative impact on performance this fixes the case
where Outlook already knows too much about a message because
it was either recieved by exchange (and so already had the
MAPI properties from GPGOL set) or because it sent the
message itself and so also had the GpgOL MAPI properties.

4 years agoFix from address lookup for exchange
Andre Heinecke [Fri, 30 Oct 2015 17:24:10 +0000 (18:24 +0100)]
Fix from address lookup for exchange

* src/mapihelp.cpp (mapi_get_from_address): Try additional SMTP
  tags before falling back to EMAIL tag.
* src/mymapitags.h (PidTagSenderSmtpAddress_W),

4 years agoFix regression introduced by 383cb091
Andre Heinecke [Fri, 30 Oct 2015 15:55:54 +0000 (16:55 +0100)]
Fix regression introduced by 383cb091

* src/message.cpp (message_decrypt): Fix parenthesis.

The fix for -Wparentheses used the wrong paranthesis and
this broke detection of our "own" pgp/mime mails.

Should have been more attentive in my first semester
"basics of programming" course :-)

4 years agoRelease detached event sink.
Andre Heinecke [Fri, 30 Oct 2015 15:48:30 +0000 (16:48 +0100)]
Release detached event sink.

* src/mail.cpp (Mail::~Mail): Release detached mail event sink.

4 years agoEnable sender handling for Exchange Accounts
Andre Heinecke [Fri, 30 Oct 2015 15:41:07 +0000 (16:41 +0100)]
Enable sender handling for Exchange Accounts

* src/mail.cpp (Mail::update_sender): New. Updates sender address
  from OOM.
  (Mail::get_sender): New. Access the sender.
  (Mail::do_crypt): Pass sender to crypto functions.
* src/mail.h: Update accordingly.
* src/mailitem-events.cpp (EVENT_SINK_INVOKE): Update sender on send
* src/message.cpp, src/message.h, src/mimemaker.c, src/mimemaker.h:
  Add optional sender parameter to crypto functions and use it.

In the after write event we can't use OOM methods so we can't look
up the sender over the session. This makes it neccessary to save
the sender address beforehand as I could not find any way to get this
information through MAPI (probably over the MAPISession).

4 years agoFactor logic out of event handler
Andre Heinecke [Fri, 30 Oct 2015 13:49:38 +0000 (14:49 +0100)]
Factor logic out of event handler

* src/ Add mail.h and mail.cpp
* src/mail.cpp, src/mail.h: New. Class containing information and
  functionality to work with mails.
* src/application-events.cpp (EVENT_SINK_INVOKE): Create mail objects
  on ItemLoad event for Mailitems.
* src/mailitem-events.cpp (HTML_TEMPLATE): Move to mail.cpp
  (BEGIN_EVENT_SINK): Reduce member variables.
  (MailItemEvents::MailItemEvents): Less initializations.
  (MailItemEvents::handle_read): Moved to Mail::insert_plaintext.
  (MailItemEvents::handle_before_read): Moved to Mail::process_message
  (do_crypto_on_item): Moved to Mail::do_crypto
  (needs_crypto): Moved to Mail::needs_crypto
  (EVENT_SINK_INVOKE): Get reference to according mail object.
  (EVENT_SINK_INVOKE): Call Mail methods according to events.
  (EVENT_SINK_INVOKE): Wipe code moved to Mail::wipe

mailitem-events should only "respond to events" from now on.
Encapsulating all information about a Mail in a single class makes
sense as we can keep track of data independently of events. The
mix of state variables (e.g. needs_wipe) in the event handler
made it difficult to access that information from anywhere.
Additionally we now keep track of all Mail items loaded with
our Event sinks set and expose them through Mail::get_mail_for_item.
This should help solving problems like "wiping all plaintext on