mirror of
https://gitlab.freedesktop.org/libinput/libei.git
synced 2025-12-20 15:00:06 +01:00
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:
parent
19b6453540
commit
4f11112be0
1 changed files with 25 additions and 3 deletions
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue