[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