diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2018-12-11 20:58:27 +0100 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2018-12-11 14:14:40 -0600 |
commit | 1749018577d43ff8b3bf0fe565a4814e1d84de88 (patch) | |
tree | 0478d6ebd176525817111cd290265211c4e5758b /drivers/qmimodem | |
parent | 2680a41bd326843be17c7a90028137b945e3946d (diff) | |
download | ofono-1749018577d43ff8b3bf0fe565a4814e1d84de88.tar.gz |
qmi: Fix Secondary DNS overwriting Primary DNS
inet_ntoa was called twice in a row and as a result both primay and
secondary DNS were pointing to same static buffer containing last
value (secondary DNS).
As a result, ofono always advertised the secondary DNS twice through
DBus ConnectionContext.GetProperties 'DomainNameServers'.
Related: https://osmocom.org/issues/3031
Diffstat (limited to 'drivers/qmimodem')
-rw-r--r-- | drivers/qmimodem/gprs-context.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/qmimodem/gprs-context.c b/drivers/qmimodem/gprs-context.c index dcdf8ae1..f1fd1f12 100644 --- a/drivers/qmimodem/gprs-context.c +++ b/drivers/qmimodem/gprs-context.c @@ -88,6 +88,7 @@ static void get_settings_cb(struct qmi_result *result, void *user_data) char* straddr; char* apn; const char *dns[3] = { NULL, NULL, NULL }; + char dns_buf[2][INET_ADDRSTRLEN]; DBG(""); @@ -131,14 +132,14 @@ static void get_settings_cb(struct qmi_result *result, void *user_data) if (qmi_result_get_uint32(result, QMI_WDS_RESULT_PRIMARY_DNS, &ip_addr)) { addr.s_addr = htonl(ip_addr); - dns[0] = inet_ntoa(addr); + dns[0] = inet_ntop(AF_INET, &addr, dns_buf[0], sizeof(dns_buf[0])); DBG("Primary DNS: %s", dns[0]); } if (qmi_result_get_uint32(result, QMI_WDS_RESULT_SECONDARY_DNS, &ip_addr)) { addr.s_addr = htonl(ip_addr); - dns[1] = inet_ntoa(addr); + dns[1] = inet_ntop(AF_INET, &addr, dns_buf[1], sizeof(dns_buf[1])); DBG("Secondary DNS: %s", dns[1]); } |