Make user.c independent of command line options.
[adu.git] / user.c
diff --git a/user.c b/user.c
index 026d65b..dfa1c10 100644 (file)
--- a/user.c
+++ b/user.c
@@ -10,7 +10,6 @@
 #include <dirent.h> /* readdir() */
 #include <sys/types.h>
 #include <pwd.h>
-#include "cmdline.h" /* TODO: This file should be independent of command line options */
 #include "user.h"
 #include "fd.h"
 #include "string.h"
@@ -258,7 +257,7 @@ static inline int ui_admissible(struct user_info *ui)
        return ui->flags & UI_FL_ADMISSIBLE;
 }
 
-static int open_user_table(struct user_info *ui, int create)
+static int open_user_table(const char *dirname, struct user_info *ui, int create)
 {
        int ret;
        struct passwd *pw;
@@ -267,7 +266,7 @@ static int open_user_table(struct user_info *ui, int create)
        ui->desc->num_columns = NUM_UT_COLUMNS;
        ui->desc->flags = 0;
        ui->desc->column_descriptions = user_table_cols;
-       ui->desc->dir = adu_strdup(conf.database_dir_arg);
+       ui->desc->dir = adu_strdup(dirname);
        ui->desc->name = make_message("%u", (unsigned)ui->uid);
        pw = getpwuid(ui->uid);
        if (pw && pw->pw_name)
@@ -436,7 +435,8 @@ static struct user_info *lookup_uid(uint32_t uid)
  *
  * \return Standard.
  */
-int create_user_table(uint32_t uid, struct user_info **ui_ptr)
+int create_user_table(const char *dirname, uint32_t uid,
+               struct user_info **ui_ptr)
 {
        struct user_info *ui = lookup_uid(uid);
 
@@ -447,12 +447,12 @@ int create_user_table(uint32_t uid, struct user_info **ui_ptr)
                return 1;
        ui->uid = uid;
        ui->flags |= UI_FL_SLOT_USED;
-       return open_user_table(ui, 1);
+       return open_user_table(dirname, ui, 1);
 }
 
-static char *get_uid_list_name(void)
+static char *get_uid_list_name(const char *dirname)
 {
-       return make_message("%s/uid_list", conf.database_dir_arg);
+       return make_message("%s/uid_list", dirname);
 }
 /**
  * Open the osl tables for all admissible uids.
@@ -469,7 +469,8 @@ static char *get_uid_list_name(void)
  *
  * \return Stamdard.
  */
-int open_admissible_user_tables(struct uid_range *admissible_uids)
+int open_admissible_user_tables(const char *dirname,
+               struct uid_range *admissible_uids)
 {
        struct user_info *ui;
 
@@ -488,7 +489,7 @@ int open_admissible_user_tables(struct uid_range *admissible_uids)
                ui->flags |= UI_FL_ADMISSIBLE;
                if (ui->table)
                        continue;
-               ret = open_user_table(ui, 0);
+               ret = open_user_table(dirname, ui, 0);
                if (ret < 0)
                        return ret;
        }
@@ -507,11 +508,11 @@ int open_admissible_user_tables(struct uid_range *admissible_uids)
  *
  * \return Standard.
  */
-int read_uid_file(void)
+int read_uid_file(const char *dirname)
 {
        size_t size;
        uint32_t n;
-       char *filename = get_uid_list_name(), *map;
+       char *filename = get_uid_list_name(dirname), *map;
        int ret = mmap_full_file(filename, O_RDONLY, (void **)&map, &size, NULL);
        unsigned bits;
 
@@ -561,7 +562,7 @@ out:
  *
  * \return Standard.
  */
-int write_uid_file(void)
+int write_uid_file(const char *dirname)
 {
        char *buf, *p, *filename;
        size_t size = num_uids * sizeof(uint32_t);
@@ -577,7 +578,7 @@ int write_uid_file(void)
                write_u32(p, ui->uid);
                p += sizeof(uint32_t);
        }
-       filename = get_uid_list_name();
+       filename = get_uid_list_name(dirname);
        ret = adu_write_file(filename, buf, size);
        free(filename);
        free(buf);