mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-12 11:10:07 +00:00
45 lines
779 B
C
45 lines
779 B
C
#include <u.h>
|
|
#include <libc.h>
|
|
#include <bio.h>
|
|
#include <auth.h>
|
|
|
|
/*
|
|
* see if user is in the group noworld, i.e., has all file
|
|
* priviledges masked with 770, and all directories with
|
|
* 771, before checking access rights
|
|
*/
|
|
int
|
|
noworld(char *user)
|
|
{
|
|
Biobuf *b;
|
|
char *p;
|
|
int n;
|
|
|
|
b = Bopen("/adm/users", OREAD);
|
|
if(b == nil)
|
|
return 0;
|
|
while((p = Brdline(b, '\n')) != nil){
|
|
p[Blinelen(b)-1] = 0;
|
|
p = strchr(p, ':');
|
|
if(p == nil)
|
|
continue;
|
|
if(strncmp(p, ":noworld:", 9) == 0){
|
|
p += 9;
|
|
break;
|
|
}
|
|
}
|
|
n = strlen(user);
|
|
while(p != nil && *p != 0){
|
|
p = strstr(p, user);
|
|
if(p == nil)
|
|
break;
|
|
if(*(p-1) == ':' || *(p-1) == ',')
|
|
if(*(p+n) == ':' || *(p+n) == ',' || *(p+n) == 0){
|
|
Bterm(b);
|
|
return 1;
|
|
}
|
|
p++;
|
|
}
|
|
Bterm(b);
|
|
return 0;
|
|
}
|