LSaddon::posix : added generate_memberUidFromUniqueMember() function
[ldapsaisie.git] / public_html / includes / addons / LSaddons.posix.php
1 <?php
2 /*******************************************************************************
3  * Copyright (C) 2007 Easter-eggs
4  * http://ldapsaisie.labs.libre-entreprise.org
5  *
6  * Author: See AUTHORS file in top-level directory.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License version 2
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20
21 ******************************************************************************/
22
23 // Messages d'erreur
24
25 // Support
26 LSerror :: defineError('POSIX_SUPPORT_01',
27   _("POSIX Support : The constant %{const} is not defined.")
28 );
29
30 LSerror :: defineError('POSIX_SUPPORT_02',
31   _("POSIX Support : Unable to load LSaddon::FTP.")
32 );
33
34 // Autres erreurs
35 LSerror :: defineError('POSIX_01',
36   _("POSIX : The attribute %{dependency} is missing. Unable to forge the attribute %{attr}.")
37 );
38       
39  /**
40   * Verification du support POSIX par ldapSaisie
41   * 
42   * @author Benjamin Renard <brenard@easter-eggs.com>
43   *
44   * @retval boolean true si POSIX est pleinement supporté, false sinon
45   */
46   function LSaddon_posix_support() {
47     
48     $retval=true;
49     
50     // Dependance de librairie
51     if (!function_exists('createDirsByFTP')) {
52       if(!LSsession :: loadLSaddon('ftp')) {
53         LSerror :: addErrorCode('POSIX_SUPPORT_02');
54         $retval=false;
55       }
56     }
57
58     $MUST_DEFINE_CONST= array(
59       'LS_POSIX_UID_ATTR',
60       'LS_POSIX_UIDNUMBER_ATTR',
61       'LS_POSIX_GIDNUMBER_ATTR',
62       'LS_POSIX_UIDNUMBER_MIN_VAL',
63       'LS_POSIX_GIDNUMBER_MIN_VAL',
64       'LS_POSIX_HOMEDIRECTORY',
65       'LS_POSIX_HOMEDIRECTORY_FTP_HOST',
66       'LS_POSIX_HOMEDIRECTORY_FTP_PORT',
67       'LS_POSIX_HOMEDIRECTORY_FTP_USER',
68       'LS_POSIX_HOMEDIRECTORY_FTP_PWD',
69       'LS_POSIX_HOMEDIRECTORY_FTP_PATH',
70       'LS_POSIX_DN_TO_UID_PATTERN',
71     );
72
73     foreach($MUST_DEFINE_CONST as $const) {
74       if ( (!defined($const)) || (constant($const) == "")) {
75         LSerror :: addErrorCode('POSIX_SUPPORT_O1',$const);
76         $retval=false;
77       }
78     }
79
80     return $retval;
81   }
82
83  /**
84   * Generation de uidNumber
85   * 
86   * @author Benjamin Renard <brenard@easter-eggs.com>
87   * 
88   * @param[in] $ldapObject L'objet ldap
89   *
90   * @retval integer uidNumber ou false si il y a un problème durant la génération
91   */
92   function generate_uidNumber($ldapObject) {
93
94     $objects = LSldap :: search (
95       LS_POSIX_UIDNUMBER_ATTR.'=*',
96       NULL,
97       array(
98         'attributes' => array(
99           LS_POSIX_UIDNUMBER_ATTR
100         )
101       )
102     );
103     $uidNumber = LS_POSIX_UIDNUMBER_MIN_VAL;
104
105     if (!is_array($objects))
106       return;
107
108     foreach($objects as $object) {
109       if($object['attrs'][LS_POSIX_UIDNUMBER_ATTR] > $uidNumber)
110         $uidNumber = $object['attrs'][LS_POSIX_UIDNUMBER_ATTR];
111     }
112
113     $uidNumber++;
114     return $uidNumber;
115
116   }
117
118  /**
119   * Generation de gidNumber
120   * 
121   * @author Benjamin Renard <brenard@easter-eggs.com>
122   * 
123   * @param[in] $ldapObject L'objet ldap
124   *
125   * @retval integer gidNumber ou false si il y a un problème durant la génération
126   */
127   function generate_gidNumber($ldapObject) {
128
129     $objects = LSldap :: search (
130       LS_POSIX_GIDNUMBER_ATTR.'=*',
131       NULL,
132       array(
133         'attributes' => array(
134           LS_POSIX_GIDNUMBER_ATTR
135         )
136       )
137     );
138     $gidNumber = LS_POSIX_GIDNUMBER_MIN_VAL;
139
140     if (!is_array($objects))
141       return;
142
143     foreach($objects as $object) {
144       if($object['attrs'][LS_POSIX_GIDNUMBER_ATTR] > $gidNumber)
145         $gidNumber = $object['attrs'][LS_POSIX_GIDNUMBER_ATTR];
146     }
147
148     $gidNumber++;
149     return $gidNumber;
150
151   }
152
153  /**
154   * Generation de homeDirectory
155   * 
156   * @author Benjamin Renard <brenard@easter-eggs.com>
157   * 
158   * @param[in] $ldapObject L'objet ldap
159   *
160   * @retval string homeDirectory ou false si il y a un problème durant la génération
161   */
162   function generate_homeDirectory($ldapObject) {
163     if ( get_class($ldapObject -> attrs[ LS_POSIX_UID_ATTR ]) != 'LSattribute' ) {
164       LSerror :: addErrorCode('POSIX_01',array('dependency' => 'uid', 'attr' => 'homeDirectory'));
165       return;
166     }
167     
168     $uid = $ldapObject -> attrs[ LS_POSIX_UID_ATTR ] -> getValue();
169     $home = LS_POSIX_HOMEDIRECTORY . $uid[0];
170     return $home;
171
172   }
173   
174  /**
175   * Generation de homeDirectory
176   * 
177   * @author Benjamin Renard <brenard@easter-eggs.com>
178   * 
179   * @param[in] $ldapObject L'objet ldap
180   *
181   * @retval string homeDirectory ou false si il y a un problème durant la génération
182   */
183   function createHomeDirectoryByFTP($ldapObject) {
184     $dir = getFData(LS_POSIX_HOMEDIRECTORY_FTP_PATH,$ldapObject,'getValue');
185     if (!createDirsByFTP(LS_POSIX_HOMEDIRECTORY_FTP_HOST,LS_POSIX_HOMEDIRECTORY_FTP_PORT,LS_POSIX_HOMEDIRECTORY_FTP_USER,LS_POSIX_HOMEDIRECTORY_FTP_PWD,$dir)) {
186       LSerror :: addErrorCode('POSIX_02');
187       return;
188     }
189     return true;
190   }
191
192 function generateMemberFromMemberUid($ldapObject) {
193     if ( get_class($ldapObject -> attrs[ 'memberUid' ]) != 'LSattribute' ) {
194       LSerror :: addErrorCode('POSIX_01',array('dependency' => 'memberUid', 'attr' => 'member'));
195       return;
196     }
197
198     if ( get_class($ldapObject -> attrs[ 'member' ]) != 'LSattribute' ) {
199       LSerror :: addErrorCode('POSIX_01',array('dependency' => 'member', 'attr' => 'member'));
200       return;
201     }
202
203     $uids = $ldapObject -> attrs[ 'memberUid' ] -> getValue();
204     $member = array();
205     if (is_array($uids)) {
206       foreach ( $uids as $uid ) {
207         $member[]='uid='.$uid.','.LSconfig::get('LSobjets.LSehessPerson.container_dn').','.LSsession::getTopDn();
208       }
209     }
210     return $member;
211
212   }
213
214 function generate_memberUidFromUniqueMember($ldapObject) {
215     if ( get_class($ldapObject -> attrs[ 'memberUid' ]) != 'LSattribute' ) {
216       LSerror :: addErrorCode('POSIX_01',array('dependency' => 'memberUid', 'attr' => 'memberUid'));
217       return;
218     }
219
220     if ( get_class($ldapObject -> attrs[ 'uniqueMember' ]) != 'LSattribute' ) {
221       LSerror :: addErrorCode('POSIX_01',array('dependency' => 'uniqueMember', 'attr' => 'memberUid'));
222       return;
223     }
224
225     $dns = $ldapObject -> attrs[ 'uniqueMember' ] -> getValue();
226     $uids = array();
227     if (is_array($dns)) {
228       foreach($dns as $dn) {
229         if(preg_match(LS_POSIX_DN_TO_UID_PATTERN,$dn,$matches)) {
230           $uids[]=$matches[1];
231         }
232       }
233     }
234     return $uids;
235 }
236
237
238 ?>