java.lang.IllegalStateException: Unable to rename user Horatio Nelson to horatio nelson

Atlassian JIRA | Foogie Sim [Atlassian] | 3 years ago
  1. 0

    h3.Steps to reproduce # Create a user with mixed case sensitivity such as "Horatio Nelson" in LDAP # Hook Confluence to the LDAP directory via Internal with LDAP Authentication (Delegated) # Login first as "Horatio Nelson" (to create the user as "Horatio Nelson" in the cwd_user table) # Logout, then login again as "horatio nelson" (all lowercase) You will get this error: {code} 2013-10-11 22:19:58,407 ERROR [http-8443-6] [[Standalone].[localhost].[/c530].[action]] log Servlet.service() for servlet action threw exception java.lang.IllegalStateException: Unable to rename user Horatio Nelson to horatio nelson at com.atlassian.crowd.directory.AbstractInternalDirectory.forceRenameUser(AbstractInternalDirectory.java:611) at com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.authenticateAndUpdateOrCreate(DelegatedAuthenticationDirectory.java:218) at com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.authenticate(DelegatedAuthenticationDirectory.java:175) {code} h3.Cause: The problem is caused by this function in *com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.java*: {code} private User authenticateAndUpdateOrCreate(String name, PasswordCredential credential) throws InactiveAccountException, ExpiredCredentialException, OperationFailedException, InvalidAuthenticationException, UserNotFoundException { // authenticate the user against LDAP User ldapUser = ldapDirectory.authenticate(name, credential); // Try to find the corresponding local user User internalUser = findLocalUserByExternalId(ldapUser.getExternalId()); if (internalUser != null) { if (!internalUser.getName().equals(name)) { // We want to rename the existing user if (isUserUpdateOnAuthEnabled()) { // push any existing user out of our way and rename try { internalUser = internalDirectory.forceRenameUser(internalUser, name); } catch (UserNotFoundException e) { // Pretty unlucky throw new ConcurrentModificationException("Unable to rename '" + internalUser.getName() + "' to new name '" + name + "' during login."); } } {code} Specifically, this if statement: {code} if (!internalUser.getName().equals(name)) {code} Which takes the *name* string directly from the user input, and comparing it to the username stored in cwd_user directly, hence, the mismatch, which is why {{forceRenameUser}} is called in the first place So far, this affects any Confluence distribution bundled with the Crowd 2.7 integration libraries h3.Workaround # Login with the *exact* case, in this case, it would be "Horatio Nelson" # Disable "Copy User on Login" for the directory - that will avoid this problem and allow already created users to log in, but no new users will be created automatically on login, and no group updates will be synchronised from the LDAP directory

    Atlassian JIRA | 3 years ago | Steve Haffenden [Atlassian]
    java.lang.IllegalStateException: Unable to rename user Horatio Nelson to horatio nelson
  2. 0

    h3.Steps to reproduce # Create a user with mixed case sensitivity such as "Horatio Nelson" in LDAP # Hook Confluence to the LDAP directory via Internal with LDAP Authentication (Delegated) # Login first as "Horatio Nelson" (to create the user as "Horatio Nelson" in the cwd_user table) # Logout, then login again as "horatio nelson" (all lowercase) You will get this error: {code} 2013-10-11 22:19:58,407 ERROR [http-8443-6] [[Standalone].[localhost].[/c530].[action]] log Servlet.service() for servlet action threw exception java.lang.IllegalStateException: Unable to rename user Horatio Nelson to horatio nelson at com.atlassian.crowd.directory.AbstractInternalDirectory.forceRenameUser(AbstractInternalDirectory.java:611) at com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.authenticateAndUpdateOrCreate(DelegatedAuthenticationDirectory.java:218) at com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.authenticate(DelegatedAuthenticationDirectory.java:175) {code} h3.Cause: The problem is caused by this function in *com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.java*: {code} private User authenticateAndUpdateOrCreate(String name, PasswordCredential credential) throws InactiveAccountException, ExpiredCredentialException, OperationFailedException, InvalidAuthenticationException, UserNotFoundException { // authenticate the user against LDAP User ldapUser = ldapDirectory.authenticate(name, credential); // Try to find the corresponding local user User internalUser = findLocalUserByExternalId(ldapUser.getExternalId()); if (internalUser != null) { if (!internalUser.getName().equals(name)) { // We want to rename the existing user if (isUserUpdateOnAuthEnabled()) { // push any existing user out of our way and rename try { internalUser = internalDirectory.forceRenameUser(internalUser, name); } catch (UserNotFoundException e) { // Pretty unlucky throw new ConcurrentModificationException("Unable to rename '" + internalUser.getName() + "' to new name '" + name + "' during login."); } } {code} Specifically, this if statement: {code} if (!internalUser.getName().equals(name)) {code} Which takes the *name* string directly from the user input, and comparing it to the username stored in cwd_user directly, hence, the mismatch, which is why {{forceRenameUser}} is called in the first place So far, this affects any Confluence distribution bundled with the Crowd 2.7 integration libraries h3.Workaround # Login with the *exact* case, in this case, it would be "Horatio Nelson" # Disable "Copy User on Login" for the directory - that will avoid this problem and allow already created users to log in, but no new users will be created automatically on login, and no group updates will be synchronised from the LDAP directory

    Atlassian JIRA | 3 years ago | Foogie Sim [Atlassian]
    java.lang.IllegalStateException: Unable to rename user Horatio Nelson to horatio nelson
  3. 0

    h3.Steps to reproduce # Create a user with mixed case sensitivity such as "Horatio Nelson" in LDAP # Hook Confluence to the LDAP directory via Internal with LDAP Authentication (Delegated) # Login first as "Horatio Nelson" (to create the user as "Horatio Nelson" in the cwd_user table) # Logout, then login again as "horatio nelson" (all lowercase) You will get this error in Confluence (JIRA is working fine, more about it below): {code} 2013-10-11 22:19:58,407 ERROR [http-8443-6] [[Standalone].[localhost].[/c530].[action]] log Servlet.service() for servlet action threw exception java.lang.IllegalStateException: Unable to rename user Horatio Nelson to horatio nelson at com.atlassian.crowd.directory.AbstractInternalDirectory.forceRenameUser(AbstractInternalDirectory.java:611) at com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.authenticateAndUpdateOrCreate(DelegatedAuthenticationDirectory.java:218) at com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.authenticate(DelegatedAuthenticationDirectory.java:175) {code} h3.Cause: The problem is caused by this function in *com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.java*: {code} private User authenticateAndUpdateOrCreate(String name, PasswordCredential credential) throws InactiveAccountException, ExpiredCredentialException, OperationFailedException, InvalidAuthenticationException, UserNotFoundException { // authenticate the user against LDAP User ldapUser = ldapDirectory.authenticate(name, credential); // Try to find the corresponding local user User internalUser = findLocalUserByExternalId(ldapUser.getExternalId()); if (internalUser != null) { if (!internalUser.getName().equals(name)) { // We want to rename the existing user if (isUserUpdateOnAuthEnabled()) { // push any existing user out of our way and rename try { internalUser = internalDirectory.forceRenameUser(internalUser, name); } catch (UserNotFoundException e) { // Pretty unlucky throw new ConcurrentModificationException("Unable to rename '" + internalUser.getName() + "' to new name '" + name + "' during login."); } } {code} Specifically, this if statement: {code} if (!internalUser.getName().equals(name)) {code} Which takes the *name* string directly from the user input, and comparing it to the username stored in cwd_user directly, hence, the mismatch, which is why {{forceRenameUser}} is called in the first place So far, this affects any Confluence distribution bundled with the Crowd 2.7 integration libraries Description update:

    Atlassian JIRA | 3 years ago | Foogie Sim [Atlassian]
    java.lang.IllegalStateException: Unable to rename user Horatio Nelson to horatio nelson
  4. Speed up your debug routine!

    Automated exception search integrated into your IDE

  5. 0

    h3.Steps to reproduce # Create a user with mixed case sensitivity such as "Horatio Nelson" in LDAP # Hook Confluence to the LDAP directory via Internal with LDAP Authentication (Delegated) # Login first as "Horatio Nelson" (to create the user as "Horatio Nelson" in the cwd_user table) # Logout, then login again as "horatio nelson" (all lowercase) You will get this error: {code} 2013-10-11 22:19:58,407 ERROR [http-8443-6] [[Standalone].[localhost].[/c530].[action]] log Servlet.service() for servlet action threw exception java.lang.IllegalStateException: Unable to rename user Horatio Nelson to horatio nelson at com.atlassian.crowd.directory.AbstractInternalDirectory.forceRenameUser(AbstractInternalDirectory.java:611) at com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.authenticateAndUpdateOrCreate(DelegatedAuthenticationDirectory.java:218) at com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.authenticate(DelegatedAuthenticationDirectory.java:175) {code} h3.Cause: The problem is caused by this function in *com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.java*: {code} private User authenticateAndUpdateOrCreate(String name, PasswordCredential credential) throws InactiveAccountException, ExpiredCredentialException, OperationFailedException, InvalidAuthenticationException, UserNotFoundException { // authenticate the user against LDAP User ldapUser = ldapDirectory.authenticate(name, credential); // Try to find the corresponding local user User internalUser = findLocalUserByExternalId(ldapUser.getExternalId()); if (internalUser != null) { if (!internalUser.getName().equals(name)) { // We want to rename the existing user if (isUserUpdateOnAuthEnabled()) { // push any existing user out of our way and rename try { internalUser = internalDirectory.forceRenameUser(internalUser, name); } catch (UserNotFoundException e) { // Pretty unlucky throw new ConcurrentModificationException("Unable to rename '" + internalUser.getName() + "' to new name '" + name + "' during login."); } } {code} Specifically, this if statement: {code} if (!internalUser.getName().equals(name)) {code} Which takes the *name* string directly from the user input, and comparing it to the username stored in cwd_user directly, hence, the mismatch, which is why {{forceRenameUser}} is called in the first place So far, this affects any Confluence distribution bundled with the Crowd 2.7 integration libraries h3.1.Workaround # Login with the *exact* case, in this case, it would be "Horatio Nelson" # Disable "Copy User on Login" for the directory - that will avoid this problem and allow already created users to log in, but no new users will be created automatically on login, and no group updates will be synchronised from the LDAP directory h3.2.Workaround In some cases when disabling such external directory and creating a new one with the same information may fix this problem. Please note that using this workaround will remove all users preferences and profile pictures.

    Atlassian JIRA | 3 years ago | Foogie Sim [Atlassian]
    java.lang.IllegalStateException: Unable to rename user Horatio Nelson to horatio nelson
  6. 0

    h3.Steps to reproduce # Create a user with mixed case sensitivity such as "Horatio Nelson" in LDAP # Hook Confluence to the LDAP directory via Internal with LDAP Authentication (Delegated) # Login first as "Horatio Nelson" (to create the user as "Horatio Nelson" in the cwd_user table) # Logout, then login again as "horatio nelson" (all lowercase) You will get this error: {code} 2013-10-11 22:19:58,407 ERROR [http-8443-6] [[Standalone].[localhost].[/c530].[action]] log Servlet.service() for servlet action threw exception java.lang.IllegalStateException: Unable to rename user Horatio Nelson to horatio nelson at com.atlassian.crowd.directory.AbstractInternalDirectory.forceRenameUser(AbstractInternalDirectory.java:611) at com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.authenticateAndUpdateOrCreate(DelegatedAuthenticationDirectory.java:218) at com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.authenticate(DelegatedAuthenticationDirectory.java:175) {code} h3.Cause: The problem is caused by this function in *com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.java*: {code} private User authenticateAndUpdateOrCreate(String name, PasswordCredential credential) throws InactiveAccountException, ExpiredCredentialException, OperationFailedException, InvalidAuthenticationException, UserNotFoundException { // authenticate the user against LDAP User ldapUser = ldapDirectory.authenticate(name, credential); // Try to find the corresponding local user User internalUser = findLocalUserByExternalId(ldapUser.getExternalId()); if (internalUser != null) { if (!internalUser.getName().equals(name)) { // We want to rename the existing user if (isUserUpdateOnAuthEnabled()) { // push any existing user out of our way and rename try { internalUser = internalDirectory.forceRenameUser(internalUser, name); } catch (UserNotFoundException e) { // Pretty unlucky throw new ConcurrentModificationException("Unable to rename '" + internalUser.getName() + "' to new name '" + name + "' during login."); } } {code} Specifically, this if statement: {code} if (!internalUser.getName().equals(name)) {code} Which takes the *name* string directly from the user input, and comparing it to the username stored in cwd_user directly, hence, the mismatch, which is why {{forceRenameUser}} is called in the first place So far, this affects any Confluence distribution bundled with the Crowd 2.7 integration libraries h3.Workaround # Login with the *exact* case, in this case, it would be "Horatio Nelson" # Disable "Copy User on Login" for the directory - that will avoid this problem and allow already created users to log in, but no new users will be created automatically on login, and no group updates will be synchronised from the LDAP directory

    Atlassian JIRA | 3 years ago | Steve Haffenden [Atlassian]
    java.lang.IllegalStateException: Unable to rename user Horatio Nelson to horatio nelson

    Not finding the right solution?
    Take a tour to get the most out of Samebug.

    Tired of useless tips?

    Automated exception search integrated into your IDE

    Root Cause Analysis

    1. java.lang.IllegalStateException

      Unable to rename user Horatio Nelson to horatio nelson

      at com.atlassian.crowd.directory.AbstractInternalDirectory.forceRenameUser()
    2. com.atlassian.crowd
      DelegatedAuthenticationDirectory.authenticate
      1. com.atlassian.crowd.directory.AbstractInternalDirectory.forceRenameUser(AbstractInternalDirectory.java:611)
      2. com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.authenticateAndUpdateOrCreate(DelegatedAuthenticationDirectory.java:218)
      3. com.atlassian.crowd.directory.DelegatedAuthenticationDirectory.authenticate(DelegatedAuthenticationDirectory.java:175)
      3 frames