chiark / gitweb /
server: docs: remove deprecated configuration and user upgrade.
authorRichard Kettlewell <rjk@terraraq.org.uk>
Sun, 7 Aug 2011 17:26:34 +0000 (18:26 +0100)
committerRichard Kettlewell <rjk@terraraq.org.uk>
Sun, 7 Aug 2011 17:26:34 +0000 (18:26 +0100)
User upgrade code has been removed.

allow, restrict and trust only affected the user upgrade code.  They
are now removed completely.

prefsync and lock have been non-functional for years.

--wait-for-device and gap, both ugly hacks, were still functional but
long-since deprecated.

16 files changed:
CHANGES.html
README.upgrades.html
cgi/actions.c
doc/disorder_config.5.in
lib/configuration.c
lib/configuration.h
lib/trackdb.c
lib/trackdb.h
server/background.c
server/disorder-server.h
server/disorderd.c
server/play.c
server/server.c
tests/Makefile.am
tests/dtest.py
tests/user-upgrade.py [deleted file]

index 75a9ef48d3d2dd6f0beac5ea0269820ddf0dfc47..df193470a419167ea88ac7f1719644f2c2e0c987 100644 (file)
@@ -68,6 +68,24 @@ href="README.upgrades.html">README.upgrades</a> before upgrading.</p>
     href="http://www.unicode.org/versions/Unicode6.0.0/">Unicode
     6.0.0</a>.</p>
     
+    <p>The following have been removed:</p>
+
+    <ul>
+
+      <li>The <tt>allow</tt>, <tt>gap</tt>, <tt>lock</tt>, <tt>prefsync</tt>, 
+      <tt>restrict</tt>, <tt>trust</tt> configuration commands.  If they still
+      appear in your configuration file then the server will not start.</li>
+
+      <li>The <tt>columns</tt> web interface option.  It will generate an
+      message in your error log but otherwise be ignored.</li>
+
+      <li>The <tt>--wait-for-device</tt> player option.  If it still appears in
+      any player commands, they will not work.</li>
+
+      <li>Support for automatically importing pre-3.0 users.</li>
+
+    </ul>
+
     <p>Various minor bug fixes.</p>
 
   </div>
index 842cf40d8a1c57429d41ef3157b26aef57abc1fb..c628b06d3a59e6c618fa2f502e4f2f54adf35f2c 100644 (file)
     <li>trust</li>
         </ul>
 
+    <p>(As of 5.1 these options are completely gone.)</p>
+
     <h2>3.0 -> 4.x</h2>
 
     <p>If you customized any of the templates, you will pretty much have to
     version but for now they will generate harmless error messages.  Remove
     them and the error messages will go away.</p>
 
+    <p>(Note: these options, and the code for upgrading old users, has been
+    removed entirely in release 5.1.  You must either manually re-create your
+    users, or upgrade via 5.0.3.)</p>
+
     <p>See README for new setup instructions for the web interface.</p>
 
     <h3>Other Server Configuration</h3>
index 584da76c040a88c0ea8988c17366c7ae86201acd..6e180984cd6bb07650c34e6aac932cfb0f764aeb 100644 (file)
@@ -76,14 +76,13 @@ static void act_playing(void) {
      && dcgi_playing->sofar >= 0) {
     /* Try to put the next refresh at the start of the next track. */
     xtime(&now);
-    fin = now + length - dcgi_playing->sofar + config->gap;
+    fin = now + length - dcgi_playing->sofar;
     if(now + refresh > fin)
       refresh = fin - now;
   }
   if(dcgi_queue && dcgi_queue->origin == origin_scratch) {
-    /* next track is a scratch, don't leave more than the inter-track gap */
-    if(refresh > config->gap)
-      refresh = config->gap;
+    /* next track is a scratch, refresh immediately */
+    refresh = 0;
   }
   if(!dcgi_playing
      && ((dcgi_queue
@@ -91,9 +90,8 @@ static void act_playing(void) {
          || dcgi_random_enabled)
      && dcgi_enabled) {
     /* no track playing but playing is enabled and there is something coming
-     * up, must be in a gap */
-    if(refresh > config->gap)
-      refresh = config->gap;
+     * up, so refresh immediately */
+    refresh = 0;
   }
   /* Bound the refresh interval below as a back-stop against the above
    * calculations coming up with a stupid answer */
index e16e762984b7314612eadab5d34366ef52a8b185..68ae6011a85b3eb913af017f5932525d3000f04d 100644 (file)
@@ -398,8 +398,7 @@ For the possible values see
 .B "Users And Access Control"
 above.
 .IP
-The default is to allow everything except \fBadmin\fR and \fBregister\fR
-(modified in legacy configurations by the obsolete \fBrestrict\fR directive).
+The default is to allow everything except \fBadmin\fR and \fBregister\fR.
 .TP
 .B device \fINAME\fR
 Sound output device.
@@ -420,9 +419,6 @@ Remember to quote the name.
 The default is \fBdefault\fR, which is intended to map to whatever the system's
 default is.
 .TP
-.B gap \fISECONDS\fR
-This option no longer does anything and will be removed in a future version.
-.TP
 .B history \fIINTEGER\fR
 Specifies the number of recently played tracks to remember (including
 failed tracks and scratches).
@@ -441,9 +437,6 @@ Note that IPv6 is not currently well tested.
 .IP
 Normally the server only listens on a UNIX domain socket.
 .TP
-.B lock yes\fR|\fBno
-This option no longer does anything and will be removed in a future version.
-.TP
 .B mixer \fIDEVICE\fR
 The mixer device name, if it needs to be specified separately from
 \fBdevice\fR.
@@ -585,14 +578,6 @@ Specifies the player for files matching the glob \fIPATTERN\fR.
 The following options are supported:
 .RS
 .TP
-.B \-\-wait\-for\-device\fR[\fB=\fIDEVICE\fR]
-\fBThis option is deprecated\fR.
-If you want gapless play use raw-format players and the speaker process instead.
-(This the default in any case.)
-.IP
-Waits (for up to a couple of seconds) for the default, or specified, libao
-device to become openable.
-.TP
 .B \-\-
 Defines the end of the list of options.
 Needed if the first argument to the plugin starts with a "\-".
@@ -641,9 +626,6 @@ Although players can be changed during the lifetime of the server, note that
 background decoders will not be stopped and restarted using changed
 configuration once they have been started.
 .TP
-.B prefsync \fISECONDS\fR
-This option no longer does anything and will be removed in a future version.
-.TP
 .B queue_pad \fICOUNT\fR
 The target size of the queue.
 If random play is enabled then randomly picked tracks will be added until
index 932c54bdf6e922be82741feff7e274e0bbb7cc0d..4f21d25bc2e1a11c1a93044ac357c3ad73dca4e0 100644 (file)
@@ -323,33 +323,6 @@ static int set_string_accum(const struct config_state *cs,
   return 0;
 }
 
-static int set_restrict(const struct config_state *cs,
-                       const struct conf *whoami,
-                       int nvec, char **vec) {
-  unsigned r = 0;
-  int n, i;
-  
-  static const struct restriction {
-    const char *name;
-    unsigned bit;
-  } restrictions[] = {
-    { "remove", RESTRICT_REMOVE },
-    { "scratch", RESTRICT_SCRATCH },
-    { "move", RESTRICT_MOVE },
-  };
-
-  for(n = 0; n < nvec; ++n) {
-    if((i = TABLE_FIND(restrictions, name, vec[n])) < 0) {
-      disorder_error(0, "%s:%d: invalid restriction '%s'",
-                    cs->path, cs->line, vec[n]);
-      return -1;
-    }
-    r |= restrictions[i].bit;
-  }
-  VALUE(cs->config, unsigned) = r;
-  return 0;
-}
-
 static int parse_sample_format(const struct config_state *cs,
                               struct stream_header *format,
                               int nvec, char **vec) {
@@ -640,7 +613,6 @@ static const struct conftype
   type_stringlist_accum = { set_stringlist_accum, free_stringlistlist },
   type_string_accum = { set_string_accum, free_stringlist },
   type_sample_format = { set_sample_format, free_none },
-  type_restrict = { set_restrict, free_none },
   type_namepart = { set_namepart, free_namepartlist },
   type_transform = { set_transform, free_transformlist },
   type_netaddress = { set_netaddress, free_netaddress },
@@ -750,24 +722,6 @@ static int validate_tracklength(const struct config_state *cs,
   return 0;
 }
 
-/** @brief Validate an allow directive
- * @param cs Configuration state
- * @param nvec Length of (proposed) new value
- * @param vec Elements of new value
- * @return 0 on success, non-0 on error
- *
- * Obsolete - only used for parsing legacy configuration.
- */
-static int validate_allow(const struct config_state *cs,
-                         int nvec,
-                         char attribute((unused)) **vec) {
-  if(nvec != 2) {
-    disorder_error(0, "%s:%d: must be 'allow NAME PASS'", cs->path, cs->line);
-    return -1;
-  }
-  return 0;
-}
-
 /** @brief Validate a non-negative (@c long) integer
  * @param cs Configuration state
  * @param nvec Length of (proposed) new value
@@ -1057,7 +1011,6 @@ static int validate_destaddr(const struct config_state attribute((unused)) *cs,
 /** @brief All configuration items */
 static const struct conf conf[] = {
   { C(alias),            &type_string,           validate_alias },
-  { C(allow),            &type_stringlist_accum, validate_allow },
   { C(api),              &type_string,           validate_backend },
   { C(authorization_algorithm), &type_string,    validate_algo },
   { C(broadcast),        &type_netaddress,       validate_destaddr },
@@ -1072,11 +1025,9 @@ static const struct conf conf[] = {
   { C(dbversion),        &type_integer,          validate_positive },
   { C(default_rights),   &type_rights,           validate_any },
   { C(device),           &type_string,           validate_any },
-  { C(gap),              &type_integer,          validate_non_negative },
   { C(history),          &type_integer,          validate_positive },
   { C(home),             &type_string,           validate_isabspath },
   { C(listen),           &type_netaddress,       validate_any },
-  { C(lock),             &type_boolean,          validate_any },
   { C(mail_sender),      &type_string,           validate_any },
   { C(mixer),            &type_string,           validate_any },
   { C(mount_rescan),     &type_boolean,          validate_any },
@@ -1097,14 +1048,12 @@ static const struct conf conf[] = {
   { C(playlist_lock_timeout), &type_integer,     validate_positive },
   { C(playlist_max) ,    &type_integer,          validate_positive },
   { C(plugins),          &type_string_accum,     validate_isdir },
-  { C(prefsync),         &type_integer,          validate_positive },
   { C(queue_pad),        &type_integer,          validate_positive },
   { C(refresh),          &type_integer,          validate_positive },
   { C(refresh_min),      &type_integer,          validate_non_negative },
   { C(reminder_interval), &type_integer,         validate_positive },
   { C(remote_userman),   &type_boolean,          validate_any },
   { C(replay_min),       &type_integer,          validate_non_negative },
-  { C2(restrict, restrictions),         &type_restrict,         validate_any },
   { C(rtp_delay_threshold), &type_integer,       validate_positive },
   { C(rtp_verbose),      &type_boolean,          validate_any },
   { C(sample_format),    &type_sample_format,    validate_sample_format },
@@ -1120,7 +1069,6 @@ static const struct conf conf[] = {
   { C(templates),        &type_string_accum,     validate_isdir },
   { C(tracklength),      &type_stringlist_accum, validate_tracklength },
   { C(transform),        &type_transform,        validate_any },
-  { C(trust),            &type_string_accum,     validate_any },
   { C(url),              &type_string,           validate_url },
   { C(user),             &type_string,           validate_isauser },
   { C(username),         &type_string,           validate_any },
@@ -1333,7 +1281,6 @@ static struct config *config_default(void) {
   cs.line = 0;
   cs.config = c;
   /* Strings had better be xstrdup'd as they will get freed at some point. */
-  c->gap = 0;
   c->history = 60;
   c->home = xstrdup(pkgstatedir);
   if(!(pw = getpwuid(getuid())))
@@ -1342,10 +1289,8 @@ static struct config *config_default(void) {
   c->username = xstrdup(logname);
   c->refresh = 15;
   c->refresh_min = 1;
-  c->prefsync = 0;
   c->signal = SIGKILL;
   c->alias = xstrdup("{/artist}{/album}{/title}{ext}");
-  c->lock = 1;
   c->device = xstrdup("default");
   c->nice_rescan = 10;
   c->speaker_command = 0;
@@ -1514,18 +1459,7 @@ static void config_postdefaults(struct config *c,
                                     |RIGHT_MOVE__MASK
                                     |RIGHT_SCRATCH__MASK
                                     |RIGHT_REMOVE__MASK);
-    /* The idea is to approximate the meaning of the old 'restrict' directive
-     * in the default rights if they are not overridden. */
-    if(c->restrictions & RESTRICT_SCRATCH)
-      r |= RIGHT_SCRATCH_MINE|RIGHT_SCRATCH_RANDOM;
-    else
-      r |= RIGHT_SCRATCH_ANY;
-    if(!(c->restrictions & RESTRICT_MOVE))
-      r |= RIGHT_MOVE_ANY;
-    if(c->restrictions & RESTRICT_REMOVE)
-      r |= RIGHT_REMOVE_MINE;
-    else
-      r |= RIGHT_REMOVE_ANY;
+    r |= RIGHT_SCRATCH_ANY|RIGHT_MOVE_ANY|RIGHT_REMOVE_ANY;
     c->default_rights = rights_string(r);
   }
 }
@@ -1612,18 +1546,6 @@ int config_read(int server,
   /* everything is good so we shall use the new config */
   config_free(config);
   /* warn about obsolete directives */
-  if(c->restrictions)
-    disorder_error(0, "'restrict' will be removed in a future version");
-  if(c->allow.n)
-    disorder_error(0, "'allow' will be removed in a future version");
-  if(c->trust.n)
-    disorder_error(0, "'trust' will be removed in a future version");
-  if(!c->lock)
-    disorder_error(0, "'lock' will be removed in a future version");
-  if(c->gap)
-    disorder_error(0, "'gap' will be removed in a future version");
-  if(c->prefsync)
-    disorder_error(0, "'prefsync' will be removed in a future version");
   config = c;
   return 0;
 }
index 63c82c8db368d2c8358b0a072aa59833e4df871d..ed6d3f11875929ecc634595a8845be5d335866ef 100644 (file)
@@ -112,24 +112,15 @@ struct config {
   /** @brief All tracklength plugins */
   struct stringlistlist tracklength;
 
-  /** @brief Allowed users */
-  struct stringlistlist allow;
-
   /** @brief Scratch tracks */
   struct stringlist scratch;
 
-  /** @brief Gap between tracks in seconds */
-  long gap;
-
   /** @brief Maximum number of recent tracks to record in history */
   long history;
 
   /** @brief Expiry limit for noticed.db */
   long noticed_history;
   
-  /** @brief Trusted users */
-  struct stringlist trust;
-
   /** @brief User for server to run as */
   const char *user;
 
@@ -157,17 +148,12 @@ struct config {
   /** @brief Mixer channel to use */
   char *channel;
 
-  long prefsync;                       /* preflog sync interval */
-
   /** @brief Secondary listen address */
   struct netaddress listen;
 
   /** @brief Alias format string */
   const char *alias;
 
-  /** @brief Enable server locking */
-  int lock;
-
   /** @brief Nice value for server */
   long nice_server;
 
@@ -222,16 +208,6 @@ struct config {
   /** @brief Minimum refresh interval for web interface (seconds) */
   long refresh_min;
 
-  /** @brief Facilities restricted to trusted users
-   *
-   * A bitmap of @ref RESTRICT_SCRATCH, @ref RESTRICT_REMOVE and @ref
-   * RESTRICT_MOVE.
-   */
-  unsigned restrictions;               /* restrictions */
-#define RESTRICT_SCRATCH 1             /**< Restrict scratching */
-#define RESTRICT_REMOVE 2              /**< Restrict removal */
-#define RESTRICT_MOVE 4                        /**< Restrict rearrangement */
-
   /** @brief Target queue length */
   long queue_pad;
 
index 7be53c14d3b92d7866be5ef4b81bd9661d5cad1f..aa9ad56a4c90abe98c35ea0a931ec40f01c9143f 100644 (file)
@@ -3005,21 +3005,6 @@ void trackdb_gc(void) {
 
 /* user database *************************************************************/
 
-/** @brief Return true if @p user is trusted
- * @param user User to look up
- * @return Nonzero if they are in the 'trusted' list
- *
- * Now used only in upgrade from old versions.
- */
-static int trusted(const char *user) {
-  int n;
-
-  for(n = 0; (n < config->trust.n
-             && strcmp(config->trust.s[n], user)); ++n)
-    ;
-  return n < config->trust.n;
-}
-
 /** @brief Add a user
  * @param user Username
  * @param password Initial password or NULL
@@ -3096,41 +3081,6 @@ static int one_old_user(const char *user, const char *password,
                      tid, DB_NOOVERWRITE);
 }
 
-/** @brief Upgrade old users
- * @param tid Owning transaction
- * @return 0 or DB_LOCK_DEADLOCK
- */
-static int trackdb_old_users_tid(DB_TXN *tid) {
-  int n;
-
-  for(n = 0; n < config->allow.n; ++n) {
-    switch(one_old_user(config->allow.s[n].s[0], config->allow.s[n].s[1],
-                        tid)) {
-    case 0:
-      disorder_info("created user %s from 'allow' directive",
-                    config->allow.s[n].s[0]);
-      break;
-    case DB_KEYEXIST:
-      disorder_error(0, "user %s already exists, delete 'allow' directive",
-            config->allow.s[n].s[0]);
-          /* This won't ever become fatal - eventually 'allow' will be
-           * disabled. */
-      break;
-    case DB_LOCK_DEADLOCK:
-      return DB_LOCK_DEADLOCK;
-    }
-  }
-  return 0;
-}
-
-/** @brief Read old 'allow' directives and copy them to the users database */
-void trackdb_old_users(void) {
-  int e;
-
-  if(config->allow.n)
-    WITH_TRANSACTION(trackdb_old_users_tid(tid));
-}
-
 /** @brief Create a root user in the user database if there is none */
 void trackdb_create_root(void) {
   int e;
index a37c81b3fd8c478d366529b0624a56bb2b897c73..1a74bb7fd176e74129c5a89656f6ab619f16921f 100644 (file)
@@ -159,7 +159,6 @@ const char *trackdb_get_global(const char *name);
 char **trackdb_new(int *ntracksp, int maxtracks);
 
 void trackdb_expire_noticed(time_t when);
-void trackdb_old_users(void);
 void trackdb_create_root(void);
 const char *trackdb_get_password(const char *user);
 int trackdb_adduser(const char *user,
index 4901047903b8e77f54290b0792142cb1fb2cc519..3a56bcebe1c49c015b2634a83a0776c3167f7386 100644 (file)
@@ -70,19 +70,9 @@ int play_background(ev_source *ev,
       --optc;
       break;
     }
-    if(!strcmp(optv[0], "--wait-for-device")
-       || !strncmp(optv[0], "--wait-for-device=", 18)) {
-      const char *waitdevice;
-      if((waitdevice = strchr(optv[0], '='))) {
-       params->waitdevice = waitdevice + 1;
-      } else
-        params->waitdevice = "";       /* use default */
-      ++optv;
-      --optc;
-    } else {
-      disorder_error(0, "unknown option %s", optv[0]);
-      return START_HARDFAIL;
-    }
+    /* Currently no options supported */
+    disorder_error(0, "unknown option %s", optv[0]);
+    return START_HARDFAIL;
   }
   params->argc = optc;
   params->argv = optv;
index bc90c9b046548d167042551a8bd04fcf5c8e4677..a110aa6bbd2ed490f73260dfe0eac5c214a702c1 100644 (file)
@@ -348,8 +348,6 @@ struct pbgc_params {
   int argc;
   /** @brief Player command */
   const char **argv;
-  /** @brief Device to wait for or NULL */
-  const char *waitdevice;
   /** @brief Raw track name */
   const char *rawpath;
 };
index 3e1ab441c897bfcdfd33dd8a74b54cc65a787aa9..af8347a75b6c3ddb0de7d03984cf81f297c66ac9 100644 (file)
@@ -278,8 +278,6 @@ int main(int argc, char **argv) {
   recent_read();
   /* Arrange timeouts for schedule actions */
   schedule_init(ev);
-  /* pull in old users */
-  trackdb_old_users();
   /* create a root login */
   trackdb_create_root();
   /* create sockets */
index 9b919d1d13c301509d969b1568a1fdf671557598..b6d3dcc466dea7c2b2eba382c98ac87c24b46096 100644 (file)
@@ -340,33 +340,6 @@ static int start_child(struct queue_entry *q,
                        void attribute((unused)) *bgdata) {
   int n;
 
-  /* Wait for a device to clear.  This ugliness is now deprecated and will
-   * eventually be removed. */
-  if(params->waitdevice) {
-    ao_initialize();
-    if(*params->waitdevice) {
-      n = ao_driver_id(params->waitdevice);
-      if(n == -1)
-        disorder_fatal(0, "invalid libao driver: %s", params->waitdevice);
-    } else
-      n = ao_default_driver_id();
-    /* Make up a format. */
-    ao_sample_format format;
-    memset(&format, 0, sizeof format);
-    format.bits = 8;
-    format.rate = 44100;
-    format.channels = 1;
-    format.byte_format = AO_FMT_NATIVE;
-    int retries = 20;
-    struct timespec ts;
-    ts.tv_sec = 0;
-    ts.tv_nsec = 100000000;             /* 0.1s */
-    ao_device *device;
-    while((device = ao_open_live(n, &format, 0)) == 0 && retries-- > 0)
-      nanosleep(&ts, 0);
-    if(device)
-      ao_close(device);
-  }
   /* Play the track */
   play_track(q->pl,
              params->argv, params->argc,
index 1169e2fa09f6f7756b6c33e19e2c6bc6739b160c..44c3a87775793edd1c667bb3f37acf66917109fd 100644 (file)
@@ -634,7 +634,7 @@ static int c_queue(struct conn *c,
       if((l = trackdb_get(playing->track, "_length"))
         && (length = atol(l))) {
        xtime(&when);
-       when += length - playing->sofar + config->gap;
+       when += length - playing->sofar;
       }
     } else
       /* Nothing is playing but playing is enabled, so whatever is
@@ -649,7 +649,7 @@ static int c_queue(struct conn *c,
     if(when) {
       if((l = trackdb_get(q->track, "_length"))
         && (length = atol(l)))
-       when += length + config->gap;
+       when += length;
       else
        when = 0;
     }
index 5563f7fbeb61c590ed53df901d39033c8e73407f..a964b1114efe0299733a4a519de34bf823ef242b 100644 (file)
@@ -25,7 +25,7 @@ disorder_udplog_LDADD=$(LIBOBJS) ../lib/libdisorder.a $(LIBGC)
 disorder_udplog_DEPENDENCIES=../lib/libdisorder.a
 
 TESTS=cookie.py dbversion.py dump.py files.py play.py queue.py \
-       recode.py search.py user-upgrade.py user.py aliases.py  \
+       recode.py search.py user.py aliases.py  \
        schedule.py hashes.py playlists.py
 
 TESTS_ENVIRONMENT=${PYTHON} -u
index a5a8be9c7c483ad2de06fad4831e8857ec1526de..74a7eb867a12365fcaa383e5bf8d61404cab6c18 100644 (file)
@@ -170,7 +170,6 @@ def default_config(encoding="UTF-8"):
     """home %s/home
 collection fs %s %s/tracks
 scratch %s/scratch.ogg
-gap 0
 queue_pad 5
 stopword 01 02 03 04 05 06 07 08 09 10
 stopword 1 2 3 4 5 6 7 8 9
diff --git a/tests/user-upgrade.py b/tests/user-upgrade.py
deleted file mode 100755 (executable)
index 019c4c9..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#! /usr/bin/env python
-#
-# This file is part of DisOrder.
-# Copyright (C) 2007, 2008 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
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-import dtest,disorder
-
-def test():
-    """Test upgrade to new user database"""
-    print " testing upgrade from old versions"
-    open("%s/config" % dtest.testroot, "a").write(
-      """allow fred fredpass
-trust fred
-""")
-    dtest.start_daemon()
-    print " checking can log in after upgrade"
-    c = disorder.client()
-    c.version()
-    dtest.stop_daemon()
-    dtest.default_config()
-    dtest.start_daemon()
-    print " checking can log in after removing 'allow'"
-    c = disorder.client()
-    c.version()
-
-if __name__ == '__main__':
-    dtest.run()