1*49cdfc7eSAndroid Build Coastguard Worker // SPDX-License-Identifier: GPL-2.0-or-later 2*49cdfc7eSAndroid Build Coastguard Worker /* 3*49cdfc7eSAndroid Build Coastguard Worker * Copyright (c) International Business Machines Corp., 2001 4*49cdfc7eSAndroid Build Coastguard Worker * Copyright (c) Linux Test Project, 2009-2022 5*49cdfc7eSAndroid Build Coastguard Worker */ 6*49cdfc7eSAndroid Build Coastguard Worker 7*49cdfc7eSAndroid Build Coastguard Worker /*\ 8*49cdfc7eSAndroid Build Coastguard Worker * [Description] 9*49cdfc7eSAndroid Build Coastguard Worker * 10*49cdfc7eSAndroid Build Coastguard Worker * This test will switch to nobody user for correct error code collection. 11*49cdfc7eSAndroid Build Coastguard Worker * Verify setuid returns errno EPERM when it switches to root_user. 12*49cdfc7eSAndroid Build Coastguard Worker */ 13*49cdfc7eSAndroid Build Coastguard Worker 14*49cdfc7eSAndroid Build Coastguard Worker #include <errno.h> 15*49cdfc7eSAndroid Build Coastguard Worker #include <pwd.h> 16*49cdfc7eSAndroid Build Coastguard Worker #include <unistd.h> 17*49cdfc7eSAndroid Build Coastguard Worker #include <sys/types.h> 18*49cdfc7eSAndroid Build Coastguard Worker #include "tst_test.h" 19*49cdfc7eSAndroid Build Coastguard Worker #include "compat_tst_16.h" 20*49cdfc7eSAndroid Build Coastguard Worker 21*49cdfc7eSAndroid Build Coastguard Worker #define ROOT_USER 0 22*49cdfc7eSAndroid Build Coastguard Worker verify_setuid(void)23*49cdfc7eSAndroid Build Coastguard Workerstatic void verify_setuid(void) 24*49cdfc7eSAndroid Build Coastguard Worker { 25*49cdfc7eSAndroid Build Coastguard Worker TST_EXP_FAIL(SETUID(ROOT_USER), EPERM); 26*49cdfc7eSAndroid Build Coastguard Worker } 27*49cdfc7eSAndroid Build Coastguard Worker setup(void)28*49cdfc7eSAndroid Build Coastguard Workerstatic void setup(void) 29*49cdfc7eSAndroid Build Coastguard Worker { 30*49cdfc7eSAndroid Build Coastguard Worker struct passwd *pw; 31*49cdfc7eSAndroid Build Coastguard Worker uid_t uid; 32*49cdfc7eSAndroid Build Coastguard Worker 33*49cdfc7eSAndroid Build Coastguard Worker pw = SAFE_GETPWNAM("nobody"); 34*49cdfc7eSAndroid Build Coastguard Worker uid = pw->pw_uid; 35*49cdfc7eSAndroid Build Coastguard Worker 36*49cdfc7eSAndroid Build Coastguard Worker SAFE_SETUID(uid); 37*49cdfc7eSAndroid Build Coastguard Worker 38*49cdfc7eSAndroid Build Coastguard Worker umask(0); 39*49cdfc7eSAndroid Build Coastguard Worker } 40*49cdfc7eSAndroid Build Coastguard Worker 41*49cdfc7eSAndroid Build Coastguard Worker static struct tst_test test = { 42*49cdfc7eSAndroid Build Coastguard Worker .setup = setup, 43*49cdfc7eSAndroid Build Coastguard Worker .needs_root = 1, 44*49cdfc7eSAndroid Build Coastguard Worker .test_all = verify_setuid, 45*49cdfc7eSAndroid Build Coastguard Worker }; 46