add directory study
This commit is contained in:
78
study/linux-travel/MINIX-1.5/1.5/Source/amoeba/util/prot.c
Normal file
78
study/linux-travel/MINIX-1.5/1.5/Source/amoeba/util/prot.c
Normal file
@@ -0,0 +1,78 @@
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <pwd.h>
|
||||
#include <grp.h>
|
||||
|
||||
#define isblank(c) ((c) == ' ' || (c) == '\t' || (c) == '\n')
|
||||
|
||||
#define MAXTOKEN 16
|
||||
|
||||
static char *gettok(fp)
|
||||
FILE *fp;
|
||||
{
|
||||
static char buf[MAXTOKEN + 1];
|
||||
register char c, *p = buf;
|
||||
|
||||
do /* skip blanks */
|
||||
if ((c = getc(fp)) == EOF)
|
||||
return(0);
|
||||
while (isblank(c));
|
||||
do {
|
||||
if (c == '#') { /* skip comment */
|
||||
while ((c = getc(fp)) != EOF)
|
||||
if (c == '\n') break;
|
||||
break;
|
||||
}
|
||||
*p++ = c;
|
||||
} while (c != ':' && (c = getc(fp)) != EOF && !isblank(c));
|
||||
*p++ = 0;
|
||||
return(buf);
|
||||
}
|
||||
|
||||
static number(p)
|
||||
char *p;
|
||||
{
|
||||
int n;
|
||||
|
||||
return sscanf(p, "%d", &n) == 1 ? n : -1;
|
||||
}
|
||||
|
||||
chkprot(chkfil, chkdefault, uid, gid)
|
||||
char *chkfil;
|
||||
char *chkdefault;
|
||||
{
|
||||
register userchk = 0, n;
|
||||
register FILE *fp;
|
||||
register char *p;
|
||||
register struct passwd *pw;
|
||||
register struct group *gr;
|
||||
extern FILE *fopen();
|
||||
extern struct passwd *getpwuid();
|
||||
extern struct group *getgrgid();
|
||||
|
||||
pw = getpwuid(uid);
|
||||
endpwent();
|
||||
gr = getgrgid(gid);
|
||||
endgrent();
|
||||
if ((fp = fopen(chkfil, "r")) == NULL && (fp = fopen(chkdefault, "r")) == NULL)
|
||||
return(-1);
|
||||
while ((p = gettok(fp)) != 0)
|
||||
if (strcmp(p, "group:") == 0)
|
||||
userchk = 0;
|
||||
else if (strcmp(p, "user:") == 0)
|
||||
userchk = 1;
|
||||
else if (userchk) {
|
||||
if (pw && strcmp(p, pw->pw_name) == 0 ||
|
||||
uid == number(p)) {
|
||||
fclose(fp);
|
||||
return(1);
|
||||
}
|
||||
}
|
||||
else
|
||||
if (gr && strcmp(p, gr->gr_name) == 0 ||
|
||||
gid == number(p)) {
|
||||
fclose(fp);
|
||||
return(1);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
Reference in New Issue
Block a user