Index: user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.681
diff -u -F^f -r1.681 user.module
--- user.module	11 Sep 2006 09:05:46 -0000	1.681
+++ user.module	11 Sep 2006 09:15:44 -0000
@@ -1873,9 +1873,22 @@ 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 changes have been saved.'));
-      drupal_goto('admin/user/roles');
+      if ($role = db_fetch_object(db_query("SELECT rid FROM {role} WHERE name = '%s'", $edit['name']))) {
+        if ($role->rid == $id) {
+          // Allows original role name to be saved
+          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/user/roles');
+        }
+        else {
+          form_set_error('name', t('The role name already exists. Please choose another role name.'));
+        }
+      }
+      else {
+        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/user/roles');
+      }
     }
     else {
       form_set_error('name', t('You must specify a valid role name.'));
@@ -1892,9 +1905,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_num_rows(db_query("SELECT rid 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 already exists. Please choose another role name.'));
+      }
     }
     else {
       form_set_error('name', t('You must specify a valid role name.'));
