Date: Thu, 10 Jan 2008 07:32:05 GMT From: Zhouyi ZHOU <zhouzhouyi@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 132956 for review Message-ID: <200801100732.m0A7W5lt094866@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
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) ====
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200801100732.m0A7W5lt094866>