13e12c5d1SDavid du Colombier typedef struct Fcall Fcall; 23e12c5d1SDavid du Colombier 3*219b2ee8SDavid du Colombier /* see /sys/include/auth.h */ 4*219b2ee8SDavid du Colombier enum 5*219b2ee8SDavid du Colombier { 6*219b2ee8SDavid du Colombier DOMLEN= 48, /* length of an authentication domain name */ 7*219b2ee8SDavid du Colombier DESKEYLEN= 7, /* length of a des key for encrypt/decrypt */ 8*219b2ee8SDavid du Colombier CHALLEN= 8, /* length of a challenge */ 9*219b2ee8SDavid du Colombier NETCHLEN= 16, /* max network challenge length */ 10*219b2ee8SDavid du Colombier CONFIGLEN= 14, 11*219b2ee8SDavid du Colombier 12*219b2ee8SDavid du Colombier KEYDBLEN= NAMELEN+DESKEYLEN+4+2 13*219b2ee8SDavid du Colombier }; 14*219b2ee8SDavid du Colombier #define TICKETLEN (CHALLEN+2*NAMELEN+DESKEYLEN+1) 15*219b2ee8SDavid du Colombier #define AUTHENTLEN (CHALLEN+4+1) 16*219b2ee8SDavid du Colombier 173e12c5d1SDavid du Colombier struct Fcall 183e12c5d1SDavid du Colombier { 193e12c5d1SDavid du Colombier char type; 203e12c5d1SDavid du Colombier short fid; 213e12c5d1SDavid du Colombier unsigned short tag; 223e12c5d1SDavid du Colombier union 233e12c5d1SDavid du Colombier { 243e12c5d1SDavid du Colombier struct 253e12c5d1SDavid du Colombier { 263e12c5d1SDavid du Colombier unsigned short oldtag; /* T-Flush */ 273e12c5d1SDavid du Colombier Qid qid; /* R-Attach, R-Walk, R-Open, R-Create */ 28*219b2ee8SDavid du Colombier char rauth[AUTHENTLEN]; /* Rattach */ 293e12c5d1SDavid du Colombier }; 303e12c5d1SDavid du Colombier struct 313e12c5d1SDavid du Colombier { 32*219b2ee8SDavid du Colombier char uname[NAMELEN]; /* T-Attach */ 333e12c5d1SDavid du Colombier char aname[NAMELEN]; /* T-Attach */ 34*219b2ee8SDavid du Colombier char ticket[TICKETLEN]; /* T-Attach */ 35*219b2ee8SDavid du Colombier char auth[AUTHENTLEN];/* T-Attach */ 363e12c5d1SDavid du Colombier }; 373e12c5d1SDavid du Colombier struct 383e12c5d1SDavid du Colombier { 393e12c5d1SDavid du Colombier char ename[ERRLEN]; /* R-Error */ 40*219b2ee8SDavid du Colombier char authid[NAMELEN]; /* R-session */ 41*219b2ee8SDavid du Colombier char authdom[DOMLEN]; /* R-session */ 42*219b2ee8SDavid du Colombier char chal[CHALLEN]; /* T-session/R-session */ 433e12c5d1SDavid du Colombier }; 443e12c5d1SDavid du Colombier struct 453e12c5d1SDavid du Colombier { 463e12c5d1SDavid du Colombier long perm; /* T-Create */ 473e12c5d1SDavid du Colombier short newfid; /* T-Clone, T-Clwalk */ 483e12c5d1SDavid du Colombier char name[NAMELEN]; /* T-Walk, T-Clwalk, T-Create */ 493e12c5d1SDavid du Colombier char mode; /* T-Create, T-Open */ 503e12c5d1SDavid du Colombier }; 513e12c5d1SDavid du Colombier struct 523e12c5d1SDavid du Colombier { 533e12c5d1SDavid du Colombier long offset; /* T-Read, T-Write */ 543e12c5d1SDavid du Colombier long count; /* T-Read, T-Write, R-Read */ 553e12c5d1SDavid du Colombier char *data; /* T-Write, R-Read */ 563e12c5d1SDavid du Colombier }; 573e12c5d1SDavid du Colombier struct 583e12c5d1SDavid du Colombier { 593e12c5d1SDavid du Colombier char stat[DIRLEN]; /* T-Wstat, R-Stat */ 603e12c5d1SDavid du Colombier }; 613e12c5d1SDavid du Colombier }; 623e12c5d1SDavid du Colombier }; 633e12c5d1SDavid du Colombier 643e12c5d1SDavid du Colombier #define MAXFDATA 8192 65*219b2ee8SDavid du Colombier #define MAXMSG 160 /* max header sans data */ 663e12c5d1SDavid du Colombier #define NOTAG 0xFFFF /* Dummy tag */ 673e12c5d1SDavid du Colombier 683e12c5d1SDavid du Colombier enum 693e12c5d1SDavid du Colombier { 703e12c5d1SDavid du Colombier Tmux = 48, 713e12c5d1SDavid du Colombier Rmux, /* illegal */ 723e12c5d1SDavid du Colombier Tnop = 50, 733e12c5d1SDavid du Colombier Rnop, 74*219b2ee8SDavid du Colombier Tosession = 52, /* illegal */ 75*219b2ee8SDavid du Colombier Rosession, /* illegal */ 763e12c5d1SDavid du Colombier Terror = 54, /* illegal */ 773e12c5d1SDavid du Colombier Rerror, 783e12c5d1SDavid du Colombier Tflush = 56, 793e12c5d1SDavid du Colombier Rflush, 80*219b2ee8SDavid du Colombier Toattach = 58, /* illegal */ 81*219b2ee8SDavid du Colombier Roattach, /* illegal */ 823e12c5d1SDavid du Colombier Tclone = 60, 833e12c5d1SDavid du Colombier Rclone, 843e12c5d1SDavid du Colombier Twalk = 62, 853e12c5d1SDavid du Colombier Rwalk, 863e12c5d1SDavid du Colombier Topen = 64, 873e12c5d1SDavid du Colombier Ropen, 883e12c5d1SDavid du Colombier Tcreate = 66, 893e12c5d1SDavid du Colombier Rcreate, 903e12c5d1SDavid du Colombier Tread = 68, 913e12c5d1SDavid du Colombier Rread, 923e12c5d1SDavid du Colombier Twrite = 70, 933e12c5d1SDavid du Colombier Rwrite, 943e12c5d1SDavid du Colombier Tclunk = 72, 953e12c5d1SDavid du Colombier Rclunk, 963e12c5d1SDavid du Colombier Tremove = 74, 973e12c5d1SDavid du Colombier Rremove, 983e12c5d1SDavid du Colombier Tstat = 76, 993e12c5d1SDavid du Colombier Rstat, 1003e12c5d1SDavid du Colombier Twstat = 78, 1013e12c5d1SDavid du Colombier Rwstat, 1023e12c5d1SDavid du Colombier Tclwalk = 80, 1033e12c5d1SDavid du Colombier Rclwalk, 104*219b2ee8SDavid du Colombier Tauth = 82, /* illegal */ 105*219b2ee8SDavid du Colombier Rauth, /* illegal */ 106*219b2ee8SDavid du Colombier Tsession = 84, 107*219b2ee8SDavid du Colombier Rsession, 108*219b2ee8SDavid du Colombier Tattach = 86, 109*219b2ee8SDavid du Colombier Rattach, 1103e12c5d1SDavid du Colombier }; 1113e12c5d1SDavid du Colombier 1123e12c5d1SDavid du Colombier int convM2S(char*, Fcall*, int); 1133e12c5d1SDavid du Colombier int convS2M(Fcall*, char*); 1143e12c5d1SDavid du Colombier 1153e12c5d1SDavid du Colombier int convM2D(char*, Dir*); 1163e12c5d1SDavid du Colombier int convD2M(Dir*, char*); 1173e12c5d1SDavid du Colombier 1183e12c5d1SDavid du Colombier char* getS(int, char*, Fcall*, long*); 119