More work on user DB support
authorJamie Cameron <jcameron@webmin.com>
Fri, 10 Sep 2010 04:56:22 +0000 (21:56 -0700)
committerJamie Cameron <jcameron@webmin.com>
Fri, 10 Sep 2010 04:56:22 +0000 (21:56 -0700)
acl/acl-lib.pl
acl/edit_group.cgi
acl/index.cgi
acl/lang/en
acl/save_group.cgi

index 986801f..b0ffd83 100755 (executable)
@@ -103,7 +103,7 @@ if ($miniserv{'userdb'}) {
                $cmd && $cmd->execute() ||
                        &error("Failed to query users : ".$dbh->errstr);
                while(my ($id, $name, $pass) = $cmd->fetchrow()) {
-                       my $u = { 'name' => $pass, 'pass' => $pass,
+                       my $u = { 'name' => $name, 'pass' => $pass,
                                  'proto' => $proto };
                        push(@rv, $u);
                        $userid{$id} = $u;
@@ -150,6 +150,8 @@ keys include :
 sub list_groups
 {
 my @rv;
+my %miniserv;
+&get_miniserv_config(\%miniserv);
 
 # Add groups from local files
 open(GROUPS, "$config_directory/webmin.groups");
@@ -179,7 +181,7 @@ if ($miniserv{'userdb'}) {
                $cmd && $cmd->execute() ||
                        &error("Failed to query groups : ".$dbh->errstr);
                while(my ($id, $name, $desc) = $cmd->fetchrow()) {
-                       my $g = { 'name' => $pass, 'desc' => $desc,
+                       my $g = { 'name' => $name, 'desc' => $desc,
                                  'proto' => $proto };
                        push(@rv, $g);
                        $groupid{$id} = $g;
@@ -747,6 +749,8 @@ Delete a webmin group, identified by the name parameter.
 sub delete_group
 {
 my ($groupname) = @_;
+my %miniserv;
+&get_miniserv_config(\%miniserv);
 
 # Delete from local files
 &lock_file("$config_directory/webmin.groups");
@@ -1033,7 +1037,7 @@ if ($miniserv{'userdb'}) {
 if (defined($fromid) && defined($toid)) {
        # Copy from database to database
        if ($proto eq "mysql" || $proto eq "postgresql") {
-               my $cmd = $dbh->prepare("insert into webmin_user_acl select ?,attr,value from webmin_user_acl where id = ?");
+               my $cmd = $dbh->prepare("insert into webmin_user_acl select ?,module,attr,value from webmin_user_acl where id = ?");
                $cmd && $cmd->execute($toid, $fromid) ||
                        &error("Failed to copy ACLs : ".$dbh->errstr);
                $cmd->finish();
@@ -1635,20 +1639,21 @@ elsif ($str =~ /^ldap:/) {
 sub userdb_table_sql
 {
 my ($str) = @_;
-my ($key, $auto);
+my ($key, $auto, $index);
 if ($str =~ /^(mysql|postgresql):/) {
        $key = "not null primary key";
        }
 if ($str =~ /^mysql:/) {
-       $auto = "autoincrement";
+       $auto = "auto_increment";
+       $index = ", index(id)";
        }
 # XXX will this work on postgresql?
-return ( "create table webmin_user (id int(20) $key $auto, name varchar(255), pass varchar(255))",
-        "create table webmin_group (id int(20) $key $auto, 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))",
+return ( "create table webmin_user (id int(20) $key $auto, name varchar(255) not null, pass varchar(255))",
+        "create table webmin_group (id int(20) $key $auto, name varchar(255) not null, description varchar(255))",
+        "create table webmin_user_attr (id int(20) $index, attr varchar(32) not null, value varchar(255))",
+        "create table webmin_group_attr (id int(20) $index, attr varchar(32) not null, value varchar(255))",
+         "create table webmin_user_acl (id int(20) $index, module varchar(32), attr varchar(32) not null, value varchar(255))",
+         "create table webmin_group_acl (id int(20) $index, module varchar(32), attr varchar(32) not null, value varchar(255))",
         );
 }
 
index 6a29597..6905246 100755 (executable)
@@ -36,6 +36,10 @@ print &ui_hidden_table_start($text{'gedit_rights'}, "width=100%", 2, "rights",
 print &ui_table_row($text{'gedit_group'},
        &ui_textbox("name", $group{'name'}, 30));
 
+# Show group description
+print &ui_table_row($text{'gedit_desc'},
+       &ui_textbox("desc", $group{'desc'}, 60));
+
 # Find and show the parent group
 @glist = grep { $_->{'name'} ne $group{'name'} } &list_groups();
 @mcan = $access{'gassign'} eq '*' ?
index 59abd03..7306dca 100755 (executable)
@@ -5,14 +5,21 @@
 require './acl-lib.pl';
 &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
 
-@glist = &list_groups();
-foreach $g (@glist) {
-       foreach $gm (@{$g->{'members'}}) {
-               $ingroup{$gm} = $g;
+# Fetch user and group lists, if possible
+eval {
+       $main::error_must_die = 1;
+       @glist = &list_groups();
+       foreach $g (@glist) {
+               foreach $gm (@{$g->{'members'}}) {
+                       $ingroup{$gm} = $g;
+                       }
                }
+       @ulist = &list_users();
+       };
+if ($@) {
+       print "<b>",&text('index_eulist', "$@"),"</b><p>\n";
        }
 
-@ulist = &list_users();
 foreach $u (@ulist) {
        $me = $u if ($u->{'name'} eq $base_remote_user);
        }
index 2a56c5f..fc1bf42 100644 (file)
@@ -23,6 +23,8 @@ index_unix=Configure Unix user Authentication
 index_sessions=View Login Sessions
 index_rbac=Setup RBAC
 index_delete=Delete Selected
+index_eulist=Failed to list users : $1
+index_eglist=Failed to list groups : $1
 
 edit_title=Edit Webmin User
 edit_title2=Create Webmin User
@@ -231,6 +233,7 @@ gedit_group=Group name
 gedit_rights=Webmin group access rights
 gedit_modules=Members' modules
 gedit_members=Member users and groups
+gedit_desc=Group description
 
 gdelete_err=Failed to delete group
 gdelete_ecannot=You are not allowed to delete groups
@@ -244,6 +247,7 @@ gsave_err=Failed to save group
 gsave_ename=Missing or invalid group name
 gsave_enamewebmin=The group name 'webmin' is reserved for internal use
 gsave_edup=Group name is already in use
+gsave_edesc=Invalid description - the : character is not allowed
 
 convert_title=Convert Users
 convert_ecannot=You are not allowed to convert Unix user
index 7454143..ee197be 100755 (executable)
@@ -36,6 +36,7 @@ if (!$in{'old'} || $in{'old'} ne $in{'name'}) {
                        }
                }
        }
+$in{'desc'} !~ /:/ || &error($text{'gsave_edesc'});
 
 # Find the current group
 if ($in{'old'}) {
@@ -101,6 +102,7 @@ if ($group) {
 # Store group options
 $group{'modules'} = \@mods;
 $group{'name'} = $in{'name'};
+$group{'desc'} = $in{'desc'};
 
 if ($in{'old'}) {
        # update group