1 /*
2 * Copyright (c) Wipro Technologies Ltd, 2002. All Rights Reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of version 2 of the GNU General Public License as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it would be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11 *
12 * You should have received a copy of the GNU General Public License along
13 * with this program; if not, write the Free Software Foundation, Inc.,
14 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
15 *
16 */
17
18 /*
19 * Description: This is a setuid to root program invoked by a non-root
20 * process to validate the mount flag MS_NOSUID.
21 *
22 * This function exit with 0 or 1 depending upon the
23 * success/failure of setuid(2) system call.
24 */
25
26 #include <stdio.h>
27 #include <sys/types.h>
28 #include <unistd.h>
29 #include <stdlib.h>
30 #include <stdlib.h>
31 #include <errno.h>
32
33 /* Save the effective and real UIDs. */
34
35 static uid_t ruid;
36
37 /* Restore the effective UID to its original value. */
38
do_setuid(void)39 int do_setuid(void)
40 {
41 int status;
42
43 status = setreuid(ruid, 0);
44 if (status < 0) {
45 return 1;
46 } else {
47 return 0;
48 }
49 return 0;
50 }
51
52 /* Main program. */
53
main(void)54 int main(void)
55 {
56 int exit_status;
57
58 /* Save the real and effective user IDs. */
59 ruid = getuid();
60 exit_status = do_setuid();
61
62 exit(exit_status);
63 }
64