Revision: 22934 http://trac.macosforge.org/projects/launchd/changeset/22934 Author: zarzycki@apple.com Date: 2006-11-03 11:16:05 -0800 (Fri, 03 Nov 2006) Log Message: ----------- <rdar://problem/4446357> sudo launchctl doesn't work as expected Modified Paths: -------------- trunk/launchd/src/launchd_unix_ipc.c trunk/launchd/src/liblaunch.c Modified: trunk/launchd/src/launchd_unix_ipc.c =================================================================== --- trunk/launchd/src/launchd_unix_ipc.c 2006-11-03 18:07:24 UTC (rev 22933) +++ trunk/launchd/src/launchd_unix_ipc.c 2006-11-03 19:16:05 UTC (rev 22934) @@ -134,7 +134,6 @@ goto out_bad; } snprintf(sun.sun_path, sizeof(sun.sun_path), "%s/sock", ourdir); - setenv(LAUNCHD_SOCKET_ENV, sun.sun_path, 1); } if (unlink(sun.sun_path) == -1 && errno != ENOENT) { Modified: trunk/launchd/src/liblaunch.c =================================================================== --- trunk/launchd/src/liblaunch.c 2006-11-03 18:07:24 UTC (rev 22933) +++ trunk/launchd/src/liblaunch.c 2006-11-03 19:16:05 UTC (rev 22934) @@ -160,6 +160,7 @@ char *where = getenv(LAUNCHD_SOCKET_ENV); char *_launchd_fd = getenv(LAUNCHD_TRUSTED_FD_ENV); int dfd, lfd = -1; + name_t spath; _lc = calloc(1, sizeof(struct _launch_client)); @@ -184,10 +185,14 @@ if (where && where[0] != '\0') { strncpy(sun.sun_path, where, sizeof(sun.sun_path)); - } else if (getuid() == 0) { + } else if (!getenv("SUDO_COMMAND") && _vprocmgr_getsocket(spath) == 0) { + size_t min_len; + + min_len = sizeof(sun.sun_path) < sizeof(spath) ? sizeof(sun.sun_path) : sizeof(spath); + + strncpy(sun.sun_path, spath, min_len); + } else { strncpy(sun.sun_path, LAUNCHD_SOCK_PREFIX "/sock", sizeof(sun.sun_path)); - } else { - goto out_bad; } if ((lfd = _fd(socket(AF_UNIX, SOCK_STREAM, 0))) == -1) @@ -1208,8 +1213,6 @@ usleep(20000); } - setenv(LAUNCHD_SOCKET_ENV, sp, 1); - if (flags & LOAD_ONLY_SAFEMODE_LAUNCHAGENTS) { largv[5] = "system"; }
participants (1)
-
source_changes@macosforge.org