]> git.tuebingen.mpg.de Git - adu.git/blobdiff - select.c
Merge commit 'meins/master'
[adu.git] / select.c
index c26b54859fde1549f03f475fe961b70b3c43cd41..e66b2dd41a28127dcada1a8b3cbe587ea5d464a6 100644 (file)
--- a/select.c
+++ b/select.c
@@ -14,7 +14,8 @@
 #include "fd.h"
 #include "string.h"
 #include "error.h"
-#include "portable_io.h"
+#include "user.h"
+#include "select.cmdline.h"
 
 /* global list */
 #define GLOBAL_LIST_ATOMS \
@@ -585,41 +586,6 @@ static int print_statistics(struct format_info *fi)
        return -ERRNO_TO_ERROR(-EINVAL);
 }
 
-static int read_uid_file(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);
-       unsigned bits;
-
-       if (ret < 0) {
-               INFO_LOG("failed to map %s\n", filename);
-               free(filename);
-               return ret;
-       }
-       num_uids = size / 4;
-       INFO_LOG("found %u uids in %s\n", (unsigned)num_uids, filename);
-       free(filename);
-       /*
-        * Compute number of hash table bits. The hash table size must be a
-        * power of two and larger than the number of uids.
-        */
-       bits = 2;
-       while (1 << bits < num_uids)
-               bits++;
-       create_hash_table(bits);
-       for (n = 0; n < num_uids; n++) {
-               uint32_t uid = read_u32(map + n * sizeof(uid));
-               ret = search_uid(uid, admissible_uids, OPEN_USER_TABLE, NULL);
-               if (ret < 0)
-                       goto out;
-       }
-out:
-       adu_munmap(map, size);
-       return ret;
-}
-
 int run_select_query(struct uid_range *admissible_uids, struct format_info *fi)
 {
        int ret;
@@ -691,7 +657,7 @@ static int setup_format_string(char *fmt, struct format_info **fi)
 int parse_select_options(char *string, struct select_cmdline_parser_params *params,
                struct uid_range **admissible_uids, struct format_info **fi)
 {
-       int ret;
+       int ret, num_uid_ranges;
        const char **line;
        char *fmt = NULL;
 
@@ -712,6 +678,11 @@ int parse_select_options(char *string, struct select_cmdline_parser_params *para
                fmt = select_conf.format_arg;
        }
        ret = parse_uid_arg(select_conf.uid_arg, admissible_uids);
+       if (ret < 0)
+               return ret;
+       num_uid_ranges = ret;
+       ret = append_users(select_conf.user_arg, select_conf.user_given,
+               admissible_uids, num_uid_ranges);
        if (ret < 0)
                return ret;
        return setup_format_string(fmt, fi);