diff options
author | Erik Kline <ek@google.com> | 2016-08-17 15:10:06 +0900 |
---|---|---|
committer | Erik Kline <ek@google.com> | 2016-09-12 18:17:03 +0900 |
commit | 61b542ef379106207b419360c7f2761208e9dfbf (patch) | |
tree | 79015b132e2dff81d3f2ad0502f1f3f3b28bb26b | |
parent | d8c5b0ce0f39f7fc7601397f67102abbbb21902d (diff) | |
download | dnsmasq-nougat-mr1-flounder-release.tar.gz |
Log and ignore unusable interfaces from update_ifacesandroid-n-mr2-preview-1android-n-mr1-preview-2android-n-mr1-preview-1android-cts_7.1_r1android-cts-7.1_r9android-cts-7.1_r8android-cts-7.1_r7android-cts-7.1_r6android-cts-7.1_r5android-cts-7.1_r4android-cts-7.1_r3android-cts-7.1_r29android-cts-7.1_r28android-cts-7.1_r27android-cts-7.1_r26android-cts-7.1_r25android-cts-7.1_r24android-cts-7.1_r23android-cts-7.1_r22android-cts-7.1_r21android-cts-7.1_r20android-cts-7.1_r2android-cts-7.1_r19android-cts-7.1_r18android-cts-7.1_r17android-cts-7.1_r16android-cts-7.1_r15android-cts-7.1_r14android-cts-7.1_r13android-cts-7.1_r12android-cts-7.1_r11android-cts-7.1_r10android-cts-7.1_r1android-7.1.1_r9android-7.1.1_r8android-7.1.1_r7android-7.1.1_r6android-7.1.1_r53android-7.1.1_r52android-7.1.1_r51android-7.1.1_r50android-7.1.1_r49android-7.1.1_r48android-7.1.1_r47android-7.1.1_r46android-7.1.1_r45android-7.1.1_r44android-7.1.1_r43android-7.1.1_r42android-7.1.1_r41android-7.1.1_r40android-7.1.1_r4android-7.1.1_r39android-7.1.1_r38android-7.1.1_r35android-7.1.1_r33android-7.1.1_r32android-7.1.1_r31android-7.1.1_r3android-7.1.1_r28android-7.1.1_r27android-7.1.1_r26android-7.1.1_r25android-7.1.1_r24android-7.1.1_r23android-7.1.1_r22android-7.1.1_r21android-7.1.1_r20android-7.1.1_r2android-7.1.1_r17android-7.1.1_r16android-7.1.1_r15android-7.1.1_r14android-7.1.1_r13android-7.1.1_r12android-7.1.1_r11android-7.1.1_r10android-7.1.1_r1nougat-mr1.4-releasenougat-mr1.3-releasenougat-mr1.2-releasenougat-mr1-releasenougat-mr1-flounder-releasenougat-mr1-devnougat-mr1-cts-releasen-mr2-preview-1n-mr1-preview-1
Bug: 30882741
Change-Id: I198607a293bb8da8d09330933065e0d10d52916b
-rwxr-xr-x | src/dnsmasq.c | 4 | ||||
-rwxr-xr-x | src/network.c | 14 |
2 files changed, 15 insertions, 3 deletions
diff --git a/src/dnsmasq.c b/src/dnsmasq.c index a1b6578..24e7055 100755 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -1013,14 +1013,14 @@ static int check_android_listeners(fd_set *set) { set_servers(params); check_servers(); } else { - my_syslog(LOG_ERR, _("Malformatted msg '%s'"), current_cmd); + my_syslog(LOG_ERR, _("Misformatted msg '%s'"), current_cmd); retcode = -1; } } else if (!strcmp(cmd, "update_ifaces")) { if (params != NULL) { set_interfaces(params); } else { - my_syslog(LOG_ERR, _("Malformatted msg '%s'"), current_cmd); + my_syslog(LOG_ERR, _("Misformatted msg '%s'"), current_cmd); retcode = -1; } } else { diff --git a/src/network.c b/src/network.c index 2df8c75..f2c3073 100755 --- a/src/network.c +++ b/src/network.c @@ -983,6 +983,12 @@ void set_interfaces(const char *interfaces) } strncpy(s, interfaces, sizeof(s)); while((interface = strsep(&next, SEPARATOR))) { + if (!if_nametoindex(interface)) { + my_syslog(LOG_ERR, + _("interface given in %s: '%s' has no ifindex; ignoring"), + __FUNCTION__, interface); + continue; + } if_tmp = safe_malloc(sizeof(struct iname)); memset(if_tmp, 0, sizeof(struct iname)); if ((if_tmp->name = strdup(interface)) == NULL) { @@ -992,15 +998,21 @@ void set_interfaces(const char *interfaces) daemon->if_names = if_tmp; } + /* + * Enumerate IP addresses (via RTM_GETADDR), adding IP entries to + * daemon->interfaces for interface names listed in daemon->if_names. + * The sockets are created by the create_bound_listener call below. + */ if (!enumerate_interfaces()) { die(_("enumerate interfaces error in set_interfaces: %s"), NULL, EC_BADNET); } for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next) { if (if_tmp->name && !if_tmp->used) { - die(_("unknown interface given %s in set_interfaces: %s"), if_tmp->name, EC_BADNET); + my_syslog(LOG_ERR, _("unknown interface given %s in set_interfaces()"), if_tmp->name); } } + /* success! - setup to free the old */ /* check for any that have been removed */ for (old_iface = prev_interfaces; old_iface; old_iface=old_iface->next) { |