diff options
Diffstat (limited to 'nfs/nfs.c')
-rw-r--r-- | nfs/nfs.c | 108 |
1 files changed, 0 insertions, 108 deletions
@@ -143,111 +143,3 @@ xdr_decode_fattr (int *p, struct stat *st) } -/* Create, initialize, and return a buffer suitable for sending an RPC - of type RPC_PROC for the user identified in CRED. For types READ, - WRITE, READLINK, and READDIR, parm LEN is the amount of data the - user desires. Return the address of where RPC args should go; fill - *pp with the address of the allocated memory. The RPC will be used - to operate on node NP. If this is a chown call, then set - SECOND_GID to the target of the call, else make it -1. */ -int * -nfs_initialize_rpc (int rpc_proc, struct netcred *cred, - size_t len, void **pp, struct node *np, - uid_t second_gid) -{ - void *buf = malloc (len + 1024); - int *p = buf, *lenaddr; - uid_t chosen_uid, chosen_gid; - - /* RPC header */ - *p++ = ntohl (generate_xid); - *p++ = ntohl (RPCV2_CALL); - *p++ = ntohl (RPCV2_VERSION); - *p++ = ntohl (NFSV2_RPC_PROGRAM); - *p++ = ntohl (NFSV2_RPC_VERSION); - *p++ = ntohl (rpc_proc); - - - /* CRED field */ - if (cred - && (cred->nuids || cred->ngids)) - { - *p++ = htonl (RPCV2_AUTH_UNIX); - lenaddr = p++; - *p++ = htonl (mapped_time->seconds); - p = xdr_encode_string (p, hostname); - - if (cred_has_uid (cred, 0)) - { - netfs_validate_stat (np, 0); - chosen_uid = 0; - chosen_gid = nn->nn_stat.st_gid; - } - else - { - if (cred->nuids == 0) - chosen_uid = -2; /* Eeeewwww */ - else if (cred->nuids == 1) - chosen_uid = cred->uids[0]; - else - { - netfs_validate_stat (np, 0); - if (cred_has_uid (cred, nn->nn_stat.st_uid)) - chosen_uid = nn->nn_stat.st_uid; - else - chosen_uid = cred->uids[0]; - } - - if (cred->ngids == 0) - { - chosen_gid = -2; - second_gid = -1; - } - else if (cred->ngids == 1) - { - chosen_gid = cred->gids[0]; - second_gid = -1; - } - else - { - netfs_validate_stat (np, 0); - - if (cred_has_gid (cred, nn->nn_stat.st_gid)) - chosen_gid = nn->nn_stat.st_gid; - else - chosen_gid = cred->gids[0]; - - if ((second_gid >= 0) - && (!cred_has_gid (cred, second_gid))) - second_gid = -1; - } - } - - *p++ = htonl (chosen_uid); - *p++ = htonl (chosen_gid); - if (second_gid == -1) - { - *p++ = htonl (1); - *p++ = htonl (second_gid); - } - else - *p++ = 0; - - *lenaddr = htonl ((p - (nlenaddr + 1)) * sizeof (int)); - } - else - { - *p++ = htonl (RPC_AUTH_NULL); - *p++ = 0; - } - - /* VERF field */ - *p++ = htonl (RPC_AUTH_NULL); - *p++ = 0; - - *pp = buf; - return p; -} - - - |