From b9eb717f85fbca320b9782cfbce56ba7af28c5e2 Mon Sep 17 00:00:00 2001 From: Hagai Moshe Date: Thu, 12 Jul 2018 18:35:51 +0300 Subject: [PATCH] wpa_cli: Add command for setting PSK_PASSPHRASE Setting mem_only_psk=1 in the wpa_supplicant configuration prevents the passphrase from being stored in the configuration file. wpa_supplicant will request the PSK passphrase over the control interface in such case and this new wpa_cli command can be used to set the psk_passphrase. usage: psk_passphrase Signed-off-by: Hagai Moshe Signed-off-by: Simon Dinkin --- wpa_supplicant/wpa_cli.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/wpa_supplicant/wpa_cli.c b/wpa_supplicant/wpa_cli.c index 2f425a8cf..9881021c2 100644 --- a/wpa_supplicant/wpa_cli.c +++ b/wpa_supplicant/wpa_cli.c @@ -1205,6 +1205,39 @@ static int wpa_cli_cmd_sim(struct wpa_ctrl *ctrl, int argc, char *argv[]) } +static int wpa_cli_cmd_psk_passphrase(struct wpa_ctrl *ctrl, int argc, + char *argv[]) +{ + char cmd[256], *pos, *end; + int i, ret; + + if (argc < 2) { + printf("Invalid PSK_PASSPHRASE command: needs two arguments (network id and PSK/passphrase)\n"); + return -1; + } + + end = cmd + sizeof(cmd); + pos = cmd; + ret = os_snprintf(pos, end - pos, WPA_CTRL_RSP "PSK_PASSPHRASE-%s:%s", + argv[0], argv[1]); + if (os_snprintf_error(end - pos, ret)) { + printf("Too long PSK_PASSPHRASE command.\n"); + return -1; + } + pos += ret; + for (i = 2; i < argc; i++) { + ret = os_snprintf(pos, end - pos, " %s", argv[i]); + if (os_snprintf_error(end - pos, ret)) { + printf("Too long PSK_PASSPHRASE command.\n"); + return -1; + } + pos += ret; + } + + return wpa_ctrl_command(ctrl, cmd); +} + + static int wpa_cli_cmd_passphrase(struct wpa_ctrl *ctrl, int argc, char *argv[]) { @@ -3095,6 +3128,9 @@ static const struct wpa_cli_cmd wpa_cli_commands[] = { cli_cmd_flag_sensitive, " = configure one-time-password for an SSID" }, + { "psk_passphrase", wpa_cli_cmd_psk_passphrase, + wpa_cli_complete_network_id, cli_cmd_flag_sensitive, + " = configure PSK/passphrase for an SSID" }, { "passphrase", wpa_cli_cmd_passphrase, wpa_cli_complete_network_id, cli_cmd_flag_sensitive, " = configure private key passphrase\n"