--- lib/Template.php.orig 2021-12-12 02:35:51 UTC +++ lib/Template.php @@ -100,7 +100,7 @@ class Template extends xmlTemplate { foreach ($xmldata['template'][$xml_key]['objectclass'] as $index => $details) { # XML files with only 1 objectClass dont have a numeric index. - $soc = $server->getSchemaObjectClass(strtolower($details)); + $soc = $server->getSchemaObjectClass(strtolower((string) $details)); # If we havent recorded this objectclass already, do so now. if (is_object($soc) && ! in_array($soc->getName(),$objectclasses)) @@ -115,7 +115,7 @@ class Template extends xmlTemplate { } else { # XML files with only 1 objectClass dont have a numeric index. - $soc = $server->getSchemaObjectClass(strtolower($xmldata['template'][$xml_key]['objectclass'])); + $soc = $server->getSchemaObjectClass(strtolower((string) $xmldata['template'][$xml_key]['objectclass'])); # If we havent recorded this objectclass already, do so now. if (is_object($soc) && ! in_array($soc->getName(),$objectclasses)) @@ -160,9 +160,9 @@ class Template extends xmlTemplate { if (in_array($xml_key,$storelower)) if (is_array($xml_value)) foreach ($xml_value as $index => $value) - $xml_value[$index] = strtolower($value); + $xml_value[$index] = strtolower((string) $value); else - $xml_value = strtolower($xml_value); + $xml_value = strtolower((string) $xml_value); # Items that must be stored as arrays if (in_array($xml_key,$storearray) && ! is_array($xml_value)) @@ -198,7 +198,7 @@ class Template extends xmlTemplate { # Check we have some manditory items. foreach (array('rdn','structural_oclass','visible') as $key) { if (! isset($this->$key) - || (! is_array($this->$key) && ! trim($this->$key))) { + || (! is_array($this->$key) && ! trim((string) $this->$key))) { $this->setInvalid(sprintf(_('Missing %s in the XML file.'),$key)); break; @@ -272,7 +272,7 @@ class Template extends xmlTemplate { 'body'=>sprintf('DN (%s) didnt exist in LDAP?',$this->dn), 'type'=>'info')); - $rdnarray = rdn_explode(strtolower(get_rdn(dn_escape($this->dn)))); + $rdnarray = rdn_explode(strtolower((string) get_rdn(dn_escape($this->dn)))); $counter = 1; foreach ($server->getDNAttrValues($this->dn,null,LDAP_DEREF_NEVER,array_merge(array('*'),$server->getValue('server','custom_attrs')),$nocache) as $attr => $values) { @@ -298,7 +298,7 @@ class Template extends xmlTemplate { # Work out the RDN attributes foreach ($attribute->getValues() as $index => $value) if (in_array(sprintf('%s=%s', - $attribute->getName(),strtolower($attribute->getValue($index))),$rdnarray)) + $attribute->getName(),strtolower((string) $attribute->getValue($index))),$rdnarray)) $attribute->setRDN($counter++); if ($makeVisible) @@ -355,7 +355,7 @@ class Template extends xmlTemplate { # Prune out entries with a blank value. foreach ($values as $index => $value) - if (! strlen(trim($value))) + if (! strlen((string) trim((string) $value))) unset($values[$index]); $attribute = $this->getAttribute($attr); @@ -603,7 +603,7 @@ class Template extends xmlTemplate { foreach ($rdnarray as $index => $rdnattr) { list($attr,$value) = explode('=',$rdnattr); - if (strtolower($attr) == $attribute->getName()) { + if (strtolower((string) $attr) == $attribute->getName()) { $attribute->setRDN($counter++); unset($rdnarray[$index]); } @@ -637,9 +637,9 @@ class Template extends xmlTemplate { public function getDNEncode($url=true) { // @todo Be nice to do all this in 1 location if ($url) - return urlencode(preg_replace('/%([0-9a-fA-F]+)/',"%25\\1",$this->getDN())); + return urlencode(preg_replace('/%([0-9a-fA-F]+)/',"%25\\1",is_null($this->getDN())? "":$this->getDN())); else - return preg_replace('/%([0-9a-fA-F]+)/',"%25\\1",$this->getDN()); + return preg_replace('/%([0-9a-fA-F]+)/',"%25\\1",is_null($this->getDN())? "":$this->getDN()); } /** @@ -676,9 +676,9 @@ class Template extends xmlTemplate { public function getContainerEncode($url=true) { // @todo Be nice to do all this in 1 location if ($url) - return urlencode(preg_replace('/%([0-9a-fA-F]+)/',"%25\\1",$this->container)); + return urlencode(preg_replace('/%([0-9a-fA-F]+)/',"%25\\1",is_null($this->container)? "":$this->container)); else - return preg_replace('/%([0-9a-fA-F]+)/',"%25\\1",$this->container); + return preg_replace('/%([0-9a-fA-F]+)/',"%25\\1",is_null($this->container)? "":$this->container); } /** @@ -707,7 +707,7 @@ class Template extends xmlTemplate { $modified = false; foreach ($rdnarray as $index => $rdnattr) { list($attr,$value) = explode('=',$rdnattr); - if (strtolower($attr) == $attribute->getName()) { + if (strtolower((string) $attr) == $attribute->getName()) { # If this is already marked as an RDN, then this multivalue RDN was updated on a previous loop if (! $modified) { @@ -726,7 +726,7 @@ class Template extends xmlTemplate { } // @todo If this is a Jpeg Attribute, we need to mark it read only, since it cant be deleted like text attributes can - if (strcasecmp(get_class($attribute),'jpegAttribute') == 0) + if (strcasecmp(get_class((string) $attribute),'jpegAttribute') == 0) $attribute->setReadOnly(); } @@ -761,7 +761,7 @@ class Template extends xmlTemplate { $result = array(); foreach ($this->attributes as $index => $attribute) { - if ($attribute->getLDAPtype() == strtolower($type)) + if ($attribute->getLDAPtype() == strtolower((string) $type)) array_push($result,$attribute->getName()); } @@ -775,7 +775,7 @@ class Template extends xmlTemplate { if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS')) debug_log('Entered (%%)',5,0,__FILE__,__LINE__,__METHOD__,$fargs); - if (in_array(strtolower($attr),$this->getAttrbyLdapType($type))) + if (in_array(strtolower((string) $attr),$this->getAttrbyLdapType($type))) return true; else return false; @@ -856,7 +856,7 @@ class Template extends xmlTemplate { } # Chop the last plus sign off when returning - return preg_replace('/\+$/','',$rdn); + return preg_replace('/\+$/','',is_null($rdn)? "":$rdn); } /** @@ -1166,25 +1166,25 @@ class Template extends xmlTemplate { $attribute->js['autoFill'] = ''; $formula = $string; - $formula = preg_replace('/^([^%])/','\'$1',$formula); - $formula = preg_replace('/([^%])$/','$1\'',$formula); + $formula = preg_replace('/^([^%])/','\'$1',is_null($formula)? "":$formula); + $formula = preg_replace('/([^%])$/','$1\'',is_null($formula)? "":$formula); # Check that our attributes match our schema attributes. foreach ($matchall[1] as $index => $checkattr) { $sattr = $this->getServer()->getSchemaAttribute($checkattr); # If the attribute is the same as in the XML file, then dont need to do anything. - if (! $sattr || ! strcasecmp($sattr->getName(),$checkattr)) + if (! (string) $sattr || ! strcasecmp((string) $sattr->getName(),(string) $checkattr)) continue; - $formula = preg_replace("/$checkattr/",$sattr->getName(),$formula); + $formula = preg_replace("/$checkattr/",$sattr->getName(),is_null($formula)? "":$formula); $matchall[1][$index] = $sattr->getName(); } $elem_id = 0; foreach ($matchall[0] as $index => $null) { - $match_attr = strtolower($matchall[1][$index]); + $match_attr = strtolower((string) $matchall[1][$index]); $match_subst = $matchall[2][$index]; $match_mod = $matchall[3][$index]; $match_delim = $matchall[4][$index]; @@ -1199,7 +1199,7 @@ class Template extends xmlTemplate { $js_match_attr = $match_attr; $match_attr = $js_match_attr.'xx'.$varcount[$match_attr]; - $formula = preg_replace('/%'.$js_match_attr.'([|\/%])/i','%'.$match_attr.'$1',$formula,1); + $formula = preg_replace('/%'.$js_match_attr.'([|\/%])/i','%'.$match_attr.'$1',$formula,is_null(1)? "":1); $attribute->js['autoFill'] .= sprintf(" var %s;\n",$match_attr); $attribute->js['autoFill'] .= sprintf( @@ -1216,7 +1216,7 @@ class Template extends xmlTemplate { $elem_id++; if (strstr($match_mod,'k')) { - preg_match_all('/([0-9]+)/',trim($match_subst),$substrarray); + preg_match_all('/([0-9]+)/',trim((string) $match_subst),$substrarray); if (isset($substrarray[1][0])) { $tok_idx = $substrarray[1][0]; } else { @@ -1225,7 +1225,7 @@ class Template extends xmlTemplate { $attribute->js['autoFill'] .= sprintf(" %s = %s.split(':')[%s];\n",$match_attr,$match_attr,$tok_idx); } elseif (strstr($match_mod,'K')) { - preg_match_all('/([0-9]+)/',trim($match_subst),$substrarray); + preg_match_all('/([0-9]+)/',trim((string) $match_subst),$substrarray); if (isset($substrarray[1][0])) { $tok_idx = $substrarray[1][0]; } else { @@ -1240,7 +1240,7 @@ class Template extends xmlTemplate { $attribute->js['autoFill'] .= sprintf(" %s = %s.split('%s')[%s];\n",$match_attr,$match_attr,$delimiter,$tok_idx); } else { - preg_match_all('/([0-9]*)-([0-9]*)/',trim($match_subst),$substrarray); + preg_match_all('/([0-9]*)-([0-9]*)/',trim((string) $match_subst),$substrarray); if ((isset($substrarray[1][0]) && $substrarray[1][0]) || (isset($substrarray[2][0]) && $substrarray[2][0])) { $attribute->js['autoFill'] .= sprintf(" %s = %s.substr(%s,%s);\n", $match_attr,$match_attr, @@ -1260,19 +1260,19 @@ class Template extends xmlTemplate { } # Matchfor only entry without modifiers. - $formula = preg_replace('/^%('.$match_attr.')%$/U','$1 + \'\'',$formula); + $formula = preg_replace('/^%('.$match_attr.')%$/U','$1 + \'\'',is_null($formula)? "":$formula); # Matchfor only entry with modifiers. - $formula = preg_replace('/^%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[KklTUA]+)?(?:\|(.))?%$/U','$1 + \'\'',$formula); + $formula = preg_replace('/^%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[KklTUA]+)?(?:\|(.))?%$/U','$1 + \'\'',is_null($formula)? "":$formula); # Matchfor begining entry. - $formula = preg_replace('/^%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[KklTUA]+)?(?:\|(.))?%/U','$1 + \'',$formula); + $formula = preg_replace('/^%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[KklTUA]+)?(?:\|(.))?%/U','$1 + \'',is_null($formula)? "":$formula); # Matchfor ending entry. - $formula = preg_replace('/%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[KklTUA]+)?(?:\|(.))?%$/U','\' + $1 ',$formula); + $formula = preg_replace('/%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[KklTUA]+)?(?:\|(.))?%$/U','\' + $1 ',is_null($formula)? "":$formula); # Match for entries not at begin/end. - $formula = preg_replace('/%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[KklTUA]+)?(?:\|(.))?%/U','\' + $1 + \'',$formula); + $formula = preg_replace('/%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[KklTUA]+)?(?:\|(.))?%/U','\' + $1 + \'',is_null($formula)? "":$formula); $attribute->js['autoFill'] .= "\n"; } - $attribute->js['autoFill'] .= sprintf(" fillRec(pre+'%s'+suf, %s); // %s\n",strtolower($attr),$formula,$string); + $attribute->js['autoFill'] .= sprintf(" fillRec(pre+'%s'+suf, %s); // %s\n",strtolower((string) $attr),$formula,$string); $attribute->js['autoFill'] .= "\n"; break; @@ -1333,7 +1333,7 @@ class Template extends xmlTemplate { $this->setMinValueCount($sattr->getName(),1); # We need to mark the attributes as show, except for the objectclass attribute. - if (strcasecmp('objectClass',$objectclassattr) != 0) { + if (strcasecmp('objectClass',(string) $objectclassattr) != 0) { $attribute = $this->getAttribute($sattr->getName()); $attribute->show(); }