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.h"
#include "libeis-private.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 eis_socket {
struct object object; struct object object;
struct source *listener; 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"); log_bug_client(eis, "Not a socket backend");
return -EINVAL; return -EINVAL;
} }
struct ucred ucred; struct CRED_T ucred;
socklen_t len = sizeof(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) { if (rc < 0) {
return -errno; return -errno;
} }
return ucred.pid; return ucred.CRED_PID;
} }