User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the PHP section within the Web Development category of DaniWeb, a massive community of 391,141 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 3,175 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our PHP advertiser: Lunarpages PHP Web Hosting
Views: 982 | Replies: 2
Reply
Join Date: Mar 2007
Posts: 16
Reputation: Riazansar is an unknown quantity at this point 
Rep Power: 2
Solved Threads: 0
Riazansar Riazansar is offline Offline
Newbie Poster

Help needed if anyone knows

  #1  
May 17th, 2007
dear members !

In my job i jst face this problem with one of our PHP based sites.

what this script does is that asks users for some inoformation when they want to have a folder in one of our web servers.
now the problem is that when they submit their information it gaves the user an ID that already is assigned to someone.
I am not a programer my job is networking and server managment soo if anyone knows the problem please let me know as soon as possible

here is the script


 
<?php
$host = "ldap1.unomaha.edu";
$base = "dc=unomaha,dc=edu";
$gbase = "ou=groups,$base";
$pbase = "ou=people,$base";
$log = "/var/log/groupman.log";
function stdin($ask)
{
print "$ask: ";
$stdin = fopen("php://stdin","r");
$answer = fgets($stdin,1024);
$answer = trim($answer);
if ($ask != "Your LDAP password")
{
$answer = strtolower($answer);
}
fclose($stdin);
if ($answer == 'q')
{
exit("Goodbye\n");
}
return $answer;
}
function pause()
{
print "\n";
$answer = stdin("Enter 'm' for menu, or 'q' to quit");
}
function notnull($ask)
{
do
{
$answer = stdin($ask);
} while ($answer == "");
return $answer;
}
function get_member_values()
{
global $ds, $base, $uid, $host_array;
$sr = ldap_search($ds,$base,"uid=$uid");
$entry = ldap_first_entry($ds,$sr);
$host_array = ldap_get_values($ds,$entry,"host");
ldap_free_result($sr);
}
function get_group_values($cn)
{
global $ds, $base, $gecos, $homedirectory, $owner, $seealso, $member_count, $uniquemember_netid_array;
$sr = ldap_search($ds,$base,"cn=$cn");
$entry = ldap_first_entry($ds,$sr);
$gecos_array = ldap_get_values($ds,$entry,"gecos");
$homedir_array = ldap_get_values($ds,$entry,"homedirectory");
$owner_array = ldap_get_values($ds,$entry,"owner");
$seealso_array = ldap_get_values($ds,$entry,"seealso"); 
$uniquemember_array = ldap_get_values($ds,$entry,"uniquemember");
$gecos = $gecos_array[0];
$homedirectory = $homedir_array[0];
$owner_dn = $owner_array[0]; 
$owner_netid = ldap_explode_dn($owner_dn,1);
$owner = $owner_netid[0];
$seealso_dn = $seealso_array[0];
$seealso_netid = ldap_explode_dn($seealso_dn,1);
$seealso = $seealso_netid[0];
$member_count = $uniquemember_array["count"];
for ($i=0; $i<$uniquemember_array["count"]; $i++) 
{
$uniquemember_dn = $uniquemember_array[$i];
$uniquemember_netid = ldap_explode_dn($uniquemember_dn,1);
$uniquemember = $uniquemember_netid[0]; 
$uniquemember_netid_array[$i] = $uniquemember;
}
ldap_free_result($sr);
}
function group_exists($cn)
{
global $ds, $gbase;
$sr = ldap_search($ds,$gbase,"cn=$cn");
$count = ldap_count_entries($ds,$sr);
if ($count == 0) {
print "group does not exist\n";
}
return $count;
}
function group_not_exists($cn)
{
global $ds, $gbase;
$sr = ldap_search($ds,$gbase,"cn=$cn");
$count = ldap_count_entries($ds,$sr);
if ($count > 0)
{
print "group exists\n";
}
return $count;
}
function member_exists($uid)
{
global $ds, $pbase;
$sr = ldap_search($ds,$pbase,"uid=$uid");
$count = ldap_count_entries($ds,$sr);
return $count;
}
function add_host($uid)
{
global $ds, $pbase, $host_array, $log;

@get_member_values($uid);
$rec["host"][0] = "avalon.unomaha.edu"; 
$rec["host"][1] = "avalon1.unomaha.edu"; 
$rec["host"][2] = "avalon2.unomaha.edu"; 
if (!(in_array($host_array,$rec)))
{
$member_dn = "uid=$uid,$pbase\n";
$ldapmodadd = ldap_mod_add($ds,$member_dn,$rec);
}
}
function remove_host($uid)
{
global $ds, $pbase, $base;

$member_dn = "uid=$uid,$pbase";
$sr = ldap_search($ds,$base,"uniquemember=$member_dn");
$entry = ldap_first_entry($ds,$sr);
$count = ldap_count_entries($ds,$sr);
if ($count == 1) {
$rec["host"][0] = "avalon.unomaha.edu";
$rec["host"][1] = "avalon1.unomaha.edu";
$rec["host"][2] = "avalon2.unomaha.edu";
$ldapmoddel = ldap_mod_del($ds,$member_dn,$rec);
}
}
function mk_home_dir($uid)
{
system("mkdir /home/$uid");
system("chmod 700 /home/$uid");
system("cp /etc/skel/.bashrc /home/$uid/.bashrc");
system("cp /etc/skel/.bash_profile /home/$uid/.bash_profile");
system("cp /etc/skel/.bash_logout /home/$uid/.bash_logout");
system("chmod 644 /home/$uid/.bashrc /home/$uid/.bash_profile /home/$uid/.bash_logout");
system("chown -R $uid.$uid /home/$uid");
}
function show_group($cn)
{
global $ds, $base, $gecos, $homedirectory, $owner, $seealso, $member_count, $uniquemember_netid_array;
print "\ndescription:\n";
print " $gecos\n";
print "\nhome directory:\n";
print " $homedirectory\n";
print "\nprimary contact:\n";
print " $owner\n";
print "\nsecondary contact:\n";
print " $seealso\n";
print "\neditors:\n";
for ($i=0; $i<$member_count; $i++) 
{
print " $uniquemember_netid_array[$i]\n";
}
}
function show_member($uid)
{
global $ds, $pbase, $base;
$member_dn = "uid=$uid,$pbase";
$sr = ldap_search($ds,$base,"owner=$member_dn"); 
$entry = ldap_get_entries($ds,$sr);
print "\nprimary contact on:\n";
for ($i=0; $i < $entry["count"]; $i++)
{
print " " . $entry[$i]["cn"][0] . "\n"; 
}
$sr = ldap_search($ds,$base,"seealso=$member_dn"); 
$entry = ldap_get_entries($ds,$sr);
print "\nsecondary contact on:\n";
for ($i=0; $i < $entry["count"]; $i++)
{
print " " . $entry[$i]["cn"][0] . "\n"; 
}
$sr = ldap_search($ds,$base,"uniquemember=$member_dn"); 
$entry = ldap_get_entries($ds,$sr);
print "\neditor on:\n";
for ($i=0; $i < $entry["count"]; $i++)
{
print " " . $entry[$i]["cn"][0] . "\n"; 
}
}
function get_uidnumber()
{
global $ds, $gbase;
$sr = ldap_search($ds,$gbase,"uidnumber=*");
$info = ldap_get_entries($ds,$sr);
$highuid = 0;
for ( $i=0; $i<$info["count"]; $i++ ) 
{
$thisuid = $info[$i]["uidnumber"][0];
if ($thisuid > $highuid) 
{
$highuid = $thisuid;
}
}
$highuid++;
return $highuid;
}
function send_mail_message($cn,$recipients)
{
$special = stdin("List actions taken regarding Special Instructions");
if ($special == "") {
$special = "None";
}
$mailmsg = "/root/bin/new_group_msg";
$email = fopen($mailmsg,"w");
fputs($email,"From: UNO Helpdesk <unohelpdesk@mail.unomaha.edu>\n");
fputs($email,"To: $recipients\n");
fputs($email,"Subject: Your web space request - $cn\n");
fputs($email,"Hello. Your organizational account on the campus webserver has been created.\n\n");
fputs($email,"Host: www.unomaha.edu\n");
fputs($email,"URL: http://www.unomaha.edu/$cn\n");
fputs($email,"Directory: /web/$cn\n\n");
fputs($email,"To access your organizational directory, log on to www.unomaha.edu with your UNO NetID and password using a secure FTP client, such as WinSCP (Windows) or MacSSH (Macintosh), then change directory to '/web/$cn'.\n\n");
fputs($email,"You may download WinSCP or MacSSH from http://install.unomaha.edu.\n\n");
fputs($email,"Regarding your Special Instructions:\n");
fputs($email,"$special\n\n");
fputs($email,"UNO Helpdesk\n");
fputs($email,"unohelpdesk@mail.unomaha.edu\n");
fputs($email,"402-554-4917\n");
fclose($email);
`echo "" | mutt -H $mailmsg`;
}
function add_group($cn)
{
global $ds, $base, $pbase, $gbase, $log;
$gecos = notnull("brief description");
$homedirectory = "/web/$cn";
do 
{
$owner = notnull("primary contact netid");
} while (!member_exists($owner));
@add_host($owner);
$recipients .= "$owner@mail.unomaha.edu";
do
{ 
$seealso = notnull("secondary contact netid");
} while ((!member_exists($seealso)) || ($seealso == $owner));
@add_host($seealso);
$recipients .= ",$seealso@mail.unomaha.edu";
$j = 2;
do
{
$editor = stdin("editor");
if (member_exists($editor)) 
{
@add_host($editor);
$uniquemember[$j] = "uid=$editor,$pbase";
$j++;
$recipients .= ",$editor@mail.unomaha.edu";
}
} while ($editor != "");
$uidnumber = get_uidnumber();
$entry["cn"] = $cn;
$entry["objectclass"][0] = "top";
$entry["objectclass"][1] = "posixAccount";
$entry["objectclass"][2] = "posixGroup";
$entry["objectclass"][3] = "groupofuniquenames";
$entry["uid"] = $cn;
$entry["uidnumber"] = $uidnumber;
$entry["gidnumber"] = $uidnumber;
$entry["gecos"] = $gecos;
$entry["homedirectory"] = "$homedirectory";
$entry["owner"] = "uid=$owner,$pbase";
$entry["seealso"] = "uid=$seealso,$pbase";
$entry["uniquemember"][0] = "uid=$owner,$pbase";
$entry["uniquemember"][1] = "uid=$seealso,$pbase";
for ($i = 2; $i < $j; $i++) 
{
$entry["uniquemember"][$i] = "$uniquemember[$i]";
}

$recipients .= ",unohelpdesk@mail.unomaha.edu";
print "please wait... ";
$dn = "cn=$cn,$gbase";
$ldapadd = ldap_add($ds,$dn,$entry);
if ($ldapadd) 
{
print "$cn added\n";
send_mail_message($cn,$recipients);
sleep(10);
$creategrouphomedir = system("/root/bin/create_group_homedir $cn");
if ($creategrouphomedir == 0) {
print "Group home directory created\n";
system("edquota -p groupquota -g $cn");
$now = date("D M j G:i:s T Y");
$fp = fopen($log,"a+");
fputs($fp,"$now: $cn CREATED (contacts: $owner, $seealso)\n");
fclose($fp); 
}
}
}
function delete_group($cn)
{
global $ds, $gbase, $member_count, $uniquemember_netid_array, $log;
show_group($cn);

$answer = stdin("\nAre you sure you want to delete this group [y/n]");
if ($answer == "y") 
{
$per = notnull("NetID requesting group deletion");
for ($i=0; $i < $member_count; $i++) 
{
$uid = $uniquemember_netid_array[$i];
remove_host($uid);
}

print "please wait... ";
$dn = "cn=$cn,$gbase";
$ldapdelete = ldap_delete($ds,$dn);
if ($ldapdelete)
{
print "$cn deleted. Remember to remove the group directory.\n";
$now = date("D M j G:i:s T Y");
$fp = fopen($log,"a+");
fputs($fp,"$now: $cn DELETED (per: $per)\n");
fclose($fp); 
}
} 
}
function add_member($cn)
{
global $ds, $gbase, $pbase;
show_group($cn);
print "\n";
$uid = notnull("Member NetID to add");
if (!member_exists($uid))
{
print "$uid does not exist\n";
}
else
{
$uidarray[] = $uid;
$member_dn = "uid=$uid,$pbase"; 
$group_dn = "cn=$cn,$gbase";
$rec["uniquemember"][] = $member_dn;
$ldapmodadd = @ldap_mod_add($ds,$group_dn,$rec);
@add_host($uid);
if (!(is_dir("/home/$uid"))) 
{
$mkhomedir = mk_home_dir($uid);
system("/usr/sbin/edquota -p userquota -u $uid");
if ($mkhomedir == 0) 
{
print "$uid home directory created\n";
}
else
{
print "$uid home directory create failed\n";
}
}
if ($ldapmodadd) 
{
print "$uid added to $cn\n";
}
else
{
print "$uid add failed\n";
}
}
}
function delete_member($cn, $uid)
{
global $ds, $gbase, $pbase;
show_group($cn);
print "\n";
if ($uid == "")
{
$uid = notnull("Member NetID to delete");
}
if (!member_exists($uid))
{
print "$uid does not exist\n";
}
else
{
$member_dn = "uid=$uid,$pbase";
$group_dn = "cn=$cn,$gbase";
$rec["uniquemember"][] = $member_dn;
$ldapmoddel = @ldap_mod_del($ds,$group_dn,$rec);

if ($ldapmoddel)
{
print "$uid deleted from $cn\n";
}
else
{
print "$uid delete from $cn failed\n";
}
@remove_host($uid);
}
}
function change_contact($cn,$role,$prompt)
{
global $ds, $gbase, $pbase, $owner, $seealso, $uniquemember_netid_array, $log;
show_group($cn);
print "\n";
$uid = notnull($prompt);
if (!member_exists($uid))
{
print "$uid does not exist\n";
}
else
{
if ($role == "owner") 
{
$oldrole = $owner;
}
else
{
$oldrole = $seealso;
}
@remove_host($oldrole);
delete_member($cn,$oldrole); 
$member_dn = "uid=$uid,$pbase";
$group_dn = "cn=$cn,$gbase";
$rec["$role"][0] = $member_dn;
$ldapmodreplace = @ldap_mod_replace($ds,$group_dn,$rec);
if ($ldapmodreplace)
{
print "$role successfully changed\n";
$now = date("D M j G:i:s T Y");
$fp = fopen($log,"a+");
fputs($fp,"$now: $cn CHANGED $role (old: $oldrole, new: $uid)\n");
fclose($fp);
}
else
{
print "$role change failed\n";
}
$uidarray[] = $uid;
if (!(in_array($uniquemember_netid_array,$uidarray)))
{
$rec2["uniquemember"][] = $member_dn;
$ldapmodadd = @ldap_mod_add($ds,$group_dn,$rec2);
@add_host($uid);
}
}
}
function menu()
{
print "\n";
print "---------------------------------------------\n";
print " avalon group management\n"; 
print "---------------------------------------------\n";
print " [0] show group\n";
print " [1] add a group\n";
print " [2] delete a group\n";
print " [3] add a member to a group\n";
print " [4] remove member from a group\n";
print " [5] change group primary contact\n";
print " [6] change group secondary contact\n";
print " [7] show member\n";
print " [q] quit\n";
print "---------------------------------------------\n";
$answer = stdin("[0-6]");

switch($answer)
{
case 0: 
$cn = notnull("group name");
if (group_exists($cn)) 
{
get_group_values($cn);
@show_group($cn);
pause();
}
menu(); 
case 1;
$cn = notnull("group name");
if (group_exists($cn))
{
}
else
{
add_group($cn);
sleep(10);
system("/root/bin/create_group_homedir $cn");
}
menu();
case 2:
$cn = notnull("group name");
if (group_exists($cn))
{
get_group_values($cn);
delete_group($cn);
pause();
}
menu();
case 3:
$cn = notnull("group name");
if (group_exists($cn))
{
get_group_values($cn);
add_member($cn);
pause();
}
menu();
case 4:
$cn = notnull("group name");
if (group_exists($cn))
{
get_group_values($cn);
delete_member($cn,"");
pause();
}
menu();
case 5:
$cn = notnull("group name");
if (group_exists($cn))
{
get_group_values($cn);
change_contact($cn,"owner","New primary contact NetID");
pause();
}
menu();
case 6:
$cn = notnull("group name");
if (group_exists($cn))
{
get_group_values($cn);
change_contact($cn,"seealso","New secondary contact NetID");
pause();
}
menu();
case 7:
$uid = notnull("member NetID");
show_member($uid);
menu();
case 'q':
exit ("Goodbye\n");
default:
menu();
}
}
$ds = @ldap_connect($host);
if (!$ds) 
{ 
die("Cannot CONNECT to LDAP server\n"); 
}
$login = @notnull("your LDAP login");
system('stty -echo');
$pw = @notnull("Your LDAP password");
system('stty echo');
$ldapbind = @ldap_bind($ds,"uid=$login,$pbase",$pw);
if (!$ldapbind)
{
die("Cannot BIND to LDAP server\n");
}
menu();
?>
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Aug 2006
Location: Netherlands
Posts: 223
Reputation: Anonymusius is on a distinguished road 
Rep Power: 2
Solved Threads: 10
Anonymusius's Avatar
Anonymusius Anonymusius is offline Offline
Posting Whiz in Training

Re: Help needed if anyone knows

  #2  
May 17th, 2007
Do you think your boss is ok with you posting this? Beside that, can't you trace the problem down to a specific piece fo code? This is to big for me to wade through.

To I like code that's indented.
Reply With Quote  
Join Date: Mar 2007
Posts: 16
Reputation: Riazansar is an unknown quantity at this point 
Rep Power: 2
Solved Threads: 0
Riazansar Riazansar is offline Offline
Newbie Poster

Re: Help needed if anyone knows

  #3  
May 17th, 2007
it is not a project or soemthing like boss thing or etc....

i jst needed to figure the probelm in code out in order to move on with setting the server up. i am not a programer to narrow the code down but the problem is that the script gives users not a unique ID it gaves them the id that already is in use
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

DaniWeb PHP Marketplace
Thread Tools Display Modes

Similar Threads
Other Threads in the PHP Forum

All times are GMT -4. The time now is 6:46 am.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC