| plan 9 kernel history: overview | file list | diff list |
2001/0527/port/devssl.c (diff list | history)
| 2001/0515/sys/src/9/port/devssl.c:66,72 – 2001/0527/sys/src/9/port/devssl.c:66,72 (short | long | prev | next) | ||
| 1995/1213 | OneWay out; | |
| 1996/1029 | /* protections */ | |
| 2001/0527 | char *user; | |
| 1996/1029 | int perm; | |
| 1995/1213 | }; | |
| 2001/0515/sys/src/9/port/devssl.c:73,79 – 2001/0527/sys/src/9/port/devssl.c:73,80 | ||
| 1996/1029 | Lock dslock; int dshiwat; | |
| 2000/0913 | int maxdstate = 128; | |
| 1996/1029 |
| |
| 2001/0527 | char **dsname; Dstate **dstate; | |
| 1998/0417 | char *encalgs; char *hashalgs; | |
| 1996/1029 | ||
| 2001/0515/sys/src/9/port/devssl.c:123,164 – 2001/0527/sys/src/9/port/devssl.c:124,177 | ||
| 2000/0325 | }; | |
| 1997/0327 | static int | |
| 1996/1029 |
| |
| 2001/0527 | sslgen(Chan *c, char*, Dirtab *d, int nd, int s, Dir *dp) | |
| 1996/1029 | { Qid q; Dstate *ds; char name[16], *p, *nm; | |
| 2001/0527 | int ft; | |
| 1996/1029 | USED(nd); USED(d); | |
| 2001/0527 | q.type = QTFILE; | |
| 1996/1029 | q.vers = 0; | |
| 2001/0527 | ft = TYPE(c->qid); switch(ft) { | |
| 1996/1029 | case Qtopdir: | |
| 1999/1230 | if(s == DEVDOTDOT){ | |
| 2000/0325 |
| |
| 2001/0527 | q.path = QID(0, Qtopdir); q.type = QTDIR; devdir(c, q, "#D", 0, eve, 0555, dp); | |
| 1999/1230 | return 1; } | |
| 1998/0417 | if(s > 0) return -1; | |
| 2000/0325 |
| |
| 2001/0527 | q.path = QID(0, Qprotodir); q.type = QTDIR; devdir(c, q, "ssl", 0, eve, 0555, dp); | |
| 1998/0417 | return 1; case Qprotodir: | |
| 1999/1230 | if(s == DEVDOTDOT){ | |
| 2000/0325 |
| |
| 2001/0527 | q.path = QID(0, Qtopdir); q.type = QTDIR; devdir(c, q, ".", 0, eve, 0555, dp); | |
| 1999/1230 | return 1; } | |
| 1996/1029 | if(s < dshiwat) { | |
| 2001/0527 | q.path = QID(s, Qconvdir); q.type = QTDIR; | |
| 1996/1029 | ds = dstate[s]; if(ds != 0) nm = ds->user; else nm = eve; | |
| 2000/0325 |
| |
| 2001/0527 | if(dsname[s] == nil){ sprint(name, "%d", s); kstrdup(&dsname[s], name); } devdir(c, q, dsname[s], 0, nm, 0555, dp); | |
| 1996/1029 | return 1; } if(s > dshiwat) | |
| 2001/0515/sys/src/9/port/devssl.c:168,175 – 2001/0527/sys/src/9/port/devssl.c:181,189 | ||
| 1996/1029 | return 1; case Qconvdir: | |
| 1999/1230 | if(s == DEVDOTDOT){ | |
| 2000/0325 |
| |
| 2001/0527 | q.path = QID(0, Qprotodir); q.type = QTDIR; devdir(c, q, "ssl", 0, eve, 0555, dp); | |
| 1999/1230 | return 1; } | |
| 1996/1029 | ds = dstate[CONV(c->qid)]; | |
| 2001/0515/sys/src/9/port/devssl.c:212,222 – 2001/0527/sys/src/9/port/devssl.c:226,232 | ||
| 2000/0325 | return 1; default: ds = dstate[CONV(c->qid)]; | |
| 2001/0515 |
| |
| 2001/0527 | devdir(c, c->qid, sslnames[TYPE(c->qid)], 0, ds->user, 0660, dp); | |
| 1996/1029 | return 1; } return -1; | |
| 2001/0515/sys/src/9/port/devssl.c:228,248 – 2001/0527/sys/src/9/port/devssl.c:238,259 | ||
| 1996/1029 | Chan *c; c = devattach('D', spec); | |
| 2001/0527 | c->qid.path = QID(0, Qtopdir); | |
| 1996/1029 | c->qid.vers = 0; | |
| 2001/0527 | c->qid.type = QTDIR; | |
| 1996/1029 | return c; | |
| 1995/1213 | } | |
| 1997/0327 |
| |
| 1995/1213 |
| |
| 2001/0527 | static Walkqid* sslwalk(Chan *c, Chan *nc, char **name, int nname) | |
| 1995/1213 | { | |
| 1996/1029 |
| |
| 2001/0527 | return devwalk(c, nc, name, nname, nil, 0, sslgen); | |
| 1995/1213 | } | |
| 1997/0327 |
| |
| 1995/1213 |
| |
| 2001/0527 | static int sslstat(Chan *c, uchar *db, int n) | |
| 1995/1213 | { | |
| 1996/1029 |
| |
| 2001/0527 | return devstat(c, db, n, nil, 0, sslgen); | |
| 1995/1213 | } | |
| 1997/0327 | static Chan* | |
| 2001/0515/sys/src/9/port/devssl.c:250,255 – 2001/0527/sys/src/9/port/devssl.c:261,267 | ||
| 1995/1213 | { | |
| 1996/1029 | Dstate *s, **pp; int perm; | |
| 2001/0527 | int ft; | |
| 1995/1213 | ||
| 1996/1029 | perm = 0; omode &= 3; | |
| 2001/0515/sys/src/9/port/devssl.c:265,271 – 2001/0527/sys/src/9/port/devssl.c:277,284 | ||
| 1996/1029 | break; | |
| 1995/1213 | } | |
| 1996/1029 |
| |
| 2001/0527 | ft = TYPE(c->qid); switch(ft) { | |
| 1996/1029 | default: panic("sslopen"); case Qtopdir: | |
| 2001/0515/sys/src/9/port/devssl.c:315,328 – 2001/0527/sys/src/9/port/devssl.c:328,340 | ||
| 1996/1029 | return c; | |
| 1995/1213 | } | |
| 1997/0327 |
| |
| 1995/1213 |
| |
| 2001/0527 | static int sslwstat(Chan *c, uchar *db, int n) | |
| 1995/1213 | { | |
| 1996/1029 |
| |
| 2001/0527 | Dir *dir; | |
| 1996/1029 | Dstate *s; | |
| 2001/0527 | int m; | |
| 1996/1029 |
| |
| 2001/0515/sys/src/9/port/devssl.c:329,336 – 2001/0527/sys/src/9/port/devssl.c:341,354 | ||
| 1996/1029 | if(strcmp(s->user, up->user) != 0) error(Eperm); | |
| 2001/0527 | dir = smalloc(sizeof(Dir)+n); m = convM2D(db, n, &dir[0], (char*)&dir[1]); if(m > 0){ kstrdup(&s->user, dir->uid); s->perm = dir->mode; } free(dir); return m; | |
| 1995/1213 | } | |
| 1997/0327 | static void | |
| 2001/0515/sys/src/9/port/devssl.c:337,344 – 2001/0527/sys/src/9/port/devssl.c:355,364 | ||
| 1995/1213 | sslclose(Chan *c) { Dstate *s; | |
| 2001/0527 | int ft; | |
| 1995/1213 | ||
| 1996/1029 |
| |
| 2001/0527 | ft = TYPE(c->qid); switch(ft) { | |
| 1996/1029 | case Qctl: case Qdata: case Qsecretin: | |
| 2001/0515/sys/src/9/port/devssl.c:358,363 – 2001/0527/sys/src/9/port/devssl.c:378,385 | ||
| 1996/1029 | dstate[CONV(c->qid)] = 0; unlock(&dslock); | |
| 2001/0527 | if(s->user != nil) free(s->user); | |
| 1996/1029 | sslhangup(s); | |
| 1995/1213 | if(s->c) | |
| 1997/0327 | cclose(s->c); | |
| 2001/0515/sys/src/9/port/devssl.c:506,516 – 2001/0527/sys/src/9/port/devssl.c:528,538 | ||
| 1996/1029 | } | |
| 2000/0913 | /* | |
| 2001/0504 |
| |
| 2001/0527 | * We can't let Eintr's lose data since the program * doing the read may be able to handle it. The only * places Eintr is possible is during the read's in consume. * Therefore, we make sure we can always put back the bytes * consumed before the last ensure. | |
| 2000/0913 | */ | |
| 1997/0327 | static Block* | |
| 1998/0327 | sslbread(Chan *c, long n, ulong) | |
| 2001/0515/sys/src/9/port/devssl.c:529,538 – 2001/0527/sys/src/9/port/devssl.c:551,558 | ||
| 1995/1217 | ||
| 2000/0913 | nconsumed = 0; | |
| 1995/1217 | if(waserror()){ | |
| 2001/0504 |
| |
| 2001/0527 | if(strcmp(up->error, Eintr) != 0) | |
| 2000/0913 | regurgitate(s.s, consumed, nconsumed); | |
| 2001/0504 |
| |
| 1996/0531 | qunlock(&s.s->in.q); | |
| 1995/1217 | nexterror(); | |
| 1995/1213 | } | |
| 2001/0515/sys/src/9/port/devssl.c:627,641 – 2001/0527/sys/src/9/port/devssl.c:647,664 | ||
| 1996/1029 | int i; char buf[128]; | |
| 1998/0319 | ulong offset = off; | |
| 2001/0527 | int ft; | |
| 1995/1213 | ||
| 1996/1029 |
| |
| 2001/0527 | if(c->qid.type & QTDIR) | |
| 1996/1029 | return devdirread(c, a, n, 0, 0, sslgen); | |
| 2001/0527 | ft = TYPE(c->qid); switch(ft) { | |
| 1996/1029 | default: error(Ebadusefd); case Qctl: | |
| 1998/0825 |
| |
| 2001/0527 | ft = CONV(c->qid); sprint(buf, "%d", ft); | |
| 1996/1029 | return readstr(offset, a, n, buf); case Qdata: b.b = sslbread(c, n, offset); | |
| 2001/0515/sys/src/9/port/devssl.c:642,649 – 2001/0527/sys/src/9/port/devssl.c:665,674 | ||
| 1996/1029 | break; | |
| 1998/0417 | case Qencalgs: return readstr(offset, a, n, encalgs); | |
| 2001/0527 | break; | |
| 1998/0417 | case Qhashalgs: return readstr(offset, a, n, hashalgs); | |
| 2001/0527 | break; | |
| 1995/1213 | } | |
| 1996/0223 | if(waserror()){ | |
| 2001/0515/sys/src/9/port/devssl.c:777,783 – 2001/0527/sys/src/9/port/devssl.c:802,810 | ||
| 1995/1213 | ||
| 1997/0618 | s.s->out.mid++; | |
| 2001/0527 | m = BLEN(nb); | |
| 1997/0327 | devtab[s.s->c->type]->bwrite(s.s->c, nb, s.s->c->offset); | |
| 2001/0527 | s.s->c->offset += m; | |
| 1995/1215 | } | |
| 1996/0531 | qunlock(&s.s->out.q); | |
| 1995/1215 | poperror(); | |
| 2001/0515/sys/src/9/port/devssl.c:1149,1154 – 2001/0527/sys/src/9/port/devssl.c:1176,1184 | ||
| 1998/0417 | if((dstate = smalloc(sizeof(Dstate*) * maxdstate)) == 0) panic("sslinit"); | |
| 2001/0527 | if((dsname = smalloc(sizeof(char*) * maxdstate)) == 0) panic("sslinit"); | |
| 1998/0417 | n = 1; for(e = encrypttab; e->name != nil; e++) n += strlen(e->name) + 1; | |
| 2001/0515/sys/src/9/port/devssl.c:1185,1191 – 2001/0527/sys/src/9/port/devssl.c:1215,1220 | ||
| 1997/0327 | devreset, sslinit, sslattach, | |
| 2001/0515/sys/src/9/port/devssl.c:1394,1399 – 2001/0527/sys/src/9/port/devssl.c:1423,1429 | ||
| 1996/1029 | dsclone(Chan *ch) { Dstate **pp, **ep, **np; | |
| 2001/0527 | char **names; | |
| 1996/1029 | int newmax; if(waserror()) { | |
| 2001/0515/sys/src/9/port/devssl.c:1417,1422 – 2001/0527/sys/src/9/port/devssl.c:1447,1453 | ||
| 1996/1029 | newmax = 2 * maxdstate; if(newmax > Maxdstate) newmax = Maxdstate; | |
| 2001/0527 | ||
| 1996/1029 | np = smalloc(sizeof(Dstate*) * newmax); if(np == 0) error(Enomem); | |
| 2001/0515/sys/src/9/port/devssl.c:1423,1429 – 2001/0527/sys/src/9/port/devssl.c:1454,1466 | ||
| 1996/1029 | memmove(np, dstate, sizeof(Dstate*) * maxdstate); dstate = np; pp = &dstate[maxdstate]; | |
| 2001/0527 | names = smalloc(sizeof(char*) * newmax); if(names == 0) error(Enomem); memmove(names, dsname, sizeof(char*) * maxdstate); dsname = names; | |
| 1996/1029 | maxdstate = newmax; dsnew(ch, pp); } | |
| 2001/0515/sys/src/9/port/devssl.c:1446,1452 – 2001/0527/sys/src/9/port/devssl.c:1483,1489 | ||
| 1996/1029 | memset(s, 0, sizeof(*s)); s->state = Sincomplete; s->ref = 1; | |
| 2001/0527 | kstrdup(&s->user, up->user); | |
| 1996/1029 | s->perm = 0660; t = TYPE(ch->qid); if(t == Qclonus) | |