Code

Updated phoneAccount.
[gosa.git] / bin / gosa-encrypt-passwords
1 #!/usr/bin/php
2 <?php
4 function cred_encrypt($input, $password) {
6   $size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
7   $iv = mcrypt_create_iv($size, MCRYPT_DEV_RANDOM);
9   return bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $password, $input, MCRYPT_MODE_ECB, $iv));
10 }
13 function get_random_char() {
14   $randno = rand (0, 63);
15   if ($randno < 12) {
16     return (chr ($randno + 46)); // Digits, '/' and '.'
17   } else if ($randno < 38) {
18     return (chr ($randno + 53)); // Uppercase
19   } else {
20     return (chr ($randno + 59)); // Lowercase
21   }
22 }
25 function get_random_string($size= 32){
26   $str= "";
27   for ($i = 0; $i < $size; $i++) {
28     $str .= get_random_char();
29   }
30   return $str;
31 }
34 # We need to have access to gosa.secrets
35 if (posix_getuid() != 0){
36   die ("This program needs to be called by root!\n");
37 }
39 # Do we have a valid gosa.conf?
40 if (!file_exists("/etc/gosa/gosa.conf")){
41   die ("Cannot find a valid /etc/gosa/gosa.conf!\n");
42 }
44 echo "Starting password encryption\n";
45 echo "* generating random master key\n";
46 $master_key= get_random_string();
48 # Do we have a valid gosa.secrets, already? 
49 if (file_exists("/etc/gosa/gosa.secrets")){
50   die ("There's already a /etc/gosa/gosa.secrets. Cannot convert your existing gosa.conf - aborted\n");
51 } else {
52   echo "* creating /etc/gosa/gosa.secrets\n";
53   $fp = fopen("/etc/gosa/gosa.secrets", 'w') or die("Cannot open /etc/gosa/gosa.secrets for writing - aborted");
54   fwrite($fp, "RequestHeader set GOSA_KEY $master_key\n");
55   fclose($fp);
56   chmod ("/etc/gosa/gosa.secrets", 0600);
57   chown ("/etc/gosa/gosa.secrets", "root");
58   chgrp ("/etc/gosa/gosa.secrets", "root");
59 }
61 # Locate all passwords inside the gosa.conf
62 echo "* loading /etc/gosa/gosa.conf\n";
63 $conf = new DOMDocument();
64 $conf->load("/etc/gosa/gosa.conf") or die ("Cannot read /etc/gosa/gosa.conf - aborted\n");
65 $conf->encoding = 'UTF-8';
66 $referrals= $conf->getElementsByTagName("referral");
67 echo "* encrypting existent passwords with master key\n";
68 foreach($referrals as $referral){
69   $pw= $referral->attributes->getNamedItem("password");
70   $pw->nodeValue= cred_encrypt($pw->nodeValue, $master_key);
71 }
73 # Move original gosa.conf out of the way and make it unreadable for the web user
74 echo "* creating backup in /etc/gosa/gosa.conf.orig\n";
75 rename("/etc/gosa/gosa.conf", "/etc/gosa/gosa.conf.orig");
76 chmod("/etc/gosa/gosa.conf.orig", 0600);
77 chown ("/etc/gosa/gosa.conf.orig", "root");
78 chgrp ("/etc/gosa/gosa.conf.orig", "root");
80 # Save new passwords
81 echo "* saving modified /etc/gosa/gosa.conf\n";
82 $conf->save("/etc/gosa/gosa.conf") or die("Cannot write modified /etc/gosa/gosa.conf - aborted\n");
83 chmod("/etc/gosa/gosa.conf", 0640);
84 chown ("/etc/gosa/gosa.conf", "root");
85 chgrp ("/etc/gosa/gosa.conf", "www-data");
86 echo "OK\n\n";
88 # Print reminder
89 echo<<<EOF
90 Please adapt your http gosa location declaration to include the newly
91 created "/etc/gosa/gosa.secrets".
93 Example:
95 Alias /gosa /usr/share/gosa/html
97 <Location /gosa>
98   php_admin_flag engine on
99   php_admin_value open_basedir "/etc/gosa/:/usr/share/gosa/:/var/cache/gosa/:/var/spool/gosa/"
100   php_admin_flag register_globals off
101   php_admin_flag allow_call_time_pass_reference on
102   php_admin_flag expose_php off
103   php_admin_flag zend.ze1_compatibility_mode off
104   php_admin_flag register_long_arrays off
105   php_admin_flag magic_quotes_gpc on
106   include /etc/gosa/gosa.secrets
107 </Location>
110 Please reload your httpd configuration after you've modified anything.
113 EOF;
114 ?>