bin/174905: [patch] cron honor rfc821, rfc5321, rfc2076, rfc3834
Olli Hauer
ohauer at FreeBSD.org
Wed Jan 2 18:10:06 UTC 2013
>Number: 174905
>Category: bin
>Synopsis: [patch] cron honor rfc821, rfc5321, rfc2076, rfc3834
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Wed Jan 02 18:10:05 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator: Olli Hauer
>Release:
>Organization:
>Environment:
>Description:
o per rfc821, rfc5321 and others there should be an CRLF after each mail-headers line,
so change '\n' to '\r\n'
o enclose mail addresses between '<>' (rfc821)
o swap From: line to DisplayName <mail address> (rfc5312)
Add various mail headers to suppress auto-replies (out of office ...)
o add rfc2076 header (Precedence: bulk)
o add rfc3834 header (Auto-Submitted: auto-generated)
(this header is already honored by dovecot2)
o add special header for MS Exchange (X-Auto-Response-Suppress: OOF, DR, RN, NRN, AutoReply)
patch can be grabbed additional from here:
http://people.freebsd.org/~ohauer/diffs/cron_2013-01-02.diff
>How-To-Repeat:
- replace sendmail with another mailer and do a strict rfc821 enforce.
- implement a vacation mail on your main mailbox (dovecot2/MS-Exchange/...) and let a couple of machines send cron mails to your mailbox
>Fix:
--- cron_2013-01-02.diff begins here ---
Index: head/usr.sbin/cron/cron/do_command.c
===================================================================
--- head/usr.sbin/cron/cron/do_command.c (revision 244958)
+++ head/usr.sbin/cron/cron/do_command.c (working copy)
@@ -488,19 +488,25 @@
warn("%s", MAILCMD);
(void) _exit(ERROR_EXIT);
}
- fprintf(mail, "From: %s (Cron Daemon)\n", usernm);
- fprintf(mail, "To: %s\n", mailto);
- fprintf(mail, "Subject: Cron <%s@%s> %s\n",
+ fprintf(mail, "From: (Cron Daemon) <%s>\r\n", usernm);
+ fprintf(mail, "To: <%s>\r\n", mailto);
+ fprintf(mail, "Subject: Cron <%s@%s> %s\r\n",
usernm, first_word(hostname, "."),
e->cmd);
+ /* RFC3834 */
+ fprintf(mail, "Auto-Submitted: auto-generated\r\n");
+ /* RFC2076 */
+ fprintf(mail, "Precedence: bulk\r\n");
+ /* http://msdn.microsoft.com/en-us/library/ee219609%28v=EXCHG.80%29.aspx */
+ fprintf(mail, "X-Auto-Response-Suppress: OOF, DR, RN, NRN, AutoReply\r\n");
# if defined(MAIL_DATE)
- fprintf(mail, "Date: %s\n",
+ fprintf(mail, "Date: %s\r\n",
arpadate(&TargetTime));
# endif /* MAIL_DATE */
for (env = e->envp; *env; env++)
- fprintf(mail, "X-Cron-Env: <%s>\n",
+ fprintf(mail, "X-Cron-Env: <%s>\r\n",
*env);
- fprintf(mail, "\n");
+ fprintf(mail, "\r\n");
/* this was the first char from the pipe
*/
Index: stable/7/usr.sbin/cron/cron/do_command.c
===================================================================
--- stable/7/usr.sbin/cron/cron/do_command.c (revision 244958)
+++ stable/7/usr.sbin/cron/cron/do_command.c (working copy)
@@ -488,19 +488,25 @@
warn("%s", MAILCMD);
(void) _exit(ERROR_EXIT);
}
- fprintf(mail, "From: %s (Cron Daemon)\n", usernm);
- fprintf(mail, "To: %s\n", mailto);
- fprintf(mail, "Subject: Cron <%s@%s> %s\n",
+ fprintf(mail, "From: (Cron Daemon) <%s>\r\n", usernm);
+ fprintf(mail, "To: <%s>\r\n", mailto);
+ fprintf(mail, "Subject: Cron <%s@%s> %s\r\n",
usernm, first_word(hostname, "."),
e->cmd);
+ /* RFC3834 */
+ fprintf(mail, "Auto-Submitted: auto-generated\r\n");
+ /* RFC2076 */
+ fprintf(mail, "Precedence: bulk\r\n");
+ /* http://msdn.microsoft.com/en-us/library/ee219609%28v=EXCHG.80%29.aspx */
+ fprintf(mail, "X-Auto-Response-Suppress: OOF, DR, RN, NRN, AutoReply\r\n");
# if defined(MAIL_DATE)
- fprintf(mail, "Date: %s\n",
+ fprintf(mail, "Date: %s\r\n",
arpadate(&TargetTime));
# endif /* MAIL_DATE */
for (env = e->envp; *env; env++)
- fprintf(mail, "X-Cron-Env: <%s>\n",
+ fprintf(mail, "X-Cron-Env: <%s>\r\n",
*env);
- fprintf(mail, "\n");
+ fprintf(mail, "\r\n");
/* this was the first char from the pipe
*/
Index: stable/8/usr.sbin/cron/cron/do_command.c
===================================================================
--- stable/8/usr.sbin/cron/cron/do_command.c (revision 244958)
+++ stable/8/usr.sbin/cron/cron/do_command.c (working copy)
@@ -147,7 +147,7 @@
#ifdef USE_SIGCHLD
/* our parent is watching for our death by catching SIGCHLD. we
* do not care to watch for our children's deaths this way -- we
- * use wait() explictly. so we have to disable the signal (which
+ * use wait() explicitly. so we have to disable the signal (which
* was inherited from the parent).
*/
(void) signal(SIGCHLD, SIG_DFL);
@@ -488,19 +488,25 @@
warn("%s", MAILCMD);
(void) _exit(ERROR_EXIT);
}
- fprintf(mail, "From: %s (Cron Daemon)\n", usernm);
- fprintf(mail, "To: %s\n", mailto);
- fprintf(mail, "Subject: Cron <%s@%s> %s\n",
+ fprintf(mail, "From: (Cron Daemon) <%s>\r\n", usernm);
+ fprintf(mail, "To: <%s>\r\n", mailto);
+ fprintf(mail, "Subject: Cron <%s@%s> %s\r\n",
usernm, first_word(hostname, "."),
e->cmd);
+ /* RFC3834 */
+ fprintf(mail, "Auto-Submitted: auto-generated\r\n");
+ /* RFC2076 */
+ fprintf(mail, "Precedence: bulk\r\n");
+ /* http://msdn.microsoft.com/en-us/library/ee219609%28v=EXCHG.80%29.aspx */
+ fprintf(mail, "X-Auto-Response-Suppress: OOF, DR, RN, NRN, AutoReply\r\n");
# if defined(MAIL_DATE)
- fprintf(mail, "Date: %s\n",
+ fprintf(mail, "Date: %s\r\n",
arpadate(&TargetTime));
# endif /* MAIL_DATE */
for (env = e->envp; *env; env++)
- fprintf(mail, "X-Cron-Env: <%s>\n",
+ fprintf(mail, "X-Cron-Env: <%s>\r\n",
*env);
- fprintf(mail, "\n");
+ fprintf(mail, "\r\n");
/* this was the first char from the pipe
*/
Index: stable/9/usr.sbin/cron/cron/do_command.c
===================================================================
--- stable/9/usr.sbin/cron/cron/do_command.c (revision 244958)
+++ stable/9/usr.sbin/cron/cron/do_command.c (working copy)
@@ -147,7 +147,7 @@
#ifdef USE_SIGCHLD
/* our parent is watching for our death by catching SIGCHLD. we
* do not care to watch for our children's deaths this way -- we
- * use wait() explictly. so we have to disable the signal (which
+ * use wait() explicitly. so we have to disable the signal (which
* was inherited from the parent).
*/
(void) signal(SIGCHLD, SIG_DFL);
@@ -488,19 +488,25 @@
warn("%s", MAILCMD);
(void) _exit(ERROR_EXIT);
}
- fprintf(mail, "From: %s (Cron Daemon)\n", usernm);
- fprintf(mail, "To: %s\n", mailto);
- fprintf(mail, "Subject: Cron <%s@%s> %s\n",
+ fprintf(mail, "From: (Cron Daemon) <%s>\r\n", usernm);
+ fprintf(mail, "To: <%s>\r\n", mailto);
+ fprintf(mail, "Subject: Cron <%s@%s> %s\r\n",
usernm, first_word(hostname, "."),
e->cmd);
+ /* RFC3834 */
+ fprintf(mail, "Auto-Submitted: auto-generated\r\n");
+ /* RFC2076 */
+ fprintf(mail, "Precedence: bulk\r\n");
+ /* http://msdn.microsoft.com/en-us/library/ee219609%28v=EXCHG.80%29.aspx */
+ fprintf(mail, "X-Auto-Response-Suppress: OOF, DR, RN, NRN, AutoReply\r\n");
# if defined(MAIL_DATE)
- fprintf(mail, "Date: %s\n",
+ fprintf(mail, "Date: %s\r\n",
arpadate(&TargetTime));
# endif /* MAIL_DATE */
for (env = e->envp; *env; env++)
- fprintf(mail, "X-Cron-Env: <%s>\n",
+ fprintf(mail, "X-Cron-Env: <%s>\r\n",
*env);
- fprintf(mail, "\n");
+ fprintf(mail, "\r\n");
/* this was the first char from the pipe
*/
--- cron_2013-01-02.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list