]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
privsep: split privsep_io.c in 3 files
authorVincent Bernat <vincent@bernat.im>
Mon, 23 May 2016 09:04:55 +0000 (11:04 +0200)
committerVincent Bernat <vincent@bernat.im>
Mon, 23 May 2016 09:05:20 +0000 (11:05 +0200)
This enables us to express correct information about copyright.

debian/copyright
src/daemon/Makefile.am
src/daemon/privsep.c [new file with mode: 0644]
src/daemon/privsep_fd.c [new file with mode: 0644]
src/daemon/privsep_io.c

index 3e0ba8c8c04678065d48babc11a0715c5d8b3869..0535461cadcb9f124c3e12a253d983e50a8c384f 100644 (file)
@@ -2,8 +2,6 @@ Files: *
 Copyright: © 2008-2013 Vincent Bernat <bernat@luffy.cx>
            © 2003, 2004 Henning Brauer <henning@openbsd.org>
            © 2006 Pierre-Yves Ritschard <pyr@openbsd.org>
-           © 2003 Can Erkin Acar
-           © 2003 Anil Madhavapeddy <anil@recoil.org>
            © 2010 Andreas Hofmeister <andi@collax.com>
 License: ISC
 
@@ -22,9 +20,14 @@ Copyright: Copyright (c) 2010 Chris Davis, Niels Provos, and Nick Mathewson
            Copyright (c) 2008, Damien Miller <djm@openbsd.org>
 License: ISC
 
-Files: src/privsep_fdpass.c
-Copyright: © 2001 Niels Provos <provos@citi.umich.edu>
-           © 2002 Matthieu Herrb
+Files: src/privsep_io.c
+Copyright: Copyright (c) 2003 Can Erkin Acar
+           Copyright (c) 2003 Anil Madhavapeddy <anil@recoil.org>
+License: ISC
+
+Files: src/privsep_fd.c
+Copyright: Copyright 2001 Niels Provos <provos@citi.umich.edu>
+           Copyright (c) 2002 Matthieu Herrb
 License: BSD-2-clause
 
 Files: m4/ax_cflags_gcc_option.m4
index b4734d4ae4f8ffa677bae29c98d0547439d9c439..5363a4c38f4442459bc98ad1c9705536237dfbc7 100644 (file)
@@ -15,7 +15,8 @@ liblldpd_la_SOURCES  = \
        frame.h frame.c \
        lldp-tlv.h \
        client.c \
-       priv.c privsep_io.c \
+       priv.c \
+       privsep.c privsep_io.c privsep_fd.c \
        interfaces.c \
        event.c lldpd.c \
        pattern.c \
diff --git a/src/daemon/privsep.c b/src/daemon/privsep.c
new file mode 100644 (file)
index 0000000..068cb5c
--- /dev/null
@@ -0,0 +1,24 @@
+/* -*- mode: c; c-file-style: "openbsd" -*- */
+
+#include "lldpd.h"
+
+static int privileged, unprivileged;
+void
+priv_privileged_fd(int fd)
+{
+       privileged = fd;
+}
+void
+priv_unprivileged_fd(int fd)
+{
+       unprivileged = fd;
+}
+int
+priv_fd(enum priv_context ctx)
+{
+       switch (ctx) {
+       case PRIV_PRIVILEGED: return privileged;
+       case PRIV_UNPRIVILEGED: return unprivileged;
+       }
+       return -1;              /* Not possible */
+}
diff --git a/src/daemon/privsep_fd.c b/src/daemon/privsep_fd.c
new file mode 100644 (file)
index 0000000..ab2d9a6
--- /dev/null
@@ -0,0 +1,132 @@
+/* -*- mode: c; c-file-style: "openbsd" -*- */
+
+#include "lldpd.h"
+
+#include <sys/param.h>
+#include <sys/uio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+/*
+ * Copyright 2001 Niels Provos <provos@citi.umich.edu>
+ * All rights reserved.
+ *
+ * Copyright (c) 2002 Matthieu Herrb
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *    - Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    - Redistributions in binary form must reproduce the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer in the documentation and/or other materials provided
+ *      with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+void
+send_fd(enum priv_context ctx, int fd)
+{
+       struct msghdr msg;
+       union {
+               struct cmsghdr hdr;
+               char buf[CMSG_SPACE(sizeof(int))];
+       } cmsgbuf;
+       struct cmsghdr *cmsg;
+       struct iovec vec;
+       int result = 0;
+       ssize_t n;
+
+       memset(&msg, 0, sizeof(msg));
+       memset(&cmsgbuf.buf, 0, sizeof(cmsgbuf.buf));
+
+       if (fd >= 0) {
+               msg.msg_control = (caddr_t)&cmsgbuf.buf;
+               msg.msg_controllen = sizeof(cmsgbuf.buf);
+               cmsg = CMSG_FIRSTHDR(&msg);
+               cmsg->cmsg_len = CMSG_LEN(sizeof(int));
+               cmsg->cmsg_level = SOL_SOCKET;
+               cmsg->cmsg_type = SCM_RIGHTS;
+               memcpy(CMSG_DATA(cmsg), &fd, sizeof(int));
+       } else {
+               result = errno;
+       }
+
+       vec.iov_base = &result;
+       vec.iov_len = sizeof(int);
+       msg.msg_iov = &vec;
+       msg.msg_iovlen = 1;
+
+       if ((n = sendmsg(priv_fd(ctx), &msg, 0)) == -1)
+               log_warn("privsep", "sendmsg(%d)", priv_fd(ctx));
+       if (n != sizeof(int))
+               log_warnx("privsep", "sendmsg: expected sent 1 got %ld",
+                   (long)n);
+}
+
+int
+receive_fd(enum priv_context ctx)
+{
+       struct msghdr msg;
+       union {
+               struct cmsghdr hdr;
+               char buf[CMSG_SPACE(sizeof(int))];
+       } cmsgbuf;
+       struct cmsghdr *cmsg;
+       struct iovec vec;
+       ssize_t n;
+       int result;
+       int fd;
+
+       memset(&msg, 0, sizeof(msg));
+       vec.iov_base = &result;
+       vec.iov_len = sizeof(int);
+       msg.msg_iov = &vec;
+       msg.msg_iovlen = 1;
+       msg.msg_control = &cmsgbuf.buf;
+       msg.msg_controllen = sizeof(cmsgbuf.buf);
+
+       if ((n = recvmsg(priv_fd(ctx), &msg, 0)) == -1)
+               log_warn("privsep", "recvmsg");
+       if (n != sizeof(int))
+               log_warnx("privsep", "recvmsg: expected received 1 got %ld",
+                   (long)n);
+       if (result == 0) {
+               cmsg = CMSG_FIRSTHDR(&msg);
+               if (cmsg == NULL) {
+                       log_warnx("privsep", "no message header");
+                       return -1;
+               }
+               if (cmsg->cmsg_type != SCM_RIGHTS)
+                       log_warnx("privsep", "expected type %d got %d",
+                           SCM_RIGHTS, cmsg->cmsg_type);
+               memcpy(&fd, CMSG_DATA(cmsg), sizeof(int));
+               return fd;
+       } else {
+               errno = result;
+               return -1;
+       }
+}
index 59187919ff0da6db2fa0ad25074ead83f5673b7e..e9734a7102de6d57a737cc6f6af8bd4908a61389 100644 (file)
 #include <string.h>
 #include <unistd.h>
 
-static int privileged, unprivileged;
-void
-priv_privileged_fd(int fd)
-{
-       privileged = fd;
-}
-void
-priv_unprivileged_fd(int fd)
-{
-       unprivileged = fd;
-}
-int
-priv_fd(enum priv_context ctx)
-{
-       switch (ctx) {
-       case PRIV_PRIVILEGED: return privileged;
-       case PRIV_UNPRIVILEGED: return unprivileged;
-       }
-       return -1;              /* Not possible */
-}
-
-/*
- * Copyright 2001 Niels Provos <provos@citi.umich.edu>
- * All rights reserved.
- *
- * Copyright (c) 2002 Matthieu Herrb
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- *    - Redistributions of source code must retain the above copyright
- *      notice, this list of conditions and the following disclaimer.
- *    - Redistributions in binary form must reproduce the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer in the documentation and/or other materials provided
- *      with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-void
-send_fd(enum priv_context ctx, int fd)
-{
-       struct msghdr msg;
-       union {
-               struct cmsghdr hdr;
-               char buf[CMSG_SPACE(sizeof(int))];
-       } cmsgbuf;
-       struct cmsghdr *cmsg;
-       struct iovec vec;
-       int result = 0;
-       ssize_t n;
-
-       memset(&msg, 0, sizeof(msg));
-       memset(&cmsgbuf.buf, 0, sizeof(cmsgbuf.buf));
-
-       if (fd >= 0) {
-               msg.msg_control = (caddr_t)&cmsgbuf.buf;
-               msg.msg_controllen = sizeof(cmsgbuf.buf);
-               cmsg = CMSG_FIRSTHDR(&msg);
-               cmsg->cmsg_len = CMSG_LEN(sizeof(int));
-               cmsg->cmsg_level = SOL_SOCKET;
-               cmsg->cmsg_type = SCM_RIGHTS;
-               memcpy(CMSG_DATA(cmsg), &fd, sizeof(int));
-       } else {
-               result = errno;
-       }
-
-       vec.iov_base = &result;
-       vec.iov_len = sizeof(int);
-       msg.msg_iov = &vec;
-       msg.msg_iovlen = 1;
-
-       if ((n = sendmsg(priv_fd(ctx), &msg, 0)) == -1)
-               log_warn("privsep", "sendmsg(%d)", priv_fd(ctx));
-       if (n != sizeof(int))
-               log_warnx("privsep", "sendmsg: expected sent 1 got %ld",
-                   (long)n);
-}
-
-int
-receive_fd(enum priv_context ctx)
-{
-       struct msghdr msg;
-       union {
-               struct cmsghdr hdr;
-               char buf[CMSG_SPACE(sizeof(int))];
-       } cmsgbuf;
-       struct cmsghdr *cmsg;
-       struct iovec vec;
-       ssize_t n;
-       int result;
-       int fd;
-
-       memset(&msg, 0, sizeof(msg));
-       vec.iov_base = &result;
-       vec.iov_len = sizeof(int);
-       msg.msg_iov = &vec;
-       msg.msg_iovlen = 1;
-       msg.msg_control = &cmsgbuf.buf;
-       msg.msg_controllen = sizeof(cmsgbuf.buf);
-
-       if ((n = recvmsg(priv_fd(ctx), &msg, 0)) == -1)
-               log_warn("privsep", "recvmsg");
-       if (n != sizeof(int))
-               log_warnx("privsep", "recvmsg: expected received 1 got %ld",
-                   (long)n);
-       if (result == 0) {
-               cmsg = CMSG_FIRSTHDR(&msg);
-               if (cmsg == NULL) {
-                       log_warnx("privsep", "no message header");
-                       return -1;
-               }
-               if (cmsg->cmsg_type != SCM_RIGHTS)
-                       log_warnx("privsep", "expected type %d got %d",
-                           SCM_RIGHTS, cmsg->cmsg_type);
-               memcpy(&fd, CMSG_DATA(cmsg), sizeof(int));
-               return fd;
-       } else {
-               errno = result;
-               return -1;
-       }
-}
-
 /* Stolen from sbin/pflogd/privsep.c from OpenBSD */
 /*
  * Copyright (c) 2003 Can Erkin Acar