blob: 637c54f0b547ce3d3f315660abf8795109ebe09b [file] [log] [blame]
matheusfillipeabd513e2021-05-11 03:29:11 -03001<?php
2
Marc Kupietzd871d882023-03-05 18:34:16 +01003include_once "User.php";
4use \User as User;
5
matheusfillipef43dd962021-05-13 23:27:01 -03006function debug($msg)
7{
matheusfillipeabd513e2021-05-11 03:29:11 -03008 include 'config.php';
9 if ($DEBUG)
matheusfillipef43dd962021-05-13 23:27:01 -030010 echo $msg . "\n";
matheusfillipeabd513e2021-05-11 03:29:11 -030011}
matheusfillipef43dd962021-05-13 23:27:01 -030012function generateSalt($length = 10)
13{
14 $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
matheusfillipeabd513e2021-05-11 03:29:11 -030015
matheusfillipef43dd962021-05-13 23:27:01 -030016 $string = "";
17 for ($i = 0; $i < $length; $i++) {
18 $string .= substr($chars, rand(0, strlen($chars) - 1), 1);
19 }
matheusfillipeabd513e2021-05-11 03:29:11 -030020
matheusfillipef43dd962021-05-13 23:27:01 -030021 return $string;
matheusfillipeabd513e2021-05-11 03:29:11 -030022}
23
matheusfillipeabd513e2021-05-11 03:29:11 -030024
matheusfillipef43dd962021-05-13 23:27:01 -030025function ldap_search_query($query, $filter = "cn")
26{
matheusfillipeabd513e2021-05-11 03:29:11 -030027 include 'config.php';
28 $ldap_host = $HOST;
29 $ldap_port = $PORT;
30 $ldaptree = explode("{},", $BASE_DN)[1];
31
matheusfillipef43dd962021-05-13 23:27:01 -030032 $ldap_user = "cn=" . $USER . "," . join(",", array_slice(explode(",", $ldaptree), 1));
matheusfillipeabd513e2021-05-11 03:29:11 -030033 $ldap_pass = $PASSWORD;
34
35 //First: Connect to LDAP Server
matheusfillipef43dd962021-05-13 23:27:01 -030036 $connect = ldap_connect($ldap_host, $ldap_port)
37 or debug(">>Could not connect to LDAP server to add user<<");
matheusfillipeabd513e2021-05-11 03:29:11 -030038 ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
39 ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);
40
41 //Login to LDAP
42 ldap_bind($connect, $ldap_user, $ldap_pass)
matheusfillipef43dd962021-05-13 23:27:01 -030043 or debug(">>Could not bind to $ldap_host to add user<<");
matheusfillipeabd513e2021-05-11 03:29:11 -030044
matheusfillipef43dd962021-05-13 23:27:01 -030045
46 $result = ldap_search($connect, $ldaptree, "(" . $filter . "=" . $query . ")") or die("Error in search query: " . ldap_error($connect));
matheusfillipeabd513e2021-05-11 03:29:11 -030047 $data = ldap_get_entries($connect, $result);
48 return $data;
49}
50
Marc Kupietzd871d882023-03-05 18:34:16 +010051function ldap_add_user(User $user)
matheusfillipeabd513e2021-05-11 03:29:11 -030052{
53 include 'config.php';
54 $ldap_host = $HOST;
55 $ldap_port = $PORT;
56 $base_dn = str_replace('{}', $user->user_name, $BASE_DN);
57 $ldaptree = explode("{},", $BASE_DN)[1];
58
59
matheusfillipef43dd962021-05-13 23:27:01 -030060 $info["givenName"] = $user->first_name;
61 $info["sn"] = $user->last_name;
62 $info["uid"] = $user->user_name;
matheusfillipeabd513e2021-05-11 03:29:11 -030063 #$info["homeDirectory"]="/home/";
matheusfillipef43dd962021-05-13 23:27:01 -030064 $info["mail"] = $user->email;
Marc Kupietza19f3072023-02-25 14:16:40 +010065 $info["o"] = $user->organization;
matheusfillipef43dd962021-05-13 23:27:01 -030066 $info["displayName"] = $user->first_name . " " . $user->last_name;
matheusfillipeabd513e2021-05-11 03:29:11 -030067 #$info["departmentNumber"]=$user->id;
matheusfillipef43dd962021-05-13 23:27:01 -030068 $info["cn"] = $user->user_name;
69 $info["userPassword"] = $user->user_hash;
matheusfillipeabd513e2021-05-11 03:29:11 -030070 $info["objectclass"][0] = "top";
71 $info["objectclass"][1] = "person";
72 $info["objectclass"][2] = "inetOrgPerson";
73 $info["objectclass"][3] = "organizationalPerson";
74
75
76
matheusfillipef43dd962021-05-13 23:27:01 -030077 $ldap_user = "cn=" . $USER . "," . join(",", array_slice(explode(",", $ldaptree), 1));
matheusfillipeabd513e2021-05-11 03:29:11 -030078 $ldap_pass = $PASSWORD;
79
80 //First: Connect to LDAP Server
matheusfillipef43dd962021-05-13 23:27:01 -030081 $connect = ldap_connect($ldap_host, $ldap_port)
82 or debug(">>Could not connect to LDAP server to add user<<");
matheusfillipeabd513e2021-05-11 03:29:11 -030083 ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
84 ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);
85
86 //Login to LDAP
87 ldap_bind($connect, $ldap_user, $ldap_pass)
matheusfillipef43dd962021-05-13 23:27:01 -030088 or debug(">>Could not bind to $ldap_host to add user<<");
matheusfillipeabd513e2021-05-11 03:29:11 -030089
90 // Adding new user
91
matheusfillipef43dd962021-05-13 23:27:01 -030092 $add = ldap_add($connect, $base_dn, $info)
93 or debug(">>Not able to load user <<");
matheusfillipeabd513e2021-05-11 03:29:11 -030094
95 // Close connection
matheusfillipef43dd962021-05-13 23:27:01 -030096 ldap_close($connect);
matheusfillipeabd513e2021-05-11 03:29:11 -030097
matheusfillipef43dd962021-05-13 23:27:01 -030098 // Return value of operation
matheusfillipeabd513e2021-05-11 03:29:11 -030099
100 return $add;
101}
Marc Kupietzd871d882023-03-05 18:34:16 +0100102function ldap_user_count(string $user)
matheusfillipef43dd962021-05-13 23:27:01 -0300103{
matheusfillipeabd513e2021-05-11 03:29:11 -0300104 return ldap_search_query($user)["count"];
105}
matheusfillipef43dd962021-05-13 23:27:01 -0300106function ldap_mail_count($email)
107{
matheusfillipeabd513e2021-05-11 03:29:11 -0300108 return ldap_search_query($email, "mail")["count"];
109}
matheusfillipef43dd962021-05-13 23:27:01 -0300110
111function change_password($email, $new_password)
112{
113 include 'config.php';
114 $ldap_host = $HOST;
115 $ldap_port = $PORT;
116 $ldaptree = explode("{},", $BASE_DN)[1];
117
118 $ldap_user = "cn=" . $USER . "," . join(",", array_slice(explode(",", $ldaptree), 1));
119 $ldap_pass = $PASSWORD;
120
121 //First: Connect to LDAP Server
122 $connect = ldap_connect($ldap_host, $ldap_port)
123 or debug(">>Could not connect to LDAP server to add user<<");
124 ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
125 ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);
126
127 //Login to LDAP
128 ldap_bind($connect, $ldap_user, $ldap_pass)
129 or debug(">>Could not bind to $ldap_host to add user<<");
130
131
132 $result = ldap_search($connect, $ldaptree, "(mail=" . $email . ")") or die("Error in search query: " . ldap_error($connect));
133 $data = ldap_get_entries($connect, $result);
134 if (!$data['count'] || !isset($data[0]["dn"]) || empty($data[0]["dn"])) {
135 return false;
136 }
137 $dn = $data[0]["dn"];
138
Marc Kupietz92e48662023-02-23 10:04:21 +0100139 if ($ENCRYPT_PASSWORDS) {
140 $newEntry = ['userPassword' => "{crypt}" . crypt($new_password, '$6$' . generateSalt(10) . '$')];
141 # $newEntry = ['userPassword' => "{SHA}" . base64_encode(sha1($new_password, true))];
142 } else {
143 $newEntry = ['userPassword' => "{CLEAR}" . $new_password];
144 }
matheusfillipef43dd962021-05-13 23:27:01 -0300145 if (ldap_mod_replace($connect, $dn, $newEntry))
146 return true;
147 else
148 return false;
149}