hostapd: Add alternative format for configuring SSID
The new ssid2 parameter can be used as an alternative mechanism for configuring SSID for hostapd. It uses the same formats that wpa_supplicant uses in the configuration file for strings. Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
b87d70c88a
commit
e122bb70b8
6 changed files with 44 additions and 16 deletions
|
@ -1472,6 +1472,20 @@ static int hostapd_config_fill(struct hostapd_config *conf,
|
||||||
bss->ssid.ssid_len);
|
bss->ssid.ssid_len);
|
||||||
bss->ssid.ssid_set = 1;
|
bss->ssid.ssid_set = 1;
|
||||||
}
|
}
|
||||||
|
} else if (os_strcmp(buf, "ssid2") == 0) {
|
||||||
|
size_t slen;
|
||||||
|
char *str = wpa_config_parse_string(pos, &slen);
|
||||||
|
if (str == NULL || slen < 1 ||
|
||||||
|
slen > HOSTAPD_MAX_SSID_LEN) {
|
||||||
|
wpa_printf(MSG_ERROR, "Line %d: invalid SSID "
|
||||||
|
"'%s'", line, pos);
|
||||||
|
errors++;
|
||||||
|
} else {
|
||||||
|
os_memcpy(bss->ssid.ssid, str, slen);
|
||||||
|
bss->ssid.ssid_len = slen;
|
||||||
|
bss->ssid.ssid_set = 1;
|
||||||
|
}
|
||||||
|
os_free(str);
|
||||||
} else if (os_strcmp(buf, "macaddr_acl") == 0) {
|
} else if (os_strcmp(buf, "macaddr_acl") == 0) {
|
||||||
bss->macaddr_acl = atoi(pos);
|
bss->macaddr_acl = atoi(pos);
|
||||||
if (bss->macaddr_acl != ACCEPT_UNLESS_DENIED &&
|
if (bss->macaddr_acl != ACCEPT_UNLESS_DENIED &&
|
||||||
|
|
|
@ -84,6 +84,11 @@ ctrl_interface_group=0
|
||||||
|
|
||||||
# SSID to be used in IEEE 802.11 management frames
|
# SSID to be used in IEEE 802.11 management frames
|
||||||
ssid=test
|
ssid=test
|
||||||
|
# Alternative formats for configuring SSID
|
||||||
|
# (double quoted string, hexdump, printf-escaped string)
|
||||||
|
#ssid2="test"
|
||||||
|
#ssid2=74657374
|
||||||
|
#ssid2=P"hello\nthere"
|
||||||
|
|
||||||
# Country code (ISO/IEC 3166-1). Used to set regulatory domain.
|
# Country code (ISO/IEC 3166-1). Used to set regulatory domain.
|
||||||
# Set as needed to indicate country in which device is operating.
|
# Set as needed to indicate country in which device is operating.
|
||||||
|
|
|
@ -371,10 +371,17 @@ static int hapd_wps_cred_cb(struct hostapd_data *hapd, void *ctx)
|
||||||
|
|
||||||
fprintf(nconf, "wps_state=2\n");
|
fprintf(nconf, "wps_state=2\n");
|
||||||
|
|
||||||
|
if (is_hex(cred->ssid, cred->ssid_len)) {
|
||||||
|
fprintf(nconf, "ssid2=");
|
||||||
|
for (i = 0; i < cred->ssid_len; i++)
|
||||||
|
fprintf(nconf, "%02x", cred->ssid[i]);
|
||||||
|
fprintf(nconf, "\n");
|
||||||
|
} else {
|
||||||
fprintf(nconf, "ssid=");
|
fprintf(nconf, "ssid=");
|
||||||
for (i = 0; i < cred->ssid_len; i++)
|
for (i = 0; i < cred->ssid_len; i++)
|
||||||
fputc(cred->ssid[i], nconf);
|
fputc(cred->ssid[i], nconf);
|
||||||
fprintf(nconf, "\n");
|
fprintf(nconf, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
if ((cred->auth_type & (WPS_AUTH_WPA2 | WPS_AUTH_WPA2PSK)) &&
|
if ((cred->auth_type & (WPS_AUTH_WPA2 | WPS_AUTH_WPA2PSK)) &&
|
||||||
(cred->auth_type & (WPS_AUTH_WPA | WPS_AUTH_WPAPSK)))
|
(cred->auth_type & (WPS_AUTH_WPA | WPS_AUTH_WPAPSK)))
|
||||||
|
@ -464,6 +471,7 @@ static int hapd_wps_cred_cb(struct hostapd_data *hapd, void *ctx)
|
||||||
multi_bss = 1;
|
multi_bss = 1;
|
||||||
if (!multi_bss &&
|
if (!multi_bss &&
|
||||||
(str_starts(buf, "ssid=") ||
|
(str_starts(buf, "ssid=") ||
|
||||||
|
str_starts(buf, "ssid2=") ||
|
||||||
str_starts(buf, "auth_algs=") ||
|
str_starts(buf, "auth_algs=") ||
|
||||||
str_starts(buf, "wep_default_key=") ||
|
str_starts(buf, "wep_default_key=") ||
|
||||||
str_starts(buf, "wep_key") ||
|
str_starts(buf, "wep_key") ||
|
||||||
|
|
|
@ -566,3 +566,15 @@ char * wpa_config_parse_string(const char *value, size_t *len)
|
||||||
return (char *) str;
|
return (char *) str;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int is_hex(const u8 *data, size_t len)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
if (data[i] < 32 || data[i] >= 127)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -447,6 +447,7 @@ size_t printf_decode(u8 *buf, size_t maxlen, const char *str);
|
||||||
const char * wpa_ssid_txt(const u8 *ssid, size_t ssid_len);
|
const char * wpa_ssid_txt(const u8 *ssid, size_t ssid_len);
|
||||||
|
|
||||||
char * wpa_config_parse_string(const char *value, size_t *len);
|
char * wpa_config_parse_string(const char *value, size_t *len);
|
||||||
|
int is_hex(const u8 *data, size_t len);
|
||||||
|
|
||||||
static inline int is_zero_ether_addr(const u8 *a)
|
static inline int is_zero_ether_addr(const u8 *a)
|
||||||
{
|
{
|
||||||
|
|
|
@ -113,18 +113,6 @@ set:
|
||||||
|
|
||||||
|
|
||||||
#ifndef NO_CONFIG_WRITE
|
#ifndef NO_CONFIG_WRITE
|
||||||
static int is_hex(const u8 *data, size_t len)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
|
|
||||||
for (i = 0; i < len; i++) {
|
|
||||||
if (data[i] < 32 || data[i] >= 127)
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static char * wpa_config_write_string_ascii(const u8 *value, size_t len)
|
static char * wpa_config_write_string_ascii(const u8 *value, size_t len)
|
||||||
{
|
{
|
||||||
char *buf;
|
char *buf;
|
||||||
|
|
Loading…
Reference in a new issue