| 264 |
## addsysgroup ## |
## addsysgroup ## |
| 265 |
################# |
################# |
| 266 |
if ($action eq "addsysgroup") { |
if ($action eq "addsysgroup") { |
| 267 |
|
# Check if requested group already exists and we can exit safely |
| 268 |
|
if (existing_group_ok($new_name, $new_gid)) { |
| 269 |
|
printf (_("Group %s does already exist as a system group. Exiting...\n"), $new_name) if $verbose; |
| 270 |
|
exit 0; |
| 271 |
|
} |
| 272 |
dief (_("The group `%s' already exists.\n"),$new_name) |
dief (_("The group `%s' already exists.\n"),$new_name) |
| 273 |
if (defined getgrnam($new_name)); |
if (defined getgrnam($new_name)); |
| 274 |
dief (_("The GID `%s' is already in use.\n"),$new_gid) |
dief (_("The GID `%s' is already in use.\n"),$new_gid) |
| 360 |
## addsysuser ## |
## addsysuser ## |
| 361 |
################ |
################ |
| 362 |
elsif ($action eq "addsysuser") { |
elsif ($action eq "addsysuser") { |
| 363 |
# Check if requested user already exists and we can exit safely |
if (existing_user_ok($new_name, $new_uid)) { |
| 364 |
if ((@tuser = getpwnam($new_name)) && ( |
printf (_("User %s does already exist as a system user. Exiting...\n"), $new_name) if $verbose; |
|
(!defined($new_uid) && $tuser[2] >= $config{"first_system_uid"} && |
|
|
$tuser[2] <= $config{"last_system_uid"} ) || |
|
|
(defined($new_uid) && $tuser[2] == $new_uid) |
|
|
)) { |
|
|
printf (_("User %s does already exist. Exiting...\n"), $new_name) if $verbose; |
|
| 365 |
exit 0; |
exit 0; |
| 366 |
} |
} |
| 367 |
$new_gid = $nogroup_id |
$new_gid = $nogroup_id |
| 368 |
if (!$ingroup_name && !defined($new_gid) && !$make_group_also); |
if (!$ingroup_name && !defined($new_gid) && !$make_group_also); |
| 369 |
&check_user_group(); |
check_user_group(1); |
| 370 |
printf (_("Adding system user %s...\n"),$new_name) if $verbose; |
printf (_("Adding system user %s...\n"),$new_name) if $verbose; |
| 371 |
|
|
| 372 |
if (!defined($new_uid) && $make_group_also) { |
if (!defined($new_uid) && $make_group_also) { |
| 404 |
} |
} |
| 405 |
|
|
| 406 |
&invalidate_nscd(); |
&invalidate_nscd(); |
| 407 |
if ($make_group_also) { |
# if we reach this point, and the group does already exist, we can use it. |
| 408 |
printf _("Adding new group %s (%s).\n"),$new_name,$new_gid if $verbose; |
if ($make_group_also && !getgrnam($new_name)) {printf _("Adding new group %s (%s).\n"),$new_name,$new_gid if $verbose; |
| 409 |
$undogroup = $new_name; |
$undogroup = $new_name; |
| 410 |
&systemcall('/usr/sbin/groupadd', '-g', $new_gid, $new_name); |
&systemcall('/usr/sbin/groupadd', '-g', $new_gid, $new_name); |
| 411 |
&invalidate_nscd("group"); |
&invalidate_nscd("group"); |
| 451 |
if ($config{"usergroups"} eq "yes") { $make_group_also = 1; } |
if ($config{"usergroups"} eq "yes") { $make_group_also = 1; } |
| 452 |
else { $new_gid = $config{"users_gid"}; } |
else { $new_gid = $config{"users_gid"}; } |
| 453 |
} |
} |
| 454 |
&check_user_group(); |
check_user_group(0); |
| 455 |
$first_uid = $new_firstuid || $config{"first_uid"}; |
$first_uid = $new_firstuid || $config{"first_uid"}; |
| 456 |
$last_uid = $new_lastuid || $config{"last_uid"}; |
$last_uid = $new_lastuid || $config{"last_uid"}; |
| 457 |
printf _("Adding user %s...\n"),$new_name if $verbose; |
printf _("Adding user %s...\n"),$new_name if $verbose; |
| 594 |
1; |
1; |
| 595 |
} |
} |
| 596 |
|
|
| 597 |
|
sub existing_user_ok { |
| 598 |
|
# returns 1 if |
| 599 |
|
# - the user doesn't exist or |
| 600 |
|
# - a system user is to be created |
| 601 |
|
# - the account already exists as a system user and |
| 602 |
|
# - if an explicit UID is given, that UID matches the existing user. |
| 603 |
|
my($new_name,$new_uid) = @_; |
| 604 |
|
my ($dummy1,$dummy2,$uid); |
| 605 |
|
if (($dummy1,$dummy2,$uid) = getpwnam($new_name)) { |
| 606 |
|
if( defined($new_uid) && $uid == $new_uid ) { |
| 607 |
|
##+#print "uid"; |
| 608 |
|
return 1; |
| 609 |
|
} |
| 610 |
|
if( $uid >= $config{"first_system_uid"} && |
| 611 |
|
$uid <= $config{"last_system_uid" } ) { |
| 612 |
|
##+#print "range"; |
| 613 |
|
return 1; |
| 614 |
|
} |
| 615 |
|
} else { |
| 616 |
|
return 0; |
| 617 |
|
} |
| 618 |
|
} |
| 619 |
|
|
| 620 |
sub check_user_group() { |
sub existing_group_ok { |
| 621 |
dief(_("The user `%s\' already exists.\n"),$new_name) if(defined getpwnam($new_name)); |
# returns 1 if |
| 622 |
dief(_("The UID `%s' already exists.\n"),$new_uid) |
# - the group doesn't exist or |
| 623 |
if (defined($new_uid) && getpwuid($new_uid)); |
# - a system group is to be created |
| 624 |
|
# - the group already exists as a system group and |
| 625 |
|
# - if an explicit GID is given, that GID matches the existing group. |
| 626 |
|
my($new_name,$new_gid) = @_; |
| 627 |
|
my ($dummy1,$dummy2,$gid); |
| 628 |
|
if (($dummy1,$dummy2,$gid) = getgrnam($new_name)) { |
| 629 |
|
if( defined($new_gid) && $gid == $new_gid ) { |
| 630 |
|
return 1; |
| 631 |
|
} |
| 632 |
|
if( $gid >= $config{"first_system_gid"} && |
| 633 |
|
$gid <= $config{"last_system_gid" } ) { |
| 634 |
|
return 1; |
| 635 |
|
} |
| 636 |
|
} else { |
| 637 |
|
return 0; |
| 638 |
|
} |
| 639 |
|
} |
| 640 |
|
|
| 641 |
|
sub check_user_group { |
| 642 |
|
my ($system) = @_; |
| 643 |
|
if( !$system || !existing_user_ok($new_name, $new_uid) ) { |
| 644 |
|
if( defined getpwnam($new_name) ) { |
| 645 |
|
if( $system ) { |
| 646 |
|
dief(_("The user %s\' already exists, and is not a system user.\n"),$new_name); |
| 647 |
|
} else { |
| 648 |
|
dief(_("The user %s\' already exists.\n"),$new_name); |
| 649 |
|
} |
| 650 |
|
} |
| 651 |
|
dief(_("The UID %s' already exists.\n"),$new_uid) |
| 652 |
|
if (defined($new_uid) && getpwuid($new_uid)); |
| 653 |
|
} |
| 654 |
if ($make_group_also) { |
if ($make_group_also) { |
| 655 |
dief(_("The group `%s' already exists.\n"),$new_name) |
if( !$system || !existing_group_ok($new_name, $new_uid) ) { |
| 656 |
if (defined getgrnam($new_name)); |
dief(_("The group %s' already exists.\n"),$new_name) |
| 657 |
dief(_("The GID `%s' already exists.\n"),$new_uid) |
if (defined getgrnam($new_name)); |
| 658 |
if (defined($new_uid) && defined(getgrgid($new_uid))); |
dief(_("The GID %s' already exists.\n"),$new_uid) |
| 659 |
|
if (defined($new_uid) && defined(getgrgid($new_uid))); |
| 660 |
|
} |
| 661 |
} |
} |
| 662 |
else { |
else { |
| 663 |
dief(_("The group `%s' doesn't exist.\n"),$ingroup_name) |
dief(_("The group `%s' doesn't exist.\n"),$ingroup_name) |