summaryrefslogtreecommitdiff
path: root/src/lib/libc/net/getpeereid.c
diff options
context:
space:
mode:
authorderaadt <>2010-07-01 19:15:30 +0000
committerderaadt <>2010-07-01 19:15:30 +0000
commit3f82b28f1afc35ad022d05115d5cc220518cdef7 (patch)
tree15ad77321eb7b813dad8da3a6e27a312a30da306 /src/lib/libc/net/getpeereid.c
parent4722e3b8cd01eb49fdc03a02aed428c5118eaf49 (diff)
downloadopenbsd-3f82b28f1afc35ad022d05115d5cc220518cdef7.tar.gz
openbsd-3f82b28f1afc35ad022d05115d5cc220518cdef7.tar.bz2
openbsd-3f82b28f1afc35ad022d05115d5cc220518cdef7.zip
getpeereid() can now be a library routine using getsockopt() with
SOL_SOCKET and SO_PEERCRED, only issue being that it cannot return EFAULT for a page fault. The kernel code will soon be put into compat, and then in 10 years or so tedu will delete it. ok guenther millert
Diffstat (limited to '')
-rw-r--r--src/lib/libc/net/getpeereid.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/lib/libc/net/getpeereid.c b/src/lib/libc/net/getpeereid.c
new file mode 100644
index 0000000000..208e541f17
--- /dev/null
+++ b/src/lib/libc/net/getpeereid.c
@@ -0,0 +1,36 @@
1/* $OpenBSD: getpeereid.c,v 1.1 2010/07/01 19:15:30 deraadt Exp $ */
2
3/*
4 * Copyright (c) 2010 Theo de Raadt <deraadt@openbsd.org>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19#include <sys/types.h>
20#include <sys/socket.h>
21
22int
23getpeereid(int s, uid_t *euid, gid_t *egid)
24{
25 struct sockpeercred creds;
26 socklen_t credslen = sizeof(creds);
27 int error;
28
29 error = getsockopt(s, SOL_SOCKET, SO_PEERCRED,
30 &creds, &credslen);
31 if (error)
32 return (error);
33 *euid = creds.uid;
34 *egid = creds.gid;
35 return (0);
36}