From f3d6b10a9e92e6b46b197ed442665fa33e874d32 Mon Sep 17 00:00:00 2001 From: Benjamin Renard Date: Mon, 20 Mar 2023 16:08:35 +0100 Subject: [PATCH] LSldap: add possibility to configure hooks --- src/includes/class/class.LSldap.php | 209 +++++++++++++++++- src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo | Bin 81461 -> 81834 bytes src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po | 145 ++++++------ src/lang/ldapsaisie.pot | 136 ++++++------ 4 files changed, 350 insertions(+), 140 deletions(-) diff --git a/src/includes/class/class.LSldap.php b/src/includes/class/class.LSldap.php index 11870228..9f67cbe4 100644 --- a/src/includes/class/class.LSldap.php +++ b/src/includes/class/class.LSldap.php @@ -51,6 +51,14 @@ class LSldap extends LSlog_staticLoggerClass { */ private static $cnx = NULL; + /** + * Registered events + * @see self::addEvent() + * @see self::fireEvent() + * @var array + */ + private static $_events = array(); + /** * Set configuration * @@ -81,12 +89,16 @@ class LSldap extends LSlog_staticLoggerClass { if ($config) { self :: setConfig($config); } + if (!self :: fireEvent('connecting')) + return false; self :: $cnx = Net_LDAP2::connect(self :: $config); if (Net_LDAP2::isError(self :: $cnx)) { + self :: fireEvent('connection_failure', array('error' => self :: $cnx -> getMessage())); LSerror :: addErrorCode('LSldap_01',self :: $cnx -> getMessage()); self :: $cnx = NULL; return false; } + self :: fireEvent('connected'); return true; } @@ -112,12 +124,19 @@ class LSldap extends LSlog_staticLoggerClass { $config = self :: $config; $config['binddn'] = $dn; $config['bindpw'] = $pwd; + if (!self :: fireEvent('reconnecting', array('dn' => $dn))) + return false; self :: $cnx = Net_LDAP2::connect($config); if (Net_LDAP2::isError(self :: $cnx)) { + self :: fireEvent( + 'reconnection_failure', + array('dn' => $dn, 'error' => self :: $cnx -> getMessage()) + ); LSerror :: addErrorCode('LSldap_01', self :: $cnx -> getMessage()); self :: $cnx = NULL; return false; } + self :: fireEvent('reconnected', array('dn' => $dn)); return true; } @@ -134,6 +153,8 @@ class LSldap extends LSlog_staticLoggerClass { if (!self :: $cnx) { self :: connect(); } + if (!self :: fireEvent('setting_authz_proxy', array('dn' => $dn))) + return false; $result = self :: $cnx -> setOption( 'LDAP_OPT_SERVER_CONTROLS', array ( @@ -147,9 +168,11 @@ class LSldap extends LSlog_staticLoggerClass { // Also check user exists to validate the connection with // authz proxy control. if ($result !== True || !self :: exists($dn)) { + self :: fireEvent('setting_authz_proxy_failure', array('dn' => $dn)); LSerror :: addErrorCode('LSldap_09'); return False; } + self :: fireEvent('set_authz_proxy', array('dn' => $dn)); return True; } @@ -163,8 +186,11 @@ class LSldap extends LSlog_staticLoggerClass { * @return void */ public static function close() { + if (!self :: fireEvent('closing')) + return; self :: $cnx -> done(); self :: $cnx = null; + self :: fireEvent('closed'); } /** @@ -457,12 +483,12 @@ class LSldap extends LSlog_staticLoggerClass { * * @param string $object_type The object type * @param string $dn DN of the LDAP object - * @param array $change Array of object attributes changes + * @param array $changes Array of object attributes changes * * @return boolean True if object was updated, False otherwise. */ - public static function update($object_type, $dn, $change) { - self :: log_trace("update($object_type, $dn): change=".varDump($change)); + public static function update($object_type, $dn, $changes) { + self :: log_trace("update($object_type, $dn): change=".varDump($changes)); // Retrieve current LDAP entry $entry = self :: getEntry($object_type, $dn); @@ -471,10 +497,18 @@ class LSldap extends LSlog_staticLoggerClass { return false; } + if ( + !self :: fireEvent( + 'updating', + array('object_type' => $object_type, 'dn' => $dn, 'entry' => &$entry, 'changes' => $changes) + ) + ) + return false; + // Distinguish drop attributes from change attributes $changed_attrs = array(); $dropped_attrs = array(); - foreach($change as $attrName => $attrVal) { + foreach($changes as $attrName => $attrVal) { $drop = true; if (is_array($attrVal)) { foreach($attrVal as $val) { @@ -508,6 +542,9 @@ class LSldap extends LSlog_staticLoggerClass { } } + // Keep original entry (to provide to hooks) + $original_entry = clone $entry; + // Handle attributes changes (if need) if ($changed_attrs) { @@ -522,10 +559,26 @@ class LSldap extends LSlog_staticLoggerClass { } if (Net_LDAP2::isError($ret)) { + self :: fireEvent( + 'update_failure', + array( + 'object_type' => $object_type, 'dn' => $dn, + 'original_entry' => &$original_entry, 'entry' => &$entry, + 'changes' => $changed_attrs, 'error' => $ret->getMessage() + ) + ); LSerror :: addErrorCode('LSldap_05',$dn); LSerror :: addErrorCode(0,'NetLdap-Error : '.$ret->getMessage()); return false; } + self :: fireEvent( + 'updated', + array( + 'object_type' => $object_type, 'dn' => $dn, + 'original_entry' => &$original_entry, 'entry' => &$entry, + 'changes' => $changed_attrs + ) + ); } elseif ($entry -> isNew()) { self :: log_error("update($object_type, $dn): no changed attribute but it's a new entry..."); @@ -561,10 +614,26 @@ class LSldap extends LSlog_staticLoggerClass { // Check result if (Net_LDAP2::isError($ret)) { + self :: fireEvent( + 'update_failure', + array( + 'object_type' => $object_type, 'dn' => $dn, + 'original_entry' => &$original_entry, 'entry' => &$entry, + 'changes' => $replace_attrs, 'error' => $ret->getMessage() + ) + ); LSerror :: addErrorCode('LSldap_06'); LSerror :: addErrorCode(0,'NetLdap-Error : '.$ret->getMessage()); return false; } + self :: fireEvent( + 'updated', + array( + 'object_type' => $object_type, 'dn' => $dn, + 'original_entry' => &$original_entry, 'entry' => &$entry, + 'changes' => $replace_attrs + ) + ); } return true; } @@ -607,11 +676,15 @@ class LSldap extends LSlog_staticLoggerClass { * @return boolean True if object was removed, False otherwise. */ public static function remove($dn) { + if (!self :: fireEvent('removing', array('dn' => $dn))) + return false; $ret = self :: $cnx -> delete($dn,array('recursive' => true)); if (Net_LDAP2::isError($ret)) { + self :: fireEvent('remove_failure', array('dn' => $dn, 'error' => $ret->getMessage())); LSerror :: addErrorCode(0,'NetLdap-Error : '.$ret->getMessage()); return false; } + self :: fireEvent('removed', array('dn' => $dn)); return true; } @@ -624,12 +697,19 @@ class LSldap extends LSlog_staticLoggerClass { * @return boolean True if object was moved, False otherwise. */ public static function move($old, $new) { + if (!self :: fireEvent('moving', array('old' => $old, 'new' => $new))) + return false; $ret = self :: $cnx -> move($old, $new); if (Net_LDAP2::isError($ret)) { + self :: fireEvent( + 'move_failure', + array('old' => $old, 'new' => $new, 'error' => $ret->getMessage()) + ); LSerror :: addErrorCode('LSldap_07'); LSerror :: addErrorCode(0,'NetLdap-Error : '.$ret->getMessage()); return false; } + self :: fireEvent('moved', array('old' => $old, 'new' => $new)); return true; } @@ -721,22 +801,63 @@ class LSldap extends LSlog_staticLoggerClass { _('It is too soon to change the password'), _('This password was recently used and cannot be used again'), ); - self :: log_debug("update($object_type, $dn): update entry for userPassword"); + self :: log_debug("updateUserPassword($object_type, $dn): update entry userPassword attribute"); + $changes = array('userPassword' => self :: getAttr($changed_attrs, 'userPassword', true)); + + if ( + !self :: fireEvent( + 'user_password_updating', + array( + 'object_type' => $object_type, 'dn' => $dn, + 'new_passwords' => $changes['userPassword'] + ) + ) + ) + return false; + $ldap = self :: $cnx->getLink(); - $attr = array('userPassword' => self :: getAttr($changed_attrs, 'userPassword')); $ctrlRequest = array(array('oid' => LDAP_CONTROL_PASSWORDPOLICYREQUEST)); - $r = ldap_mod_replace_ext($ldap, $dn, $attr, $ctrlRequest); + $r = ldap_mod_replace_ext($ldap, $dn, $changes, $ctrlRequest); if ($r && ldap_parse_result($ldap, $r, $errcode, $matcheddn, $errmsg, $ref, $ctrlResponse)) { if ($errcode !== 0 && isset($ctrlResponse[LDAP_CONTROL_PASSWORDPOLICYRESPONSE])) { - LSerror :: addErrorCode('LSldap_10', $ppolicyErrorMsg[$ctrlResponse[LDAP_CONTROL_PASSWORDPOLICYRESPONSE]['value']['error']]); + self :: fireEvent( + 'user_password_update_failure', + array( + 'object_type' => $object_type, 'dn' => $dn, + 'error' => $ppolicyErrorMsg[ + $ctrlResponse[LDAP_CONTROL_PASSWORDPOLICYRESPONSE]['value']['error'] + ] + ) + ); + LSerror :: addErrorCode( + 'LSldap_10', + $ppolicyErrorMsg[$ctrlResponse[LDAP_CONTROL_PASSWORDPOLICYRESPONSE]['value']['error']] + ); return false; } - // If everything OK, remove userPassword to prevent it from being processed by Net_LDAP2 + // Password updated + self :: fireEvent( + 'user_password_updated', + array( + 'object_type' => $object_type, 'dn' => $dn, + 'new_passwords' => $changes['userPassword'] + ) + ); + // Remove userPassword to prevent it from being processed by update() unset($changed_attrs['userPassword']); - } else { + } + else { + self :: fireEvent( + 'user_password_update_failure', + array( + 'object_type' => $object_type, 'dn' => $dn, + 'error' => ldap_errno($ldap) !== 0?ldap_error($ldap):'unknown' + ) + ); if (ldap_errno($ldap) !== 0) { LSerror :: addErrorCode('LSldap_10', ldap_error($ldap)); - } else { + } + else { LSerror :: addErrorCode('LSldap_11'); } return false; @@ -756,6 +877,66 @@ class LSldap extends LSlog_staticLoggerClass { private static function getConfig($param, $default=null, $cast=null) { return LSconfig :: get($param, $default, $cast, self :: $config); } + + /** + * Registered an action on a specific event + * + * @param string $event The event name + * @param callable $callable The callable to run on event + * @param array $params Paremeters that will be pass to the callable + * + * @return void + */ + public static function addEvent($event, $callable, $params=NULL) { + self :: $_events[$event][] = array( + 'callable' => $callable, + 'params' => is_array($params)?$params:array(), + ); + } + + /** + * Run triggered actions on specific event + * + * @param string $event Event name + * @param mixed $data Event data + * + * @return boolean True if all triggered actions succefully runned, false otherwise + */ + public static function fireEvent($event, $data=null) { + $return = true; + + // Binding via addEvent + if (isset(self :: $_events[$event]) && is_array(self :: $_events[$event])) { + foreach (self :: $_events[$event] as $e) { + if (is_callable($e['callable'])) { + try { + call_user_func_array( + $e['callable'], + array_merge( + array($data), $e['params'] + ) + ); + } + catch(Exception $er) { + LSerror :: addErrorCode( + 'LSldap_13', + array('callable' => format_callable($e['callable']), 'event' => $event) + ); + $return = false; + } + } + else { + LSerror :: addErrorCode( + 'LSldap_12', + array('callable' => format_callable($e['callable']), 'event' => $event) + ); + $return = false; + } + } + } + + return $return; + } } /* @@ -794,3 +975,9 @@ LSerror :: defineError('LSldap_10', LSerror :: defineError('LSldap_11', ___("LSldap: Unknown LDAP error while updating user password") ); +LSerror :: defineError('LSldap_12', + ___("LSldap: Fail to execute trigger %{callable} on event %{event} : is not callable.") +); +LSerror :: defineError('LSldap_13', + ___("LSldap: Error during the execution of the trigger %{callable} on event %{event}.") +); diff --git a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo index f9f6f0fe8160cec22f9ad77f192bef6bc897f328..ae7daf4a8a50cda76c421ac11182ec524f9a07a1 100644 GIT binary patch delta 13860 zcmZA73w+My|Htv`-o~&wZpLh8V;i=S&0!3)6WfrpIWyy6iYs{kh#zf#^^u=u$g&$%$yoj~%HYQ`$2FAo-U+js`p|1NAhGEe} zu8mR1@ov+BAcTs=SQ$5Ac|4A^#awj!3mcL9H8ds#o1-o~$H~{C+I$6rup|ekVI*ea zVAS=tpw2spb-BN}NKl4~@=3|14Hf}_E+1$ohjG_PZL^+s( z!?7&BjdYgTi|z0)?2VbtY{S=M3b}r`Gcc8)IL<+J;Ud%!>_oNrbM(P8PW~-w>@PX_ zpQwi3M|HhVsxd_{1l7O@48;c68atvIx;mBq*NN{^Q5kn(7@kFc{2R63C(Y*mSb{tl zRUe6JSRCqt@u(q4M;+JR$$Mfc@?jW^6HyOXkVgNPCU}zyU1%rjiT9$O@DOSY&!TSl zyW?F{16}F%#-&ilhofe9UDSEG&i;w08!m8s4b>w%+yvDLP9wu)?qeHloWZ=n`KT`Z z0ySx_BExTf#Q_+{K`n4GYK+gKCUYW{MKB9>UK=cmT`&ZDqaV5_5kwKpaeN!Ake@;g z$sbr0%VgTFt$=#+DAW@tpw@eHWI>qGsN>&8PBq)GGu}hmY}#cpJh%k;=QiK)Q#-0M z#f#x!td66xE-phRtT}-^obhjIFVF$CJPWZs{)|KnszEnUPjnl7@E=qcn#Q1bkwAtkGk%1 zjKJ4XV}IE361u~wct9Ylw6zDMpk`-J^eh(~NM3+l@Gfc$+qa{;aS4{hQ>ZS#fVxq6 z#zi-dM_s2Q*2Fy2oLkzS{#V5wDoW!u)Cqs1o;bLJG1V|0{jf7?miNVp_z~t|5)&a8 zH#ipWq?yHf$1(Ubj>VqLL>+$$b1)@`qlOSHB^!l$ykRgJ_u{vx3oP$y>;1dg**qTA zfKRbIX7WP~TZ43tarLm1vOP8;UyGV_=aJ4fHGA58g4+oWVg@_P^s-&p8MV&mV>3L8 zsaTA=q+m-_7cRhL+=}X{Tc{ol>|@N=n2b6vD3{L%?1~zqgQ)Af?-FRXC-${B>WSL1 z0@dPksAU-4&t9lI^3SZ`M;t!HN-pC5#;hXG9AL~#cnvlCCo^$a`sNel;Z4~=#?U5{ zhdh(pd`h4e#SXR&$VENDYGg^9V~*t+C$0BfiXNLAC)P#gn;DLpr3Y~;hK#n8bUCUAN-#59 z<7me{_@wHevUWwyjrGVsbCn6YMvrKB&2{X9E4N3kOfM%V!+w3BE$+ zm8mw#&h|OjnEVLVLGNemhf6)=AQrwbO7t(b&ST)Y1VYq*bhTp=XDIhzp*z4Ot&9SPhl4M z64Zly?VGgD ztIxJK9*#B0-@_DipC@QW5H`n-NpDnF?Lu8BcCPK>KFCBiUn2K5sq^fG4#!JJ#vr_j zWzhS1J4Au#OWp{JU@8{HOsBq$ljmR+HN6)>00&ILC|ry&xC8YhmrzdqRfF-DJgw-(vi{l7X4~;{&H^Ec_-Dn2tgt_R4FQU45 zC8{g8qmKU&y>K6f;(m<8A5b^&dC7j;ErsRCBT?5)MD0&Qe{B5{{jaXdzvXJrDlO;P9 z8JI)f8|&kCjKdqK231^YCtEnGA@QgirC>$O##-19H76EfN8E?aFkqQoH61aLe5sqD z1;OX28wR~>U!|=voP0V4;2PA8-bc-WeW*Ec67`uo?6x_1+3O!uO0u-`f0IO>8wU>UrR>VcB4*e5NIx=?LYgVIoQpcAT#Cps=fowpX% z({G`!w-q_hZT1uB#-~y1^gPzVE2uFqzryxNC7egz7BwVi9gDnbmt6uTQ$G-U;Op2K z%}V=9&Ou%GO-#pg*ih>~Y?Xbnbiu~#Sb~}?C$SoathR5$W~dA1V*~sIlhC|oKi3w-1Ndt-H+i_va^Ed)V$2Gw=HU~;>dU-t_g6x|ra%5vQ?1LR}CaNdSU=)V0v#;b9 zSeg7O$3>_HZ^jrrhI+z3F#;>EcX|-@fcY4V^VZYatI zjdp07V@dL!SP_SzUN|#R%c~HJ<66}0-h`337j^t))N;L#I^O>+J9NQrf?`xuaVlzH zG33RU@s6uc8 zwT^G1CeZ`*$DmF2U0)5=uxQkiK8fmqE~o|!!yjCHy+S>Cn=Q7X`B#4?U9^o3OtRX5$Lf zT=)^w(0iMDfIGGzP!Ej5zF3GI@eXQMw|>vwXb5JK&&6{1Io82TH~<5-+ZWFSY(;(= zRUiJo{f%cfwkE%dYGA?+=8B#;i-6uR-B6RI_y@M@s$voH7*vU~jTr+qUHLJjRY?1X#Jt(KJAWxJ{djvyb1>WNc01nYfhpZrzS5L`t~ z+WNcg@=V46@}a0zG{tciYO*fCKrC?b4XB2`vzz|ci)0rSy5L!iz>BCCk@p@Z4pzq? zT#Gtx7ix|iKpp=xYO?z8wFaXeEE;vACaCjTpc>c~LosJB{a= z-C!@q;00&D-#)u6Ls2(~Kph{8A()Q3VIRjKsOyeFHEf3CGB-gJDmG&{-oRk=|H!s5 z8Y_{fV;J^EHDn5=;0Dx?{e%NC=VRM|-B^NESP7=oH~$*3Fk!YG`C5xCl^-;dSEf533` z{@ng`EE4;Xuf%M0ePM^D6_zG1{DS`1>|aksWxR}4b>K;R!$^!LPsQ4p@3;o_J~)Z- zcpY_qrBn93&=B<0RffuZ#9iCjZ0n9^4a2INg~t2Z8rbNU%1#Y^_uO0^y|jtlCQ+k_z?4P^iTFf=?W&3xA@sU z*=*Dek6;(Phw8ZwH>~SW4Y-4aIN+uo%73t%)_?C`_=IA|2bhZ)zuI3o)?s7vbEqy2 z`pw>85T=sv#YU)Zs|-n~q3MdM--vbb3O2=xzuWHtIjH^bV+-zYZV|M^#6RpW6f;ma z-h*TCE)K@w|Fb84iDBd=Z`&S;!>7p?I(q+U%=6?Ea0V9r%TB^)F_+xyZ`+XmsJ}m( z0|Y%V{EmH-O~#kWKSp(3kGpo29Knv{iTCUrS%A91N$iH5{;|hzM$P(4_jy-f0XD!= z|Jq;Snqw34&;F(VBMJN-*gq=O!J*{u;Xn*~Xy4VdQ1$0=5M~;e=P#O@u`_vu%jJ2| zj7K%_9I6Lvd$~MAFbp%uSE3qp83$l*Z@0_yVmRRK^878ggOAJe_xZIriUa;Y4N<=$ z)=St-Yg=NZn>=fXlNyzQi;RC>!Y6VLG82w%5_Syvy_XpN0LYe+kuqJE(O% zGRWomov%m*m*+Df0eetC0E^;Bs8w?W>*J3YrM?fX=<<9_rlAgOgT=8kdOk!PM_?@V z6EP6ip~iX_#^EJwkEMg{B$dspGh=?-B1l!f>|2-;{+M#-;J9=SX^uYmG0*9g>K8+P{8tV9EsOzsnZ+rv8@h#L`I}z@3 zd!FcTXNOOO?b;~RlO~}Wl!-yu1zX`rEQz~tJRU_gAf>9y^BYlXR6Z7U{&cK}i?KXz z#H#pFRo1_r;4&4u;IF7jcORQ$YBk%Cxmbz(B~%x0!4TYzT81aF5!Q>eLo*WfDjj1bU;rf$E7ns4nxaX-^11T`(G%JEjS0?2}PX zn2rJ13L~)(YIV#)HQ;5`ldeNu=a94iTa4BEzeS*~42`iDYKWS2t+5p5pkAE=QDZp6 z+5d{;I@E{B7Szz(L=D9sxC-N9ZO@)SEx#ghc2%WfhSvW~g5K;niruk#Etlsz+6+t~ zzlBd?d~N%Ja$_d>e$-qk@q~RNwnZ(=Le!8R!(r%E$L0AuVIC%vZ@@u#4O6+lX%lbX zREsd1{3dEB8YI{^St>q3o{#!aS&P;1465huVH5_{wac#wYVLGGHFPbiCvTv7=pJf$ zntH5%UBH(>H>`#_pf=Xhek_Lloc+U5%Vr#EEMG>A`4&{qoyN}iM19-f*;t)?J8BM` zN1gw#V|WABzuw8|4eWva9Ot7}!@C%aH&DkFNwi}fiCP7HF%OTUF5IZ0?XjMyH{L>2 zk6u8%m|_~aJbyPx!xZwNjadI$MjNTn*gZgf3@0Sn`gRyi{yJ*^anw*eM6K&58rx6F zCaBf026dy2s8zHd_1-vzdV&3dI?tzxo#bWR1nSBVtby?uf!$H-b+Y3N=(&O8M${O- zi(2!9|ce=@FA*a%xnVIp<&8<{K7pX38OoUSZl|D8)IaC1ot70_ADy7HX&6 zh8aFzO-XhPL2ZK^6@Tr-bBJe9)=~HnF{iK<@{%#vi5FA&eE)Cz+=<_$rUTd3_M4`A zL7fC2cPe|6sQs8)XQw&iImZ4^6AF)Vj6Tgr-p}vQ(99dM!<(M03t4b$LF?P7WwX#c5(~cgUZjyhnL_(<|lC){)@5$M!cT*2l_x zN)FeWh}E5j^>qBfIes(yv~Aar>$B=hcATN`>F)VoNA}>$lp>tSTi&zHwEXuoh5AYC z?@WoO_641TqsVJG=jh8&DDf#u8|vGVm!M=)_E8eGAk!$%QM8rB@lKq;3EG&7B9Lc9L^|PG#C*r%rlPG+XGnPF`Re?br&dk#4l36i}*9l*7!#e6rCeK_WM?O@Ya#PQUfr|vdoI(chKIHdw* zJ9XNIYW$mW;0Vh9-}s{S-?o*wD5auPw*r0G+l}+S#_!385Rao=B=3qV@NG&}%2M_h zp=i@rjxm%MD9iN9;ft2}osvSVt&4M@;w1fGdyTr%T=WT>8otb#layPOVCn*#`kT0r zx{*%4(y<@sx+w3H_n<@(U*@=|<@|V_l0nfHiAS7Rc~jyE|Gh2Ba#~-?qm6Ibp6yR` zQ3jLMV1EwA;2i3nBi@ELDgM+op-iRJ_MFLjpuQftwpEn+p2+@3C?_l=GgWcuw}$RUv@{+`VK*bm+u`xX{D#|^*-POPI!uzw%9H*t47 zjLj&!iGQPfNqmD+hSI$)2j@_^hvZv|w$kLosDF?6b>fW_Z6`3nhUOebQyO!ew#n>^ zC7w$>j&j)L`Tj*zi9IcFJ*AY6qMV~dIA>D*-?o7IpPbB>{r?a@fgd?_KeN9JaWZ~P z(N>4T_kPdz3HGLRb8>e-f`{z-)9&~DoW=#GQ$L8T9G0QvQ+iS29&1!1C$5ZZ*mvK# zMn~e_)HS5sCysZHdvuFWsq>=zq3?emQag@BTUqp`93}SSqz%NMQ7S!lfoO7VPh)?| zM9LlVWjGt($JO`?{zK8$7W28r55(ET*Ki7+<11zI{s` z?9}yQ#}G;pN**Ph`ni;Jt}zCmqD~vX4tuuc7SCS`Cp&SWqo~Vq?p~Z+oZx#Z7U4UT zi*OI`#rTLP32<#2S$}q7!Tb?^1#{;o6?Dq0QcyJSR>A4{>D#X7jjFM2P~qC35_M}O z)CrGokQ85MTfnB(=>_iJixuSFDY>*^psVS&b+=l&mQD+F4fh!_pzr7c*Y&V%CH@GE M-%-1o%Qxiz01U!QXaE2J delta 13833 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 diff --git a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po index 981d8887..be9c2441 100644 --- a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po +++ b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: LdapSaisie\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2023-01-11 19:45+0100\n" +"PO-Revision-Date: 2023-03-20 16:10+0100\n" "Last-Translator: Benjamin Renard \n" "Language-Team: LdapSaisie \n" @@ -472,15 +472,15 @@ msgstr "SUPANN : Cette entité a des entités filles et ne peut être supprimée msgid "SUPANN: Fail to load nomenclature %{nomenclature}." msgstr "SUPANN : Erreur de chargement de la nomenclature %{nomenclature}." -#: includes/addons/LSaddons.supann.php:376 +#: includes/addons/LSaddons.supann.php:447 msgid "Entity %{id} (unrecognized)" msgstr "Entité %{id} (non-reconnue)" -#: includes/addons/LSaddons.supann.php:448 +#: includes/addons/LSaddons.supann.php:519 msgid "Godfather %{dn} (unrecognized)" msgstr "Parrain %{dn} (non-reconnue)" -#: includes/addons/LSaddons.supann.php:575 +#: includes/addons/LSaddons.supann.php:646 #: includes/class/class.LSformElement_select.php:58 #: includes/class/class.LSformElement_select_object.php:108 msgid "%{value} (unrecognized value)" @@ -625,10 +625,6 @@ msgstr "" "MAILDIR : Erreur durant la récupération du chemin distant du dossier des " "mails." -#: includes/addons/LSaddons.watermark.php:78 -msgid "PRE-PRODUCTION" -msgstr "PRÉ-PRODUCTION" - #: includes/addons/LSaddons.showTechInfo.php:63 #: templates/default/showTechInfo.tpl:16 msgid "Structural object class" @@ -1518,25 +1514,25 @@ msgstr "" msgid "Invalid file type (%{type})." msgstr "Type de fichier invalide (%{type})." -#: includes/class/class.LSldapObject.php:566 +#: includes/class/class.LSldapObject.php:577 msgid "The attribute %{attr} is not valid." msgstr "L'attribut %{attr} n'est pas valide." -#: includes/class/class.LSldapObject.php:3139 +#: includes/class/class.LSldapObject.php:3150 msgid "LSldapObject : Object type unknown." msgstr "LSldapObject : Type d'objet inconnu." -#: includes/class/class.LSldapObject.php:3142 +#: includes/class/class.LSldapObject.php:3153 msgid "LSldapObject : Update form is not defined for the object %{obj}." msgstr "" "LSldapObject : Le formulaire de mise à jour n'est pas défini pour l'objet " "%{obj}." -#: includes/class/class.LSldapObject.php:3145 +#: includes/class/class.LSldapObject.php:3156 msgid "LSldapObject : No form exists for the object %{obj}." msgstr "LSldapObject : Aucun formulaire n'existe pour l'objet %{obj}" -#: includes/class/class.LSldapObject.php:3148 +#: includes/class/class.LSldapObject.php:3159 msgid "" "LSldapObject : The function %{func} to validate the attribute %{attr} the " "object %{obj} is unknow." @@ -1544,7 +1540,7 @@ msgstr "" "LSldapObject : La fonction %{func} pour valider l'attribut %{attr} de " "l'objet %{obj} est inconnue." -#: includes/class/class.LSldapObject.php:3151 +#: includes/class/class.LSldapObject.php:3162 msgid "" "LSldapObject : Configuration data are missing to validate the attribute " "%{attr} of the object %{obj}." @@ -1552,7 +1548,7 @@ msgstr "" "LSldapObject : Des données de configurations sont manquantes pour pouvoir " "valider l'attribut %{attr} de l'objet %{obj}." -#: includes/class/class.LSldapObject.php:3155 +#: includes/class/class.LSldapObject.php:3166 msgid "" "LSldapObject : The function %{func} to be executed on the object event " "%{event} doesn't exist." @@ -1560,14 +1556,14 @@ msgstr "" "LSldapObject : La fonction %{func} devant être exécutée lors de l'évènement " "%{event} de l'objet n'existe pas." -#: includes/class/class.LSldapObject.php:3158 +#: includes/class/class.LSldapObject.php:3169 msgid "" "LSldapObject : The %{func} execution on the object event %{event} failed." msgstr "" "LSldapObject : L'exécution de la fonction %{func} lors de l'évènement " "%{event} de l'objet a échouée." -#: includes/class/class.LSldapObject.php:3162 +#: includes/class/class.LSldapObject.php:3173 msgid "" "LSldapObject : Class %{class}, which method %{meth} to be executed on the " "object event %{event}, doesn't exist." @@ -1575,7 +1571,7 @@ msgstr "" "La classe %{class}, contenant la méthode %{meth} devant être exécutée lors " "de l'évènement %{event} de l'objet, n'existe pas." -#: includes/class/class.LSldapObject.php:3165 +#: includes/class/class.LSldapObject.php:3176 msgid "" "LSldapObject : Method %{meth} within %{class} class to be executed on object " "event %{event}, doesn't exist." @@ -1583,7 +1579,7 @@ msgstr "" "LSldapObject : La méthode %{meth} de la classe %{class} devant être exécutée " "lors de l'évènement %{event} de l'objet n'existe pas." -#: includes/class/class.LSldapObject.php:3168 +#: includes/class/class.LSldapObject.php:3179 msgid "" "LSldapObject : Error during execute %{meth} method within %{class} class, to " "be executed on object event %{event}." @@ -1591,7 +1587,7 @@ msgstr "" "LSldapObject : Erreur durant l'exécution de la méthode %{meth} de la classe " "%{class} devant être exécutée lors de l'évènement %{event} de l'objet." -#: includes/class/class.LSldapObject.php:3172 +#: includes/class/class.LSldapObject.php:3183 msgid "" "LSldapObject : Some configuration data of the object type %{obj} are missing " "to generate the DN of the new object." @@ -1599,7 +1595,7 @@ msgstr "" "LSldapObject : Des informations de configuration du type d'objet %{obj} sont " "manquantes pour la génération du DN du nouvel objet." -#: includes/class/class.LSldapObject.php:3175 +#: includes/class/class.LSldapObject.php:3186 msgid "" "LSldapObject : The attibute %{attr} of the object is not yet defined. Can't " "generate DN." @@ -1607,11 +1603,11 @@ msgstr "" "LSldapObject : L'attribut %{attr} de l'objet n'est pas encore défini. " "Impossible de générer le DN." -#: includes/class/class.LSldapObject.php:3178 +#: includes/class/class.LSldapObject.php:3189 msgid "LSldapObject : Without DN, the object could not be changed." msgstr "LSldapObject : Sans DN, l'objet ne peut pas être modifié." -#: includes/class/class.LSldapObject.php:3181 +#: includes/class/class.LSldapObject.php:3192 msgid "" "LSldapObject : The attribute %{attr_depend} depending on the attribute " "%{attr} doesn't exist." @@ -1619,39 +1615,39 @@ msgstr "" "LSldapObject : L'attritbut %{attr_depend} dépendant de l'attribut %{attr} " "n'existe pas." -#: includes/class/class.LSldapObject.php:3184 +#: includes/class/class.LSldapObject.php:3195 msgid "LSldapObject : Error during deleting the object %{objectname}." msgstr "LSldapObject : Erreur durant la suppression de l'objet %{objectname}" -#: includes/class/class.LSldapObject.php:3188 +#: includes/class/class.LSldapObject.php:3199 msgid "" "LSldapObject : Error during actions to be executed before renaming the objet." msgstr "" "LSldapObject : Erreur durant les actions devant être exécutée avant de " "renommer l'objet." -#: includes/class/class.LSldapObject.php:3191 +#: includes/class/class.LSldapObject.php:3202 msgid "" "LSldapObject : Error during actions to be executed after renaming the objet." msgstr "" "LSldapObject : Erreur durant les actions devant être exécutée après avoir " "renommé l'objet." -#: includes/class/class.LSldapObject.php:3195 +#: includes/class/class.LSldapObject.php:3206 msgid "" "LSldapObject : Error during actions to be executed before deleting the objet." msgstr "" "LSldapObject : Erreur durant les actions devant être exécutée avant de " "supprimer l'objet." -#: includes/class/class.LSldapObject.php:3198 +#: includes/class/class.LSldapObject.php:3209 msgid "" "LSldapObject : Error during actions to be executed after deleting the objet." msgstr "" "LSldapObject : Erreur durant les actions devant être exécutée après avoir " "supprimé l'objet." -#: includes/class/class.LSldapObject.php:3202 +#: includes/class/class.LSldapObject.php:3213 msgid "" "LSldapObject : Error during the actions to be executed before creating the " "object." @@ -1659,7 +1655,7 @@ msgstr "" "LSldapObject : Erreur durant les actions devant être exécutée avant de créer " "l'objet." -#: includes/class/class.LSldapObject.php:3205 +#: includes/class/class.LSldapObject.php:3216 msgid "" "LSldapObject : Error during the actions to be executed after creating the " "object. It was created anyway." @@ -1667,7 +1663,7 @@ msgstr "" "LSldapObject : Erreur durant les actions devant être exécutées après la " "création de l'objet. Il a tout de même été créé." -#: includes/class/class.LSldapObject.php:3209 +#: includes/class/class.LSldapObject.php:3220 msgid "" "LSldapObject : The function %{func} to be executed before creating the " "object doesn't exist." @@ -1675,7 +1671,7 @@ msgstr "" "LSldapObject : La fonction %{func} devant être exécutée avant la création de " "l'objet n'existe pas." -#: includes/class/class.LSldapObject.php:3212 +#: includes/class/class.LSldapObject.php:3223 msgid "" "LSldapObject : Error executing the function %{func} to be execute after " "deleting the object." @@ -1683,7 +1679,7 @@ msgstr "" "LSldapObject : Erreur durant l'exécution de la fonction %{func} devant être " "exécutée après la suppression de l'objet." -#: includes/class/class.LSldapObject.php:3215 +#: includes/class/class.LSldapObject.php:3226 msgid "" "LSldapObject : The function %{func} to be executed after deleting the object " "doesn't exist." @@ -1691,7 +1687,7 @@ msgstr "" "LSldapObject : La fonction %{func} devant être exécutée après la suppression " "de l'objet n'existe pas." -#: includes/class/class.LSldapObject.php:3218 +#: includes/class/class.LSldapObject.php:3229 msgid "" "LSldapObject : Error executing the function %{func} to be execute after " "creating the object." @@ -1699,7 +1695,7 @@ msgstr "" "LSldapObject : Erreur durant l'exécution de la fonction %{func} devant être " "exécutée après la création de l'objet." -#: includes/class/class.LSldapObject.php:3222 +#: includes/class/class.LSldapObject.php:3233 msgid "" "LSldapObject : %{func} function, to be executed on object event %{event}, " "doesn't exist." @@ -1707,7 +1703,7 @@ msgstr "" "LSldapObject : La fonction %{func}, devant être exécutée lors de l'évènement " "%{event} de l'objet, n'existe pas." -#: includes/class/class.LSldapObject.php:3225 +#: includes/class/class.LSldapObject.php:3236 msgid "" "LSldapObject : Error during the execution of %{func} function on object " "event %{event}." @@ -1715,7 +1711,7 @@ msgstr "" "LSldapObject : Erreur durant l'exécution de la fonction %{func} lors de " "l'évènement %{event} de l'objet." -#: includes/class/class.LSldapObject.php:3229 +#: includes/class/class.LSldapObject.php:3240 msgid "" "LSldapObject : %{meth} method, to be executed on object event %{event}, " "doesn't exist." @@ -1723,7 +1719,7 @@ msgstr "" "LSldapObject : La méthode %{meth}, devant être exécutée lors de l'évènement " "%{event} de l'objet, n'existe pas." -#: includes/class/class.LSldapObject.php:3232 +#: includes/class/class.LSldapObject.php:3243 msgid "" "LSldapObject : Error during execution of %{meth} method on object event " "%{event}." @@ -1731,13 +1727,13 @@ msgstr "" "LSldapObject : Erreur durant l'exécution de la méthode %{meth} lors de " "l'évènement %{event} de l'objet." -#: includes/class/class.LSldapObject.php:3235 +#: includes/class/class.LSldapObject.php:3246 msgid "LSldapObject : Error during generate LDAP filter for %{LSobject}." msgstr "" "LSldapObject : Erreur durant la génération du filtre LDAP de l'objet " "%{LSobject}." -#: includes/class/class.LSldapObject.php:3239 +#: includes/class/class.LSldapObject.php:3250 msgid "" "LSldapObject : Error during execution of the custom action %{customAction} " "on %{objectname}." @@ -1745,22 +1741,22 @@ msgstr "" "LSldapObject : Erreur durant l'exécution de l'action personnalisée " "%{customAction} sur l'objet %{objectname}." -#: includes/class/class.LSldapObject.php:3243 +#: includes/class/class.LSldapObject.php:3254 msgid "LSldapObject : Fail to retrieve container DN." msgstr "LSldapObject : Impossible de récupérer le DN parent." -#: includes/class/class.LSldapObject.php:3246 +#: includes/class/class.LSldapObject.php:3257 msgid "" "LSldapObject : The function %{func} to generate container DN is not callable." msgstr "" "LSldapObject : La fonction %{func} pour générer le DN parent n'est pas " "exécutable." -#: includes/class/class.LSldapObject.php:3249 +#: includes/class/class.LSldapObject.php:3260 msgid "LSldapObject : Error during generating container DN : %{error}" msgstr "LSldapObject : Erreur durant la génération du DN parent : %{error}." -#: includes/class/class.LSldapObject.php:3252 +#: includes/class/class.LSldapObject.php:3263 msgid "" "LSldapObject : An LDAP object with the same DN as generated for this new one " "already exists. Please verify your configuration." @@ -1768,7 +1764,7 @@ msgstr "" "LSldapObject : Un objet LDAP avec le même DN que celui généré pour ce nouvel " "objet existe déjà. Merci de vérifier votre configuration." -#: includes/class/class.LSldapObject.php:3257 +#: includes/class/class.LSldapObject.php:3268 msgid "" "LSrelation : Some parameters are missing in the call of methods to handle " "standard relations (Method : %{meth})." @@ -1804,92 +1800,108 @@ msgstr "" "LSformRule_password : Regex invalide configurée : %{regex}. Vous devez " "utiliser des regex de type PCRE (commencant par le caractère '/')." -#: includes/class/class.LSldap.php:713 +#: includes/class/class.LSldap.php:783 msgid "The password expired" msgstr "Le mot de passe a expiré" -#: includes/class/class.LSldap.php:714 +#: includes/class/class.LSldap.php:784 msgid "The account is locked" msgstr "Ce compte est bloqué" -#: includes/class/class.LSldap.php:715 +#: includes/class/class.LSldap.php:785 msgid "The password was reset and must be changed" msgstr "Le mot de passe a été réinitialisé et doit être changé" -#: includes/class/class.LSldap.php:716 +#: includes/class/class.LSldap.php:786 msgid "It is not possible to modify the password" msgstr "Il n'est pas possible de modifier le mot de passe" -#: includes/class/class.LSldap.php:717 +#: includes/class/class.LSldap.php:787 msgid "The old password must be supplied" msgstr "L'ancien mot de passe doit être fourni" -#: includes/class/class.LSldap.php:718 +#: includes/class/class.LSldap.php:788 msgid "The password does not meet the quality requirements" msgstr "Le mot de passe ne répond pas aux exigences de qualité" -#: includes/class/class.LSldap.php:719 +#: includes/class/class.LSldap.php:789 msgid "The password is too short" msgstr "Le mot de passe est trop court" -#: includes/class/class.LSldap.php:720 +#: includes/class/class.LSldap.php:790 msgid "It is too soon to change the password" msgstr "Il est trop tôt pour modifier le mot de passe" -#: includes/class/class.LSldap.php:721 +#: includes/class/class.LSldap.php:791 msgid "This password was recently used and cannot be used again" msgstr "" "Ce mot de passe a été utilisé récemment et il ne peut être utilisé à nouveau" -#: includes/class/class.LSldap.php:764 +#: includes/class/class.LSldap.php:911 msgid "LSldap: Error during the LDAP server connection (%{msg})." msgstr "LSldap : Erreur durant la connexion au serveur LDAP (%{msg})." -#: includes/class/class.LSldap.php:767 +#: includes/class/class.LSldap.php:914 msgid "LSldap: Error during the LDAP search (%{msg})." msgstr "LSldap : Erreur pendant la recherche LDAP (%{msg})." -#: includes/class/class.LSldap.php:770 +#: includes/class/class.LSldap.php:917 msgid "LSldap: Object type unknown." msgstr "LSldap : Type d'objet inconnu." -#: includes/class/class.LSldap.php:773 +#: includes/class/class.LSldap.php:920 msgid "LSldap: Error while fetching the LDAP entry." msgstr "LSldap : Erreur durant la récupération de l'entrée LDAP." -#: includes/class/class.LSldap.php:776 +#: includes/class/class.LSldap.php:923 msgid "LSldap: Error while changing the LDAP entry (DN : %{dn})." msgstr "LSldap : Erreur durant la modification de l'entrée LDAP (DN : %{dn})." -#: includes/class/class.LSldap.php:779 +#: includes/class/class.LSldap.php:926 msgid "LSldap: Error while deleting empty attributes." msgstr "LSldap : Erreur durant la suppression des attributs vides." -#: includes/class/class.LSldap.php:782 +#: includes/class/class.LSldap.php:929 msgid "LSldap: Error while changing the DN of the object." msgstr "LSldap : Erreur pendant la modification du DN de l'objet." -#: includes/class/class.LSldap.php:785 +#: includes/class/class.LSldap.php:932 msgid "LSldap: LDAP server base DN not configured." msgstr "LSldap : Le base DN du serveur LDAP n'est pas configuré." -#: includes/class/class.LSldap.php:788 +#: includes/class/class.LSldap.php:935 msgid "LSldap: Fail to set authz proxy option on LDAP server connection." msgstr "" "LSldap : Une erreur est survenue en appliquant l'option d'authz proxy sur la " "connexion au serveur LDAP." -#: includes/class/class.LSldap.php:791 +#: includes/class/class.LSldap.php:938 msgid "LSldap: Error while changing the user password: %{msg}." msgstr "" "LSldap: Erreur durant la modification du mot de passe utilisateur: %{msg}." -#: includes/class/class.LSldap.php:794 +#: includes/class/class.LSldap.php:941 msgid "LSldap: Unknown LDAP error while updating user password" msgstr "" "LSldap: Une erreur LDAP inconnue est survenue pendant la modification du mot " "de passe utilisateur" +#: includes/class/class.LSldap.php:944 +msgid "" +"LSldap: Fail to execute trigger %{callable} on event %{event} : is not " +"callable." +msgstr "" +"LSldap : Échec d'exécution du déclencheur %{callable} lors de événement " +"%{event} : il n'est pas un callable." + +#: includes/class/class.LSldap.php:947 +msgid "" +"LSldap: Error during the execution of the trigger %{callable} on event " +"%{event}." +msgstr "" +"LSldap : Erreur durant l'exécution du déclencheur %{callable} lors de " +"l'événement %{event}." + #: includes/class/class.LSformRule_ldapSearchURI.php:59 msgid "Invalid LDAP server URI (%{uri})" msgstr "URI de serveur LDAP invalide (%{uri})" @@ -3374,6 +3386,9 @@ msgstr "non" msgid "yes" msgstr "oui" +#~ msgid "PRE-PRODUCTION" +#~ msgstr "PRÉ-PRODUCTION" + #~ msgid "" #~ "SAMBA Support: The attribute %{dependency} is missing. Unable to forge " #~ "the attribute %{attr}." diff --git a/src/lang/ldapsaisie.pot b/src/lang/ldapsaisie.pot index e6f57359..2ed6d9c3 100644 --- a/src/lang/ldapsaisie.pot +++ b/src/lang/ldapsaisie.pot @@ -390,15 +390,15 @@ msgstr "" msgid "SUPANN: Fail to load nomenclature %{nomenclature}." msgstr "" -#: includes/addons/LSaddons.supann.php:376 +#: includes/addons/LSaddons.supann.php:447 msgid "Entity %{id} (unrecognized)" msgstr "" -#: includes/addons/LSaddons.supann.php:448 +#: includes/addons/LSaddons.supann.php:519 msgid "Godfather %{dn} (unrecognized)" msgstr "" -#: includes/addons/LSaddons.supann.php:575 +#: includes/addons/LSaddons.supann.php:646 #: includes/class/class.LSformElement_select.php:58 #: includes/class/class.LSformElement_select_object.php:108 msgid "%{value} (unrecognized value)" @@ -519,10 +519,6 @@ msgstr "" msgid "MAILDIR : Error retrieving remote path of the maildir." msgstr "" -#: includes/addons/LSaddons.watermark.php:78 -msgid "PRE-PRODUCTION" -msgstr "" - #: includes/addons/LSaddons.showTechInfo.php:63 #: templates/default/showTechInfo.tpl:16 msgid "Structural object class" @@ -1294,199 +1290,199 @@ msgstr "" msgid "Invalid file type (%{type})." msgstr "" -#: includes/class/class.LSldapObject.php:566 +#: includes/class/class.LSldapObject.php:577 msgid "The attribute %{attr} is not valid." msgstr "" -#: includes/class/class.LSldapObject.php:3139 +#: includes/class/class.LSldapObject.php:3150 msgid "LSldapObject : Object type unknown." msgstr "" -#: includes/class/class.LSldapObject.php:3142 +#: includes/class/class.LSldapObject.php:3153 msgid "LSldapObject : Update form is not defined for the object %{obj}." msgstr "" -#: includes/class/class.LSldapObject.php:3145 +#: includes/class/class.LSldapObject.php:3156 msgid "LSldapObject : No form exists for the object %{obj}." msgstr "" -#: includes/class/class.LSldapObject.php:3148 +#: includes/class/class.LSldapObject.php:3159 msgid "" "LSldapObject : The function %{func} to validate the attribute %{attr} the " "object %{obj} is unknow." msgstr "" -#: includes/class/class.LSldapObject.php:3151 +#: includes/class/class.LSldapObject.php:3162 msgid "" "LSldapObject : Configuration data are missing to validate the attribute " "%{attr} of the object %{obj}." msgstr "" -#: includes/class/class.LSldapObject.php:3155 +#: includes/class/class.LSldapObject.php:3166 msgid "" "LSldapObject : The function %{func} to be executed on the object event " "%{event} doesn't exist." msgstr "" -#: includes/class/class.LSldapObject.php:3158 +#: includes/class/class.LSldapObject.php:3169 msgid "" "LSldapObject : The %{func} execution on the object event %{event} failed." msgstr "" -#: includes/class/class.LSldapObject.php:3162 +#: includes/class/class.LSldapObject.php:3173 msgid "" "LSldapObject : Class %{class}, which method %{meth} to be executed on the " "object event %{event}, doesn't exist." msgstr "" -#: includes/class/class.LSldapObject.php:3165 +#: includes/class/class.LSldapObject.php:3176 msgid "" "LSldapObject : Method %{meth} within %{class} class to be executed on object " "event %{event}, doesn't exist." msgstr "" -#: includes/class/class.LSldapObject.php:3168 +#: includes/class/class.LSldapObject.php:3179 msgid "" "LSldapObject : Error during execute %{meth} method within %{class} class, to " "be executed on object event %{event}." msgstr "" -#: includes/class/class.LSldapObject.php:3172 +#: includes/class/class.LSldapObject.php:3183 msgid "" "LSldapObject : Some configuration data of the object type %{obj} are missing " "to generate the DN of the new object." msgstr "" -#: includes/class/class.LSldapObject.php:3175 +#: includes/class/class.LSldapObject.php:3186 msgid "" "LSldapObject : The attibute %{attr} of the object is not yet defined. Can't " "generate DN." msgstr "" -#: includes/class/class.LSldapObject.php:3178 +#: includes/class/class.LSldapObject.php:3189 msgid "LSldapObject : Without DN, the object could not be changed." msgstr "" -#: includes/class/class.LSldapObject.php:3181 +#: includes/class/class.LSldapObject.php:3192 msgid "" "LSldapObject : The attribute %{attr_depend} depending on the attribute " "%{attr} doesn't exist." msgstr "" -#: includes/class/class.LSldapObject.php:3184 +#: includes/class/class.LSldapObject.php:3195 msgid "LSldapObject : Error during deleting the object %{objectname}." msgstr "" -#: includes/class/class.LSldapObject.php:3188 +#: includes/class/class.LSldapObject.php:3199 msgid "" "LSldapObject : Error during actions to be executed before renaming the objet." msgstr "" -#: includes/class/class.LSldapObject.php:3191 +#: includes/class/class.LSldapObject.php:3202 msgid "" "LSldapObject : Error during actions to be executed after renaming the objet." msgstr "" -#: includes/class/class.LSldapObject.php:3195 +#: includes/class/class.LSldapObject.php:3206 msgid "" "LSldapObject : Error during actions to be executed before deleting the objet." msgstr "" -#: includes/class/class.LSldapObject.php:3198 +#: includes/class/class.LSldapObject.php:3209 msgid "" "LSldapObject : Error during actions to be executed after deleting the objet." msgstr "" -#: includes/class/class.LSldapObject.php:3202 +#: includes/class/class.LSldapObject.php:3213 msgid "" "LSldapObject : Error during the actions to be executed before creating the " "object." msgstr "" -#: includes/class/class.LSldapObject.php:3205 +#: includes/class/class.LSldapObject.php:3216 msgid "" "LSldapObject : Error during the actions to be executed after creating the " "object. It was created anyway." msgstr "" -#: includes/class/class.LSldapObject.php:3209 +#: includes/class/class.LSldapObject.php:3220 msgid "" "LSldapObject : The function %{func} to be executed before creating the " "object doesn't exist." msgstr "" -#: includes/class/class.LSldapObject.php:3212 +#: includes/class/class.LSldapObject.php:3223 msgid "" "LSldapObject : Error executing the function %{func} to be execute after " "deleting the object." msgstr "" -#: includes/class/class.LSldapObject.php:3215 +#: includes/class/class.LSldapObject.php:3226 msgid "" "LSldapObject : The function %{func} to be executed after deleting the object " "doesn't exist." msgstr "" -#: includes/class/class.LSldapObject.php:3218 +#: includes/class/class.LSldapObject.php:3229 msgid "" "LSldapObject : Error executing the function %{func} to be execute after " "creating the object." msgstr "" -#: includes/class/class.LSldapObject.php:3222 +#: includes/class/class.LSldapObject.php:3233 msgid "" "LSldapObject : %{func} function, to be executed on object event %{event}, " "doesn't exist." msgstr "" -#: includes/class/class.LSldapObject.php:3225 +#: includes/class/class.LSldapObject.php:3236 msgid "" "LSldapObject : Error during the execution of %{func} function on object " "event %{event}." msgstr "" -#: includes/class/class.LSldapObject.php:3229 +#: includes/class/class.LSldapObject.php:3240 msgid "" "LSldapObject : %{meth} method, to be executed on object event %{event}, " "doesn't exist." msgstr "" -#: includes/class/class.LSldapObject.php:3232 +#: includes/class/class.LSldapObject.php:3243 msgid "" "LSldapObject : Error during execution of %{meth} method on object event " "%{event}." msgstr "" -#: includes/class/class.LSldapObject.php:3235 +#: includes/class/class.LSldapObject.php:3246 msgid "LSldapObject : Error during generate LDAP filter for %{LSobject}." msgstr "" -#: includes/class/class.LSldapObject.php:3239 +#: includes/class/class.LSldapObject.php:3250 msgid "" "LSldapObject : Error during execution of the custom action %{customAction} " "on %{objectname}." msgstr "" -#: includes/class/class.LSldapObject.php:3243 +#: includes/class/class.LSldapObject.php:3254 msgid "LSldapObject : Fail to retrieve container DN." msgstr "" -#: includes/class/class.LSldapObject.php:3246 +#: includes/class/class.LSldapObject.php:3257 msgid "" "LSldapObject : The function %{func} to generate container DN is not callable." msgstr "" -#: includes/class/class.LSldapObject.php:3249 +#: includes/class/class.LSldapObject.php:3260 msgid "LSldapObject : Error during generating container DN : %{error}" msgstr "" -#: includes/class/class.LSldapObject.php:3252 +#: includes/class/class.LSldapObject.php:3263 msgid "" "LSldapObject : An LDAP object with the same DN as generated for this new one " "already exists. Please verify your configuration." msgstr "" -#: includes/class/class.LSldapObject.php:3257 +#: includes/class/class.LSldapObject.php:3268 msgid "" "LSrelation : Some parameters are missing in the call of methods to handle " "standard relations (Method : %{meth})." @@ -1516,86 +1512,98 @@ msgid "" "(begining by '/' caracter)." msgstr "" -#: includes/class/class.LSldap.php:713 +#: includes/class/class.LSldap.php:783 msgid "The password expired" msgstr "" -#: includes/class/class.LSldap.php:714 +#: includes/class/class.LSldap.php:784 msgid "The account is locked" msgstr "" -#: includes/class/class.LSldap.php:715 +#: includes/class/class.LSldap.php:785 msgid "The password was reset and must be changed" msgstr "" -#: includes/class/class.LSldap.php:716 +#: includes/class/class.LSldap.php:786 msgid "It is not possible to modify the password" msgstr "" -#: includes/class/class.LSldap.php:717 +#: includes/class/class.LSldap.php:787 msgid "The old password must be supplied" msgstr "" -#: includes/class/class.LSldap.php:718 +#: includes/class/class.LSldap.php:788 msgid "The password does not meet the quality requirements" msgstr "" -#: includes/class/class.LSldap.php:719 +#: includes/class/class.LSldap.php:789 msgid "The password is too short" msgstr "" -#: includes/class/class.LSldap.php:720 +#: includes/class/class.LSldap.php:790 msgid "It is too soon to change the password" msgstr "" -#: includes/class/class.LSldap.php:721 +#: includes/class/class.LSldap.php:791 msgid "This password was recently used and cannot be used again" msgstr "" -#: includes/class/class.LSldap.php:764 +#: includes/class/class.LSldap.php:911 msgid "LSldap: Error during the LDAP server connection (%{msg})." msgstr "" -#: includes/class/class.LSldap.php:767 +#: includes/class/class.LSldap.php:914 msgid "LSldap: Error during the LDAP search (%{msg})." msgstr "" -#: includes/class/class.LSldap.php:770 +#: includes/class/class.LSldap.php:917 msgid "LSldap: Object type unknown." msgstr "" -#: includes/class/class.LSldap.php:773 +#: includes/class/class.LSldap.php:920 msgid "LSldap: Error while fetching the LDAP entry." msgstr "" -#: includes/class/class.LSldap.php:776 +#: includes/class/class.LSldap.php:923 msgid "LSldap: Error while changing the LDAP entry (DN : %{dn})." msgstr "" -#: includes/class/class.LSldap.php:779 +#: includes/class/class.LSldap.php:926 msgid "LSldap: Error while deleting empty attributes." msgstr "" -#: includes/class/class.LSldap.php:782 +#: includes/class/class.LSldap.php:929 msgid "LSldap: Error while changing the DN of the object." msgstr "" -#: includes/class/class.LSldap.php:785 +#: includes/class/class.LSldap.php:932 msgid "LSldap: LDAP server base DN not configured." msgstr "" -#: includes/class/class.LSldap.php:788 +#: includes/class/class.LSldap.php:935 msgid "LSldap: Fail to set authz proxy option on LDAP server connection." msgstr "" -#: includes/class/class.LSldap.php:791 +#: includes/class/class.LSldap.php:938 msgid "LSldap: Error while changing the user password: %{msg}." msgstr "" -#: includes/class/class.LSldap.php:794 +#: includes/class/class.LSldap.php:941 msgid "LSldap: Unknown LDAP error while updating user password" msgstr "" +#: includes/class/class.LSldap.php:944 +msgid "" +"LSldap: Fail to execute trigger %{callable} on event %{event} : is not " +"callable." +msgstr "" + +#: includes/class/class.LSldap.php:947 +msgid "" +"LSldap: Error during the execution of the trigger %{callable} on event " +"%{event}." +msgstr "" + #: includes/class/class.LSformRule_ldapSearchURI.php:59 msgid "Invalid LDAP server URI (%{uri})" msgstr ""