annotate src/readpst.c @ 359:a3e674fade6c

From Jeffrey Morlan: pst_parse_block misreads Table Contexts (aka "type 2") with a multi-block Row Matrix ("ind2"). Rows are never split between blocks - every block except the last has padding at the end which should be ignored. I've only seen this affect the recipients table, but presumably it could affect attachments too. This was causing out-of-bounds memory ranges to be returned from pst_getBlockOffset and later access; patch fixes both the table reading issue and adds a missing bounds check to pst_getBlockOffset (so as not to risk a segfault if the PST is corrupted).
author Carl Byington <carl@five-ten-sg.com>
date Wed, 06 Jul 2016 10:20:12 -0700
parents 6abc3054cba2
children 3a1d25c579c6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
1 /***
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
2 * readpst.c
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
3 * Part of the LibPST project
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
4 * Written by David Smith
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
5 * dave.s@earthcorp.com
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
6 */
59
7d5c637aaafb General cleanup and code fixes.
Carl Byington <carl@five-ten-sg.com>
parents: 52
diff changeset
7
122
bdb38b434c0a more changes from Fridrich Strba to avoid installing our config.h
Carl Byington <carl@five-ten-sg.com>
parents: 121
diff changeset
8 #include "define.h"
bdb38b434c0a more changes from Fridrich Strba to avoid installing our config.h
Carl Byington <carl@five-ten-sg.com>
parents: 121
diff changeset
9 #include "lzfu.h"
308
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
10 #include "msg.h"
122
bdb38b434c0a more changes from Fridrich Strba to avoid installing our config.h
Carl Byington <carl@five-ten-sg.com>
parents: 121
diff changeset
11
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
12 #define OUTPUT_TEMPLATE "%s"
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
13 #define OUTPUT_KMAIL_DIR_TEMPLATE ".%s.directory"
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
14 #define KMAIL_INDEX ".%s.index"
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
15 #define SEP_MAIL_FILE_TEMPLATE "%i%s"
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
17 // max size of the c_time char*. It will store the date of the email
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
18 #define C_TIME_SIZE 500
59
7d5c637aaafb General cleanup and code fixes.
Carl Byington <carl@five-ten-sg.com>
parents: 52
diff changeset
19
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
20 struct file_ll {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
21 char *name;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
22 char *dname;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
23 FILE * output;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
24 int32_t stored_count;
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
25 int32_t item_count;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
26 int32_t skip_count;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
27 int32_t type;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
28 };
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
29
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
30 int grim_reaper();
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
31 pid_t try_fork(char* folder);
186
0a4f7ecd7452 more cleanup of external names in the shared library
Carl Byington <carl@five-ten-sg.com>
parents: 182
diff changeset
32 void process(pst_item *outeritem, pst_desc_tree *d_ptr);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
33 void write_email_body(FILE *f, char *body);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
34 void removeCR(char *c);
118
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 116
diff changeset
35 void usage();
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 116
diff changeset
36 void version();
154
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
37 char* mk_kmail_dir(char* fname);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
38 int close_kmail_dir();
154
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
39 char* mk_recurse_dir(char* dir, int32_t folder_type);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
40 int close_recurse_dir();
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
41 char* mk_separate_dir(char *dir);
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
42 int close_separate_dir();
316
c4537664ff50 merge .msg generation code
Carl Byington <carl@five-ten-sg.com>
parents: 304 313
diff changeset
43 void mk_separate_file(struct file_ll *f, char *extension, int openit);
291
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
44 void close_separate_file(struct file_ll *f);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
45 char* my_stristr(char *haystack, char *needle);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
46 void check_filename(char *fname);
328
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
47 int acceptable_ext(pst_item_attach* attach);
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
48 void write_separate_attachment(char f_name[], pst_item_attach* attach, int attach_num, pst_file* pst);
300
47abe56076da embedded rfc822 messages might contain rtf encoded bodies
Carl Byington <carl@five-ten-sg.com>
parents: 298
diff changeset
49 void write_embedded_message(FILE* f_output, pst_item_attach* attach, char *boundary, pst_file* pf, int save_rtf, char** extra_mime_headers);
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
50 void write_inline_attachment(FILE* f_output, pst_item_attach* attach, char *boundary, pst_file* pst);
277
86078d0c2e9c ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 276
diff changeset
51 int valid_headers(char *header);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
52 void header_has_field(char *header, char *field, int *flag);
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
53 void header_get_subfield(char *field, const char *subfield, char *body_subfield, size_t size_subfield);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
54 char* header_get_field(char *header, char *field);
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
55 char* header_end_field(char *field);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
56 void header_strip_field(char *header, char *field);
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
57 int test_base64(char *body, size_t len);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
58 void find_html_charset(char *html, char *charset, size_t charsetlen);
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
59 void find_rfc822_headers(char** extra_mime_headers);
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
60 void write_body_part(FILE* f_output, pst_string *body, char *mime, char *charset, char *boundary, pst_file* pst);
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
61 void write_schedule_part_data(FILE* f_output, pst_item* item, const char* sender, const char* method);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
62 void write_schedule_part(FILE* f_output, pst_item* item, const char* sender, const char* boundary);
323
2474d01043cd fix From quoting on embedded rfc/822 messages
Carl Byington <carl@five-ten-sg.com>
parents: 316
diff changeset
63 void write_normal_email(FILE* f_output, char f_name[], pst_item* item, int mode, int mode_MH, pst_file* pst, int save_rtf, int embedding, char** extra_mime_headers);
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
64 void write_vcard(FILE* f_output, pst_item *item, pst_item_contact* contact, char comment[]);
242
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
65 int write_extra_categories(FILE* f_output, pst_item* item);
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
66 void write_journal(FILE* f_output, pst_item* item);
242
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
67 void write_appointment(FILE* f_output, pst_item *item);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
68 void create_enter_dir(struct file_ll* f, pst_item *item);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
69 void close_enter_dir(struct file_ll *f);
34
07177825c91b fix signed/unsigned to allow very small pst files with only leaf nodes
carl
parents: 33
diff changeset
70
118
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 116
diff changeset
71 const char* prog_name;
34
07177825c91b fix signed/unsigned to allow very small pst files with only leaf nodes
carl
parents: 33
diff changeset
72 char* output_dir = ".";
07177825c91b fix signed/unsigned to allow very small pst files with only leaf nodes
carl
parents: 33
diff changeset
73 char* kmail_chdir = NULL;
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
74
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
75 // Normal mode just creates mbox format files in the current directory. Each file is named
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
76 // the same as the folder's name that it represents
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
77 #define MODE_NORMAL 0
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
78
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
79 // KMail mode creates a directory structure suitable for being used directly
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
80 // by the KMail application
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
81 #define MODE_KMAIL 1
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
82
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
83 // recurse mode creates a directory structure like the PST file. Each directory
254
fb66d428347d switch to mboxrd quoting
Carl Byington <carl@five-ten-sg.com>
parents: 247
diff changeset
84 // contains only one file which stores the emails in mboxrd format.
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
85 #define MODE_RECURSE 2
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
86
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
87 // separate mode creates the same directory structure as recurse. The emails are stored in
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
88 // separate files, numbering from 1 upward. Attachments belonging to the emails are
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
89 // saved as email_no-filename (e.g. 1-samplefile.doc or 1-Attachment2.zip)
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
90 #define MODE_SEPARATE 3
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
91
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
92
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
93 // Output Normal just prints the standard information about what is going on
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
94 #define OUTPUT_NORMAL 0
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
95
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
96 // Output Quiet is provided so that only errors are printed
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
97 #define OUTPUT_QUIET 1
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
98
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
99 // default mime-type for attachments that have a null mime-type
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
100 #define MIME_TYPE_DEFAULT "application/octet-stream"
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
101 #define RFC822 "message/rfc822"
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
102
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
103 // output mode for contacts
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
104 #define CMODE_VCARD 0
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
105 #define CMODE_LIST 1
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
106
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
107 // output mode for deleted items
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
108 #define DMODE_EXCLUDE 0
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
109 #define DMODE_INCLUDE 1
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
110
230
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
111 // Output type mode flags
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
112 #define OTMODE_EMAIL 1
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
113 #define OTMODE_APPOINTMENT 2
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
114 #define OTMODE_JOURNAL 4
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
115 #define OTMODE_CONTACT 8
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
116
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
117 // output settings for RTF bodies
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
118 // filename for the attachment
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
119 #define RTF_ATTACH_NAME "rtf-body.rtf"
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
120 // mime type for the attachment
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
121 #define RTF_ATTACH_TYPE "application/rtf"
34
07177825c91b fix signed/unsigned to allow very small pst files with only leaf nodes
carl
parents: 33
diff changeset
122
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
123 // global settings
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
124 int mode = MODE_NORMAL;
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
125 int mode_MH = 0; // a submode of MODE_SEPARATE
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
126 int mode_EX = 0; // a submode of MODE_SEPARATE
308
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
127 int mode_MSG = 0; // a submode of MODE_SEPARATE
231
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
128 int mode_thunder = 0; // a submode of MODE_RECURSE
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
129 int output_mode = OUTPUT_NORMAL;
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
130 int contact_mode = CMODE_VCARD;
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
131 int deleted_mode = DMODE_EXCLUDE;
230
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
132 int output_type_mode = 0xff; // Default to all.
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
133 int contact_mode_specified = 0;
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
134 int overwrite = 0;
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
135 int prefer_utf8 = 0;
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
136 int save_rtf_body = 1;
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
137 int file_name_len = 10; // enough room for MODE_SPEARATE file name
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
138 pst_file pstfile;
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
139 regex_t meta_charset_pattern;
298
201464dd356e add default character set for items where the pst file does not specify a character set
Carl Byington <carl@five-ten-sg.com>
parents: 297
diff changeset
140 char* default_charset = NULL;
328
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
141 char* acceptable_extensions = NULL;
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
142
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
143 int number_processors = 1; // number of cpus we have
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
144 int max_children = 0; // based on number of cpus and command line args
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
145 int max_child_specified = 0;// have command line arg -j
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
146 int active_children; // number of children of this process, cannot be larger than max_children
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
147 pid_t* child_processes; // setup by main(), and at the start of new child process
200
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
148
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
149 #ifdef HAVE_SEMAPHORE_H
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
150 int shared_memory_id;
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
151 sem_t* global_children = NULL;
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
152 sem_t* output_mutex = NULL;
200
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
153 #endif
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
154
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
155
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
156 int grim_reaper(int waitall)
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
157 {
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
158 int available = 0;
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
159 #ifdef HAVE_FORK
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
160 #ifdef HAVE_SEMAPHORE_H
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
161 if (global_children) {
288
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
162 //sem_getvalue(global_children, &available);
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
163 //printf("grim reaper %s for pid %d (parent %d) with %d children, %d available\n", (waitall) ? "all" : "", getpid(), getppid(), active_children, available);
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
164 //fflush(stdout);
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
165 int i,j;
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
166 for (i=0; i<active_children; i++) {
258
8ad8fd1c5451 check return codes from forked processes
Carl Byington <carl@five-ten-sg.com>
parents: 257
diff changeset
167 int status;
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
168 pid_t child = child_processes[i];
258
8ad8fd1c5451 check return codes from forked processes
Carl Byington <carl@five-ten-sg.com>
parents: 257
diff changeset
169 pid_t ch = waitpid(child, &status, ((waitall) ? 0 : WNOHANG));
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
170 if (ch == child) {
258
8ad8fd1c5451 check return codes from forked processes
Carl Byington <carl@five-ten-sg.com>
parents: 257
diff changeset
171 // check termination status
259
78e95fab9a8b add some debug checking for process exit status
Carl Byington <carl@five-ten-sg.com>
parents: 258
diff changeset
172 //if (WIFEXITED(status)) {
78e95fab9a8b add some debug checking for process exit status
Carl Byington <carl@five-ten-sg.com>
parents: 258
diff changeset
173 // int ext = WEXITSTATUS(status);
78e95fab9a8b add some debug checking for process exit status
Carl Byington <carl@five-ten-sg.com>
parents: 258
diff changeset
174 // printf("Process %d exited with status %d\n", child, ext);
78e95fab9a8b add some debug checking for process exit status
Carl Byington <carl@five-ten-sg.com>
parents: 258
diff changeset
175 // fflush(stdout);
78e95fab9a8b add some debug checking for process exit status
Carl Byington <carl@five-ten-sg.com>
parents: 258
diff changeset
176 //}
258
8ad8fd1c5451 check return codes from forked processes
Carl Byington <carl@five-ten-sg.com>
parents: 257
diff changeset
177 if (WIFSIGNALED(status)) {
8ad8fd1c5451 check return codes from forked processes
Carl Byington <carl@five-ten-sg.com>
parents: 257
diff changeset
178 int sig = WTERMSIG(status);
8ad8fd1c5451 check return codes from forked processes
Carl Byington <carl@five-ten-sg.com>
parents: 257
diff changeset
179 DEBUG_INFO(("Process %d terminated with signal %d\n", child, sig));
259
78e95fab9a8b add some debug checking for process exit status
Carl Byington <carl@five-ten-sg.com>
parents: 258
diff changeset
180 //printf("Process %d terminated with signal %d\n", child, sig);
78e95fab9a8b add some debug checking for process exit status
Carl Byington <carl@five-ten-sg.com>
parents: 258
diff changeset
181 //fflush(stdout);
258
8ad8fd1c5451 check return codes from forked processes
Carl Byington <carl@five-ten-sg.com>
parents: 257
diff changeset
182 }
358
6abc3054cba2 From Jeffrey Morlan:
Carl Byington <carl@five-ten-sg.com>
parents: 357
diff changeset
183 if (status != 0) {
6abc3054cba2 From Jeffrey Morlan:
Carl Byington <carl@five-ten-sg.com>
parents: 357
diff changeset
184 exit(status);
6abc3054cba2 From Jeffrey Morlan:
Carl Byington <carl@five-ten-sg.com>
parents: 357
diff changeset
185 }
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
186 // this has terminated, remove it from the list
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
187 for (j=i; j<active_children-1; j++) {
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
188 child_processes[j] = child_processes[j+1];
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
189 }
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
190 active_children--;
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
191 i--;
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
192 }
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
193 }
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
194 sem_getvalue(global_children, &available);
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
195 //printf("grim reaper %s for pid %d with %d children, %d available\n", (waitall) ? "all" : "", getpid(), active_children, available);
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
196 //fflush(stdout);
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
197 }
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
198 #endif
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
199 #endif
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
200 return available;
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
201 }
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
202
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
203
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
204 pid_t try_fork(char *folder)
200
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
205 {
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
206 #ifdef HAVE_FORK
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
207 #ifdef HAVE_SEMAPHORE_H
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
208 int available = grim_reaper(0);
357
544d57fe6bc6 From Jeffrey Morlan:
Carl Byington <carl@five-ten-sg.com>
parents: 354
diff changeset
209 // If children have called sem_post but not exited yet, we could have available > 0 but active_children == max_children
544d57fe6bc6 From Jeffrey Morlan:
Carl Byington <carl@five-ten-sg.com>
parents: 354
diff changeset
210 if (available && active_children < max_children) {
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
211 sem_wait(global_children);
200
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
212 pid_t child = fork();
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
213 if (child < 0) {
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
214 // fork failed, pretend it worked and we are the child
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
215 return 0;
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
216 }
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
217 else if (child == 0) {
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
218 // fork worked, and we are the child, reinitialize *our* list of children
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
219 active_children = 0;
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
220 memset(child_processes, 0, sizeof(pid_t) * max_children);
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
221 pst_reopen(&pstfile); // close and reopen the pst file to get an independent file position pointer
200
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
222 }
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
223 else {
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
224 // fork worked, and we are the parent, record this child that we need to wait for
205
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
225 //pid_t me = getpid();
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
226 //printf("parent %d forked child pid %d to process folder %s\n", me, child, folder);
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
227 //fflush(stdout);
200
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
228 child_processes[active_children++] = child;
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
229 }
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
230 return child;
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
231 }
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
232 else {
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
233 return 0; // pretend to have forked and we are the child
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
234 }
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
235 #endif
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
236 #endif
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
237 return 0;
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
238 }
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
239
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
240
186
0a4f7ecd7452 more cleanup of external names in the shared library
Carl Byington <carl@five-ten-sg.com>
parents: 182
diff changeset
241 void process(pst_item *outeritem, pst_desc_tree *d_ptr)
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
242 {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
243 struct file_ll ff;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
244 pst_item *item = NULL;
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
245
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
246 DEBUG_ENT("process");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
247 memset(&ff, 0, sizeof(ff));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
248 create_enter_dir(&ff, outeritem);
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
249
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
250 for (; d_ptr; d_ptr = d_ptr->next) {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
251 DEBUG_INFO(("New item record\n"));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
252 if (!d_ptr->desc) {
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
253 ff.skip_count++;
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
254 DEBUG_WARN(("ERROR item's desc record is NULL\n"));
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
255 continue;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
256 }
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
257 DEBUG_INFO(("Desc Email ID %#"PRIx64" [d_ptr->d_id = %#"PRIx64"]\n", d_ptr->desc->i_id, d_ptr->d_id));
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
258
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
259 item = pst_parse_item(&pstfile, d_ptr, NULL);
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
260 DEBUG_INFO(("About to process item\n"));
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
261
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
262 if (!item) {
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
263 ff.skip_count++;
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
264 DEBUG_INFO(("A NULL item was seen\n"));
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
265 continue;
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
266 }
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
267
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
268 if (item->subject.str) {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
269 DEBUG_INFO(("item->subject = %s\n", item->subject.str));
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
270 }
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
271
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
272 if (item->folder && item->file_as.str) {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
273 DEBUG_INFO(("Processing Folder \"%s\"\n", item->file_as.str));
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
274 if (output_mode != OUTPUT_QUIET) {
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
275 pst_debug_lock();
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
276 printf("Processing Folder \"%s\"\n", item->file_as.str);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
277 fflush(stdout);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
278 pst_debug_unlock();
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
279 }
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
280 ff.item_count++;
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
281 if (d_ptr->child && (deleted_mode == DMODE_INCLUDE || strcasecmp(item->file_as.str, "Deleted Items"))) {
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
282 //if this is a non-empty folder other than deleted items, we want to recurse into it
200
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
283 pid_t parent = getpid();
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
284 pid_t child = try_fork(item->file_as.str);
200
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
285 if (child == 0) {
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
286 // we are the child process, or the original parent if no children were available
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
287 pid_t me = getpid();
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
288 process(item, d_ptr->child);
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
289 #ifdef HAVE_FORK
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
290 #ifdef HAVE_SEMAPHORE_H
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
291 if (me != parent) {
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
292 // we really were a child, forked for the sole purpose of processing this folder
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
293 // free my child count slot before really exiting, since
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
294 // all I am doing here is waiting for my children to exit
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
295 sem_post(global_children);
200
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
296 grim_reaper(1); // wait for all my child processes to exit
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
297 exit(0); // really exit
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
298 }
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
299 #endif
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
300 #endif
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
301 }
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
302 }
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
303
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
304 } else if (item->contact && (item->type == PST_TYPE_CONTACT)) {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
305 DEBUG_INFO(("Processing Contact\n"));
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
306 if (!(output_type_mode & OTMODE_CONTACT)) {
230
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
307 ff.skip_count++;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
308 DEBUG_INFO(("skipping contact: not in output type list\n"));
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
309 }
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
310 else {
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
311 if (!ff.type) ff.type = item->type;
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
312 if ((ff.type != PST_TYPE_CONTACT) && (mode != MODE_SEPARATE)) {
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
313 ff.skip_count++;
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
314 DEBUG_INFO(("I have a contact, but the folder type %"PRIi32" isn't a contacts folder. Skipping it\n", ff.type));
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
315 }
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
316 else {
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
317 ff.item_count++;
308
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
318 if (mode == MODE_SEPARATE) mk_separate_file(&ff, (mode_EX) ? ".vcf" : "", 1);
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
319 if (contact_mode == CMODE_VCARD) {
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
320 pst_convert_utf8_null(item, &item->comment);
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
321 write_vcard(ff.output, item, item->contact, item->comment.str);
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
322 }
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
323 else {
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
324 pst_convert_utf8(item, &item->contact->fullname);
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
325 pst_convert_utf8(item, &item->contact->address1);
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
326 fprintf(ff.output, "%s <%s>\n", item->contact->fullname.str, item->contact->address1.str);
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
327 }
291
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
328 if (mode == MODE_SEPARATE) close_separate_file(&ff);
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
329 }
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
330 }
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
331
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
332 } else if (item->email && ((item->type == PST_TYPE_NOTE) || (item->type == PST_TYPE_SCHEDULE) || (item->type == PST_TYPE_REPORT))) {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
333 DEBUG_INFO(("Processing Email\n"));
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
334 if (!(output_type_mode & OTMODE_EMAIL)) {
230
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
335 ff.skip_count++;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
336 DEBUG_INFO(("skipping email: not in output type list\n"));
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
337 }
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
338 else {
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
339 if (!ff.type) ff.type = item->type;
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
340 if ((ff.type != PST_TYPE_NOTE) && (ff.type != PST_TYPE_SCHEDULE) && (ff.type != PST_TYPE_REPORT) && (mode != MODE_SEPARATE)) {
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
341 ff.skip_count++;
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
342 DEBUG_INFO(("I have an email type %"PRIi32", but the folder type %"PRIi32" isn't an email folder. Skipping it\n", item->type, ff.type));
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
343 }
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
344 else {
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
345 char *extra_mime_headers = NULL;
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
346 ff.item_count++;
288
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
347 if (mode == MODE_SEPARATE) {
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
348 // process this single email message, possibly forking
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
349 pid_t parent = getpid();
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
350 pid_t child = try_fork(item->file_as.str);
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
351 if (child == 0) {
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
352 // we are the child process, or the original parent if no children were available
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
353 pid_t me = getpid();
316
c4537664ff50 merge .msg generation code
Carl Byington <carl@five-ten-sg.com>
parents: 304 313
diff changeset
354 mk_separate_file(&ff, (mode_EX) ? ".eml" : "", 1);
323
2474d01043cd fix From quoting on embedded rfc/822 messages
Carl Byington <carl@five-ten-sg.com>
parents: 316
diff changeset
355 write_normal_email(ff.output, ff.name, item, mode, mode_MH, &pstfile, save_rtf_body, 0, &extra_mime_headers);
291
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
356 close_separate_file(&ff);
316
c4537664ff50 merge .msg generation code
Carl Byington <carl@five-ten-sg.com>
parents: 304 313
diff changeset
357 if (mode_MSG) {
c4537664ff50 merge .msg generation code
Carl Byington <carl@five-ten-sg.com>
parents: 304 313
diff changeset
358 mk_separate_file(&ff, ".msg", 0);
c4537664ff50 merge .msg generation code
Carl Byington <carl@five-ten-sg.com>
parents: 304 313
diff changeset
359 write_msg_email(ff.name, item, &pstfile);
c4537664ff50 merge .msg generation code
Carl Byington <carl@five-ten-sg.com>
parents: 304 313
diff changeset
360 }
288
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
361 #ifdef HAVE_FORK
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
362 #ifdef HAVE_SEMAPHORE_H
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
363 if (me != parent) {
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
364 // we really were a child, forked for the sole purpose of processing this message
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
365 // free my child count slot before really exiting, since
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
366 // all I am doing here is waiting for my children to exit
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
367 sem_post(global_children);
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
368 grim_reaper(1); // wait for all my child processes to exit - there should not be any
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
369 exit(0); // really exit
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
370 }
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
371 #endif
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
372 #endif
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
373 }
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
374 }
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
375 else {
fa7fc1ac6385 add gprof profiling option; allow fork for parallel processing of individual email folders in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 285
diff changeset
376 // process this single email message, cannot fork since not separate mode
323
2474d01043cd fix From quoting on embedded rfc/822 messages
Carl Byington <carl@five-ten-sg.com>
parents: 316
diff changeset
377 write_normal_email(ff.output, ff.name, item, mode, mode_MH, &pstfile, save_rtf_body, 0, &extra_mime_headers);
308
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
378 }
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
379 }
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
380 }
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
381
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
382 } else if (item->journal && (item->type == PST_TYPE_JOURNAL)) {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
383 DEBUG_INFO(("Processing Journal Entry\n"));
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
384 if (!(output_type_mode & OTMODE_JOURNAL)) {
230
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
385 ff.skip_count++;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
386 DEBUG_INFO(("skipping journal entry: not in output type list\n"));
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
387 }
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
388 else {
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
389 if (!ff.type) ff.type = item->type;
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
390 if ((ff.type != PST_TYPE_JOURNAL) && (mode != MODE_SEPARATE)) {
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
391 ff.skip_count++;
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
392 DEBUG_INFO(("I have a journal entry, but the folder type %"PRIi32" isn't a journal folder. Skipping it\n", ff.type));
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
393 }
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
394 else {
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
395 ff.item_count++;
308
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
396 if (mode == MODE_SEPARATE) mk_separate_file(&ff, (mode_EX) ? ".ics" : "", 1);
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
397 write_journal(ff.output, item);
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
398 fprintf(ff.output, "\n");
291
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
399 if (mode == MODE_SEPARATE) close_separate_file(&ff);
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
400 }
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
401 }
79
56fa05fd5271 Patch from Robert Simpson for encryption type 2.
Carl Byington <carl@five-ten-sg.com>
parents: 77
diff changeset
402
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
403 } else if (item->appointment && (item->type == PST_TYPE_APPOINTMENT)) {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
404 DEBUG_INFO(("Processing Appointment Entry\n"));
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
405 if (!(output_type_mode & OTMODE_APPOINTMENT)) {
230
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
406 ff.skip_count++;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
407 DEBUG_INFO(("skipping appointment: not in output type list\n"));
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
408 }
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
409 else {
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
410 if (!ff.type) ff.type = item->type;
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
411 if ((ff.type != PST_TYPE_APPOINTMENT) && (mode != MODE_SEPARATE)) {
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
412 ff.skip_count++;
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
413 DEBUG_INFO(("I have an appointment, but the folder type %"PRIi32" isn't an appointment folder. Skipping it\n", ff.type));
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
414 }
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
415 else {
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
416 ff.item_count++;
308
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
417 if (mode == MODE_SEPARATE) mk_separate_file(&ff, (mode_EX) ? ".ics" : "", 1);
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
418 write_schedule_part_data(ff.output, item, NULL, NULL);
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
419 fprintf(ff.output, "\n");
291
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
420 if (mode == MODE_SEPARATE) close_separate_file(&ff);
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
421 }
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
422 }
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
423
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
424 } else if (item->message_store) {
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
425 // there should only be one message_store, and we have already done it
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
426 ff.skip_count++;
350
7a91e30826d8 Hans Liss - debug level output
Carl Byington <carl@five-ten-sg.com>
parents: 349
diff changeset
427 DEBUG_WARN(("item with message store content, type %i %s folder type %i, skipping it\n", item->type, item->ascii_type, ff.type));
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
428
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
429 } else {
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
430 ff.skip_count++;
350
7a91e30826d8 Hans Liss - debug level output
Carl Byington <carl@five-ten-sg.com>
parents: 349
diff changeset
431 DEBUG_WARN(("Unknown item type %i (%s) name (%s)\n",
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
432 item->type, item->ascii_type, item->file_as.str));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
433 }
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
434 pst_freeItem(item);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
435 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
436 close_enter_dir(&ff);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
437 DEBUG_RET();
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
438 }
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
439
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
440
34
07177825c91b fix signed/unsigned to allow very small pst files with only leaf nodes
carl
parents: 33
diff changeset
441
118
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 116
diff changeset
442 int main(int argc, char* const* argv) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
443 pst_item *item = NULL;
186
0a4f7ecd7452 more cleanup of external names in the shared library
Carl Byington <carl@five-ten-sg.com>
parents: 182
diff changeset
444 pst_desc_tree *d_ptr;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
445 char * fname = NULL;
48
f66078abed38 more fixes for 64 bit format
carl
parents: 46
diff changeset
446 char *d_log = NULL;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
447 int c,x;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
448 char *temp = NULL; //temporary char pointer
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
449 prog_name = argv[0];
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
450
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
451 time_t now = time(NULL);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
452 srand((unsigned)now);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
453
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
454 if (regcomp(&meta_charset_pattern, "<meta[^>]*content=\"[^>]*charset=([^>\";]*)[\";]", REG_ICASE | REG_EXTENDED)) {
123
ab2a11e72250 more cleanup of #include files.
Carl Byington <carl@five-ten-sg.com>
parents: 122
diff changeset
455 printf("cannot compile regex pattern to find content charset in html bodies\n");
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
456 exit(3);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
457 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
458
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
459 // command-line option handling
350
7a91e30826d8 Hans Liss - debug level output
Carl Byington <carl@five-ten-sg.com>
parents: 349
diff changeset
460 while ((c = getopt(argc, argv, "a:bC:c:Dd:emhj:kMo:qrSt:uVwL:8"))!= -1) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
461 switch (c) {
328
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
462 case 'a':
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
463 if (optarg) {
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
464 int n = strlen(optarg);
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
465 acceptable_extensions = (char*)pst_malloc(n+2);
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
466 strcpy(acceptable_extensions, optarg);
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
467 acceptable_extensions[n+1] = '\0'; // double null terminates array of non-empty null terminated strings.
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
468 char *p = acceptable_extensions;
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
469 while (*p) {
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
470 if (*p == ',') *p = '\0';
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
471 p++;
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
472 }
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
473 }
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
474 break;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
475 case 'b':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
476 save_rtf_body = 0;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
477 break;
298
201464dd356e add default character set for items where the pst file does not specify a character set
Carl Byington <carl@five-ten-sg.com>
parents: 297
diff changeset
478 case 'C':
201464dd356e add default character set for items where the pst file does not specify a character set
Carl Byington <carl@five-ten-sg.com>
parents: 297
diff changeset
479 if (optarg) {
201464dd356e add default character set for items where the pst file does not specify a character set
Carl Byington <carl@five-ten-sg.com>
parents: 297
diff changeset
480 default_charset = optarg;
201464dd356e add default character set for items where the pst file does not specify a character set
Carl Byington <carl@five-ten-sg.com>
parents: 297
diff changeset
481 }
201464dd356e add default character set for items where the pst file does not specify a character set
Carl Byington <carl@five-ten-sg.com>
parents: 297
diff changeset
482 else {
201464dd356e add default character set for items where the pst file does not specify a character set
Carl Byington <carl@five-ten-sg.com>
parents: 297
diff changeset
483 usage();
201464dd356e add default character set for items where the pst file does not specify a character set
Carl Byington <carl@five-ten-sg.com>
parents: 297
diff changeset
484 exit(0);
201464dd356e add default character set for items where the pst file does not specify a character set
Carl Byington <carl@five-ten-sg.com>
parents: 297
diff changeset
485 }
201464dd356e add default character set for items where the pst file does not specify a character set
Carl Byington <carl@five-ten-sg.com>
parents: 297
diff changeset
486 break;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
487 case 'c':
154
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
488 if (optarg && optarg[0]=='v') {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
489 contact_mode=CMODE_VCARD;
154
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
490 contact_mode_specified = 1;
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
491 }
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
492 else if (optarg && optarg[0]=='l') {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
493 contact_mode=CMODE_LIST;
154
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
494 contact_mode_specified = 1;
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
495 }
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
496 else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
497 usage();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
498 exit(0);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
499 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
500 break;
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
501 case 'D':
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
502 deleted_mode = DMODE_INCLUDE;
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
503 break;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
504 case 'd':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
505 d_log = optarg;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
506 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
507 case 'h':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
508 usage();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
509 exit(0);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
510 break;
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
511 case 'j':
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
512 max_children = atoi(optarg);
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
513 max_child_specified = 1;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
514 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
515 case 'k':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
516 mode = MODE_KMAIL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
517 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
518 case 'M':
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
519 mode = MODE_SEPARATE;
308
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
520 mode_MH = 1;
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
521 mode_EX = 0;
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
522 mode_MSG = 0;
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
523 break;
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
524 case 'e':
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
525 mode = MODE_SEPARATE;
308
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
526 mode_MH = 1;
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
527 mode_EX = 1;
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
528 mode_MSG = 0;
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
529 file_name_len = 14;
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
530 break;
350
7a91e30826d8 Hans Liss - debug level output
Carl Byington <carl@five-ten-sg.com>
parents: 349
diff changeset
531 case 'L':
7a91e30826d8 Hans Liss - debug level output
Carl Byington <carl@five-ten-sg.com>
parents: 349
diff changeset
532 pst_debug_setlevel(atoi(optarg));
7a91e30826d8 Hans Liss - debug level output
Carl Byington <carl@five-ten-sg.com>
parents: 349
diff changeset
533 break;
308
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
534 case 'm':
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
535 mode = MODE_SEPARATE;
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
536 mode_MH = 1;
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
537 mode_EX = 1;
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
538 mode_MSG = 1;
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
539 file_name_len = 14;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
540 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
541 case 'o':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
542 output_dir = optarg;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
543 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
544 case 'q':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
545 output_mode = OUTPUT_QUIET;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
546 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
547 case 'r':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
548 mode = MODE_RECURSE;
231
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
549 mode_thunder = 0;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
550 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
551 case 'S':
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
552 mode = MODE_SEPARATE;
308
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
553 mode_MH = 0;
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
554 mode_EX = 0;
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
555 mode_MSG = 0;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
556 break;
230
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
557 case 't':
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
558 // email, appointment, contact, other
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
559 if (!optarg) {
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
560 usage();
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
561 exit(0);
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
562 }
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
563 temp = optarg;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
564 output_type_mode = 0;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
565 while (*temp > 0) {
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
566 switch (temp[0]) {
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
567 case 'e':
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
568 output_type_mode |= OTMODE_EMAIL;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
569 break;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
570 case 'a':
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
571 output_type_mode |= OTMODE_APPOINTMENT;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
572 break;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
573 case 'j':
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
574 output_type_mode |= OTMODE_JOURNAL;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
575 break;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
576 case 'c':
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
577 output_type_mode |= OTMODE_CONTACT;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
578 break;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
579 default:
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
580 usage();
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
581 exit(0);
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
582 break;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
583 }
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
584 temp++;
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
585 }
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
586 break;
231
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
587 case 'u':
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
588 mode = MODE_RECURSE;
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
589 mode_thunder = 1;
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
590 break;
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
591 case 'V':
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
592 version();
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
593 exit(0);
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
594 break;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
595 case 'w':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
596 overwrite = 1;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
597 break;
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
598 case '8':
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
599 prefer_utf8 = 1;
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
600 break;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
601 default:
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
602 usage();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
603 exit(1);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
604 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
605 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
606 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
607
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
608 if (argc > optind) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
609 fname = argv[optind];
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
610 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
611 usage();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
612 exit(2);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
613 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
614
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
615 #ifdef _SC_NPROCESSORS_ONLN
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
616 number_processors = sysconf(_SC_NPROCESSORS_ONLN);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
617 #endif
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
618 max_children = (max_child_specified) ? max_children : number_processors * 4;
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
619 active_children = 0;
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
620 child_processes = (pid_t *)pst_malloc(sizeof(pid_t) * max_children);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
621 memset(child_processes, 0, sizeof(pid_t) * max_children);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
622
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
623 #ifdef HAVE_SEMAPHORE_H
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
624 if (max_children) {
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
625 shared_memory_id = shmget(IPC_PRIVATE, sizeof(sem_t)*2, 0777);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
626 if (shared_memory_id >= 0) {
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
627 global_children = (sem_t *)shmat(shared_memory_id, NULL, 0);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
628 if (global_children == (sem_t *)-1) global_children = NULL;
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
629 if (global_children) {
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
630 output_mutex = &(global_children[1]);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
631 sem_init(global_children, 1, max_children);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
632 sem_init(output_mutex, 1, 1);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
633 }
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
634 shmctl(shared_memory_id, IPC_RMID, NULL);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
635 }
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
636 }
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
637 #endif
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
638
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
639 #ifdef DEBUG_ALL
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
640 // force a log file
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
641 if (!d_log) d_log = "readpst.log";
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
642 #endif // defined DEBUG_ALL
212
8e17efed33c1 patch from Fridrich Strba to build on win32
Carl Byington <carl@five-ten-sg.com>
parents: 211
diff changeset
643 #ifdef HAVE_SEMAPHORE_H
8e17efed33c1 patch from Fridrich Strba to build on win32
Carl Byington <carl@five-ten-sg.com>
parents: 211
diff changeset
644 DEBUG_INIT(d_log, output_mutex);
8e17efed33c1 patch from Fridrich Strba to build on win32
Carl Byington <carl@five-ten-sg.com>
parents: 211
diff changeset
645 #else
8e17efed33c1 patch from Fridrich Strba to build on win32
Carl Byington <carl@five-ten-sg.com>
parents: 211
diff changeset
646 DEBUG_INIT(d_log, NULL);
8e17efed33c1 patch from Fridrich Strba to build on win32
Carl Byington <carl@five-ten-sg.com>
parents: 211
diff changeset
647 #endif
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
648 DEBUG_ENT("main");
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
649
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
650 if (output_mode != OUTPUT_QUIET) printf("Opening PST file and indexes...\n");
298
201464dd356e add default character set for items where the pst file does not specify a character set
Carl Byington <carl@five-ten-sg.com>
parents: 297
diff changeset
651 RET_DERROR(pst_open(&pstfile, fname, default_charset), 1, ("Error opening File\n"));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
652 RET_DERROR(pst_load_index(&pstfile), 2, ("Index Error\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
653
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
654 pst_load_extended_attributes(&pstfile);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
655
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
656 if (chdir(output_dir)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
657 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
658 pst_close(&pstfile);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
659 DEBUG_RET();
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
660 DIE(("Cannot change to output dir %s: %s\n", output_dir, strerror(x)));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
661 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
662
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
663 d_ptr = pstfile.d_head; // first record is main record
143
fdc58ad2c758 fix embedded rfc822 messages with attachments
Carl Byington <carl@five-ten-sg.com>
parents: 142
diff changeset
664 item = pst_parse_item(&pstfile, d_ptr, NULL);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
665 if (!item || !item->message_store) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
666 DEBUG_RET();
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
667 DIE(("Could not get root record\n"));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
668 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
669
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
670 // default the file_as to the same as the main filename if it doesn't exist
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
671 if (!item->file_as.str) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
672 if (!(temp = strrchr(fname, '/')))
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
673 if (!(temp = strrchr(fname, '\\')))
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
674 temp = fname;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
675 else
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
676 temp++; // get past the "\\"
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
677 else
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
678 temp++; // get past the "/"
172
6954d315aaa8 move version-info into main configure.in, and set it properly.
Carl Byington <carl@five-ten-sg.com>
parents: 171
diff changeset
679 item->file_as.str = (char*)pst_malloc(strlen(temp)+1);
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
680 strcpy(item->file_as.str, temp);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
681 item->file_as.is_utf8 = 1;
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
682 DEBUG_INFO(("file_as was blank, so am using %s\n", item->file_as.str));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
683 }
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
684 DEBUG_INFO(("Root Folder Name: %s\n", item->file_as.str));
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
685
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
686 d_ptr = pst_getTopOfFolders(&pstfile, item);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
687 if (!d_ptr) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
688 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
689 DIE(("Top of folders record not found. Cannot continue\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
690 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
691
63
cfd6175f9334 Start work on pst2dii to convert to Summation dii load file format.
Carl Byington <carl@five-ten-sg.com>
parents: 59
diff changeset
692 process(item, d_ptr->child); // do the children of TOPF
200
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
693 grim_reaper(1); // wait for all child processes
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
694
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
695 pst_freeItem(item);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
696 pst_close(&pstfile);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
697 DEBUG_RET();
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
698
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
699 #ifdef HAVE_SEMAPHORE_H
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
700 if (global_children) {
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
701 sem_destroy(global_children);
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
702 sem_destroy(output_mutex);
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
703 shmdt(global_children);
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
704 }
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
705 #endif
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
706
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
707 regfree(&meta_charset_pattern);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
708 return 0;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
709 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
710
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
711
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
712 void write_email_body(FILE *f, char *body) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
713 char *n = body;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
714 DEBUG_ENT("write_email_body");
254
fb66d428347d switch to mboxrd quoting
Carl Byington <carl@five-ten-sg.com>
parents: 247
diff changeset
715 if (mode != MODE_SEPARATE) {
fb66d428347d switch to mboxrd quoting
Carl Byington <carl@five-ten-sg.com>
parents: 247
diff changeset
716 while (n) {
fb66d428347d switch to mboxrd quoting
Carl Byington <carl@five-ten-sg.com>
parents: 247
diff changeset
717 char *p = body;
fb66d428347d switch to mboxrd quoting
Carl Byington <carl@five-ten-sg.com>
parents: 247
diff changeset
718 while (*p == '>') p++;
fb66d428347d switch to mboxrd quoting
Carl Byington <carl@five-ten-sg.com>
parents: 247
diff changeset
719 if (strncmp(p, "From ", 5) == 0) fprintf(f, ">");
fb66d428347d switch to mboxrd quoting
Carl Byington <carl@five-ten-sg.com>
parents: 247
diff changeset
720 if ((n = strchr(body, '\n'))) {
fb66d428347d switch to mboxrd quoting
Carl Byington <carl@five-ten-sg.com>
parents: 247
diff changeset
721 n++;
fb66d428347d switch to mboxrd quoting
Carl Byington <carl@five-ten-sg.com>
parents: 247
diff changeset
722 pst_fwrite(body, n-body, 1, f); //write just a line
fb66d428347d switch to mboxrd quoting
Carl Byington <carl@five-ten-sg.com>
parents: 247
diff changeset
723 body = n;
fb66d428347d switch to mboxrd quoting
Carl Byington <carl@five-ten-sg.com>
parents: 247
diff changeset
724 }
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
725 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
726 }
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
727 pst_fwrite(body, strlen(body), 1, f);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
728 DEBUG_RET();
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
729 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
730
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
731
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
732 void removeCR (char *c) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
733 // converts \r\n to \n
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
734 char *a, *b;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
735 DEBUG_ENT("removeCR");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
736 a = b = c;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
737 while (*a != '\0') {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
738 *b = *a;
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
739 if (*a != '\r') b++;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
740 a++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
741 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
742 *b = '\0';
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
743 DEBUG_RET();
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
744 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
745
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
746
118
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 116
diff changeset
747 void usage() {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
748 DEBUG_ENT("usage");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
749 version();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
750 printf("Usage: %s [OPTIONS] {PST FILENAME}\n", prog_name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
751 printf("OPTIONS:\n");
104
39ba19372732 many fixes in pst2ldif by Robert Harris
Carl Byington <carl@five-ten-sg.com>
parents: 100
diff changeset
752 printf("\t-V\t- Version. Display program version\n");
304
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
753 printf("\t-C charset\t- character set for items with an unspecified character set\n");
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
754 printf("\t-D\t- Include deleted items in output\n");
350
7a91e30826d8 Hans Liss - debug level output
Carl Byington <carl@five-ten-sg.com>
parents: 349
diff changeset
755 printf("\t-L <level> \t- Set debug level; 1=debug,2=info,3=warn.\n");
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
756 printf("\t-M\t- Write emails in the MH (rfc822) format\n");
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
757 printf("\t-S\t- Separate. Write emails in the separate format\n");
328
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
758 printf("\t-a <attachment-extension-list>\t- Discard any attachment without an extension on the list\n");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
759 printf("\t-b\t- Don't save RTF-Body attachments\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
760 printf("\t-c[v|l]\t- Set the Contact output mode. -cv = VCard, -cl = EMail list\n");
238
410b6422d65b fix --help usage; readpstlog is gone
Carl Byington <carl@five-ten-sg.com>
parents: 236
diff changeset
761 printf("\t-d <filename> \t- Debug to file.\n");
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
762 printf("\t-e\t- As with -M, but include extensions on output files\n");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
763 printf("\t-h\t- Help. This screen\n");
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
764 printf("\t-j <integer>\t- Number of parallel jobs to run\n");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
765 printf("\t-k\t- KMail. Output in kmail format\n");
308
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
766 printf("\t-m\t- As with -e, but write .msg files also\n");
63
cfd6175f9334 Start work on pst2dii to convert to Summation dii load file format.
Carl Byington <carl@five-ten-sg.com>
parents: 59
diff changeset
767 printf("\t-o <dirname>\t- Output directory to write files to. CWD is changed *after* opening pst file\n");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
768 printf("\t-q\t- Quiet. Only print error messages\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
769 printf("\t-r\t- Recursive. Output in a recursive format\n");
231
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
770 printf("\t-t[eajc]\t- Set the output type list. e = email, a = attachment, j = journal, c = contact\n");
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
771 printf("\t-u\t- Thunderbird mode. Write two extra .size and .type files\n");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
772 printf("\t-w\t- Overwrite any output mbox files\n");
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
773 printf("\t-8\t- Output bodies in UTF-8, rather than original encoding, if UTF-8 version is available\n");
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
774 printf("\n");
308
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
775 printf("Only one of -M -S -e -k -m -r should be specified\n");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
776 DEBUG_RET();
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
777 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
778
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
779
118
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 116
diff changeset
780 void version() {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
781 DEBUG_ENT("version");
50
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
782 printf("ReadPST / LibPST v%s\n", VERSION);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
783 #if BYTE_ORDER == BIG_ENDIAN
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
784 printf("Big Endian implementation being used.\n");
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
785 #elif BYTE_ORDER == LITTLE_ENDIAN
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
786 printf("Little Endian implementation being used.\n");
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
787 #else
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
788 # error "Byte order not supported by this library"
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
789 #endif
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
790 DEBUG_RET();
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
791 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
792
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
793
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
794 char *mk_kmail_dir(char *fname) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
795 //change to that directory
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
796 //make a directory based on OUTPUT_KMAIL_DIR_TEMPLATE
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
797 //allocate space for OUTPUT_TEMPLATE and form a char* with fname
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
798 //return that value
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
799 char *dir, *out_name, *index;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
800 int x;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
801 DEBUG_ENT("mk_kmail_dir");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
802 if (kmail_chdir && chdir(kmail_chdir)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
803 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
804 DIE(("mk_kmail_dir: Cannot change to directory %s: %s\n", kmail_chdir, strerror(x)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
805 }
289
cc8ee701f190 pst_block_offset elements are unsigned; consistent usage of pst_malloc and pst_realloc
Carl Byington <carl@five-ten-sg.com>
parents: 288
diff changeset
806 dir = pst_malloc(strlen(fname)+strlen(OUTPUT_KMAIL_DIR_TEMPLATE)+1);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
807 sprintf(dir, OUTPUT_KMAIL_DIR_TEMPLATE, fname);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
808 check_filename(dir);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
809 if (D_MKDIR(dir)) {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
810 if (errno != EEXIST) { // not an error because it exists
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
811 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
812 DIE(("mk_kmail_dir: Cannot create directory %s: %s\n", dir, strerror(x)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
813 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
814 }
289
cc8ee701f190 pst_block_offset elements are unsigned; consistent usage of pst_malloc and pst_realloc
Carl Byington <carl@five-ten-sg.com>
parents: 288
diff changeset
815 kmail_chdir = pst_realloc(kmail_chdir, strlen(dir)+1);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
816 strcpy(kmail_chdir, dir);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
817 free (dir);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
818
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
819 //we should remove any existing indexes created by KMail, cause they might be different now
289
cc8ee701f190 pst_block_offset elements are unsigned; consistent usage of pst_malloc and pst_realloc
Carl Byington <carl@five-ten-sg.com>
parents: 288
diff changeset
820 index = pst_malloc(strlen(fname)+strlen(KMAIL_INDEX)+1);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
821 sprintf(index, KMAIL_INDEX, fname);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
822 unlink(index);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
823 free(index);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
824
289
cc8ee701f190 pst_block_offset elements are unsigned; consistent usage of pst_malloc and pst_realloc
Carl Byington <carl@five-ten-sg.com>
parents: 288
diff changeset
825 out_name = pst_malloc(strlen(fname)+strlen(OUTPUT_TEMPLATE)+1);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
826 sprintf(out_name, OUTPUT_TEMPLATE, fname);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
827 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
828 return out_name;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
829 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
830
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
831
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
832 int close_kmail_dir() {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
833 // change ..
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
834 int x;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
835 DEBUG_ENT("close_kmail_dir");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
836 if (kmail_chdir) { //only free kmail_chdir if not NULL. do not change directory
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
837 free(kmail_chdir);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
838 kmail_chdir = NULL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
839 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
840 if (chdir("..")) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
841 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
842 DIE(("close_kmail_dir: Cannot move up dir (..): %s\n", strerror(x)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
843 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
844 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
845 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
846 return 0;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
847 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
848
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
849
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
850 // this will create a directory by that name,
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
851 // then make an mbox file inside that directory.
154
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
852 char *mk_recurse_dir(char *dir, int32_t folder_type) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
853 int x;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
854 char *out_name;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
855 DEBUG_ENT("mk_recurse_dir");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
856 check_filename(dir);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
857 if (D_MKDIR (dir)) {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
858 if (errno != EEXIST) { // not an error because it exists
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
859 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
860 DIE(("mk_recurse_dir: Cannot create directory %s: %s\n", dir, strerror(x)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
861 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
862 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
863 if (chdir (dir)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
864 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
865 DIE(("mk_recurse_dir: Cannot change to directory %s: %s\n", dir, strerror(x)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
866 }
154
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
867 switch (folder_type) {
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
868 case PST_TYPE_APPOINTMENT:
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
869 out_name = strdup("calendar");
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
870 break;
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
871 case PST_TYPE_CONTACT:
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
872 out_name = strdup("contacts");
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
873 break;
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
874 case PST_TYPE_JOURNAL:
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
875 out_name = strdup("journal");
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
876 break;
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
877 case PST_TYPE_STICKYNOTE:
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
878 case PST_TYPE_TASK:
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
879 case PST_TYPE_NOTE:
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
880 case PST_TYPE_OTHER:
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
881 case PST_TYPE_REPORT:
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
882 default:
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
883 out_name = strdup("mbox");
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
884 break;
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
885 }
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
886 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
887 return out_name;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
888 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
889
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
890
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
891 int close_recurse_dir() {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
892 int x;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
893 DEBUG_ENT("close_recurse_dir");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
894 if (chdir("..")) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
895 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
896 DIE(("close_recurse_dir: Cannot go up dir (..): %s\n", strerror(x)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
897 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
898 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
899 return 0;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
900 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
901
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
902
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
903 char *mk_separate_dir(char *dir) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
904 size_t dirsize = strlen(dir) + 10;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
905 char dir_name[dirsize];
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
906 int x = 0, y = 0;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
907
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
908 DEBUG_ENT("mk_separate_dir");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
909 do {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
910 if (y == 0)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
911 snprintf(dir_name, dirsize, "%s", dir);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
912 else
257
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
913 snprintf(dir_name, dirsize, "%s" SEP_MAIL_FILE_TEMPLATE, dir, y, ""); // enough for 9 digits allocated above
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
914
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
915 check_filename(dir_name);
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
916 DEBUG_INFO(("about to try creating %s\n", dir_name));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
917 if (D_MKDIR(dir_name)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
918 if (errno != EEXIST) { // if there is an error, and it doesn't already exist
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
919 x = errno;
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
920 DIE(("mk_separate_dir: Cannot create directory %s: %s\n", dir, strerror(x)));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
921 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
922 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
923 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
924 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
925 y++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
926 } while (overwrite == 0);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
927
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
928 if (chdir(dir_name)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
929 x = errno;
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
930 DIE(("mk_separate_dir: Cannot change to directory %s: %s\n", dir, strerror(x)));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
931 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
932
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
933 if (overwrite) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
934 // we should probably delete all files from this directory
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
935 #if !defined(WIN32) && !defined(__CYGWIN__)
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
936 DIR * sdir = NULL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
937 struct dirent *dirent = NULL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
938 struct stat filestat;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
939 if (!(sdir = opendir("./"))) {
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
940 DEBUG_WARN(("mk_separate_dir: Cannot open dir \"%s\" for deletion of old contents\n", "./"));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
941 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
942 while ((dirent = readdir(sdir))) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
943 if (lstat(dirent->d_name, &filestat) != -1)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
944 if (S_ISREG(filestat.st_mode)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
945 if (unlink(dirent->d_name)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
946 y = errno;
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
947 DIE(("mk_separate_dir: unlink returned error on file %s: %s\n", dirent->d_name, strerror(y)));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
948 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
949 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
950 }
344
aedcf979f439 fix unchecked errors found by cppcheck
Carl Byington <carl@five-ten-sg.com>
parents: 328
diff changeset
951 closedir(sdir); // cppcheck detected leak
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
952 }
26
9eeba3f4ca4b more cleanup from Arne
carl
parents: 25
diff changeset
953 #endif
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
954 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
955
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
956 // we don't return a filename here cause it isn't necessary.
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
957 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
958 return NULL;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
959 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
960
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
961
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
962 int close_separate_dir() {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
963 int x;
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
964 DEBUG_ENT("close_separate_dir");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
965 if (chdir("..")) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
966 x = errno;
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
967 DIE(("close_separate_dir: Cannot go up dir (..): %s\n", strerror(x)));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
968 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
969 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
970 return 0;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
971 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
972
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
973
316
c4537664ff50 merge .msg generation code
Carl Byington <carl@five-ten-sg.com>
parents: 304 313
diff changeset
974 void mk_separate_file(struct file_ll *f, char *extension, int openit) {
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
975 DEBUG_ENT("mk_separate_file");
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
976 DEBUG_INFO(("opening next file to save email\n"));
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
977 if (f->item_count > 999999999) { // bigger than nine 9's
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
978 DIE(("mk_separate_file: The number of emails in this folder has become too high to handle\n"));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
979 }
310
a6df6ffc3ff5 add sent_date to .msg output format
Carl Byington <carl@five-ten-sg.com>
parents: 308
diff changeset
980 sprintf(f->name, SEP_MAIL_FILE_TEMPLATE, f->item_count, extension);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
981 check_filename(f->name);
308
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
982 if (openit) {
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
983 if (!(f->output = fopen(f->name, "w"))) {
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
984 DIE(("mk_separate_file: Cannot open file to save email \"%s\"\n", f->name));
97c53c6868ab add -m option to readpst to create Outlook .msg files
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
985 }
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
986 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
987 DEBUG_RET();
291
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
988 }
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
989
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
990
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
991 void close_separate_file(struct file_ll *f) {
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
992 DEBUG_ENT("close_separate_file");
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
993 if (f->output) {
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
994 struct stat st;
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
995 fclose(f->output);
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
996 stat(f->name, &st);
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
997 if (!st.st_size) {
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
998 DEBUG_WARN(("removing empty output file %s\n", f->name));
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
999 remove(f->name);
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
1000 }
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
1001 f->output = NULL;
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
1002 }
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
1003 DEBUG_RET();
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
1004 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1005
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1006
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
1007 char *my_stristr(char *haystack, char *needle) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1008 // my_stristr varies from strstr in that its searches are case-insensitive
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1009 char *x=haystack, *y=needle, *z = NULL;
52
034641c26ab9 code cleanup
carl
parents: 50
diff changeset
1010 if (!haystack || !needle) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1011 return NULL;
52
034641c26ab9 code cleanup
carl
parents: 50
diff changeset
1012 }
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1013 while (*y != '\0' && *x != '\0') {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1014 if (tolower(*y) == tolower(*x)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1015 // move y on one
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1016 y++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1017 if (!z) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1018 z = x; // store first position in haystack where a match is made
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1019 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1020 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1021 y = needle; // reset y to the beginning of the needle
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1022 z = NULL; // reset the haystack storage point
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1023 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1024 x++; // advance the search in the haystack
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1025 }
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
1026 // If the haystack ended before our search finished, it's not a match.
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
1027 if (*y != '\0') return NULL;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1028 return z;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
1029 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1030
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1031
41
183ae993b9ad security fix for potential buffer overrun in lz decompress
carl
parents: 39
diff changeset
1032 void check_filename(char *fname) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1033 char *t = fname;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1034 DEBUG_ENT("check_filename");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1035 if (!t) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1036 DEBUG_RET();
52
034641c26ab9 code cleanup
carl
parents: 50
diff changeset
1037 return;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1038 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1039 while ((t = strpbrk(t, "/\\:"))) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1040 // while there are characters in the second string that we don't want
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1041 *t = '_'; //replace them with an underscore
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1042 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1043 DEBUG_RET();
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
1044 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1045
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1046
328
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1047 /**
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1048 * check if the file name extension is acceptable. If not, the attachment
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1049 * will be discarded
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1050 * @param attach pst attachment object
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1051 * @return true if the attachment filename contains an extension that we want.
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1052 */
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1053 int acceptable_ext(pst_item_attach* attach)
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1054 {
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1055 if (!acceptable_extensions || *acceptable_extensions == '\0') return 1; // acceptable list missing or empty
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1056 char *attach_filename = (attach->filename2.str) ? attach->filename2.str
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1057 : attach->filename1.str;
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1058 if (!attach_filename) return 1; // attachment with no name is always acceptable
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1059 char *e = strrchr(attach_filename, '.');
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1060 if (!e) return 1; // attachment with no extension is always acceptable.
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1061 DEBUG_ENT("acceptable_ext");
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1062 DEBUG_INFO(("attachment extension %s\n", e));
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1063 int rc = 0;
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1064 char *a = acceptable_extensions;
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1065 while (*a) {
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1066 if (pst_stricmp(a, e) == 0) {
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1067 rc = 1;
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1068 break;
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1069 }
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1070 a += strlen(a) + 1;
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1071 }
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1072 DEBUG_INFO(("attachment acceptable returns %d\n", rc));
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1073 DEBUG_RET();
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1074 return rc;
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1075 }
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1076
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1077
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1078 void write_separate_attachment(char f_name[], pst_item_attach* attach, int attach_num, pst_file* pst)
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1079 {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1080 FILE *fp = NULL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1081 int x = 0;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1082 char *temp = NULL;
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1083
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1084 // If there is a long filename (filename2) use that, otherwise
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1085 // use the 8.3 filename (filename1)
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1086 char *attach_filename = (attach->filename2.str) ? attach->filename2.str
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1087 : attach->filename1.str;
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 45
diff changeset
1088 DEBUG_ENT("write_separate_attachment");
266
3f323c867cb4 adding more debug code
Carl Byington <carl@five-ten-sg.com>
parents: 264
diff changeset
1089 DEBUG_INFO(("Attachment %s Size is %#"PRIx64", data = %#"PRIxPTR", id %#"PRIx64"\n", attach_filename, (uint64_t)attach->data.size, attach->data.data, attach->i_id));
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1090
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
1091 if (!attach->data.data) {
164
ab384fed78c5 Compensate for iconv conversion to utf-7 that produces strings that are not null terminated.
Carl Byington <carl@five-ten-sg.com>
parents: 154
diff changeset
1092 // make sure we can fetch data from the id
ab384fed78c5 Compensate for iconv conversion to utf-7 that produces strings that are not null terminated.
Carl Byington <carl@five-ten-sg.com>
parents: 154
diff changeset
1093 pst_index_ll *ptr = pst_getID(pst, attach->i_id);
ab384fed78c5 Compensate for iconv conversion to utf-7 that produces strings that are not null terminated.
Carl Byington <carl@five-ten-sg.com>
parents: 154
diff changeset
1094 if (!ptr) {
ab384fed78c5 Compensate for iconv conversion to utf-7 that produces strings that are not null terminated.
Carl Byington <carl@five-ten-sg.com>
parents: 154
diff changeset
1095 DEBUG_WARN(("Couldn't find i_id %#"PRIx64". Cannot save attachment to file\n", attach->i_id));
ab384fed78c5 Compensate for iconv conversion to utf-7 that produces strings that are not null terminated.
Carl Byington <carl@five-ten-sg.com>
parents: 154
diff changeset
1096 DEBUG_RET();
ab384fed78c5 Compensate for iconv conversion to utf-7 that produces strings that are not null terminated.
Carl Byington <carl@five-ten-sg.com>
parents: 154
diff changeset
1097 return;
ab384fed78c5 Compensate for iconv conversion to utf-7 that produces strings that are not null terminated.
Carl Byington <carl@five-ten-sg.com>
parents: 154
diff changeset
1098 }
ab384fed78c5 Compensate for iconv conversion to utf-7 that produces strings that are not null terminated.
Carl Byington <carl@five-ten-sg.com>
parents: 154
diff changeset
1099 }
ab384fed78c5 Compensate for iconv conversion to utf-7 that produces strings that are not null terminated.
Carl Byington <carl@five-ten-sg.com>
parents: 154
diff changeset
1100
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1101 check_filename(f_name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1102 if (!attach_filename) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1103 // generate our own (dummy) filename for the attachement
172
6954d315aaa8 move version-info into main configure.in, and set it properly.
Carl Byington <carl@five-ten-sg.com>
parents: 171
diff changeset
1104 temp = pst_malloc(strlen(f_name)+15);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1105 sprintf(temp, "%s-attach%i", f_name, attach_num);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1106 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1107 // have an attachment name, make sure it's unique
172
6954d315aaa8 move version-info into main configure.in, and set it properly.
Carl Byington <carl@five-ten-sg.com>
parents: 171
diff changeset
1108 temp = pst_malloc(strlen(f_name)+strlen(attach_filename)+15);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1109 do {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1110 if (fp) fclose(fp);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1111 if (x == 0)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1112 sprintf(temp, "%s-%s", f_name, attach_filename);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1113 else
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1114 sprintf(temp, "%s-%s-%i", f_name, attach_filename, x);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1115 } while ((fp = fopen(temp, "r")) && ++x < 99999999);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1116 if (x > 99999999) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1117 DIE(("error finding attachment name. exhausted possibilities to %s\n", temp));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1118 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1119 }
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1120 DEBUG_INFO(("Saving attachment to %s\n", temp));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1121 if (!(fp = fopen(temp, "w"))) {
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
1122 DEBUG_WARN(("write_separate_attachment: Cannot open attachment save file \"%s\"\n", temp));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1123 } else {
195
320cfcba8058 add python module interface to the shared library for easy scripting.
Carl Byington <carl@five-ten-sg.com>
parents: 191
diff changeset
1124 (void)pst_attach_to_file(pst, attach, fp);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1125 fclose(fp);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1126 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1127 if (temp) free(temp);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1128 DEBUG_RET();
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1129 }
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1130
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1131
300
47abe56076da embedded rfc822 messages might contain rtf encoded bodies
Carl Byington <carl@five-ten-sg.com>
parents: 298
diff changeset
1132 void write_embedded_message(FILE* f_output, pst_item_attach* attach, char *boundary, pst_file* pf, int save_rtf, char** extra_mime_headers)
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1133 {
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1134 pst_index_ll *ptr;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1135 DEBUG_ENT("write_embedded_message");
164
ab384fed78c5 Compensate for iconv conversion to utf-7 that produces strings that are not null terminated.
Carl Byington <carl@five-ten-sg.com>
parents: 154
diff changeset
1136 ptr = pst_getID(pf, attach->i_id);
143
fdc58ad2c758 fix embedded rfc822 messages with attachments
Carl Byington <carl@five-ten-sg.com>
parents: 142
diff changeset
1137
186
0a4f7ecd7452 more cleanup of external names in the shared library
Carl Byington <carl@five-ten-sg.com>
parents: 182
diff changeset
1138 pst_desc_tree d_ptr;
150
06aa84023b48 rename some structure fields to reflect our better understanding of the pst format
Carl Byington <carl@five-ten-sg.com>
parents: 146
diff changeset
1139 d_ptr.d_id = 0;
06aa84023b48 rename some structure fields to reflect our better understanding of the pst format
Carl Byington <carl@five-ten-sg.com>
parents: 146
diff changeset
1140 d_ptr.parent_d_id = 0;
06aa84023b48 rename some structure fields to reflect our better understanding of the pst format
Carl Byington <carl@five-ten-sg.com>
parents: 146
diff changeset
1141 d_ptr.assoc_tree = NULL;
06aa84023b48 rename some structure fields to reflect our better understanding of the pst format
Carl Byington <carl@five-ten-sg.com>
parents: 146
diff changeset
1142 d_ptr.desc = ptr;
06aa84023b48 rename some structure fields to reflect our better understanding of the pst format
Carl Byington <carl@five-ten-sg.com>
parents: 146
diff changeset
1143 d_ptr.no_child = 0;
06aa84023b48 rename some structure fields to reflect our better understanding of the pst format
Carl Byington <carl@five-ten-sg.com>
parents: 146
diff changeset
1144 d_ptr.prev = NULL;
06aa84023b48 rename some structure fields to reflect our better understanding of the pst format
Carl Byington <carl@five-ten-sg.com>
parents: 146
diff changeset
1145 d_ptr.next = NULL;
06aa84023b48 rename some structure fields to reflect our better understanding of the pst format
Carl Byington <carl@five-ten-sg.com>
parents: 146
diff changeset
1146 d_ptr.parent = NULL;
06aa84023b48 rename some structure fields to reflect our better understanding of the pst format
Carl Byington <carl@five-ten-sg.com>
parents: 146
diff changeset
1147 d_ptr.child = NULL;
06aa84023b48 rename some structure fields to reflect our better understanding of the pst format
Carl Byington <carl@five-ten-sg.com>
parents: 146
diff changeset
1148 d_ptr.child_tail = NULL;
143
fdc58ad2c758 fix embedded rfc822 messages with attachments
Carl Byington <carl@five-ten-sg.com>
parents: 142
diff changeset
1149
fdc58ad2c758 fix embedded rfc822 messages with attachments
Carl Byington <carl@five-ten-sg.com>
parents: 142
diff changeset
1150 pst_item *item = pst_parse_item(pf, &d_ptr, attach->id2_head);
231
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
1151 // It appears that if the embedded message contains an appointment/
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
1152 // calendar item, pst_parse_item returns NULL due to the presence of
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
1153 // an unexpected reference type of 0x1048, which seems to represent
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
1154 // an array of GUIDs representing a CLSID. It's likely that this is
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
1155 // a reference to an internal Outlook COM class.
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
1156 // Log the skipped item and continue on.
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
1157 if (!item) {
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
1158 DEBUG_WARN(("write_embedded_message: pst_parse_item was unable to parse the embedded message in attachment ID %llu", attach->i_id));
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
1159 } else {
255
ab87f9070ed2 fix to ignore embedded objects that are not email messages
Carl Byington <carl@five-ten-sg.com>
parents: 254
diff changeset
1160 if (!item->email) {
ab87f9070ed2 fix to ignore embedded objects that are not email messages
Carl Byington <carl@five-ten-sg.com>
parents: 254
diff changeset
1161 DEBUG_WARN(("write_embedded_message: pst_parse_item returned type %d, not an email message", item->type));
ab87f9070ed2 fix to ignore embedded objects that are not email messages
Carl Byington <carl@five-ten-sg.com>
parents: 254
diff changeset
1162 } else {
ab87f9070ed2 fix to ignore embedded objects that are not email messages
Carl Byington <carl@five-ten-sg.com>
parents: 254
diff changeset
1163 fprintf(f_output, "\n--%s\n", boundary);
ab87f9070ed2 fix to ignore embedded objects that are not email messages
Carl Byington <carl@five-ten-sg.com>
parents: 254
diff changeset
1164 fprintf(f_output, "Content-Type: %s\n\n", attach->mimetype.str);
323
2474d01043cd fix From quoting on embedded rfc/822 messages
Carl Byington <carl@five-ten-sg.com>
parents: 316
diff changeset
1165 write_normal_email(f_output, "", item, MODE_NORMAL, 0, pf, save_rtf, 1, extra_mime_headers);
255
ab87f9070ed2 fix to ignore embedded objects that are not email messages
Carl Byington <carl@five-ten-sg.com>
parents: 254
diff changeset
1166 }
231
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
1167 pst_freeItem(item);
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
1168 }
143
fdc58ad2c758 fix embedded rfc822 messages with attachments
Carl Byington <carl@five-ten-sg.com>
parents: 142
diff changeset
1169
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1170 DEBUG_RET();
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1171 }
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1172
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1173
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1174 void write_inline_attachment(FILE* f_output, pst_item_attach* attach, char *boundary, pst_file* pst)
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1175 {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1176 DEBUG_ENT("write_inline_attachment");
266
3f323c867cb4 adding more debug code
Carl Byington <carl@five-ten-sg.com>
parents: 264
diff changeset
1177 DEBUG_INFO(("Attachment Size is %#"PRIx64", data = %#"PRIxPTR", id %#"PRIx64"\n", (uint64_t)attach->data.size, attach->data.data, attach->i_id));
195
320cfcba8058 add python module interface to the shared library for easy scripting.
Carl Byington <carl@five-ten-sg.com>
parents: 191
diff changeset
1178
320cfcba8058 add python module interface to the shared library for easy scripting.
Carl Byington <carl@five-ten-sg.com>
parents: 191
diff changeset
1179 if (!attach->data.data) {
142
2189a6b8134e improve character set handling - don't try to convert utf-8 to single byte for fields that were not originally unicode.
Carl Byington <carl@five-ten-sg.com>
parents: 141
diff changeset
1180 // make sure we can fetch data from the id
164
ab384fed78c5 Compensate for iconv conversion to utf-7 that produces strings that are not null terminated.
Carl Byington <carl@five-ten-sg.com>
parents: 154
diff changeset
1181 pst_index_ll *ptr = pst_getID(pst, attach->i_id);
142
2189a6b8134e improve character set handling - don't try to convert utf-8 to single byte for fields that were not originally unicode.
Carl Byington <carl@five-ten-sg.com>
parents: 141
diff changeset
1182 if (!ptr) {
2189a6b8134e improve character set handling - don't try to convert utf-8 to single byte for fields that were not originally unicode.
Carl Byington <carl@five-ten-sg.com>
parents: 141
diff changeset
1183 DEBUG_WARN(("Couldn't find ID pointer. Cannot save attachment to file\n"));
2189a6b8134e improve character set handling - don't try to convert utf-8 to single byte for fields that were not originally unicode.
Carl Byington <carl@five-ten-sg.com>
parents: 141
diff changeset
1184 DEBUG_RET();
2189a6b8134e improve character set handling - don't try to convert utf-8 to single byte for fields that were not originally unicode.
Carl Byington <carl@five-ten-sg.com>
parents: 141
diff changeset
1185 return;
2189a6b8134e improve character set handling - don't try to convert utf-8 to single byte for fields that were not originally unicode.
Carl Byington <carl@five-ten-sg.com>
parents: 141
diff changeset
1186 }
2189a6b8134e improve character set handling - don't try to convert utf-8 to single byte for fields that were not originally unicode.
Carl Byington <carl@five-ten-sg.com>
parents: 141
diff changeset
1187 }
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1188
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1189 fprintf(f_output, "\n--%s\n", boundary);
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1190 if (!attach->mimetype.str) {
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1191 fprintf(f_output, "Content-Type: %s\n", MIME_TYPE_DEFAULT);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1192 } else {
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1193 fprintf(f_output, "Content-Type: %s\n", attach->mimetype.str);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1194 }
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1195 fprintf(f_output, "Content-Transfer-Encoding: base64\n");
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1196
352
09dd5299d91c Added Content-ID header support
Igor Stroh <igor.stroh@rulim.de>
parents: 350
diff changeset
1197 if (attach->content_id.str) {
354
843705c25b45 code cleanup; content-id in brackets
Carl Byington <carl@five-ten-sg.com>
parents: 352
diff changeset
1198 fprintf(f_output, "Content-ID: <%s>\n", attach->content_id.str);
352
09dd5299d91c Added Content-ID header support
Igor Stroh <igor.stroh@rulim.de>
parents: 350
diff changeset
1199 }
09dd5299d91c Added Content-ID header support
Igor Stroh <igor.stroh@rulim.de>
parents: 350
diff changeset
1200
257
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1201 if (attach->filename2.str) {
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1202 // use the long filename, converted to proper encoding if needed.
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1203 // it is already utf8
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1204 pst_rfc2231(&attach->filename2);
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1205 fprintf(f_output, "Content-Disposition: attachment; \n filename*=%s\n\n", attach->filename2.str);
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1206 }
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1207 else if (attach->filename1.str) {
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1208 // short filename never needs encoding
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1209 fprintf(f_output, "Content-Disposition: attachment; filename=\"%s\"\n\n", attach->filename1.str);
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1210 }
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1211 else {
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1212 // no filename is inline
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1213 fprintf(f_output, "Content-Disposition: inline\n\n");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1214 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1215
195
320cfcba8058 add python module interface to the shared library for easy scripting.
Carl Byington <carl@five-ten-sg.com>
parents: 191
diff changeset
1216 (void)pst_attach_to_file_base64(pst, attach, f_output);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1217 fprintf(f_output, "\n\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1218 DEBUG_RET();
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1219 }
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1220
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1221
277
86078d0c2e9c ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 276
diff changeset
1222 int valid_headers(char *header)
86078d0c2e9c ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 276
diff changeset
1223 {
86078d0c2e9c ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 276
diff changeset
1224 // headers are sometimes really bogus - they seem to be fragments of the
86078d0c2e9c ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 276
diff changeset
1225 // message body, so we only use them if they seem to be real rfc822 headers.
282
57c3bcf22c4f ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 281
diff changeset
1226 // this list is composed of ones that we have seen in real pst files.
57c3bcf22c4f ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 281
diff changeset
1227 // there are surely others. the problem is - given an arbitrary character
57c3bcf22c4f ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 281
diff changeset
1228 // string, is it a valid (or even reasonable) set of rfc822 headers?
278
06e723720db0 ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 277
diff changeset
1229 if (header) {
282
57c3bcf22c4f ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 281
diff changeset
1230 if ((strncasecmp(header, "X-Barracuda-URL: ", 17) == 0) ||
57c3bcf22c4f ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 281
diff changeset
1231 (strncasecmp(header, "X-ASG-Debug-ID: ", 16) == 0) ||
57c3bcf22c4f ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 281
diff changeset
1232 (strncasecmp(header, "Return-Path: ", 13) == 0) ||
57c3bcf22c4f ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 281
diff changeset
1233 (strncasecmp(header, "Received: ", 10) == 0) ||
57c3bcf22c4f ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 281
diff changeset
1234 (strncasecmp(header, "Subject: ", 9) == 0) ||
57c3bcf22c4f ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 281
diff changeset
1235 (strncasecmp(header, "Date: ", 6) == 0) ||
57c3bcf22c4f ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 281
diff changeset
1236 (strncasecmp(header, "From: ", 6) == 0) ||
57c3bcf22c4f ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 281
diff changeset
1237 (strncasecmp(header, "X-x: ", 5) == 0) ||
281
d9b1e2e0f25a ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 280
diff changeset
1238 (strncasecmp(header, "Microsoft Mail Internet Headers", 31) == 0)) {
278
06e723720db0 ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 277
diff changeset
1239 return 1;
06e723720db0 ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 277
diff changeset
1240 }
06e723720db0 ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 277
diff changeset
1241 else {
279
8c2c7d8d7518 ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 278
diff changeset
1242 if (strlen(header) > 2) {
8c2c7d8d7518 ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 278
diff changeset
1243 DEBUG_INFO(("Ignore bogus headers = %s\n", header));
8c2c7d8d7518 ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 278
diff changeset
1244 }
278
06e723720db0 ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 277
diff changeset
1245 return 0;
06e723720db0 ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 277
diff changeset
1246 }
277
86078d0c2e9c ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 276
diff changeset
1247 }
278
06e723720db0 ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 277
diff changeset
1248 else return 0;
277
86078d0c2e9c ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 276
diff changeset
1249 }
86078d0c2e9c ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 276
diff changeset
1250
86078d0c2e9c ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 276
diff changeset
1251
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1252 void header_has_field(char *header, char *field, int *flag)
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1253 {
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1254 DEBUG_ENT("header_has_field");
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1255 if (my_stristr(header, field) || (strncasecmp(header, field+1, strlen(field)-1) == 0)) {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1256 DEBUG_INFO(("header block has %s header\n", field+1));
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1257 *flag = 1;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1258 }
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1259 DEBUG_RET();
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1260 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1261
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1262
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1263 void header_get_subfield(char *field, const char *subfield, char *body_subfield, size_t size_subfield)
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1264 {
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1265 if (!field) return;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1266 DEBUG_ENT("header_get_subfield");
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1267 char search[60];
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1268 snprintf(search, sizeof(search), " %s=", subfield);
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1269 field++;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1270 char *n = header_end_field(field);
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1271 char *s = my_stristr(field, search);
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1272 if (n && s && (s < n)) {
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1273 char *e, *f, save;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1274 s += strlen(search); // skip over subfield=
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1275 if (*s == '"') {
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1276 s++;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1277 e = strchr(s, '"');
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1278 }
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1279 else {
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1280 e = strchr(s, ';');
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1281 f = strchr(s, '\n');
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1282 if (e && f && (f < e)) e = f;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1283 }
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1284 if (!e || (e > n)) e = n; // use the trailing lf as terminator if nothing better
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1285 save = *e;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1286 *e = '\0';
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1287 snprintf(body_subfield, size_subfield, "%s", s); // copy the subfield to our buffer
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1288 *e = save;
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1289 DEBUG_INFO(("body %s %s from headers\n", subfield, body_subfield));
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1290 }
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1291 DEBUG_RET();
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1292 }
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1293
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1294 char* header_get_field(char *header, char *field)
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1295 {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1296 char *t = my_stristr(header, field);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1297 if (!t && (strncasecmp(header, field+1, strlen(field)-1) == 0)) t = header;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1298 return t;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1299 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1300
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1301
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1302 // return pointer to \n at the end of this header field,
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1303 // or NULL if this field goes to the end of the string.
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1304 char *header_end_field(char *field)
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1305 {
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1306 char *e = strchr(field+1, '\n');
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1307 while (e && ((e[1] == ' ') || (e[1] == '\t'))) {
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1308 e = strchr(e+1, '\n');
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1309 }
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1310 return e;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1311 }
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1312
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1313
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1314 void header_strip_field(char *header, char *field)
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1315 {
349
a57c15b3108a Jeffrey Morlan - fix multiple Content-Type headers
Carl Byington <carl@five-ten-sg.com>
parents: 345
diff changeset
1316 char *t;
a57c15b3108a Jeffrey Morlan - fix multiple Content-Type headers
Carl Byington <carl@five-ten-sg.com>
parents: 345
diff changeset
1317 while ((t = header_get_field(header, field))) {
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1318 char *e = header_end_field(t);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1319 if (e) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1320 if (t == header) e++; // if *t is not \n, we don't want to keep the \n at *e either.
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1321 while (*e != '\0') {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1322 *t = *e;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1323 t++;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1324 e++;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1325 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1326 *t = '\0';
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1327 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1328 else {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1329 // this was the last header field, truncate the headers
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1330 *t = '\0';
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1331 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1332 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1333 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1334
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1335
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1336 int test_base64(char *body, size_t len)
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1337 {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1338 int b64 = 0;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1339 uint8_t *b = (uint8_t *)body;
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1340 DEBUG_ENT("test_base64");
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1341 while (len--) {
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1342 if ((*b < 32) && (*b != 9) && (*b != 10)) {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1343 DEBUG_INFO(("found base64 byte %d\n", (int)*b));
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1344 DEBUG_HEXDUMPC(body, strlen(body), 0x10);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1345 b64 = 1;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1346 break;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1347 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1348 b++;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1349 }
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1350 DEBUG_RET();
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1351 return b64;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1352 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1353
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1354
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1355 void find_html_charset(char *html, char *charset, size_t charsetlen)
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1356 {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1357 const int index = 1;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1358 const int nmatch = index+1;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1359 regmatch_t match[nmatch];
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1360 DEBUG_ENT("find_html_charset");
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1361 int rc = regexec(&meta_charset_pattern, html, nmatch, match, 0);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1362 if (rc == 0) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1363 int s = match[index].rm_so;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1364 int e = match[index].rm_eo;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1365 if (s != -1) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1366 char save = html[e];
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1367 html[e] = '\0';
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1368 snprintf(charset, charsetlen, "%s", html+s); // copy the html charset
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1369 html[e] = save;
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1370 DEBUG_INFO(("charset %s from html text\n", charset));
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1371 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1372 else {
203
9fb600ef4e03 cleanup debug logging
Carl Byington <carl@five-ten-sg.com>
parents: 202
diff changeset
1373 DEBUG_INFO(("matching %d %d %d %d\n", match[0].rm_so, match[0].rm_eo, match[1].rm_so, match[1].rm_eo));
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1374 DEBUG_HEXDUMPC(html, strlen(html), 0x10);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1375 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1376 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1377 else {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1378 DEBUG_INFO(("regexec returns %d\n", rc));
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1379 }
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1380 DEBUG_RET();
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1381 }
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1382
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1383
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1384 void find_rfc822_headers(char** extra_mime_headers)
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1385 {
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1386 DEBUG_ENT("find_rfc822_headers");
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1387 char *headers = *extra_mime_headers;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1388 if (headers) {
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1389 char *temp, *t;
146
0695de3b5a98 fix for 64bit on Fedora 11
Carl Byington <carl@five-ten-sg.com>
parents: 143
diff changeset
1390 while ((temp = strstr(headers, "\n\n"))) {
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1391 temp[1] = '\0';
304
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1392 t = header_get_field(headers, "\nContent-Type:");
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1393 if (t) {
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1394 t++;
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1395 DEBUG_INFO(("found content type header\n"));
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1396 char *n = strchr(t, '\n');
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1397 char *s = strstr(t, ": ");
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1398 char *e = strchr(t, ';');
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1399 if (!e || (e > n)) e = n;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1400 if (s && (s < e)) {
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1401 s += 2;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1402 if (!strncasecmp(s, RFC822, e-s)) {
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1403 headers = temp+2; // found rfc822 header
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1404 DEBUG_INFO(("found 822 headers\n%s\n", headers));
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1405 break;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1406 }
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1407 }
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1408 }
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1409 //DEBUG_INFO(("skipping to next block after\n%s\n", headers));
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1410 headers = temp+2; // skip to next chunk of headers
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1411 }
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1412 *extra_mime_headers = headers;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1413 }
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1414 DEBUG_RET();
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1415 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1416
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1417
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1418 void write_body_part(FILE* f_output, pst_string *body, char *mime, char *charset, char *boundary, pst_file* pst)
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1419 {
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1420 DEBUG_ENT("write_body_part");
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1421 removeCR(body->str);
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1422 size_t body_len = strlen(body->str);
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1423
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1424 if (body->is_utf8 && (strcasecmp("utf-8", charset))) {
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1425 if (prefer_utf8) {
142
2189a6b8134e improve character set handling - don't try to convert utf-8 to single byte for fields that were not originally unicode.
Carl Byington <carl@five-ten-sg.com>
parents: 141
diff changeset
1426 charset = "utf-8";
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1427 } else {
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1428 // try to convert to the specified charset since the target
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1429 // is not utf-8, and the data came from a unicode (utf16) field
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1430 // and is now in utf-8.
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1431 size_t rc;
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1432 DEBUG_INFO(("Convert %s utf-8 to %s\n", mime, charset));
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1433 pst_vbuf *newer = pst_vballoc(2);
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1434 rc = pst_vb_utf8to8bit(newer, body->str, body_len, charset);
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1435 if (rc == (size_t)-1) {
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1436 // unable to convert, change the charset to utf8
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1437 free(newer->b);
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1438 DEBUG_INFO(("Failed to convert %s utf-8 to %s\n", mime, charset));
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1439 charset = "utf-8";
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1440 } else {
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1441 // null terminate the output string
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1442 pst_vbgrow(newer, 1);
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1443 newer->b[newer->dlen] = '\0';
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1444 free(body->str);
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1445 body->str = newer->b;
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1446 body_len = newer->dlen;
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1447 }
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1448 free(newer);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1449 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1450 }
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1451 int base64 = test_base64(body->str, body_len);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1452 fprintf(f_output, "\n--%s\n", boundary);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1453 fprintf(f_output, "Content-Type: %s; charset=\"%s\"\n", mime, charset);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1454 if (base64) fprintf(f_output, "Content-Transfer-Encoding: base64\n");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1455 fprintf(f_output, "\n");
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1456 // Any body that uses an encoding with NULLs, e.g. UTF16, will be base64-encoded here.
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1457 if (base64) {
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1458 char *enc = pst_base64_encode(body->str, body_len);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1459 if (enc) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1460 write_email_body(f_output, enc);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1461 fprintf(f_output, "\n");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1462 free(enc);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1463 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1464 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1465 else {
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1466 write_email_body(f_output, body->str);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1467 }
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1468 DEBUG_RET();
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1469 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1470
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1471
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1472 void write_schedule_part_data(FILE* f_output, pst_item* item, const char* sender, const char* method)
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1473 {
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1474 fprintf(f_output, "BEGIN:VCALENDAR\n");
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1475 fprintf(f_output, "VERSION:2.0\n");
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
1476 fprintf(f_output, "PRODID:LibPST v%s\n", VERSION);
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
1477 if (method) fprintf(f_output, "METHOD:%s\n", method);
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
1478 fprintf(f_output, "BEGIN:VEVENT\n");
247
85d77d7b034b another patche from Kenneth Berland for solaris
Carl Byington <carl@five-ten-sg.com>
parents: 246
diff changeset
1479 if (sender) {
85d77d7b034b another patche from Kenneth Berland for solaris
Carl Byington <carl@five-ten-sg.com>
parents: 246
diff changeset
1480 if (item->email->outlook_sender_name.str) {
297
8b3a827b71f4 add alarm reminders to calendar events
Carl Byington <carl@five-ten-sg.com>
parents: 292
diff changeset
1481 fprintf(f_output, "ORGANIZER;CN=\"%s\":MAILTO:%s\n", item->email->outlook_sender_name.str, sender);
8b3a827b71f4 add alarm reminders to calendar events
Carl Byington <carl@five-ten-sg.com>
parents: 292
diff changeset
1482 } else {
8b3a827b71f4 add alarm reminders to calendar events
Carl Byington <carl@five-ten-sg.com>
parents: 292
diff changeset
1483 fprintf(f_output, "ORGANIZER;CN=\"\":MAILTO:%s\n", sender);
8b3a827b71f4 add alarm reminders to calendar events
Carl Byington <carl@five-ten-sg.com>
parents: 292
diff changeset
1484 }
247
85d77d7b034b another patche from Kenneth Berland for solaris
Carl Byington <carl@five-ten-sg.com>
parents: 246
diff changeset
1485 }
242
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
1486 write_appointment(f_output, item);
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1487 fprintf(f_output, "END:VCALENDAR\n");
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1488 }
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1489
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1490
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1491 void write_schedule_part(FILE* f_output, pst_item* item, const char* sender, const char* boundary)
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1492 {
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1493 const char* method = "REQUEST";
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1494 const char* charset = "utf-8";
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
1495 char fname[30];
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1496 if (!item->appointment) return;
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1497
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1498 // inline appointment request
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1499 fprintf(f_output, "\n--%s\n", boundary);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1500 fprintf(f_output, "Content-Type: %s; method=\"%s\"; charset=\"%s\"\n\n", "text/calendar", method, charset);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1501 write_schedule_part_data(f_output, item, sender, method);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1502 fprintf(f_output, "\n");
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1503
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1504 // attachment appointment request
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1505 snprintf(fname, sizeof(fname), "i%i.ics", rand());
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1506 fprintf(f_output, "\n--%s\n", boundary);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1507 fprintf(f_output, "Content-Type: %s; charset=\"%s\"; name=\"%s\"\n", "text/calendar", "utf-8", fname);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1508 fprintf(f_output, "Content-Disposition: attachment; filename=\"%s\"\n\n", fname);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1509 write_schedule_part_data(f_output, item, sender, method);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1510 fprintf(f_output, "\n");
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1511 }
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1512
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1513
323
2474d01043cd fix From quoting on embedded rfc/822 messages
Carl Byington <carl@five-ten-sg.com>
parents: 316
diff changeset
1514 void write_normal_email(FILE* f_output, char f_name[], pst_item* item, int mode, int mode_MH, pst_file* pst, int save_rtf, int embedding, char** extra_mime_headers)
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1515 {
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1516 char boundary[60];
205
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1517 char altboundary[66];
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1518 char *altboundaryp = NULL;
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1519 char body_charset[30];
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1520 char buffer_charset[30];
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1521 char body_report[60];
129
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1522 char sender[60];
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1523 int sender_known = 0;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1524 char *temp = NULL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1525 time_t em_time;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1526 char *c_time;
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1527 char *headers = NULL;
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1528 int has_from, has_subject, has_to, has_cc, has_date, has_msgid;
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1529 has_from = has_subject = has_to = has_cc = has_date = has_msgid = 0;
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 45
diff changeset
1530 DEBUG_ENT("write_normal_email");
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1531
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1532 pst_convert_utf8_null(item, &item->email->header);
277
86078d0c2e9c ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 276
diff changeset
1533 headers = valid_headers(item->email->header.str) ? item->email->header.str :
86078d0c2e9c ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 276
diff changeset
1534 valid_headers(*extra_mime_headers) ? *extra_mime_headers :
86078d0c2e9c ignore internet headers that don't seem to be real rfc822 headers
Carl Byington <carl@five-ten-sg.com>
parents: 276
diff changeset
1535 NULL;
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1536
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1537 // setup default body character set and report type
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1538 strncpy(body_charset, pst_default_charset(item, sizeof(buffer_charset), buffer_charset), sizeof(body_charset));
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1539 body_charset[sizeof(body_charset)-1] = '\0';
234
ed0cb66b23d4 better detection of dsn delivery reports
Carl Byington <carl@five-ten-sg.com>
parents: 233
diff changeset
1540 strncpy(body_report, "delivery-status", sizeof(body_report));
ed0cb66b23d4 better detection of dsn delivery reports
Carl Byington <carl@five-ten-sg.com>
parents: 233
diff changeset
1541 body_report[sizeof(body_report)-1] = '\0';
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1542
129
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1543 // setup default sender
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1544 pst_convert_utf8(item, &item->email->sender_address);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1545 if (item->email->sender_address.str && strchr(item->email->sender_address.str, '@')) {
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1546 temp = item->email->sender_address.str;
129
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1547 sender_known = 1;
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1548 }
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1549 else {
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1550 temp = "MAILER-DAEMON";
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1551 }
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1552 strncpy(sender, temp, sizeof(sender));
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1553 sender[sizeof(sender)-1] = '\0';
129
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1554
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1555 // convert the sent date if it exists, or set it to a fixed date
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1556 if (item->email->sent_date) {
182
b65e8d0a088a more cleanup on external names in the shared object file
Carl Byington <carl@five-ten-sg.com>
parents: 172
diff changeset
1557 em_time = pst_fileTimeToUnixTime(item->email->sent_date);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1558 c_time = ctime(&em_time);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1559 if (c_time)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1560 c_time[strlen(c_time)-1] = '\0'; //remove end \n
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1561 else
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1562 c_time = "Thu Jan 1 00:00:00 1970";
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1563 } else
345
a8577226f7a9 fixes from AJ Shankar for attachment processing and body encodings that contain embedded null chars
Carl Byington <carl@five-ten-sg.com>
parents: 344
diff changeset
1564 c_time = "Thu Jan 1 00:00:00 1970";
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1565
205
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1566 // create our MIME boundaries here.
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1567 snprintf(boundary, sizeof(boundary), "--boundary-LibPST-iamunique-%i_-_-", rand());
205
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1568 snprintf(altboundary, sizeof(altboundary), "alt-%s", boundary);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1569
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1570 // we will always look at the headers to discover some stuff
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1571 if (headers ) {
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1572 char *t;
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1573 removeCR(headers);
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1574
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1575 temp = strstr(headers, "\n\n");
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1576 if (temp) {
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1577 // cut off our real rfc822 headers here
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1578 temp[1] = '\0';
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1579 // pointer to all the embedded MIME headers.
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1580 // we use these to find the actual rfc822 headers for embedded message/rfc822 mime parts
275
e02c81c39232 add some debug code
Carl Byington <carl@five-ten-sg.com>
parents: 274
diff changeset
1581 // but only for the outermost message
e02c81c39232 add some debug code
Carl Byington <carl@five-ten-sg.com>
parents: 274
diff changeset
1582 if (!*extra_mime_headers) *extra_mime_headers = temp+2;
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1583 DEBUG_INFO(("Found extra mime headers\n%s\n", temp+2));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1584 }
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1585
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1586 // Check if the headers have all the necessary fields
304
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1587 header_has_field(headers, "\nFrom:", &has_from);
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1588 header_has_field(headers, "\nTo:", &has_to);
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1589 header_has_field(headers, "\nSubject:", &has_subject);
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1590 header_has_field(headers, "\nDate:", &has_date);
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1591 header_has_field(headers, "\nCC:", &has_cc);
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1592 header_has_field(headers, "\nMessage-Id:", &has_msgid);
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1593
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1594 // look for charset and report-type in Content-Type header
304
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1595 t = header_get_field(headers, "\nContent-Type:");
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1596 header_get_subfield(t, "charset", body_charset, sizeof(body_charset));
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1597 header_get_subfield(t, "report-type", body_report, sizeof(body_report));
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
1598
129
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1599 // derive a proper sender email address
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1600 if (!sender_known) {
304
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1601 t = header_get_field(headers, "\nFrom:");
129
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1602 if (t) {
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1603 // assume address is on the first line, rather than on a continuation line
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1604 t++;
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1605 char *n = strchr(t, '\n');
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1606 char *s = strchr(t, '<');
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1607 char *e = strchr(t, '>');
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1608 if (s && e && n && (s < e) && (e < n)) {
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1609 char save = *e;
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1610 *e = '\0';
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1611 snprintf(sender, sizeof(sender), "%s", s+1);
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1612 *e = save;
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1613 }
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1614 }
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1615 }
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1616
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1617 // Strip out the mime headers and some others that we don't want to emit
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1618 header_strip_field(headers, "\nMicrosoft Mail Internet Headers");
304
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1619 header_strip_field(headers, "\nMIME-Version:");
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1620 header_strip_field(headers, "\nContent-Type:");
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1621 header_strip_field(headers, "\nContent-Transfer-Encoding:");
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1622 header_strip_field(headers, "\nContent-class:");
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1623 header_strip_field(headers, "\nX-MimeOLE:");
5338d93889aa preserve bcc headers, document -C switch to set default character set, space after colon is not required in header fields
Carl Byington <carl@five-ten-sg.com>
parents: 300
diff changeset
1624 header_strip_field(headers, "\nX-From_:");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1625 }
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1626
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1627 DEBUG_INFO(("About to print Header\n"));
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1628
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1629 if (item && item->subject.str) {
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1630 pst_convert_utf8(item, &item->subject);
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1631 DEBUG_INFO(("item->subject = %s\n", item->subject.str));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1632 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1633
139
1b3922080ca8 add forensic headers to capture some other data of interest; switch back to quoted From separator line
Carl Byington <carl@five-ten-sg.com>
parents: 129
diff changeset
1634 if (mode != MODE_SEPARATE) {
142
2189a6b8134e improve character set handling - don't try to convert utf-8 to single byte for fields that were not originally unicode.
Carl Byington <carl@five-ten-sg.com>
parents: 141
diff changeset
1635 // most modes need this separator line.
2189a6b8134e improve character set handling - don't try to convert utf-8 to single byte for fields that were not originally unicode.
Carl Byington <carl@five-ten-sg.com>
parents: 141
diff changeset
1636 // procmail produces this separator without the quotes around the
2189a6b8134e improve character set handling - don't try to convert utf-8 to single byte for fields that were not originally unicode.
Carl Byington <carl@five-ten-sg.com>
parents: 141
diff changeset
1637 // sender email address, but apparently some Mac email client needs
2189a6b8134e improve character set handling - don't try to convert utf-8 to single byte for fields that were not originally unicode.
Carl Byington <carl@five-ten-sg.com>
parents: 141
diff changeset
1638 // those quotes, and they don't seem to cause problems for anyone else.
323
2474d01043cd fix From quoting on embedded rfc/822 messages
Carl Byington <carl@five-ten-sg.com>
parents: 316
diff changeset
1639 char *quo = (embedding) ? ">" : "";
2474d01043cd fix From quoting on embedded rfc/822 messages
Carl Byington <carl@five-ten-sg.com>
parents: 316
diff changeset
1640 fprintf(f_output, "%sFrom \"%s\" %s\n", quo, sender, c_time);
139
1b3922080ca8 add forensic headers to capture some other data of interest; switch back to quoted From separator line
Carl Byington <carl@five-ten-sg.com>
parents: 129
diff changeset
1641 }
1b3922080ca8 add forensic headers to capture some other data of interest; switch back to quoted From separator line
Carl Byington <carl@five-ten-sg.com>
parents: 129
diff changeset
1642
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1643 // print the supplied email headers
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1644 if (headers) {
230
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
1645 int len = strlen(headers);
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
1646 if (len > 0) {
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
1647 fprintf(f_output, "%s", headers);
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
1648 // make sure the headers end with a \n
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
1649 if (headers[len-1] != '\n') fprintf(f_output, "\n");
257
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1650 //char *h = headers;
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1651 //while (*h) {
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1652 // char *e = strchr(h, '\n');
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1653 // int d = 1; // normally e points to trailing \n
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1654 // if (!e) {
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1655 // e = h + strlen(h); // e points to trailing null
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1656 // d = 0;
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1657 // }
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1658 // // we could do rfc2047 encoding here if needed
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1659 // fprintf(f_output, "%.*s\n", (int)(e-h), h);
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1660 // h = e + d;
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1661 //}
230
42b38d65f7e4 patches from Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 213
diff changeset
1662 }
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1663 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1664
292
e0e5844d91b3 patch from Leo Antunes for Status: header
Carl Byington <carl@five-ten-sg.com>
parents: 291
diff changeset
1665 // record read status
e0e5844d91b3 patch from Leo Antunes for Status: header
Carl Byington <carl@five-ten-sg.com>
parents: 291
diff changeset
1666 if ((item->flags & PST_FLAG_READ) == PST_FLAG_READ) {
e0e5844d91b3 patch from Leo Antunes for Status: header
Carl Byington <carl@five-ten-sg.com>
parents: 291
diff changeset
1667 fprintf(f_output, "Status: RO\n");
e0e5844d91b3 patch from Leo Antunes for Status: header
Carl Byington <carl@five-ten-sg.com>
parents: 291
diff changeset
1668 }
e0e5844d91b3 patch from Leo Antunes for Status: header
Carl Byington <carl@five-ten-sg.com>
parents: 291
diff changeset
1669
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1670 // create required header fields that are not already written
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1671
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1672 if (!has_from) {
246
5a82d41c883d patches from Kenneth Berland for solaris
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
1673 if (item->email->outlook_sender_name.str){
257
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1674 pst_rfc2047(item, &item->email->outlook_sender_name, 1);
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1675 fprintf(f_output, "From: %s <%s>\n", item->email->outlook_sender_name.str, sender);
246
5a82d41c883d patches from Kenneth Berland for solaris
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
1676 } else {
5a82d41c883d patches from Kenneth Berland for solaris
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
1677 fprintf(f_output, "From: <%s>\n", sender);
5a82d41c883d patches from Kenneth Berland for solaris
Carl Byington <carl@five-ten-sg.com>
parents: 242
diff changeset
1678 }
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1679 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1680
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1681 if (!has_subject) {
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1682 if (item->subject.str) {
257
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1683 pst_rfc2047(item, &item->subject, 0);
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1684 fprintf(f_output, "Subject: %s\n", item->subject.str);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1685 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1686 fprintf(f_output, "Subject: \n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1687 }
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1688 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1689
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1690 if (!has_to && item->email->sentto_address.str) {
257
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1691 pst_rfc2047(item, &item->email->sentto_address, 0);
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1692 fprintf(f_output, "To: %s\n", item->email->sentto_address.str);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1693 }
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
1694
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1695 if (!has_cc && item->email->cc_address.str) {
257
c947b8812120 rfc2047 and rfc2231 encoding for non-ascii headers and attachment filenames
Carl Byington <carl@five-ten-sg.com>
parents: 255
diff changeset
1696 pst_rfc2047(item, &item->email->cc_address, 0);
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1697 fprintf(f_output, "Cc: %s\n", item->email->cc_address.str);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1698 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1699
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1700 if (!has_date && item->email->sent_date) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1701 char c_time[C_TIME_SIZE];
200
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
1702 struct tm stm;
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
1703 gmtime_r(&em_time, &stm);
d360f96f71f6 start changes for parallel readpst on multi-processor machines
Carl Byington <carl@five-ten-sg.com>
parents: 199
diff changeset
1704 strftime(c_time, C_TIME_SIZE, "%a, %d %b %Y %H:%M:%S %z", &stm);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1705 fprintf(f_output, "Date: %s\n", c_time);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1706 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1707
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1708 if (!has_msgid && item->email->messageid.str) {
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1709 pst_convert_utf8(item, &item->email->messageid);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1710 fprintf(f_output, "Message-Id: %s\n", item->email->messageid.str);
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1711 }
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1712
139
1b3922080ca8 add forensic headers to capture some other data of interest; switch back to quoted From separator line
Carl Byington <carl@five-ten-sg.com>
parents: 129
diff changeset
1713 // add forensic headers to capture some .pst stuff that is not really
1b3922080ca8 add forensic headers to capture some other data of interest; switch back to quoted From separator line
Carl Byington <carl@five-ten-sg.com>
parents: 129
diff changeset
1714 // needed or used by mail clients
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1715 pst_convert_utf8_null(item, &item->email->sender_address);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1716 if (item->email->sender_address.str && !strchr(item->email->sender_address.str, '@')
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
1717 && strcmp(item->email->sender_address.str, ".")
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
1718 && (strlen(item->email->sender_address.str) > 0)) {
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1719 fprintf(f_output, "X-libpst-forensic-sender: %s\n", item->email->sender_address.str);
139
1b3922080ca8 add forensic headers to capture some other data of interest; switch back to quoted From separator line
Carl Byington <carl@five-ten-sg.com>
parents: 129
diff changeset
1720 }
1b3922080ca8 add forensic headers to capture some other data of interest; switch back to quoted From separator line
Carl Byington <carl@five-ten-sg.com>
parents: 129
diff changeset
1721
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1722 if (item->email->bcc_address.str) {
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1723 pst_convert_utf8(item, &item->email->bcc_address);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1724 fprintf(f_output, "X-libpst-forensic-bcc: %s\n", item->email->bcc_address.str);
139
1b3922080ca8 add forensic headers to capture some other data of interest; switch back to quoted From separator line
Carl Byington <carl@five-ten-sg.com>
parents: 129
diff changeset
1725 }
1b3922080ca8 add forensic headers to capture some other data of interest; switch back to quoted From separator line
Carl Byington <carl@five-ten-sg.com>
parents: 129
diff changeset
1726
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1727 // add our own mime headers
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1728 fprintf(f_output, "MIME-Version: 1.0\n");
234
ed0cb66b23d4 better detection of dsn delivery reports
Carl Byington <carl@five-ten-sg.com>
parents: 233
diff changeset
1729 if (item->type == PST_TYPE_REPORT) {
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1730 // multipart/report for DSN/MDN reports
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1731 fprintf(f_output, "Content-Type: multipart/report; report-type=%s;\n\tboundary=\"%s\"\n", body_report, boundary);
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1732 }
205
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1733 else {
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1734 fprintf(f_output, "Content-Type: multipart/mixed;\n\tboundary=\"%s\"\n", boundary);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1735 }
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1736 fprintf(f_output, "\n"); // end of headers, start of body
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1737
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1738 // now dump the body parts
234
ed0cb66b23d4 better detection of dsn delivery reports
Carl Byington <carl@five-ten-sg.com>
parents: 233
diff changeset
1739 if ((item->type == PST_TYPE_REPORT) && (item->email->report_text.str)) {
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1740 write_body_part(f_output, &item->email->report_text, "text/plain", body_charset, boundary, pst);
142
2189a6b8134e improve character set handling - don't try to convert utf-8 to single byte for fields that were not originally unicode.
Carl Byington <carl@five-ten-sg.com>
parents: 141
diff changeset
1741 fprintf(f_output, "\n");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1742 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1743
205
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1744 if (item->body.str && item->email->htmlbody.str) {
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1745 // start the nested alternative part
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1746 fprintf(f_output, "\n--%s\n", boundary);
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1747 fprintf(f_output, "Content-Type: multipart/alternative;\n\tboundary=\"%s\"\n", altboundary);
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1748 altboundaryp = altboundary;
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1749 }
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1750 else {
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1751 altboundaryp = boundary;
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1752 }
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1753
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1754 if (item->body.str) {
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1755 write_body_part(f_output, &item->body, "text/plain", body_charset, altboundaryp, pst);
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1756 }
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1757
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1758 if (item->email->htmlbody.str) {
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1759 find_html_charset(item->email->htmlbody.str, body_charset, sizeof(body_charset));
205
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1760 write_body_part(f_output, &item->email->htmlbody, "text/html", body_charset, altboundaryp, pst);
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1761 }
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1762
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1763 if (item->body.str && item->email->htmlbody.str) {
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1764 // end the nested alternative part
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1765 fprintf(f_output, "\n--%s--\n", altboundary);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1766 }
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1767
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
1768 if (item->email->rtf_compressed.data && save_rtf) {
172
6954d315aaa8 move version-info into main configure.in, and set it properly.
Carl Byington <carl@five-ten-sg.com>
parents: 171
diff changeset
1769 pst_item_attach* attach = (pst_item_attach*)pst_malloc(sizeof(pst_item_attach));
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1770 DEBUG_INFO(("Adding RTF body as attachment\n"));
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1771 memset(attach, 0, sizeof(pst_item_attach));
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1772 attach->next = item->attach;
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1773 item->attach = attach;
172
6954d315aaa8 move version-info into main configure.in, and set it properly.
Carl Byington <carl@five-ten-sg.com>
parents: 171
diff changeset
1774 attach->data.data = pst_lzfu_decompress(item->email->rtf_compressed.data, item->email->rtf_compressed.size, &attach->data.size);
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1775 attach->filename2.str = strdup(RTF_ATTACH_NAME);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1776 attach->filename2.is_utf8 = 1;
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1777 attach->mimetype.str = strdup(RTF_ATTACH_TYPE);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1778 attach->mimetype.is_utf8 = 1;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1779 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1780
205
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1781 if (item->email->encrypted_body.data) {
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1782 pst_item_attach* attach = (pst_item_attach*)pst_malloc(sizeof(pst_item_attach));
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1783 DEBUG_INFO(("Adding encrypted text body as attachment\n"));
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1784 memset(attach, 0, sizeof(pst_item_attach));
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1785 attach->next = item->attach;
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1786 item->attach = attach;
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1787 attach->data.data = item->email->encrypted_body.data;
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1788 attach->data.size = item->email->encrypted_body.size;
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1789 item->email->encrypted_body.data = NULL;
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1790 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1791
205
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1792 if (item->email->encrypted_htmlbody.data) {
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1793 pst_item_attach* attach = (pst_item_attach*)pst_malloc(sizeof(pst_item_attach));
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1794 DEBUG_INFO(("Adding encrypted HTML body as attachment\n"));
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1795 memset(attach, 0, sizeof(pst_item_attach));
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1796 attach->next = item->attach;
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1797 item->attach = attach;
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1798 attach->data.data = item->email->encrypted_htmlbody.data;
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1799 attach->data.size = item->email->encrypted_htmlbody.size;
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1800 item->email->encrypted_htmlbody.data = NULL;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1801 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1802
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1803 if (item->type == PST_TYPE_SCHEDULE) {
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1804 write_schedule_part(f_output, item, sender, boundary);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1805 }
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
1806
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1807 // other attachments
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1808 {
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1809 pst_item_attach* attach;
191
4b498fd68464 add pst_attach_to_mem() back into the shared library interface.
Carl Byington <carl@five-ten-sg.com>
parents: 186
diff changeset
1810 int attach_num = 0;
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1811 for (attach = item->attach; attach; attach = attach->next) {
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1812 pst_convert_utf8_null(item, &attach->filename1);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1813 pst_convert_utf8_null(item, &attach->filename2);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1814 pst_convert_utf8_null(item, &attach->mimetype);
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
1815 DEBUG_INFO(("Attempting Attachment encoding\n"));
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
1816 if (attach->method == PST_ATTACH_EMBEDDED) {
236
093e0e9248bb cleanup rfc822 embedded message code
Carl Byington <carl@five-ten-sg.com>
parents: 234
diff changeset
1817 DEBUG_INFO(("have an embedded rfc822 message attachment\n"));
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
1818 if (attach->mimetype.str) {
236
093e0e9248bb cleanup rfc822 embedded message code
Carl Byington <carl@five-ten-sg.com>
parents: 234
diff changeset
1819 DEBUG_INFO(("which already has a mime-type of %s\n", attach->mimetype.str));
233
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
1820 free(attach->mimetype.str);
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
1821 }
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
1822 attach->mimetype.str = strdup(RFC822);
1d50ff3c5091 better rfc822 embedded message decoding
Carl Byington <carl@five-ten-sg.com>
parents: 231
diff changeset
1823 attach->mimetype.is_utf8 = 1;
141
fd4297884319 improve decoding of multipart/report and message/rfc822 mime types
Carl Byington <carl@five-ten-sg.com>
parents: 139
diff changeset
1824 find_rfc822_headers(extra_mime_headers);
300
47abe56076da embedded rfc822 messages might contain rtf encoded bodies
Carl Byington <carl@five-ten-sg.com>
parents: 298
diff changeset
1825 write_embedded_message(f_output, attach, boundary, pst, save_rtf, extra_mime_headers);
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1826 }
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
1827 else if (attach->data.data || attach->i_id) {
328
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1828 if (acceptable_ext(attach)) {
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1829 if (mode == MODE_SEPARATE && !mode_MH)
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1830 write_separate_attachment(f_name, attach, ++attach_num, pst);
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1831 else
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1832 write_inline_attachment(f_output, attach, boundary, pst);
c507af52515a add readpst -a option
Carl Byington <carl@five-ten-sg.com>
parents: 323
diff changeset
1833 }
164
ab384fed78c5 Compensate for iconv conversion to utf-7 that produces strings that are not null terminated.
Carl Byington <carl@five-ten-sg.com>
parents: 154
diff changeset
1834 }
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1835 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1836 }
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1837
205
5f3fa53cb0e1 make nested mime multipart/alternative to hold the text/html parts
Carl Byington <carl@five-ten-sg.com>
parents: 203
diff changeset
1838 fprintf(f_output, "\n--%s--\n\n", boundary);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1839 DEBUG_RET();
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1840 }
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1841
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1842
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1843 void write_vcard(FILE* f_output, pst_item* item, pst_item_contact* contact, char comment[])
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1844 {
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1845 char* result = NULL;
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1846 size_t resultlen = 0;
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1847 char time_buffer[30];
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1848 // We can only call rfc escape once per printf, since the second call
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1849 // may free the buffer returned by the first call.
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1850 // I had tried to place those into a single printf - Carl.
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1851
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1852 DEBUG_ENT("write_vcard");
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1853
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1854 // make everything utf8
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1855 pst_convert_utf8_null(item, &contact->fullname);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1856 pst_convert_utf8_null(item, &contact->surname);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1857 pst_convert_utf8_null(item, &contact->first_name);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1858 pst_convert_utf8_null(item, &contact->middle_name);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1859 pst_convert_utf8_null(item, &contact->display_name_prefix);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1860 pst_convert_utf8_null(item, &contact->suffix);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1861 pst_convert_utf8_null(item, &contact->nickname);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1862 pst_convert_utf8_null(item, &contact->address1);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1863 pst_convert_utf8_null(item, &contact->address2);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1864 pst_convert_utf8_null(item, &contact->address3);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1865 pst_convert_utf8_null(item, &contact->home_po_box);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1866 pst_convert_utf8_null(item, &contact->home_street);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1867 pst_convert_utf8_null(item, &contact->home_city);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1868 pst_convert_utf8_null(item, &contact->home_state);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1869 pst_convert_utf8_null(item, &contact->home_postal_code);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1870 pst_convert_utf8_null(item, &contact->home_country);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1871 pst_convert_utf8_null(item, &contact->home_address);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1872 pst_convert_utf8_null(item, &contact->business_po_box);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1873 pst_convert_utf8_null(item, &contact->business_street);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1874 pst_convert_utf8_null(item, &contact->business_city);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1875 pst_convert_utf8_null(item, &contact->business_state);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1876 pst_convert_utf8_null(item, &contact->business_postal_code);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1877 pst_convert_utf8_null(item, &contact->business_country);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1878 pst_convert_utf8_null(item, &contact->business_address);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1879 pst_convert_utf8_null(item, &contact->other_po_box);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1880 pst_convert_utf8_null(item, &contact->other_street);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1881 pst_convert_utf8_null(item, &contact->other_city);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1882 pst_convert_utf8_null(item, &contact->other_state);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1883 pst_convert_utf8_null(item, &contact->other_postal_code);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1884 pst_convert_utf8_null(item, &contact->other_country);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1885 pst_convert_utf8_null(item, &contact->other_address);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1886 pst_convert_utf8_null(item, &contact->business_fax);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1887 pst_convert_utf8_null(item, &contact->business_phone);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1888 pst_convert_utf8_null(item, &contact->business_phone2);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1889 pst_convert_utf8_null(item, &contact->car_phone);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1890 pst_convert_utf8_null(item, &contact->home_fax);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1891 pst_convert_utf8_null(item, &contact->home_phone);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1892 pst_convert_utf8_null(item, &contact->home_phone2);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1893 pst_convert_utf8_null(item, &contact->isdn_phone);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1894 pst_convert_utf8_null(item, &contact->mobile_phone);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1895 pst_convert_utf8_null(item, &contact->other_phone);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1896 pst_convert_utf8_null(item, &contact->pager_phone);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1897 pst_convert_utf8_null(item, &contact->primary_fax);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1898 pst_convert_utf8_null(item, &contact->primary_phone);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1899 pst_convert_utf8_null(item, &contact->radio_phone);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1900 pst_convert_utf8_null(item, &contact->telex);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1901 pst_convert_utf8_null(item, &contact->job_title);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1902 pst_convert_utf8_null(item, &contact->profession);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1903 pst_convert_utf8_null(item, &contact->assistant_name);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1904 pst_convert_utf8_null(item, &contact->assistant_phone);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1905 pst_convert_utf8_null(item, &contact->company_name);
242
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
1906 pst_convert_utf8_null(item, &item->body);
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1907
50
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1908 // the specification I am following is (hopefully) RFC2426 vCard Mime Directory Profile
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1909 fprintf(f_output, "BEGIN:VCARD\n");
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1910 fprintf(f_output, "FN:%s\n", pst_rfc2426_escape(contact->fullname.str, &result, &resultlen));
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1911
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1912 //fprintf(f_output, "N:%s;%s;%s;%s;%s\n",
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1913 fprintf(f_output, "N:%s;", (!contact->surname.str) ? "" : pst_rfc2426_escape(contact->surname.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1914 fprintf(f_output, "%s;", (!contact->first_name.str) ? "" : pst_rfc2426_escape(contact->first_name.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1915 fprintf(f_output, "%s;", (!contact->middle_name.str) ? "" : pst_rfc2426_escape(contact->middle_name.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1916 fprintf(f_output, "%s;", (!contact->display_name_prefix.str) ? "" : pst_rfc2426_escape(contact->display_name_prefix.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1917 fprintf(f_output, "%s\n", (!contact->suffix.str) ? "" : pst_rfc2426_escape(contact->suffix.str, &result, &resultlen));
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1918
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1919 if (contact->nickname.str)
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1920 fprintf(f_output, "NICKNAME:%s\n", pst_rfc2426_escape(contact->nickname.str, &result, &resultlen));
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1921 if (contact->address1.str)
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1922 fprintf(f_output, "EMAIL:%s\n", pst_rfc2426_escape(contact->address1.str, &result, &resultlen));
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1923 if (contact->address2.str)
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1924 fprintf(f_output, "EMAIL:%s\n", pst_rfc2426_escape(contact->address2.str, &result, &resultlen));
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1925 if (contact->address3.str)
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1926 fprintf(f_output, "EMAIL:%s\n", pst_rfc2426_escape(contact->address3.str, &result, &resultlen));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1927 if (contact->birthday)
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
1928 fprintf(f_output, "BDAY:%s\n", pst_rfc2425_datetime_format(contact->birthday, sizeof(time_buffer), time_buffer));
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1929
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1930 if (contact->home_address.str) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1931 //fprintf(f_output, "ADR;TYPE=home:%s;%s;%s;%s;%s;%s;%s\n",
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1932 fprintf(f_output, "ADR;TYPE=home:%s;", (!contact->home_po_box.str) ? "" : pst_rfc2426_escape(contact->home_po_box.str, &result, &resultlen));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1933 fprintf(f_output, "%s;", ""); // extended Address
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1934 fprintf(f_output, "%s;", (!contact->home_street.str) ? "" : pst_rfc2426_escape(contact->home_street.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1935 fprintf(f_output, "%s;", (!contact->home_city.str) ? "" : pst_rfc2426_escape(contact->home_city.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1936 fprintf(f_output, "%s;", (!contact->home_state.str) ? "" : pst_rfc2426_escape(contact->home_state.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1937 fprintf(f_output, "%s;", (!contact->home_postal_code.str) ? "" : pst_rfc2426_escape(contact->home_postal_code.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1938 fprintf(f_output, "%s\n", (!contact->home_country.str) ? "" : pst_rfc2426_escape(contact->home_country.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1939 fprintf(f_output, "LABEL;TYPE=home:%s\n", pst_rfc2426_escape(contact->home_address.str, &result, &resultlen));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1940 }
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1941
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1942 if (contact->business_address.str) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1943 //fprintf(f_output, "ADR;TYPE=work:%s;%s;%s;%s;%s;%s;%s\n",
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1944 fprintf(f_output, "ADR;TYPE=work:%s;", (!contact->business_po_box.str) ? "" : pst_rfc2426_escape(contact->business_po_box.str, &result, &resultlen));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1945 fprintf(f_output, "%s;", ""); // extended Address
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1946 fprintf(f_output, "%s;", (!contact->business_street.str) ? "" : pst_rfc2426_escape(contact->business_street.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1947 fprintf(f_output, "%s;", (!contact->business_city.str) ? "" : pst_rfc2426_escape(contact->business_city.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1948 fprintf(f_output, "%s;", (!contact->business_state.str) ? "" : pst_rfc2426_escape(contact->business_state.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1949 fprintf(f_output, "%s;", (!contact->business_postal_code.str) ? "" : pst_rfc2426_escape(contact->business_postal_code.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1950 fprintf(f_output, "%s\n", (!contact->business_country.str) ? "" : pst_rfc2426_escape(contact->business_country.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1951 fprintf(f_output, "LABEL;TYPE=work:%s\n", pst_rfc2426_escape(contact->business_address.str, &result, &resultlen));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1952 }
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1953
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1954 if (contact->other_address.str) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1955 //fprintf(f_output, "ADR;TYPE=postal:%s;%s;%s;%s;%s;%s;%s\n",
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1956 fprintf(f_output, "ADR;TYPE=postal:%s;",(!contact->other_po_box.str) ? "" : pst_rfc2426_escape(contact->other_po_box.str, &result, &resultlen));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1957 fprintf(f_output, "%s;", ""); // extended Address
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1958 fprintf(f_output, "%s;", (!contact->other_street.str) ? "" : pst_rfc2426_escape(contact->other_street.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1959 fprintf(f_output, "%s;", (!contact->other_city.str) ? "" : pst_rfc2426_escape(contact->other_city.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1960 fprintf(f_output, "%s;", (!contact->other_state.str) ? "" : pst_rfc2426_escape(contact->other_state.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1961 fprintf(f_output, "%s;", (!contact->other_postal_code.str) ? "" : pst_rfc2426_escape(contact->other_postal_code.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1962 fprintf(f_output, "%s\n", (!contact->other_country.str) ? "" : pst_rfc2426_escape(contact->other_country.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1963 fprintf(f_output, "LABEL;TYPE=postal:%s\n", pst_rfc2426_escape(contact->other_address.str, &result, &resultlen));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1964 }
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1965
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1966 if (contact->business_fax.str) fprintf(f_output, "TEL;TYPE=work,fax:%s\n", pst_rfc2426_escape(contact->business_fax.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1967 if (contact->business_phone.str) fprintf(f_output, "TEL;TYPE=work,voice:%s\n", pst_rfc2426_escape(contact->business_phone.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1968 if (contact->business_phone2.str) fprintf(f_output, "TEL;TYPE=work,voice:%s\n", pst_rfc2426_escape(contact->business_phone2.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1969 if (contact->car_phone.str) fprintf(f_output, "TEL;TYPE=car,voice:%s\n", pst_rfc2426_escape(contact->car_phone.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1970 if (contact->home_fax.str) fprintf(f_output, "TEL;TYPE=home,fax:%s\n", pst_rfc2426_escape(contact->home_fax.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1971 if (contact->home_phone.str) fprintf(f_output, "TEL;TYPE=home,voice:%s\n", pst_rfc2426_escape(contact->home_phone.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1972 if (contact->home_phone2.str) fprintf(f_output, "TEL;TYPE=home,voice:%s\n", pst_rfc2426_escape(contact->home_phone2.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1973 if (contact->isdn_phone.str) fprintf(f_output, "TEL;TYPE=isdn:%s\n", pst_rfc2426_escape(contact->isdn_phone.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1974 if (contact->mobile_phone.str) fprintf(f_output, "TEL;TYPE=cell,voice:%s\n", pst_rfc2426_escape(contact->mobile_phone.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1975 if (contact->other_phone.str) fprintf(f_output, "TEL;TYPE=msg:%s\n", pst_rfc2426_escape(contact->other_phone.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1976 if (contact->pager_phone.str) fprintf(f_output, "TEL;TYPE=pager:%s\n", pst_rfc2426_escape(contact->pager_phone.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1977 if (contact->primary_fax.str) fprintf(f_output, "TEL;TYPE=fax,pref:%s\n", pst_rfc2426_escape(contact->primary_fax.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1978 if (contact->primary_phone.str) fprintf(f_output, "TEL;TYPE=phone,pref:%s\n", pst_rfc2426_escape(contact->primary_phone.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1979 if (contact->radio_phone.str) fprintf(f_output, "TEL;TYPE=pcs:%s\n", pst_rfc2426_escape(contact->radio_phone.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1980 if (contact->telex.str) fprintf(f_output, "TEL;TYPE=bbs:%s\n", pst_rfc2426_escape(contact->telex.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1981 if (contact->job_title.str) fprintf(f_output, "TITLE:%s\n", pst_rfc2426_escape(contact->job_title.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1982 if (contact->profession.str) fprintf(f_output, "ROLE:%s\n", pst_rfc2426_escape(contact->profession.str, &result, &resultlen));
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
1983 if (contact->assistant_name.str || contact->assistant_phone.str) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1984 fprintf(f_output, "AGENT:BEGIN:VCARD\n");
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1985 if (contact->assistant_name.str) fprintf(f_output, "FN:%s\n", pst_rfc2426_escape(contact->assistant_name.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1986 if (contact->assistant_phone.str) fprintf(f_output, "TEL:%s\n", pst_rfc2426_escape(contact->assistant_phone.str, &result, &resultlen));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1987 }
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1988 if (contact->company_name.str) fprintf(f_output, "ORG:%s\n", pst_rfc2426_escape(contact->company_name.str, &result, &resultlen));
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1989 if (comment) fprintf(f_output, "NOTE:%s\n", pst_rfc2426_escape(comment, &result, &resultlen));
242
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
1990 if (item->body.str) fprintf(f_output, "NOTE:%s\n", pst_rfc2426_escape(item->body.str, &result, &resultlen));
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
1991
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
1992 write_extra_categories(f_output, item);
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1993
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1994 fprintf(f_output, "VERSION: 3.0\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1995 fprintf(f_output, "END:VCARD\n\n");
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
1996 if (result) free(result);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1997 DEBUG_RET();
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1998 }
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1999
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
2000
242
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2001 /**
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2002 * write extra vcard or vcalendar categories from the extra keywords fields
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2003 *
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2004 * @param f_output open file pointer
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2005 * @param item pst item containing the keywords
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2006 * @return true if we write a categories line
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2007 */
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2008 int write_extra_categories(FILE* f_output, pst_item* item)
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2009 {
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2010 char* result = NULL;
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2011 size_t resultlen = 0;
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2012 pst_item_extra_field *ef = item->extra_fields;
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2013 const char *fmt = "CATEGORIES:%s";
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2014 int category_started = 0;
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2015 while (ef) {
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2016 if (strcmp(ef->field_name, "Keywords") == 0) {
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2017 fprintf(f_output, fmt, pst_rfc2426_escape(ef->value, &result, &resultlen));
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2018 fmt = ", %s";
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2019 category_started = 1;
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2020 }
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2021 ef = ef->next;
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2022 }
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2023 if (category_started) fprintf(f_output, "\n");
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2024 if (result) free(result);
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2025 return category_started;
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2026 }
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2027
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2028
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2029 void write_journal(FILE* f_output, pst_item* item)
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
2030 {
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
2031 char* result = NULL;
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
2032 size_t resultlen = 0;
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
2033 char time_buffer[30];
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2034 pst_item_journal* journal = item->journal;
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2035
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2036 // make everything utf8
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2037 pst_convert_utf8_null(item, &item->subject);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2038 pst_convert_utf8_null(item, &item->body);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2039
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2040 fprintf(f_output, "BEGIN:VJOURNAL\n");
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2041 fprintf(f_output, "DTSTAMP:%s\n", pst_rfc2445_datetime_format_now(sizeof(time_buffer), time_buffer));
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2042 if (item->create_date)
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2043 fprintf(f_output, "CREATED:%s\n", pst_rfc2445_datetime_format(item->create_date, sizeof(time_buffer), time_buffer));
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2044 if (item->modify_date)
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2045 fprintf(f_output, "LAST-MOD:%s\n", pst_rfc2445_datetime_format(item->modify_date, sizeof(time_buffer), time_buffer));
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2046 if (item->subject.str)
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
2047 fprintf(f_output, "SUMMARY:%s\n", pst_rfc2426_escape(item->subject.str, &result, &resultlen));
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2048 if (item->body.str)
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
2049 fprintf(f_output, "DESCRIPTION:%s\n", pst_rfc2426_escape(item->body.str, &result, &resultlen));
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2050 if (journal && journal->start)
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2051 fprintf(f_output, "DTSTART;VALUE=DATE-TIME:%s\n", pst_rfc2445_datetime_format(journal->start, sizeof(time_buffer), time_buffer));
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2052 fprintf(f_output, "END:VJOURNAL\n");
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
2053 if (result) free(result);
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2054 }
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2055
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2056
242
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2057 void write_appointment(FILE* f_output, pst_item* item)
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2058 {
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
2059 char* result = NULL;
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
2060 size_t resultlen = 0;
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
2061 char time_buffer[30];
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2062 pst_item_appointment* appointment = item->appointment;
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2063
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
2064 // make everything utf8
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
2065 pst_convert_utf8_null(item, &item->subject);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
2066 pst_convert_utf8_null(item, &item->body);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
2067 pst_convert_utf8_null(item, &appointment->location);
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
2068
297
8b3a827b71f4 add alarm reminders to calendar events
Carl Byington <carl@five-ten-sg.com>
parents: 292
diff changeset
2069 fprintf(f_output, "UID:%#"PRIx64"\n", item->block_id);
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2070 fprintf(f_output, "DTSTAMP:%s\n", pst_rfc2445_datetime_format_now(sizeof(time_buffer), time_buffer));
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2071 if (item->create_date)
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2072 fprintf(f_output, "CREATED:%s\n", pst_rfc2445_datetime_format(item->create_date, sizeof(time_buffer), time_buffer));
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2073 if (item->modify_date)
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2074 fprintf(f_output, "LAST-MOD:%s\n", pst_rfc2445_datetime_format(item->modify_date, sizeof(time_buffer), time_buffer));
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
2075 if (item->subject.str)
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
2076 fprintf(f_output, "SUMMARY:%s\n", pst_rfc2426_escape(item->subject.str, &result, &resultlen));
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
2077 if (item->body.str)
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
2078 fprintf(f_output, "DESCRIPTION:%s\n", pst_rfc2426_escape(item->body.str, &result, &resultlen));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2079 if (appointment && appointment->start)
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2080 fprintf(f_output, "DTSTART;VALUE=DATE-TIME:%s\n", pst_rfc2445_datetime_format(appointment->start, sizeof(time_buffer), time_buffer));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2081 if (appointment && appointment->end)
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2082 fprintf(f_output, "DTEND;VALUE=DATE-TIME:%s\n", pst_rfc2445_datetime_format(appointment->end, sizeof(time_buffer), time_buffer));
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
2083 if (appointment && appointment->location.str)
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
2084 fprintf(f_output, "LOCATION:%s\n", pst_rfc2426_escape(appointment->location.str, &result, &resultlen));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2085 if (appointment) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2086 switch (appointment->showas) {
50
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2087 case PST_FREEBUSY_TENTATIVE:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2088 fprintf(f_output, "STATUS:TENTATIVE\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2089 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2090 case PST_FREEBUSY_FREE:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2091 // mark as transparent and as confirmed
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2092 fprintf(f_output, "TRANSP:TRANSPARENT\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2093 case PST_FREEBUSY_BUSY:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2094 case PST_FREEBUSY_OUT_OF_OFFICE:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2095 fprintf(f_output, "STATUS:CONFIRMED\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2096 break;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2097 }
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2098 if (appointment->is_recurring) {
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2099 const char* rules[] = {"DAILY", "WEEKLY", "MONTHLY", "YEARLY"};
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2100 const char* days[] = {"SU", "MO", "TU", "WE", "TH", "FR", "SA"};
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2101 pst_recurrence *rdata = pst_convert_recurrence(appointment);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2102 fprintf(f_output, "RRULE:FREQ=%s", rules[rdata->type]);
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2103 if (rdata->count) fprintf(f_output, ";COUNT=%u", rdata->count);
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
2104 if ((rdata->interval != 1) &&
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
2105 (rdata->interval)) fprintf(f_output, ";INTERVAL=%u", rdata->interval);
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2106 if (rdata->dayofmonth) fprintf(f_output, ";BYMONTHDAY=%d", rdata->dayofmonth);
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2107 if (rdata->monthofyear) fprintf(f_output, ";BYMONTH=%d", rdata->monthofyear);
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2108 if (rdata->position) fprintf(f_output, ";BYSETPOS=%d", rdata->position);
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2109 if (rdata->bydaymask) {
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2110 char byday[40];
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2111 int empty = 1;
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2112 int i=0;
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2113 memset(byday, 0, sizeof(byday));
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2114 for (i=0; i<6; i++) {
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2115 int bit = 1 << i;
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2116 if (bit & rdata->bydaymask) {
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2117 char temp[40];
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
2118 snprintf(temp, sizeof(temp), "%s%s%s", byday, (empty) ? ";BYDAY=" : ";", days[i]);
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2119 strcpy(byday, temp);
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2120 empty = 0;
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2121 }
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2122 }
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
2123 fprintf(f_output, "%s", byday);
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
2124 }
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2125 fprintf(f_output, "\n");
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2126 pst_free_recurrence(rdata);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2127 }
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2128 switch (appointment->label) {
50
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2129 case PST_APP_LABEL_NONE:
242
67b24d6a45d6 patch from Hugo DesRosiers to export categories and notes into vcards.
Carl Byington <carl@five-ten-sg.com>
parents: 239
diff changeset
2130 if (!write_extra_categories(f_output, item)) fprintf(f_output, "CATEGORIES:NONE\n");
50
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2131 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2132 case PST_APP_LABEL_IMPORTANT:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2133 fprintf(f_output, "CATEGORIES:IMPORTANT\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2134 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2135 case PST_APP_LABEL_BUSINESS:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2136 fprintf(f_output, "CATEGORIES:BUSINESS\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2137 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2138 case PST_APP_LABEL_PERSONAL:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2139 fprintf(f_output, "CATEGORIES:PERSONAL\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2140 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2141 case PST_APP_LABEL_VACATION:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2142 fprintf(f_output, "CATEGORIES:VACATION\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2143 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2144 case PST_APP_LABEL_MUST_ATTEND:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2145 fprintf(f_output, "CATEGORIES:MUST-ATTEND\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2146 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2147 case PST_APP_LABEL_TRAVEL_REQ:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2148 fprintf(f_output, "CATEGORIES:TRAVEL-REQUIRED\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2149 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2150 case PST_APP_LABEL_NEEDS_PREP:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2151 fprintf(f_output, "CATEGORIES:NEEDS-PREPARATION\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2152 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2153 case PST_APP_LABEL_BIRTHDAY:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2154 fprintf(f_output, "CATEGORIES:BIRTHDAY\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2155 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2156 case PST_APP_LABEL_ANNIVERSARY:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2157 fprintf(f_output, "CATEGORIES:ANNIVERSARY\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2158 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2159 case PST_APP_LABEL_PHONE_CALL:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2160 fprintf(f_output, "CATEGORIES:PHONE-CALL\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
2161 break;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2162 }
297
8b3a827b71f4 add alarm reminders to calendar events
Carl Byington <carl@five-ten-sg.com>
parents: 292
diff changeset
2163 // ignore bogus alarms
8b3a827b71f4 add alarm reminders to calendar events
Carl Byington <carl@five-ten-sg.com>
parents: 292
diff changeset
2164 if (appointment->alarm && (appointment->alarm_minutes >= 0) && (appointment->alarm_minutes < 1440)) {
8b3a827b71f4 add alarm reminders to calendar events
Carl Byington <carl@five-ten-sg.com>
parents: 292
diff changeset
2165 fprintf(f_output, "BEGIN:VALARM\n");
8b3a827b71f4 add alarm reminders to calendar events
Carl Byington <carl@five-ten-sg.com>
parents: 292
diff changeset
2166 fprintf(f_output, "TRIGGER:-PT%dM\n", appointment->alarm_minutes);
8b3a827b71f4 add alarm reminders to calendar events
Carl Byington <carl@five-ten-sg.com>
parents: 292
diff changeset
2167 fprintf(f_output, "ACTION:DISPLAY\n");
8b3a827b71f4 add alarm reminders to calendar events
Carl Byington <carl@five-ten-sg.com>
parents: 292
diff changeset
2168 fprintf(f_output, "DESCRIPTION:Reminder\n");
8b3a827b71f4 add alarm reminders to calendar events
Carl Byington <carl@five-ten-sg.com>
parents: 292
diff changeset
2169 fprintf(f_output, "END:VALARM\n");
8b3a827b71f4 add alarm reminders to calendar events
Carl Byington <carl@five-ten-sg.com>
parents: 292
diff changeset
2170 }
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2171 }
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2172 fprintf(f_output, "END:VEVENT\n");
211
94bde95d7e18 the shared library interface should now be thread safe
Carl Byington <carl@five-ten-sg.com>
parents: 205
diff changeset
2173 if (result) free(result);
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
2174 }
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
2175
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
2176
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
2177 void create_enter_dir(struct file_ll* f, pst_item *item)
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
2178 {
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
2179 pst_convert_utf8(item, &item->file_as);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2180 f->type = item->type;
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
2181 f->stored_count = (item->folder) ? item->folder->item_count : 0;
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
2182
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2183 DEBUG_ENT("create_enter_dir");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2184 if (mode == MODE_KMAIL)
154
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
2185 f->name = mk_kmail_dir(item->file_as.str);
231
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2186 else if (mode == MODE_RECURSE) {
154
581fab9f1dc7 avoid emitting bogus empty email messages into contacts and calendar files
Carl Byington <carl@five-ten-sg.com>
parents: 151
diff changeset
2187 f->name = mk_recurse_dir(item->file_as.str, f->type);
231
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2188 if (mode_thunder) {
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2189 FILE *type_file = fopen(".type", "w");
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2190 fprintf(type_file, "%d\n", item->type);
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2191 fclose(type_file);
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2192 }
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2193 } else if (mode == MODE_SEPARATE) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2194 // do similar stuff to recurse here.
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
2195 mk_separate_dir(item->file_as.str);
239
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
2196 f->name = (char*) pst_malloc(file_name_len);
aa50c23a6935 patch from Lee Ayres to add file name extensions in separate mode; allow mixed items types in a folder in separate mode
Carl Byington <carl@five-ten-sg.com>
parents: 238
diff changeset
2197 memset(f->name, 0, file_name_len);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2198 } else {
172
6954d315aaa8 move version-info into main configure.in, and set it properly.
Carl Byington <carl@five-ten-sg.com>
parents: 171
diff changeset
2199 f->name = (char*) pst_malloc(strlen(item->file_as.str)+strlen(OUTPUT_TEMPLATE)+1);
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
2200 sprintf(f->name, OUTPUT_TEMPLATE, item->file_as.str);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2201 }
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
2202
172
6954d315aaa8 move version-info into main configure.in, and set it properly.
Carl Byington <carl@five-ten-sg.com>
parents: 171
diff changeset
2203 f->dname = (char*) pst_malloc(strlen(item->file_as.str)+1);
151
cda7c812ec01 track character set individually for each mapi element
Carl Byington <carl@five-ten-sg.com>
parents: 150
diff changeset
2204 strcpy(f->dname, item->file_as.str);
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
2205
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2206 if (overwrite != 1) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2207 int x = 0;
172
6954d315aaa8 move version-info into main configure.in, and set it properly.
Carl Byington <carl@five-ten-sg.com>
parents: 171
diff changeset
2208 char *temp = (char*) pst_malloc (strlen(f->name)+10); //enough room for 10 digits
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
2209
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2210 sprintf(temp, "%s", f->name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2211 check_filename(temp);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2212 while ((f->output = fopen(temp, "r"))) {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
2213 DEBUG_INFO(("need to increase filename because one already exists with that name\n"));
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
2214 DEBUG_INFO(("- increasing it to %s%d\n", f->name, x));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2215 x++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2216 sprintf(temp, "%s%08d", f->name, x);
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
2217 DEBUG_INFO(("- trying \"%s\"\n", f->name));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2218 if (x == 99999999) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2219 DIE(("create_enter_dir: Why can I not create a folder %s? I have tried %i extensions...\n", f->name, x));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2220 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2221 fclose(f->output);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2222 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2223 if (x > 0) { //then the f->name should change
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2224 free (f->name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2225 f->name = temp;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2226 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2227 free(temp);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2228 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2229 }
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
2230
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
2231 DEBUG_INFO(("f->name = %s\nitem->folder_name = %s\n", f->name, item->file_as.str));
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
2232 if (mode != MODE_SEPARATE) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2233 check_filename(f->name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2234 if (!(f->output = fopen(f->name, "w"))) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2235 DIE(("create_enter_dir: Could not open file \"%s\" for write\n", f->name));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2236 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2237 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2238 DEBUG_RET();
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
2239 }
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
2240
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
2241
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
2242 void close_enter_dir(struct file_ll *f)
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
2243 {
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
2244 DEBUG_INFO(("processed item count for folder %s is %i, skipped %i, total %i \n",
167
40e9de445038 improve consistency checking when fetching items from the pst file.
Carl Byington <carl@five-ten-sg.com>
parents: 164
diff changeset
2245 f->dname, f->item_count, f->skip_count, f->stored_count));
202
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
2246 if (output_mode != OUTPUT_QUIET) {
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
2247 pst_debug_lock();
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
2248 printf("\t\"%s\" - %i items done, %i items skipped.\n", f->dname, f->item_count, f->skip_count);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
2249 fflush(stdout);
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
2250 pst_debug_unlock();
2f38c4ce606f remove readpstlog, switch to plain ascii debug log files
Carl Byington <carl@five-ten-sg.com>
parents: 201
diff changeset
2251 }
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2252 if (f->output) {
291
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
2253 if (mode == MODE_SEPARATE) DEBUG_WARN(("close_enter_dir finds open separate file\n"));
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2254 struct stat st;
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2255 fclose(f->output);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2256 stat(f->name, &st);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2257 if (!st.st_size) {
201
3850a3b11745 fixes for parallel readpst
Carl Byington <carl@five-ten-sg.com>
parents: 200
diff changeset
2258 DEBUG_WARN(("removing empty output file %s\n", f->name));
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2259 remove(f->name);
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2260 }
291
bc23fba0da8e possible fix for corrupted output forking for separate messages
Carl Byington <carl@five-ten-sg.com>
parents: 290
diff changeset
2261 f->output = NULL;
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 197
diff changeset
2262 }
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2263 free(f->name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2264 free(f->dname);
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
2265
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2266 if (mode == MODE_KMAIL)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2267 close_kmail_dir();
231
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2268 else if (mode == MODE_RECURSE) {
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2269 if (mode_thunder) {
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2270 FILE *type_file = fopen(".size", "w");
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2271 fprintf(type_file, "%i %i\n", f->item_count, f->stored_count);
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2272 fclose(type_file);
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2273 }
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
2274 close_recurse_dir();
231
fe64279df92b patches from Chris White, Roberto Polli, Justin Greer
Carl Byington <carl@five-ten-sg.com>
parents: 230
diff changeset
2275 } else if (mode == MODE_SEPARATE)
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
2276 close_separate_dir();
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
2277 }
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
2278