c1008945425b946a8643db9553c561e1023b978d
[gpgol.git] / src / ChangeLog
1 2005-10-21  Marcus Brinkmann  <marcus@g10code.de>
2
3         * Makefile.am (libgpgme.a, libgpgme.a): New targets.
4         (gpgol_DEPENDENCIES): Add libgpgme.a and libgpg-error.a.
5         (clean-local): Likewise.
6         (gpgol_LDADD): Link to these local versions statically.
7
8 2005-10-20  Marcus Brinkmann  <marcus@g10code.de>
9
10         * mapi32.def: New file.
11         * Makefile.am (gpgol_DEPENDENCIES): New variable.
12         (libmapi32.a): New target.
13         (gpgol_LDADD): Replace mapi32.dll with "-L . -lmapi32".
14         (clean-local): New target.
15
16 2005-10-06  Marcus Brinkmann  <marcus@g10code.de>
17
18         * Makefile.am (gpgol_DEPENDENCIES): New variable.
19         (libmapi32.a): New target.
20         (gpgol_LDADD): Replace mapi32.dll with "-L . -lmapi32".
21
22         * Makefile.am (gpgol_LDADD): Prefix gpgol.def and mapi32.dll with
23         $(srcdir).
24
25         * Makefile.am (.rc.o): Invoke windres with "-I .".
26
27         * Makefile.am (.rc.o): Invoke windres with -I $(srcdir).
28
29         * Makefile.am (gpgol_SOURCES): Add util.h.
30
31 2005-09-29  Werner Koch  <wk@g10code.com>
32
33         * gpgmsg.cpp (encrypt_and_sign): Pass signing key to encryption
34         function.
35
36         * passphrase-dialog.c (signer_dialog_box): New arg encrypting. 
37
38         * gpgmsg.cpp (encrypt_and_sign): Set content type.
39
40         * engine-gpgme.c (op_lookup_keys): Fixed multiple key detection.
41
42 2005-09-28  Werner Koch  <wk@g10code.com>
43
44         * olflange.cpp (DoCommand): Catch close command and resend to
45         avoid the "save changes?".
46
47         * display.cpp (update_display): Take care of utf-8 issues.
48         * common.c (latin1_to_utf8): New.
49         * pgpmime.c (latin1_data_write): New.
50         (plaintext_handler): Use it here.
51         (message_cb): Detect utf-8 encoding.
52
53         * main.c (read_options): Make sure that compat flags are always
54         properly initialized.
55
56         * display.cpp (find_message_window): First try to find the window
57         by class name.
58
59         * common.c (wchar_to_utf8_2): New.
60
61 2005-09-27  Werner Koch  <wk@g10code.com>
62
63         * pgpmime.c (pgpmime_decrypt): Pass a pseduo filename to the
64         decryption function.
65
66         * verify-dialog.c (load_sigbox): Get key direct from gpgme.
67         * passphrase-dialog.c (load_secbox, load_recipbox): Reworked.
68         (decrypt_key_dlg_proc, decrypt_key_ext_dlg_proc): Reworked.
69         (count_keys, release_keyarray): New.
70         (signer_dialog_box, passphrase_callback_box): Adjusted to above
71         changes.
72         * engine-gpgme.c (op_deinit): Remove keycache cleanup.
73         * Makefile.am (gpgol_SOURCES): Removed keycache.c, keycache.h.
74         * keycache.c, keycache.h: Removed.
75
76         * recipient-dialog.c (recipient_dialog_box) 
77         (recipient_dialog_box2): Rewritten and changed interface.
78         (load_rsetbox): Removed keycache stuff and rewrote to make use of
79         the keyarray.
80         (copy_item, initialize_keybox, recipient_dlg_proc): Ditto.
81         (keycache_to_key_array): Removed.
82         * engine-gpgme.c (op_lookup_keys): Rewritten, changed interface.
83         * gpgmsg.cpp (count_recipients): Renamed to ..
84         (count_strings): .. this.
85         (count_keys): New.
86         (free_recipient_array): Renamed to ..
87         (free_string_array): .. this.
88         (encrypt_and_sign): Adjusted for changes in op_lookup_keys and
89         recipient_dialog_box2.
90
91 2005-09-26  Werner Koch  <wk@g10code.com>
92
93         * passphrase-dialog.c (get_pubkey_algo_str): Add DSA and old Elgamal.
94
95         * gpgmsg.cpp (gatherAttachmentInfo): Ignore attachments we can't
96         open.
97
98         * main.c (write_options): Print message on error.  Rearranged to
99         make use of a table for all options.
100
101 2005-09-23  Werner Koch  <wk@g10code.com>
102
103         * recipient-dialog.c (recipient_dlg_proc): Removed
104         IDC_ENC_OPTARMOR stuff; it was not used.
105         (load_rsetbox): Fixed detection of encryption capability.
106
107         * gpgol-ids.h, gpgol-rsrcs.rc: Ditto.
108         
109 2005-09-22  Werner Koch  <wk@g10code.com>
110
111         * engine-gpgme.c (decrypt_stream): Use gpgme_op_decrypt_verify.
112
113         * gpgmsg.cpp (gatherAttachmentInfo): Ignore attestations when
114         checking for pgp/mime.
115
116         * pgpmime.c (pgpmime_decrypt): Added arg HWND.
117         (message_cb, plaintext_handler): Write attachments.
118         * pgpmime.c (base64_decode): New.
119         * rfc822parse.c (parse_field): Treat Content-Disposition special.
120
121         * gpgmsg.cpp (get_save_filename): Moved to ..
122         * common.c (get_save_filename): .. here.
123
124 2005-09-20  Timo Schulz  <ts@g10code.com>
125
126         * attach.c: New.
127         * attach.h: New.
128         * olflange.cpp (CGPGExchExt): Allocate class for
129         attached file events.
130         (QueryInterface): Return interface pointer for
131         attached file events.
132         * passphrase-dialog.c (load_secbox): Use new GPGME
133         interface.
134         (get_pubkey_algo_str): New.
135         * verify-dialog.c (load_sigbox): Likewise.
136         * recipient-dialog.c (load_recipbox): Likewise.
137
138 2005-09-19  Werner Koch  <wk@g10code.com>
139
140         * msgcache.c (flush_if_needed): New.
141         (msgcache_put): use it.
142         * intern.h (opt): New compatibility flags AUTO_DECRYPT and
143         NO_ATTESTATION.
144         * olflange.cpp (InstallCommands): Use watcher stuff only when this
145         option has been enabled.
146         * gpgmsg.cpp (decrypt): Take care of NO_ATTESTATION.
147         * main.c (DllMain): Removed debug output; this should not be
148         used before initialization!
149         * watcher.cpp: Include config.h.  Removed weird line endings.
150         * gpgmsg.cpp (encrypt_and_sign): Call SaveChanges.
151
152 2005-09-15  Timo Schulz  <ts@g10code.com>
153
154         * util.h: Provider watcher prototypes.
155         * watcher.cpp (watcher_init_hook): New.
156         (watcher_free_hook): New.
157         (watcher_set_callback_ctx): New.
158         (cbt_proc): New.
159         * display.cpp (find_message_window): Removed GpgMsg param.
160         Changed all callers.
161         
162 2005-09-15  Werner Koch  <wk@g10code.com>
163
164         * olflange.cpp (OnWriteComplete): Take care of EEME_FAILED.
165         (OnWrite): Check that we are encrypting only plain text messages.
166
167         * myexchext.h: Add flags used by OnReadComplete.
168
169 2005-09-14  Werner Koch  <wk@g10code.com>
170
171         * gpgmsg.cpp (writeAttestation): Add a content type.
172         (gatherAttachmentInfo): Detect whether we already have an attestation.
173         (decrypt): Don't create duplicate attestations.
174         (writeAttestation): Translate LF to CRLF.
175
176 2005-09-13  Werner Koch  <wk@g10code.com>
177
178         * pgpmime.c (pgpmime_decrypt): New arg ATTESTATION.
179         * engine-gpgme.c (add_verify_attestation): New.
180         (op_decrypt, op_verify_detached_sig, op_verify_detached_sig)
181         (op_verify_detached_sig): Add new arg ATTESTATION.  Changed all
182         callers.
183         (at_sig_summary, at_sig_validity, add_verify_attestation): New.
184         The code has been taken and modified from Mutt's crypt-gpgme.c and
185         entirely been writen by g10 Code.
186         (at_fingerprint): Ditto.
187
188         * gpgmsg.cpp (class GpgMsgImpl): New member ATTESTATION.  Use it
189         in all calls to the functions above.
190
191         * gpgmsg.cpp (decryptAttachment, decrypt): Save plaintext back
192         into the MAPI if desired.
193
194 2004-09-08  Timo Schulz  <ts@g10code.com>
195
196         * passphrase-dialog.c (lod_recipbox): Use gpgme directly
197         to resolve the keyids to userids.
198         * usermap.c, usermap.h: Removed.
199         * HashTable.cpp, HashTable.h: Removed.
200
201 2005-09-07  Timo Schulz  <ts@g10code.com>
202
203         * common.c: Removed unused code.
204         * intern.h: Likewise.
205
206 2005-09-07  Timo Schulz  <ts@g10code.com>
207
208         * olflange.cpp (ul_release): New. Wrapper with error checking
209         around UlRelease.
210         (InstallCommands): Separate test for type and if string is empty.
211         
212 2005-09-06  Werner Koch  <wk@g10code.com>
213
214         * engine-gpgme.c (op_decrypt_stream): Factored most code out to ..
215         (decrypt_stream): .. new.
216         (op_decrypt_stream_to_buffer): Simplified accordingly.  Fixed
217         possible buffer overflow when trying to make it a string. 
218         (op_decrypt_stream_to_gpgme): New.
219
220         * pgpmime.c, pgpmime.h: New.
221         * rfc822parse.h, rfc822parse.c: New.  Taken from GnuPG 1.9.
222
223 2005-09-06  Timo Schulz  <ts@g10code.com>
224
225         * config-dialog.c (get_open_file_name): Correctly terminated filter.
226         New parameter for the title. Changed all callers.
227         (get_folder): Likewise.
228         
229 2005-09-01  Werner Koch  <wk@g10code.com>
230
231         * gpgmsg.cpp (get_pgp_armor_type): New.
232         (gatherAttachmentInfo):  Enhanced to detect text/plain pgp.
233         (verify): Removed.
234         (decrypt): Do clearsig verification here.
235
236         * gpgmsg.cpp (decrypt): Kludge to workaround OL not updating a
237         window.
238         * msgcache.c (msgcache_get_from_mapi): New.
239         * display.cpp (find_message_window): Don't use the GpgMsg function
240         to to the string compare.
241         * gpgmsg.cpp (matchesString): Removed.
242
243         * msgcache.c (msgcache_set_active): Removed.
244         (msgcache_get): Rewritten.
245         (msgcache_put): Now uses PR_CONVERSATION_INDEX as key.  Update
246         existing entries.
247
248         * olflange.cpp (OnRead): Removed msgcache_set_active.
249         (InstallCommands): Now uses the ConversationIndex to match the
250         reply with the message.
251
252 2005-08-31  Werner Koch  <wk@g10code.com>
253
254         * olflange.cpp (DllRegisterServer): Define a CLSID and set the
255         ThreadingModel.
256
257 2005-08-30  Werner Koch  <wk@g10code.com>
258
259         Renamed from "outlgpg" to "gpgol".
260
261         More or less finished this major rewrite.
262
263 2005-08-26  Werner Koch  <wk@g10code.com>
264
265         * MapiGPGME.cpp, MapiGPGME.h: Removed.
266         * display.cpp, display.h: New. 
267
268 2005-08-23  Werner Koch  <wk@g10code.com>
269
270         * msgcache.c, msgcache.h: New.
271
272 2005-08-22  Werner Koch  <wk@g10code.com>
273
274         * olflange.cpp: Major cleanups and partly rewrites.
275
276 2005-08-18  Werner Koch  <wk@g10code.com>
277
278         * gpgmsg.cpp, gpgmsg.hh: New.
279         
280 2005-08-17  Werner Koch  <wk@g10code.com>
281
282         * MapiGPGME.cpp (setMessageAccess): Removed as it was only used at
283         one place.
284         (setRTFBody): Use the above code here directly..
285         (setWindow, setMessage): Removed.  We can't use that because there
286         is only one instance of this class.
287         (decrypt): Add args HWND and MSG.  Changed caller.
288         (getBody): Changed to ..
289         (get_body): .. plain function and add new arg MSG.  Changed all
290         callers.
291         (isHtmlMessage): Likewise changed to ..
292         (is_html_message): .. plain function and add new arg MSG.
293         (doCmd): Removed.
294
295         * common.c (utf8_to_wchar): New.
296
297         * MapiGPGME.cpp (passphraseCallback): Removed.
298         (getPassphrase, clearPassphrase, storePassphrase): Removed.
299         (add_html_line_endings): Rewritten.
300
301         * engine-gpgme.c (op_sign_encrypt_start): Removed because it is
302         not used anywhere.
303         (op_sign): Renamed to ..
304         (do_sign): .. this and made local.
305
306 2005-08-16  Werner Koch  <wk@g10code.com>
307
308         * MapiGPGME.cpp (signAttachment): Simplified.
309         * engine-gpgme.c (op_sign_file): Add arg TTL.
310         (op_sign_file_ext): Removed.
311         (op_sign_file_next): Renamed to ..
312         (do_sign_file): .. this and made local.
313         (do_sign_file): Updated to use new passphrase callback
314         semantics.
315         (op_decrypt_file): Ditto.
316         (free_recipients): Need to use gpgme_key_release and not just
317         free.
318
319         * engine-gpgme.c (do_decrypt): Factored some code out to ..
320         (update_passphrase_cache): .. new.
321         (op_sign_encrypt_file): Updated to use new passphrase callback
322         semantics.
323
324         * MapiGPGME.cpp (getBody): Properly distinguish property types.
325         (delete_buf): Removed macro.  We now use malloc for the body
326         string.  Changed other places to use delete directly for clarity.
327         (fail_if_null): Removed.  Replaced by direct tests and a call to
328         out_of_core.
329         (setDefaultKey): Now use malloc/free instead of new/delete.
330         Changed at other places too.
331         (getDefaultKey): Changed to return a const char *.
332
333         * common.c (wchar_to_utf8): New.
334         (out_of_core): Made global and call abort after displaying the
335         message box.
336
337 2005-08-14  Werner Koch  <wk@g10code.com>
338
339         * MapiGPGME.cpp (log_debug_w32): New.
340         (do_log): New arg W32ERR.  Make sure to print a trailing LF.
341
342         * passphrase-dialog.c (passphrase_callback_box): Revamped.
343         (free_decrypt_key): Wipe out a passphrase.  Remove superfluous
344         variable clearing.
345         * util.h (wipememory2, wipememory): New.
346         (wipestring): New.
347         * engine-gpgme.c (op_decrypt): Renamed to ..
348         (do_decrypt): .. this and made local.
349         (clear_error_if_cancel): Removed as we inlined the code.
350         (do_decrypt): Cleaned up.
351         * main.c (DllMain): Initialize passcaching subsystem.
352         * passcache.c, passcache.h: New.
353         * intern.h: Include it here.
354         * util.h: New.
355
356         * olflange.cpp (DllRegisterServer): Remove key for the old
357         versions of this plugin.
358
359         Merged olgpgmain.dll and olgpgcore.dll into outlgpg.dll.
360         
361         * Makefile.am: Renamed target to outlgpg. Added required files.
362         * olflange.cpp, olflange.h: Renamed from GPGExch.cpp and
363         GPGExch.h.  Removed all the MFC cruft as it is not required - it
364         was only used to get hands on the hInstance of the DLL; chnaged
365         that to use the glob_hinst which gets set by DllMain.
366         * outlgpg.def: New.
367         * olflange-def.h: New.
368         * olflange-dlgs.cpp: Renamed from GPGOptionsDlgs.cpp.
369         * olflange-ids.h: Renamed from ../olflange/resource.h
370         * olflange-rsrcs.rc: Renamed from ..olflange/olgpgmaindlgs.rc and
371         stripped off unneedded stuff.
372         * olgpgcoredlgs.rc: Renamed to ..
373         * outlgpg-rsrcs.rc: .. this and stripped of cruft.
374         * olgpgcoredlgs.h: Renamed to ..
375         * outlgpg-ids.h: .. this.
376         * versioninfo.rc.in: New.
377         
378 2005-08-12  Timo Schulz  <ts@g10code.com>
379
380         * config-dialog.c (sotre_extension_value, load_extension_value):
381         Adjust registry key.
382
383 2005-08-12  Werner Koch  <wk@g10code.com>
384
385         * intern.h: Moved keycache prototypes to keycache.h.
386         * MapiGPGME.cpp (lock_log, unlock_log): New.
387         * engine-gpgme.c (op_init): Check GPGME version.
388         * main.c (outlook_gpg_get_version): Removed as it is now derived
389         from config.h.
390         (DllMain): Initializes gpgme and mapigpgme.
391         * MapiGPGME.cpp (initialize_mapi_gpgme): New.
392
393         * config-dialog.c (store_extension_value, load_extension_value):
394         Changed key to "OutlGPG".
395
396         * MapiGPGME.h (class MapiGPGME): New methods versionString and
397         showVersion.  Breaks ABI but it doesn't matter as we are also
398         going to change the name of the project.
399
400         * Makefile.am: Renamed target to olgpgcore.
401         * resource.h: Renamed to ...
402         * olgpgcoredlgs.h: .. and removed cruft from generator.
403         * gpgmedlgs.rc: Renamed to ..
404         * olgpgcoredlgs.rc: ... and removed cruft.
405         * libgpgmedlgs.def: Renamed to ..
406         * olgpgcore.def: .. this.
407         
408 2005-08-11  Werner Koch  <wk@g10code.com>
409
410         * MapiGPGME.cpp (log_debug): New.  Rewrote the whole log stuff.
411         It is not anymore per instance.
412         (logDebug): New version with va_list arg.
413
414         * MapiGPGME.cpp (passphraseCallback): Use gpgme_error_t becuase
415         C++ enforces enum types.
416
417         * engine-gpgme.c (op_lookup_keys): s/id/names/.  id is a reved
418         word Obj-C and it is good style not to use it in plain C code.
419         (op_sign_file_next): Use gpgme_passphrase_cb_t in declaration.
420         (op_decrypt_next): Ditto.
421
422         * MapiGPGME.cpp (count_recipients): Renamed from countRecipients
423         method, made local and changed both callers.
424         (log_key_info): Changed output format.  New arg PREFIX. Changed
425         callers.
426         (add_html_line_endings): Renamed from addHtmlLineEndings method
427         and made local.
428         (logDebug): Open in text mode.  Removed all superfluous "\r" from
429         callers.
430
431 2005-08-09  Timo Schulz  <ts@g10code.com>
432
433         * main.c (outlook_gpg_get_version): New.
434         Use same version as the Outlook GPG plugin.
435
436         * MapiGPGME.cpp [!__MINGW32__]: Changed sequence of include files.
437
438 2005-08-09  Werner Koch  <wk@g10code.com>
439
440         * MapiGPGME.cpp (userid_from_key, keyid_from_key): New. Changed
441         all calls to the deprecated gpgme_key_get_string_attr function by
442         these.
443
444         * MapiGPGME.h, MapiGPGME.cpp: Splitted into interace and
445         implementation.
446         * HashTable.h (class HashTable): No need to dll export anything.
447
448 2005-08-08  Werner Koch  <wk@g10code.com>
449
450         * common.c (w32_shgetfolderpath): Added.
451         * config-dialog.c (load_config_value_ext): use it here.
452
453 2005-07-21  Timo Schulz  <twoaday@g10code.com>
454
455         * MapiGPGME.cpp (decrypt): Only return if no valid PGP
456         data was found and the message has no attachments.
457         * engine-gpgme.c (op_encrypt): Use --textmode to fix 
458         problems when the recipient OS has different line endings.
459         For example Win32->Linux.
460
461 2005-07-20  Timo Schulz  <twoaday@g10code.com>
462
463         * MapiGPGME.cpp (addHtmlLineEndings): New.
464         (encrypt):Use it here.
465         (signEncrypt): Likewise. Free memory in case of errors.
466         (decrypt): Free memory in case of the verify procedure.
467         Issue a warning when the text of the mail could not be
468         updated.
469         (isMessageEncrypted): New.
470         (countAttachments): Check for null pointers.
471         (clearPassphrase): Likewise.
472         * config-dialog.c (store_config_value): Support '%val%' input.
473         * verify-dialog.c (load_akalist): Return the number of user-ids
474         which were added.
475         * passphrase-dialog.c (load_secbox): Make sure we really start
476         to add the item data at the begin.
477         * intern.h: Fixed GCC compiler problem.
478
479 2005-07-19  Timo Schulz  <twoaday@g10code.com>
480
481         * MapiGPGME.cpp (encrypt): Handle cancel.
482         (encryptAttachments): If no attachments exist, close the table.
483         (decryptAttachments): Likewise.
484         (signAttachments): Likewise.
485         (isHtmlBody): New.
486         (isHtmlMessage): New.
487         (setBody): Html support.
488         (encrypt): Figure out if message is html and encode the right body.
489         (signEncrypt): Likewise.
490         (verify): Always use the non-html body for GPG input.
491         (decrypt): Likewise.
492
493         * engine-gpgme.c (recipient_dialog_box2): Set cancel flag.
494         (op_sign_start): Handle cancel.
495         (recipient_dlg_proc): Make sure there is at least one selected
496         key. Disable armor checkbox.
497
498 2005-07-19  Timo Schulz  <twoaday@g10code.com>
499
500         * MapiGPGME.cpp (~MapiGPGME): After releasing the
501         memory, set all pointers to NULL. It seems that NT5
502         bases operating systems are more pedantic with such
503         issues than 9X based systems.
504         (freeUnknownKeys): Likewise.
505         (freeRecipients): Likewise.
506         (encrypt): Outlook 2003 returns a body string which
507         is not NULL but \0 with a length of 0. Handle it.
508         (sign): Likewise.
509         (signEncrypt): Likewise.
510
511         * engine-gpgme.c (free_recipients): New.
512         (op_encrypt_start): Handle cancel and free memory.
513
514
515 2005-07-18  Timo Schulz  <ts@g10code.com>
516
517         * gpgmedlgs.rc: Native language support for German.
518
519 2005-07-14  Timo Schulz  <ts@g10code.com>
520
521         * MapiGPGME.cpp: Add some missing MAPI constants.
522         (passphrase_callback_box): Repair cancel button.
523         (decrypt): If the user cancels the operation, do not
524         alter the message text.
525         * config-dialog.c (expand_path): New. From WinPT.
526         (load_config_value): Support for REG_EXPAND_SZ.
527         Suggested by Sebastian.
528
529 2005-07-13  Timo Schulz  <ts@g10code.de>
530
531         * MapiGPGME.cpp (sign): Ignore empty bodies.
532         (signEncrypt): Likewise. Free recipient memory.
533         (encrypt): Modify code so it really works.
534         (attachPublicKey): New.
535         * engine-gpgme.c (op_export_keys): New.
536
537 2005-07-12  Timo Schulz  <ts@g10code.de>
538
539         * MapiGPGME.cpp (displayError): New.
540         (writeOptions): Use it here. Simplify the code.
541         (signAttachments): New.
542         (sign): Sign attachments. Noted by Ralf.
543         (processAttachment): Support for sign-only.
544
545 2005-07-08  Timo Schulz  <ts@g10code.de>
546
547         * MapiGPGME.cpp (setEnableLogging): New.
548         (getEnableLogging): New.
549         (logDebug): Move all logging code to this function.
550         (readOptions): Automatically enable logging if the
551         'LogFile' registry entry is valid.
552         (prepareLogging): New.
553         (readOptions): Properly handle ""-strings.
554         * config-dialog.c (does_file_exist): Allow to have
555         parameters like '--keymanager' and cut them off before
556         checking the existence.
557         (start_key_manager): Free memory.
558         (config_dlg_proc): Initialize pointer to 'NULL'.
559         (SHFree): New. Special function to handle shell memory.
560         (get_folder): Free memory.
561         (does_folder_exist): New.
562
563 2005-07-06  Timo Schulz  <ts@g10code.de>
564
565         * MapiGPGME.cpp: s/ATTR_/ATT_.
566         (saveDecryptedAttachment): Cut off the prefix.
567         (clearConfig): New.
568         (clearObject): New.
569         (MapiGPGME): Use it here.
570
571         Use ATT_PREFIX instead of a hardcoded string.
572
573         * engine-gpgme.c
574         (op_sign_file_next): New.
575         (op_sign_file): Call op_sign_file2.
576         (op_sign_file_ext): New.        
577
578 2005-07-05  Timo Schulz  <ts@g10code.de>
579
580         * MapiGPGME.cpp (readOptions, writeOptions):
581         Support for the new 'auto sign attachment' flag.
582         (signAttachment): New.
583         (setSignAttachments): New.
584         (getSignAttachments): New.
585         * engine-gpgme.c (op_sign_file): Enable armor.
586
587 2005-07-03  Timo Schulz  <ts@g10code.com>
588
589         * MapiGPGME.cpp (processAttachment): Implement
590         the decryption part and only use it if the 'save
591         decrypted attachment' flag is set.
592         (saveDecryptedAttachment): New.
593         (writeOptions): Save 'decrypt attachment' flag.
594         (readOptions): Load it here.
595         (cleanupTempFiles): Check handle.
596         (encrypt): If the message has no body skip the
597         procedure.
598         (op_decrypt_file): Set recipient callback.
599         (decryptAttachments): We do not alter the attachment
600         so there is no need to release it again.
601
602         Replace all 'free' with 'xfree'.
603
604 2005-07-01  Timo Schulz  <ts@g10code.com>
605
606         * MapiGPGME.cpp (processAttachment): Check that
607         the file has a valid PGP extension before we try
608         to decrypt the attachment.
609         (checkAttachmentExtension): Check if the file
610         extension is a vliad PGP extension.
611
612
613 2005-06-30  Timo Schulz  <ts@g10code.com>
614
615         * MapiGPGME.cpp (processAttachment): Use a unique
616         temp name to make a cleanup at the end easier.
617         (cleanupTempFiles): Delete possible left over
618         temp files.
619         (~MapiGPGME): Use it here.
620
621 2005-06-22  Timo Schulz  <ts@g10code.com>
622
623         * MapiGPGME.cpp (processAttachment): Close attachment
624         before we delete it.
625         (streamOnFile): Directly use the attachment.
626         (streamFromFile): Likewise.
627         (closeAttachment): Renamed to..
628         (releaseAttachment): ..this.
629
630 2005-06-21  Timo Schulz  <ts@g10code.com>
631
632         * MapiGPGME.cpp (getMessageType): Support all types.
633         (streamOnFile): More straight forward now.
634         (encryptAttachments): Get the attachment table first.
635         (getAttachPathname): New.
636         (processAttachment): Add new parameter for the position
637         of the attachment.
638         (streamFromFile): New.
639         (generateTempname): New.
640         * engine-gpgme.c (op_sign_encrypt_file): New.
641
642 2005-06-17  Timo Schulz  <ts@g10code.com>
643
644         * MapiGPGME.cpp (MapiGPGME): Initialize all attachment
645         components to zero. Thanks to Sebstian for pointing this out.
646
647 2005-06-16  Timo Schulz  <ts@g10code.com>
648
649         * engine-gpgme.c (check_encrypt_result): New. Check if
650         the encrypt procedure returned some invalid recipients.
651         (op_encrypt): Use it here.
652         (op_encrypt_file): Likewise.
653         (op_sign_encrypt): Likewise.
654         * missing.h: Removed unused constants.
655         * verify-dialog.c (load_sigbox): Handle v3 RSA keys.
656         * passphrase-dialog.c (load_secbox): Make sure the index 
657         from the first loop matche the second. Which means skip
658         all invalid keys also.
659
660 2005-06-13  Timo Schulz  <ts@g10code.com>
661
662         * MapiGPGME.cpp (writeOptions): New Option 'defaultKey'.
663         (readOptions): Likewise. Force overwrite 'addDefaultKey'.       
664
665 2005-06-07  Timo Schulz  <ts@g10code.com>
666
667         * passphrase-dialog.c (decrypt_key_dlg_proc): Add a
668         reference to the key object so it will be still valid
669         after the dialog is destroyed.
670         * MapiGPGME.cpp (freeUnknownKeys): Do not try to free
671         the context if no keys are available. Fixed a segv.
672         (signEncrypt): The new code now gets a persistent pointer
673         to the key.
674         * engine-gpgme.c (op_sign_encrypt): Load the right
675         dialog to request the passphrase.
676
677 2005-06-05  Timo Schulz  <ts@g10code.com>
678
679         * passphrase-dialog.c (load_recipbox): Check ctx if null.
680         (passphrase_callback_box): Different dialogs for sign
681         and decrypt.
682         (signer_dialog_box): Do not zero the context too early.
683         * keycache.c (enum_gpg_seckeys): Also reload if ctx
684         is NULL.
685         * MapiGPGME.cpp (signEncrypt): Return if the user
686         cancelled the signer selection dialog.   
687         * recipient-dialog.c (recipient_dlg_proc): Check 'Text Mode'
688         button.
689         * keycache.c (enum_gpg_keys, enum_gpg_seckeys): Fully
690         reset the keycache initializing it again. Thanks to Ralf.
691
692 2005-06-04  Timo Schulz  <ts@g10code.com>
693
694         * verify-dialog.c (load_sigbox): Only issue a warning
695         if the key exists but is not valid.
696         Get pkalgo from the signature.
697         Fixed format string problem s/%d/%s.    
698         * config-dialog.c (load_config_value): Close reg handle.
699         (config_dlg_proc): Show error if the values could not
700         be written to the registry.
701
702 2005-06-03  Timo Schulz  <ts@g10code.com>
703
704         * mapuser.c (new_usermap): New.
705         (free_usermap): New.
706         * engine-gpgme.c (op_decrypt): Return 'No_Seckey' if
707         appropriate and not just 'Decrypt_Failed'.
708         Set the gpgme_ctx_t object in the callback to allow
709         to list the 'encrypt_to' entries.
710         * passphrase-dialog.c (decrypt_key_dlg_proc): Make sure
711         we only warn when there is a valid callback context.
712         (load_secbox): New parameter 'ctlid'. Changed all callers.
713         (load_recipbox): New. Use usermap to lookup user-id's.
714         (decrypt_key_ext_dlg_proc): New dialog procedure for
715         the callback mode.
716         * HashTable.cpp (HashTable_new): New. C-interface.
717         (HashTable_free): Likewise.
718         (HashTable_get): Likewise.
719         (HashTable_put): Likewise.
720         (HashTable_get_i): Likewise.
721         (HashTable_size): Likewise.
722
723 2005-05-29  Timo Schulz  <ts@g10code.com>
724
725         * passphrase-dialog.c (decrypt_key_dlg_proc): Warning
726         if the user cancels the signing process.
727         Make the passphrase field invisible if the key is used
728         in selection mode.
729         (recipient_dlg_proc): Likewise.
730         (signer_dialog_box): Return -1 if the user cancelled the
731         dialog.
732         * engine-gpgme.c (op_sign): Set flags to '1' to indicate
733         signing process.
734         * config-dialog.c (does_file_exist): Use appropriate
735         length for xmalloc. Noted by Sebastian.
736
737 2005-05-24  Timo Schulz  <ts@g10code.com>
738
739         * MapiGPGME.cpp (setXHeader): New.
740         (getXHeader): New.
741         * engine-gpgme.c (op_sign_file): Implemented.
742
743 2005-05-22  Timo Schulz  <ts@g10code.com>
744
745         * MapiGPGME.cpp (createAttachment): New.
746         (deleteAttachment): New.
747         (encryptAttachments): New.
748         (encrypt): Also encrypt the attachments if possible.
749         (signEncrypt): Likewise.
750         (setEncodingFormat): New.
751         (getEncodingFormat): New.
752         (readOptions, writeOptions): Store encoding format.
753         (MapiGPGME): The default encoding is 'CLASSIC'.
754
755 2005-05-21  Timo Schulz  <ts@g10code.com>
756
757         * HashTable.h: Export functions.
758         * MapiGPGME.cpp (freeAttachments): New.
759         (getAttachments): New.
760         (openAttachment): New.
761         (closeAttachment): New.
762         (processAttachment): New.
763         (hasAttachments): New.
764         (countAttachments): New.
765         (doCmdFile): New. Can handle files.
766         (doCmdAttach): New. Can handle attachment action types.
767         (signEncrypt): Release locusr key.
768         * engine-gpgme.c (op_sign_file): New. Dummy.
769         (op_sign_encrypt_file): New. Dummy.
770
771 2005-05-11  Timo Schulz  <ts@g10code.com>
772
773         * common.c (cache_item_new): New.
774         (cache_item_free): New.
775         * engine-gpgme.c (op_decrypt_start_ext): Return an cache item and
776         not just the passphrase. Changed all caller.
777         * MapiGPGME.cpp (passphraseCallback): Support caching.
778         (decrypt): Likewise.
779         (storePassphrase): Likewise.
780         (getPassphrase): Likewise.
781         * HashTable.cpp: New.
782
783 2005-05-10  Timo Schulz  <ts@g10code.com>
784
785         * passphrase-dialog.c (decrypt_key_dlg_proc): Reset 'hide state'.
786         Show some text when the user entered a wrong passphrase.
787         * MapiGPGME.cpp (findMessageWindow): New.
788         (setRTFBody): New.
789         (decrypt): Just change the window text, not the MAPI object.
790         Call verify() if this is a clearsigned message.
791         (getMessageType): New.
792         (getAttachmentExtension): New.
793         (verify): Extract text and set it.
794         * engine-gpgme.c (op_decrypt): Spawn verify dialog if the text
795         was also signed.
796         (op_decrypt_file): New.
797         * verify-dialog.c (load_sigbox): Avoid key cache and give more
798         information.    
799         * passphrase-dialog.c (decrypt_key_dlg_proc): Handle 'x' clicks.
800         * logging.c (log_debug): Disable it for release versions.
801
802 2005-05-08  Timo Schulz  <ts@g10code.com>
803
804         * MapiGPGME.cpp (readOptions): Handle logfile.
805         (writeOptions): Likewise.
806         (storePassphrase): New.
807         (clearPassphrase): New.
808         (passphraseCallback): New. Needs to be static...
809         (decrypt): Store passphrase if requested.
810         (~MapiGPGME): Free memory.
811         (streamOnFile): New.
812         (getAttachMethod): New.
813         (getAttachFilename): New.
814         (setAttachMethod): New.
815         (getAttachFilename): New.
816         (getMessageHasAttachments): New.
817         (getMessageFlags): New.
818
819         * engine-gpgme.c (op_decrypt): New. Factoured out
820         code from...
821         (op_decrypt_start): ..here. Now call op_decrypt
822         with standard parameters.
823         (op_decrypt_next): Allow to use a pre-defined 
824         passphrase callback. Needed for caching.
825
826 2005-05-02  Timo Schulz  <ts@g10code.com>
827
828         * MapiGPGME.cpp (fail_if_null, delete_buf): New
829         (doCmd): New.
830         (setBody): If the body to set is empty, do nothing.
831         (freeKeyArray): New.
832         (readOptions): New.
833         (writeOptions): New.
834         Implement all getters and setters for the config code.
835
836         * keycache.c: Now that we use a DLL, we create a
837         shared data segment for static data.
838         (load_keycache_objects): New.
839
840 2005-05-01  Timo Schulz  <ts@g10code.com>
841
842         * MapiGPGME.cpp (rtfSync): New.
843         * logging.c (log_debug): New.
844         * common.c (xfree): New.
845         * engine-gpgme.c (op_lookup_keys): Corrected offsets.
846
847 2005-04-29  Timo Schulz  <ts@g10code.com>
848
849         * engine-gpgme.c (op_encrypt_file): New.
850
851 2005-04-27  Timo Schulz  <ts@g10code.com>
852
853         * config-dialog.c (config_dialog_box): Add dialog
854         item to select a GUI key manager.
855         Check that the entered files really exist.
856         (config_dlg_proc): Likewise.
857         (does_file_exist): New.
858
859 2005-04-24  Timo Schulz  <ts@g10code.com>
860
861         * main.c (DllMain): New. With a static library it was not
862         possible to have a separate resource file. Thus we use a
863         DLL now which contains all needed dialogs.
864         * common.c (set_global_hinstance): New.
865         * libgpgmedlgs.def: New.
866
867 2005-04-18  Timo Schulz  <ts@g10code.com>
868
869         * recipient-dialog.c (recipient_dialog_box2): New
870         way to show pre-selected keys.
871         (copy_item): New paramenter for the pos.
872         (find_item): Do not select the item.
873
874         * gpgmedlgs.rc (IDD_ENC): New label to describe
875         the listbox.
876
877 2005-04-15  Timo Schulz  <ts@g10code.com>
878
879         * common.c (xmalloc, xcalloc, xstrdup): New.
880         (out_of_core): New.
881         * recipient-dialog.c (initialize_keybox): New.
882         (find_item): New.
883         * MapiGPGME.cpp (freeUnknownKeys): New.
884         (signEncrypt): Show dialog to select a key if no
885         default key was set.
886
887         * Replace all std-c alloc functions with x equivalents.
888
889 2005-04-13  Timo Schulz  <ts@g10code.com>
890
891         * engine-gpgme.c (do_init): Alloc keycache objects.
892         (do_deinit): Cleanup the mess.
893         (op_lookup_keys): New. Allow to find keys via the email.
894
895         * GPGME.cpp (MapiGPGME): New. MAPI interface.
896
897 2005-04-07  Timo Schulz  <ts@g10code.com>
898
899         * verify-dialog.c (load_akalist): New.
900         (load_sigbox): Handle bad signatures.
901         * keycache.c (enum_gpg_keys): Allow to reset the
902         enum context.
903         * config-dialog.c (get_open_file_name): Use MAX_PATH.
904         (get_folder): Likewise.
905         * recipient-dialog.c (load_rsetbox): Modify code to
906         add the last keycache item.
907         * passphrase-dialog.c (load_secbox): Likewise.