# <stream:error><conflict xmlns='urn:ietf:params:xml:ns:xmpp-streams'/></stream:error>

- **ID:** `communication/xmpp-stream-error-conflict`
- **Domain:** communication
- **Category:** auth_error
- **Error Code:** `conflict`
- **Verification:** ai_generated
- **Fix Rate:** 80%

## Root Cause

XMPP server terminates a stream with a conflict error when a second resource binds with the same priority and resource name, or when the user's account is disabled by an admin.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| RFC 6120 | active | — | — |
| Ejabberd 23.10 | active | — | — |
| Prosody 0.12 | active | — | — |
| Openfire 4.8 | active | — | — |

## Workarounds

1. **Set a unique resource name for each client connection. In the XMPP client, generate a random resource string (e.g., 'home-12345', 'mobile-abcde') instead of using a fixed name like 'client' or leaving it blank.** (90% success)
   ```
   Set a unique resource name for each client connection. In the XMPP client, generate a random resource string (e.g., 'home-12345', 'mobile-abcde') instead of using a fixed name like 'client' or leaving it blank.
   ```
2. **Check if the user account is disabled or banned on the server. On Ejabberd, run 'ejabberdctl check_account user@domain' and 'ejabberdctl ban_account user@domain' to verify status.** (80% success)
   ```
   Check if the user account is disabled or banned on the server. On Ejabberd, run 'ejabberdctl check_account user@domain' and 'ejabberdctl ban_account user@domain' to verify status.
   ```

## Dead Ends

- **Disable all other XMPP clients for the same user** — The conflict is caused by resource binding, not the number of clients; even two clients with different resource names can coexist (60% fail)
- **Restart the XMPP server to clear the conflict state** — The conflict is a per-session issue; restarting the server does not prevent the client from reconnecting with the same resource name (90% fail)
- **Change the server's port from 5222 to 5223 (legacy SSL)** — The port does not affect resource binding logic; the conflict error is stream-level, not transport-level (100% fail)
