From bcef8d6fc5b847e912275ddad1d001a336ccdbc9 Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Sat, 1 Dec 2012 12:08:24 +0000 Subject: [PATCH] Move --wait-for-root to disorderd. Organization: Straylight/Edgeware From: Richard Kettlewell This (undocumented) option is only used in testing and is one of the things that causes the client package to depend on the server's version of libdb. --- clients/disorder.c | 31 +++---------------------------- server/disorderd.c | 35 ++++++++++++++++++++++++++++++++--- tests/dtest.py | 4 ++-- 3 files changed, 37 insertions(+), 33 deletions(-) diff --git a/clients/disorder.c b/clients/disorder.c index b401c62..7966dbc 100644 --- a/clients/disorder.c +++ b/clients/disorder.c @@ -1,6 +1,6 @@ /* * This file is part of DisOrder. - * Copyright (C) 2004-2009 Richard Kettlewell + * Copyright (C) 2004-2012 Richard Kettlewell * * 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 @@ -52,7 +52,6 @@ #include "vector.h" #include "version.h" #include "dateparse.h" -#include "trackdb.h" #include "inputline.h" static disorder_client *client; @@ -67,7 +66,6 @@ static const struct option options[] = { { "help-commands", no_argument, 0, 'H' }, { "user", required_argument, 0, 'u' }, { "password", required_argument, 0, 'p' }, - { "wait-for-root", no_argument, 0, 'W' }, { 0, 0, 0, 0 } }; @@ -844,28 +842,8 @@ static void help_commands(void) { exit(0); } -static void wait_for_root(void) { - const char *password; - - while(!trackdb_readable()) { - disorder_info("waiting for trackdb..."); - sleep(1); - } - trackdb_init(TRACKDB_NO_RECOVER|TRACKDB_NO_UPGRADE); - for(;;) { - trackdb_open(TRACKDB_READ_ONLY); - password = trackdb_get_password("root"); - trackdb_close(); - if(password) - break; - disorder_info("waiting for root user to be created..."); - sleep(1); - } - trackdb_deinit(NULL); -} - int main(int argc, char **argv) { - int n, i, j, local = 0, wfr = 0; + int n, i, j, local = 0; int status = 0; struct vector args; const char *user = 0, *password = 0; @@ -876,7 +854,7 @@ int main(int argc, char **argv) { pcre_free = xfree; if(!setlocale(LC_CTYPE, "")) disorder_fatal(errno, "error calling setlocale"); if(!setlocale(LC_TIME, "")) disorder_fatal(errno, "error calling setlocale"); - while((n = getopt_long(argc, argv, "+hVc:dHlNu:p:W", options, 0)) >= 0) { + while((n = getopt_long(argc, argv, "+hVc:dHlNu:p:", options, 0)) >= 0) { switch(n) { case 'h': help(); case 'H': help_commands(); @@ -887,7 +865,6 @@ int main(int argc, char **argv) { case 'N': config_per_user = 0; break; case 'u': user = optarg; break; case 'p': password = optarg; break; - case 'W': wfr = 1; break; default: disorder_fatal(0, "invalid option"); } } @@ -903,8 +880,6 @@ int main(int argc, char **argv) { } if(local) config->connect.af = -1; - if(wfr) - wait_for_root(); n = optind; optind = 1; /* for subsequent getopt calls */ /* gcrypt initialization */ diff --git a/server/disorderd.c b/server/disorderd.c index af8347a..612ac28 100644 --- a/server/disorderd.c +++ b/server/disorderd.c @@ -1,6 +1,6 @@ /* * This file is part of DisOrder. - * Copyright (C) 2004-2009 Richard Kettlewell + * Copyright (C) 2004-2012 Richard Kettlewell * * 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 @@ -31,6 +31,7 @@ static const struct option options[] = { { "log", required_argument, 0, 'l' }, { "pidfile", required_argument, 0, 'P' }, { "wide-open", no_argument, 0, 'w' }, + { "wait-for-root", no_argument, 0, 'W' }, { "syslog", no_argument, 0, 's' }, { 0, 0, 0, 0 } }; @@ -176,8 +177,29 @@ static void fix_path(void) { disorder_info("%s", newpath); } +/* Used by test scripts to wait for things to get ready */ +static void wait_for_root(void) { + const char *password; + + while(!trackdb_readable()) { + disorder_info("waiting for trackdb..."); + sleep(1); + } + trackdb_init(TRACKDB_NO_RECOVER|TRACKDB_NO_UPGRADE); + for(;;) { + trackdb_open(TRACKDB_READ_ONLY); + password = trackdb_get_password("root"); + trackdb_close(); + if(password) + break; + disorder_info("waiting for root user to be created..."); + sleep(1); + } + trackdb_deinit(NULL); +} + int main(int argc, char **argv) { - int n, background = 1, logsyslog = 0; + int n, background = 1, logsyslog = 0, wfr = 0; const char *pidfile = 0; struct rlimit rl[1]; @@ -188,7 +210,7 @@ int main(int argc, char **argv) { /* garbage-collect PCRE's memory */ pcre_malloc = xmalloc; pcre_free = xfree; - while((n = getopt_long(argc, argv, "hVc:dfP:Ns", options, 0)) >= 0) { + while((n = getopt_long(argc, argv, "hVc:dfP:NsW", options, 0)) >= 0) { switch(n) { case 'h': help(); case 'V': version("disorderd"); @@ -198,9 +220,16 @@ int main(int argc, char **argv) { case 'P': pidfile = optarg; break; case 's': logsyslog = 1; break; case 'w': wideopen = 1; break; + case 'W': wfr = 1; break; default: disorder_fatal(0, "invalid option"); } } + if(wfr) { + if(config_read(1, NULL)) + disorder_fatal(0, "cannot read configuration"); + wait_for_root(); + return 0; + } /* go into background if necessary */ if(background) daemonize(progname, LOG_DAEMON, pidfile); diff --git a/tests/dtest.py b/tests/dtest.py index 74a7eb8..049eadf 100644 --- a/tests/dtest.py +++ b/tests/dtest.py @@ -255,8 +255,8 @@ Start the daemon.""" if waited > 0: print " took about %ss for socket to appear" % waited # Wait for root user to be created - command(["disorder", - "--config", disorder._configfile, "--no-per-user-config", + command(["disorderd", + "--config", disorder._configfile, "--wait-for-root"]) def create_user(username="fred", password="fredpass"): -- [mdw]