wpa_priv: Clear extended_capa pointers
[mech_eap.git] / src / drivers / driver_privsep.c
index a677ad6..64a65a6 100644 (file)
@@ -35,7 +35,7 @@ static int wpa_priv_reg_cmd(struct wpa_driver_privsep_data *drv, int cmd)
                     (struct sockaddr *) &drv->priv_addr,
                     sizeof(drv->priv_addr));
        if (res < 0)
-               perror("sendto");
+               wpa_printf(MSG_ERROR, "sendto: %s", strerror(errno));
        return res < 0 ? -1 : 0;
 }
 
@@ -59,7 +59,8 @@ static int wpa_priv_cmd(struct wpa_driver_privsep_data *drv, int cmd,
        msg.msg_namelen = sizeof(drv->priv_addr);
 
        if (sendmsg(drv->cmd_socket, &msg, 0) < 0) {
-               perror("sendmsg(cmd_socket)");
+               wpa_printf(MSG_ERROR, "sendmsg(cmd_socket): %s",
+                          strerror(errno));
                return -1;
        }
 
@@ -74,14 +75,15 @@ static int wpa_priv_cmd(struct wpa_driver_privsep_data *drv, int cmd,
                tv.tv_usec = 0;
                res = select(drv->cmd_socket + 1, &rfds, NULL, NULL, &tv);
                if (res < 0 && errno != EINTR) {
-                       perror("select");
+                       wpa_printf(MSG_ERROR, "select: %s", strerror(errno));
                        return -1;
                }
 
                if (FD_ISSET(drv->cmd_socket, &rfds)) {
                        res = recv(drv->cmd_socket, reply, *reply_len, 0);
                        if (res < 0) {
-                               perror("recv");
+                               wpa_printf(MSG_ERROR, "recv: %s",
+                                          strerror(errno));
                                return -1;
                        }
                        *reply_len = res;
@@ -279,14 +281,15 @@ static int wpa_driver_privsep_get_ssid(void *priv, u8 *ssid)
 {
        struct wpa_driver_privsep_data *drv = priv;
        int res, ssid_len;
-       u8 reply[sizeof(int) + 32];
+       u8 reply[sizeof(int) + SSID_MAX_LEN];
        size_t len = sizeof(reply);
 
        res = wpa_priv_cmd(drv, PRIVSEP_CMD_GET_SSID, NULL, 0, reply, &len);
        if (res < 0 || len < sizeof(int))
                return -1;
        os_memcpy(&ssid_len, reply, sizeof(int));
-       if (ssid_len < 0 || ssid_len > 32 || sizeof(int) + ssid_len > len) {
+       if (ssid_len < 0 || ssid_len > SSID_MAX_LEN ||
+           sizeof(int) + ssid_len > len) {
                wpa_printf(MSG_DEBUG, "privsep: Invalid get SSID reply");
                return -1;
        }
@@ -441,7 +444,8 @@ static void wpa_driver_privsep_receive(int sock, void *eloop_ctx,
        res = recvfrom(sock, buf, buflen, 0,
                       (struct sockaddr *) &from, &fromlen);
        if (res < 0) {
-               perror("recvfrom(priv_socket)");
+               wpa_printf(MSG_ERROR, "recvfrom(priv_socket): %s",
+                          strerror(errno));
                os_free(buf);
                return;
        }
@@ -631,7 +635,7 @@ static int wpa_driver_privsep_set_param(void *priv, const char *param)
 
        drv->priv_socket = socket(PF_UNIX, SOCK_DGRAM, 0);
        if (drv->priv_socket < 0) {
-               perror("socket(PF_UNIX)");
+               wpa_printf(MSG_ERROR, "socket(PF_UNIX): %s", strerror(errno));
                os_free(drv->own_socket_path);
                drv->own_socket_path = NULL;
                return -1;
@@ -642,7 +646,9 @@ static int wpa_driver_privsep_set_param(void *priv, const char *param)
        os_strlcpy(addr.sun_path, drv->own_socket_path, sizeof(addr.sun_path));
        if (bind(drv->priv_socket, (struct sockaddr *) &addr, sizeof(addr)) <
            0) {
-               perror("privsep-set-params priv-sock: bind(PF_UNIX)");
+               wpa_printf(MSG_ERROR,
+                          "privsep-set-params priv-sock: bind(PF_UNIX): %s",
+                          strerror(errno));
                close(drv->priv_socket);
                drv->priv_socket = -1;
                unlink(drv->own_socket_path);
@@ -656,7 +662,7 @@ static int wpa_driver_privsep_set_param(void *priv, const char *param)
 
        drv->cmd_socket = socket(PF_UNIX, SOCK_DGRAM, 0);
        if (drv->cmd_socket < 0) {
-               perror("socket(PF_UNIX)");
+               wpa_printf(MSG_ERROR, "socket(PF_UNIX): %s", strerror(errno));
                os_free(drv->own_cmd_path);
                drv->own_cmd_path = NULL;
                return -1;
@@ -667,7 +673,9 @@ static int wpa_driver_privsep_set_param(void *priv, const char *param)
        os_strlcpy(addr.sun_path, drv->own_cmd_path, sizeof(addr.sun_path));
        if (bind(drv->cmd_socket, (struct sockaddr *) &addr, sizeof(addr)) < 0)
        {
-               perror("privsep-set-params cmd-sock: bind(PF_UNIX)");
+               wpa_printf(MSG_ERROR,
+                          "privsep-set-params cmd-sock: bind(PF_UNIX): %s",
+                          strerror(errno));
                close(drv->cmd_socket);
                drv->cmd_socket = -1;
                unlink(drv->own_cmd_path);
@@ -695,6 +703,10 @@ static int wpa_driver_privsep_get_capa(void *priv,
        res = wpa_priv_cmd(drv, PRIVSEP_CMD_GET_CAPA, NULL, 0, capa, &len);
        if (res < 0 || len != sizeof(*capa))
                return -1;
+       /* For now, no support for passing extended_capa pointers */
+       capa->extended_capa = NULL;
+       capa->extended_capa_mask = NULL;
+       capa->extended_capa_len = 0;
        return 0;
 }
 
@@ -735,7 +747,7 @@ struct wpa_driver_ops wpa_driver_privsep_ops = {
 };
 
 
-struct wpa_driver_ops *wpa_drivers[] =
+const struct wpa_driver_ops *const wpa_drivers[] =
 {
        &wpa_driver_privsep_ops,
        NULL