X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=citadel%2Fserver%2Fbackends%2Fcommon%2Fdatabase.c;h=0b8276b0713ee9fca754bc97e3c91e36eca35929;hp=a07dd22e652d9dc46d1aa8214abe8152d20d12e8;hb=HEAD;hpb=892419cf4747c1c0abea8d1e9bed8ca692aed8eb diff --git a/citadel/server/backends/common/database.c b/citadel/server/backends/common/database.c index a07dd22e6..0b8276b07 100644 --- a/citadel/server/backends/common/database.c +++ b/citadel/server/backends/common/database.c @@ -43,8 +43,11 @@ void (*cdb_tick)(void) = NULL; // This function is responsible for choosing and initializing a back end. void cdb_init_backends(void) { + char *chosen_backend = NULL; + cdb_chmod_data(); // Set file level permissions so we can actually access the data files +#ifdef THIS_BUILD_CONTAINS_BDB // Test for Berkeley DB (this does nothing yet -- we're preparing to test for multiple back ends in the future) int fd = open(ctdl_db_dir"/cdb.00", O_RDONLY); if (fd) { @@ -54,11 +57,23 @@ void cdb_init_backends(void) { read(fd, &magic, sizeof(magic)); if (magic == 0x00053162) { syslog(LOG_DEBUG, "db: found existing Citadel database in Berkeley DB format"); + if (!chosen_backend) { + chosen_backend = "bdb"; + } } close(fd); } +#endif - bdb_init_backend(); // for now, this is the only one, so we select it always. + // If no existing database has been detected, go with Berkeley DB. + if (!chosen_backend) { + chosen_backend = "bdb"; + } + + // Initialize the chosen backend. + if (!strcmp(chosen_backend, "bdb")) { + bdb_init_backend(); + } }