Revision: 22910 http://trac.macosforge.org/projects/launchd/changeset/22910 Author: zarzycki@apple.com Date: 2006-10-23 10:46:23 -0700 (Mon, 23 Oct 2006) Log Message: ----------- First stage in the activation of the vproc APIs. Modified Paths: -------------- trunk/launchd/src/Makefile.am trunk/launchd/src/Makefile.in trunk/launchd/src/launchctl.c trunk/launchd/src/launchd.c trunk/launchd/src/launchd_core_logic.c trunk/launchd/src/liblaunch.c trunk/launchd/src/protocol_job.defs trunk/launchd/src/protocol_job_reply.defs trunk/launchd/src/vproc.h Added Paths: ----------- trunk/launchd/src/libbootstrap.c trunk/launchd/src/libvproc.c trunk/launchd/src/vproc_priv.h Removed Paths: ------------- trunk/launchd/src/bootstrap_private.h trunk/launchd/src/bootstrap_public.c trunk/launchd/src/protocol_legacy.defs Modified: trunk/launchd/src/Makefile.am =================================================================== --- trunk/launchd/src/Makefile.am 2006-10-20 23:24:08 UTC (rev 22909) +++ trunk/launchd/src/Makefile.am 2006-10-23 17:46:23 UTC (rev 22910) @@ -1,22 +1,22 @@ AM_CFLAGS = -no-cpp-precomp -F/System/Library/PrivateFrameworks -Wall -Wextra -Waggregate-return -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror -D__MigTypeCheck=1 -CLEANFILES = bootstrap.h bootstrapServer.c bootstrapUser.c bootstrapServer.h \ +CLEANFILES = protocol_vproc.h protocol_vprocServer.c protocol_vprocUser.c protocol_vprocServer.h \ launchd_internal.h launchd_internalServer.h launchd_internalServer.h launchd_internalUser.c \ notifyServer.c notifyServer.h job_replyUser.c job_reply.h -bootstrap.h bootstrapServer.c bootstrapUser.c bootstrapServer.h: $(srcdir)/protocol_legacy.defs - mig $(MIGFLAGS) -sheader bootstrapServer.h $(srcdir)/protocol_legacy.defs +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 if LIBS_ONLY noinst_LIBRARIES = liblaunch.a liblaunch_profile.a -liblaunch_a_SOURCES = liblaunch.c bootstrap_public.c +liblaunch_a_SOURCES = liblaunch.c libvproc.c liblaunch_profile_a_CFLAGS = -pg $(AM_CFLAGS) -liblaunch_profile_a_SOURCES = liblaunch.c bootstrap_public.c +liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c -$(srcdir)/bootstrap_public.c:: bootstrap.h +$(srcdir)/libvproc.c:: protocol_vproc.h install-data-hook: mkdir -p $(DESTDIR)/usr/local/lib/system @@ -43,10 +43,10 @@ launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) -Wno-unused-parameter -fvisibility=hidden launchd_LDFLAGS = -lbsm -launchd_SOURCES = launchd.c launchd_core_logic.c launchd_unix_ipc.c init.c bootstrapServer.c notifyServer.c launchd_internalUser.c launchd_internalServer.c job_replyUser.c launchd_runtime.c +launchd_SOURCES = launchd.c launchd_core_logic.c launchd_unix_ipc.c init.c protocol_vprocServer.c notifyServer.c launchd_internalUser.c launchd_internalServer.c job_replyUser.c launchd_runtime.c launchd_runtime.c:: notifyServer.h launchd_internal.h -launchd_core_logic.c:: bootstrap.h job_reply.h bootstrap.h bootstrapServer.h +launchd_core_logic.c:: protocol_vproc.h job_reply.h protocol_vprocServer.h launchproxy_LDFLAGS = -weak_framework Security Modified: trunk/launchd/src/Makefile.in =================================================================== --- trunk/launchd/src/Makefile.in 2006-10-20 23:24:08 UTC (rev 22909) +++ trunk/launchd/src/Makefile.in 2006-10-23 17:46:23 UTC (rev 22910) @@ -56,16 +56,16 @@ ARFLAGS = cru liblaunch_a_AR = $(AR) $(ARFLAGS) liblaunch_a_LIBADD = -am__liblaunch_a_SOURCES_DIST = liblaunch.c bootstrap_public.c +am__liblaunch_a_SOURCES_DIST = liblaunch.c libvproc.c @LIBS_ONLY_TRUE@am_liblaunch_a_OBJECTS = liblaunch.$(OBJEXT) \ -@LIBS_ONLY_TRUE@ bootstrap_public.$(OBJEXT) +@LIBS_ONLY_TRUE@ libvproc.$(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 bootstrap_public.c +am__liblaunch_profile_a_SOURCES_DIST = liblaunch.c libvproc.c @LIBS_ONLY_TRUE@am_liblaunch_profile_a_OBJECTS = \ @LIBS_ONLY_TRUE@ liblaunch_profile_a-liblaunch.$(OBJEXT) \ -@LIBS_ONLY_TRUE@ liblaunch_profile_a-bootstrap_public.$(OBJEXT) +@LIBS_ONLY_TRUE@ liblaunch_profile_a-libvproc.$(OBJEXT) liblaunch_profile_a_OBJECTS = $(am_liblaunch_profile_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libexecdir)" \ "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(sbindir)" \ @@ -86,14 +86,14 @@ launchctl_OBJECTS = launchctl-launchctl.$(OBJEXT) launchctl_LDADD = $(LDADD) am__launchd_SOURCES_DIST = launchd.c launchd_core_logic.c \ - launchd_unix_ipc.c init.c bootstrapServer.c notifyServer.c \ - launchd_internalUser.c launchd_internalServer.c \ + launchd_unix_ipc.c init.c protocol_vprocServer.c \ + notifyServer.c launchd_internalUser.c launchd_internalServer.c \ job_replyUser.c launchd_runtime.c @LIBS_ONLY_FALSE@am_launchd_OBJECTS = launchd-launchd.$(OBJEXT) \ @LIBS_ONLY_FALSE@ launchd-launchd_core_logic.$(OBJEXT) \ @LIBS_ONLY_FALSE@ launchd-launchd_unix_ipc.$(OBJEXT) \ @LIBS_ONLY_FALSE@ launchd-init.$(OBJEXT) \ -@LIBS_ONLY_FALSE@ launchd-bootstrapServer.$(OBJEXT) \ +@LIBS_ONLY_FALSE@ launchd-protocol_vprocServer.$(OBJEXT) \ @LIBS_ONLY_FALSE@ launchd-notifyServer.$(OBJEXT) \ @LIBS_ONLY_FALSE@ launchd-launchd_internalUser.$(OBJEXT) \ @LIBS_ONLY_FALSE@ launchd-launchd_internalServer.$(OBJEXT) \ @@ -222,14 +222,14 @@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AM_CFLAGS = -no-cpp-precomp -F/System/Library/PrivateFrameworks -Wall -Wextra -Waggregate-return -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror -D__MigTypeCheck=1 -CLEANFILES = bootstrap.h bootstrapServer.c bootstrapUser.c bootstrapServer.h \ +CLEANFILES = protocol_vproc.h protocol_vprocServer.c protocol_vprocUser.c protocol_vprocServer.h \ launchd_internal.h launchd_internalServer.h launchd_internalServer.h launchd_internalUser.c \ 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 bootstrap_public.c +@LIBS_ONLY_TRUE@liblaunch_a_SOURCES = liblaunch.c libvproc.c @LIBS_ONLY_TRUE@liblaunch_profile_a_CFLAGS = -pg $(AM_CFLAGS) -@LIBS_ONLY_TRUE@liblaunch_profile_a_SOURCES = liblaunch.c bootstrap_public.c +@LIBS_ONLY_TRUE@liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c @LIBS_ONLY_FALSE@sbin_SCRIPTS = service @LIBS_ONLY_FALSE@sysconf_DATA = hostconfig rc.common rc.netboot rc.shutdown @LIBS_ONLY_FALSE@launchctl_CFLAGS = $(AM_CFLAGS) -fvisibility=hidden -I/System/Library/Frameworks/System.framework/PrivateHeaders @@ -239,7 +239,7 @@ @LIBS_ONLY_FALSE@SystemStarter_SOURCES = StartupItems.c IPC.c SystemStarter.c @LIBS_ONLY_FALSE@launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) -Wno-unused-parameter -fvisibility=hidden @LIBS_ONLY_FALSE@launchd_LDFLAGS = -lbsm -@LIBS_ONLY_FALSE@launchd_SOURCES = launchd.c launchd_core_logic.c launchd_unix_ipc.c init.c bootstrapServer.c notifyServer.c launchd_internalUser.c launchd_internalServer.c job_replyUser.c launchd_runtime.c +@LIBS_ONLY_FALSE@launchd_SOURCES = launchd.c launchd_core_logic.c launchd_unix_ipc.c init.c protocol_vprocServer.c notifyServer.c launchd_internalUser.c launchd_internalServer.c job_replyUser.c launchd_runtime.c @LIBS_ONLY_FALSE@launchproxy_LDFLAGS = -weak_framework Security @LIBS_ONLY_FALSE@man1_MANS = wait4path.1 launchctl.1 @LIBS_ONLY_FALSE@man5_MANS = launchd.plist.5 launchd.conf.5 @@ -420,9 +420,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)/bootstrap_public.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchctl-launchctl.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-bootstrapServer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-init.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@ @@ -432,10 +430,12 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-launchd_runtime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-launchd_unix_ipc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-notifyServer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-protocol_vprocServer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchproxy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-bootstrap_public.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@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvproc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wait4path.Po@am__quote@ .c.o: @@ -466,19 +466,19 @@ @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-liblaunch.obj `if test -f 'liblaunch.c'; then $(CYGPATH_W) 'liblaunch.c'; else $(CYGPATH_W) '$(srcdir)/liblaunch.c'; fi` -liblaunch_profile_a-bootstrap_public.o: bootstrap_public.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -MT liblaunch_profile_a-bootstrap_public.o -MD -MP -MF "$(DEPDIR)/liblaunch_profile_a-bootstrap_public.Tpo" -c -o liblaunch_profile_a-bootstrap_public.o `test -f 'bootstrap_public.c' || echo '$(srcdir)/'`bootstrap_public.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liblaunch_profile_a-bootstrap_public.Tpo" "$(DEPDIR)/liblaunch_profile_a-bootstrap_public.Po"; else rm -f "$(DEPDIR)/liblaunch_profile_a-bootstrap_public.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bootstrap_public.c' object='liblaunch_profile_a-bootstrap_public.o' libtool=no @AMDEPBACKSLASH@ +liblaunch_profile_a-libvproc.o: libvproc.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -MT liblaunch_profile_a-libvproc.o -MD -MP -MF "$(DEPDIR)/liblaunch_profile_a-libvproc.Tpo" -c -o liblaunch_profile_a-libvproc.o `test -f 'libvproc.c' || echo '$(srcdir)/'`libvproc.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liblaunch_profile_a-libvproc.Tpo" "$(DEPDIR)/liblaunch_profile_a-libvproc.Po"; else rm -f "$(DEPDIR)/liblaunch_profile_a-libvproc.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libvproc.c' object='liblaunch_profile_a-libvproc.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-bootstrap_public.o `test -f 'bootstrap_public.c' || echo '$(srcdir)/'`bootstrap_public.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -c -o liblaunch_profile_a-libvproc.o `test -f 'libvproc.c' || echo '$(srcdir)/'`libvproc.c -liblaunch_profile_a-bootstrap_public.obj: bootstrap_public.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -MT liblaunch_profile_a-bootstrap_public.obj -MD -MP -MF "$(DEPDIR)/liblaunch_profile_a-bootstrap_public.Tpo" -c -o liblaunch_profile_a-bootstrap_public.obj `if test -f 'bootstrap_public.c'; then $(CYGPATH_W) 'bootstrap_public.c'; else $(CYGPATH_W) '$(srcdir)/bootstrap_public.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liblaunch_profile_a-bootstrap_public.Tpo" "$(DEPDIR)/liblaunch_profile_a-bootstrap_public.Po"; else rm -f "$(DEPDIR)/liblaunch_profile_a-bootstrap_public.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bootstrap_public.c' object='liblaunch_profile_a-bootstrap_public.obj' libtool=no @AMDEPBACKSLASH@ +liblaunch_profile_a-libvproc.obj: libvproc.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -MT liblaunch_profile_a-libvproc.obj -MD -MP -MF "$(DEPDIR)/liblaunch_profile_a-libvproc.Tpo" -c -o liblaunch_profile_a-libvproc.obj `if test -f 'libvproc.c'; then $(CYGPATH_W) 'libvproc.c'; else $(CYGPATH_W) '$(srcdir)/libvproc.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liblaunch_profile_a-libvproc.Tpo" "$(DEPDIR)/liblaunch_profile_a-libvproc.Po"; else rm -f "$(DEPDIR)/liblaunch_profile_a-libvproc.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libvproc.c' object='liblaunch_profile_a-libvproc.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-bootstrap_public.obj `if test -f 'bootstrap_public.c'; then $(CYGPATH_W) 'bootstrap_public.c'; else $(CYGPATH_W) '$(srcdir)/bootstrap_public.c'; fi` +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -c -o liblaunch_profile_a-libvproc.obj `if test -f 'libvproc.c'; then $(CYGPATH_W) 'libvproc.c'; else $(CYGPATH_W) '$(srcdir)/libvproc.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; \ @@ -592,19 +592,19 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -c -o launchd-init.obj `if test -f 'init.c'; then $(CYGPATH_W) 'init.c'; else $(CYGPATH_W) '$(srcdir)/init.c'; fi` -launchd-bootstrapServer.o: bootstrapServer.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -MT launchd-bootstrapServer.o -MD -MP -MF "$(DEPDIR)/launchd-bootstrapServer.Tpo" -c -o launchd-bootstrapServer.o `test -f 'bootstrapServer.c' || echo '$(srcdir)/'`bootstrapServer.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/launchd-bootstrapServer.Tpo" "$(DEPDIR)/launchd-bootstrapServer.Po"; else rm -f "$(DEPDIR)/launchd-bootstrapServer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bootstrapServer.c' object='launchd-bootstrapServer.o' libtool=no @AMDEPBACKSLASH@ +launchd-protocol_vprocServer.o: protocol_vprocServer.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -MT launchd-protocol_vprocServer.o -MD -MP -MF "$(DEPDIR)/launchd-protocol_vprocServer.Tpo" -c -o launchd-protocol_vprocServer.o `test -f 'protocol_vprocServer.c' || echo '$(srcdir)/'`protocol_vprocServer.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/launchd-protocol_vprocServer.Tpo" "$(DEPDIR)/launchd-protocol_vprocServer.Po"; else rm -f "$(DEPDIR)/launchd-protocol_vprocServer.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='protocol_vprocServer.c' object='launchd-protocol_vprocServer.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) $(launchd_CFLAGS) $(CFLAGS) -c -o launchd-bootstrapServer.o `test -f 'bootstrapServer.c' || echo '$(srcdir)/'`bootstrapServer.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -c -o launchd-protocol_vprocServer.o `test -f 'protocol_vprocServer.c' || echo '$(srcdir)/'`protocol_vprocServer.c -launchd-bootstrapServer.obj: bootstrapServer.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -MT launchd-bootstrapServer.obj -MD -MP -MF "$(DEPDIR)/launchd-bootstrapServer.Tpo" -c -o launchd-bootstrapServer.obj `if test -f 'bootstrapServer.c'; then $(CYGPATH_W) 'bootstrapServer.c'; else $(CYGPATH_W) '$(srcdir)/bootstrapServer.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/launchd-bootstrapServer.Tpo" "$(DEPDIR)/launchd-bootstrapServer.Po"; else rm -f "$(DEPDIR)/launchd-bootstrapServer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bootstrapServer.c' object='launchd-bootstrapServer.obj' libtool=no @AMDEPBACKSLASH@ +launchd-protocol_vprocServer.obj: protocol_vprocServer.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -MT launchd-protocol_vprocServer.obj -MD -MP -MF "$(DEPDIR)/launchd-protocol_vprocServer.Tpo" -c -o launchd-protocol_vprocServer.obj `if test -f 'protocol_vprocServer.c'; then $(CYGPATH_W) 'protocol_vprocServer.c'; else $(CYGPATH_W) '$(srcdir)/protocol_vprocServer.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/launchd-protocol_vprocServer.Tpo" "$(DEPDIR)/launchd-protocol_vprocServer.Po"; else rm -f "$(DEPDIR)/launchd-protocol_vprocServer.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='protocol_vprocServer.c' object='launchd-protocol_vprocServer.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) $(launchd_CFLAGS) $(CFLAGS) -c -o launchd-bootstrapServer.obj `if test -f 'bootstrapServer.c'; then $(CYGPATH_W) 'bootstrapServer.c'; else $(CYGPATH_W) '$(srcdir)/bootstrapServer.c'; fi` +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -c -o launchd-protocol_vprocServer.obj `if test -f 'protocol_vprocServer.c'; then $(CYGPATH_W) 'protocol_vprocServer.c'; else $(CYGPATH_W) '$(srcdir)/protocol_vprocServer.c'; fi` launchd-notifyServer.o: notifyServer.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(launchd_CFLAGS) $(CFLAGS) -MT launchd-notifyServer.o -MD -MP -MF "$(DEPDIR)/launchd-notifyServer.Tpo" -c -o launchd-notifyServer.o `test -f 'notifyServer.c' || echo '$(srcdir)/'`notifyServer.c; \ @@ -1013,10 +1013,10 @@ uninstall-sbinSCRIPTS uninstall-sysconfDATA -bootstrap.h bootstrapServer.c bootstrapUser.c bootstrapServer.h: $(srcdir)/protocol_legacy.defs - mig $(MIGFLAGS) -sheader bootstrapServer.h $(srcdir)/protocol_legacy.defs +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 -@LIBS_ONLY_TRUE@$(srcdir)/bootstrap_public.c:: bootstrap.h +@LIBS_ONLY_TRUE@$(srcdir)/libvproc.c:: protocol_vproc.h @LIBS_ONLY_TRUE@install-data-hook: @LIBS_ONLY_TRUE@ mkdir -p $(DESTDIR)/usr/local/lib/system @@ -1025,7 +1025,7 @@ @LIBS_ONLY_TRUE@ cp liblaunch_profile.a $(DESTDIR)/usr/local/lib/system/liblaunch_profile.a @LIBS_ONLY_FALSE@launchd_runtime.c:: notifyServer.h launchd_internal.h -@LIBS_ONLY_FALSE@launchd_core_logic.c:: bootstrap.h job_reply.h bootstrap.h bootstrapServer.h +@LIBS_ONLY_FALSE@launchd_core_logic.c:: protocol_vproc.h job_reply.h protocol_vprocServer.h @LIBS_ONLY_FALSE@notifyServer.c notifyServer.h: /usr/include/mach/notify.defs @LIBS_ONLY_FALSE@ mig $(MIGFLAGS) -header /dev/null -user /dev/null -sheader notifyServer.h /usr/include/mach/notify.defs Deleted: trunk/launchd/src/bootstrap_private.h =================================================================== --- trunk/launchd/src/bootstrap_private.h 2006-10-20 23:24:08 UTC (rev 22909) +++ trunk/launchd/src/bootstrap_private.h 2006-10-23 17:46:23 UTC (rev 22910) @@ -1,62 +0,0 @@ -#ifndef _BOOTSTRAP_PRIVATE_H_ -#define _BOOTSTRAP_PRIVATE_H_ -/* - * Copyright (c) 2006 Apple Computer, Inc. All rights reserved. - * - * @APPLE_APACHE_LICENSE_HEADER_START@ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @APPLE_APACHE_LICENSE_HEADER_END@ - */ - -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 -#define SPAWN_WANTS_WAIT4DEBUGGER 0x0008 -#define SPAWN_WANTS_FORCE_PPC 0x0010 - -kern_return_t -_launchd_to_launchd(mach_port_t bp, mach_port_t *reqport, mach_port_t *rcvright, - name_array_t *service_names, mach_msg_type_number_t *service_namesCnt, - mach_port_array_t *ports, mach_msg_type_number_t *portCnt); - -kern_return_t bootstrap_getsocket(mach_port_t bp, name_t); - - -kern_return_t -bootstrap_look_up_array( - mach_port_t bp, - name_array_t service_names, - mach_msg_type_number_t service_namesCnt, - mach_port_array_t *sps, - mach_msg_type_number_t *service_portsCnt, - boolean_t *all_services_known); - -kern_return_t -bootstrap_info( - mach_port_t bp, - name_array_t *service_names, - mach_msg_type_number_t *service_namesCnt, - bootstrap_status_array_t *service_active, - mach_msg_type_number_t *service_activeCnt); - -#endif Deleted: trunk/launchd/src/bootstrap_public.c =================================================================== --- trunk/launchd/src/bootstrap_public.c 2006-10-20 23:24:08 UTC (rev 22909) +++ trunk/launchd/src/bootstrap_public.c 2006-10-23 17:46:23 UTC (rev 22910) @@ -1,291 +0,0 @@ -/* - * Copyright (c) 1999-2005 Apple Computer, Inc. All rights reserved. - * - * @APPLE_APACHE_LICENSE_HEADER_START@ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @APPLE_APACHE_LICENSE_HEADER_END@ - */ - -#include <mach/mach.h> -#include <mach/vm_map.h> - -#include "bootstrap_public.h" -#include "bootstrap_private.h" -#include "launch.h" -#include "launch_priv.h" - -#define mig_external static -#include "bootstrap.h" -#include "bootstrapUser.c" - -#include <sys/param.h> -#include <stdlib.h> -#include <errno.h> - -kern_return_t -_launchd_to_launchd(mach_port_t bp, mach_port_t *reqport, mach_port_t *rcvright, - name_array_t *service_names, mach_msg_type_number_t *service_namesCnt, - mach_port_array_t *ports, mach_msg_type_number_t *portCnt) -{ - return vproc_mig_transfer_subset(bp, reqport, rcvright, service_names, service_namesCnt, ports, portCnt); -} - -pid_t -_spawn_via_launchd(const char *label, const char *const *argv, const struct spawn_via_launchd_attr *spawn_attrs, int struct_version) -{ - kern_return_t kr; - const char *const *tmpp; - size_t len, buf_len = strlen(label) + 1; - char *buf = strdup(label); - uint64_t flags = 0; - uint32_t argc = 0; - uint32_t envc = 0; - pid_t p = -1; - mode_t u_mask = CMASK; - mach_port_t obsvr_port = MACH_PORT_NULL; - - for (tmpp = argv; *tmpp; tmpp++) { - argc++; - len = strlen(*tmpp) + 1; - buf = reallocf(buf, buf_len + len); - strcpy(buf + buf_len, *tmpp); - buf_len += len; - } - - if (spawn_attrs) switch (struct_version) { - case 0: - if (spawn_attrs->spawn_flags & SPAWN_VIA_LAUNCHD_STOPPED) { - flags |= SPAWN_WANTS_WAIT4DEBUGGER; - } - if (spawn_attrs->spawn_flags & SPAWN_VIA_LAUNCHD_FORCE_PPC) { - flags |= SPAWN_WANTS_FORCE_PPC; - } - - if (spawn_attrs->spawn_env) { - for (tmpp = spawn_attrs->spawn_env; *tmpp; tmpp++) { - envc++; - len = strlen(*tmpp) + 1; - buf = reallocf(buf, buf_len + len); - strcpy(buf + buf_len, *tmpp); - buf_len += len; - } - } - - if (spawn_attrs->spawn_path) { - flags |= SPAWN_HAS_PATH; - len = strlen(spawn_attrs->spawn_path) + 1; - buf = reallocf(buf, buf_len + len); - strcpy(buf + buf_len, spawn_attrs->spawn_path); - buf_len += len; - } - - if (spawn_attrs->spawn_chdir) { - flags |= SPAWN_HAS_WDIR; - len = strlen(spawn_attrs->spawn_chdir) + 1; - buf = reallocf(buf, buf_len + len); - strcpy(buf + buf_len, spawn_attrs->spawn_chdir); - buf_len += len; - } - - if (spawn_attrs->spawn_umask) { - flags |= SPAWN_HAS_UMASK; - u_mask = *spawn_attrs->spawn_umask; - } - - break; - default: - break; - } - - kr = vproc_mig_spawn(bootstrap_port, buf, buf_len, argc, envc, flags, u_mask, &p, &obsvr_port); - - free(buf); - - if (kr == BOOTSTRAP_SUCCESS) { - if (spawn_attrs && spawn_attrs->spawn_observer_port) { - *spawn_attrs->spawn_observer_port = obsvr_port; - } else { - mach_port_deallocate(mach_task_self(), obsvr_port); - } - return p; - } - - switch (kr) { - case BOOTSTRAP_NOT_PRIVILEGED: - errno = EPERM; break; - case BOOTSTRAP_NO_MEMORY: - errno = ENOMEM; break; - default: - errno = EINVAL; break; - } - return -1; -} - -kern_return_t -mpm_wait(mach_port_t ajob, int *wstatus) -{ - return vproc_mig_wait(ajob, wstatus); -} - -kern_return_t -mpm_uncork_fork(mach_port_t ajob) -{ - return vproc_mig_uncork_fork(ajob); -} - -kern_return_t -bootstrap_create_server(mach_port_t bp, cmd_t server_cmd, uid_t server_uid, boolean_t on_demand, mach_port_t *server_port) -{ - return vproc_mig_create_server(bp, server_cmd, server_uid, on_demand, server_port); -} - -kern_return_t -bootstrap_subset(mach_port_t bp, mach_port_t requestor_port, mach_port_t *subset_port) -{ - return vproc_mig_subset(bp, requestor_port, subset_port); -} - -kern_return_t -bootstrap_unprivileged(mach_port_t bp, mach_port_t *unpriv_port) -{ - kern_return_t kr; - - *unpriv_port = MACH_PORT_NULL; - - kr = mach_port_mod_refs(mach_task_self(), bp, MACH_PORT_RIGHT_SEND, 1); - - if (kr == KERN_SUCCESS) { - *unpriv_port = bp; - } - - return kr; -} - -kern_return_t -bootstrap_getsocket(mach_port_t bp, name_t sockpath) -{ - return vproc_mig_getsocket(bp, sockpath); -} - -kern_return_t -bootstrap_parent(mach_port_t bp, mach_port_t *parent_port) -{ - return vproc_mig_parent(bp, parent_port); -} - -kern_return_t -bootstrap_register(mach_port_t bp, name_t service_name, mach_port_t sp) -{ - return vproc_mig_register(bp, service_name, sp); -} - -kern_return_t -bootstrap_create_service(mach_port_t bp, name_t service_name, mach_port_t *sp) -{ - return vproc_mig_create_service(bp, service_name, sp); -} - -kern_return_t -bootstrap_check_in(mach_port_t bp, name_t service_name, mach_port_t *sp) -{ - return vproc_mig_check_in(bp, service_name, sp); -} - -kern_return_t -bootstrap_look_up(mach_port_t bp, name_t service_name, mach_port_t *sp) -{ - return vproc_mig_look_up(bp, service_name, sp); -} - -kern_return_t -bootstrap_look_up_array(mach_port_t bp, - name_array_t names, mach_msg_type_number_t name_cnt, - mach_port_array_t *ports, mach_msg_type_number_t *port_cnt, - boolean_t *all) -{ - unsigned int i; - kern_return_t r; - - if (name_cnt > BOOTSTRAP_MAX_LOOKUP_COUNT) - return BOOTSTRAP_BAD_COUNT; - - *port_cnt = name_cnt; - - r = vm_allocate(mach_task_self(), (vm_address_t *)&ports, name_cnt * sizeof(mach_port_t), true); - - if (r != KERN_SUCCESS) - return r; - - *all = true; - - for (i = 0; i < name_cnt; i++) { - if (bootstrap_look_up(bp, names[i], &((*ports)[i])) == BOOTSTRAP_SUCCESS) - continue; - *all = false; - ports[i] = MACH_PORT_NULL; - } - - return BOOTSTRAP_SUCCESS; -} - -kern_return_t -bootstrap_status(mach_port_t bp, name_t service_name, bootstrap_status_t *service_active) -{ - mach_port_t p; - - if (bootstrap_check_in(bp, service_name, &p) == BOOTSTRAP_SUCCESS) { - mach_port_mod_refs(mach_task_self(), p, MACH_PORT_RIGHT_RECEIVE, -1); - *service_active = BOOTSTRAP_STATUS_ON_DEMAND; - return BOOTSTRAP_SUCCESS; - } else if (bootstrap_look_up(bp, service_name, &p) == BOOTSTRAP_SUCCESS) { - mach_port_deallocate(mach_task_self(), p); - *service_active = BOOTSTRAP_STATUS_ACTIVE; - return BOOTSTRAP_SUCCESS; - } - - return BOOTSTRAP_UNKNOWN_SERVICE; -} - -kern_return_t -bootstrap_info(mach_port_t bp, - name_array_t *service_names, mach_msg_type_number_t *service_namesCnt, - bootstrap_status_array_t *service_active, mach_msg_type_number_t *service_activeCnt) -{ - return vproc_mig_info(bp, service_names, service_namesCnt, - service_active, service_activeCnt); -} - - -const char * -bootstrap_strerror(kern_return_t r) -{ - switch (r) { - case BOOTSTRAP_SUCCESS: - return "Success"; - case BOOTSTRAP_NOT_PRIVILEGED: - return "Permission denied"; - case BOOTSTRAP_NAME_IN_USE: - case BOOTSTRAP_SERVICE_ACTIVE: - return "Service name already exists"; - case BOOTSTRAP_UNKNOWN_SERVICE: - return "Unknown service name"; - case BOOTSTRAP_BAD_COUNT: - return "Too many lookups were requested in one request"; - case BOOTSTRAP_NO_MEMORY: - return "Out of memory"; - default: - return mach_error_string(r); - } -} Modified: trunk/launchd/src/launchctl.c =================================================================== --- trunk/launchd/src/launchctl.c 2006-10-20 23:24:08 UTC (rev 22909) +++ trunk/launchd/src/launchctl.c 2006-10-23 17:46:23 UTC (rev 22910) @@ -60,7 +60,7 @@ #include <utmpx.h> #include "bootstrap_public.h" -#include "bootstrap_private.h" +#include "vproc_priv.h" #include "launch.h" #include "launch_priv.h" Modified: trunk/launchd/src/launchd.c =================================================================== --- trunk/launchd/src/launchd.c 2006-10-20 23:24:08 UTC (rev 22909) +++ trunk/launchd/src/launchd.c 2006-10-23 17:46:23 UTC (rev 22910) @@ -62,7 +62,7 @@ #include <setjmp.h> #include "bootstrap_public.h" -#include "bootstrap_private.h" +#include "vproc_priv.h" #include "launch.h" #include "launch_priv.h" #include "launchd.h" Modified: trunk/launchd/src/launchd_core_logic.c =================================================================== --- trunk/launchd/src/launchd_core_logic.c 2006-10-20 23:24:08 UTC (rev 22909) +++ trunk/launchd/src/launchd_core_logic.c 2006-10-23 17:46:23 UTC (rev 22910) @@ -77,9 +77,9 @@ #include "launchd_core_logic.h" #include "launchd_unix_ipc.h" #include "bootstrap_public.h" -#include "bootstrap_private.h" -#include "bootstrap.h" -#include "bootstrapServer.h" +#include "vproc_priv.h" +#include "protocol_vproc.h" +#include "protocol_vprocServer.h" #include "job_reply.h" #define LAUNCHD_MIN_JOB_RUN_TIME 10 @@ -661,12 +661,12 @@ } /* Sigh... at the moment, MIG has maxsize == sizeof(reply union) */ - mxmsgsz = sizeof(union __RequestUnion__job_mig_bootstrap_subsystem); - if (job_mig_bootstrap_subsystem.maxsize > mxmsgsz) { - mxmsgsz = job_mig_bootstrap_subsystem.maxsize; + mxmsgsz = sizeof(union __RequestUnion__job_mig_protocol_vproc_subsystem); + if (job_mig_protocol_vproc_subsystem.maxsize > mxmsgsz) { + mxmsgsz = job_mig_protocol_vproc_subsystem.maxsize; } - if (!job_assumes(j, runtime_add_mport(j->bs_port, bootstrap_server, mxmsgsz) == KERN_SUCCESS)) { + if (!job_assumes(j, runtime_add_mport(j->bs_port, protocol_vproc_server, mxmsgsz) == KERN_SUCCESS)) { goto out_bad2; } @@ -2914,12 +2914,12 @@ sprintf(j->label, "%d", MACH_PORT_INDEX(j->bs_port)); /* Sigh... at the moment, MIG has maxsize == sizeof(reply union) */ - mxmsgsz = sizeof(union __RequestUnion__job_mig_bootstrap_subsystem); - if (job_mig_bootstrap_subsystem.maxsize > mxmsgsz) { - mxmsgsz = job_mig_bootstrap_subsystem.maxsize; + mxmsgsz = sizeof(union __RequestUnion__job_mig_protocol_vproc_subsystem); + if (job_mig_protocol_vproc_subsystem.maxsize > mxmsgsz) { + mxmsgsz = job_mig_protocol_vproc_subsystem.maxsize; } - if (!job_assumes(j, runtime_add_mport(j->bs_port, bootstrap_server, mxmsgsz) == KERN_SUCCESS)) { + if (!job_assumes(j, runtime_add_mport(j->bs_port, protocol_vproc_server, mxmsgsz) == KERN_SUCCESS)) { goto out_bad; } @@ -3842,6 +3842,11 @@ return BOOTSTRAP_NOT_PRIVILEGED; } + if (!j->legacy_mach_job) { + job_log(j, LOG_ERR, "bootstrap_create_service() is only allowed against legacy Mach jobs: %s", servicename); + return BOOTSTRAP_NOT_PRIVILEGED; + } + ms = job_lookup_service(j, servicename, false); if (ms) { job_log(j, LOG_DEBUG, "Mach service creation attempt for failed. Already exists: %s", servicename); Copied: trunk/launchd/src/libbootstrap.c (from rev 22901, trunk/launchd/src/bootstrap_public.c) =================================================================== --- trunk/launchd/src/libbootstrap.c (rev 0) +++ trunk/launchd/src/libbootstrap.c 2006-10-23 17:46:23 UTC (rev 22910) @@ -0,0 +1,291 @@ +/* + * Copyright (c) 1999-2005 Apple Computer, Inc. All rights reserved. + * + * @APPLE_APACHE_LICENSE_HEADER_START@ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @APPLE_APACHE_LICENSE_HEADER_END@ + */ + +#include <mach/mach.h> +#include <mach/vm_map.h> + +#include "bootstrap_public.h" +#include "bootstrap_private.h" +#include "launch.h" +#include "launch_priv.h" + +#define mig_external static +#include "bootstrap.h" +#include "bootstrapUser.c" + +#include <sys/param.h> +#include <stdlib.h> +#include <errno.h> + +kern_return_t +_launchd_to_launchd(mach_port_t bp, mach_port_t *reqport, mach_port_t *rcvright, + name_array_t *service_names, mach_msg_type_number_t *service_namesCnt, + mach_port_array_t *ports, mach_msg_type_number_t *portCnt) +{ + return vproc_mig_transfer_subset(bp, reqport, rcvright, service_names, service_namesCnt, ports, portCnt); +} + +pid_t +_spawn_via_launchd(const char *label, const char *const *argv, const struct spawn_via_launchd_attr *spawn_attrs, int struct_version) +{ + kern_return_t kr; + const char *const *tmpp; + size_t len, buf_len = strlen(label) + 1; + char *buf = strdup(label); + uint64_t flags = 0; + uint32_t argc = 0; + uint32_t envc = 0; + pid_t p = -1; + mode_t u_mask = CMASK; + mach_port_t obsvr_port = MACH_PORT_NULL; + + for (tmpp = argv; *tmpp; tmpp++) { + argc++; + len = strlen(*tmpp) + 1; + buf = reallocf(buf, buf_len + len); + strcpy(buf + buf_len, *tmpp); + buf_len += len; + } + + if (spawn_attrs) switch (struct_version) { + case 0: + if (spawn_attrs->spawn_flags & SPAWN_VIA_LAUNCHD_STOPPED) { + flags |= SPAWN_WANTS_WAIT4DEBUGGER; + } + if (spawn_attrs->spawn_flags & SPAWN_VIA_LAUNCHD_FORCE_PPC) { + flags |= SPAWN_WANTS_FORCE_PPC; + } + + if (spawn_attrs->spawn_env) { + for (tmpp = spawn_attrs->spawn_env; *tmpp; tmpp++) { + envc++; + len = strlen(*tmpp) + 1; + buf = reallocf(buf, buf_len + len); + strcpy(buf + buf_len, *tmpp); + buf_len += len; + } + } + + if (spawn_attrs->spawn_path) { + flags |= SPAWN_HAS_PATH; + len = strlen(spawn_attrs->spawn_path) + 1; + buf = reallocf(buf, buf_len + len); + strcpy(buf + buf_len, spawn_attrs->spawn_path); + buf_len += len; + } + + if (spawn_attrs->spawn_chdir) { + flags |= SPAWN_HAS_WDIR; + len = strlen(spawn_attrs->spawn_chdir) + 1; + buf = reallocf(buf, buf_len + len); + strcpy(buf + buf_len, spawn_attrs->spawn_chdir); + buf_len += len; + } + + if (spawn_attrs->spawn_umask) { + flags |= SPAWN_HAS_UMASK; + u_mask = *spawn_attrs->spawn_umask; + } + + break; + default: + break; + } + + kr = vproc_mig_spawn(bootstrap_port, buf, buf_len, argc, envc, flags, u_mask, &p, &obsvr_port); + + free(buf); + + if (kr == BOOTSTRAP_SUCCESS) { + if (spawn_attrs && spawn_attrs->spawn_observer_port) { + *spawn_attrs->spawn_observer_port = obsvr_port; + } else { + mach_port_deallocate(mach_task_self(), obsvr_port); + } + return p; + } + + switch (kr) { + case BOOTSTRAP_NOT_PRIVILEGED: + errno = EPERM; break; + case BOOTSTRAP_NO_MEMORY: + errno = ENOMEM; break; + default: + errno = EINVAL; break; + } + return -1; +} + +kern_return_t +mpm_wait(mach_port_t ajob, int *wstatus) +{ + return vproc_mig_wait(ajob, wstatus); +} + +kern_return_t +mpm_uncork_fork(mach_port_t ajob) +{ + return vproc_mig_uncork_fork(ajob); +} + +kern_return_t +bootstrap_create_server(mach_port_t bp, cmd_t server_cmd, uid_t server_uid, boolean_t on_demand, mach_port_t *server_port) +{ + return vproc_mig_create_server(bp, server_cmd, server_uid, on_demand, server_port); +} + +kern_return_t +bootstrap_subset(mach_port_t bp, mach_port_t requestor_port, mach_port_t *subset_port) +{ + return vproc_mig_subset(bp, requestor_port, subset_port); +} + +kern_return_t +bootstrap_unprivileged(mach_port_t bp, mach_port_t *unpriv_port) +{ + kern_return_t kr; + + *unpriv_port = MACH_PORT_NULL; + + kr = mach_port_mod_refs(mach_task_self(), bp, MACH_PORT_RIGHT_SEND, 1); + + if (kr == KERN_SUCCESS) { + *unpriv_port = bp; + } + + return kr; +} + +kern_return_t +bootstrap_getsocket(mach_port_t bp, name_t sockpath) +{ + return vproc_mig_getsocket(bp, sockpath); +} + +kern_return_t +bootstrap_parent(mach_port_t bp, mach_port_t *parent_port) +{ + return vproc_mig_parent(bp, parent_port); +} + +kern_return_t +bootstrap_register(mach_port_t bp, name_t service_name, mach_port_t sp) +{ + return vproc_mig_register(bp, service_name, sp); +} + +kern_return_t +bootstrap_create_service(mach_port_t bp, name_t service_name, mach_port_t *sp) +{ + return vproc_mig_create_service(bp, service_name, sp); +} + +kern_return_t +bootstrap_check_in(mach_port_t bp, name_t service_name, mach_port_t *sp) +{ + return vproc_mig_check_in(bp, service_name, sp); +} + +kern_return_t +bootstrap_look_up(mach_port_t bp, name_t service_name, mach_port_t *sp) +{ + return vproc_mig_look_up(bp, service_name, sp); +} + +kern_return_t +bootstrap_look_up_array(mach_port_t bp, + name_array_t names, mach_msg_type_number_t name_cnt, + mach_port_array_t *ports, mach_msg_type_number_t *port_cnt, + boolean_t *all) +{ + unsigned int i; + kern_return_t r; + + if (name_cnt > BOOTSTRAP_MAX_LOOKUP_COUNT) + return BOOTSTRAP_BAD_COUNT; + + *port_cnt = name_cnt; + + r = vm_allocate(mach_task_self(), (vm_address_t *)&ports, name_cnt * sizeof(mach_port_t), true); + + if (r != KERN_SUCCESS) + return r; + + *all = true; + + for (i = 0; i < name_cnt; i++) { + if (bootstrap_look_up(bp, names[i], &((*ports)[i])) == BOOTSTRAP_SUCCESS) + continue; + *all = false; + ports[i] = MACH_PORT_NULL; + } + + return BOOTSTRAP_SUCCESS; +} + +kern_return_t +bootstrap_status(mach_port_t bp, name_t service_name, bootstrap_status_t *service_active) +{ + mach_port_t p; + + if (bootstrap_check_in(bp, service_name, &p) == BOOTSTRAP_SUCCESS) { + mach_port_mod_refs(mach_task_self(), p, MACH_PORT_RIGHT_RECEIVE, -1); + *service_active = BOOTSTRAP_STATUS_ON_DEMAND; + return BOOTSTRAP_SUCCESS; + } else if (bootstrap_look_up(bp, service_name, &p) == BOOTSTRAP_SUCCESS) { + mach_port_deallocate(mach_task_self(), p); + *service_active = BOOTSTRAP_STATUS_ACTIVE; + return BOOTSTRAP_SUCCESS; + } + + return BOOTSTRAP_UNKNOWN_SERVICE; +} + +kern_return_t +bootstrap_info(mach_port_t bp, + name_array_t *service_names, mach_msg_type_number_t *service_namesCnt, + bootstrap_status_array_t *service_active, mach_msg_type_number_t *service_activeCnt) +{ + return vproc_mig_info(bp, service_names, service_namesCnt, + service_active, service_activeCnt); +} + + +const char * +bootstrap_strerror(kern_return_t r) +{ + switch (r) { + case BOOTSTRAP_SUCCESS: + return "Success"; + case BOOTSTRAP_NOT_PRIVILEGED: + return "Permission denied"; + case BOOTSTRAP_NAME_IN_USE: + case BOOTSTRAP_SERVICE_ACTIVE: + return "Service name already exists"; + case BOOTSTRAP_UNKNOWN_SERVICE: + return "Unknown service name"; + case BOOTSTRAP_BAD_COUNT: + return "Too many lookups were requested in one request"; + case BOOTSTRAP_NO_MEMORY: + return "Out of memory"; + default: + return mach_error_string(r); + } +} Modified: trunk/launchd/src/liblaunch.c =================================================================== --- trunk/launchd/src/liblaunch.c 2006-10-20 23:24:08 UTC (rev 22909) +++ trunk/launchd/src/liblaunch.c 2006-10-23 17:46:23 UTC (rev 22910) @@ -36,7 +36,7 @@ #include "launch.h" #include "launch_priv.h" #include "bootstrap_public.h" -#include "bootstrap_private.h" +#include "vproc_priv.h" /* __OSBogusByteSwap__() must not really exist in the symbol namespace * in order for the following to generate an error at build time. @@ -133,8 +133,8 @@ int fd; }; -static void make_msg_and_cmsg(launch_data_t, void **, size_t *, int **, size_t *); -static launch_data_t make_data(launch_t, size_t *, size_t *); +static void launch_data_pack(launch_data_t, void **, size_t *, int **, size_t *); +static launch_data_t launch_data_unpack(launch_t, size_t *, size_t *); static launch_data_t launch_data_array_pop_first(launch_data_t where); static int _fd(int fd); static void launch_client_init(void); @@ -565,7 +565,7 @@ } void -make_msg_and_cmsg(launch_data_t d, void **where, size_t *len, int **fd_where, size_t *fdcnt) +launch_data_pack(launch_data_t d, void **where, size_t *len, int **fd_where, size_t *fdcnt) { launch_data_t o_in_w; size_t i; @@ -619,14 +619,15 @@ *len += d->_array_cnt * sizeof(launch_data_t); for (i = 0; i < d->_array_cnt; i++) - make_msg_and_cmsg(d->_array[i], where, len, fd_where, fdcnt); + launch_data_pack(d->_array[i], where, len, fd_where, fdcnt); break; default: break; } } -static launch_data_t make_data(launch_t conn, size_t *data_offset, size_t *fdoffset) +launch_data_t +launch_data_unpack(launch_t conn, size_t *data_offset, size_t *fdoffset) { launch_data_t r = conn->recvbuf + *data_offset; size_t i, tmpcnt; @@ -646,7 +647,7 @@ r->_array = conn->recvbuf + *data_offset; *data_offset += tmpcnt * sizeof(launch_data_t); for (i = 0; i < tmpcnt; i++) { - r->_array[i] = make_data(conn, data_offset, fdoffset); + r->_array[i] = launch_data_unpack(conn, data_offset, fdoffset); if (r->_array[i] == NULL) return NULL; } @@ -716,7 +717,7 @@ if (d) { uint64_t msglen = lh->sendlen; - make_msg_and_cmsg(d, &lh->sendbuf, &lh->sendlen, &lh->sendfds, &lh->sendfdcnt); + launch_data_pack(d, &lh->sendbuf, &lh->sendlen, &lh->sendfds, &lh->sendfdcnt); msglen = (lh->sendlen - msglen) + sizeof(struct launch_msg_header); lmh.len = host2big(msglen); @@ -953,7 +954,7 @@ goto need_more_data; } - if ((rmsg = make_data(lh, &data_offset, &fd_offset)) == NULL) { + if ((rmsg = launch_data_unpack(lh, &data_offset, &fd_offset)) == NULL) { errno = EBADRPC; goto out_bad; } Copied: trunk/launchd/src/libvproc.c (from rev 22901, trunk/launchd/src/bootstrap_public.c) =================================================================== --- trunk/launchd/src/libvproc.c (rev 0) +++ trunk/launchd/src/libvproc.c 2006-10-23 17:46:23 UTC (rev 22910) @@ -0,0 +1,291 @@ +/* + * Copyright (c) 1999-2005 Apple Computer, Inc. All rights reserved. + * + * @APPLE_APACHE_LICENSE_HEADER_START@ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @APPLE_APACHE_LICENSE_HEADER_END@ + */ + +#include <mach/mach.h> +#include <mach/vm_map.h> + +#include "bootstrap_public.h" +#include "vproc_priv.h" +#include "launch.h" +#include "launch_priv.h" + +#define mig_external static +#include "protocol_vproc.h" +#include "protocol_vprocUser.c" + +#include <sys/param.h> +#include <stdlib.h> +#include <errno.h> + +kern_return_t +_launchd_to_launchd(mach_port_t bp, mach_port_t *reqport, mach_port_t *rcvright, + name_array_t *service_names, mach_msg_type_number_t *service_namesCnt, + mach_port_array_t *ports, mach_msg_type_number_t *portCnt) +{ + return vproc_mig_transfer_subset(bp, reqport, rcvright, service_names, service_namesCnt, ports, portCnt); +} + +pid_t +_spawn_via_launchd(const char *label, const char *const *argv, const struct spawn_via_launchd_attr *spawn_attrs, int struct_version) +{ + kern_return_t kr; + const char *const *tmpp; + size_t len, buf_len = strlen(label) + 1; + char *buf = strdup(label); + uint64_t flags = 0; + uint32_t argc = 0; + uint32_t envc = 0; + pid_t p = -1; + mode_t u_mask = CMASK; + mach_port_t obsvr_port = MACH_PORT_NULL; + + for (tmpp = argv; *tmpp; tmpp++) { + argc++; + len = strlen(*tmpp) + 1; + buf = reallocf(buf, buf_len + len); + strcpy(buf + buf_len, *tmpp); + buf_len += len; + } + + if (spawn_attrs) switch (struct_version) { + case 0: + if (spawn_attrs->spawn_flags & SPAWN_VIA_LAUNCHD_STOPPED) { + flags |= SPAWN_WANTS_WAIT4DEBUGGER; + } + if (spawn_attrs->spawn_flags & SPAWN_VIA_LAUNCHD_FORCE_PPC) { + flags |= SPAWN_WANTS_FORCE_PPC; + } + + if (spawn_attrs->spawn_env) { + for (tmpp = spawn_attrs->spawn_env; *tmpp; tmpp++) { + envc++; + len = strlen(*tmpp) + 1; + buf = reallocf(buf, buf_len + len); + strcpy(buf + buf_len, *tmpp); + buf_len += len; + } + } + + if (spawn_attrs->spawn_path) { + flags |= SPAWN_HAS_PATH; + len = strlen(spawn_attrs->spawn_path) + 1; + buf = reallocf(buf, buf_len + len); + strcpy(buf + buf_len, spawn_attrs->spawn_path); + buf_len += len; + } + + if (spawn_attrs->spawn_chdir) { + flags |= SPAWN_HAS_WDIR; + len = strlen(spawn_attrs->spawn_chdir) + 1; + buf = reallocf(buf, buf_len + len); + strcpy(buf + buf_len, spawn_attrs->spawn_chdir); + buf_len += len; + } + + if (spawn_attrs->spawn_umask) { + flags |= SPAWN_HAS_UMASK; + u_mask = *spawn_attrs->spawn_umask; + } + + break; + default: + break; + } + + kr = vproc_mig_spawn(bootstrap_port, buf, buf_len, argc, envc, flags, u_mask, &p, &obsvr_port); + + free(buf); + + if (kr == BOOTSTRAP_SUCCESS) { + if (spawn_attrs && spawn_attrs->spawn_observer_port) { + *spawn_attrs->spawn_observer_port = obsvr_port; + } else { + mach_port_deallocate(mach_task_self(), obsvr_port); + } + return p; + } + + switch (kr) { + case BOOTSTRAP_NOT_PRIVILEGED: + errno = EPERM; break; + case BOOTSTRAP_NO_MEMORY: + errno = ENOMEM; break; + default: + errno = EINVAL; break; + } + return -1; +} + +kern_return_t +mpm_wait(mach_port_t ajob, int *wstatus) +{ + return vproc_mig_wait(ajob, wstatus); +} + +kern_return_t +mpm_uncork_fork(mach_port_t ajob) +{ + return vproc_mig_uncork_fork(ajob); +} + +kern_return_t +bootstrap_create_server(mach_port_t bp, cmd_t server_cmd, uid_t server_uid, boolean_t on_demand, mach_port_t *server_port) +{ + return vproc_mig_create_server(bp, server_cmd, server_uid, on_demand, server_port); +} + +kern_return_t +bootstrap_subset(mach_port_t bp, mach_port_t requestor_port, mach_port_t *subset_port) +{ + return vproc_mig_subset(bp, requestor_port, subset_port); +} + +kern_return_t +bootstrap_unprivileged(mach_port_t bp, mach_port_t *unpriv_port) +{ + kern_return_t kr; + + *unpriv_port = MACH_PORT_NULL; + + kr = mach_port_mod_refs(mach_task_self(), bp, MACH_PORT_RIGHT_SEND, 1); + + if (kr == KERN_SUCCESS) { + *unpriv_port = bp; + } + + return kr; +} + +kern_return_t +bootstrap_getsocket(mach_port_t bp, name_t sockpath) +{ + return vproc_mig_getsocket(bp, sockpath); +} + +kern_return_t +bootstrap_parent(mach_port_t bp, mach_port_t *parent_port) +{ + return vproc_mig_parent(bp, parent_port); +} + +kern_return_t +bootstrap_register(mach_port_t bp, name_t service_name, mach_port_t sp) +{ + return vproc_mig_register(bp, service_name, sp); +} + +kern_return_t +bootstrap_create_service(mach_port_t bp, name_t service_name, mach_port_t *sp) +{ + return vproc_mig_create_service(bp, service_name, sp); +} + +kern_return_t +bootstrap_check_in(mach_port_t bp, name_t service_name, mach_port_t *sp) +{ + return vproc_mig_check_in(bp, service_name, sp); +} + +kern_return_t +bootstrap_look_up(mach_port_t bp, name_t service_name, mach_port_t *sp) +{ + return vproc_mig_look_up(bp, service_name, sp); +} + +kern_return_t +bootstrap_look_up_array(mach_port_t bp, + name_array_t names, mach_msg_type_number_t name_cnt, + mach_port_array_t *ports, mach_msg_type_number_t *port_cnt, + boolean_t *all) +{ + unsigned int i; + kern_return_t r; + + if (name_cnt > BOOTSTRAP_MAX_LOOKUP_COUNT) + return BOOTSTRAP_BAD_COUNT; + + *port_cnt = name_cnt; + + r = vm_allocate(mach_task_self(), (vm_address_t *)&ports, name_cnt * sizeof(mach_port_t), true); + + if (r != KERN_SUCCESS) + return r; + + *all = true; + + for (i = 0; i < name_cnt; i++) { + if (bootstrap_look_up(bp, names[i], &((*ports)[i])) == BOOTSTRAP_SUCCESS) + continue; + *all = false; + ports[i] = MACH_PORT_NULL; + } + + return BOOTSTRAP_SUCCESS; +} + +kern_return_t +bootstrap_status(mach_port_t bp, name_t service_name, bootstrap_status_t *service_active) +{ + mach_port_t p; + + if (bootstrap_check_in(bp, service_name, &p) == BOOTSTRAP_SUCCESS) { + mach_port_mod_refs(mach_task_self(), p, MACH_PORT_RIGHT_RECEIVE, -1); + *service_active = BOOTSTRAP_STATUS_ON_DEMAND; + return BOOTSTRAP_SUCCESS; + } else if (bootstrap_look_up(bp, service_name, &p) == BOOTSTRAP_SUCCESS) { + mach_port_deallocate(mach_task_self(), p); + *service_active = BOOTSTRAP_STATUS_ACTIVE; + return BOOTSTRAP_SUCCESS; + } + + return BOOTSTRAP_UNKNOWN_SERVICE; +} + +kern_return_t +bootstrap_info(mach_port_t bp, + name_array_t *service_names, mach_msg_type_number_t *service_namesCnt, + bootstrap_status_array_t *service_active, mach_msg_type_number_t *service_activeCnt) +{ + return vproc_mig_info(bp, service_names, service_namesCnt, + service_active, service_activeCnt); +} + + +const char * +bootstrap_strerror(kern_return_t r) +{ + switch (r) { + case BOOTSTRAP_SUCCESS: + return "Success"; + case BOOTSTRAP_NOT_PRIVILEGED: + return "Permission denied"; + case BOOTSTRAP_NAME_IN_USE: + case BOOTSTRAP_SERVICE_ACTIVE: + return "Service name already exists"; + case BOOTSTRAP_UNKNOWN_SERVICE: + return "Unknown service name"; + case BOOTSTRAP_BAD_COUNT: + return "Too many lookups were requested in one request"; + case BOOTSTRAP_NO_MEMORY: + return "Out of memory"; + default: + return mach_error_string(r); + } +} Modified: trunk/launchd/src/protocol_job.defs =================================================================== --- trunk/launchd/src/protocol_job.defs 2006-10-20 23:24:08 UTC (rev 22909) +++ trunk/launchd/src/protocol_job.defs 2006-10-23 17:46:23 UTC (rev 22910) @@ -23,13 +23,13 @@ * Copyright, 1990. All rights reserved. */ -subsystem bootstrap 400; +subsystem protocol_vproc 400; #include <mach/std_types.defs> #include <mach/mach_types.defs> #include "launchd_mig_types.defs" -import "bootstrap_public.h"; -import "bootstrap_private.h"; +import "vproc.h"; +import "vproc_priv.h"; userprefix vproc_mig_; serverprefix job_mig_; @@ -39,7 +39,6 @@ __server_cmd : cmd_t; __server_uid : natural_t; __on_demand : boolean_t; - ServerAuditToken __token : audit_token_t; out __server_port : mach_port_make_send_t); skip; /* Last used in 10.4. Was bootstrap_unprivileged() */ @@ -47,18 +46,15 @@ routine check_in( __bs_port : job_t; __service_name : name_t; - ServerAuditToken __token : audit_token_t; out __service_port : mach_port_move_receive_t); routine register( __bs_port : job_t; - ServerAuditToken __token : audit_token_t; __service_name : name_t; __service_port : mach_port_t); routine look_up( __bs_port : job_t; - ServerAuditToken __token : audit_token_t; __service_name : name_t; out __service_port : mach_port_send_t); @@ -90,7 +86,6 @@ out __bs_reqport : mach_port_t; out __bs_rcvright : mach_port_move_receive_t; out __service_names : name_array_t, dealloc; - out __service_pids : pointer_t, dealloc; out __service_ports : mach_port_array_t, dealloc); routine getsocket( @@ -99,7 +94,6 @@ routine spawn( __bs_port : job_t; - ServerAuditToken __token : audit_token_t; __chars : _internal_string_t; __argc : uint32_t; __envc : uint32_t; @@ -111,15 +105,7 @@ routine wait( __bs_port : job_t; sreplyport __rport : mach_port_make_send_once_t; - ServerAuditToken __token : audit_token_t; out __waitval : integer_t); routine uncork_fork( - __bs_port : job_t; - ServerAuditToken __token : audit_token_t); - -/* Essentially the inverse of bootstrap_unprivileged() */ -routine get_self( - __bs_port : job_t; - ServerAuditToken __token : audit_token_t; - out __job_port : mach_port_make_send_t); + __bs_port : job_t); Modified: trunk/launchd/src/protocol_job_reply.defs =================================================================== --- trunk/launchd/src/protocol_job_reply.defs 2006-10-20 23:24:08 UTC (rev 22909) +++ trunk/launchd/src/protocol_job_reply.defs 2006-10-23 17:46:23 UTC (rev 22910) @@ -24,7 +24,7 @@ #include <mach/mach_types.defs> #include "launchd_mig_types.defs" import "bootstrap_public.h"; -import "bootstrap_private.h"; +import "vproc_priv.h"; skip; /* create_server */ Deleted: trunk/launchd/src/protocol_legacy.defs =================================================================== --- trunk/launchd/src/protocol_legacy.defs 2006-10-20 23:24:08 UTC (rev 22909) +++ trunk/launchd/src/protocol_legacy.defs 2006-10-23 17:46:23 UTC (rev 22910) @@ -1,111 +0,0 @@ -/* - * Copyright (c) 1999-2004 Apple Computer, Inc. All rights reserved. - * - * @APPLE_APACHE_LICENSE_HEADER_START@ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @APPLE_APACHE_LICENSE_HEADER_END@ - */ -/* - * bootstrap -- fundamental service initiator and port server - * Mike DeMoney, NeXT, Inc. - * Copyright, 1990. All rights reserved. - */ - -subsystem bootstrap 400; - -#include <mach/std_types.defs> -#include <mach/mach_types.defs> -#include "launchd_mig_types.defs" -import "bootstrap_public.h"; -import "bootstrap_private.h"; - -userprefix vproc_mig_; -serverprefix job_mig_; - -routine create_server( - __bs_port : job_t; - __server_cmd : cmd_t; - __server_uid : natural_t; - __on_demand : boolean_t; - out __server_port : mach_port_make_send_t); - -skip; /* Last used in 10.4. Was bootstrap_unprivileged() */ - -routine check_in( - __bs_port : job_t; - __service_name : name_t; - out __service_port : mach_port_move_receive_t); - -routine register( - __bs_port : job_t; - __service_name : name_t; - __service_port : mach_port_t); - -routine look_up( - __bs_port : job_t; - __service_name : name_t; - out __service_port : mach_port_send_t); - -skip; /* last used in 10.4 */ - -routine parent( - __bs_port : job_t; - out __parent_port : mach_port_send_t); - -skip; /* last used in 10.4 */ - -routine info( - __bs_port : job_t; - out __service_names : name_array_t, dealloc; - out __service_active : bootstrap_status_array_t, dealloc); - -routine subset( - __bs_port : job_t; - __requestor_port: mach_port_t; - out __subset_port : mach_port_make_send_t); - -routine create_service( - __bs_port : job_t; - __service_name : name_t; - out __service_port : mach_port_t); - -routine transfer_subset( - __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; - out __service_ports : mach_port_array_t, dealloc); - -routine getsocket( - __bs_port : job_t; - out __sockpath : name_t); - -routine spawn( - __bs_port : job_t; - __chars : _internal_string_t; - __argc : uint32_t; - __envc : uint32_t; - __flags : uint64_t; - __umask : uint16_t; - out __pid : pid_t; - out __obsvr_port : mach_port_make_send_t); - -routine wait( - __bs_port : job_t; - sreplyport __rport : mach_port_make_send_once_t; - out __waitval : integer_t); - -routine uncork_fork( - __bs_port : job_t); Modified: trunk/launchd/src/vproc.h =================================================================== --- trunk/launchd/src/vproc.h 2006-10-20 23:24:08 UTC (rev 22909) +++ trunk/launchd/src/vproc.h 2006-10-23 17:46:23 UTC (rev 22910) @@ -20,8 +20,12 @@ * @APPLE_APACHE_LICENSE_HEADER_END@ */ +#include <sys/cdefs.h> + __BEGIN_DECLS +#if 0 + typedef void * vproc_t; typedef void * vprocmgr_t; typedef void * vproc_err_t; @@ -42,7 +46,7 @@ vproc_err_t vprocmgr_lookup_vproc(vprocmgr_t vpm, const char *label, vproc_t *vp); -vproc_err_t vprocmgr_lookup_vprocmgr_for_user(vprocmgr_t vpm, const char *user, vprocmgr_t *vpm); +vproc_err_t vprocmgr_lookup_vprocmgr_for_user(vprocmgr_t vpm, const char *user, vprocmgr_t *vpm_out); vproc_err_t vprocmgr_lookup_mach_service(vprocmgr_t vpm, const char *service, mach_port_t *service_port); @@ -73,6 +77,8 @@ const char *vproc_strerror(vproc_err_t r); +#endif + __END_DECLS #endif Copied: trunk/launchd/src/vproc_priv.h (from rev 22901, trunk/launchd/src/bootstrap_private.h) =================================================================== --- trunk/launchd/src/vproc_priv.h (rev 0) +++ trunk/launchd/src/vproc_priv.h 2006-10-23 17:46:23 UTC (rev 22910) @@ -0,0 +1,62 @@ +#ifndef _BOOTSTRAP_PRIVATE_H_ +#define _BOOTSTRAP_PRIVATE_H_ +/* + * Copyright (c) 2006 Apple Computer, Inc. All rights reserved. + * + * @APPLE_APACHE_LICENSE_HEADER_START@ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @APPLE_APACHE_LICENSE_HEADER_END@ + */ + +typedef char * _internal_string_t; +typedef mach_port_t vproc_mig_t; + +#ifdef protocol_vproc_MSG_COUNT +/* HACK */ +#include "launchd_core_logic.h" +#endif + +#define SPAWN_HAS_PATH 0x0001 +#define SPAWN_HAS_WDIR 0x0002 +#define SPAWN_HAS_UMASK 0x0004 +#define SPAWN_WANTS_WAIT4DEBUGGER 0x0008 +#define SPAWN_WANTS_FORCE_PPC 0x0010 + +kern_return_t +_launchd_to_launchd(mach_port_t bp, mach_port_t *reqport, mach_port_t *rcvright, + name_array_t *service_names, mach_msg_type_number_t *service_namesCnt, + mach_port_array_t *ports, mach_msg_type_number_t *portCnt); + +kern_return_t bootstrap_getsocket(mach_port_t bp, name_t); + + +kern_return_t +bootstrap_look_up_array( + mach_port_t bp, + name_array_t service_names, + mach_msg_type_number_t service_namesCnt, + mach_port_array_t *sps, + mach_msg_type_number_t *service_portsCnt, + boolean_t *all_services_known); + +kern_return_t +bootstrap_info( + mach_port_t bp, + name_array_t *service_names, + mach_msg_type_number_t *service_namesCnt, + bootstrap_status_array_t *service_active, + mach_msg_type_number_t *service_activeCnt); + +#endif
participants (1)
-
source_changes@macosforge.org