diff -ruN shadow-4.2/src/usermod.c shadow-4.2-mod/src/usermod.c --- shadow-4.2/src/usermod.c 2017-01-04 13:56:58.000000000 +0100 +++ shadow-4.2-mod/src/usermod.c 2017-01-04 13:54:56.897842294 +0100 @@ -1593,6 +1593,11 @@ * group entries. */ if (gr_lock () == 0) { + if (try_extrausers) { + gr_setdbname (EXTRAUSERS_GROUP_FILE); + open_files (); + return; + } fprintf (stderr, _("%s: cannot lock %s; try again later.\n"), Prog, gr_dbname ()); @@ -1600,6 +1605,13 @@ } gr_locked = true; if (gr_open (O_RDWR) == 0) { + if (try_extrausers) { + gr_unlock (); + gr_locked (); + gr_setdbname (EXTRAUSERS_GROUP_FILE); + open_files (); + return; + } fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ()); @@ -1607,6 +1619,15 @@ } #ifdef SHADOWGRP if (is_shadow_grp && (sgr_lock () == 0)) { + if (try_extrausers) { + gr_close (); + gr_unlock (); + gr_locked = false; + gr_setdbname (EXTRAUSERS_GROUP_FILE); + sgr_setdbname (EXTRAUSERS_SHADOWGROUP_FILE); + open_files (); + return; + } fprintf (stderr, _("%s: cannot lock %s; try again later.\n"), Prog, sgr_dbname ()); @@ -1614,6 +1635,17 @@ } sgr_locked = true; if (is_shadow_grp && (sgr_open (O_RDWR) == 0)) { + if (try_extrausers) { + gr_close (); + gr_unlock (); + sgr_unlock (); + gr_locked = false; + sgr_locked = false; + gr_setdbname (EXTRAUSERS_GROUP_FILE); + sgr_setdbname (EXTRAUSERS_SHADOWGROUP_FILE); + open_files (); + return; + } fprintf (stderr, _("%s: cannot open %s\n"), Prog, sgr_dbname ());