]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 352593: Move group creation from checksetup.pl to Bugzilla::Install
authormkanat%bugzilla.org <>
Thu, 14 Sep 2006 08:32:30 +0000 (08:32 +0000)
committermkanat%bugzilla.org <>
Thu, 14 Sep 2006 08:32:30 +0000 (08:32 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> (module owner) a=myk

Bugzilla/Install.pm
Bugzilla/Install/DB.pm
checksetup.pl

index 9c23491997fe7a95050a328d7a8a7e5d711327d9..1a910f8e0f8dfe34b2ba207371fb73d69052290e 100644 (file)
@@ -58,6 +58,55 @@ use constant SETTINGS => {
 
 };
 
+use constant SYSTEM_GROUPS => (
+    {
+        name        => 'admin',
+        description => 'Administrators'
+    },
+    {
+        name        => 'tweakparams',
+        description => 'Can change Parameters'
+    },
+    {
+        name        => 'editusers',
+        description => 'Can edit or disable users'
+    },
+    {
+        name        => 'creategroups',
+        description => 'Can create and destroy groups'
+    },
+    {
+        name        => 'editclassifications',
+        description => 'Can create, destroy, and edit classifications'
+    },
+    {
+        name        => 'editcomponents',
+        description => 'Can create, destroy, and edit components'
+    },
+    {
+        name        => 'editkeywords',
+        description => 'Can create, destroy, and edit keywords'
+    },
+    {
+        name        => 'editbugs',
+        description => 'Can edit all bug fields',
+        userregexp  => '.*'
+    },
+    {
+        name        => 'canconfirm',
+        description => 'Can confirm a bug or mark it a duplicate'
+    },
+    {
+        name        => 'bz_canusewhines',
+        description => 'User can configure whine reports for self'
+    },
+    {
+        name        => 'bz_sudoers',
+        description => 'Can perform actions as other users'
+    },
+    # There are also other groups created in update_system_groups.
+);
+
 use constant DEFAULT_CLASSIFICATION => {
     name        => 'Unclassified',
     description => 'Unassigned to any classification'
@@ -87,6 +136,73 @@ sub update_settings {
     }
 }
 
+sub update_system_groups {
+    my $dbh = Bugzilla->dbh;
+
+    # Create most of the system groups
+    foreach my $definition (SYSTEM_GROUPS) {
+        my $exists = new Bugzilla::Group({ name => $definition->{name} });
+        $definition->{isbuggroup} = 0;
+        Bugzilla::Group->create($definition) unless $exists;
+    }
+
+    # Certain groups need something done after they are created. We do
+    # that here.
+
+    # Make sure people who can whine at others can also whine.
+    if (!new Bugzilla::Group({name => 'bz_canusewhineatothers'})) {
+        my $whineatothers = Bugzilla::Group->create({
+            name        => 'bz_canusewhineatothers',
+            description => 'Can configure whine reports for other users',
+            isbuggroup  => 0 });
+        my $whine = new Bugzilla::Group({ name => 'bz_canusewhines' });
+
+        $dbh->do('INSERT INTO group_group_map (grantor_id, member_id) 
+                       VALUES (?,?)', undef, $whine->id, $whineatothers->id);
+    }
+
+    # Make sure sudoers are automatically protected from being sudoed.
+    if (!new Bugzilla::Group({name => 'bz_sudo_protect'})) {
+        my $sudo_protect = Bugzilla::Group->create({
+            name        => 'bz_sudo_protect',
+            description => 'Can not be impersonated by other users',
+            isbuggroup  => 0 });
+        my $sudo = new Bugzilla::Group({ name => 'bz_sudoers' });
+        $dbh->do('INSERT INTO group_group_map (grantor_id, member_id) 
+                       VALUES (?,?)', undef, $sudo_protect->id, $sudo->id);
+    }
+
+    # Re-evaluate all regexps, to keep them up-to-date.
+    my $sth = $dbh->prepare(
+        "SELECT profiles.userid, profiles.login_name, groups.id, 
+                groups.userregexp, user_group_map.group_id
+           FROM (profiles CROSS JOIN groups)
+                LEFT JOIN user_group_map
+                ON user_group_map.user_id = profiles.userid
+                   AND user_group_map.group_id = groups.id
+                   AND user_group_map.grant_type = ?
+          WHERE userregexp != '' OR user_group_map.group_id IS NOT NULL");
+
+    my $sth_add = $dbh->prepare(
+        "INSERT INTO user_group_map (user_id, group_id, isbless, grant_type)
+              VALUES (?, ?, 0, " . GRANT_REGEXP . ")");
+
+    my $sth_del = $dbh->prepare(
+        "DELETE FROM user_group_map
+          WHERE user_id  = ? AND group_id = ? AND isbless = 0 
+                AND grant_type = " . GRANT_REGEXP);
+
+    $sth->execute(GRANT_REGEXP);
+    while (my ($uid, $login, $gid, $rexp, $present) = $sth->fetchrow_array()) {
+        if ($login =~ m/$rexp/i) {
+            $sth_add->execute($uid, $gid) unless $present;
+        } else {
+            $sth_del->execute($uid, $gid) if $present;
+        }
+    }
+
+}
+
 # This function should be called only after creating the admin user.
 sub create_default_product {
     my $dbh = Bugzilla->dbh;
index e4e4e97fe9e4bebc083645ed537fecc4136a1c80..2e364c540075c72492b309633233635231a85233 100644 (file)
@@ -416,6 +416,11 @@ sub update_table_definitions {
     _copy_attachments_thedata_to_attach_data();
     _fix_broken_all_closed_series();
 
+    # 2005-08-14 bugreport@peshkin.net -- Bug 304583
+    # Get rid of leftover DERIVED group permissions
+    use constant GRANT_DERIVED => 1;
+    $dbh->do("DELETE FROM user_group_map WHERE grant_type = " . GRANT_DERIVED);
+
     # PUBLIC is a reserved word in Oracle.
     $dbh->bz_rename_column('series', 'public', 'is_public');
 
index 985a0da095366b908f6bc7d4e5cb0c628a26fc03..4a92e1ea141dc567c9e7b84a9e1d05f0ce06e2a5 100755 (executable)
@@ -390,9 +390,6 @@ $dbh->bz_populate_enum_tables();
 update_filesystem({ index_html => $lc_hash->{'index_html'} });
 create_htaccess() if $lc_hash->{'create_htaccess'};
 
-# XXX Some parts of checksetup still need these, right now.
-my $datadir   = bz_locations()->{'datadir'};
-
 # Remove parameters from the params file that no longer exist in Bugzilla,
 # and set the defaults for new ones
 update_params({ answer => \%answer});
@@ -441,107 +438,7 @@ Bugzilla::Install::DB::update_table_definitions();
 # Bugzilla uses --GROUPS-- to assign various rights to its users.
 ###########################################################################
 
-my $admin_group = Bugzilla::Group->new({ name => 'admin' })
-    || Bugzilla::Group->create({ 
-           name => 'admin', description => 'Administrators', isbuggroup => 0 });
-
-Bugzilla::Group->create({ name => 'tweakparams', 
-    description => 'Can tweak operating parameters', isbuggroup => 0 })
-    unless new Bugzilla::Group({ name => 'tweakparams' });
-
-Bugzilla::Group->create({ name => 'editusers', 
-    description => 'Can edit or disable users', isbuggroup => 0 })
-    unless new Bugzilla::Group({ name => 'editusers' });
-
-Bugzilla::Group->create({ name => 'creategroups', 
-    description => 'Can create and destroy groups.', isbuggroup => 0 })
-    unless new Bugzilla::Group({ name => 'creategroups' });
-
-Bugzilla::Group->create({ name => 'editclassifications', 
-    description => 'Can create, destroy, and edit classifications.', 
-    isbuggroup => 0 })
-    unless new Bugzilla::Group({ name => 'editclassifications' });
-
-Bugzilla::Group->create({ name => 'editcomponents', 
-    description => 'Can create, destroy, and edit components.',
-    isbuggroup => 0 })
-    unless new Bugzilla::Group({ name => 'editcomponents' });
-
-Bugzilla::Group->create({ name => 'editkeywords', 
-    description => 'Can create, destroy, and edit keywords.',
-    isbuggroup => 0 })
-    unless new Bugzilla::Group({ name => 'editkeywords' });
-
-Bugzilla::Group->create({name => 'editbugs', 
-    description => 'Can edit all bug fields.', userregexp => ".*", 
-    isbuggroup => 0 })
-    unless new Bugzilla::Group({name => "editbugs"});
-
-Bugzilla::Group->create({ name => 'canconfirm',  
-    description => 'Can confirm a bug.', userregexp => ".*", 
-    isbuggroup => 0 })
-    unless new Bugzilla::Group({name => "canconfirm"});
-
-# Create bz_canusewhineatothers and bz_canusewhines
-if (!new Bugzilla::Group({name => 'bz_canusewhines'})) {
-    my $whine = Bugzilla::Group->create({name => 'bz_canusewhines',
-       description => 'User can configure whine reports for self', 
-       isbuggroup => 0 });
-    my $whineatothers = Bugzilla::Group->create({
-        name => 'bz_canusewhineatothers',
-        description => 'Can configure whine reports for other users', 
-        isbuggroup => 0 });
-
-    $dbh->do('INSERT INTO group_group_map (grantor_id, member_id) VALUES (?,?)',
-             undef, $whine->id, $whineatothers->id);
-}
-
-# 2005-08-14 bugreport@peshkin.net -- Bug 304583
-use constant GRANT_DERIVED => 1;
-# Get rid of leftover DERIVED group permissions
-$dbh->do("DELETE FROM user_group_map WHERE grant_type = " . GRANT_DERIVED);
-# Evaluate regexp-based group memberships
-my $sth = $dbh->prepare("SELECT profiles.userid, profiles.login_name,
-                         groups.id, groups.userregexp,
-                         user_group_map.group_id
-                         FROM (profiles
-                         CROSS JOIN groups)
-                         LEFT JOIN user_group_map
-                         ON user_group_map.user_id = profiles.userid
-                         AND user_group_map.group_id = groups.id
-                         AND user_group_map.grant_type = ?
-                         WHERE (userregexp != ''
-                         OR user_group_map.group_id IS NOT NULL)");
-
-my $sth_add = $dbh->prepare("INSERT INTO user_group_map 
-                       (user_id, group_id, isbless, grant_type) 
-                       VALUES(?, ?, 0, " . GRANT_REGEXP . ")");
-
-my $sth_del = $dbh->prepare("DELETE FROM user_group_map 
-                       WHERE user_id  = ? 
-                       AND group_id = ? 
-                       AND isbless = 0
-                       AND grant_type = " . GRANT_REGEXP);
-
-$sth->execute(GRANT_REGEXP);
-while (my ($uid, $login, $gid, $rexp, $present) = $sth->fetchrow_array()) {
-    if ($login =~ m/$rexp/i) {
-        $sth_add->execute($uid, $gid) unless $present;
-    } else {
-        $sth_del->execute($uid, $gid) if $present;
-    }
-}
-
-# 2005-10-10 karl@kornel.name -- Bug 204498
-if (!new Bugzilla::Group({name => 'bz_sudoers'})) {
-    my $sudo = Bugzilla::Group->create({name => 'bz_sudoers',
-       description => 'Can perform actions as other users', isbuggroup => 0 });
-    my $sudo_protect = Bugzilla::Group->create({name => 'bz_sudo_protect',
-        description => 'Can not be impersonated by other users',
-        isbuggroup => 0 });
-    $dbh->do('INSERT INTO group_group_map (grantor_id, member_id) VALUES (?,?)',
-             undef, $sudo_protect->id, $sudo->id);
-}
+Bugzilla::Install::update_system_groups();
 
 ###########################################################################
 # Create --SETTINGS-- users can adjust