Index: modules/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/Attic/user.module,v
retrieving revision 1.612.2.22
diff -u -F^f -r1.612.2.22 user.module
--- modules/user.module	23 Oct 2006 06:34:29 -0000	1.612.2.22
+++ modules/user.module	18 Nov 2006 08:57:41 -0000
@@ -1878,9 +1878,14 @@ function user_admin_role() {
     // Check for a valid form token to protect against cross site request forgeries.
     if (drupal_valid_token($edit['form_token'], 'user_admin_role', TRUE)) {
       if ($edit['name']) {
-        db_query("UPDATE {role} SET name = '%s' WHERE rid = %d", $edit['name'], $id);
-        drupal_set_message(t('The changes have been saved.'));
-        drupal_goto('admin/access/roles');
+        if (db_result(db_query("SELECT COUNT(*) FROM {role} WHERE name = '%s' AND rid != %d", $edit['name'], $id))) {
+          form_set_error('name', t('The role name %name already exists. Please choose another role name.', array('%name' => $edit['name'])));
+        }
+        else {
+          db_query("UPDATE {role} SET name = '%s' WHERE rid = %d", $edit['name'], $id);
+          drupal_set_message(t('The role has been renamed.'));
+          drupal_goto('admin/access/roles');
+        }
       }
       else {
         form_set_error('name', t('You must specify a valid role name.'));
@@ -1908,9 +1913,14 @@ function user_admin_role() {
     // Check for a valid form token to protect against cross site request forgeries.
     if (drupal_valid_token($edit['form_token'], 'user_admin_new_role', TRUE)) {
       if ($edit['name']) {
-        db_query("INSERT INTO {role} (name) VALUES ('%s')", $edit['name']);
-        drupal_set_message(t('The role has been added.'));
-        drupal_goto('admin/access/roles');
+        if (!db_result(db_query("SELECT COUNT(*) FROM {role} WHERE name = '%s'", $edit['name']))) {
+          db_query("INSERT INTO {role} (name) VALUES ('%s')", $edit['name']);
+          drupal_set_message(t('The role has been added.'));
+          drupal_goto('admin/access/roles');
+        }
+        else {
+          form_set_error('name', t('The role name %name already exists. Please choose another role name.', array('%name' => $edit['name'])));
+        }
       }
       else {
         form_set_error('name', t('You must specify a valid role name.'));
