SUNRPC: rpcbind actually interprets r_owner string
RFC 1833 has little to say about the contents of r_owner; it only specifies that it is a string, and states that it is used to control who can UNSET an entry. Our port of rpcbind (from Sun) assumes this string contains a numeric UID value, not alphabetical or symbolic characters, but checks this value only for AF_LOCAL RPCB_SET or RPCB_UNSET requests. In all other cases, rpcbind ignores the contents of the r_owner string. The reference user space implementation of rpcb_set(3) uses a numeric UID for all SET/UNSET requests (even via the network) and an empty string for all other requests. We emulate that behavior here to maintain bug-for-bug compatibility. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
3aba45536f
commit
126e4bc3b3
|
@ -63,9 +63,16 @@ enum {
|
|||
* r_owner
|
||||
*
|
||||
* The "owner" is allowed to unset a service in the rpcbind database.
|
||||
* We always use the following (arbitrary) fixed string.
|
||||
*
|
||||
* For AF_LOCAL SET/UNSET requests, rpcbind treats this string as a
|
||||
* UID which it maps to a local user name via a password lookup.
|
||||
* In all other cases it is ignored.
|
||||
*
|
||||
* For SET/UNSET requests, user space provides a value, even for
|
||||
* network requests, and GETADDR uses an empty string. We follow
|
||||
* those precedents here.
|
||||
*/
|
||||
#define RPCB_OWNER_STRING "rpcb"
|
||||
#define RPCB_OWNER_STRING "0"
|
||||
#define RPCB_MAXOWNERLEN sizeof(RPCB_OWNER_STRING)
|
||||
|
||||
static void rpcb_getport_done(struct rpc_task *, void *);
|
||||
|
@ -566,7 +573,7 @@ void rpcb_getport_async(struct rpc_task *task)
|
|||
map->r_xprt = xprt_get(xprt);
|
||||
map->r_netid = rpc_peeraddr2str(clnt, RPC_DISPLAY_NETID);
|
||||
map->r_addr = rpc_peeraddr2str(rpcb_clnt, RPC_DISPLAY_UNIVERSAL_ADDR);
|
||||
map->r_owner = RPCB_OWNER_STRING; /* ignored for GETADDR */
|
||||
map->r_owner = "";
|
||||
map->r_status = -EIO;
|
||||
|
||||
child = rpcb_call_async(rpcb_clnt, map, proc);
|
||||
|
|
Loading…
Reference in New Issue