[comp.bugs.4bsd] cron silently ignores errors

chris@mimsy.UUCP (Chris Torek) (08/26/87)

Index:	etc/cron.c 4.3BSD Fix


Description:
	4.3BSD has a fancy new syslog.  Cron does not use it.

Repeat-By:
	Misspell a user name in crontab, e.g.

Fix:

RCS file: RCS/cron.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -c2 -r1.1 -r1.2
*** /tmp/,RCSt1005709	Tue Aug 25 22:31:04 1987
--- /tmp/,RCSt2005709	Tue Aug 25 22:31:07 1987
***************
*** 14,17 ****
--- 14,18 ----
  #include <pwd.h>
  #include <fcntl.h>
+ #include <syslog.h>
  
  #define	LISTS	(2*BUFSIZ)
***************
*** 59,64 ****
  	extern char *optarg;
  
! 	if (fork())
  		exit(0);
  	c = getopt(argc, argv, "d:");
  	if (c == 'd') {
--- 60,78 ----
  	extern char *optarg;
  
! 	openlog("cron", LOG_PID | LOG_CONS | LOG_NOWAIT, LOG_DAEMON);
! 	switch (fork()) {
! 
! 	case -1:
! 		syslog(LOG_ERR, "fork: %m");
! 		exit(1);
! 		/* NOTREACHED */
! 
! 	case 0:
! 		break;
! 
! 	default:
  		exit(0);
+ 		/* NOTREACHED */
+ 	}
  	c = getopt(argc, argv, "d:");
  	if (c == 'd') {
***************
*** 188,193 ****
  	int pid;
  
! 	if (fork()) {
  		return;
  	}
  
--- 202,217 ----
  	int pid;
  
! 	switch (fork()) {
! 
! 	case -1:
! 		syslog(LOG_ERR, "cannot fork: %m (running %.40s%s)",
! 			s, strlen(s) > 30 ? "..." : "");
  		return;
+ 
+ 	case 0:
+ 		break;
+ 
+ 	default:
+ 		return;
  	}
  
***************
*** 198,201 ****
--- 222,226 ----
  	s++;
  	if ((pwd = getpwnam(user)) == NULL) {
+ 		syslog(LOG_ERR, "invalid user name \"%s\"", user);
  		dprintf(debug, "%d: cannot find %s\n", pid, user),
  			fflush(debug);
***************
*** 205,213 ****
  	initgroups(pwd->pw_name, pwd->pw_gid);
  	(void) setuid(pwd->pw_uid);
! 	freopen("/", "r", stdin);
  	dprintf(debug, "%d: executing %s", pid, s), fflush (debug);
  	execl("/bin/sh", "sh", "-c", s, 0);
  	dprintf(debug, "%d: cannot execute sh\n", pid), fflush (debug);
! 	exit(0);
  }
  
--- 230,240 ----
  	initgroups(pwd->pw_name, pwd->pw_gid);
  	(void) setuid(pwd->pw_uid);
! 	(void) freopen("/", "r", stdin);
! 	closelog();
  	dprintf(debug, "%d: executing %s", pid, s), fflush (debug);
  	execl("/bin/sh", "sh", "-c", s, 0);
+ 	syslog(LOG_ERR, "cannot exec /bin/sh: %m");
  	dprintf(debug, "%d: cannot execute sh\n", pid), fflush (debug);
! 	exit(1);
  }
  
-- 
In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7690)
Domain:	chris@mimsy.umd.edu	Path:	seismo!mimsy!chris