#!/opt/bin/perl ############################################################################### # # # Program to install a new user account # # # ############################################################################### # # # Version 1.0 FI - Written 14.02.96 by Steffen Beyer # # # ############################################################################### # # # Copyright (C) 1995 by software design & management GmbH & Co. KG # # # ############################################################################### $version = 'version 1.0 FI'; $self = $0; $self =~ s!^.*/!!; if (@ARGV != 2) { warn "\n"; warn "$self $version\n"; warn "\n"; warn "Usage: $self [,]...\n"; die "\n"; } umask(0022); $user = shift; $group = shift; $filename = '/g/sysadm/adm/l.usr'; #$filename = '/g/sysadm/sun/bin/l.usr'; unless (open(INPUT, "<$filename")) { die "$self: unable to read '$filename': $!\n"; } unless (rename($filename,"$filename.bak")) { die "$self: unable to rename '$filename' to '$filename.bak': $!\n"; } unless (open(OUTPUT, ">$filename")) { die "$self: unable to write '$filename': $!\n"; } $insert = 1; $found = 0; $enable = 0; while () { if ($insert) { if ($found) { if ((/^\s*$/) || (/^\s*#/)) { if ($enable) { print OUTPUT "$user:*:$group\n"; $insert = 0; } } elsif (/^(\w+):\S+:/) { $enable = 1; if ($user lt $1) { print OUTPUT "$user:*:$group\n"; $insert = 0; } } else { } } else { if (/^\s*#\s*User Accounts/) { $found = 1; } } } print OUTPUT; } close(INPUT); close(OUTPUT); unless ($found) { die "$self: unable to find 'User Accounts' section in '$filename'!\n"; } unless (open(DF, "df |")) { die "$self: unable to execute 'df': $!\n"; } $found = 0; while () { if (m!(/vol/disk\d/[gh])!) { $disk = "$1/home"; # print "Probing disk '$disk'...\n"; if (-d $disk) { # print "Directory '$disk' exists\n"; if (/\s(\d+)%\s/) { $table{$disk} = $1; # print "Used space on disk '$disk': $1%\n"; $found = 1; } } } } close(DF); unless ($found) { die "$self: unable to find disk '/vol/disk[0-9]/[gh]/home'!\n"; } foreach $disk (sort { $table{$a} <=> $table{$b} } keys(%table)) { print "Installing user '$user' (group '$group') on disk '$disk'...\n"; unless (chdir($disk)) { die "$self: can't chdir to '$disk': $!\n"; } $rc = (system("cp -rp /u/skeleton $disk/$user") >> 8); if ($rc) { die "$self: error creating home directory for '$user': $rc\n"; } $rc = (system("chown -R $user.sdmfi $disk/$user") >> 8); if ($rc) { die "$self: error changing owner of home directory for '$user': $rc\n"; } unless (chdir("/g/windows")) { die "$self: can't chdir to '/g/windows': $!\n"; } $rc = (system("cp -rp /g/windows/skeleton /g/windows/$user") >> 8); if ($rc) { die "$self: error creating windows directory for '$user': $rc\n"; } $rc = (system("chown -R $user.sdmfi /g/windows/$user") >> 8); if ($rc) { die "$self: error changing owner of windows directory for '$user': $rc\n"; } $rc = (system("cd /u/$user/") >> 8); if ($rc) { warn "$self: can't cd to '/u/$user': $rc\n"; warn "Please enter 'cd /u/$user' manually until it succeeds\n"; warn "in the following shell, then press ctrl-D to continue:\n"; system("/opt/bin/bash"); } $rc = (system("/tftpboot/admin/genOneUser $user") >> 8); if ($rc) { die "$self: error creating boot information for '$user': $rc\n"; } last; } __END__