From 51cb63baa791f6ba84c0a7f8538ecfd00b013bcb Mon Sep 17 00:00:00 2001 From: markus schnalke Date: Sun, 16 Oct 2011 10:47:04 +0200 Subject: [PATCH] Removed the split feature of send. It would split large messages into several partial ones, using MIME. But if a message contains one large file attached, it won't solve the problem. We better go without this feature and leave it to the user. --- etc/sendfiles.in | 8 +- h/mime.h | 2 - man/mh-chart.man | 2 - man/send.man | 32 ------- man/sendfiles.man | 4 - uip/send.c | 8 -- uip/sendsbr.c | 251 +---------------------------------------------------- uip/viamail.c | 27 +----- uip/whatnowsbr.c | 10 --- 9 files changed, 5 insertions(+), 339 deletions(-) diff --git a/etc/sendfiles.in b/etc/sendfiles.in index a3545d1..5582b2a 100755 --- a/etc/sendfiles.in +++ b/etc/sendfiles.in @@ -4,7 +4,6 @@ # image, in a MIME message. # -DELAY=0 FROM= # compression method (none, gzip or compress) @@ -24,7 +23,7 @@ elif command -v gzip >/dev/null 2>&1 ; then METHOD=gzip fi -# handle command-line options to override compression method and delay +# handle command-line options to override compression method while [ $# -gt 3 ]; do case "$1" in -gzip) @@ -39,10 +38,6 @@ while [ $# -gt 3 ]; do METHOD=none shift ;; - -*) - DELAY="`echo $1 | sed -e 's%-%%'`" - shift - ;; *) break ;; @@ -83,5 +78,4 @@ tar cvf - "$@" | $COMPRESS | \ %libdir%/viamail -to "$mailpath" -subject "$subject" \ -parameters "type=tar$CONVERSION" \ -comment "extract with $UNCOMPRESS | tar xvpf -" \ - -delay "$DELAY" \ -verbose $FROM diff --git a/h/mime.h b/h/mime.h index d51e3af..9773293 100644 --- a/h/mime.h +++ b/h/mime.h @@ -31,5 +31,3 @@ #define CPERLIN 76 #define BPERLIN (CPERLIN / 4) -#define LPERMSG 632 -#define CPERMSG (LPERMSG * CPERLIN) diff --git a/man/mh-chart.man b/man/mh-chart.man index adf2a56..1efacfd 100644 --- a/man/mh-chart.man +++ b/man/mh-chart.man @@ -647,8 +647,6 @@ all/to/cc/me] .RB [ \-mime " | " \-nomime ] .RB [ \-msgid " | " \-nomsgid ] .RB [ \-push " | " \-nopush ] -.RB [ \-split -.IR seconds ] .RB [ \-verbose " | " \-noverbose ] .RB [ \-watch " | " \-nowatch ] .RB [ \-width diff --git a/man/send.man b/man/send.man index a45eb8f..7d0a4a2 100644 --- a/man/send.man +++ b/man/send.man @@ -24,8 +24,6 @@ send \- send a message .RB [ \-mime " | " \-nomime ] .RB [ \-msgid " | " \-nomsgid ] .RB [ \-push " | " \-nopush ] -.RB [ \-split -.IR seconds ] .RB [ \-verbose " | " \-noverbose ] .RB [ \-watch " | " \-nowatch ] .RB [ \-server @@ -189,31 +187,6 @@ useful) feature. Consult the man page for more information. .PP -If -.B \-split -is specified, -.B send -will split the draft into one -or more partial messages prior to sending. This makes use of the -MIME features in -.BR nmh . -Note however that if -.B send -is -invoked under -.BR dist , -then this switch is ignored\0--\0it makes -no sense to redistribute a message in this fashion. Sometimes you want -.B send -to pause after posting a partial message. This is usually -the case when you are running -.B sendmail -and expect to generate a -lot of partial messages. The argument to -.B \-split -tells it how long -to pause between postings. -.PP .B Send with no .I file @@ -383,8 +356,3 @@ Under some configurations, it is not possible to monitor the mail delivery transaction; .B \-watch is a no-op on those systems. -.PP -Using -.B \-split -.I 0 -doesn't work correctly. diff --git a/man/sendfiles.man b/man/sendfiles.man index ed67329..39a867a 100644 --- a/man/sendfiles.man +++ b/man/sendfiles.man @@ -8,7 +8,6 @@ sendfiles \- send multiple files via a MIME message .HP .na .B sendfiles -.RB [ delay ] .I mailpath .I subject .I file1 @@ -31,9 +30,6 @@ with the .B tar command, and then mail the compressed archive to the \*(lqmailpath\*(rq with the given \*(lqsubject\*(rq. -The archive -will be automatically split up into as many messages as necessary -in order to get past most mailers. .PP Sometimes you want .B sendfiles diff --git a/uip/send.c b/uip/send.c index 91f1c16..d1a183e 100644 --- a/uip/send.c +++ b/uip/send.c @@ -49,8 +49,6 @@ static struct swit switches[] = { { "push", 0 }, #define NPUSHSW 17 { "nopush", 0 }, -#define SPLITSW 18 - { "split seconds", 0 }, #define UNIQSW 19 { "unique", -6 }, #define NUNIQSW 20 @@ -110,7 +108,6 @@ extern int debugsw; /* from sendsbr.c */ extern int forwsw; extern int inplace; extern int pushsw; -extern int splitsw; extern int unique; extern int verbsw; @@ -196,11 +193,6 @@ main (int argc, char **argv) pushsw = 0; continue; - case SPLITSW: - if (!(cp = *argp++) || sscanf (cp, "%d", &splitsw) != 1) - adios (NULL, "missing argument to %s", argp[-2]); - continue; - case UNIQSW: unique++; continue; diff --git a/uip/sendsbr.c b/uip/sendsbr.c index 772c006..f7c2a08 100644 --- a/uip/sendsbr.c +++ b/uip/sendsbr.c @@ -30,7 +30,6 @@ int debugsw = 0; /* global */ int forwsw = 1; int inplace = 1; int pushsw = 0; -int splitsw = -1; int unique = 0; int verbsw = 0; @@ -62,7 +61,6 @@ static void alert (char *, int); static int tmp_fd (void); static void anno (int, struct stat *); static void annoaux (int); -static int splitmsg (char **, int, char *, struct stat *, int); static int sendaux (char **, int, char *, struct stat *); static int attach(char *, char *, int); @@ -81,7 +79,6 @@ sendsbr (char **vec, int vecp, char *drft, struct stat *st, { int status; char buffer[BUFSIZ], file[BUFSIZ]; - struct stat sts; char *original_draft; /* name of original draft file */ char *p; /* string pointer for building file name */ @@ -135,16 +132,7 @@ sendsbr (char **vec, int vecp, char *drft, struct stat *st, drft = file; } - /* - * Check if we need to split the message into - * multiple messages of type "message/partial". - */ - if (splitsw >= 0 && !distfile && stat (drft, &sts) != NOTOK - && sts.st_size >= CPERMSG) { - status = splitmsg (vec, vecp, drft, st, splitsw) ? NOTOK : OK; - } else { - status = sendaux (vec, vecp, drft, st) ? NOTOK : OK; - } + status = sendaux (vec, vecp, drft, st) ? NOTOK : OK; /* rename the original draft */ if (rename_drft && status == OK && @@ -559,243 +547,6 @@ make_mime_composition_file_entry(char *file_name, int attachformat) } /* - * Split large message into several messages of - * type "message/partial" and send them. - */ - -static int -splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay) -{ - int compnum, nparts, partno, state, status; - long pos, start; - time_t clock; - char *cp, *dp, buffer[BUFSIZ], msgid[BUFSIZ]; - char subject[BUFSIZ]; - char name[NAMESZ], partnum[BUFSIZ]; - FILE *in; - - if ((in = fopen (drft, "r")) == NULL) - adios (drft, "unable to open for reading"); - - cp = dp = NULL; - start = 0L; - - /* - * Scan through the message and examine the various header fields, - * as well as locate the beginning of the message body. - */ - for (compnum = 1, state = FLD;;) { - switch (state = m_getfld (state, name, buffer, sizeof(buffer), in)) { - case FLD: - case FLDPLUS: - case FLDEOF: - compnum++; - - /* - * This header field is discarded. - */ - if (!mh_strcasecmp (name, "Message-ID")) { - while (state == FLDPLUS) - state = m_getfld (state, name, buffer, sizeof(buffer), in); - } else if (uprf (name, XXX_FIELD_PRF) - || !mh_strcasecmp (name, VRSN_FIELD) - || !mh_strcasecmp (name, "Subject") - || !mh_strcasecmp (name, "Encrypted")) { - /* - * These header fields are copied - * to the enclosed header of the - * first message in the collection - * of message/partials. For the - * "Subject" header field, - * we also record it, so that - * a modified version of it, - * can be copied to the header - * of each messsage/partial in - * the collection. - */ - if (!mh_strcasecmp (name, "Subject")) { - size_t sublen; - - strncpy (subject, buffer, BUFSIZ); - sublen = strlen (subject); - if (sublen > 0 && subject[sublen - 1] == '\n') - subject[sublen - 1] = '\0'; - } - - dp = add (concat (name, ":", buffer, NULL), dp); - while (state == FLDPLUS) { - state = m_getfld (state, name, buffer, sizeof(buffer), in); - dp = add (buffer, dp); - } - } else { - /* - * These header fields are - * copied to the header of - * each message/partial in - * the collection. - */ - cp = add (concat (name, ":", buffer, NULL), cp); - while (state == FLDPLUS) { - state = m_getfld (state, name, buffer, sizeof(buffer), in); - cp = add (buffer, cp); - } - } - - if (state != FLDEOF) { - start = ftell (in) + 1; - continue; - } - /* else fall... */ - - case BODY: - case BODYEOF: - case FILEEOF: - break; - - case LENERR: - case FMTERR: - adios (NULL, "message format error in component #%d", compnum); - - default: - adios (NULL, "getfld () returned %d", state); - } - - break; - } - if (cp == NULL) - adios (NULL, "headers missing from draft"); - - nparts = 1; - pos = start; - while (fgets (buffer, sizeof(buffer) - 1, in)) { - long len; - - if ((pos += (len = strlen (buffer))) > CPERMSG) { - nparts++; - pos = len; - } - } - - /* Only one part, nothing to split */ - if (nparts == 1) { - free (cp); - if (dp) - free (dp); - - fclose (in); - return sendaux (vec, vecp, drft, st); - } - - if (!pushsw) { - printf ("Sending as %d Partial Messages\n", nparts); - fflush (stdout); - } - status = OK; - - vec[vecp++] = "-partno"; - vec[vecp++] = partnum; - if (delay == 0) - vec[vecp++] = "-queued"; - - time (&clock); - snprintf (msgid, sizeof(msgid), "<%d.%ld@%s>", - (int) getpid(), (long) clock, LocalName()); - - fseek (in, start, SEEK_SET); - for (partno = 1; partno <= nparts; partno++) { - char tmpdrf[BUFSIZ]; - FILE *out; - - char *cp = m_mktemp2(drft, invo_name, NULL, &out); - if (cp == NULL) { - adios (drft, "unable to create temporary file for"); - } - strncpy(tmpdrf, cp, sizeof(tmpdrf)); - chmod (tmpdrf, 0600); - - /* - * Output the header fields - */ - fputs (cp, out); - fprintf (out, "Subject: %s (part %d of %d)\n", subject, partno, nparts); - fprintf (out, "%s: %s\n", VRSN_FIELD, VRSN_VALUE); - fprintf (out, "%s: message/partial; id=\"%s\";\n", TYPE_FIELD, msgid); - fprintf (out, "\tnumber=%d; total=%d\n", partno, nparts); - fprintf (out, "%s: part %d of %d\n\n", DESCR_FIELD, partno, nparts); - - /* - * If this is the first in the collection, output the - * header fields we are encapsulating at the beginning - * of the body of the first message. - */ - if (partno == 1) { - if (dp) - fputs (dp, out); - fprintf (out, "Message-ID: %s\n", msgid); - fprintf (out, "\n"); - } - - pos = 0; - for (;;) { - long len; - - if (!fgets (buffer, sizeof(buffer) - 1, in)) { - if (partno == nparts) - break; - adios (NULL, "premature eof"); - } - - if ((pos += (len = strlen (buffer))) > CPERMSG) { - fseek (in, -len, SEEK_CUR); - break; - } - - fputs (buffer, out); - } - - if (fflush (out)) - adios (tmpdrf, "error writing to"); - - fclose (out); - - if (!pushsw && verbsw) { - printf ("\n"); - fflush (stdout); - } - - /* Pause here, if a delay is specified */ - if (delay > 0 && 1 < partno && partno <= nparts) { - if (!pushsw) { - printf ("pausing %d seconds before sending part %d...\n", - delay, partno); - fflush (stdout); - } - sleep ((unsigned int) delay); - } - - snprintf (partnum, sizeof(partnum), "%d", partno); - status = sendaux (vec, vecp, tmpdrf, st); - unlink (tmpdrf); - if (status != OK) - break; - - /* - * This is so sendaux will only annotate - * the altmsg the first time it is called. - */ - annotext = NULL; - } - - free (cp); - if (dp) - free (dp); - - fclose (in); /* close the draft */ - return status; -} - - -/* * Annotate original message, and * call `postproc' to send message. */ diff --git a/uip/viamail.c b/uip/viamail.c index 1d876cb..ccca115 100644 --- a/uip/viamail.c +++ b/uip/viamail.c @@ -34,8 +34,6 @@ static struct swit switches[] = { { "description text", 0 }, #define COMMENTSW 5 { "comment text", 0 }, -#define DELAYSW 6 - { "delay seconds", 0 }, #define VERBSW 7 { "verbose", 0 }, #define NVERBSW 8 @@ -50,7 +48,6 @@ static struct swit switches[] = { }; extern int debugsw; -extern int splitsw; extern int verbsw; int ebcdicsw = 0; /* hack for linking purposes */ @@ -64,13 +61,12 @@ int writeBase64aux (FILE *, FILE *); /* * static prototypes */ -static int via_mail (char *, char *, char *, char *, char *, int, char *); +static int via_mail (char *, char *, char *, char *, char *, char *); int main (int argc, char **argv) { - int delay = 0; char *f1 = NULL, *f2 = NULL, *f3 = NULL; char *f4 = NULL, *f5 = NULL, *f7 = NULL; char *cp, buf[BUFSIZ]; @@ -125,18 +121,6 @@ main (int argc, char **argv) if (!(f5 = *argp++)) adios (NULL, "missing argument to %s", argp[-2]); continue; - case DELAYSW: - if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); - - /* - * If there is an error, just reset the - * delay parameter to -1. We will set - * a default delay later. - */ - if (sscanf (cp, "%d", &delay) != 1) - delay = -1; - continue; case FROMSW: if (!(f7 = *argp++)) adios (NULL, "missing argument to %s", argp[-2]); @@ -161,7 +145,7 @@ main (int argc, char **argv) if (!f1) adios (NULL, "missing -viamail \"mailpath\" switch"); - via_mail (f1, f2, f3, f4, f5, delay, f7); + via_mail (f1, f2, f3, f4, f5, f7); return 0; /* dead code to satisfy the compiler */ } @@ -172,7 +156,7 @@ main (int argc, char **argv) static int via_mail (char *mailsw, char *subjsw, char *parmsw, char *descsw, - char *cmntsw, int delay, char *fromsw) + char *cmntsw, char *fromsw) { int status, vecp = 1; char tmpfil[BUFSIZ]; @@ -225,11 +209,6 @@ via_mail (char *mailsw, char *subjsw, char *parmsw, char *descsw, if (fstat (fileno (fp), &st) == NOTOK) adios ("failed", "fstat of %s", tmpfil); - if (delay < 0) - splitsw = 10; - else - splitsw = delay; - status = 0; vec[0] = r1bindex (postproc, '/'); if (verbsw) diff --git a/uip/whatnowsbr.c b/uip/whatnowsbr.c index a41ee46..afc56fd 100644 --- a/uip/whatnowsbr.c +++ b/uip/whatnowsbr.c @@ -1017,8 +1017,6 @@ static struct swit sendswitches[] = { { "push", 0 }, #define NSPSHSW 13 { "nopush", 0 }, -#define SPLITSW 14 - { "split seconds", 0 }, #define UNIQSW 15 { "unique", -6 }, #define NUNIQSW 16 @@ -1075,7 +1073,6 @@ extern int debugsw; /* from sendsbr.c */ extern int forwsw; extern int inplace; extern int pushsw; -extern int splitsw; extern int unique; extern int verbsw; @@ -1173,13 +1170,6 @@ sendit (char *sp, char **arg, char *file, int pushed) pushed = 0; continue; - case SPLITSW: - if (!(cp = *argp++) || sscanf (cp, "%d", &splitsw) != 1) { - advise (NULL, "missing argument to %s", argp[-2]); - return; - } - continue; - case UNIQSW: unique++; continue; -- 1.7.10.4