|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T f
Length: 2420 (0x974)
Types: TextFile
Names: »filewriters.c«
└─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen
└─⟦3da311d67⟧ »./cops/1.04/cops_104.tar.Z«
└─⟦6a2577110⟧
└─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen
└─⟦6a2577110⟧ »./cops/1.04/cops_104.tar«
└─⟦this⟧ »cops_104/src/filewriters.c«
└─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen
└─⟦ed5edc051⟧ »./cops/1.02/cops.102.tar«
└─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen
└─⟦db60b44f1⟧ »./cops/1.02/cops.102.tar.Z«
└─⟦ed5edc051⟧
└─⟦this⟧ »cops/src/filewriters.c«
/* Copyright 1985 Robert W. Baldwin */
/* Copyright 1986 Robert W. Baldwin */
/*
August 15, 1989: Dan Farmer
One line changed -- #38 is the old line, #41 is my version.
See comment for details...
*/
static char *notice85 = "Copyright 1985 Robert W. Baldwin";
static char *notice86 = "Copyright 1986 Robert W. Baldwin";
/*
* Useage: filewriters pathname
* Writes on stdout the list of people who can write the file.
* This writer's list contains three tokens, the owner, the group, and
* the 'all others' group, respectively.
* If either group does not have write access, then that token is
* replace with the token "NONE". If the 'all others' group has
* write access then that token is "OTHER".
*
* Notice that the owner of a file can always write it because the
* owner can change the file access mode.
*
* BUG: should handle links correctly.
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <grp.h>
#include <pwd.h>
/*
changed this line from upper to lower case 's'.
Ultrix barfed 'cause already defined in sys/stat.h,
no one else seemed to mind...
#define S_GWRITE (S_IWRITE >> 3)
*/
#ifdef cray
struct group *getgrgid();
#endif
#define s_GWRITE (S_IWRITE >> 3) /* Group write access. */
#define S_OWRITE (S_IWRITE >> 6) /* Other write access. */
main(argc, argv)
int argc;
char *argv[];
{
int i;
struct stat buf;
/*
* Make sure the file exists.
*/
if (argc != 2) {
fprintf(stderr, "%s: wrong number of args.\n", argv[0]);
exit(1);
}
if (stat(argv[1], &buf) != 0) {
fprintf(stderr, "%s: File %s does not exist.\n",
argv[0], argv[1]);
exit(1);
}
/*
* Produce list of writers.
* Owner can always write.
*/
printf(" ");
print_uid(stdout, buf.st_uid);
printf(" ");
if (s_GWRITE & (buf.st_mode)) {
print_gid(stdout, buf.st_gid);
}
else {
printf("NONE");
}
printf(" ");
if (S_OWRITE & buf.st_mode) {
printf("OTHER");
}
else {
printf("NONE");
}
printf("\n");
exit(0);
}
print_uid(out, uid)
FILE *out;
int uid;
{
struct passwd *pwent;
if ((pwent = getpwuid(uid)) == NULL) {
fprintf(stderr, "Bad user id %d.\n", uid);
exit(1);
}
fprintf(out, "%s", pwent->pw_name);
}
print_gid(out, gid)
FILE *out;
int gid;
{
struct group *grpent;
if ((grpent = getgrgid(gid)) == NULL) {
fprintf(stderr, "Bad group id %d.\n", gid);
exit(1);
}
fprintf(out, "%s", grpent->gr_name);
}