#! /usr/bin/perl -w #---------------------------------------------------------------------- # Copyright 1999-2003 Mitel Networks Corporation # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. #---------------------------------------------------------------------- use strict; sub usage { my $msg = shift; warn("$msg\n") if $msg; die("Usage: $0: user userid descr home_dir shell\n"); } my $user = shift || usage("Must give username param"); my $uid = shift || usage("Must give userid param"); my $user_desc = shift || usage("Must give user desc param"); my $home = shift || usage("Must give home param"); my $shell = shift || usage("Must give shell param"); use User::pwent; use User::grent; if (my $pw = getpwnam($user)) { my $euid = $pw->uid; exit 0 if $euid == $uid; # Do not create user if it already exists with correct uid warn ("Users $user exists but has uid of $euid - should be $uid\n"); exit 0; } if (my $pw = getpwuid($uid)) { my $name = $pw->name; warn "User id of $uid is already taken by user $name\n"; warn "Falling back to a system chosen uid\n"; # We can now go ahead and create the user and group leaving the system to choose uid/gid die ("Failed to create user $user\n") if system("/usr/sbin/useradd", "-r", "-d", $home, "-M", "-s", $shell, "-c", $user_desc, $user); exit (0); } if (my $pw = getgrgid($uid)) { my $name = $pw->name; warn "Group id of $uid is already taken by user $name\n"; # We can now go ahead and create the user but the gid will be chosen by the system die ("Failed to create user $user\n") if system("/usr/sbin/useradd", "-u", $uid, "-d", $home, "-M", "-s", $shell, "-c", $user_desc, $user); } else { # We can now go ahead and create the user and group die ("Failed to create group $uid\n") if system("/usr/sbin/groupadd", "-g", $uid, $user); die ("Failed to create user $user\n") if system("/usr/sbin/useradd", "-u", $uid, "-g", $uid, "-d", $home, "-M", "-s", $shell, "-c", $user_desc, $user); } exit 0;