[launchd-changes] [23567] branches/SULeopard/launchd/src/launchd_core_logic.c

source_changes at macosforge.org source_changes at macosforge.org
Fri Mar 21 15:57:19 PDT 2008


Revision: 23567
          http://trac.macosforge.org/projects/launchd/changeset/23567
Author:   zarzycki at apple.com
Date:     2008-03-21 15:57:19 -0700 (Fri, 21 Mar 2008)

Log Message:
-----------
Validate job labels.

Modified Paths:
--------------
    branches/SULeopard/launchd/src/launchd_core_logic.c

Modified: branches/SULeopard/launchd/src/launchd_core_logic.c
===================================================================
--- branches/SULeopard/launchd/src/launchd_core_logic.c	2008-03-21 22:57:06 UTC (rev 23566)
+++ branches/SULeopard/launchd/src/launchd_core_logic.c	2008-03-21 22:57:19 UTC (rev 23567)
@@ -301,6 +301,7 @@
 static job_t jobmgr_import2(jobmgr_t jm, launch_data_t pload);
 static jobmgr_t jobmgr_parent(jobmgr_t jm);
 static jobmgr_t jobmgr_do_garbage_collection(jobmgr_t jm);
+static bool jobmgr_label_test(jobmgr_t jm, const char *str);
 static void jobmgr_reap_bulk(jobmgr_t jm, struct kevent *kev);
 static void jobmgr_log_stray_children(jobmgr_t jm);
 static void jobmgr_remove(jobmgr_t jm);
@@ -1883,10 +1884,7 @@
 	if ((j = job_find(label)) != NULL) {
 		errno = EEXIST;
 		return NULL;
-	} else if (label[0] == '\0' || (strncasecmp(label, "", strlen("com.apple.launchd")) == 0) ||
-			(strtol(label, NULL, 10) != 0)) {
-		jobmgr_log(jm, LOG_ERR, "Somebody attempted to use a reserved prefix for a label: %s", label);
-		/* the empty string, com.apple.launchd and number prefixes for labels are reserved */
+	} else if (!jobmgr_label_test(jm, label)) {
 		errno = EINVAL;
 		return NULL;
 	}
@@ -1898,6 +1896,40 @@
 	return j;
 }
 
+bool
+jobmgr_label_test(jobmgr_t jm, const char *str)
+{
+	char *endstr = NULL;
+	const char *ptr;
+
+	if (str[0] == '\0') {
+		jobmgr_log(jm, LOG_ERR, "Empty job labels are not allowed");
+		return false;
+	}
+	
+	for (ptr = str; *ptr; ptr++) {
+		if (iscntrl(*ptr)) {
+			jobmgr_log(jm, LOG_ERR, "ASCII control characters are not allowed in job labels. Index: %td Value: 0x%hhx", ptr - str, *ptr);
+			return false;
+		}
+	}
+	
+	strtoll(str, &endstr, 0);
+
+	if (str != endstr) {
+		jobmgr_log(jm, LOG_ERR, "Job labels are not allowed to begin with numbers: %s", str);
+		return false;
+	}
+	
+	if ((strncasecmp(str, "com.apple.launchd", strlen("com.apple.launchd")) == 0) ||
+			(strncasecmp(str, "com.apple.launchctl", strlen("com.apple.launchctl")) == 0)) {
+		jobmgr_log(jm, LOG_ERR, "Job labels are not allowed to use a reserved prefix: %s", str);
+		return false;
+	}
+
+	return true;
+}
+
 job_t 
 job_find(const char *label)
 {

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080321/d41bb993/attachment-0001.html 


More information about the launchd-changes mailing list