Apply by doing:
	cd /usr/src/usr.sbin/cron
	patch -p0 < 012_cron.patch

And then reinstall cron.

Index: config.h
===================================================================
RCS file: /cvs/src/usr.sbin/cron/config.h,v
retrieving revision 1.2
retrieving revision 1.4
diff -u -r1.2 -r1.4
--- config.h	1998/03/30 06:59:41	1.2
+++ config.h	1999/08/29 08:51:55	1.4
@@ -42,12 +42,14 @@
 			 */
 
 #define MAILCMD _PATH_SENDMAIL					/*-*/
-#define MAILARGS "%s -FCronDaemon -odi -oem -oi -or0s -t"	/*-*/
+#define MAILARGS "%s -FCronDaemon -odi -oem -oi -t"		/*-*/
 			/* -Fx	 = set full-name of sender
 			 * -odi	 = Option Deliverymode Interactive
 			 * -oem	 = Option Errors Mailedtosender
-			 * -or0s = Option Readtimeout -- don't time out
 			 * -t    = read recipient from header of message
+			 * NOTE: since this runs as the user, not root you must
+			 *       not specify any args that will cause sendmail
+			 *       to drop its suidness (see op.me for a list).
 			 */
 
 /* #define MAILCMD "/bin/mail"			-*/
Index: cron.h
===================================================================
RCS file: /cvs/src/usr.sbin/cron/cron.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- cron.h	1997/12/22 08:10:41	1.2
+++ cron.h	1999/08/28 20:13:13	1.3
@@ -231,7 +231,7 @@
 entry		*load_entry __P((FILE *, void (*)(),
 				 struct passwd *, char **));
 
-FILE		*cron_popen __P((char *, char *));
+FILE		*cron_popen __P((char *, char *, entry *));
 
 
 				/* in the C tradition, we only create
Index: do_command.c
===================================================================
RCS file: /cvs/src/usr.sbin/cron/do_command.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- do_command.c	1998/05/08 20:17:18	1.5
+++ do_command.c	1999/08/28 20:13:13	1.6
@@ -387,7 +387,7 @@
 				(void) gethostname(hostname, MAXHOSTNAMELEN);
 				(void) snprintf(mailcmd, sizeof(mailcmd),
 				    MAILARGS, MAILCMD);
-				if (!(mail = cron_popen(mailcmd, "w"))) {
+				if (!(mail = cron_popen(mailcmd, "w", e))) {
 					perror(MAILCMD);
 					(void) _exit(ERROR_EXIT);
 				}
Index: popen.c
===================================================================
RCS file: /cvs/src/usr.sbin/cron/popen.c,v
retrieving revision 1.2
retrieving revision 1.5
diff -u -r1.2 -r1.5
--- popen.c	1998/03/30 06:59:47	1.2
+++ popen.c	1999/08/30 10:45:37	1.5
@@ -44,8 +44,9 @@
 static int fds;
 
 FILE *
-cron_popen(program, type)
+cron_popen(program, type, e)
 	char *program, *type;
+	entry *e;
 {
 	register char *cp;
 	FILE *iop;
@@ -80,6 +81,7 @@
 	for (argc = 0, cp = program; argc < MAX_ARGS; cp = NULL)
 		if (!(argv[argc++] = strtok(cp, " \t\n")))
 			break;
+	argv[MAX_ARGS] = NULL;
 
 #if WANT_GLOBBING
 	/* glob each piece */
@@ -118,6 +120,15 @@
 				(void)close(pdes[0]);
 			}
 			(void)close(pdes[1]);
+		}
+		if (e) {
+			setgid(e->gid);
+#if defined(BSD)
+			initgroups(env_get("LOGNAME", e->envp), e->gid);
+#endif
+			setlogin(env_get("LOGNAME", e->envp));
+			setuid(e->uid);
+			chdir(env_get("HOME", e->envp));
 		}
 #if WANT_GLOBBING
 		execvp(gargv[0], gargv);
