{"record":{"id":"70664bc55ef8f068","repo":"Comfy-Org/ComfyUI","slug":"system-user-prefix-not-allowed","errorCode":null,"errorMessage":"System User prefix not allowed","messagePattern":"System User prefix not allowed","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"app/user_manager.py","lineNumber":110,"sourceCode":"\n            # prevent leaving /{type}/{user}\n            path = os.path.abspath(os.path.join(user_root, file))\n            if os.path.commonpath((user_root, path)) != user_root:\n                return None\n\n        parent = os.path.split(path)[0]\n\n        if create_dir and not os.path.exists(parent):\n            os.makedirs(parent, exist_ok=True)\n\n        return path\n\n    def add_user(self, name):\n        name = name.strip()\n        if not name:\n            raise ValueError(\"username not provided\")\n        if name.startswith(folder_paths.SYSTEM_USER_PREFIX):\n            raise ValueError(\"System User prefix not allowed\")\n        user_id = re.sub(\"[^a-zA-Z0-9-_]+\", '-', name)\n        if user_id.startswith(folder_paths.SYSTEM_USER_PREFIX):\n            raise ValueError(\"System User prefix not allowed\")\n        user_id = user_id + \"_\" + str(uuid.uuid4())\n\n        self.users[user_id] = name\n\n        with open(self.get_users_file(), \"w\") as f:\n            json.dump(self.users, f)\n\n        return user_id\n\n    def add_routes(self, routes):\n        self.settings.add_routes(routes)\n\n        @routes.get(\"/users\")\n        async def get_users(request):\n            if args.multi_user:","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/Comfy-Org/ComfyUI/blob/1c6d8d45b3693bfbb32385b410d813a7fd6be216/app/user_manager.py#L92-L128","documentation":"add_user refuses display names that start with folder_paths.SYSTEM_USER_PREFIX ('__') because that prefix marks ComfyUI's own reserved directories/files. The check runs on the raw (stripped) name before any id sanitization, so a name like '__admin' is rejected immediately.","triggerScenarios":"Calling add_user with a name beginning with two underscores, e.g. \"__internal\"; user-creation automation that prefixes names with '__'.","commonSituations":"Naming conventions that use leading underscores for special accounts; attempts to impersonate/overlap system storage paths; copy-pasting a system directory name as a username.","solutions":["Pick a name that does not start with '__', e.g. \"internal\" instead of \"__internal\".","Enforce the rule client-side: reject names where name.strip().startswith('__')."],"exampleFix":"# before\nuser_manager.add_user(\"__admin\")\n\n# after\nuser_manager.add_user(\"admin\")","handlingStrategy":"validation","validationCode":"import folder_paths\nname = name.strip()\nif name.startswith(folder_paths.SYSTEM_USER_PREFIX):\n    raise ValueError(\"reserved prefix\")\nuser_manager.add_user(name)","typeGuard":"import folder_paths\ndef name_has_reserved_prefix(name: str) -> bool:\n    return name.strip().startswith(folder_paths.SYSTEM_USER_PREFIX)","tryCatchPattern":"try:\n    user_manager.add_user(name)\nexcept ValueError as e:\n    return web.Response(status=400, text=str(e))","preventionTips":["Avoid leading-underscore usernames entirely.","Treat '__' as reserved in any user-management UI."],"tags":["validation","multi-user","security"],"backgroundTag":null,"analyzedSha":"1c6d8d45b3693bfbb32385b410d813a7fd6be216","analyzedAt":"2026-08-14T19:37:18.893Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}