X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/e4f6d48f7af4db62523d5351e2cf2849caa6ce54..b11a86cf7a0fc5b0dfef070e0bc65754c7d26016:/uip/mhbuildsbr.c?ds=inline diff --git a/uip/mhbuildsbr.c b/uip/mhbuildsbr.c index efd3c64f..df9bf5b7 100644 --- a/uip/mhbuildsbr.c +++ b/uip/mhbuildsbr.c @@ -78,7 +78,7 @@ void free_encoding (CT, int); * static prototypes */ static int init_decoded_content (CT); -static void setup_attach_content(CT, const char *); +static void setup_attach_content(CT, char *); static char *fgetstr (char *, int, FILE *); static int user_content (FILE *, char *, char *, CT *); static void set_id (CT, int); @@ -129,7 +129,7 @@ static void directive_pop(void) */ CT -build_mime (char *infile, int directives, int header_encoding) +build_mime (char *infile, int autobuild, int directives, int header_encoding) { int compnum, state; char buf[BUFSIZ], name[NAMESZ]; @@ -176,13 +176,16 @@ build_mime (char *infile, int directives, int header_encoding) case FLDPLUS: compnum++; - /* abort if draft has Mime-Version header field */ - if (!strcasecmp (name, VRSN_FIELD)) - adios (NULL, "draft shouldn't contain %s: field", VRSN_FIELD); - - /* abort if draft has Content-Transfer-Encoding header field */ - if (!strcasecmp (name, ENCODING_FIELD)) - adios (NULL, "draft shouldn't contain %s: field", ENCODING_FIELD); + /* abort if draft has Mime-Version or C-T-E header field */ + if (strcasecmp (name, VRSN_FIELD) == 0 || + strcasecmp (name, ENCODING_FIELD) == 0) { + if (autobuild) { + fclose(in); + return NULL; + } else { + adios (NULL, "draft shouldn't contain %s: field", name); + } + } /* ignore any Content-Type fields in the header */ if (!strcasecmp (name, TYPE_FIELD)) { @@ -248,12 +251,10 @@ finish_field: /* if this wasn't the last header field, then continue */ continue; - case FILEEOF: - adios (NULL, "draft has empty body -- no directives!"); - /* NOTREACHED */ - case BODY: fseek (in, (long) (-strlen (buf)), SEEK_CUR); + /* fall through */ + case FILEEOF: break; case LENERR: @@ -1798,9 +1799,9 @@ calculate_digest (CT ct, int asciiP) */ static void -setup_attach_content(CT ct, const char *filename) +setup_attach_content(CT ct, char *filename) { - char *type, **ap, **ep; + char *type, **ap, **ep, *simplename = r1bindex(filename, '/'); struct str2init *s2i; if (! (type = mime_type(filename))) { @@ -1862,17 +1863,18 @@ setup_attach_content(CT ct, const char *filename) if (strcasecmp(*ap, "name") == 0) { if (*ep) free(*ep); - *ep = getcpy(filename); + *ep = getcpy(simplename); break; } } if (*ap == NULL) { *ap = getcpy("name"); - *ep = getcpy(filename); + *ep = getcpy(simplename); } - ct->c_descr = getcpy(filename); + ct->c_descr = getcpy(simplename); + ct->c_descr = add("\n", ct->c_descr); ct->c_cefile.ce_file = getcpy(filename); /* @@ -1888,6 +1890,6 @@ setup_attach_content(CT ct, const char *filename) ct->c_dispo = getcpy("attachment; filename=\""); } - ct->c_dispo = add(filename, ct->c_dispo); - ct->c_dispo = add("\"", ct->c_dispo); + ct->c_dispo = add(simplename, ct->c_dispo); + ct->c_dispo = add("\"\n", ct->c_dispo); }