HS 2.0: Allow printf format parsing with language:name strings
authorKyeyoon Park <kyeyoonp@qca.qualcomm.com>
Wed, 25 Sep 2013 10:03:16 +0000 (13:03 +0300)
committerJouni Malinen <j@w1.fi>
Wed, 25 Sep 2013 11:43:40 +0000 (14:43 +0300)
This allows Hotspot 2.0 and Interworking strings that use language:name
string (e.g., venue_name) to be encoded using printf format to enter
special characters like newline.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>

hostapd/config_file.c
hostapd/hostapd.conf

index 49b6a41..dc68fc8 100644 (file)
@@ -1289,26 +1289,34 @@ static int parse_roaming_consortium(struct hostapd_bss_config *bss, char *pos,
 static int parse_lang_string(struct hostapd_lang_string **array,
                             unsigned int *count, char *pos)
 {
-       char *sep;
-       size_t clen, nlen;
+       char *sep, *str = NULL;
+       size_t clen, nlen, slen;
        struct hostapd_lang_string *ls;
+       int ret = -1;
+
+       if (*pos == '"' || (*pos == 'P' && pos[1] == '"')) {
+               str = wpa_config_parse_string(pos, &slen);
+               if (!str)
+                       return -1;
+               pos = str;
+       }
 
        sep = os_strchr(pos, ':');
        if (sep == NULL)
-               return -1;
+               goto fail;
        *sep++ = '\0';
 
        clen = os_strlen(pos);
        if (clen < 2 || clen > sizeof(ls->lang))
-               return -1;
+               goto fail;
        nlen = os_strlen(sep);
        if (nlen > 252)
-               return -1;
+               goto fail;
 
        ls = os_realloc_array(*array, *count + 1,
                              sizeof(struct hostapd_lang_string));
        if (ls == NULL)
-               return -1;
+               goto fail;
 
        *array = ls;
        ls = &(*array)[*count];
@@ -1319,7 +1327,10 @@ static int parse_lang_string(struct hostapd_lang_string **array,
        ls->name_len = nlen;
        os_memcpy(ls->name, sep, nlen);
 
-       return 0;
+       ret = 0;
+fail:
+       os_free(str);
+       return ret;
 }
 
 
index 45897ed..de1bf75 100644 (file)
@@ -1457,6 +1457,9 @@ own_ip_addr=127.0.0.1
 # information to be complete.
 #venue_name=eng:Example venue
 #venue_name=fin:Esimerkkipaikka
+# Alternative format for language:value strings:
+# (double quoted string, printf-escaped string)
+#venue_name=P"eng:Example\nvenue"
 
 # Network Authentication Type
 # This parameter indicates what type of network authentication is used in the