2007-03-29 18:10:14 +02:00
< ? php
/*******************************************************************************
* Copyright ( C ) 2007 Easter - eggs
* http :// ldapsaisie . labs . libre - entreprise . org
*
* Author : See AUTHORS file in top - level directory .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
******************************************************************************/
/**
2008-04-25 16:09:27 +02:00
* Construction d ' une chaine formatée
2007-03-29 18:10:14 +02:00
*
2008-04-25 16:09:27 +02:00
* Cette fonction retourne la valeur d ' une chaine formatée selon le format
* et les données passés en paramètre .
2007-03-29 18:10:14 +02:00
*
* @ author Benjamin Renard < brenard @ easter - eggs . com >
*
* @ param [ in ] $format string Format de la chaine
2008-04-25 16:09:27 +02:00
* @ param [ in ] $data mixed Les données pour composés la chaine
* Ce paramètre peut être un tableau de string , une string ,
2007-03-29 18:10:14 +02:00
* une tableau d ' objet ou un objet .
2008-04-25 16:09:27 +02:00
* @ param [ in ] $meth string Le nom de la methode de / des objet ( s ) à appeler pour
* obtenir la valeur de remplacement dans la chaine formatée .
2007-03-29 18:10:14 +02:00
*
2008-04-25 16:09:27 +02:00
* @ retval string La chaine formatée
2007-03-29 18:10:14 +02:00
*/
function getFData ( $format , $data , $meth = NULL ) {
2007-11-15 19:07:24 +01:00
$unique = false ;
2008-10-27 15:06:49 +01:00
$expr = " % { ([A-Za-z0-9]+)( \ :(-?[0-9])+)?( \ :(-?[0-9])+)?} " ;
2007-11-15 19:07:24 +01:00
if ( ! is_array ( $format )) {
$format = array ( $format );
$unique = true ;
}
for ( $i = 0 ; $i < count ( $format ); $i ++ ) {
if ( is_array ( $data )) {
if ( $meth == NULL ) {
2008-10-27 15:06:49 +01:00
while ( ereg ( $expr , $format [ $i ], $ch )) {
2008-11-09 02:06:30 +01:00
if ( is_array ( $data [ $ch [ 1 ]])) {
$val = $data [ $ch [ 1 ]][ 0 ];
}
else {
$val = $data [ $ch [ 1 ]];
}
2008-10-27 15:06:49 +01:00
if ( $ch [ 3 ]) {
if ( $ch [ 5 ]) {
$s = $ch [ 3 ];
$l = $ch [ 5 ];
}
else {
$s = 0 ;
$l = $ch [ 3 ];
}
2008-11-09 02:06:30 +01:00
$val = substr (( string ) $val , $s , $l );
2008-10-27 15:06:49 +01:00
}
$format [ $i ] = ereg_replace ( $ch [ 0 ], $val , $format [ $i ]);
2007-03-29 18:10:14 +02:00
}
2007-11-15 19:07:24 +01:00
}
else {
2008-10-27 15:06:49 +01:00
while ( ereg ( $expr , $format [ $i ], $ch )) {
2007-11-15 19:07:24 +01:00
if ( method_exists ( $data [ $ch [ 1 ]], $meth )) {
2008-07-29 15:45:02 +02:00
$value = $data [ $ch [ 1 ]] -> $meth ();
if ( is_array ( $value )) {
$value = $value [ 0 ];
}
2008-10-27 15:06:49 +01:00
if ( $ch [ 3 ]) {
if ( $ch [ 5 ]) {
$s = $ch [ 3 ];
$l = $ch [ 5 ];
}
else {
$s = 0 ;
$l = $ch [ 3 ];
}
$value = substr (( string ) $value , $s , $l );
}
2008-07-29 15:45:02 +02:00
$format [ $i ] = ereg_replace ( $ch [ 0 ], $value , $format [ $i ]);
2007-11-15 19:07:24 +01:00
}
else {
2009-01-24 18:45:14 +01:00
LSerror :: addErrorCode ( 'fct_getFData_01' , array ( 'meth' => $meth , 'obj' => $ch [ 1 ]));
2007-11-15 19:07:24 +01:00
break ;
}
2007-03-29 18:10:14 +02:00
}
}
}
else {
2007-11-15 19:07:24 +01:00
if ( $meth == NULL ) {
2008-10-27 15:06:49 +01:00
while ( ereg ( $expr , $format [ $i ], $ch )) {
if ( $ch [ 3 ]) {
if ( $ch [ 5 ]) {
$s = $ch [ 3 ];
$l = $ch [ 5 ];
}
else {
$s = 0 ;
$l = $ch [ 3 ];
}
$val = substr (( string ) $data , $s , $l );
}
else {
$val = $data ;
}
$format [ $i ] = ereg_replace ( $ch [ 0 ], $val , $format [ $i ]);
}
2007-11-15 19:07:24 +01:00
}
else {
2008-10-27 15:06:49 +01:00
while ( ereg ( $expr , $format [ $i ], $ch )) {
2007-11-15 19:07:24 +01:00
if ( method_exists ( $data , $meth )) {
2008-07-29 15:45:02 +02:00
$value = $data -> $meth ( $ch [ 1 ]);
if ( is_array ( $value )) {
$value = $value [ 0 ];
}
2008-10-27 15:06:49 +01:00
if ( $ch [ 3 ]) {
if ( $ch [ 5 ]) {
$s = $ch [ 3 ];
$l = $ch [ 5 ];
}
else {
$s = 0 ;
$l = $ch [ 3 ];
}
$value = substr (( string ) $value , $s , $l );
}
2008-07-29 15:45:02 +02:00
$format [ $i ] = ereg_replace ( $ch [ 0 ], $value , $format [ $i ]);
2007-11-15 19:07:24 +01:00
}
else {
2009-01-25 15:37:03 +01:00
LSerror :: addErrorCode ( 0 , getFData ( _ ( " Function 'getFData' : The method % { meth} of the object % { obj} doesn't exist. " ), array ( 'meth' => $meth , 'obj' => get_class ( $data ))));
2007-11-15 19:07:24 +01:00
break ;
}
2007-03-29 18:10:14 +02:00
}
}
}
}
2007-11-15 19:07:24 +01:00
if ( $unique ) {
return $format [ 0 ];
}
2007-03-29 18:10:14 +02:00
return $format ;
}
2008-11-09 01:57:50 +01:00
function getFieldInFormat ( $format ) {
$fields = array ();
$expr = " % { ([A-Za-z0-9]+)( \ :(-?[0-9])+)?( \ :(-?[0-9])+)?} " ;
while ( ereg ( $expr , $format , $ch )) {
$fields [] = $ch [ 1 ];
$format = ereg_replace ( $ch [ 0 ], '' , $format );
}
return $fields ;
}
2008-02-05 17:11:21 +01:00
function loadDir ( $dir , $regexpr = '^.*\.php$' ) {
2008-02-08 18:39:24 +01:00
if ( $handle = opendir ( $dir )) {
while ( false !== ( $file = readdir ( $handle ))) {
if ( ereg ( $regexpr , $file )) {
require_once ( $dir . '/' . $file );
}
}
}
else {
2009-02-14 00:06:58 +01:00
die ( _ ( 'Unknown folder (' . $dir . ').' ));
2008-02-08 18:39:24 +01:00
}
return true ;
2008-02-05 17:11:21 +01:00
}
2007-03-29 18:10:14 +02:00
function valid ( $obj ) {
2008-09-26 20:03:56 +02:00
LSdebug ( 'Validation : ok' );
2007-03-29 18:10:14 +02:00
return true ;
}
2009-01-21 18:08:09 +01:00
function validPas ( $obj = null ) {
LSdebug ( 'Validation : nok' );
return false ;
}
2007-03-29 18:10:14 +02:00
function return_data ( $data ) {
return $data ;
}
2009-01-02 17:00:25 +01:00
$GLOBALS [ 'LSdebug' ][ 'fields' ] = array ();
2008-09-26 20:03:56 +02:00
function LSdebug ( $data , $dump = false ) {
if ( $dump ) {
ob_start ();
var_dump ( $data );
$GLOBALS [ 'LSdebug' ][ 'fields' ][] = ob_get_contents ();
ob_end_clean ();
}
else {
2008-06-05 15:21:18 +02:00
if ( is_array ( $data ) || is_object ( $data )) {
2008-02-08 18:39:24 +01:00
$GLOBALS [ 'LSdebug' ][ 'fields' ][] = $data ;
}
else {
$GLOBALS [ 'LSdebug' ][ 'fields' ][] = " [ $data ] " ;
}
}
return true ;
2007-11-15 19:07:24 +01:00
}
2008-09-26 20:03:56 +02:00
function LSdebug_print ( $return = false ) {
2008-02-08 18:39:24 +01:00
if (( $GLOBALS [ 'LSdebug' ][ 'fields' ] ) && ( $GLOBALS [ 'LSdebug' ][ 'active' ] )) {
$txt = '<ul>' ;
foreach ( $GLOBALS [ 'LSdebug' ][ 'fields' ] as $debug ) {
2008-06-05 15:21:18 +02:00
if ( is_array ( $debug ) || is_object ( $debug )) {
2008-02-08 18:39:24 +01:00
$txt .= '<li><pre>' . print_r ( $debug , true ) . '</pre></li>' ;
}
else {
$txt .= '<li>' . $debug . '</li>' ;
}
}
$txt .= '</ul>' ;
$GLOBALS [ 'Smarty' ] -> assign ( 'LSdebug' , $txt );
2008-06-05 15:21:18 +02:00
if ( $return ) {
return $txt ;
}
2008-02-08 18:39:24 +01:00
}
2008-06-05 15:21:18 +02:00
return ;
2007-11-15 19:07:24 +01:00
}
2008-10-13 12:58:48 +02:00
function LSdebugDefined () {
if ( ! $GLOBALS [ 'LSdebug' ][ 'active' ])
return ;
return ( ! empty ( $GLOBALS [ 'LSdebug' ][ 'fields' ]));
}
2008-02-08 18:39:24 +01:00
/**
2008-04-25 16:09:27 +02:00
* Vérifie la compatibilite des DN
2008-02-08 18:39:24 +01:00
*
2008-04-25 16:09:27 +02:00
* Vérifie que les DNs sont dans la même branche de l ' annuaire .
2008-02-08 18:39:24 +01:00
*
* @ param [ in ] $dn Un premier DN .
2008-04-25 16:09:27 +02:00
* @ param [ in ] $dn Un deuxième DN .
2008-02-08 18:39:24 +01:00
*
* @ author Benjamin Renard < brenard @ easter - eggs . com >
*
* @ retval boolean true si les DN sont compatibles , false sinon .
*/
function isCompatibleDNs ( $dn1 , $dn2 ) {
$infos1 = ldap_explode_dn ( $dn1 , 0 );
if ( ! $infos1 )
return ;
$infos2 = ldap_explode_dn ( $dn2 , 0 );
if ( ! $infos2 )
return ;
if ( $infos2 [ 'count' ] > $infos1 [ 'count' ]) {
$tmp = $infos1 ;
$infos1 = $infos2 ;
$infos2 = $tmp ;
}
$infos1 = array_reverse ( $infos1 );
$infos2 = array_reverse ( $infos2 );
for ( $i = 0 ; $i < $infos1 [ 'count' ]; $i ++ ) {
if (( $infos1 [ $i ] == $infos2 [ $i ]) || ( ! isset ( $infos2 [ $i ])))
continue ;
else
return false ;
}
return true ;
}
/**
* Fait la somme de DN
*
2008-04-25 16:09:27 +02:00
* Retourne un DN qui correspond au point de séparation des DN si les DN
2008-02-08 18:39:24 +01:00
* ne sont pas dans la meme dans la meme branche ou le dn le plus long sinon .
*
* @ param [ in ] $dn Un premier DN .
2008-04-25 16:09:27 +02:00
* @ param [ in ] $dn Un deuxième DN .
2008-02-08 18:39:24 +01:00
*
* @ author Benjamin Renard < brenard @ easter - eggs . com >
*
* @ retval string Un DN ( ou false si les DN ne sont pas valide )
*/
function sumDn ( $dn1 , $dn2 ) {
$infos1 = ldap_explode_dn ( $dn1 , 0 );
if ( ! $infos1 )
return ;
$infos2 = ldap_explode_dn ( $dn2 , 0 );
if ( ! $infos2 )
return ;
if ( $infos2 [ 'count' ] > $infos1 [ 'count' ]) {
$tmp = $infos1 ;
$infos1 = $infos2 ;
$infos2 = $tmp ;
}
$infos1 = array_reverse ( $infos1 );
$infos2 = array_reverse ( $infos2 );
$first = true ;
$basedn = '' ;
for ( $i = 0 ; $i < $infos1 [ 'count' ]; $i ++ ) {
if (( $infos1 [ $i ] == $infos2 [ $i ]) || ( ! isset ( $infos2 [ $i ]))) {
if ( $first ) {
$basedn = $infos1 [ $i ];
$first = false ;
}
else
$basedn = $infos1 [ $i ] . ',' . $basedn ;
}
else {
return $basedn ;
}
}
return $basedn ;
}
2008-06-05 15:21:18 +02:00
2008-10-07 16:59:23 +02:00
function checkEmail ( $value , $domain = NULL , $checkDns = true ) {
2009-02-12 15:39:44 +01:00
$regex = '/^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/' ;
2008-06-05 15:21:18 +02:00
if ( ! preg_match ( $regex , $value )) {
2008-09-26 20:03:56 +02:00
LSdebug ( 'checkEmail : regex fail' );
2008-06-05 15:21:18 +02:00
return false ;
}
2009-02-12 15:39:44 +01:00
$nd = explode ( '@' , $value );
$nd = $nd [ 1 ];
if ( $domain ) {
if ( is_array ( $domain )) {
if ( ! in_array ( $nd , $domain )) {
return false ;
}
}
else {
if ( $nd != $domain ) {
return false ;
}
}
}
2008-06-05 15:21:18 +02:00
if ( $checkDns && function_exists ( 'checkdnsrr' )) {
2009-02-12 15:39:44 +01:00
if ( ! ( checkdnsrr ( $nd , 'MX' ) || checkdnsrr ( $nd , 'A' ))) {
2008-09-26 20:03:56 +02:00
LSdebug ( 'checkEmail : DNS fail' );
2008-06-05 15:21:18 +02:00
return false ;
}
}
return true ;
}
function generatePassword ( $chars = NULL , $lenght = NULL ) {
2008-12-06 00:42:47 +01:00
if ( ! $lenght ) {
$lenght = 8 ;
}
if ( is_array ( $chars )) {
$retval = '' ;
foreach ( $chars as $chs ) {
if ( ! is_array ( $chs )) {
$chs = array ( 'chars' => $chs );
}
if ( ! is_int ( $chs [ 'nb' ])) {
$chs [ 'nb' ] = 1 ;
}
$retval .= aleaChar ( $chs [ 'chars' ], $chs [ 'nb' ]);
}
$add = ( $lenght - strlen ( $retval ));
if ( $add > 0 ) {
$retval .= aleaChar ( $chars , $add );
}
return str_shuffle ( $retval );
} else {
return aleaChar ( $chars , $lenght );
}
}
function aleaChar ( $chars = NULL , $lenght = 1 ) {
if ( is_array ( $chars )) {
$nchars = " " ;
foreach ( $chars as $chs ) {
if ( is_string ( $chs )) {
$nchars .= $chs ;
}
else if ( is_string ( $chs [ 'chars' ])) {
$nchars .= $chs [ 'chars' ];
}
}
if ( strlen ( $chars ) > 0 ) {
$chars = $nchars ;
}
else {
$chars = NULL ;
}
}
2008-06-05 15:21:18 +02:00
if ( ! $chars ) {
2008-12-06 00:42:47 +01:00
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-' ;
2008-06-05 15:21:18 +02:00
}
$nbChars = strlen ( $chars );
2008-12-06 00:42:47 +01:00
$retval = " " ;
if ( is_int ( $lenght )) {
for ( $i = 0 ; $i < $lenght ; $i ++ ) {
$retval .= $chars [ rand ( 0 , $nbChars - 1 )];
}
2008-06-05 15:21:18 +02:00
}
2008-12-06 00:42:47 +01:00
return $retval ;
2008-06-05 15:21:18 +02:00
}
2008-06-18 14:27:35 +02:00
function compareDn ( $a , $b ) {
if ( substr_count ( $a , ',' ) > substr_count ( $b , ',' ))
return - 1 ;
else
return 1 ;
}
2009-01-21 18:08:09 +01:00
function LSlog ( $msg ) {
if ( $GLOBALS [ 'LSlog' ][ 'enable' ]) {
global $LSlogFile ;
if ( ! $LSlogFile ) {
$LSlogFile = fopen ( $GLOBALS [ 'LSlog' ][ 'filename' ], 'a' );
}
fwrite ( $LSlogFile , $_SERVER [ 'REQUEST_URI' ] . " : " . $msg . " \n " );
}
}
2007-11-15 19:07:24 +01:00
?>