From 00e629c0ba4b3e90b61df6dd220e5b56e2159284 Mon Sep 17 00:00:00 2001 From: blueskycs2c Date: Sat, 11 Apr 2020 22:45:54 +0800 Subject: [PATCH] print a warning from useradd if -u is used with uid number outside range. --- src/useradd.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/useradd.c b/src/useradd.c index 645d4a40..258a073d 100644 --- a/src/useradd.c +++ b/src/useradd.c @@ -228,6 +228,7 @@ static void tallylog_reset (const char *); static void usr_update (void); static void create_home (void); static void create_mail (void); +static void check_uid_range(int rflg, uid_t user_id); /* * fail_exit - undo as much as possible @@ -2257,6 +2258,27 @@ static void create_mail (void) } } +static void check_uid_range(int rflg, uid_t user_id) +{ + uid_t uid_min ; + uid_t uid_max ; + if(rflg){ + uid_min = (uid_t)getdef_ulong("SYS_UID_MIN",101UL); + uid_max = (uid_t)getdef_ulong("SYS_UID_MAX",getdef_ulong("UID_MIN",1000UL)-1); + if(uid_min <= uid_max){ + if(user_id < uid_min || user_id >uid_max) + printf(_("warning: %s's uid %d outside of the SYS_UID_MIN %d and SYS_UID_MAX %d range.\n"),user_name, user_id, uid_min, uid_max); + } + }else{ + uid_min = (uid_t)getdef_ulong("UID_MIN", 1000UL); + uid_max = (uid_t)getdef_ulong("UID_MAX", 6000UL); + if(uid_min <= uid_max){ + if(user_id < uid_min || user_id >uid_max) + printf(_("warning: %s's uid %d outside of the UID_MIN %d and UID_MAX %d range.\n"),user_name, user_id, uid_min, uid_max); + } + } + +} /* * main - useradd command */ @@ -2439,6 +2461,8 @@ int main (int argc, char **argv) } } + if(uflg) + check_uid_range(rflg,user_id); #ifdef WITH_TCB if (getdef_bool ("USE_TCB")) { if (shadowtcb_create (user_name, user_id) == SHADOWTCB_FAILURE) {