1 | <?php |
---|
2 | /* |
---|
3 | Plugin Name: Ldap_Login |
---|
4 | Version: 0.1 |
---|
5 | Description: Permet de se logger via une authentification ldap |
---|
6 | Plugin URI: http://www.22decembre.eu |
---|
7 | Author: 22decembre |
---|
8 | Author URI:http://www.22decembre.eu |
---|
9 | */ |
---|
10 | |
---|
11 | if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!'); |
---|
12 | |
---|
13 | add_event_handler('try_login','ldap_login', 0, 4); |
---|
14 | |
---|
15 | function ldap_login($username, $password, $remember_me, $success) |
---|
16 | { |
---|
17 | #pwg_session_gc(); |
---|
18 | |
---|
19 | global $conf; |
---|
20 | $query = ' |
---|
21 | SELECT '.$conf['user_fields']['id'].' AS id FROM '.USERS_TABLE.' WHERE '.$conf['user_fields']['username'].' = \''.pwg_db_real_escape_string($username).'\' |
---|
22 | ;'; |
---|
23 | |
---|
24 | $row = pwg_db_fetch_assoc(pwg_query($query)); |
---|
25 | |
---|
26 | // Vérification de l'authentification |
---|
27 | if (ldap_log($username,$password)) { |
---|
28 | |
---|
29 | log_user($row['id'], $remember_me); |
---|
30 | trigger_action('login_success', stripslashes($username)); |
---|
31 | return true; |
---|
32 | } |
---|
33 | else |
---|
34 | { |
---|
35 | trigger_action('login_failure', stripslashes($username)); |
---|
36 | return false; |
---|
37 | } |
---|
38 | } |
---|
39 | |
---|
40 | function ldap_log($user,$pass) |
---|
41 | { |
---|
42 | $obj = new Ldap(); |
---|
43 | $obj->load_config(); |
---|
44 | |
---|
45 | // Eléments d'authentification LDAP |
---|
46 | $ldaprdn = $obj->config['pref'].$user.$obj->config['basedn']; // DN ou RDN LDAP |
---|
47 | //$ldappass = 'password'; // Mot de passe associé |
---|
48 | |
---|
49 | // Connexion au serveur LDAP |
---|
50 | $ldapconn = ldap_connect($obj->config['host']) |
---|
51 | or die("Impossible de se connecter au serveur LDAP."); |
---|
52 | |
---|
53 | ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3); |
---|
54 | |
---|
55 | if ($ldapconn) { |
---|
56 | |
---|
57 | // Connexion au serveur LDAP |
---|
58 | $ldapbind = ldap_bind($ldapconn, $ldaprdn, $pass); |
---|
59 | |
---|
60 | // Vérification de l'authentification |
---|
61 | if ($ldapbind) { |
---|
62 | // echo "Connexion LDAP réussie..."; |
---|
63 | return true; |
---|
64 | } else { |
---|
65 | // echo "Connexion LDAP échouée..."; |
---|
66 | return false; |
---|
67 | } |
---|
68 | |
---|
69 | } |
---|
70 | } |
---|
71 | |
---|
72 | class Ldap |
---|
73 | { |
---|
74 | var $config; |
---|
75 | function load_config() |
---|
76 | { |
---|
77 | $x = @file_get_contents( dirname(__FILE__).'/data.dat' ); |
---|
78 | if ($x!==false) |
---|
79 | { |
---|
80 | $c = unserialize($x); |
---|
81 | // do some more tests here |
---|
82 | $this->config = $c; |
---|
83 | } |
---|
84 | |
---|
85 | if ( !isset($this->config) |
---|
86 | or empty($this->config['Test']) ) |
---|
87 | { |
---|
88 | $this->config['host'] = 'localhost'; |
---|
89 | $this->config['basedn'] = ',ou=utilisateurs,dc=22decembre,dc=eu'; |
---|
90 | $this->config['pref'] = 'uid='; |
---|
91 | $this->save_config(); |
---|
92 | } |
---|
93 | } |
---|
94 | function save_config() |
---|
95 | { |
---|
96 | $file = fopen( dirname(__FILE__).'/data.dat', 'w' ); |
---|
97 | fwrite($file, serialize($this->config) ); |
---|
98 | fclose( $file ); |
---|
99 | } |
---|
100 | |
---|
101 | function ldap_admin_menu($menu) |
---|
102 | { |
---|
103 | array_push($menu, |
---|
104 | array( |
---|
105 | 'NAME' => 'Ldap Login', |
---|
106 | 'URL' => get_admin_plugin_menu_link(dirname(__FILE__).'/admin/ldap_login_plugin_admin.php') ) |
---|
107 | ); |
---|
108 | |
---|
109 | return $menu; |
---|
110 | } |
---|
111 | } |
---|
112 | |
---|
113 | $ldap = new Ldap(); |
---|
114 | $ldap->load_config(); |
---|
115 | add_event_handler('get_admin_plugin_menu_links', array(&$ldap, 'ldap_admin_menu')); |
---|
116 | set_plugin_data($plugin['id'], $ldap); |
---|
117 | |
---|
118 | ?> |
---|