eis: implement getting client PID for BSDs after 70cfc6eed2

src/libeis-socket.c:192:15: error: variable has incomplete type 'struct ucred'
  192 |         struct ucred ucred;
      |                      ^
src/libeis-socket.c:192:9: note: forward declaration of 'struct ucred'
  192 |         struct ucred ucred;
      |                ^
src/libeis-socket.c:194:65: error: use of undeclared identifier 'SO_PEERCRED'
  194 |         int rc = getsockopt(source_get_fd(client->source), SOL_SOCKET, SO_PEERCRED, &ucred, &len);
      |                                                                        ^

Part-of: <https://gitlab.freedesktop.org/libinput/libei/-/merge_requests/357>
This commit is contained in:
Jan Beich 2025-08-26 05:41:22 +02:00
parent 19b6453540
commit 4f11112be0

View file

@ -41,6 +41,28 @@
#include "libeis.h"
#include "libeis-private.h"
#if defined(__DragonFly__) || defined(__FreeBSD__)
#include <sys/ucred.h>
#define CRED_T xucred
#define CRED_LVL SOL_LOCAL
#define CRED_OPT LOCAL_PEERCRED
#define CRED_PID cr_pid
#elif defined(__NetBSD__)
#define CRED_T unpcbid
#define CRED_LVL SOL_LOCAL
#define CRED_OPT LOCAL_PEEREID
#define CRED_PID unp_pid
#else
#if defined(__OpenBSD__)
#define CRED_T sockpeercred
#else
#define CRED_T ucred
#endif
#define CRED_LVL SOL_SOCKET
#define CRED_OPT SO_PEERCRED
#define CRED_PID pid
#endif
struct eis_socket {
struct object object;
struct source *listener;
@ -189,11 +211,11 @@ eis_backend_socket_get_client_pid(struct eis_client* client)
log_bug_client(eis, "Not a socket backend");
return -EINVAL;
}
struct ucred ucred;
struct CRED_T ucred;
socklen_t len = sizeof(ucred);
int rc = getsockopt(source_get_fd(client->source), SOL_SOCKET, SO_PEERCRED, &ucred, &len);
int rc = getsockopt(source_get_fd(client->source), CRED_LVL, CRED_OPT, &ucred, &len);
if (rc < 0) {
return -errno;
}
return ucred.pid;
return ucred.CRED_PID;
}