[launchd-changes] [23012] trunk/launchd/src/launchd_core_logic.c
source_changes at macosforge.org
source_changes at macosforge.org
Thu Jan 18 12:13:26 PST 2007
Revision: 23012
http://trac.macosforge.org/projects/launchd/changeset/23012
Author: zarzycki at apple.com
Date: 2007-01-18 12:13:26 -0800 (Thu, 18 Jan 2007)
Log Message:
-----------
<rdar://problem/4927819> Launch agent LimitLoadToSessionType values in array result in incorrect launching of process
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-01-12 22:13:03 UTC (rev 23011)
+++ trunk/launchd/src/launchd_core_logic.c 2007-01-18 20:13:26 UTC (rev 23012)
@@ -1096,11 +1096,7 @@
} else if (strcasecmp(key, LAUNCH_JOBKEY_LIMITLOADFROMHOSTS) == 0) {
return;
} else if (strcasecmp(key, LAUNCH_JOBKEY_LIMITLOADTOSESSIONTYPE) == 0) {
- if (strcmp(value, "Aqua") == 0) {
- job_reparent_hack(j, "Aqua");
- } else if (strcmp(value, "LoginWindow") == 0) {
- job_reparent_hack(j, "LoginWindow");
- }
+ job_reparent_hack(j, value);
return;
}
break;
@@ -1281,6 +1277,9 @@
void
job_import_array(job_t j, const char *key, launch_data_t value)
{
+ size_t i, value_cnt = launch_data_array_get_count(value);
+ const char *str;
+
switch (key[0]) {
case 'l':
case 'L':
@@ -1288,16 +1287,23 @@
return;
} else if (strcasecmp(key, LAUNCH_JOBKEY_LIMITLOADFROMHOSTS) == 0) {
return;
+ } else if (strcasecmp(key, LAUNCH_JOBKEY_LIMITLOADTOSESSIONTYPE) == 0) {
+ for (i = 0; i < value_cnt; i++) {
+ str = launch_data_get_string(launch_data_array_get_index(value, i));
+ if (job_assumes(j, str != NULL)) {
+ job_reparent_hack(j, str);
+ }
+ }
}
break;
case 'q':
case 'Q':
if (strcasecmp(key, LAUNCH_JOBKEY_QUEUEDIRECTORIES) == 0) {
- size_t i, qd_cnt = launch_data_array_get_count(value);
- const char *thepath;
- for (i = 0; i < qd_cnt; i++) {
- thepath = launch_data_get_string(launch_data_array_get_index(value, i));
- semaphoreitem_new(j, DIR_NOT_EMPTY, thepath);
+ for (i = 0; i < value_cnt; i++) {
+ str = launch_data_get_string(launch_data_array_get_index(value, i));
+ if (job_assumes(j, str != NULL)) {
+ semaphoreitem_new(j, DIR_NOT_EMPTY, str);
+ }
}
}
@@ -1305,11 +1311,11 @@
case 'w':
case 'W':
if (strcasecmp(key, LAUNCH_JOBKEY_WATCHPATHS) == 0) {
- size_t i, wp_cnt = launch_data_array_get_count(value);
- const char *thepath;
- for (i = 0; i < wp_cnt; i++) {
- thepath = launch_data_get_string(launch_data_array_get_index(value, i));
- semaphoreitem_new(j, PATH_CHANGES, thepath);
+ for (i = 0; i < value_cnt; i++) {
+ str = launch_data_get_string(launch_data_array_get_index(value, i));
+ if (job_assumes(j, str != NULL)) {
+ semaphoreitem_new(j, PATH_CHANGES, str);
+ }
}
}
break;
@@ -1322,9 +1328,9 @@
case 's':
case 'S':
if (strcasecmp(key, LAUNCH_JOBKEY_STARTCALENDARINTERVAL) == 0) {
- size_t i = 0, ci_cnt = launch_data_array_get_count(value);
- for (i = 0; i < ci_cnt; i++)
+ for (i = 0; i < value_cnt; i++) {
calendarinterval_new_from_obj(j, launch_data_array_get_index(value, i));
+ }
}
break;
default:
@@ -2437,6 +2443,10 @@
tmptm.tm_wday = -1;
tmptm.tm_mon = -1;
+ if (!job_assumes(j, obj != NULL)) {
+ return false;
+ }
+
if (LAUNCH_DATA_DICTIONARY != launch_data_get_type(obj)) {
return false;
}
@@ -4159,8 +4169,12 @@
{
jobmgr_t jmi = NULL;
+ if (strcasecmp(where, "Aqua") != 0 && strcasecmp(where, "LoginWindow") != 0) {
+ return;
+ }
+
SLIST_FOREACH(jmi, &root_jobmgr->submgrs, sle) {
- if (strcmp(jmi->name, where) == 0) {
+ if (strcasecmp(jmi->name, where) == 0) {
break;
}
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070118/ba256892/attachment.html
More information about the launchd-changes
mailing list