{"record":{"id":"edd15803a2efab82","repo":"TechnitiumSoftware/DnsServer","slug":"user-already-exists-username","errorCode":null,"errorMessage":"User already exists: {username}","messagePattern":"User already exists: (.+?)","errorType":"exception","errorClass":"DnsWebServiceException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Auth/AuthManager.cs","lineNumber":941,"sourceCode":"                throw new DnsWebServiceException(\"Cannot create more than 255 users.\");\n\n            username = username.ToLowerInvariant();\n\n            User user = User.CreateLocalUser(displayName, username, password, iterations);\n\n            if (_users.TryAdd(username, user))\n            {\n                if (_users.Count > byte.MaxValue)\n                {\n                    _users.TryRemove(username, out _); //undo\n                    throw new DnsWebServiceException(\"Cannot create more than 255 users.\");\n                }\n\n                user.AddToGroup(GetGroup(Group.EVERYONE));\n                return user;\n            }\n\n            throw new DnsWebServiceException(\"User already exists: \" + username);\n        }\n\n        public User CreateSsoUser(string displayName, string username, string ssoIdentifier)\n        {\n            if (_users.Count >= byte.MaxValue)\n                throw new DnsWebServiceException(\"Cannot create more than 255 users.\");\n\n            username = username.ToLowerInvariant();\n\n            User user = User.CreateSsoUser(displayName, username, ssoIdentifier);\n\n            if (_users.TryAdd(username, user))\n            {\n                if (_users.Count > byte.MaxValue)\n                {\n                    _users.TryRemove(username, out _); //undo\n                    throw new DnsWebServiceException(\"Cannot create more than 255 users.\");\n                }","sourceCodeStart":923,"sourceCodeEnd":959,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Auth/AuthManager.cs#L923-L959","documentation":"Thrown as DnsWebServiceException from CreateUser when _users.TryAdd(username, user) returns false, meaning a user with that username already exists. Usernames are lowercased before storage, so the uniqueness check is effectively case-insensitive. Returned over the API as HTTP 200 with status 'error'.","triggerScenarios":"Calling CreateUser with a username (lowercased) that is already a key in _users; e.g., creating 'Admin' when 'admin' exists.","commonSituations":"Re-running a provisioning script; an admin/User already created the same name; case-only differences (the code stores lowercased keys).","solutions":["Check whether the username exists (case-insensitively) before creating, and skip or update instead.","Pick a unique username.","Delete the existing user first if a replacement is intended."],"exampleFix":"// before\n_dnsWebService._authManager.CreateUser(name, username, password);\n// after\nif (GetUser(username) is null)\n    _dnsWebService._authManager.CreateUser(name, username, password);","handlingStrategy":"validation","validationCode":"if (await GetUserAsync(username) is not null)\n    throw new InvalidOperationException($\"User '{username}' already exists.\");","typeGuard":null,"tryCatchPattern":"try { await client.CreateUserAsync(name, username, password); }\ncatch (HttpApiClientException ex) when (ex.Message.StartsWith(\"User already exists\"))\n{\n    // skip or update instead\n}","preventionTips":["Check existence case-insensitively before creating.","Make provisioning scripts idempotent."],"tags":["auth","user-management","duplicate"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}