Path: utzoo!utgpu!news-server.csri.toronto.edu!bonnie.concordia.ca!thunder.mcrcim.mcgill.edu!snorkelwacker.mit.edu!spool.mu.edu!mips!swrinde!cs.utexas.edu!uunet!zephyr.ens.tek.com!tektronix!percy!m2xenix!quagga!proxima!frcs!paul From: paul@frcs.UUCP (Paul Nash) Newsgroups: alt.sources Subject: sux, an enhancer for su Message-ID: <462@frcs.UUCP> Date: 19 Apr 91 10:31:44 GMT Organization: Free Range Computer Systems CC Lines: 89 I recently hacked up a fairly trivial enhancer for `su', that allows members of group `wheel' to su at will _without_ needing the root password. Use it at your own risk, and distribute it to whom you will. You may _not_ sell this code -- it must be given away for free. To install, `cc -o sux -O sux.c', `chown root sux', `chmod u+s sux'. ---- cut here ---- cut here ---- cut here ---- /* ** A simple `su' enhancer. This gets the uid of the user, thence ** the name, checks whether they are in group `wheel', and if so ** sets the euid to 0. If not, leave euid alone. After all of this, ** it execs `su' with all the command line options. ** ** This program must be owned by, and setuid to `root'. ** ** Copyright (C) Free Range Computer Systems CC, 1991. ** ** You may distrubute this code at will, provided that you do not ** _sell_ it, and leave this copyright notice unchanged. */ static char *copyright = "Copyright (C) Free Range Computer Systems CC, 1991."; static char *rcs_id = "$Header: /u/src/utils/RCS/sux.c,v 1.2 91/04/19 11:49:27 src Exp $"; /* * $Log: sux.c,v $ * Revision 1.2 91/04/19 11:49:27 src * removed unnecessary check for `**group->gr_mem == '\0''. The `group' * entry ends with `*group->gr_mem == NULL', as it should. * * Revision 1.1 91/04/19 11:48:18 src * Initial revision * */ #include #include #include #include struct group *getgrnam(); #define PRIV_GRP "wheel" #define SU "/bin/su" #define TRUE ( 1 == 1 ) #define FALSE ( ! TRUE ) main( argc, argv ) int argc; char *argv[]; { unsigned int uid, priviledged; unsigned char *userid; struct passwd *passwd; struct group *group; uid = getuid(); passwd = getpwuid( uid ); group = getgrnam( PRIV_GRP ); if ( passwd == NULL || group == NULL ) { fprintf( stderr, "cannot read password or group files, aborting\n" ); exit( 1 ); } priviledged = FALSE; while ( *group->gr_mem != NULL ) { if ( strcmp( passwd->pw_name, *group->gr_mem++ ) == 0 ) { priviledged = TRUE; break; } } if ( ! priviledged ) { setuid( uid ); } else { setuid( 0 ); } execv( SU, argv ); fprintf( stderr, "It seems that %s doesn't exist: sorry\n", SU ); } ---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=--- Paul Nash Free Range Computer Systems cc paul@frcs.UUCP ...!uunet!m2xenix!frcs!paul