From owner-p4-projects@FreeBSD.ORG Thu Jan 10 07:32:06 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 550F216A41B; Thu, 10 Jan 2008 07:32:06 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1A99116A41A for ; Thu, 10 Jan 2008 07:32:06 +0000 (UTC) (envelope-from zhouzhouyi@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id E29B213C45A for ; Thu, 10 Jan 2008 07:32:05 +0000 (UTC) (envelope-from zhouzhouyi@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m0A7W5Wj094869 for ; Thu, 10 Jan 2008 07:32:05 GMT (envelope-from zhouzhouyi@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m0A7W5lt094866 for perforce@freebsd.org; Thu, 10 Jan 2008 07:32:05 GMT (envelope-from zhouzhouyi@FreeBSD.org) Date: Thu, 10 Jan 2008 07:32:05 GMT Message-Id: <200801100732.m0A7W5lt094866@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to zhouzhouyi@FreeBSD.org using -f From: Zhouyi ZHOU To: Perforce Change Reviews Cc: Subject: PERFORCE change 132956 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Jan 2008 07:32:06 -0000 http://perforce.freebsd.org/chv.cgi?CH=132956 Change 132956 by zhouzhouyi@zhouzhouyi_mactest on 2008/01/10 07:31:43 removing some bugs in sysvmsq checking Affected files ... .. //depot/projects/soc2007/zhouzhouyi_mactest_soc/regression/mactest/msgtest.c#4 edit .. //depot/projects/soc2007/zhouzhouyi_mactest_soc/regression/mactest/tests/sysvmsg/00.t#3 edit Differences ... ==== //depot/projects/soc2007/zhouzhouyi_mactest_soc/regression/mactest/msgtest.c#4 (text+ko) ==== @@ -67,6 +67,8 @@ void receiver (void); void usage (void); + +#define ALRMTIME 2 #define MESSAGE_TEXT_LEN 255 /* @@ -95,7 +97,42 @@ const char *macconf_file = NULL; const char *creator_label = NULL; +void +stoprunning(sig) + int sig __unused; +{ + if (child_pid != 0) { + int error; + if (creator_label) { + mac_t label; + if (mac_from_text(&label, "mls/equal,biba/equal") == -1) { + exit(-1); + } + + if (mac_set_proc(label) == -1) + error = errno; + else + error = 0; + if (error){ + printf("error relabelling proc!\n"); + close(logfd); + exit(1); + } + mac_free(label); + } + kill(child_pid, SIGKILL); + if ((sender_msqid = msgget(msgkey, 0)) == -1) + fprintf(stderr, "cleanup: msgget"); + if (msgctl(sender_msqid, IPC_RMID, NULL) == -1) + warn("msgctl IPC_RMID"); + close(logfd); + machookmatch(macconf_file, getpid()); + } + exit(0); +} + + int main(int argc, char *argv[]) { @@ -146,17 +183,19 @@ sigemptyset(&sa.sa_mask); sa.sa_flags = 0; if (sigaction(SIGSYS, &sa, NULL) == -1) - err(1, "sigaction SIGSYS"); + fprintf(stderr, "sigaction SIGSYS"); + msgkey = ftok(argv[0], 4160); if ((sender_msqid = msgget(msgkey, IPC_CREAT | 0640)) == -1) - err(1, "msgget"); + fprintf(stderr, "msgget"); if (msgctl(sender_msqid, IPC_STAT, &m_ds) == -1) - err(1, "msgctl IPC_STAT"); + fprintf(stderr, "msgctl IPC_STAT"); if (msgctl(sender_msqid, IPC_RMID, NULL) == -1) warn("msgctl IPC_RMID"); + /* * Initialize child_pid to ourselves to that the cleanup function * works before we create the receiver. @@ -168,7 +207,7 @@ * removed. */ if (atexit(cleanup) == -1) - err(1, "atexit"); + fprintf(stderr, "atexit"); logfd = open("/dev/mactest", O_RDWR); ioctl(logfd, BEGINLOG, NULL); @@ -176,7 +215,7 @@ /*create the msg */ switch ((child_pid = fork())) { case -1: - err(1, "fork"); + fprintf(stderr, "fork"); /* NOTREACHED */ case 0: @@ -198,20 +237,20 @@ mac_free(label); } if ((sender_msqid = msgget(msgkey, IPC_CREAT | 0640)) == -1) - err(1, "msgget"); + fprintf(stderr, "msgget"); exit(0); default: break; } if (waitpid(child_pid, 0, 0) == -1) - err(1, "error create"); + fprintf(stderr, "error create"); + - /*check for ipcstat */ switch ((child_pid = fork())) { case -1: - err(1, "fork"); + fprintf(stderr, "fork"); /* NOTREACHED */ case 0: @@ -233,9 +272,10 @@ mac_free(label); } if ((sender_msqid = msgget(msgkey, 0)) == -1) - err(1, "receiver: msgget"); + fprintf(stderr, "receiver: msgget"); if (msgctl(sender_msqid, IPC_STAT, &m_ds) == -1) - err(1, "msgctl IPC_STAT"); + fprintf(stderr, "msgctl IPC_STAT"); + close(logfd); exit(0); default: break; @@ -243,13 +283,13 @@ if (waitpid(child_pid, 0, 0) == -1) - err(1, "error stat"); + fprintf(stderr, "error stat"); /*check for ipc_set */ switch ((child_pid = fork())) { case -1: - err(1, "fork"); + fprintf(stderr, "fork"); /* NOTREACHED */ case 0: @@ -272,9 +312,10 @@ } // memset(&m_ds, 0, sizeof m_ds); if ((sender_msqid = msgget(msgkey, 0)) == -1) - err(1, "ipcset: msgget"); + fprintf(stderr, "ipcset: msgget"); if (msgctl(sender_msqid, IPC_SET, &m_ds) == -1) - err(1, "msgctl IPC_SET"); + fprintf(stderr, "msgctl IPC_SET"); + close(logfd); exit(0); default: break; @@ -282,7 +323,7 @@ if (waitpid(child_pid, 0, 0) == -1) - err(1, "error set"); + fprintf(stderr, "error set"); @@ -296,12 +337,12 @@ sigemptyset(&sa.sa_mask); sa.sa_flags = 0; if (sigaction(SIGCHLD, &sa, NULL) == -1) - err(1, "sigaction SIGCHLD"); + fprintf(stderr, "sigaction SIGCHLD"); switch ((child_pid = fork())) { case -1: - err(1, "fork"); + fprintf(stderr, "fork"); /* NOTREACHED */ case 0: @@ -350,16 +391,28 @@ } m.mtype = MTYPE_1; strcpy(m.mtext, m1_str); + + alarm(ALRMTIME); + sa.sa_handler = stoprunning; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + if (sigaction(SIGALRM, &sa, NULL) == -1) + fprintf(stderr, "sigaction SIGALRM\n"); + + if ((sender_msqid = msgget(msgkey, 0)) == -1) - err(1, "ipcset: msgget"); + fprintf(stderr, "ipcset: msgget\n"); + if (msgsnd(sender_msqid, &m, strlen(m1_str) + 1, 0) == -1) - err(1, "sender: msgsnd 1"); + fprintf(stderr, "sender: msgsnd\n"); /* * Suspend forever; when we get SIGCHLD, the handler will exit. */ + + sigemptyset(&sigmask); (void) sigsuspend(&sigmask); @@ -381,7 +434,7 @@ { struct msqid_ds m_ds; int cstatus; - + close(logfd); exit(0); } @@ -390,13 +443,14 @@ { int error; - if (child_pid != 0 /*&& sender_msqid != -1*/) { + if (child_pid != 0) { if (creator_label) { mac_t label; - - if (mac_from_text(&label, creator_label) == -1) { + + if (mac_from_text(&label, "mls/equal,biba/equal") == -1) { exit(-1); } + if (mac_set_proc(label) == -1) error = errno; else @@ -409,7 +463,7 @@ mac_free(label); } if ((sender_msqid = msgget(msgkey, 0)) == -1) - err(1, "cleanup: msgget"); + fprintf(stderr, "cleanup: msgget"); if (msgctl(sender_msqid, IPC_RMID, NULL) == -1) warn("msgctl IPC_RMID"); close(logfd); @@ -433,7 +487,7 @@ int msqid; if ((msqid = msgget(msgkey, 0)) == -1) - err(1, "receiver: msgget"); + fprintf(stderr, "receiver: msgget\n"); /* * Receive the first message, print it, and send an ACK. @@ -441,14 +495,6 @@ if (msgrcv(msqid, &m, sizeof(m.mtext), MTYPE_1, 0) != strlen(m1_str) + 1); -/* err(1, "receiver: msgrcv 1");*/ /*comment out the receiver error - report for parsing the sender error*/ - -/* if (strcmp(m.mtext, m1_str) != 0){ - err(1, "receiver: message 1 data isn't correct"); - } -*/ -/*comment out the receiver error report for parsing the sender error */ exit(0); } ==== //depot/projects/soc2007/zhouzhouyi_mactest_soc/regression/mactest/tests/sysvmsg/00.t#3 (text+ko) ====