/*
- * Copyright (C) 2008 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2008 Andre Noll <maan@tuebingen.mpg.de>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
#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"
*
* Even users that are not taken into account because of the --uid
* option occupy a slot in this hash table. This allows to find out
- * quicky whether a uid is admissible. And yes, this has to be fast.
+ * quickly whether a uid is admissible. And yes, this has to be fast.
*/
static struct user_info *uid_hash_table;
/** This is always a power of two. It is set in create_hash_table(). */
static uint32_t uid_hash_table_size;
-/* Array of indices to the entries of \a uid_hash_table. */
-static int *uid_hash_table_sort_idx;
-
/** The number of used slots in the hash table. */
static uint32_t num_uids;
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(database_dir);
ui->desc->name = make_message("%u", (unsigned)ui->uid);
pw = getpwuid(ui->uid);
if (pw && pw->pw_name)
assert(uid_hash_table);
for (i = 0; i < uid_hash_table_size; i++) {
int ret;
- struct user_info *ui = uid_hash_table +
- uid_hash_table_sort_idx[i];
+ struct user_info *ui = uid_hash_table + i;
if (!ui_used(ui) || !ui_admissible(ui))
continue;
*/
void create_hash_table(unsigned bits)
{
- int i;
-
uid_hash_table_size = 1 << bits;
uid_hash_table = adu_calloc(uid_hash_table_size *
sizeof(struct user_info));
- uid_hash_table_sort_idx = adu_malloc(uid_hash_table_size * sizeof(int));
- for (i = 0; i < uid_hash_table_size; i++)
- uid_hash_table_sort_idx[i] = i;
}
/**
}
free(uid_hash_table);
uid_hash_table = NULL;
- free(uid_hash_table_sort_idx);
- uid_hash_table_sort_idx = NULL;
}
/*
static char *get_uid_list_name(void)
{
- return make_message("%s/uid_list", conf.database_dir_arg);
+ return make_message("%s/uid_list", database_dir);
}
-
-static int (*hash_table_comparator)(struct user_info *a, struct user_info *b);
-
-static int comp_wrapper(const void *a, const void *b)
-{
- struct user_info *x = uid_hash_table + *(unsigned *)a;
- struct user_info *y = uid_hash_table + *(unsigned *)b;
- return hash_table_comparator(x, y);
-}
-
-/**
- * Sort the hash table according to a given comparator.
- *
- * \param comp The comparator.
- *
- * The comparator is a user-defined function which must return 1, 0, or -1.
- *
- * \sa qsort(3).
- */
-void sort_hash_table(int (*comp)(struct user_info *, struct user_info *))
-{
- hash_table_comparator = comp;
- qsort(uid_hash_table_sort_idx, uid_hash_table_size,
- sizeof(*uid_hash_table_sort_idx), comp_wrapper);
-}
-
/**
* Open the osl tables for all admissible uids.
*
* \a admissible_uids. If so, it sets the admissible bit for this slot and
* opens the osl table of the uid.
*
- * \return Stamdard.
+ * \return Standard.
*/
int open_admissible_user_tables(struct uid_range *admissible_uids)
{
size_t size;
uint32_t n;
char *filename = get_uid_list_name(), *map;
- int ret = mmap_full_file(filename, O_RDONLY, (void **)&map, &size, NULL);
+ int ret = mmap_file_ro(filename, (void **)&map, &size);
unsigned bits;
if (ret < 0) {