ubusd: fix build on non-linux systems without peercred support
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
This commit is contained in:
parent
b2e629a4e9
commit
e59b445734
1 changed files with 14 additions and 1 deletions
15
ubusd_acl.c
15
ubusd_acl.c
|
@ -28,6 +28,14 @@
|
||||||
|
|
||||||
#include "ubusd.h"
|
#include "ubusd.h"
|
||||||
|
|
||||||
|
#ifndef SO_PEERCRED
|
||||||
|
struct ucred {
|
||||||
|
int pid;
|
||||||
|
int uid;
|
||||||
|
int gid;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
struct ubusd_acl_obj {
|
struct ubusd_acl_obj {
|
||||||
struct avl_node avl;
|
struct avl_node avl;
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
|
@ -135,13 +143,18 @@ ubusd_acl_check(struct ubus_client *cl, const char *obj,
|
||||||
int
|
int
|
||||||
ubusd_acl_init_client(struct ubus_client *cl, int fd)
|
ubusd_acl_init_client(struct ubus_client *cl, int fd)
|
||||||
{
|
{
|
||||||
unsigned int len = sizeof(struct ucred);
|
|
||||||
struct ucred cred;
|
struct ucred cred;
|
||||||
struct passwd *pwd;
|
struct passwd *pwd;
|
||||||
struct group *group;
|
struct group *group;
|
||||||
|
|
||||||
|
#ifdef SO_PEERCRED
|
||||||
|
unsigned int len = sizeof(struct ucred);
|
||||||
|
|
||||||
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cred, &len) == -1)
|
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cred, &len) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
#else
|
||||||
|
memset(&cred, 0, sizeof(cred));
|
||||||
|
#endif
|
||||||
|
|
||||||
pwd = getpwuid(cred.uid);
|
pwd = getpwuid(cred.uid);
|
||||||
if (!pwd)
|
if (!pwd)
|
||||||
|
|
Loading…
Add table
Reference in a new issue