Path: utzoo!hoptoad!pacbell!pyramid!oliveb!logicon.arpa!nosc!helios.ee.lbl.gov!wasatch!cs.utexas.edu!uunet!zephyr.ens.tek.com!orca!quark.WV.TEK.COM!jeff From: jeff@quark.WV.TEK.COM (Jeff Beadles) Newsgroups: alt.sources Subject: changemode.c: Change file permissions using rwxr-xr-x Message-ID: <4226@orca.WV.TEK.COM> Date: 14 Aug 89 22:10:40 GMT Sender: nobody@orca.WV.TEK.COM Reply-To: jeff@quark.WV.TEK.COM (Jeff Beadles) Organization: Very little. Lines: 113 This changes strings like 'r-xr-xr-x' and changes it to 0555. It works for setuid/setgid, and save text bits also. To use it: changemod rwxr-xr-x file1 file2. I wrote this a while back as a joke for /r$ a while back and "found" it again. -Jeff -- Jeff Beadles Utek Engineering, Tektronix Inc. jeff@quark.WV.TEK.COM #--------------------------------CUT HERE------------------------------------- #! /bin/sh # # This is a shell archive. Save this into a file, edit it # and delete all lines above this comment. Then give this # file to sh by executing the command "sh file". The files # will be extracted into the current directory owned by # you with default permissions. # # The files contained herein are: # # -rw------- 1 jeff 1448 Jun 2 21:10 changemod.c # echo 'x - changemod.c' if test -f changemod.c; then echo 'shar: not overwriting changemod.c'; else sed 's/^X//' << '________This_Is_The_END________' > changemod.c X/* X * This is a farce. If you can't think of an easier way, then X * Maybe it's time to take up VMS... :-) :-) :-) X * X * Tossed together by Jeff Beadles jeff@quark.WV.TEK.COM X * X * I make (nor desire :-) any rights or claims to this. X * If you sell it for big bucks, then good for you. X * X * Notice that this is the only comment. This is planned. X * X * To compile: type 'cc -o changemod changemod.c' X */ X X#include Xextern char getbits(); Xextern char getstbits(); Xextern char *malloc(); X Xmain(argc,argv) Xint argc; Xchar **argv; X{ X int loop; X char *newargv[4096], *cp; X X if ( argc < 3) X err(); X if ( strlen(argv[1]) != 9) X err(); X X if ( (newargv[0]=malloc(6)) == NULL) X err(); X if ( (cp=newargv[1]=malloc(6)) == NULL) X err(); X X strcpy(newargv[0],"chmod"); X X for(loop=2; loop < argc; loop++) X newargv[loop]=argv[loop]; X X newargv[loop] = NULL; X *(cp++) = getstbits(argv[1]); X *(cp++) = getbits( argv[1] + 0 ); X *(cp++) = getbits( argv[1] + 3 ); X *(cp++) = getbits( argv[1] + 6 ); X *cp = '\0'; X X execv( "/bin/chmod" , newargv); X err(); X} Xerr() X{ X fprintf(stderr,"Error\n"); X exit(1); X} X Xchar getstbits(str) Xchar *str; X{ X int ret=0; X if (str[2]=='s') ret += 4; X if (str[5]=='s') ret += 2; X if (str[8]=='t') ret += 1; X return('0' + ret); X} Xchar getbits(str) Xchar *str; X{ X int ret=0; X if (str[0]=='r') ret += 4; X if (str[1]=='w') ret += 2; X if( (str[2]=='x') || (str[2]=='s') || (str[2]=='t')) X ret += 1; X return('0' + ret); X} ________This_Is_The_END________ if test `wc -c < changemod.c` -ne 1448; then echo 'shar: changemod.c was damaged during transit (should have been 1448 bytes)' fi fi ; : end of overwriting check exit 0