On Tue, 27 Oct 2015 14:28:51 +0100, Jan Stary wrote:

> $ find /var/run/ -name \*pid 
> /var/run/syslog.pid
> /var/run/unbound.pid
> /var/run/lpd.pid
> /var/run/sshd.pid
> /var/run/smtpd.pid
> /var/run/cron.pid
> 
> - should these stop using pidfiles too?

unbound and cron have already had the pidfile removed.
Below is a diff for lpd.

 - todd

Index: usr.sbin/lpr/SMM.doc/7.t
===================================================================
RCS file: /cvs/src/usr.sbin/lpr/SMM.doc/7.t,v
retrieving revision 1.5
diff -u -p -u -r1.5 7.t
--- usr.sbin/lpr/SMM.doc/7.t    2 Jun 2003 23:36:53 -0000       1.5
+++ usr.sbin/lpr/SMM.doc/7.t    27 Oct 2015 15:28:56 -0000
@@ -74,7 +74,7 @@ restart
 .DE
 You can also check the state of the master printer daemon with the following.
 .DS
-% ps l`cat /var/run/lpd.pid`
+% pgrep -l lpd
 .DE
 .IP
 Another possibility is that the
Index: usr.sbin/lpr/common_source/pathnames.h
===================================================================
RCS file: /cvs/src/usr.sbin/lpr/common_source/pathnames.h,v
retrieving revision 1.5
diff -u -p -u -r1.5 pathnames.h
--- usr.sbin/lpr/common_source/pathnames.h      20 Apr 2014 22:35:10 -0000      
1.5
+++ usr.sbin/lpr/common_source/pathnames.h      27 Oct 2015 15:28:56 -0000
@@ -37,7 +37,6 @@
 #define        _PATH_DEFDEVLP          "/dev/lp"
 #define        _PATH_DEFSPOOL          "/var/spool/output/lpd"
 #define        _PATH_HOSTSLPD          "/etc/hosts.lpd"
-#define        _PATH_MASTERLOCK        "/var/run/lpd.pid"
 #define        _PATH_PR                "/usr/bin/pr"
 #define        _PATH_PRINTCAP          "/etc/printcap"
 #define        _PATH_SOCKETNAME        "/var/run/printer"
Index: usr.sbin/lpr/lpd/lpd.8
===================================================================
RCS file: /cvs/src/usr.sbin/lpr/lpd/lpd.8,v
retrieving revision 1.27
diff -u -p -u -r1.27 lpd.8
--- usr.sbin/lpr/lpd/lpd.8      12 Sep 2015 15:17:11 -0000      1.27
+++ usr.sbin/lpr/lpd/lpd.8      27 Oct 2015 15:28:56 -0000
@@ -324,9 +324,6 @@ and
 .Bl -tag -width "/var/spool/output/*/minfree" -compact
 .It Pa /etc/printcap
 printer description file
-.It Pa /var/run/lpd.pid
-lock file for
-.Nm
 .It Pa /var/spool/output/*
 spool directories
 .It Pa /var/spool/output/*/minfree
Index: usr.sbin/lpr/lpd/lpd.c
===================================================================
RCS file: /cvs/src/usr.sbin/lpr/lpd/lpd.c,v
retrieving revision 1.61
diff -u -p -u -r1.61 lpd.c
--- usr.sbin/lpr/lpd/lpd.c      27 Oct 2015 15:23:28 -0000      1.61
+++ usr.sbin/lpr/lpd/lpd.c      27 Oct 2015 15:28:56 -0000
@@ -1,4 +1,4 @@
-/*     $OpenBSD: lpd.c,v 1.61 2015/10/27 15:23:28 millert Exp $ */
+/*     $OpenBSD: lpd.c,v 1.61 2015/10/27 15:23:28 millert Exp $        */
 /*     $NetBSD: lpd.c,v 1.33 2002/01/21 14:42:29 wiz Exp $     */
 
 /*
@@ -122,7 +122,7 @@ main(int argc, char **argv)
        struct sockaddr_un un, fromunix;
        struct sockaddr_storage frominet;
        sigset_t mask, omask;
-       int lfd, i, f, funix, *finet;
+       int i, funix, *finet;
        int options, maxfd;
        long l;
        long child_max = 32;    /* more than enough to hose the system */
@@ -222,6 +222,23 @@ main(int argc, char **argv)
                usage();
        }
 
+       funix = socket(AF_UNIX, SOCK_STREAM, 0);
+       if (funix < 0)
+               err(1, "socket");
+       memset(&un, 0, sizeof(un));
+       un.sun_family = AF_UNIX;
+       strlcpy(un.sun_path, _PATH_SOCKETNAME, sizeof(un.sun_path));
+       PRIV_START;
+       if (connect(funix, (struct sockaddr *)&un, sizeof(un)) == 0)
+               errx(1, "already running");
+       if (errno != ENOENT)
+               (void)unlink(un.sun_path);
+       if (bind(funix, (struct sockaddr *)&un, sizeof(un)) < 0)
+               err(1, "bind %s", un.sun_path);
+       chmod(_PATH_SOCKETNAME, 0660);
+       chown(_PATH_SOCKETNAME, -1, real_gid);
+       PRIV_END;
+
 #ifndef DEBUG
        /*
         * Set up standard environment by detaching from the parent.
@@ -232,38 +249,11 @@ main(int argc, char **argv)
        openlog("lpd", LOG_PID, LOG_LPR);
        syslog(LOG_INFO, "restarted");
        (void)umask(0);
-       PRIV_START;
-       lfd = open(_PATH_MASTERLOCK, O_WRONLY|O_CREAT|O_EXLOCK|O_NONBLOCK, 
0644);
-       PRIV_END;
-       if (lfd < 0) {
-               if (errno == EWOULDBLOCK)       /* active daemon present */
-                       exit(0);
-               syslog(LOG_ERR, "%s: %m", _PATH_MASTERLOCK);
-               exit(1);
-       }
-       ftruncate(lfd, 0);
-       /*
-        * write process id for others to know
-        */
-       (void)snprintf(line, sizeof(line), "%u\n", getpid());
-       f = strlen(line);
-       if (write(lfd, line, f) != f) {
-               syslog(LOG_ERR, "%s: %m", _PATH_MASTERLOCK);
-               exit(1);
-       }
        signal(SIGCHLD, reapchild);
        /*
         * Restart all the printers.
         */
        startup();
-       PRIV_START;
-       (void)unlink(_PATH_SOCKETNAME);
-       PRIV_END;
-       funix = socket(AF_UNIX, SOCK_STREAM, 0);
-       if (funix < 0) {
-               syslog(LOG_ERR, "socket: %m");
-               exit(1);
-       }
 
        sigemptyset(&mask);
        sigaddset(&mask, SIGHUP);
@@ -276,18 +266,6 @@ main(int argc, char **argv)
        signal(SIGINT, mcleanup);
        signal(SIGQUIT, mcleanup);
        signal(SIGTERM, mcleanup);
-       memset(&un, 0, sizeof(un));
-       un.sun_family = AF_UNIX;
-       strlcpy(un.sun_path, _PATH_SOCKETNAME, sizeof(un.sun_path));
-       PRIV_START;
-       if (bind(funix, (struct sockaddr *)&un, sizeof(un)) < 0) {
-               syslog(LOG_ERR, "ubind: %m");
-               exit(1);
-       }
-       chmod(_PATH_SOCKETNAME, 0660);
-       chown(_PATH_SOCKETNAME, -1, real_gid);
-       PRIV_END;
-       (void)umask(0);         /* XXX */
        sigprocmask(SIG_SETMASK, &omask, NULL);
        FD_ZERO(&defreadfds);
        FD_SET(funix, &defreadfds);
@@ -438,7 +416,6 @@ mcleanup(int signo)
                syslog_r(LOG_INFO, &sdata, "exiting");
        PRIV_START;
        unlink(_PATH_SOCKETNAME);
-       unlink(_PATH_MASTERLOCK);
        _exit(0);
 }
 

Reply via email to