diff options
author | sam <sam@FreeBSD.org> | 2008-03-24 19:46:53 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2008-03-24 19:46:53 +0000 |
commit | 153f9c1cd9a5b749f57e28682fadb39c781e1e5d (patch) | |
tree | f77bae77287d18eaa89acc25e38b5acccca132fe /contrib/wpa_supplicant/wpa_cli.c | |
parent | 35aef052ff21baa52c4cec68b512986c21f70a48 (diff) | |
download | FreeBSD-src-153f9c1cd9a5b749f57e28682fadb39c781e1e5d.zip FreeBSD-src-153f9c1cd9a5b749f57e28682fadb39c781e1e5d.tar.gz |
Import of WPA supplicant 0.5.10
Diffstat (limited to 'contrib/wpa_supplicant/wpa_cli.c')
-rw-r--r-- | contrib/wpa_supplicant/wpa_cli.c | 122 |
1 files changed, 69 insertions, 53 deletions
diff --git a/contrib/wpa_supplicant/wpa_cli.c b/contrib/wpa_supplicant/wpa_cli.c index a641249..7176c95 100644 --- a/contrib/wpa_supplicant/wpa_cli.c +++ b/contrib/wpa_supplicant/wpa_cli.c @@ -1,6 +1,6 @@ /* * WPA Supplicant - command line interface for wpa_supplicant daemon - * Copyright (c) 2004-2007, Jouni Malinen <j@w1.fi> + * Copyright (c) 2004-2008, Jouni Malinen <j@w1.fi> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -31,7 +31,7 @@ static const char *wpa_cli_version = "wpa_cli v" VERSION_STR "\n" -"Copyright (c) 2004-2007, Jouni Malinen <j@w1.fi> and contributors"; +"Copyright (c) 2004-2008, Jouni Malinen <j@w1.fi> and contributors"; static const char *wpa_cli_license = @@ -120,8 +120,10 @@ static const char *commands_help = " list of variables when run without arguments)\n" " get_network <network id> <variable> = get network variables\n" " save_config = save the current configuration\n" -" disconnect = disconnect and wait for reassociate command before " -"connecting\n" +" disconnect = disconnect and wait for reassociate/reconnect command before\n " +" connecting\n" +" reconnect = like reassociate, but only takes effect if already " +"disconnected\n" " scan = request new BSS scan\n" " scan_results = get latest scan results\n" " get_capability <eap/pairwise/group/key_mgmt/proto/auth_alg> = " @@ -318,13 +320,13 @@ static int wpa_cli_cmd_set(struct wpa_ctrl *ctrl, int argc, char *argv[]) if (argc != 2) { printf("Invalid SET command: needs two arguments (variable " "name and value)\n"); - return 0; + return -1; } res = os_snprintf(cmd, sizeof(cmd), "SET %s %s", argv[0], argv[1]); if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { printf("Too long SET command.\n"); - return 0; + return -1; } return wpa_ctrl_command(ctrl, cmd); } @@ -358,13 +360,13 @@ static int wpa_cli_cmd_preauthenticate(struct wpa_ctrl *ctrl, int argc, if (argc != 1) { printf("Invalid PREAUTH command: needs one argument " "(BSSID)\n"); - return 0; + return -1; } res = os_snprintf(cmd, sizeof(cmd), "PREAUTH %s", argv[0]); if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { printf("Too long PREAUTH command.\n"); - return 0; + return -1; } return wpa_ctrl_command(ctrl, cmd); } @@ -378,12 +380,12 @@ static int wpa_cli_cmd_ap_scan(struct wpa_ctrl *ctrl, int argc, char *argv[]) if (argc != 1) { printf("Invalid AP_SCAN command: needs one argument (ap_scan " "value)\n"); - return 0; + return -1; } res = os_snprintf(cmd, sizeof(cmd), "AP_SCAN %s", argv[0]); if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { printf("Too long AP_SCAN command.\n"); - return 0; + return -1; } return wpa_ctrl_command(ctrl, cmd); } @@ -398,13 +400,13 @@ static int wpa_cli_cmd_stkstart(struct wpa_ctrl *ctrl, int argc, if (argc != 1) { printf("Invalid STKSTART command: needs one argument " "(Peer STA MAC address)\n"); - return 0; + return -1; } res = os_snprintf(cmd, sizeof(cmd), "STKSTART %s", argv[0]); if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { printf("Too long STKSTART command.\n"); - return 0; + return -1; } return wpa_ctrl_command(ctrl, cmd); } @@ -418,12 +420,12 @@ static int wpa_cli_cmd_level(struct wpa_ctrl *ctrl, int argc, char *argv[]) if (argc != 1) { printf("Invalid LEVEL command: needs one argument (debug " "level)\n"); - return 0; + return -1; } res = os_snprintf(cmd, sizeof(cmd), "LEVEL %s", argv[0]); if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { printf("Too long LEVEL command.\n"); - return 0; + return -1; } return wpa_ctrl_command(ctrl, cmd); } @@ -437,7 +439,7 @@ static int wpa_cli_cmd_identity(struct wpa_ctrl *ctrl, int argc, char *argv[]) if (argc < 2) { printf("Invalid IDENTITY command: needs two arguments " "(network id and identity)\n"); - return 0; + return -1; } end = cmd + sizeof(cmd); @@ -446,14 +448,14 @@ static int wpa_cli_cmd_identity(struct wpa_ctrl *ctrl, int argc, char *argv[]) argv[0], argv[1]); if (ret < 0 || ret >= end - pos) { printf("Too long IDENTITY command.\n"); - return 0; + return -1; } pos += ret; for (i = 2; i < argc; i++) { ret = os_snprintf(pos, end - pos, " %s", argv[i]); if (ret < 0 || ret >= end - pos) { printf("Too long IDENTITY command.\n"); - return 0; + return -1; } pos += ret; } @@ -470,7 +472,7 @@ static int wpa_cli_cmd_password(struct wpa_ctrl *ctrl, int argc, char *argv[]) if (argc < 2) { printf("Invalid PASSWORD command: needs two arguments " "(network id and password)\n"); - return 0; + return -1; } end = cmd + sizeof(cmd); @@ -479,14 +481,14 @@ static int wpa_cli_cmd_password(struct wpa_ctrl *ctrl, int argc, char *argv[]) argv[0], argv[1]); if (ret < 0 || ret >= end - pos) { printf("Too long PASSWORD command.\n"); - return 0; + return -1; } pos += ret; for (i = 2; i < argc; i++) { ret = os_snprintf(pos, end - pos, " %s", argv[i]); if (ret < 0 || ret >= end - pos) { printf("Too long PASSWORD command.\n"); - return 0; + return -1; } pos += ret; } @@ -504,7 +506,7 @@ static int wpa_cli_cmd_new_password(struct wpa_ctrl *ctrl, int argc, if (argc < 2) { printf("Invalid NEW_PASSWORD command: needs two arguments " "(network id and password)\n"); - return 0; + return -1; } end = cmd + sizeof(cmd); @@ -513,14 +515,14 @@ static int wpa_cli_cmd_new_password(struct wpa_ctrl *ctrl, int argc, argv[0], argv[1]); if (ret < 0 || ret >= end - pos) { printf("Too long NEW_PASSWORD command.\n"); - return 0; + return -1; } pos += ret; for (i = 2; i < argc; i++) { ret = os_snprintf(pos, end - pos, " %s", argv[i]); if (ret < 0 || ret >= end - pos) { printf("Too long NEW_PASSWORD command.\n"); - return 0; + return -1; } pos += ret; } @@ -537,7 +539,7 @@ static int wpa_cli_cmd_pin(struct wpa_ctrl *ctrl, int argc, char *argv[]) if (argc < 2) { printf("Invalid PIN command: needs two arguments " "(network id and pin)\n"); - return 0; + return -1; } end = cmd + sizeof(cmd); @@ -546,14 +548,14 @@ static int wpa_cli_cmd_pin(struct wpa_ctrl *ctrl, int argc, char *argv[]) argv[0], argv[1]); if (ret < 0 || ret >= end - pos) { printf("Too long PIN command.\n"); - return 0; + return -1; } pos += ret; for (i = 2; i < argc; i++) { ret = os_snprintf(pos, end - pos, " %s", argv[i]); if (ret < 0 || ret >= end - pos) { printf("Too long PIN command.\n"); - return 0; + return -1; } pos += ret; } @@ -569,7 +571,7 @@ static int wpa_cli_cmd_otp(struct wpa_ctrl *ctrl, int argc, char *argv[]) if (argc < 2) { printf("Invalid OTP command: needs two arguments (network " "id and password)\n"); - return 0; + return -1; } end = cmd + sizeof(cmd); @@ -578,14 +580,14 @@ static int wpa_cli_cmd_otp(struct wpa_ctrl *ctrl, int argc, char *argv[]) argv[0], argv[1]); if (ret < 0 || ret >= end - pos) { printf("Too long OTP command.\n"); - return 0; + return -1; } pos += ret; for (i = 2; i < argc; i++) { ret = os_snprintf(pos, end - pos, " %s", argv[i]); if (ret < 0 || ret >= end - pos) { printf("Too long OTP command.\n"); - return 0; + return -1; } pos += ret; } @@ -603,7 +605,7 @@ static int wpa_cli_cmd_passphrase(struct wpa_ctrl *ctrl, int argc, if (argc < 2) { printf("Invalid PASSPHRASE command: needs two arguments " "(network id and passphrase)\n"); - return 0; + return -1; } end = cmd + sizeof(cmd); @@ -612,14 +614,14 @@ static int wpa_cli_cmd_passphrase(struct wpa_ctrl *ctrl, int argc, argv[0], argv[1]); if (ret < 0 || ret >= end - pos) { printf("Too long PASSPHRASE command.\n"); - return 0; + return -1; } pos += ret; for (i = 2; i < argc; i++) { ret = os_snprintf(pos, end - pos, " %s", argv[i]); if (ret < 0 || ret >= end - pos) { printf("Too long PASSPHRASE command.\n"); - return 0; + return -1; } pos += ret; } @@ -636,7 +638,7 @@ static int wpa_cli_cmd_bssid(struct wpa_ctrl *ctrl, int argc, char *argv[]) if (argc < 2) { printf("Invalid BSSID command: needs two arguments (network " "id and BSSID)\n"); - return 0; + return -1; } end = cmd + sizeof(cmd); @@ -644,14 +646,14 @@ static int wpa_cli_cmd_bssid(struct wpa_ctrl *ctrl, int argc, char *argv[]) ret = os_snprintf(pos, end - pos, "BSSID"); if (ret < 0 || ret >= end - pos) { printf("Too long BSSID command.\n"); - return 0; + return -1; } pos += ret; for (i = 0; i < argc; i++) { ret = os_snprintf(pos, end - pos, " %s", argv[i]); if (ret < 0 || ret >= end - pos) { printf("Too long BSSID command.\n"); - return 0; + return -1; } pos += ret; } @@ -675,7 +677,7 @@ static int wpa_cli_cmd_select_network(struct wpa_ctrl *ctrl, int argc, if (argc < 1) { printf("Invalid SELECT_NETWORK command: needs one argument " "(network id)\n"); - return 0; + return -1; } os_snprintf(cmd, sizeof(cmd), "SELECT_NETWORK %s", argv[0]); @@ -693,7 +695,7 @@ static int wpa_cli_cmd_enable_network(struct wpa_ctrl *ctrl, int argc, if (argc < 1) { printf("Invalid ENABLE_NETWORK command: needs one argument " "(network id)\n"); - return 0; + return -1; } os_snprintf(cmd, sizeof(cmd), "ENABLE_NETWORK %s", argv[0]); @@ -711,7 +713,7 @@ static int wpa_cli_cmd_disable_network(struct wpa_ctrl *ctrl, int argc, if (argc < 1) { printf("Invalid DISABLE_NETWORK command: needs one argument " "(network id)\n"); - return 0; + return -1; } os_snprintf(cmd, sizeof(cmd), "DISABLE_NETWORK %s", argv[0]); @@ -736,7 +738,7 @@ static int wpa_cli_cmd_remove_network(struct wpa_ctrl *ctrl, int argc, if (argc < 1) { printf("Invalid REMOVE_NETWORK command: needs one argument " "(network id)\n"); - return 0; + return -1; } os_snprintf(cmd, sizeof(cmd), "REMOVE_NETWORK %s", argv[0]); @@ -781,14 +783,14 @@ static int wpa_cli_cmd_set_network(struct wpa_ctrl *ctrl, int argc, if (argc != 3) { printf("Invalid SET_NETWORK command: needs three arguments\n" "(network id, variable name, and value)\n"); - return 0; + return -1; } res = os_snprintf(cmd, sizeof(cmd), "SET_NETWORK %s %s %s", argv[0], argv[1], argv[2]); if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { printf("Too long SET_NETWORK command.\n"); - return 0; + return -1; } return wpa_ctrl_command(ctrl, cmd); } @@ -808,14 +810,14 @@ static int wpa_cli_cmd_get_network(struct wpa_ctrl *ctrl, int argc, if (argc != 2) { printf("Invalid GET_NETWORK command: needs two arguments\n" "(network id and variable name)\n"); - return 0; + return -1; } res = os_snprintf(cmd, sizeof(cmd), "GET_NETWORK %s %s", argv[0], argv[1]); if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { printf("Too long GET_NETWORK command.\n"); - return 0; + return -1; } return wpa_ctrl_command(ctrl, cmd); } @@ -828,6 +830,13 @@ static int wpa_cli_cmd_disconnect(struct wpa_ctrl *ctrl, int argc, } +static int wpa_cli_cmd_reconnect(struct wpa_ctrl *ctrl, int argc, + char *argv[]) +{ + return wpa_ctrl_command(ctrl, "RECONNECT"); +} + + static int wpa_cli_cmd_save_config(struct wpa_ctrl *ctrl, int argc, char *argv[]) { @@ -856,13 +865,13 @@ static int wpa_cli_cmd_get_capability(struct wpa_ctrl *ctrl, int argc, if (argc < 1 || argc > 2) { printf("Invalid GET_CAPABILITY command: need either one or " "two arguments\n"); - return 0; + return -1; } if ((argc == 2) && os_strcmp(argv[1], "strict") != 0) { printf("Invalid GET_CAPABILITY command: second argument, " "if any, must be 'strict'\n"); - return 0; + return -1; } os_snprintf(cmd, sizeof(cmd), "GET_CAPABILITY %s%s", argv[0], @@ -929,9 +938,9 @@ static int wpa_cli_cmd_interface_add(struct wpa_ctrl *ctrl, int argc, if (argc < 1) { printf("Invalid INTERFACE_ADD command: needs at least one " "argument (interface name)\n" - "All arguments: ifname confname driver ctrl_interface " - "driver_param bridge_name\n"); - return 0; + "All arguments: ifname confname driver ctrl_interface " + "driver_param bridge_name\n"); + return -1; } /* @@ -956,7 +965,7 @@ static int wpa_cli_cmd_interface_remove(struct wpa_ctrl *ctrl, int argc, if (argc != 1) { printf("Invalid INTERFACE_REMOVE command: needs one argument " "(interface name)\n"); - return 0; + return -1; } os_snprintf(cmd, sizeof(cmd), "INTERFACE_REMOVE %s", argv[0]); @@ -1002,6 +1011,7 @@ static struct wpa_cli_cmd wpa_cli_commands[] = { { "get_network", wpa_cli_cmd_get_network }, { "save_config", wpa_cli_cmd_save_config }, { "disconnect", wpa_cli_cmd_disconnect }, + { "reconnect", wpa_cli_cmd_reconnect }, { "scan", wpa_cli_cmd_scan }, { "scan_results", wpa_cli_cmd_scan_results }, { "get_capability", wpa_cli_cmd_get_capability }, @@ -1015,10 +1025,11 @@ static struct wpa_cli_cmd wpa_cli_commands[] = { }; -static void wpa_request(struct wpa_ctrl *ctrl, int argc, char *argv[]) +static int wpa_request(struct wpa_ctrl *ctrl, int argc, char *argv[]) { struct wpa_cli_cmd *cmd, *match = NULL; int count; + int ret = 0; count = 0; cmd = wpa_cli_commands; @@ -1047,11 +1058,15 @@ static void wpa_request(struct wpa_ctrl *ctrl, int argc, char *argv[]) cmd++; } printf("\n"); + ret = 1; } else if (count == 0) { printf("Unknown command '%s'\n", argv[0]); + ret = 1; } else { - match->handler(ctrl, argc - 1, &argv[1]); + ret = match->handler(ctrl, argc - 1, &argv[1]); } + + return ret; } @@ -1497,6 +1512,7 @@ int main(int argc, char *argv[]) int warning_displayed = 0; int c; int daemonize = 0; + int ret = 0; const char *global = NULL; if (os_program_init()) @@ -1608,12 +1624,12 @@ int main(int argc, char *argv[]) else if (action_file) wpa_cli_action(ctrl_conn); else - wpa_request(ctrl_conn, argc - optind, &argv[optind]); + ret = wpa_request(ctrl_conn, argc - optind, &argv[optind]); os_free(ctrl_ifname); wpa_cli_cleanup(); - return 0; + return ret; } #else /* CONFIG_CTRL_IFACE */ |