- LSaddon::Posix : Optimisation des recherches pour le calcul des
[ldapsaisie.git] / trunk / 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 Samba 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     );
71
72     foreach($MUST_DEFINE_CONST as $const) {
73       if ( (!defined($const)) || (constant($const) == "")) {
74         LSerror :: addErrorCode('POSIX_SUPPORT_O1',$const);
75         $retval=false;
76       }
77     }
78
79     return $retval;
80   }
81
82  /**
83   * Generation de uidNumber
84   * 
85   * @author Benjamin Renard <brenard@easter-eggs.com>
86   * 
87   * @param[in] $ldapObject L'objet ldap
88   *
89   * @retval integer uidNumber ou false si il y a un problème durant la génération
90   */
91   function generate_uidNumber($ldapObject) {
92
93     $objects = LSldap :: search (
94       LS_POSIX_UIDNUMBER_ATTR.'=*',
95       NULL,
96       array(
97         'attributes' => array(
98           LS_POSIX_UIDNUMBER_ATTR
99         )
100       )
101     );
102     $uidNumber = LS_POSIX_UIDNUMBER_MIN_VAL;
103
104     if (!is_array($objects))
105       return;
106
107     foreach($objects as $object) {
108       if($object['attrs'][LS_POSIX_UIDNUMBER_ATTR] > $uidNumber)
109         $uidNumber = $object['attrs'][LS_POSIX_UIDNUMBER_ATTR];
110     }
111
112     $uidNumber++;
113     return $uidNumber;
114
115   }
116
117  /**
118   * Generation de gidNumber
119   * 
120   * @author Benjamin Renard <brenard@easter-eggs.com>
121   * 
122   * @param[in] $ldapObject L'objet ldap
123   *
124   * @retval integer gidNumber ou false si il y a un problème durant la génération
125   */
126   function generate_gidNumber($ldapObject) {
127
128     $objects = LSldap :: search (
129       LS_POSIX_GIDNUMBER_ATTR.'=*',
130       NULL,
131       array(
132         'attributes' => array(
133           LS_POSIX_GIDNUMBER_ATTR
134         )
135       )
136     );
137     $gidNumber = LS_POSIX_GIDNUMBER_MIN_VAL;
138
139     if (!is_array($objects))
140       return;
141
142     foreach($objects as $object) {
143       if($object['attrs'][LS_POSIX_GIDNUMBER_ATTR] > $gidNumber)
144         $gidNumber = $object['attrs'][LS_POSIX_GIDNUMBER_ATTR];
145     }
146
147     $gidNumber++;
148     return $gidNumber;
149
150   }
151
152  /**
153   * Generation de homeDirectory
154   * 
155   * @author Benjamin Renard <brenard@easter-eggs.com>
156   * 
157   * @param[in] $ldapObject L'objet ldap
158   *
159   * @retval string homeDirectory ou false si il y a un problème durant la génération
160   */
161   function generate_homeDirectory($ldapObject) {
162     if ( get_class($ldapObject -> attrs[ LS_POSIX_UID_ATTR ]) != 'LSattribute' ) {
163       LSerror :: addErrorCode('POSIX_01',array('dependency' => 'uid', 'attr' => 'homeDirectory'));
164       return;
165     }
166     
167     $uid = $ldapObject -> attrs[ LS_POSIX_UID_ATTR ] -> getValue();
168     $home = LS_POSIX_HOMEDIRECTORY . $uid[0];
169     return $home;
170
171   }
172   
173  /**
174   * Generation de homeDirectory
175   * 
176   * @author Benjamin Renard <brenard@easter-eggs.com>
177   * 
178   * @param[in] $ldapObject L'objet ldap
179   *
180   * @retval string homeDirectory ou false si il y a un problème durant la génération
181   */
182   function createHomeDirectoryByFTP($ldapObject) {
183     $dir = getFData(LS_POSIX_HOMEDIRECTORY_FTP_PATH,$ldapObject,'getValue');
184     if (!createDirsByFTP(LS_POSIX_HOMEDIRECTORY_FTP_HOST,LS_POSIX_HOMEDIRECTORY_FTP_PORT,LS_POSIX_HOMEDIRECTORY_FTP_USER,LS_POSIX_HOMEDIRECTORY_FTP_PWD,$dir)) {
185       LSerror :: addErrorCode('POSIX_02');
186       return;
187     }
188     return true;
189   }
190
191 ?>