PERFORCE change 132956 for review
Zhouyi ZHOU
zhouzhouyi at FreeBSD.org
Wed Jan 9 23:32:06 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=132956
Change 132956 by zhouzhouyi at 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) ====
More information about the p4-projects
mailing list