Handle hostnames with upper-case letters
[webmin.git] / mysql / useradmin_update.pl
1
2 $use_global_login = 1;          # Always login as master user, not the mysql
3                                 # login of the current Webmin user
4 do 'mysql-lib.pl';
5
6 # useradmin_create_user(&details)
7 # Create a new mysql user if syncing is enabled
8 sub useradmin_create_user
9 {
10 if ($config{'sync_create'}) {
11         local %privs;
12         map { $privs{$_}++ } split(/\s+/, $config{'sync_privs'});
13         local @yesno;
14         for($i=3; $i<=&user_priv_cols()+3-1; $i++) {
15                 push(@yesno, $privs{$i} ? "'Y'" : "'N'");
16                 }
17         local @desc = &table_structure($master_db, 'user');
18         local $sql = sprintf "insert into user (%s) values ('%s', '%s', %s, %s)",
19                 join(",", map { $desc[$_]->{'field'} } (0 .. &user_priv_cols()+3-1)),
20                 $config{'sync_host'},
21                 $_[0]->{'user'},
22                 $_[0]->{'passmode'} == 3 ? "$password_func('$_[0]->{'plainpass'}')" :
23                 $_[0]->{'passmode'} == 0 ? "''" : "'*'",
24                 join(",", @yesno);
25         &execute_sql_logged($master_db, $sql);
26         &execute_sql_logged($master_db, 'flush privileges');
27         }
28 }
29
30 # useradmin_delete_user(&details)
31 # Delete a mysql user
32 sub useradmin_delete_user
33 {
34 if ($config{'sync_delete'}) {
35         &execute_sql_logged($master_db,
36                     "delete from user where user = '$_[0]->{'user'}'");
37         &execute_sql_logged($master_db,
38                     "delete from db where user = '$_[0]->{'user'}'");
39         &execute_sql_logged($master_db,
40                     "delete from tables_priv where user = '$_[0]->{'user'}'");
41         &execute_sql_logged($master_db,
42                     "delete from columns_priv where user = '$_[0]->{'user'}'");
43         &execute_sql_logged($master_db, 'flush privileges');
44         }
45 }
46
47 # useradmin_modify_user(&details)
48 # Update a mysql user
49 sub useradmin_modify_user
50 {
51 if ($config{'sync_modify'}) {
52         local $sql;
53         $_[0]->{'olduser'} ||= $_[0]->{'user'}; # In case not changed
54         if ($_[0]->{'passmode'} == 4) {
55                 # Not changing password
56                 $sql = sprintf "update user set user = '%s' where user = '%s'", $_[0]->{'user'}, $_[0]->{'olduser'};
57                 }
58         elsif ($_[0]->{'passmode'} == 3) {
59                 # Setting new password
60                 $sql = sprintf "update user set user = '%s', password = $password_func('%s') where user = '%s'", $_[0]->{'user'}, $_[0]->{'plainpass'}, $_[0]->{'olduser'};
61                 }
62         elsif ($_[0]->{'passmode'} == 0) {
63                 # No password
64                 $sql = sprintf "update user set user = '%s', password = '' where user = '%s'", $_[0]->{'user'}, $_[0]->{'olduser'};
65                 }
66         else {
67                 # Assume locked
68                 $sql = sprintf "update user set user = '%s', password = '*' where user = '%s'", $_[0]->{'user'}, $_[0]->{'olduser'};
69                 }
70         &execute_sql_logged($master_db, $sql);
71         if ($_[0]->{'user'} ne $_[0]->{'olduser'}) {
72                 &execute_sql_logged($master_db,
73                         "update db set user = '$_[0]->{'user'}' ".
74                         "where user = '$_[0]->{'olduser'}'");
75                 &execute_sql_logged($master_db,
76                         "update tables_priv set user = '$_[0]->{'user'}' ".
77                         "where user = '$_[0]->{'olduser'}'");
78                 &execute_sql_logged($master_db,
79                         "update columns_priv set user = '$_[0]->{'user'}' ".
80                         "where user = '$_[0]->{'olduser'}'");
81                 }
82         &execute_sql_logged($master_db, 'flush privileges');
83         }
84 }
85
86 1;
87