3 # Save, create or delete a user
5 require './mysql-lib.pl';
7 $access{'perms'} == 1 || &error($text{'perms_ecannot'});
11 &execute_sql_logged($master_db,
12 "delete from user where user = '$in{'olduser'}' ".
13 "and host = '$in{'oldhost'}'");
17 &error_setup($text{'user_err'});
18 $in{'mysqluser_def'} || $in{'mysqluser'} =~ /^\S+$/ ||
19 &error($text{'user_euser'});
20 $in{'host_def'} || $in{'host'} =~ /^\S+$/ ||
21 &error($text{'user_ehost'});
23 map { $perms[$_]++ } split(/\0/, $in{'perms'});
24 @desc = &table_structure($master_db, 'user');
25 $host = $in{'host_def'} ? '%' : $in{'host'};
26 $user = $in{'mysqluser_def'} ? '' : $in{'mysqluser'};
29 for($i=3; $i<=&user_priv_cols()+3-1; $i++) {
30 push(@yesno, $perms[$i] ? "'Y'" : "'N'");
32 $sql = sprintf "insert into user (%s) values ('%s', '%s', '', %s)",
33 join(",", map { $desc[$_]->{'field'} } (0 .. &user_priv_cols()+3-1)),
38 # Update existing user
39 for($i=3; $i<=&user_priv_cols()+3-1; $i++) {
40 push(@yesno, $desc[$i]->{'field'}."=".
41 ($perms[$i] ? "'Y'" : "'N'"));
43 $sql = sprintf "update user set host = '%s', user = '%s', ".
44 "%s where user = '%s' and host = '%s'",
46 join(" , ", @yesno), $in{'olduser'}, $in{'oldhost'};
48 &execute_sql_logged($master_db, $sql);
49 if ($in{'mysqlpass_mode'} == 0) {
50 $esc = &escapestr($in{'mysqlpass'});
51 &execute_sql_logged($master_db,
52 "update user set password = $password_func('$esc') ".
53 "where user = ? and host = ?",
56 elsif ($in{'mysqlpass_mode'} == 2) {
57 &execute_sql_logged($master_db,
58 "update user set password = NULL ".
59 "where user = ? and host = ?",
64 foreach $f ('max_user_connections', 'max_connections',
65 'max_questions', 'max_updates') {
66 next if ($mysql_version < 5 || !defined($in{$f.'_def'}));
67 $in{$f.'_def'} || $in{$f} =~ /^\d+$/ ||
68 &error($text{'user_e'.$f});
69 &execute_sql_logged($master_db,
70 "update user set $f = ? ".
71 "where user = ? and host = ?",
72 $in{$f.'_def'} ? 0 : $in{$f}, $user, $host);
76 if ($mysql_version >= 5 && defined($in{'ssl_type'})) {
77 &execute_sql_logged($master_db,
78 "update user set ssl_type = ? ".
79 "where user = ? and host = ?",
80 $in{'ssl_type'}, $user, $host);
83 &execute_sql_logged($master_db, 'flush privileges');
84 if (!$in{'delete'} && !$in{'new'} &&
85 $in{'olduser'} eq $config{'login'} && !$access{'user'}) {
86 # Renamed or changed the password for the Webmin login .. update
88 $config{'login'} = $in{'mysqluser'};
89 if ($in{'mysqlpass_mode'} == 0) {
90 $config{'pass'} = $in{'mysqlpass'};
92 elsif ($in{'mysqlpass_mode'} == 2) {
93 $config{'pass'} = undef;
95 &lock_file($module_config_file);
96 &save_module_config();
97 &unlock_file($module_config_file);
100 &webmin_log("delete", "user", $in{'olduser'},
101 { 'user' => $in{'olduser'},
102 'host' => $in{'oldhost'} } );
105 &webmin_log("create", "user",
106 $in{'mysqluser_def'} ? '' : $in{'mysqluser'},
107 { 'user' => $in{'mysqluser_def'} ? '' : $in{'mysqluser'},
108 'host' => $in{'host_def'} ? '' : $in{'host'} } );
111 &webmin_log("modify", "user",
112 $in{'mysqluser_def'} ? '' : $in{'mysqluser'},
113 { 'user' => $in{'mysqluser_def'} ? '' : $in{'mysqluser'},
114 'host' => $in{'host_def'} ? '' : $in{'host'} } );
116 &redirect("list_users.cgi");