X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-daemon%2Fchroot.c;h=ccd56be090cc6b64d4454a5d8b4f804af7267fc2;hb=35ea8dc8954eebd63aad7157d02f97388f679122;hp=b796648b6fa675eb03dd5334fbda8bc0a45dc329;hpb=a97605e07ad7f44f2f65e15be64880e61a39ab43;p=catta diff --git a/avahi-daemon/chroot.c b/avahi-daemon/chroot.c index b796648..ccd56be 100644 --- a/avahi-daemon/chroot.c +++ b/avahi-daemon/chroot.c @@ -1,5 +1,3 @@ -/* $Id$ */ - /*** This file is part of avahi. @@ -66,15 +64,15 @@ static const char* const get_file_name_table[AVAHI_CHROOT_MAX] = { NULL, "/etc/resolv.conf", #ifdef HAVE_DBUS - AVAHI_DBUS_INTROSPECTION_DIR"/Server.introspect", - AVAHI_DBUS_INTROSPECTION_DIR"/EntryGroup.introspect", - AVAHI_DBUS_INTROSPECTION_DIR"/AddressResolver.introspect", - AVAHI_DBUS_INTROSPECTION_DIR"/DomainBrowser.introspect", - AVAHI_DBUS_INTROSPECTION_DIR"/HostNameResolver.introspect", - AVAHI_DBUS_INTROSPECTION_DIR"/ServiceBrowser.introspect", - AVAHI_DBUS_INTROSPECTION_DIR"/ServiceResolver.introspect", - AVAHI_DBUS_INTROSPECTION_DIR"/ServiceTypeBrowser.introspect", - AVAHI_DBUS_INTROSPECTION_DIR"/RecordBrowser.introspect", + AVAHI_DBUS_INTROSPECTION_DIR"/org.freedesktop.Avahi.Server.xml", + AVAHI_DBUS_INTROSPECTION_DIR"/org.freedesktop.Avahi.EntryGroup.xml", + AVAHI_DBUS_INTROSPECTION_DIR"/org.freedesktop.Avahi.AddressResolver.xml", + AVAHI_DBUS_INTROSPECTION_DIR"/org.freedesktop.Avahi.DomainBrowser.xml", + AVAHI_DBUS_INTROSPECTION_DIR"/org.freedesktop.Avahi.HostNameResolver.xml", + AVAHI_DBUS_INTROSPECTION_DIR"/org.freedesktop.Avahi.ServiceBrowser.xml", + AVAHI_DBUS_INTROSPECTION_DIR"/org.freedesktop.Avahi.ServiceResolver.xml", + AVAHI_DBUS_INTROSPECTION_DIR"/org.freedesktop.Avahi.ServiceTypeBrowser.xml", + AVAHI_DBUS_INTROSPECTION_DIR"/org.freedesktop.Avahi.RecordBrowser.xml", #endif NULL, NULL @@ -106,8 +104,8 @@ static int send_fd(int fd, int payload_fd) { struct iovec iov; struct msghdr msg; union { - struct cmsghdr hdr; - char buf[CMSG_SPACE(sizeof(int))]; + struct cmsghdr hdr; + char buf[CMSG_SPACE(sizeof(int))]; } cmsg; /* Send a file descriptor over the socket */ @@ -146,8 +144,8 @@ static int recv_fd(int fd) { struct iovec iov; struct msghdr msg; union { - struct cmsghdr hdr; - char buf[CMSG_SPACE(sizeof(int))]; + struct cmsghdr hdr; + char buf[CMSG_SPACE(sizeof(int))]; } cmsg; /* Receive a file descriptor from a socket */ @@ -309,8 +307,6 @@ int avahi_chroot_helper_start(const char *argv0) { return -1; } else if (pid == 0) { - setsid(); - /* Drop all remaining capabilities */ avahi_caps_drop_all(); @@ -398,12 +394,14 @@ int avahi_chroot_helper_unlink(const char *fname) { return -1; } - if (write(helper_fd, &command, sizeof(command)) < 0) { + if (write(helper_fd, &command, sizeof(command)) < 0 && + (errno != EPIPE && errno != ECONNRESET)) { avahi_log_error("write() failed: %s\n", strerror(errno)); return -1; } - if ((r = read(helper_fd, &c, sizeof(c))) < 0) { + if ((r = read(helper_fd, &c, sizeof(c))) < 0 && + (errno != EPIPE && errno != ECONNRESET)) { avahi_log_error("read() failed: %s\n", r < 0 ? strerror(errno) : "EOF"); return -1; }