X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/blobdiff_plain/e55761b186abf435d15e9e9229df76f0b6cd9a59..9e0161ce6242483f0400c561014ea8bf12df6d45:/server/admin.c diff --git a/server/admin.c b/server/admin.c index 228cce15..32b35772 100644 --- a/server/admin.c +++ b/server/admin.c @@ -2226,6 +2226,7 @@ void a_init(const char *name, uid_t u, gid_t g) struct sockaddr_un sun; struct sigaction sa; size_t sz; + mode_t omask; /* --- Create services table --- */ @@ -2243,7 +2244,7 @@ void a_init(const char *name, uid_t u, gid_t g) /* --- Attempt to bind to the socket --- */ - umask(0077); + omask = umask(0077); again: if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) die(EXIT_FAILURE, "couldn't create socket: %s", strerror(errno)); @@ -2274,12 +2275,15 @@ again: close(fd); goto again; } - chmod(sun.sun_path, 0600); + if (chmod(sun.sun_path, 0600)) { + die(EXIT_FAILURE, "failed to set socket permissions: %s", + strerror(errno)); + } if (chown(sun.sun_path, u, g)) { - T( trace(T_ADMIN, - "admin: failed to give away socket: %s", - strerror(errno)); ) + die(EXIT_FAILURE, "failed to set socket owner: %s", + strerror(errno)); } + umask(omask); fdflags(fd, O_NONBLOCK, O_NONBLOCK, FD_CLOEXEC, FD_CLOEXEC); if (listen(fd, 5)) die(EXIT_FAILURE, "couldn't listen on socket: %s", strerror(errno));