Deprecated get_config_ip and get_config_port
[tinc] / src / conf.c
index 1ac01c3..951b24a 100644 (file)
@@ -19,7 +19,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: conf.c,v 1.9.4.44 2001/10/10 20:34:27 guus Exp $
+    $Id: conf.c,v 1.9.4.48 2001/11/16 00:13:08 zarq Exp $
 */
 
 #include "config.h"
@@ -126,11 +126,14 @@ cp
   cfg.line = 0;
 
   found = avl_search_closest_greater(config_tree, &cfg);
+
+  if(!found)
+    return NULL;
   
-  if(!strcmp(found->variable, variable))
-    return found;
-  else
+  if(strcmp(found->variable, variable))
     return NULL;
+
+  return found;
 }
 
 config_t *lookup_config_next(avl_tree_t *config_tree, config_t *cfg)
@@ -171,7 +174,7 @@ cp
     }
 
   syslog(LOG_ERR, _("\"yes\" or \"no\" expected for configuration variable %s in %s line %d"),
-         cfg->value, cfg->file, cfg->line);
+         cfg->variable, cfg->file, cfg->line);
 
   return 0;
 }
@@ -186,7 +189,7 @@ cp
     return 1;
     
   syslog(LOG_ERR, _("Integer expected for configuration variable %s in %s line %d"),
-         cfg->value, cfg->file, cfg->line);
+         cfg->variable, cfg->file, cfg->line);
   return 0;
 }
 
@@ -200,24 +203,43 @@ cp
   return 1;
 }
 
-int get_config_ip(config_t *cfg, ip_mask_t **result)
+int get_config_subnet(config_t *cfg, subnet_t **result)
 {
   ip_mask_t *ip;
+  subnet_t *subnet;
 cp
   if(!cfg)
     return 0;
 
   ip = strtoip(cfg->value);
 
-  if(ip)
+  if(!ip)
     {
-      *result = ip;
-      return 1;
+      syslog(LOG_ERR, _("IP address expected for configuration variable %s in %s line %d"),
+             cfg->variable, cfg->file, cfg->line);
+      return 0;
     }
+  
+  /* Teach newbies what subnets are... */
 
-  syslog(LOG_ERR, _("IP address expected for configuration variable %s in %s line %d"),
-         cfg->value, cfg->file, cfg->line);
-  return 0;
+  if((ip->address & ip->mask) != ip->address)
+    {
+      syslog(LOG_ERR, _("Network address and subnet mask for configuration variable %s in %s line %d"),
+             cfg->variable, cfg->file, cfg->line);
+      free(ip);
+      return 0;
+    }
+
+  subnet = new_subnet();
+  subnet->type = SUBNET_IPV4;
+  subnet->net.ipv4.address = ip->address;
+  subnet->net.ipv4.mask = ip->mask;
+  
+  free(ip);
+
+  *result = subnet;
+  
+  return 1;
 }
 
 /*