Don't treat application/octet-stream with type=tar special.
authormarkus schnalke <meillo@marmaro.de>
Thu, 12 Apr 2012 13:18:12 +0000 (15:18 +0200)
committermarkus schnalke <meillo@marmaro.de>
Thu, 12 Apr 2012 13:18:12 +0000 (15:18 +0200)
Don't auto-extract such parts with `mhstore -auto'. This makes -auto
less a security problem.
The auto-extract feature of mhshow that had been described in its man
page seems to not exist, anyway.

man/mhshow.man1
man/mhstore.man1
uip/mhstore.c

index e3fbdb7..8ebc7ba 100644 (file)
@@ -257,12 +257,6 @@ multipart (without a profile entry), will be treated as multipart/mixed.
 .PP
 If none of these apply, then
 .B mhshow
 .PP
 If none of these apply, then
 .B mhshow
-will check to see if the message
-has an application/octet-stream content with parameter \*(lqtype=tar\*(rq.
-If so,
-.B mhshow
-will use an appropriate command.  If not,
-.B mhshow
 will complain.
 .PP
 Example entries might be:
 will complain.
 .PP
 Example entries might be:
index fcd833d..61e2ab2 100644 (file)
@@ -225,13 +225,6 @@ listed above) content, the p-escapes are ignored.
 .PP
 If no formatting string is found,
 .B mhstore
 .PP
 If no formatting string is found,
 .B mhstore
-will check to see
-if the content is application/octet-stream with parameter
-\*(lqtype=tar\*(rq.  If so,
-.B mhstore
-will choose an appropriate
-filename.  If the content is not application/octet-stream, then
-.B mhstore
 will check to see if the content is a message.  If
 so,
 .B mhstore
 will check to see if the content is a message.  If
 so,
 .B mhstore
@@ -297,48 +290,7 @@ are combined in the correct order.  But if
 can not
 locate every partial necessary to reassemble the message, it will
 not store anything.
 can not
 locate every partial necessary to reassemble the message, it will
 not store anything.
-RE
-.PP
-By using the
-.B \-auto
-switch,
-.B mhstore
-will automatically do the extraction for you:
-.PP
-.RS 5
-.nf
-% mhlist 5-8
- msg part  type/subtype             size description
-   5       message/partial           47K part 1 of 4
-   6       message/partial           47K part 2 of 4
-   7       message/partial           47K part 3 of 4
-   8       message/partial           18K part 4 of 4
-% mhstore 5-8
-reassembling partials 5,6,7,8 to folder inbox as message 9
-% mhlist 9
- msg part  type/subtype             size description
-   9       application/octet-stream 118K
-             (extract with uncompress | tar xvpf -)
-             type=tar
-             conversions=compress
-% mhstore -auto 9
--- tar listing appears here as files are extracted
-.fi
 .RE
 .RE
-.PP
-As the second
-.B tar
-listing is generated, the files are extracted.
-A prudent user will never put
-.B \-auto
-in the profile.
-The correct procedure is to first use
-.B mhlist
-to find out what will be extracted.  Then
-.B mhstore
-can be invoked with
-.B \-auto
-to perform the extraction.
 .SS "External Access"
 For contents of type message/external-body,
 \fImhstore\fR supports these access-types:
 .SS "External Access"
 For contents of type message/external-body,
 \fImhstore\fR supports these access-types:
index ed36c96..992d429 100644 (file)
@@ -106,7 +106,6 @@ int show_content_aux(CT, int, char *, char *);
 static void store_single_message(CT);
 static int store_switch(CT);
 static int store_generic(CT);
 static void store_single_message(CT);
 static int store_switch(CT);
 static int store_generic(CT);
-static int store_application(CT);
 static int store_multi(CT);
 static int store_partial(CT);
 static int store_external(CT);
 static int store_multi(CT);
 static int store_partial(CT);
 static int store_external(CT);
@@ -450,9 +449,6 @@ store_switch(CT ct)
                break;
 
        case CT_APPLICATION:
                break;
 
        case CT_APPLICATION:
-               return store_application(ct);
-               break;
-
        case CT_TEXT:
        case CT_AUDIO:
        case CT_IMAGE:
        case CT_TEXT:
        case CT_AUDIO:
        case CT_IMAGE:
@@ -471,7 +467,7 @@ store_switch(CT ct)
 
 /*
 ** Generic routine to store a MIME content.
 
 /*
 ** Generic routine to store a MIME content.
-** (audio, video, image, text, message/rfc922)
+** (application, audio, video, image, text, message/rfc922)
 */
 
 static int
 */
 
 static int
@@ -490,73 +486,6 @@ store_generic(CT ct)
 
 
 /*
 
 
 /*
-** Store content of type "application"
-*/
-
-static int
-store_application(CT ct)
-{
-       char **ap, **ep;
-       CI ci = &ct->c_ctinfo;
-
-       /* Check if the content specifies a filename */
-       if (autosw)
-               get_storeproc(ct);
-
-       /*
-       ** If storeproc is not defined, and the content is type
-       ** "application/octet-stream", we also check for various
-       ** attribute/value pairs which specify if this a tar file.
-       */
-       if (!ct->c_storeproc && ct->c_subtype == APPLICATION_OCTETS) {
-               int tarP = 0, zP = 0, gzP = 0;
-
-               for (ap = ci->ci_attrs, ep = ci->ci_values; *ap; ap++, ep++) {
-                       /* check for "type=tar" attribute */
-                       if (!mh_strcasecmp(*ap, "type")) {
-                               if (mh_strcasecmp(*ep, "tar"))
-                                       break;
-
-                               tarP = 1;
-                               continue;
-                       }
-
-                       /* check for "conversions=compress" attribute */
-                       if ((!mh_strcasecmp(*ap, "conversions") ||
-                                       !mh_strcasecmp(*ap, "x-conversions"))
-                                       && (!mh_strcasecmp(*ep, "compress") ||
-                                       !mh_strcasecmp(*ep, "x-compress"))) {
-                               zP = 1;
-                               continue;
-                       }
-                       /* check for "conversions=gzip" attribute */
-                       if ((!mh_strcasecmp(*ap, "conversions") ||
-                                       !mh_strcasecmp(*ap, "x-conversions"))
-                                       && (!mh_strcasecmp(*ep, "gzip") ||
-                                       !mh_strcasecmp(*ep, "x-gzip"))) {
-                               gzP = 1;
-                               continue;
-                       }
-               }
-
-               if (tarP) {
-                       ct->c_showproc = getcpy(zP ? "%euncompress | tar tvf -" : (gzP ? "%egzip -dc | tar tvf -" : "%etar tvf -"));
-                       if (!ct->c_storeproc) {
-                               if (autosw) {
-                                       ct->c_storeproc = getcpy(zP ? "| uncompress | tar xvpf -" : (gzP ? "| gzip -dc | tar xvpf -" : "| tar xvpf -"));
-                                       ct->c_umask = 0022;
-                               } else {
-                                       ct->c_storeproc= getcpy(zP ? "%m%P.tar.Z" : (gzP ? "%m%P.tar.gz" : "%m%P.tar"));
-                               }
-                       }
-               }
-       }
-
-       return store_content(ct, NULL);
-}
-
-
-/*
 ** Store the content of a multipart message
 */
 
 ** Store the content of a multipart message
 */