#!/usr/bin/perl # CGI script written by vic on 9/3/2004 use Net::LDAP; use CGI qw(:all); use CGI::Carp qw(fatalsToBrowser); use Sys::Hostname; # $Now=localtime(time); $LocalHost= `hostname`; if ($ENV{HTTP_COOKIE} eq 'LDAP_Admin=LOGGED_IN') { BindAndCheckParams(); } elsif (param(action) eq 'Login') { $user = param(USER); $pass = param(PASS); CheckLogin("$user","$pass"); } else { GetLogin(); } sub BindAndCheckParams { $ldap = Net::LDAP->new("ldapdev"); $ldap->bind("cn=Manager", password=>"password"); if (param) { HandleParams(); $ldap->unbind(); ShowError("Function not yet implemented."); } else { Start(); $ldap->unbind(); exit; } } sub HandleParams { if ( param(action) eq 'LOGOUT') { LogOut(); exit; } if ( param(UID_DETAIL) ) { $username = param(UID_DETAIL); ViewUser("$username"); exit; } if (param(action) eq 'RESET PASSWORD') { $uid = param(USERNAME); GetNewPass("$uid"); exit; } if (param(action) eq 'SET PASSWORD') { $uid = param(USERNAME); $pass1 = param(PASS1); $pass2 = param(PASS2); ShowError("The passwords for $uid didn't match!") if ($pass2 ne $pass1); SetPassword("$uid","$pass1"); exit; } if (param(action) eq 'UPDATE') { %User = (); $uid = param(USERNAME); $User{'uidNumber'} = param(UID); $User{'gidNumber'} = param(GID); $User{'homeDirectory'} = param(HOMEDIR); $User{'loginShell'} = param(SHELL); $User{'givenName'} = param(FNAME); $User{'sn'} = param(LNAME); $User{'gecos'} = param(GECOS); $User{'description'} = param(DESC); $User{'title'} = param(TITLE); $User{'mail'} = param(EMAIL); $User{'telephoneNumber'} = param(OFFICEPHONE); $User{'mobile'} = param(MOBILEPHONE); $User{'homePhone'} = param(HOMEPHONE); $User{'manager'} = param(MANAGER); $User{'pager'} = param(PAGER); ShowError("Stop screwing around!") if ($User{'uidNumber'} == 0 || $uid eq root); UpdateRecord(\%User,"$uid"); exit; } if (param(action) eq 'Add User') { %User = (); $uid = param(USERNAME); $User{'uidNumber'} = param(UID); $User{'gidNumber'} = param(GID); $User{'homeDirectory'} = param(HOMEDIR); $User{'loginShell'} = param(SHELL); $User{'givenName'} = param(FNAME); $User{'sn'} = param(LNAME); $User{'gecos'} = param(GECOS); $User{'description'} = param(DESC); $User{'title'} = param(TITLE); $User{'mail'} = param(EMAIL); $User{'telephoneNumber'} = param(OFFICEPHONE); $User{'mobile'} = param(MOBILEPHONE); $User{'homePhone'} = param(HOMEPHONE); $User{'manager'} = param(MANAGER); $User{'pager'} = param(PAGER); $User{'pass1'} = param(PASS1); $User{'pass2'} = param(PASS2); @gid = split(/:/,$User{'gidNumber'}); $User{'gidNumber'} = $gid[1]; ShowError("Stop screwing around!") if ($User{'uidNumber'} == 0 || $uid eq root); ShowError("The passwords didn't match!") if ($User{'pass2'} ne $User{'pass1'}); AddRecord(\%User,"$uid"); exit; } if (param(action) eq 'DELETE') { $uid = param(USERNAME); DeleteUser("$uid"); exit; } if (param(action) eq 'ADDUSER') { ShowAddRecordForm(); exit; } if (param(action) eq 'GROUP') { ManageGroups(); exit; } if (param(groupaction) eq 'ADD') { $user = param(USERS); $group = param(GROUP); ShowError("No user selected") if ($user eq ''); AddMember("$user","$group"); exit; } if (param(groupaction) eq 'REMOVE') { $user = param(MEMBERS); $group = param(GROUP); ShowError("No user selected") if ($user eq ''); RemoveMember("$user","$group"); exit; } if (param(groupaction) eq 'Add Group') { $group = param(GROUPNAME); $gid = param(GID); ShowError("No Group Name Entered") if ($group eq ''); ShowError("No GID Entered") if ($gid eq ''); AddGroup("$group","$gid"); exit; } if (param(action) eq 'EDITGROUP') { $groupname = param(GROUPNAME); EditGroup("$groupname"); exit; } if (param(action) eq 'DELETEGROUP') { $groupname = param(GROUPNAME); DeleteGroup("$groupname"); exit; } if (param(action) eq 'AUTOHOME') { ManageMaps(); exit; } if (param(AUTOHOME) eq 'EDIT') { $user = param(USER); EditMaps("$user"); exit; } if (param(action) eq 'Save Key') { $user = param(USERNAME); $key = param(KEY); SaveMapKey("$user","$key"); exit; } if (param(action) eq 'Add Key') { $user = param(USERNAME); $server = param(SERVER); $path = param(PATH); AddMapKey("$user","$server","$path"); exit; } } sub AddGroup { my($group,$gid) = @_; $dn = "cn=$group,ou=group,dc=domain_central,dc=local"; $result = $ldap->add($dn, attr => [ 'cn' => "$group", 'gidNumber' => $gid, 'objectclass' => [ 'posixGroup', 'top'] ] ); $result_code = $result->code; $result_error = $result->error; ShowError("There was a problem adding group $group.

Error code - $result_code
Error message - $result_error") if ($result_code > 0 ); Header(); print "

Added Group $group"; print end_html; } sub AddMapKey { my($user,$server,$path) = @_; $dn = "automountkey=$user,automountmapname=auto_home,dc=domain_central,dc=local"; $key = '-rw,intr ' . "$server" . ':' . $path; $result = $ldap->add($dn, attr => [ 'automountkey' => "$user", 'automountinformation' => "$key", 'objectclass' => [ 'automount', 'top'] ] ); $result_code = $result->code; $result_error = $result->error; ShowError("There was a problem adding an auto_home key for $user.

Error code - $result_code
Error message - $result_error") if ($result_code > 0 ); Header(); print "

Added auto_home key for $user"; print end_html; } sub SaveMapKey { my($user,$key) = @_; $dn = "automountkey=$user,automountmapname=auto_home,dc=domain_central,dc=local"; $result = $ldap->modify($dn, replace => { automountinformation => "$key" }); $result_code = $result->code; $result_error = $result->error; ShowError("There was a problem updating the auto_home map for $user.

Error code - $result_code
Error message - $result_error") if ($result_code > 0 ); Header(); print "

"; print end_html; } sub AddMember { my ($user,$group) = @_; $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"cn=$group, ou=group,dc=domain_central,dc=local", attrs=> ['cn', 'memberuid'] ); @entries = $mesg->entries; $entry = $entries[0]; $dn = "cn=$group,ou=group,dc=domain_central,dc=local"; $result = $ldap->modify($dn, add => { memberuid => "$user" }); $result_code = $result->code; $result_error = $result->error; ShowError("There was a problem adding $user to group \"$group\".

Error code - $result_code
Error message - $result_error") if ($result_code > 0 ); Header(); print "

Added $user to group \"$group\"\n"; print ""; } sub RemoveMember { my ($user,$group) = @_; $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"cn=$group, ou=group,dc=domain_central,dc=local", attrs=> ['cn', 'memberuid'] ); @entries = $mesg->entries; $entry = $entries[0]; $dn = "cn=$group,ou=group,dc=domain_central,dc=local"; $result = $ldap->modify($dn, delete => { memberuid => "$user" }); $result_code = $result->code; $result_error = $result->error; ShowError("There was a problem removing $user from group \"$group\".

Error code - $result_code
Error message - $result_error") if ($result_code > 0 ); Header(); print "

Removed $user from group \"$group\"\n"; print ""; } sub ManageGroups { $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"ou=group,dc=domain_central,dc=local", attrs=> ['cn', 'memberuid'] ); @entries = $mesg->entries; Header(); print startform(); print "

\n"; print ""; print "\n"; print "\n"; print "
Add New Group
Group Name\n"; print "\n"; print textfield(-name=>'GROUPNAME', -value=>"", -size=>40); print "
GID\n"; print "\n"; print textfield(-name=>'GID', -value=>"", -size=>40); print "
\n"; print "

\n"; print "
\n"; print submit(-name=>'groupaction', -value=>'Add Group'); print "
\n"; print "

\n"; print "

"; print "\n"; print "\n"; foreach $entry (@entries) { @attrs = $entry->attributes(); @members = $entry->get_value(memberUid); $groupname = $entry->get_value(cn); next if ($groupname eq ''); print "\n"; } print "
Group Management
Group NameMembersEditDelete
$groupname\n"; print ""; print popup_menu(-name=>'MEMBERS', -size=>1, -default=>'', -value=>[@members] ); print "Edit\n"; print "Delete\n"; print "
"; print end_html(); } sub EditGroup { my $groupname = shift; $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"cn=$groupname, ou=group,dc=domain_central,dc=local", attrs=> ['cn', 'memberuid'] ); @entries = $mesg->entries; $entry = $entries[0]; @members = $entry->get_value(memberUid); foreach $member (@members) { $members{$member} = 1; } $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"ou=People,dc=domain_central,dc=local"); @entries = $mesg->entries; foreach $entry (@entries) { $user = $entry->get_value(uid); push(@users,$user) if (! exists($members{$user}) ); } @users = sort @users; @members = sort @members; Header(); print startform(); print hidden(-name=>'GROUP', -value=>$groupname); print "

\n"; print "

"; print "\n"; print "\n"; print "
Editing Group \"$groupname\"
"; print popup_menu(-name=>'MEMBERS', -size=>5, -default=>'', -value=>[@members] ); print "
"; print submit(-name=>'groupaction', -value=>'REMOVE'); print "
"; print popup_menu(-name=>'USERS', -size=>5, -default=>'', -value=>[@users] ); print "
"; print submit(-name=>'groupaction', -value=>'ADD'); print "
"; print end_html(); } sub UpdateRecord { my($user,$username,$additions,$changes); $user = shift; $username = shift; my($mesg ,@entries,$entry,@attrs,$attr); $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"uid=$username,ou=People,dc=domain_central,dc=local"); @entries = $mesg->entries; $entry = $entries[0]; @attrs = $entry->attributes(); foreach $attr (@attrs) { $entry{"$attr"} = $entry->get_value($attr); } foreach $attr ( keys %$user ) { if (exists($entry{"$attr"}) ) { $change{"$attr"} = $user->{"$attr"} if ( $entry{"$attr"} ne $user->{"$attr"} ); } else { $add{"$attr"} = $user->{"$attr"} if ( exists($user->{$attr}) ); } } Header(); $dn = "uid=$username,ou=People,dc=domain_central,dc=local"; print "

\n"; print ""; foreach $add ( keys %add ) { $mesg = $ldap->modify($dn, add => { $add => "$add{$add}" }); print ""; } print "
Added Atributes
$add$add{$add}
"; print "

\n"; print ""; foreach $change ( keys %change ) { $mesg = $ldap->modify($dn, replace => { $change => "$change{$change}" }); print ""; } print "
Changed Attributes
$change$change{$change}
"; print "

\n"; print ""; foreach $attr ( keys %$user ) { print "" if (exists($user->{$attr}) ); } print "
Record
$attr$user->{$attr}
"; $entry->update($ldap); print end_html(); } sub SetPassword { my ($uid,$pass) = @_; my $dn = "uid=$uid,ou=People,dc=domain_central,dc=local"; $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"uid=$uid,ou=People,dc=domain_central,dc=local"); @entries = $mesg->entries; $entry = $entries[0]; $result = $ldap->modify($dn, replace => { userPassword => "$pass" }); $result_code = $result->code; $result_error = $result->error; ShowError("There was a problem adding user $username.

Error code - $result_code
Error message - $result_error") if ($result_code > 0 ); Header(); print "

Password changed for user $uid\n"; print ""; } sub Header { print header, start_html({-bgcolor=>white, -text=>black, -title=>'LDAP Admin'},'LDAP Admin'); print "


\n"; print "

LDAP/Unix User and Group Administration\n"; print "\n"; print "\n"; print ""; print "
Manage Users"; print "Manage Groups"; print "Manage Maps"; print "Logout"; print "
"; } sub Start { my($mesg,@entries,$entry,$uid,$user,$key,%users,@attrs,$attr,$link,$link2,$linkuid); $link = "search(filter=>"(objectClass=*)", base=>"ou=People,dc=domain_central,dc=local"); @entries = $mesg->entries; foreach $entry (@entries) { @attrs = $entry->attributes(); foreach $attr (@attrs) { $uid = $entry->get_value(uid); $sn = $entry->get_value(sn); $key = $sn . ', ' . $uid; $users{"$key"}{"$attr"} = $entry->get_value($attr); } } Header(); print "

\n"; print "

"; print "\n"; print "\n"; foreach $user (sort keys %users) { next if ($users{$user}{uid} eq ''); print "\n"; $linkuid = $link . $users{$user}{uid} . '>'; print "\n"; } print "
User Management
User NameUIDUIDGIDHome DirShell$link2
$users{$user}{sn}, $users{$user}{givenName}\n"; print "$linkuid $users{$user}{uid}\n"; print "$users{$user}{uidNumber}\n"; print "$users{$user}{gidNumber}\n"; print "$users{$user}{homeDirectory}\n"; print "$users{$user}{loginShell}\n"; print "$linkuid Edit\n"; print "
"; print end_html(); } sub ManageMaps { $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"automountmapname=auto_home,dc=domain_central,dc=local"); @entries = $mesg->entries; foreach $entry (@entries) { $uid = $entry->get_value(automountKey); next if ($uid eq ''); $auto_home{$uid} = $entry->get_value(automountInformation); } $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"ou=People,dc=domain_central,dc=local", attrs=> 'uid'); @entries = $mesg->entries; foreach $entry (@entries) { $uid = $entry->get_value(uid); $uids{"$uid"} = 1; } @uids = sort keys %uids; Header(); print startform(); print "

\n"; print ""; print "\n"; print "\n"; print "\n"; print "
Add New Auto_Home Key
User Name\n"; print "\n"; print popup_menu(-name=>'USERNAME', -value=>[@uids], -default=>$uid, -size=>1); print "
Server\n"; print "\n"; print textfield(-name=>'SERVER', -value=>"", -size=>40); print "
Path\n"; print "\n"; print textfield(-name=>'PATH', -value=>"", -size=>40); print "
\n"; print "

\n"; print "
\n"; print submit(-name=>'action', -value=>'Add Key'); print "
\n"; print "

\n"; print "

"; print "\n"; print "\n"; foreach $user (sort keys %auto_home) { next if ($auto_home{$user} eq ''); print "\n"; print "\n"; } print "
Auto_Home Management
User NameAuto_HomeEdit
$user\n"; print "$auto_home{$user}\n"; print "Edit\n"; print "
"; print end_html(); } sub EditMaps { my $user = shift; $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"automountkey=$user,automountmapname=auto_home,dc=domain_central,dc=local"); @entries = $mesg->entries; $entry = $entries[0]; $uid = $entry->get_value(automountKey); $auto_home{$uid} = $entry->get_value(automountInformation); Header(); print startform(); print "

\n"; print ""; print "\n"; print "\n"; print "
Editing Auto_Home Key - $user
User Name\n"; print "\n"; print textfield(-name=>'USERNAME', -value=>"$uid", -size=>40); print "
Server:/homedir\n"; print "\n"; print textfield(-name=>'KEY', -value=>"$auto_home{$uid}", -size=>40); print "
\n"; print "

\n"; print "
\n"; print submit(-name=>'action', -value=>'Save Key'); print "
\n"; print end_html(); } sub ViewUser { my $username = shift; my($tablebgcolor,$mesg ,@entries,$entry,@attrs,$attr); $tablebgcolor = "cornsilk"; $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"uid=$username,ou=People,dc=domain_central,dc=local"); @entries = $mesg->entries; Header(); print startform(); print "

\n"; print ""; $entry = $entries[0]; @attrs = $entry->attributes(); foreach $attr (@attrs) { $entry{"$entry"}{"$attr"} = $entry->get_value($attr); } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
Editing Account ( $username )
User Name\n"; print "\n"; print textfield(-name=>'USERNAME', -value=>"$entry{$entry}{uid}", -size=>40); print "
UID\n"; print "\n"; print textfield(-name=>'UID', -value=>"$entry{$entry}{uidNumber}", -size=>40); print "
GID\n"; print "\n"; print textfield(-name=>'GID', -value=>"$entry{$entry}{gidNumber}", -size=>40); print "
Home Dir\n"; print "\n"; print textfield(-name=>'HOMEDIR', -value=>"$entry{$entry}{homeDirectory}", -size=>40); print "
Shell\n"; print "\n"; print textfield(-name=>'SHELL', -value=>"$entry{$entry}{loginShell}", -size=>40); print "
First Name\n"; print "\n"; print textfield(-name=>'FNAME', -value=>"$entry{$entry}{givenName}", -size=>40); print "
Last Name\n"; print "\n"; print textfield(-name=>'LNAME', -value=>"$entry{$entry}{sn}", -size=>40); print "
GECOS\n"; print "\n"; print textfield(-name=>'GECOS', -value=>"$entry{$entry}{gecos}", -size=>40); print "
Description\n"; print "\n"; print textfield(-name=>'DESC', -value=>"$entry{$entry}{description}", -size=>40); print "
Title\n"; print "\n"; print textfield(-name=>'TITLE', -value=>"$entry{$entry}{title}", -size=>40); print "
Email\n"; print "\n"; print textfield(-name=>'EMAIL', -value=>"$entry{$entry}{mail}", -size=>40); print "
Office Phone\n"; print "\n"; print textfield(-name=>'OFFICEPHONE', -value=>"$entry{$entry}{telephoneNumber}", -size=>40); print "
Mobile Phone\n"; print "\n"; print textfield(-name=>'MOBILEPHONE', -value=>"$entry{$entry}{mobile}", -size=>40); print "
Pager Number\n"; print "\n"; print textfield(-name=>'PAGER', -value=>"$entry{$entry}{pager}", -size=>40); print "
Home Phone\n"; print "\n"; print textfield(-name=>'HOMEPHONE', -value=>"$entry{$entry}{homePhone}", -size=>40); print "
Manager\n"; print "\n"; print textfield(-name=>'MANAGER', -value=>"$entry{$entry}{manager}", -size=>40); print "
\n"; print "

\n"; print "
\n"; print submit(-name=>'action', -value=>'UPDATE'); print "\n"; print submit(-name=>'action', -value=>'DELETE'); print "\n"; print submit(-name=>'action', -value=>'RESET PASSWORD'); print "
\n"; print end_html(); } sub ShowAddRecordForm { $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"ou=group,dc=domain_central,dc=local", attrs=> ['gidNumber','cn'] ); @entries = $mesg->entries; foreach $entry (@entries) { $gid = $entry->get_value(gidNumber); next if ($gid eq ''); $cn = $entry->get_value(cn); $key = $cn . ':' . $gid; $gids{$key} = 1; } @gids = sort keys %gids; Header(); print startform(); my @shells = qw ( /bin/false /usr/bin/bash /bin/sh /bin/ksh /usr/bin/sh /usr/bin/ksh ); print "

\n"; print ""; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
Add New User
User Name\n"; print "\n"; print textfield(-name=>'USERNAME', -value=>"", -size=>40); print "
UID\n"; print "\n"; print textfield(-name=>'UID', -value=>"", -size=>40); print "
GID\n"; print "\n"; print popup_menu(-name=>'GID', -size=>1, -default=>'other:1', -value=>[@gids] ); print "
Home Dir\n"; print "\n"; print textfield(-name=>'HOMEDIR', -value=>"", -size=>40); print "
Shell\n"; print "\n"; print popup_menu(-name=>'SHELL', -size=>1, -default=>'/bin/ksh', -value=>[@shells] ); print "
First Name\n"; print "\n"; print textfield(-name=>'FNAME', -value=>"", -size=>40); print "
Last Name\n"; print "\n"; print textfield(-name=>'LNAME', -value=>"", -size=>40); print "
GECOS\n"; print "\n"; print textfield(-name=>'GECOS', -value=>"", -size=>40); print "
Description\n"; print "\n"; print textfield(-name=>'DESC', -value=>"", -size=>40); print "
Title\n"; print "\n"; print textfield(-name=>'TITLE', -value=>"", -size=>40); print "
Email\n"; print "\n"; print textfield(-name=>'EMAIL', -value=>"", -size=>40); print "
Office Phone\n"; print "\n"; print textfield(-name=>'OFFICEPHONE', -value=>"", -size=>40); print "
Mobile Phone\n"; print "\n"; print textfield(-name=>'MOBILEPHONE', -value=>"", -size=>40); print "
Pager Number\n"; print "\n"; print textfield(-name=>'PAGER', -value=>"", -size=>40); print "
Home Phone\n"; print "\n"; print textfield(-name=>'HOMEPHONE', -value=>"", -size=>40); print "
Manager\n"; print "\n"; print textfield(-name=>'MANAGER', -value=>"", -size=>40); print "
Password\n"; print "\n"; print password_field(-name=>'PASS1', -value=>"", -size=>40); print "
Re-enter Password\n"; print "\n"; print password_field(-name=>'PASS2', -value=>"", -size=>40); print "
\n"; print "

\n"; print "
\n"; print submit(-name=>'action', -value=>'Add User'); print "
\n"; print end_html(); } sub GetNewPass { my $uid = shift; Header(); print startform(); print hidden(-name=>'USERNAME', -value=>"$uid"); print "

\n"; print ""; print "\n"; print "\n"; print "
Setting Password for $uid
Password\n"; print "\n"; print password_field(-name=>'PASS1', -value=>"", -size=>40); print "
Re-enter Password\n"; print "\n"; print password_field(-name=>'PASS2', -value=>"", -size=>40); print "
\n"; print "

\n"; print "
\n"; print submit(-name=>'action', -value=>'SET PASSWORD'); print "
\n"; print end_html(); } sub GetLogin { Header(); print startform(); print "

\n"; print ""; print "\n"; print "\n"; print "
LDAP Admin Login
User Name\n"; print "\n"; print textfield(-name=>'USER', -value=>"", -size=>40); print "
Password\n"; print "\n"; print password_field(-name=>'PASS', -value=>"", -size=>40); print "
\n"; print "

\n"; print "
\n"; print submit(-name=>'action', -value=>'Login'); print "
\n"; print end_html(); } sub AddRecord { my($user,$username); $user = shift; $username = shift; my($mesg,@entries,$entry,$uidnumber,%uids,$dn,$result); $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"ou=People,dc=domain_central,dc=local", attrs=> 'uidNumber'); @entries = $mesg->entries; foreach $entry (@entries) { $uidnumber = $entry->get_value(uidNumber); $uids{"$uidnumber"} = 1; } ShowError("Duplicate UID $user->{'uidNumber'}") if ( exists($uids{"$user->{'uidNumber'}"}) ); $dn = "uid=$username,ou=People,dc=domain_central,dc=local"; $result = $ldap->add($dn, attr => [ 'uid' => $username, 'cn' => "$user->{'givenName'} $user->{'sn'}", 'uidNumber' => $user->{'uidNumber'}, 'gidNumber' => $user->{'gidNumber'}, 'homeDirectory' => $user->{'homeDirectory'}, 'loginShell' => $user->{'loginShell'}, 'givenName' => $user->{'givenName'}, 'sn' => $user->{'sn'}, 'gecos' => $user->{'gecos'}, 'description' => $user->{'description'}, 'title' => $user->{'title'}, 'mail' => $user->{'mail'}, 'telephoneNumber' => $user->{'telephoneNumber'}, 'mobile' => $user->{'mobile'}, 'homePhone' => $user->{'homePhone'}, 'manager' => $user->{'manager'}, 'pager' => $user->{'pager'}, 'userpassword' => $user->{'pass1'}, 'objectclass' => [ 'person', 'inetOrgPerson', 'top', 'organizationalPerson','shadowaccount','posixAccount'] ] ); $result_code = $result->code; $result_error = $result->error; ShowError("There was a problem adding user $username.

Error code - $result_code
Error message - $result_error") if ($result_code > 0 ); Header(); print "

\n"; print ""; foreach $attr ( keys %$user ) { next if ($attr =~ /pass1|pass2/); print ""; } print "
Added User $username
$attr$user->{$attr}
"; print end_html(); } sub DeleteUser { my $username = shift; $dn = "uid=$username,ou=People,dc=domain_central,dc=local"; $result = $ldap->delete($dn); $result_code = $result->code; $result_error = $result->error; ShowError("There was a problem deleting user $username.

Error code - $result_code
Error message - $result_error") if ($result_code > 0 ); Header(); print "

\n"; print "Deleted User $username"; print end_html(); } sub DeleteGroup { my $group = shift; $dn = "cn=$group,ou=group,dc=domain_central,dc=local"; $result = $ldap->delete($dn); $result_code = $result->code; $result_error = $result->error; ShowError("There was a problem deleting group $group.

Error code - $result_code
Error message - $result_error") if ($result_code > 0 ); Header(); print "

\n"; print "Deleted group $group"; print end_html(); } sub ShowError { $reason = shift; print header, start_html({-bgcolor=>white, -background=>'/bb/gifs/bkg-blue.gif', -text=>silver, -title=>'Error'},'Error'); print "




"; print "

Unable to complete your request!


"; print "$reason
"; end_html(); exit; } sub LogOut { my($cookie_name, $cookie_value, $cookie); $cookie_name = 'LDAP_Admin'; $cookie_value = 'LOGGED_OUT'; $cookie = cookie( -NAME => $cookie_name, -VALUE => $cookie_value, -EXPIRES => "+12h", -DOMAIN => "jumpstart.domain_central.local", ); print redirect(-URL => "http://jumpstart.domain_central.local/cgi-bin/ldapadmin.cgi", -COOKIE => $cookie); } sub SetCookie { my($cookie_name, $cookie_value, $cookie); $cookie_name = 'LDAP_Admin'; $cookie_value = 'LOGGED_IN'; $cookie = cookie( -NAME => $cookie_name, -VALUE => $cookie_value, -EXPIRES => "+12h", -DOMAIN => "jumpstart.domain_central.local", ); print redirect(-URL => "http://jumpstart.domain_central.local/cgi-bin/ldapadmin.cgi", -COOKIE => $cookie); } sub CheckLogin { my($user,$pass) = @_; my ($ldap, $result, $result_code, $result_error); $ldap = Net::LDAP->new("ldapdev"); $result = $ldap->bind("uid=$user,ou=People,dc=domain_central,dc=local", password=>"$pass"); $result_code = $result->code; $result_error = $result->error; if ($result_code > 0 ) { ShowError("Login failed for $user.

Error code - $result_code
Error message - $result_error"); } $mesg = $ldap->search(filter=>"(objectClass=*)", base=>"cn=unixadmin,ou=Groups,dc=domain_central,dc=local"); @entries = $mesg->entries; $entry = $entries[0]; @attrs = $entry->attributes(); foreach $attr (@attrs) { next if ($attr !~ /uniquemember/i); @group_entry = $entry->get_value($attr); foreach $group_entry (@group_entry) { @member = split(/,/,$group_entry); @member = split(/=/,$member[0]); $member = $member[1]; if ($member eq $user) { $ldap->unbind(); SetCookie(); } } } }