From source_changes at macosforge.org Thu Mar 1 10:21:52 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:42 2007 Subject: [launchd-changes] [23119] trunk/launchd/src/launchd_runtime.c Message-ID: <20070301182152.AC1134C0028@cvs.opensource.apple.com> Revision: 23119 http://trac.macosforge.org/projects/launchd/changeset/23119 Author: zarzycki@apple.com Date: 2007-03-01 10:21:52 -0800 (Thu, 01 Mar 2007) Log Message: ----------- More logging. Modified Paths: -------------- trunk/launchd/src/launchd_runtime.c Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2007-02-28 23:39:18 UTC (rev 23118) +++ trunk/launchd/src/launchd_runtime.c 2007-03-01 18:21:52 UTC (rev 23119) @@ -658,6 +658,7 @@ struct kevent kev; if (launchd_assumes(kevent(asynckq, NULL, 0, &kev, 1, &timeout) == 1)) { + log_kevent_struct(LOG_DEBUG, &kev); (*((kq_callback *)kev.udata))(kev.udata, &kev); } } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070301/015db17a/attachment.html From source_changes at macosforge.org Thu Mar 1 11:15:03 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23120] trunk/launchd/src/rc.8 Message-ID: <20070301191503.0F77F4C00E2@cvs.opensource.apple.com> Revision: 23120 http://trac.macosforge.org/projects/launchd/changeset/23120 Author: zarzycki@apple.com Date: 2007-03-01 11:15:02 -0800 (Thu, 01 Mar 2007) Log Message: ----------- Fix a simple nroff error. Modified Paths: -------------- trunk/launchd/src/rc.8 Modified: trunk/launchd/src/rc.8 =================================================================== --- trunk/launchd/src/rc.8 2007-03-01 18:21:52 UTC (rev 23119) +++ trunk/launchd/src/rc.8 2007-03-01 19:15:02 UTC (rev 23120) @@ -1,6 +1,6 @@ .Dd May 31, 2006 .Dt RC 8 -.Os Darwin 9 +.Os Darwin .Sh NAME .Nm rc .Nd command script for boot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070301/e98dd5cd/attachment.html From source_changes at macosforge.org Thu Mar 1 11:19:11 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23121] trunk/launchd/src/launchd_runtime.c Message-ID: <20070301191911.AE8EC4C00F2@cvs.opensource.apple.com> Revision: 23121 http://trac.macosforge.org/projects/launchd/changeset/23121 Author: zarzycki@apple.com Date: 2007-03-01 11:19:11 -0800 (Thu, 01 Mar 2007) Log Message: ----------- Move some of the more variable length output of kevent debug logs to the end of the log message. Modified Paths: -------------- trunk/launchd/src/launchd_runtime.c Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2007-03-01 19:15:02 UTC (rev 23120) +++ trunk/launchd/src/launchd_runtime.c 2007-03-01 19:19:11 UTC (rev 23121) @@ -393,8 +393,8 @@ break; } - runtime_syslog(level, "KEVENT: ident = %s filter = %s flags = %s fflags = %s data = 0x%lx udata = %p", - ident_buf, filter_str, flags_buf, fflags_buf, kev->data, kev->udata); + runtime_syslog(level, "KEVENT: udata = %p data = 0x%lx ident = %s filter = %s flags = %s fflags = %s", + kev->udata, kev->data, ident_buf, filter_str, flags_buf, fflags_buf); } kern_return_t -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070301/6c4c3b05/attachment.html From source_changes at macosforge.org Thu Mar 1 20:04:38 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23122] trunk/launchd/src/launchd_core_logic.c Message-ID: <20070302040438.412104C0BE0@cvs.opensource.apple.com> Revision: 23122 http://trac.macosforge.org/projects/launchd/changeset/23122 Author: zarzycki@apple.com Date: 2007-03-01 20:04:37 -0800 (Thu, 01 Mar 2007) Log Message: ----------- Work around 5020256 Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-01 19:19:11 UTC (rev 23121) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-02 04:04:37 UTC (rev 23122) @@ -303,7 +303,7 @@ static void job_force_sampletool(job_t j); static void job_reparent_hack(job_t j, const char *where); static void job_callback(void *obj, struct kevent *kev); -static void job_callback_proc(job_t j, int fflags); +static void job_callback_proc(job_t j, int flags, int fflags); static void job_callback_timer(job_t j, void *ident); static void job_callback_read(job_t j, int ident); static launch_data_t job_export2(job_t j, bool subjobs); @@ -1661,7 +1661,16 @@ } if (!job_assumes(j, wait4(j->p, &status, 0, &ru) != -1)) { - return; + /* + * wait4() then kill() is still racy. + * Then again, we never should have got here in the first place... + */ + if (kill(j->p, 0) == 0) { + job_log(j, LOG_DEBUG, "Working around 5020256"); + } + + status = 0; + memset(&ru, 0, sizeof(ru)); } if (j->exit_timeout) { @@ -1817,7 +1826,7 @@ } void -job_callback_proc(job_t j, int fflags) +job_callback_proc(job_t j, int flags, int fflags) { if (fflags & NOTE_EXEC) { job_log(j, LOG_DEBUG, "Called execve()"); @@ -1828,6 +1837,8 @@ } if (fflags & NOTE_EXIT) { + job_assumes(j, (flags & EV_ONESHOT)); + job_assumes(j, (flags & EV_EOF)); job_reap(j); job_dispatch(j, false); @@ -1904,7 +1915,7 @@ switch (kev->filter) { case EVFILT_PROC: - return job_callback_proc(j, kev->fflags); + return job_callback_proc(j, kev->flags, kev->fflags); case EVFILT_TIMER: return job_callback_timer(j, (void *)kev->ident); case EVFILT_VNODE: -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070301/0351c7ab/attachment.html From source_changes at macosforge.org Fri Mar 2 15:46:29 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23123] tags/launchd-200/ Message-ID: <20070302234629.480494C5C28@cvs.opensource.apple.com> Revision: 23123 http://trac.macosforge.org/projects/launchd/changeset/23123 Author: zarzycki@apple.com Date: 2007-03-02 15:46:29 -0800 (Fri, 02 Mar 2007) Log Message: ----------- "Tagging launchd-200 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- tags/launchd-200/ Copied: tags/launchd-200 (from rev 23122, trunk) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070302/7b0f88ff/attachment.html From source_changes at macosforge.org Sat Mar 3 15:09:50 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23124] trunk/launchd/src Message-ID: <20070303230950.109604C7F7C@cvs.opensource.apple.com> Revision: 23124 http://trac.macosforge.org/projects/launchd/changeset/23124 Author: zarzycki@apple.com Date: 2007-03-03 15:09:49 -0800 (Sat, 03 Mar 2007) Log Message: ----------- Transform jobmgr_fork() to runtime_fork(). Someday, I'll create runtime_spawn() that wraps and extends posix_spawn(). Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/launchd_runtime.c trunk/launchd/src/launchd_runtime.h Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-02 23:46:29 UTC (rev 23123) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-03 23:09:49 UTC (rev 23124) @@ -221,7 +221,6 @@ static job_t job_mig_intran2(jobmgr_t jm, mach_port_t p); static void job_export_all2(jobmgr_t jm, launch_data_t where); static void jobmgr_callback(void *obj, struct kevent *kev); -static pid_t jobmgr_fork(jobmgr_t jm); static void jobmgr_setup_env_from_other_jobs(jobmgr_t jm); static struct machservice *jobmgr_lookup_service(jobmgr_t jm, const char *name, bool check_parent, pid_t target_pid); static void jobmgr_logv(jobmgr_t jm, int pri, int err, const char *msg, va_list ap) __attribute__((format(printf, 4, 0))); @@ -1986,7 +1985,7 @@ time(&j->start_time); - switch (c = jobmgr_fork(j->mgr)) { + switch (c = runtime_fork(j->mgr->jm_port)) { case -1: job_log_error(j, LOG_ERR, "fork() failed, will try again in one second"); job_assumes(j, close(execspair[0]) == 0); @@ -3088,29 +3087,6 @@ return false; } -pid_t -jobmgr_fork(jobmgr_t jm) -{ - mach_port_t p = jm->jm_port; - pid_t r = -1; - int saved_errno; - - jobmgr_assumes(jm, launchd_mport_make_send(p) == KERN_SUCCESS); - jobmgr_assumes(jm, launchd_set_bport(p) == KERN_SUCCESS); - jobmgr_assumes(jm, launchd_mport_deallocate(p) == KERN_SUCCESS); - - r = fork(); - - saved_errno = errno; - - if (r != 0) { - jobmgr_assumes(jm, launchd_set_bport(MACH_PORT_NULL) == KERN_SUCCESS); - } - - errno = saved_errno; - return r; -} - void machservice_watch(job_t j, struct machservice *ms) { Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2007-03-02 23:46:29 UTC (rev 23123) +++ trunk/launchd/src/launchd_runtime.c 2007-03-03 23:09:49 UTC (rev 23124) @@ -553,6 +553,30 @@ return errno; } +pid_t +runtime_fork(mach_port_t bsport) +{ + pid_t r = -1; + int saved_errno; + + launchd_assumes(launchd_mport_make_send(bsport) == KERN_SUCCESS); + launchd_assumes(launchd_set_bport(bsport) == KERN_SUCCESS); + launchd_assumes(launchd_mport_deallocate(bsport) == KERN_SUCCESS); + + r = fork(); + + saved_errno = errno; + + if (r != 0) { + launchd_assumes(launchd_set_bport(MACH_PORT_NULL) == KERN_SUCCESS); + } + + errno = saved_errno; + + return r; +} + + void runtime_set_timeout(timeout_callback to_cb, mach_msg_timeout_t to) { Modified: trunk/launchd/src/launchd_runtime.h =================================================================== --- trunk/launchd/src/launchd_runtime.h 2007-03-02 23:46:29 UTC (rev 23123) +++ trunk/launchd/src/launchd_runtime.h 2007-03-03 23:09:49 UTC (rev 23124) @@ -71,6 +71,8 @@ int kevent_mod(uintptr_t ident, short filter, u_short flags, u_int fflags, intptr_t data, void *udata); +pid_t runtime_fork(mach_port_t bsport); + void runtime_openlog(const char *ident, int logopt, int facility); void runtime_closelog(void); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070303/5630b0c2/attachment.html From source_changes at macosforge.org Sat Mar 3 15:42:02 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23125] trunk/launchd/src/launchd_core_logic.c Message-ID: <20070303234202.BE8064C7F9B@cvs.opensource.apple.com> Revision: 23125 http://trac.macosforge.org/projects/launchd/changeset/23125 Author: zarzycki@apple.com Date: 2007-03-03 15:42:02 -0800 (Sat, 03 Mar 2007) Log Message: ----------- launchd should have a per-user bootstrap context ("background session") Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-03 23:09:49 UTC (rev 23124) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-03 23:42:02 UTC (rev 23125) @@ -272,7 +272,7 @@ mode_t mask; unsigned int globargv:1, wait4debugger:1, unload_at_exit:1, stall_before_exec:1, only_once:1, currently_ignored:1, forced_peers_to_demand_mode:1, setnice:1, hopefully_exits_last:1, removal_pending:1, - wait4pipe_eof:1, sent_sigkill:1, debug_before_kill:1; + wait4pipe_eof:1, sent_sigkill:1, debug_before_kill:1, weird_per_user_bootstrap:1; char label[0]; }; @@ -1649,6 +1649,17 @@ job_log(j, LOG_DEBUG, "Reaping"); + if (j->weird_per_user_bootstrap) { + mach_msg_size_t mxmsgsz = sizeof(union __RequestUnion__job_mig_protocol_vproc_subsystem); + + if (job_mig_protocol_vproc_subsystem.maxsize > mxmsgsz) { + mxmsgsz = job_mig_protocol_vproc_subsystem.maxsize; + } + + job_assumes(j, runtime_add_mport(j->mgr->jm_port, protocol_vproc_server, mxmsgsz) == KERN_SUCCESS); + j->weird_per_user_bootstrap = false; + } + if (j->log_redirect_fd && (!j->wait4pipe_eof || j->mgr->shutting_down)) { job_assumes(j, close(j->log_redirect_fd) != -1); j->log_redirect_fd = 0; @@ -1985,7 +1996,7 @@ time(&j->start_time); - switch (c = runtime_fork(j->mgr->jm_port)) { + switch (c = runtime_fork(j->weird_per_user_bootstrap ? j->j_port : j->mgr->jm_port)) { case -1: job_log_error(j, LOG_ERR, "fork() failed, will try again in one second"); job_assumes(j, close(execspair[0]) == 0); @@ -3465,10 +3476,6 @@ mxmsgsz = job_mig_protocol_vproc_subsystem.maxsize; } - if (!jobmgr_assumes(jmr, runtime_add_mport(jmr->jm_port, protocol_vproc_server, mxmsgsz) == KERN_SUCCESS)) { - goto out_bad; - } - jobmgr_assumes(jmr, (jmr->anonj = jobmgr_get_anonymous(jmr)) != NULL); bootstrapper = job_new(jmr, "com.apple.launchctld", NULL, bootstrap_tool); @@ -3477,6 +3484,16 @@ jobmgr_assumes(jmr, kevent_mod(SIGTERM, EVFILT_SIGNAL, EV_ADD, 0, 0, jmr) != -1); } + if (!jm && getuid() != 0) { + /* per-user bootstrap context is messy */ + bootstrapper->weird_per_user_bootstrap = true; + jobmgr_assumes(jmr, job_setup_machport(bootstrapper)); + } else { + if (!jobmgr_assumes(jmr, runtime_add_mport(jmr->jm_port, protocol_vproc_server, mxmsgsz) == KERN_SUCCESS)) { + goto out_bad; + } + } + jobmgr_log(jmr, LOG_DEBUG, "Created job manager%s%s", jm ? " with parent: " : ".", jm ? jm->name : ""); if (!jm && jobmgr_assumes(jmr, bootstrapper != NULL)) { -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070303/83c0dc73/attachment.html From source_changes at macosforge.org Sat Mar 3 16:13:12 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23126] trunk/launchd/src/liblaunch.c Message-ID: <20070304001312.D32784C7FBE@cvs.opensource.apple.com> Revision: 23126 http://trac.macosforge.org/projects/launchd/changeset/23126 Author: zarzycki@apple.com Date: 2007-03-03 16:13:12 -0800 (Sat, 03 Mar 2007) Log Message: ----------- Stuck at black screen with text about nfs_connect after logout (after disconnecting from VPN) Modified Paths: -------------- trunk/launchd/src/liblaunch.c Modified: trunk/launchd/src/liblaunch.c =================================================================== --- trunk/launchd/src/liblaunch.c 2007-03-03 23:42:02 UTC (rev 23125) +++ trunk/launchd/src/liblaunch.c 2007-03-04 00:13:12 UTC (rev 23126) @@ -1189,7 +1189,8 @@ void load_launchd_jobs_at_loginwindow_prompt(int flags, ...) { - char *largv[] = { "/bin/launchctl", "load", "-S", "LoginWindow", "-D", "all", "/etc/mach_init_per_login_session.d", NULL }; + char *largv[] = { "/bin/launchctl", "load", "-S", "LoginWindow", + "-D", "system", "-D", "local", "/etc/mach_init_per_login_session.d", NULL }; int wstatus; pid_t p; -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070303/38be1ee9/attachment.html From source_changes at macosforge.org Sat Mar 3 17:28:51 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23127] trunk/launchd/src Message-ID: <20070304012851.86DEF4C80AD@cvs.opensource.apple.com> Revision: 23127 http://trac.macosforge.org/projects/launchd/changeset/23127 Author: zarzycki@apple.com Date: 2007-03-03 17:28:51 -0800 (Sat, 03 Mar 2007) Log Message: ----------- private API (on behalf of seatbelt) request: do bootstrap lookup of X in user Y's context Modified Paths: -------------- trunk/launchd/src/libbootstrap.c trunk/launchd/src/libbootstrap_private.h Modified: trunk/launchd/src/libbootstrap.c =================================================================== --- trunk/launchd/src/libbootstrap.c 2007-03-04 00:13:12 UTC (rev 23126) +++ trunk/launchd/src/libbootstrap.c 2007-03-04 01:28:51 UTC (rev 23127) @@ -27,6 +27,10 @@ #include #include +#include +#include +#include +#include #include "protocol_vproc.h" @@ -100,6 +104,28 @@ } kern_return_t +bootstrap_look_up_per_user(mach_port_t bp, name_t service_name, uid_t target_user, mach_port_t *sp) +{ + struct stat sb; + kern_return_t kr; + mach_port_t puc; + + if (!pthread_main_np() && (stat("/AppleInternal", &sb) != -1)) { + _vproc_log(LOG_WARNING, "Please review the comments in 4890134."); + } + + if ((kr = vproc_mig_lookup_per_user_context(bp, target_user, &puc)) != 0) { + return kr; + } + + kr = vproc_mig_look_up2(puc, service_name, sp, 0, 0); + mach_port_deallocate(mach_task_self(), puc); + + return kr; +} + + +kern_return_t bootstrap_look_up(mach_port_t bp, name_t service_name, mach_port_t *sp) { return bootstrap_look_up2(bp, service_name, sp, 0, 0); Modified: trunk/launchd/src/libbootstrap_private.h =================================================================== --- trunk/launchd/src/libbootstrap_private.h 2007-03-04 00:13:12 UTC (rev 23126) +++ trunk/launchd/src/libbootstrap_private.h 2007-03-04 01:28:51 UTC (rev 23127) @@ -33,6 +33,8 @@ kern_return_t bootstrap_look_up2(mach_port_t bp, name_t service_name, mach_port_t *sp, pid_t target_pid, uint64_t flags); +kern_return_t bootstrap_look_up_per_user(mach_port_t bp, name_t service_name, uid_t target_user, mach_port_t *sp); + #pragma GCC visibility pop __END_DECLS -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070303/95d3d5af/attachment.html From source_changes at macosforge.org Sat Mar 3 19:51:12 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23128] trunk/launchd/src/libbootstrap.c Message-ID: <20070304035112.152024C812F@cvs.opensource.apple.com> Revision: 23128 http://trac.macosforge.org/projects/launchd/changeset/23128 Author: zarzycki@apple.com Date: 2007-03-03 19:51:11 -0800 (Sat, 03 Mar 2007) Log Message: ----------- Fix a logic typo. Modified Paths: -------------- trunk/launchd/src/libbootstrap.c Modified: trunk/launchd/src/libbootstrap.c =================================================================== --- trunk/launchd/src/libbootstrap.c 2007-03-04 01:28:51 UTC (rev 23127) +++ trunk/launchd/src/libbootstrap.c 2007-03-04 03:51:11 UTC (rev 23128) @@ -110,7 +110,7 @@ kern_return_t kr; mach_port_t puc; - if (!pthread_main_np() && (stat("/AppleInternal", &sb) != -1)) { + if (pthread_main_np() && (stat("/AppleInternal", &sb) != -1)) { _vproc_log(LOG_WARNING, "Please review the comments in 4890134."); } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070303/557c939d/attachment.html From source_changes at macosforge.org Sun Mar 4 09:34:05 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23129] trunk/launchd/src/launchd_core_logic.c Message-ID: <20070304173405.86FE84C842F@cvs.opensource.apple.com> Revision: 23129 http://trac.macosforge.org/projects/launchd/changeset/23129 Author: zarzycki@apple.com Date: 2007-03-04 09:34:05 -0800 (Sun, 04 Mar 2007) Log Message: ----------- Bug: launchd_core_logic.c:4524 (23087):3: jmi != NULL Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-04 03:51:11 UTC (rev 23128) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-04 17:34:05 UTC (rev 23129) @@ -4568,6 +4568,10 @@ return; } + if (strcasecmp(j->mgr->name, where) == 0) { + return; + } + SLIST_FOREACH(jmi, &root_jobmgr->submgrs, sle) { if (strcasecmp(jmi->name, where) == 0) { break; -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070304/ac5d1aab/attachment.html From source_changes at macosforge.org Sun Mar 4 15:38:22 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23130] trunk/launchd/src Message-ID: <20070304233822.29CE94C88D2@cvs.opensource.apple.com> Revision: 23130 http://trac.macosforge.org/projects/launchd/changeset/23130 Author: zarzycki@apple.com Date: 2007-03-04 15:38:21 -0800 (Sun, 04 Mar 2007) Log Message: ----------- launchd should be able to bootstrap itself Modified Paths: -------------- trunk/launchd/src/launchctl.c trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/liblaunch.c trunk/launchd/src/libvproc.c trunk/launchd/src/libvproc_internal.h trunk/launchd/src/protocol_job.defs Modified: trunk/launchd/src/launchctl.c =================================================================== --- trunk/launchd/src/launchctl.c 2007-03-04 17:34:05 UTC (rev 23129) +++ trunk/launchd/src/launchctl.c 2007-03-04 23:38:21 UTC (rev 23130) @@ -250,8 +250,9 @@ } } - if (i > 0) + if (i > 0) { demux_cmd(i, argv2); + } free(l); } @@ -1243,7 +1244,7 @@ } static void -very_pid2_specific_bootstrap(bool sflag) +system_specific_bootstrap(bool sflag) { int hnmib[] = { CTL_KERN, KERN_HOSTNAME }; struct group *tfp_gr; @@ -1340,7 +1341,7 @@ _vproc_set_global_on_demand(true); - char *load_launchd_items[] = { "load", "-D", "all", "/etc/mach_init.d", NULL, NULL }; + char *load_launchd_items[] = { "load", "-D", "all", "/etc/mach_init.d", NULL }; if (is_safeboot()) { load_launchd_items[2] = "system"; @@ -1387,18 +1388,61 @@ } int -bootstrap_cmd(int argc, char *const argv[] __attribute__((unused))) +bootstrap_cmd(int argc, char *const argv[]) { - if (getuid() == 0) { - very_pid2_specific_bootstrap(argc == 2); + char *session_type = NULL; + bool sflag = false; + int ch; + + while ((ch = getopt(argc, argv, "sS:")) != -1) { + switch (ch) { + case 's': + sflag = true; + break; + case 'S': + session_type = optarg; + break; + case '?': + default: + break; + } + } + + optind = 1; + optreset = 1; + + if (!session_type) { + fprintf(stderr, "usage: %s bootstrap [-s] -S \n", getprogname()); + return 1; + } + + if (strcasecmp(session_type, "System") == 0) { + system_specific_bootstrap(sflag); } else { - char *load_launchd_items[] = { "load", "-D", "all", "-S", "Background", NULL }; + char *load_launchd_items[] = { "load", "-S", session_type, "-D", "all", NULL, NULL, NULL, NULL }; + int the_argc = 5; if (is_safeboot()) { - load_launchd_items[2] = "system"; + load_launchd_items[4] = "system"; } - assumes(load_and_unload_cmd(5, load_launchd_items) == 0); + if (strcasecmp(session_type, "Background") == 0 || strcasecmp(session_type, "LoginWindow") == 0) { + load_launchd_items[4] = "system"; + if (!is_safeboot()) { + load_launchd_items[5] = "-D"; + load_launchd_items[6] = "local"; + the_argc += 2; + } + if (strcasecmp(session_type, "LoginWindow") == 0) { + load_launchd_items[the_argc] = "/etc/mach_init_per_login_session.d"; + the_argc += 1; + } + } else if (strcasecmp(session_type, "Aqua") == 0) { + load_launchd_items[5] = "/etc/mach_init_per_user.d"; + the_argc += 1; + } + + assumes(load_and_unload_cmd(the_argc, load_launchd_items) == 0); } return 0; @@ -1416,8 +1460,9 @@ memset(&lus, 0, sizeof(lus)); - if (!strcmp(argv[0], "load")) + if (strcmp(argv[0], "load") == 0) { lus.load = true; + } while ((ch = getopt(argc, argv, "wFS:D:")) != -1) { switch (ch) { @@ -1431,20 +1476,20 @@ lus.session_type = optarg; break; case 'D': - if (strcasecmp(optarg, "all") == 0) { - es |= NSAllDomainsMask; - } else if (strcasecmp(optarg, "user") == 0) { - es |= NSUserDomainMask; - } else if (strcasecmp(optarg, "local") == 0) { - es |= NSLocalDomainMask; - } else if (strcasecmp(optarg, "network") == 0) { - es |= NSNetworkDomainMask; - } else if (strcasecmp(optarg, "system") == 0) { - es |= NSSystemDomainMask; - } else { + if (strcasecmp(optarg, "all") == 0) { + es |= NSAllDomainsMask; + } else if (strcasecmp(optarg, "user") == 0) { + es |= NSUserDomainMask; + } else if (strcasecmp(optarg, "local") == 0) { + es |= NSLocalDomainMask; + } else if (strcasecmp(optarg, "network") == 0) { + es |= NSNetworkDomainMask; + } else if (strcasecmp(optarg, "system") == 0) { + es |= NSSystemDomainMask; + } else { badopts = true; - } - break; + } + break; case '?': default: badopts = true; @@ -1454,11 +1499,13 @@ argc -= optind; argv += optind; - if (lus.session_type == NULL) + if (lus.session_type == NULL) { es &= ~NSUserDomainMask; + } - if (argc == 0 && es == 0) + if (argc == 0 && es == 0) { badopts = true; + } if (badopts) { fprintf(stderr, "usage: %s load [-wF] [-D ] paths...\n", getprogname()); @@ -1497,8 +1544,9 @@ } } - for (i = 0; i < (size_t)argc; i++) + for (i = 0; i < (size_t)argc; i++) { readpath(argv[i], &lus); + } if (launch_data_array_get_count(lus.pass0) == 0 && launch_data_array_get_count(lus.pass1) == 0 && Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-04 17:34:05 UTC (rev 23129) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-04 23:38:21 UTC (rev 23130) @@ -211,7 +211,7 @@ #define jobmgr_assumes(jm, e) \ (__builtin_expect(!(e), 0) ? jobmgr_log_bug(jm, __rcs_file_version__, __FILE__, __LINE__, #e), false : true) -static jobmgr_t jobmgr_new(jobmgr_t jm, mach_port_t requestorport, mach_port_t transfer_port, bool sflag); +static jobmgr_t jobmgr_new(jobmgr_t jm, mach_port_t requestorport, mach_port_t transfer_port, bool sflag, const char *name); static jobmgr_t jobmgr_parent(jobmgr_t jm); static jobmgr_t jobmgr_do_garbage_collection(jobmgr_t jm); static bool jobmgr_is_idle(jobmgr_t jm); @@ -272,7 +272,7 @@ mode_t mask; unsigned int globargv:1, wait4debugger:1, unload_at_exit:1, stall_before_exec:1, only_once:1, currently_ignored:1, forced_peers_to_demand_mode:1, setnice:1, hopefully_exits_last:1, removal_pending:1, - wait4pipe_eof:1, sent_sigkill:1, debug_before_kill:1, weird_per_user_bootstrap:1; + wait4pipe_eof:1, sent_sigkill:1, debug_before_kill:1, weird_bootstrap:1; char label[0]; }; @@ -1649,7 +1649,7 @@ job_log(j, LOG_DEBUG, "Reaping"); - if (j->weird_per_user_bootstrap) { + if (j->weird_bootstrap) { mach_msg_size_t mxmsgsz = sizeof(union __RequestUnion__job_mig_protocol_vproc_subsystem); if (job_mig_protocol_vproc_subsystem.maxsize > mxmsgsz) { @@ -1657,7 +1657,7 @@ } job_assumes(j, runtime_add_mport(j->mgr->jm_port, protocol_vproc_server, mxmsgsz) == KERN_SUCCESS); - j->weird_per_user_bootstrap = false; + j->weird_bootstrap = false; } if (j->log_redirect_fd && (!j->wait4pipe_eof || j->mgr->shutting_down)) { @@ -1996,7 +1996,7 @@ time(&j->start_time); - switch (c = runtime_fork(j->weird_per_user_bootstrap ? j->j_port : j->mgr->jm_port)) { + switch (c = runtime_fork(j->weird_bootstrap ? j->j_port : j->mgr->jm_port)) { case -1: job_log_error(j, LOG_ERR, "fork() failed, will try again in one second"); job_assumes(j, close(execspair[0]) == 0); @@ -3397,15 +3397,15 @@ } jobmgr_t -jobmgr_new(jobmgr_t jm, mach_port_t requestorport, mach_port_t transfer_port, bool sflag) +jobmgr_new(jobmgr_t jm, mach_port_t requestorport, mach_port_t transfer_port, bool sflag, const char *name) { - const char *bootstrap_tool[] = { "/bin/launchctl", "bootstrap", NULL, NULL }; + const char *bootstrap_tool[] = { "/bin/launchctl", "bootstrap", "-S", name, NULL, NULL }; mach_msg_size_t mxmsgsz; job_t bootstrapper = NULL; jobmgr_t jmr; if (sflag) { - bootstrap_tool[2] = "-s"; + bootstrap_tool[4] = "-s"; } launchd_assert(offsetof(struct jobmgr_s, kqjobmgr_callback) == 0); @@ -3415,7 +3415,7 @@ return NULL; } - jmr = calloc(1, sizeof(struct jobmgr_s) + 30); + jmr = calloc(1, sizeof(struct jobmgr_s) + (name ? (strlen(name) + 1) : 128)); if (jmr == NULL) { return NULL; @@ -3423,7 +3423,7 @@ TAILQ_INIT(&jmr->jobs); jmr->kqjobmgr_callback = jobmgr_callback; - strcpy(jmr->name, "In-utero"); + strcpy(jmr->name, name ? name : "Under construction"); jmr->req_port = requestorport; @@ -3468,7 +3468,9 @@ goto out_bad; } - sprintf(jmr->name, "%u", MACH_PORT_INDEX(jmr->jm_port)); + if (!name) { + sprintf(jmr->name, "%u", MACH_PORT_INDEX(jmr->jm_port)); + } /* Sigh... at the moment, MIG has maxsize == sizeof(reply union) */ mxmsgsz = sizeof(union __RequestUnion__job_mig_protocol_vproc_subsystem); @@ -3478,17 +3480,20 @@ jobmgr_assumes(jmr, (jmr->anonj = jobmgr_get_anonymous(jmr)) != NULL); - bootstrapper = job_new(jmr, "com.apple.launchctld", NULL, bootstrap_tool); - if (!jm) { jobmgr_assumes(jmr, kevent_mod(SIGTERM, EVFILT_SIGNAL, EV_ADD, 0, 0, jmr) != -1); } - if (!jm && getuid() != 0) { - /* per-user bootstrap context is messy */ - bootstrapper->weird_per_user_bootstrap = true; - jobmgr_assumes(jmr, job_setup_machport(bootstrapper)); - } else { + if (name) { + /* no name implies: bootstrap_subset() where creating a "bootstrapper" makes no sense */ + bootstrapper = job_new(jmr, "com.apple.launchctld", NULL, bootstrap_tool); + if (jm || getuid()) { + bootstrapper->weird_bootstrap = true; + jobmgr_assumes(jmr, job_setup_machport(bootstrapper)); + } + } + + if (!bootstrapper || !bootstrapper->weird_bootstrap) { if (!jobmgr_assumes(jmr, runtime_add_mport(jmr->jm_port, protocol_vproc_server, mxmsgsz) == KERN_SUCCESS)) { goto out_bad; } @@ -3496,7 +3501,7 @@ jobmgr_log(jmr, LOG_DEBUG, "Created job manager%s%s", jm ? " with parent: " : ".", jm ? jm->name : ""); - if (!jm && jobmgr_assumes(jmr, bootstrapper != NULL)) { + if (bootstrapper) { jobmgr_assumes(jmr, job_dispatch(bootstrapper, true) != NULL); } @@ -4586,7 +4591,7 @@ } kern_return_t -job_mig_move_subset_to_user(job_t j, mach_port_t target_subset) +job_mig_move_subset(job_t j, mach_port_t target_subset, name_t session_type) { mach_msg_type_number_t l2l_i, l2l_name_cnt = 0, l2l_port_cnt = 0; name_array_t l2l_names = NULL; @@ -4596,9 +4601,17 @@ jobmgr_t jmr; if (getuid() == 0) { + const char *bootstrap_tool[] = { "/bin/launchctl", "bootstrap", "-S", session_type, NULL }; + job_t bootstrapper; + j = job_mig_intran2(root_jobmgr, target_subset); + strcpy(j->mgr->name, session_type); job_assumes(j, launchd_mport_deallocate(target_subset) == KERN_SUCCESS); - strcpy(j->mgr->name, "Aqua"); + + bootstrapper = job_new(j->mgr, "com.apple.launchctld", NULL, bootstrap_tool); + if (job_assumes(j, bootstrapper != NULL)) { + job_dispatch(bootstrapper, true); + } return 0; } @@ -4613,13 +4626,11 @@ launchd_assert(l2l_name_cnt == l2l_port_cnt); - if ((jmr = jobmgr_new(j->mgr, reqport, rcvright, false)) == NULL) { + if ((jmr = jobmgr_new(j->mgr, reqport, rcvright, false, session_type)) == NULL) { kr = BOOTSTRAP_NO_MEMORY; goto out; } - strcpy(jmr->name, "Aqua"); - for (l2l_i = 0; l2l_i < l2l_name_cnt; l2l_i++) { struct machservice *ms; @@ -4742,7 +4753,7 @@ return BOOTSTRAP_NO_MEMORY; } - if ((jmr = jobmgr_new(j->mgr, requestorport, MACH_PORT_NULL, false)) == NULL) { + if ((jmr = jobmgr_new(j->mgr, requestorport, MACH_PORT_NULL, false, NULL)) == NULL) { if (requestorport == MACH_PORT_NULL) { return BOOTSTRAP_NOT_PRIVILEGED; } @@ -4917,5 +4928,5 @@ void jobmgr_init(bool sflag) { - launchd_assert((root_jobmgr = jobmgr_new(NULL, MACH_PORT_NULL, MACH_PORT_NULL, sflag)) != NULL); + launchd_assert((root_jobmgr = jobmgr_new(NULL, MACH_PORT_NULL, MACH_PORT_NULL, sflag, getpid() == 1 ? "System" : "Background")) != NULL); } Modified: trunk/launchd/src/liblaunch.c =================================================================== --- trunk/launchd/src/liblaunch.c 2007-03-04 17:34:05 UTC (rev 23129) +++ trunk/launchd/src/liblaunch.c 2007-03-04 23:38:21 UTC (rev 23130) @@ -1160,101 +1160,28 @@ return r; } -static pid_t -fexecv_as_user(const char *login, uid_t u, gid_t g, char *const argv[]) -{ - int i, dtsz; - pid_t p; - - if ((p = fork()) != 0) - return p; - - chdir("/"); - - seteuid(0); - setegid(0); - setgid(g); - initgroups(login, g); - setuid(u); - - dtsz = getdtablesize(); - - for (i = STDERR_FILENO + 1; i < dtsz; i++) - close(i); - - execv(argv[0], argv); - _exit(EXIT_FAILURE); -} - void -load_launchd_jobs_at_loginwindow_prompt(int flags, ...) +load_launchd_jobs_at_loginwindow_prompt(int flags __attribute__((unused)), ...) { - char *largv[] = { "/bin/launchctl", "load", "-S", "LoginWindow", - "-D", "system", "-D", "local", "/etc/mach_init_per_login_session.d", NULL }; - int wstatus; - pid_t p; - - if (flags & LOAD_ONLY_SAFEMODE_LAUNCHAGENTS) { - largv[5] = "system"; - } - - if (__vproc_tag_loginwindow_context()) { - return; - } - - if ((p = fexecv_as_user("root", 0, 0, largv)) == -1) { - return; - } - - if (waitpid(p, &wstatus, 0) != p) { - return; - } + _vproc_move_subset_to_user("LoginWindow"); } pid_t -create_and_switch_to_per_session_launchd(const char *login, int flags, ...) +create_and_switch_to_per_session_launchd(const char *login __attribute__((unused)), int flags __attribute__((unused)), ...) { - char *largv[] = { "/bin/launchctl", "load", "-S", "Aqua", "-D", "all", "/etc/mach_init_per_user.d", NULL }; mach_port_t bezel_ui_server; - struct passwd *pwe; struct stat sb; - int wstatus; - pid_t p; - uid_t u; - gid_t g; - if (_vproc_move_subset_to_user()) { + if (_vproc_move_subset_to_user("Aqua")) { return -1; } - if ((pwe = getpwnam(login)) == NULL) - return -1; - - u = pwe->pw_uid; - g = pwe->pw_gid; - - if (flags & LOAD_ONLY_SAFEMODE_LAUNCHAGENTS) { - largv[5] = "system"; - } - - if ((p = fexecv_as_user(login, u, g, largv)) == -1) { - return -1; - } - - if (waitpid(p, &wstatus, 0) != p) { - return -1; - } - - if (!(WIFEXITED(wstatus) && WEXITSTATUS(wstatus) == 0)) { - return -1; - } - #define BEZEL_UI_PATH "/System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/BezelUI/BezelUIServer" #define BEZEL_UI_PLIST "/System/Library/LaunchAgents/com.apple.BezelUIServer.plist" #define BEZEL_UI_SERVICE "BezelUI" if (!(stat(BEZEL_UI_PLIST, &sb) == 0 && S_ISREG(sb.st_mode))) { - if (bootstrap_create_server(bootstrap_port, BEZEL_UI_PATH, u, true, &bezel_ui_server) == BOOTSTRAP_SUCCESS) { + if (bootstrap_create_server(bootstrap_port, BEZEL_UI_PATH, 0, true, &bezel_ui_server) == BOOTSTRAP_SUCCESS) { mach_port_t srv; if (bootstrap_create_service(bezel_ui_server, BEZEL_UI_SERVICE, &srv) == BOOTSTRAP_SUCCESS) { Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2007-03-04 17:34:05 UTC (rev 23129) +++ trunk/launchd/src/libvproc.c 2007-03-04 23:38:21 UTC (rev 23130) @@ -47,7 +47,7 @@ } vproc_err_t -_vproc_move_subset_to_user(void) +_vproc_move_subset_to_user(char *session_type) { kern_return_t kr = 1; mach_port_t puc = 0, which_port = bootstrap_port; @@ -56,7 +56,7 @@ which_port = puc; } - kr = vproc_mig_move_subset_to_user(which_port, bootstrap_port); + kr = vproc_mig_move_subset(which_port, bootstrap_port, session_type); if (puc) { mach_port_deallocate(mach_task_self(), puc); Modified: trunk/launchd/src/libvproc_internal.h =================================================================== --- trunk/launchd/src/libvproc_internal.h 2007-03-04 17:34:05 UTC (rev 23129) +++ trunk/launchd/src/libvproc_internal.h 2007-03-04 23:38:21 UTC (rev 23130) @@ -57,7 +57,7 @@ kern_return_t _vprocmgr_getsocket(name_t); -vproc_err_t _vproc_move_subset_to_user(void); +vproc_err_t _vproc_move_subset_to_user(char *session_type); void _vproc_logv(int pri, int err, const char *msg, va_list ap); Modified: trunk/launchd/src/protocol_job.defs =================================================================== --- trunk/launchd/src/protocol_job.defs 2007-03-04 17:34:05 UTC (rev 23129) +++ trunk/launchd/src/protocol_job.defs 2007-03-04 23:38:21 UTC (rev 23130) @@ -142,6 +142,7 @@ __wu : uid_t; out __u_cont : mach_port_t); -routine move_subset_to_user( +routine move_subset( __bs_port : job_t; - __target_port : mach_port_t); + __target_port : mach_port_t; + __sessiontype : name_t); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070304/b9186eeb/attachment.html From source_changes at macosforge.org Sun Mar 4 15:59:53 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23131] trunk/launchd/src Message-ID: <20070304235953.18A234C8912@cvs.opensource.apple.com> Revision: 23131 http://trac.macosforge.org/projects/launchd/changeset/23131 Author: zarzycki@apple.com Date: 2007-03-04 15:59:52 -0800 (Sun, 04 Mar 2007) Log Message: ----------- Per session launchd deployment for CLI / PAM sessions Modified Paths: -------------- trunk/launchd/src/liblaunch.c trunk/launchd/src/libvproc.c trunk/launchd/src/libvproc_internal.h trunk/launchd/src/libvproc_private.h Modified: trunk/launchd/src/liblaunch.c =================================================================== --- trunk/launchd/src/liblaunch.c 2007-03-04 23:38:21 UTC (rev 23130) +++ trunk/launchd/src/liblaunch.c 2007-03-04 23:59:52 UTC (rev 23131) @@ -40,6 +40,7 @@ #include "libbootstrap_public.h" #include "libvproc_public.h" +#include "libvproc_private.h" #include "libvproc_internal.h" /* __OSBogusByteSwap__() must not really exist in the symbol namespace @@ -1163,7 +1164,7 @@ void load_launchd_jobs_at_loginwindow_prompt(int flags __attribute__((unused)), ...) { - _vproc_move_subset_to_user("LoginWindow"); + _vprocmgr_move_subset_to_user(geteuid() ? geteuid() : getuid(), "LoginWindow"); } pid_t @@ -1171,8 +1172,9 @@ { mach_port_t bezel_ui_server; struct stat sb; + uid_t target_user = geteuid() ? geteuid() : getuid(); - if (_vproc_move_subset_to_user("Aqua")) { + if (_vprocmgr_move_subset_to_user(target_user, "Aqua")) { return -1; } @@ -1181,7 +1183,7 @@ #define BEZEL_UI_SERVICE "BezelUI" if (!(stat(BEZEL_UI_PLIST, &sb) == 0 && S_ISREG(sb.st_mode))) { - if (bootstrap_create_server(bootstrap_port, BEZEL_UI_PATH, 0, true, &bezel_ui_server) == BOOTSTRAP_SUCCESS) { + if (bootstrap_create_server(bootstrap_port, BEZEL_UI_PATH, target_user, true, &bezel_ui_server) == BOOTSTRAP_SUCCESS) { mach_port_t srv; if (bootstrap_create_service(bezel_ui_server, BEZEL_UI_SERVICE, &srv) == BOOTSTRAP_SUCCESS) { Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2007-03-04 23:38:21 UTC (rev 23130) +++ trunk/launchd/src/libvproc.c 2007-03-04 23:59:52 UTC (rev 23131) @@ -47,12 +47,12 @@ } vproc_err_t -_vproc_move_subset_to_user(char *session_type) +_vprocmgr_move_subset_to_user(uid_t target_user, char *session_type) { kern_return_t kr = 1; mach_port_t puc = 0, which_port = bootstrap_port; - if ((getuid() || geteuid()) && vproc_mig_lookup_per_user_context(bootstrap_port, 0, &puc) == 0) { + if (target_user && vproc_mig_lookup_per_user_context(bootstrap_port, target_user, &puc) == 0) { which_port = puc; } @@ -62,7 +62,7 @@ mach_port_deallocate(mach_task_self(), puc); } - return kr == 0 ? NULL : (vproc_err_t)_vproc_move_subset_to_user; + return kr == 0 ? NULL : (vproc_err_t)_vprocmgr_move_subset_to_user; } Modified: trunk/launchd/src/libvproc_internal.h =================================================================== --- trunk/launchd/src/libvproc_internal.h 2007-03-04 23:38:21 UTC (rev 23130) +++ trunk/launchd/src/libvproc_internal.h 2007-03-04 23:59:52 UTC (rev 23131) @@ -57,8 +57,6 @@ kern_return_t _vprocmgr_getsocket(name_t); -vproc_err_t _vproc_move_subset_to_user(char *session_type); - void _vproc_logv(int pri, int err, const char *msg, va_list ap); kern_return_t Modified: trunk/launchd/src/libvproc_private.h =================================================================== --- trunk/launchd/src/libvproc_private.h 2007-03-04 23:38:21 UTC (rev 23130) +++ trunk/launchd/src/libvproc_private.h 2007-03-04 23:59:52 UTC (rev 23131) @@ -20,6 +20,7 @@ * @APPLE_APACHE_LICENSE_HEADER_END@ */ +#include #include #include #include @@ -34,6 +35,8 @@ void _vproc_log(int pri, const char *msg, ...) __attribute__((format(printf, 2, 3))); void _vproc_log_error(int pri, const char *msg, ...) __attribute__((format(printf, 2, 3))); +vproc_err_t _vprocmgr_move_subset_to_user(uid_t target_user, char *session_type); + #pragma GCC visibility pop __END_DECLS -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070304/1222fa7b/attachment.html From source_changes at macosforge.org Sun Mar 4 19:57:17 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23132] trunk/launchd/src Message-ID: <20070305035717.D58254C8A90@cvs.opensource.apple.com> Revision: 23132 http://trac.macosforge.org/projects/launchd/changeset/23132 Author: zarzycki@apple.com Date: 2007-03-04 19:57:17 -0800 (Sun, 04 Mar 2007) Log Message: ----------- Dead code deletion. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/libvproc.c trunk/launchd/src/libvproc_internal.h Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-04 23:59:52 UTC (rev 23131) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-05 03:57:17 UTC (rev 23132) @@ -4217,9 +4217,6 @@ } switch (key) { - case GSK_LOGINWINDOW_CONTEXT: - strcpy(j->mgr->name, "LoginWindow"); - break; case GLOBAL_ON_DEMAND: kr = job_set_global_on_demand(j, (bool)val) ? 0 : 1; break; Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2007-03-04 23:59:52 UTC (rev 23131) +++ trunk/launchd/src/libvproc.c 2007-03-05 03:57:17 UTC (rev 23132) @@ -209,16 +209,6 @@ return (vproc_err_t)_vproc_get_last_exit_status; } -vproc_err_t -__vproc_tag_loginwindow_context(void) -{ - if (vproc_mig_set_integer(bootstrap_port, GSK_LOGINWINDOW_CONTEXT, 1) == 0) { - return NULL; - } - - return (vproc_err_t)__vproc_tag_loginwindow_context; -} - void * reboot2(uint64_t flags) { Modified: trunk/launchd/src/libvproc_internal.h =================================================================== --- trunk/launchd/src/libvproc_internal.h 2007-03-04 23:59:52 UTC (rev 23131) +++ trunk/launchd/src/libvproc_internal.h 2007-03-05 03:57:17 UTC (rev 23132) @@ -31,7 +31,6 @@ typedef enum { LAST_EXIT_STATUS = 1, GLOBAL_ON_DEMAND, - GSK_LOGINWINDOW_CONTEXT, } get_set_int_key_t; #ifdef protocol_vproc_MSG_COUNT @@ -53,8 +52,6 @@ name_array_t *service_names, mach_msg_type_number_t *service_namesCnt, mach_port_array_t *ports, mach_msg_type_number_t *portCnt); -vproc_err_t __vproc_tag_loginwindow_context(void); - kern_return_t _vprocmgr_getsocket(name_t); void _vproc_logv(int pri, int err, const char *msg, va_list ap); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070304/10d58b3f/attachment.html From source_changes at macosforge.org Mon Mar 5 08:51:50 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23133] trunk/launchd/src Message-ID: <20070305165150.0A4C14C903C@cvs.opensource.apple.com> Revision: 23133 http://trac.macosforge.org/projects/launchd/changeset/23133 Author: zarzycki@apple.com Date: 2007-03-05 08:51:49 -0800 (Mon, 05 Mar 2007) Log Message: ----------- Libraries feeding into Libsystem should contain version numbers (liblaunch) Modified Paths: -------------- trunk/launchd/src/Makefile.am trunk/launchd/src/Makefile.in Modified: trunk/launchd/src/Makefile.am =================================================================== --- trunk/launchd/src/Makefile.am 2007-03-05 03:57:17 UTC (rev 23132) +++ trunk/launchd/src/Makefile.am 2007-03-05 16:51:49 UTC (rev 23133) @@ -11,15 +11,19 @@ noinst_LIBRARIES = liblaunch.a liblaunch_profile.a -liblaunch_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c +liblaunch_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c __version.c liblaunch_profile_a_CFLAGS = -pg $(AM_CFLAGS) -liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c +liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c __version.c $(srcdir)/libvproc.c:: protocol_vproc.h $(srcdir)/protocol_vprocUser.c:: protocol_vproc.h +__version.c: + /Developer/Makefiles/bin/version.pl launchd_libs > $@ + + install-data-hook: mkdir -p $(DESTDIR)/usr/local/lib/system cp liblaunch.a $(DESTDIR)/usr/local/lib/system Modified: trunk/launchd/src/Makefile.in =================================================================== --- trunk/launchd/src/Makefile.in 2007-03-05 03:57:17 UTC (rev 23132) +++ trunk/launchd/src/Makefile.in 2007-03-05 16:51:49 UTC (rev 23133) @@ -57,20 +57,22 @@ liblaunch_a_AR = $(AR) $(ARFLAGS) liblaunch_a_LIBADD = am__liblaunch_a_SOURCES_DIST = liblaunch.c libvproc.c libbootstrap.c \ - protocol_vprocUser.c + protocol_vprocUser.c __version.c @LIBS_ONLY_TRUE@am_liblaunch_a_OBJECTS = liblaunch.$(OBJEXT) \ @LIBS_ONLY_TRUE@ libvproc.$(OBJEXT) libbootstrap.$(OBJEXT) \ -@LIBS_ONLY_TRUE@ protocol_vprocUser.$(OBJEXT) +@LIBS_ONLY_TRUE@ protocol_vprocUser.$(OBJEXT) \ +@LIBS_ONLY_TRUE@ __version.$(OBJEXT) liblaunch_a_OBJECTS = $(am_liblaunch_a_OBJECTS) liblaunch_profile_a_AR = $(AR) $(ARFLAGS) liblaunch_profile_a_LIBADD = am__liblaunch_profile_a_SOURCES_DIST = liblaunch.c libvproc.c \ - libbootstrap.c protocol_vprocUser.c + libbootstrap.c protocol_vprocUser.c __version.c @LIBS_ONLY_TRUE@am_liblaunch_profile_a_OBJECTS = \ @LIBS_ONLY_TRUE@ liblaunch_profile_a-liblaunch.$(OBJEXT) \ @LIBS_ONLY_TRUE@ liblaunch_profile_a-libvproc.$(OBJEXT) \ @LIBS_ONLY_TRUE@ liblaunch_profile_a-libbootstrap.$(OBJEXT) \ -@LIBS_ONLY_TRUE@ liblaunch_profile_a-protocol_vprocUser.$(OBJEXT) +@LIBS_ONLY_TRUE@ liblaunch_profile_a-protocol_vprocUser.$(OBJEXT) \ +@LIBS_ONLY_TRUE@ liblaunch_profile_a-__version.$(OBJEXT) liblaunch_profile_a_OBJECTS = $(am_liblaunch_profile_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libexecdir)" \ "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(sbindir)" \ @@ -231,9 +233,9 @@ notifyServer.c notifyServer.h job_replyUser.c job_reply.h @LIBS_ONLY_TRUE@noinst_LIBRARIES = liblaunch.a liblaunch_profile.a -@LIBS_ONLY_TRUE@liblaunch_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c +@LIBS_ONLY_TRUE@liblaunch_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c __version.c @LIBS_ONLY_TRUE@liblaunch_profile_a_CFLAGS = -pg $(AM_CFLAGS) -@LIBS_ONLY_TRUE@liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c +@LIBS_ONLY_TRUE@liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c __version.c @LIBS_ONLY_FALSE@sbin_SCRIPTS = service @LIBS_ONLY_FALSE@sysconf_DATA = hostconfig rc.common rc.netboot @LIBS_ONLY_FALSE@launchctl_CFLAGS = $(AM_CFLAGS) -I/System/Library/Frameworks/System.framework/PrivateHeaders @@ -423,6 +425,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SystemStarter-IPC.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SystemStarter-StartupItems.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SystemStarter-SystemStarter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/__version.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchctl-launchctl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-job_replyUser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-launchd.Po@am__quote@ @@ -436,6 +439,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchproxy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbootstrap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-__version.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-libbootstrap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-liblaunch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-libvproc.Po@am__quote@ @@ -514,6 +518,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -c -o liblaunch_profile_a-protocol_vprocUser.obj `if test -f 'protocol_vprocUser.c'; then $(CYGPATH_W) 'protocol_vprocUser.c'; else $(CYGPATH_W) '$(srcdir)/protocol_vprocUser.c'; fi` +liblaunch_profile_a-__version.o: __version.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -MT liblaunch_profile_a-__version.o -MD -MP -MF "$(DEPDIR)/liblaunch_profile_a-__version.Tpo" -c -o liblaunch_profile_a-__version.o `test -f '__version.c' || echo '$(srcdir)/'`__version.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liblaunch_profile_a-__version.Tpo" "$(DEPDIR)/liblaunch_profile_a-__version.Po"; else rm -f "$(DEPDIR)/liblaunch_profile_a-__version.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='__version.c' object='liblaunch_profile_a-__version.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -c -o liblaunch_profile_a-__version.o `test -f '__version.c' || echo '$(srcdir)/'`__version.c + +liblaunch_profile_a-__version.obj: __version.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -MT liblaunch_profile_a-__version.obj -MD -MP -MF "$(DEPDIR)/liblaunch_profile_a-__version.Tpo" -c -o liblaunch_profile_a-__version.obj `if test -f '__version.c'; then $(CYGPATH_W) '__version.c'; else $(CYGPATH_W) '$(srcdir)/__version.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liblaunch_profile_a-__version.Tpo" "$(DEPDIR)/liblaunch_profile_a-__version.Po"; else rm -f "$(DEPDIR)/liblaunch_profile_a-__version.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='__version.c' object='liblaunch_profile_a-__version.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -c -o liblaunch_profile_a-__version.obj `if test -f '__version.c'; then $(CYGPATH_W) '__version.c'; else $(CYGPATH_W) '$(srcdir)/__version.c'; fi` + SystemStarter-StartupItems.o: StartupItems.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(SystemStarter_CFLAGS) $(CFLAGS) -MT SystemStarter-StartupItems.o -MD -MP -MF "$(DEPDIR)/SystemStarter-StartupItems.Tpo" -c -o SystemStarter-StartupItems.o `test -f 'StartupItems.c' || echo '$(srcdir)/'`StartupItems.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/SystemStarter-StartupItems.Tpo" "$(DEPDIR)/SystemStarter-StartupItems.Po"; else rm -f "$(DEPDIR)/SystemStarter-StartupItems.Tpo"; exit 1; fi @@ -1040,6 +1058,9 @@ @LIBS_ONLY_TRUE@$(srcdir)/protocol_vprocUser.c:: protocol_vproc.h +@LIBS_ONLY_TRUE@__version.c: +@LIBS_ONLY_TRUE@ /Developer/Makefiles/bin/version.pl launchd_libs > $@ + @LIBS_ONLY_TRUE@install-data-hook: @LIBS_ONLY_TRUE@ mkdir -p $(DESTDIR)/usr/local/lib/system @LIBS_ONLY_TRUE@ cp liblaunch.a $(DESTDIR)/usr/local/lib/system -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070305/9d14cafb/attachment.html From source_changes at macosforge.org Mon Mar 5 08:52:51 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23134] trunk/launchd/src Message-ID: <20070305165251.415ED4C9048@cvs.opensource.apple.com> Revision: 23134 http://trac.macosforge.org/projects/launchd/changeset/23134 Author: zarzycki@apple.com Date: 2007-03-05 08:52:51 -0800 (Mon, 05 Mar 2007) Log Message: ----------- Let's not leave junk around. Modified Paths: -------------- trunk/launchd/src/Makefile.am trunk/launchd/src/Makefile.in Modified: trunk/launchd/src/Makefile.am =================================================================== --- trunk/launchd/src/Makefile.am 2007-03-05 16:51:49 UTC (rev 23133) +++ trunk/launchd/src/Makefile.am 2007-03-05 16:52:51 UTC (rev 23134) @@ -2,7 +2,7 @@ CLEANFILES = protocol_vproc.h protocol_vprocServer.c protocol_vprocUser.c protocol_vprocServer.h \ launchd_internal.h launchd_internalServer.h launchd_internalServer.c launchd_internalUser.c \ - notifyServer.c notifyServer.h job_replyUser.c job_reply.h + notifyServer.c notifyServer.h job_replyUser.c job_reply.h __version.c protocol_vproc.h protocol_vprocServer.c protocol_vprocUser.c protocol_vprocServer.h: $(srcdir)/protocol_job.defs mig $(MIGFLAGS) -sheader protocol_vprocServer.h $(srcdir)/protocol_job.defs Modified: trunk/launchd/src/Makefile.in =================================================================== --- trunk/launchd/src/Makefile.in 2007-03-05 16:51:49 UTC (rev 23133) +++ trunk/launchd/src/Makefile.in 2007-03-05 16:52:51 UTC (rev 23134) @@ -230,7 +230,7 @@ AM_CFLAGS = -no-cpp-precomp -F/System/Library/PrivateFrameworks -Wall -Wextra -Waggregate-return -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror -D__MigTypeCheck=1 -fvisibility=hidden -Dmig_external=__private_extern__ CLEANFILES = protocol_vproc.h protocol_vprocServer.c protocol_vprocUser.c protocol_vprocServer.h \ launchd_internal.h launchd_internalServer.h launchd_internalServer.c launchd_internalUser.c \ - notifyServer.c notifyServer.h job_replyUser.c job_reply.h + notifyServer.c notifyServer.h job_replyUser.c job_reply.h __version.c @LIBS_ONLY_TRUE@noinst_LIBRARIES = liblaunch.a liblaunch_profile.a @LIBS_ONLY_TRUE@liblaunch_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c __version.c -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070305/ffc468ea/attachment.html From source_changes at macosforge.org Mon Mar 5 13:40:38 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23135] tags/launchd-201/ Message-ID: <20070305214038.C6C8A4C961B@cvs.opensource.apple.com> Revision: 23135 http://trac.macosforge.org/projects/launchd/changeset/23135 Author: zarzycki@apple.com Date: 2007-03-05 13:40:38 -0800 (Mon, 05 Mar 2007) Log Message: ----------- "Tagging launchd-201 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- tags/launchd-201/ Copied: tags/launchd-201 (from rev 23134, trunk) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070305/668efa3b/attachment.html From source_changes at macosforge.org Tue Mar 6 11:22:51 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23136] trunk/launchd/src/launchd_core_logic.c Message-ID: <20070306192251.75DB14CB5D8@cvs.opensource.apple.com> Revision: 23136 http://trac.macosforge.org/projects/launchd/changeset/23136 Author: zarzycki@apple.com Date: 2007-03-06 11:22:51 -0800 (Tue, 06 Mar 2007) Log Message: ----------- launchd-201: can't ssh in with AFP OD account (hangs) Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-05 21:40:38 UTC (rev 23135) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-06 19:22:51 UTC (rev 23136) @@ -3487,7 +3487,12 @@ if (name) { /* no name implies: bootstrap_subset() where creating a "bootstrapper" makes no sense */ bootstrapper = job_new(jmr, "com.apple.launchctld", NULL, bootstrap_tool); - if (jm || getuid()) { + if (jobmgr_assumes(jmr, bootstrapper != NULL) && (jm || getuid())) { + char buf[100]; + + /* launchd-201: can't ssh in with AFP OD account (hangs) */ + snprintf(buf, sizeof(buf), "0x%X:0:0", getuid()); + envitem_new(bootstrapper, "__CF_USER_TEXT_ENCODING", buf, false); bootstrapper->weird_bootstrap = true; jobmgr_assumes(jmr, job_setup_machport(bootstrapper)); } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070306/948909d2/attachment.html From source_changes at macosforge.org Tue Mar 6 13:38:02 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23137] tags/launchd-202/ Message-ID: <20070306213802.BE9BD4CB7AA@cvs.opensource.apple.com> Revision: 23137 http://trac.macosforge.org/projects/launchd/changeset/23137 Author: zarzycki@apple.com Date: 2007-03-06 13:38:02 -0800 (Tue, 06 Mar 2007) Log Message: ----------- "Tagging launchd-202 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- tags/launchd-202/ Copied: tags/launchd-202 (from rev 23136, trunk) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070306/b542bb28/attachment.html From source_changes at macosforge.org Tue Mar 6 16:32:49 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23138] trunk/launchd Message-ID: <20070307003249.5EE904CBB34@cvs.opensource.apple.com> Revision: 23138 http://trac.macosforge.org/projects/launchd/changeset/23138 Author: zarzycki@apple.com Date: 2007-03-06 16:32:48 -0800 (Tue, 06 Mar 2007) Log Message: ----------- Supply an API for CoreFoundation to get the PID of the per user launchd Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/launchd_mig_types.defs trunk/launchd/src/libvproc.c trunk/launchd/src/libvproc_internal.h trunk/launchd/src/libvproc_public.h trunk/launchd/src/protocol_job.defs Added Paths: ----------- trunk/launchd/testing/vproc_gsk_test.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-06 21:38:02 UTC (rev 23137) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-07 00:32:48 UTC (rev 23138) @@ -4170,7 +4170,7 @@ } kern_return_t -job_mig_get_integer(job_t j, get_set_int_key_t key, int64_t *val) +job_mig_swap_integer(job_t j, vproc_gsk_t inkey, vproc_gsk_t outkey, int64_t inval, int64_t *outval) { kern_return_t kr = 0; @@ -4178,15 +4178,38 @@ return BOOTSTRAP_NO_MEMORY; } - switch (key) { - case LAST_EXIT_STATUS: - *val = j->last_exit_status; + switch (outkey) { + case VPROC_GSK_LAST_EXIT_STATUS: + *outval = j->last_exit_status; break; + case VPROC_GSK_MGR_UID: + *outval = getuid(); + break; + case VPROC_GSK_MGR_PID: + *outval = getpid(); + break; + case 0: + *outval = 0; + break; default: kr = 1; break; } + switch (inkey) { + case VPROC_GSK_GLOBAL_ON_DEMAND: + kr = job_set_global_on_demand(j, (bool)inval) ? 0 : 1; + break; + case 0: + break; + case VPROC_GSK_LAST_EXIT_STATUS: + case VPROC_GSK_MGR_UID: + case VPROC_GSK_MGR_PID: + default: + kr = 1; + break; + } + return kr; } @@ -4213,27 +4236,6 @@ } kern_return_t -job_mig_set_integer(job_t j, get_set_int_key_t key, int64_t val) -{ - kern_return_t kr = 0; - - if (!launchd_assumes(j != NULL)) { - return BOOTSTRAP_NO_MEMORY; - } - - switch (key) { - case GLOBAL_ON_DEMAND: - kr = job_set_global_on_demand(j, (bool)val) ? 0 : 1; - break; - default: - kr = 1; - break; - } - - return kr; -} - -kern_return_t job_mig_getsocket(job_t j, name_t spr) { if (!launchd_assumes(j != NULL)) { Modified: trunk/launchd/src/launchd_mig_types.defs =================================================================== --- trunk/launchd/src/launchd_mig_types.defs 2007-03-06 21:38:02 UTC (rev 23137) +++ trunk/launchd/src/launchd_mig_types.defs 2007-03-07 00:32:48 UTC (rev 23138) @@ -26,7 +26,7 @@ type pid_t = integer_t; type uid_t = integer_t; type gid_t = integer_t; -type get_set_int_key_t = integer_t; +type vproc_gsk_t = integer_t; type logmsg_t = c_string[*:2048]; type cmd_t = c_string[512]; type cmd_array_t = ^array [] of cmd_t; Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2007-03-06 21:38:02 UTC (rev 23137) +++ trunk/launchd/src/libvproc.c 2007-03-07 00:32:48 UTC (rev 23138) @@ -201,7 +201,7 @@ { int64_t val; - if (vproc_mig_get_integer(bootstrap_port, LAST_EXIT_STATUS, &val) == 0) { + if (vproc_swap_integer(NULL, VPROC_GSK_LAST_EXIT_STATUS, 0, &val) == 0) { *wstatus = (int)val; return NULL; } @@ -209,6 +209,18 @@ return (vproc_err_t)_vproc_get_last_exit_status; } +vproc_err_t +vproc_swap_integer(vproc_t vp __attribute__((unused)), vproc_gsk_t key, int64_t *inval, int64_t *outval) +{ + int64_t dummyval = 0; + + if (vproc_mig_swap_integer(bootstrap_port, inval ? key : 0, outval ? key : 0, inval ? *inval : 0, outval ? outval : &dummyval) == 0) { + return NULL; + } + + return (vproc_err_t)vproc_swap_integer; +} + void * reboot2(uint64_t flags) { @@ -242,7 +254,7 @@ { int64_t val = state ? ~0 : 0; - if (vproc_mig_set_integer(bootstrap_port, GLOBAL_ON_DEMAND, val) == 0) { + if (vproc_swap_integer(NULL, VPROC_GSK_GLOBAL_ON_DEMAND, &val, NULL) == 0) { return NULL; } Modified: trunk/launchd/src/libvproc_internal.h =================================================================== --- trunk/launchd/src/libvproc_internal.h 2007-03-06 21:38:02 UTC (rev 23137) +++ trunk/launchd/src/libvproc_internal.h 2007-03-07 00:32:48 UTC (rev 23138) @@ -28,10 +28,6 @@ typedef char * logmsg_t; typedef mach_port_t vproc_mig_t; typedef integer_t binpref_t[8]; -typedef enum { - LAST_EXIT_STATUS = 1, - GLOBAL_ON_DEMAND, -} get_set_int_key_t; #ifdef protocol_vproc_MSG_COUNT /* HACK */ Modified: trunk/launchd/src/libvproc_public.h =================================================================== --- trunk/launchd/src/libvproc_public.h 2007-03-06 21:38:02 UTC (rev 23137) +++ trunk/launchd/src/libvproc_public.h 2007-03-07 00:32:48 UTC (rev 23138) @@ -21,16 +21,30 @@ */ #include +#include __BEGIN_DECLS +#pragma GCC visibility push(default) + +typedef enum { + VPROC_GSK_LAST_EXIT_STATUS = 1, + VPROC_GSK_GLOBAL_ON_DEMAND, + VPROC_GSK_MGR_UID, + VPROC_GSK_MGR_PID, +} vproc_gsk_t; + typedef void * vproc_err_t; typedef void * vproc_t; typedef void * vprocmgr_t; +vproc_err_t vproc_swap_integer(vproc_t vp, vproc_gsk_t key, int64_t *inval, int64_t *outval); + const char *vproc_strerror(vproc_err_t r); +#pragma GCC visibility pop + __END_DECLS #endif Modified: trunk/launchd/src/protocol_job.defs =================================================================== --- trunk/launchd/src/protocol_job.defs 2007-03-06 21:38:02 UTC (rev 23137) +++ trunk/launchd/src/protocol_job.defs 2007-03-07 00:32:48 UTC (rev 23138) @@ -121,15 +121,14 @@ routine uncork_fork( __bs_port : job_t); -routine get_integer( +routine swap_integer( __bs_port : job_t; - __key : get_set_int_key_t; - out __val : int64_t); + __inkey : vproc_gsk_t; + __outkey : vproc_gsk_t; + __inval : int64_t; + out __outval : int64_t); -routine set_integer( - __bs_port : job_t; - __key : get_set_int_key_t; - __val : int64_t); +skip; simpleroutine log( __bs_port : job_t; Added: trunk/launchd/testing/vproc_gsk_test.c =================================================================== --- trunk/launchd/testing/vproc_gsk_test.c (rev 0) +++ trunk/launchd/testing/vproc_gsk_test.c 2007-03-07 00:32:48 UTC (rev 23138) @@ -0,0 +1,23 @@ +#include +#include +#include +#include + +int main(void) +{ + int64_t val; + pid_t p; + uid_t u; + + /* we assign val to p or u due to 64 bit to 32 bit trucation */ + + assert(vproc_swap_integer(NULL, VPROC_GSK_MGR_PID, NULL, &val) == NULL); + p = val; + + assert(vproc_swap_integer(NULL, VPROC_GSK_MGR_UID, NULL, &val) == NULL); + u = val; + + fprintf(stdout, "UID = %u PID = %u\n", u, p); + + return 0; +} -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070306/2ebcdc66/attachment.html From source_changes at macosforge.org Tue Mar 6 16:39:49 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23139] trunk/launchd Message-ID: <20070307003949.634934CBB5D@cvs.opensource.apple.com> Revision: 23139 http://trac.macosforge.org/projects/launchd/changeset/23139 Author: zarzycki@apple.com Date: 2007-03-06 16:39:48 -0800 (Tue, 06 Mar 2007) Log Message: ----------- launchd needs to supply SPI for CFLog/NSLog to use for determining provenance of stderr Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/libvproc_public.h trunk/launchd/testing/vproc_gsk_test.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-07 00:32:48 UTC (rev 23138) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-07 00:39:48 UTC (rev 23139) @@ -4188,6 +4188,9 @@ case VPROC_GSK_MGR_PID: *outval = getpid(); break; + case VPROC_GSK_IS_NATIVE: + *outval = !j->anonymous; + break; case 0: *outval = 0; break; @@ -4202,6 +4205,7 @@ break; case 0: break; + case VPROC_GSK_IS_NATIVE: case VPROC_GSK_LAST_EXIT_STATUS: case VPROC_GSK_MGR_UID: case VPROC_GSK_MGR_PID: Modified: trunk/launchd/src/libvproc_public.h =================================================================== --- trunk/launchd/src/libvproc_public.h 2007-03-07 00:32:48 UTC (rev 23138) +++ trunk/launchd/src/libvproc_public.h 2007-03-07 00:39:48 UTC (rev 23139) @@ -32,6 +32,7 @@ VPROC_GSK_GLOBAL_ON_DEMAND, VPROC_GSK_MGR_UID, VPROC_GSK_MGR_PID, + VPROC_GSK_IS_NATIVE, } vproc_gsk_t; typedef void * vproc_err_t; Modified: trunk/launchd/testing/vproc_gsk_test.c =================================================================== --- trunk/launchd/testing/vproc_gsk_test.c 2007-03-07 00:32:48 UTC (rev 23138) +++ trunk/launchd/testing/vproc_gsk_test.c 2007-03-07 00:39:48 UTC (rev 23139) @@ -6,6 +6,7 @@ int main(void) { int64_t val; + bool is_native; pid_t p; uid_t u; @@ -17,7 +18,10 @@ assert(vproc_swap_integer(NULL, VPROC_GSK_MGR_UID, NULL, &val) == NULL); u = val; - fprintf(stdout, "UID = %u PID = %u\n", u, p); + assert(vproc_swap_integer(NULL, VPROC_GSK_IS_NATIVE, NULL, &val) == NULL); + is_native = val; + fprintf(stdout, "UID = %u PID = %u Native = %u\n", u, p, is_native); + return 0; } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070306/3902cd47/attachment.html From source_changes at macosforge.org Tue Mar 6 16:45:45 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23140] trunk/launchd/src Message-ID: <20070307004545.1D7374CBB7C@cvs.opensource.apple.com> Revision: 23140 http://trac.macosforge.org/projects/launchd/changeset/23140 Author: zarzycki@apple.com Date: 2007-03-06 16:45:44 -0800 (Tue, 06 Mar 2007) Log Message: ----------- Let jobs tweak their basic keepalive bit on the fly. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/libvproc_public.h Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-07 00:39:48 UTC (rev 23139) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-07 00:45:44 UTC (rev 23140) @@ -4191,6 +4191,9 @@ case VPROC_GSK_IS_NATIVE: *outval = !j->anonymous; break; + case VPROC_GSK_BASIC_KEEPALIVE: + *outval = !j->ondemand; + break; case 0: *outval = 0; break; @@ -4203,6 +4206,9 @@ case VPROC_GSK_GLOBAL_ON_DEMAND: kr = job_set_global_on_demand(j, (bool)inval) ? 0 : 1; break; + case VPROC_GSK_BASIC_KEEPALIVE: + j->ondemand = !inval; + break; case 0: break; case VPROC_GSK_IS_NATIVE: Modified: trunk/launchd/src/libvproc_public.h =================================================================== --- trunk/launchd/src/libvproc_public.h 2007-03-07 00:39:48 UTC (rev 23139) +++ trunk/launchd/src/libvproc_public.h 2007-03-07 00:45:44 UTC (rev 23140) @@ -33,6 +33,7 @@ VPROC_GSK_MGR_UID, VPROC_GSK_MGR_PID, VPROC_GSK_IS_NATIVE, + VPROC_GSK_BASIC_KEEPALIVE, } vproc_gsk_t; typedef void * vproc_err_t; -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070306/0c90ddd5/attachment.html From source_changes at macosforge.org Tue Mar 6 16:54:30 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23141] trunk/launchd/src Message-ID: <20070307005430.7FC6A4CBBA3@cvs.opensource.apple.com> Revision: 23141 http://trac.macosforge.org/projects/launchd/changeset/23141 Author: zarzycki@apple.com Date: 2007-03-06 16:54:30 -0800 (Tue, 06 Mar 2007) Log Message: ----------- Allow jobs to tweak their basic start interval at runtime. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/libvproc_public.h Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-07 00:45:44 UTC (rev 23140) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-07 00:54:30 UTC (rev 23141) @@ -4194,6 +4194,9 @@ case VPROC_GSK_BASIC_KEEPALIVE: *outval = !j->ondemand; break; + case VPROC_GSK_START_INTERVAL: + *outval = j->start_interval; + break; case 0: *outval = 0; break; @@ -4209,6 +4212,15 @@ case VPROC_GSK_BASIC_KEEPALIVE: j->ondemand = !inval; break; + case VPROC_GSK_START_INTERVAL: + if ((unsigned int)inval > 0) { + j->start_interval = inval; + job_assumes(j, kevent_mod((uintptr_t)&j->start_interval, EVFILT_TIMER, EV_ADD, NOTE_SECONDS, j->start_interval, j) != -1); + } else if (j->start_interval) { + job_assumes(j, kevent_mod((uintptr_t)&j->start_interval, EVFILT_TIMER, EV_DELETE, 0, 0, NULL) != -1); + j->start_interval = 0; + } + break; case 0: break; case VPROC_GSK_IS_NATIVE: Modified: trunk/launchd/src/libvproc_public.h =================================================================== --- trunk/launchd/src/libvproc_public.h 2007-03-07 00:45:44 UTC (rev 23140) +++ trunk/launchd/src/libvproc_public.h 2007-03-07 00:54:30 UTC (rev 23141) @@ -34,6 +34,7 @@ VPROC_GSK_MGR_PID, VPROC_GSK_IS_NATIVE, VPROC_GSK_BASIC_KEEPALIVE, + VPROC_GSK_START_INTERVAL, } vproc_gsk_t; typedef void * vproc_err_t; -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070306/18dba0b9/attachment.html From source_changes at macosforge.org Wed Mar 7 09:44:29 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23142] trunk/launchd/src/launchctl.c Message-ID: <20070307174429.7F7084CCB96@cvs.opensource.apple.com> Revision: 23142 http://trac.macosforge.org/projects/launchd/changeset/23142 Author: zarzycki@apple.com Date: 2007-03-07 09:44:28 -0800 (Wed, 07 Mar 2007) Log Message: ----------- Dead code deletion. Modified Paths: -------------- trunk/launchd/src/launchctl.c Modified: trunk/launchd/src/launchctl.c =================================================================== --- trunk/launchd/src/launchctl.c 2007-03-07 00:54:30 UTC (rev 23141) +++ trunk/launchd/src/launchctl.c 2007-03-07 17:44:28 UTC (rev 23142) @@ -1355,11 +1355,9 @@ _vproc_set_global_on_demand(false); - if (!path_check("/System/Library/LoginPlugins/BootCache.loginPlugin")) { - assumes(kevent(kq, NULL, 0, &kev, 1, NULL) == 1); + assumes(kevent(kq, NULL, 0, &kev, 1, NULL) == 1); - do_BootCache_magic(BOOTCACHE_STOP); - } + do_BootCache_magic(BOOTCACHE_STOP); assumes(close(kq) != -1); } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070307/2610dbe9/attachment.html From source_changes at macosforge.org Wed Mar 7 10:01:26 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23143] trunk/launchd/src/launchctl.c Message-ID: <20070307180126.F26434CCBBB@cvs.opensource.apple.com> Revision: 23143 http://trac.macosforge.org/projects/launchd/changeset/23143 Author: zarzycki@apple.com Date: 2007-03-07 10:01:26 -0800 (Wed, 07 Mar 2007) Log Message: ----------- Wow, I don't touch launchctl.c enough. My style has changed over time. (Always use {}, you're going to need them eventually, and when you do, it makes for a more clear diff.) Modified Paths: -------------- trunk/launchd/src/launchctl.c Modified: trunk/launchd/src/launchctl.c =================================================================== --- trunk/launchd/src/launchctl.c 2007-03-07 17:44:28 UTC (rev 23142) +++ trunk/launchd/src/launchctl.c 2007-03-07 18:01:26 UTC (rev 23143) @@ -278,8 +278,9 @@ optreset = 1; for (i = 0; i < (sizeof cmds / sizeof cmds[0]); i++) { - if (!strcmp(cmds[i].name, argv[0])) + if (!strcmp(cmds[i].name, argv[0])) { return cmds[i].func(argc, argv); + } } fprintf(stderr, "%s: unknown subcommand \"%s\"\n", getprogname(), argv[0]); @@ -349,10 +350,11 @@ bool *is_csh = context; /* XXX escape the double quotes */ - if (*is_csh) + if (*is_csh) { fprintf(stdout, "setenv %s \"%s\";\n", key, launch_data_get_string(obj)); - else + } else { fprintf(stdout, "%s=\"%s\"; export %s;\n", key, launch_data_get_string(obj), key); + } } void @@ -360,8 +362,9 @@ { const char *k = context; - if (!strcmp(key, k)) + if (!strcmp(key, k)) { fprintf(stdout, "%s\n", launch_data_get_string(obj)); + } } int @@ -373,8 +376,9 @@ if (!strcmp(argv[0], "export")) { char *s = getenv("SHELL"); - if (s) + if (s) { is_csh = strstr(s, "csh") ? true : false; + } } else if (argc != 2) { fprintf(stderr, "%s usage: getenv \n", getprogname()); return 1; @@ -388,10 +392,11 @@ launch_data_free(msg); if (resp) { - if (!strcmp(argv[0], "export")) + if (!strcmp(argv[0], "export")) { launch_data_dict_iterate(resp, print_launchd_env, &is_csh); - else + } else { launch_data_dict_iterate(resp, print_key_value, k); + } launch_data_free(resp); } else { fprintf(stderr, "launch_msg(\"" LAUNCH_KEY_GETUSERENVIRONMENT "\"): %s\n", strerror(errno)); @@ -423,8 +428,9 @@ return; } if (LAUNCH_DATA_ERRNO == launch_data_get_type(resp)) { - if ((e = launch_data_get_errno(resp))) + if ((e = launch_data_get_errno(resp))) { fprintf(stderr, "%s\n", strerror(e)); + } } launch_data_free(resp); } @@ -441,10 +447,11 @@ } if (editondisk) { - if (load) + if (load) { CFDictionaryRemoveValue((CFMutableDictionaryRef)plist, CFSTR(LAUNCH_JOBKEY_DISABLED)); - else + } else { CFDictionarySetValue((CFMutableDictionaryRef)plist, CFSTR(LAUNCH_JOBKEY_DISABLED), kCFBooleanTrue); + } WriteMyPropertyListToFile(plist, file); } @@ -471,8 +478,9 @@ launch_data_dict_iterate(o, delay_to_second_pass2, context); break; case LAUNCH_DATA_ARRAY: - for (i = 0; i < launch_data_array_get_count(o); i++) + for (i = 0; i < launch_data_array_get_count(o); i++) { delay_to_second_pass2(launch_data_array_get_index(o, i), NULL, context); + } break; default: break; @@ -486,8 +494,9 @@ launch_data_t socks = launch_data_dict_lookup(o, LAUNCH_JOBKEY_SOCKETS); - if (NULL == socks) + if (NULL == socks) { return false; + } delay_to_second_pass2(socks, NULL, &res); @@ -525,8 +534,9 @@ for (i = 0; i < c; i++) { launch_data_t oai = launch_data_array_get_index(tmpa, i); - if (!strcasecmp(ourhostname, launch_data_get_string(oai))) + if (!strcasecmp(ourhostname, launch_data_get_string(oai))) { goto out_bad; + } } } @@ -535,12 +545,14 @@ for (i = 0; i < c; i++) { launch_data_t oai = launch_data_array_get_index(tmpa, i); - if (!strcasecmp(ourhostname, launch_data_get_string(oai))) + if (!strcasecmp(ourhostname, launch_data_get_string(oai))) { break; + } } - if (i == c) + if (i == c) { goto out_bad; + } } if (lus->session_type && !(tmpa = launch_data_dict_lookup(thejob, LAUNCH_JOBKEY_LIMITLOADTOSESSIONTYPE))) { @@ -582,27 +594,33 @@ } } - if ((tmpd = launch_data_dict_lookup(thejob, LAUNCH_JOBKEY_DISABLED))) + if ((tmpd = launch_data_dict_lookup(thejob, LAUNCH_JOBKEY_DISABLED))) { job_disabled = launch_data_get_bool(tmpd); + } - if (lus->forceload) + if (lus->forceload) { job_disabled = false; + } - if (job_disabled && lus->load) + if (job_disabled && lus->load) { goto out_bad; + } - if (delay_to_second_pass(thejob)) + if (delay_to_second_pass(thejob)) { launch_data_array_append(lus->pass2, thejob); - else + } else { launch_data_array_append(lus->pass1, thejob); + } - if (verbose) + if (verbose) { fprintf(stdout, "Will load: %s\n", what); + } return; out_bad: - if (verbose) + if (verbose) { fprintf(stdout, "Ignored: %s\n", what); + } launch_data_free(thejob); } @@ -616,8 +634,9 @@ return false; } - if (forceload) + if (forceload) { return true; + } if (sb.st_mode & (S_IWOTH|S_IWGRP)) { fprintf(stderr, "%s: Dubious permissions on file (skipping): %s\n", getprogname(), path); @@ -645,11 +664,13 @@ struct dirent *de; DIR *d; - if (!path_goodness_check(what, lus->forceload)) + if (!path_goodness_check(what, lus->forceload)) { return; + } - if (stat(what, &sb) == -1) + if (stat(what, &sb) == -1) { return; + } if (S_ISREG(sb.st_mode)) { readfile(what, lus); @@ -660,12 +681,14 @@ } while ((de = readdir(d))) { - if ((de->d_name[0] == '.')) + if ((de->d_name[0] == '.')) { continue; + } snprintf(buf, sizeof(buf), "%s/%s", what, de->d_name); - if (!path_goodness_check(buf, lus->forceload)) + if (!path_goodness_check(buf, lus->forceload)) { continue; + } readfile(buf, lus); } @@ -738,8 +761,9 @@ } } - if ((val = launch_data_dict_lookup(tmp, LAUNCH_JOBSOCKETKEY_PASSIVE))) + if ((val = launch_data_dict_lookup(tmp, LAUNCH_JOBSOCKETKEY_PASSIVE))) { passive = launch_data_get_bool(val); + } if ((val = launch_data_dict_lookup(tmp, LAUNCH_JOBSOCKETKEY_SECUREWITHKEY))) { char secdir[] = LAUNCH_SECDIR, buf[1024]; @@ -772,8 +796,9 @@ strncpy(sun.sun_path, launch_data_get_string(val), sizeof(sun.sun_path)); - if ((sfd = _fd(socket(AF_UNIX, st, 0))) == -1) + if ((sfd = _fd(socket(AF_UNIX, st, 0))) == -1) { return; + } if ((val = launch_data_dict_lookup(tmp, LAUNCH_JOBSOCKETKEY_PATHMODE))) { sun_mode = (mode_t)launch_data_get_integer(val); @@ -795,8 +820,7 @@ if (setm) { chmod(sun.sun_path, sun_mode); } - if ((st == SOCK_STREAM || st == SOCK_SEQPACKET) - && listen(sfd, SOMAXCONN) == -1) { + if ((st == SOCK_STREAM || st == SOCK_SEQPACKET) && listen(sfd, SOMAXCONN) == -1) { close(sfd); return; } @@ -818,13 +842,16 @@ memset(&hints, 0, sizeof(hints)); hints.ai_socktype = st; - if (passive) + if (passive) { hints.ai_flags |= AI_PASSIVE; + } - if ((val = launch_data_dict_lookup(tmp, LAUNCH_JOBSOCKETKEY_NODENAME))) + if ((val = launch_data_dict_lookup(tmp, LAUNCH_JOBSOCKETKEY_NODENAME))) { node = launch_data_get_string(val); - if ((val = launch_data_dict_lookup(tmp, LAUNCH_JOBSOCKETKEY_MULTICASTGROUP))) + } + if ((val = launch_data_dict_lookup(tmp, LAUNCH_JOBSOCKETKEY_MULTICASTGROUP))) { mgroup = launch_data_get_string(val); + } if ((val = launch_data_dict_lookup(tmp, LAUNCH_JOBSOCKETKEY_SERVICENAME))) { if (LAUNCH_DATA_INTEGER == launch_data_get_type(val)) { sprintf(servnbuf, "%lld", launch_data_get_integer(val)); @@ -834,10 +861,11 @@ } } if ((val = launch_data_dict_lookup(tmp, LAUNCH_JOBSOCKETKEY_FAMILY))) { - if (!strcasecmp("IPv4", launch_data_get_string(val))) + if (!strcasecmp("IPv4", launch_data_get_string(val))) { hints.ai_family = AF_INET; - else if (!strcasecmp("IPv6", launch_data_get_string(val))) + } else if (!strcasecmp("IPv6", launch_data_get_string(val))) { hints.ai_family = AF_INET6; + } } if ((val = launch_data_dict_lookup(tmp, LAUNCH_JOBSOCKETKEY_PROTOCOL))) { if (!strcasecmp("TCP", launch_data_get_string(val))) { @@ -900,8 +928,7 @@ if (mgroup) { do_mgroup_join(sfd, res->ai_family, res->ai_socktype, res->ai_protocol, mgroup); } - if ((res->ai_socktype == SOCK_STREAM || res->ai_socktype == SOCK_SEQPACKET) - && listen(sfd, SOMAXCONN) == -1) { + if ((res->ai_socktype == SOCK_STREAM || res->ai_socktype == SOCK_SEQPACKET) && listen(sfd, SOMAXCONN) == -1) { fprintf(stderr, "listen(): %s\n", strerror(errno)); return; } @@ -914,12 +941,14 @@ } if (NULL == rnames) { rvs_fd = do_rendezvous_magic(res, serv); - if (rvs_fd) + if (rvs_fd) { launch_data_array_append(rvs_fds, rvs_fd); + } } else if (LAUNCH_DATA_STRING == launch_data_get_type(rnames)) { rvs_fd = do_rendezvous_magic(res, launch_data_get_string(rnames)); - if (rvs_fd) + if (rvs_fd) { launch_data_array_append(rvs_fds, rvs_fd); + } } else if (LAUNCH_DATA_ARRAY == launch_data_get_type(rnames)) { size_t rn_i, rn_ac = launch_data_array_get_count(rnames); @@ -927,8 +956,9 @@ launch_data_t rn_tmp = launch_data_array_get_index(rnames, rn_i); rvs_fd = do_rendezvous_magic(res, launch_data_get_string(rn_tmp)); - if (rvs_fd) + if (rvs_fd) { launch_data_array_append(rvs_fds, rvs_fd); + } } } } @@ -1006,23 +1036,27 @@ short port; static int statres = 1; - if (1 == statres) + if (1 == statres) { statres = stat("/usr/sbin/mDNSResponder", &sb); + } - if (-1 == statres) + if (-1 == statres) { return NULL; + } sprintf(rvs_buf, "_%s._%s.", serv, res->ai_socktype == SOCK_STREAM ? "tcp" : "udp"); - if (res->ai_family == AF_INET) + if (res->ai_family == AF_INET) { port = ((struct sockaddr_in *)res->ai_addr)->sin_port; - else + } else { port = ((struct sockaddr_in6 *)res->ai_addr)->sin6_port; + } error = DNSServiceRegister(&service, 0, 0, NULL, rvs_buf, NULL, NULL, port, 0, NULL, NULL, NULL); - if (error == kDNSServiceErr_NoError) + if (error == kDNSServiceErr_NoError) { return launch_data_new_fd(DNSServiceRefSockFD(service)); + } fprintf(stderr, "DNSServiceRegister(\"%s\"): %d\n", serv, error); return NULL; @@ -1038,13 +1072,16 @@ CFURLRef fileURL; fileURL = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (const UInt8 *)posixfile, strlen(posixfile), false); - if (!fileURL) + if (!fileURL) { fprintf(stderr, "%s: CFURLCreateFromFileSystemRepresentation(%s) failed\n", getprogname(), posixfile); - if (!CFURLCreateDataAndPropertiesFromResource(kCFAllocatorDefault, fileURL, &resourceData, NULL, NULL, &errorCode)) + } + if (!CFURLCreateDataAndPropertiesFromResource(kCFAllocatorDefault, fileURL, &resourceData, NULL, NULL, &errorCode)) { fprintf(stderr, "%s: CFURLCreateDataAndPropertiesFromResource(%s) failed: %d\n", getprogname(), posixfile, (int)errorCode); + } propertyList = CFPropertyListCreateFromXMLData(kCFAllocatorDefault, resourceData, kCFPropertyListMutableContainers, &errorString); - if (!propertyList) + if (!propertyList) { fprintf(stderr, "%s: propertyList is NULL\n", getprogname()); + } return propertyList; } @@ -1057,13 +1094,16 @@ SInt32 errorCode; fileURL = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (const UInt8 *)posixfile, strlen(posixfile), false); - if (!fileURL) + if (!fileURL) { fprintf(stderr, "%s: CFURLCreateFromFileSystemRepresentation(%s) failed\n", getprogname(), posixfile); + } resourceData = CFPropertyListCreateXMLData(kCFAllocatorDefault, plist); - if (resourceData == NULL) + if (resourceData == NULL) { fprintf(stderr, "%s: CFPropertyListCreateXMLData(%s) failed", getprogname(), posixfile); - if (!CFURLWriteDataAndPropertiesToResource(fileURL, resourceData, NULL, &errorCode)) + } + if (!CFURLWriteDataAndPropertiesToResource(fileURL, resourceData, NULL, &errorCode)) { fprintf(stderr, "%s: CFURLWriteDataAndPropertiesToResource(%s) failed: %d\n", getprogname(), posixfile, (int)errorCode); + } } void @@ -1162,8 +1202,9 @@ cmdwidth = l; } - for (i = 0; i < (sizeof cmds / sizeof cmds[0]); i++) + for (i = 0; i < (sizeof cmds / sizeof cmds[0]); i++) { fprintf(where, "\t%-*s\t%s\n", cmdwidth, cmds[i].name, cmds[i].desc); + } return 0; } @@ -1564,10 +1605,12 @@ distill_jobs(lus.pass2); submit_job_pass(lus.pass2); } else { - for (i = 0; i < launch_data_array_get_count(lus.pass1); i++) + for (i = 0; i < launch_data_array_get_count(lus.pass1); i++) { unloadjob(launch_data_array_get_index(lus.pass1, i)); - for (i = 0; i < launch_data_array_get_count(lus.pass2); i++) + } + for (i = 0; i < launch_data_array_get_count(lus.pass2); i++) { unloadjob(launch_data_array_get_index(lus.pass2, i)); + } } return 0; @@ -2762,18 +2805,21 @@ return; while ((val = fgetln(sf, &ln_len))) { - if (ln_len == 0) + if (ln_len == 0) { continue; - if (!assumes((tmpstr = malloc(ln_len + 1)) != NULL)) + } + if (!assumes((tmpstr = malloc(ln_len + 1)) != NULL)) { continue; + } memcpy(tmpstr, val, ln_len); tmpstr[ln_len] = 0; val = tmpstr; while (*val && isspace(*val)) val++; - if (*val == '\0' || *val == '#') + if (*val == '\0' || *val == '#') { goto skip_sysctl_tool; + } sysctl_tool[2] = val; assumes(fwexec(sysctl_tool, true) != -1); skip_sysctl_tool: @@ -2799,8 +2845,9 @@ return; } - if (buf[0] != '\0') + if (buf[0] != '\0') { return; + } versdict = _CFCopySystemVersionDictionary(); buildvers = CFDictionaryGetValue(versdict, _kCFSystemVersionBuildVersionKey); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070307/4a025a0f/attachment.html From source_changes at macosforge.org Wed Mar 7 14:50:49 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23144] trunk/launchd/src Message-ID: <20070307225049.8168E4CD249@cvs.opensource.apple.com> Revision: 23144 http://trac.macosforge.org/projects/launchd/changeset/23144 Author: zarzycki@apple.com Date: 2007-03-07 14:50:49 -0800 (Wed, 07 Mar 2007) Log Message: ----------- Make the get-set-key API private. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/libvproc_private.h trunk/launchd/src/libvproc_public.h Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-07 18:01:26 UTC (rev 23143) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-07 22:50:49 UTC (rev 23144) @@ -4188,7 +4188,7 @@ case VPROC_GSK_MGR_PID: *outval = getpid(); break; - case VPROC_GSK_IS_NATIVE: + case VPROC_GSK_IS_MANAGED: *outval = !j->anonymous; break; case VPROC_GSK_BASIC_KEEPALIVE: @@ -4223,7 +4223,7 @@ break; case 0: break; - case VPROC_GSK_IS_NATIVE: + case VPROC_GSK_IS_MANAGED: case VPROC_GSK_LAST_EXIT_STATUS: case VPROC_GSK_MGR_UID: case VPROC_GSK_MGR_PID: Modified: trunk/launchd/src/libvproc_private.h =================================================================== --- trunk/launchd/src/libvproc_private.h 2007-03-07 18:01:26 UTC (rev 23143) +++ trunk/launchd/src/libvproc_private.h 2007-03-07 22:50:49 UTC (rev 23144) @@ -29,6 +29,18 @@ #pragma GCC visibility push(default) +typedef enum { + VPROC_GSK_LAST_EXIT_STATUS = 1, + VPROC_GSK_GLOBAL_ON_DEMAND, + VPROC_GSK_MGR_UID, + VPROC_GSK_MGR_PID, + VPROC_GSK_IS_MANAGED, + VPROC_GSK_BASIC_KEEPALIVE, + VPROC_GSK_START_INTERVAL, +} vproc_gsk_t; + +vproc_err_t vproc_swap_integer(vproc_t vp, vproc_gsk_t key, int64_t *inval, int64_t *outval); + vproc_err_t _vproc_get_last_exit_status(int *wstatus); vproc_err_t _vproc_set_global_on_demand(bool val); Modified: trunk/launchd/src/libvproc_public.h =================================================================== --- trunk/launchd/src/libvproc_public.h 2007-03-07 18:01:26 UTC (rev 23143) +++ trunk/launchd/src/libvproc_public.h 2007-03-07 22:50:49 UTC (rev 23144) @@ -27,23 +27,11 @@ #pragma GCC visibility push(default) -typedef enum { - VPROC_GSK_LAST_EXIT_STATUS = 1, - VPROC_GSK_GLOBAL_ON_DEMAND, - VPROC_GSK_MGR_UID, - VPROC_GSK_MGR_PID, - VPROC_GSK_IS_NATIVE, - VPROC_GSK_BASIC_KEEPALIVE, - VPROC_GSK_START_INTERVAL, -} vproc_gsk_t; - typedef void * vproc_err_t; typedef void * vproc_t; typedef void * vprocmgr_t; -vproc_err_t vproc_swap_integer(vproc_t vp, vproc_gsk_t key, int64_t *inval, int64_t *outval); - const char *vproc_strerror(vproc_err_t r); #pragma GCC visibility pop -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070307/0cf52c7b/attachment.html From source_changes at macosforge.org Wed Mar 7 14:53:40 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:43 2007 Subject: [launchd-changes] [23145] trunk/launchd/src/protocol_job.defs Message-ID: <20070307225340.C807A4CD25D@cvs.opensource.apple.com> Revision: 23145 http://trac.macosforge.org/projects/launchd/changeset/23145 Author: zarzycki@apple.com Date: 2007-03-07 14:53:40 -0800 (Wed, 07 Mar 2007) Log Message: ----------- Typo. Modified Paths: -------------- trunk/launchd/src/protocol_job.defs Modified: trunk/launchd/src/protocol_job.defs =================================================================== --- trunk/launchd/src/protocol_job.defs 2007-03-07 22:50:49 UTC (rev 23144) +++ trunk/launchd/src/protocol_job.defs 2007-03-07 22:53:40 UTC (rev 23145) @@ -29,6 +29,7 @@ #include #include "launchd_mig_types.defs" import "libvproc_public.h"; +import "libvproc_private.h"; import "libvproc_internal.h"; type mach_port_move_send_array_t = array[] of mach_port_move_send_t -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070307/3d242bdb/attachment.html From source_changes at macosforge.org Thu Mar 8 15:01:26 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:44 2007 Subject: [launchd-changes] [23146] trunk/launchd/src Message-ID: <20070308230126.66B174CEC9B@cvs.opensource.apple.com> Revision: 23146 http://trac.macosforge.org/projects/launchd/changeset/23146 Author: zarzycki@apple.com Date: 2007-03-08 15:01:26 -0800 (Thu, 08 Mar 2007) Log Message: ----------- Let's make dsym debugging work for Libsystem. Modified Paths: -------------- trunk/launchd/src/Makefile.am trunk/launchd/src/Makefile.in Modified: trunk/launchd/src/Makefile.am =================================================================== --- trunk/launchd/src/Makefile.am 2007-03-07 22:53:40 UTC (rev 23145) +++ trunk/launchd/src/Makefile.am 2007-03-08 23:01:26 UTC (rev 23146) @@ -29,6 +29,9 @@ cp liblaunch.a $(DESTDIR)/usr/local/lib/system cp liblaunch.a $(DESTDIR)/usr/local/lib/system/liblaunch_debug.a cp liblaunch_profile.a $(DESTDIR)/usr/local/lib/system/liblaunch_profile.a + dsymutil --out=$(DESTDIR)/usr/local/lib/system/liblaunch.a.dSYM liblaunch.a + dsymutil --out=$(DESTDIR)/usr/local/lib/system/liblaunch_debug.a.dSYM liblaunch.a + dsymutil --out=$(DESTDIR)/usr/local/lib/system/liblaunch_profile.a.dSYM liblaunch_profile.a else Modified: trunk/launchd/src/Makefile.in =================================================================== --- trunk/launchd/src/Makefile.in 2007-03-07 22:53:40 UTC (rev 23145) +++ trunk/launchd/src/Makefile.in 2007-03-08 23:01:26 UTC (rev 23146) @@ -1066,6 +1066,9 @@ @LIBS_ONLY_TRUE@ cp liblaunch.a $(DESTDIR)/usr/local/lib/system @LIBS_ONLY_TRUE@ cp liblaunch.a $(DESTDIR)/usr/local/lib/system/liblaunch_debug.a @LIBS_ONLY_TRUE@ cp liblaunch_profile.a $(DESTDIR)/usr/local/lib/system/liblaunch_profile.a +@LIBS_ONLY_TRUE@ dsymutil --out=$(DESTDIR)/usr/local/lib/system/liblaunch.a.dSYM liblaunch.a +@LIBS_ONLY_TRUE@ dsymutil --out=$(DESTDIR)/usr/local/lib/system/liblaunch_debug.a.dSYM liblaunch.a +@LIBS_ONLY_TRUE@ dsymutil --out=$(DESTDIR)/usr/local/lib/system/liblaunch_profile.a.dSYM liblaunch_profile.a @LIBS_ONLY_FALSE@launchd_runtime.c:: notifyServer.h launchd_internal.h @LIBS_ONLY_FALSE@launchd_core_logic.c:: protocol_vproc.h job_reply.h protocol_vprocServer.h -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070308/7c6c0b0a/attachment.html From source_changes at macosforge.org Thu Mar 8 15:34:00 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:44 2007 Subject: [launchd-changes] [23147] trunk/launchd/src/launchd_core_logic.c Message-ID: <20070308233400.CDFC94CED8C@cvs.opensource.apple.com> Revision: 23147 http://trac.macosforge.org/projects/launchd/changeset/23147 Author: zarzycki@apple.com Date: 2007-03-08 15:34:00 -0800 (Thu, 08 Mar 2007) Log Message: ----------- Let's ditch the old reordring of the job_t list MRU hack in favor of an actual hash based lookup. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-08 23:01:26 UTC (rev 23146) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-08 23:34:00 UTC (rev 23147) @@ -193,11 +193,16 @@ static void semaphoreitem_watch(job_t j, struct semaphoreitem *si); static void semaphoreitem_ignore(job_t j, struct semaphoreitem *si); +#define IS_POWER_OF_TWO(v) (!(v & (v - 1)) && v) +#define ACTIVE_JOB_HASH_SIZE 32 +#define ACTIVE_JOB_HASH(x) (IS_POWER_OF_TWO(ACTIVE_JOB_HASH_SIZE) ? (x & (ACTIVE_JOB_HASH_SIZE - 1)) : (x % ACTIVE_JOB_HASH_SIZE)) + struct jobmgr_s { kq_callback kqjobmgr_callback; SLIST_ENTRY(jobmgr_s) sle; SLIST_HEAD(, jobmgr_s) submgrs; - TAILQ_HEAD(, job_s) jobs; + SLIST_HEAD(, job_s) jobs; + SLIST_HEAD(, job_s) active_jobs[ACTIVE_JOB_HASH_SIZE]; mach_port_t jm_port; mach_port_t req_port; jobmgr_t parentmgr; @@ -230,7 +235,8 @@ struct job_s { kq_callback kqjob_callback; - TAILQ_ENTRY(job_s) sle; + SLIST_ENTRY(job_s) sle; + SLIST_ENTRY(job_s) hash_sle; SLIST_HEAD(, socketgroup) sockets; SLIST_HEAD(, calendarinterval) cal_intervals; SLIST_HEAD(, envitem) global_env; @@ -545,7 +551,7 @@ jobmgr_shutdown(jmi); } - TAILQ_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { + SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { if (!job_active(ji)) { job_remove(ji); } else if (!ji->hopefully_exits_last) { @@ -575,15 +581,15 @@ } /* We should have one job left and it should be the anonymous job */ - ji = TAILQ_FIRST(&jm->jobs); + ji = SLIST_FIRST(&jm->jobs); if (!(jobmgr_assumes(jm, ji != NULL) && jobmgr_assumes(jm, ji == jm->anonj) - && jobmgr_assumes(jm, TAILQ_NEXT(ji, sle) == NULL))) { - TAILQ_FOREACH(ji, &jm->jobs, sle) { + && jobmgr_assumes(jm, SLIST_NEXT(ji, sle) == NULL))) { + SLIST_FOREACH(ji, &jm->jobs, sle) { job_log(ji, LOG_ERR, "Still remaining at removal."); } } - while ((ji = TAILQ_FIRST(&jm->jobs))) { + while ((ji = SLIST_FIRST(&jm->jobs))) { job_remove(ji); } @@ -707,7 +713,7 @@ kevent_mod((uintptr_t)j, EVFILT_TIMER, EV_DELETE, 0, 0, NULL); if (job_assumes(j, j->mgr)) { - TAILQ_REMOVE(&j->mgr->jobs, j, sle); + SLIST_REMOVE(&j->mgr->jobs, j, job_s, sle); } job_log(j, LOG_DEBUG, "Removed"); @@ -998,7 +1004,7 @@ j->argv[i] = NULL; } - TAILQ_INSERT_TAIL(&jm->jobs, j, sle); + SLIST_INSERT_HEAD(&jm->jobs, j, sle); job_log(j, LOG_DEBUG, "Conceived"); @@ -1518,7 +1524,7 @@ } } - TAILQ_FOREACH(ji, &jm->jobs, sle) { + SLIST_FOREACH(ji, &jm->jobs, sle) { if (strcmp(ji->label, label) == 0) { return ji; } @@ -1536,18 +1542,15 @@ if (jm->jm_port == p) { struct ldcred ldc; + pid_t hashp; runtime_get_caller_creds(&ldc); - TAILQ_FOREACH(ji, &jm->jobs, sle) { + hashp = ACTIVE_JOB_HASH(ldc.pid); + + SLIST_FOREACH(ji, &jm->active_jobs[hashp], hash_sle) { if (ji->p == ldc.pid) { - /* This is just a MRU perfomance hack */ - TAILQ_REMOVE(&jm->jobs, ji, sle); - TAILQ_INSERT_HEAD(&jm->jobs, ji, sle); return ji; - } else if (ji->p == 0) { - /* All the PIDs are at the front of the list */ - break; } } return jm->anonj; @@ -1561,7 +1564,7 @@ } } - TAILQ_FOREACH(ji, &jm->jobs, sle) { + SLIST_FOREACH(ji, &jm->jobs, sle) { if (ji->j_port == p) { return ji; } @@ -1593,7 +1596,7 @@ } } - TAILQ_FOREACH(ji, &jm->jobs, sle) { + SLIST_FOREACH(ji, &jm->jobs, sle) { SLIST_FOREACH(ms, &ji->machservices, sle) { if (ms->port == p) { return ji; @@ -1619,7 +1622,7 @@ job_export_all2(jmi, where); } - TAILQ_FOREACH(ji, &jm->jobs, sle) { + SLIST_FOREACH(ji, &jm->jobs, sle) { launch_data_t tmp; if (jobmgr_assumes(jm, (tmp = job_export2(ji, false)) != NULL)) { @@ -1688,11 +1691,8 @@ } total_children--; + SLIST_REMOVE(&j->mgr->active_jobs[ACTIVE_JOB_HASH(j->p)], j, job_s, hash_sle); - /* Performance hack */ - TAILQ_REMOVE(&j->mgr->jobs, j, sle); - TAILQ_INSERT_TAIL(&j->mgr->jobs, j, sle); - job_assumes(j, gettimeofday(&tve, NULL) != -1); if (j->wait_reply_port) { @@ -1760,7 +1760,7 @@ jobmgr_dispatch_all(jmi); } - TAILQ_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { + SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { job_dispatch(ji, false); } } @@ -2025,11 +2025,8 @@ break; default: total_children++; + SLIST_INSERT_HEAD(&j->mgr->active_jobs[ACTIVE_JOB_HASH(c)], j, hash_sle); - /* Performance hack */ - TAILQ_REMOVE(&j->mgr->jobs, j, sle); - TAILQ_INSERT_HEAD(&j->mgr->jobs, j, sle); - if (!j->legacy_mach_job) { job_assumes(j, close(oepair[1]) != -1); } @@ -2137,7 +2134,7 @@ jobmgr_setup_env_from_other_jobs(jm->parentmgr); } - TAILQ_FOREACH(ji, &jm->jobs, sle) { + SLIST_FOREACH(ji, &jm->jobs, sle) { SLIST_FOREACH(ei, &ji->global_env, sle) { setenv(ei->key, ei->value, 1); } @@ -3303,7 +3300,7 @@ return jm; } - TAILQ_FOREACH(ji, &jm->jobs, sle) { + SLIST_FOREACH(ji, &jm->jobs, sle) { if (ji->p && !ji->hopefully_exits_last) { return jm; } @@ -3311,7 +3308,7 @@ jobmgr_log(jm, LOG_DEBUG, "Asking \"hopeful\" jobs to exit."); - TAILQ_FOREACH(ji, &jm->jobs, sle) { + SLIST_FOREACH(ji, &jm->jobs, sle) { job_stop(ji); } @@ -3368,7 +3365,7 @@ return false; } - TAILQ_FOREACH(ji, &jm->jobs, sle) { + SLIST_FOREACH(ji, &jm->jobs, sle) { if (ji->p) { return false; } @@ -3421,7 +3418,6 @@ return NULL; } - TAILQ_INIT(&jmr->jobs); jmr->kqjobmgr_callback = jobmgr_callback; strcpy(jmr->name, name ? name : "Under construction"); @@ -3540,7 +3536,7 @@ jobmgr_delete_anything_with_port(jmi, port); } - TAILQ_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { + SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { SLIST_FOREACH_SAFE(ms, &ji->machservices, sle, next_ms) { if (ms->port == port) { machservice_delete(ms); @@ -3565,7 +3561,7 @@ jobmgr_assumes(jm, !check_parent); } - TAILQ_FOREACH(ji, &jm->jobs, sle) { + SLIST_FOREACH(ji, &jm->jobs, sle) { if (target_pid && (ji->p != target_pid)) { continue; } @@ -3728,7 +3724,7 @@ } /* We don't need the _SAFE version because we return after the job_dispatch() */ - TAILQ_FOREACH(ji, &jm->jobs, sle) { + SLIST_FOREACH(ji, &jm->jobs, sle) { SLIST_FOREACH(ms, &ji->machservices, sle) { if (ms->port != p) { continue; @@ -3947,7 +3943,7 @@ jobmgr_dispatch_all_semaphores(jmi); } - TAILQ_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { + SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { if (!SLIST_EMPTY(&ji->semaphores)) { job_dispatch(ji, false); } @@ -4313,7 +4309,7 @@ *up_cont = MACH_PORT_NULL; - TAILQ_FOREACH(ji, &root_jobmgr->jobs, sle) { + SLIST_FOREACH(ji, &root_jobmgr->jobs, sle) { if (ji->mach_uid != which_user) { continue; } @@ -4538,7 +4534,7 @@ jm = j->mgr; - TAILQ_FOREACH(ji, &jm->jobs, sle) { + SLIST_FOREACH(ji, &jm->jobs, sle) { SLIST_FOREACH(ms, &ji->machservices, sle) { if (!ms->per_pid) { cnt++; @@ -4560,7 +4556,7 @@ goto out_bad; } - TAILQ_FOREACH(ji, &jm->jobs, sle) { + SLIST_FOREACH(ji, &jm->jobs, sle) { SLIST_FOREACH(ms, &ji->machservices, sle) { if (!ms->per_pid) { strlcpy(service_names[cnt2], machservice_name(ms), sizeof(service_names[0])); @@ -4610,8 +4606,8 @@ } if (job_assumes(j, jmi != NULL)) { - TAILQ_REMOVE(&j->mgr->jobs, j, sle); - TAILQ_INSERT_TAIL(&jmi->jobs, j, sle); + SLIST_REMOVE(&j->mgr->jobs, j, job_s, sle); + SLIST_INSERT_HEAD(&jmi->jobs, j, sle); j->mgr = jmi; } } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070308/d1d82a26/attachment.html From source_changes at macosforge.org Thu Mar 8 15:41:29 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:44 2007 Subject: [launchd-changes] [23148] tags/launchd-203/ Message-ID: <20070308234129.850714CEDC8@cvs.opensource.apple.com> Revision: 23148 http://trac.macosforge.org/projects/launchd/changeset/23148 Author: zarzycki@apple.com Date: 2007-03-08 15:41:29 -0800 (Thu, 08 Mar 2007) Log Message: ----------- "Tagging launchd-203 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- tags/launchd-203/ Copied: tags/launchd-203 (from rev 23147, trunk) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070308/d8baaac4/attachment.html From source_changes at macosforge.org Fri Mar 9 13:00:17 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:44 2007 Subject: [launchd-changes] [23149] trunk/launchd/src/launchctl.1 Message-ID: <20070309210017.4ED8A4D1D3D@cvs.opensource.apple.com> Revision: 23149 http://trac.macosforge.org/projects/launchd/changeset/23149 Author: zarzycki@apple.com Date: 2007-03-09 13:00:17 -0800 (Fri, 09 Mar 2007) Log Message: ----------- Launchctl man pages says it takes multiple job labels, it only takes one Modified Paths: -------------- trunk/launchd/src/launchctl.1 Modified: trunk/launchd/src/launchctl.1 =================================================================== --- trunk/launchd/src/launchctl.1 2007-03-08 23:41:29 UTC (rev 23148) +++ trunk/launchd/src/launchctl.1 2007-03-09 21:00:17 UTC (rev 23149) @@ -80,12 +80,12 @@ Where to send the stderr of the program. .El .It Ar remove Ar job_label -Remove the jobs from launchd by label. +Remove the job from launchd by label. .It Ar start Ar job_label -Start the specified jobs by label. The expected use of this subcommand is for +Start the specified job by label. The expected use of this subcommand is for debugging and testing so that one can manually kick-start an on-demand server. .It Ar stop Ar job_label -Stop the specified jobs by label. If a job is on-demand, launchd may immediately +Stop the specified job by label. If a job is on-demand, launchd may immediately restart the job if launchd finds any criteria that is satisfied. Non-demand based jobs will always be restarted. Use of this subcommand is discouraged. Jobs should ideally idle timeout by themselves. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070309/befcdcc1/attachment.html From source_changes at macosforge.org Wed Mar 14 09:38:43 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:44 2007 Subject: [launchd-changes] [23150] trunk/launchd/src/launchd_core_logic.c Message-ID: <20070314163843.E57EB4D74A4@cvs.opensource.apple.com> Revision: 23150 http://trac.macosforge.org/projects/launchd/changeset/23150 Author: zarzycki@apple.com Date: 2007-03-14 09:38:43 -0700 (Wed, 14 Mar 2007) Log Message: ----------- Small logging changes. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-09 21:00:17 UTC (rev 23149) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-14 16:38:43 UTC (rev 23150) @@ -92,7 +92,7 @@ #define LAUNCHD_MIN_JOB_RUN_TIME 10 #define LAUNCHD_ADVISABLE_IDLE_TIMEOUT 30 #define LAUNCHD_DEFAULT_EXIT_TIMEOUT 20 -#define LAUNCHD_SIGKILL_TIMEOUT 5 +#define LAUNCHD_SIGKILL_TIMER 5 extern char **environ; @@ -1832,7 +1832,7 @@ j->sent_sigkill = true; job_assumes(j, kevent_mod((uintptr_t)&j->exit_timeout, EVFILT_TIMER, - EV_ADD, NOTE_SECONDS, LAUNCHD_SIGKILL_TIMEOUT, j) != -1); + EV_ADD, NOTE_SECONDS, LAUNCHD_SIGKILL_TIMER, j) != -1); } void @@ -1869,6 +1869,7 @@ job_assumes(j, gettimeofday(&tve, NULL) != -1); timersub(&tve, &j->sent_sigterm_time, &tvd); + tvd.tv_sec -= j->exit_timeout; job_log(j, LOG_ERR, "Did not die after sending SIGKILL %lu seconds ago...", tvd.tv_sec); } else { job_force_sampletool(j); @@ -3340,12 +3341,15 @@ for (i = 0; i < kp_cnt; i++) { pid_t p_i = kp[i].kp_proc.p_pid; pid_t pp_i = kp[i].kp_eproc.e_ppid; + const char *z = kp[i].kp_proc.p_stat == SZOMB ? "zombie " : ""; + const char *n = kp[i].kp_proc.p_comm; if (p_i == 0 || p_i == 1) { continue; } - jobmgr_log(jm, LOG_WARNING, "Stray process at shutdown: PID %u PPID %u %s", p_i, pp_i, kp[i].kp_proc.p_comm); + jobmgr_log(jm, LOG_WARNING, "Stray %sprocess at shutdown: PID %u PPID %u %s", z, p_i, pp_i, n); + /* * The kernel team requested that I not do this for Leopard. * jobmgr_assumes(jm, kill(p_i, SIGKILL) != -1); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070314/badc9220/attachment.html From source_changes at macosforge.org Fri Mar 16 07:20:56 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:44 2007 Subject: [launchd-changes] [23151] trunk/launchd/src/launchd_core_logic.c Message-ID: <20070316142056.F12A94D9595@cvs.opensource.apple.com> Revision: 23151 http://trac.macosforge.org/projects/launchd/changeset/23151 Author: zarzycki@apple.com Date: 2007-03-16 07:20:56 -0700 (Fri, 16 Mar 2007) Log Message: ----------- Better logging. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-14 16:38:43 UTC (rev 23150) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-16 14:20:56 UTC (rev 23151) @@ -2615,6 +2615,7 @@ void semaphoreitem_callback(job_t j, struct kevent *kev) { + char invalidation_reason[100] = ""; struct semaphoreitem *si; SLIST_FOREACH(si, &j->semaphores, sle) { @@ -2637,8 +2638,28 @@ return; } - if ((NOTE_DELETE|NOTE_RENAME|NOTE_REVOKE) & kev->fflags) { - job_log(j, LOG_DEBUG, "Path invalidated: %s", si->what); + if (NOTE_DELETE & kev->fflags) { + strcat(invalidation_reason, "deleted"); + } + + if (NOTE_RENAME & kev->fflags) { + if (invalidation_reason[0]) { + strcat(invalidation_reason, "/renamed"); + } else { + strcat(invalidation_reason, "renamed"); + } + } + + if (NOTE_REVOKE & kev->fflags) { + if (invalidation_reason[0]) { + strcat(invalidation_reason, "/revoked"); + } else { + strcat(invalidation_reason, "revoked"); + } + } + + if (invalidation_reason[0]) { + job_log(j, LOG_DEBUG, "Path %s: %s", invalidation_reason, si->what); job_assumes(j, close(si->fd) == 0); si->fd = -1; /* this will get fixed in semaphoreitem_watch() */ } -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070316/8ac6704a/attachment.html From source_changes at macosforge.org Fri Mar 16 07:24:14 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:44 2007 Subject: [launchd-changes] [23152] trunk/launchd/src/launchctl.c Message-ID: <20070316142414.553604D95A1@cvs.opensource.apple.com> Revision: 23152 http://trac.macosforge.org/projects/launchd/changeset/23152 Author: zarzycki@apple.com Date: 2007-03-16 07:24:14 -0700 (Fri, 16 Mar 2007) Log Message: ----------- set BootCache timeout to 60 seconds Modified Paths: -------------- trunk/launchd/src/launchctl.c Modified: trunk/launchd/src/launchctl.c =================================================================== --- trunk/launchd/src/launchctl.c 2007-03-16 14:20:56 UTC (rev 23151) +++ trunk/launchd/src/launchctl.c 2007-03-16 14:24:14 UTC (rev 23152) @@ -1299,7 +1299,7 @@ assumes((kq = kqueue()) != -1); - EV_SET(&kev, 0, EVFILT_TIMER, EV_ADD|EV_ONESHOT, NOTE_SECONDS, 90, 0); + EV_SET(&kev, 0, EVFILT_TIMER, EV_ADD|EV_ONESHOT, NOTE_SECONDS, 60, 0); assumes(kevent(kq, &kev, 1, NULL, 0, NULL) != -1); EV_SET(&kev, SIGTERM, EVFILT_SIGNAL, EV_ADD, 0, 0, 0); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070316/0db310e4/attachment.html From source_changes at macosforge.org Mon Mar 19 10:49:44 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:44 2007 Subject: [launchd-changes] [23153] trunk/launchd/src/liblaunch.c Message-ID: <20070319174944.4E0A44ED385@cvs.opensource.apple.com> Revision: 23153 http://trac.macosforge.org/projects/launchd/changeset/23153 Author: zarzycki@apple.com Date: 2007-03-19 10:49:43 -0700 (Mon, 19 Mar 2007) Log Message: ----------- Unaligned access can slow down the machine. Modified Paths: -------------- trunk/launchd/src/liblaunch.c Modified: trunk/launchd/src/liblaunch.c =================================================================== --- trunk/launchd/src/liblaunch.c 2007-03-16 14:24:14 UTC (rev 23152) +++ trunk/launchd/src/liblaunch.c 2007-03-19 17:49:43 UTC (rev 23153) @@ -574,6 +574,8 @@ free(lh); } +#define ROUND_TO_64BIT_WORD_SIZE(x) ((x + 7) & ~7) + void launch_data_pack(launch_data_t d, void **where, size_t *len, int **fd_where, size_t *fdcnt) { @@ -613,13 +615,13 @@ o_in_w->string_len = host2big(d->string_len); *where = realloc(*where, *len + strlen(d->string) + 1); memcpy(*where + *len, d->string, strlen(d->string) + 1); - *len += strlen(d->string) + 1; + *len += ROUND_TO_64BIT_WORD_SIZE(strlen(d->string) + 1); break; case LAUNCH_DATA_OPAQUE: o_in_w->opaque_size = host2big(d->opaque_size); *where = realloc(*where, *len + d->opaque_size); memcpy(*where + *len, d->opaque, d->opaque_size); - *len += d->opaque_size; + *len += ROUND_TO_64BIT_WORD_SIZE(d->opaque_size); break; case LAUNCH_DATA_DICTIONARY: case LAUNCH_DATA_ARRAY: @@ -671,7 +673,7 @@ } r->string = conn->recvbuf + *data_offset; r->string_len = tmpcnt; - *data_offset += tmpcnt + 1; + *data_offset += ROUND_TO_64BIT_WORD_SIZE(tmpcnt + 1); break; case LAUNCH_DATA_OPAQUE: tmpcnt = big2host(r->opaque_size); @@ -681,7 +683,7 @@ } r->opaque = conn->recvbuf + *data_offset; r->opaque_size = tmpcnt; - *data_offset += tmpcnt; + *data_offset += ROUND_TO_64BIT_WORD_SIZE(tmpcnt); break; case LAUNCH_DATA_FD: if (r->fd != -1) { -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070319/905a31d3/attachment.html From source_changes at macosforge.org Mon Mar 19 11:26:21 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:44 2007 Subject: [launchd-changes] [23154] trunk/launchd/src Message-ID: <20070319182621.D19EA4ED5D6@cvs.opensource.apple.com> Revision: 23154 http://trac.macosforge.org/projects/launchd/changeset/23154 Author: zarzycki@apple.com Date: 2007-03-19 11:26:21 -0700 (Mon, 19 Mar 2007) Log Message: ----------- launchd needs exec on disk mount option Modified Paths: -------------- trunk/launchd/src/launchd.plist.5 trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/launchd_runtime.c trunk/launchd/src/liblaunch_public.h Modified: trunk/launchd/src/launchd.plist.5 =================================================================== --- trunk/launchd/src/launchd.plist.5 2007-03-19 17:49:43 UTC (rev 23153) +++ trunk/launchd/src/launchd.plist.5 2007-03-19 18:26:21 UTC (rev 23154) @@ -195,6 +195,8 @@ This optional key causes the job to be started if any one of the listed paths are modified. .It Sy QueueDirectories Much like the WatchPaths option, this key will watch the paths for modifications. The difference being that the job will only be started if the path is a directory and the directory is not empty. +.It Sy StartOnMount +This optional key causes the job to be started every time a filesystem is mounted. .It Sy StartInterval This optional key causes the job to be started every N seconds. If the system is asleep, the job will be started the next time the computer Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-19 17:49:43 UTC (rev 23153) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-19 18:26:21 UTC (rev 23154) @@ -222,7 +222,7 @@ static bool jobmgr_is_idle(jobmgr_t jm); static void jobmgr_log_stray_children(jobmgr_t jm); static void jobmgr_remove(jobmgr_t jm); -static void jobmgr_dispatch_all(jobmgr_t jm); +static void jobmgr_dispatch_all(jobmgr_t jm, bool newmounthack); static job_t job_mig_intran2(jobmgr_t jm, mach_port_t p); static void job_export_all2(jobmgr_t jm, launch_data_t where); static void jobmgr_callback(void *obj, struct kevent *kev); @@ -278,7 +278,7 @@ mode_t mask; unsigned int globargv:1, wait4debugger:1, unload_at_exit:1, stall_before_exec:1, only_once:1, currently_ignored:1, forced_peers_to_demand_mode:1, setnice:1, hopefully_exits_last:1, removal_pending:1, - wait4pipe_eof:1, sent_sigkill:1, debug_before_kill:1, weird_bootstrap:1; + wait4pipe_eof:1, sent_sigkill:1, debug_before_kill:1, weird_bootstrap:1, start_on_mount:1; char label[0]; }; @@ -766,7 +766,7 @@ } if (j->mgr->global_on_demand_cnt == 0) { - jobmgr_dispatch_all(j->mgr); + jobmgr_dispatch_all(j->mgr, false); } return true; @@ -1089,6 +1089,8 @@ case 'S': if (strcasecmp(key, LAUNCH_JOBKEY_SESSIONCREATE) == 0) { j->session_create = value; + } else if (strcasecmp(key, LAUNCH_JOBKEY_STARTONMOUNT) == 0) { + j->start_on_mount = value; } break; case 'l': @@ -1751,17 +1753,17 @@ } void -jobmgr_dispatch_all(jobmgr_t jm) +jobmgr_dispatch_all(jobmgr_t jm, bool newmounthack) { jobmgr_t jmi, jmn; job_t ji, jn; SLIST_FOREACH_SAFE(jmi, &jm->submgrs, sle, jmn) { - jobmgr_dispatch_all(jmi); + jobmgr_dispatch_all(jmi, newmounthack); } SLIST_FOREACH_SAFE(ji, &jm->jobs, sle, jn) { - job_dispatch(ji, false); + job_dispatch(ji, newmounthack ? ji->start_on_mount : false); } } @@ -1909,6 +1911,12 @@ return (void)jobmgr_assumes(jm, false); } break; + case EVFILT_FS: + if (kev->fflags & VQ_MOUNT) { + jobmgr_dispatch_all(jm, true); + } + jobmgr_dispatch_all_semaphores(jm); + break; case EVFILT_TIMER: jobmgr_log(jm, LOG_NOTICE, "Still alive with %u children.", total_children); break; @@ -3503,6 +3511,7 @@ if (!jm) { jobmgr_assumes(jmr, kevent_mod(SIGTERM, EVFILT_SIGNAL, EV_ADD, 0, 0, jmr) != -1); + jobmgr_assumes(jmr, kevent_mod(0, EVFILT_FS, EV_ADD|EV_CLEAR, VQ_MOUNT|VQ_UNMOUNT|VQ_UPDATE, 0, jmr) != -1); } if (name) { Modified: trunk/launchd/src/launchd_runtime.c =================================================================== --- trunk/launchd/src/launchd_runtime.c 2007-03-19 17:49:43 UTC (rev 23153) +++ trunk/launchd/src/launchd_runtime.c 2007-03-19 18:26:21 UTC (rev 23154) @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -888,6 +889,15 @@ record_caller_creds(&bufRequest->Head); + /* + * This is a total hack. We really need a bit in the kernel's proc + * struct to declare our intent. + */ + static int no_hang_fd = -1; + if (no_hang_fd == -1) { + no_hang_fd = _fd(open("/dev/autofs_nowait", 0)); + } + if (the_demux(&bufRequest->Head, &bufReply->Head) == FALSE) { /* XXX - also gross */ if (bufRequest->Head.msgh_id == MACH_NOTIFY_NO_SENDERS) { Modified: trunk/launchd/src/liblaunch_public.h =================================================================== --- trunk/launchd/src/liblaunch_public.h 2007-03-19 17:49:43 UTC (rev 23153) +++ trunk/launchd/src/liblaunch_public.h 2007-03-19 18:26:21 UTC (rev 23154) @@ -81,6 +81,7 @@ #define LAUNCH_JOBKEY_HOPEFULLYEXITSLAST "HopefullyExitsLast" #define LAUNCH_JOBKEY_LOWPRIORITYIO "LowPriorityIO" #define LAUNCH_JOBKEY_SESSIONCREATE "SessionCreate" +#define LAUNCH_JOBKEY_STARTONMOUNT "StartOnMount" #define LAUNCH_JOBKEY_SOFTRESOURCELIMITS "SoftResourceLimits" #define LAUNCH_JOBKEY_HARDRESOURCELIMITS "HardResourceLimits" #define LAUNCH_JOBKEY_STANDARDOUTPATH "StandardOutPath" -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070319/316beb23/attachment.html From source_changes at macosforge.org Mon Mar 19 13:51:45 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:44 2007 Subject: [launchd-changes] [23155] trunk/launchd/src/launchctl.c Message-ID: <20070319205145.432754EDA7A@cvs.opensource.apple.com> Revision: 23155 http://trac.macosforge.org/projects/launchd/changeset/23155 Author: zarzycki@apple.com Date: 2007-03-19 13:51:44 -0700 (Mon, 19 Mar 2007) Log Message: ----------- Do the dirhelper stuff right. Modified Paths: -------------- trunk/launchd/src/launchctl.c Modified: trunk/launchd/src/launchctl.c =================================================================== --- trunk/launchd/src/launchctl.c 2007-03-19 18:26:21 UTC (rev 23154) +++ trunk/launchd/src/launchctl.c 2007-03-19 20:51:44 UTC (rev 23155) @@ -1363,7 +1363,10 @@ empty_dir(_PATH_TMP, NULL); remove(_PATH_NOLOGIN); - // XXX --> RMRF_ITEMS="/var/tmp/folders.* + if (path_check("/usr/libexec/dirhelper")) { + const char *dirhelper_tool[] = { "/usr/libexec/dirhelper", "-machineBoot", NULL }; + assumes(fwexec(dirhelper_tool, true) != -1); + } // 775 root:daemon /var/run/StartupItems -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070319/c1cf10a1/attachment.html From source_changes at macosforge.org Mon Mar 19 13:52:05 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:44 2007 Subject: [launchd-changes] [23156] tags/launchd-204/ Message-ID: <20070319205205.F2AA84EDA80@cvs.opensource.apple.com> Revision: 23156 http://trac.macosforge.org/projects/launchd/changeset/23156 Author: zarzycki@apple.com Date: 2007-03-19 13:52:05 -0700 (Mon, 19 Mar 2007) Log Message: ----------- "Tagging launchd-204 from https://svn.macosforge.org/repository/launchd/trunk" Added Paths: ----------- tags/launchd-204/ Copied: tags/launchd-204 (from rev 23155, trunk) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070319/3cbc5716/attachment.html From source_changes at macosforge.org Mon Mar 19 18:28:19 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:44 2007 Subject: [launchd-changes] [23157] trunk/launchd/src/launchd_core_logic.c Message-ID: <20070320012819.3138B4EE3A3@cvs.opensource.apple.com> Revision: 23157 http://trac.macosforge.org/projects/launchd/changeset/23157 Author: zarzycki@apple.com Date: 2007-03-19 18:28:18 -0700 (Mon, 19 Mar 2007) Log Message: ----------- We never did anything interesting with struct rusage accumulation. Let's disable the code for now and save some memory. Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-19 20:52:05 UTC (rev 23156) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-20 01:28:18 UTC (rev 23157) @@ -233,6 +233,8 @@ /* static void jobmgr_log_error(jobmgr_t jm, int pri, const char *msg, ...) __attribute__((format(printf, 3, 4))); */ static void jobmgr_log_bug(jobmgr_t jm, const char *rcs_rev, const char *path, unsigned int line, const char *test); +#define DO_RUSAGE_SUMATION 0 + struct job_s { kq_callback kqjob_callback; SLIST_ENTRY(job_s) sle; @@ -244,7 +246,9 @@ SLIST_HEAD(, limititem) limits; SLIST_HEAD(, machservice) machservices; SLIST_HEAD(, semaphoreitem) semaphores; +#if DO_RUSAGE_SUMATION struct rusage ru; +#endif binpref_t j_binpref; size_t j_binpref_cnt; mach_port_t j_port; @@ -1713,6 +1717,7 @@ job_log(j, LOG_INFO, "Exited %f seconds after SIGTERM was sent", delta); } +#if DO_RUSAGE_SUMATION timeradd(&ru.ru_utime, &j->ru.ru_utime, &j->ru.ru_utime); timeradd(&ru.ru_stime, &j->ru.ru_stime, &j->ru.ru_stime); j->ru.ru_maxrss += ru.ru_maxrss; @@ -1729,6 +1734,7 @@ j->ru.ru_nsignals += ru.ru_nsignals; j->ru.ru_nvcsw += ru.ru_nvcsw; j->ru.ru_nivcsw += ru.ru_nivcsw; +#endif if (WIFEXITED(status) && WEXITSTATUS(status) != 0) { job_log(j, LOG_WARNING, "exited with exit code: %d", WEXITSTATUS(status)); -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070319/29f6f00d/attachment.html From source_changes at macosforge.org Tue Mar 20 09:07:48 2007 From: source_changes at macosforge.org (source_changes@macosforge.org) Date: Tue Oct 9 16:25:44 2007 Subject: [launchd-changes] [23158] trunk/launchd/src Message-ID: <20070320160748.09A5C4EF8BD@cvs.opensource.apple.com> Revision: 23158 http://trac.macosforge.org/projects/launchd/changeset/23158 Author: zarzycki@apple.com Date: 2007-03-20 09:07:47 -0700 (Tue, 20 Mar 2007) Log Message: ----------- Regression: launch_data_dict_lookup() no longer returns NULL outside of launchd Modified Paths: -------------- trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/launchd_core_logic.h trunk/launchd/src/launchd_unix_ipc.c Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2007-03-20 01:28:18 UTC (rev 23157) +++ trunk/launchd/src/launchd_core_logic.c 2007-03-20 16:07:47 UTC (rev 23158) @@ -315,7 +315,6 @@ static void job_callback_proc(job_t j, int flags, int fflags); static void job_callback_timer(job_t j, void *ident); static void job_callback_read(job_t j, int ident); -static launch_data_t job_export2(job_t j, bool subjobs); static job_t job_new(jobmgr_t jm, const char *label, const char *prog, const char *const *argv); static job_t job_new_spawn(job_t j, const char *label, const char *path, const char *workingdir, const char *const *argv, const char *const *env, mode_t *u_mask, bool w4d); static job_t job_new_via_mach_init(job_t j, const char *cmd, uid_t uid, bool ond); @@ -431,12 +430,6 @@ launch_data_t job_export(job_t j) { - return job_export2(j, true); -} - -launch_data_t -job_export2(job_t j, bool subjobs) -{ launch_data_t tmp, tmp2, tmp3, r = launch_data_alloc(LAUNCH_DATA_DICTIONARY); if (r == NULL) { @@ -1631,7 +1624,7 @@ SLIST_FOREACH(ji, &jm->jobs, sle) { launch_data_t tmp; - if (jobmgr_assumes(jm, (tmp = job_export2(ji, false)) != NULL)) { + if (jobmgr_assumes(jm, (tmp = job_export(ji)) != NULL)) { launch_data_dict_insert(where, tmp, ji->label); } } @@ -3808,6 +3801,12 @@ return NULL; } +bool +job_is_anonymous(job_t j) +{ + return j->anonymous; +} + pid_t job_get_pid(job_t j) { Modified: trunk/launchd/src/launchd_core_logic.h =================================================================== --- trunk/launchd/src/launchd_core_logic.h 2007-03-20 01:28:18 UTC (rev 23157) +++ trunk/launchd/src/launchd_core_logic.h 2007-03-20 16:07:47 UTC (rev 23158) @@ -41,6 +41,7 @@ job_t job_dispatch(job_t j, bool kickstart); /* returns j on success, NULL on job removal */ bool job_active(job_t j); +bool job_is_anonymous(job_t j); launch_data_t job_export(job_t j); void job_stop(job_t j); void job_checkin(job_t j); Modified: trunk/launchd/src/launchd_unix_ipc.c =================================================================== --- trunk/launchd/src/launchd_unix_ipc.c 2007-03-20 01:28:18 UTC (rev 23157) +++ trunk/launchd/src/launchd_unix_ipc.c 2007-03-20 16:07:47 UTC (rev 23158) @@ -344,7 +344,7 @@ if (data == NULL) { if (!strcmp(cmd, LAUNCH_KEY_CHECKIN)) { - if (rmc->c->j) { + if (!job_is_anonymous(rmc->c->j)) { resp = job_export(rmc->c->j); job_checkin(rmc->c->j); } else {