155 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl -w
 | |
| 
 | |
| #----------------------------------------------------------------------
 | |
| # copyright (C) 1999-2005 Mitel Networks Corporation
 | |
| # 
 | |
| # This program is free software; you can redistribute it and/or modify
 | |
| # it under the terms of the GNU General Public License as published by
 | |
| # the Free Software Foundation; either version 2 of the License, or
 | |
| # (at your option) any later version.
 | |
| # 		
 | |
| # This program is distributed in the hope that it will be useful,
 | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| # GNU General Public License for more details.
 | |
| # 		
 | |
| # You should have received a copy of the GNU General Public License
 | |
| # along with this program; if not, write to the Free Software
 | |
| # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
 | |
| # 
 | |
| # Technical support for this program is available from Mitel Networks 
 | |
| # Please visit our web site www.mitel.com/sme/ for details.
 | |
| #----------------------------------------------------------------------
 | |
| 
 | |
| package esmith;
 | |
| 
 | |
| use strict;
 | |
| use Errno;
 | |
| use esmith::ConfigDB;
 | |
| use esmith::AccountsDB;
 | |
| use File::Temp;
 | |
| 
 | |
| my $conf = esmith::ConfigDB->open_ro;
 | |
| my $accounts = esmith::AccountsDB->open;
 | |
| 
 | |
| my $ldapauth = $conf->get('ldap')->prop('Authentication') || 'disabled';
 | |
| my $x = 0; # exit value
 | |
| 
 | |
| my $domain = $conf->get('DomainName')
 | |
|     || die("Couldn't determine domain name");
 | |
| $domain = $domain->value;
 | |
| 
 | |
| my $event = $ARGV [0];
 | |
| my $userName = $ARGV [1];
 | |
| 
 | |
| #------------------------------------------------------------
 | |
| # Create the Unix account
 | |
| #------------------------------------------------------------
 | |
| 
 | |
| die "username argument missing" unless defined ($userName);
 | |
| 
 | |
| my $acct = $accounts->get($userName);
 | |
| unless (defined $acct and $acct->prop('type') eq "user")
 | |
| {
 | |
|     die "Account $userName is not a user account; create user failed.\n";
 | |
| }
 | |
| 
 | |
| my $lock = undef;
 | |
| my $uid;
 | |
| unless ($uid = $acct->prop('Uid'))
 | |
| {
 | |
|     use esmith::lockfile;
 | |
| 
 | |
|     $lock = esmith::lockfile::LockFileOrWait("/home/e-smith/db/accounts");
 | |
|     $uid = $accounts->get_next_uid;
 | |
|     $acct->set_prop('Uid', $uid);
 | |
| }
 | |
| my $gid = $acct->prop('Gid') || $uid;
 | |
| my $first = $acct->prop('FirstName') || '';
 | |
| my $last = $acct->prop('LastName') || '';
 | |
| my $phone = $acct->prop('Phone') || '';
 | |
| my $company = $acct->prop('Company') || '';
 | |
| my $dept = $acct->prop('Dept') || '';
 | |
| my $city = $acct->prop('City') || '';
 | |
| my $street = $acct->prop('Street') || '';
 | |
| my $shell = $acct->prop('Shell') || '/usr/bin/false';
 | |
| my $groups = "shared";
 | |
| 
 | |
| if ($ldapauth ne 'enabled')
 | |
| {
 | |
|     # Create the user's unique group first
 | |
|     system(
 | |
|             "/usr/sbin/groupadd",
 | |
|             "-g",
 | |
|             $gid,
 | |
|             $userName
 | |
|         ) == 0 or ( $x = 255, warn "Failed to create (unix) group $userName.\n" );
 | |
| 
 | |
|     # Now create the user account
 | |
|     system(
 | |
|             "/usr/sbin/useradd",
 | |
|             "-u", $uid,
 | |
|             "-g", $gid,
 | |
|             "-c", "$first $last",
 | |
|             "-d", "/home/e-smith/files/users/$userName",
 | |
|             "-G", "$groups",
 | |
|             "-m",
 | |
|             "-k", "/etc/e-smith/skel/user",
 | |
|             "-s", "$shell",
 | |
|             $userName
 | |
|         ) == 0 or ( $x = 255, warn "Failed to create (unix) account $userName.\n" );
 | |
| }
 | |
| 
 | |
| # Create the user's unique group first (in ldap)
 | |
| system(
 | |
|         "/usr/sbin/cpu", "-C/etc/cpu-system.conf", "groupadd",
 | |
|         "-g",
 | |
|         $gid,
 | |
|         $userName
 | |
|     ) == 0 or ( $x = $ldapauth ne 'enabled' ? $x : 255, warn "Failed to create (ldap) group $userName.\n" );
 | |
| 
 | |
| # Now create the user account (in ldap)
 | |
| my $tmpattr = File::Temp->new();
 | |
| print $tmpattr "telephoneNumber: $phone\n";
 | |
| print $tmpattr "o: $company\n";
 | |
| print $tmpattr "ou: $dept\n";
 | |
| print $tmpattr "l: $city\n";
 | |
| print $tmpattr "street: $street\n";
 | |
| $tmpattr->flush();
 | |
| system(
 | |
|         "/usr/sbin/cpu", "useradd",
 | |
|         "-u", $uid,
 | |
|         "-g", $gid,
 | |
|         "-f", "$first",
 | |
|         "-E", "$last",
 | |
|         "-e", "$userName\@$domain",
 | |
|         "-a", "$tmpattr",
 | |
|         "-d", "/home/e-smith/files/users/$userName",
 | |
|         "-G", "$groups",
 | |
|         "-m",
 | |
|         "-k/etc/e-smith/skel/user",
 | |
|         "-s", "$shell",
 | |
|         $userName
 | |
|     ) == 0 or ( $x = $ldapauth ne 'enabled' ? $x : 255, warn "Failed to create (ldap) account $userName.\n" );
 | |
| undef $tmpattr;
 | |
| 
 | |
| 
 | |
| # Release lock if we have one
 | |
| $lock && esmith::lockfile::UnlockFile($lock);
 | |
| 
 | |
| # Set initial permissions on user's root directory.
 | |
| 
 | |
| chmod 0700, "/home/e-smith/files/users/$userName";
 | |
| 
 | |
| if ($ldapauth ne 'enabled')
 | |
| {
 | |
|     system("/usr/bin/passwd", "-l", "$userName")
 | |
|         and ( $x = 255, warn "Could not lock (unix) password for $userName\n" );
 | |
| }
 | |
| system("/usr/sbin/cpu", "usermod", "-L", "$userName")
 | |
|     and ( $x = $ldapauth ne 'enabled' ? $x : 255, warn "Could not lock (ldap) password for $userName\n" );
 | |
| system("/usr/bin/smbpasswd", "-a", "-d", "$userName")
 | |
|     and ( $x = 255, warn "Could not lock (smb) password for $userName\n" );
 | |
| 
 | |
| exit ($x);
 |