From aedd4e87362371d83dd64d0bfb03ea3e5526607f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 30 Oct 2005 18:21:57 +0000 Subject: * add chroot() support on Linux git-svn-id: file:///home/lennart/svn/public/avahi/trunk@907 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- avahi-daemon/dbus-util.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'avahi-daemon/dbus-util.c') diff --git a/avahi-daemon/dbus-util.c b/avahi-daemon/dbus-util.c index 09826d3..00d8a9d 100644 --- a/avahi-daemon/dbus-util.c +++ b/avahi-daemon/dbus-util.c @@ -37,6 +37,10 @@ #include #include +#ifdef ENABLE_CHROOT +#include "chroot.h" +#endif + #include "main.h" #include "dbus-util.h" @@ -155,15 +159,21 @@ const char *avahi_dbus_map_resolve_signal_name(AvahiResolverEvent e) { abort(); } -static char *file_get_contents(char *fname) { +static char *file_get_contents(const char *fname) { int fd = -1; struct stat st; ssize_t size; char *buf = NULL; - + assert(fname); + +#ifdef ENABLE_CHROOT + fd = avahi_chroot_helper_get_fd(fname); +#else + fd = open(fname, O_RDONLY); +#endif - if (!(fd = open(fname, O_RDONLY))) { + if (fd < 0) { avahi_log_error("Failed to open %s: %s", fname, strerror(errno)); goto fail; } @@ -193,12 +203,13 @@ static char *file_get_contents(char *fname) { buf[size] = 0; close(fd); + return buf; fail: if (fd >= 0) close(fd); - + if (buf) avahi_free(buf); @@ -207,7 +218,7 @@ fail: } DBusHandlerResult avahi_dbus_handle_introspect(DBusConnection *c, DBusMessage *m, const char *fname) { - char *path, *contents; + char *contents, *path; DBusError error; assert(c); @@ -220,7 +231,7 @@ DBusHandlerResult avahi_dbus_handle_introspect(DBusConnection *c, DBusMessage *m avahi_log_error("Error parsing Introspect message: %s", error.message); goto fail; } - + path = avahi_strdup_printf("%s/%s", AVAHI_DBUS_INTROSPECTION_DIR, fname); contents = file_get_contents(path); avahi_free(path); -- cgit