[launchd-changes] [23228] trunk/launchd/src
source_changes at macosforge.org
source_changes at macosforge.org
Wed Apr 18 10:30:47 PDT 2007
Revision: 23228
http://trac.macosforge.org/projects/launchd/changeset/23228
Author: zarzycki at apple.com
Date: 2007-04-18 10:30:47 -0700 (Wed, 18 Apr 2007)
Log Message:
-----------
<rdar://problem/4485670> need a way to have launchd safely send a signal to one of its child processes
Modified Paths:
--------------
trunk/launchd/src/launchd_core_logic.c
trunk/launchd/src/libvproc.c
trunk/launchd/src/libvproc_private.h
trunk/launchd/src/protocol_job.defs
Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c 2007-04-18 16:05:52 UTC (rev 23227)
+++ trunk/launchd/src/launchd_core_logic.c 2007-04-18 17:30:47 UTC (rev 23228)
@@ -4456,6 +4456,33 @@
}
kern_return_t
+job_mig_send_signal(job_t j, name_t targetlabel, int sig)
+{
+ struct ldcred ldc;
+ job_t otherj;
+
+ if (!launchd_assumes(j != NULL)) {
+ return BOOTSTRAP_NO_MEMORY;
+ }
+
+ runtime_get_caller_creds(&ldc);
+
+ if (ldc.euid != 0 && ldc.euid != getuid()) {
+ return BOOTSTRAP_NOT_PRIVILEGED;
+ }
+
+ if (!(otherj = job_find(targetlabel))) {
+ return BOOTSTRAP_UNKNOWN_SERVICE;
+ }
+
+ if (otherj->p) {
+ job_assumes(j, kill(otherj->p, sig) != -1);
+ }
+
+ return 0;
+}
+
+kern_return_t
job_mig_swap_integer(job_t j, vproc_gsk_t inkey, vproc_gsk_t outkey, int64_t inval, int64_t *outval)
{
const char *action;
Modified: trunk/launchd/src/libvproc.c
===================================================================
--- trunk/launchd/src/libvproc.c 2007-04-18 16:05:52 UTC (rev 23227)
+++ trunk/launchd/src/libvproc.c 2007-04-18 17:30:47 UTC (rev 23228)
@@ -232,6 +232,16 @@
}
vproc_err_t
+_vproc_send_signal_by_label(const char *label, int sig)
+{
+ if (vproc_mig_send_signal(bootstrap_port, (char *)label, sig) == 0) {
+ return NULL;
+ }
+
+ return _vproc_send_signal_by_label;
+}
+
+vproc_err_t
vproc_swap_integer(vproc_t vp __attribute__((unused)), vproc_gsk_t key, int64_t *inval, int64_t *outval)
{
static int64_t cached_is_managed = -1;
Modified: trunk/launchd/src/libvproc_private.h
===================================================================
--- trunk/launchd/src/libvproc_private.h 2007-04-18 16:05:52 UTC (rev 23227)
+++ trunk/launchd/src/libvproc_private.h 2007-04-18 17:30:47 UTC (rev 23228)
@@ -46,6 +46,8 @@
vproc_err_t _vproc_get_last_exit_status(int *wstatus);
vproc_err_t _vproc_set_global_on_demand(bool val);
+vproc_err_t _vproc_send_signal_by_label(const char *label, int sig);
+
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)));
Modified: trunk/launchd/src/protocol_job.defs
===================================================================
--- trunk/launchd/src/protocol_job.defs 2007-04-18 16:05:52 UTC (rev 23227)
+++ trunk/launchd/src/protocol_job.defs 2007-04-18 17:30:47 UTC (rev 23228)
@@ -68,7 +68,10 @@
__target_pid : pid_t;
__flags : uint64_t);
-skip; /* last used in 10.4 */
+routine send_signal(
+ __bs_port : job_t;
+ __label : name_t;
+ __signal : integer_t);
routine parent(
__bs_port : job_t;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070418/ebd35d37/attachment.html
More information about the launchd-changes
mailing list