Code

Reenabled schema check.
authorhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Thu, 10 May 2007 07:26:59 +0000 (07:26 +0000)
committerhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Thu, 10 May 2007 07:26:59 +0000 (07:26 +0000)
Made schema check functions to non class members,
to be able to call them from anywhere.
Added missing image.

git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.5@6329 594d385d-05f5-0310-b6e9-bd551577e9d8

html/images/small_warning.png [new file with mode: 0644]
html/index.php
include/functions.inc
setup/class_setupStep_Schema.inc

diff --git a/html/images/small_warning.png b/html/images/small_warning.png
new file mode 100644 (file)
index 0000000..fd49f31
Binary files /dev/null and b/html/images/small_warning.png differ
index 14379e0129682433f3054b4feb024dede5694534..d9615399a6766d4e1b97c563895c4e7305b5c0af 100644 (file)
@@ -223,15 +223,23 @@ if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['login'])){
       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();
-#        }
-#      }
+      $cfg = array(); 
+      $cfg['admin']     = $config->current['ADMIN'];
+      $cfg['password']  = $config->current['PASSWORD'];
+      $cfg['connection']= $config->current['SERVER'];
+      $cfg['tls']       = $tls;
+  
+      $str = check_schema($cfg,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 */
index 9b83a43ef79e37086ffdaf2dc33da06e0cbbb230..fa75451c7405581de938e657846b776ab2846e09 100644 (file)
@@ -2254,5 +2254,152 @@ 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 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;
   }
 }