X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=include%2Ffunctions.inc;h=ddb9e1465caa15c773d0e9bd1c572256ab62065a;hb=62feb9d8929295ba361884d3d42f294e2d31046d;hp=a4b89396010526feb8919df0ef05683026ce6abf;hpb=b732853e38b57be298974dd5e25a01b03f071b62;p=gosa.git
diff --git a/include/functions.inc b/include/functions.inc
index a4b893960..ddb9e1465 100644
--- a/include/functions.inc
+++ b/include/functions.inc
@@ -20,6 +20,7 @@
/* Configuration file location */
define ("CONFIG_DIR", "/etc/gosa");
+define ("CONFIG_FILE", "gosa.conf");
define ("CONFIG_TEMPLATE_DIR", "../contrib/");
define ("HELP_BASEDIR", "/var/www/doc/");
@@ -184,6 +185,11 @@ function get_browser_language()
}
}
+ /* We've just one zh variation. Fix code... */
+ if (preg_match('/zh/', $lang)){
+ return ("zh_CN");
+ }
+
return (strtolower($lang)."_".strtoupper($lang));
}
@@ -290,7 +296,8 @@ function ldap_init ($server, $base, $binddn='', $pass='')
{
global $config;
- $ldap = new LDAP ($binddn, $pass, $server, isset($config->current['RECURSIVE']) && $config->current['RECURSIVE'] == "true",
+ $ldap = new LDAP ($binddn, $pass, $server,
+ isset($config->current['RECURSIVE']) && $config->current['RECURSIVE'] == "true",
isset($config->current['TLS']) && $config->current['TLS'] == "true");
/* Sadly we've no proper return values here. Use the error message instead. */
@@ -475,7 +482,7 @@ function add_lock ($object, $user)
$ldap->search("(&(objectClass=gosaLockEntry)(gosaUser=$user)(gosaObject=".base64_encode($object)."))",
array("gosaUser"));
if (!preg_match("/Success/i", $ldap->error)){
- print_red (sprintf(_("Can't set locking information in LDAP database. Please check the 'config' entry in gosa.conf! LDAP server says '%s'."), $ldap->get_error()));
+ print_red (sprintf(_("Can't set locking information in LDAP database. Please check the 'config' entry in %s! LDAP server says '%s'."),CONFIG_FILE, $ldap->get_error()));
return;
}
@@ -556,7 +563,7 @@ function get_lock ($object)
$ldap->cd ($config->current['CONFIG']);
$ldap->search("(&(objectClass=gosaLockEntry)(gosaObject=".base64_encode($object)."))", array("gosaUser"));
if (!preg_match("/Success/i", $ldap->error)){
- print_red (_("Can't get locking information in LDAP database. Please check the 'config' entry in gosa.conf!"));
+ print_red (sprintf(_("Can't get locking information in LDAP database. Please check the 'config' entry in %s!"),CONFIG_FILE));
return("");
}
@@ -1125,15 +1132,63 @@ function print_red()
}
if(isset($_SESSION['errors']) && strlen($_SESSION['errors'])==0) {
- $_SESSION['errors'].= "
+
+
+
";
+ $hide = "hide(\"e_layer\");hide(\"e_layer2\");hide(\"e_layer3\");";
+ }else{
+
+ $_SESSION['errors'].= "
+
+
";
+ $hide = "hide(\"e_layer\");hide(\"e_layer2\");";
+ }
+
+ $_SESSION['errors'].= "
+
".
" | ".
- ""._("An error occured while processing your request").
+ ""._("An error occurred while processing your request").
"$string
$addmsg | |
|
";
}
@@ -1263,6 +1318,9 @@ function get_printer_list($cups_server)
} else {
$ldap->search('(objectClass=gotoPrinter)', array('cn'));
}
+ while($attrs = $ldap->fetch()){
+ $res[$attrs['cn'][0]] = $attrs['cn'][0];
+ }
return $res;
}
@@ -1374,9 +1432,9 @@ function print_header($image, $headline, $info= "")
$display.= " ";
$display.= "
\n";
}
- if (isset($_SESSION['errors'])){
- $display.= $_SESSION['errors'];
- }
+# if (isset($_SESSION['errors'])){
+# $display.= $_SESSION['errors'];
+# }
return ($display);
}
@@ -1833,7 +1891,7 @@ function get_gosa_version()
return (sprintf(_("GOsa development snapshot (Rev %s)"), $revision));
} else {
$release= preg_replace('%^.*/([^/]+)/include/functions.inc.*$%', '\1', $svn_path);
- return (sprintf(_("GOsa $release"), $revision));
+ return (_("GOsa $release"));
}
}
@@ -2146,5 +2204,320 @@ function is_department_name_reserved($name,$base)
}
+function is_php4()
+{
+ if (isset($_SESSION['PHP4COMPATIBLE'])){
+ return true;
+ }
+ return (preg_match('/^4/', phpversion()));
+}
+
+
+function gosa_ldap_explode_dn($dn,$config = NULL,$verify_in_ldap=false)
+{
+ /* Initialize variables */
+ $ret = array("count" => 0); // Set count to 0
+ $next = true; // if false, then skip next loops and return
+ $cnt = 0; // Current number of loops
+ $max = 100; // Just for security, prevent looops
+ $ldap = NULL; // To check if created result a valid
+ $keep = ""; // save last failed parse string
+
+ /* Check each parsed dn in ldap ? */
+ if($config!=NULL && $verify_in_ldap){
+ $ldap = $config->get_ldap_link();
+ }
+
+ /* Lets start */
+ $called = false;
+ while(preg_match("/,/",$dn) && $next && $cnt < $max){
+
+ $cnt ++;
+ if(!preg_match("/,/",$dn)){
+ $next = false;
+ }
+ $object = preg_replace("/[,].*$/","",$dn);
+ $dn = preg_replace("/^[^,]+,/","",$dn);
+
+ $called = true;
+
+ /* Check if current dn is valid */
+ if($ldap!=NULL){
+ $ldap->cd($dn);
+ $ldap->cat($dn,array("dn"));
+ if($ldap->count()){
+ $ret[] = $keep.$object;
+ $keep = "";
+ }else{
+ $keep .= $object.",";
+ }
+ }else{
+ $ret[] = $keep.$object;
+ $keep = "";
+ }
+ }
+
+ /* No dn was posted */
+ if($cnt == 0 && !empty($dn)){
+ $ret[] = $dn;
+ }
+
+ /* Append the rest */
+ $test = $keep.$dn;
+ if($called && !empty($test)){
+ $ret[] = $keep.$dn;
+ }
+ $ret['count'] = count($ret) - 1;
+
+ return($ret);
+}
+
+
+function get_base_from_hook($dn, $attrib)
+{
+ global $config;
+
+ if (isset($config->current['BASE_HOOK'])){
+
+ /* Call hook script - if present */
+ $command= $config->current['BASE_HOOK'];
+
+ if ($command != ""){
+ $command.= " '$dn' $attrib";
+ if (check_command($command)){
+ @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, $command, "Execute");
+ exec($command, $output);
+ if (preg_match("/^[0-9]+$/", $output[0])){
+ return ($output[0]);
+ } else {
+ print_red(_("Warning - base_hook is not available. Using default base."));
+ return ($config->current['UIDBASE']);
+ }
+ } else {
+ print_red(_("Warning - base_hook is not available. Using default base."));
+ return ($config->current['UIDBASE']);
+ }
+
+ } else {
+
+ print_red(_("Warning - no base_hook defined. Using default base."));
+ return ($config->current['UIDBASE']);
+
+ }
+ }
+}
+
+/* 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);
+ }
+
+
+function prepare4mailbody($string)
+{
+ $string = html_entity_decode($string);
+
+ $from = array(
+ "/%/",
+ "/ /",
+ "/\n/",
+ "/\r/",
+ "/!/",
+ "/#/",
+ "/\*/",
+ "/\//",
+ "/",
+ "/>/",
+ "/\?/",
+ "/\"/");
+
+ $to = array(
+ "%25",
+ "%20",
+ "%0A",
+ "%0D",
+ "%21",
+ "%23",
+ "%2A",
+ "%2F",
+ "%3C",
+ "%3E",
+ "%3F",
+ "%22");
+
+ $string = preg_replace($from,$to,$string);
+
+ return($string);
+}
+
+
+function mac2company($mac)
+{
+ $vendor= "";
+
+ /* Generate a normailzed mac... */
+ $mac= substr(preg_replace('/[:-]/', '', $mac), 0, 6);
+
+ /* Check for existance of the oui file */
+ if (!is_readable(CONFIG_DIR."/oui.txt")){
+ return ("");
+ }
+
+ /* Open file and look for mac addresses... */
+ $handle = @fopen(CONFIG_DIR."/oui.txt", "r");
+ if ($handle) {
+ while (!feof($handle)) {
+ $line = fgets($handle, 4096);
+
+ if (preg_match("/^$mac/i", $line)){
+ $vendor= substr($line, 32);
+ }
+ }
+ fclose($handle);
+ }
+
+ return ($vendor);
+}
+
+
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
?>