ff8cba91b3e744849e5ff4dd657702ec6e2c13fa
[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
47
48       // -- Message d'erreur --
49       // Support
50       $GLOBALS['error_code']['POSIX_SUPPORT_01']= array (
51         'msg' => _("POSIX Support : La constante %{const} n'est pas définie."),
52         'level' => 'c'
53       );
54
55       // Autres erreurs
56       $GLOBALS['error_code']['POSIX_01']= array (
57         'msg' => _("POSIX : L'attribut %{dependency} est introuvable. Impossible de générer l'attribut %{attr}."),
58         'level' => 'c'
59       );
60       
61  /**
62   * Fin des données de configuration
63   */
64
65
66  /**
67   * Verification du support POSIX par ldapSaisie
68   * 
69   * @author Benjamin Renard <brenard@easter-eggs.com>
70   *
71   * @retval boolean true si Samba est pleinement supporté, false sinon
72   */
73   function LSaddon_posix_support() {
74     
75     $retval=true;
76
77     $MUST_DEFINE_CONST= array(
78       'LS_POSIX_UID_ATTR',
79       'LS_POSIX_UIDNUMBER_ATTR',
80       'LS_POSIX_GIDNUMBER_ATTR',
81       'LS_POSIX_UIDNUMBER_MIN_VAL',
82       'LS_POSIX_GIDNUMBER_MIN_VAL',
83       'LS_POSIX_HOMEDIRECTORY'
84     );
85
86     foreach($MUST_DEFINE_CONST as $const) {
87       if ( constant($const) == '' ) {
88         $GLOBALS['LSerror'] -> addErrorCode('POSIX_SUPPORT_O1',$const);
89         $retval=false;
90       }
91     }
92
93     return $retval;
94   }
95
96  /**
97   * Generation de uidNumber
98   * 
99   * @author Benjamin Renard <brenard@easter-eggs.com>
100   * 
101   * @param[in] $ldapObject L'objet ldap
102   *
103   * @retval integer uidNumber ou false si il y a un problème durant la génération
104   */
105   function generate_uidNumber($ldapObject) {
106
107     $objects = $GLOBALS['LSldap'] -> search (LS_POSIX_UIDNUMBER_ATTR.'=*');
108     $uidNumber = LS_POSIX_UIDNUMBER_MIN_VAL;
109
110     if (!is_array($objects))
111       return;
112
113     foreach($objects as $object) {
114       if($object['attrs'][LS_POSIX_UIDNUMBER_ATTR] > $uidNumber)
115         $uidNumber = $object['attrs'][LS_POSIX_UIDNUMBER_ATTR];
116     }
117
118     $uidNumber++;
119     return $uidNumber;
120
121   }
122
123  /**
124   * Generation de gidNumber
125   * 
126   * @author Benjamin Renard <brenard@easter-eggs.com>
127   * 
128   * @param[in] $ldapObject L'objet ldap
129   *
130   * @retval integer gidNumber ou false si il y a un problème durant la génération
131   */
132   function generate_gidNumber($ldapObject) {
133
134     $objects = $GLOBALS['LSldap'] -> search (LS_POSIX_GIDNUMBER_ATTR.'=*');
135     $gidNumber = LS_POSIX_GIDNUMBER_MIN_VAL;
136
137     if (!is_array($objects))
138       return;
139
140     foreach($objects as $object) {
141       if($object['attrs'][LS_POSIX_GIDNUMBER_ATTR] > $gidNumber)
142         $gidNumber = $object['attrs'][LS_POSIX_GIDNUMBER_ATTR];
143     }
144
145     $gidNumber++;
146     return $gidNumber;
147
148   }
149
150  /**
151   * Generation de homeDirectory
152   * 
153   * @author Benjamin Renard <brenard@easter-eggs.com>
154   * 
155   * @param[in] $ldapObject L'objet ldap
156   *
157   * @retval string homeDirectory ou false si il y a un problème durant la génération
158   */
159   function generate_homeDirectory($ldapObject) {
160     if ( get_class($ldapObject -> attrs[ LS_POSIX_UID_ATTR ]) != 'LSattribute' ) {
161       $GLOBALS['LSerror'] -> addErrorCode('POSIX_01',array('dependency' => 'uid', 'attr' => 'homeDirectory'));
162       return;
163     }
164     
165     $uid = $ldapObject -> attrs[ LS_POSIX_UID_ATTR ] -> getValue();
166     $home = LS_POSIX_HOMEDIRECTORY . $uid[0];
167     return $home;
168
169   }
170
171 ?>