prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  [Backport] SafeConfigParser removal
  ### Original feature issue
  
  Issue #3551 PR #3552 
  
  ### Target release
  
  - [x] release33
  - [ ] release32
  - [ ] release30
  
  ### Reason
  
  This is needed for Fedora
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `cobbler/modules/authorization/configfile.py`
  Content:
  ```
  1 """
  2 Authorization module that allow users listed in
  3 /etc/cobbler/users.conf to be permitted to access resources.
  4 For instance, when using authz_ldap, you want to use authn_configfile,
  5 not authz_allowall, which will most likely NOT do what you want.
  6 """
  7 # SPDX-License-Identifier: GPL-2.0-or-later
  8 # SPDX-FileCopyrightText: Copyright 2007-2009, Red Hat, Inc and Others
  9 # SPDX-FileCopyrightText: Michael DeHaan <michael.dehaan AT gmail>
  10 
  11 
  12 from configparser import SafeConfigParser
  13 
  14 import os
  15 from typing import Dict
  16 
  17 CONFIG_FILE = '/etc/cobbler/users.conf'
  18 
  19 
  20 def register() -> str:
  21     """
  22     The mandatory Cobbler module registration hook.
  23 
  24     :return: Always "authz".
  25     """
  26     return "authz"
  27 
  28 
  29 def __parse_config() -> Dict[str, dict]:
  30     """
  31     Parse the the users.conf file.
  32 
  33     :return: The data of the config file.
  34     """
  35     if not os.path.exists(CONFIG_FILE):
  36         return {}
  37     config = SafeConfigParser()
  38     config.read(CONFIG_FILE)
  39     alldata = {}
  40     groups = config.sections()
  41     for g in groups:
  42         alldata[str(g)] = {}
  43         opts = config.options(g)
  44         for o in opts:
  45             alldata[g][o] = 1
  46     return alldata
  47 
  48 
  49 def authorize(api_handle, user: str, resource: str, arg1=None, arg2=None) -> int:
  50     """
  51     Validate a user against a resource. All users in the file are permitted by this module.
  52 
  53     :param api_handle: This parameter is not used currently.
  54     :param user: The user to authorize.
  55     :param resource: This parameter is not used currently.
  56     :param arg1: This parameter is not used currently.
  57     :param arg2: This parameter is not used currently.
  58     :return: "0" if no authorized, "1" if authorized.
  59     """
  60     # FIXME: this must be modified to use the new ACL engine
  61 
  62     data = __parse_config()
  63     for g in data:
  64         if user.lower() in data[g]:
  65             return 1
  66     return 0
  67
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/cobbler/modules/authorization/configfile.py b/cobbler/modules/authorization/configfile.py
  --- a/cobbler/modules/authorization/configfile.py
  +++ b/cobbler/modules/authorization/configfile.py
  @@ -9,7 +9,7 @@
   # SPDX-FileCopyrightText: Michael DeHaan <michael.dehaan AT gmail>
   
   
  -from configparser import SafeConfigParser
  +from configparser import ConfigParser
   
   import os
   from typing import Dict
  @@ -34,7 +34,7 @@
       """
       if not os.path.exists(CONFIG_FILE):
           return {}
  -    config = SafeConfigParser()
  +    config = ConfigParser()
       config.read(CONFIG_FILE)
       alldata = {}
       groups = config.sections()
  
verification_info: {"golden_diff": "diff --git a/cobbler/modules/authorization/configfile.py b/cobbler/modules/authorization/configfile.py\n--- a/cobbler/modules/authorization/configfile.py\n+++ b/cobbler/modules/authorization/configfile.py\n@@ -9,7 +9,7 @@\n # SPDX-FileCopyrightText: Michael DeHaan <michael.dehaan AT gmail>\n \n \n-from configparser import SafeConfigParser\n+from configparser import ConfigParser\n \n import os\n from typing import Dict\n@@ -34,7 +34,7 @@\n     \"\"\"\n     if not os.path.exists(CONFIG_FILE):\n         return {}\n-    config = SafeConfigParser()\n+    config = ConfigParser()\n     config.read(CONFIG_FILE)\n     alldata = {}\n     groups = config.sections()\n", "issue": "[Backport] SafeConfigParser removal\n### Original feature issue\r\n\r\nIssue #3551 PR #3552 \r\n\r\n### Target release\r\n\r\n- [x] release33\r\n- [ ] release32\r\n- [ ] release30\r\n\r\n### Reason\r\n\r\nThis is needed for Fedora\n", "before_files": [{"content": "\"\"\"\nAuthorization module that allow users listed in\n/etc/cobbler/users.conf to be permitted to access resources.\nFor instance, when using authz_ldap, you want to use authn_configfile,\nnot authz_allowall, which will most likely NOT do what you want.\n\"\"\"\n# SPDX-License-Identifier: GPL-2.0-or-later\n# SPDX-FileCopyrightText: Copyright 2007-2009, Red Hat, Inc and Others\n# SPDX-FileCopyrightText: Michael DeHaan <michael.dehaan AT gmail>\n\n\nfrom configparser import SafeConfigParser\n\nimport os\nfrom typing import Dict\n\nCONFIG_FILE = '/etc/cobbler/users.conf'\n\n\ndef register() -> str:\n    \"\"\"\n    The mandatory Cobbler module registration hook.\n\n    :return: Always \"authz\".\n    \"\"\"\n    return \"authz\"\n\n\ndef __parse_config() -> Dict[str, dict]:\n    \"\"\"\n    Parse the the users.conf file.\n\n    :return: The data of the config file.\n    \"\"\"\n    if not os.path.exists(CONFIG_FILE):\n        return {}\n    config = SafeConfigParser()\n    config.read(CONFIG_FILE)\n    alldata = {}\n    groups = config.sections()\n    for g in groups:\n        alldata[str(g)] = {}\n        opts = config.options(g)\n        for o in opts:\n            alldata[g][o] = 1\n    return alldata\n\n\ndef authorize(api_handle, user: str, resource: str, arg1=None, arg2=None) -> int:\n    \"\"\"\n    Validate a user against a resource. All users in the file are permitted by this module.\n\n    :param api_handle: This parameter is not used currently.\n    :param user: The user to authorize.\n    :param resource: This parameter is not used currently.\n    :param arg1: This parameter is not used currently.\n    :param arg2: This parameter is not used currently.\n    :return: \"0\" if no authorized, \"1\" if authorized.\n    \"\"\"\n    # FIXME: this must be modified to use the new ACL engine\n\n    data = __parse_config()\n    for g in data:\n        if user.lower() in data[g]:\n            return 1\n    return 0\n", "path": "cobbler/modules/authorization/configfile.py"}], "after_files": [{"content": "\"\"\"\nAuthorization module that allow users listed in\n/etc/cobbler/users.conf to be permitted to access resources.\nFor instance, when using authz_ldap, you want to use authn_configfile,\nnot authz_allowall, which will most likely NOT do what you want.\n\"\"\"\n# SPDX-License-Identifier: GPL-2.0-or-later\n# SPDX-FileCopyrightText: Copyright 2007-2009, Red Hat, Inc and Others\n# SPDX-FileCopyrightText: Michael DeHaan <michael.dehaan AT gmail>\n\n\nfrom configparser import ConfigParser\n\nimport os\nfrom typing import Dict\n\nCONFIG_FILE = '/etc/cobbler/users.conf'\n\n\ndef register() -> str:\n    \"\"\"\n    The mandatory Cobbler module registration hook.\n\n    :return: Always \"authz\".\n    \"\"\"\n    return \"authz\"\n\n\ndef __parse_config() -> Dict[str, dict]:\n    \"\"\"\n    Parse the the users.conf file.\n\n    :return: The data of the config file.\n    \"\"\"\n    if not os.path.exists(CONFIG_FILE):\n        return {}\n    config = ConfigParser()\n    config.read(CONFIG_FILE)\n    alldata = {}\n    groups = config.sections()\n    for g in groups:\n        alldata[str(g)] = {}\n        opts = config.options(g)\n        for o in opts:\n            alldata[g][o] = 1\n    return alldata\n\n\ndef authorize(api_handle, user: str, resource: str, arg1=None, arg2=None) -> int:\n    \"\"\"\n    Validate a user against a resource. All users in the file are permitted by this module.\n\n    :param api_handle: This parameter is not used currently.\n    :param user: The user to authorize.\n    :param resource: This parameter is not used currently.\n    :param arg1: This parameter is not used currently.\n    :param arg2: This parameter is not used currently.\n    :return: \"0\" if no authorized, \"1\" if authorized.\n    \"\"\"\n    # FIXME: this must be modified to use the new ACL engine\n\n    data = __parse_config()\n    for g in data:\n        if user.lower() in data[g]:\n            return 1\n    return 0\n", "path": "cobbler/modules/authorization/configfile.py"}]}