~ubuntu-branches/ubuntu/precise/topal/precise

« back to all changes in this revision

Viewing changes to alpine-1.00.patch

  • Committer: Bazaar Package Importer
  • Author(s): Phil Brooke
  • Date: 2008-07-18 07:57:38 UTC
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20080718075738-i1szqvmxz0evz32p
Tags: upstream-62
ImportĀ upstreamĀ versionĀ 62

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
diff -cr alpine-1.00.orig/alpine/send.c alpine-1.00.new/alpine/send.c
 
2
*** alpine-1.00.orig/alpine/send.c      2007-12-05 17:50:54.000000000 +0000
 
3
--- alpine-1.00.new/alpine/send.c       2008-01-07 15:19:45.000000000 +0000
 
4
***************
 
5
*** 4025,4030 ****
 
6
--- 4025,4047 ----
 
7
      pbf = save_previous_pbuf;
 
8
      g_rolenick = NULL;
 
9
  
 
10
+     /* Topal: Unmangle the body types. */
 
11
+     if ((*body)->type == TYPEMULTIPART 
 
12
+       && (*body)->topal_hack == 1) {
 
13
+       /* This was a single part message which Topal mangled. */
 
14
+       dprint((9, "Topal: unmangling single part message\n"));
 
15
+       (*body)->type = TYPETEXT;
 
16
+     }
 
17
+     if ((*body)->type == TYPEMULTIPART
 
18
+       && (*body)->topal_hack != 1
 
19
+       && (*body)->nested.part->body.type == TYPEMULTIPART
 
20
+       && (*body)->nested.part->body.topal_hack == 1) {
 
21
+       /* Topal mangled a multipart message.  So the first nested part
 
22
+        is really TYPETEXT. */
 
23
+       dprint((9, "Topal: unmangling first part of multipart message\n"));
 
24
+       (*body)->nested.part->body.type = TYPETEXT;
 
25
+     }
 
26
 
27
      dprint((4, "=== send returning ===\n"));
 
28
  }
 
29
  
 
30
***************
 
31
*** 5265,5286 ****
 
32
  
 
33
                                rfc822_parse_content_header(nb,
 
34
                                    (char *) ucase((unsigned char *) buf+8),s);
 
35
                                if(nb->type == TYPETEXT
 
36
                                   && nb->subtype
 
37
                                   && (!b->subtype 
 
38
                                       || strucmp(b->subtype, nb->subtype))){
 
39
!                                   if(b->subtype)
 
40
!                                     fs_give((void **) &b->subtype);
 
41
 
42
                                    b->subtype  = nb->subtype;
 
43
                                    nb->subtype = NULL;
 
44
!                                     
 
45
                                    mail_free_body_parameter(&b->parameter);
 
46
                                    b->parameter = nb->parameter;
 
47
                                    nb->parameter = NULL;
 
48
                                    mail_free_body_parameter(&nb->parameter);
 
49
                                }
 
50
 
51
                                mail_free_body(&nb);
 
52
                            }
 
53
  
 
54
--- 5282,5331 ----
 
55
  
 
56
                                rfc822_parse_content_header(nb,
 
57
                                    (char *) ucase((unsigned char *) buf+8),s);
 
58
+                               /* Topal: We're working on the first
 
59
+                                  text segment of the message.  If
 
60
+                                  the filter returns something that
 
61
+                                  isn't TYPETEXT, then we need to
 
62
+                                  pretend (later on) that this is in
 
63
+                                  fact a TYPETEXT, because Topal has
 
64
+                                  already encoded it....
 
65
 
66
+                                  Original code path first, then an
 
67
+                                  alternate path.
 
68
+                               */
 
69
                                if(nb->type == TYPETEXT
 
70
                                   && nb->subtype
 
71
                                   && (!b->subtype 
 
72
                                       || strucmp(b->subtype, nb->subtype))){
 
73
!                                 if(b->subtype)
 
74
!                                   fs_give((void **) &b->subtype);
 
75
!                                 
 
76
!                                 b->subtype  = nb->subtype;
 
77
!                                 nb->subtype = NULL;
 
78
!                                 
 
79
!                                 mail_free_body_parameter(&b->parameter);
 
80
!                                 b->parameter = nb->parameter;
 
81
!                                 nb->parameter = NULL;
 
82
!                                 mail_free_body_parameter(&nb->parameter);
 
83
!                               } 
 
84
!                               else if(F_ON(F_ENABLE_TOPAL_HACK, ps_global)){
 
85
!                                 /* Perhaps the type isn't TYPETEXT,
 
86
!                                    and the hack is requested.  So,
 
87
!                                    let's mess with the types. */
 
88
!                                 if(nb->type != TYPETEXT){
 
89
!                                   b->type     = nb->type;
 
90
                                    b->subtype  = nb->subtype;
 
91
                                    nb->subtype = NULL;
 
92
!                                   
 
93
!                                   dprint((9, "Topal: mangling body!\n"));
 
94
                                    mail_free_body_parameter(&b->parameter);
 
95
                                    b->parameter = nb->parameter;
 
96
                                    nb->parameter = NULL;
 
97
                                    mail_free_body_parameter(&nb->parameter);
 
98
+                                   b->topal_hack = 1;
 
99
+                                 }
 
100
                                }
 
101
!                               /* Topal: end */
 
102
                                mail_free_body(&nb);
 
103
                            }
 
104
  
 
105
Only in alpine-1.00.new/imap: ip6
 
106
diff -cr alpine-1.00.orig/imap/src/c-client/mail.h alpine-1.00.new/imap/src/c-client/mail.h
 
107
*** alpine-1.00.orig/imap/src/c-client/mail.h   2007-11-19 23:32:35.000000000 +0000
 
108
--- alpine-1.00.new/imap/src/c-client/mail.h    2008-01-07 12:54:20.000000000 +0000
 
109
***************
 
110
*** 775,780 ****
 
111
--- 775,781 ----
 
112
      unsigned long bytes;      /* size of text in octets */
 
113
    } size;
 
114
    char *md5;                  /* MD5 checksum */
 
115
+   unsigned short topal_hack;    /* set to 1 if topal has wrecked the sending */
 
116
    void *sparep;                       /* spare pointer reserved for main program */
 
117
  };
 
118
  
 
119
diff -cr alpine-1.00.orig/pith/conf.c alpine-1.00.new/pith/conf.c
 
120
*** alpine-1.00.orig/pith/conf.c        2007-12-13 19:31:13.000000000 +0000
 
121
--- alpine-1.00.new/pith/conf.c 2008-01-07 14:00:58.000000000 +0000
 
122
***************
 
123
*** 2778,2783 ****
 
124
--- 2778,2785 ----
 
125
         F_SEND_WO_CONFIRM, h_config_send_wo_confirm, PREF_SEND, 0},
 
126
        {"strip-whitespace-before-send", "Strip Whitespace Before Sending",
 
127
         F_STRIP_WS_BEFORE_SEND, h_config_strip_ws_before_send, PREF_SEND, 0},
 
128
+       {"enable-topal-hack", "Enable Topal hack for OpenPGP/MIME messages",
 
129
+        F_ENABLE_TOPAL_HACK, h_config_enable_topal_hack, PREF_HIDDEN, 0},
 
130
        {"warn-if-blank-subject", "Warn if Blank Subject",
 
131
         F_WARN_ABOUT_NO_SUBJECT, h_config_warn_if_subj_blank, PREF_SEND, 0},
 
132
        {"warn-if-blank-to-and-cc-and-newsgroups", "Warn if Blank To and CC and Newsgroups",
 
133
diff -cr alpine-1.00.orig/pith/conftype.h alpine-1.00.new/pith/conftype.h
 
134
*** alpine-1.00.orig/pith/conftype.h    2007-11-08 01:14:02.000000000 +0000
 
135
--- alpine-1.00.new/pith/conftype.h     2008-01-07 12:50:47.000000000 +0000
 
136
***************
 
137
*** 487,492 ****
 
138
--- 487,493 ----
 
139
        F_MARK_FCC_SEEN,
 
140
        F_MULNEWSRC_HOSTNAMES_AS_TYPED,
 
141
        F_STRIP_WS_BEFORE_SEND,
 
142
+       F_ENABLE_TOPAL_HACK,
 
143
        F_QUELL_FLOWED_TEXT,
 
144
        F_COMPOSE_ALWAYS_DOWNGRADE,
 
145
        F_SORT_DEFAULT_FCC_ALPHA,
 
146
diff -cr alpine-1.00.orig/pith/pine.hlp alpine-1.00.new/pith/pine.hlp
 
147
*** alpine-1.00.orig/pith/pine.hlp      2007-12-20 16:34:31.000000000 +0000
 
148
--- alpine-1.00.new/pith/pine.hlp       2008-01-07 12:47:42.000000000 +0000
 
149
***************
 
150
*** 3023,3028 ****
 
151
--- 3023,3029 ----
 
152
  <li><a href="h_config_strip_sigdashes">FEATURE: <!--#echo var="FEAT_strip-from-sigdashes-on-reply"--></a>
 
153
  <li><a href="h_config_forward_as_attachment">FEATURE: <!--#echo var="FEAT_forward-as-attachment"--></a>
 
154
  <li><a href="h_config_strip_ws_before_send">FEATURE: <!--#echo var="FEAT_strip-whitespace-before-send"--></a>
 
155
+ <li><a href="h_config_enable_topal_hack">FEATURE: <!--#echo var="FEAT_enable-topal-hack"--></a>
 
156
  <li><a href="h_config_quell_attach_ext_warn">FEATURE: <!--#echo var="FEAT_quell-attachment-extension-warn"--></a>
 
157
  <li><a href="h_config_quell_attach_extra_prompt">FEATURE: <!--#echo var="FEAT_quell-attachment-extra-prompt"--></a>
 
158
  <li><a href="h_config_no_bezerk_zone">FEATURE: <!--#echo var="FEAT_quell-berkeley-format-timezone"--></a>
 
159
***************
 
160
*** 27962,27967 ****
 
161
--- 27963,27983 ----
 
162
  &lt;End of help on this topic&gt;
 
163
  </BODY>
 
164
  </HTML>
 
165
+ ====== h_config_enable_topal_hack =====
 
166
+ <HTML>
 
167
+ <HEAD>
 
168
+ <TITLE>FEATURE: <!--#echo var="FEAT_enable-topal-hack"--></TITLE>
 
169
+ </HEAD>
 
170
+ <BODY>
 
171
+ <H1>FEATURE: <!--#echo var="FEAT_enable-topal-hack"--></H1>
 
172
+ <P>
 
173
+ This feature allows Topal (and other sending-filters) to change the
 
174
+ MIME type of the email.  This is potentially dangerous because it
 
175
+ pretends that multipart emails are plain emails.
 
176
+ <P>
 
177
+ &lt;End of help on this topic&gt;
 
178
+ </BODY>
 
179
+ </HTML>
 
180
  ====== h_config_del_from_dot =====
 
181
  <HTML>
 
182
  <HEAD>
 
183
diff -cr alpine-1.00.orig/pith/send.c alpine-1.00.new/pith/send.c
 
184
*** alpine-1.00.orig/pith/send.c        2007-12-01 01:10:52.000000000 +0000
 
185
--- alpine-1.00.new/pith/send.c 2008-01-07 15:18:45.000000000 +0000
 
186
***************
 
187
*** 108,114 ****
 
188
  long       pine_rfc822_output_body(BODY *,soutr_t,TCPSTREAM *);
 
189
  int      pine_write_body_header(BODY *, soutr_t, TCPSTREAM *);
 
190
  int      pine_write_header_line(char *, char *, STORE_S *);
 
191
! int      pine_write_params(PARAMETER *, STORE_S *);
 
192
  char      *tidy_smtp_mess(char *, char *, char *, size_t);
 
193
  int      lmc_body_header_line(char *, int);
 
194
  int      lmc_body_header_finish(void);
 
195
--- 108,114 ----
 
196
  long       pine_rfc822_output_body(BODY *,soutr_t,TCPSTREAM *);
 
197
  int      pine_write_body_header(BODY *, soutr_t, TCPSTREAM *);
 
198
  int      pine_write_header_line(char *, char *, STORE_S *);
 
199
! int      pine_write_params(PARAMETER *, STORE_S *, BODY *);
 
200
  char      *tidy_smtp_mess(char *, char *, char *, size_t);
 
201
  int      lmc_body_header_line(char *, int);
 
202
  int      lmc_body_header_finish(void);
 
203
***************
 
204
*** 1726,1732 ****
 
205
--- 1726,1734 ----
 
206
      /* set up counts and such to keep track sent percentage */
 
207
      send_bytes_sent = 0;
 
208
      gf_filter_init();                         /* zero piped byte count, 'n */
 
209
+     dprint((1, "Topal: HERE 1!\n"));
 
210
      send_bytes_to_send = send_body_size(body);        /* count body bytes          */
 
211
+     dprint((1, "Topal: HERE 2!\n"));
 
212
      ps_global->c_client_error[0] = error_buf[0] = '\0';
 
213
      we_cancel = busy_cue(_("Sending mail"),
 
214
                         send_bytes_to_send ? sent_percent : NULL, 0);
 
215
***************
 
216
*** 1743,1748 ****
 
217
--- 1745,1753 ----
 
218
  
 
219
  #endif
 
220
  
 
221
+     dprint((1, "Topal: HERE 3!\n"));
 
222
 
223
 
224
      /*
 
225
       * If the user's asked for it, and we find that the first text
 
226
       * part (attachments all get b64'd) is non-7bit, ask for 8BITMIME.
 
227
***************
 
228
*** 1750,1755 ****
 
229
--- 1755,1761 ----
 
230
      if(F_ON(F_ENABLE_8BIT, ps_global) && (bp = first_text_8bit(body)))
 
231
         smtp_opts |= SOP_8BITMIME;
 
232
  
 
233
+     dprint((1, "Topal: HERE 3.1!\n"));
 
234
  #ifdef        DEBUG
 
235
  #ifndef DEBUGJOURNAL
 
236
      if(debug > 5 || (flags & CM_VERBOSE))
 
237
***************
 
238
*** 1813,1829 ****
 
239
--- 1819,1839 ----
 
240
          }
 
241
      }
 
242
  
 
243
+     dprint((1, "Topal: HERE 4!\n"));
 
244
 
245
      /*
 
246
       * Install our rfc822 output routine 
 
247
       */
 
248
      sending_hooks.rfc822_out = mail_parameters(NULL, GET_RFC822OUTPUT, NULL);
 
249
      (void)mail_parameters(NULL, SET_RFC822OUTPUT, (void *)post_rfc822_output);
 
250
+     dprint((1, "Topal: HERE 5!\n"));
 
251
  
 
252
      /*
 
253
       * Allow for verbose posting
 
254
       */
 
255
      (void) mail_parameters(NULL, SET_SMTPVERBOSE,
 
256
                           (void *) pine_smtp_verbose_out);
 
257
+     dprint((1, "Topal: HERE 6!\n"));
 
258
  
 
259
      /*
 
260
       * We do this because we want mm_log to put the error message into
 
261
***************
 
262
*** 1867,1872 ****
 
263
--- 1877,1883 ----
 
264
  
 
265
      ps_global->noshow_error = 0;
 
266
  
 
267
+     dprint((1, "Topal: HERE 7!\n"));
 
268
      TIME_STAMP("smtp open", 1);
 
269
      if(sending_stream){
 
270
        unsigned short save_encoding, added_encoding;
 
271
***************
 
272
*** 2429,2437 ****
 
273
  BODY *
 
274
  first_text_8bit(struct mail_bodystruct *body)
 
275
  {
 
276
!     if(body->type == TYPEMULTIPART)   /* advance to first contained part */
 
277
        body = &body->nested.part->body;
 
278
  
 
279
      return((body->type == TYPETEXT && body->encoding != ENC7BIT)
 
280
             ? body : NULL);
 
281
  }
 
282
--- 2440,2451 ----
 
283
  BODY *
 
284
  first_text_8bit(struct mail_bodystruct *body)
 
285
  {
 
286
!   /* Be careful of Topal changes... */
 
287
!     if(body->type == TYPEMULTIPART
 
288
!        && body->topal_hack != 1)      /* advance to first contained part */
 
289
        body = &body->nested.part->body;
 
290
  
 
291
+     /* Topal: this bit might not be correct, now. */
 
292
      return((body->type == TYPETEXT && body->encoding != ENC7BIT)
 
293
             ? body : NULL);
 
294
  }
 
295
***************
 
296
*** 2802,2820 ****
 
297
    dprint((4, "-- pine_encode_body: %d\n", body ? body->type : 0));
 
298
    if (body) switch (body->type) {
 
299
      case TYPEMULTIPART:               /* multi-part */
 
300
!       if (!body->parameter) { /* cookie not set up yet? */
 
301
          char tmp[MAILTMPLEN]; /* make cookie not in BASE64 or QUOTEPRINT*/
 
302
 
303
          snprintf (tmp,sizeof(tmp),"%ld-%ld-%ld=:%ld",gethostid (),random (),(long) time (0),
 
304
                    (long) getpid ());
 
305
          tmp[sizeof(tmp)-1] = '\0';
 
306
          set_parameter(&body->parameter, "BOUNDARY", tmp);
 
307
        }
 
308
-       part = body->nested.part;       /* encode body parts */
 
309
-       do pine_encode_body (&part->body);
 
310
-       while ((part = part->next) != NULL);    /* until done */
 
311
        break;
 
312
 
313
      case TYPETEXT :
 
314
        /*
 
315
         * If the part is text we edited, then it is UTF-8.
 
316
--- 2816,2836 ----
 
317
    dprint((4, "-- pine_encode_body: %d\n", body ? body->type : 0));
 
318
    if (body) switch (body->type) {
 
319
      case TYPEMULTIPART:               /* multi-part */
 
320
!       if (body->topal_hack != 1) { /* But only if Topal hasn't touched it! */
 
321
!       if (!body->parameter) { /* cookie not set up yet? */
 
322
          char tmp[MAILTMPLEN]; /* make cookie not in BASE64 or QUOTEPRINT*/
 
323
!         
 
324
          snprintf (tmp,sizeof(tmp),"%ld-%ld-%ld=:%ld",gethostid (),random (),(long) time (0),
 
325
                    (long) getpid ());
 
326
          tmp[sizeof(tmp)-1] = '\0';
 
327
          set_parameter(&body->parameter, "BOUNDARY", tmp);
 
328
+       }
 
329
+       part = body->nested.part;       /* encode body parts */
 
330
+       do pine_encode_body (&part->body);
 
331
+       while ((part = part->next) != NULL);    /* until done */
 
332
        }
 
333
        break;
 
334
!       
 
335
      case TYPETEXT :
 
336
        /*
 
337
         * If the part is text we edited, then it is UTF-8.
 
338
***************
 
339
*** 4171,4177 ****
 
340
  
 
341
      dprint((4, "-- pine_rfc822_output_body: %d\n",
 
342
               body ? body->type : 0));
 
343
!     if(body->type == TYPEMULTIPART) {   /* multipart gets special handling */
 
344
        part = body->nested.part;       /* first body part */
 
345
                                        /* find cookie */
 
346
        for (param = body->parameter; param && !cookie; param = param->next)
 
347
--- 4187,4195 ----
 
348
  
 
349
      dprint((4, "-- pine_rfc822_output_body: %d\n",
 
350
               body ? body->type : 0));
 
351
!     if(body->type == TYPEMULTIPART
 
352
!        && body->topal_hack != 1) {   /* multipart gets special handling, 
 
353
!                                       unless Topal messed with it */
 
354
        part = body->nested.part;       /* first body part */
 
355
                                        /* find cookie */
 
356
        for (param = body->parameter; param && !cookie; param = param->next)
 
357
***************
 
358
*** 4261,4270 ****
 
359
         * BEFORE applying any encoding (rfc1341: appendix G)...
 
360
         * NOTE: almost all filters expect CRLF newlines 
 
361
         */
 
362
!       if(body->type == TYPETEXT
 
363
!          && body->encoding != ENCBASE64
 
364
           && !so_attr((STORE_S *) body->contents.text.data, "rawbody", NULL)){
 
365
!           gf_link_filter(gf_local_nvtnl, NULL);
 
366
        }
 
367
  
 
368
        switch (body->encoding) {       /* all else needs filtering */
 
369
--- 4279,4292 ----
 
370
         * BEFORE applying any encoding (rfc1341: appendix G)...
 
371
         * NOTE: almost all filters expect CRLF newlines 
 
372
         */
 
373
!       if(((body->type == TYPETEXT
 
374
!            && body->encoding != ENCBASE64)
 
375
!           /* Or if Topal mucked with it... */
 
376
!           | (body->type == TYPEMULTIPART && body->topal_hack == 1))
 
377
           && !so_attr((STORE_S *) body->contents.text.data, "rawbody", NULL)){
 
378
!         if(body->topal_hack == 1) 
 
379
!           dprint((9, "Topal: Canonical conversion, although Topal has mangled...\n"));
 
380
!         gf_link_filter(gf_local_nvtnl, NULL);
 
381
        }
 
382
  
 
383
        switch (body->encoding) {       /* all else needs filtering */
 
384
***************
 
385
*** 4366,4372 ****
 
386
          return(pwbh_finish(0, so));
 
387
            
 
388
        if(body->parameter){
 
389
!           if(!pine_write_params(body->parameter, so))
 
390
              return(pwbh_finish(0, so));
 
391
        }
 
392
        else if(!so_puts(so, "; CHARSET=US-ASCII"))
 
393
--- 4388,4394 ----
 
394
          return(pwbh_finish(0, so));
 
395
            
 
396
        if(body->parameter){
 
397
!           if(!pine_write_params(body->parameter, so, body))
 
398
              return(pwbh_finish(0, so));
 
399
        }
 
400
        else if(!so_puts(so, "; CHARSET=US-ASCII"))
 
401
***************
 
402
*** 4445,4451 ****
 
403
                 && so_puts(so, body->disposition.type)))
 
404
              return(pwbh_finish(0, so));
 
405
  
 
406
!           if(!pine_write_params(body->disposition.parameter, so))
 
407
              return(pwbh_finish(0, so));             
 
408
  
 
409
            if(!so_puts(so, "\015\012"))
 
410
--- 4467,4473 ----
 
411
                 && so_puts(so, body->disposition.type)))
 
412
              return(pwbh_finish(0, so));
 
413
  
 
414
!           if(!pine_write_params(body->disposition.parameter, so, body))
 
415
              return(pwbh_finish(0, so));             
 
416
  
 
417
            if(!so_puts(so, "\015\012"))
 
418
***************
 
419
*** 4507,4513 ****
 
420
   * pine_write_param - convert, encode and write MIME header-field parameters
 
421
   */
 
422
  int
 
423
! pine_write_params(PARAMETER *param, STORE_S *so)
 
424
  {           
 
425
      for(; param; param = param->next){
 
426
        int   rv;
 
427
--- 4529,4535 ----
 
428
   * pine_write_param - convert, encode and write MIME header-field parameters
 
429
   */
 
430
  int
 
431
! pine_write_params(PARAMETER *param, STORE_S *so, BODY *body)
 
432
  {           
 
433
      for(; param; param = param->next){
 
434
        int   rv;
 
435
***************
 
436
*** 4516,4524 ****
 
437
  
 
438
        cs = posting_characterset(param->value, NULL, HdrText);
 
439
        cv = utf8_to_charset(param->value, cs, 0);
 
440
!       rv = (so_puts(so, "; ")
 
441
!             && rfc2231_output(so, param->attribute, cv, (char *) tspecials, cs));
 
442
 
443
        if(cv && cv != param->value)
 
444
          fs_give((void **) &cv);
 
445
  
 
446
--- 4538,4554 ----
 
447
  
 
448
        cs = posting_characterset(param->value, NULL, HdrText);
 
449
        cv = utf8_to_charset(param->value, cs, 0);
 
450
!       if (body->topal_hack == 1
 
451
!           && !struncmp(param->attribute, "protocol", 9)) {
 
452
!         /* Did Topal introduce more parameters? */
 
453
!         dprint((9, "Topal: parameter encoding of protocol, with Topal hack\n"));
 
454
!         rv = (so_puts(so, "; \015\012\011")
 
455
!               && rfc2231_output(so, param->attribute, cv, (char *) tspecials, cs));
 
456
!       }
 
457
!       else
 
458
!         rv = (so_puts(so, "; ")
 
459
!               && rfc2231_output(so, param->attribute, cv, (char *) tspecials, cs));
 
460
!       
 
461
        if(cv && cv != param->value)
 
462
          fs_give((void **) &cv);
 
463
  
 
464
***************
 
465
*** 4625,4631 ****
 
466
      long  l = 0L;
 
467
      PART *part;
 
468
  
 
469
!     if(body->type == TYPEMULTIPART) {   /* multipart gets special handling */
 
470
        part = body->nested.part;       /* first body part */
 
471
        do                              /* for each part */
 
472
          l += send_body_size(&part->body);
 
473
--- 4655,4663 ----
 
474
      long  l = 0L;
 
475
      PART *part;
 
476
  
 
477
!     if(body->type == TYPEMULTIPART 
 
478
!        && body->topal_hack != 1) {   /* multipart gets special handling 
 
479
!                                       but again, be careful of Topal */
 
480
        part = body->nested.part;       /* first body part */
 
481
        do                              /* for each part */
 
482
          l += send_body_size(&part->body);
 
483
Only in alpine-1.00.orig/po: Makefile.in
 
484
Only in alpine-1.00.new/po: stamp-po
 
485
Only in alpine-1.00.new/regex: .deps
 
486
Only in alpine-1.00.new/regex: Makefile
 
487
diff -cr alpine-1.00.orig/web/src/alpined.d/compilation alpine-1.00.new/web/src/alpined.d/compilation
 
488
*** alpine-1.00.orig/web/src/alpined.d/compilation      2007-12-15 00:27:02.000000000 +0000
 
489
--- alpine-1.00.new/web/src/alpined.d/compilation       2008-01-07 13:57:51.000000000 +0000
 
490
***************
 
491
*** 1 ****
 
492
! 117
 
493
--- 1 ----
 
494
! 118
 
495
Only in alpine-1.00.new/web/src: Makefile
 
496
Only in alpine-1.00.new/web/src/pubcookie: .deps
 
497
Only in alpine-1.00.new/web/src/pubcookie: Makefile