1*01a344a2SDavid du Colombier #include <authsrv.h> 2*01a344a2SDavid du Colombier 3*01a344a2SDavid du Colombier enum { 4*01a344a2SDavid du Colombier DIRREC = 116, /* size of a directory ascii record */ 5*01a344a2SDavid du Colombier ERRREC = 64, /* size of a error record */ 6*01a344a2SDavid du Colombier }; 7*01a344a2SDavid du Colombier 8*01a344a2SDavid du Colombier typedef struct Fcall Fcall; 9*01a344a2SDavid du Colombier 10*01a344a2SDavid du Colombier struct Fcall 11*01a344a2SDavid du Colombier { 12*01a344a2SDavid du Colombier char type; 13*01a344a2SDavid du Colombier ushort fid; 14*01a344a2SDavid du Colombier short err; 15*01a344a2SDavid du Colombier short tag; 16*01a344a2SDavid du Colombier union 17*01a344a2SDavid du Colombier { 18*01a344a2SDavid du Colombier struct 19*01a344a2SDavid du Colombier { 20*01a344a2SDavid du Colombier short uid; /* T-Userstr [obs.] */ 21*01a344a2SDavid du Colombier short oldtag; /* T-nFlush */ 22*01a344a2SDavid du Colombier Qid9p1 qid; /* R-Attach, R-Clwalk, R-Walk, 23*01a344a2SDavid du Colombier * R-Open, R-Create */ 24*01a344a2SDavid du Colombier char rauth[AUTHENTLEN]; /* R-attach */ 25*01a344a2SDavid du Colombier }; 26*01a344a2SDavid du Colombier struct 27*01a344a2SDavid du Colombier { 28*01a344a2SDavid du Colombier char uname[NAMELEN]; /* T-nAttach */ 29*01a344a2SDavid du Colombier char aname[NAMELEN]; /* T-nAttach */ 30*01a344a2SDavid du Colombier char ticket[TICKETLEN]; /* T-attach */ 31*01a344a2SDavid du Colombier char auth[AUTHENTLEN]; /* T-attach */ 32*01a344a2SDavid du Colombier }; 33*01a344a2SDavid du Colombier struct 34*01a344a2SDavid du Colombier { 35*01a344a2SDavid du Colombier char ename[ERRREC]; /* R-nError */ 36*01a344a2SDavid du Colombier char chal[CHALLEN]; /* T-session, R-session */ 37*01a344a2SDavid du Colombier char authid[NAMELEN]; /* R-session */ 38*01a344a2SDavid du Colombier char authdom[DOMLEN]; /* R-session */ 39*01a344a2SDavid du Colombier }; 40*01a344a2SDavid du Colombier struct 41*01a344a2SDavid du Colombier { 42*01a344a2SDavid du Colombier char name[NAMELEN]; /* T-Walk, T-Clwalk, T-Create, T-Remove */ 43*01a344a2SDavid du Colombier long perm; /* T-Create */ 44*01a344a2SDavid du Colombier ushort newfid; /* T-Clone, T-Clwalk */ 45*01a344a2SDavid du Colombier char mode; /* T-Create, T-Open */ 46*01a344a2SDavid du Colombier }; 47*01a344a2SDavid du Colombier struct 48*01a344a2SDavid du Colombier { 49*01a344a2SDavid du Colombier Off offset; /* T-Read, T-Write */ 50*01a344a2SDavid du Colombier long count; /* T-Read, T-Write, R-Read */ 51*01a344a2SDavid du Colombier char* data; /* T-Write, R-Read */ 52*01a344a2SDavid du Colombier }; 53*01a344a2SDavid du Colombier struct 54*01a344a2SDavid du Colombier { 55*01a344a2SDavid du Colombier char stat[DIRREC]; /* T-Wstat, R-Stat */ 56*01a344a2SDavid du Colombier }; 57*01a344a2SDavid du Colombier }; 58*01a344a2SDavid du Colombier }; 59*01a344a2SDavid du Colombier 60*01a344a2SDavid du Colombier /* 61*01a344a2SDavid du Colombier * P9 protocol message types 62*01a344a2SDavid du Colombier */ 63*01a344a2SDavid du Colombier enum 64*01a344a2SDavid du Colombier { 65*01a344a2SDavid du Colombier Tnop = 50, 66*01a344a2SDavid du Colombier Rnop, 67*01a344a2SDavid du Colombier Tosession = 52, 68*01a344a2SDavid du Colombier Rosession, 69*01a344a2SDavid du Colombier Terror = 54, /* illegal */ 70*01a344a2SDavid du Colombier Rerror, 71*01a344a2SDavid du Colombier Tflush = 56, 72*01a344a2SDavid du Colombier Rflush, 73*01a344a2SDavid du Colombier Toattach = 58, 74*01a344a2SDavid du Colombier Roattach, 75*01a344a2SDavid du Colombier Tclone = 60, 76*01a344a2SDavid du Colombier Rclone, 77*01a344a2SDavid du Colombier Twalk = 62, 78*01a344a2SDavid du Colombier Rwalk, 79*01a344a2SDavid du Colombier Topen = 64, 80*01a344a2SDavid du Colombier Ropen, 81*01a344a2SDavid du Colombier Tcreate = 66, 82*01a344a2SDavid du Colombier Rcreate, 83*01a344a2SDavid du Colombier Tread = 68, 84*01a344a2SDavid du Colombier Rread, 85*01a344a2SDavid du Colombier Twrite = 70, 86*01a344a2SDavid du Colombier Rwrite, 87*01a344a2SDavid du Colombier Tclunk = 72, 88*01a344a2SDavid du Colombier Rclunk, 89*01a344a2SDavid du Colombier Tremove = 74, 90*01a344a2SDavid du Colombier Rremove, 91*01a344a2SDavid du Colombier Tstat = 76, 92*01a344a2SDavid du Colombier Rstat, 93*01a344a2SDavid du Colombier Twstat = 78, 94*01a344a2SDavid du Colombier Rwstat, 95*01a344a2SDavid du Colombier Tclwalk = 80, 96*01a344a2SDavid du Colombier Rclwalk, 97*01a344a2SDavid du Colombier Tauth = 82, /* illegal */ 98*01a344a2SDavid du Colombier Rauth, /* illegal */ 99*01a344a2SDavid du Colombier Tsession = 84, 100*01a344a2SDavid du Colombier Rsession, 101*01a344a2SDavid du Colombier Tattach = 86, 102*01a344a2SDavid du Colombier Rattach, 103*01a344a2SDavid du Colombier 104*01a344a2SDavid du Colombier MAXSYSCALL 105*01a344a2SDavid du Colombier }; 106*01a344a2SDavid du Colombier 107*01a344a2SDavid du Colombier int convA2M9p1(Authenticator*, char*, char*); 108*01a344a2SDavid du Colombier void convM2A9p1(char*, Authenticator*, char*); 109*01a344a2SDavid du Colombier void convM2T9p1(char*, Ticket*, char*); 110*01a344a2SDavid du Colombier int convD2M9p1(Dentry*, char*); 111*01a344a2SDavid du Colombier int convM2D9p1(char*, Dentry*); 112*01a344a2SDavid du Colombier int convM2S9p1(uchar*, Fcall*, int); 113*01a344a2SDavid du Colombier int convS2M9p1(Fcall*, uchar*); 114*01a344a2SDavid du Colombier void fcall9p1(Chan*, Fcall*, Fcall*); 115*01a344a2SDavid du Colombier 116*01a344a2SDavid du Colombier void (*call9p1[MAXSYSCALL])(Chan*, Fcall*, Fcall*); 117