diff -r 3d87397af909 bodhi/controllers.py
--- a/bodhi/controllers.py	Wed Oct 03 17:44:08 2007 -0400
+++ b/bodhi/controllers.py	Fri Oct 05 13:14:34 2007 -0700
@@ -29,7 +29,7 @@ from turbogears.widgets import DataGrid
 
 from bodhi import buildsys, util
 from bodhi.rss import Feed
-from bodhi.util import flash_log, get_pkg_people
+from bodhi.util import flash_log, get_pkg_pushers
 from bodhi.new import NewUpdateController, update_form
 from bodhi.admin import AdminController
 from bodhi.model import (Package, PackageBuild, PackageUpdate, Release,
@@ -369,15 +369,18 @@ class Root(controllers.RootController):
         for build in builds:
             nvr = util.get_nvr(build)
             people = None
-            try:
-                people = get_pkg_people(nvr[0], release.long_name.split()[0],
+            groups = None
+            try:
+                people, groups = get_pkg_pushers(nvr[0],
+                                        release.long_name.split()[0],
                                         release.long_name[-1])
             except Exception, e:
                 flash_log(e)
                 raise redirect('/new', **params)
             if not identity.current.user_name in people[0] and \
                not 'releng' in identity.current.groups and \
-               not 'security_respons' in identity.current.groups:
+               not 'security_respons' in identity.current.groups and \
+               filter(lambda x: x in identity.current.groups, groups):
                 flash_log("%s does not have commit access to %s" % (
                           identity.current.user_name, nvr[0]))
                 raise redirect('/new', **params)
diff -r 3d87397af909 bodhi/util.py
--- a/bodhi/util.py	Wed Oct 03 17:44:08 2007 -0400
+++ b/bodhi/util.py	Fri Oct 05 13:40:59 2007 -0700
@@ -200,12 +200,20 @@ def get_repo_tag(repo):
         log.error("Cannot find mash configuration for %s: %s" % (repo,
                                                                  mashconfig))
 
-def get_pkg_people(pkgName, collectionName, collectionVersion):
+def get_pkg_pushers(pkgName, collectionName, collectionVersion):
     """ Pull users who can commit and are watching a package
 
-    Return two lists:
-    * The first consists of usernames allowed to commit to the package.
-    * The second are usernames watching the package for updates.
+    Return two two-tuples of lists:
+    * The first tuple is for usernames.  The second tuple is for groups.
+    * The first list of the tuple is for committers.  The second is for
+      watchers.
+
+    An example::
+      >>> people, groups = get_pkg_pushers('foo', 'Fedora', 'devel')
+      >>> print people
+      (['toshio', 'lmacken'], ['wtogami', 'toshio', 'lmacken'])
+      >>> print groups
+      (['cvsextras'], [])
 
     Note: The interface to the pkgdb could undergo the following changes:
       FAS2 related:
@@ -229,21 +237,32 @@ def get_pkg_people(pkgName, collectionNa
                 pkgName, pkg['message'])
 
     # Owner is allowed to commit and gets notified of pushes
-    # This will always be 0 as we'll retrieve at most one value for
-    # Package-Collection-Version
-    notify = [pkg['packageListings'][0]['owneruser']]
-    allowed = [notify[0]]
+    # This will always be the 0th element as we'll retrieve at most one
+    # value for any given Package-Collection-Version
+    pNotify = [pkg['packageListings'][0]['owneruser']]
+    pAllowed = [notify[0]]
 
     # Find other people in the acl
     for person in pkg['packageListings'][0]['people']:
         if person['aclOrder']['watchcommits'] and \
            pkg['statusMap'][str(person['aclOrder']['watchcommits']['statuscode'])] == 'Approved':
-            notify.append(person['user'])
+            pNotify.append(person['user'])
         if person['aclOrder']['commit'] and \
            pkg['statusMap'][str(person['aclOrder']['commit']['statuscode'])] == 'Approved':
-            allowed.append(person['user'])
-
-    return (allowed, notify)
+            pAllowed.append(person['user'])
+
+    # Find groups that can push
+    gNotify = []
+    gAllowed = []
+    for group in pkg['packageListings'][0]['groups']:
+        if group['aclOrder']['watchcommits'] and \
+           pkg['statusMap'][str(group['aclOrder']['watchcommits']['statuscode'])] == 'Approved':
+            gNotify.append(group['name'])
+        if group['aclOrder']['commit'] and \
+           pkg['statusMap'][str(group['aclOrder']['commit']['statuscode'])] == 'Approved':
+            gAllowed.append(group['name'])
+
+    return ((pAllowed, pNotify), (gAllowed, gNotify))
 
 def build_evr(build):
     return (str(build['epoch']), build['version'], build['release'])
