Module Name: src
Committed By: christos
Date: Sun Jul 17 01:16:46 UTC 2011
Modified Files:
src/external/bsd/cron/dist: popen.c
Log Message:
- exit with ERROR_EXIT consistently
- don't use warnx() for things that set errno
- check result of setlogin()
- don't call setlogin() without calling setsid()
should fix kernel warnings like:
cron (pid NNNNN) changing logname from root to USER
cron (pid MMMMM) changing logname from USER to root
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/external/bsd/cron/dist/popen.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/bsd/cron/dist/popen.c
diff -u src/external/bsd/cron/dist/popen.c:1.2 src/external/bsd/cron/dist/popen.c:1.3
--- src/external/bsd/cron/dist/popen.c:1.2 Thu May 6 14:53:17 2010
+++ src/external/bsd/cron/dist/popen.c Sat Jul 16 21:16:46 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: popen.c,v 1.2 2010/05/06 18:53:17 christos Exp $ */
+/* $NetBSD: popen.c,v 1.3 2011/07/17 01:16:46 christos Exp $ */
/*
* Copyright (c) 1988, 1993, 1994
@@ -44,7 +44,7 @@
static sccsid[] = "@(#)popen.c 8.3 (Berkeley) 4/6/94";
static char rcsid[] = "Id: popen.c,v 1.6 2003/02/16 04:40:01 vixie Exp";
#else
-__RCSID("$NetBSD: popen.c,v 1.2 2010/05/06 18:53:17 christos Exp $");
+__RCSID("$NetBSD: popen.c,v 1.3 2011/07/17 01:16:46 christos Exp $");
#endif
#endif /* not lint */
@@ -98,26 +98,32 @@
/* NOTREACHED */
case 0: /* child */
if (pw) {
+ if (setsid() == -1)
+ warn("setsid() failed for %s", pw->pw_name);
#ifdef LOGIN_CAP
- if (setusercontext(0, pw, pw->pw_uid, LOGIN_SETALL) < 0) {
- warnx("setusercontext failed for %s",
+ if (setusercontext(0, pw, pw->pw_uid, LOGIN_SETALL) < 0)
+ {
+ warn("setusercontext() failed for %s",
pw->pw_name);
_exit(ERROR_EXIT);
}
#else
if (setgid(pw->pw_gid) < 0 ||
initgroups(pw->pw_name, pw->pw_gid) < 0) {
- warnx("unable to set groups for %s",
+ warn("unable to set groups for %s",
pw->pw_name);
- _exit(1);
+ _exit(ERROR_EXIT);
}
#if (defined(BSD)) && (BSD >= 199103)
- setlogin(pw->pw_name);
+ if (setlogin(pw->pw_name) < 0) {
+ warn("setlogin() failed for %s",
+ pw->pw_name);
+ _exit(ERROR_EXIT);
+ }
#endif /* BSD */
if (setuid(pw->pw_uid)) {
- warnx("unable to set uid for %s",
- pw->pw_name);
- _exit(1);
+ warn("unable to set uid for %s", pw->pw_name);
+ _exit(ERROR_EXIT);
}
#endif /* LOGIN_CAP */
}
@@ -136,7 +142,7 @@
(void)close(pdes[1]);
}
(void)execvp(argv[0], argv);
- _exit(1);
+ _exit(ERROR_EXIT);
}
/* parent; assume fdopen can't fail... */