X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fsubnet.c;h=a4ec2b31b9e14d996dd5b4f58f45ef4e745ba1b3;hp=984cc7f8ece644ff2f2ec80cd6054366efe3fba1;hb=ddcf079cad3351f0823fc07af15787d02e5f1901;hpb=c46f56a8b8bb865dd8951441b5acf4701b5b5b09 diff --git a/src/subnet.c b/src/subnet.c index 984cc7f8..a4ec2b31 100644 --- a/src/subnet.c +++ b/src/subnet.c @@ -1,7 +1,7 @@ /* subnet.c -- handle subnet lookups and lists - Copyright (C) 2000-2004 Guus Sliepen , - 2000-2004 Ivo Timmermans + Copyright (C) 2000-2006 Guus Sliepen , + 2000-2005 Ivo Timmermans This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -247,6 +247,11 @@ bool net2str(char *netstr, int len, const subnet_t *subnet) { cp(); + if(!netstr || !subnet) { + logger(LOG_ERR, _("net2str() was called with netstr=%p, subnet=%p!\n"), netstr, subnet); + return false; + } + switch (subnet->type) { case SUBNET_MAC: snprintf(netstr, len, "%hx:%hx:%hx:%hx:%hx:%hx", @@ -337,7 +342,7 @@ subnet_t *lookup_subnet_ipv4(const ipv4_t *address) break; } - if(!maskcmp(address, &p->net.ipv4.address, p->net.ipv4.prefixlength, sizeof(ipv4_t))) + if(!maskcmp(address, &p->net.ipv4.address, p->net.ipv4.prefixlength)) break; else { /* Otherwise, see if there is a bigger enclosing subnet */ @@ -373,7 +378,7 @@ subnet_t *lookup_subnet_ipv6(const ipv6_t *address) if(p->type != SUBNET_IPV6) return NULL; - if(!maskcmp(address, &p->net.ipv6.address, p->net.ipv6.prefixlength, sizeof(ipv6_t))) + if(!maskcmp(address, &p->net.ipv6.address, p->net.ipv6.prefixlength)) break; else { /* Otherwise, see if there is a bigger enclosing subnet */ @@ -398,6 +403,7 @@ void subnet_update(node_t *owner, subnet_t *subnet, bool up) { asprintf(&envp[1], "DEVICE=%s", device ? : ""); asprintf(&envp[2], "INTERFACE=%s", iface ? : ""); asprintf(&envp[3], "NODE=%s", owner->name); + if(owner != myself) { sockaddr2str(&owner->address, &address, &port); asprintf(&envp[4], "REMOTEADDRESS=%s", address); @@ -423,14 +429,13 @@ void subnet_update(node_t *owner, subnet_t *subnet, bool up) { execute_script(name, envp); } - net2str(netstr, sizeof netstr, subnet); - envp[6] = envp[7] = NULL; - for(i = 0; i < (owner != myself ? 6 : 4); i++) free(envp[i]); - free(address); - free(port); + if(owner != myself) { + free(address); + free(port); + } } void dump_subnets(void)