Index: modules/simpletest/tests/user_test.info
===================================================================
RCS file: modules/simpletest/tests/user_test.info
diff -N modules/simpletest/tests/user_test.info
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/simpletest/tests/user_test.info	25 Jul 2010 14:45:40 -0000
@@ -0,0 +1,8 @@
+; $Id$
+name = User
+description = A support module for user module testing.
+core = 7.x
+package = Testing
+version = VERSION
+files[] = user_test.module
+hidden = TRUE
Index: modules/simpletest/tests/user_test.module
===================================================================
RCS file: modules/simpletest/tests/user_test.module
diff -N modules/simpletest/tests/user_test.module
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/simpletest/tests/user_test.module	25 Jul 2010 14:45:40 -0000
@@ -0,0 +1,19 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Module to test user-related hooks.
+ */
+
+/**
+ * Implements hook_permission().
+ */
+function user_test_permission() {
+  return array(
+    'test user_test' =>  array(
+      'title' => t('User test permission'),
+      'description' => t('User test permission does nothing.'),
+    ),
+  );
+}
Index: modules/user/user.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.admin.inc,v
retrieving revision 1.114
diff -u -p -r1.114 user.admin.inc
--- modules/user/user.admin.inc	7 Jul 2010 17:56:42 -0000	1.114
+++ modules/user/user.admin.inc	25 Jul 2010 14:45:40 -0000
@@ -669,11 +669,11 @@ function user_admin_permissions($form, $
   // display name.
   $modules = array();
   foreach (module_implements('permission') as $module) {
-    $modules[$module_info[$module]['name']] = $module;
+    $modules[$module] = $module_info[$module]['name'];
   }
-  ksort($modules);
+  asort($modules);
 
-  foreach ($modules as $display_name => $module) {
+  foreach ($modules as $module => $display_name) {
     if ($permissions = module_invoke($module, 'permission')) {
       $form['permission'][] = array(
         '#markup' => $module_info[$module]['name'],
Index: modules/user/user.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.test,v
retrieving revision 1.97
diff -u -p -r1.97 user.test
--- modules/user/user.test	22 Jul 2010 23:41:51 -0000	1.97
+++ modules/user/user.test	25 Jul 2010 14:45:40 -0000
@@ -1025,6 +1025,32 @@ class UserPermissionsTestCase extends Dr
   }
 }
 
+class UserPermissionsModuleTestCase extends DrupalWebTestCase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Module permissions',
+      'description' => 'Verify that role permissions provided by modules are exposed on the permissions page.',
+      'group' => 'User'
+    );
+  }
+
+  function setUp() {
+    parent::setUp('user_test');
+    $this->admin_user = $this->drupalCreateUser(array('administer permissions', 'access user profiles', 'administer site configuration', 'administer modules', 'administer users'));
+  }
+
+  /**
+   * Verify permissions for both user and user_test module appear on permissions page.
+   */
+  function testUserTestPermissions() {
+    $this->drupalLogin($this->admin_user);
+    $this->drupalGet('admin/people/permissions');
+
+    $this->assertText('Administer permissions', t('Permissions for user module provided'));
+    $this->assertText('User test permission does nothing.', t('Permissions for user test module provided'));
+  }
+}
+
 class UserAdminTestCase extends DrupalWebTestCase {
   public static function getInfo() {
     return array(
