From 6d8606941c7bbdb72c76c81fef8eb91232ffc918 Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Wed, 7 Nov 2012 11:40:57 -0800 Subject: Joe wanted it configurable. Laaame. --- main.c | 62 -------------------------------------------------------------- 1 file changed, 62 deletions(-) delete mode 100644 main.c (limited to 'main.c') diff --git a/main.c b/main.c deleted file mode 100644 index 8d07953..0000000 --- a/main.c +++ /dev/null @@ -1,62 +0,0 @@ -#define _GNU_SOURCE - -#include -#include -#include -#include -#include -#include -#include -#include - -int main( int argc, char *argv[] ) { - - if ( argc < 4 ) { - fprintf( stderr, "Usage: %s user group cmd [args..]\n", argv[0] ); - return 1; - }; - - char *user = argv[1]; - char *group = argv[2]; - char *cmd = argv[3]; - char **args = argv + 3; - - char *end; - unsigned long tmp; - - struct passwd *userpw; - struct group *grouppw; - - tmp = strtoul( user, &end, 10 ); - if ( end != user && ! *end ) { - userpw = getpwuid( tmp ); - } else { - userpw = getpwnam( user ); - }; - assert( userpw != NULL ); - - tmp = strtoul( group, &end, 10 ); - if ( end != user && ! *end ) { - grouppw = getgrgid( tmp ); - } else { - grouppw = getgrnam( group ); - }; - assert( grouppw != NULL ); - - // literally the only security check - assert( grouppw->gr_gid != 0 ); - assert( userpw->pw_uid != 0 ); - - if ( setgroups( 0, NULL ) != 0 ) - assert_perror( errno ); - - if ( setregid( grouppw->gr_gid, grouppw->gr_gid ) != 0 ) - assert_perror( errno ); - - if ( setreuid( userpw->pw_uid, userpw->pw_uid ) != 0 ) - assert_perror( errno ); - - execv( cmd, args ); - assert_perror( errno ); - -} -- cgit v1.2.3