]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
daemon: only keep one privileged op to remove both socket and lock
authorVincent Bernat <vincent@bernat.ch>
Tue, 10 Mar 2026 07:34:22 +0000 (08:34 +0100)
committerVincent Bernat <vincent@bernat.ch>
Tue, 10 Mar 2026 07:46:41 +0000 (08:46 +0100)
src/daemon/lldpd.c
src/daemon/lldpd.h
src/daemon/priv.c

index a6b0728ada2fd424afa5717466da9a589a95e75a..d55a22b4551704d2a26a93a7ca17a067963daaa3 100644 (file)
@@ -1324,7 +1324,6 @@ lldpd_exit(struct lldpd *cfg)
                lldpd_send_shutdown(hardware);
 
        close(cfg->g_ctl);
-       priv_ctl_cleanup_lock();
        priv_ctl_cleanup();
        log_debug("main", "cleanup hardware information");
        for (hardware = TAILQ_FIRST(&cfg->g_hardware); hardware != NULL;
index 982456bd5b8cdfe8a92f46dcfda70fbbd8d2180f..905c25f511ca91f1f73e742ab1b2f5c82de77889 100644 (file)
@@ -199,7 +199,6 @@ void priv_init(const char *);
 #endif
 void priv_wait(void);
 void priv_ctl_cleanup(void);
-void priv_ctl_cleanup_lock(void);
 char *priv_gethostname(void);
 #ifdef HOST_OS_LINUX
 int priv_open(const char *);
@@ -217,7 +216,6 @@ int priv_snmp_socket(struct sockaddr_un *);
 enum priv_cmd {
        PRIV_PING,
        PRIV_DELETE_CTL_SOCKET,
-       PRIV_DELETE_CTL_SOCKET_LOCK,
        PRIV_GET_HOSTNAME,
        PRIV_OPEN,
        PRIV_IFACE_INIT,
index 2266ea9e0f1587da1cc3b47ae63c9a5d4569df2e..4a27a1110ae24a7fcb8cad7939f3bcb3e7d5acf6 100644 (file)
@@ -101,17 +101,6 @@ priv_ctl_cleanup(void)
        must_read(PRIV_UNPRIVILEGED, &rc, sizeof(int));
 }
 
-/* Proxy for ctl_cleanup_lock */
-void
-priv_ctl_cleanup_lock(void)
-{
-       int rc;
-       enum priv_cmd cmd = PRIV_DELETE_CTL_SOCKET_LOCK;
-       must_write(PRIV_UNPRIVILEGED, &cmd, sizeof(enum priv_cmd));
-       priv_wait();
-       must_read(PRIV_UNPRIVILEGED, &rc, sizeof(int));
-}
-
 /* Proxy for gethostname */
 char *
 priv_gethostname()
@@ -209,28 +198,17 @@ asroot_ping()
 static void
 asroot_ctl_cleanup()
 {
+       char *lockname = NULL;
        int rc = 0;
        if (ctlname == NULL) {
                log_warnx("privsep", "no control socket path registered");
                rc = -1;
        } else {
                ctl_cleanup(ctlname);
-       }
-       must_write(PRIV_PRIVILEGED, &rc, sizeof(int));
-}
-
-static void
-asroot_ctl_cleanup_lock()
-{
-       char *received_lockname = NULL;
-       int rc = 0;
-       if (ctlname == NULL ||
-           asprintf(&received_lockname, "%s.lock", ctlname) == -1) {
-               log_warnx("privsep", "no control socket path registered");
-               rc = -1;
-       } else {
-               ctl_cleanup(received_lockname);
-               free(received_lockname);
+               if (asprintf(&lockname, "%s.lock", ctlname) != -1) {
+                       ctl_cleanup(lockname);
+                       free(lockname);
+               }
        }
        must_write(PRIV_PRIVILEGED, &rc, sizeof(int));
 }
@@ -404,7 +382,6 @@ struct dispatch_actions {
 
 static struct dispatch_actions actions[] = { { PRIV_PING, asroot_ping },
        { PRIV_DELETE_CTL_SOCKET, asroot_ctl_cleanup },
-       { PRIV_DELETE_CTL_SOCKET_LOCK, asroot_ctl_cleanup_lock },
        { PRIV_GET_HOSTNAME, asroot_gethostname },
 #ifdef HOST_OS_LINUX
        { PRIV_OPEN, asroot_open },