ifconfig(8): Do not wrongly use 'create' as hostname
authorAaron LI <aly@aaronly.me>
Sun, 12 Apr 2020 14:12:14 +0000 (22:12 +0800)
committerAaron LI <aly@aaronly.me>
Sun, 12 Apr 2020 14:20:46 +0000 (22:20 +0800)
Do not allow to use the 'create' keyword as a hostname when ifconfig(8)
is invoked for an already existing interface.

Without this commit, ifconfig(8) assumes the 'create' keyword as a
hostname and tries to resolve it when 'ifconfig ifname create' invoked
for an already existing interface.  This can produce some misleading
error messages (e.g., 'create: bad value') or even unexpected results
(e.g., when the hostname resolving succeeds).

With this commit, when an interface is already exists and the 'create'
is the only argument, return an error message.  But when there are some
other arguments, just ignore the 'create' keyword and carry on.

Obtained from FreeBSD:
https://github.com/freebsd/freebsd/commit/e383c28ab5b8d0bdc15281e7522c368d56ac1a76
https://reviews.freebsd.org/D17171

sbin/ifconfig/ifconfig.c

index b7f475c..97bcd2b 100644 (file)
@@ -261,6 +261,18 @@ main(int argc, char *argv[])
                                return (0);
                        }
                        errx(1, "interface %s does not exist", ifname);
+               } else {
+                       /*
+                        * Do not allow to use `create` command as hostname
+                        * if address family is not specified.
+                        */
+                       if (argc > 0 && (strcmp(argv[0], "create") == 0 ||
+                           strcmp(argv[0], "plumb") == 0)) {
+                               if (argc == 1)
+                                       errx(1, "interface %s alreay exists",
+                                           ifname);
+                               argc--, argv++;
+                       }
                }
        }