diff --git shell.c shell.c index bbc8a66..5bfd466 100644 --- shell.c +++ shell.c @@ -1226,8 +1226,12 @@ uidget () void disable_priv_mode () { - setuid (current_user.uid); - setgid (current_user.gid); + + if( (setuid (current_user.uid) !=0) || (setgid (current_user.gid) != 0) ){ + report_error("Drop privileges failed!!\n"); + exit(EX_DROPFAIL); + } + current_user.euid = current_user.uid; current_user.egid = current_user.gid; } diff --git shell.h shell.h index 243e467..c3625be 100644 --- shell.h +++ shell.h @@ -72,6 +72,7 @@ extern int EOF_Reached; #define EX_REDIRFAIL 259 /* redirection failed */ #define EX_BADASSIGN 260 /* variable assignment error */ #define EX_EXPFAIL 261 /* word expansion failed */ +#define EX_DROPFAIL 262 /* Drop privileges failed */ /* Flag values that control parameter pattern substitution. */ #define MATCH_ANY 0x000