From 6550dd690b33f18657459d9d0c34db9697e01558 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Tue, 24 May 2005 13:09:13 +0000 Subject: [PATCH] (update_client_creds): add support for getpeerucred and getpeereid git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@15223 ec53bebd-3082-4978-b11e-865c3cabbd6b --- kcm/connect.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/kcm/connect.c b/kcm/connect.c index cf6f645fd..a2e2edb33 100644 --- a/kcm/connect.c +++ b/kcm/connect.c @@ -81,7 +81,39 @@ reinit_descrs (struct descr *d, int n) static int update_client_creds(int s, kcm_client *peer) { +#ifdef GETPEERUCRED + /* Solaris 10 */ + { + ucred_t *peercred; + if (getpeerucred(fd, &peercred) != 0) { + krb5_warn(kcm_context, errno, "failed to determine peer identity"); + return 1; + } + peer->uid = ucred_geteuid(peercred); + peer->gid = ucred_getegid(peercred); + peer->pid = 0; + ucred_free(peercred); + return 0; + } +#endif +#ifdef GETPEEREID + /* FreeBSD, OpenBSD */ + { + uid_t uid; + gid_t gid; + + if (getpeereid(s, &uid, &gid) != 0) { + krb5_warn(kcm_context, errno, "failed to determine peer identity"); + return 1; + } + peer->uid = uid; + peer->gid = gid; + peer->pid = 0; + return 0; + } +#endif #ifdef SO_PEERCRED + /* Linux */ { struct ucred pc; socklen_t pclen = sizeof(pc); @@ -98,6 +130,7 @@ update_client_creds(int s, kcm_client *peer) } #endif #if defined(SOCKCREDSIZE) && defined(SCM_CREDS) + /* NetBSD */ if (peer->uid == -1) { struct msghdr msg; socklen_t crmsgsize;