setuid03.c revision 1c44244849cee68dec5f38a61a3441b0e0a3b472
1865695bbc89088b9526ea9045410e5afb70a985cplars/* 2865695bbc89088b9526ea9045410e5afb70a985cplars * 3865695bbc89088b9526ea9045410e5afb70a985cplars * Copyright (c) International Business Machines Corp., 2001 4865695bbc89088b9526ea9045410e5afb70a985cplars * 5865695bbc89088b9526ea9045410e5afb70a985cplars * This program is free software; you can redistribute it and/or modify 6865695bbc89088b9526ea9045410e5afb70a985cplars * it under the terms of the GNU General Public License as published by 7865695bbc89088b9526ea9045410e5afb70a985cplars * the Free Software Foundation; either version 2 of the License, or 8865695bbc89088b9526ea9045410e5afb70a985cplars * (at your option) any later version. 9865695bbc89088b9526ea9045410e5afb70a985cplars * 10865695bbc89088b9526ea9045410e5afb70a985cplars * This program is distributed in the hope that it will be useful, 11865695bbc89088b9526ea9045410e5afb70a985cplars * but WITHOUT ANY WARRANTY; without even the implied warranty of 12865695bbc89088b9526ea9045410e5afb70a985cplars * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 13865695bbc89088b9526ea9045410e5afb70a985cplars * the GNU General Public License for more details. 14865695bbc89088b9526ea9045410e5afb70a985cplars * 15865695bbc89088b9526ea9045410e5afb70a985cplars * You should have received a copy of the GNU General Public License 16865695bbc89088b9526ea9045410e5afb70a985cplars * along with this program; if not, write to the Free Software 174548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18865695bbc89088b9526ea9045410e5afb70a985cplars */ 19865695bbc89088b9526ea9045410e5afb70a985cplars 20865695bbc89088b9526ea9045410e5afb70a985cplars/* 21865695bbc89088b9526ea9045410e5afb70a985cplars * NAME 22fa31d55d3486830313bd044f7333697ce6124d22nstraz * setuid03.c 23865695bbc89088b9526ea9045410e5afb70a985cplars * 24865695bbc89088b9526ea9045410e5afb70a985cplars * DESCRIPTION 25865695bbc89088b9526ea9045410e5afb70a985cplars * Test to check the error and trivial conditions in setuid 26865695bbc89088b9526ea9045410e5afb70a985cplars * 27865695bbc89088b9526ea9045410e5afb70a985cplars * USAGE: <for command-line> 28fa31d55d3486830313bd044f7333697ce6124d22nstraz * setuid03 [-c n] [-e] [-i n] [-I x] [-P x] [-t] 29865695bbc89088b9526ea9045410e5afb70a985cplars * where, -c n : Run n copies concurrently. 30865695bbc89088b9526ea9045410e5afb70a985cplars * -e : Turn on errno logging. 31865695bbc89088b9526ea9045410e5afb70a985cplars * -i n : Execute test n times. 32865695bbc89088b9526ea9045410e5afb70a985cplars * -I x : Execute test for x seconds. 33865695bbc89088b9526ea9045410e5afb70a985cplars * -P x : Pause for x seconds between iterations. 34865695bbc89088b9526ea9045410e5afb70a985cplars * -t : Turn on syscall timing. 35865695bbc89088b9526ea9045410e5afb70a985cplars * 36865695bbc89088b9526ea9045410e5afb70a985cplars * HISTORY 37865695bbc89088b9526ea9045410e5afb70a985cplars * 07/2001 Ported by Wayne Boyer 38865695bbc89088b9526ea9045410e5afb70a985cplars * 39865695bbc89088b9526ea9045410e5afb70a985cplars * RESTRICTIONS 401c44244849cee68dec5f38a61a3441b0e0a3b472Stanislav Kholmanskikh * Must be ran as root. 41865695bbc89088b9526ea9045410e5afb70a985cplars */ 42865695bbc89088b9526ea9045410e5afb70a985cplars#include <errno.h> 431c44244849cee68dec5f38a61a3441b0e0a3b472Stanislav Kholmanskikh#include <pwd.h> 44865695bbc89088b9526ea9045410e5afb70a985cplars#include <sys/types.h> 45fa451a14d1fd38a2c32ff2a66474bafbf5b6c9dfrobbiew#include <sys/stat.h> 46865695bbc89088b9526ea9045410e5afb70a985cplars#include <unistd.h> 471c44244849cee68dec5f38a61a3441b0e0a3b472Stanislav Kholmanskikh 48865695bbc89088b9526ea9045410e5afb70a985cplars#include "test.h" 49865695bbc89088b9526ea9045410e5afb70a985cplars#include "usctest.h" 501c44244849cee68dec5f38a61a3441b0e0a3b472Stanislav Kholmanskikh#include "compat_16.h" 51865695bbc89088b9526ea9045410e5afb70a985cplars 52865695bbc89088b9526ea9045410e5afb70a985cplars#define ROOT_USER 0 53865695bbc89088b9526ea9045410e5afb70a985cplars 54fa31d55d3486830313bd044f7333697ce6124d22nstrazchar *TCID = "setuid03"; 55865695bbc89088b9526ea9045410e5afb70a985cplarsint TST_TOTAL = 1; 565901ff4b9d18b497eb72630f3b5654e14cb274f0robbiewchar nobody_uid[] = "nobody"; 575901ff4b9d18b497eb72630f3b5654e14cb274f0robbiewstruct passwd *ltpuser; 58865695bbc89088b9526ea9045410e5afb70a985cplars 5956207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint exp_enos[] = { EPERM, 0 }; 60865695bbc89088b9526ea9045410e5afb70a985cplars 61865695bbc89088b9526ea9045410e5afb70a985cplarsvoid setup(void); 62865695bbc89088b9526ea9045410e5afb70a985cplarsvoid cleanup(void); 63865695bbc89088b9526ea9045410e5afb70a985cplars 64fa451a14d1fd38a2c32ff2a66474bafbf5b6c9dfrobbiewint main(int ac, char **av) 65865695bbc89088b9526ea9045410e5afb70a985cplars{ 6689af32a63ce8a780ea39337339e14caae244b5a4Cyril Hrubis int lc; 6789af32a63ce8a780ea39337339e14caae244b5a4Cyril Hrubis char *msg; 68865695bbc89088b9526ea9045410e5afb70a985cplars 6945e285d46ab47b0ff76c88acb5ba97b0bd5f753dGarrett Cooper if ((msg = parse_opts(ac, av, NULL, NULL)) != NULL) { 7060fa8014af7534eaefa901200c8df4b74ce422e6Garrett Cooper tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg); 71354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 72865695bbc89088b9526ea9045410e5afb70a985cplars 73865695bbc89088b9526ea9045410e5afb70a985cplars /* 74865695bbc89088b9526ea9045410e5afb70a985cplars * perform global setup for the test 75865695bbc89088b9526ea9045410e5afb70a985cplars */ 76865695bbc89088b9526ea9045410e5afb70a985cplars setup(); 77865695bbc89088b9526ea9045410e5afb70a985cplars 78865695bbc89088b9526ea9045410e5afb70a985cplars TEST_EXP_ENOS(exp_enos); 79865695bbc89088b9526ea9045410e5afb70a985cplars 80865695bbc89088b9526ea9045410e5afb70a985cplars for (lc = 0; TEST_LOOPING(lc); lc++) { 81865695bbc89088b9526ea9045410e5afb70a985cplars 82d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang /* reset tst_count in case we are looping */ 83d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang tst_count = 0; 84865695bbc89088b9526ea9045410e5afb70a985cplars 851c44244849cee68dec5f38a61a3441b0e0a3b472Stanislav Kholmanskikh TEST(SETUID(cleanup, ROOT_USER)); 86865695bbc89088b9526ea9045410e5afb70a985cplars 87865695bbc89088b9526ea9045410e5afb70a985cplars if (TEST_RETURN != -1) { 88865695bbc89088b9526ea9045410e5afb70a985cplars tst_resm(TFAIL, "call succeeded unexpectedly"); 89865695bbc89088b9526ea9045410e5afb70a985cplars continue; 90865695bbc89088b9526ea9045410e5afb70a985cplars } 91865695bbc89088b9526ea9045410e5afb70a985cplars 92865695bbc89088b9526ea9045410e5afb70a985cplars TEST_ERROR_LOG(TEST_ERRNO); 93865695bbc89088b9526ea9045410e5afb70a985cplars 94865695bbc89088b9526ea9045410e5afb70a985cplars if (TEST_ERRNO == EPERM) { 95865695bbc89088b9526ea9045410e5afb70a985cplars tst_resm(TPASS, "setuid returned errno EPERM"); 96865695bbc89088b9526ea9045410e5afb70a985cplars } else { 97865695bbc89088b9526ea9045410e5afb70a985cplars tst_resm(TFAIL, "setuid returned unexpected errno - %d", 98865695bbc89088b9526ea9045410e5afb70a985cplars TEST_ERRNO); 99865695bbc89088b9526ea9045410e5afb70a985cplars } 100865695bbc89088b9526ea9045410e5afb70a985cplars } 101865695bbc89088b9526ea9045410e5afb70a985cplars cleanup(); 1021e6f5a673655551de5734ff31ef48cd63b604e6dGarrett Cooper tst_exit(); 103865695bbc89088b9526ea9045410e5afb70a985cplars} 104865695bbc89088b9526ea9045410e5afb70a985cplars 105865695bbc89088b9526ea9045410e5afb70a985cplars/* 106865695bbc89088b9526ea9045410e5afb70a985cplars * setup() - performs all ONE TIME setup for this test 107865695bbc89088b9526ea9045410e5afb70a985cplars */ 10856207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid setup(void) 109865695bbc89088b9526ea9045410e5afb70a985cplars{ 1101c44244849cee68dec5f38a61a3441b0e0a3b472Stanislav Kholmanskikh tst_require_root(NULL); 1111c44244849cee68dec5f38a61a3441b0e0a3b472Stanislav Kholmanskikh 1125901ff4b9d18b497eb72630f3b5654e14cb274f0robbiew /* Switch to nobody user for correct error code collection */ 11356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak ltpuser = getpwnam(nobody_uid); 1141c44244849cee68dec5f38a61a3441b0e0a3b472Stanislav Kholmanskikh if (ltpuser == NULL) 1151c44244849cee68dec5f38a61a3441b0e0a3b472Stanislav Kholmanskikh tst_brkm(TBROK, cleanup, "getpwnam failed for user id %s", 1161c44244849cee68dec5f38a61a3441b0e0a3b472Stanislav Kholmanskikh nobody_uid); 1171c44244849cee68dec5f38a61a3441b0e0a3b472Stanislav Kholmanskikh 11856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak if (setuid(ltpuser->pw_uid) == -1) { 11956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak tst_resm(TINFO, "setuid failed to " 12056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak "to set the effective uid to %d", ltpuser->pw_uid); 12156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak perror("setuid"); 12256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak } 1235901ff4b9d18b497eb72630f3b5654e14cb274f0robbiew 124865695bbc89088b9526ea9045410e5afb70a985cplars tst_sig(FORK, DEF_HANDLER, cleanup); 125865695bbc89088b9526ea9045410e5afb70a985cplars 126865695bbc89088b9526ea9045410e5afb70a985cplars umask(0); 127865695bbc89088b9526ea9045410e5afb70a985cplars 128865695bbc89088b9526ea9045410e5afb70a985cplars TEST_PAUSE; 129865695bbc89088b9526ea9045410e5afb70a985cplars} 130865695bbc89088b9526ea9045410e5afb70a985cplars 131865695bbc89088b9526ea9045410e5afb70a985cplars/* 132865695bbc89088b9526ea9045410e5afb70a985cplars * cleanup() - performs all the ONE TIME cleanup for this test at completion 133865695bbc89088b9526ea9045410e5afb70a985cplars * or premature exit 134865695bbc89088b9526ea9045410e5afb70a985cplars */ 13556207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid cleanup(void) 136865695bbc89088b9526ea9045410e5afb70a985cplars{ 137865695bbc89088b9526ea9045410e5afb70a985cplars /* 138865695bbc89088b9526ea9045410e5afb70a985cplars * print timing status if that option was specified 139865695bbc89088b9526ea9045410e5afb70a985cplars * print errno log if that option was specified 140865695bbc89088b9526ea9045410e5afb70a985cplars */ 141865695bbc89088b9526ea9045410e5afb70a985cplars TEST_CLEANUP; 142865695bbc89088b9526ea9045410e5afb70a985cplars 143ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 144