X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=netatalk.git;a=blobdiff_plain;f=etc%2Fcnid_dbd%2Fmain.c;fp=etc%2Fcnid_dbd%2Fmain.c;h=9b9d963134c4a02b5feee5bc0f248ef2e689c1bc;hp=5cafb2ef12f9a0de4e70098892fd61ee073fddf6;hb=1a6013c7ecd313e03eee1192d54bee624d4a9293;hpb=1677082f6a0fd3cf062d8e40885dc86b1d73dcc9 diff --git a/etc/cnid_dbd/main.c b/etc/cnid_dbd/main.c index 5cafb2ef..9b9d9631 100644 --- a/etc/cnid_dbd/main.c +++ b/etc/cnid_dbd/main.c @@ -1,6 +1,4 @@ /* - * $Id: main.c,v 1.16 2009-11-25 14:59:15 franklahm Exp $ - * * Copyright (C) Joerg Lenneis 2003 * Copyright (c) Frank Lahm 2009 * All Rights Reserved. See COPYING. @@ -34,6 +32,7 @@ #include #include #include +#include #include "db_param.h" #include "dbif.h" @@ -48,6 +47,9 @@ */ #define DBOPTIONS (DB_CREATE | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_LOCK | DB_INIT_TXN) +/* Global, needed by pack.c:idxname() */ +struct volinfo volinfo; + static DBD *dbd; static int exit_sig = 0; static int db_locked; @@ -241,12 +243,15 @@ static int loop(struct db_param *dbp) case CNID_DBD_OP_REBUILD_ADD: ret = dbd_rebuild_add(dbd, &rqst, &rply); break; + case CNID_DBD_OP_SEARCH: + ret = dbd_search(dbd, &rqst, &rply); + break; default: LOG(log_error, logtype_cnid, "loop: unknown op %d", rqst.op); ret = -1; break; } - + if ((cret = comm_snd(&rply)) < 0 || ret < 0) { dbif_txn_abort(dbd); return -1; @@ -346,7 +351,7 @@ int main(int argc, char *argv[]) struct db_param *dbp; int err = 0; int ctrlfd, clntfd; - char *dir, *logconfig; + char *logconfig; set_processname("cnid_dbd"); @@ -356,13 +361,32 @@ int main(int argc, char *argv[]) exit(1); } - dir = argv[1]; ctrlfd = atoi(argv[2]); clntfd = atoi(argv[3]); logconfig = strdup(argv[4]); setuplog(logconfig); - switch_to_user(dir); + /* Load .volinfo file */ + if (loadvolinfo(argv[1], &volinfo) == -1) { + LOG(log_error, logtype_cnid, "Cant load volinfo for \"%s\"", argv[1]); + exit(EXIT_FAILURE); + } + /* Put "/.AppleDB" at end of volpath, get path from volinfo file */ + char dbpath[MAXPATHLEN+1]; + if ((strlen(volinfo.v_dbpath) + strlen("/.AppleDB")) > MAXPATHLEN ) { + LOG(log_error, logtype_cnid, "CNID db pathname too long: \"%s\"", volinfo.v_dbpath); + exit(EXIT_FAILURE); + } + strncpy(dbpath, volinfo.v_dbpath, MAXPATHLEN - strlen("/.AppleDB")); + strcat(dbpath, "/.AppleDB"); + + if (vol_load_charsets(&volinfo) == -1) { + LOG(log_error, logtype_cnid, "Error loading charsets!"); + exit(EXIT_FAILURE); + } + LOG(log_debug, logtype_cnid, "db dir: \"%s\"", dbpath); + + switch_to_user(dbpath); /* Before we do anything else, check if there is an instance of cnid_dbd running already and silently exit if yes. */ @@ -370,18 +394,16 @@ int main(int argc, char *argv[]) exit(1); } - LOG(log_info, logtype_cnid, "Startup, DB dir %s", dir); - set_signal(); /* SIGINT and SIGTERM are always off, unless we are in pselect */ block_sigs_onoff(1); - if ((dbp = db_param_read(dir, CNID_DBD)) == NULL) + if ((dbp = db_param_read(dbpath)) == NULL) exit(1); LOG(log_maxdebug, logtype_cnid, "Finished parsing db_param config file"); - if (NULL == (dbd = dbif_init(".", "cnid2.db"))) + if (NULL == (dbd = dbif_init(dbpath, "cnid2.db"))) exit(2); /* Only recover if we got the lock */ @@ -397,12 +419,6 @@ int main(int argc, char *argv[]) } LOG(log_debug, logtype_cnid, "Finished opening BerkeleyDB databases"); - if (dbd_stamp(dbd) < 0) { - dbif_close(dbd); - exit(5); - } - LOG(log_maxdebug, logtype_cnid, "Finished checking database stamp"); - if (comm_init(dbp, ctrlfd, clntfd) < 0) { dbif_close(dbd); exit(3); @@ -414,7 +430,7 @@ int main(int argc, char *argv[]) if (dbif_close(dbd) < 0) err++; - if (dbif_prep_upgrade(dir) < 0) + if (dbif_env_remove(dbpath) < 0) err++; (void)get_lock(0);