Index: wp-includes/capabilities.php
===================================================================
--- wp-includes/capabilities.php	(revision 12)
+++ wp-includes/capabilities.php	(working copy)
@@ -71,6 +71,10 @@
 		if ( $this->use_db )
 			update_option($this->role_key, $this->roles);
 	}
+	
+	function has_cap($role, $cap) {
+		return !empty($this->roles[$role]['capabilities'][$cap]);
+	}
 
 	function &get_role($role) {
 		if ( isset($this->role_objects[$role]) )
@@ -87,6 +91,15 @@
 	{
 		return isset($this->role_names[$role]);
 	}
+	
+	function get_roles_with_cap($cap) {
+		$out = array();
+		foreach ( array_keys($this->roles) as $role ) {
+			if ( $this->has_cap($role, $cap) )
+				$out[] = $role;
+		}
+		return $out;
+	}
 }
 
 class WP_Role {
@@ -504,4 +517,13 @@
 	return $wp_roles->is_role($role);
 }
 
+function get_roles_with_cap($cap) {
+	global $wp_roles;
+
+	if ( ! isset($wp_roles) )
+		$wp_roles = new WP_Roles();
+
+	return $wp_roles->get_roles_with_cap($cap);
+}
+
 ?>
Index: wp-includes/user.php
===================================================================
--- wp-includes/user.php	(revision 13)
+++ wp-includes/user.php	(working copy)
@@ -56,6 +56,22 @@
 	return $users;
 }
 
+// Get users with a given capability for the current blog
+function get_users_with_cap( $cap, $id = '' ) {
+	global $wpdb, $blog_id;
+	if ( empty($id) )
+		$id = (int) $blog_id;
+
+	$roles = get_roles_with_cap( $cap );
+	if ( empty($roles) )
+		return array();
+	$roles = add_magic_quotes($roles);
+	
+	$users = $wpdb->get_results( "SELECT user_id, user_login, display_name, user_email, role FROM {$wpdb->users}, {$wpdb->user_role} WHERE {$wpdb->users}.ID = {$wpdb->user_role}.user_id AND {$wpdb->user_role}.role IN ('".implode("','", $roles)."') GROUP BY user_id ORDER BY {$wpdb->user_role}.user_id" );
+	return $users;
+}
+
+
 //
 // User meta functions
 //

