-static int open_user_table(struct user_info *ui, int create)
-{
- int ret;
- struct passwd *pw;
-
- ui->desc = adu_malloc(sizeof(*ui->desc));
- 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->name = make_message("%u", (unsigned)ui->uid);
- pw = getpwuid(ui->uid);
- if (pw && pw->pw_name)
- ui->pw_name = adu_strdup(pw->pw_name);
-
- INFO_LOG(".............................uid #%u: %u\n",
- (unsigned)num_uids, (unsigned)ui->uid);
- if (create) {
- ret = osl(osl_create_table(ui->desc));
- if (ret < 0)
- goto err;
- num_uids++;
- }
- ret = osl(osl_open_table(ui->desc, &ui->table));
- if (ret < 0)
- goto err;
- return 1;
-err:
- free((char *)ui->desc->name);
- free((char *)ui->desc->dir);
- free(ui->pw_name);
- free(ui->desc);
- ui->desc->name = NULL;
- ui->desc->dir = NULL;
- ui->desc = NULL;
- ui->table = NULL;
- ui->flags = 0;
- return ret;
-}
-
-int for_each_admissible_user(int (*func)(struct user_info *, void *),
- void *data)
-{
- struct user_info *ui = uid_hash_table;
-
- if (!ui)
- return -ERRNO_TO_ERROR(EFAULT);
-
- for (; ui < uid_hash_table + uid_hash_table_size; ui++) {
- int ret;
-
- if (!ui_used(ui) || !ui_admissible(ui))
- continue;
- ret = func(ui, data);
- if (ret < 0)
- return ret;
- }
- return 1;
-}
-
-#define PRIME1 0xb11924e1
-#define PRIME2 0x01000193
-
-void create_hash_table(unsigned bits)
-{
- uid_hash_table_size = 1 << bits;
- uid_hash_table = adu_calloc(uid_hash_table_size *
- sizeof(struct user_info));
-}
-
-static void free_hash_table(void)
-{
- free(uid_hash_table);
- uid_hash_table = NULL;
-}
-