xref: /plan9/sys/src/libauth/noworld.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1*7dd7cddfSDavid du Colombier #include <u.h>
2*7dd7cddfSDavid du Colombier #include <libc.h>
3*7dd7cddfSDavid du Colombier #include <bio.h>
4*7dd7cddfSDavid du Colombier #include <auth.h>
5*7dd7cddfSDavid du Colombier 
6*7dd7cddfSDavid du Colombier /*
7*7dd7cddfSDavid du Colombier  *  see if user is in the group noworld, i.e., has all file
8*7dd7cddfSDavid du Colombier  *  priviledges masked with 770, and all directories with
9*7dd7cddfSDavid du Colombier  *  771, before checking access rights
10*7dd7cddfSDavid du Colombier  */
11*7dd7cddfSDavid du Colombier int
noworld(char * user)12*7dd7cddfSDavid du Colombier noworld(char *user)
13*7dd7cddfSDavid du Colombier {
14*7dd7cddfSDavid du Colombier 	Biobuf *b;
15*7dd7cddfSDavid du Colombier 	char *p;
16*7dd7cddfSDavid du Colombier 	int n;
17*7dd7cddfSDavid du Colombier 
18*7dd7cddfSDavid du Colombier 	b = Bopen("/adm/users", OREAD);
19*7dd7cddfSDavid du Colombier 	if(b == nil)
20*7dd7cddfSDavid du Colombier 		return 0;
21*7dd7cddfSDavid du Colombier 	while((p = Brdline(b, '\n')) != nil){
22*7dd7cddfSDavid du Colombier 		p[Blinelen(b)-1] = 0;
23*7dd7cddfSDavid du Colombier 		p = strchr(p, ':');
24*7dd7cddfSDavid du Colombier 		if(p == nil)
25*7dd7cddfSDavid du Colombier 			continue;
26*7dd7cddfSDavid du Colombier 		if(strncmp(p, ":noworld:", 9) == 0){
27*7dd7cddfSDavid du Colombier 			p += 9;
28*7dd7cddfSDavid du Colombier 			break;
29*7dd7cddfSDavid du Colombier 		}
30*7dd7cddfSDavid du Colombier 	}
31*7dd7cddfSDavid du Colombier 	n = strlen(user);
32*7dd7cddfSDavid du Colombier 	while(p != nil && *p != 0){
33*7dd7cddfSDavid du Colombier 		p = strstr(p, user);
34*7dd7cddfSDavid du Colombier 		if(p == nil)
35*7dd7cddfSDavid du Colombier 			break;
36*7dd7cddfSDavid du Colombier 		if(*(p-1) == ':' || *(p-1) == ',')
37*7dd7cddfSDavid du Colombier 		if(*(p+n) == ':' || *(p+n) == ',' || *(p+n) == 0){
38*7dd7cddfSDavid du Colombier 			Bterm(b);
39*7dd7cddfSDavid du Colombier 			return 1;
40*7dd7cddfSDavid du Colombier 		}
41*7dd7cddfSDavid du Colombier 		p++;
42*7dd7cddfSDavid du Colombier 	}
43*7dd7cddfSDavid du Colombier 	Bterm(b);
44*7dd7cddfSDavid du Colombier 	return 0;
45*7dd7cddfSDavid du Colombier }
46