| plan 9 kernel history: overview | file list | diff list |
1992/0623/port/net.c (diff list | history)
| 1992/0619/sys/src/9/port/net.c:15,20 – 1992/0623/sys/src/9/port/net.c:15,34 (short | long | prev | next) | ||
| 1991/1107 | }; /* | |
| 1992/0623 | * find protection structure */ static Netprot* findprot(Network *np, int id) { Netprot *p; for(p = np->prot; p; p = p->next) if(p->id == id) break; return p; } /* | |
| 1991/1107 | * generate a 3 level directory */ int | |
| 1992/0619/sys/src/9/port/net.c:24,30 – 1992/0623/sys/src/9/port/net.c:38,43 | ||
| 1991/1107 | char buf[32]; Network *np = vp; | |
| 1991/1115 | int t; | |
| 1992/0619/sys/src/9/port/net.c:61,69 – 1992/0623/sys/src/9/port/net.c:74,81 | ||
| 1991/1107 | } /* third level depends on the number of info files */ | |
| 1991/1115 |
| |
| 1992/0623 | p = findprot(np, STREAMID(c->qid.path)); if(p && *p->owner){ | |
| 1991/1115 | o = p->owner; perm = p->mode; } else { | |
| 1992/0619/sys/src/9/port/net.c:153,159 – 1992/0623/sys/src/9/port/net.c:165,173 | ||
| 1991/1115 | Dir dir; Netprot *p; | |
| 1992/0623 | p = findprot(np, STREAMID(c->qid.path)); if(p == 0) error(Enonexist); | |
| 1991/1115 | lock(np); if(strncmp(p->owner, u->p->user, NAMELEN)){ unlock(np); | |
| 1992/0619/sys/src/9/port/net.c:169,174 – 1992/0623/sys/src/9/port/net.c:183,189 | ||
| 1991/1107 | netopen(Chan *c, int omode, Network *np) { | |
| 1991/1122 | int id = 0; | |
| 1992/0623 | Netprot *p; | |
| 1991/1107 | if(c->qid.path & CHDIR){ if(omode != OREAD) | |
| 1992/0619/sys/src/9/port/net.c:199,205 – 1992/0623/sys/src/9/port/net.c:214,222 | ||
| 1991/1107 | streamopen(c, np->devp); if(np->protop && c->stream->devq->next->info != np->protop) pushq(c->stream, np->protop); | |
| 1991/1116 |
| |
| 1992/0623 | p = findprot(np, id); if(p == 0) print("netopen: can't find %d\n", id); if(netown(p, u->p->user, omode&7) < 0) | |
| 1991/1116 | error(Eperm); | |
| 1991/1107 | break; } | |
| 1992/0619/sys/src/9/port/net.c:227,245 – 1992/0623/sys/src/9/port/net.c:244,279 | ||
| 1991/1107 | error(Ebadusefd); | |
| 1991/1108 | (*np->info[t-Qinf].fill)(c, buf, sizeof(buf)); | |
| 1991/1115 |
| |
| 1992/0623 | return readstr(offset, a, n, buf); | |
| 1991/1115 | } | |
| 1992/0623 | void netadd(Network *np, Netprot *p, int id) { Netprot **l, *pp; memset(p, 0, sizeof(Netprot)); p->id = id; l = &np->prot; for(pp = np->prot; pp; pp = pp->next){ if(pp->id == id) panic("netadd"); l = &pp->next; } *l = p; } Lock netlock; | |
| 1991/1115 | int | |
| 1992/0623 | netown(Netprot *p, char *o, int omode) | |
| 1991/1115 | { static int access[] = { 0400, 0200, 0600, 0100 }; | |
| 1992/0623 | lock(&netlock); | |
| 1991/1115 | if(*p->owner){ if(strncmp(o, p->owner, NAMELEN) == 0) /* User */ mode = p->mode; | |
| 1992/0619/sys/src/9/port/net.c:250,271 – 1992/0623/sys/src/9/port/net.c:284,304 | ||
| 1991/1115 | t = access[omode&3]; if((t & mode) == t){ | |
| 1992/0623 | unlock(&netlock); | |
| 1991/1115 | return 0; } else { | |
| 1992/0623 | unlock(&netlock); | |
| 1991/1115 | return -1; } } strncpy(p->owner, o, NAMELEN); | |
| 1992/0623 | p->mode = 0660; unlock(&netlock); | |
| 1991/1115 | return 0; } void | |
| 1992/0623 | netdisown(Netprot *p) | |
| 1991/1115 | { | |
| 1992/0416 |
| |
| 1991/1115 |
| |
| 1992/0623 | p->owner[0] = 0; | |
| 1991/1107 | } | |