lenny@icus.islp.ny.us (Lenny Tropiano) (04/06/89)
In article <656@icus.islp.ny.us>, lenny@icus.islp.ny.us (Lenny Tropiano) writes: > Here's a small patch to dstconvert that will make sure that it will work > with *any* non-shared libaries compiled binary. This means if it was loaded > with the -N, -z, etc.. switched, now the magic flag bits are masked, and > then checked. Mike Levin (magnus!levin) sent me his version, I modified > it slightly to work like /bin/file does with the /etc/magic checking. > Here's another enhancement that will help those people (like me) remember to change the mode, owner, and group of the new file. This enhancement follows the previous patch (posted to this group) and will change the modes of the new binary to match the old binary. Then the mv(1) command can be used and will keep the modes the same. NOTE: Found another file that needs to be converted for those who have DOS-73 boards. /usr/bin/DOS-73. I'm sure there are more, I'll do an exhaustive search and post my results. -Lenny -- Feed to patch -- -- Feed to patch -- -- Feed to patch -- -- Feed to patch -- *** o.dstconvert.c Thu Apr 6 12:07:34 1989 --- dstconvert.c Thu Apr 6 12:31:09 1989 *************** *** 5,10 ** E-Mail address: ...!icus!lenny -or- lenny@icus.islp.ny.us ** ** Organization: ICUS Software Systems (c)1989 ** ** Date: March 30, 1989 ** ** ** ************************************************************************** ** ** --- 5,12 ----- ** E-Mail address: ...!icus!lenny -or- lenny@icus.islp.ny.us ** ** Organization: ICUS Software Systems (c)1989 ** ** Date: March 30, 1989 ** + ** Revision History: April 5th - Check for any type of binary magic ** + ** April 6th - Change the owners and permissions ** ** ** ************************************************************************** ** ** *************** *** 29,34 \************************************************************************/ #include <stdio.h> char buffer[BUFSIZ]; /* big buffer */ char *progname; /* program name */ --- 31,38 ----- \************************************************************************/ #include <stdio.h> + #include <sys/types.h> + #include <sys/stat.h> char buffer[BUFSIZ]; /* big buffer */ char *progname; /* program name */ *************** *** 78,83 } changed_flag = convert_dst(infp, outfp); if (changed_flag == 1) { printf("%s: converted to new daylight savings file format.\n", progname); --- 82,90 ----- } changed_flag = convert_dst(infp, outfp); + + fclose(infp); + if (changed_flag == 1) { printf("%s: converted to new daylight savings file format.\n", progname); *************** *** 81,86 if (changed_flag == 1) { printf("%s: converted to new daylight savings file format.\n", progname); } else if (changed_flag == -1) { fprintf(stderr,"%s: file already converted to new daylight savings file format.\n", progname); --- 88,95 ----- if (changed_flag == 1) { printf("%s: converted to new daylight savings file format.\n", progname); + fclose(outfp); + change_file_stats(infile, outfile); } else if (changed_flag == -1) { fprintf(stderr,"%s: file already converted to new daylight savings file format.\n", progname); *************** *** 95,103 exit(1); } - fclose(infp); - fclose(outfp); - exit(0); } --- 104,109 ----- exit(1); } exit(0); } *************** *** 161,165 ch2 = ch3; ch3 = fgetc(infp); } } } --- 167,197 ----- ch2 = ch3; ch3 = fgetc(infp); } + } + } + + change_file_stats(infile, outfile) + char *infile, *outfile; + { + struct stat statbuf; /* file modes */ + ushort owner, group; /* owner and group */ + ushort mode; /* permission */ + + if (stat(infile, &statbuf) == -1) { + perror("Can't stat(2)"); + exit(1); + } + owner = statbuf.st_uid; + group = statbuf.st_gid; + mode = statbuf.st_mode; + + if (chmod(outfile, mode) == -1) { + perror("Can't chmod(2)"); + exit(1); + } + + if (chown(outfile, owner, group) == -1) { + perror("Can't chown(2)"); + exit(1); } } -- Lenny Tropiano ICUS Software Systems [w] +1 (516) 582-5525 lenny@icus.islp.ny.us Telex; 154232428 ICUS [h] +1 (516) 968-8576 {talcott,decuac,boulder,hombre,pacbell,sbcs}!icus!lenny attmail!icus!lenny ICUS Software Systems -- PO Box 1; Islip Terrace, NY 11752