/[adduser]/trunk/adduser
ViewVC logotype

Diff of /trunk/adduser

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 109 by rb, Sat Mar 6 15:30:54 2004 UTC revision 112 by zugschlus, Thu Mar 25 11:16:13 2004 UTC
# Line 264  $SIG{'INT'} = $SIG{'QUIT'} = $SIG{'HUP'} Line 264  $SIG{'INT'} = $SIG{'QUIT'} = $SIG{'HUP'}
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)
# Line 355  elsif ($action eq "addusertogroup") { Line 360  elsif ($action eq "addusertogroup") {
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) {
# Line 404  elsif ($action eq "addsysuser") { Line 404  elsif ($action eq "addsysuser") {
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");
# Line 451  elsif ($action eq "adduser") { Line 451  elsif ($action eq "adduser") {
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;
# Line 594  sub mktree { Line 594  sub mktree {
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)

Legend:
Removed from v.109  
changed lines
  Added in v.112

  ViewVC Help
Powered by ViewVC 1.1.5