#!/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 "