2 # Save user and group database
4 require './acl-lib.pl';
5 $access{'pass'} || &error($text{'sql_ecannot'});
6 &get_miniserv_config(\%miniserv);
8 &error_setup($text{'sql_err'});
12 if ($p eq 'mysql' || $p eq 'postgresql' || $p eq 'ldap') {
13 &to_ipaddress($in{$p."_host"}) ||
14 $in{$p."_host"} =~ /^(\S+):(\d+)$/ && &to_ipaddress("$1") ||
15 &error($text{'sql_ehost'});
16 $in{$p."_user"} =~ /^\S+$/ || &error($text{'sql_euser'});
17 $in{$p."_pass"} =~ /^\S*$/ || &error($text{'sql_epass'});
18 $host = $in{$p."_host"};
19 $user = $in{$p."_user"};
20 $pass = $in{$p."_pass"};
22 if ($p eq 'mysql' || $p eq 'postgresql') {
23 $in{$p."_db"} =~ /^\S+$/ || &error($text{'sql_edb'});
24 $prefix = $in{$p."_db"};
26 elsif ($p eq 'ldap') {
27 $in{$p."_prefix"} =~ /^\S+$/ || &error($text{'sql_eprefix'});
28 $in{$p."_prefix"} =~ /=/ || &error($text{'sql_eprefix2'});
29 $prefix = $in{$p."_prefix"};
31 if ($in{'ldap_ssl'} == 0) {
32 $args->{'scheme'} = 'ldap';
34 elsif ($in{'ldap_ssl'} == 1) {
35 $args->{'scheme'} = 'ldaps';
37 elsif ($in{'ldap_ssl'} == 2) {
38 $args->{'scheme'} = 'ldap';
41 $in{'ldap_userclass'} =~ /^[a-z0-9]+$/i ||
42 &error($text{'sql_euserclass'});
43 $args->{'userclass'} = $in{'ldap_userclass'};
44 $in{'ldap_groupclass'} =~ /^[a-z0-9]+$/i ||
45 &error($text{'sql_egroupclass'});
46 $args->{'groupclass'} = $in{'ldap_groupclass'};
49 # Create and test connection string
51 $str = &join_userdb_string($p, $user, $pass, $host,
53 $err = &validate_userdb($str, 1);
54 &error($err) if ($err);
59 # Make sure tables exist
60 $err = &validate_userdb($str, 0);
61 if ($err && ($p eq "mysql" || $p eq "postgresql")) {
62 # Tables are missing, need to create first
63 &ui_print_header(undef, $text{'sql_title2'}, "");
65 print &text('sql_tableerr', $err),"<p>\n";
66 print $text{'sql_tableerr2'},"<br>\n";
67 print &ui_form_start("maketables.cgi");
68 print &ui_hidden("userdb", $str);
69 print &ui_hidden("userdb_addto", $in{'addto'});
70 print &ui_form_end([ [ undef, $text{'sql_make'} ] ]);
72 print &ui_table_start(undef, undef, 2);
73 foreach $sql (&userdb_table_sql($str)) {
74 print &ui_table_row(undef,
75 "<pre>".&html_escape($sql)."</pre>", 2);
77 print &ui_table_end();
79 &ui_print_footer("", $text{'index_return'});
81 elsif ($err && $p eq "ldap") {
83 &ui_print_header(undef, $text{'sql_title3'}, "");
85 print &text('sql_dnerr', $err),"<p>\n";
86 print $text{'sql_dnerr2'},"<br>\n";
87 print &ui_form_start("makedn.cgi");
88 print &ui_hidden("userdb", $str);
89 print &ui_hidden("userdb_addto", $in{'addto'});
90 print &ui_form_end([ [ undef, $text{'sql_makedn'} ] ]);
92 &ui_print_footer("", $text{'index_return'});
95 # Tables are OK, can save now
96 &lock_file($ENV{'MINISERV_CONFIG'});
97 $miniserv{'userdb'} = $str;
98 $miniserv{'userdb_addto'} = $in{'addto'};
99 &put_miniserv_config(\%miniserv);
100 &unlock_file($ENV{'MINISERV_CONFIG'});