1d7d1ecc0SAlan Somers /*-
2d7d1ecc0SAlan Somers * Copyright (c) 2018 Aniket Pandey
3d7d1ecc0SAlan Somers *
4d7d1ecc0SAlan Somers * Redistribution and use in source and binary forms, with or without
5d7d1ecc0SAlan Somers * modification, are permitted provided that the following conditions
6d7d1ecc0SAlan Somers * are met:
7d7d1ecc0SAlan Somers * 1. Redistributions of source code must retain the above copyright
8d7d1ecc0SAlan Somers * notice, this list of conditions and the following disclaimer.
9d7d1ecc0SAlan Somers * 2. Redistributions in binary form must reproduce the above copyright
10d7d1ecc0SAlan Somers * notice, this list of conditions and the following disclaimer in the
11d7d1ecc0SAlan Somers * documentation and/or other materials provided with the distribution.
12d7d1ecc0SAlan Somers *
13d7d1ecc0SAlan Somers * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14d7d1ecc0SAlan Somers * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15d7d1ecc0SAlan Somers * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16d7d1ecc0SAlan Somers * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17d7d1ecc0SAlan Somers * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18d7d1ecc0SAlan Somers * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19d7d1ecc0SAlan Somers * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
20d7d1ecc0SAlan Somers * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21d7d1ecc0SAlan Somers * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22d7d1ecc0SAlan Somers * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23d7d1ecc0SAlan Somers * SUCH DAMAGE.
24d7d1ecc0SAlan Somers */
25d7d1ecc0SAlan Somers
26d7d1ecc0SAlan Somers #include <sys/types.h>
27d7d1ecc0SAlan Somers #include <sys/ipc.h>
28d7d1ecc0SAlan Somers #include <sys/mman.h>
29d7d1ecc0SAlan Somers #include <sys/msg.h>
308f2433ebSAlan Somers #include <sys/shm.h>
314aabb64aSAlan Somers #define _WANT_SEMUN
324aabb64aSAlan Somers #include <sys/sem.h>
33d7d1ecc0SAlan Somers #include <sys/stat.h>
34d7d1ecc0SAlan Somers
35d7d1ecc0SAlan Somers #include <atf-c.h>
36d7d1ecc0SAlan Somers #include <fcntl.h>
373d3d0178SAlan Somers #include <stdlib.h>
38d7d1ecc0SAlan Somers #include <unistd.h>
39d7d1ecc0SAlan Somers
40d7d1ecc0SAlan Somers #include "utils.h"
41d7d1ecc0SAlan Somers #define BUFFSIZE 80
42d7d1ecc0SAlan Somers
43d7d1ecc0SAlan Somers struct msgstr {
44d7d1ecc0SAlan Somers long int mtype;
45d7d1ecc0SAlan Somers char mtext[BUFFSIZE];
46d7d1ecc0SAlan Somers };
47d7d1ecc0SAlan Somers typedef struct msgstr msgstr_t;
48d7d1ecc0SAlan Somers
498f2433ebSAlan Somers static pid_t pid;
504aabb64aSAlan Somers static int msqid, shmid, semid;
514aabb64aSAlan Somers static union semun semarg;
52d7d1ecc0SAlan Somers static struct pollfd fds[1];
53d7d1ecc0SAlan Somers static struct msqid_ds msgbuff;
548f2433ebSAlan Somers static struct shmid_ds shmbuff;
554aabb64aSAlan Somers static struct semid_ds sembuff;
56d7d1ecc0SAlan Somers static char ipcregex[BUFFSIZE];
57d7d1ecc0SAlan Somers static const char *auclass = "ip";
583d3d0178SAlan Somers static char path[BUFFSIZE] = "/fileforaudit";
594aabb64aSAlan Somers static unsigned short semvals[BUFFSIZE];
60d7d1ecc0SAlan Somers
61d7d1ecc0SAlan Somers
62d7d1ecc0SAlan Somers ATF_TC_WITH_CLEANUP(msgget_success);
ATF_TC_HEAD(msgget_success,tc)63d7d1ecc0SAlan Somers ATF_TC_HEAD(msgget_success, tc)
64d7d1ecc0SAlan Somers {
65d7d1ecc0SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
66d7d1ecc0SAlan Somers "msgget(2) call");
67d7d1ecc0SAlan Somers }
68d7d1ecc0SAlan Somers
ATF_TC_BODY(msgget_success,tc)69d7d1ecc0SAlan Somers ATF_TC_BODY(msgget_success, tc)
70d7d1ecc0SAlan Somers {
71d7d1ecc0SAlan Somers FILE *pipefd = setup(fds, auclass);
72d7d1ecc0SAlan Somers /* Create a message queue and obtain the corresponding identifier */
73d7d1ecc0SAlan Somers ATF_REQUIRE((msqid = msgget(IPC_PRIVATE, IPC_CREAT | S_IRUSR)) != -1);
74d7d1ecc0SAlan Somers /* Check the presence of message queue ID in audit record */
75d7d1ecc0SAlan Somers snprintf(ipcregex, sizeof(ipcregex),
76d7d1ecc0SAlan Somers "msgget.*return,success,%d", msqid);
77d7d1ecc0SAlan Somers check_audit(fds, ipcregex, pipefd);
78d7d1ecc0SAlan Somers
79d7d1ecc0SAlan Somers /* Destroy the message queue with ID = msqid */
80d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(0, msgctl(msqid, IPC_RMID, NULL));
81d7d1ecc0SAlan Somers }
82d7d1ecc0SAlan Somers
ATF_TC_CLEANUP(msgget_success,tc)83d7d1ecc0SAlan Somers ATF_TC_CLEANUP(msgget_success, tc)
84d7d1ecc0SAlan Somers {
85d7d1ecc0SAlan Somers cleanup();
86d7d1ecc0SAlan Somers }
87d7d1ecc0SAlan Somers
88d7d1ecc0SAlan Somers
89d7d1ecc0SAlan Somers ATF_TC_WITH_CLEANUP(msgget_failure);
ATF_TC_HEAD(msgget_failure,tc)90d7d1ecc0SAlan Somers ATF_TC_HEAD(msgget_failure, tc)
91d7d1ecc0SAlan Somers {
92d7d1ecc0SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
93d7d1ecc0SAlan Somers "msgget(2) call");
94d7d1ecc0SAlan Somers }
95d7d1ecc0SAlan Somers
ATF_TC_BODY(msgget_failure,tc)96d7d1ecc0SAlan Somers ATF_TC_BODY(msgget_failure, tc)
97d7d1ecc0SAlan Somers {
98d7d1ecc0SAlan Somers const char *regex = "msgget.*return,failure.*No such file or directory";
99d7d1ecc0SAlan Somers FILE *pipefd = setup(fds, auclass);
100d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(-1, msgget((key_t)(-1), 0));
101d7d1ecc0SAlan Somers check_audit(fds, regex, pipefd);
102d7d1ecc0SAlan Somers }
103d7d1ecc0SAlan Somers
ATF_TC_CLEANUP(msgget_failure,tc)104d7d1ecc0SAlan Somers ATF_TC_CLEANUP(msgget_failure, tc)
105d7d1ecc0SAlan Somers {
106d7d1ecc0SAlan Somers cleanup();
107d7d1ecc0SAlan Somers }
108d7d1ecc0SAlan Somers
109d7d1ecc0SAlan Somers
110d7d1ecc0SAlan Somers ATF_TC_WITH_CLEANUP(msgsnd_success);
ATF_TC_HEAD(msgsnd_success,tc)111d7d1ecc0SAlan Somers ATF_TC_HEAD(msgsnd_success, tc)
112d7d1ecc0SAlan Somers {
113d7d1ecc0SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
114d7d1ecc0SAlan Somers "msgsnd(2) call");
115d7d1ecc0SAlan Somers }
116d7d1ecc0SAlan Somers
ATF_TC_BODY(msgsnd_success,tc)117d7d1ecc0SAlan Somers ATF_TC_BODY(msgsnd_success, tc)
118d7d1ecc0SAlan Somers {
119d7d1ecc0SAlan Somers /* Create a message queue and obtain the corresponding identifier */
120d7d1ecc0SAlan Somers ATF_REQUIRE((msqid = msgget(IPC_PRIVATE, IPC_CREAT | S_IRUSR)) != -1);
121d7d1ecc0SAlan Somers
122d7d1ecc0SAlan Somers /* Initialize a msgstr_t structure to store message */
123d7d1ecc0SAlan Somers msgstr_t msg;
124d7d1ecc0SAlan Somers msg.mtype = 1;
125d7d1ecc0SAlan Somers memset(msg.mtext, 0, BUFFSIZE);
126d7d1ecc0SAlan Somers
127d7d1ecc0SAlan Somers /* Check the presence of message queue ID in audit record */
128d7d1ecc0SAlan Somers snprintf(ipcregex, sizeof(ipcregex),
129d7d1ecc0SAlan Somers "msgsnd.*Message IPC.*%d.*return,success", msqid);
130d7d1ecc0SAlan Somers
131d7d1ecc0SAlan Somers FILE *pipefd = setup(fds, auclass);
132d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(0, msgsnd(msqid, &msg, BUFFSIZE, IPC_NOWAIT));
133d7d1ecc0SAlan Somers check_audit(fds, ipcregex, pipefd);
134d7d1ecc0SAlan Somers
135d7d1ecc0SAlan Somers /* Destroy the message queue with ID = msqid */
136d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(0, msgctl(msqid, IPC_RMID, NULL));
137d7d1ecc0SAlan Somers }
138d7d1ecc0SAlan Somers
ATF_TC_CLEANUP(msgsnd_success,tc)139d7d1ecc0SAlan Somers ATF_TC_CLEANUP(msgsnd_success, tc)
140d7d1ecc0SAlan Somers {
141d7d1ecc0SAlan Somers cleanup();
142d7d1ecc0SAlan Somers }
143d7d1ecc0SAlan Somers
144d7d1ecc0SAlan Somers
145d7d1ecc0SAlan Somers ATF_TC_WITH_CLEANUP(msgsnd_failure);
ATF_TC_HEAD(msgsnd_failure,tc)146d7d1ecc0SAlan Somers ATF_TC_HEAD(msgsnd_failure, tc)
147d7d1ecc0SAlan Somers {
148d7d1ecc0SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
149d7d1ecc0SAlan Somers "msgsnd(2) call");
150d7d1ecc0SAlan Somers }
151d7d1ecc0SAlan Somers
ATF_TC_BODY(msgsnd_failure,tc)152d7d1ecc0SAlan Somers ATF_TC_BODY(msgsnd_failure, tc)
153d7d1ecc0SAlan Somers {
154d7d1ecc0SAlan Somers const char *regex = "msgsnd.*Message IPC.*return,failure : Bad address";
155d7d1ecc0SAlan Somers FILE *pipefd = setup(fds, auclass);
156d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(-1, msgsnd(-1, NULL, 0, IPC_NOWAIT));
157d7d1ecc0SAlan Somers check_audit(fds, regex, pipefd);
158d7d1ecc0SAlan Somers }
159d7d1ecc0SAlan Somers
ATF_TC_CLEANUP(msgsnd_failure,tc)160d7d1ecc0SAlan Somers ATF_TC_CLEANUP(msgsnd_failure, tc)
161d7d1ecc0SAlan Somers {
162d7d1ecc0SAlan Somers cleanup();
163d7d1ecc0SAlan Somers }
164d7d1ecc0SAlan Somers
165d7d1ecc0SAlan Somers
166d7d1ecc0SAlan Somers ATF_TC_WITH_CLEANUP(msgrcv_success);
ATF_TC_HEAD(msgrcv_success,tc)167d7d1ecc0SAlan Somers ATF_TC_HEAD(msgrcv_success, tc)
168d7d1ecc0SAlan Somers {
169d7d1ecc0SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
170d7d1ecc0SAlan Somers "msgrcv(2) call");
171d7d1ecc0SAlan Somers }
172d7d1ecc0SAlan Somers
ATF_TC_BODY(msgrcv_success,tc)173d7d1ecc0SAlan Somers ATF_TC_BODY(msgrcv_success, tc)
174d7d1ecc0SAlan Somers {
175d7d1ecc0SAlan Somers ssize_t recv_bytes;
176d7d1ecc0SAlan Somers /* Create a message queue and obtain the corresponding identifier */
177d7d1ecc0SAlan Somers ATF_REQUIRE((msqid = msgget(IPC_PRIVATE, IPC_CREAT | S_IRUSR)) != -1);
178d7d1ecc0SAlan Somers
179d7d1ecc0SAlan Somers /* Initialize two msgstr_t structures to store respective messages */
180d7d1ecc0SAlan Somers msgstr_t msg1, msg2;
181d7d1ecc0SAlan Somers msg1.mtype = 1;
182d7d1ecc0SAlan Somers memset(msg1.mtext, 0, BUFFSIZE);
183d7d1ecc0SAlan Somers
184d7d1ecc0SAlan Somers /* Send a message to the queue with ID = msqid */
185d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(0, msgsnd(msqid, &msg1, BUFFSIZE, IPC_NOWAIT));
186d7d1ecc0SAlan Somers
187d7d1ecc0SAlan Somers FILE *pipefd = setup(fds, auclass);
188d7d1ecc0SAlan Somers ATF_REQUIRE((recv_bytes = msgrcv(msqid, &msg2,
189d7d1ecc0SAlan Somers BUFFSIZE, 0, MSG_NOERROR | IPC_NOWAIT)) != -1);
190d7d1ecc0SAlan Somers /* Check the presence of queue ID and returned bytes in audit record */
191d7d1ecc0SAlan Somers snprintf(ipcregex, sizeof(ipcregex),
192d7d1ecc0SAlan Somers "msgrcv.*Message IPC,*%d.*return,success,%zd", msqid, recv_bytes);
193d7d1ecc0SAlan Somers check_audit(fds, ipcregex, pipefd);
194d7d1ecc0SAlan Somers
195d7d1ecc0SAlan Somers /* Destroy the message queue with ID = msqid */
196d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(0, msgctl(msqid, IPC_RMID, NULL));
197d7d1ecc0SAlan Somers }
198d7d1ecc0SAlan Somers
ATF_TC_CLEANUP(msgrcv_success,tc)199d7d1ecc0SAlan Somers ATF_TC_CLEANUP(msgrcv_success, tc)
200d7d1ecc0SAlan Somers {
201d7d1ecc0SAlan Somers cleanup();
202d7d1ecc0SAlan Somers }
203d7d1ecc0SAlan Somers
204d7d1ecc0SAlan Somers
205d7d1ecc0SAlan Somers ATF_TC_WITH_CLEANUP(msgrcv_failure);
ATF_TC_HEAD(msgrcv_failure,tc)206d7d1ecc0SAlan Somers ATF_TC_HEAD(msgrcv_failure, tc)
207d7d1ecc0SAlan Somers {
208d7d1ecc0SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
209d7d1ecc0SAlan Somers "msgrcv(2) call");
210d7d1ecc0SAlan Somers }
211d7d1ecc0SAlan Somers
ATF_TC_BODY(msgrcv_failure,tc)212d7d1ecc0SAlan Somers ATF_TC_BODY(msgrcv_failure, tc)
213d7d1ecc0SAlan Somers {
214d7d1ecc0SAlan Somers const char *regex = "msgrcv.*return,failure : Invalid argument";
215d7d1ecc0SAlan Somers FILE *pipefd = setup(fds, auclass);
216d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(-1, msgrcv(-1, NULL, 0, 0, MSG_NOERROR | IPC_NOWAIT));
217d7d1ecc0SAlan Somers check_audit(fds, regex, pipefd);
218d7d1ecc0SAlan Somers }
219d7d1ecc0SAlan Somers
ATF_TC_CLEANUP(msgrcv_failure,tc)220d7d1ecc0SAlan Somers ATF_TC_CLEANUP(msgrcv_failure, tc)
221d7d1ecc0SAlan Somers {
222d7d1ecc0SAlan Somers cleanup();
223d7d1ecc0SAlan Somers }
224d7d1ecc0SAlan Somers
225d7d1ecc0SAlan Somers
226d7d1ecc0SAlan Somers ATF_TC_WITH_CLEANUP(msgctl_rmid_success);
ATF_TC_HEAD(msgctl_rmid_success,tc)227d7d1ecc0SAlan Somers ATF_TC_HEAD(msgctl_rmid_success, tc)
228d7d1ecc0SAlan Somers {
229d7d1ecc0SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
230d7d1ecc0SAlan Somers "msgctl(2) call for IPC_RMID command");
231d7d1ecc0SAlan Somers }
232d7d1ecc0SAlan Somers
ATF_TC_BODY(msgctl_rmid_success,tc)233d7d1ecc0SAlan Somers ATF_TC_BODY(msgctl_rmid_success, tc)
234d7d1ecc0SAlan Somers {
235d7d1ecc0SAlan Somers /* Create a message queue and obtain the corresponding identifier */
236d7d1ecc0SAlan Somers ATF_REQUIRE((msqid = msgget(IPC_PRIVATE, IPC_CREAT | S_IRUSR)) != -1);
237d7d1ecc0SAlan Somers
238d7d1ecc0SAlan Somers FILE *pipefd = setup(fds, auclass);
239d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(0, msgctl(msqid, IPC_RMID, NULL));
240d7d1ecc0SAlan Somers /* Check the presence of queue ID and IPC_RMID in audit record */
241d7d1ecc0SAlan Somers snprintf(ipcregex, sizeof(ipcregex),
242d7d1ecc0SAlan Somers "msgctl.*IPC_RMID.*%d.*return,success", msqid);
243d7d1ecc0SAlan Somers check_audit(fds, ipcregex, pipefd);
244d7d1ecc0SAlan Somers }
245d7d1ecc0SAlan Somers
ATF_TC_CLEANUP(msgctl_rmid_success,tc)246d7d1ecc0SAlan Somers ATF_TC_CLEANUP(msgctl_rmid_success, tc)
247d7d1ecc0SAlan Somers {
248d7d1ecc0SAlan Somers cleanup();
249d7d1ecc0SAlan Somers }
250d7d1ecc0SAlan Somers
251d7d1ecc0SAlan Somers
252d7d1ecc0SAlan Somers ATF_TC_WITH_CLEANUP(msgctl_rmid_failure);
ATF_TC_HEAD(msgctl_rmid_failure,tc)253d7d1ecc0SAlan Somers ATF_TC_HEAD(msgctl_rmid_failure, tc)
254d7d1ecc0SAlan Somers {
255d7d1ecc0SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
256d7d1ecc0SAlan Somers "msgctl(2) call for IPC_RMID command");
257d7d1ecc0SAlan Somers }
258d7d1ecc0SAlan Somers
ATF_TC_BODY(msgctl_rmid_failure,tc)259d7d1ecc0SAlan Somers ATF_TC_BODY(msgctl_rmid_failure, tc)
260d7d1ecc0SAlan Somers {
261d7d1ecc0SAlan Somers const char *regex = "msgctl.*IPC_RMID.*return,failur.*Invalid argument";
262d7d1ecc0SAlan Somers FILE *pipefd = setup(fds, auclass);
263d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(-1, msgctl(-1, IPC_RMID, NULL));
264d7d1ecc0SAlan Somers check_audit(fds, regex, pipefd);
265d7d1ecc0SAlan Somers }
266d7d1ecc0SAlan Somers
ATF_TC_CLEANUP(msgctl_rmid_failure,tc)267d7d1ecc0SAlan Somers ATF_TC_CLEANUP(msgctl_rmid_failure, tc)
268d7d1ecc0SAlan Somers {
269d7d1ecc0SAlan Somers cleanup();
270d7d1ecc0SAlan Somers }
271d7d1ecc0SAlan Somers
272d7d1ecc0SAlan Somers
273d7d1ecc0SAlan Somers ATF_TC_WITH_CLEANUP(msgctl_stat_success);
ATF_TC_HEAD(msgctl_stat_success,tc)274d7d1ecc0SAlan Somers ATF_TC_HEAD(msgctl_stat_success, tc)
275d7d1ecc0SAlan Somers {
276d7d1ecc0SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
277d7d1ecc0SAlan Somers "msgctl(2) call for IPC_STAT command");
278d7d1ecc0SAlan Somers }
279d7d1ecc0SAlan Somers
ATF_TC_BODY(msgctl_stat_success,tc)280d7d1ecc0SAlan Somers ATF_TC_BODY(msgctl_stat_success, tc)
281d7d1ecc0SAlan Somers {
282d7d1ecc0SAlan Somers /* Create a message queue and obtain the corresponding identifier */
283d7d1ecc0SAlan Somers ATF_REQUIRE((msqid = msgget(IPC_PRIVATE, IPC_CREAT | S_IRUSR)) != -1);
284d7d1ecc0SAlan Somers
285d7d1ecc0SAlan Somers FILE *pipefd = setup(fds, auclass);
286d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(0, msgctl(msqid, IPC_STAT, &msgbuff));
287d7d1ecc0SAlan Somers /* Check the presence of queue ID and IPC_STAT in audit record */
288d7d1ecc0SAlan Somers snprintf(ipcregex, sizeof(ipcregex),
289d7d1ecc0SAlan Somers "msgctl.*IPC_STAT.*%d.*return,success", msqid);
290d7d1ecc0SAlan Somers check_audit(fds, ipcregex, pipefd);
291d7d1ecc0SAlan Somers
292d7d1ecc0SAlan Somers /* Destroy the message queue with ID = msqid */
293d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(0, msgctl(msqid, IPC_RMID, NULL));
294d7d1ecc0SAlan Somers }
295d7d1ecc0SAlan Somers
ATF_TC_CLEANUP(msgctl_stat_success,tc)296d7d1ecc0SAlan Somers ATF_TC_CLEANUP(msgctl_stat_success, tc)
297d7d1ecc0SAlan Somers {
298d7d1ecc0SAlan Somers cleanup();
299d7d1ecc0SAlan Somers }
300d7d1ecc0SAlan Somers
301d7d1ecc0SAlan Somers
302d7d1ecc0SAlan Somers ATF_TC_WITH_CLEANUP(msgctl_stat_failure);
ATF_TC_HEAD(msgctl_stat_failure,tc)303d7d1ecc0SAlan Somers ATF_TC_HEAD(msgctl_stat_failure, tc)
304d7d1ecc0SAlan Somers {
305d7d1ecc0SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
306d7d1ecc0SAlan Somers "msgctl(2) call for IPC_STAT command");
307d7d1ecc0SAlan Somers }
308d7d1ecc0SAlan Somers
ATF_TC_BODY(msgctl_stat_failure,tc)309d7d1ecc0SAlan Somers ATF_TC_BODY(msgctl_stat_failure, tc)
310d7d1ecc0SAlan Somers {
311d7d1ecc0SAlan Somers const char *regex = "msgctl.*IPC_STAT.*return,failur.*Invalid argument";
312d7d1ecc0SAlan Somers FILE *pipefd = setup(fds, auclass);
313d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(-1, msgctl(-1, IPC_STAT, &msgbuff));
314d7d1ecc0SAlan Somers check_audit(fds, regex, pipefd);
315d7d1ecc0SAlan Somers }
316d7d1ecc0SAlan Somers
ATF_TC_CLEANUP(msgctl_stat_failure,tc)317d7d1ecc0SAlan Somers ATF_TC_CLEANUP(msgctl_stat_failure, tc)
318d7d1ecc0SAlan Somers {
319d7d1ecc0SAlan Somers cleanup();
320d7d1ecc0SAlan Somers }
321d7d1ecc0SAlan Somers
322d7d1ecc0SAlan Somers
323d7d1ecc0SAlan Somers ATF_TC_WITH_CLEANUP(msgctl_set_success);
ATF_TC_HEAD(msgctl_set_success,tc)324d7d1ecc0SAlan Somers ATF_TC_HEAD(msgctl_set_success, tc)
325d7d1ecc0SAlan Somers {
326d7d1ecc0SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
327d7d1ecc0SAlan Somers "msgctl(2) call for IPC_SET command");
328d7d1ecc0SAlan Somers }
329d7d1ecc0SAlan Somers
ATF_TC_BODY(msgctl_set_success,tc)330d7d1ecc0SAlan Somers ATF_TC_BODY(msgctl_set_success, tc)
331d7d1ecc0SAlan Somers {
332d7d1ecc0SAlan Somers /* Create a message queue and obtain the corresponding identifier */
333d7d1ecc0SAlan Somers ATF_REQUIRE((msqid = msgget(IPC_PRIVATE, IPC_CREAT | S_IRUSR)) != -1);
334d7d1ecc0SAlan Somers /* Fill up the msgbuff structure to be used with IPC_SET */
335d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(0, msgctl(msqid, IPC_STAT, &msgbuff));
336d7d1ecc0SAlan Somers
337d7d1ecc0SAlan Somers FILE *pipefd = setup(fds, auclass);
338d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(0, msgctl(msqid, IPC_SET, &msgbuff));
339d7d1ecc0SAlan Somers /* Check the presence of message queue ID in audit record */
340d7d1ecc0SAlan Somers snprintf(ipcregex, sizeof(ipcregex),
341d7d1ecc0SAlan Somers "msgctl.*IPC_SET.*%d.*return,success", msqid);
342d7d1ecc0SAlan Somers check_audit(fds, ipcregex, pipefd);
343d7d1ecc0SAlan Somers
344d7d1ecc0SAlan Somers /* Destroy the message queue with ID = msqid */
345d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(0, msgctl(msqid, IPC_RMID, NULL));
346d7d1ecc0SAlan Somers }
347d7d1ecc0SAlan Somers
ATF_TC_CLEANUP(msgctl_set_success,tc)348d7d1ecc0SAlan Somers ATF_TC_CLEANUP(msgctl_set_success, tc)
349d7d1ecc0SAlan Somers {
350d7d1ecc0SAlan Somers cleanup();
351d7d1ecc0SAlan Somers }
352d7d1ecc0SAlan Somers
353d7d1ecc0SAlan Somers
354d7d1ecc0SAlan Somers ATF_TC_WITH_CLEANUP(msgctl_set_failure);
ATF_TC_HEAD(msgctl_set_failure,tc)355d7d1ecc0SAlan Somers ATF_TC_HEAD(msgctl_set_failure, tc)
356d7d1ecc0SAlan Somers {
357d7d1ecc0SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
358d7d1ecc0SAlan Somers "msgctl(2) call for IPC_SET command");
359d7d1ecc0SAlan Somers }
360d7d1ecc0SAlan Somers
ATF_TC_BODY(msgctl_set_failure,tc)361d7d1ecc0SAlan Somers ATF_TC_BODY(msgctl_set_failure, tc)
362d7d1ecc0SAlan Somers {
363d7d1ecc0SAlan Somers const char *regex = "msgctl.*IPC_SET.*return,failure.*Invalid argument";
364d7d1ecc0SAlan Somers FILE *pipefd = setup(fds, auclass);
365d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(-1, msgctl(-1, IPC_SET, &msgbuff));
366d7d1ecc0SAlan Somers check_audit(fds, regex, pipefd);
367d7d1ecc0SAlan Somers }
368d7d1ecc0SAlan Somers
ATF_TC_CLEANUP(msgctl_set_failure,tc)369d7d1ecc0SAlan Somers ATF_TC_CLEANUP(msgctl_set_failure, tc)
370d7d1ecc0SAlan Somers {
371d7d1ecc0SAlan Somers cleanup();
372d7d1ecc0SAlan Somers }
373d7d1ecc0SAlan Somers
374d7d1ecc0SAlan Somers
375d7d1ecc0SAlan Somers ATF_TC_WITH_CLEANUP(msgctl_illegal_command);
ATF_TC_HEAD(msgctl_illegal_command,tc)376d7d1ecc0SAlan Somers ATF_TC_HEAD(msgctl_illegal_command, tc)
377d7d1ecc0SAlan Somers {
378d7d1ecc0SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
379d7d1ecc0SAlan Somers "msgctl(2) call for illegal cmd value");
380d7d1ecc0SAlan Somers }
381d7d1ecc0SAlan Somers
ATF_TC_BODY(msgctl_illegal_command,tc)382d7d1ecc0SAlan Somers ATF_TC_BODY(msgctl_illegal_command, tc)
383d7d1ecc0SAlan Somers {
384d7d1ecc0SAlan Somers /* Create a message queue and obtain the corresponding identifier */
385d7d1ecc0SAlan Somers ATF_REQUIRE((msqid = msgget(IPC_PRIVATE, IPC_CREAT | S_IRUSR)) != -1);
386d7d1ecc0SAlan Somers
387d7d1ecc0SAlan Somers const char *regex = "msgctl.*illegal command.*failur.*Invalid argument";
388d7d1ecc0SAlan Somers FILE *pipefd = setup(fds, auclass);
389d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(-1, msgctl(msqid, -1, &msgbuff));
390d7d1ecc0SAlan Somers check_audit(fds, regex, pipefd);
391d7d1ecc0SAlan Somers
392d7d1ecc0SAlan Somers /* Destroy the message queue with ID = msqid */
393d7d1ecc0SAlan Somers ATF_REQUIRE_EQ(0, msgctl(msqid, IPC_RMID, NULL));
394d7d1ecc0SAlan Somers }
395d7d1ecc0SAlan Somers
ATF_TC_CLEANUP(msgctl_illegal_command,tc)396d7d1ecc0SAlan Somers ATF_TC_CLEANUP(msgctl_illegal_command, tc)
397d7d1ecc0SAlan Somers {
398d7d1ecc0SAlan Somers cleanup();
399d7d1ecc0SAlan Somers }
400d7d1ecc0SAlan Somers
401d7d1ecc0SAlan Somers
4028f2433ebSAlan Somers ATF_TC_WITH_CLEANUP(shmget_success);
ATF_TC_HEAD(shmget_success,tc)4038f2433ebSAlan Somers ATF_TC_HEAD(shmget_success, tc)
4048f2433ebSAlan Somers {
4058f2433ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
4068f2433ebSAlan Somers "shmget(2) call");
4078f2433ebSAlan Somers }
4088f2433ebSAlan Somers
ATF_TC_BODY(shmget_success,tc)4098f2433ebSAlan Somers ATF_TC_BODY(shmget_success, tc)
4108f2433ebSAlan Somers {
4118f2433ebSAlan Somers FILE *pipefd = setup(fds, auclass);
4128f2433ebSAlan Somers ATF_REQUIRE((shmid =
4138f2433ebSAlan Somers shmget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
4148f2433ebSAlan Somers /* Check the presence of shared memory ID in audit record */
4158f2433ebSAlan Somers snprintf(ipcregex, sizeof(ipcregex), "shmget.*ret.*success,%d", shmid);
4168f2433ebSAlan Somers check_audit(fds, ipcregex, pipefd);
4178f2433ebSAlan Somers
4188f2433ebSAlan Somers /* Destroy the shared memory with ID = shmid */
4198f2433ebSAlan Somers ATF_REQUIRE_EQ(0, shmctl(shmid, IPC_RMID, NULL));
4208f2433ebSAlan Somers }
4218f2433ebSAlan Somers
ATF_TC_CLEANUP(shmget_success,tc)4228f2433ebSAlan Somers ATF_TC_CLEANUP(shmget_success, tc)
4238f2433ebSAlan Somers {
4248f2433ebSAlan Somers cleanup();
4258f2433ebSAlan Somers }
4268f2433ebSAlan Somers
4278f2433ebSAlan Somers
4288f2433ebSAlan Somers ATF_TC_WITH_CLEANUP(shmget_failure);
ATF_TC_HEAD(shmget_failure,tc)4298f2433ebSAlan Somers ATF_TC_HEAD(shmget_failure, tc)
4308f2433ebSAlan Somers {
4318f2433ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
4328f2433ebSAlan Somers "shmget(2) call");
4338f2433ebSAlan Somers }
4348f2433ebSAlan Somers
ATF_TC_BODY(shmget_failure,tc)4358f2433ebSAlan Somers ATF_TC_BODY(shmget_failure, tc)
4368f2433ebSAlan Somers {
4378f2433ebSAlan Somers const char *regex = "shmget.*return,failure.*No such file or directory";
4388f2433ebSAlan Somers FILE *pipefd = setup(fds, auclass);
4398f2433ebSAlan Somers ATF_REQUIRE_EQ(-1, shmget((key_t)(-1), 0, 0));
4408f2433ebSAlan Somers check_audit(fds, regex, pipefd);
4418f2433ebSAlan Somers }
4428f2433ebSAlan Somers
ATF_TC_CLEANUP(shmget_failure,tc)4438f2433ebSAlan Somers ATF_TC_CLEANUP(shmget_failure, tc)
4448f2433ebSAlan Somers {
4458f2433ebSAlan Somers cleanup();
4468f2433ebSAlan Somers }
4478f2433ebSAlan Somers
4488f2433ebSAlan Somers
4498f2433ebSAlan Somers ATF_TC_WITH_CLEANUP(shmat_success);
ATF_TC_HEAD(shmat_success,tc)4508f2433ebSAlan Somers ATF_TC_HEAD(shmat_success, tc)
4518f2433ebSAlan Somers {
4528f2433ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
4538f2433ebSAlan Somers "shmat(2) call");
4548f2433ebSAlan Somers }
4558f2433ebSAlan Somers
ATF_TC_BODY(shmat_success,tc)4568f2433ebSAlan Somers ATF_TC_BODY(shmat_success, tc)
4578f2433ebSAlan Somers {
4588f2433ebSAlan Somers void *addr;
4598f2433ebSAlan Somers /* Create a shared memory segment and obtain the identifier */
4608f2433ebSAlan Somers ATF_REQUIRE((shmid =
4618f2433ebSAlan Somers shmget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
4628f2433ebSAlan Somers
4638f2433ebSAlan Somers FILE *pipefd = setup(fds, auclass);
4648f2433ebSAlan Somers ATF_REQUIRE((intptr_t)(addr = shmat(shmid, NULL, 0)) != -1);
4658f2433ebSAlan Somers
4668f2433ebSAlan Somers /* Check for shared memory ID and process address in record */
4678f2433ebSAlan Somers snprintf(ipcregex, sizeof(ipcregex), "shmat.*Shared Memory "
4684107f2c4SAlan Somers "IPC.*%d.*return,success", shmid);
4698f2433ebSAlan Somers check_audit(fds, ipcregex, pipefd);
4708f2433ebSAlan Somers
4718f2433ebSAlan Somers /* Destroy the shared memory with ID = shmid */
4728f2433ebSAlan Somers ATF_REQUIRE_EQ(0, shmctl(shmid, IPC_RMID, NULL));
4738f2433ebSAlan Somers }
4748f2433ebSAlan Somers
ATF_TC_CLEANUP(shmat_success,tc)4758f2433ebSAlan Somers ATF_TC_CLEANUP(shmat_success, tc)
4768f2433ebSAlan Somers {
4778f2433ebSAlan Somers cleanup();
4788f2433ebSAlan Somers }
4798f2433ebSAlan Somers
4808f2433ebSAlan Somers
4818f2433ebSAlan Somers ATF_TC_WITH_CLEANUP(shmat_failure);
ATF_TC_HEAD(shmat_failure,tc)4828f2433ebSAlan Somers ATF_TC_HEAD(shmat_failure, tc)
4838f2433ebSAlan Somers {
4848f2433ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
4858f2433ebSAlan Somers "shmat(2) call");
4868f2433ebSAlan Somers }
4878f2433ebSAlan Somers
ATF_TC_BODY(shmat_failure,tc)4888f2433ebSAlan Somers ATF_TC_BODY(shmat_failure, tc)
4898f2433ebSAlan Somers {
4908f2433ebSAlan Somers const char *regex = "shmat.*Shared Memory IPC.*return,failure";
4918f2433ebSAlan Somers FILE *pipefd = setup(fds, auclass);
4928f2433ebSAlan Somers ATF_REQUIRE_EQ(-1, (intptr_t)shmat(-1, NULL, 0));
4938f2433ebSAlan Somers check_audit(fds, regex, pipefd);
4948f2433ebSAlan Somers }
4958f2433ebSAlan Somers
ATF_TC_CLEANUP(shmat_failure,tc)4968f2433ebSAlan Somers ATF_TC_CLEANUP(shmat_failure, tc)
4978f2433ebSAlan Somers {
4988f2433ebSAlan Somers cleanup();
4998f2433ebSAlan Somers }
5008f2433ebSAlan Somers
5018f2433ebSAlan Somers
5028f2433ebSAlan Somers ATF_TC_WITH_CLEANUP(shmdt_success);
ATF_TC_HEAD(shmdt_success,tc)5038f2433ebSAlan Somers ATF_TC_HEAD(shmdt_success, tc)
5048f2433ebSAlan Somers {
5058f2433ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
5068f2433ebSAlan Somers "shmdt(2) call");
5078f2433ebSAlan Somers }
5088f2433ebSAlan Somers
ATF_TC_BODY(shmdt_success,tc)5098f2433ebSAlan Somers ATF_TC_BODY(shmdt_success, tc)
5108f2433ebSAlan Somers {
5118f2433ebSAlan Somers void *addr;
5128f2433ebSAlan Somers pid = getpid();
5138f2433ebSAlan Somers snprintf(ipcregex, sizeof(ipcregex), "shmdt.*%d.*return,success", pid);
5148f2433ebSAlan Somers
5158f2433ebSAlan Somers /* Create a shared memory segment and obtain the identifier */
5168f2433ebSAlan Somers ATF_REQUIRE((shmid =
5178f2433ebSAlan Somers shmget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
5188f2433ebSAlan Somers
5198f2433ebSAlan Somers /* Attach the shared memory to calling process's address space */
5208f2433ebSAlan Somers ATF_REQUIRE((intptr_t)(addr = shmat(shmid, NULL, 0)) != -1);
5218f2433ebSAlan Somers
5228f2433ebSAlan Somers FILE *pipefd = setup(fds, auclass);
5238f2433ebSAlan Somers ATF_REQUIRE_EQ(0, shmdt(addr));
5248f2433ebSAlan Somers check_audit(fds, ipcregex, pipefd);
5258f2433ebSAlan Somers
5268f2433ebSAlan Somers /* Destroy the shared memory with ID = shmid */
5278f2433ebSAlan Somers ATF_REQUIRE_EQ(0, shmctl(shmid, IPC_RMID, NULL));
5288f2433ebSAlan Somers }
5298f2433ebSAlan Somers
ATF_TC_CLEANUP(shmdt_success,tc)5308f2433ebSAlan Somers ATF_TC_CLEANUP(shmdt_success, tc)
5318f2433ebSAlan Somers {
5328f2433ebSAlan Somers cleanup();
5338f2433ebSAlan Somers }
5348f2433ebSAlan Somers
5358f2433ebSAlan Somers
5368f2433ebSAlan Somers ATF_TC_WITH_CLEANUP(shmdt_failure);
ATF_TC_HEAD(shmdt_failure,tc)5378f2433ebSAlan Somers ATF_TC_HEAD(shmdt_failure, tc)
5388f2433ebSAlan Somers {
5398f2433ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
5408f2433ebSAlan Somers "shmdt(2) call");
5418f2433ebSAlan Somers }
5428f2433ebSAlan Somers
ATF_TC_BODY(shmdt_failure,tc)5438f2433ebSAlan Somers ATF_TC_BODY(shmdt_failure, tc)
5448f2433ebSAlan Somers {
5458f2433ebSAlan Somers const char *regex = "shmdt.*return,failure : Invalid argument";
5468f2433ebSAlan Somers FILE *pipefd = setup(fds, auclass);
5478f2433ebSAlan Somers ATF_REQUIRE_EQ(-1, shmdt(NULL));
5488f2433ebSAlan Somers check_audit(fds, regex, pipefd);
5498f2433ebSAlan Somers }
5508f2433ebSAlan Somers
ATF_TC_CLEANUP(shmdt_failure,tc)5518f2433ebSAlan Somers ATF_TC_CLEANUP(shmdt_failure, tc)
5528f2433ebSAlan Somers {
5538f2433ebSAlan Somers cleanup();
5548f2433ebSAlan Somers }
5558f2433ebSAlan Somers
5568f2433ebSAlan Somers
5578f2433ebSAlan Somers ATF_TC_WITH_CLEANUP(shmctl_rmid_success);
ATF_TC_HEAD(shmctl_rmid_success,tc)5588f2433ebSAlan Somers ATF_TC_HEAD(shmctl_rmid_success, tc)
5598f2433ebSAlan Somers {
5608f2433ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
5618f2433ebSAlan Somers "shmctl(2) call for IPC_RMID command");
5628f2433ebSAlan Somers }
5638f2433ebSAlan Somers
ATF_TC_BODY(shmctl_rmid_success,tc)5648f2433ebSAlan Somers ATF_TC_BODY(shmctl_rmid_success, tc)
5658f2433ebSAlan Somers {
5668f2433ebSAlan Somers /* Create a shared memory segment and obtain the identifier */
5678f2433ebSAlan Somers ATF_REQUIRE((shmid =
5688f2433ebSAlan Somers shmget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
5698f2433ebSAlan Somers
5708f2433ebSAlan Somers FILE *pipefd = setup(fds, auclass);
5718f2433ebSAlan Somers ATF_REQUIRE_EQ(0, shmctl(shmid, IPC_RMID, NULL));
5728f2433ebSAlan Somers /* Check the presence of shmid and IPC_RMID in audit record */
5738f2433ebSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
5748f2433ebSAlan Somers "shmctl.*IPC_RMID.*%d.*return,success", shmid);
5758f2433ebSAlan Somers check_audit(fds, ipcregex, pipefd);
5768f2433ebSAlan Somers }
5778f2433ebSAlan Somers
ATF_TC_CLEANUP(shmctl_rmid_success,tc)5788f2433ebSAlan Somers ATF_TC_CLEANUP(shmctl_rmid_success, tc)
5798f2433ebSAlan Somers {
5808f2433ebSAlan Somers cleanup();
5818f2433ebSAlan Somers }
5828f2433ebSAlan Somers
5838f2433ebSAlan Somers
5848f2433ebSAlan Somers ATF_TC_WITH_CLEANUP(shmctl_rmid_failure);
ATF_TC_HEAD(shmctl_rmid_failure,tc)5858f2433ebSAlan Somers ATF_TC_HEAD(shmctl_rmid_failure, tc)
5868f2433ebSAlan Somers {
5878f2433ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
5888f2433ebSAlan Somers "shmctl(2) call for IPC_RMID command");
5898f2433ebSAlan Somers }
5908f2433ebSAlan Somers
ATF_TC_BODY(shmctl_rmid_failure,tc)5918f2433ebSAlan Somers ATF_TC_BODY(shmctl_rmid_failure, tc)
5928f2433ebSAlan Somers {
5938f2433ebSAlan Somers const char *regex = "shmctl.*IPC_RMID.*return,fail.*Invalid argument";
5948f2433ebSAlan Somers FILE *pipefd = setup(fds, auclass);
5958f2433ebSAlan Somers ATF_REQUIRE_EQ(-1, shmctl(-1, IPC_RMID, NULL));
5968f2433ebSAlan Somers check_audit(fds, regex, pipefd);
5978f2433ebSAlan Somers }
5988f2433ebSAlan Somers
ATF_TC_CLEANUP(shmctl_rmid_failure,tc)5998f2433ebSAlan Somers ATF_TC_CLEANUP(shmctl_rmid_failure, tc)
6008f2433ebSAlan Somers {
6018f2433ebSAlan Somers cleanup();
6028f2433ebSAlan Somers }
6038f2433ebSAlan Somers
6048f2433ebSAlan Somers
6058f2433ebSAlan Somers ATF_TC_WITH_CLEANUP(shmctl_stat_success);
ATF_TC_HEAD(shmctl_stat_success,tc)6068f2433ebSAlan Somers ATF_TC_HEAD(shmctl_stat_success, tc)
6078f2433ebSAlan Somers {
6088f2433ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
6098f2433ebSAlan Somers "shmctl(2) call for IPC_STAT command");
6108f2433ebSAlan Somers }
6118f2433ebSAlan Somers
ATF_TC_BODY(shmctl_stat_success,tc)6128f2433ebSAlan Somers ATF_TC_BODY(shmctl_stat_success, tc)
6138f2433ebSAlan Somers {
6148f2433ebSAlan Somers /* Create a shared memory segment and obtain the identifier */
6158f2433ebSAlan Somers ATF_REQUIRE((shmid =
6168f2433ebSAlan Somers shmget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
6178f2433ebSAlan Somers
6188f2433ebSAlan Somers FILE *pipefd = setup(fds, auclass);
6198f2433ebSAlan Somers ATF_REQUIRE_EQ(0, shmctl(shmid, IPC_STAT, &shmbuff));
6208f2433ebSAlan Somers /* Check if shared memory ID and IPC_STAT are present in audit record */
6218f2433ebSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
6228f2433ebSAlan Somers "shmctl.*IPC_STAT.*%d.*return,success", shmid);
6238f2433ebSAlan Somers check_audit(fds, ipcregex, pipefd);
6248f2433ebSAlan Somers
6258f2433ebSAlan Somers /* Destroy the shared memory with ID = shmid */
6268f2433ebSAlan Somers ATF_REQUIRE_EQ(0, shmctl(shmid, IPC_RMID, NULL));
6278f2433ebSAlan Somers }
6288f2433ebSAlan Somers
ATF_TC_CLEANUP(shmctl_stat_success,tc)6298f2433ebSAlan Somers ATF_TC_CLEANUP(shmctl_stat_success, tc)
6308f2433ebSAlan Somers {
6318f2433ebSAlan Somers cleanup();
6328f2433ebSAlan Somers }
6338f2433ebSAlan Somers
6348f2433ebSAlan Somers
6358f2433ebSAlan Somers ATF_TC_WITH_CLEANUP(shmctl_stat_failure);
ATF_TC_HEAD(shmctl_stat_failure,tc)6368f2433ebSAlan Somers ATF_TC_HEAD(shmctl_stat_failure, tc)
6378f2433ebSAlan Somers {
6388f2433ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
6398f2433ebSAlan Somers "shmctl(2) call for IPC_STAT command");
6408f2433ebSAlan Somers }
6418f2433ebSAlan Somers
ATF_TC_BODY(shmctl_stat_failure,tc)6428f2433ebSAlan Somers ATF_TC_BODY(shmctl_stat_failure, tc)
6438f2433ebSAlan Somers {
6448f2433ebSAlan Somers const char *regex = "shmctl.*IPC_STAT.*return,fail.*Invalid argument";
6458f2433ebSAlan Somers FILE *pipefd = setup(fds, auclass);
6468f2433ebSAlan Somers ATF_REQUIRE_EQ(-1, shmctl(-1, IPC_STAT, &shmbuff));
6478f2433ebSAlan Somers check_audit(fds, regex, pipefd);
6488f2433ebSAlan Somers }
6498f2433ebSAlan Somers
ATF_TC_CLEANUP(shmctl_stat_failure,tc)6508f2433ebSAlan Somers ATF_TC_CLEANUP(shmctl_stat_failure, tc)
6518f2433ebSAlan Somers {
6528f2433ebSAlan Somers cleanup();
6538f2433ebSAlan Somers }
6548f2433ebSAlan Somers
6558f2433ebSAlan Somers
6568f2433ebSAlan Somers ATF_TC_WITH_CLEANUP(shmctl_set_success);
ATF_TC_HEAD(shmctl_set_success,tc)6578f2433ebSAlan Somers ATF_TC_HEAD(shmctl_set_success, tc)
6588f2433ebSAlan Somers {
6598f2433ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
6608f2433ebSAlan Somers "shmctl(2) call for IPC_SET command");
6618f2433ebSAlan Somers }
6628f2433ebSAlan Somers
ATF_TC_BODY(shmctl_set_success,tc)6638f2433ebSAlan Somers ATF_TC_BODY(shmctl_set_success, tc)
6648f2433ebSAlan Somers {
6658f2433ebSAlan Somers /* Create a shared memory segment and obtain the identifier */
6668f2433ebSAlan Somers ATF_REQUIRE((shmid =
6678f2433ebSAlan Somers shmget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
6688f2433ebSAlan Somers /* Fill up the shmbuff structure to be used with IPC_SET */
6698f2433ebSAlan Somers ATF_REQUIRE_EQ(0, shmctl(shmid, IPC_STAT, &shmbuff));
6708f2433ebSAlan Somers
6718f2433ebSAlan Somers FILE *pipefd = setup(fds, auclass);
6728f2433ebSAlan Somers ATF_REQUIRE_EQ(0, shmctl(shmid, IPC_SET, &shmbuff));
6738f2433ebSAlan Somers /* Check the presence of shared memory ID in audit record */
6748f2433ebSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
6758f2433ebSAlan Somers "shmctl.*IPC_SET.*%d.*return,success", msqid);
6768f2433ebSAlan Somers check_audit(fds, ipcregex, pipefd);
6778f2433ebSAlan Somers
6788f2433ebSAlan Somers /* Destroy the shared memory with ID = shmid */
6798f2433ebSAlan Somers ATF_REQUIRE_EQ(0, shmctl(shmid, IPC_RMID, NULL));
6808f2433ebSAlan Somers }
6818f2433ebSAlan Somers
ATF_TC_CLEANUP(shmctl_set_success,tc)6828f2433ebSAlan Somers ATF_TC_CLEANUP(shmctl_set_success, tc)
6838f2433ebSAlan Somers {
6848f2433ebSAlan Somers cleanup();
6858f2433ebSAlan Somers }
6868f2433ebSAlan Somers
6878f2433ebSAlan Somers
6888f2433ebSAlan Somers ATF_TC_WITH_CLEANUP(shmctl_set_failure);
ATF_TC_HEAD(shmctl_set_failure,tc)6898f2433ebSAlan Somers ATF_TC_HEAD(shmctl_set_failure, tc)
6908f2433ebSAlan Somers {
6918f2433ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
6928f2433ebSAlan Somers "shmctl(2) call for IPC_SET command");
6938f2433ebSAlan Somers }
6948f2433ebSAlan Somers
ATF_TC_BODY(shmctl_set_failure,tc)6958f2433ebSAlan Somers ATF_TC_BODY(shmctl_set_failure, tc)
6968f2433ebSAlan Somers {
6978f2433ebSAlan Somers const char *regex = "shmctl.*IPC_SET.*return,failure.*Invalid argument";
6988f2433ebSAlan Somers FILE *pipefd = setup(fds, auclass);
6998f2433ebSAlan Somers ATF_REQUIRE_EQ(-1, shmctl(-1, IPC_SET, &shmbuff));
7008f2433ebSAlan Somers check_audit(fds, regex, pipefd);
7018f2433ebSAlan Somers }
7028f2433ebSAlan Somers
ATF_TC_CLEANUP(shmctl_set_failure,tc)7038f2433ebSAlan Somers ATF_TC_CLEANUP(shmctl_set_failure, tc)
7048f2433ebSAlan Somers {
7058f2433ebSAlan Somers cleanup();
7068f2433ebSAlan Somers }
7078f2433ebSAlan Somers
7088f2433ebSAlan Somers
7098f2433ebSAlan Somers ATF_TC_WITH_CLEANUP(shmctl_illegal_command);
ATF_TC_HEAD(shmctl_illegal_command,tc)7108f2433ebSAlan Somers ATF_TC_HEAD(shmctl_illegal_command, tc)
7118f2433ebSAlan Somers {
7128f2433ebSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
7138f2433ebSAlan Somers "shmctl(2) call for illegal cmd value");
7148f2433ebSAlan Somers }
7158f2433ebSAlan Somers
ATF_TC_BODY(shmctl_illegal_command,tc)7168f2433ebSAlan Somers ATF_TC_BODY(shmctl_illegal_command, tc)
7178f2433ebSAlan Somers {
7188f2433ebSAlan Somers /* Create a shared memory segment and obtain the identifier */
7198f2433ebSAlan Somers ATF_REQUIRE((shmid =
7208f2433ebSAlan Somers shmget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
7218f2433ebSAlan Somers
7228f2433ebSAlan Somers const char *regex = "shmctl.*illegal command.*fail.*Invalid argument";
7238f2433ebSAlan Somers FILE *pipefd = setup(fds, auclass);
7248f2433ebSAlan Somers ATF_REQUIRE_EQ(-1, shmctl(shmid, -1, &shmbuff));
7258f2433ebSAlan Somers check_audit(fds, regex, pipefd);
7268f2433ebSAlan Somers
7278f2433ebSAlan Somers /* Destroy the shared memory with ID = shmid */
7288f2433ebSAlan Somers ATF_REQUIRE_EQ(0, shmctl(shmid, IPC_RMID, NULL));
7298f2433ebSAlan Somers }
7308f2433ebSAlan Somers
ATF_TC_CLEANUP(shmctl_illegal_command,tc)7318f2433ebSAlan Somers ATF_TC_CLEANUP(shmctl_illegal_command, tc)
7328f2433ebSAlan Somers {
7338f2433ebSAlan Somers cleanup();
7348f2433ebSAlan Somers }
7358f2433ebSAlan Somers
7368f2433ebSAlan Somers
7374aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semget_success);
ATF_TC_HEAD(semget_success,tc)7384aabb64aSAlan Somers ATF_TC_HEAD(semget_success, tc)
7394aabb64aSAlan Somers {
7404aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
7414aabb64aSAlan Somers "semget(2) call");
7424aabb64aSAlan Somers }
7434aabb64aSAlan Somers
ATF_TC_BODY(semget_success,tc)7444aabb64aSAlan Somers ATF_TC_BODY(semget_success, tc)
7454aabb64aSAlan Somers {
7464aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
7474aabb64aSAlan Somers ATF_REQUIRE((semid =
7484aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
7494aabb64aSAlan Somers
7504aabb64aSAlan Somers /* Check the presence of semaphore set ID in audit record */
7514aabb64aSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
7524aabb64aSAlan Somers "semget.*return,success,%d", semid);
7534aabb64aSAlan Somers check_audit(fds, ipcregex, pipefd);
7544aabb64aSAlan Somers
7554aabb64aSAlan Somers /* Destroy the semaphore set with ID = semid */
7564aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID));
7574aabb64aSAlan Somers }
7584aabb64aSAlan Somers
ATF_TC_CLEANUP(semget_success,tc)7594aabb64aSAlan Somers ATF_TC_CLEANUP(semget_success, tc)
7604aabb64aSAlan Somers {
7614aabb64aSAlan Somers cleanup();
7624aabb64aSAlan Somers }
7634aabb64aSAlan Somers
7644aabb64aSAlan Somers
7654aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semget_failure);
ATF_TC_HEAD(semget_failure,tc)7664aabb64aSAlan Somers ATF_TC_HEAD(semget_failure, tc)
7674aabb64aSAlan Somers {
7684aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
7694aabb64aSAlan Somers "semget(2) call");
7704aabb64aSAlan Somers }
7714aabb64aSAlan Somers
ATF_TC_BODY(semget_failure,tc)7724aabb64aSAlan Somers ATF_TC_BODY(semget_failure, tc)
7734aabb64aSAlan Somers {
7744aabb64aSAlan Somers pid = getpid();
7754aabb64aSAlan Somers snprintf(ipcregex, sizeof(ipcregex), "semget.*%d.*return,failure", pid);
7764aabb64aSAlan Somers
7774aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
7784aabb64aSAlan Somers /* Failure reason: nsems is a negative number */
7794aabb64aSAlan Somers ATF_REQUIRE_EQ(-1, semget(IPC_PRIVATE, -1, 0));
7804aabb64aSAlan Somers check_audit(fds, ipcregex, pipefd);
7814aabb64aSAlan Somers }
7824aabb64aSAlan Somers
ATF_TC_CLEANUP(semget_failure,tc)7834aabb64aSAlan Somers ATF_TC_CLEANUP(semget_failure, tc)
7844aabb64aSAlan Somers {
7854aabb64aSAlan Somers cleanup();
7864aabb64aSAlan Somers }
7874aabb64aSAlan Somers
7884aabb64aSAlan Somers
7894aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semop_success);
ATF_TC_HEAD(semop_success,tc)7904aabb64aSAlan Somers ATF_TC_HEAD(semop_success, tc)
7914aabb64aSAlan Somers {
7924aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
7934aabb64aSAlan Somers "semop(2) call");
7944aabb64aSAlan Somers }
7954aabb64aSAlan Somers
ATF_TC_BODY(semop_success,tc)7964aabb64aSAlan Somers ATF_TC_BODY(semop_success, tc)
7974aabb64aSAlan Somers {
7984aabb64aSAlan Somers /* Create a semaphore set and obtain the set identifier */
7994aabb64aSAlan Somers ATF_REQUIRE((semid =
8004aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
8014aabb64aSAlan Somers
8024aabb64aSAlan Somers /* Initialize a sembuf structure to operate on semaphore set */
8034aabb64aSAlan Somers struct sembuf sop[1] = {{0, 1, 0}};
8044aabb64aSAlan Somers /* Check the presence of semaphore set ID in audit record */
8054aabb64aSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
8064aabb64aSAlan Somers "semop.*Semaphore IPC.*%d.*return,success", semid);
8074aabb64aSAlan Somers
8084aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
8094aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semop(semid, sop, sizeof(sop)/sizeof(struct sembuf)));
8104aabb64aSAlan Somers check_audit(fds, ipcregex, pipefd);
8114aabb64aSAlan Somers
8124aabb64aSAlan Somers /* Destroy the semaphore set with ID = semid */
8134aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID));
8144aabb64aSAlan Somers }
8154aabb64aSAlan Somers
ATF_TC_CLEANUP(semop_success,tc)8164aabb64aSAlan Somers ATF_TC_CLEANUP(semop_success, tc)
8174aabb64aSAlan Somers {
8184aabb64aSAlan Somers cleanup();
8194aabb64aSAlan Somers }
8204aabb64aSAlan Somers
8214aabb64aSAlan Somers
8224aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semop_failure);
ATF_TC_HEAD(semop_failure,tc)8234aabb64aSAlan Somers ATF_TC_HEAD(semop_failure, tc)
8244aabb64aSAlan Somers {
8254aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
8264aabb64aSAlan Somers "semop(2) call");
8274aabb64aSAlan Somers }
8284aabb64aSAlan Somers
ATF_TC_BODY(semop_failure,tc)8294aabb64aSAlan Somers ATF_TC_BODY(semop_failure, tc)
8304aabb64aSAlan Somers {
8314aabb64aSAlan Somers const char *regex = "semop.*0xffff.*return,failure : Invalid argument";
8324aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
8334aabb64aSAlan Somers ATF_REQUIRE_EQ(-1, semop(-1, NULL, 0));
8344aabb64aSAlan Somers check_audit(fds, regex, pipefd);
8354aabb64aSAlan Somers }
8364aabb64aSAlan Somers
ATF_TC_CLEANUP(semop_failure,tc)8374aabb64aSAlan Somers ATF_TC_CLEANUP(semop_failure, tc)
8384aabb64aSAlan Somers {
8394aabb64aSAlan Somers cleanup();
8404aabb64aSAlan Somers }
8414aabb64aSAlan Somers
8424aabb64aSAlan Somers
8434aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_getval_success);
ATF_TC_HEAD(semctl_getval_success,tc)8444aabb64aSAlan Somers ATF_TC_HEAD(semctl_getval_success, tc)
8454aabb64aSAlan Somers {
8464aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
8474aabb64aSAlan Somers "semctl(2) call for GETVAL command");
8484aabb64aSAlan Somers }
8494aabb64aSAlan Somers
ATF_TC_BODY(semctl_getval_success,tc)8504aabb64aSAlan Somers ATF_TC_BODY(semctl_getval_success, tc)
8514aabb64aSAlan Somers {
8524aabb64aSAlan Somers /* Create a semaphore set and obtain the set identifier */
8534aabb64aSAlan Somers ATF_REQUIRE((semid =
8544aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
8554aabb64aSAlan Somers
8564aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
8574aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, GETVAL));
8584aabb64aSAlan Somers /* Check the presence of semaphore ID and GETVAL in audit record */
8594aabb64aSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
8604aabb64aSAlan Somers "semctl.*GETVAL.*%d.*return,success", semid);
8614aabb64aSAlan Somers check_audit(fds, ipcregex, pipefd);
8624aabb64aSAlan Somers
8634aabb64aSAlan Somers /* Destroy the semaphore set with ID = semid */
8644aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID));
8654aabb64aSAlan Somers }
8664aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_getval_success,tc)8674aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_getval_success, tc)
8684aabb64aSAlan Somers {
8694aabb64aSAlan Somers cleanup();
8704aabb64aSAlan Somers }
8714aabb64aSAlan Somers
8724aabb64aSAlan Somers
8734aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_getval_failure);
ATF_TC_HEAD(semctl_getval_failure,tc)8744aabb64aSAlan Somers ATF_TC_HEAD(semctl_getval_failure, tc)
8754aabb64aSAlan Somers {
8764aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
8774aabb64aSAlan Somers "semctl(2) call for GETVAL command");
8784aabb64aSAlan Somers }
8794aabb64aSAlan Somers
ATF_TC_BODY(semctl_getval_failure,tc)8804aabb64aSAlan Somers ATF_TC_BODY(semctl_getval_failure, tc)
8814aabb64aSAlan Somers {
8824aabb64aSAlan Somers const char *regex = "semctl.*GETVAL.*return,failure : Invalid argument";
8834aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
8844aabb64aSAlan Somers ATF_REQUIRE_EQ(-1, semctl(-1, 0, GETVAL));
8854aabb64aSAlan Somers check_audit(fds, regex, pipefd);
8864aabb64aSAlan Somers }
8874aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_getval_failure,tc)8884aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_getval_failure, tc)
8894aabb64aSAlan Somers {
8904aabb64aSAlan Somers cleanup();
8914aabb64aSAlan Somers }
8924aabb64aSAlan Somers
8934aabb64aSAlan Somers
8944aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_setval_success);
ATF_TC_HEAD(semctl_setval_success,tc)8954aabb64aSAlan Somers ATF_TC_HEAD(semctl_setval_success, tc)
8964aabb64aSAlan Somers {
8974aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
8984aabb64aSAlan Somers "semctl(2) call for SETVAL command");
8994aabb64aSAlan Somers }
9004aabb64aSAlan Somers
ATF_TC_BODY(semctl_setval_success,tc)9014aabb64aSAlan Somers ATF_TC_BODY(semctl_setval_success, tc)
9024aabb64aSAlan Somers {
9034aabb64aSAlan Somers /* Create a semaphore set and obtain the set identifier */
9044aabb64aSAlan Somers ATF_REQUIRE((semid =
9054aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
9064aabb64aSAlan Somers
9074aabb64aSAlan Somers semarg.val = 1;
9084aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
9094aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, SETVAL, semarg));
9104aabb64aSAlan Somers /* Check the presence of semaphore ID and SETVAL in audit record */
9114aabb64aSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
9124aabb64aSAlan Somers "semctl.*SETVAL.*%d.*return,success", semid);
9134aabb64aSAlan Somers check_audit(fds, ipcregex, pipefd);
9144aabb64aSAlan Somers
9154aabb64aSAlan Somers /* Destroy the semaphore set with ID = semid */
9164aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID));
9174aabb64aSAlan Somers }
9184aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_setval_success,tc)9194aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_setval_success, tc)
9204aabb64aSAlan Somers {
9214aabb64aSAlan Somers cleanup();
9224aabb64aSAlan Somers }
9234aabb64aSAlan Somers
9244aabb64aSAlan Somers
9254aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_setval_failure);
ATF_TC_HEAD(semctl_setval_failure,tc)9264aabb64aSAlan Somers ATF_TC_HEAD(semctl_setval_failure, tc)
9274aabb64aSAlan Somers {
9284aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
9294aabb64aSAlan Somers "semctl(2) call for SETVAL command");
9304aabb64aSAlan Somers }
9314aabb64aSAlan Somers
ATF_TC_BODY(semctl_setval_failure,tc)9324aabb64aSAlan Somers ATF_TC_BODY(semctl_setval_failure, tc)
9334aabb64aSAlan Somers {
9344aabb64aSAlan Somers const char *regex = "semctl.*SETVAL.*return,failure : Invalid argument";
9354aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
9364aabb64aSAlan Somers ATF_REQUIRE_EQ(-1, semctl(-1, 0, SETVAL, semarg));
9374aabb64aSAlan Somers check_audit(fds, regex, pipefd);
9384aabb64aSAlan Somers }
9394aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_setval_failure,tc)9404aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_setval_failure, tc)
9414aabb64aSAlan Somers {
9424aabb64aSAlan Somers cleanup();
9434aabb64aSAlan Somers }
9444aabb64aSAlan Somers
9454aabb64aSAlan Somers
9464aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_getpid_success);
ATF_TC_HEAD(semctl_getpid_success,tc)9474aabb64aSAlan Somers ATF_TC_HEAD(semctl_getpid_success, tc)
9484aabb64aSAlan Somers {
9494aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
9504aabb64aSAlan Somers "semctl(2) call for GETPID command");
9514aabb64aSAlan Somers }
9524aabb64aSAlan Somers
ATF_TC_BODY(semctl_getpid_success,tc)9534aabb64aSAlan Somers ATF_TC_BODY(semctl_getpid_success, tc)
9544aabb64aSAlan Somers {
9554aabb64aSAlan Somers /* Create a semaphore set and obtain the set identifier */
9564aabb64aSAlan Somers ATF_REQUIRE((semid =
9574aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
9584aabb64aSAlan Somers
9594aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
9604aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, GETPID));
9614aabb64aSAlan Somers /* Check the presence of semaphore ID and GETVAL in audit record */
9624aabb64aSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
9634aabb64aSAlan Somers "semctl.*GETPID.*%d.*return,success", semid);
9644aabb64aSAlan Somers check_audit(fds, ipcregex, pipefd);
9654aabb64aSAlan Somers
9664aabb64aSAlan Somers /* Destroy the semaphore set with ID = semid */
9674aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID));
9684aabb64aSAlan Somers }
9694aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_getpid_success,tc)9704aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_getpid_success, tc)
9714aabb64aSAlan Somers {
9724aabb64aSAlan Somers cleanup();
9734aabb64aSAlan Somers }
9744aabb64aSAlan Somers
9754aabb64aSAlan Somers
9764aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_getpid_failure);
ATF_TC_HEAD(semctl_getpid_failure,tc)9774aabb64aSAlan Somers ATF_TC_HEAD(semctl_getpid_failure, tc)
9784aabb64aSAlan Somers {
9794aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
9804aabb64aSAlan Somers "semctl(2) call for GETPID command");
9814aabb64aSAlan Somers }
9824aabb64aSAlan Somers
ATF_TC_BODY(semctl_getpid_failure,tc)9834aabb64aSAlan Somers ATF_TC_BODY(semctl_getpid_failure, tc)
9844aabb64aSAlan Somers {
9854aabb64aSAlan Somers const char *regex = "semctl.*GETPID.*return,failure : Invalid argument";
9864aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
9874aabb64aSAlan Somers ATF_REQUIRE_EQ(-1, semctl(-1, 0, GETPID));
9884aabb64aSAlan Somers check_audit(fds, regex, pipefd);
9894aabb64aSAlan Somers }
9904aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_getpid_failure,tc)9914aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_getpid_failure, tc)
9924aabb64aSAlan Somers {
9934aabb64aSAlan Somers cleanup();
9944aabb64aSAlan Somers }
9954aabb64aSAlan Somers
9964aabb64aSAlan Somers
9974aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_getncnt_success);
ATF_TC_HEAD(semctl_getncnt_success,tc)9984aabb64aSAlan Somers ATF_TC_HEAD(semctl_getncnt_success, tc)
9994aabb64aSAlan Somers {
10004aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
10014aabb64aSAlan Somers "semctl(2) call for GETNCNT command");
10024aabb64aSAlan Somers }
10034aabb64aSAlan Somers
ATF_TC_BODY(semctl_getncnt_success,tc)10044aabb64aSAlan Somers ATF_TC_BODY(semctl_getncnt_success, tc)
10054aabb64aSAlan Somers {
10064aabb64aSAlan Somers /* Create a semaphore set and obtain the set identifier */
10074aabb64aSAlan Somers ATF_REQUIRE((semid =
10084aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
10094aabb64aSAlan Somers
10104aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
10114aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, GETNCNT));
10124aabb64aSAlan Somers /* Check the presence of semaphore ID and GETNCNT in audit record */
10134aabb64aSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
10144aabb64aSAlan Somers "semctl.*GETNCNT.*%d.*return,success", semid);
10154aabb64aSAlan Somers check_audit(fds, ipcregex, pipefd);
10164aabb64aSAlan Somers
10174aabb64aSAlan Somers /* Destroy the semaphore set with ID = semid */
10184aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID));
10194aabb64aSAlan Somers }
10204aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_getncnt_success,tc)10214aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_getncnt_success, tc)
10224aabb64aSAlan Somers {
10234aabb64aSAlan Somers cleanup();
10244aabb64aSAlan Somers }
10254aabb64aSAlan Somers
10264aabb64aSAlan Somers
10274aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_getncnt_failure);
ATF_TC_HEAD(semctl_getncnt_failure,tc)10284aabb64aSAlan Somers ATF_TC_HEAD(semctl_getncnt_failure, tc)
10294aabb64aSAlan Somers {
10304aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
10314aabb64aSAlan Somers "semctl(2) call for GETNCNT command");
10324aabb64aSAlan Somers }
10334aabb64aSAlan Somers
ATF_TC_BODY(semctl_getncnt_failure,tc)10344aabb64aSAlan Somers ATF_TC_BODY(semctl_getncnt_failure, tc)
10354aabb64aSAlan Somers {
10364aabb64aSAlan Somers const char *regex = "semctl.*GETNCNT.*return,failure.*Invalid argument";
10374aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
10384aabb64aSAlan Somers ATF_REQUIRE_EQ(-1, semctl(-1, 0, GETNCNT));
10394aabb64aSAlan Somers check_audit(fds, regex, pipefd);
10404aabb64aSAlan Somers }
10414aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_getncnt_failure,tc)10424aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_getncnt_failure, tc)
10434aabb64aSAlan Somers {
10444aabb64aSAlan Somers cleanup();
10454aabb64aSAlan Somers }
10464aabb64aSAlan Somers
10474aabb64aSAlan Somers
10484aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_getzcnt_success);
ATF_TC_HEAD(semctl_getzcnt_success,tc)10494aabb64aSAlan Somers ATF_TC_HEAD(semctl_getzcnt_success, tc)
10504aabb64aSAlan Somers {
10514aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
10524aabb64aSAlan Somers "semctl(2) call for GETZCNT command");
10534aabb64aSAlan Somers }
10544aabb64aSAlan Somers
ATF_TC_BODY(semctl_getzcnt_success,tc)10554aabb64aSAlan Somers ATF_TC_BODY(semctl_getzcnt_success, tc)
10564aabb64aSAlan Somers {
10574aabb64aSAlan Somers /* Create a semaphore set and obtain the set identifier */
10584aabb64aSAlan Somers ATF_REQUIRE((semid =
10594aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
10604aabb64aSAlan Somers
10614aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
10624aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, GETZCNT));
10634aabb64aSAlan Somers /* Check the presence of semaphore ID and GETZCNT in audit record */
10644aabb64aSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
10654aabb64aSAlan Somers "semctl.*GETZCNT.*%d.*return,success", semid);
10664aabb64aSAlan Somers check_audit(fds, ipcregex, pipefd);
10674aabb64aSAlan Somers
10684aabb64aSAlan Somers /* Destroy the semaphore set with ID = semid */
10694aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID));
10704aabb64aSAlan Somers }
10714aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_getzcnt_success,tc)10724aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_getzcnt_success, tc)
10734aabb64aSAlan Somers {
10744aabb64aSAlan Somers cleanup();
10754aabb64aSAlan Somers }
10764aabb64aSAlan Somers
10774aabb64aSAlan Somers
10784aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_getzcnt_failure);
ATF_TC_HEAD(semctl_getzcnt_failure,tc)10794aabb64aSAlan Somers ATF_TC_HEAD(semctl_getzcnt_failure, tc)
10804aabb64aSAlan Somers {
10814aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
10824aabb64aSAlan Somers "semctl(2) call for GETZCNT command");
10834aabb64aSAlan Somers }
10844aabb64aSAlan Somers
ATF_TC_BODY(semctl_getzcnt_failure,tc)10854aabb64aSAlan Somers ATF_TC_BODY(semctl_getzcnt_failure, tc)
10864aabb64aSAlan Somers {
10874aabb64aSAlan Somers const char *regex = "semctl.*GETZCNT.*return,failure.*Invalid argument";
10884aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
10894aabb64aSAlan Somers ATF_REQUIRE_EQ(-1, semctl(-1, 0, GETZCNT));
10904aabb64aSAlan Somers check_audit(fds, regex, pipefd);
10914aabb64aSAlan Somers }
10924aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_getzcnt_failure,tc)10934aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_getzcnt_failure, tc)
10944aabb64aSAlan Somers {
10954aabb64aSAlan Somers cleanup();
10964aabb64aSAlan Somers }
10974aabb64aSAlan Somers
10984aabb64aSAlan Somers
10994aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_getall_success);
ATF_TC_HEAD(semctl_getall_success,tc)11004aabb64aSAlan Somers ATF_TC_HEAD(semctl_getall_success, tc)
11014aabb64aSAlan Somers {
11024aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
11034aabb64aSAlan Somers "semctl(2) call for GETALL command");
11044aabb64aSAlan Somers }
11054aabb64aSAlan Somers
ATF_TC_BODY(semctl_getall_success,tc)11064aabb64aSAlan Somers ATF_TC_BODY(semctl_getall_success, tc)
11074aabb64aSAlan Somers {
11084aabb64aSAlan Somers /* Create a semaphore set and obtain the set identifier */
11094aabb64aSAlan Somers ATF_REQUIRE((semid =
11104aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
11114aabb64aSAlan Somers
11124aabb64aSAlan Somers semarg.array = semvals;
11134aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
11144aabb64aSAlan Somers ATF_REQUIRE(semctl(semid, 0, GETALL, semarg) != -1);
11154aabb64aSAlan Somers /* Check the presence of semaphore ID and GETALL in audit record */
11164aabb64aSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
11174aabb64aSAlan Somers "semctl.*GETALL.*%d.*return,success", semid);
11184aabb64aSAlan Somers check_audit(fds, ipcregex, pipefd);
11194aabb64aSAlan Somers
11204aabb64aSAlan Somers /* Destroy the semaphore set with ID = semid */
11214aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID));
11224aabb64aSAlan Somers }
11234aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_getall_success,tc)11244aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_getall_success, tc)
11254aabb64aSAlan Somers {
11264aabb64aSAlan Somers cleanup();
11274aabb64aSAlan Somers }
11284aabb64aSAlan Somers
11294aabb64aSAlan Somers
11304aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_getall_failure);
ATF_TC_HEAD(semctl_getall_failure,tc)11314aabb64aSAlan Somers ATF_TC_HEAD(semctl_getall_failure, tc)
11324aabb64aSAlan Somers {
11334aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
11344aabb64aSAlan Somers "semctl(2) call for GETALL command");
11354aabb64aSAlan Somers }
11364aabb64aSAlan Somers
ATF_TC_BODY(semctl_getall_failure,tc)11374aabb64aSAlan Somers ATF_TC_BODY(semctl_getall_failure, tc)
11384aabb64aSAlan Somers {
11394aabb64aSAlan Somers const char *regex = "semctl.*GETALL.*return,failure : Invalid argument";
11404aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
11414aabb64aSAlan Somers ATF_REQUIRE_EQ(-1, semctl(-1, 0, GETALL, semarg));
11424aabb64aSAlan Somers check_audit(fds, regex, pipefd);
11434aabb64aSAlan Somers }
11444aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_getall_failure,tc)11454aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_getall_failure, tc)
11464aabb64aSAlan Somers {
11474aabb64aSAlan Somers cleanup();
11484aabb64aSAlan Somers }
11494aabb64aSAlan Somers
11504aabb64aSAlan Somers
11514aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_setall_success);
ATF_TC_HEAD(semctl_setall_success,tc)11524aabb64aSAlan Somers ATF_TC_HEAD(semctl_setall_success, tc)
11534aabb64aSAlan Somers {
11544aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
11554aabb64aSAlan Somers "semctl(2) call for SETALL command");
11564aabb64aSAlan Somers }
11574aabb64aSAlan Somers
ATF_TC_BODY(semctl_setall_success,tc)11584aabb64aSAlan Somers ATF_TC_BODY(semctl_setall_success, tc)
11594aabb64aSAlan Somers {
11604aabb64aSAlan Somers /* Create a semaphore set and obtain the set identifier */
11614aabb64aSAlan Somers ATF_REQUIRE((semid =
11624aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
11634aabb64aSAlan Somers
11644aabb64aSAlan Somers semarg.array = semvals;
11654aabb64aSAlan Somers /* Initialize semvals to be used with SETALL */
11664aabb64aSAlan Somers ATF_REQUIRE(semctl(semid, 0, GETALL, semarg) != -1);
11674aabb64aSAlan Somers
11684aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
11694aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, SETALL, semarg));
11704aabb64aSAlan Somers /* Check the presence of semaphore ID and SETALL in audit record */
11714aabb64aSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
11724aabb64aSAlan Somers "semctl.*SETALL.*%d.*return,success", semid);
11734aabb64aSAlan Somers check_audit(fds, ipcregex, pipefd);
11744aabb64aSAlan Somers
11754aabb64aSAlan Somers /* Destroy the semaphore set with ID = semid */
11764aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID));
11774aabb64aSAlan Somers }
11784aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_setall_success,tc)11794aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_setall_success, tc)
11804aabb64aSAlan Somers {
11814aabb64aSAlan Somers cleanup();
11824aabb64aSAlan Somers }
11834aabb64aSAlan Somers
11844aabb64aSAlan Somers
11854aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_setall_failure);
ATF_TC_HEAD(semctl_setall_failure,tc)11864aabb64aSAlan Somers ATF_TC_HEAD(semctl_setall_failure, tc)
11874aabb64aSAlan Somers {
11884aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
11894aabb64aSAlan Somers "semctl(2) call for SETALL command");
11904aabb64aSAlan Somers }
11914aabb64aSAlan Somers
ATF_TC_BODY(semctl_setall_failure,tc)11924aabb64aSAlan Somers ATF_TC_BODY(semctl_setall_failure, tc)
11934aabb64aSAlan Somers {
11944aabb64aSAlan Somers const char *regex = "semctl.*SETALL.*return,failure : Invalid argument";
11954aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
11964aabb64aSAlan Somers ATF_REQUIRE_EQ(-1, semctl(-1, 0, SETALL, semarg));
11974aabb64aSAlan Somers check_audit(fds, regex, pipefd);
11984aabb64aSAlan Somers }
11994aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_setall_failure,tc)12004aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_setall_failure, tc)
12014aabb64aSAlan Somers {
12024aabb64aSAlan Somers cleanup();
12034aabb64aSAlan Somers }
12044aabb64aSAlan Somers
12054aabb64aSAlan Somers
12064aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_stat_success);
ATF_TC_HEAD(semctl_stat_success,tc)12074aabb64aSAlan Somers ATF_TC_HEAD(semctl_stat_success, tc)
12084aabb64aSAlan Somers {
12094aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
12104aabb64aSAlan Somers "semctl(2) call for IPC_STAT command");
12114aabb64aSAlan Somers }
12124aabb64aSAlan Somers
ATF_TC_BODY(semctl_stat_success,tc)12134aabb64aSAlan Somers ATF_TC_BODY(semctl_stat_success, tc)
12144aabb64aSAlan Somers {
12154aabb64aSAlan Somers /* Create a semaphore set and obtain the set identifier */
12164aabb64aSAlan Somers ATF_REQUIRE((semid =
12174aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
12184aabb64aSAlan Somers
12194aabb64aSAlan Somers semarg.buf = &sembuff;
12204aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
12214aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_STAT, semarg));
12224aabb64aSAlan Somers /* Check the presence of semaphore ID and IPC_STAT in audit record */
12234aabb64aSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
12244aabb64aSAlan Somers "semctl.*IPC_STAT.*%d.*return,success", semid);
12254aabb64aSAlan Somers check_audit(fds, ipcregex, pipefd);
12264aabb64aSAlan Somers
12274aabb64aSAlan Somers /* Destroy the semaphore set with ID = semid */
12284aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID));
12294aabb64aSAlan Somers }
12304aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_stat_success,tc)12314aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_stat_success, tc)
12324aabb64aSAlan Somers {
12334aabb64aSAlan Somers cleanup();
12344aabb64aSAlan Somers }
12354aabb64aSAlan Somers
12364aabb64aSAlan Somers
12374aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_stat_failure);
ATF_TC_HEAD(semctl_stat_failure,tc)12384aabb64aSAlan Somers ATF_TC_HEAD(semctl_stat_failure, tc)
12394aabb64aSAlan Somers {
12404aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
12414aabb64aSAlan Somers "semctl(2) call for IPC_STAT command");
12424aabb64aSAlan Somers }
12434aabb64aSAlan Somers
ATF_TC_BODY(semctl_stat_failure,tc)12444aabb64aSAlan Somers ATF_TC_BODY(semctl_stat_failure, tc)
12454aabb64aSAlan Somers {
12464aabb64aSAlan Somers const char *regex = "semctl.*IPC_STAT.*return,fail.*Invalid argument";
12474aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
12484aabb64aSAlan Somers ATF_REQUIRE_EQ(-1, semctl(-1, 0, IPC_STAT, semarg));
12494aabb64aSAlan Somers check_audit(fds, regex, pipefd);
12504aabb64aSAlan Somers }
12514aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_stat_failure,tc)12524aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_stat_failure, tc)
12534aabb64aSAlan Somers {
12544aabb64aSAlan Somers cleanup();
12554aabb64aSAlan Somers }
12564aabb64aSAlan Somers
12574aabb64aSAlan Somers
12584aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_set_success);
ATF_TC_HEAD(semctl_set_success,tc)12594aabb64aSAlan Somers ATF_TC_HEAD(semctl_set_success, tc)
12604aabb64aSAlan Somers {
12614aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
12624aabb64aSAlan Somers "semctl(2) call for IPC_SET command");
12634aabb64aSAlan Somers }
12644aabb64aSAlan Somers
ATF_TC_BODY(semctl_set_success,tc)12654aabb64aSAlan Somers ATF_TC_BODY(semctl_set_success, tc)
12664aabb64aSAlan Somers {
12674aabb64aSAlan Somers /* Create a semaphore set and obtain the set identifier */
12684aabb64aSAlan Somers ATF_REQUIRE((semid =
12694aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
12704aabb64aSAlan Somers
12714aabb64aSAlan Somers semarg.buf = &sembuff;
12724aabb64aSAlan Somers /* Fill up the sembuff structure to be used with IPC_SET */
12734aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_STAT, semarg));
12744aabb64aSAlan Somers
12754aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
12764aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_SET, semarg));
12774aabb64aSAlan Somers /* Check the presence of semaphore ID and IPC_SET in audit record */
12784aabb64aSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
12794aabb64aSAlan Somers "semctl.*IPC_SET.*%d.*return,success", semid);
12804aabb64aSAlan Somers check_audit(fds, ipcregex, pipefd);
12814aabb64aSAlan Somers
12824aabb64aSAlan Somers /* Destroy the semaphore set with ID = semid */
12834aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID));
12844aabb64aSAlan Somers }
12854aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_set_success,tc)12864aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_set_success, tc)
12874aabb64aSAlan Somers {
12884aabb64aSAlan Somers cleanup();
12894aabb64aSAlan Somers }
12904aabb64aSAlan Somers
12914aabb64aSAlan Somers
12924aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_set_failure);
ATF_TC_HEAD(semctl_set_failure,tc)12934aabb64aSAlan Somers ATF_TC_HEAD(semctl_set_failure, tc)
12944aabb64aSAlan Somers {
12954aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
12964aabb64aSAlan Somers "semctl(2) call for IPC_SET command");
12974aabb64aSAlan Somers }
12984aabb64aSAlan Somers
ATF_TC_BODY(semctl_set_failure,tc)12994aabb64aSAlan Somers ATF_TC_BODY(semctl_set_failure, tc)
13004aabb64aSAlan Somers {
13014aabb64aSAlan Somers /* Create a semaphore set and obtain the set identifier */
13024aabb64aSAlan Somers ATF_REQUIRE((semid =
13034aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
13044aabb64aSAlan Somers
13054aabb64aSAlan Somers semarg.buf = &sembuff;
13064aabb64aSAlan Somers /* Fill up the sembuff structure to be used with IPC_SET */
13074aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_STAT, semarg));
13084aabb64aSAlan Somers
13094aabb64aSAlan Somers const char *regex = "semctl.*IPC_SET.*return,failure.*Invalid argument";
13104aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
13114aabb64aSAlan Somers ATF_REQUIRE_EQ(-1, semctl(-1, 0, IPC_SET, semarg));
13124aabb64aSAlan Somers check_audit(fds, regex, pipefd);
13134aabb64aSAlan Somers
13144aabb64aSAlan Somers /* Destroy the semaphore set with ID = semid */
13154aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID));
13164aabb64aSAlan Somers }
13174aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_set_failure,tc)13184aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_set_failure, tc)
13194aabb64aSAlan Somers {
13204aabb64aSAlan Somers cleanup();
13214aabb64aSAlan Somers }
13224aabb64aSAlan Somers
13234aabb64aSAlan Somers
13244aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_rmid_success);
ATF_TC_HEAD(semctl_rmid_success,tc)13254aabb64aSAlan Somers ATF_TC_HEAD(semctl_rmid_success, tc)
13264aabb64aSAlan Somers {
13274aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
13284aabb64aSAlan Somers "semctl(2) call for IPC_RMID command");
13294aabb64aSAlan Somers }
13304aabb64aSAlan Somers
ATF_TC_BODY(semctl_rmid_success,tc)13314aabb64aSAlan Somers ATF_TC_BODY(semctl_rmid_success, tc)
13324aabb64aSAlan Somers {
13334aabb64aSAlan Somers /* Create a semaphore set and obtain the set identifier */
13344aabb64aSAlan Somers ATF_REQUIRE((semid =
13354aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
13364aabb64aSAlan Somers
13374aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
13384aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID, semarg));
13394aabb64aSAlan Somers /* Check the presence of semaphore ID and IPC_RMID in audit record */
13404aabb64aSAlan Somers snprintf(ipcregex, sizeof(ipcregex),
13414aabb64aSAlan Somers "semctl.*IPC_RMID.*%d.*return,success", semid);
13424aabb64aSAlan Somers check_audit(fds, ipcregex, pipefd);
13434aabb64aSAlan Somers }
13444aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_rmid_success,tc)13454aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_rmid_success, tc)
13464aabb64aSAlan Somers {
13474aabb64aSAlan Somers cleanup();
13484aabb64aSAlan Somers }
13494aabb64aSAlan Somers
13504aabb64aSAlan Somers
13514aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_rmid_failure);
ATF_TC_HEAD(semctl_rmid_failure,tc)13524aabb64aSAlan Somers ATF_TC_HEAD(semctl_rmid_failure, tc)
13534aabb64aSAlan Somers {
13544aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
13554aabb64aSAlan Somers "semctl(2) call for IPC_RMID command");
13564aabb64aSAlan Somers }
13574aabb64aSAlan Somers
ATF_TC_BODY(semctl_rmid_failure,tc)13584aabb64aSAlan Somers ATF_TC_BODY(semctl_rmid_failure, tc)
13594aabb64aSAlan Somers {
13604aabb64aSAlan Somers const char *regex = "semctl.*IPC_RMID.*return,fail.*Invalid argument";
13614aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
13624aabb64aSAlan Somers ATF_REQUIRE_EQ(-1, semctl(-1, 0, IPC_RMID, semarg));
13634aabb64aSAlan Somers check_audit(fds, regex, pipefd);
13644aabb64aSAlan Somers }
13654aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_rmid_failure,tc)13664aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_rmid_failure, tc)
13674aabb64aSAlan Somers {
13684aabb64aSAlan Somers cleanup();
13694aabb64aSAlan Somers }
13704aabb64aSAlan Somers
13714aabb64aSAlan Somers
13724aabb64aSAlan Somers ATF_TC_WITH_CLEANUP(semctl_illegal_command);
ATF_TC_HEAD(semctl_illegal_command,tc)13734aabb64aSAlan Somers ATF_TC_HEAD(semctl_illegal_command, tc)
13744aabb64aSAlan Somers {
13754aabb64aSAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
13764aabb64aSAlan Somers "semctl(2) call for illegal cmd value");
13774aabb64aSAlan Somers }
13784aabb64aSAlan Somers
ATF_TC_BODY(semctl_illegal_command,tc)13794aabb64aSAlan Somers ATF_TC_BODY(semctl_illegal_command, tc)
13804aabb64aSAlan Somers {
13814aabb64aSAlan Somers /* Create a semaphore set and obtain the set identifier */
13824aabb64aSAlan Somers ATF_REQUIRE((semid =
13834aabb64aSAlan Somers semget(IPC_PRIVATE, 1, IPC_CREAT | S_IRUSR)) != -1);
13844aabb64aSAlan Somers
13854aabb64aSAlan Somers const char *regex = "semctl.*illegal command.*fail.*Invalid argument";
13864aabb64aSAlan Somers FILE *pipefd = setup(fds, auclass);
13874aabb64aSAlan Somers ATF_REQUIRE_EQ(-1, semctl(semid, 0, -1));
13884aabb64aSAlan Somers check_audit(fds, regex, pipefd);
13894aabb64aSAlan Somers
13904aabb64aSAlan Somers /* Destroy the semaphore set with ID = semid */
13914aabb64aSAlan Somers ATF_REQUIRE_EQ(0, semctl(semid, 0, IPC_RMID));
13924aabb64aSAlan Somers }
13934aabb64aSAlan Somers
ATF_TC_CLEANUP(semctl_illegal_command,tc)13944aabb64aSAlan Somers ATF_TC_CLEANUP(semctl_illegal_command, tc)
13954aabb64aSAlan Somers {
13964aabb64aSAlan Somers cleanup();
13974aabb64aSAlan Somers }
13984aabb64aSAlan Somers
13994aabb64aSAlan Somers
14003d3d0178SAlan Somers ATF_TC_WITH_CLEANUP(shm_open_success);
ATF_TC_HEAD(shm_open_success,tc)14013d3d0178SAlan Somers ATF_TC_HEAD(shm_open_success, tc)
14023d3d0178SAlan Somers {
14033d3d0178SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
14043d3d0178SAlan Somers "shm_open(2) call");
14053d3d0178SAlan Somers }
14063d3d0178SAlan Somers
ATF_TC_BODY(shm_open_success,tc)14073d3d0178SAlan Somers ATF_TC_BODY(shm_open_success, tc)
14083d3d0178SAlan Somers {
14093d3d0178SAlan Somers pid = getpid();
14103d3d0178SAlan Somers snprintf(ipcregex, sizeof(ipcregex), "shm_open.*%d.*ret.*success", pid);
14113d3d0178SAlan Somers
14123d3d0178SAlan Somers FILE *pipefd = setup(fds, auclass);
14133d3d0178SAlan Somers ATF_REQUIRE(shm_open(SHM_ANON, O_CREAT | O_TRUNC | O_RDWR, 0600) != -1);
14143d3d0178SAlan Somers check_audit(fds, ipcregex, pipefd);
14153d3d0178SAlan Somers }
14163d3d0178SAlan Somers
ATF_TC_CLEANUP(shm_open_success,tc)14173d3d0178SAlan Somers ATF_TC_CLEANUP(shm_open_success, tc)
14183d3d0178SAlan Somers {
14193d3d0178SAlan Somers cleanup();
14203d3d0178SAlan Somers }
14213d3d0178SAlan Somers
14223d3d0178SAlan Somers
14233d3d0178SAlan Somers ATF_TC_WITH_CLEANUP(shm_open_failure);
ATF_TC_HEAD(shm_open_failure,tc)14243d3d0178SAlan Somers ATF_TC_HEAD(shm_open_failure, tc)
14253d3d0178SAlan Somers {
14263d3d0178SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
14273d3d0178SAlan Somers "shm_open(2) call");
14283d3d0178SAlan Somers }
14293d3d0178SAlan Somers
ATF_TC_BODY(shm_open_failure,tc)14303d3d0178SAlan Somers ATF_TC_BODY(shm_open_failure, tc)
14313d3d0178SAlan Somers {
14323d3d0178SAlan Somers const char *regex = "shm_open.*fileforaudit.*return,failure";
14333d3d0178SAlan Somers FILE *pipefd = setup(fds, auclass);
14343d3d0178SAlan Somers /* Failure reason: File does not exist */
14353d3d0178SAlan Somers ATF_REQUIRE_EQ(-1, shm_open(path, O_TRUNC | O_RDWR, 0600));
14363d3d0178SAlan Somers check_audit(fds, regex, pipefd);
14373d3d0178SAlan Somers }
14383d3d0178SAlan Somers
ATF_TC_CLEANUP(shm_open_failure,tc)14393d3d0178SAlan Somers ATF_TC_CLEANUP(shm_open_failure, tc)
14403d3d0178SAlan Somers {
14413d3d0178SAlan Somers cleanup();
14423d3d0178SAlan Somers }
14433d3d0178SAlan Somers
14443d3d0178SAlan Somers
14453d3d0178SAlan Somers ATF_TC_WITH_CLEANUP(shm_unlink_success);
ATF_TC_HEAD(shm_unlink_success,tc)14463d3d0178SAlan Somers ATF_TC_HEAD(shm_unlink_success, tc)
14473d3d0178SAlan Somers {
14483d3d0178SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
14493d3d0178SAlan Somers "shm_unlink(2) call");
14503d3d0178SAlan Somers }
14513d3d0178SAlan Somers
ATF_TC_BODY(shm_unlink_success,tc)14523d3d0178SAlan Somers ATF_TC_BODY(shm_unlink_success, tc)
14533d3d0178SAlan Somers {
14543d3d0178SAlan Somers /* Build an absolute path to a file in the test-case directory */
1455*0966fb1bSDavid Bright char dirpath[PATH_MAX];
14563d3d0178SAlan Somers ATF_REQUIRE(getcwd(dirpath, sizeof(dirpath)) != NULL);
14573d3d0178SAlan Somers strlcat(dirpath, path, sizeof(dirpath));
14583d3d0178SAlan Somers ATF_REQUIRE(shm_open(dirpath, O_CREAT | O_TRUNC | O_RDWR, 0600) != -1);
14593d3d0178SAlan Somers
14603d3d0178SAlan Somers const char *regex = "shm_unlink.*fileforaudit.*return,success";
14613d3d0178SAlan Somers FILE *pipefd = setup(fds, auclass);
14623d3d0178SAlan Somers ATF_REQUIRE_EQ(0, shm_unlink(dirpath));
14633d3d0178SAlan Somers check_audit(fds, regex, pipefd);
14643d3d0178SAlan Somers }
14653d3d0178SAlan Somers
ATF_TC_CLEANUP(shm_unlink_success,tc)14663d3d0178SAlan Somers ATF_TC_CLEANUP(shm_unlink_success, tc)
14673d3d0178SAlan Somers {
14683d3d0178SAlan Somers cleanup();
14693d3d0178SAlan Somers }
14703d3d0178SAlan Somers
14713d3d0178SAlan Somers
14723d3d0178SAlan Somers ATF_TC_WITH_CLEANUP(shm_unlink_failure);
ATF_TC_HEAD(shm_unlink_failure,tc)14733d3d0178SAlan Somers ATF_TC_HEAD(shm_unlink_failure, tc)
14743d3d0178SAlan Somers {
14753d3d0178SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
14763d3d0178SAlan Somers "shm_unlink(2) call");
14773d3d0178SAlan Somers }
14783d3d0178SAlan Somers
ATF_TC_BODY(shm_unlink_failure,tc)14793d3d0178SAlan Somers ATF_TC_BODY(shm_unlink_failure, tc)
14803d3d0178SAlan Somers {
14813d3d0178SAlan Somers const char *regex = "shm_unlink.*fileforaudit.*return,failure";
14823d3d0178SAlan Somers FILE *pipefd = setup(fds, auclass);
14833d3d0178SAlan Somers ATF_REQUIRE_EQ(-1, shm_unlink(path));
14843d3d0178SAlan Somers check_audit(fds, regex, pipefd);
14853d3d0178SAlan Somers }
14863d3d0178SAlan Somers
ATF_TC_CLEANUP(shm_unlink_failure,tc)14873d3d0178SAlan Somers ATF_TC_CLEANUP(shm_unlink_failure, tc)
14883d3d0178SAlan Somers {
14893d3d0178SAlan Somers cleanup();
14903d3d0178SAlan Somers }
14913d3d0178SAlan Somers
14923d3d0178SAlan Somers
14933d3d0178SAlan Somers ATF_TC_WITH_CLEANUP(pipe_success);
ATF_TC_HEAD(pipe_success,tc)14943d3d0178SAlan Somers ATF_TC_HEAD(pipe_success, tc)
14953d3d0178SAlan Somers {
14963d3d0178SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
14973d3d0178SAlan Somers "pipe(2) call");
14983d3d0178SAlan Somers }
14993d3d0178SAlan Somers
ATF_TC_BODY(pipe_success,tc)15003d3d0178SAlan Somers ATF_TC_BODY(pipe_success, tc)
15013d3d0178SAlan Somers {
15023d3d0178SAlan Somers int filedesc[2];
15033d3d0178SAlan Somers pid = getpid();
15043d3d0178SAlan Somers snprintf(ipcregex, sizeof(ipcregex), "pipe.*%d.*return,success", pid);
15053d3d0178SAlan Somers FILE *pipefd = setup(fds, auclass);
15063d3d0178SAlan Somers ATF_REQUIRE_EQ(0, pipe(filedesc));
15073d3d0178SAlan Somers check_audit(fds, ipcregex, pipefd);
15083d3d0178SAlan Somers
15093d3d0178SAlan Somers close(filedesc[0]);
15103d3d0178SAlan Somers close(filedesc[1]);
15113d3d0178SAlan Somers }
15123d3d0178SAlan Somers
ATF_TC_CLEANUP(pipe_success,tc)15133d3d0178SAlan Somers ATF_TC_CLEANUP(pipe_success, tc)
15143d3d0178SAlan Somers {
15153d3d0178SAlan Somers cleanup();
15163d3d0178SAlan Somers }
15173d3d0178SAlan Somers
15183d3d0178SAlan Somers
15193d3d0178SAlan Somers ATF_TC_WITH_CLEANUP(pipe_failure);
ATF_TC_HEAD(pipe_failure,tc)15203d3d0178SAlan Somers ATF_TC_HEAD(pipe_failure, tc)
15213d3d0178SAlan Somers {
15223d3d0178SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
15233d3d0178SAlan Somers "pipe(2) call");
15243d3d0178SAlan Somers }
15253d3d0178SAlan Somers
ATF_TC_BODY(pipe_failure,tc)15263d3d0178SAlan Somers ATF_TC_BODY(pipe_failure, tc)
15273d3d0178SAlan Somers {
15283d3d0178SAlan Somers pid = getpid();
15293d3d0178SAlan Somers snprintf(ipcregex, sizeof(ipcregex), "pipe.*%d.*return.failure", pid);
15303d3d0178SAlan Somers
15313d3d0178SAlan Somers FILE *pipefd = setup(fds, auclass);
15323d3d0178SAlan Somers ATF_REQUIRE_EQ(-1, pipe(NULL));
15333d3d0178SAlan Somers check_audit(fds, ipcregex, pipefd);
15343d3d0178SAlan Somers }
15353d3d0178SAlan Somers
ATF_TC_CLEANUP(pipe_failure,tc)15363d3d0178SAlan Somers ATF_TC_CLEANUP(pipe_failure, tc)
15373d3d0178SAlan Somers {
15383d3d0178SAlan Somers cleanup();
15393d3d0178SAlan Somers }
15403d3d0178SAlan Somers
15413d3d0178SAlan Somers
15423d3d0178SAlan Somers ATF_TC_WITH_CLEANUP(posix_openpt_success);
ATF_TC_HEAD(posix_openpt_success,tc)15433d3d0178SAlan Somers ATF_TC_HEAD(posix_openpt_success, tc)
15443d3d0178SAlan Somers {
15453d3d0178SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
15463d3d0178SAlan Somers "posix_openpt(2) call");
15473d3d0178SAlan Somers }
15483d3d0178SAlan Somers
ATF_TC_BODY(posix_openpt_success,tc)15493d3d0178SAlan Somers ATF_TC_BODY(posix_openpt_success, tc)
15503d3d0178SAlan Somers {
15513d3d0178SAlan Somers int filedesc;
15523d3d0178SAlan Somers FILE *pipefd = setup(fds, auclass);
15533d3d0178SAlan Somers ATF_REQUIRE((filedesc = posix_openpt(O_RDWR | O_NOCTTY)) != -1);
15543d3d0178SAlan Somers /* Check for the presence of filedesc in the audit record */
15553d3d0178SAlan Somers snprintf(ipcregex, sizeof(ipcregex),
15563d3d0178SAlan Somers "posix_openpt.*return,success,%d", filedesc);
15573d3d0178SAlan Somers check_audit(fds, ipcregex, pipefd);
15583d3d0178SAlan Somers close(filedesc);
15593d3d0178SAlan Somers }
15603d3d0178SAlan Somers
ATF_TC_CLEANUP(posix_openpt_success,tc)15613d3d0178SAlan Somers ATF_TC_CLEANUP(posix_openpt_success, tc)
15623d3d0178SAlan Somers {
15633d3d0178SAlan Somers cleanup();
15643d3d0178SAlan Somers }
15653d3d0178SAlan Somers
15663d3d0178SAlan Somers
15673d3d0178SAlan Somers ATF_TC_WITH_CLEANUP(posix_openpt_failure);
ATF_TC_HEAD(posix_openpt_failure,tc)15683d3d0178SAlan Somers ATF_TC_HEAD(posix_openpt_failure, tc)
15693d3d0178SAlan Somers {
15703d3d0178SAlan Somers atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
15713d3d0178SAlan Somers "posix_openpt(2) call");
15723d3d0178SAlan Somers }
15733d3d0178SAlan Somers
ATF_TC_BODY(posix_openpt_failure,tc)15743d3d0178SAlan Somers ATF_TC_BODY(posix_openpt_failure, tc)
15753d3d0178SAlan Somers {
15763d3d0178SAlan Somers const char *regex = "posix_openpt.*return,failure : Invalid argument";
15773d3d0178SAlan Somers FILE *pipefd = setup(fds, auclass);
15783d3d0178SAlan Somers ATF_REQUIRE_EQ(-1, posix_openpt(-1));
15793d3d0178SAlan Somers check_audit(fds, regex, pipefd);
15803d3d0178SAlan Somers }
15813d3d0178SAlan Somers
ATF_TC_CLEANUP(posix_openpt_failure,tc)15823d3d0178SAlan Somers ATF_TC_CLEANUP(posix_openpt_failure, tc)
15833d3d0178SAlan Somers {
15843d3d0178SAlan Somers cleanup();
15853d3d0178SAlan Somers }
15863d3d0178SAlan Somers
15873d3d0178SAlan Somers
ATF_TP_ADD_TCS(tp)1588d7d1ecc0SAlan Somers ATF_TP_ADD_TCS(tp)
1589d7d1ecc0SAlan Somers {
1590d7d1ecc0SAlan Somers ATF_TP_ADD_TC(tp, msgget_success);
1591d7d1ecc0SAlan Somers ATF_TP_ADD_TC(tp, msgget_failure);
1592d7d1ecc0SAlan Somers ATF_TP_ADD_TC(tp, msgsnd_success);
1593d7d1ecc0SAlan Somers ATF_TP_ADD_TC(tp, msgsnd_failure);
1594d7d1ecc0SAlan Somers ATF_TP_ADD_TC(tp, msgrcv_success);
1595d7d1ecc0SAlan Somers ATF_TP_ADD_TC(tp, msgrcv_failure);
1596d7d1ecc0SAlan Somers
1597d7d1ecc0SAlan Somers ATF_TP_ADD_TC(tp, msgctl_rmid_success);
1598d7d1ecc0SAlan Somers ATF_TP_ADD_TC(tp, msgctl_rmid_failure);
1599d7d1ecc0SAlan Somers ATF_TP_ADD_TC(tp, msgctl_stat_success);
1600d7d1ecc0SAlan Somers ATF_TP_ADD_TC(tp, msgctl_stat_failure);
1601d7d1ecc0SAlan Somers ATF_TP_ADD_TC(tp, msgctl_set_success);
1602d7d1ecc0SAlan Somers ATF_TP_ADD_TC(tp, msgctl_set_failure);
1603d7d1ecc0SAlan Somers ATF_TP_ADD_TC(tp, msgctl_illegal_command);
1604d7d1ecc0SAlan Somers
16058f2433ebSAlan Somers ATF_TP_ADD_TC(tp, shmget_success);
16068f2433ebSAlan Somers ATF_TP_ADD_TC(tp, shmget_failure);
16078f2433ebSAlan Somers ATF_TP_ADD_TC(tp, shmat_success);
16088f2433ebSAlan Somers ATF_TP_ADD_TC(tp, shmat_failure);
16098f2433ebSAlan Somers ATF_TP_ADD_TC(tp, shmdt_success);
16108f2433ebSAlan Somers ATF_TP_ADD_TC(tp, shmdt_failure);
16118f2433ebSAlan Somers
16128f2433ebSAlan Somers ATF_TP_ADD_TC(tp, shmctl_rmid_success);
16138f2433ebSAlan Somers ATF_TP_ADD_TC(tp, shmctl_rmid_failure);
16148f2433ebSAlan Somers ATF_TP_ADD_TC(tp, shmctl_stat_success);
16158f2433ebSAlan Somers ATF_TP_ADD_TC(tp, shmctl_stat_failure);
16168f2433ebSAlan Somers ATF_TP_ADD_TC(tp, shmctl_set_success);
16178f2433ebSAlan Somers ATF_TP_ADD_TC(tp, shmctl_set_failure);
16188f2433ebSAlan Somers ATF_TP_ADD_TC(tp, shmctl_illegal_command);
16198f2433ebSAlan Somers
16204aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semget_success);
16214aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semget_failure);
16224aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semop_success);
16234aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semop_failure);
16244aabb64aSAlan Somers
16254aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_getval_success);
16264aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_getval_failure);
16274aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_setval_success);
16284aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_setval_failure);
16294aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_getpid_success);
16304aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_getpid_failure);
16314aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_getncnt_success);
16324aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_getncnt_failure);
16334aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_getzcnt_success);
16344aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_getzcnt_failure);
16354aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_getall_success);
16364aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_getall_failure);
16374aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_setall_success);
16384aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_setall_failure);
16394aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_stat_success);
16404aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_stat_failure);
16414aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_set_success);
16424aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_set_failure);
16434aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_rmid_success);
16444aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_rmid_failure);
16454aabb64aSAlan Somers ATF_TP_ADD_TC(tp, semctl_illegal_command);
16464aabb64aSAlan Somers
16473d3d0178SAlan Somers ATF_TP_ADD_TC(tp, shm_open_success);
16483d3d0178SAlan Somers ATF_TP_ADD_TC(tp, shm_open_failure);
16493d3d0178SAlan Somers ATF_TP_ADD_TC(tp, shm_unlink_success);
16503d3d0178SAlan Somers ATF_TP_ADD_TC(tp, shm_unlink_failure);
16513d3d0178SAlan Somers
16523d3d0178SAlan Somers ATF_TP_ADD_TC(tp, pipe_success);
16533d3d0178SAlan Somers ATF_TP_ADD_TC(tp, pipe_failure);
16543d3d0178SAlan Somers ATF_TP_ADD_TC(tp, posix_openpt_success);
16553d3d0178SAlan Somers ATF_TP_ADD_TC(tp, posix_openpt_failure);
16563d3d0178SAlan Somers
1657d7d1ecc0SAlan Somers return (atf_no_error());
1658d7d1ecc0SAlan Somers }
1659