find_new_gid is never called when an
GID is specified with -g. Simplify find_new_gid accordingly.
This commit is contained in:
parent
0b6b9fe090
commit
08e09354b2
@ -4,6 +4,8 @@
|
|||||||
cannot exist at that time. Remove the check.
|
cannot exist at that time. Remove the check.
|
||||||
* src/groupadd.c (find_new_gid): If oflg is set, gflg is also set.
|
* src/groupadd.c (find_new_gid): If oflg is set, gflg is also set.
|
||||||
Use (!gflg), which is clearer than (!gflg || !oflg).
|
Use (!gflg), which is clearer than (!gflg || !oflg).
|
||||||
|
* src/groupadd.c (find_new_gid): find_new_gid is never called when an
|
||||||
|
GID is specified with -g. Simplify find_new_gid accordingly.
|
||||||
|
|
||||||
2007-12-28 Nicolas François <nicolas.francois@centraliens.net>
|
2007-12-28 Nicolas François <nicolas.francois@centraliens.net>
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
#ident "$Id$"
|
#ident "$Id$"
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@ -190,51 +191,33 @@ static void grp_update (void)
|
|||||||
* find_new_gid - find the next available GID
|
* find_new_gid - find the next available GID
|
||||||
*
|
*
|
||||||
* find_new_gid() locates the next highest unused GID in the group
|
* find_new_gid() locates the next highest unused GID in the group
|
||||||
* file, or checks the given group ID against the existing ones for
|
* file.
|
||||||
* uniqueness.
|
|
||||||
*/
|
*/
|
||||||
static void find_new_gid (void)
|
static void find_new_gid (void)
|
||||||
{
|
{
|
||||||
const struct group *grp;
|
const struct group *grp;
|
||||||
gid_t gid_min, gid_max;
|
gid_t gid_min, gid_max;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* It doesn't make sense to use find_new_uid(),
|
||||||
|
* if a GID is specified via "-g" option.
|
||||||
|
*/
|
||||||
|
assert (!gflg);
|
||||||
|
|
||||||
gid_min = getdef_unum ("GID_MIN", 1000);
|
gid_min = getdef_unum ("GID_MIN", 1000);
|
||||||
gid_max = getdef_unum ("GID_MAX", 60000);
|
gid_max = getdef_unum ("GID_MAX", 60000);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Start with some GID value if the user didn't provide us with
|
* Search the entire group file, looking for the largest unused
|
||||||
* one already.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!gflg) {
|
|
||||||
group_id = gid_min;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Search the entire group file, either looking for this GID (if the
|
|
||||||
* user specified one with -g) or looking for the largest unused
|
|
||||||
* value.
|
* value.
|
||||||
*/
|
*/
|
||||||
setgrent ();
|
setgrent ();
|
||||||
while ((grp = getgrent ())) {
|
while ((grp = getgrent ())) {
|
||||||
if (gflg && (group_id == grp->gr_gid)) {
|
if ((grp->gr_gid >= group_id) && (grp->gr_gid <= gid_max)) {
|
||||||
if (fflg) {
|
|
||||||
/* turn off -g and search again */
|
|
||||||
gflg = 0;
|
|
||||||
setgrent ();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
fprintf (stderr, _("%s: GID %u is not unique\n"),
|
|
||||||
Prog, (unsigned int) group_id);
|
|
||||||
fail_exit (E_GID_IN_USE);
|
|
||||||
}
|
|
||||||
if (!gflg && (grp->gr_gid >= group_id)) {
|
|
||||||
if (grp->gr_gid > gid_max)
|
|
||||||
continue;
|
|
||||||
group_id = grp->gr_gid + 1;
|
group_id = grp->gr_gid + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!gflg && (group_id == (gid_max + 1))) {
|
if (group_id == (gid_max + 1)) {
|
||||||
for (group_id = gid_min; group_id < gid_max; group_id++) {
|
for (group_id = gid_min; group_id < gid_max; group_id++) {
|
||||||
/* local, no need for xgetgrgid */
|
/* local, no need for xgetgrgid */
|
||||||
if (!getgrgid (group_id)) {
|
if (!getgrgid (group_id)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user