#!/usr/bin/perl -w use strict; my %depts = ( 'Accounting' => 'acct', 'Engineering' => 'en', 'Marketing' => 'mkt', 'Manufacturing' => 'mfg', 'Sales' => 's', 'Administrative' => 'admin' ); while(<>) { chomp; die unless(/^"([^"]+)"?\s+([0-9\-]+)\s+(x?\d+)\s+([a-z]+)$/i); my ($name,$room,$ext,$dept) = ($1,$2,$3,$4); die "unknown dept: $dept" unless(exists $depts{$dept}); die "improperly formatted name" unless($name =~ /^([a-z])[a-z]*, ([a-z])[a-z]*(?:\s+)?([a-z])?/i); my ($l,$f,$m) = ($1,$2,$3); $m = 'x' unless(defined $m); my $uid = lc($f.$m.$l.$depts{$dept}); if(getpwnam $uid) { print STDERR "Warning: $uid already exists!\n"; next; } my $gecos = "$name, $room, $ext, $dept"; my $deptdir = "/home/" . lc($dept); my $gid ; unless(-d $deptdir) { mkdir $deptdir; system("groupadd",lc $dept); my @fields = getgrnam(lc $dept); die unless(@fields); $gid = $fields[2]; chown 0,$gid,$deptdir or die; } else { my @fields = getgrnam(lc $dept); die unless(@fields); $gid = $fields[2]; } my $home = "$deptdir/$uid"; my $shell = $dept eq 'Engineering' ? '/bin/csh' : '/bin/sh'; system("useradd","-m","-c",$gecos,"-d",$home,"-s",$shell,"-g",lc $dept,$uid); }