Show cfg->variable instead of cfg->value when complaining about wrong type.
[tinc] / src / conf.c
index 1ac01c3..b1eb475 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.47 2001/10/31 20:07:17 guus 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;
 }
 
@@ -216,10 +219,63 @@ cp
     }
 
   syslog(LOG_ERR, _("IP address expected for configuration variable %s in %s line %d"),
-         cfg->value, cfg->file, cfg->line);
+         cfg->variable, cfg->file, cfg->line);
   return 0;
 }
 
+int get_config_port(config_t *cfg, port_t *result)
+{
+cp
+  if(!cfg)
+    return 0;
+
+  if(sscanf(cfg->value, "%hu", result) == 1)
+    return 1;
+    
+  syslog(LOG_ERR, _("Port number expected for configuration variable %s in %s line %d"),
+         cfg->variable, cfg->file, cfg->line);
+  return 0;
+}
+
+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)
+    {
+      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... */
+
+  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;
+}
+
 /*
   Read exactly one line and strip the trailing newline if any.  If the
   file was on EOF, return NULL. Otherwise, return all the data in a