Fix NAME variable in subnet-* scripts for local subnets.
[tinc] / src / subnet.c
index f8a3461..b4a636b 100644 (file)
@@ -1,6 +1,6 @@
 /*
     subnet.c -- handle subnet lookups and lists
-    Copyright (C) 2000-2013 Guus Sliepen <guus@tinc-vpn.org>,
+    Copyright (C) 2000-2014 Guus Sliepen <guus@tinc-vpn.org>,
                   2000-2005 Ivo Timmermans
 
     This program is free software; you can redistribute it and/or modify
@@ -351,7 +351,7 @@ bool net2str(char *netstr, int len, const subnet_t *subnet) {
 
        switch (subnet->type) {
                case SUBNET_MAC:
-                       snprintf(netstr, len, "%hx:%hx:%hx:%hx:%hx:%hx#%d",
+                       snprintf(netstr, len, "%x:%x:%x:%x:%x:%x#%d",
                                         subnet->net.mac.address.x[0],
                                         subnet->net.mac.address.x[1],
                                         subnet->net.mac.address.x[2],
@@ -362,7 +362,7 @@ bool net2str(char *netstr, int len, const subnet_t *subnet) {
                        break;
 
                case SUBNET_IPV4:
-                       snprintf(netstr, len, "%hu.%hu.%hu.%hu/%d#%d",
+                       snprintf(netstr, len, "%u.%u.%u.%u/%d#%d",
                                         subnet->net.ipv4.address.x[0],
                                         subnet->net.ipv4.address.x[1],
                                         subnet->net.ipv4.address.x[2],
@@ -372,7 +372,7 @@ bool net2str(char *netstr, int len, const subnet_t *subnet) {
                        break;
 
                case SUBNET_IPV6:
-                       snprintf(netstr, len, "%hx:%hx:%hx:%hx:%hx:%hx:%hx:%hx/%d#%d",
+                       snprintf(netstr, len, "%x:%x:%x:%x:%x:%x:%x:%x/%d#%d",
                                         ntohs(subnet->net.ipv6.address.x[0]),
                                         ntohs(subnet->net.ipv6.address.x[1]),
                                         ntohs(subnet->net.ipv6.address.x[2]),
@@ -534,18 +534,17 @@ void subnet_update(node_t *owner, subnet_t *subnet, bool up) {
        xasprintf(&envp[1], "DEVICE=%s", device ? : "");
        xasprintf(&envp[2], "INTERFACE=%s", iface ? : "");
        xasprintf(&envp[3], "NODE=%s", owner->name);
+       xasprintf(&envp[4], "NAME=%s", myself->name);
 
        if(owner != myself) {
                sockaddr2str(&owner->address, &address, &port);
-               // 4 and 5 are reserved for SUBNET and WEIGHT
-               xasprintf(&envp[6], "REMOTEADDRESS=%s", address);
-               xasprintf(&envp[7], "REMOTEPORT=%s", port);
+               // 5 and 6 are reserved for SUBNET and WEIGHT
+               xasprintf(&envp[7], "REMOTEADDRESS=%s", address);
+               xasprintf(&envp[8], "REMOTEPORT=%s", port);
                free(port);
                free(address);
        }
 
-       xasprintf(&envp[8], "NAME=%s", myself->name);
-
        name = up ? "subnet-up" : "subnet-down";
 
        if(!subnet) {
@@ -561,12 +560,12 @@ void subnet_update(node_t *owner, subnet_t *subnet, bool up) {
                                weight = empty;
 
                        // Prepare the SUBNET and WEIGHT variables
-                       if(envp[4])
-                               free(envp[4]);
                        if(envp[5])
                                free(envp[5]);
-                       xasprintf(&envp[4], "SUBNET=%s", netstr);
-                       xasprintf(&envp[5], "WEIGHT=%s", weight);
+                       if(envp[6])
+                               free(envp[6]);
+                       xasprintf(&envp[5], "SUBNET=%s", netstr);
+                       xasprintf(&envp[6], "WEIGHT=%s", weight);
 
                        execute_script(name, envp);
                }
@@ -580,8 +579,8 @@ void subnet_update(node_t *owner, subnet_t *subnet, bool up) {
                                weight = empty;
 
                        // Prepare the SUBNET and WEIGHT variables
-                       xasprintf(&envp[4], "SUBNET=%s", netstr);
-                       xasprintf(&envp[5], "WEIGHT=%s", weight);
+                       xasprintf(&envp[5], "SUBNET=%s", netstr);
+                       xasprintf(&envp[6], "WEIGHT=%s", weight);
 
                        execute_script(name, envp);
                }