summaryrefslogtreecommitdiffstats
path: root/usr.sbin/rpcbind
diff options
context:
space:
mode:
authoralfred <alfred@FreeBSD.org>2001-03-22 04:31:30 +0000
committeralfred <alfred@FreeBSD.org>2001-03-22 04:31:30 +0000
commit281af9370ca4060089860089233faf33682090ff (patch)
tree06c8eb9ac0e2912253da3c85456a24984746c85d /usr.sbin/rpcbind
parent2067928f4eb6211420175a84f11a6c8c20eeead0 (diff)
downloadFreeBSD-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.c9
-rw-r--r--usr.sbin/rpcbind/rpcb_svc_com.c13
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;
}
OpenPOWER on IntegriCloud