]> arthur.barton.de Git - netatalk.git/blobdiff - etc/cnid_dbd/main.c
cnid_dbd: fix resource leak
[netatalk.git] / etc / cnid_dbd / main.c
index 72df407860cf7ffda77ec8c43a9f4a4a58a366c2..0067504a0c6b3c4fd081e7eccbf1550272498a2b 100644 (file)
@@ -26,6 +26,7 @@
 #include <atalk/logger.h>
 #include <atalk/errchk.h>
 #include <atalk/bstrlib.h>
+#include <atalk/bstradd.h>
 #include <atalk/netatalk_conf.h>
 #include <atalk/util.h>
 
@@ -216,7 +217,7 @@ static int delete_db(void)
 
     EC_ZERO( get_lock(LOCK_FREE, bdata(dbpath)) );
     EC_NEG1( cwd = open(".", O_RDONLY) );
-    chdir(bdata(dbpath));
+    chdir(cfrombstr(dbpath));
     system("rm -f cnid2.db lock log.* __db.*");
 
     if ((db_locked = get_lock(LOCK_EXCL, bdata(dbpath))) != LOCK_EXCL) {
@@ -227,8 +228,10 @@ static int delete_db(void)
     LOG(log_warning, logtype_cnid, "Recreated CNID BerkeleyDB databases of volume \"%s\"", vol->v_localname);
 
 EC_CLEANUP:
-    if (cwd != -1)
+    if (cwd != -1) {
         fchdir(cwd);
+        close(cwd);
+    }
     EC_EXIT;
 }
 
@@ -243,7 +246,7 @@ static int reinit_db(void)
 {
     EC_INIT;
     DBT key, data;
-    bool copyRootInfo;
+    bool copyRootInfo = false;
 
     if (dbd) {
         memset(&key, 0, sizeof(key));
@@ -477,7 +480,6 @@ int main(int argc, char *argv[])
     EC_INIT;
     int delete_bdb = 0;
     int ctrlfd = -1, clntfd = -1;
-    char *logconfig;
     AFPObj obj = { 0 };
     char *volpath = NULL;