diff options
author | alfred <alfred@FreeBSD.org> | 2001-03-22 04:31:30 +0000 |
---|---|---|
committer | alfred <alfred@FreeBSD.org> | 2001-03-22 04:31:30 +0000 |
commit | 281af9370ca4060089860089233faf33682090ff (patch) | |
tree | 06c8eb9ac0e2912253da3c85456a24984746c85d /usr.sbin/rpcbind | |
parent | 2067928f4eb6211420175a84f11a6c8c20eeead0 (diff) | |
download | FreeBSD-src-281af9370ca4060089860089233faf33682090ff.zip FreeBSD-src-281af9370ca4060089860089233faf33682090ff.tar.gz |
Hopefully fix some of the bugs in passing credentials over UNIX domain sockets.
Make struct cmessage visible from socket.h (about 4 places were
defining it for themselves which wasn't good)
Make __rpc_get_local_uid() useable and give it prototype that's
visible.
Fix some issues with printing out usernames from rpcbind and keyserv.
Diffstat (limited to 'usr.sbin/rpcbind')
-rw-r--r-- | usr.sbin/rpcbind/pmap_svc.c | 9 | ||||
-rw-r--r-- | usr.sbin/rpcbind/rpcb_svc_com.c | 13 |
2 files changed, 10 insertions, 12 deletions
diff --git a/usr.sbin/rpcbind/pmap_svc.c b/usr.sbin/rpcbind/pmap_svc.c index b2cedd9..26467d1 100644 --- a/usr.sbin/rpcbind/pmap_svc.c +++ b/usr.sbin/rpcbind/pmap_svc.c @@ -173,7 +173,7 @@ pmapproc_change(struct svc_req *rqstp, SVCXPRT *xprt, unsigned long op) RPCB rpcbreg; long ans; struct sockaddr_in *who; - struct cmsgcred *cmcred; + uid_t uid; char uidbuf[32]; #ifdef RPCBIND_DEBUG @@ -194,19 +194,18 @@ pmapproc_change(struct svc_req *rqstp, SVCXPRT *xprt, unsigned long op) } who = svc_getcaller(xprt); - cmcred = __svc_getcallercreds(xprt); /* * Can't use getpwnam here. We might end up calling ourselves * and looping. */ - if (cmcred == NULL) + if (__rpc_get_local_uid(xprt, &uid) < 0) rpcbreg.r_owner = "unknown"; - else if (cmcred->cmcred_uid == 0) + else if (uid == 0) rpcbreg.r_owner = "superuser"; else { /* r_owner will be strdup-ed later */ - snprintf(uidbuf, sizeof uidbuf, "%d", cmcred->cmcred_uid); + snprintf(uidbuf, sizeof uidbuf, "%d", uid); rpcbreg.r_owner = uidbuf; } diff --git a/usr.sbin/rpcbind/rpcb_svc_com.c b/usr.sbin/rpcbind/rpcb_svc_com.c index e0c7487..55264c0 100644 --- a/usr.sbin/rpcbind/rpcb_svc_com.c +++ b/usr.sbin/rpcbind/rpcb_svc_com.c @@ -1348,15 +1348,14 @@ find_service(rpcprog_t prog, rpcvers_t vers, char *netid) static char * getowner(SVCXPRT *transp, char *owner, size_t ownersize) { - struct cmsgcred *cmcred; - - cmcred = __svc_getcallercreds(transp); - if (cmcred == NULL) - strlcpy(owner, "unknown", ownersize); - else if (cmcred->cmcred_uid == 0) + uid_t uid; + + if (__rpc_get_local_uid(transp, &uid) < 0) + strlcpy(owner, "unknown", ownersize); + else if (uid == 0) strlcpy(owner, "superuser", ownersize); else - snprintf(owner, ownersize, "%d", cmcred->cmcred_uid); + snprintf(owner, ownersize, "%d", uid); return owner; } |