Stricter checks for netname and node names.
[tinc] / src / tincctl.c
index 64340c7..39bd326 100644 (file)
@@ -194,11 +194,16 @@ static bool parse_options(int argc, char **argv) {
 
         /* netname "." is special: a "top-level name" */
 
-        if(netname && !strcmp(netname, ".")) {
+        if(netname && (!*netname || !strcmp(netname, "."))) {
                 free(netname);
                 netname = NULL;
         }
 
+       if(netname && (strpbrk(netname, "\\/") || *netname == '.')) {
+               fprintf(stderr, "Invalid character in netname!\n");
+               return false;
+       }
+
        return true;
 }
 
@@ -1019,6 +1024,7 @@ static struct {
        {"KeyExpire", VAR_SERVER},
        {"LocalDiscovery", VAR_SERVER},
        {"MACExpire", VAR_SERVER},
+       {"MaxOutputBufferSize", VAR_SERVER},
        {"MaxTimeout", VAR_SERVER},
        {"Mode", VAR_SERVER},
        {"Name", VAR_SERVER},
@@ -1028,26 +1034,32 @@ static struct {
        {"PrivateKey", VAR_SERVER | VAR_OBSOLETE},
        {"PrivateKeyFile", VAR_SERVER},
        {"ProcessPriority", VAR_SERVER},
+       {"Proxy", VAR_SERVER},
        {"ReplayWindow", VAR_SERVER},
        {"StrictSubnets", VAR_SERVER},
        {"TunnelServer", VAR_SERVER},
        {"UDPRcvBuf", VAR_SERVER},
        {"UDPSndBuf", VAR_SERVER},
+       {"VDEGroup", VAR_SERVER},
+       {"VDEPort", VAR_SERVER},
        /* Host configuration */
        {"Address", VAR_HOST | VAR_MULTIPLE},
        {"Cipher", VAR_SERVER | VAR_HOST},
        {"ClampMSS", VAR_SERVER | VAR_HOST},
        {"Compression", VAR_SERVER | VAR_HOST},
        {"Digest", VAR_SERVER | VAR_HOST},
+       {"ECDSAPublicKey", VAR_HOST},
+       {"ECDSAPublicKeyFile", VAR_SERVER | VAR_HOST},
        {"IndirectData", VAR_SERVER | VAR_HOST},
        {"MACLength", VAR_SERVER | VAR_HOST},
        {"PMTU", VAR_SERVER | VAR_HOST},
        {"PMTUDiscovery", VAR_SERVER | VAR_HOST},
        {"Port", VAR_HOST},
-       {"PublicKey", VAR_SERVER | VAR_HOST | VAR_OBSOLETE},
+       {"PublicKey", VAR_HOST | VAR_OBSOLETE},
        {"PublicKeyFile", VAR_SERVER | VAR_HOST | VAR_OBSOLETE},
        {"Subnet", VAR_HOST | VAR_MULTIPLE},
        {"TCPOnly", VAR_SERVER | VAR_HOST},
+       {"Weight", VAR_HOST},
        {NULL, 0}
 };
 
@@ -1337,6 +1349,9 @@ static int cmd_config(int argc, char *argv[]) {
 }
 
 bool check_id(const char *name) {
+       if(!name || !*name)
+               return false;
+
        for(int i = 0; i < strlen(name); i++) {
                if(!isalnum(name[i]) && name[i] != '_')
                        return false;