PERFORCE change 15484 for review

Robert Watson rwatson at freebsd.org
Sat Aug 3 14:51:39 GMT 2002


http://people.freebsd.org/~peter/p4db/chv.cgi?CH=15484

Change 15484 by rwatson at rwatson_curry on 2002/08/03 07:51:32

	Prod a bit at the userland MAC library to accept partial MAC
	labels in which not all policies are present, and to print
	partial labels without policies with null labels.

Affected files ...

.. //depot/projects/trustedbsd/mac/lib/libc/posix1e/mac_te.c#5 edit
.. //depot/projects/trustedbsd/mac/lib/libc/posix1e/mac_text.c#22 edit

Differences ...

==== //depot/projects/trustedbsd/mac/lib/libc/posix1e/mac_te.c#5 (text+ko) ====

@@ -54,8 +54,6 @@
 {
 
 	bzero(&label->m_te, sizeof(label->m_te));
-	if (strlen(string) == 0)
-		return (EINVAL);
 	if (strlcpy(label->m_te.mt_type, string,
 	    sizeof(label->m_te.mt_type)) >= sizeof(label->m_te.mt_type))
 		return (EINVAL);

==== //depot/projects/trustedbsd/mac/lib/libc/posix1e/mac_text.c#22 (text+ko) ====

@@ -68,7 +68,7 @@
 mac_to_text(struct mac *mac_p, size_t *len_p)
 {
 	char *biba = NULL, *mls = NULL, *string = NULL, *te = NULL;
-	int len = -1;
+	int len = -1, before;
 
 	biba = mac_biba_string_from_label(mac_p);
 	if (biba == NULL)
@@ -82,10 +82,49 @@
 	if (te == NULL)
 		goto out;
 
-	len = asprintf(&string, "%s%s%s%s%s%s%s%s%s%s%s",
-	    STRING_BIBA, STRING_ELEMENTSEP, biba, STRING_LISTSEP,
-	    STRING_MLS, STRING_ELEMENTSEP, mls, STRING_LISTSEP,
-	    STRING_TE, STRING_ELEMENTSEP, te);
+	len = 0;
+	if (strlen(biba) != 0)
+		len += strlen(STRING_LISTSEP) + strlen(STRING_BIBA) +
+		    strlen(STRING_ELEMENTSEP) + strlen(biba);
+	if (strlen(mls) != 0)
+		len += strlen(STRING_LISTSEP) + strlen(STRING_MLS) +
+		    strlen(STRING_ELEMENTSEP) + strlen(mls);
+	if (strlen(te) != 0)
+		len += strlen(STRING_LISTSEP) + strlen(STRING_TE) +
+		    strlen(STIRNG_ELEMENTSEP) + strlen(te);
+
+	if (len == 0) {
+		string = strdup("");
+		goto out;
+	}
+
+	string = (char *) malloc(len+1);
+	if (string == NULL)
+		return (NULL);
+
+	len = 0;
+
+	if (strlen(biba) != 0) {
+		if (before)
+			len += sprintf(string + len, "%s", STRING_LISTSEP);
+		len += sprintf(string + len, "%s%s%s", STRING_BIBA,
+		    STRING_ELEMENTSEP, biba);
+		before = 1;
+	}
+	if (strlen(mls) != 0) {
+		if (before)
+			len += sprintf(string + len, "%s", STRING_LISTSEP);
+		len += sprintf(string + len, "%s%s%s", STRING_MLS,
+		    STRING_ELEMENTSEP, mls);
+		before = 1;
+	}
+	if (strlen(te) != 0) {
+		if (before)
+			len += sprintf(string + len, "%s", STRING_LISTSEP);
+		len += sprintf(string + len, "%s%s%s", STRING_TE,
+		    STRING_ELEMENTSEP, te);
+		before = 1;
+	}
 
 out:
 	if (biba != NULL)
@@ -165,7 +204,29 @@
 		}
 	}
 
-	if (biba_seen != 1 || mls_seen != 1 || te_seen != 1) {
+	if (biba_seen == 0) {
+		error = mac_biba_label_from_string("", label);
+		if (error) {
+			errno = error;
+			goto exit2;
+		}
+	}
+	if (mls_seen == 0) {
+		error = mac_mls_label_from_string("", label);
+		if (error) {
+			errno = error;
+			goto exit2;
+		}
+	}
+	if (te_seen == 0) {
+		error = mac_te_label_from_string("", label);
+		if (error) {
+			errno = error;
+			goto exit2;
+		}
+	}
+
+	if (biba_seen > 1 || mls_seen > 1 || te_seen > 1) {
 		errno = EINVAL;
 		goto exit2;
 	}
To Unsubscribe: send mail to majordomo at trustedbsd.org
with "unsubscribe trustedbsd-cvs" in the body of the message



More information about the trustedbsd-cvs mailing list