]> granicus.if.org Git - sudo/commitdiff
no error if can't get interfaces or netmask since networking may not be in
authorTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 13 Aug 1994 21:09:05 +0000 (21:09 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 13 Aug 1994 21:09:05 +0000 (21:09 +0000)
the kernel.

sudo.c

diff --git a/sudo.c b/sudo.c
index cf4573f611cdaf287b6e08a8d425894374dbe5d2..874e53791d4a3c348601ee79f4ce54ca15714197 100644 (file)
--- a/sudo.c
+++ b/sudo.c
@@ -597,14 +597,12 @@ static void load_interfaces()
     }
 
     /*
-     * get interface configuration
+     * get interface configuration or return (leaving interfaces NULL)
      */
     ifconf.ifc_len = sizeof(buf);
     ifconf.ifc_buf = buf;
     if (ioctl(sock, SIOCGIFCONF, (char *)(&ifconf)) < 0) {
-       (void) fprintf(stderr, "%s: cannot get interface configuration: ",
-           Argv[0]);
-       perror("");
+       /* networking probably not installed in kernel */
        return;
     }
 
@@ -649,23 +647,21 @@ static void load_interfaces()
        /* get the netmask */
 #ifdef SIOCGIFNETMASK
        (void) strcpy(ifreq.ifr_name, ifconf.ifc_req[i].ifr_name);
-       if (ioctl(sock, SIOCGIFNETMASK, (char *)(&ifreq)) < 0) {
-           (void) free(interfaces);
-           num_interfaces = 0;
-           perror("");
-           return;
-       }
-       (void) memcpy(&interfaces[j].netmask,
-           &(((struct sockaddr_in *)&ifreq.ifr_addr)->sin_addr),
-           sizeof(struct in_addr));
+       if (ioctl(sock, SIOCGIFNETMASK, (char *)(&ifreq)) >= 0) {
+           (void) memcpy(&interfaces[j].netmask,
+                         &(((struct sockaddr_in *)&ifreq.ifr_addr)->sin_addr),
+                         sizeof(struct in_addr));
+       } else {
 #else
-       if (IN_CLASSC(interfaces[j].addr.s_addr))
-           interfaces[j].netmask.s_addr = htonl(IN_CLASSC_NET);
-       else if (IN_CLASSB(interfaces[j].addr.s_addr))
-           interfaces[j].netmask.s_addr = htonl(IN_CLASSB_NET);
-       else
-           interfaces[j].netmask.s_addr = htonl(IN_CLASSA_NET);
+       {
 #endif /* SIOCGIFNETMASK */
+           if (IN_CLASSC(interfaces[j].addr.s_addr))
+               interfaces[j].netmask.s_addr = htonl(IN_CLASSC_NET);
+           else if (IN_CLASSB(interfaces[j].addr.s_addr))
+               interfaces[j].netmask.s_addr = htonl(IN_CLASSB_NET);
+           else
+               interfaces[j].netmask.s_addr = htonl(IN_CLASSA_NET);
+       }
        ++j;
     }
 }