+}
+
+/* ----------------------- */
+void free_lock(int lockfd)
+{
+ struct flock lock;
+
+ lock.l_start = 0;
+ lock.l_whence = SEEK_SET;
+ lock.l_len = 0;
+ lock.l_type = F_UNLCK;
+ fcntl(lockfd, F_SETLK, &lock);
+ close(lockfd);
+}
+
+/* ------------------------ */
+int main(int argc, char *argv[])
+{
+ struct db_param *dbp;
+ int err = 0;
+ int lockfd, ctrlfd, clntfd;
+ char *dir;
+
+ set_processname("cnid_dbd");
+ syslog_setup(log_debug, logtype_default, logoption_ndelay | logoption_pid, logfacility_daemon);
+
+ if (argc != 4) {
+ LOG(log_error, logtype_cnid, "main: not enough arguments");
+ exit(1);
+ }
+
+ dir = argv[1];
+ ctrlfd = atoi(argv[2]);
+ clntfd = atoi(argv[3]);
+
+ switch_to_user(dir);
+
+ /* Before we do anything else, check if there is an instance of cnid_dbd
+ running already and silently exit if yes. */
+ lockfd = get_lock();
+
+ LOG(log_info, logtype_cnid, "Startup, DB dir %s", dir);
+
+ set_signal();
+