Author: kp
Date: Sun Mar  6 08:52:03 2016
New Revision: 296425
URL: https://svnweb.freebsd.org/changeset/base/296425

Log:
  MFC r295836:
  ifconfig(8): can't use 'name' or 'description' when creating interface with 
auto numbering
  
  If one does 'ifconfig tap create name blah', it will return error because the
  'name' command doesn't properly populate the request sent to ioctl(...). The
  'description' command has the same bug, and is also fixed with this patch.
  
  If one does 'ifconfig tap create mtu 9000 name blah', it DOES work, but 'tap0'
  (or other sequence number) is echoed, instead of the expected 'blah'. 
(assuming
  the name change actually succeeded)
  
  PR:               206876
  Submitted by:       Marie Helene Kvello-Aune <mariehelen...@gmail.com>
  Differential Revision:      https://reviews.freebsd.org/D5341

Modified:
  stable/10/sbin/ifconfig/ifclone.c
  stable/10/sbin/ifconfig/ifconfig.c
  stable/10/sbin/ifconfig/ifconfig.h

Modified: stable/10/sbin/ifconfig/ifclone.c
==============================================================================
--- stable/10/sbin/ifconfig/ifclone.c   Sun Mar  6 08:40:21 2016        
(r296424)
+++ stable/10/sbin/ifconfig/ifclone.c   Sun Mar  6 08:52:03 2016        
(r296425)
@@ -144,11 +144,12 @@ ifclonecreate(int s, void *arg)
        }
 
        /*
-        * If we get a different name back than we put in, print it.
+        * If we get a different name back than we put in, update record and
+        * indicate it should be printed later.
         */
        if (strncmp(name, ifr.ifr_name, sizeof(name)) != 0) {
                strlcpy(name, ifr.ifr_name, sizeof(name));
-               printf("%s\n", name);
+               printifname = 1;
        }
 }
 

Modified: stable/10/sbin/ifconfig/ifconfig.c
==============================================================================
--- stable/10/sbin/ifconfig/ifconfig.c  Sun Mar  6 08:40:21 2016        
(r296424)
+++ stable/10/sbin/ifconfig/ifconfig.c  Sun Mar  6 08:52:03 2016        
(r296425)
@@ -93,6 +93,7 @@ int   clearaddr;
 int    newaddr = 1;
 int    verbose;
 int    noload;
+int    printifname = 0;
 
 int    supmedia = 0;
 int    printkeys = 0;          /* Print keying material for interfaces. */
@@ -108,6 +109,8 @@ static struct afswtch *af_getbyname(cons
 static struct afswtch *af_getbyfamily(int af);
 static void af_other_status(int);
 
+void printifnamemaybe(void);
+
 static struct option *opts = NULL;
 
 void
@@ -141,6 +144,12 @@ usage(void)
        exit(1);
 }
 
+void printifnamemaybe()
+{
+       if (printifname)
+               printf("%s\n", name);
+}
+
 int
 main(int argc, char *argv[])
 {
@@ -156,6 +165,12 @@ main(int argc, char *argv[])
        size_t iflen;
 
        all = downonly = uponly = namesonly = noload = verbose = 0;
+       
+       /*
+        * Ensure we print interface name when expected to,
+        * even if we terminate early due to error.
+        */
+       atexit(printifnamemaybe);
 
        /* Parse leading line options */
        strlcpy(options, "adklmnuv", sizeof(options));
@@ -856,6 +871,8 @@ setifname(const char *val, int dummy __u
     const struct afswtch *afp)
 {
        char *newname;
+       
+       strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));
 
        newname = strdup(val);
        if (newname == NULL)
@@ -865,6 +882,7 @@ setifname(const char *val, int dummy __u
                free(newname);
                err(1, "ioctl SIOCSIFNAME (set name)");
        }
+       printifname = 1;
        strlcpy(name, newname, sizeof(name));
        free(newname);
 }
@@ -876,6 +894,8 @@ setifdescr(const char *val, int dummy __
 {
        char *newdescr;
 
+       strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));
+       
        ifr.ifr_buffer.length = strlen(val) + 1;
        if (ifr.ifr_buffer.length == 1) {
                ifr.ifr_buffer.buffer = newdescr = NULL;

Modified: stable/10/sbin/ifconfig/ifconfig.h
==============================================================================
--- stable/10/sbin/ifconfig/ifconfig.h  Sun Mar  6 08:40:21 2016        
(r296424)
+++ stable/10/sbin/ifconfig/ifconfig.h  Sun Mar  6 08:52:03 2016        
(r296425)
@@ -133,6 +133,7 @@ extern      int supmedia;
 extern int printkeys;
 extern int newaddr;
 extern int verbose;
+extern int printifname;
 
 void   setifcap(const char *, int value, int s, const struct afswtch *);
 
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to