diff options
author | Brian Somers <brian@FreeBSD.org> | 1997-05-17 03:04:43 +0000 |
---|---|---|
committer | Brian Somers <brian@FreeBSD.org> | 1997-05-17 03:04:43 +0000 |
commit | 6b7e3ca395b53cf9a86571130a75ede91d4e4cb5 (patch) | |
tree | fc688f83a1c18820aa990c1e837dec6769ee302e /usr.sbin/lpr | |
parent | eb1d542a7c9c527ddb5aa001a91478470e18f599 (diff) | |
download | src-test2-6b7e3ca395b53cf9a86571130a75ede91d4e4cb5.tar.gz src-test2-6b7e3ca395b53cf9a86571130a75ede91d4e4cb5.zip |
Notes
Diffstat (limited to 'usr.sbin/lpr')
-rw-r--r-- | usr.sbin/lpr/lpd/lpd.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/usr.sbin/lpr/lpd/lpd.c b/usr.sbin/lpr/lpd/lpd.c index 898fc48560f2..85148b156a89 100644 --- a/usr.sbin/lpr/lpd/lpd.c +++ b/usr.sbin/lpr/lpd/lpd.c @@ -433,11 +433,40 @@ startup() char *buf; register char *cp; int pid; + char *spooldirs[16]; /* Which spooldirs are active? */ + int i; /* Printer index presently processed */ + int j; /* Printer index of potential conflict */ + char *spooldir; /* Spooldir of present printer */ + int canfreespool; /* Is the spooldir malloc()ed? */ /* - * Restart the daemons. + * Restart the daemons and test for spooldir conflict. */ + i = 0; while (cgetnext(&buf, printcapdb) > 0) { + + /* Check for duplicate spooldirs */ + canfreespool = 1; + if (cgetstr(buf, "sd", &spooldir) <= 0) { + spooldir = _PATH_DEFSPOOL; + canfreespool = 0; + } + if (i < sizeof(spooldirs)/sizeof(spooldirs[0])) + spooldirs[i] = spooldir; + for (j = 0; + j < MIN(i,sizeof(spooldirs)/sizeof(spooldirs[0])); + j++) { + if (strcmp(spooldir, spooldirs[j]) == 0) { + syslog(LOG_ERR, + "startup: duplicate spool directories"); + mcleanup(0); + } + } + if (canfreespool && i >= sizeof(spooldirs)/sizeof(spooldirs[0])) + free(spooldir); + i++; + /* Spooldir test done */ + if (ckqueue(buf) <= 0) { free(buf); continue; /* no work to do for this printer */ |