client: Implement get_peer for FreeBSD
This commit is contained in:
parent
e129536a08
commit
2f54beb5fe
2 changed files with 21 additions and 2 deletions
|
@ -17,8 +17,8 @@
|
||||||
#elif defined(__FreeBSD__)
|
#elif defined(__FreeBSD__)
|
||||||
#include <sys/consio.h>
|
#include <sys/consio.h>
|
||||||
#include <sys/kbio.h>
|
#include <sys/kbio.h>
|
||||||
#define TTY0 "/dev/ttyv0"
|
#define TTY0 "/dev/ttyv0"
|
||||||
#define TTYF "/dev/ttyv%d"
|
#define TTYF "/dev/ttyv%d"
|
||||||
#define K_ON K_XLATE
|
#define K_ON K_XLATE
|
||||||
#define K_OFF K_CODE
|
#define K_OFF K_CODE
|
||||||
#define FRSIG SIGIO
|
#define FRSIG SIGIO
|
||||||
|
|
|
@ -9,6 +9,11 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
#include <sys/ucred.h>
|
||||||
|
#include <sys/un.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "poller.h"
|
#include "poller.h"
|
||||||
|
@ -18,6 +23,7 @@
|
||||||
#include "terminal.h"
|
#include "terminal.h"
|
||||||
|
|
||||||
static int get_peer(int fd, pid_t *pid, uid_t *uid, gid_t *gid) {
|
static int get_peer(int fd, pid_t *pid, uid_t *uid, gid_t *gid) {
|
||||||
|
#if defined(__linux__)
|
||||||
struct ucred cred;
|
struct ucred cred;
|
||||||
socklen_t len = sizeof cred;
|
socklen_t len = sizeof cred;
|
||||||
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cred, &len) == -1) {
|
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cred, &len) == -1) {
|
||||||
|
@ -27,6 +33,19 @@ static int get_peer(int fd, pid_t *pid, uid_t *uid, gid_t *gid) {
|
||||||
*uid = cred.uid;
|
*uid = cred.uid;
|
||||||
*gid = cred.gid;
|
*gid = cred.gid;
|
||||||
return 0;
|
return 0;
|
||||||
|
#elif defined(__FreeBSD__)
|
||||||
|
struct xucred cred;
|
||||||
|
socklen_t len = sizeof cred;
|
||||||
|
if (getsockopt(fd, SOL_SOCKET, LOCAL_PEERCRED, &cred, &len) == -1) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
*pid = -1;
|
||||||
|
*uid = cred.cr_uid;
|
||||||
|
*gid = cred.cr_ngroups > 0 ? cred.cr_groups[0] : -1;
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
struct client *client_create(struct server *server, int client_fd) {
|
struct client *client_create(struct server *server, int client_fd) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue