Code

Updated sieve filter styles.
[gosa.git] / include / functions_setup.inc
index 0b60276398880edf4a9b4f6bc33828aaeaa7f08e..7d41ffd9586ea098f34505e041639ae356a5199a 100644 (file)
@@ -30,33 +30,18 @@ function view_schema_check($table)
 }
 
 
-function is_schema_readable($server, $admin, $password)
+function is_schema_readable($server, $admin, $password, $follow_referrals=FALSE, $tls=FALSE)
 {
-  $ds= ldap_connect ($server);
-  if (!$ds) {
-    return (false);
-  }
-  ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
-  $r= ldap_bind ($ds, $admin, $password);
-
-  /* Get base to look for schema */
-  $sr  = @ldap_read ($ds, "", "objectClass=*", array("subschemaSubentry"));
-  $attr= @ldap_get_entries($ds,$sr);
-  if (!isset($attr[0]['subschemasubentry'][0])){
-    return (false);
-  }
+  $ldap = new LDAP($admin, $password, $server, $follow_referrals, $tls);
+  $tmp = $ldap->get_objectclasses();
 
-  $nb= $attr[0]['subschemasubentry'][0];
-  $objectclasses= array();
-  $sr= ldap_read ($ds, $nb, "objectClass=*", array("objectclasses"));
-  $attrs= ldap_get_entries($ds,$sr);
-  if (!isset($attrs[0])){
-    return (false);
+  if(count($tmp)){
+    return(true);
   }
-  return(true);
+  return(false);
 } 
 
-function schema_check($server, $admin, $password, $aff=0,$CalledByIndexPhP=false)
+function schema_check($server, $admin, $password, $follow_referrals=FALSE, $tls=FALSE, $aff=0, $CalledByIndexPhP=false)
 {
   global $config;
 
@@ -78,11 +63,11 @@ function schema_check($server, $admin, $password, $aff=0,$CalledByIndexPhP=false
       "gosaApplication"       => array("version" => "2.4", "class" => "appgroup","file" => "gosa.schema"),
       "gosaApplicationGroup"  => array("version" => "2.4", "class" => "appgroup","file" => "gosa.schema"),
 
-      "GOhard"                => array("version" => "2.4", "class" => "terminals","file" => "goto.schema"),
-      "gotoTerminal"          => array("version" => "2.0", "class" => "terminals","file" => "goto.schema"),
+      "GOhard"                => array("version" => "2.5", "class" => "terminals","file" => "goto.schema"),
+      "gotoTerminal"          => array("version" => "2.5", "class" => "terminals","file" => "goto.schema"),
       "goServer"              => array("version" => "2.4","class" => "server","file" => "goserver.schema"),
       "goTerminalServer"      => array("version" => "2.4", "class" => "terminals","file" => "goto.schema"),
-      "goNfsServer"           => array("version" => "2.4", "class" => "terminals","file" => "goto.schema"),
+      "goShareServer"           => array("version" => "2.4", "class" => "terminals","file" => "goto.schema"),
       "goNtpServer"           => array("version" => "2.4", "class" => "terminals","file" => "goto.schema"),
       "goSyslogServer"        => array("version" => "2.4", "class" => "terminals","file" => "goto.schema"),
       "goLdapServer"          => array("version" => "2.4"),
@@ -92,35 +77,13 @@ function schema_check($server, $admin, $password, $aff=0,$CalledByIndexPhP=false
       "goFaxServer"           => array("version" => "2.4", "class" => "gofaxAccount","file" => "gofax.schema"),
       );
 
-  /* Build LDAP connection */
-  $ds= ldap_connect ($server);
-  if (!$ds) {
-    return (array(array("msg" => _("Can't bind to LDAP. No schema check possible!"), "status" => FALSE)));
-  }
-  ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
-  $r= ldap_bind ($ds, $admin, $password);
-
-  /* Get base to look for schema */
-  $sr  = @ldap_read ($ds, "", "objectClass=*", array("subschemaSubentry"));
-  $attr= @ldap_get_entries($ds,$sr);
-  if (!isset($attr[0]['subschemasubentry'][0])){
+  /* Get objectclasses */
+  $ldap = new LDAP($admin,$password, $server, $follow_referrals, $tls);
+  $objectclasses = $ldap->get_objectclasses(); 
+  if(count($objectclasses) == 0){
     return (array(array("msg" => _("Can't get schema information from server. No schema check possible!"), "status" => FALSE)));
   }
 
-  /* Get list of objectclasses */
-  $nb= $attr[0]['subschemasubentry'][0];
-  $objectclasses= array();
-  $sr= ldap_read ($ds, $nb, "objectClass=*", array("objectclasses"));
-  $attrs= ldap_get_entries($ds,$sr);
-  if (!isset($attrs[0])){
-    return (array(array("msg" => _("Can't get schema information from server. No schema check possible!"), "status" => FALSE)));
-  }
-  foreach ($attrs[0]['objectclasses'] as $val){
-    $name= preg_replace("/^.* NAME\s+\(*\s*'([^']+)'\s*\)*.*$/", '\\1', $val);
-    if ($name != $val){
-      $objectclasses[$name]= $val;
-    }
-  }
   /* Walk through objectclasses and check if they are needed or not */
   foreach ($required_classes as $key => $value){
     if (isset($value['class'])){
@@ -216,6 +179,16 @@ function schema_check($server, $admin, $password, $aff=0,$CalledByIndexPhP=false
     $affich['phpgroupware']['msg']= _("Support for phpgroupware enabled")."<td class=\"check\">phpgwaccount.schema</td>";
     $affich['phpgroupware']['status']= TRUE;
   }
+  
+  if (!isset($objectclasses['trustAccount'])){
+    $messages['trustAccount']['msg']= _("Support for trustAccount disabled, no schema seems to be installed");
+    $affich['trustAccount']['msg']= $messages['trustAccount']['msg']."<td class=\"check\">trust.schema</td>";
+    $messages['trustAccount']['status']= FALSE;
+    $affich['trustAccount']['status']= FALSE;
+  }else{
+    $affich['trustAccount']['msg']= _("Support for trustAccount enabled")."<td class=\"check\">trust.schema</td>";
+    $affich['trustAccount']['status']= TRUE;
+  }
 
   if (!isset($objectclasses['goFonAccount'])){
     $messages['phoneaccount']['msg']= _("Support for gofon disabled, no schema seems to be installed");
@@ -227,19 +200,43 @@ function schema_check($server, $admin, $password, $aff=0,$CalledByIndexPhP=false
     $affich['phoneaccount']['status']= true;
   }
 
-  if(($_SESSION['ldapconf']['mail_methods'][$_SESSION['ldapconf']['mail']] == "kolab")&&(!$CalledByIndexPhP)){
-    if(!isset($objectclasses['kolabInetOrgPerson']))  {
-      $messages['kolab']['msg']= _("Support for Kolab disabled, no schema seems to be installed, setting mail-method to cyrus");
-      $affich['kolab']['msg']=$messages['kolab']['msg']."<td class=\"check\">kolab2.schema</td>";
-
-      $tmp= array_flip($_SESSION['ldapconf']['mail_methods']);
-      $_SESSION['ldapconf']['mail']=$tmp['cyrus'];
-      $messages['kolab']['status']= FALSE;
-      $affich['kolab']['status']= FALSE;
-    }else{
-      $affich['kolab']['msg']=_("Support for Kolab enabled")."<td class=\"check\">gofon.schema</td>";
-      $affich['kolab']['status']= TRUE;
-    }
+  if (!isset($objectclasses['nagiosContact'])){
+    $messages['nagioscontact']['msg']= _("Support for nagios disabled, no schema seems to be installed");
+    $affich['nagioscontact']['msg']= $messages['nagioscontact']['msg']."<td class=\"check\">nagios.schema</td>";
+    $messages['nagioscontact']['status']= FALSE;
+    $affich['nagioscontact']['status']= FALSE;
+  }else{
+    $affich['nagioscontact']['msg']= _("Support for nagios enabled")."<td class=\"check\">nagios.schema</td>";
+    $affich['nagioscontact']['status']= true;
+  }
+  
+  if ((!isset($objectclasses['apple-user'])) || (!isset($objectclasses['mount'])) ){
+    $messages['netatalk']['msg']= _("Support for netatalk disabled, no schema seems to be installed");
+    $affich['netatalk']['msg']= $messages['netatalk']['msg']."<td class=\"check\">apple.schema</td>";
+    $messages['netatalk']['status']= FALSE;
+    $affich['netatalk']['status']= FALSE;
+  }else{
+    $affich['netatalk']['msg']= _("Support for netatalk enabled")."<td class=\"check\">apple.schema</td>";
+    $affich['netatalk']['status']= true;
+  }
+  
+  /* Fix for PHP Fehler "Undefined index: ldapconf"
+   * Ablaufverfolgung[1]: Funktion schema_check        Datei: /home/hickert/gosa/include/functions_setup.inc (Zeile 230)
+   */
+  if((isset($_SESSION['ldapconf']['mail_methods']))&&(isset($_SESSION['ldapconf']))){
+       if(($_SESSION['ldapconf']['mail_methods'][$_SESSION['ldapconf']['mail']] == "kolab")&&(!$CalledByIndexPhP)){
+         if(!isset($objectclasses['kolabInetOrgPerson']))  {
+           $messages['kolab']['msg']= _("Support for Kolab disabled, no schema seems to be installed, setting mail-method to cyrus");
+           $affich['kolab']['msg']=$messages['kolab']['msg']."<td class=\"check\">kolab2.schema</td>";
+           $tmp= array_flip($_SESSION['ldapconf']['mail_methods']);
+           $_SESSION['ldapconf']['mail']=$tmp['cyrus'];
+           $messages['kolab']['status']= FALSE;
+           $affich['kolab']['status']= FALSE;
+         }else{
+           $affich['kolab']['msg']=_("Support for Kolab enabled")."<td class=\"check\">gofon.schema</td>";
+           $affich['kolab']['status']= TRUE;
+         }
+       }
   }
   if($aff==0){
     return ($messages);
@@ -277,6 +274,7 @@ function perform_php_checks(&$faults)
   $msg= "";
 
   $msg.= "<h1>"._("PHP setup inspection")."</h1>";
+
   $msg.= check (       $faults, _("Checking for PHP version (>=4.1.0)"),
       _("PHP must be of version 4.1.0 or above for some functions and known bugs in PHP language."),
       version_compare(phpversion(), "4.1.0")>=0);
@@ -284,55 +282,104 @@ function perform_php_checks(&$faults)
   $msg.= check (       $faults, _("Checking if register_globals is set to 'off'"),
       _("register_globals is a PHP mechanism to register all global varibales to be accessible from scripts without changing the scope. This may be a security risk. GOsa will run in both modes."),
       $check_globals == 0, FALSE);
+  
+  $msg.= check (  $faults, _("PHP session.gc_maxlifetime (>= 86400 seconds)."),
+      _("PHP uses this value for the garbage collector to delete old sessions, setting this value to one day will prevent loosing session and cookie  before they really timeout."),
+      ini_get("session.gc_maxlifetime") >= 86400,FALSE);
 
   $msg.= check (       $faults, _("Checking for ldap module"),
       _("This is the main module used by GOsa and therefore really required."),
-      function_exists('ldap_bind'));
+      is_callable('ldap_bind'));
 
   $msg.= check (  $faults, _("Checking for XML functions"),
       _("XML functions are required to parse the configuration file."),
-      function_exists('xml_parser_create'));
+      is_callable('xml_parser_create'));
 
   $msg.= check (       $faults, _("Checking for gettext support"),
-      _("Gettext support is required for internationalized GOsa."), function_exists('bindtextdomain'));
+      _("Gettext support is required for internationalized GOsa."),
+      is_callable('bindtextdomain'));
 
   $msg.= check (       $faults, _("Checking for iconv support"),
       _("This module is used by GOsa to convert samba munged dial informations and is therefore required."),
-      function_exists('iconv'));
+      is_callable('iconv'));
 
   $msg.= check (       $faults, _("Checking for mhash module"),
       _("To use SSHA encryption, you'll need this module. If you are just using crypt or md5 encryption, ignore this message. GOsa will run without it."),
-      function_exists('mhash'), FALSE);
+      is_callable('mhash'), FALSE);
 
   $msg.= check (       $faults, _("Checking for imap module"),
       _("The IMAP module is needed to communicate with the IMAP server. It gets status informations, creates and deletes mail users."),
-      function_exists('imap_open'));
+      is_callable('imap_open'));
 
   $msg.= check (       $faults, _("Checking for getacl in imap"),
       _("The getacl support is needed for shared folder permissions. The standard IMAP module is not capable of reading acl's. You need a recend PHP version for this feature."),
-      function_exists('imap_getacl'), FALSE);
+      is_callable('imap_getacl'), FALSE);
 
   $msg.= check (       $faults, _("Checking for mysql module"),
       _("MySQL support is needed for reading GOfax reports from databases."),
-      function_exists('mysql_query'), FALSE);
+      is_callable('mysql_query'), FALSE);
 
   $msg.= check (       $faults, _("Checking for cups module"),
       _("In order to read available printers from IPP protocol instead of printcap files, you've to install the CUPS module."),
-      function_exists('cups_get_dest_list'), FALSE);
+      is_callable('cups_get_dest_list'), FALSE);
 
   $msg.= check (       $faults, _("Checking for kadm5 module"),
       _("Managing users in kerberos requires the kadm5 module which is downloadable via PEAR network."),
-      function_exists('kadm5_init_with_password'), FALSE);
+      is_callable('kadm5_init_with_password'), FALSE);
 
   $msg.= check (  $faults, _("Checking for snmp Module"),
       _("Simple Network Management Protocol (SNMP) is required for client monitoring."),
-      function_exists('snmpget'), FALSE);
+      is_callable('snmpget'), FALSE);
+
   return ($msg);
 }
 
+function get_link($function_name) {
+  $result= "<a href='http://de.php.net/manual/en/function.";
+
+  /* Replace all underscores with hyphens (phpdoc convention) */
+  /* hjb: added alternative check for GraphicsMagick >= 1.1.2 */
+  $function_name= str_replace("_", "-", $function_name);
+
+  /* Append to base URL */
+  $result.= $function_name.".php'>$function_name</a>";
+
+  return $result;
+}
+
+function perform_additional_function_checks(&$faults) {
+  global $check_globals;
+
+  $faults= 0;
+  $msg= "";
+  $functions= array();
+  
+  $functions_list= '../include/functions_list.inc';
+
+  /* Make sure that we can read the file */
+  if(is_readable($functions_list)) {
+    /* Open filehandle */
+    $fh= fopen($functions_list,'rb');
+    if($fh!=null) {
+      $functions= eval(fread($fh,filesize($functions_list)));
+    }
+  }
+
+  $msg.= "<h1>"._("PHP detailed function inspection")."</h1>";
+  /* Only print message, if function is not callable */
+  foreach($functions as $key => $fn_name) {
+    if(!is_callable($fn_name)) {
+      $msg.= check ($faults, sprintf(_("Checking for function %s"), "<b>".get_link($fn_name)."</b>"),
+        sprintf(_("The function %s is used by GOsa. There is no information if it's optional or required yet."), "<b>".get_link($fn_name)."</b>"),
+        is_callable($fn_name), false);
+    }
+  }
+  return $msg;
+}
 
 function perform_additional_checks(&$faults)
 {
+  $ret = NULL;
   /* Programm check */
   $msg= "<h1>"._("Checking for some additional programms")."</h1>";
 
@@ -341,11 +388,18 @@ function perform_additional_checks(&$faults)
   $output= shell_exec ($query);
   if ($output != ""){
     $lines= split ("\n", $output);
-    $version= preg_replace ("/^Version:.+Magick ([^\s]+).*/", "\\1", $lines[0]);
-    list($major, $minor)= split("\.", $version);
-    $msg.= check (     $faults, _("Checking for ImageMagick (>=5.4.0)"),
-        _("ImageMagick is used to convert user supplied images to fit the suggested size and the unified JPEG format."),
-        ($major > 5 || ($major == 5 && $minor >= 4)));
+    $version= preg_replace ("/^Version: (.+Magick) ([^\s]+).*/", "\\1 \\2", $lines[0]);
+    list($prog, $version) = split(" ", $version);
+    list($major, $minor,$minor2)= split("\.", $version);
+    if (preg_match('/GraphicsMagick/', $prog)) {
+      $msg.= check (   $faults, _("Checking for GraphicsMagick (>=1.1.2)"),
+          _("GraphicsMagick is used to convert user supplied images to fit the suggested size and the unified JPEG format."),
+          ($major > 1 || ($major == 1 && $minor >= 1) || ($major == 1 && $minor == 1 && $minor2 >= 2) ) );
+    } else {
+      $msg.= check (   $faults, _("Checking for ImageMagick (>=5.4.0)"),
+          _("ImageMagick is used to convert user supplied images to fit the suggested size and the unified JPEG format."),
+          ($major > 5 || ($major == 5 && $minor >= 4)));
+        }
   } else {
     $msg.= check (     $faults, _("Checking imagick module for PHP"),
         _("Imagick is used to convert user supplied images to fit the suggested size and the unified JPEG format from PHP script."), function_exists('imagick_blob2image'), TRUE);
@@ -446,19 +500,21 @@ function parse_contrib_conf()
   }
 
   /* Look for samba password generation method */
-  if(file_exists("/usr/lib/gosa/mkntpasswd")){
-    $pwdhash  = "/usr/lib/gosa/mkntpasswd";
+  if(file_exists("/usr/bin/mkntpasswd")){
+    $pwdhash  = "/usr/bin/mkntpasswd";
   } elseif (preg_match("/^Usage: mkntpwd /", shell_exec ("mkntpwd 2>&1"))){
     $pwdhash= "mkntpwd";
   } else {
     $pwdhash=('perl -MCrypt::SmbHash -e "ntlmgen \"\$ARGV[0]\", \$lm, \$nt; print \"\${lm}:\${nt}\n\";" $1');
   }
 
+
   /* Define which variables will be replaced */
   $replacements['{LOCATIONNAME}']  = $ldapconf['location'];
   $replacements['{SAMBAVERSION}']  = $used_samba_version;
   $replacements['{LDAPBASE}']      = $ldapconf['base'];
   $replacements['{LDAPADMIN}']     = $ldapconf['admin'];
+  $replacements['{UIDBASE}']       = $ldapconf['uidbase'];
   $replacements['{DNMODE}']        = $ldapconf['peopledn'];
   $replacements['{LDAPHOST}']      = $ldapconf['uri'];
   $replacements['{PASSWORD}']      = $ldapconf['password'];
@@ -483,6 +539,8 @@ function parse_contrib_conf()
   $possible_plugins['pureftp'][]     = "'\n.*<tab.*pureftp.*>.*\n'i";
   $possible_plugins['webdav'][]      = "'\n.*<tab.*webdav.*>.*\n'i";
   $possible_plugins['phpgroupware'][]= "'\n.*<tab.*phpgroupware.*>.*\n'i";
+  $possible_plugins['netatalk'][0]    = "'\n.*<plugin.*netatalk+.*\n.*>.*\n'i";
+  $possible_plugins['netatalk'][1]    = "'\n.*<tab.*netatalk.*>.*\n'i";
 
   /*Header information
      Needed to send the generated gosa.conf to the browser */
@@ -530,7 +588,7 @@ function parse_contrib_conf()
     }
 
     /* Data readed, types replaced, samba version detected and checked if
-       we need to add SID and RIDBASE. Check if there is an ivbbEntry in
+       we need to add SID and RIDBASE. Check if there is an ivbbentry in
        the LDAP tree, in this case we will set the governmentmode to true.
        Create LDAP connection, to check if theres a domain Objekt definen
        in the LDAP schema. */
@@ -539,7 +597,7 @@ function parse_contrib_conf()
     }
 
     /* Try to find a Samba Domain Objekt */
-    $ldap->search("(objectClass=ivbbEntry)");
+    $ldap->search("(objectClass=ivbbentry)");
 
     /* Something found ??? so we need to define ridbase an SID by ourselfs */
     if($ldap->count()> 0) {
@@ -555,11 +613,10 @@ function parse_contrib_conf()
       $str = str_replace("mailMethod=\"{MAILMETHOD}\"","",$str);
     }
 
-
     /* Remove all unused plugins */
-    foreach($possible_plugins as $key=> $plugin) {
-      foreach($plugin as $key=>$val) {
-        if(in_array($plugin,$classes)) {
+    foreach(array_keys($possible_plugins) as $akey) {
+      if(array_key_exists($akey,$classes)) {
+        foreach($possible_plugins[$akey] as $key=>$val) {
           $str = preg_replace($val,"\n",$str);
         }
       }
@@ -573,9 +630,14 @@ function parse_contrib_conf()
 /* Show setup_page 1 */
 function show_setup_page1($withoutput = true)
 {
+  $faults   = false;
+  $faults2  = false;
   $smarty = get_smarty();  
   $smarty->assign ("content", get_template_path('setup_introduction.tpl'));
   $smarty->assign ("tests", perform_php_checks($faults));
+  $smarty->assign ("detailed_tests", perform_additional_function_checks($faults2));
+
+  $faults = $faults || $faults2;
 
   /* This var is true if anything went wrong */
   if ($faults){
@@ -595,13 +657,14 @@ function show_setup_page1($withoutput = true)
     $smarty->display (get_template_path('setup.tpl'));
   }
 
-  return (!$faults);
+  return ($faults);
 }
 
 
 /* Show setup_page 2 */
 function show_setup_page2($withoutput = true)
 {
+  $faults = false;
   $smarty = get_smarty();
   $smarty->assign ("content", get_template_path('setup_step2.tpl'));
   $smarty->assign ("tests", perform_additional_checks($faults));
@@ -619,12 +682,13 @@ function show_setup_page2($withoutput = true)
     $smarty->display (get_template_path('setup.tpl'));
   }
 
-  return (!$faults);                               
+  return ($faults);                               
 }
 
 
 function show_setup_page3($withoutput = true)
 {
+  $ds = NULL;
   $smarty = get_smarty();
 
   /* Take the Post oder the Sessioin saved data */
@@ -648,18 +712,7 @@ function show_setup_page3($withoutput = true)
   /* No error till now */
   $fault = false;
 
-  /* If we pushed the Button continue */
-  if(isset($_POST['continue3'])){
-    if(!isset($uri)) {
-      $fault = true;
-
-      /* Output the Error */
-      if($withoutput) {
-        print_red (_("You've to specify an ldap server before continuing!"));
-        $smarty->assign ("content", get_template_path('setup_step3.tpl'));
-      }
-    }
-  } elseif (!$ds = @ldap_connect (validate($uri))) {
+  if (!$ds = @ldap_connect (validate($uri))) {
     $fault =true;
 
     /* Output the Error */
@@ -704,14 +757,51 @@ function show_setup_page3($withoutput = true)
     $smarty->display (get_template_path('setup.tpl'));
   }
 
-  return (!$fault);                             
+  return ($fault);                             
 }
 
 
 function show_setup_page4($withoutput = true)
 {
   $smarty= get_smarty();      
+  $checkvars = array("location", "admin", "password", "peopleou", "base",
+      "peopledn", "arr_crypts", "uidbase","errorlvl");
+
+  $fault     = false;              
+  $uri       = $_SESSION['ldapconf']['uri'];
+  $ldapconf  = $_SESSION['ldapconf'];
+  $arr_crypts= array();
+  $temp      = "";
 
+  /* check POST data */
+  if(isset($_POST['check'])) {
+
+    /* Check if all needed vars are submitted */
+    foreach($checkvars as $key) {
+      if($key == "peopleou"){
+        continue;
+      }
+      if($key == "groupou"){
+        continue;
+      }
+
+      if((isset($_POST[$key]))&&(!empty($_POST[$key]))) {
+        $_SESSION['ldapconf'][$key] = $_POST[$key];
+      } else {
+        if($withoutput) {
+          print_red(sprintf(_("You're missing the required attribute '%s' from this formular. Please complete!"), $key));
+        }
+        $fault = true;
+      }
+    }
+  }
+
+  /* Transfer base */
+  if(isset($_POST['base'])){
+    $_SESSION['ldapconf']['base']= $_POST['base'];
+  }
+
+       // ?
   if(!isset($_SESSION['ldapconf']['base'])){
     $_SESSION['ldapconf']['base']= $base;
   }
@@ -721,14 +811,6 @@ function show_setup_page4($withoutput = true)
   }
   require_once("class_password-methods.inc");
 
-  $fault     = false;              
-  $uri       = $_SESSION['ldapconf']['uri'];
-  $ldapconf  = $_SESSION['ldapconf'];
-  $arr_crypts= array();
-  $temp      = "";
-  $checkvars = array("location", "admin", "password", "peopleou", "base",
-      "peopledn", "arr_crypts", "mail", "uidbase","errorlvl");
-
   if(!isset($_SESSION['ldapconf']['arr_cryptkeys'])) {
     require_once("class_password-methods.inc");
     $tmp= passwordMethod::get_available_methods_if_not_loaded();
@@ -743,7 +825,7 @@ function show_setup_page4($withoutput = true)
 
   /* If there are some empty vars in ldapconnect -
      these values also represent out default values */
-  if(!$ds = @ldap_connect (validate($uri))){
+  if(!$ds =  @ldap_connect (validate($uri))){
     $fault = true;
     if($withoutput){
       print_red (_("Can't connect to the specified LDAP server! Please make sure that is reachable for GOsa."));
@@ -751,22 +833,21 @@ function show_setup_page4($withoutput = true)
   } elseif(!@ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)){
     $fault = true;
     if($withoutput){
-      print_red (_("Can't bind to the specified LDAP server! Please make sure that it is reachable for GOsa."));
+      print_red (_("Can't set ldap protocol version 3."));
     }
   } elseif(!$r= @ldap_bind ($ds)){
     $fault = true;
     if($withoutput){
-      print_red (_("Can't bind to the specified LDAP server! Please make sure that it is reachable for GOsa."));
+      print_red (_("Could not bind to the specified LDAP server! Please make sure that it is reachable for GOsa."));
     }
   } else {
-    $sr=   @ldap_search ($ds, "", "objectClass=*", array("namingContexts"));
+    $sr=   @ldap_search ($r, NULL, "objectClass=*", array("namingContexts"));
     $attr= @ldap_get_entries($ds,$sr);
 
     if((empty($attr))) {
-      $base= "dc=example,dc=net";
 
       if($withoutput){
-        print_red(_("Bind to server successful, but the server seems to be completly empty, please check all informations twice"));
+#        print_red(_("Bind to server successful, but the server seems to be completly empty, please check all information twice"));
       }
 
     } else {
@@ -801,37 +882,16 @@ function show_setup_page4($withoutput = true)
   if(!isset($_SESSION['ldapconf']['mail'])){
     $_SESSION['ldapconf']['mail']= 0;
   }
-  $tmp= array_flip($_SESSION['ldapconf']['arr_cryptkeys']);
-  if(!isset($_SESSION['ldapconf']['arr_crypts'])){
-    $_SESSION['ldapconf']['arr_crypts']   = $tmp['md5'];
+  if(!isset($_SESSION['ldapconf']['follow_referrals'])){
+    $_SESSION['ldapconf']['follow_referrals']= FALSE;
   }
-
-  /* check POST data */
-  if(isset($_POST['check'])) {
-
-    /* Check if all needed vars are submitted */
-    foreach($checkvars as $key) {
-      if($key == "peopleou"){
-        continue;
-      }
-      if($key == "groupou"){
-        continue;
-      }
-
-      if((isset($_POST[$key]))&&($_POST[$key]!="")) {
-        $_SESSION['ldapconf'][$key] = $_POST[$key];
-      } else {
-        if($withoutput) {
-          print_red(sprintf(_("You're missing the required attribute '%s' from this formular. Please complete!"), $key));
-        }
-        $fault = true;
-      }
-    }
+  if(!isset($_SESSION['ldapconf']['tls'])){
+    $_SESSION['ldapconf']['tls']= FALSE;
   }
 
-  /* Transfer base */
-  if(isset($_POST['base'])){
-    $_SESSION['ldapconf']['base']= $_POST['base'];
+  $tmp= array_flip($_SESSION['ldapconf']['arr_cryptkeys']);
+  if(!isset($_SESSION['ldapconf']['arr_crypts'])){
+    $_SESSION['ldapconf']['arr_crypts']   = $tmp['md5'];
   }
 
   $smarty->assign("arr_cryptkeys",$_SESSION['ldapconf']['arr_cryptkeys']);
@@ -841,17 +901,25 @@ function show_setup_page4($withoutput = true)
     $smarty->assign($key,$val);
   }
 
-  if(isset($_POST['check'])) {
+  if(isset($_POST['check']) || (isset($_POST['admin'])) && isset($_POST['password'])) {
     $ldap= new LDAP($_SESSION['ldapconf']['admin'],
         $_SESSION['ldapconf']['password'],
-        $_SESSION['ldapconf']['uri']);
+        $_SESSION['ldapconf']['uri'],
+        $_SESSION['ldapconf']['follow_referrals'],
+        $_SESSION['ldapconf']['tls']);
 
     $m= schema_check($_SESSION['ldapconf']['uri'],
         $_SESSION['ldapconf']['admin'],
-        $_SESSION['ldapconf']['password']);
+        $_SESSION['ldapconf']['password'],
+        $_SESSION['ldapconf']['follow_referrals'],
+        $_SESSION['ldapconf']['tls']);
+
     $_SESSION['classes']= $m;
 
-    if(!is_schema_readable($ldapconf['uri'],$ldapconf['admin'],$ldapconf['password'])){
+    //TODO: Ask user for referrals and TLS config options during setup. They are initialized to false at the moment:
+    $ldapconf['follow_referrals'] = false;
+    $ldapconf['tls'] = false;
+    if(!is_schema_readable($ldapconf['uri'], $ldapconf['admin'], $ldapconf['password'], $ldapconf['follow_referrals'], $ldapconf['tls'])){
       if($withoutput){
         print_red(_("Can't read schema informations, GOsa needs to know your schema setup. Please verify that it is readable for GOsa"));
       }
@@ -880,7 +948,8 @@ function show_setup_page4($withoutput = true)
   if($withoutput){
     $smarty->display (get_template_path('setup.tpl'));
   }
-  return (!$fault);
+
+  return ($fault);
 }
 
 
@@ -900,7 +969,12 @@ function show_setup_page5($withoutput=true)
   $smarty->assign("webgroup", $info['name']);
   $smarty->assign("path", CONFIG_DIR);
   $message= "<table summary=\"\" class=\"check\">";
-  $m= schema_check($ldapconf['uri'], $ldapconf['admin'], $ldapconf['password'],1);
+
+  //TODO:Ask user for referral and TLS config options during setup. They are initialized to false at the moment:
+  $ldapconf['follow_referrals'] = false;
+  $ldapconf['tls'] = false;
+
+  $m= schema_check($ldapconf['uri'], $ldapconf['admin'], $ldapconf['password'], $ldapconf['follow_referrals'], $ldapconf['tls'], 1);
 
   if($withoutput) {
     $smarty->assign ("schemas", view_schema_check($m));
@@ -944,69 +1018,48 @@ function create_user_for_setup($withoutput=true)
      We check that, if this user or group is missing we ask for creating them */
   $ldap= new LDAP($_SESSION['ldapconf']['admin'],    $_SESSION['ldapconf']['password'],   $_SESSION['ldapconf']['uri']);
 
-  /* 
-  Now we are testing for a group, with the rights :all 
-  */
-  
+  /* Now we are testing for a group, with the rights :all  */
   $ldap->cd($ldapconf['base']);
   $ldap->search("(&(objectClass=gosaObject)(gosaSubtreeACL=:all))");
 
   $group_cnt  = $ldap->count();
   $data       = $ldap->fetch();
 
-//  $str_there  = "Searching for Aminitrative users <br><br>";
-
-  /* 
-  We need to create administrative user and group  because theres no group found 
-  */
+  /* We need to create administrative user and group  because there was no group found */
   if($group_cnt < 1) {
     
-    /* 
-    Set var to create user 
-    */
-//    $str_there  =   "no group found<br>";
-
     $need_to_create_group = true;
     $need_to_create_user  = true;
 
-
     /* Output error */
-    if(($withoutput)&&(!isset($_POST['new_admin']))){
-      print_red(_("You're missing an administrative account for GOsa, you'll not be able to administrate anything!"));
-    }
+#    if(($withoutput)&&(!isset($_POST['new_admin']))){
+#      print_red(_("You're missing an administrative account for GOsa, you'll not be able to administrate anything!"));
+#    }
   } else {
     
-//    $str_there = "Group found <br>".$data['dn'];    
-
     $need_to_create_group = false;
     $ldap->clearResult();
    
-    /* We found an Administrative Group, is there a user, too */
+    /* We found an Administrative Group, is there a user too ? */
     if(isset($data['memberUid'][0])) {
-      $str = "uid=".$data['memberUid']['0'];
+      $str      = "uid=".$data['memberUid']['0'];
       $ldap->search("(&(objectClass=gosaAccount)(objectClass=person)(".$str."))");
-      $data2   = $ldap->fetch();
+      $data2    = $ldap->fetch();
   
       /* We must create a user */
       if (($ldap->count() < 1)||(!isset($data2))) {
-//        $str_there.="Missing user";
-        
         $need_to_create_user = true;
-      
-        if(($withoutput)&&(!isset($_POST['new_admin']))){
-          print_red(_("You're missing an administrative account for GOsa, you'll not be able to administrate anything!"));
-        }
+#        if(($withoutput)&&(!isset($_POST['new_admin']))){
+#          print_red(_("You're missing an administrative account for GOsa, you'll not be able to administrate anything!"));
+#        }
       }else {
-//        $str_there.="<br>User found <br>".$data2['dn'];
         $need_to_create_user = false;
       }
     } else {
       $need_to_create_user=true;
-      if(($withoutput)&&(!isset($_POST['new_admin']))){
-          print_red(_("You're missing an administrative account for GOsa, you'll not be able to administrate anything!"));
-        }   
-//      $str_there.="<br>No User found <br>";
+#      if(($withoutput)&&(!isset($_POST['new_admin']))){
+#          print_red(_("You're missing an administrative account for GOsa, you'll not be able to administrate anything!"));
+#        }   
     }
   }
 
@@ -1056,8 +1109,7 @@ function create_user_for_setup($withoutput=true)
         $ldap->cd($dn);
         $ldap->add($arr);
         if($ldap->error!="Success"){
-          print_red($ldap->error);
-          print_red("Can't create user, and / or Group, possibly this problem  depends on an empty LDAP server. Check your configuration and try again!");
+          show_ldap_error($ldap->get_error(),_("User and/or group could not be created, please check your configuration twice !"));
         }
       }    
     }
@@ -1100,7 +1152,7 @@ function create_user_for_setup($withoutput=true)
     return(true);
   } else {
 
-    if(!($create_user)) {
+    if((!isset($need_to_create_user))||(!($need_to_create_user))) {
       $smarty->assign ("content", get_template_path('setup_useradmin.tpl'));
       $smarty->assign("exists",true);
     } else {