- LSsession :
[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
24  /**
25   * Données de configuration pour le support POSIX
26   */
27
28       // Nom de l'attribut LDAP uid
29       define('LS_POSIX_UID_ATTR','uid');
30
31       // Nom de l'attribut LDAP uidNumber
32       define('LS_POSIX_UIDNUMBER_ATTR','uidNumber');
33
34       // Valeur minimum d'un uidNumber
35       define('LS_POSIX_UIDNUMBER_MIN_VAL','100000');
36
37       // Nom de l'attribut LDAP gidNumber
38       define('LS_POSIX_GIDNUMBER_ATTR','gidNumber');
39
40       // Valeur minimum d'un gidNumber
41       define('LS_POSIX_GIDNUMBER_MIN_VAL','100000');
42
43       // Dossier contenant les homes des utilisateurs (defaut: /home/)
44       define('LS_POSIX_HOMEDIRECTORY','/home/');
45       
46       // Create homeDirectory by FTP - Host
47       define('LS_POSIX_HOMEDIRECTORY_FTP_HOST','127.0.0.1');
48       
49       // Create homeDirectory by FTP - Port
50       define('LS_POSIX_HOMEDIRECTORY_FTP_PORT',21);
51       
52       // Create homeDirectory by FTP - User
53       define('LS_POSIX_HOMEDIRECTORY_FTP_USER','admin');
54       
55       // Create homeDirectory by FTP - Password
56       define('LS_POSIX_HOMEDIRECTORY_FTP_PWD','password');
57       
58       // Create homeDirectory by FTP - Path
59       define('LS_POSIX_HOMEDIRECTORY_FTP_PATH','%{homeDirectory}');
60
61
62       // -- Message d'erreur --
63       // Support
64       $GLOBALS['LSerror_code']['POSIX_SUPPORT_01']= array (
65         'msg' => _("POSIX Support : La constante %{const} n'est pas définie."),
66         'level' => 'c'
67       );
68       
69       $GLOBALS['LSerror_code']['POSIX_SUPPORT_02']= array (
70         'msg' => _("POSIX Support : Impossible de charger LSaddons::FTP."),
71         'level' => 'c'
72       );
73
74       // Autres erreurs
75       $GLOBALS['LSerror_code']['POSIX_01']= array (
76         'msg' => _("POSIX : L'attribut %{dependency} est introuvable. Impossible de générer l'attribut %{attr}."),
77         'level' => 'c'
78       );
79       
80  /**
81   * Fin des données de configuration
82   */
83
84
85  /**
86   * Verification du support POSIX par ldapSaisie
87   * 
88   * @author Benjamin Renard <brenard@easter-eggs.com>
89   *
90   * @retval boolean true si Samba est pleinement supporté, false sinon
91   */
92   function LSaddon_posix_support() {
93     
94     $retval=true;
95     
96     // Dependance de librairie
97     if (!function_exists('createDirsByFTP')) {
98       if(!$GLOBALS['LSsession'] -> loadLSaddon('ftp')) {
99         $GLOBALS['LSerror'] -> addErrorCode('POSIX_SUPPORT_02');
100         $retval=false;
101       }
102     }
103
104     $MUST_DEFINE_CONST= array(
105       'LS_POSIX_UID_ATTR',
106       'LS_POSIX_UIDNUMBER_ATTR',
107       'LS_POSIX_GIDNUMBER_ATTR',
108       'LS_POSIX_UIDNUMBER_MIN_VAL',
109       'LS_POSIX_GIDNUMBER_MIN_VAL',
110       'LS_POSIX_HOMEDIRECTORY',
111       'LS_POSIX_HOMEDIRECTORY_FTP_HOST',
112       'LS_POSIX_HOMEDIRECTORY_FTP_PORT',
113       'LS_POSIX_HOMEDIRECTORY_FTP_USER',
114       'LS_POSIX_HOMEDIRECTORY_FTP_PWD',
115       'LS_POSIX_HOMEDIRECTORY_FTP_PATH'
116     );
117
118     foreach($MUST_DEFINE_CONST as $const) {
119       if ( constant($const) == '' ) {
120         $GLOBALS['LSerror'] -> addErrorCode('POSIX_SUPPORT_O1',$const);
121         $retval=false;
122       }
123     }
124
125     return $retval;
126   }
127
128  /**
129   * Generation de uidNumber
130   * 
131   * @author Benjamin Renard <brenard@easter-eggs.com>
132   * 
133   * @param[in] $ldapObject L'objet ldap
134   *
135   * @retval integer uidNumber ou false si il y a un problème durant la génération
136   */
137   function generate_uidNumber($ldapObject) {
138
139     $objects = $GLOBALS['LSldap'] -> search (LS_POSIX_UIDNUMBER_ATTR.'=*');
140     $uidNumber = LS_POSIX_UIDNUMBER_MIN_VAL;
141
142     if (!is_array($objects))
143       return;
144
145     foreach($objects as $object) {
146       if($object['attrs'][LS_POSIX_UIDNUMBER_ATTR] > $uidNumber)
147         $uidNumber = $object['attrs'][LS_POSIX_UIDNUMBER_ATTR];
148     }
149
150     $uidNumber++;
151     return $uidNumber;
152
153   }
154
155  /**
156   * Generation de gidNumber
157   * 
158   * @author Benjamin Renard <brenard@easter-eggs.com>
159   * 
160   * @param[in] $ldapObject L'objet ldap
161   *
162   * @retval integer gidNumber ou false si il y a un problème durant la génération
163   */
164   function generate_gidNumber($ldapObject) {
165
166     $objects = $GLOBALS['LSldap'] -> search (LS_POSIX_GIDNUMBER_ATTR.'=*');
167     $gidNumber = LS_POSIX_GIDNUMBER_MIN_VAL;
168
169     if (!is_array($objects))
170       return;
171
172     foreach($objects as $object) {
173       if($object['attrs'][LS_POSIX_GIDNUMBER_ATTR] > $gidNumber)
174         $gidNumber = $object['attrs'][LS_POSIX_GIDNUMBER_ATTR];
175     }
176
177     $gidNumber++;
178     return $gidNumber;
179
180   }
181
182  /**
183   * Generation de homeDirectory
184   * 
185   * @author Benjamin Renard <brenard@easter-eggs.com>
186   * 
187   * @param[in] $ldapObject L'objet ldap
188   *
189   * @retval string homeDirectory ou false si il y a un problème durant la génération
190   */
191   function generate_homeDirectory($ldapObject) {
192     if ( get_class($ldapObject -> attrs[ LS_POSIX_UID_ATTR ]) != 'LSattribute' ) {
193       $GLOBALS['LSerror'] -> addErrorCode('POSIX_01',array('dependency' => 'uid', 'attr' => 'homeDirectory'));
194       return;
195     }
196     
197     $uid = $ldapObject -> attrs[ LS_POSIX_UID_ATTR ] -> getValue();
198     $home = LS_POSIX_HOMEDIRECTORY . $uid[0];
199     return $home;
200
201   }
202   
203  /**
204   * Generation de homeDirectory
205   * 
206   * @author Benjamin Renard <brenard@easter-eggs.com>
207   * 
208   * @param[in] $ldapObject L'objet ldap
209   *
210   * @retval string homeDirectory ou false si il y a un problème durant la génération
211   */
212   function createHomeDirectoryByFTP($ldapObject) {
213     $dir = getFData(LS_POSIX_HOMEDIRECTORY_FTP_PATH,$ldapObject,'getValue');
214     if (!createDirsByFTP(LS_POSIX_HOMEDIRECTORY_FTP_HOST,LS_POSIX_HOMEDIRECTORY_FTP_PORT,LS_POSIX_HOMEDIRECTORY_FTP_USER,LS_POSIX_HOMEDIRECTORY_FTP_PWD,$dir)) {
215       $GLOBALS['LSerror'] -> addErrorCode('POSIX_02');
216       return;
217     }
218     return true;
219   }
220
221 ?>