]> the.earth.li Git - onak.git/commitdiff
Add "dumpconfig" command to onak to aide configuration file migration
authorJonathan McDowell <noodles@earth.li>
Tue, 7 Jun 2016 12:59:56 +0000 (13:59 +0100)
committerJonathan McDowell <noodles@earth.li>
Tue, 7 Jun 2016 14:19:28 +0000 (15:19 +0100)
onak is capable of parsing both old and new style configuration files,
but future improvements will only be added to the new style. To aide
users in the migration to the new format add a "dumpconfig" option to
the onak binary which will dump the current configuration in new format.

onak-conf.c
onak-conf.h
onak.1
onak.c

index 60f2097a21859342ab686b25e104b1aa572fb551..58940aaffb5edd784741f788953dc6a1ea104b67 100644 (file)
@@ -421,6 +421,67 @@ void readconfig(const char *configfile) {
        }
 }
 
+void writeconfig(const char *configfile)
+{
+       FILE *conffile;
+       struct ll *cur;
+
+       if (configfile) {
+               conffile = fopen(configfile, "w");
+       } else {
+               conffile = stdout;
+       }
+
+#define WRITE_IF_NOT_NULL(c, s) if (c != NULL) { \
+       fprintf(conffile, s "=%s\n", c); \
+}
+#define WRITE_BOOL(c, s) fprintf(conffile, s "=%s\n", s ? "true" : "false");
+
+       fprintf(conffile, "[main]\n");
+       WRITE_IF_NOT_NULL(config.backend->name, "backend");
+       WRITE_IF_NOT_NULL(config.backends_dir, "backends_dir");
+       WRITE_IF_NOT_NULL(config.logfile, "logfile");
+       fprintf(conffile, "loglevel=%d\n", getlogthreshold());
+       WRITE_BOOL(config.use_keyd, "use_keyd");
+       WRITE_IF_NOT_NULL(config.sock_dir, "sock_dir");
+       fprintf(conffile, "max_reply_keys=%d\n", config.maxkeys);
+       fprintf(conffile, "\n");
+
+       fprintf(conffile, "[verification]\n");
+       WRITE_BOOL(config.check_sighash, "check_sighash");
+       fprintf(conffile, "\n");
+
+       fprintf(conffile, "[mail]\n");
+       WRITE_IF_NOT_NULL(config.adminemail, "maintainer_email");
+       WRITE_IF_NOT_NULL(config.mail_dir, "mail_dir");
+       WRITE_IF_NOT_NULL(config.mta, "mta");
+       WRITE_IF_NOT_NULL(config.bin_dir, "bin_dir");
+       WRITE_IF_NOT_NULL(config.thissite, "this_site");
+
+       cur = config.syncsites;
+       while (cur != NULL) {
+               fprintf(conffile, "syncsite=%s\n", (char *) cur->object);
+               cur = cur->next;
+       }
+
+       cur = config.backends;
+       while (cur != NULL) {
+               struct onak_db_config *backend =
+                       (struct onak_db_config *) cur->object;
+               fprintf(conffile, "\n[backend:%s]\n", backend->name);
+               WRITE_IF_NOT_NULL(backend->type, "type");
+               WRITE_IF_NOT_NULL(backend->location, "location");
+               WRITE_IF_NOT_NULL(backend->hostname, "hostname");
+               WRITE_IF_NOT_NULL(backend->username, "username");
+               WRITE_IF_NOT_NULL(backend->password, "password");
+               cur = cur->next;
+       }
+
+       if (configfile) {
+               fclose(conffile);
+       }
+}
+
 void cleanupdbconfig(void *object)
 {
        struct onak_db_config *dbconfig = (struct onak_db_config *) object;
index d0495207af945f561e26d778f18a65c566fb845b..7c15cbb02583e7d6e2284e04ea7911979f561a14 100644 (file)
@@ -115,6 +115,14 @@ extern struct onak_config config;
  */
 void readconfig(const char *configfile);
 
+/**
+ * @brief write the onak config.
+ * @param configfile the config file to write to.
+ *
+ * Write out the config file. If config file is NULL write it to STDOUT.
+ */
+void writeconfig(const char *configfile);
+
 /**
  * @brief clean up the config when we're shutting down.
  */
diff --git a/onak.1 b/onak.1
index 0ad015c00eff8ac7c3fbe8486dc66e82384a3a71..3b3394727ccb49d92ac8910824addcee3161d9aa 100644 (file)
--- a/onak.1
+++ b/onak.1
@@ -39,6 +39,12 @@ Read OpenPGP keys from stdin and add them to the keyserver database.
 Read OpenPGP keys from stdin, run the key cleaning routines against them and
 dump to stdout.
 .TP
+.B dumpconfig
+Dump the running config in new .ini format to stdout, or the provided file.
+Intended to help with migration from old style configuration files - onak can
+read and parse the old style file and this command will output the equivalent
+new style configuration.
+.TP
 .B delete
 Delete a given key from the keyserver.
 .TP
diff --git a/onak.c b/onak.c
index ef7134162a649d4861dbf9201043ec9d28941f20..17625baf59eed00909e2d39849e1f3aa20d50ebd 100644 (file)
--- a/onak.c
+++ b/onak.c
@@ -318,6 +318,13 @@ int main(int argc, char *argv[])
                        free_publickey(keys);
                        keys = NULL;
                }
+       } else if (!strcmp("dumpconfig", argv[optind])) {
+               if ((argc - optind) == 2) {
+                       writeconfig(argv[optind + 1]);
+               } else {
+                       /* Dump config to stdout */
+                       writeconfig(NULL);
+               }
        } else if ((argc - optind) == 2) {
                search = argv[optind+1];
                if (search != NULL && strlen(search) == 42 &&