From dc6c83dd8efc138f640f727b6e29d7ee26cfa22f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rajmund=20Hru=C5=A1ka?= <rajmund.hruska@cesnet.cz>
Date: Tue, 25 Aug 2020 09:34:18 +0200
Subject: [PATCH] Add support for Python3

---
 warden_ra/ejbcaws.py           | 10 ++++++++--
 warden_ra/warden_ra.py         | 22 ++++++++++++++--------
 warden_server/warden_server.py |  2 +-
 3 files changed, 23 insertions(+), 11 deletions(-)
 mode change 100644 => 100755 warden_ra/ejbcaws.py

diff --git a/warden_ra/ejbcaws.py b/warden_ra/ejbcaws.py
old mode 100644
new mode 100755
index c0a78f1..af63d99
--- a/warden_ra/ejbcaws.py
+++ b/warden_ra/ejbcaws.py
@@ -4,8 +4,7 @@
 # Copyright (c) 2016, CESNET, z. s. p. o.
 # Use of this source is governed by an ISC license, see LICENSE file.
 
-import urllib2
-import httplib
+import sys
 import socket
 import base64
 import suds.transport.http
@@ -13,6 +12,13 @@ import suds.client
 import M2Crypto
 
 
+if sys.version_info[0] >= 3:
+    import urllib.request as urllib2
+    import http.client as httplib
+else:
+    import urllib2
+    import httplib
+
 STATUS_FAILED = 11
 STATUS_GENERATED = 40
 STATUS_HISTORICAL = 60
diff --git a/warden_ra/warden_ra.py b/warden_ra/warden_ra.py
index b7400c3..af85ba8 100755
--- a/warden_ra/warden_ra.py
+++ b/warden_ra/warden_ra.py
@@ -4,6 +4,8 @@
 # Copyright (c) 2016, CESNET, z. s. p. o.
 # Use of this source is governed by an ISC license, see LICENSE file.
 
+from __future__ import print_function
+
 import sys
 import os
 import time
@@ -21,13 +23,17 @@ import subprocess
 import shlex
 import tempfile
 import M2Crypto
-import ConfigParser
 # *ph* server vulnerable to logjam, local openssl too new, use hammer to disable Diffie-Helmann
 import ssl
 ssl._DEFAULT_CIPHERS += ":!DH"
 
 import ejbcaws
 
+if sys.version_info[0] >= 3:
+    import configparser as ConfigParser
+else:
+    import ConfigParser
+
 # usual path to warden server
 sys.path.append(pth.join(pth.dirname(__file__), "..", "warden-server"))
 import warden_server
@@ -120,7 +126,7 @@ class OpenSSLRegistry(object):
         except OSError as e:
             if e.errno != errno.EEXIST:
                 raise
-        with tempfile.NamedTemporaryFile(dir=client_path, delete=False) as cf:
+        with tempfile.NamedTemporaryFile(dir=client_path, delete=False, mode="w") as cf:
             config.write(cf)
         os.chmod(cf.name, 0o660)    # read privilege for usual apache group
         os.rename(cf.name, pth.join(client_path, "state")) # atomic + rewrite, so no need for locking
@@ -309,7 +315,7 @@ class OptionalAuthenticator(ObjectBase):
             try:
                 args["password"][0]
                 return "pwd"    # Ok, pass on, but getCert will have to rely on certificate registry password
-            except KeyError, IndexError:
+            except (KeyError, IndexError):
                 exception = self.req.error(message="authenticate: no certificate nor password present", error=403, cn = cert_name, args = args)
                 exception.log(self.log)
                 return None
@@ -414,7 +420,7 @@ def list_clients(registry, name=None, verbose=False, show_cert=True):
     if name is not None:
         client = registry.get_client(name)
         if client is None:
-            print "No such client."
+            print("No such client.")
             return
         else:
             print(client.str(verbose))
@@ -442,14 +448,14 @@ def register_client(registry, name, admins=None, verbose=False):
 def applicant(registry, name, password=None, verbose=False):
     client = registry.get_client(name)
     if not client:
-        print "No such client."
+        print("No such client.")
         return
     if password is None:
         password = "".join((random.choice(string.ascii_letters + string.digits) for dummy in range(16)))
     try:
         client.update(status="Issuable", pwd=password)
     except ClientDisabledError:
-        print "This client is disabled. Use 'enable' first."
+        print("This client is disabled. Use 'enable' first.")
         return
     registry.save_client(client)
     list_clients(registry, name, verbose, show_cert=False)
@@ -459,7 +465,7 @@ def applicant(registry, name, password=None, verbose=False):
 def enable(registry, name, verbose=False):
     client = registry.get_client(name)
     if not client:
-        print "No such client."
+        print("No such client.")
         return
     client.update(status="Passive")
     registry.save_client(client)
@@ -469,7 +475,7 @@ def enable(registry, name, verbose=False):
 def disable(registry, name, verbose=False):
     client = registry.get_client(name)
     if not client:
-        print "No such client."
+        print("No such client.")
         return
     client.update(status="Disabled")
     registry.save_client(client)
diff --git a/warden_server/warden_server.py b/warden_server/warden_server.py
index c69fb6a..5cf1c09 100755
--- a/warden_server/warden_server.py
+++ b/warden_server/warden_server.py
@@ -863,7 +863,7 @@ def expose(read=1, write=0, debug=0):
         meth.write = write
         meth.debug = debug
         if not hasattr(meth, "arguments"):
-            meth.arguments = meth.func_code.co_varnames[:meth.func_code.co_argcount]
+            meth.arguments = get_method_params(meth)
         return meth
 
     return expose_deco
-- 
GitLab