Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.698
diff -u -F^f -r1.698 user.module
--- modules/user/user.module	23 Oct 2006 20:59:56 -0000	1.698
+++ modules/user/user.module	25 Oct 2006 08:00:37 -0000
@@ -1868,9 +1868,14 @@ function user_admin_role() {
 
   if ($op == t('Save role')) {
     if ($edit['name']) {
-      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/user/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/user/roles');
+      }
     }
     else {
       form_set_error('name', t('You must specify a valid role name.'));
@@ -1887,9 +1892,14 @@ function user_admin_role() {
   }
   else if ($op == t('Add role')) {
     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/user/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/user/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.'));
