rpc fixes (vandebo)
This commit is contained in:
parent
e77222a4ec
commit
886a6f6c53
3 changed files with 20 additions and 7 deletions
|
|
@ -2938,6 +2938,11 @@ nfs3entrysize(Nfs3Entry *x)
|
||||||
a = 0 + 4 + 8 + sunstringsize(x->name) + 8;
|
a = 0 + 4 + 8 + sunstringsize(x->name) + 8;
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
static int
|
||||||
|
sunstringvpack(uchar *a, uchar *ea, uchar **pa, char **s, u32int n)
|
||||||
|
{
|
||||||
|
return sunvaropaquepack(a, ea, pa, (uchar**)&s, &n, -1);
|
||||||
|
}
|
||||||
int
|
int
|
||||||
nfs3entrypack(uchar *a, uchar *ea, uchar **pa, Nfs3Entry *x)
|
nfs3entrypack(uchar *a, uchar *ea, uchar **pa, Nfs3Entry *x)
|
||||||
{
|
{
|
||||||
|
|
@ -2946,7 +2951,7 @@ nfs3entrypack(uchar *a, uchar *ea, uchar **pa, Nfs3Entry *x)
|
||||||
one = 1;
|
one = 1;
|
||||||
if(sunuint1pack(a, ea, &a, &one) < 0) goto Err;
|
if(sunuint1pack(a, ea, &a, &one) < 0) goto Err;
|
||||||
if(sunuint64pack(a, ea, &a, &x->fileid) < 0) goto Err;
|
if(sunuint64pack(a, ea, &a, &x->fileid) < 0) goto Err;
|
||||||
if(sunstringpack(a, ea, &a, &x->name, -1) < 0) goto Err;
|
if(sunstringvpack(a, ea, &a, &x->name, x->namelen) < 0) goto Err;
|
||||||
if(sunuint64pack(a, ea, &a, &x->cookie) < 0) goto Err;
|
if(sunuint64pack(a, ea, &a, &x->cookie) < 0) goto Err;
|
||||||
*pa = a;
|
*pa = a;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -2963,6 +2968,7 @@ nfs3entryunpack(uchar *a, uchar *ea, uchar **pa, Nfs3Entry *x)
|
||||||
if(sunuint1unpack(a, ea, &a, &one) < 0 || one != 1) goto Err;
|
if(sunuint1unpack(a, ea, &a, &one) < 0 || one != 1) goto Err;
|
||||||
if(sunuint64unpack(a, ea, &a, &x->fileid) < 0) goto Err;
|
if(sunuint64unpack(a, ea, &a, &x->fileid) < 0) goto Err;
|
||||||
if(sunstringunpack(a, ea, &a, &x->name, -1) < 0) goto Err;
|
if(sunstringunpack(a, ea, &a, &x->name, -1) < 0) goto Err;
|
||||||
|
x->namelen = strlen(x->name);
|
||||||
if(sunuint64unpack(a, ea, &a, &x->cookie) < 0) goto Err;
|
if(sunuint64unpack(a, ea, &a, &x->cookie) < 0) goto Err;
|
||||||
*pa = a;
|
*pa = a;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,7 @@ sunrpcsize(SunRpc *rpc)
|
||||||
case SunRpcMismatch:
|
case SunRpcMismatch:
|
||||||
case SunProgMismatch:
|
case SunProgMismatch:
|
||||||
a += 3*4;
|
a += 3*4;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
a += 4;
|
a += 4;
|
||||||
}
|
}
|
||||||
|
|
@ -439,7 +440,7 @@ sunstringunpack(uchar *a, uchar *ea, uchar **pa, char **s, u32int max)
|
||||||
goto Err;
|
goto Err;
|
||||||
/* slide string down over length to make room for NUL */
|
/* slide string down over length to make room for NUL */
|
||||||
memmove(dat-1, dat, n);
|
memmove(dat-1, dat, n);
|
||||||
dat[-1+n] = 0;
|
dat[n-1] = 0;
|
||||||
*s = (char*)(dat-1);
|
*s = (char*)(dat-1);
|
||||||
return 0;
|
return 0;
|
||||||
Err:
|
Err:
|
||||||
|
|
|
||||||
|
|
@ -144,11 +144,12 @@ if(srv->chatty) fprint(2, "sun msg %p count %d\n", m, m->count);
|
||||||
static SunProg*
|
static SunProg*
|
||||||
sunfindprog(SunSrv *srv, SunMsg *m, SunRpc *rpc, Channel **pc)
|
sunfindprog(SunSrv *srv, SunMsg *m, SunRpc *rpc, Channel **pc)
|
||||||
{
|
{
|
||||||
int i, vlo, vhi;
|
int i, vlo, vhi, any;
|
||||||
SunProg *pg;
|
SunProg *pg;
|
||||||
|
|
||||||
vlo = 0x7fffffff;
|
vlo = 0;
|
||||||
vhi = -1;
|
vhi = 0;
|
||||||
|
any = 0;
|
||||||
|
|
||||||
for(i=0; i<srv->nprog; i++){
|
for(i=0; i<srv->nprog; i++){
|
||||||
pg = srv->prog[i];
|
pg = srv->prog[i];
|
||||||
|
|
@ -159,11 +160,16 @@ sunfindprog(SunSrv *srv, SunMsg *m, SunRpc *rpc, Channel **pc)
|
||||||
return pg;
|
return pg;
|
||||||
}
|
}
|
||||||
/* right program, wrong version: record range */
|
/* right program, wrong version: record range */
|
||||||
|
if(!any++){
|
||||||
|
vlo = pg->vers;
|
||||||
|
vhi = pg->vers;
|
||||||
|
}else{
|
||||||
if(pg->vers < vlo)
|
if(pg->vers < vlo)
|
||||||
vlo = pg->vers;
|
vlo = pg->vers;
|
||||||
if(pg->vers > vhi)
|
if(pg->vers > vhi)
|
||||||
vhi = pg->vers;
|
vhi = pg->vers;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if(vhi == -1){
|
if(vhi == -1){
|
||||||
if(srv->chatty)
|
if(srv->chatty)
|
||||||
fprint(2, "\tprogram %ud unavailable\n", rpc->prog);
|
fprint(2, "\tprogram %ud unavailable\n", rpc->prog);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue