From: Heiko Hund Date: Tue, 20 May 2025 08:55:06 +0000 (+0200) Subject: win: fix collecting DNS exclude data X-Git-Tag: v2.7_alpha1~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=21c8f820d15e7891b042d33cdd989316ed987dab;p=thirdparty%2Fopenvpn.git win: fix collecting DNS exclude data The size of the returned MULTI_SZ wide domains string was calculated wrongly. Instead of adding the size of a WCHAR, only the size of a char was used. As a result, the domains string was stored too short and was missing the final string terminator. DHCP assigned DNS server addresses are separated by space, not comma. These spaces were not replaced by semicolon, as the spec requires. Github: fixes OpenVPN/openvpn#747 Change-Id: Ie3fcd845344fd0c3ce9a2f99612fb19fe5ebb2f1 Signed-off-by: Heiko Hund Acked-by: Lev Stipakov Message-Id: <20250520085513.28213-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg31727.html Signed-off-by: Gert Doering --- diff --git a/src/openvpnserv/interactive.c b/src/openvpnserv/interactive.c index a1581a66..6681b7ca 100644 --- a/src/openvpnserv/interactive.c +++ b/src/openvpnserv/interactive.c @@ -2226,7 +2226,7 @@ GetItfDnsDomains(HKEY itf, PCWSTR search_domains, PWSTR domains, PDWORD size) { /* This was the last domain */ *pos = '\0'; - *size += 1; + *size += one_glyph; return wcslen(domains) ? NO_ERROR : ERROR_FILE_NOT_FOUND; } } @@ -2248,13 +2248,13 @@ GetItfDnsDomains(HKEY itf, PCWSTR search_domains, PWSTR domains, PDWORD size) memmove(pos + 1, pos, buf_size - converted_size - one_glyph); domains[buf_len - 1] = '\0'; *pos = '.'; - *size += 1; + *size += one_glyph; if (!comma) { /* Conversion is done */ *(pos + domain_len) = '\0'; - *size += 1; + *size += one_glyph; return NO_ERROR; } @@ -2409,10 +2409,10 @@ GetNrptExcludeData(PCWSTR search_domains, nrpt_exclude_data_t *data, size_t data if (v4_addrs_size || v6_addrs_size) { - /* Replace comma-delimters with semicolons, as required by NRPT */ + /* Replace delimiters with semicolons, as required by NRPT */ for (int j = 0; j < sizeof(data[0].addresses) && data[i].addresses[j]; j++) { - if (data[i].addresses[j] == ',') + if (data[i].addresses[j] == ',' || data[i].addresses[j] == ' ') { data[i].addresses[j] = ';'; }