42
value = os_strchr(cmd, ' ');
42
value = strchr(cmd, ' ');
47
47
wpa_printf(MSG_DEBUG, "CTRL_IFACE SET '%s'='%s'", cmd, value);
48
if (os_strcasecmp(cmd, "EAPOL::heldPeriod") == 0) {
48
if (strcasecmp(cmd, "EAPOL::heldPeriod") == 0) {
49
49
eapol_sm_configure(wpa_s->eapol,
50
50
atoi(value), -1, -1, -1);
51
} else if (os_strcasecmp(cmd, "EAPOL::authPeriod") == 0) {
51
} else if (strcasecmp(cmd, "EAPOL::authPeriod") == 0) {
52
52
eapol_sm_configure(wpa_s->eapol,
53
53
-1, atoi(value), -1, -1);
54
} else if (os_strcasecmp(cmd, "EAPOL::startPeriod") == 0) {
54
} else if (strcasecmp(cmd, "EAPOL::startPeriod") == 0) {
55
55
eapol_sm_configure(wpa_s->eapol,
56
56
-1, -1, atoi(value), -1);
57
} else if (os_strcasecmp(cmd, "EAPOL::maxStart") == 0) {
57
} else if (strcasecmp(cmd, "EAPOL::maxStart") == 0) {
58
58
eapol_sm_configure(wpa_s->eapol,
59
59
-1, -1, -1, atoi(value));
60
} else if (os_strcasecmp(cmd, "dot11RSNAConfigPMKLifetime") == 0) {
60
} else if (strcasecmp(cmd, "dot11RSNAConfigPMKLifetime") == 0) {
61
61
if (wpa_sm_set_param(wpa_s->wpa, RSNA_PMK_LIFETIME,
64
} else if (os_strcasecmp(cmd, "dot11RSNAConfigPMKReauthThreshold") ==
64
} else if (strcasecmp(cmd, "dot11RSNAConfigPMKReauthThreshold") == 0) {
66
65
if (wpa_sm_set_param(wpa_s->wpa, RSNA_PMK_REAUTH_THRESHOLD,
69
} else if (os_strcasecmp(cmd, "dot11RSNAConfigSATimeout") == 0) {
68
} else if (strcasecmp(cmd, "dot11RSNAConfigSATimeout") == 0) {
70
69
if (wpa_sm_set_param(wpa_s->wpa, RSNA_SA_TIMEOUT, atoi(value)))
149
if (os_strcmp(rsp, "IDENTITY") == 0) {
150
os_free(ssid->identity);
151
ssid->identity = (u8 *) os_strdup(pos);
152
ssid->identity_len = os_strlen(pos);
168
if (strcmp(rsp, "IDENTITY") == 0) {
169
free(ssid->identity);
170
ssid->identity = (u8 *) strdup(pos);
171
ssid->identity_len = strlen(pos);
153
172
ssid->pending_req_identity = 0;
154
173
if (ssid == wpa_s->current_ssid)
155
174
wpa_s->reassociate = 1;
156
} else if (os_strcmp(rsp, "PASSWORD") == 0) {
157
os_free(ssid->password);
158
ssid->password = (u8 *) os_strdup(pos);
159
ssid->password_len = os_strlen(pos);
175
} else if (strcmp(rsp, "PASSWORD") == 0) {
176
free(ssid->password);
177
ssid->password = (u8 *) strdup(pos);
178
ssid->password_len = strlen(pos);
160
179
ssid->pending_req_password = 0;
161
180
if (ssid == wpa_s->current_ssid)
162
181
wpa_s->reassociate = 1;
163
} else if (os_strcmp(rsp, "NEW_PASSWORD") == 0) {
164
os_free(ssid->new_password);
165
ssid->new_password = (u8 *) os_strdup(pos);
166
ssid->new_password_len = os_strlen(pos);
182
} else if (strcmp(rsp, "NEW_PASSWORD") == 0) {
183
free(ssid->new_password);
184
ssid->new_password = (u8 *) strdup(pos);
185
ssid->new_password_len = strlen(pos);
167
186
ssid->pending_req_new_password = 0;
168
187
if (ssid == wpa_s->current_ssid)
169
188
wpa_s->reassociate = 1;
170
} else if (os_strcmp(rsp, "PIN") == 0) {
172
ssid->pin = os_strdup(pos);
189
} else if (strcmp(rsp, "PIN") == 0) {
191
ssid->pin = strdup(pos);
173
192
ssid->pending_req_pin = 0;
174
193
if (ssid == wpa_s->current_ssid)
175
194
wpa_s->reassociate = 1;
176
} else if (os_strcmp(rsp, "OTP") == 0) {
178
ssid->otp = (u8 *) os_strdup(pos);
179
ssid->otp_len = os_strlen(pos);
180
os_free(ssid->pending_req_otp);
195
} else if (strcmp(rsp, "OTP") == 0) {
197
ssid->otp = (u8 *) strdup(pos);
198
ssid->otp_len = strlen(pos);
199
free(ssid->pending_req_otp);
181
200
ssid->pending_req_otp = NULL;
182
201
ssid->pending_req_otp_len = 0;
183
} else if (os_strcmp(rsp, "PASSPHRASE") == 0) {
184
os_free(ssid->private_key_passwd);
185
ssid->private_key_passwd = (u8 *) os_strdup(pos);
202
} else if (strcmp(rsp, "PASSPHRASE") == 0) {
203
free(ssid->private_key_passwd);
204
ssid->private_key_passwd = (u8 *) strdup(pos);
186
205
ssid->pending_req_passphrase = 0;
187
206
if (ssid == wpa_s->current_ssid)
188
207
wpa_s->reassociate = 1;
324
342
end = buf + buflen;
325
ret = os_snprintf(pos, end - pos,
326
"network id / ssid / bssid / flags\n");
343
ret = snprintf(pos, end - pos, "network id / ssid / bssid / flags\n");
327
344
if (ret < 0 || ret >= end - pos)
328
345
return pos - buf;
331
348
ssid = wpa_s->conf->ssid;
333
ret = os_snprintf(pos, end - pos, "%d\t%s",
335
wpa_ssid_txt(ssid->ssid, ssid->ssid_len));
350
ret = snprintf(pos, end - pos, "%d\t%s",
352
wpa_ssid_txt(ssid->ssid, ssid->ssid_len));
336
353
if (ret < 0 || ret >= end - pos)
337
354
return pos - buf;
339
356
if (ssid->bssid_set) {
340
ret = os_snprintf(pos, end - pos, "\t" MACSTR,
341
MAC2STR(ssid->bssid));
357
ret = snprintf(pos, end - pos, "\t" MACSTR,
358
MAC2STR(ssid->bssid));
343
ret = os_snprintf(pos, end - pos, "\tany");
360
ret = snprintf(pos, end - pos, "\tany");
345
362
if (ret < 0 || ret >= end - pos)
346
363
return pos - buf;
348
ret = os_snprintf(pos, end - pos, "\t%s%s",
349
ssid == wpa_s->current_ssid ?
351
ssid->disabled ? "[DISABLED]" : "");
365
ret = snprintf(pos, end - pos, "\t%s%s",
366
ssid == wpa_s->current_ssid ? "[CURRENT]" : "",
367
ssid->disabled ? "[DISABLED]" : "");
352
368
if (ret < 0 || ret >= end - pos)
353
369
return pos - buf;
355
ret = os_snprintf(pos, end - pos, "\n");
371
ret = snprintf(pos, end - pos, "\n");
356
372
if (ret < 0 || ret >= end - pos)
357
373
return pos - buf;
367
383
static char * wpa_supplicant_cipher_txt(char *pos, char *end, int cipher)
369
385
int first = 1, ret;
370
ret = os_snprintf(pos, end - pos, "-");
386
ret = snprintf(pos, end - pos, "-");
371
387
if (ret < 0 || ret >= end - pos)
374
390
if (cipher & WPA_CIPHER_NONE) {
375
ret = os_snprintf(pos, end - pos, "%sNONE", first ? "" : "+");
391
ret = snprintf(pos, end - pos, "%sNONE", first ? "" : "+");
376
392
if (ret < 0 || ret >= end - pos)
381
397
if (cipher & WPA_CIPHER_WEP40) {
382
ret = os_snprintf(pos, end - pos, "%sWEP40", first ? "" : "+");
398
ret = snprintf(pos, end - pos, "%sWEP40", first ? "" : "+");
383
399
if (ret < 0 || ret >= end - pos)
388
404
if (cipher & WPA_CIPHER_WEP104) {
389
ret = os_snprintf(pos, end - pos, "%sWEP104",
405
ret = snprintf(pos, end - pos, "%sWEP104", first ? "" : "+");
391
406
if (ret < 0 || ret >= end - pos)
396
411
if (cipher & WPA_CIPHER_TKIP) {
397
ret = os_snprintf(pos, end - pos, "%sTKIP", first ? "" : "+");
412
ret = snprintf(pos, end - pos, "%sTKIP", first ? "" : "+");
398
413
if (ret < 0 || ret >= end - pos)
403
418
if (cipher & WPA_CIPHER_CCMP) {
404
ret = os_snprintf(pos, end - pos, "%sCCMP", first ? "" : "+");
419
ret = snprintf(pos, end - pos, "%sCCMP", first ? "" : "+");
405
420
if (ret < 0 || ret >= end - pos)
1072
1070
int ctrl_rsp = 0;
1075
if (os_strncmp(buf, WPA_CTRL_RSP, os_strlen(WPA_CTRL_RSP)) == 0 ||
1076
os_strncmp(buf, "SET_NETWORK ", 12) == 0) {
1073
if (strncmp(buf, WPA_CTRL_RSP, strlen(WPA_CTRL_RSP)) == 0 ||
1074
strncmp(buf, "SET_NETWORK ", 12) == 0) {
1077
1075
wpa_hexdump_ascii_key(MSG_DEBUG, "RX ctrl_iface",
1078
(const u8 *) buf, os_strlen(buf));
1076
(const u8 *) buf, strlen(buf));
1080
1078
wpa_hexdump_ascii(MSG_DEBUG, "RX ctrl_iface",
1081
(const u8 *) buf, os_strlen(buf));
1079
(const u8 *) buf, strlen(buf));
1084
reply = os_malloc(reply_size);
1082
reply = malloc(reply_size);
1085
1083
if (reply == NULL) {
1090
os_memcpy(reply, "OK\n", 3);
1088
memcpy(reply, "OK\n", 3);
1093
if (os_strcmp(buf, "PING") == 0) {
1094
os_memcpy(reply, "PONG\n", 5);
1091
if (strcmp(buf, "PING") == 0) {
1092
memcpy(reply, "PONG\n", 5);
1096
} else if (os_strcmp(buf, "MIB") == 0) {
1094
} else if (strcmp(buf, "MIB") == 0) {
1097
1095
reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size);
1098
1096
if (reply_len >= 0) {
1105
1103
reply_len += res;
1107
} else if (os_strncmp(buf, "STATUS", 6) == 0) {
1105
} else if (strncmp(buf, "STATUS", 6) == 0) {
1108
1106
reply_len = wpa_supplicant_ctrl_iface_status(
1109
1107
wpa_s, buf + 6, reply, reply_size);
1110
} else if (os_strcmp(buf, "PMKSA") == 0) {
1108
} else if (strcmp(buf, "PMKSA") == 0) {
1111
1109
reply_len = pmksa_cache_list(wpa_s->wpa, reply, reply_size);
1112
} else if (os_strncmp(buf, "SET ", 4) == 0) {
1110
} else if (strncmp(buf, "SET ", 4) == 0) {
1113
1111
if (wpa_supplicant_ctrl_iface_set(wpa_s, buf + 4))
1114
1112
reply_len = -1;
1115
} else if (os_strcmp(buf, "LOGON") == 0) {
1113
} else if (strcmp(buf, "LOGON") == 0) {
1116
1114
eapol_sm_notify_logoff(wpa_s->eapol, FALSE);
1117
} else if (os_strcmp(buf, "LOGOFF") == 0) {
1115
} else if (strcmp(buf, "LOGOFF") == 0) {
1118
1116
eapol_sm_notify_logoff(wpa_s->eapol, TRUE);
1119
} else if (os_strcmp(buf, "REASSOCIATE") == 0) {
1117
} else if (strcmp(buf, "REASSOCIATE") == 0) {
1120
1118
wpa_s->disconnected = 0;
1121
1119
wpa_s->reassociate = 1;
1122
1120
wpa_supplicant_req_scan(wpa_s, 0, 0);
1123
} else if (os_strncmp(buf, "PREAUTH ", 8) == 0) {
1121
} else if (strncmp(buf, "PREAUTH ", 8) == 0) {
1124
1122
if (wpa_supplicant_ctrl_iface_preauth(wpa_s, buf + 8))
1125
1123
reply_len = -1;
1124
#ifdef CONFIG_STAKEY
1125
} else if (strncmp(buf, "STAKEY-REQUEST ", 15) == 0) {
1126
if (wpa_supplicant_ctrl_iface_stakey_request(wpa_s, buf + 15))
1128
#endif /* CONFIG_STAKEY */
1126
1129
#ifdef CONFIG_PEERKEY
1127
} else if (os_strncmp(buf, "STKSTART ", 9) == 0) {
1130
} else if (strncmp(buf, "STKSTART ", 9) == 0) {
1128
1131
if (wpa_supplicant_ctrl_iface_stkstart(wpa_s, buf + 9))
1129
1132
reply_len = -1;
1130
1133
#endif /* CONFIG_PEERKEY */
1131
} else if (os_strncmp(buf, WPA_CTRL_RSP, os_strlen(WPA_CTRL_RSP)) == 0)
1134
} else if (strncmp(buf, WPA_CTRL_RSP, strlen(WPA_CTRL_RSP)) == 0) {
1133
1135
if (wpa_supplicant_ctrl_iface_ctrl_rsp(
1134
wpa_s, buf + os_strlen(WPA_CTRL_RSP)))
1136
wpa_s, buf + strlen(WPA_CTRL_RSP)))
1135
1137
reply_len = -1;
1138
} else if (os_strcmp(buf, "RECONFIGURE") == 0) {
1140
} else if (strcmp(buf, "RECONFIGURE") == 0) {
1139
1141
if (wpa_supplicant_reload_configuration(wpa_s))
1140
1142
reply_len = -1;
1141
} else if (os_strcmp(buf, "TERMINATE") == 0) {
1143
} else if (strcmp(buf, "TERMINATE") == 0) {
1142
1144
eloop_terminate();
1143
} else if (os_strncmp(buf, "BSSID ", 6) == 0) {
1145
} else if (strncmp(buf, "BSSID ", 6) == 0) {
1144
1146
if (wpa_supplicant_ctrl_iface_bssid(wpa_s, buf + 6))
1145
1147
reply_len = -1;
1146
} else if (os_strcmp(buf, "LIST_NETWORKS") == 0) {
1148
} else if (strcmp(buf, "LIST_NETWORKS") == 0) {
1147
1149
reply_len = wpa_supplicant_ctrl_iface_list_networks(
1148
1150
wpa_s, reply, reply_size);
1149
} else if (os_strcmp(buf, "DISCONNECT") == 0) {
1151
} else if (strcmp(buf, "DISCONNECT") == 0) {
1150
1152
wpa_s->disconnected = 1;
1151
1153
wpa_supplicant_disassociate(wpa_s, REASON_DEAUTH_LEAVING);
1152
} else if (os_strcmp(buf, "SCAN") == 0) {
1154
} else if (strcmp(buf, "SCAN") == 0) {
1153
1155
wpa_s->scan_req = 2;
1154
1156
wpa_supplicant_req_scan(wpa_s, 0, 0);
1155
} else if (os_strcmp(buf, "SCAN_RESULTS") == 0) {
1157
} else if (strcmp(buf, "SCAN_RESULTS") == 0) {
1156
1158
reply_len = wpa_supplicant_ctrl_iface_scan_results(
1157
1159
wpa_s, reply, reply_size);
1158
} else if (os_strncmp(buf, "SELECT_NETWORK ", 15) == 0) {
1160
} else if (strncmp(buf, "SELECT_NETWORK ", 15) == 0) {
1159
1161
if (wpa_supplicant_ctrl_iface_select_network(wpa_s, buf + 15))
1160
1162
reply_len = -1;
1161
} else if (os_strncmp(buf, "ENABLE_NETWORK ", 15) == 0) {
1163
} else if (strncmp(buf, "ENABLE_NETWORK ", 15) == 0) {
1162
1164
if (wpa_supplicant_ctrl_iface_enable_network(wpa_s, buf + 15))
1163
1165
reply_len = -1;
1164
} else if (os_strncmp(buf, "DISABLE_NETWORK ", 16) == 0) {
1166
} else if (strncmp(buf, "DISABLE_NETWORK ", 16) == 0) {
1165
1167
if (wpa_supplicant_ctrl_iface_disable_network(wpa_s, buf + 16))
1166
1168
reply_len = -1;
1167
} else if (os_strcmp(buf, "ADD_NETWORK") == 0) {
1169
} else if (strcmp(buf, "ADD_NETWORK") == 0) {
1168
1170
reply_len = wpa_supplicant_ctrl_iface_add_network(
1169
1171
wpa_s, reply, reply_size);
1170
} else if (os_strncmp(buf, "REMOVE_NETWORK ", 15) == 0) {
1172
} else if (strncmp(buf, "REMOVE_NETWORK ", 15) == 0) {
1171
1173
if (wpa_supplicant_ctrl_iface_remove_network(wpa_s, buf + 15))
1172
1174
reply_len = -1;
1173
} else if (os_strncmp(buf, "SET_NETWORK ", 12) == 0) {
1175
} else if (strncmp(buf, "SET_NETWORK ", 12) == 0) {
1174
1176
if (wpa_supplicant_ctrl_iface_set_network(wpa_s, buf + 12))
1175
1177
reply_len = -1;
1176
} else if (os_strncmp(buf, "GET_NETWORK ", 12) == 0) {
1178
} else if (strncmp(buf, "GET_NETWORK ", 12) == 0) {
1177
1179
reply_len = wpa_supplicant_ctrl_iface_get_network(
1178
1180
wpa_s, buf + 12, reply, reply_size);
1179
} else if (os_strcmp(buf, "SAVE_CONFIG") == 0) {
1181
} else if (strcmp(buf, "SAVE_CONFIG") == 0) {
1180
1182
if (wpa_supplicant_ctrl_iface_save_config(wpa_s))
1181
1183
reply_len = -1;
1182
} else if (os_strncmp(buf, "GET_CAPABILITY ", 15) == 0) {
1184
} else if (strncmp(buf, "GET_CAPABILITY ", 15) == 0) {
1183
1185
reply_len = wpa_supplicant_ctrl_iface_get_capability(
1184
1186
wpa_s, buf + 15, reply, reply_size);
1185
} else if (os_strncmp(buf, "AP_SCAN ", 8) == 0) {
1187
} else if (strncmp(buf, "AP_SCAN ", 8) == 0) {
1186
1188
if (wpa_supplicant_ctrl_iface_ap_scan(wpa_s, buf + 8))
1187
1189
reply_len = -1;
1188
} else if (os_strcmp(buf, "INTERFACES") == 0) {
1190
} else if (strcmp(buf, "INTERFACES") == 0) {
1189
1191
reply_len = wpa_supplicant_global_iface_interfaces(
1190
1192
wpa_s->global, reply, reply_size);
1192
os_memcpy(reply, "UNKNOWN COMMAND\n", 16);
1194
memcpy(reply, "UNKNOWN COMMAND\n", 16);
1193
1195
reply_len = 16;
1196
1198
if (reply_len < 0) {
1197
os_memcpy(reply, "FAIL\n", 5);
1199
memcpy(reply, "FAIL\n", 5);
1331
1333
wpa_hexdump_ascii(MSG_DEBUG, "RX global ctrl_iface",
1332
(const u8 *) buf, os_strlen(buf));
1334
(const u8 *) buf, strlen(buf));
1334
reply = os_malloc(reply_size);
1336
reply = malloc(reply_size);
1335
1337
if (reply == NULL) {
1340
os_memcpy(reply, "OK\n", 3);
1342
memcpy(reply, "OK\n", 3);
1343
if (os_strcmp(buf, "PING") == 0) {
1344
os_memcpy(reply, "PONG\n", 5);
1345
if (strcmp(buf, "PING") == 0) {
1346
memcpy(reply, "PONG\n", 5);
1346
} else if (os_strncmp(buf, "INTERFACE_ADD ", 14) == 0) {
1348
} else if (strncmp(buf, "INTERFACE_ADD ", 14) == 0) {
1347
1349
if (wpa_supplicant_global_iface_add(global, buf + 14))
1348
1350
reply_len = -1;
1349
} else if (os_strncmp(buf, "INTERFACE_REMOVE ", 17) == 0) {
1351
} else if (strncmp(buf, "INTERFACE_REMOVE ", 17) == 0) {
1350
1352
if (wpa_supplicant_global_iface_remove(global, buf + 17))
1351
1353
reply_len = -1;
1352
} else if (os_strcmp(buf, "INTERFACES") == 0) {
1354
} else if (strcmp(buf, "INTERFACES") == 0) {
1353
1355
reply_len = wpa_supplicant_global_iface_interfaces(
1354
1356
global, reply, reply_size);
1355
} else if (os_strcmp(buf, "TERMINATE") == 0) {
1358
os_memcpy(reply, "UNKNOWN COMMAND\n", 16);
1358
memcpy(reply, "UNKNOWN COMMAND\n", 16);
1359
1359
reply_len = 16;
1362
1362
if (reply_len < 0) {
1363
os_memcpy(reply, "FAIL\n", 5);
1363
memcpy(reply, "FAIL\n", 5);