blob: 39224db1e837435aec20b13e2969d79af71f03c5 [file] [log] [blame]
plars865695b2001-08-27 22:15:12 +00001/*
2 * $Copyright: $
3 * Copyright (c) 1984-2000
4 * Sequent Computer Systems, Inc. All rights reserved.
subrata_modak56207ce2009-03-23 13:35:39 +00005 *
plars865695b2001-08-27 22:15:12 +00006 * This software is furnished under a license and may be used
7 * only in accordance with the terms of that license and with the
8 * inclusion of the above copyright notice. This software may not
9 * be provided or otherwise made available to, or used by, any
10 * other person. No title to or ownership of the software is
11 * hereby transferred.
12 */
13
14/*
15 * Test Name: getresgid01
16 *
17 * Test Description:
18 * Verify that getresgid() will be successful to get the real, effective
19 * and saved user id of the calling process.
20 *
21 * Expected Result:
22 * getresgid() should return with 0 value and the real/effective/saved
23 * user ids should be equal to that of calling process.
24 *
25 * Algorithm:
26 * Setup:
27 * Setup signal handling.
28 * Pause for SIGUSR1 if option specified.
29 *
30 * Test:
31 * Loop if the proper options are given.
32 * Execute system call
33 * Check return code, if system call failed (return=-1)
subrata_modak56207ce2009-03-23 13:35:39 +000034 * Log the errno and Issue a FAIL message.
plars865695b2001-08-27 22:15:12 +000035 * Otherwise,
subrata_modak56207ce2009-03-23 13:35:39 +000036 * Verify the Functionality of system call
plars865695b2001-08-27 22:15:12 +000037 * if successful,
subrata_modak56207ce2009-03-23 13:35:39 +000038 * Issue Functionality-Pass message.
plars865695b2001-08-27 22:15:12 +000039 * Otherwise,
40 * Issue Functionality-Fail message.
41 * Cleanup:
42 * Print errno log and/or timing stats if options given
43 *
44 * Usage: <for command-line>
45 * getresgid01 [-c n] [-f] [-i n] [-I x] [-P x] [-t]
46 * where, -c n : Run n copies concurrently.
47 * -f : Turn off functionality Testing.
48 * -i n : Execute test n times.
49 * -I x : Execute test for x seconds.
50 * -P x : Pause for x seconds between iterations.
51 * -t : Turn on syscall timing.
52 *
53 * HISTORY
54 * 07/2001 Ported by Wayne Boyer
55 *
56 * RESTRICTIONS:
57 * None.
58 *
59 */
robbiew96d23372003-03-26 20:40:04 +000060
plars865695b2001-08-27 22:15:12 +000061#include <stdio.h>
62#include <unistd.h>
63#include <sys/types.h>
64#include <errno.h>
65#include <fcntl.h>
66#include <string.h>
67#include <signal.h>
68
69#include "test.h"
70#include "usctest.h"
71
subrata_modak56207ce2009-03-23 13:35:39 +000072extern int getresgid(gid_t *, gid_t *, gid_t *);
robbiew96d23372003-03-26 20:40:04 +000073
subrata_modak56207ce2009-03-23 13:35:39 +000074char *TCID = "getresgid01"; /* Test program identifier. */
75int TST_TOTAL = 1; /* Total number of test cases. */
plars865695b2001-08-27 22:15:12 +000076gid_t pr_gid, pe_gid, ps_gid; /* calling process real/effective/saved gid */
77
78void setup(); /* Main setup function of test */
79void cleanup(); /* cleanup function for the test */
80
subrata_modak56207ce2009-03-23 13:35:39 +000081int main(int ac, char **av)
plars865695b2001-08-27 22:15:12 +000082{
Cyril Hrubis89af32a2012-10-24 16:39:11 +020083 int lc;
84 char *msg;
plars865695b2001-08-27 22:15:12 +000085 gid_t real_gid, /* real/eff./saved user id from getresgid() */
subrata_modak56207ce2009-03-23 13:35:39 +000086 eff_gid, sav_gid;
87
plars865695b2001-08-27 22:15:12 +000088 /* Parse standard options given to run the test. */
Garrett Cooper45e285d2010-11-22 12:19:25 -080089 msg = parse_opts(ac, av, NULL, NULL);
90 if (msg != NULL) {
plars865695b2001-08-27 22:15:12 +000091 tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
Garrett Cooper2c282152010-12-16 00:55:50 -080092
plars865695b2001-08-27 22:15:12 +000093 }
94
plars865695b2001-08-27 22:15:12 +000095 setup();
96
plars865695b2001-08-27 22:15:12 +000097 for (lc = 0; TEST_LOOPING(lc); lc++) {
Garrett Cooper2c282152010-12-16 00:55:50 -080098
Caspar Zhangd59a6592013-03-07 14:59:12 +080099 tst_count = 0;
plars865695b2001-08-27 22:15:12 +0000100
subrata_modak4bb656a2009-02-26 12:02:09 +0000101 /*
plars865695b2001-08-27 22:15:12 +0000102 * Call getresgid() to get the real/effective/saved
103 * user id's of the calling process.
104 */
105 TEST(getresgid(&real_gid, &eff_gid, &sav_gid));
106
plars865695b2001-08-27 22:15:12 +0000107 if (TEST_RETURN == -1) {
108 tst_resm(TFAIL, "getresgid() Failed, errno=%d : %s",
109 TEST_ERRNO, strerror(TEST_ERRNO));
110 continue;
111 }
112 /*
113 * Perform functional verification if test
114 * executed without (-f) option.
115 */
116 if (STD_FUNCTIONAL_TEST) {
117 /*
118 * Verify the real/effective/saved gid values returned
119 * by getresgid with the expected values.
120 */
subrata_modak56207ce2009-03-23 13:35:39 +0000121 if ((real_gid != pr_gid) || (eff_gid != pe_gid) ||
plars865695b2001-08-27 22:15:12 +0000122 (sav_gid != ps_gid)) {
123 tst_resm(TFAIL, "real:%d, effective:%d, "
124 "saved-user:%d ids differ",
125 real_gid, eff_gid, sav_gid);
126 } else {
127 tst_resm(TPASS, "Functionality of getresgid() "
128 "successful");
129 }
130 } else {
131 tst_resm(TPASS, "call succeeded");
132 }
Garrett Cooper2c282152010-12-16 00:55:50 -0800133 }
plars865695b2001-08-27 22:15:12 +0000134
plars865695b2001-08-27 22:15:12 +0000135 cleanup();
136
Garrett Cooper7d0a4a52010-12-16 10:05:08 -0800137 tst_exit();
Garrett Cooper2c282152010-12-16 00:55:50 -0800138}
plars865695b2001-08-27 22:15:12 +0000139
140/*
141 * setup() - performs all ONE TIME setup for this test.
142 * Get the real/effective/saved user id of the calling process.
143 */
subrata_modak56207ce2009-03-23 13:35:39 +0000144void setup()
plars865695b2001-08-27 22:15:12 +0000145{
Garrett Cooper2c282152010-12-16 00:55:50 -0800146
plars865695b2001-08-27 22:15:12 +0000147 tst_sig(NOFORK, DEF_HANDLER, cleanup);
148
plars865695b2001-08-27 22:15:12 +0000149 TEST_PAUSE;
150
151 /* Real user-id of the calling process */
152 pr_gid = getgid();
153
154 /* Effective user-id of the calling process */
155 pe_gid = getegid();
156
157 /* Saved user-id of the calling process */
158 ps_gid = getegid();
159
160}
161
plars865695b2001-08-27 22:15:12 +0000162/*
163 * cleanup() - performs all ONE TIME cleanup for this test at
164 * completion or premature exit.
165 */
subrata_modak56207ce2009-03-23 13:35:39 +0000166void cleanup()
plars865695b2001-08-27 22:15:12 +0000167{
168 /*
169 * print timing stats if that option was specified.
170 * print errno log if that option was specified.
171 */
172 TEST_CLEANUP;
173
Chris Dearmanec6edca2012-10-17 19:54:01 -0700174}