9 #define CHAR(x) *p++ = f->x
10 #define SHORT(x) { ulong vvv = f->x; *p++ = vvv; *p++ = vvv>>8; }
11 #define LONGINT(q) {*p++ = (q); *p++ = (q)>>8; *p++ = (q)>>16; *p++ = (q)>>24;}
12 #define LONG(x) { ulong vvv = f->x; LONGINT(vvv); }
15 *p++ = (q)>> 0; *p++ = (q)>> 8; *p++ = (q)>>16; *p++ = (q)>>24; \
16 *p++ = (q)>>32; *p++ = (q)>>40; *p++ = (q)>>48; *p++ = (q)>>56; \
19 #define BYTES(x,n) memmove(p, f->x, n); p += n
20 #define STRING(x,n) strncpy((char*)p, f->x, n); p += n
23 convS2M9p1(Fcall *f, uchar *ap)
34 print("convS2M9p1: bad type: %d\n", t);
42 BYTES(chal, sizeof(f->chal));
51 STRING(uname, sizeof(f->uname));
52 STRING(aname, sizeof(f->aname));
53 BYTES(ticket, sizeof(f->ticket));
54 BYTES(auth, sizeof(f->auth));
59 STRING(uname, sizeof(f->uname));
60 STRING(aname, sizeof(f->aname));
61 BYTES(ticket, NAMELEN);
71 STRING(name, sizeof(f->name));
77 STRING(name, sizeof(f->name));
87 STRING(name, sizeof(f->name));
103 if((uchar*)p == (uchar*)f->data) {
107 BYTES(data, f->count);
118 BYTES(stat, sizeof(f->stat));
128 BYTES(chal, sizeof(f->chal));
129 BYTES(authid, sizeof(f->authid));
130 BYTES(authdom, sizeof(f->authdom));
134 STRING(ename, sizeof(f->ename));
157 BYTES(rauth, sizeof(f->rauth));
170 if((uchar*)p == (uchar*)f->data) {
174 BYTES(data, f->count);
184 BYTES(stat, sizeof(f->stat));
187 return p - (uchar*)ap;
191 * buggery to give false qid for
192 * the top 2 levels of the dump fs
195 fakeqid9p1(Dentry *f)
201 if(q == (QPROOT|QPDIR)) {
203 if(isascii(c) && isdigit(c)) {
205 c = (c-'0')*10 + (f->name[1]-'0');
206 if(c >= 1 && c <= 12)
214 convD2M9p1(Dentry *f, char *ap)
220 STRING(name, sizeof(f->name));
222 memset(p, 0, 2*NAMELEN);
223 uidtostr((char*)p, f->uid, 1);
226 uidtostr((char*)p, f->gid, 1);
233 q = f->mode & 0x0fff;
246 return p - (uchar*)ap;
250 convA2M9p1(Authenticator *f, char *ap, char *key)
257 BYTES(chal, CHALLEN);
273 #define CHAR(x) f->x = *p++
274 #define SHORT(x) f->x = (p[0] | (p[1]<<8)); p += 2
275 #define LONG(x) f->x = p[0] | (p[1]<<8) | (p[2]<<16) | (p[3]<<24); p += 4
277 f->x = (p[0] | (p[1]<<8) | (p[2]<<16) | (p[3]<<24)) | \
278 (uvlong)(p[4] | (p[5]<<8) | (p[6]<<16) | (p[7]<<24)) << 32; \
282 #define BYTES(x,n) memmove(f->x, p, n); p += n
283 #define STRING(x,n) memmove(f->x, p, n); p += n
286 convM2S9p1(uchar *ap, Fcall *f, int n)
298 * only whine if it couldn't be a 9P2000 Tversion.
300 if(t != 19 || ap[4] != 100)
301 print("convM2S9p1: bad type: %d\n", f->type);
309 BYTES(chal, sizeof(f->chal));
318 BYTES(uname, sizeof(f->uname));
319 BYTES(aname, sizeof(f->aname));
320 BYTES(ticket, sizeof(f->ticket));
321 BYTES(auth, sizeof(f->auth));
326 BYTES(uname, sizeof(f->uname));
327 BYTES(aname, sizeof(f->aname));
328 BYTES(ticket, NAMELEN);
338 BYTES(name, sizeof(f->name));
344 BYTES(name, sizeof(f->name));
358 BYTES(name, sizeof(f->name));
374 f->data = (char*)p; p += f->count;
384 BYTES(stat, sizeof(f->stat));
394 BYTES(chal, sizeof(f->chal));
395 BYTES(authid, sizeof(f->authid));
396 BYTES(authdom, sizeof(f->authdom));
400 BYTES(ename, sizeof(f->ename));
426 BYTES(rauth, sizeof(f->rauth));
439 f->data = (char*)p; p += f->count;
449 BYTES(stat, sizeof(f->stat));
452 if((uchar*)ap+n == p)
458 convM2D9p1(char *ap, Dentry *f)
464 BYTES(name, sizeof(f->name));
466 memmove(str, p, NAMELEN);
468 f->uid = strtouid(str);
470 memmove(str, p, NAMELEN);
472 f->gid = strtouid(str);
478 f->mode = (f->atime & 0x0fff) | DALLOC;
490 return p - (uchar*)ap;
494 convM2A9p1(char *ap, Authenticator *f, char *key)
499 decrypt(key, ap, AUTHENTLEN);
502 BYTES(chal, CHALLEN);
508 convM2T9p1(char *ap, Ticket *f, char *key)
513 decrypt(key, ap, TICKETLEN);
516 BYTES(chal, CHALLEN);
517 STRING(cuid, NAMELEN);
518 f->cuid[NAMELEN-1] = 0;
519 STRING(suid, NAMELEN);
520 f->suid[NAMELEN-1] = 0;
521 BYTES(key, DESKEYLEN);