xref: /freebsd/crypto/openssh/openbsd-compat/bsd-getpeereid.c (revision d4af9e693f15f5155095f38c7650b24fe74ae351)
14b17dab0SDag-Erling Smørgrav /*
2efcad6b7SDag-Erling Smørgrav  * Copyright (c) 2002,2004 Damien Miller <djm@mindrot.org>
34b17dab0SDag-Erling Smørgrav  *
4efcad6b7SDag-Erling Smørgrav  * Permission to use, copy, modify, and distribute this software for any
5efcad6b7SDag-Erling Smørgrav  * purpose with or without fee is hereby granted, provided that the above
6efcad6b7SDag-Erling Smørgrav  * copyright notice and this permission notice appear in all copies.
74b17dab0SDag-Erling Smørgrav  *
8efcad6b7SDag-Erling Smørgrav  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9efcad6b7SDag-Erling Smørgrav  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10efcad6b7SDag-Erling Smørgrav  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11efcad6b7SDag-Erling Smørgrav  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12efcad6b7SDag-Erling Smørgrav  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13efcad6b7SDag-Erling Smørgrav  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14efcad6b7SDag-Erling Smørgrav  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
154b17dab0SDag-Erling Smørgrav  */
164b17dab0SDag-Erling Smørgrav 
174b17dab0SDag-Erling Smørgrav #include "includes.h"
184b17dab0SDag-Erling Smørgrav 
194b17dab0SDag-Erling Smørgrav #if !defined(HAVE_GETPEEREID)
204b17dab0SDag-Erling Smørgrav 
21761efaa7SDag-Erling Smørgrav #include <sys/types.h>
22761efaa7SDag-Erling Smørgrav #include <sys/socket.h>
23761efaa7SDag-Erling Smørgrav 
24761efaa7SDag-Erling Smørgrav #include <unistd.h>
25761efaa7SDag-Erling Smørgrav 
264b17dab0SDag-Erling Smørgrav #if defined(SO_PEERCRED)
274b17dab0SDag-Erling Smørgrav int
getpeereid(int s,uid_t * euid,gid_t * gid)284b17dab0SDag-Erling Smørgrav getpeereid(int s, uid_t *euid, gid_t *gid)
294b17dab0SDag-Erling Smørgrav {
304b17dab0SDag-Erling Smørgrav 	struct ucred cred;
31d0c8c0bcSDag-Erling Smørgrav 	socklen_t len = sizeof(cred);
324b17dab0SDag-Erling Smørgrav 
334b17dab0SDag-Erling Smørgrav 	if (getsockopt(s, SOL_SOCKET, SO_PEERCRED, &cred, &len) < 0)
344b17dab0SDag-Erling Smørgrav 		return (-1);
354b17dab0SDag-Erling Smørgrav 	*euid = cred.uid;
364b17dab0SDag-Erling Smørgrav 	*gid = cred.gid;
374b17dab0SDag-Erling Smørgrav 
384b17dab0SDag-Erling Smørgrav 	return (0);
394b17dab0SDag-Erling Smørgrav }
40d4af9e69SDag-Erling Smørgrav #elif defined(HAVE_GETPEERUCRED)
41d4af9e69SDag-Erling Smørgrav 
42d4af9e69SDag-Erling Smørgrav #ifdef HAVE_UCRED_H
43d4af9e69SDag-Erling Smørgrav # include <ucred.h>
44d4af9e69SDag-Erling Smørgrav #endif
45d4af9e69SDag-Erling Smørgrav 
46d4af9e69SDag-Erling Smørgrav int
getpeereid(int s,uid_t * euid,gid_t * gid)47d4af9e69SDag-Erling Smørgrav getpeereid(int s, uid_t *euid, gid_t *gid)
48d4af9e69SDag-Erling Smørgrav {
49d4af9e69SDag-Erling Smørgrav 	ucred_t *ucred = NULL;
50d4af9e69SDag-Erling Smørgrav 
51d4af9e69SDag-Erling Smørgrav 	if (getpeerucred(s, &ucred) == -1)
52d4af9e69SDag-Erling Smørgrav 		return (-1);
53d4af9e69SDag-Erling Smørgrav 	if ((*euid = ucred_geteuid(ucred)) == -1)
54d4af9e69SDag-Erling Smørgrav 		return (-1);
55d4af9e69SDag-Erling Smørgrav 	if ((*gid = ucred_getrgid(ucred)) == -1)
56d4af9e69SDag-Erling Smørgrav 		return (-1);
57d4af9e69SDag-Erling Smørgrav 
58d4af9e69SDag-Erling Smørgrav 	ucred_free(ucred);
59d4af9e69SDag-Erling Smørgrav 
60d4af9e69SDag-Erling Smørgrav 	return (0);
61d4af9e69SDag-Erling Smørgrav }
624b17dab0SDag-Erling Smørgrav #else
634b17dab0SDag-Erling Smørgrav int
getpeereid(int s,uid_t * euid,gid_t * gid)644b17dab0SDag-Erling Smørgrav getpeereid(int s, uid_t *euid, gid_t *gid)
654b17dab0SDag-Erling Smørgrav {
664b17dab0SDag-Erling Smørgrav 	*euid = geteuid();
674b17dab0SDag-Erling Smørgrav 	*gid = getgid();
684b17dab0SDag-Erling Smørgrav 
694b17dab0SDag-Erling Smørgrav 	return (0);
704b17dab0SDag-Erling Smørgrav }
714b17dab0SDag-Erling Smørgrav #endif /* defined(SO_PEERCRED) */
724b17dab0SDag-Erling Smørgrav 
734b17dab0SDag-Erling Smørgrav #endif /* !defined(HAVE_GETPEEREID) */
74