From d72e5b4dcb4aa82963fd3ce24000a3197269442f Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 3 Nov 1996 23:24:14 +0000 Subject: Improve portability by using ANSI/POSIX interfaces when possible. --- usr.sbin/lpr/lpd/lpd.c | 12 ++++++++---- usr.sbin/lpr/lpd/printjob.c | 36 ++++++++++++++++++------------------ usr.sbin/lpr/lpd/recvjob.c | 2 +- 3 files changed, 27 insertions(+), 23 deletions(-) (limited to 'usr.sbin/lpr/lpd') diff --git a/usr.sbin/lpr/lpd/lpd.c b/usr.sbin/lpr/lpd/lpd.c index 973346682a6..a9780fe2285 100644 --- a/usr.sbin/lpr/lpd/lpd.c +++ b/usr.sbin/lpr/lpd/lpd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: lpd.c,v 1.10 1996/10/26 12:33:41 deraadt Exp $ */ +/* $OpenBSD: lpd.c,v 1.11 1996/11/03 23:24:08 millert Exp $ */ /* $NetBSD: lpd.c,v 1.7 1996/04/24 14:54:06 mrg Exp $ */ /* @@ -126,7 +126,11 @@ main(argc, argv) uid = getuid(); options = 0; gethostname(host, sizeof(host)); - name = argv[0]; + + if (euid != 0) { + fprintf(stderr,"lpd: must run as root\n"); + exit(1); + } while (--argc > 0) { argv++; @@ -289,9 +293,9 @@ static void reapchild(signo) int signo; { - union wait status; + int status; - while (wait3((int *)&status, WNOHANG, 0) > 0) + while (waitpid((pid_t)-1, &status, WNOHANG) > 0) ; } diff --git a/usr.sbin/lpr/lpd/printjob.c b/usr.sbin/lpr/lpd/printjob.c index 21370f43bd9..5c15e12b6fb 100644 --- a/usr.sbin/lpr/lpd/printjob.c +++ b/usr.sbin/lpr/lpd/printjob.c @@ -1,4 +1,4 @@ -/* $OpenBSD: printjob.c,v 1.9 1996/10/25 19:38:23 deraadt Exp $ */ +/* $OpenBSD: printjob.c,v 1.10 1996/11/03 23:24:10 millert Exp $ */ /* $NetBSD: printjob.c,v 1.9.4.3 1996/07/12 22:31:39 jtc Exp $ */ /* @@ -266,7 +266,7 @@ again: syslog(LOG_WARNING, "%s: job could not be %s (%s)", printer, remote ? "sent to remote host" : "printed", q->q_name); if (i == REPRINT) { - /* insure we don't attempt this job again */ + /* ensure we don't attempt this job again */ (void) unlink(q->q_name); q->q_name[0] = 'd'; (void) unlink(q->q_name); @@ -574,7 +574,7 @@ print(format, file) dup2(fi, 0); /* file is stdin */ dup2(p[1], 1); /* pipe is stdout */ closelog(); - for (n = 3, nofile = getdtablesize(); n < nofile; n++) + for (n = 3, nofile = sysconf(_SC_OPEN_MAX); n < nofile; n++) (void) close(n); execl(_PATH_PR, "pr", width, length, "-h", *title ? title : " ", 0); @@ -663,7 +663,7 @@ print(format, file) printer, format); return(ERROR); } - if ((av[0] = rindex(prog, '/')) != NULL) + if ((av[0] = strrchr(prog, '/')) != NULL) av[0]++; else av[0] = prog; @@ -676,14 +676,14 @@ print(format, file) fo = pfd; if (ofilter > 0) { /* stop output filter */ write(ofd, "\031\1", 2); - while ((pid = - wait3((int *)&status, WUNTRACED, 0)) > 0 && pid != ofilter) + while ((pid = waitpid((pid_t)-1, (int *)&status, WUNTRACED)) > 0 + && pid != ofilter) ; if (status.w_stopval != WSTOPPED) { (void) close(fi); syslog(LOG_WARNING, - "%s: output filter died (retcode=%d termsig=%d)", - printer, status.w_retcode, status.w_termsig); + "%s: output filter died (retcode=%d termsig=%d)", + printer, status.w_retcode, status.w_termsig); return(REPRINT); } stopped++; @@ -696,7 +696,7 @@ start: if (n >= 0) dup2(n, 2); closelog(); - for (n = 3, nofile = getdtablesize(); n < nofile; n++) + for (n = 3, nofile = sysconf(_SC_OPEN_MAX); n < nofile; n++) (void) close(n); execv(prog, av); syslog(LOG_ERR, "cannot execv %s", prog); @@ -889,9 +889,6 @@ sendfile(type, file) } } - - - (void) close(f); if (sizerr) { syslog(LOG_INFO, "%s: %s: changed size", printer, file); @@ -1057,9 +1054,9 @@ sendmail(user, bombed) if ((s = dofork(DORETURN)) == 0) { /* child */ dup2(p[0], 0); closelog(); - for (i = 3, nofile = getdtablesize(); i < nofile; i++) + for (i = 3, nofile = sysconf(_SC_OPEN_MAX); i < nofile; i++) (void) close(i); - if ((cp = rindex(_PATH_SENDMAIL, '/')) != NULL) + if ((cp = strrchr(_PATH_SENDMAIL, '/')) != NULL) cp++; else cp = _PATH_SENDMAIL; @@ -1266,7 +1263,7 @@ openpr() char *cp; if (!remote && *LP) { - if (cp = index(LP, '@')) + if (cp = strchr(LP, '@')) opennet(cp); else opentty(); @@ -1290,9 +1287,9 @@ openpr() dup2(p[0], 0); /* pipe is std in */ dup2(pfd, 1); /* printer is std out */ closelog(); - for (i = 3, nofile = getdtablesize(); i < nofile; i++) + for (i = 3, nofile = sysconf(_SC_OPEN_MAX); i < nofile; i++) (void) close(i); - if ((cp = rindex(OF, '/')) == NULL) + if ((cp = strrchr(OF, '/')) == NULL) cp = OF; else cp++; @@ -1494,7 +1491,10 @@ setty() p = strdup(MS); ap = argv; while ((val = strsep(&p, " \t,")) != NULL) { - *ap++ = strdup(val); + if ((*ap++ = strdup(val)) == NULL) { + syslog(LOG_ERR, "%s: strdup: %m", printer); + exit(1); + } } for (; *argv; ++argv) { diff --git a/usr.sbin/lpr/lpd/recvjob.c b/usr.sbin/lpr/lpd/recvjob.c index ea2128cd31e..9af9e8bb89c 100644 --- a/usr.sbin/lpr/lpd/recvjob.c +++ b/usr.sbin/lpr/lpd/recvjob.c @@ -203,7 +203,7 @@ readjob() } (void) strncpy(dfname, cp, sizeof dfname-1); dfname[sizeof dfname-1] = '\0'; - if (index(dfname, '/')) + if (strchr(dfname, '/')) frecverr("readjob: %s: illegal path name", dfname); (void) readfile(dfname, size); -- cgit v1.2.3