chiark / gitweb /
Clients now test whether users.db is readable before blundering in and
authorRichard Kettlewell <rjk@greenend.org.uk>
Sun, 20 Apr 2008 17:15:49 +0000 (18:15 +0100)
committerRichard Kettlewell <rjk@greenend.org.uk>
Sun, 20 Apr 2008 17:15:49 +0000 (18:15 +0100)
trying it.  They will still fail in all the cases they did before but
much more gracefuly.

CHANGES
lib/client.c
lib/trackdb-stub.c
lib/trackdb.c
lib/trackdb.h

diff --git a/CHANGES b/CHANGES
index 6d92b623a64982a6eb00a674b14abe9b2ddd8f0f..aff856b89737b461c8e793f7a5380d1101ddb62c 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,8 @@ Builds --without-server should work again.
 The web interface is a bit more liberal in the cookie value syntax it
 will accept.
 
+Clients fail more gracefully if no password is available.
+
 * Changes up to version 3.0.1
 
 Debian upgrades from 2.0.x should now work better.
index 75381c6f26354ccc9bc1981854b741d278802eb9..4dfd10cc27b9b11e321a9d44405595a12a8c1e5d 100644 (file)
@@ -389,9 +389,8 @@ int disorder_connect(disorder_client *c) {
     return -1;
   }
   password = config->password;
-  if(!password) {
-    /* Maybe we can read the database */
-    /* TODO failure to open the database should not be fatal */
+  /* Maybe we can read the database */
+  if(!password && trackdb_readable()) {
     trackdb_init(TRACKDB_NO_RECOVER|TRACKDB_NO_UPGRADE);
     trackdb_open(TRACKDB_READ_ONLY);
     password = trackdb_get_password(username);
index 22174d396f93369ddbe2e6aa97fde16740f573c6..3b92c97627277d14bf921ea88967e2edbee86ca5 100644 (file)
@@ -44,6 +44,10 @@ void trackdb_open(int attribute((unused)) flags) {
 void trackdb_init(int attribute((unused)) flags) {
 }
 
+int trackdb_readable(void) {
+  return 0;
+}
+
 /*
 Local Variables:
 c-basic-offset:2
index 8945ec3a3f6538328934881ff1cfd0a4bceaa7d3..875acc5b485517f3c5ff4f3c20443cdae0d263d5 100644 (file)
@@ -166,6 +166,16 @@ static int compare(DB attribute((unused)) *db_,
   return compare_path_raw(a->data, a->size, b->data, b->size);
 }
 
+/** @brief Test whether the track database can be read
+ * @return 1 if it can, 0 if it cannot
+ */
+int trackdb_readable(void) {
+  char *usersdb;
+
+  byte_xasprintf(&usersdb, "%s/users.db", config->home);
+  return access(usersdb, R_OK) == 0;
+}
+
 /** @brief Open database environment
  * @param flags Flags word
  *
index 804ff5ab30d386421d7b5b23b1b297c47150a347..e100f2594bd82ed4c6d4d4a8c6db41f4482fa54e 100644 (file)
@@ -171,6 +171,7 @@ int trackdb_edituserinfo(const char *user,
 char **trackdb_listusers(void);
 int trackdb_confirm(const char *user, const char *confirmation,
                     rights_type *rightsp);
+int trackdb_readable(void);
 
 #endif /* TRACKDB_H */