[launchd-changes] [22879] trunk/launchd/src
source_changes at macosforge.org
source_changes at macosforge.org
Sun Sep 24 13:01:11 PDT 2006
Revision: 22879
http://trac.macosforge.org/projects/launchd/changeset/22879
Author: zarzycki at apple.com
Date: 2006-09-24 13:01:11 -0700 (Sun, 24 Sep 2006)
Log Message:
-----------
Adopt MIG's automatic type conversion feature.
This will make our life easier in the long run.
Modified Paths:
--------------
trunk/launchd/src/bootstrap.defs
trunk/launchd/src/bootstrap_private.h
trunk/launchd/src/launchd_core_logic.c
trunk/launchd/src/launchd_core_logic.h
trunk/launchd/src/launchd_mach_ipc.c
trunk/launchd/src/launchd_runtime.c
Modified: trunk/launchd/src/bootstrap.defs
===================================================================
--- trunk/launchd/src/bootstrap.defs 2006-09-24 18:25:30 UTC (rev 22878)
+++ trunk/launchd/src/bootstrap.defs 2006-09-24 20:01:11 UTC (rev 22879)
@@ -39,11 +39,18 @@
type bootstrap_status_t = integer_t;
type bootstrap_status_array_t = ^array [] of bootstrap_status_t;
+type job_t = mach_port_t
+ intran: job_t job_mig_intran(mach_port_t)
+ outtran: mach_port_t job_mig_outtran(job_t)
+ destructor: job_mig_destructor(job_t)
+ cusertype: vproc_mig_t;
+
+
userprefix raw_;
serverprefix x_;
routine bootstrap_create_server(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
__server_cmd : cmd_t;
__server_uid : natural_t;
__on_demand : boolean_t;
@@ -53,19 +60,19 @@
skip; /* Last used in 10.4. Was bootstrap_unprivileged() */
routine bootstrap_check_in(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
__service_name : name_t;
ServerAuditToken __token : audit_token_t;
out __service_port : mach_port_move_receive_t);
routine bootstrap_register(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
ServerAuditToken __token : audit_token_t;
__service_name : name_t;
__service_port : mach_port_t);
routine bootstrap_look_up(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
ServerAuditToken __token : audit_token_t;
__service_name : name_t;
out __service_port : mach_port_send_t);
@@ -73,28 +80,28 @@
skip; /* last used in 10.4 */
routine bootstrap_parent(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
out __parent_port : mach_port_send_t);
skip; /* last used in 10.4 */
routine bootstrap_info(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
out __service_names : name_array_t, dealloc;
out __service_active : bootstrap_status_array_t, dealloc);
routine bootstrap_subset(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
__requestor_port: mach_port_t;
out __subset_port : mach_port_make_send_t);
routine bootstrap_create_service(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
__service_name : name_t;
out __service_port : mach_port_t);
routine bootstrap_transfer_subset(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
out __bs_reqport : mach_port_t;
out __bs_rcvright : mach_port_move_receive_t;
out __service_names : name_array_t, dealloc;
@@ -102,11 +109,11 @@
out __service_ports : mach_port_array_t, dealloc);
routine bootstrap_getsocket(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
out __sockpath : name_t);
routine mpm_spawn(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
ServerAuditToken __token : audit_token_t;
__chars : _internal_string_t;
__argc : uint32_t;
@@ -117,17 +124,17 @@
out __obsvr_port : mach_port_make_send_t);
routine mpm_wait(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
sreplyport __rport : mach_port_make_send_once_t;
ServerAuditToken __token : audit_token_t;
out __waitval : integer_t);
routine mpm_uncork_fork(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
ServerAuditToken __token : audit_token_t);
/* Essentially the inverse of bootstrap_unprivileged() */
routine bootstrap_get_self(
- __bs_port : mach_port_t;
+ __bs_port : job_t;
ServerAuditToken __token : audit_token_t;
out __job_port : mach_port_make_send_t);
Modified: trunk/launchd/src/bootstrap_private.h
===================================================================
--- trunk/launchd/src/bootstrap_private.h 2006-09-24 18:25:30 UTC (rev 22878)
+++ trunk/launchd/src/bootstrap_private.h 2006-09-24 20:01:11 UTC (rev 22879)
@@ -20,7 +20,14 @@
* @APPLE_APACHE_LICENSE_HEADER_END@
*/
-typedef char *_internal_string_t;
+typedef char * _internal_string_t;
+typedef mach_port_t vproc_mig_t;
+
+#ifdef bootstrap_MSG_COUNT
+/* HACK */
+#include "launchd_core_logic.h"
+#endif
+
#define SPAWN_HAS_PATH 0x0001
#define SPAWN_HAS_WDIR 0x0002
#define SPAWN_HAS_UMASK 0x0004
Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c 2006-09-24 18:25:30 UTC (rev 22878)
+++ trunk/launchd/src/launchd_core_logic.c 2006-09-24 20:01:11 UTC (rev 22879)
@@ -1373,12 +1373,17 @@
}
job_t
-job_find_by_port(mach_port_t p)
+job_mig_intran(mach_port_t p)
{
return job_find_by_port2(root_job, p);
}
void
+job_mig_destructor(job_t j __attribute__((unused)))
+{
+}
+
+void
job_export_all2(job_t j, launch_data_t where)
{
launch_data_t tmp;
Modified: trunk/launchd/src/launchd_core_logic.h
===================================================================
--- trunk/launchd/src/launchd_core_logic.h 2006-09-24 18:25:30 UTC (rev 22878)
+++ trunk/launchd/src/launchd_core_logic.h 2006-09-24 20:01:11 UTC (rev 22879)
@@ -21,6 +21,7 @@
*/
#include "bootstrap_public.h"
+#include "launch.h"
#define job_assumes(j, e) \
(__builtin_expect(!(e), 0) ? job_log_bug(j, __rcs_file_version__, __FILE__, __LINE__, #e), false : true)
@@ -43,7 +44,8 @@
job_t job_find(job_t j, const char *label);
job_t job_find_by_pid(job_t j, pid_t p, bool recurse);
-job_t job_find_by_port(mach_port_t mp);
+job_t job_mig_intran(mach_port_t mp);
+void job_mig_destructor(job_t j);
job_t job_import(launch_data_t pload);
launch_data_t job_import_bulk(launch_data_t pload);
job_t job_new(job_t p, const char *label, const char *prog, const char *const *argv, const char *stdinpath, mach_port_t);
Modified: trunk/launchd/src/launchd_mach_ipc.c
===================================================================
--- trunk/launchd/src/launchd_mach_ipc.c 2006-09-24 18:25:30 UTC (rev 22878)
+++ trunk/launchd/src/launchd_mach_ipc.c 2006-09-24 20:01:11 UTC (rev 22879)
@@ -53,13 +53,13 @@
#include <stdbool.h>
#include <syslog.h>
+#include "launchd_core_logic.h"
#include "bootstrap_public.h"
#include "bootstrap_private.h"
#include "bootstrap.h"
#include "bootstrapServer.h"
#include "launchd.h"
#include "launchd_runtime.h"
-#include "launchd_core_logic.h"
#include "launch_priv.h"
#include "launchd_unix_ipc.h"
@@ -145,11 +145,11 @@
}
kern_return_t
-x_bootstrap_create_server(mach_port_t bp, cmd_t server_cmd, uid_t server_uid, boolean_t on_demand,
+x_bootstrap_create_server(job_t j, cmd_t server_cmd, uid_t server_uid, boolean_t on_demand,
audit_token_t au_tok, mach_port_t *server_portp)
{
- job_t js, j = job_find_by_port(bp);
struct ldcred ldc;
+ job_t js;
audit_token_to_launchd_cred(au_tok, &ldc);
@@ -185,7 +185,7 @@
}
kern_return_t
-x_bootstrap_getsocket(mach_port_t bp, name_t spr)
+x_bootstrap_getsocket(job_t j, name_t spr)
{
if (!sockpath) {
return BOOTSTRAP_NO_MEMORY;
@@ -199,10 +199,10 @@
}
kern_return_t
-x_bootstrap_get_self(mach_port_t bp, audit_token_t au_tok, mach_port_t *unprivportp)
+x_bootstrap_get_self(job_t j, audit_token_t au_tok, mach_port_t *unprivportp)
{
- job_t j2, j = job_find_by_port(bp);
struct ldcred ldc;
+ job_t j2;
audit_token_to_launchd_cred(au_tok, &ldc);
@@ -229,10 +229,9 @@
kern_return_t
-x_bootstrap_check_in(mach_port_t bp, name_t servicename, audit_token_t au_tok, mach_port_t *serviceportp)
+x_bootstrap_check_in(job_t j, name_t servicename, audit_token_t au_tok, mach_port_t *serviceportp)
{
static pid_t last_warned_pid = 0;
- job_t j = job_find_by_port(bp);
struct machservice *ms;
struct ldcred ldc;
@@ -267,11 +266,11 @@
}
kern_return_t
-x_bootstrap_register(mach_port_t bp, audit_token_t au_tok, name_t servicename, mach_port_t serviceport)
+x_bootstrap_register(job_t j, audit_token_t au_tok, name_t servicename, mach_port_t serviceport)
{
- job_t j2, j = job_find_by_port(bp);
struct machservice *ms;
struct ldcred ldc;
+ job_t j2;
audit_token_to_launchd_cred(au_tok, &ldc);
@@ -316,9 +315,8 @@
}
kern_return_t
-x_bootstrap_look_up(mach_port_t bp, audit_token_t au_tok, name_t servicename, mach_port_t *serviceportp, mach_msg_type_name_t *ptype)
+x_bootstrap_look_up(job_t j, audit_token_t au_tok, name_t servicename, mach_port_t *serviceportp, mach_msg_type_name_t *ptype)
{
- job_t j = job_find_by_port(bp);
struct machservice *ms;
struct ldcred ldc;
@@ -347,10 +345,8 @@
}
kern_return_t
-x_bootstrap_parent(mach_port_t bp, mach_port_t *parentport, mach_msg_type_name_t *pptype)
+x_bootstrap_parent(job_t j, mach_port_t *parentport, mach_msg_type_name_t *pptype)
{
- job_t j = job_find_by_port(bp);
-
job_log(j, LOG_DEBUG, "Requested parent bootstrap port");
j = job_get_bs(j);
@@ -403,12 +399,12 @@
}
kern_return_t
-x_bootstrap_info(mach_port_t bp, name_array_t *servicenamesp, unsigned int *servicenames_cnt,
+x_bootstrap_info(job_t j, name_array_t *servicenamesp, unsigned int *servicenames_cnt,
bootstrap_status_array_t *serviceactivesp, unsigned int *serviceactives_cnt)
{
struct x_bootstrap_info_copyservices_cb info_resp = { NULL, NULL, NULL, NULL, 0 };
- job_t ji, j = job_find_by_port(bp);
unsigned int cnt = 0;
+ job_t ji;
for (ji = j; ji; ji = job_parent(ji))
job_foreach_service(ji, x_bootstrap_info_countservices, &cnt, false);
@@ -446,13 +442,12 @@
}
kern_return_t
-x_bootstrap_transfer_subset(mach_port_t bp, mach_port_t *reqport, mach_port_t *rcvright,
+x_bootstrap_transfer_subset(job_t j, mach_port_t *reqport, mach_port_t *rcvright,
name_array_t *servicenamesp, unsigned int *servicenames_cnt,
vm_offset_t *service_pids, mach_msg_type_number_t *service_pidsCnt,
mach_port_array_t *ports, unsigned int *ports_cnt)
{
struct x_bootstrap_info_copyservices_cb info_resp = { NULL, NULL, NULL, NULL, 0 };
- job_t j = job_find_by_port(bp);
unsigned int cnt = 0;
if (getpid() != 1) {
@@ -516,16 +511,15 @@
}
kern_return_t
-x_bootstrap_subset(mach_port_t bp, mach_port_t requestorport, mach_port_t *subsetportp)
+x_bootstrap_subset(job_t j, mach_port_t requestorport, mach_port_t *subsetportp)
{
- job_t js, j = job_find_by_port(bp);
int bsdepth = 0;
+ job_t js = j;
- while ((j = job_parent(j)) != NULL)
+ while ((js = job_parent(js)) != NULL) {
bsdepth++;
+ }
- j = job_find_by_port(bp);
-
/* Since we use recursion, we need an artificial depth for subsets */
if (bsdepth > 100) {
job_log(j, LOG_ERR, "Mach sub-bootstrap create request failed. Depth greater than: %d", bsdepth);
@@ -544,9 +538,8 @@
}
kern_return_t
-x_bootstrap_create_service(mach_port_t bp, name_t servicename, mach_port_t *serviceportp)
+x_bootstrap_create_service(job_t j, name_t servicename, mach_port_t *serviceportp)
{
- job_t j = job_find_by_port(bp);
struct machservice *ms;
if (job_prog(j)[0] == '\0') {
@@ -577,9 +570,8 @@
}
kern_return_t
-x_mpm_wait(mach_port_t bp, mach_port_t srp, audit_token_t au_tok, integer_t *waitstatus)
+x_mpm_wait(job_t j, mach_port_t srp, audit_token_t au_tok, integer_t *waitstatus)
{
- job_t j = job_find_by_port(bp);
#if 0
struct ldcred ldc;
audit_token_to_launchd_cred(au_tok, &ldc);
@@ -588,10 +580,8 @@
}
kern_return_t
-x_mpm_uncork_fork(mach_port_t bp, audit_token_t au_tok)
+x_mpm_uncork_fork(job_t j, audit_token_t au_tok)
{
- job_t j = job_find_by_port(bp);
-
if (!j) {
return BOOTSTRAP_NOT_PRIVILEGED;
}
@@ -602,12 +592,12 @@
}
kern_return_t
-x_mpm_spawn(mach_port_t bp, audit_token_t au_tok,
+x_mpm_spawn(job_t j, audit_token_t au_tok,
_internal_string_t charbuf, mach_msg_type_number_t charbuf_cnt,
uint32_t argc, uint32_t envc, uint64_t flags, uint16_t mig_umask,
pid_t *child_pid, mach_port_t *obsvr_port)
{
- job_t jr, j = job_find_by_port(bp);
+ job_t jr;
struct ldcred ldc;
size_t offset = 0;
char *tmpp;
Modified: trunk/launchd/src/launchd_runtime.c
===================================================================
--- trunk/launchd/src/launchd_runtime.c 2006-09-24 18:25:30 UTC (rev 22878)
+++ trunk/launchd/src/launchd_runtime.c 2006-09-24 20:01:11 UTC (rev 22879)
@@ -158,7 +158,7 @@
continue;
}
if (status.mps_msgcount) {
- EV_SET(&kev, members[i], EVFILT_MACHPORT, 0, 0, 0, job_find_by_port(members[i]));
+ EV_SET(&kev, members[i], EVFILT_MACHPORT, 0, 0, 0, job_mig_intran(members[i]));
(*((kq_callback *)kev.udata))(kev.udata, &kev);
/* the callback may have tainted our ability to continue this for loop */
break;
@@ -426,7 +426,7 @@
kern_return_t
do_mach_notify_no_senders(mach_port_t notify, mach_port_mscount_t mscount)
{
- job_t j = job_find_by_port(notify);
+ job_t j = job_mig_intran(notify);
/* This message is sent to us when the last customer of one of our
* objects goes away.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20060924/4ce3d4d5/attachment.html
More information about the launchd-changes
mailing list