Index: trunk/psModules/src/config/pmConfig.c
===================================================================
--- trunk/psModules/src/config/pmConfig.c	(revision 18908)
+++ trunk/psModules/src/config/pmConfig.c	(revision 18921)
@@ -1264,4 +1264,19 @@
 }
 
+// Look up a value from the user or site configuration
+#define CONFIG_USER_SITE(TYPE, TARGET, TYPENAME, NAME, DEFAULT) \
+    TYPE TARGET; \
+    { \
+        bool status = false;                /* Status of MD lookup */ \
+        TARGET = psMetadataLookup##TYPENAME(&status, config->user, NAME); \
+        if (!status) { \
+            TARGET = psMetadataLookup##TYPENAME(&status, config->site, NAME); \
+            if (!status) { \
+                TARGET = DEFAULT; \
+            } \
+        } \
+    }
+
+
 psDB *pmConfigDB(pmConfig *config)
 {
@@ -1269,5 +1284,5 @@
     PS_ASSERT_PTR_NON_NULL(config->user, NULL);
 
-    #ifndef HAVE_PSDB
+#ifndef HAVE_PSDB
 
     psError(PS_ERR_UNKNOWN, false,
@@ -1275,5 +1290,5 @@
     return NULL;
 
-    #else
+#else
 
     if (config->database) {
@@ -1281,21 +1296,13 @@
     }
 
-    psBool mdStatus01 = false;
-    psBool mdStatus02 = false;
-    psBool mdStatus03 = false;
-    psBool mdStatus04 = false;
-    psBool mdStatus05 = false;
-
-    // XXX leaky strings
-    psString dbServer = psMetadataLookupStr(&mdStatus01, config->user, "DBSERVER");
-    psString dbUsername = psMetadataLookupStr(&mdStatus02, config->user, "DBUSER");
-    psString dbPassword = psMetadataLookupStr(&mdStatus03, config->user, "DBPASSWORD");
-    psString dbName = psMetadataLookupStr(&mdStatus04, config->user, "DBNAME");
-    psS32 dbPort = psMetadataLookupS32(&mdStatus05, config->user, "DBPORT");
-    if (!mdStatus05) {
-        dbPort = 0;
-    }
-    if (!(mdStatus01 && mdStatus02 && mdStatus03 && mdStatus04)) {
-        psWarning("Could not determine database server, name, user, and password from site metadata.\n");
+    CONFIG_USER_SITE(const char*, dbServer, Str, "DBSERVER",   NULL);
+    CONFIG_USER_SITE(const char*, dbUser,   Str, "DBUSER",     NULL);
+    CONFIG_USER_SITE(const char*, dbPass,   Str, "DBPASSWORD", NULL);
+    CONFIG_USER_SITE(const char*, dbName,   Str, "DBNAME",     NULL);
+    CONFIG_USER_SITE(int,         dbPort,   S32, "DBPORT",     0);
+
+    if (!dbServer || !dbUser || !dbPass || !dbName) {
+        psWarning("Cannot find DBSERVER/DBUSER/DBPASSWORD/DBNAME in user or site configuration: "
+                  "unable to connect to database.");
         return NULL;
     }
@@ -1306,7 +1313,8 @@
     }
 
-    config->database = psDBInit(dbServer, dbUsername, dbPassword, dbName, dbPort);
+    config->database = psDBInit(dbServer, dbUser, dbPass, dbName, dbPort);
     return config->database;
-    #endif
+
+#endif
 }
 
