Add some more asserts.
authorRoy Marples <roy@marples.name>
Wed, 17 Sep 2014 08:14:13 +0000 (08:14 +0000)
committerRoy Marples <roy@marples.name>
Wed, 17 Sep 2014 08:14:13 +0000 (08:14 +0000)
Deny access to running commands if not priviledged without worrying dhcpcd.

src/libdhcpcd/dhcpcd.c

index 508137ce51b6c904505082b6a251590a5dbe92cd..a28d07d1077f2f107073aa07b6199e5e494dc6d9 100644 (file)
@@ -72,6 +72,9 @@ dhcpcd_command_fd(DHCPCD_CONNECTION *con,
        char buf[1024], *p;
        char *nbuf;
 
+       assert(con);
+       assert(cmd);
+
        /* Each command is \n terminated.
         * Each argument is NULL seperated.
         * We may need to send a space one day, so the API
@@ -128,6 +131,11 @@ ssize_t
 dhcpcd_command(DHCPCD_CONNECTION *con, const char *cmd, char **buffer)
 {
 
+       assert(con);
+       if (!con->privileged) {
+               errno = EACCES;
+               return -1;
+       }
        return dhcpcd_command_fd(con, con->command_fd, true, cmd, buffer);
 }
 
@@ -142,6 +150,7 @@ bool
 dhcpcd_realloc(DHCPCD_CONNECTION *con, size_t len)
 {
 
+       assert(con);
        if (con->buflen < len) {
                char *nbuf;
 
@@ -160,6 +169,9 @@ dhcpcd_command_arg(DHCPCD_CONNECTION *con, const char *cmd, const char *arg,
 {
        size_t cmdlen, len;
 
+       assert(con);
+       assert(cmd);
+
        cmdlen = strlen(cmd);
        if (arg)
                len = cmdlen + strlen(arg) + 2;
@@ -184,6 +196,7 @@ dhcpcd_connect(const char *path, int opts)
        socklen_t len;
        struct sockaddr_un sun;
 
+       assert(path);
        fd = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | opts, 0);
        if (fd == -1)
                return -1;
@@ -225,6 +238,7 @@ dhcpcd_get_value(const DHCPCD_IF *i, const char *var)
 {
 
        assert(i);
+       assert(var);
        return get_value(i->data, i->data_len, var);
 }
 
@@ -234,6 +248,10 @@ dhcpcd_get_prefix_value(const DHCPCD_IF *i, const char *prefix, const char *var)
        char pvar[128], *p;
        size_t plen, l;
 
+       assert(i);
+       assert(prefix);
+       assert(var);
+
        p = pvar;
        plen = sizeof(pvar);
        l = strlcpy(p, prefix, plen);
@@ -319,6 +337,9 @@ dhcpcd_get_if(DHCPCD_CONNECTION *con, const char *ifname, const char *type)
        DHCPCD_IF *i;
 
        assert(con);
+       assert(ifname);
+       assert(type);
+
        for (i = con->interfaces; i; i = i->next)
                if (strcmp(i->ifname, ifname) == 0 &&
                    strcmp(i->type, type) == 0)