61bed19a2e2c7ef865a27daa861bb4b47d489ba5
[ldapsaisie.git] / trunk / includes / addons / LSaddons.samba.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 $GLOBALS['LSerror_code']['SAMBA_SUPPORT_01']= array (
27   'msg' => _("SAMBA Support : la classe smHash ne peut pas être chargée."),
28   'level' => 'c'
29 );
30 $GLOBALS['LSerror_code']['SAMBA_SUPPORT_02']= array (
31   'msg' => _("SAMBA Support : La constante %{const} n'est pas définie."),
32   'level' => 'c'
33 );
34
35 $GLOBALS['LSerror_code']['SAMBA_SUPPORT_03']= array (
36   'msg' => _("SAMBA Support : Les constantes LS_SAMBA_SID_BASE_USER et LS_SAMBA_SID_BASE_GROUP ne doivent pas avoir la même parité pour l'unicité des sambaSID."),
37   'level' => 'c'
38 );
39
40 // Autres erreurs
41 $GLOBALS['LSerror_code']['SAMBA_01']= array (
42   'msg' => _("SAMBA Support : L'attribut %{dependency} est introuvable. Impossible de générer l'attribut %{attr}."),
43   'level' => 'c'
44 );
45
46  /**
47   * Verification du support Samba par ldapSaisie
48   * 
49   * @author Benjamin Renard <brenard@easter-eggs.com>
50   *
51   * @retval boolean true si Samba est pleinement supporté, false sinon
52   */
53   function LSaddon_samba_support() {
54     
55     $retval=true;
56
57     // Dependance de librairie
58     if ( !class_exists('smbHash') ) {
59       if ( !LSsession::includeFile(LS_LIB_DIR . 'class.smbHash.php') ) {
60         LSerror :: addErrorCode('SAMBA_SUPPORT_01');
61         $retval=false;
62       }
63     }
64
65
66     $MUST_DEFINE_CONST= array(
67       'LS_SAMBA_DOMAIN_SID',
68       'LS_SAMBA_SID_BASE_USER',
69       'LS_SAMBA_SID_BASE_GROUP',
70       'LS_SAMBA_UIDNUMBER_ATTR',
71       'LS_SAMBA_GIDNUMBER_ATTR',
72       'LS_SAMBA_USERPASSWORD_ATTR'
73     );
74
75     foreach($MUST_DEFINE_CONST as $const) {
76       if ( (!defined($const)) || (constant($const) == "")) {
77         LSerror :: addErrorCode('SAMBA_SUPPORT_02',$const);
78         $retval=false;
79       }
80     }
81
82     // Pour l'intégrité des SID
83     if ( (LS_SAMBA_SID_BASE_USER % 2) == (LS_SAMBA_SID_BASE_GROUP % 2) ) {
84         LSerror :: addErrorCode('SAMBA_SUPPORT_03');
85         $retval=false;
86     }
87     
88     return $retval;
89   }
90
91  /**
92   * Generation de sambaSID d'un utilisateur
93   * 
94   * @author Benjamin Renard <brenard@easter-eggs.com>
95   * 
96   *   Number   = LS_SAMBA_UIDNUMBER_ATTR * 2 + LS_SAMBA_SID_BASE_USER
97   *   sambaSID = LS_SAMBA_DOMAIN_SID-Number
98   *
99   * @param[in] $ldapObject L'objet ldap
100   *
101   * @retval string SambaSID ou false si il y a un problème durant la génération
102   */
103   function generate_sambaUserSID($ldapObject) {
104     if ( get_class($ldapObject -> attrs[ LS_SAMBA_UIDNUMBER_ATTR ]) != 'LSattribute' ) {
105       LSerror :: addErrorCode('SAMBA_01',array('dependency' => LS_SAMBA_UIDNUMBER_ATTR, 'attr' => 'sambaSID'));
106       return;
107     }
108
109     $uidnumber_attr_val = $ldapObject -> attrs[ LS_SAMBA_UIDNUMBER_ATTR ] -> getValue();
110     $uidnumber_attr_val = $uidnumber_attr_val[0];
111     $uidNumber = $uidnumber_attr_val * 2 + LS_SAMBA_SID_BASE_USER;
112     $sambaSID = LS_SAMBA_DOMAIN_SID . '-' . $uidNumber;
113
114     return ($sambaSID);
115   }
116   
117  /**
118   * Generation de sambaSID d'un groupe
119   * 
120   * @author Benjamin Renard <brenard@easter-eggs.com>
121   * 
122   *   Number   = LS_SAMBA_GIDNUMBER_ATTR * 2 + LS_SAMBA_SID_BASE_GROUP
123   *   sambaSID = LS_SAMBA_DOMAIN_SID-Number
124   *
125   * @param[in] $ldapObject L'objet ldap
126   *
127   * @retval string SambaSID ou false si il y a un problème durant la génération
128   */
129   function generate_sambaGroupSID($ldapObject) {
130     if ( get_class($ldapObject -> attrs[ LS_SAMBA_GIDNUMBER_ATTR ]) != 'LSattribute' ) {
131       LSerror :: addErrorCode('SAMBA_01',array('dependency' => LS_SAMBA_GIDNUMBER_ATTR, 'attr' => 'sambaSID'));
132       return;
133     }
134
135     $gidnumber_attr_val = $ldapObject -> attrs[ LS_SAMBA_GIDNUMBER_ATTR ] -> getValue();
136     $gidnumber_attr_val = $gidnumber_attr_val[0];
137     $gidNumber = $gidnumber_attr_val * 2 + LS_SAMBA_SID_BASE_GROUP;
138     $sambaSID = LS_SAMBA_DOMAIN_SID . '-' . $gidNumber;
139
140     return ($sambaSID);
141   }
142
143  /**
144   * Generation de sambaPrimaryGroupSID
145   * 
146   * @author Benjamin Renard <brenard@easter-eggs.com>
147   * 
148   *   Number   = LS_SAMBA_GIDNUMBER_ATTR * 2 + LS_SAMBA_SID_BASE_GROUP
149   *   sambaSID = LS_SAMBA_DOMAIN_SID-Number
150   *
151   * @param[in] $ldapObject L'objet ldap
152   *
153   * @retval string sambaPrimaryGroupSID ou false si il y a un problème durant la génération
154   */
155   function generate_sambaPrimaryGroupSID($ldapObject) {
156     if ( get_class($ldapObject -> attrs[ LS_SAMBA_GIDNUMBER_ATTR ]) != 'LSattribute' ) {
157       LSerror :: addErrorCode('SAMBA_02',array('dependency' => LS_SAMBA_GIDNUMBER_ATTR, 'attr' => 'sambaPrimaryGroupSID'));
158       return;
159     }
160     
161     $gidNumber = $ldapObject -> attrs[ LS_SAMBA_GIDNUMBER_ATTR ] -> getValue();
162     $gidNumber = $gidNumber[0] * 2 + LS_SAMBA_SID_BASE_GROUP;
163     $sambaPrimaryGroupSID = LS_SAMBA_DOMAIN_SID . '-' . $gidNumber;
164
165     return ($sambaPrimaryGroupSID);
166   }
167
168  /**
169   * Generation de sambaNTPassword
170   * 
171   * @author Benjamin Renard <brenard@easter-eggs.com>
172   * 
173   * @param[in] $ldapObject L'objet ldap
174   *
175   * @retval string sambaNTPassword ou false si il y a un problème durant la génération
176   */
177   function generate_sambaNTPassword($ldapObject) {
178     if ( get_class($ldapObject -> attrs[ LS_SAMBA_USERPASSWORD_ATTR ]) != 'LSattribute' ) {
179       LSerror :: addErrorCode('SAMBA_03',array('dependency' => LS_SAMBA_USERPASSWORD_ATTR, 'attr' => 'sambaNTPassword'));
180       return;
181     }
182
183     $password = $ldapObject -> attrs[ LS_SAMBA_USERPASSWORD_ATTR ] -> ldap -> getClearPassword();
184     $sambapassword = new smbHash;
185     $sambaNTPassword = $sambapassword -> nthash($password);
186
187     if($sambaNTPassword == '') {
188       return;
189     }
190     return $sambaNTPassword;
191   }
192
193  /**
194   * Generation de sambaLMPassword
195   * 
196   * @author Benjamin Renard <brenard@easter-eggs.com>
197   * 
198   * @param[in] $ldapObject L'objet ldap
199   *
200   * @retval string sambaLMPassword ou false si il y a un problème durant la génération
201   */
202   function generate_sambaLMPassword($ldapObject) {
203     if ( get_class($ldapObject -> attrs[ LS_SAMBA_USERPASSWORD_ATTR ]) != 'LSattribute' ) {
204       LSerror :: addErrorCode('SAMBA_04',array('dependency' => LS_SAMBA_USERPASSWORD_ATTR, 'attr' => 'sambaLMPassword'));
205       return;
206     }
207
208     $password = $ldapObject -> attrs[ LS_SAMBA_USERPASSWORD_ATTR ] -> ldap -> getClearPassword();
209     $sambapassword = new smbHash;
210     $sambaLMPassword = $sambapassword -> lmhash($password);
211
212     if($sambaLMPassword == '') {
213       return;
214     }
215     return $sambaLMPassword;
216   }
217
218 ?>