Brad Bishop | 1a4b7ee | 2018-12-16 17:11:34 -0800 | [diff] [blame] | 1 | systemd-239: fixes for the compatibility interface |
| 2 | |
| 3 | [No upstream tracking] -- https://github.com/systemd/systemd/issues/9423 |
| 4 | |
| 5 | resolvconf-compat: use compat_main() when called as `resolvconf`, |
| 6 | since the interface is closer to that of `systemd-resolve`. |
| 7 | |
| 8 | Use a heap allocated string to set arg_ifname, since a stack allocated |
| 9 | one would be lost after the function returns. (This last one broke the |
| 10 | case where an interface name was suffixed with a dot, such as in |
| 11 | `resolvconf -a tap0.dhcp`.) |
| 12 | |
| 13 | Tested: |
| 14 | $ build/resolvconf -a nonexistent.abc </etc/resolv.conf |
| 15 | Unknown interface 'nonexistent': No such device |
| 16 | |
| 17 | Upstream-Status: Backport [https://github.com/systemd/systemd/commit/5a01b3f35d7b6182c78b6973db8d99bdabd4f9c3] |
| 18 | bug: 9423 |
| 19 | Signed-off-by: Simon Ausserlechner <simon.ausserlechner@siemens.com> |
| 20 | |
| 21 | diff --git a/src/resolve/resolvconf-compat.c b/src/resolve/resolvconf-compat.c |
| 22 | index d7e68003e..072345894 100644 |
| 23 | --- a/src/resolve/resolvconf-compat.c |
| 24 | +++ b/src/resolve/resolvconf-compat.c |
| 25 | @@ -53,6 +53,8 @@ static int parse_nameserver(const char *string) { |
| 26 | |
| 27 | if (strv_push(&arg_set_dns, word) < 0) |
| 28 | return log_oom(); |
| 29 | + |
| 30 | + word = NULL; |
| 31 | } |
| 32 | |
| 33 | return 0; |
| 34 | @@ -202,7 +204,7 @@ int resolvconf_parse_argv(int argc, char *argv[]) { |
| 35 | |
| 36 | dot = strchr(argv[optind], '.'); |
| 37 | if (dot) { |
| 38 | - iface = strndupa(argv[optind], dot - argv[optind]); |
| 39 | + iface = strndup(argv[optind], dot - argv[optind]); |
| 40 | log_debug("Ignoring protocol specifier '%s'.", dot + 1); |
| 41 | } else |
| 42 | iface = argv[optind]; |
| 43 | diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c |
| 44 | index e96c13fea..e9e395e3e 100644 |
| 45 | --- a/src/resolve/resolvectl.c |
| 46 | +++ b/src/resolve/resolvectl.c |
| 47 | @@ -3092,7 +3092,7 @@ int main(int argc, char **argv) { |
| 48 | goto finish; |
| 49 | } |
| 50 | |
| 51 | - if (streq(program_invocation_short_name, "systemd-resolve")) |
| 52 | + if (STR_IN_SET(program_invocation_short_name, "systemd-resolve", "resolvconf")) |
| 53 | r = compat_main(argc, argv, bus); |
| 54 | else |
| 55 | r = native_main(argc, argv, bus); |
| 56 | -- |
| 57 | 2.11.0 |
| 58 | |