]> zub.fei.tuke.sk Git - ldapvmail/commitdiff
better error check in php ldap calls 0.3.1
authorPeter Popovec <popovec@fei.tuke.sk>
Tue, 4 Jul 2006 06:40:00 +0000 (08:40 +0200)
committerPeter Popovec <popovec@fei.tuke.sk>
Fri, 23 Sep 2005 08:53:00 +0000 (10:53 +0200)
web: check for multiple aliases, and multiple or redundand forwards
web: select 'leave copy of message on server' if forward is activated

debian/README
debian/changelog
debian/dirs
debian/postinst.ex [moved from debian/postinst with 100% similarity]
web/etc/ldapVmail/config.php
web/usr/share/ldapVmail/help.html [new file with mode: 0644]
web/usr/share/ldapVmail/index.php [moved from web/usr/share/ldapVmail/admin.php with 89% similarity]
web/usr/share/ldapVmail/k.php [new file with mode: 0644]

index 639a06111d4be8f4a6aeb541281566e3c0ccccfc..93228b4028f40bcbee0e61f8e3a775be338ad8d1 100644 (file)
@@ -1,6 +1,7 @@
 The Debian Package ldapvmail
 ----------------------------
 
-NEWT based TUI for virtual mail  system based on postfix, courier and ldap
+NEWT based TUI and web interface for virtual mail system based on 
+postfix, courier and ldap
 
 Peter Popovec <popovec@fei.tuke.sk>, Sun, 30 Jan 2005 12:15:51 +0100
index e93b3fc6dd81cf22d2d92a06dd3243e5e05be69a..afe7dec059795c7894f0c5fbe9d19012775446f2 100644 (file)
@@ -1,8 +1,16 @@
+ldapvmail (0.3.1) unstable; urgency=low
+
+  * better error check in php ldap calls
+  * web: check for multiple aliases, and multiple or redundand forwards
+  * web: select 'leave copy of message on server' if forward is activated
+
+ -- Peter Popovec <popovec@fei.tuke.sk>  Tue,  4 Jul 2006 08:35:16 +0200
+
 ldapvmail (0.3) unstable; urgency=low
 
   * web interface first wersion
 
- -- Peter Popovec <popovec@zubok>  Fri, 23 Sep 2005 08:01:26 +0200
+ -- Peter Popovec <popovec@zubok>  Fri,  23 Sep 2005 08:01:26 +0200
 
 ldapvmail (0.2.1) unstable; urgency=low
 
index e77248175524d9f63749c2d6ca67159eeb4aa635..7c764dbb4332046a05fc68ceb881709577eea0f5 100644 (file)
@@ -1 +1,2 @@
 usr/bin
+usr/share/ldapVmail
similarity index 100%
rename from debian/postinst
rename to debian/postinst.ex
index d28968531c8455b60d732c43697219b140f15301..e9085e7c1863b948f2d61ba5350c18d92f618a34 100644 (file)
@@ -1,8 +1,8 @@
 <?
 $LdapHost="ldap://127.0.0.1";
-$LdapBind="ou=postfix,ou=system,dc=pema-sk,dc=sk";
+$LdapBind="ou=postfix,ou=system,dc=example,dc=com";
 $LdapPass="postfixPass";
-$LdapAdmin="cn=Erik Bosak,ou=system,dc=pema-sk,dc=sk";
+$LdapAdmin="cn=John Boss,ou=system,dc=example,dc=com";
 $filter="(|(AccountStatus=active)(AccountStatus=shared))";
-$netBase="ou=vmail,ou=internet,dc=pema-sk,dc=sk";
+$netBase="ou=vmail,ou=internet,dc=example,dc=com";
 ?>
diff --git a/web/usr/share/ldapVmail/help.html b/web/usr/share/ldapVmail/help.html
new file mode 100644 (file)
index 0000000..5612e21
--- /dev/null
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
+<title>ldapVmail</title>
+</head>
+<body>
+<h1>Zakladne informacie:</h1>
+Postovy system je tvoreny z niekolkych sluzieb, ktore su zabezpecovane
+samostatnym programovym vybavenim. Jedna sa o nasledujuce casti:<br>
+<h2>POSTFIX</h2>
+Stara sa o prijem posty z internetu a intranetu. Jeho ulohou je pocuvat na
+porte 25 a porte 465. Po pripojeni sa klienta, na niektory z uvedenych
+portov, postfix skontroluje ci prichadzajuca posta moze byt prijata a bud ju
+prijme alebo odmietne. Prijatu postu potom ulozi do mailboxu alebo preposle
+podla poziadaviek prijimatela.
+<h2>COURIER</h2>
+Caka na portoch 110, 143, 993 a 995. Po pripojeni klienta skontroluje login
+a heslo a podla tychto parametrov spristupni pre klienta jeho mailbox, alebo
+pri nespravnom prihlaseni uzivatela odmietne.
+<h2>SQUIRRELMAIL</h2> 
+Samostatna WEB aplikacia, ktora vyuziva COURIER aj POSTFIX tak, ze umoznuje
+pomocou WEB rozhrania odosielat a prezerat postu pre uzivatelov.
+<h2>LDAP</h2>
+Autentifikacny a autorizacny server. Tento udrzuje informacie o postovych
+kontach mailsystemu. U tohoto serveru si POSTFIX aj COURIER overuju, ci
+prijimana posta ma byt prijata, resp. ci sa uzivatel spravne prihlasil pri
+pristupe k svojemu mailboxu.
+<hr>
+<H1>Informacie o mailovom konte</H1>
+<h2>Mailova schranka</h2>
+<p>Je spristupnovana pre uzivatela pomocou <b>loginu</b> a <b>hesla</b>. Kazda
+mailova schranka ma svoju <b>mail adresu</b>.</p>
+
+<p>K mailovej schranke je mozne priradit niekolko dalsich adries, ktore sa
+nazyvaju <b>alias</b>. Nie je mozne mat rovnaky alias alebo mail adresu
+pridelenu pre viacero schranok.</p>
+
+<p>Uzivatel moze od mailsystemu pozadovat, aby posty urcene pre jeho mailovu
+schranku boli presmerovane na inu mail adresu. Mechanizmus ktory toto
+umoznuje sa nazyva <b>forward</b>.</p>
+
+<hr> <H1>Informacie o WEB rozhrani pre prezeranie, pridavanie a zmenu
+vlastnosti mail schranok</H1> 
+
+<h2>Administrator systemu</h2>
+Ma plne prava k vytvaraniu, mazaniu a editovaniu schranok uzivatelov. Na
+prislusnych strankach zadava svoj login s plnym kontextom a prislusne heslo
+k nemu. Je dolezite pristupovat k stranke len cez sifrovane pripojenie t.j.
+protokolom https. 
+
+<H2>Zakladna stranka</h2> 
+
+<p>Zakladna stranka WEB rozhrania obsahuje v hornej casti formular,
+umoznujuci pridat noveho uzivatela. Dole pokracuje zoznam aktualne
+evidovanych mail schranok.  </p>
+
+<h2>Stranka uzivatela</h2>
+
+<p>Tato stranka je rozdelena na niekolko casti. V hornej casti je login a
+mail prisluchajuci chranke, smerom dole pokracuje zoznam aliasov a dalej
+zoznam forwardov pre danu mail schranku. Uplne naspodku je niekolko
+tlacidiel, ktore umoznuju ulozit pozmenene forwards a aliases, zmenit heslo
+uzivatela, zmazat uzivatela pripadne sa vratit na hlavnu stranku.</p>
+
+<h2>Ovladanie hlavnej stranky</h2>
+
+<p>Pridavanie uzivatela sa realizuje zadanim emailu do textoveho pola v
+hornej casti stranky a po stlaceni tlacidla na pridanie, pokracujete v
+nasledujucej stranke autorizacie  (ci mozete pridavat uzivatelov) a
+nasledne po pridani uzivatela pokracujete na stranke uzivatela, t.j. mozete
+doplnit alias, forward, zmenit heslo alebo uzivatela hned zmazat.</p>
+
+<p>V spodnej casti je zoznam aktualnych stranok, obsahuje 3 stlpce, v prvom
+je nazov schranky v druhom zoznam adries (hlavnej aj aliasov) k schranke a v
+tretom je pole, kam sa ma obsah schranky preposielat, t.j. zoznam forwardov. V
+pripade, ze je forwardov alebo aliasov viacej, je mozne si ich prezerat
+"roletkou" v danom poli. Uzivatela je mozne vybrat pre editaciu kliknutim na
+meno schranky v prvom stlpci tabulky.<p>
+
+<h2>Stranka autorizacie</h2>
+
+<p>Akcie chranene heslom (zmena hesla, mazanie uzivatela, pridavanie
+uzivatela a editovanie aliasov a forwardov) ziadaju autorizaciu
+administratora. Jedna sa stale o stranku, ktora v hornej casti oznamuje
+informacie o ktoru schranku sa jedna a v spodnej casti je identifikacia
+administratora a jeho heslo. Identifikacia administratora je predvyplnena. 
+Po zadani hesla nasledujuca stranka oznamuje aka akcia  bola prevedena a
+informuje o pripadnej chybe pri prevedeni akcie.  
+
+<h2>Ovladanie stranky uzivatela</h2>
+
+<p>Pridanie aliasu alebo forwardu realizujete zapisom do volneho textoveho
+pola a stlacenim prislusneho tlacidla na pridanie, resp. odobratie forwardu
+alebo aliasu realizujete kliknutim na prislusne tlacidla vedla mazaneho
+aliasu/forwardu. Zmeny takto prevedene, sa aktivuju az po stlaceni tlacitka
+pre ulozenie zmien v dolnej casti stranky. Dalej je mozne tlacidlami v
+spodnej casti stranky vyziadat zmenu hesla uzivatela alebo zmazanie
+uzivatela. Vsetky operacie su chranene heslom a su pristupne len pre
+administratora systemu.<p> 
+
+</body>
+</html>
similarity index 89%
rename from web/usr/share/ldapVmail/admin.php
rename to web/usr/share/ldapVmail/index.php
index 63d939ce5a2a3b576b32d2f02dfb6f0153eb85a3..38ec26beb36c60472358fadcfca89a758ffcac9a 100644 (file)
@@ -58,7 +58,7 @@ printf("<p>Changing password for pop3/imap user <b>%s</b>:</p>",$uid);
 <tr><td>New user password: </td><td><input type="password" name="new1passwd"></td></tr>
 <tr><td>Retype user password: </td><td><input type="password" name="new2passwd"></td></tr>
 <tr><td colspan="2">&nbsp;
-<tr><td>Admin name: </td><td><input name="admin" value="ssss"></td></tr>
+<tr><td>Admin name: </td><td><input name="admin" value="<?echo $LdapAdmin ?>"></td></tr>
 <tr><td>Admin password: </td><td><input type="password" name="adminpasswd"></td></tr>
 <td></tr>
 </table>
@@ -99,6 +99,12 @@ else {
 
 if($action=="browse")
 {        
+printf("<form method=\"post\" action=\"k.php\">");
+printf("<input type=\"hidden\" name=\"running\" value=\"%s\">","ADDnew");
+printf("<input type=\"submit\" value=\"ADD new mail\"> ");
+printf("<input type=\"text\" value=\"\" name=\"uid\">");
+printf("</form><hr>");
+
 $sr=ldap_search($ds,$netBase,$filter);
 if ($sr!=NULL) {
 ldap_sort ($ds, $sr, "uid" );
@@ -116,10 +122,10 @@ $dcolor[3]="red";
 
 for($spolu=$index=0;$index<$info["count"];$index++)
         {
-        printf("<tr><td bgcolor=\"%s\"><a href=\"%s?action=edit&uid=%s\">%s</a></td>",
+        printf("<tr><td bgcolor=\"%s\"><a href=\"k.php?&uid=%s\">%s</a></td>",
         $dcolor[$index % 2 ],
-        $_SERVER["PHP_SELF"],
-        $info[$index]["uid"][0],
+//        $_SERVER["PHP_SELF"], 
+       $info[$index]["uid"][0],
         $info[$index]["uid"][0]);
         if (0==$info[$index]["mailalternateaddress"]["count"])
           printf("<td bgcolor=\"%s\" align=right>%s</td>",
diff --git a/web/usr/share/ldapVmail/k.php b/web/usr/share/ldapVmail/k.php
new file mode 100644 (file)
index 0000000..307aadc
--- /dev/null
@@ -0,0 +1,490 @@
+<?
+
+function putHiddenVariables ($runtype)
+{
+global $dn,$uid,$mail,$alias,$forward;
+
+printf("<input type=\"hidden\" name=\"dn\" value=\"%s\">",base64_encode($dn));
+printf("<input type=\"hidden\" name=\"running\" value=\"%s\">",$runtype);
+printf("<input type=\"hidden\" name=\"uid\" value=\"%s\">\n",base64_encode($uid));
+printf("<input type=\"hidden\" name=\"mail\" value=\"%s\">\n",base64_encode($mail));
+ for($j=0;strlen($alias[$j])>0;$j++){
+  printf("<input type=\"hidden\" name=\"alias[%s]\" value=\"%s\">\n",$j,base64_encode($alias[$j]));
+ }
+ for($j=0;strlen($forward[$j])>0;$j++){
+  printf("<input type=\"hidden\" name=\"forward[%s]\" value=\"%s\">\n",$j,base64_encode($forward[$j]));
+ }
+}
+
+function putEditForm ($warningMessage)
+{
+global $dn,$uid,$mail,$alias,$forward;
+printf("<html>");
+//-------------------------------------------
+ printf("Login: <b>%s</b><hr>Mail: %s<br><hr>Aliases:<br>\n",htmlspecialchars($uid),htmlspecialchars($mail));
+ $alias1=$alias;
+ //remove alias if match primary mail
+ foreach($alias1 as $i=>$value1){
+   if($alias1[$i]==$mail){
+    printf("<b>Upozornenie, nasiel sa alias zhodny s primarnym mailom, pouzite SAVE na ulozenie zmien</b><br>");
+    unset($alias1[$i]);
+   }   
+   //remove duplicate aliases
+   foreach($alias1 as $jx=>$value2){
+    if(($j != $i) && ($alias1[$j]==$alias1[$i])){
+      printf("<b>Upozornenie, nasiel sa duplicitny alias, pouzite SAVE na ulozenie zmien</b><br>");
+
+      unset($alias1[$j]);
+    }
+   }
+ }
+ $alias=$alias1;
+ foreach($alias as $i => $value1){
+  if(strlen($alias[$i])>0){
+   printf("<form method=\"post\" name=\"%s\">",base64_encode($alias[$i]));
+   putHiddenVariables("EDITform");;
+   printf("<input type=\"hidden\" name=\"zmazA\" value=\"%s\">\n",base64_encode($alias[$i]));
+   printf("<input type=\"submit\" value=\"Delete\"> %s<br>",htmlspecialchars($alias[$i]));
+   printf("</form>\n\n");
+  }
+ }
+ //-------------------------------------------------
+ printf("<form method=\"post\" name=\"newalias\">");
+ putHiddenVariables("EDITform");;
+ printf("<input type=\"submit\"  value=\"Add alias\">"); 
+ printf("<input type=\"text\" value=\"\" name=\"aliasN\">");
+ printf("</form><hr>Forwards:<br>\n"); 
+ //-------------------------------------------------
+ $fcount=0;
+ $selfForward=0;
+ $forward1=$forward;
+ foreach($forward1 as $i => $value1){
+    //remove duplicate forwards
+    foreach($forward1 as $j => $value2){
+      if(($j != $i) && ($forward1[$j]==$forward1[$i])){
+        printf("<b>Upozornenie, nasiel sa duplicitny forward, pouzite SAVE na ulozenie zmien</b><br>");
+        unset($forward1[$j]);
+      }
+      else
+        $fcount++;
+    }
+    //if mail is forwarded to my alias .. change forward to primary mail
+    foreach($alias as $j => $value2){
+      if($alias[$j]==$forward1[$i]){
+        printf("<b>Upozornenie, nasiel sa forward na alias, bude zmeneny na primarny mail, pouzite SAVE na ulozenie zmien</b><br>");
+        $forward1[$i]=$mail;
+      }
+    }
+    if($forward1[$i]==$mail)
+       $selfForward=1;
+
+ }
+ if($fcount==1 && $selfForward==1){
+   printf("<b>Upozornenie, nepotrebny forward, pouzite SAVE na ulozenie zmien</b><br>");
+   foreach($forward1 as $i => $value1){
+     unset($forward1[$i]);
+   }
+   $selfForward=0;
+   $fcount=0;
+ }
+ $forward=$forward1;
+ if($selfForward==0) {
+    printf("<form method=\"post\" name=\"%s_selfForward\">",base64_encode($forward[$i]));
+    printf("<input type=\"button\" value=\"Vypnut\" style=\"color:gray\" name=\"selfForward\">\n");
+    printf("<input type=\"submit\" value=\"Zapnut\"  name=\"selfForward\">\n");
+    putHiddenVariables("EDITform");
+    printf("Aktualny stav: mail neostava v lokalnom mailboxe<br>");
+ }
+ else {
+    printf("<form method=\"post\" name=\"%s_selfForward\">",base64_encode($forward[$i]));
+    printf("<input type=\"submit\" value=\"Vypnut\"  name=\"selfForward\">\n");
+    printf("<input type=\"button\" value=\"Zapnut\" style=\"color:gray\" name=\"selfForward\">\n");
+    putHiddenVariables("EDITform");
+    printf("Aktualny stav: mail ostava v lokalnom mailboxe<br>");
+ }
+ foreach($forward as $i => $value1) {
+    if($forward[$i]!=$mail){
+      printf("<form method=\"post\" name=\"%s\">",base64_encode($forward[$i]));
+      putHiddenVariables("EDITform");
+      printf("<input type=\"hidden\" name=\"zmazF\" value=\"%s\">\n",base64_encode($forward[$i]));
+      printf("<input type=\"submit\" value=\"Delete\"> %s<br>",strip_tags($forward[$i]));
+      printf("</form>\n\n"); 
+    }
+ }
+ //-------------------------------------------------
+ printf("<form method=\"post\" name=\"newforward\">");
+ putHiddenVariables("EDITform");;
+ printf("<input type=\"submit\"  value=\"Add forward\">"); 
+ printf("<input type=\"text\" value=\"\" name=\"forwardN\">");
+ printf("</form><hr>\n"); 
+ //-------------------------------------------------
+ if(strlen($warningMessage)>0)
+   printf("%s<hr>",$warningMessage);
+ //-------------------------------------------------
+ printf("<table><tr><td>"); 
+ printf("<form method=\"post\" name=\"ULOZ\">");
+ putHiddenVariables("SAVE");
+ printf("<input type=\"submit\" value=\"SAVE to LDAP\">");
+ printf("</form></td><td>");
+ printf("<form method=\"post\" name=\"ULOZ\">");
+ putHiddenVariables("PASS");
+ printf("<input type=\"submit\" value=\"PASSWORD\">");
+ printf("</form></td><td>");
+ printf("<form method=\"post\" name=\"ULOZ\">");
+ putHiddenVariables("DEL");
+ printf("<input type=\"submit\" value=\"DELETE user\">");
+ printf("</form></td><td>");
+ printf("<form method=\"post\" action=\"index.php\">");
+ printf("<input type=\"submit\" value=\"BROWSE\">");
+ printf("</form></td></tr></table>");
+ printf("</html>");
+}
+
+function  putAdminPassInput($LdapAdmin,$submitString)
+{
+ printf("<table>\n");
+ printf("<tr><td>Admin name:</td>");
+ printf("<td><input type=\"text\" name=\"admin\" value=\"%s\"></td></tr>\n",strip_tags($LdapAdmin));
+ printf("<tr><td>Admin password: </td>");
+ printf("<td><input type=\"password\" name=\"adminpasswd\"></td></tr></table><hr>\n");
+ printf("<input type=\"submit\" name=\"changepassword\" value=\"%s\">",strip_tags($submitString));
+}
+
+function continueForm1 ($warningMessage)
+{
+printf("<html>%s<form method=\"post\" name=\"XX1a\">",$warningMessage);
+putHiddenVariables ("EDITform");
+printf("<input type=\"submit\" name=\"XX1\" value=\"Continue\">");
+printf("</form></html>");
+}
+
+function browseForm ($warningMessage)
+{
+printf("<html>%s<form action=\"index.php\" method=\"post\" name=\"XX2a\">",$warningMessage);
+putHiddenVariables ("BROWSEform");
+printf("<input type=\"submit\" name=\"XX2\" value=\"Continue\">");
+printf("</form></html>");
+}
+
+function getValuesFromForm ()
+{
+global $dn,$uid,$mail,$alias,$forward;
+ $dn=base64_decode($_POST["dn"]);
+ $uid=base64_decode($_POST["uid"]);
+ $mail=base64_decode($_POST["mail"]); 
+}
+function getAllValuesFromForm ()
+{
+global $dn,$uid,$mail,$alias,$forward;
+ getValuesFromForm ();
+ for($j=0,$i=0;strlen(base64_decode($_POST["alias"][$i]))>0;$i++)
+   $alias[$j++]=base64_decode($_POST["alias"][$i]);
+ for($j=0,$i=0;strlen(base64_decode($_POST["forward"][$i]))>0;$i++)
+   $forward[$j++]=base64_decode($_POST["forward"][$i]);
+}
+/*
+echo "<pre>";
+print_r ($_POST);
+echo "</pre><hr>";
+*/
+
+global $dn,$uid,$mail,$alias,$forward;
+
+require("config.php");
+$ds=@ldap_connect($LdapHost);
+if($ds==FALSE)
+ {
+ printf("<html>INIT: Ldap server connect error</html>");
+ exit(0);
+ }
+$r=@ldap_bind($ds,$LdapBind,$LdapPass);
+if($r==FALSE)
+ {
+ printf("<html>Ldap server bind error</html>");
+ exit(0);
+ }
+
+switch($_POST["running"]) {
+case "ADDnew" :
+ $uid=$_POST["uid"];
+ if(strlen($uid)>0) {
+  printf("<html>Novy uzivatel <b>%s</b>:<hr>",strip_tags($uid));
+  printf("<table><form method=\"post\" name=\"addnew\">\n");
+  putHiddenVariables ("ADDgo");
+  putAdminPassInput($LdapAdmin,"SAVE");
+  printf("</html>");
+ }
+ else {
+  browseForm ("Novy uzivatel bol chybne zadany");
+ } 
+ break;
+
+case "ADDgo":               
+ getAllValuesFromForm ();
+ @ldap_close($ds); //rebind
+ $ds=@ldap_connect($LdapHost);
+ if($ds==FALSE){
+  continueForm1("SAVE user: Ldap server connect error");
+  break;
+ }
+ $r=@ldap_bind($ds,$_POST['admin'],$_POST['adminpasswd']);
+ if ($r==FALSE) {
+  continueForm1("Bad admin password\n");
+  break;
+ }
+ unset ($entree);
+ $entree["objectClass"][0]="top";
+ $entree["objectClass"][1]="person";
+ $entree["objectClass"][2]="organizationalPerson";
+ $entree["objectClass"][3]="inetOrgPerson";
+ $entree["objectClass"][4]="qmailUser";
+ $entree["mail"]=$uid;
+ $entree["uid"]=$uid;
+ $entree["cn"]=$uid;
+ $entree["sn"]=$uid;
+ $entree["givenname"]=$uid;
+ $entree["userpassword"]=$uid;
+ $entree["accountstatus"]="active";
+ $entree["mailmessagestore"]="/home/vmail/".$uid."/Maildir/";
+ $dn="uid=".$uid.",".$netBase ;
+ $r=@ldap_add($ds, $dn, $entree);
+ $mail=$uid;
+ if ($r==FALSE) 
+   continueForm1(sprintf("Nie je mozne upravit data  uzivatela <b>%s</b>",strip_tags($uid)));
+ else 
+   continueForm1(sprintf("uzivatel <b>%s</b> zavedeny",strip_tags($uid)));
+ break;
+
+
+//run from edited editform
+case "EDITform" :
+ getValuesFromForm ();
+ for($j=0,$i=0;strlen(base64_decode($_POST["alias"][$i]))>0;$i++)
+   if($_POST["zmazA"]!=$_POST["alias"][$i])
+    $alias[$j++]=base64_decode($_POST["alias"][$i]);
+ if(strlen($_POST["aliasN"])>0) {
+    $aliasN=stripslashes($_POST["aliasN"]);
+    $filterx="(|(mail=".$aliasN.")(mailalternateaddress=".$aliasN."))";
+    $sr=@ldap_search($ds,$netBase,$filterx);
+    if ($sr!=NULL) {
+     $info = @ldap_get_entries($ds, $sr);
+     if($info["count"]==0)
+      $alias[$j++]=$aliasN;
+     else
+      $warningMessage=sprintf("Pridavany alias <b>%s</b> uz pouziva iny uzivatel!<br>\n",strip_tags($aliasN));  
+    }
+    else
+      $warningMessage=sprintf("Ldapsearch error, pridavany alias moze byt pouzivany");
+  }
+ for($j=0,$i=0;strlen(base64_decode($_POST["forward"][$i]))>0;$i++)
+   if($_POST["zmazF"]!=$_POST["forward"][$i])
+    $forward[$j++]=base64_decode($_POST["forward"][$i]);
+ if(strlen($_POST["forwardN"])>0)
+    $forward[$j++]=stripslashes($_POST["forwardN"]);
+
+ if(strlen($_POST["selfForward"])>0)
+  {
+  getAllValuesFromForm ();
+  if(in_array($mail,$forward))
+    unset($forward[array_search($mail, $forward)]);
+  else
+    array_push($forward, $mail);
+  }   
+ putEditForm($warningMessage);
+ break;
+
+//Add to ldap
+case "SAVE": 
+ getAllValuesFromForm ();
+ printf("<html>Uzivatel <b>%s</b> zmena udajov:<hr>",strip_tags($uid));
+ printf("<table><form method=\"post\" name=\"save\">\n");
+ putHiddenVariables ("SAVEgo");
+ putAdminPassInput($LdapAdmin,"SAVE");
+ printf("</html>");
+ break;
+
+case "SAVEgo":               
+ getAllValuesFromForm ();
+ @ldap_close($ds); //rebind
+ $ds=@ldap_connect($LdapHost);
+ if($ds==FALSE){
+  continueForm1("SAVE user: Ldap server connect error");
+  break;
+ }
+ $r=@ldap_bind($ds,$_POST['admin'],$_POST['adminpasswd']);
+ if ($r==FALSE) {
+  continueForm1("Bad admin password\n");
+  break;
+ }
+
+ unset ($entree);
+ for($j=0;strlen($forward[$j])>0;$j++)
+  $entree["mailforwardingaddress"][$j] = $forward[$j]; 
+ if($j==0) {//workaround
+  $entree["mailforwardingaddress"]=$mail; 
+  $r=@ldap_mod_replace($ds, $dn, $entree);
+  if($r==FALSE){
+   continueForm1(sprintf("Nie je mozne upravit data  uzivatela <b>%s</b>",strip_tags($uid)));
+   break;
+  }
+  $entree["mailforwardingaddress"]=$mail; 
+  $r=ldap_mod_del($ds, $dn, $entree);
+  if($r==FALSE){
+   continueForm1(sprintf("Nie je mozne upravit data  uzivatela <b>%s</b>",strip_tags($uid)));
+   break;
+  }
+ }
+ else {
+   $r=ldap_mod_replace($ds, $dn, $entree);
+   if($r==FALSE){
+     continueForm1(sprintf("Nie je mozne upravit data  uzivatela <b>%s</b>",strip_tags($uid)));
+     break;
+   }
+ }  
+ unset ($entree);
+ for($j=0;strlen($alias[$j])>0;$j++)
+  $entree["mailalternateaddress"][$j] = $alias[$j]; 
+ if($j==0) {//workaround
+  $entree["mailalternateaddress"]=$mail; 
+  $r=ldap_mod_replace($ds, $dn, $entree);
+  if($r==FALSE){
+    continueForm1(sprintf("Nie je mozne upravit data uzivatela <b>%s</b>",strip_tags($uid)));
+    break;
+  }
+  $entree["mailalternateaddress"]=$mail; 
+  $r=ldap_mod_del($ds, $dn, $entree);
+  if($r==FALSE){
+    continueForm1(sprintf("Nie je mozne upravit data uzivatela <b>%s</b>",strip_tags($uid)));
+    break;
+  }
+ }
+ else {
+   $r=ldap_mod_replace($ds, $dn, $entree);
+   if($r==FALSE){
+     continueForm1(sprintf("Nie je mozne upravit data uzivatela <b>%s</b>",strip_tags($uid)));
+     break;
+   }
+ }  
+ continueForm1(sprintf("data uzivatela <b>%s</b> su upravene",strip_tags($uid)));
+ break;
+
+//password change button was pressed
+case "PASS": 
+ $userpassword=0; //now only admin is approved to change passwords
+ getAllValuesFromForm ();
+ $sr=@ldap_search($ds,$dn,$filter);
+ if ($sr==NULL) {
+   $warningMessage=sprintf("Ldapsearch error, neviem najst uzivatela pre zmenu hesla");
+   putEditForm($warningMessage);
+   exit(0);
+   }
+ $info = @ldap_get_entries($ds, $sr);
+ if($info["count"]!=1) {
+   $warningMessage=sprintf("Ldapsearch error, neviem najst uzivatela pre zmenu hesla");
+   putEditForm($warningMessage);
+   exit(0);
+   }
+ $uid=$info[0]["uid"][0];
+ printf("<html>Changing password for pop3/imap user <b>%s</b><hr>",strip_tags($uid));
+ printf("<table><form method=\"post\" name=\"pass\">\n");
+ printf("<tr><td>New user password: </td>");
+ printf("<td><input type=\"password\" name=\"new1passwd\"></td></tr>\n");
+ printf("<tr><td>Retype user password: </td>");
+ printf("<td><input type=\"password\" name=\"new2passwd\"></td></tr></table><hr>\n");
+ if($userpassword==0)
+  putAdminPassInput($LdapAdmin,"Change password");
+ else
+  putAdminPassInput($uid,"Change password");
+ putHiddenVariables ("PASSgo");
+ printf("</html>");
+ break;
+
+
+//new password update
+case "PASSgo":
+ getAllValuesFromForm ();
+ if(strlen($_POST['new1passwd'])<8 ) {
+  continueForm1("Prilis kratke heslo, ma mat aspon 8 znakov\n");
+  break;
+ }
+ if($_POST['new1passwd'] != $_POST['new2passwd']) {
+  continueForm1("Nove hesla uzivatela sa nezhoduju\n");
+  break;
+ }
+ @ldap_close($ds); //rebind
+ $ds=@ldap_connect($LdapHost);
+ if($ds==FALSE){
+  continueForm1("Password change: Ldap server connect error");
+  break;
+ }
+ $r=@ldap_bind($ds,$_POST['admin'],$_POST['adminpasswd']);
+ if ($r==FALSE) {
+  continueForm1("Bad admin password\n");
+  break;
+ }
+ $CRYPT_MD5=1; //create a md5 password
+ $infoNew["userpassword"]="{crypt}".crypt($_POST['new1passwd']);
+ $r2=@ldap_mod_replace($ds, $dn, $infoNew);
+ if($r2==FALSE){
+  continueForm1(sprintf("Nebolo mozne zmenit heslo<br>Server oznamil: [%s]\n",strip_tags($ldap_error($ds))));
+  break;
+ }
+ continueForm1(sprintf("Heslo pre uzivatela %s bolo uspesne zmenene",strip_tags($uid)));
+ break;
+
+case "DEL": 
+ getAllValuesFromForm ();
+ printf("<html>Delete user <b>%s</b> mail: %s ? ",strip_tags($uid),strip_tags($mail));
+ printf("<table><form method=\"post\" name=\"del\">\n");
+ putHiddenVariables ("DELgo");
+ putAdminPassInput($LdapAdmin,"Delete user");
+ printf("</html>");
+ break;
+
+case "DELgo":
+ getAllValuesFromForm ();
+ @ldap_close($ds); //rebind
+ $ds=@ldap_connect($LdapHost);
+ if($ds==FALSE){
+  continueForm1("DEL user: Ldap server connect error");
+  break;
+ }
+ $r=@ldap_bind($ds,$_POST['admin'],$_POST['adminpasswd']);
+ if ($r==FALSE) {
+  continueForm1("Bad admin password\n");
+  break;
+ }
+ $r2=@ldap_delete($ds, $dn);
+ if($r2==FALSE){
+  continueForm1(sprintf("Nie je mozne  zmazat uzivatela <b>%s</b>",strip_tags($uid)));
+  break;
+ }
+ browseForm(sprintf("Uzivatel %s bol zmazany",strip_tags($uid)));
+ break;
+
+//first run
+default:
+ $uid=$_GET["uid"];
+ $sr=@ldap_search($ds,$netBase,"uid=".$uid);
+ if ($sr==NULL) {
+   printf("<html>ldapsearch error</html>\n");
+   exit(0);
+  } 
+ @ldap_sort ($ds, $sr, "uid" );
+ $info = @ldap_get_entries($ds, $sr);
+ if($info["count"]!=1) {
+  printf("<html>Multiple uid selections !, database integrity error or bad query! %d</html>\n",$info["count"]);
+  exit(0);
+ }
+ $mail=$info[0]["mail"][0];
+ $dn=$info[0]["dn"];
+ for($i=0;$i<$info[0]["mailalternateaddress"]["count"];$i++)
+    $alias[$i]=$info[0]["mailalternateaddress"][$i];      
+ for($i=0;$i<$info[0]["mailforwardingaddress"]["count"];$i++)
+    $forward[$i]=$info[0]["mailforwardingaddress"][$i];
+ putEditForm("");
+ break;
+} //switch
+@ldap_close($ds);
+?>