X-Git-Url: http://git.tuebingen.mpg.de/?p=adu.git;a=blobdiff_plain;f=adu.c;h=09619cfcecdcc49685c218d4249322fa92824fa7;hp=07248e99a592e6466cb7f42abeb9d45fbeab905f;hb=afc8a4212e37abd7467b21da543167285ae0c9c5;hpb=9ca6c5e46bfbfeb6341a54703a21e25c15ef0f7e diff --git a/adu.c b/adu.c index 07248e9..09619cf 100644 --- a/adu.c +++ b/adu.c @@ -48,12 +48,6 @@ static inline int ui_admissible(struct user_info *ui) */ struct osl_table *dir_table = NULL; -/** - * The array of all uid ranges that were given at the command line. - */ -struct uid_range *admissible_uids; - - /** * Compare the size of two directories * @@ -363,24 +357,25 @@ static uint32_t double_hash(uint32_t uid, uint32_t probe_num) % uid_hash_table_size; } -static int uid_is_admissible(uint32_t uid) +static int uid_is_admissible(uint32_t uid, struct uid_range *urs) { - int i; - - for (i = 0; i < conf.uid_given; i++) { - struct uid_range *ur = admissible_uids + i; + struct uid_range *ur; + int ret = 1; + if (!urs) /* empty array means all uids are allowed */ + return 1; + FOR_EACH_UID_RANGE(ur, urs) if (ur->low <= uid && ur->high >= uid) - break; - } - i = !conf.uid_given || i < conf.uid_given; + goto out; + ret = 0; +out: DEBUG_LOG("uid %u is %sadmissible\n", (unsigned)uid, - i? "" : "not "); - return i; + ret? "" : "not "); + return ret; } -int search_uid(uint32_t uid, enum search_uid_flags flags, - struct user_info **ui_ptr) +int search_uid(uint32_t uid, struct uid_range *urs, + enum search_uid_flags flags, struct user_info **ui_ptr) { uint32_t p; @@ -393,7 +388,7 @@ int search_uid(uint32_t uid, enum search_uid_flags flags, return -E_BAD_UID; ui->uid = uid; ui->flags |= UI_FL_SLOT_USED; - if (!uid_is_admissible(uid)) + if (!uid_is_admissible(uid, urs)) return 0; ui->flags |= UI_FL_ADMISSIBLE; ret = open_user_table(ui, flags & CREATE_USER_TABLE); @@ -440,9 +435,6 @@ int open_dir_table(int create) static int check_args(void) { - int i, ret; - - if (conf.create_given && !conf.base_dir_given) return -E_SYNTAX; @@ -459,19 +451,7 @@ static int check_args(void) conf.base_dir_arg[len] = '\0'; } } - if (!conf.uid_given) - return 0; - admissible_uids = adu_malloc(conf.uid_given * sizeof(*admissible_uids)); - for (i = 0; i < conf.uid_given; i++) { - ret = parse_uid_range(conf.uid_arg[i], admissible_uids + i); - if (ret < 0) - goto err; - } return 1; -err: - free(admissible_uids); - admissible_uids = NULL; - return ret; } int main(int argc, char **argv) @@ -502,7 +482,6 @@ int main(int argc, char **argv) if (ret < 0) goto out; out: - free(admissible_uids); if (ret < 0) { ERROR_LOG("%s\n", adu_strerror(-ret)); return -EXIT_FAILURE;