Damien Miller | 771721f | 2002-09-12 10:32:59 +1000 | [diff] [blame] | 1 | /* |
Damien Miller | 98225c2 | 2004-02-17 16:49:41 +1100 | [diff] [blame] | 2 | * Copyright (c) 2002,2004 Damien Miller <djm@mindrot.org> |
Damien Miller | 771721f | 2002-09-12 10:32:59 +1000 | [diff] [blame] | 3 | * |
Damien Miller | 98225c2 | 2004-02-17 16:49:41 +1100 | [diff] [blame] | 4 | * Permission to use, copy, modify, and distribute this software for any |
| 5 | * purpose with or without fee is hereby granted, provided that the above |
| 6 | * copyright notice and this permission notice appear in all copies. |
Damien Miller | 771721f | 2002-09-12 10:32:59 +1000 | [diff] [blame] | 7 | * |
Damien Miller | 98225c2 | 2004-02-17 16:49:41 +1100 | [diff] [blame] | 8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| 9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| 10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| 11 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| 12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| 13 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| 14 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
Damien Miller | 771721f | 2002-09-12 10:32:59 +1000 | [diff] [blame] | 15 | */ |
| 16 | |
| 17 | #include "includes.h" |
| 18 | |
Damien Miller | 98225c2 | 2004-02-17 16:49:41 +1100 | [diff] [blame] | 19 | RCSID("$Id: bsd-getpeereid.c,v 1.3 2004/02/17 05:49:55 djm Exp $"); |
Damien Miller | 771721f | 2002-09-12 10:32:59 +1000 | [diff] [blame] | 20 | |
| 21 | #if !defined(HAVE_GETPEEREID) |
| 22 | |
| 23 | #if defined(SO_PEERCRED) |
| 24 | int |
| 25 | getpeereid(int s, uid_t *euid, gid_t *gid) |
| 26 | { |
| 27 | struct ucred cred; |
Damien Miller | 68d893d | 2003-03-25 09:07:52 +1100 | [diff] [blame] | 28 | socklen_t len = sizeof(cred); |
Damien Miller | 771721f | 2002-09-12 10:32:59 +1000 | [diff] [blame] | 29 | |
| 30 | if (getsockopt(s, SOL_SOCKET, SO_PEERCRED, &cred, &len) < 0) |
| 31 | return (-1); |
| 32 | *euid = cred.uid; |
| 33 | *gid = cred.gid; |
| 34 | |
| 35 | return (0); |
| 36 | } |
| 37 | #else |
| 38 | int |
| 39 | getpeereid(int s, uid_t *euid, gid_t *gid) |
| 40 | { |
| 41 | *euid = geteuid(); |
| 42 | *gid = getgid(); |
| 43 | |
| 44 | return (0); |
| 45 | } |
| 46 | #endif /* defined(SO_PEERCRED) */ |
| 47 | |
| 48 | #endif /* !defined(HAVE_GETPEEREID) */ |