1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
typedef struct Fcall Fcall;
/* see /sys/include/auth.h */
enum
{
DOMLEN= 48, /* length of an authentication domain name */
DESKEYLEN= 7, /* length of a des key for encrypt/decrypt */
CHALLEN= 8, /* length of a challenge */
NETCHLEN= 16, /* max network challenge length */
CONFIGLEN= 14,
KEYDBLEN= NAMELEN+DESKEYLEN+4+2
};
#define TICKETLEN (CHALLEN+2*NAMELEN+DESKEYLEN+1)
#define AUTHENTLEN (CHALLEN+4+1)
struct Fcall
{
char type;
short fid;
unsigned short tag;
union
{
struct
{
unsigned short oldtag; /* T-Flush */
Qid qid; /* R-Attach, R-Walk, R-Open, R-Create */
char rauth[AUTHENTLEN]; /* Rattach */
};
struct
{
char uname[NAMELEN]; /* T-Attach */
char aname[NAMELEN]; /* T-Attach */
char ticket[TICKETLEN]; /* T-Attach */
char auth[AUTHENTLEN];/* T-Attach */
};
struct
{
char ename[ERRLEN]; /* R-Error */
char authid[NAMELEN]; /* R-session */
char authdom[DOMLEN]; /* R-session */
char chal[CHALLEN]; /* T-session/R-session */
};
struct
{
long perm; /* T-Create */
short newfid; /* T-Clone, T-Clwalk */
char name[NAMELEN]; /* T-Walk, T-Clwalk, T-Create */
char mode; /* T-Create, T-Open */
};
struct
{
long offset; /* T-Read, T-Write */
long count; /* T-Read, T-Write, R-Read */
char *data; /* T-Write, R-Read */
};
struct
{
char stat[DIRLEN]; /* T-Wstat, R-Stat */
};
};
};
#define MAXFDATA 8192
#define MAXMSG 160 /* max header sans data */
#define NOTAG 0xFFFF /* Dummy tag */
enum
{
Tmux = 48,
Rmux, /* illegal */
Tnop = 50,
Rnop,
Tosession = 52, /* illegal */
Rosession, /* illegal */
Terror = 54, /* illegal */
Rerror,
Tflush = 56,
Rflush,
Toattach = 58, /* illegal */
Roattach, /* illegal */
Tclone = 60,
Rclone,
Twalk = 62,
Rwalk,
Topen = 64,
Ropen,
Tcreate = 66,
Rcreate,
Tread = 68,
Rread,
Twrite = 70,
Rwrite,
Tclunk = 72,
Rclunk,
Tremove = 74,
Rremove,
Tstat = 76,
Rstat,
Twstat = 78,
Rwstat,
Tclwalk = 80,
Rclwalk,
Tauth = 82, /* illegal */
Rauth, /* illegal */
Tsession = 84,
Rsession,
Tattach = 86,
Rattach,
};
int convM2S(char*, Fcall*, int);
int convS2M(Fcall*, char*);
int convM2D(char*, Dir*);
int convD2M(Dir*, char*);
char* getS(int, char*, Fcall*, long*);
|