ubusd: fix build on non-linux systems without peercred support
[project/ubus.git] / ubusd_acl.c
index 31f8b45..3c16114 100644 (file)
 
 #include "ubusd.h"
 
 
 #include "ubusd.h"
 
+#ifndef SO_PEERCRED
+struct ucred {
+       int pid;
+       int uid;
+       int gid;
+};
+#endif
+
 struct ubusd_acl_obj {
        struct avl_node avl;
        struct list_head list;
 struct ubusd_acl_obj {
        struct avl_node avl;
        struct list_head list;
@@ -135,13 +143,18 @@ ubusd_acl_check(struct ubus_client *cl, const char *obj,
 int
 ubusd_acl_init_client(struct ubus_client *cl, int fd)
 {
 int
 ubusd_acl_init_client(struct ubus_client *cl, int fd)
 {
-       unsigned int len = sizeof(struct ucred);
        struct ucred cred;
        struct passwd *pwd;
        struct group *group;
 
        struct ucred cred;
        struct passwd *pwd;
        struct group *group;
 
+#ifdef SO_PEERCRED
+       unsigned int len = sizeof(struct ucred);
+
        if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cred, &len) == -1)
                return -1;
        if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cred, &len) == -1)
                return -1;
+#else
+       memset(&cred, 0, sizeof(cred));
+#endif
 
        pwd = getpwuid(cred.uid);
        if (!pwd)
 
        pwd = getpwuid(cred.uid);
        if (!pwd)