CGI to create tables needed by Webmin
authorJamie Cameron <jcameron@webmin.com>
Wed, 8 Sep 2010 00:26:30 +0000 (17:26 -0700)
committerJamie Cameron <jcameron@webmin.com>
Wed, 8 Sep 2010 00:26:30 +0000 (17:26 -0700)
acl/acl-lib.pl
acl/lang/en
acl/maketables.cgi [new file with mode: 0755]
acl/save_sql.cgi
blue-theme/acl/images/sql.gif [new file with mode: 0644]

index 1f0b89f..3f6b5f8 100755 (executable)
@@ -1226,7 +1226,7 @@ if ($proto eq "mysql" || $proto eq "postgresql") {
        if (!$notablecheck) {
                my %tables =
                  ( "webmin_user" => [ "id", "name", "pass" ],
-                   "webmin_group" => [ "id", "name", "desc" ],
+                   "webmin_group" => [ "id", "name", "description" ],
                    "webmin_user_attr" => [ "id", "attr", "value" ],
                    "webmin_group_attr" => [ "id", "attr", "value" ],
                    "webmin_user_acl" => [ "id", "module", "attr", "value" ],
@@ -1312,12 +1312,17 @@ elsif ($str =~ /^ldap:/) {
 sub userdb_table_sql
 {
 my ($str) = @_;
-return ( "create table webmin_user (id int(20), name varchar(255), pass varchar(255))",
-        "create table webmin_group (id init(20), name varchar(255), desc varchar(255))",
-        "create table webmin_user_attr (id int(20), attr varchar(32), value varchar(255))",
-        "create table webmin_group_attr (id int(20), attr varchar(32), value varchar(255))",
-         "create table webmin_user_acl (id int(20), module varchar(32), attr varchar(32), value varchar(255))",
-         "create table webmin_group_acl (id int(20), module varchar(32), attr varchar(32), value varchar(255))",
+my $key;
+if ($str =~ /^(mysql|postgresql):/) {
+       $key = "not null primary key";
+       }
+# XXX will this work on postgresql?
+return ( "create table webmin_user (id int(20) $key, name varchar(255), pass varchar(255))",
+        "create table webmin_group (id int(20) $key, name varchar(255), description varchar(255))",
+        "create table webmin_user_attr (id int(20) $key, attr varchar(32), value varchar(255))",
+        "create table webmin_group_attr (id int(20) $key, attr varchar(32), value varchar(255))",
+         "create table webmin_user_acl (id int(20) $key, module varchar(32), attr varchar(32), value varchar(255))",
+         "create table webmin_group_acl (id int(20) $key, module varchar(32), attr varchar(32), value varchar(255))",
         );
 }
 
index 8239ec4..d238bb6 100644 (file)
@@ -408,3 +408,10 @@ sql_title2=Create Missing Tables
 sql_tableerr=User and group database settings were successfully saved, but some tables needed by Webmin are missing : $1
 sql_tableerr2=Click the <b>Create Tables</b> to have them created automatically, or manually run the SQL below.
 sql_make=Create Tables
+
+make_title=Create User and Group Tables
+make_err=Failed to create user and group tables
+make_exec=Executing SQL $1 ..
+make_failed=.. creation failed : $1
+make_done=.. done
+
diff --git a/acl/maketables.cgi b/acl/maketables.cgi
new file mode 100755 (executable)
index 0000000..488f264
--- /dev/null
@@ -0,0 +1,28 @@
+#!/usr/local/bin/perl
+# Create all needed tables
+
+require './acl-lib.pl';
+$access{'pass'} || &error($text{'sql_ecannot'});
+&get_miniserv_config(\%miniserv);
+&ReadParse();
+&error_setup($text{'make_err'});
+
+$str = $miniserv{'userdb'};
+$dbh = &connect_userdb($str);
+ref($dbh) || &error($dbh);
+
+&ui_print_unbuffered_header(undef, $text{'make_title'}, "");
+
+foreach $sql (&userdb_table_sql($str)) {
+       print &text('make_exec', "<tt>".&html_escape($sql)."</tt>"),"<br>\n";
+       $cmd = $dbh->prepare($sql);
+       if (!$cmd || !$cmd->execute()) {
+               print &text('make_failed', &html_escape($dbh->errstr)),"<p>\n";
+               }
+       else {
+               print $text{'make_done'},"<p>\n";
+               }
+       }
+
+&ui_print_footer("", $text{'index_return'});
+
index 2e793df..62b94b5 100755 (executable)
@@ -52,7 +52,7 @@ if ($err) {
 
        print &text('sql_tableerr', $err),"<p>\n";
        print $text{'sql_tableerr2'},"<p>\n";
-       print &ui_form_start("maketables.sql");
+       print &ui_form_start("maketables.cgi");
        print &ui_form_end([ [ undef, $text{'sql_make'} ] ]);
 
        print &ui_table_start(undef, undef, 2);
diff --git a/blue-theme/acl/images/sql.gif b/blue-theme/acl/images/sql.gif
new file mode 100644 (file)
index 0000000..1e878ec
Binary files /dev/null and b/blue-theme/acl/images/sql.gif differ