Code

updated schema check in trunk
authorhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Thu, 10 May 2007 09:08:02 +0000 (09:08 +0000)
committerhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Thu, 10 May 2007 09:08:02 +0000 (09:08 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@6335 594d385d-05f5-0310-b6e9-bd551577e9d8

html/index.php
include/class_ldap.inc
include/functions.inc
setup/class_setupStep_Ldap.inc
setup/class_setupStep_Schema.inc

index 38c847ba9cb5f2d444674c30645c87f016d13e2b..5468b8d9af55c75e99a522dc2b8e730474a67e66 100644 (file)
@@ -221,22 +221,26 @@ if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['login'])){
     $recursive = (isset($config->current['RECURSIVE']) && $config->current['RECURSIVE'] == "true");
     $tls =       (isset($config->current['TLS'])       && $config->current['TLS'] == "true");
 
-#    if(!is_schema_readable($config->current['SERVER'], $config->current['ADMIN'], $config->current['PASSWORD'], $recursive, $tls)){
-#
-#      print_red(_("GOsa cannot retrieve information about the installed schema files. Please make sure, that this is possible."));
-#      displayLogin();
-#      exit()  ;
-#    }else{
-#      $str = (schema_check($config->current['SERVER'],$config->current['ADMIN'],$config->current['PASSWORD'], $recursive, $tls, 0, TRUE));
-#      $checkarr = array();
-#      foreach($str as $tr){
-#        if(isset($tr['needonstartup'])){
-#          print_red($tr['msg']."<br>"._("Your ldap setup contains old schema definitions. Please re-run the setup."));
-#          displayLogin();
-#          exit()  ;
-#        }
-#      }
-#    }
+    if(!count($ldap->get_objectclasses())){
+      print_red(_("GOsa cannot retrieve information about the installed schema files. Please make sure, that this is possible."));
+      displayLogin();
+      exit()  ;
+    }else{
+      $cfg = array();
+      $cfg['admin']     = $config->current['ADMIN'];
+      $cfg['password']  = $config->current['PASSWORD'];
+      $cfg['connection']= $config->current['SERVER'];
+      $cfg['tls']       = $tls;
+      $str = check_schema($cfg,isset($config->current['RFC2307BIS']) && preg_match("/(true|yes|on|1)/i",$config->current['RFC2307BIS']));
+      $checkarr = array();
+      foreach($str as $tr){
+        if(isset($tr['IS_MUST_HAVE']) && !$tr['STATUS']){
+          print_red($tr['MSG']."<br>"._("Your ldap setup contains old schema definitions. Please re-run the setup."));
+          displayLogin();
+          exit();
+        }
+      }
+    }
   }
   /* Check for locking area */
   $ldap->cat($config->current['CONFIG'], array("dn"));
index c1869a9f966efdf8bc9e4dfc09fb8dda14136b61..126aabbad27a562be5207cd82998a291f78e8399 100644 (file)
@@ -1316,7 +1316,6 @@ class LDAP{
       }
 
          }
-
          return $objectclasses;
   }
 
index 835d6636ea1847c7f49b7d5688bd294a86e86069..ef1139f16f2b37c03dc019df0bfae0ce665942e1 100644 (file)
@@ -2186,5 +2186,145 @@ function get_base_from_hook($dn, $attrib)
   }
 }
 
+/* Schema validation functions */
+
+function check_schema_version($class, $version)
+{
+  return preg_match("/\(v$version\)/", $class['DESC']);
+}
+
+function check_schema($cfg,$rfc2307bis = FALSE)
+{
+  $messages= array();
+
+  /* Get objectclasses */
+  $ldap = new LDAP($cfg['admin'],$cfg['password'],$cfg['connection'] ,FALSE,$cfg['tls']);
+  $objectclasses = $ldap->get_objectclasses();
+  if(count($objectclasses) == 0){
+    print_red(_("Can't get schema information from server. No schema check possible!"));
+  }
+
+  /* This is the default block used for each entry.
+   *  to avoid unset indexes.
+   */
+  $def_check = array("REQUIRED_VERSION" => "0",
+      "SCHEMA_FILES"     => array(),
+      "CLASSES_REQUIRED" => array(),
+      "STATUS"           => FALSE,
+      "IS_MUST_HAVE"     => FALSE,
+      "MSG"              => "",
+      "INFO"             => "");#_("There is currently no information specified for this schema extension."));
+
+  /* The gosa base schema */
+  $checks['gosaObject'] = $def_check;
+  $checks['gosaObject']['REQUIRED_VERSION'] = "2.4";
+  $checks['gosaObject']['SCHEMA_FILES']     = array("gosa+samba3.schema","gosa.schema");
+  $checks['gosaObject']['CLASSES_REQUIRED'] = array("gosaObject");
+  $checks['gosaObject']['IS_MUST_HAVE']     = TRUE;
+
+  /* GOsa Account class */
+  $checks["gosaAccount"]["REQUIRED_VERSION"]= "2.4";
+  $checks["gosaAccount"]["SCHEMA_FILES"]    = array("gosa+samba3.schema","gosa.schema");
+  $checks["gosaAccount"]["CLASSES_REQUIRED"]= array("gosaAccount");
+  $checks["gosaAccount"]["IS_MUST_HAVE"]    = TRUE;
+  $checks["gosaAccount"]["INFO"]            = _("Used to store account specific informations.");
+
+  /* GOsa lock entry, used to mark currently edited objects as 'in use' */
+  $checks["gosaLockEntry"]["REQUIRED_VERSION"] = "2.4";
+  $checks["gosaLockEntry"]["SCHEMA_FILES"]     = array("gosa+samba3.schema","gosa.schema");
+  $checks["gosaLockEntry"]["CLASSES_REQUIRED"] = array("gosaLockEntry");
+  $checks["gosaLockEntry"]["IS_MUST_HAVE"]     = TRUE;
+  $checks["gosaLockEntry"]["INFO"]             = _("Used to lock currently edited entries to avoid multiple changes at the same time.");
+
+  /* Some other checks */
+  foreach(array(
+        "gosaCacheEntry"        => array("version" => "2.4"),
+        "gosaDepartment"        => array("version" => "2.4"),
+        "goFaxAccount"          => array("version" => "1.0.4", "class" => "gofaxAccount","file" => "gofax.schema"),
+        "goFaxSBlock"           => array("version" => "1.0.4", "class" => "gofaxAccount","file" => "gofax.schema"),
+        "goFaxRBlock"           => array("version" => "1.0.4", "class" => "gofaxAccount","file" => "gofax.schema"),
+        "gosaUserTemplate"      => array("version" => "2.4", "class" => "posixAccount","file" => "nis.schema"),
+        "gosaMailAccount"       => array("version" => "2.4", "class" => "mailAccount","file" => "gosa+samba3.schema"),
+        "gosaProxyAccount"      => array("version" => "2.4", "class" => "proxyAccount","file" => "gosa+samba3.schema"),
+        "gosaApplication"       => array("version" => "2.4", "class" => "appgroup","file" => "gosa.schema"),
+        "gosaApplicationGroup"  => array("version" => "2.4", "class" => "appgroup","file" => "gosa.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"),
+        "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"),
+        "goCupsServer"          => array("version" => "2.4", "class" => array("posixAccount", "terminals"),),
+        "goImapServer"          => array("version" => "2.4", "class" => array("mailAccount", "mailgroup"),"file" => "gosa+samba3.        schema"),
+        "goKrbServer"           => array("version" => "2.4"),
+        "goFaxServer"           => array("version" => "2.4", "class" => "gofaxAccount","file" => "gofax.schema"),
+        ) as $name => $values){
+
+          $checks[$name] = $def_check;
+          if(isset($values['version'])){
+            $checks[$name]["REQUIRED_VERSION"] = $values['version'];
+          }
+          if(isset($values['file'])){
+            $checks[$name]["SCHEMA_FILES"] = array($values['file']);
+          }
+          $checks[$name]["CLASSES_REQUIRED"] = array($name);
+        }
+  foreach($checks as $name => $value){
+    foreach($value['CLASSES_REQUIRED'] as $class){
+
+      if(!isset($objectclasses[$name])){
+        $checks[$name]['STATUS'] = FALSE;
+        if($value['IS_MUST_HAVE']){
+          $checks[$name]['MSG']    = sprintf(_("The required objectClass '%s' is not present in your schema setup"),$class);
+        }else{
+          $checks[$name]['MSG']    = sprintf(_("The optional objectClass '%s' is not present in your schema setup"),$class);
+        }
+      }elseif(!check_schema_version($objectclasses[$name],$value['REQUIRED_VERSION'])){
+        $checks[$name]['STATUS'] = FALSE;
+
+        if($value['IS_MUST_HAVE']){
+          $checks[$name]['MSG'] = sprintf(_("The required objectclass '%s' does not have version %s"), $class,                           $value['REQUIRED_VERSION']);
+        }else{
+          $checks[$name]['MSG'] = sprintf(_("The optional objectclass '%s' does not have version %s"), $class,                           $value['REQUIRED_VERSION']);
+        }
+      }else{
+        $checks[$name]['STATUS'] = TRUE;
+        $checks[$name]['MSG'] = sprintf(_("Class(es) available"));
+      }
+    }
+  }
+
+  $tmp = $objectclasses;
+
+  /* The gosa base schema */
+  $checks['posixGroup'] = $def_check;
+  $checks['posixGroup']['REQUIRED_VERSION'] = "2.4";
+  $checks['posixGroup']['SCHEMA_FILES']     = array("gosa+samba3.schema","gosa.schema");
+  $checks['posixGroup']['CLASSES_REQUIRED'] = array("posixGroup");
+  $checks['posixGroup']['STATUS']           = TRUE;
+  $checks['posixGroup']['IS_MUST_HAVE']     = TRUE;
+  $checks['posixGroup']['MSG']              = "";
+  $checks['posixGroup']['INFO']             = "";
+
+  /* Depending on selected rfc2307bis mode, we need different schema configurations */
+  if(isset($tmp['posixGroup'])){
+
+    if($rfc2307bis && isset($tmp['posixGroup']['STRUCTURAL'])){
+      $checks['posixGroup']['STATUS']           = FALSE;
+      $checks['posixGroup']['MSG']              = _("You have enabled the rfc2307bis option on the 'ldap setup' step, but your schema    configuration do not support this option.");
+      $checks['posixGroup']['INFO']             = _("In order to use rfc2307bis conform groups the objectClass 'posixGroup' must be      AUXILIARY");
+    }
+    if(!$rfc2307bis && !isset($tmp['posixGroup']['STRUCTURAL'])){
+      $checks['posixGroup']['STATUS']           = FALSE;
+      $checks['posixGroup']['MSG']              = _("You have disabled the rfc2307bis option on the 'ldap setup' step, but your schema   configuration do not support this option.");
+      $checks['posixGroup']['INFO']             = _("The objectClass 'posixGroup' must be STRUCTURAL");
+    }
+  }
+
+  return($checks);
+}
+
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
 ?>
index c982eec68a4db0de8366ba778339970fc7ff40a9..c5365ff59b20dd3ea9e71019d761f45309fd112d 100644 (file)
@@ -134,7 +134,7 @@ class Step_Ldap extends setup_step
       if(isset($_POST[$attr])){
 
         if(in_array($attr,array("base","connection")) && $this->$attr != get_post($attr)){
-          $this->parent->disable_steps_from($this->parent->step_name_to_id(get_class($this)));
+          $this->parent->disable_steps_from(($this->parent->step_name_to_id(get_class($this))) +1);
         }
         $this->$attr = get_post($attr);
       }
index 8d22f6ed60e352384a9620edfc653969862a57f7..2008128a4253fb173439d7ec2ce69a83478e85ef 100644 (file)
@@ -69,12 +69,6 @@ class Step_Schema extends setup_step
     return($smarty -> fetch (get_template_path("../setup/setup_schema.tpl")));
   }
 
-  function check_schema_version($class, $version)
-  {
-    return preg_match("/\(v$version\)/", $class['DESC']);
-  }
-
-
   function save_object()
   {
     if(isset($_POST['step7_posted'])){
@@ -88,11 +82,11 @@ class Step_Schema extends setup_step
     }
   }
 
-
   function check_schema()
   {
     $cfg = $this->parent->captured_values;
-    $messages= array();
+    $rfc2307bis = $cfg['rfc2307bis'];
+    $this->checked = check_schema($cfg,$rfc2307bis);
 
     /* Get objectclasses */
     $ldap = new LDAP($cfg['admin'],$cfg['password'],$cfg['connection'] ,FALSE,$cfg['tls']);
@@ -101,7 +95,6 @@ class Step_Schema extends setup_step
       print_red(_("Can't get schema information from server. No schema check possible!"));
     }
 
-  
     /* Which samba version do we use? */
     if(isset($objectclasses['sambaSamAccount'])){
       $this->samba_version = 3;
@@ -110,132 +103,6 @@ class Step_Schema extends setup_step
     }else{
       $this->samba_version = 0;
     }
-
-    /* This is the default block used for each entry. 
-     *  to avoid unset indexes. 
-     */
-    $def_check = array("REQUIRED_VERSION" => "0",
-                       "SCHEMA_FILES"     => array(),
-                       "CLASSES_REQUIRED" => array(),
-                       "STATUS"           => FALSE,
-                       "IS_MUST_HAVE"     => FALSE,
-                       "MSG"              => "",
-                       "INFO"             => "");#_("There is currently no information specified for this schema extension."));
-
-
-    /* The gosa base schema */
-    $checks['gosaObject'] = $def_check;
-    $checks['gosaObject']['REQUIRED_VERSION'] = "2.4";
-    $checks['gosaObject']['SCHEMA_FILES']     = array("gosa+samba3.schema","gosa.schema");
-    $checks['gosaObject']['CLASSES_REQUIRED'] = array("gosaObject");
-    $checks['gosaObject']['IS_MUST_HAVE']     = TRUE;
-
-    /* GOsa Account class */
-    $checks["gosaAccount"]["REQUIRED_VERSION"]= "2.4";
-    $checks["gosaAccount"]["SCHEMA_FILES"]    = array("gosa+samba3.schema","gosa.schema");
-    $checks["gosaAccount"]["CLASSES_REQUIRED"]= array("gosaAccount");
-    $checks["gosaAccount"]["IS_MUST_HAVE"]    = TRUE;
-    $checks["gosaAccount"]["INFO"]            = _("Used to store account specific informations.");
-
-    /* GOsa lock entry, used to mark currently edited objects as 'in use' */
-    $checks["gosaLockEntry"]["REQUIRED_VERSION"] = "2.4";
-    $checks["gosaLockEntry"]["SCHEMA_FILES"]     = array("gosa+samba3.schema","gosa.schema");
-    $checks["gosaLockEntry"]["CLASSES_REQUIRED"] = array("gosaLockEntry");
-    $checks["gosaLockEntry"]["IS_MUST_HAVE"]     = TRUE;
-    $checks["gosaLockEntry"]["INFO"]             = _("Used to lock currently edited entries to avoid multiple changes at the same time.");
-
-    /* Some other checks */
-    foreach(array(
-          "gosaCacheEntry"        => array("version" => "2.4"),
-          "gosaDepartment"        => array("version" => "2.4"),
-          "goFaxAccount"          => array("version" => "1.0.4", "class" => "gofaxAccount","file" => "gofax.schema"),
-          "goFaxSBlock"           => array("version" => "1.0.4", "class" => "gofaxAccount","file" => "gofax.schema"),
-          "goFaxRBlock"           => array("version" => "1.0.4", "class" => "gofaxAccount","file" => "gofax.schema"),
-          "gosaUserTemplate"      => array("version" => "2.4", "class" => "posixAccount","file" => "nis.schema"),
-          "gosaMailAccount"       => array("version" => "2.4", "class" => "mailAccount","file" => "gosa+samba3.schema"),
-          "gosaProxyAccount"      => array("version" => "2.4", "class" => "proxyAccount","file" => "gosa+samba3.schema"),
-          "gosaApplication"       => array("version" => "2.4", "class" => "appgroup","file" => "gosa.schema"),
-          "gosaApplicationGroup"  => array("version" => "2.4", "class" => "appgroup","file" => "gosa.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"),
-          "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"),
-          "goCupsServer"          => array("version" => "2.4", "class" => array("posixAccount", "terminals"),),
-          "goImapServer"          => array("version" => "2.4", "class" => array("mailAccount", "mailgroup"),"file" => "gosa+samba3.schema"),
-          "goKrbServer"           => array("version" => "2.4"),
-          "goFaxServer"           => array("version" => "2.4", "class" => "gofaxAccount","file" => "gofax.schema"),
-          ) as $name => $values){
-
-      $checks[$name] = $def_check;
-      if(isset($values['version'])){
-        $checks[$name]["REQUIRED_VERSION"] = $values['version'];
-      }
-      if(isset($values['file'])){
-        $checks[$name]["SCHEMA_FILES"] = array($values['file']);
-      }
-      $checks[$name]["CLASSES_REQUIRED"] = array($name);
-    }
-
-    foreach($checks as $name => $value){
-      foreach($value['CLASSES_REQUIRED'] as $class){
-
-        if(!isset($objectclasses[$name])){
-          $checks[$name]['STATUS'] = FALSE;
-          if($value['IS_MUST_HAVE']){
-            $checks[$name]['MSG']    = sprintf(_("The required objectClass '%s' is not present in your schema setup"),$class);
-          }else{
-            $checks[$name]['MSG']    = sprintf(_("The optional objectClass '%s' is not present in your schema setup"),$class);
-          }
-        }elseif(!$this->check_schema_version($objectclasses[$name],$value['REQUIRED_VERSION'])){
-          $checks[$name]['STATUS'] = FALSE;
-
-          if($value['IS_MUST_HAVE']){
-            $checks[$name]['MSG'] = sprintf(_("The required objectclass '%s' does not have version %s"), $class, $value['REQUIRED_VERSION']);
-          }else{
-            $checks[$name]['MSG'] = sprintf(_("The optional objectclass '%s' does not have version %s"), $class, $value['REQUIRED_VERSION']);
-          }
-        }else{
-          $checks[$name]['STATUS'] = TRUE;
-          $checks[$name]['MSG'] = sprintf(_("Class(es) available"));
-        }
-      }
-    }
-  
-    $tmp = $objectclasses;
-
-    /* Depending on selected rfc2307bis mode, we need different schema configurations */
-    $rfc2307bis = $this->parent->captured_values['rfc2307bis'];
-
-
-    /* The gosa base schema */
-    $checks['posixGroup'] = $def_check;
-    $checks['posixGroup']['REQUIRED_VERSION'] = "2.4";
-    $checks['posixGroup']['SCHEMA_FILES']     = array("gosa+samba3.schema","gosa.schema");
-    $checks['posixGroup']['CLASSES_REQUIRED'] = array("posixGroup");
-    $checks['posixGroup']['STATUS']           = TRUE;
-    $checks['posixGroup']['IS_MUST_HAVE']     = TRUE;
-    $checks['posixGroup']['MSG']              = "";
-    $checks['posixGroup']['INFO']             = "";
-
-    if(isset($tmp['posixGroup'])){
-
-      if($rfc2307bis && isset($tmp['posixGroup']['STRUCTURAL'])){
-        $checks['posixGroup']['STATUS']           = FALSE;
-        $checks['posixGroup']['MSG']              = _("You have enabled the rfc2307bis option on the 'ldap setup' step, but your schema configuration do not support this option.");
-        $checks['posixGroup']['INFO']             = _("In order to use rfc2307bis conform groups the objectClass 'posixGroup' must be AUXILIARY");
-      }
-      if(!$rfc2307bis && !isset($tmp['posixGroup']['STRUCTURAL'])){
-        $checks['posixGroup']['STATUS']           = FALSE;
-        $checks['posixGroup']['MSG']              = _("You have disabled the rfc2307bis option on the 'ldap setup' step, but your schema configuration do not support this option.");
-        $checks['posixGroup']['INFO']             = _("The objectClass 'posixGroup' must be STRUCTURAL");
-      }
-    }
-
-    $this->checked = $checks;
   }
 }