Revision: 23079 http://trac.macosforge.org/projects/launchd/changeset/23079 Author: zarzycki@apple.com Date: 2007-02-16 09:45:28 -0800 (Fri, 16 Feb 2007) Log Message: ----------- The last StartupItem installed by launchd is now dead. :-) Modified Paths: -------------- trunk/launchd/src/Makefile.am trunk/launchd/src/Makefile.in trunk/launchd/src/StartupItems.c trunk/launchd/src/SystemStarter.c Removed Paths: ------------- trunk/launchd/src/StartupItems/ Modified: trunk/launchd/src/Makefile.am =================================================================== --- trunk/launchd/src/Makefile.am 2007-02-16 17:21:59 UTC (rev 23078) +++ trunk/launchd/src/Makefile.am 2007-02-16 17:45:28 UTC (rev 23079) @@ -68,17 +68,7 @@ man8_MANS = StartupItemContext.8 SystemStarter.8 rc.8 launchd.8 service.8 launchproxy.8 -STARTUPITEMS = $(basename $(notdir $(wildcard $(srcdir)/StartupItems/*.plist))) - -$(addprefix $(DESTDIR)/System/Library/StartupItems/, $(STARTUPITEMS)): - mkdir -p $@ - cp $(srcdir)/StartupItems/$(notdir $@) $@ - chmod 755 $@/$(notdir $@) - cp $(srcdir)/StartupItems/$(notdir $@).plist $@/StartupParameters.plist - -install-startupitems: $(addprefix $(DESTDIR)/System/Library/StartupItems/, $(STARTUPITEMS)) - -install-data-hook: install-startupitems +install-data-hook: mkdir -p $(DESTDIR)/usr/libexec cp $(srcdir)/StartupItemContext $(DESTDIR)/usr/libexec mkdir -p $(DESTDIR)/usr/include/servers Modified: trunk/launchd/src/Makefile.in =================================================================== --- trunk/launchd/src/Makefile.in 2007-02-16 17:21:59 UTC (rev 23078) +++ trunk/launchd/src/Makefile.in 2007-02-16 17:45:28 UTC (rev 23079) @@ -249,7 +249,6 @@ @LIBS_ONLY_FALSE@man1_MANS = wait4path.1 launchctl.1 @LIBS_ONLY_FALSE@man5_MANS = launchd.plist.5 launchd.conf.5 @LIBS_ONLY_FALSE@man8_MANS = StartupItemContext.8 SystemStarter.8 rc.8 launchd.8 service.8 launchproxy.8 -@LIBS_ONLY_FALSE@STARTUPITEMS = $(basename $(notdir $(wildcard $(srcdir)/StartupItems/*.plist))) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am @@ -1075,15 +1074,7 @@ @LIBS_ONLY_FALSE@launchd_internal.h launchd_internalServer.c launchd_internalUser.c launchd_internalServer.h: $(srcdir)/launchd_internal.defs @LIBS_ONLY_FALSE@ mig $(MIGFLAGS) -sheader launchd_internalServer.h $(srcdir)/launchd_internal.defs -@LIBS_ONLY_FALSE@$(addprefix $(DESTDIR)/System/Library/StartupItems/, $(STARTUPITEMS)): -@LIBS_ONLY_FALSE@ mkdir -p $@ -@LIBS_ONLY_FALSE@ cp $(srcdir)/StartupItems/$(notdir $@) $@ -@LIBS_ONLY_FALSE@ chmod 755 $@/$(notdir $@) -@LIBS_ONLY_FALSE@ cp $(srcdir)/StartupItems/$(notdir $@).plist $@/StartupParameters.plist - -@LIBS_ONLY_FALSE@install-startupitems: $(addprefix $(DESTDIR)/System/Library/StartupItems/, $(STARTUPITEMS)) - -@LIBS_ONLY_FALSE@install-data-hook: install-startupitems +@LIBS_ONLY_FALSE@install-data-hook: @LIBS_ONLY_FALSE@ mkdir -p $(DESTDIR)/usr/libexec @LIBS_ONLY_FALSE@ cp $(srcdir)/StartupItemContext $(DESTDIR)/usr/libexec @LIBS_ONLY_FALSE@ mkdir -p $(DESTDIR)/usr/include/servers Modified: trunk/launchd/src/StartupItems.c =================================================================== --- trunk/launchd/src/StartupItems.c 2007-02-16 17:21:59 UTC (rev 23078) +++ trunk/launchd/src/StartupItems.c 2007-02-16 17:45:28 UTC (rev 23079) @@ -158,6 +158,7 @@ CFSTR("Core Services"), CFSTR("Network"), CFSTR("TIM"), + CFSTR("Disks"), NULL }; CFMutableArrayRef aList, aNewList; @@ -959,7 +960,6 @@ case 0: /* Child */ { - setpriority(PRIO_PROCESS, 0, 0); if (setsid() == -1) syslog(LOG_WARNING, "Unable to create session for item %s: %m", anExecutable); Modified: trunk/launchd/src/SystemStarter.c =================================================================== --- trunk/launchd/src/SystemStarter.c 2007-02-16 17:21:59 UTC (rev 23078) +++ trunk/launchd/src/SystemStarter.c 2007-02-16 17:45:28 UTC (rev 23079) @@ -44,6 +44,7 @@ static int system_starter(Action anAction, const char *aService); static void displayErrorMessages(StartupContext aStartupContext); static void doCFnote(void); +static pid_t fwexec(const char *const *argv, bool _wait); int main(int argc, char *argv[]) @@ -112,11 +113,9 @@ if (argc == 2) { aService = argv[1]; } else if (!gDebugFlag && anAction != kActionStop) { - pid_t ipwa; - int status; + const char *ipw_cmd[] = { "/usr/sbin/ipconfig", "waitall", NULL }; + const char *adm_cmd[] = { "/sbin/autodiskmount", "-va", NULL }; - setpriority(PRIO_PROCESS, 0, 20); - /* Too many old StartupItems had implicit dependancies on * "Network" via other StartupItems that are now no-ops. * @@ -124,30 +123,8 @@ * so we'll stall here to deal with this legacy dependancy * problem. */ - switch ((ipwa = fork())) { - case -1: - syslog(LOG_WARNING, "fork(): %m"); - break; - case 0: - execl("/usr/sbin/ipconfig", "ipconfig", "waitall", NULL); - syslog(LOG_WARNING, "execl(): %m"); - exit(EXIT_FAILURE); - default: - if (waitpid(ipwa, &status, 0) == -1) { - syslog(LOG_WARNING, "waitpid(): %m"); - break; - } else if (WIFEXITED(status)) { - if (WEXITSTATUS(status) == 0) { - break; - } else { - syslog(LOG_WARNING, "ipconfig waitall exit status: %d", WEXITSTATUS(status)); - } - } else { - /* must have died due to signal */ - syslog(LOG_WARNING, "ipconfig waitall: %s", strsignal(WTERMSIG(status))); - } - break; - } + fwexec(ipw_cmd, true); + fwexec(adm_cmd, true); } int ssec = system_starter(anAction, aService); @@ -406,3 +383,38 @@ NULL, NULL, kCFNotificationDeliverImmediately | kCFNotificationPostToAllSessions); } + +pid_t +fwexec(const char *const *argv, bool _wait) +{ + int wstatus; + pid_t p; + + switch ((p = fork())) { + case -1: + return -1; + case 0: + setsid(); + execvp(argv[0], (char *const *)argv); + _exit(EXIT_FAILURE); + break; + default: + if (!_wait) + return p; + if (waitpid(p, &wstatus, 0) == -1) { + return -1; + } else if (WIFEXITED(wstatus)) { + if (WEXITSTATUS(wstatus) == 0) { + return 0; + } else { + syslog(LOG_WARNING, "%s exit status: %d", argv[0], WEXITSTATUS(wstatus)); + } + } else { + /* must have died due to signal */ + syslog(LOG_WARNING, "%s died: %s", argv[0], strsignal(WTERMSIG(wstatus))); + } + break; + } + + return -1; +}
participants (1)
-
source_changes@macosforge.org