summaryrefslogtreecommitdiff
path: root/net/phpldapadmin/files/patch-lib_ds__ldap.php
diff options
context:
space:
mode:
authorKrzysztof <ports@bsdserwis.com>2022-11-27 21:17:33 +0100
committerRonald Klop <ronald@FreeBSD.org>2022-12-01 10:53:34 +0100
commitfee2b338d2af883ca4dd75a7d285f65b284fb73b (patch)
tree7ac4ed5fd0e3d09bbab43b2eeb736a36758cdd56 /net/phpldapadmin/files/patch-lib_ds__ldap.php
parenteditors/bless: resurrect^Wreadd previously expired port (diff)
net/phpldapadmin: fix support for php81+
PR: 266678 Reported by: Gerard Seibert Approved by: rene (mentor) Differential Revision: https://reviews.freebsd.org/D37513
Diffstat (limited to 'net/phpldapadmin/files/patch-lib_ds__ldap.php')
-rw-r--r--net/phpldapadmin/files/patch-lib_ds__ldap.php465
1 files changed, 443 insertions, 22 deletions
diff --git a/net/phpldapadmin/files/patch-lib_ds__ldap.php b/net/phpldapadmin/files/patch-lib_ds__ldap.php
index 4e341a6eb75f..8ed7f9831b50 100644
--- a/net/phpldapadmin/files/patch-lib_ds__ldap.php
+++ b/net/phpldapadmin/files/patch-lib_ds__ldap.php
@@ -1,38 +1,459 @@
--- lib/ds_ldap.php.orig 2021-12-12 02:35:51 UTC
+++ lib/ds_ldap.php
-@@ -1768,7 +1768,7 @@ class ldap extends DS {
- ksort($return);
+@@ -206,6 +206,7 @@ class ldap extends DS {
+
+ if ($this->getValue('server','port'))
+ $resource = ldap_connect($this->getValue('server','host'),$this->getValue('server','port'));
++
+ else
+ $resource = ldap_connect($this->getValue('server','host'));
+
+@@ -216,7 +217,8 @@ class ldap extends DS {
+ debug_log('LDAP Resource [%s], Host [%s], Port [%s]',16,0,__FILE__,__LINE__,__METHOD__,
+ $resource,$this->getValue('server','host'),$this->getValue('server','port'));
- # cache the schema to prevent multiple schema fetches from LDAP server
-- set_cached_item($this->index,'schema','objectclasses',$return);
-+ set_cached_item($this->index,$return,'schema','objectclasses');
+- if (! is_resource($resource))
++ // if (! is_resource($resource))
++ if ( !$resource )
+ debug_dump_backtrace('UNHANDLED, $resource is not a resource',1);
+
+ # Go with LDAP version 3 if possible (needed for renaming and Novell schema fetching)
+@@ -328,7 +330,7 @@ class ldap extends DS {
+ }
}
- if (DEBUG_ENABLED)
-@@ -1953,7 +1953,7 @@ class ldap extends DS {
- $return = $attrs;
+- if (! $this->isAnonBindAllowed() && ! trim($userDN))
++ if (! $this->isAnonBindAllowed() && ! trim((string) $userDN))
+ return false;
+
+ # Temporarily set our user details
+@@ -337,7 +339,7 @@ class ldap extends DS {
+ $connect = $this->connect($method,false,$new);
+
+ # If we didnt log in...
+- if (! is_resource($connect) || $this->noconnect || ! $this->userIsAllowedLogin($userDN)) {
++ if (!$connect || $this->noconnect || ! $this->userIsAllowedLogin($userDN)) {
+ $this->logout($method);
+
+ return false;
+@@ -565,11 +567,11 @@ class ldap extends DS {
+
+ private function fillDNTemplate($user) {
+ foreach($this->getLoginBaseDN() as $base)
+- if(substr_compare($user, $base, -strlen($base)) === 0)
++ if(substr_compare($user, $base, -strlen((string) $base)) === 0)
+ return $user; // $user already passed as DN
+
+ // fill template
+- return sprintf($this->getValue('login', 'bind_dn_template'), preg_replace('/([,\\\\#+<>;"=])/', '\\\\$1', $user));
++ return sprintf($this->getValue('login', 'bind_dn_template'), preg_replace('/([,\\\\#+<>;"=])/', '\\\\$1',is_null( $user)? "": $user));
+ }
- # cache the schema to prevent multiple schema fetches from LDAP server
-- set_cached_item($this->index,'schema','attributes',$return);
-+ set_cached_item($this->index,$return,'schema','attributes');
+ /**
+@@ -684,7 +686,7 @@ class ldap extends DS {
+
+ if (! in_array($this->getValue('login','auth_type'), array('sasl','sasl_external'))) {
+ // check if SASL mech uses login from other auth_types
+- if (! in_array(strtolower($this->getValue('sasl', 'mech')), array('plain')))
++ if (! in_array(strtolower((string) $this->getValue('sasl', 'mech')), array('plain')))
+ return false;
}
- if (DEBUG_ENABLED)
-@@ -2029,7 +2029,7 @@ class ldap extends DS {
- $return = $rules;
+@@ -722,7 +724,7 @@ class ldap extends DS {
+ }
- # cache the schema to prevent multiple schema fetches from LDAP server
-- set_cached_item($this->index,'schema','matchingrules',$return);
-+ set_cached_item($this->index,$return,'schema','matchingrules');
+ # At the moment, we have only implemented GSSAPI and PLAIN
+- if (! in_array(strtolower($this->getValue('sasl','mech')),array('gssapi','plain'))) {
++ if (! in_array(strtolower((string) $this->getValue('sasl','mech')),array('gssapi','plain'))) {
+ system_message(array(
+ 'title'=>_('SASL Method not implemented'),
+ 'body'=>sprintf('<b>%s</b>: %s %s',_('Error'),$this->getValue('sasl','mech'),_('has not been implemented yet')),
+@@ -731,7 +733,7 @@ class ldap extends DS {
+ return false;
}
+- if (strtolower($this->getValue('sasl','mech')) == 'plain') {
++ if (strtolower((string) $this->getValue('sasl','mech')) == 'plain') {
+ return @ldap_sasl_bind($resource,NULL,$pass,'PLAIN',
+ $this->getValue('sasl','realm'),
+ $login,
+@@ -746,14 +748,15 @@ class ldap extends DS {
+ /*
+ # Do we need to rewrite authz_id?
+ if (! isset($CACHE['authz_id']))
+- if (! trim($this->getValue('sasl','authz_id')) && strtolower($this->getValue('sasl','mech')) != 'gssapi') {
++ if (! trim((string) $this->getValue('sasl','authz_id')) && strtolower((string) $this->getValue('sasl','mech')) != 'gssapi') {
+ if (DEBUG_ENABLED)
+ debug_log('Rewriting bind DN [%s] -> authz_id with regex [%s] and replacement [%s].',9,0,__FILE__,__LINE__,__METHOD__,
+ $CACHE['login_dn'],
+ $this->getValue('sasl','authz_id_regex'),
+ $this->getValue('sasl','authz_id_replacement'));
+
+- $CACHE['authz_id'] = @preg_replace($this->getValue('sasl','authz_id_regex'),
++ $CACHE['authz_id'] = @preg_replace($this->getValue('sasl','authz_id_regex'),is_null(
++)? "":
+ $this->getValue('sasl','authz_id_replacement'),$CACHE['login_dn']);
+
+ # Invalid regex?
+@@ -1212,14 +1215,14 @@ class ldap extends DS {
+ if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
+ debug_log('Entered (%%)',17,0,__FILE__,__LINE__,__METHOD__,$fargs);
+
+- if (! trim($dn))
++ if (! trim((string) $dn))
+ return $dn;
+
+ # Check if the RDN has a comma and escape it.
+ while (preg_match('/([^\\\\]),(\s*[^=]*\s*),/',$dn))
+- $dn = preg_replace('/([^\\\\]),(\s*[^=]*\s*),/','$1\\\\2C$2,',$dn);
++ $dn = preg_replace('/([^\\\\]),(\s*[^=]*\s*),/','$1\\\\2C$2,',is_null($dn)? "":$dn);
+
+- $dn = preg_replace('/([^\\\\]),(\s*[^=]*\s*)([^,])$/','$1\\\\2C$2$3',$dn);
++ $dn = preg_replace('/([^\\\\]),(\s*[^=]*\s*)([^,])$/','$1\\\\2C$2$3',is_null($dn)? "":$dn);
+
if (DEBUG_ENABLED)
-@@ -2078,7 +2078,7 @@ class ldap extends DS {
+ debug_log('Returning (%s)',17,0,__FILE__,__LINE__,__METHOD__,$dn);
+@@ -1237,12 +1240,12 @@ class ldap extends DS {
+ if (is_array($dn)) {
+ $a = array();
+ foreach ($dn as $key => $rdn) {
+- $a[$key] = preg_replace_callback('/\\\([0-9A-Fa-f]{2})/', function($m) { return chr(hexdec($m[1])); }, $rdn);
++ $a[$key] = preg_replace_callback('/\\\([0-9A-Fa-f]{2})/', function($m) { return chr(hexdec($m[1])); },is_null( $rdn)? "": $rdn);
+ }
+ return $a;
+
+ } else {
+- return preg_replace_callback('/\\\([0-9A-Fa-f]{2})/', function($m) { return chr(hexdec($m[1])); }, $dn);
++ return preg_replace_callback('/\\\([0-9A-Fa-f]{2})/', function($m) { return chr(hexdec($m[1])); },is_null( $dn)? "": $dn);
+ }
+ }
+
+@@ -1388,7 +1391,7 @@ class ldap extends DS {
+ return false;
+
+ # error checking
+- $schema_to_fetch = strtolower($schema_to_fetch);
++ $schema_to_fetch = strtolower((string) $schema_to_fetch);
+
+ if (! is_null($this->_schema_entries) && isset($this->_schema_entries[$schema_to_fetch])) {
+ $schema = $this->_schema_entries[$schema_to_fetch];
+@@ -1408,7 +1411,7 @@ class ldap extends DS {
+ $schema_dn = $this->getSchemaDN($method,$dn);
+
+ # Do we need to try again with the Root DSE?
+- if (! $schema_dn && trim($dn))
++ if (! $schema_dn && trim((string) $dn))
+ $schema_dn = $this->getSchemaDN($method,'');
+
+ # Store the eventual schema retrieval in $schema_search
+@@ -1609,7 +1612,7 @@ class ldap extends DS {
+ foreach ($entry[$olc_schema] as $schema_definition)
+ /* Schema definitions in child nodes prefix the schema entries with "{n}"
+ the preg_replace call strips out this prefix. */
+- $schema[] = preg_replace('/^\{\d*\}\(/','(',$schema_definition);
++ $schema[] = preg_replace('/^\{\d*\}\(/','(',is_null($schema_definition)? "":$schema_definition);
+ }
+ }
+
+@@ -1672,7 +1675,7 @@ class ldap extends DS {
+ if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
+ debug_log('Entered (%%)',25,0,__FILE__,__LINE__,__METHOD__,$fargs);
+
+- $oclass_name = strtolower($oclass_name);
++ $oclass_name = strtolower((string) $oclass_name);
+ $socs = $this->SchemaObjectClasses($method,$dn);
+
+ # Default return value
+@@ -1703,7 +1706,7 @@ class ldap extends DS {
+ if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
+ debug_log('Entered (%%)',25,0,__FILE__,__LINE__,__METHOD__,$fargs);
+
+- $attr_name = strtolower($attr_name);
++ $attr_name = strtolower((string) $attr_name);
+ $sattrs = $this->SchemaAttributes($method,$dn);
+
+ # Default return value
+@@ -1752,7 +1755,7 @@ class ldap extends DS {
+ $return = array();
+
+ foreach ($raw as $line) {
+- if (is_null($line) || ! strlen($line))
++ if (is_null($line) || ! strlen((string) $line))
+ continue;
+
+ $object_class = new ObjectClass($line,$this);
+@@ -1762,8 +1765,8 @@ class ldap extends DS {
+ # Now go through and reference the parent/child relationships
+ foreach ($return as $oclass)
+ foreach ($oclass->getSupClasses() as $parent_name)
+- if (isset($return[strtolower($parent_name)]))
+- $return[strtolower($parent_name)]->addChildObjectClass($oclass->getName(false));
++ if (isset($return[strtolower((string) $parent_name)]))
++ $return[strtolower((string) $parent_name)]->addChildObjectClass($oclass->getName(false));
+
ksort($return);
- # cache the schema to prevent multiple schema fetches from LDAP server
-- set_cached_item($this->index,'schema','syntaxes',$return);
-+ set_cached_item($this->index,$return,'schema','syntaxes');
+@@ -1816,7 +1819,7 @@ class ldap extends DS {
+ */
+ $attrs_oid = array();
+ foreach ($raw as $line) {
+- if (is_null($line) || ! strlen($line))
++ if (is_null($line) || ! strlen((string) $line))
+ continue;
+
+ $attr = new AttributeType($line);
+@@ -1847,7 +1850,7 @@ class ldap extends DS {
+ $new_attr->setName($alias_attr_name);
+ $new_attr->addAlias($attr->getName(false));
+ $new_attr->removeAlias($alias_attr_name);
+- $new_attr_key = strtolower($alias_attr_name);
++ $new_attr_key = strtolower((string) $alias_attr_name);
+ $attrs[$new_attr_key] = $new_attr;
+ }
+ }
+@@ -1858,7 +1861,7 @@ class ldap extends DS {
+ $sup_attr_name = $attr->getSupAttribute();
+ $sup_attr = null;
+
+- if (trim($sup_attr_name)) {
++ if (trim((string) $sup_attr_name)) {
+
+ /* This loop really should traverse infinite levels of inheritance (SUP) for attributeTypes,
+ * but just in case we get carried away, stop at 100. This shouldn't happen, but for
+@@ -1871,17 +1874,17 @@ class ldap extends DS {
+ $sup_attr_name = $attr->getSupAttribute();
+ }
+
+- if (! isset($attrs[strtolower($sup_attr_name)])){
++ if (! isset($attrs[strtolower((string) $sup_attr_name)])){
+ error(sprintf('Schema error: attributeType "%s" inherits from "%s", but attributeType "%s" does not exist.',
+ $attr->getName(),$sup_attr_name,$sup_attr_name),'error','index.php');
+ return;
+ }
+
+- $sup_attr = $attrs[strtolower($sup_attr_name)];
++ $sup_attr = $attrs[strtolower((string) $sup_attr_name)];
+ $sup_attr_name = $sup_attr->getSupAttribute();
+
+ # Does this superior attributeType not have a superior attributeType?
+- if (is_null($sup_attr_name) || strlen(trim($sup_attr_name)) == 0) {
++ if (is_null($sup_attr_name) || strlen((string) trim((string) $sup_attr_name)) == 0) {
+
+ /* Since this attribute's superior attribute does not have another superior
+ * attribute, clone its properties for this attribute. Then, replace
+@@ -1936,18 +1939,18 @@ class ldap extends DS {
+
+ # Add Used In.
+ foreach ($oclass_attrs as $attr_name)
+- if (isset($attrs[strtolower($attr_name)]))
+- $attrs[strtolower($attr_name)]->addUsedInObjectClass($object_class->getName(false));
++ if (isset($attrs[strtolower((string) $attr_name)]))
++ $attrs[strtolower((string) $attr_name)]->addUsedInObjectClass($object_class->getName(false));
+
+ # Add Required By.
+ foreach ($must_attrs as $attr_name)
+- if (isset($attrs[strtolower($attr_name)]))
+- $attrs[strtolower($attr_name)]->addRequiredByObjectClass($object_class->getName(false));
++ if (isset($attrs[strtolower((string) $attr_name)]))
++ $attrs[strtolower((string) $attr_name)]->addRequiredByObjectClass($object_class->getName(false));
+
+ # Force May
+ foreach ($object_class->getForceMayAttrs() as $attr_name)
+- if (isset($attrs[strtolower($attr_name->name)]))
+- $attrs[strtolower($attr_name->name)]->setForceMay();
++ if (isset($attrs[strtolower((string) $attr_name->name)]))
++ $attrs[strtolower((string) $attr_name->name)]->setForceMay();
+ }
+
+ $return = $attrs;
+@@ -1987,7 +1990,7 @@ class ldap extends DS {
+ $rules = array();
+
+ foreach ($raw as $line) {
+- if (is_null($line) || ! strlen($line))
++ if (is_null($line) || ! strlen((string) $line))
+ continue;
+
+ $rule = new MatchingRule($line);
+@@ -2003,7 +2006,7 @@ class ldap extends DS {
+
+ if ($raw != false) {
+ foreach ($raw as $line) {
+- if (is_null($line) || ! strlen($line))
++ if (is_null($line) || ! strlen((string) $line))
+ continue;
+
+ $rule_use = new MatchingRuleUse($line);
+@@ -2019,7 +2022,7 @@ class ldap extends DS {
+ $sattrs = $this->SchemaAttributes($method,$dn);
+ if (is_array($sattrs))
+ foreach ($sattrs as $attr) {
+- $rule_key = strtolower($attr->getEquality());
++ $rule_key = strtolower((string) $attr->getEquality());
+
+ if (isset($rules[$rule_key]))
+ $rules[$rule_key]->addUsedByAttr($attr->getName(false));
+@@ -2063,11 +2066,11 @@ class ldap extends DS {
+ $return = array();
+
+ foreach ($raw as $line) {
+- if (is_null($line) || ! strlen($line))
++ if (is_null($line) || ! strlen((string) $line))
+ continue;
+
+ $syntax = new Syntax($line);
+- $key = strtolower(trim($syntax->getOID()));
++ $key = strtolower((string) trim((string) $syntax->getOID()));
+
+ if (! $key)
+ continue;
+@@ -2097,7 +2100,7 @@ class ldap extends DS {
+ if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
+ debug_log('Entered (%%)',17,0,__FILE__,__LINE__,__METHOD__,$fargs);
+
+- return in_array($attr_name,unserialize(strtolower(serialize($this->getValue('server','force_may')))));
++ return in_array($attr_name,unserialize(strtolower((string) serialize($this->getValue('server','force_may')))));
+ }
+
+ /**
+@@ -2133,7 +2136,7 @@ class ldap extends DS {
+ debug_log('Entered (%%)',17,0,__FILE__,__LINE__,__METHOD__,$fargs);
+
+ # Ensure our attr is in lowercase
+- $attr = strtolower($attr);
++ $attr = strtolower((string) $attr);
+
+ $values = $this->getDNAttrValues($dn,$method,$deref);
+
+@@ -2247,7 +2250,7 @@ class ldap extends DS {
+ # Simple test first
+ $dn_attrs = array('aliasedObjectName');
+ foreach ($dn_attrs as $dn_attr)
+- if (strcasecmp($attr_name,$dn_attr) == 0)
++ if (strcasecmp((string) $attr_name,(string) $dn_attr) == 0)
+ return true;
+
+ # Now look at the schema OID
+@@ -2266,7 +2269,7 @@ class ldap extends DS {
+ return false;
+
+ $syntax_desc = $syntaxes[ $syntax_oid ]->getDescription();
+- if (strpos(strtolower($syntax_desc),'distinguished name'))
++ if (strpos(strtolower((string) $syntax_desc),'distinguished name'))
+ return true;
+
+ return false;
+@@ -2286,7 +2289,7 @@ class ldap extends DS {
+ debug_log('Entered (%%)',17,0,__FILE__,__LINE__,__METHOD__,$fargs);
+
+ # easy quick check
+- if (! strcasecmp($attr_name,'jpegPhoto') || ! strcasecmp($attr_name,'photo'))
++ if (! strcasecmp((string) $attr_name,'jpegPhoto') || ! strcasecmp((string) $attr_name,'photo'))
+ return true;
+
+ # go to the schema and get the Syntax OID
+@@ -2297,7 +2300,7 @@ class ldap extends DS {
+ $oid = $sattr->getSyntaxOID();
+ $type = $sattr->getType();
+
+- if (! strcasecmp($type,'JPEG') || ($oid == '1.3.6.1.4.1.1466.115.121.1.28'))
++ if (! strcasecmp((string) $type,'JPEG') || ((string) $oid == '1.3.6.1.4.1.1466.115.121.1.28'))
+ return true;
+
+ return false;
+@@ -2318,9 +2321,9 @@ class ldap extends DS {
+
+ $type = ($sattr = $this->getSchemaAttribute($attr_name)) ? $sattr->getType() : null;
+
+- if (! strcasecmp('boolean',$type) ||
+- ! strcasecmp('isCriticalSystemObject',$attr_name) ||
+- ! strcasecmp('showInAdvancedViewOnly',$attr_name))
++ if (! strcasecmp('boolean',(string) $type) ||
++ ! strcasecmp('isCriticalSystemObject',(string) $attr_name) ||
++ ! strcasecmp('showInAdvancedViewOnly',(string) $attr_name))
+ return true;
+
+ else
+@@ -2359,7 +2362,7 @@ class ldap extends DS {
+
+ static $attr_cache;
+
+- $attr_name = strtolower($attr_name);
++ $attr_name = strtolower((string) $attr_name);
+
+ if (isset($attr_cache[$this->index][$attr_name]))
+ return $attr_cache[$this->index][$attr_name];
+@@ -2370,7 +2373,7 @@ class ldap extends DS {
}
- if (DEBUG_ENABLED)
+ # Quick check: If the attr name ends in ";binary", then it's binary.
+- if (strcasecmp(substr($attr_name,strlen($attr_name) - 7),';binary') == 0) {
++ if (strcasecmp(substr((string) $attr_name,strlen((string) (string) $attr_name) - 7),';binary') == 0) {
+ $attr_cache[$this->index][$attr_name] = true;
+ return true;
+ }
+@@ -2389,17 +2392,17 @@ class ldap extends DS {
+ $syntax = $sattr->getSyntaxOID();
+ }
+
+- if (strcasecmp($type,'Certificate') == 0 ||
+- strcasecmp($type,'Binary') == 0 ||
+- strcasecmp($attr_name,'usercertificate') == 0 ||
+- strcasecmp($attr_name,'usersmimecertificate') == 0 ||
+- strcasecmp($attr_name,'networkaddress') == 0 ||
+- strcasecmp($attr_name,'objectGUID') == 0 ||
+- strcasecmp($attr_name,'objectSID') == 0 ||
+- strcasecmp($attr_name,'auditingPolicy') == 0 ||
+- strcasecmp($attr_name,'jpegPhoto') == 0 ||
+- strcasecmp($attr_name,'krbExtraData') == 0 ||
+- strcasecmp($attr_name,'krbPrincipalKey') == 0 ||
++ if (strcasecmp((string) $type,'Certificate') == 0 ||
++ strcasecmp((string) $type,'Binary') == 0 ||
++ strcasecmp((string) $attr_name,'usercertificate') == 0 ||
++ strcasecmp((string) $attr_name,'usersmimecertificate') == 0 ||
++ strcasecmp((string) $attr_name,'networkaddress') == 0 ||
++ strcasecmp((string) $attr_name,'objectGUID') == 0 ||
++ strcasecmp((string) $attr_name,'objectSID') == 0 ||
++ strcasecmp((string) $attr_name,'auditingPolicy') == 0 ||
++ strcasecmp((string) $attr_name,'jpegPhoto') == 0 ||
++ strcasecmp((string) $attr_name,'krbExtraData') == 0 ||
++ strcasecmp((string) $attr_name,'krbPrincipalKey') == 0 ||
+ $syntax == '1.3.6.1.4.1.1466.115.121.1.10' ||
+ $syntax == '1.3.6.1.4.1.1466.115.121.1.28' ||
+ $syntax == '1.3.6.1.4.1.1466.115.121.1.5' ||
+@@ -2428,7 +2431,7 @@ class ldap extends DS {
+ if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
+ debug_log('Entered (%%)',17,0,__FILE__,__LINE__,__METHOD__,$fargs);
+
+- $user = strtolower($user);
++ $user = strtolower((string) $user);
+ $group = $this->getDNAttrValues($group);
+
+ # If you are using groupOfNames objectClass
+@@ -2459,7 +2462,7 @@ class ldap extends DS {
+ if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
+ debug_log('Entered (%%)',17,0,__FILE__,__LINE__,__METHOD__,$fargs);
+
+- $dn = trim(strtolower($dn));
++ $dn = trim((string) strtolower((string) $dn));
+
+ if (! $this->getValue('login','allowed_dns'))
+ return true;
+@@ -2498,7 +2501,7 @@ class ldap extends DS {
+ debug_log('Comparing with [%s]',80,0,__FILE__,__LINE__,__METHOD__,$result_dn);
+
+ # Check if $result_dn is a user DN
+- if (strcasecmp($dn,trim(strtolower($result_dn))) == 0)
++ if (strcasecmp((string) $dn,trim((string) strtolower((string) (string) $result_dn))) == 0)
+ return true;
+
+ # Check if $result_dn is a group DN
+@@ -2510,7 +2513,7 @@ class ldap extends DS {
+ }
+
+ # Check if $login_allowed_dn is a user DN
+- if (strcasecmp($dn,trim(strtolower($login_allowed_dn))) == 0)
++ if (strcasecmp((string) $dn,trim((string) strtolower((string) (string) $login_allowed_dn))) == 0)
+ return true;
+
+ # Check if $login_allowed_dn is a group DN