Debian 1.0.4-2 with lower connect timeout
[pazpar2-moved-to-github.git] / src / settings.c
index e0ef312..5a0dd2a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: settings.c,v 1.21 2007-05-16 17:16:21 quinn Exp $
+/* $Id: settings.c,v 1.26 2007-07-30 23:16:33 quinn Exp $
    Copyright (c) 2006-2007, Index Data.
 
 This file is part of Pazpar2.
@@ -59,6 +59,8 @@ static char *hard_settings[] = {
     "pz:name",
     "pz:queryencoding",
     "pz:ip",
+    "pz:zproxy",
+    "pz:apdulog",
     0
 };
 
@@ -295,6 +297,7 @@ static void update_database(void *context, struct database *db)
     if (!match_zurl(db->url, set->target))
         return;
 
+#ifdef GAGA
     // Initialize settings array if it doesn't exist.
     // If so, also set the 'id' automatic setting
     if (!db->settings)
@@ -309,6 +312,7 @@ static void update_database(void *context, struct database *db)
         id->next = 0;
         db->settings[PZ_ID] = id;
     }
+#endif
     if ((offset = settings_offset_cprefix(set->name)) < 0)
         abort(); // Should never get here
 
@@ -349,7 +353,7 @@ static void update_database(void *context, struct database *db)
 // This is used in pass 2 to assign name/value pairs to databases
 static void update_databases(struct setting *set)
 {
-    grep_databases(set, 0, update_database);
+    predef_grep_databases(set, 0, update_database);
 }
 
 // This simply copies the 'hard' (application-specific) settings
@@ -362,6 +366,30 @@ static void initialize_hard_settings(struct setting_dictionary *dict)
     dict->num = dict->size;
 }
 
+// Read any settings names introduced in service definition (config) and add to dictionary
+// This is done now to avoid errors if user settings are declared in session overrides
+static void initialize_soft_settings()
+{
+    struct conf_service *service = config->servers->service;
+    int i;
+
+    for (i = 0; i < service->num_metadata; i++)
+    {
+        struct setting set;
+        struct conf_metadata *md = &service->metadata[i];
+
+        if (md->setting == Metadata_setting_no)
+            continue;
+
+        set.precedence = 0;
+        set.target = "";
+        set.name = md->name;
+        set.value = "";
+        set.next = 0;
+        prepare_dictionary(&set);
+    }
+}
+
 // If we ever decide we need to be able to specify multiple settings directories,
 // the two calls to read_settings must be split -- so the dictionary is prepared
 // for the contents of every directory before the databases are updated.
@@ -382,6 +410,7 @@ void init_settings(void)
     memset(new, 0, sizeof(*new));
     initialize_hard_settings(new);
     dictionary = new;
+    initialize_soft_settings();
 }
 
 /*