Disobedience checks server version and expects rights-changed
[disorder] / lib / trackdb.c
index 9125c0c..0b10d72 100644 (file)
  * This file is getting in desparate need of splitting up...
  */
 
-#include <config.h>
-#include "types.h"
+#include "common.h"
 
-#include <string.h>
-#include <stdio.h>
 #include <db.h>
 #include <sys/socket.h>
 #include <pcre.h>
-#include <assert.h>
 #include <unistd.h>
 #include <errno.h>
 #include <stddef.h>
@@ -39,7 +35,6 @@
 #include <sys/resource.h>
 #include <time.h>
 #include <arpa/inet.h>
-#include <sys/wait.h>
 #include <dirent.h>
 #include <sys/stat.h>
 #include <gcrypt.h>
@@ -145,6 +140,17 @@ DB *trackdb_globaldb;                   /* global preferences */
  */
 DB *trackdb_noticeddb;                   /* when track noticed */
 
+/** @brief The schedule database
+ *
+ * - Keys are ID strings, generated at random
+ * - Values are encoded key-value pairs
+ * - There can be more than one value per key
+ * - Data cannot be reconstructed
+ *
+ * See @ref server/schedule.c for further information.
+ */
+DB *trackdb_scheduledb;
+
 /** @brief The user database
  * - Keys are usernames
  * - Values are encoded key-value pairs
@@ -460,6 +466,7 @@ void trackdb_open(int flags) {
   trackdb_globaldb = open_db("global.db", 0, DB_HASH, dbflags, 0666);
   trackdb_noticeddb = open_db("noticed.db",
                              DB_DUPSORT, DB_BTREE, dbflags, 0666);
+  trackdb_scheduledb = open_db("schedule.db", 0, DB_HASH, dbflags, 0666);
   if(!trackdb_existing_database) {
     /* Stash the database version */
     char buf[32];
@@ -490,6 +497,8 @@ void trackdb_close(void) {
     fatal(0, "error closing global.db: %s", db_strerror(err));
   if((err = trackdb_noticeddb->close(trackdb_noticeddb, 0)))
     fatal(0, "error closing noticed.db: %s", db_strerror(err));
+  if((err = trackdb_scheduledb->close(trackdb_scheduledb, 0)))
+    fatal(0, "error closing schedule.db: %s", db_strerror(err));
   if((err = trackdb_usersdb->close(trackdb_usersdb, 0)))
     fatal(0, "error closing users.db: %s", db_strerror(err));
   trackdb_tracksdb = trackdb_searchdb = trackdb_prefsdb = 0;
@@ -2195,7 +2204,7 @@ static int reap_rescan(ev_source attribute((unused)) *ev,
   eventlog("rescanned", (char *)0);
   /* Call rescanned callbacks */
   while(rescanned_list) {
-    void (*rescanned)(void *u) = rescanned_list->rescanned;
+    void (*rescanned)(void *u_) = rescanned_list->rescanned;
     void *ru = rescanned_list->ru;
 
     rescanned_list = rescanned_list->next;
@@ -2374,6 +2383,9 @@ char **trackdb_new(int *ntracksp,
  * @return null-terminated array of track names, or NULL on deadlock
  *
  * The most recently added track is first in the array.
+ *
+ * TODO: exclude tracks that have been deleted again.
+ *
  */
 static char **trackdb_new_tid(int *ntracksp,
                               int maxtracks,
@@ -2669,6 +2681,7 @@ int trackdb_adduser(const char *user,
            user, rights, email);
     else
       info("created user '%s' with rights '%s'", user, rights);
+    eventlog("user-add", user, (char *)0);
     return 0;
   }
 }
@@ -2686,6 +2699,7 @@ int trackdb_deluser(const char *user) {
     return -1;
   }
   info("deleted user '%s'", user);
+  eventlog("user-delete", user, (char *)0);
   return 0;
 }
 
@@ -2765,8 +2779,10 @@ int trackdb_edituserinfo(const char *user,
   if(e) {
     error(0, "unknown user '%s'", user);
     return -1;
-  } else
+  } else {
+    eventlog("user-edit", user, key, (char *)0);
     return 0;
+  }
 }
 
 /** @brief List all users
@@ -2832,6 +2848,7 @@ int trackdb_confirm(const char *user, const char *confirmation,
   switch(e) {
   case 0:
     info("registration confirmed for user '%s'", user);
+    eventlog("user-confirm", user, (char *)0);
     return 0;
   case DB_NOTFOUND:
     error(0, "confirmation for nonexistent user '%s'", user);