]> git.meshlink.io Git - meshlink/commitdiff
Add the ability to query configuration variables to tincctl.
authorGuus Sliepen <guus@tinc-vpn.org>
Wed, 1 Aug 2012 13:50:45 +0000 (15:50 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Wed, 1 Aug 2012 13:53:20 +0000 (15:53 +0200)
doc/tinc.texi
doc/tincctl.8.in
src/tincctl.c

index 40a297a3e9531034224d746232c5e2ea39eda1e9..b2236b4bad04cfa9533214a5b5bfb4283a4659f4 100644 (file)
@@ -2044,6 +2044,11 @@ the value of this environment variable is used.
 Create initial configuration files and RSA and ECDSA keypairs with default length.
 If no @var{name} for this node is given, it will be asked for.
 
 Create initial configuration files and RSA and ECDSA keypairs with default length.
 If no @var{name} for this node is given, it will be asked for.
 
+@item config [get] @var{variable}
+Print the current value of configuration variable @var{variable}.
+If more than one variable with the same name exists,
+the value of each of them will be printed on a separate line.
+
 @item config [set] @var{variable} @var{value}
 Set configuration variable @var{variable} to the given @var{value}.
 All previously existing configuration variables with the same name are removed.
 @item config [set] @var{variable} @var{value}
 Set configuration variable @var{variable} to the given @var{value}.
 All previously existing configuration variables with the same name are removed.
index 4b6d4263261516009df847930b21a085e97d1cde..3ca67534aa2987627ca04ba3a049ef43b54d58f9 100644 (file)
@@ -52,6 +52,11 @@ Create initial configuration files and RSA and ECDSA keypairs with default lengt
 If no
 .Ar name
 for this node is given, it will be asked for.
 If no
 .Ar name
 for this node is given, it will be asked for.
+.It config Oo get Oc Ar variable
+Print the current value of configuration variable
+.Ar variable .
+If more than one variable with the same name exists,
+the value of each of them will be printed on a separate line.
 .It config Oo set Oc Ar variable Ar value
 Set configuration variable
 .Ar variable
 .It config Oo set Oc Ar variable Ar value
 Set configuration variable
 .Ar variable
index 188db9222a18e14c5ef73ea1a8bc2cb6a18241b8..64340c7f3f36f200907d9196554589453d6c7c56 100644 (file)
@@ -111,6 +111,7 @@ static void usage(bool status) {
                                "Valid commands are:\n"
                                "  init [name]                Create initial configuration files.\n"
                                "  config                     Change configuration:\n"
                                "Valid commands are:\n"
                                "  init [name]                Create initial configuration files.\n"
                                "  config                     Change configuration:\n"
+                               "    [get] VARIABLE           - print current value of VARIABLE\n"
                                "    [set] VARIABLE VALUE     - set VARIABLE to VALUE\n"
                                "    add VARIABLE VALUE       - add VARIABLE with the given VALUE\n"
                                "    del VARIABLE [VALUE]     - remove VARIABLE [only ones with watching VALUE]\n"
                                "    [set] VARIABLE VALUE     - set VARIABLE to VALUE\n"
                                "    add VARIABLE VALUE       - add VARIABLE with the given VALUE\n"
                                "    del VARIABLE [VALUE]     - remove VARIABLE [only ones with watching VALUE]\n"
@@ -942,7 +943,7 @@ static int cmd_log(int argc, char *argv[]) {
 }
 
 static int cmd_pid(int argc, char *argv[]) {
 }
 
 static int cmd_pid(int argc, char *argv[]) {
-       if(!connect_tincd())
+       if(!connect_tincd() && !pid)
                return 1;
 
        printf("%d\n", pid);
                return 1;
 
        printf("%d\n", pid);
@@ -1056,8 +1057,10 @@ static int cmd_config(int argc, char *argv[]) {
                return 1;
        }
 
                return 1;
        }
 
-       int action = 0;
-       if(!strcasecmp(argv[1], "add")) {
+       int action = -2;
+       if(!strcasecmp(argv[1], "get")) {
+               argv++, argc--;
+       } else if(!strcasecmp(argv[1], "add")) {
                argv++, argc--, action = 1;
        } else if(!strcasecmp(argv[1], "del")) {
                argv++, argc--, action = -1;
                argv++, argc--, action = 1;
        } else if(!strcasecmp(argv[1], "del")) {
                argv++, argc--, action = -1;
@@ -1109,6 +1112,9 @@ static int cmd_config(int argc, char *argv[]) {
                return 1;
        }
 
                return 1;
        }
 
+       if(action < -1 && *value)
+               action = 0;
+
        /* Some simple checks. */
        bool found = false;
 
        /* Some simple checks. */
        bool found = false;
 
@@ -1157,8 +1163,8 @@ static int cmd_config(int argc, char *argv[]) {
                return 1;
        }
 
                return 1;
        }
 
-       if(!found && action >= 0) {
-               if(force) {
+       if(!found) {
+               if(force || action < 0) {
                        fprintf(stderr, "Warning: %s is not a known configuration variable!\n", variable);
                } else {
                        fprintf(stderr, "%s: is not a known configuration variable! Use --force to use it anyway.\n", variable);
                        fprintf(stderr, "Warning: %s is not a known configuration variable!\n", variable);
                } else {
                        fprintf(stderr, "%s: is not a known configuration variable! Use --force to use it anyway.\n", variable);
@@ -1190,19 +1196,24 @@ static int cmd_config(int argc, char *argv[]) {
                }
        }
 
                }
        }
 
-       char *tmpfile;
-       xasprintf(&tmpfile, "%s.config.tmp", filename);
-       FILE *tf = fopen(tmpfile, "w");
-       if(!tf) {
-               fprintf(stderr, "Could not open temporary file %s: %s\n", tmpfile, strerror(errno));
-               return 1;
+       char *tmpfile = NULL;
+       FILE *tf = NULL;
+
+       if(action >= -1) {
+               xasprintf(&tmpfile, "%s.config.tmp", filename);
+               tf = fopen(tmpfile, "w");
+               if(!tf) {
+                       fprintf(stderr, "Could not open temporary file %s: %s\n", tmpfile, strerror(errno));
+                       return 1;
+               }
        }
 
        }
 
-       // Copy the file, making modifications on the fly.
+       // Copy the file, making modifications on the fly, unless we are just getting a value.
        char buf1[4096];
        char buf2[4096];
        bool set = false;
        bool removed = false;
        char buf1[4096];
        char buf2[4096];
        bool set = false;
        bool removed = false;
+       found = false;
 
        while(fgets(buf1, sizeof buf1, f)) {
                buf1[sizeof buf1 - 1] = 0;
 
        while(fgets(buf1, sizeof buf1, f)) {
                buf1[sizeof buf1 - 1] = 0;
@@ -1224,8 +1235,12 @@ static int cmd_config(int argc, char *argv[]) {
 
                // Did it match?
                if(!strcasecmp(buf2, variable)) {
 
                // Did it match?
                if(!strcasecmp(buf2, variable)) {
+                       // Get
+                       if(action < -1) {
+                               found = true;
+                               printf("%s\n", bvalue);
                        // Del
                        // Del
-                       if(action < 0) {
+                       } else if(action == -1) {
                                if(!*value || !strcasecmp(bvalue, value)) {
                                        removed = true;
                                        continue;
                                if(!*value || !strcasecmp(bvalue, value)) {
                                        removed = true;
                                        continue;
@@ -1245,18 +1260,20 @@ static int cmd_config(int argc, char *argv[]) {
                        }
                }
 
                        }
                }
 
-               // Copy original line...
-               if(fputs(buf1, tf) < 0) {
-                       fprintf(stderr, "Error writing to temporary file %s: %s\n", tmpfile, strerror(errno));
-                       return 1;
-               }
-
-               // Add newline if it is missing...
-               if(*buf1 && buf1[strlen(buf1) - 1] != '\n') {
-                       if(fputc('\n', tf) < 0) {
+               if(action >= -1) {
+                       // Copy original line...
+                       if(fputs(buf1, tf) < 0) {
                                fprintf(stderr, "Error writing to temporary file %s: %s\n", tmpfile, strerror(errno));
                                return 1;
                        }
                                fprintf(stderr, "Error writing to temporary file %s: %s\n", tmpfile, strerror(errno));
                                return 1;
                        }
+
+                       // Add newline if it is missing...
+                       if(*buf1 && buf1[strlen(buf1) - 1] != '\n') {
+                               if(fputc('\n', tf) < 0) {
+                                       fprintf(stderr, "Error writing to temporary file %s: %s\n", tmpfile, strerror(errno));
+                                       return 1;
+                               }
+                       }
                }
        }
 
                }
        }
 
@@ -1279,6 +1296,12 @@ static int cmd_config(int argc, char *argv[]) {
                }
        }
 
                }
        }
 
+       if(action < -1) {
+               if(!found)
+                       fprintf(stderr, "No matching configuration variables found.\n");
+               return 0;
+       }
+
        // Make sure we wrote everything...
        if(fclose(tf)) {
                fprintf(stderr, "Error closing temporary file %s: %s\n", tmpfile, strerror(errno));
        // Make sure we wrote everything...
        if(fclose(tf)) {
                fprintf(stderr, "Error closing temporary file %s: %s\n", tmpfile, strerror(errno));