summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Cholasta <jcholast@redhat.com>2017-03-09 11:42:12 +0000
committerMartin Basti <mbasti@redhat.com>2017-03-13 16:06:22 +0100
commit8fdd7a9ffc263c1198afa5479cda41d319f11d91 (patch)
tree828bfc280c3c4367a54e2e3a8b898fa994ea0d78
parent4514ec150586fb43fa66566cce8a69b3ac15b86c (diff)
downloadfreeipa-8fdd7a9ffc263c1198afa5479cda41d319f11d91.tar.gz
freeipa-8fdd7a9ffc263c1198afa5479cda41d319f11d91.tar.xz
freeipa-8fdd7a9ffc263c1198afa5479cda41d319f11d91.zip
backend plugins: fix crashes in development mode
Do not set or delete attributes directly on KerberosWSGIExecutioner, ldap2 and ra_lightweight_ca instances, as that raises an AttributeError in development mode because of ReadOnly locking. Use the usual workaround of `object.__setattr__` and `object.__delattr__` to fix the issue. https://pagure.io/freeipa/issue/6625 Reviewed-By: Tomas Krizek <tkrizek@redhat.com>
-rw-r--r--ipaserver/plugins/dogtag.py4
-rw-r--r--ipaserver/plugins/ldap2.py28
-rw-r--r--ipaserver/rpcserver.py6
3 files changed, 20 insertions, 18 deletions
diff --git a/ipaserver/plugins/dogtag.py b/ipaserver/plugins/dogtag.py
index 05b759da7..d1dd707f1 100644
--- a/ipaserver/plugins/dogtag.py
+++ b/ipaserver/plugins/dogtag.py
@@ -1289,7 +1289,7 @@ class RestClient(Backend):
cookies = ipapython.cookie.Cookie.parse(resp_headers.get('set-cookie', ''))
if status != 200 or len(cookies) == 0:
raise errors.RemoteRetrieveError(reason=_('Failed to authenticate to CA REST API'))
- self.cookie = str(cookies[0])
+ object.__setattr__(self, 'cookie', str(cookies[0]))
return self
def __exit__(self, exc_type, exc_value, traceback):
@@ -1302,7 +1302,7 @@ class RestClient(Backend):
client_keyfile=self.client_keyfile,
method='GET'
)
- self.cookie = None
+ object.__setattr__(self, 'cookie', None)
def _ssldo(self, method, path, headers=None, body=None, use_session=True):
"""
diff --git a/ipaserver/plugins/ldap2.py b/ipaserver/plugins/ldap2.py
index e671ecba7..def124530 100644
--- a/ipaserver/plugins/ldap2.py
+++ b/ipaserver/plugins/ldap2.py
@@ -77,42 +77,42 @@ class ldap2(CrudBackend, LDAPClient):
LDAPClient.__init__(self, ldap_uri,
force_schema_updates=force_schema_updates)
- self.__time_limit = float(LDAPClient.time_limit)
- self.__size_limit = int(LDAPClient.size_limit)
+ self._time_limit = float(LDAPClient.time_limit)
+ self._size_limit = int(LDAPClient.size_limit)
@property
def time_limit(self):
- if self.__time_limit is None:
+ if self._time_limit is None:
return float(self.get_ipa_config().single_value.get(
'ipasearchtimelimit', 2))
- return self.__time_limit
+ return self._time_limit
@time_limit.setter
def time_limit(self, val):
if val is not None:
val = float(val)
- self.__time_limit = val
+ object.__setattr__(self, '_time_limit', val)
@time_limit.deleter
def time_limit(self):
- self.__time_limit = int(LDAPClient.size_limit)
+ object.__setattr__(self, '_time_limit', int(LDAPClient.size_limit))
@property
def size_limit(self):
- if self.__size_limit is None:
+ if self._size_limit is None:
return int(self.get_ipa_config().single_value.get(
'ipasearchrecordslimit', 0))
- return self.__size_limit
+ return self._size_limit
@size_limit.setter
def size_limit(self, val):
if val is not None:
val = int(val)
- self.__size_limit = val
+ object.__setattr__(self, '_size_limit', val)
@size_limit.deleter
def size_limit(self):
- self.__size_limit = float(LDAPClient.time_limit)
+ object.__setattr__(self, '_size_limit', float(LDAPClient.time_limit))
def _connect(self):
# Connectible.conn is a proxy to thread-local storage;
@@ -158,9 +158,9 @@ class ldap2(CrudBackend, LDAPClient):
cacert = paths.IPA_CA_CRT
if time_limit is not _missing:
- self.time_limit = time_limit
+ object.__setattr__(self, 'time_limit', time_limit)
if size_limit is not _missing:
- self.size_limit = size_limit
+ object.__setattr__(self, 'size_limit', size_limit)
client = LDAPClient(self.ldap_uri,
force_schema_updates=self._force_schema_updates,
@@ -219,8 +219,8 @@ class ldap2(CrudBackend, LDAPClient):
# ignore when trying to unbind multiple times
pass
- del self.time_limit
- del self.size_limit
+ object.__delattr__(self, 'time_limit')
+ object.__delattr__(self, 'size_limit')
def get_ipa_config(self, attrs_list=None):
"""Returns the IPA configuration entry (dn, entry_attrs)."""
diff --git a/ipaserver/rpcserver.py b/ipaserver/rpcserver.py
index 65b899877..fa15742d5 100644
--- a/ipaserver/rpcserver.py
+++ b/ipaserver/rpcserver.py
@@ -628,8 +628,10 @@ class KerberosWSGIExecutioner(WSGIExecutioner, KerberosSession):
self.debug('KerberosWSGIExecutioner.__call__:')
user_ccache=environ.get('KRB5CCNAME')
- self.headers = [('Content-Type',
- '%s; charset=utf-8' % self.content_type)]
+ object.__setattr__(
+ self, 'headers',
+ [('Content-Type', '%s; charset=utf-8' % self.content_type)]
+ )
if user_ccache is None: