Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Aug 2008 01:38:09 GMT
From:      Vincenzo Iozzo <snagg@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 146812 for review
Message-ID:  <200808070138.m771c9gl041650@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=146812

Change 146812 by snagg@snagg_macosx on 2008/08/07 01:37:29

	added check_priv_child for tests which change process privileges. 	Added tests for fork(2) waitpid(2) setauid(2)

Affected files ...

.. //depot/projects/soc2008/snagg-audit/tools/regression/audit/audit_pipe/audit_pipe_regression_test_utils.c#10 edit
.. //depot/projects/soc2008/snagg-audit/tools/regression/audit/audit_pipe/audit_pipe_regression_test_utils.h#8 edit
.. //depot/projects/soc2008/snagg-audit/tools/regression/audit/audit_pipe/specific-event/audit_pipe_event_fork.c#1 add
.. //depot/projects/soc2008/snagg-audit/tools/regression/audit/audit_pipe/specific-event/audit_pipe_event_kill.c#2 edit
.. //depot/projects/soc2008/snagg-audit/tools/regression/audit/audit_pipe/specific-event/audit_pipe_event_setauid.c#1 add
.. //depot/projects/soc2008/snagg-audit/tools/regression/audit/audit_pipe/specific-event/audit_pipe_event_setgid.c#4 edit
.. //depot/projects/soc2008/snagg-audit/tools/regression/audit/audit_pipe/specific-event/audit_pipe_event_setuid.c#4 edit
.. //depot/projects/soc2008/snagg-audit/tools/regression/audit/audit_pipe/specific-event/audit_pipe_event_waitpid.c#1 add

Differences ...

==== //depot/projects/soc2008/snagg-audit/tools/regression/audit/audit_pipe/audit_pipe_regression_test_utils.c#10 (text+ko) ====


==== //depot/projects/soc2008/snagg-audit/tools/regression/audit/audit_pipe/audit_pipe_regression_test_utils.h#8 (text+ko) ====


==== //depot/projects/soc2008/snagg-audit/tools/regression/audit/audit_pipe/specific-event/audit_pipe_event_kill.c#2 (text+ko) ====

@@ -34,7 +34,7 @@
 	char err_val[256];
 	int ret;
 	int index;
-	struct ext_priv p;
+	struct priv p;
 	struct kill_record *next;
 };
 
@@ -45,8 +45,7 @@
 	tmp = head;
 	if(tmp == NULL)
 		return (NULL);
-	for(; tmp->next != NULL; tmp = tmp->next)
-	{
+	for(; tmp->next != NULL; tmp = tmp->next) {
 		if(tmp->next->index == index) {
 			p = tmp->next;
 			tmp->next = tmp->next->next;
@@ -83,11 +82,14 @@
 {
 	int ret;
   	int pid;
+	int auid;
+	
 	init_channel_primary();
 	
 	pid = fork();
-	if(!pid)
-	{
+	if(!pid) {
+		getauid(&auid);
+		write_int(auid, "ext_auid");
 		write_int(geteuid(), "ext_euid");
 		write_int(getuid(), "ext_ruid");
 		write_int(getgid(), "ext_rgid");
@@ -107,9 +109,10 @@
 	}
 	
 	pid = fork();
-	if(!pid)
-	{
+	if(!pid) {
 		signal(15, NULL);
+		getauid(&auid);
+		write_int(auid, "ext_auid");
 		write_int(geteuid(), "ext_euid");
 		write_int(getuid(), "ext_ruid");
 		write_int(getgid(), "ext_rgid");
@@ -130,8 +133,9 @@
 	}
 	
 	pid = fork();
-	if(!pid)
-	{
+	if(!pid) {
+		getauid(&auid);
+		write_int(auid, "ext_auid");
 		write_int(geteuid(), "ext_euid");
 		write_int(getuid(), "ext_ruid");
 		write_int(getgid(), "ext_rgid");
@@ -306,8 +310,7 @@
 				if(elem == NULL)
 						err(-1, "MALLOC");
 
-				while((count = parse_string(shared_string)) != -1)
-				{
+				while((count = parse_string(shared_string)) != -1) {
 					descr = get_descr(shared_string);
 					if(count == INT_TYPE) {
 						if(!strncmp(descr, "sig", 3))
@@ -318,6 +321,8 @@
 							elem->pid = get_int(shared_string);
 						else if (!strncmp(descr, "ext_euid", 8))
 							elem->p.euid = get_int(shared_string);
+						else if (!strncmp(descr, "ext_auid", 8))
+							elem->p.auid = get_int(shared_string);	
 						else if (!strncmp(descr, "ext_pid", 7))
 							elem->p.pid = get_int(shared_string);	
 						else if (!strncmp(descr, "ext_ruid", 8))
@@ -327,8 +332,7 @@
 						else 
 							elem->p.egid = get_int(shared_string);
 					}		
-					else if ( count == STRING_TYPE)
-					{
+					else if ( count == STRING_TYPE) {
 						snprintf(elem->err_val, sizeof(elem->err_val) > 
 								strlen(shared_string) +1 ? 
 								strlen(shared_string) +1 : 

==== //depot/projects/soc2008/snagg-audit/tools/regression/audit/audit_pipe/specific-event/audit_pipe_event_setgid.c#4 (text+ko) ====

@@ -33,19 +33,18 @@
 	char err_val[256];
 	int ret;
 	int index;
+	struct priv p;
 	struct setgid_record *next;
 };
 
 struct setgid_record *del_record(struct setgid_record *head, int index)
 {
-	struct setgid_record *tmp;
-	struct setgid_record *p;
+	struct setgid_record *tmp, *p;
 
 	tmp = head;
 	if(tmp == NULL)
 		return NULL;
-	for(; tmp->next != NULL; tmp = tmp->next)
-	{
+	for(; tmp->next != NULL; tmp = tmp->next) {
 		if(tmp->next->index == index) {
 			p = tmp->next;
 			tmp->next = tmp->next->next;
@@ -80,11 +79,19 @@
 
 void test_setgid()
 {
-	int ret;
+	int ret, auid;
   	
 	init_channel_primary();
 	
 	ret = setgid(0);
+	
+	getauid(&auid);
+
+	write_int(auid, "child_auid");
+	write_int(geteuid(), "child_euid");
+	write_int(getuid(), "child_ruid");
+	write_int(getgid(), "child_rgid");
+	write_int(getegid(), "child_egid");
   	write_int(0, "gid");
   	write_int(ret, "ret");
 	if (ret == -1)
@@ -94,7 +101,15 @@
 	write_end();
 	
 	ret = setgid(1000);
-  	write_int(1000, "gid");
+	
+	getauid(&auid);
+
+  	write_int(auid, "child_auid");
+	write_int(geteuid(), "child_euid");
+	write_int(getuid(), "child_ruid");
+	write_int(getgid(), "child_rgid");
+	write_int(getegid(), "child_egid");
+	write_int(1000, "gid");
   	write_int(ret, "ret");
 	if (ret == -1)
 		write_string(strerror(errno), "ret_val");
@@ -153,14 +168,14 @@
 					}	
 				bytesread += tok.len;
 
-				/* Check only setgid syscals */
+				/* Check only setgid syscalls */
 				if(tok.tt.hdr32.e_type == 205)
 					to_parse = VALID;
 					
 				if(to_parse == VALID) {
 					switch(tok.id) {
 					case AUT_SUBJECT32:
-						ret = check_priv(tok.tt.proc32_ex, pid);
+						ret = check_priv_child(tok.tt.proc32_ex, tmp->p);
 						if(!ret)
 							report_error(tok, f);
 						break;
@@ -244,11 +259,20 @@
 					if(count == INT_TYPE) {
 						if(!strncmp(descr, "gid", 3))
 							elem->gid = get_int(shared_string);
+						else if (!strncmp(descr, "child_euid", 8))
+							elem->p.euid = get_int(shared_string);
+						else if (!strncmp(descr, "child_auid", 8))
+							elem->p.auid = get_int(shared_string);	
+						else if (!strncmp(descr, "child_ruid", 8))
+							elem->p.ruid = get_int(shared_string);
+						else if (!strncmp(descr, "child_rgid", 8))
+							elem->p.rgid = get_int(shared_string);
+						else if (!strncmp(descr, "child_egid", 8))
+							elem->p.egid = get_int(shared_string);
 						else
 							elem->ret = get_int(shared_string);
 					}		
-					else if ( count == STRING_TYPE)
-					{
+					else if ( count == STRING_TYPE) {
 						snprintf(elem->err_val, sizeof(elem->err_val) > 
 								strlen(shared_string) +1 ? 
 								strlen(shared_string) +1 : 
@@ -256,7 +280,8 @@
 								shared_string);
 					}
 					shared_string = read_string();
-				}		
+				}
+				elem->p.pid = pid;	
 				head = add_field(head, elem);
 				if(head == NULL)
 					err(-1, "List error");

==== //depot/projects/soc2008/snagg-audit/tools/regression/audit/audit_pipe/specific-event/audit_pipe_event_setuid.c#4 (text+ko) ====

@@ -33,6 +33,7 @@
 	char err_val[256];
 	int ret;
 	int index;
+	struct priv p;
 	struct setuid_record *next;
 };
 
@@ -44,8 +45,7 @@
 	tmp = head;
 	if(tmp == NULL)
 		return NULL;
-	for(; tmp->next != NULL; tmp = tmp->next)
-	{
+	for(; tmp->next != NULL; tmp = tmp->next) {
 		if(tmp->next->index == index) {
 			p = tmp->next;
 			tmp->next = tmp->next->next;
@@ -80,11 +80,18 @@
 
 void test_setuid()
 {
-	int ret;
-  	
+	int ret, auid;
+	
 	init_channel_primary();
 	
 	ret = setuid(1001);
+	getauid(&auid);
+	
+	write_int(auid, "child_auid");
+	write_int(geteuid(), "child_euid");
+	write_int(getuid(), "child_ruid");
+	write_int(getgid(), "child_rgid");
+	write_int(getegid(), "child_egid");
   	write_int(1001, "uid");
   	write_int(ret, "ret");
 	if (ret == -1)
@@ -94,6 +101,13 @@
 	write_end();
 
 	ret = setuid(0);
+	getauid(&auid);
+	
+	write_int(auid, "child_auid");
+	write_int(geteuid(), "child_euid");
+	write_int(getuid(), "child_ruid");
+	write_int(getgid(), "child_rgid");
+	write_int(getegid(), "child_egid");
   	write_int(0, "uid");
   	write_int(ret, "ret");
 	if (ret == -1)
@@ -154,14 +168,14 @@
 					}	
 				bytesread += tok.len;
 
-				/* Check only setuid syscals */
+				/* Check only setuid syscalls */
 				if(tok.tt.hdr32.e_type == 200)
 					to_parse = VALID;
 					
 				if(to_parse == VALID) {
 					switch(tok.id) {
 					case AUT_SUBJECT32:
-						ret = check_priv(tok.tt.proc32_ex, pid);
+						ret = check_priv_child(tok.tt.proc32_ex, tmp->p);
 						if(!ret)
 							report_error(tok, f);
 						break;
@@ -239,17 +253,25 @@
 				if(elem == NULL)
 						err(-1, "MALLOC");
 
-				while((count = parse_string(shared_string)) != -1)
-				{
+				while((count = parse_string(shared_string)) != -1) {
 					descr = get_descr(shared_string);
 					if(count == INT_TYPE) {
 						if(!strncmp(descr, "uid", 3))
 							elem->uid = get_int(shared_string);
+						else if (!strncmp(descr, "child_euid", 8))
+							elem->p.euid = get_int(shared_string);
+						else if (!strncmp(descr, "child_auid", 8))
+							elem->p.auid = get_int(shared_string);	
+						else if (!strncmp(descr, "child_ruid", 8))
+							elem->p.ruid = get_int(shared_string);
+						else if (!strncmp(descr, "child_rgid", 8))
+							elem->p.rgid = get_int(shared_string);
+						else if (!strncmp(descr, "child_egid", 8))
+							elem->p.egid = get_int(shared_string);	
 						else 
 							elem->ret = get_int(shared_string);
 					}		
-					else if ( count == STRING_TYPE)
-					{
+					else if ( count == STRING_TYPE) {
 						snprintf(elem->err_val, sizeof(elem->err_val) > 
 								strlen(shared_string) +1 ? 
 								strlen(shared_string) +1 : 
@@ -257,7 +279,8 @@
 								shared_string);
 					}
 					shared_string = read_string();
-				}		
+				}
+				elem->p.pid = pid;
 				head = add_field(head, elem);
 				if(head == NULL)
 					err(-1, "List error");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200808070138.m771c9gl041650>