Coverage Report

Created: 2025-07-01 06:04

/src/hpn-ssh/openbsd-compat/bsd-getpeereid.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 2002,2004 Damien Miller <djm@mindrot.org>
3
 *
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.
7
 *
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.
15
 */
16
17
#include "includes.h"
18
19
#if !defined(HAVE_GETPEEREID)
20
21
#include <sys/types.h>
22
#include <sys/socket.h>
23
24
#include <unistd.h>
25
26
#if defined(SO_PEERCRED)
27
int
28
getpeereid(int s, uid_t *euid, gid_t *gid)
29
0
{
30
0
  struct ucred cred;
31
0
  socklen_t len = sizeof(cred);
32
33
0
  if (getsockopt(s, SOL_SOCKET, SO_PEERCRED, &cred, &len) < 0)
34
0
    return (-1);
35
0
  *euid = cred.uid;
36
0
  *gid = cred.gid;
37
38
0
  return (0);
39
0
}
40
#elif defined(HAVE_GETPEERUCRED)
41
42
#ifdef HAVE_UCRED_H
43
# include <ucred.h>
44
#endif
45
46
int
47
getpeereid(int s, uid_t *euid, gid_t *gid)
48
{
49
  ucred_t *ucred = NULL;
50
51
  if (getpeerucred(s, &ucred) == -1)
52
    return (-1);
53
  if ((*euid = ucred_geteuid(ucred)) == -1)
54
    return (-1);
55
  if ((*gid = ucred_getrgid(ucred)) == -1)
56
    return (-1);
57
58
  ucred_free(ucred);
59
60
  return (0);
61
}
62
#else
63
int
64
getpeereid(int s, uid_t *euid, gid_t *gid)
65
{
66
  *euid = geteuid();
67
  *gid = getgid();
68
69
  return (0);
70
}
71
#endif /* defined(SO_PEERCRED) */
72
73
#endif /* !defined(HAVE_GETPEEREID) */