diff --git a/ChangeLog b/ChangeLog index 0d0da429..9bd78e7a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2014-05-09 Christian Perrier + + * Include patches only included in Debian for 4.2 + * man/su.1.xml: Fix typo + * etc/login.defs src/newusers.c src/useradd.c libmisc/find_new_sub_uids.c libmisc/find_new_sub_gids.c: + configure userns + 2014-04-30 Christian Perrier * Release 4.2 "as is" diff --git a/etc/login.defs b/etc/login.defs index 5ac62d63..8dd7c444 100644 --- a/etc/login.defs +++ b/etc/login.defs @@ -229,7 +229,7 @@ SYS_UID_MAX 999 # Extra per user uids SUB_UID_MIN 100000 SUB_UID_MAX 600100000 -SUB_UID_COUNT 10000 +SUB_UID_COUNT 65536 # # Min/max values for automatic gid selection in groupadd(8) @@ -242,7 +242,7 @@ SYS_GID_MAX 999 # Extra per user group ids SUB_GID_MIN 100000 SUB_GID_MAX 600100000 -SUB_GID_COUNT 10000 +SUB_GID_COUNT 65536 # # Max number of login(1) retries if password is bad diff --git a/libmisc/find_new_sub_gids.c b/libmisc/find_new_sub_gids.c index 335203ca..ae8a937c 100644 --- a/libmisc/find_new_sub_gids.c +++ b/libmisc/find_new_sub_gids.c @@ -58,7 +58,7 @@ int find_new_sub_gids (const char *owner, min = getdef_ulong ("SUB_GID_MIN", 100000UL); max = getdef_ulong ("SUB_GID_MAX", 600100000UL); - count = getdef_ulong ("SUB_GID_COUNT", 10000); + count = getdef_ulong ("SUB_GID_COUNT", 65536); if (min > max || count >= max || (min + count - 1) > max) { (void) fprintf (stderr, diff --git a/libmisc/find_new_sub_uids.c b/libmisc/find_new_sub_uids.c index 6afaa96d..12cb2d2e 100644 --- a/libmisc/find_new_sub_uids.c +++ b/libmisc/find_new_sub_uids.c @@ -58,7 +58,7 @@ int find_new_sub_uids (const char *owner, min = getdef_ulong ("SUB_UID_MIN", 100000UL); max = getdef_ulong ("SUB_UID_MAX", 600100000UL); - count = getdef_ulong ("SUB_UID_COUNT", 10000); + count = getdef_ulong ("SUB_UID_COUNT", 65536); if (min > max || count >= max || (min + count - 1) > max) { (void) fprintf (stderr, diff --git a/src/newusers.c b/src/newusers.c index a90d04ee..85822db1 100644 --- a/src/newusers.c +++ b/src/newusers.c @@ -988,8 +988,8 @@ int main (int argc, char **argv) is_shadow_grp = sgr_file_present (); #endif #ifdef ENABLE_SUBIDS - is_sub_uid = sub_uid_file_present (); - is_sub_gid = sub_gid_file_present (); + is_sub_uid = sub_uid_file_present () && !rflg; + is_sub_gid = sub_gid_file_present () && !rflg; #endif /* ENABLE_SUBIDS */ open_files (); diff --git a/src/useradd.c b/src/useradd.c index 1b65bf44..a8a1f767 100644 --- a/src/useradd.c +++ b/src/useradd.c @@ -1993,6 +1993,10 @@ int main (int argc, char **argv) #endif /* USE_PAM */ #endif /* ACCT_TOOLS_SETUID */ + /* Needed for userns check */ + uid_t uid_min = (uid_t) getdef_ulong ("UID_MIN", 1000UL); + uid_t uid_max = (uid_t) getdef_ulong ("UID_MAX", 60000UL); + /* * Get my name so that I can use it to report errors. */ @@ -2022,8 +2026,10 @@ int main (int argc, char **argv) is_shadow_grp = sgr_file_present (); #endif #ifdef ENABLE_SUBIDS - is_sub_uid = sub_uid_file_present (); - is_sub_gid = sub_gid_file_present (); + is_sub_uid = sub_uid_file_present () && !rflg && + (!user_id || (user_id <= uid_max && user_id >= uid_min)); + is_sub_gid = sub_gid_file_present () && !rflg && + (!user_id || (user_id <= uid_max && user_id >= uid_min)); #endif /* ENABLE_SUBIDS */ get_defaults ();