]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-92007: Handle elevation errors in NTEventLogHandler more grace… (GH-96322)
authorVinay Sajip <vinay_sajip@yahoo.co.uk>
Sat, 27 Aug 2022 11:13:19 +0000 (12:13 +0100)
committerGitHub <noreply@github.com>
Sat, 27 Aug 2022 11:13:19 +0000 (12:13 +0100)
Lib/logging/handlers.py

index 3f97862cc37a9dd23f2703c2e93b1a0e68412425..b4c5c1304b975296c784bb5bf5bca3ed4d9ae4ac 100644 (file)
@@ -1111,7 +1111,16 @@ class NTEventLogHandler(logging.Handler):
                 dllname = os.path.join(dllname[0], r'win32service.pyd')
             self.dllname = dllname
             self.logtype = logtype
-            self._welu.AddSourceToRegistry(appname, dllname, logtype)
+            # Administrative privileges are required to add a source to the registry.
+            # This may not be available for a user that just wants to add to an
+            # existing source - handle this specific case.
+            try:
+                self._welu.AddSourceToRegistry(appname, dllname, logtype)
+            except Exception as e:
+                # This will probably be a pywintypes.error. Only raise if it's not
+                # an "access denied" error, else let it pass
+                if getattr(e, 'winerror', None) != 5:  # not access denied
+                    raise
             self.deftype = win32evtlog.EVENTLOG_ERROR_TYPE
             self.typemap = {
                 logging.DEBUG   : win32evtlog.EVENTLOG_INFORMATION_TYPE,