]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Allow removing neighbor DB entries by BSSID alone
authorBen Greear <greearb@candelatech.com>
Mon, 18 Mar 2019 20:46:34 +0000 (13:46 -0700)
committerJouni Malinen <j@w1.fi>
Thu, 26 Dec 2019 09:01:37 +0000 (11:01 +0200)
Let users delete a neighbor by BSSID alone if they prefer. The
underlying code already properly handled a NULL SSID, so just relax the
control interface command calling restrictions.

Signed-off-by: Ben Greear <greearb@candelatech.com>
hostapd/ctrl_iface.c
hostapd/hostapd_cli.c

index 8692284d126cb6a299c9084cc83a6ccb482094b0..1972d3844e46aa246f17ac1bf5b459fd67825395 100644 (file)
@@ -2813,6 +2813,7 @@ static int hostapd_ctrl_iface_remove_neighbor(struct hostapd_data *hapd,
                                              char *buf)
 {
        struct wpa_ssid_value ssid;
+       struct wpa_ssid_value *ssidp = NULL;
        u8 bssid[ETH_ALEN];
        char *tmp;
 
@@ -2822,13 +2823,16 @@ static int hostapd_ctrl_iface_remove_neighbor(struct hostapd_data *hapd,
        }
 
        tmp = os_strstr(buf, "ssid=");
-       if (!tmp || ssid_parse(tmp + 5, &ssid)) {
-               wpa_printf(MSG_ERROR,
-                          "CTRL: REMOVE_NEIGHBORr: Bad or missing SSID");
-               return -1;
+       if (tmp) {
+               ssidp = &ssid;
+               if (ssid_parse(tmp + 5, &ssid)) {
+                       wpa_printf(MSG_ERROR,
+                                  "CTRL: REMOVE_NEIGHBOR: Bad SSID");
+                       return -1;
+               }
        }
 
-       return hostapd_neighbor_remove(hapd, bssid, &ssid);
+       return hostapd_neighbor_remove(hapd, bssid, ssidp);
 }
 
 
index 6819a24bf9f20d1797270249a99189744877bf72..24d8778a1229062cb8e97c8e1c67cd1761c4b3bb 100644 (file)
@@ -1315,21 +1315,7 @@ static int hostapd_cli_cmd_set_neighbor(struct wpa_ctrl *ctrl, int argc,
 static int hostapd_cli_cmd_remove_neighbor(struct wpa_ctrl *ctrl, int argc,
                                           char *argv[])
 {
-       char cmd[400];
-       int res;
-
-       if (argc != 2) {
-               printf("Invalid remove_neighbor command: needs 2 arguments\n");
-               return -1;
-       }
-
-       res = os_snprintf(cmd, sizeof(cmd), "REMOVE_NEIGHBOR %s %s",
-                         argv[0], argv[1]);
-       if (os_snprintf_error(sizeof(cmd), res)) {
-               printf("Too long REMOVE_NEIGHBOR command.\n");
-               return -1;
-       }
-       return wpa_ctrl_command(ctrl, cmd);
+       return hostapd_cli_cmd(ctrl, "REMOVE_NEIGHBOR", 1, argc, argv);
 }
 
 
@@ -1637,7 +1623,7 @@ static const struct hostapd_cli_cmd hostapd_cli_commands[] = {
          "<addr> <ssid=> <nr=> [lci=] [civic=] [stat]\n"
          "  = add AP to neighbor database" },
        { "remove_neighbor", hostapd_cli_cmd_remove_neighbor, NULL,
-         "<addr> <ssid=> = remove AP from neighbor database" },
+         "<addr> [ssid=<hex>] = remove AP from neighbor database" },
        { "req_lci", hostapd_cli_cmd_req_lci, hostapd_complete_stations,
          "<addr> = send LCI request to a station"},
        { "req_range", hostapd_cli_cmd_req_range, NULL,