diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index dcc97c3eb1c26ef0a2d17ad9826cd8666bd00d96..9504898d040ba2f55aa661c2ddb8f42e5dd73514 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,9 +3,9 @@ linter:
   image: python:3.7
   script:
   - pip install pylint-gitlab
-  - python3 -m pylint --exit-zero --rcfile .pylintrc --output-format=pylint_gitlab.GitlabCodeClimateReporter ldapserver > codeclimate.json || true
-  - python3 -m pylint --exit-zero --rcfile .pylintrc --output-format=pylint_gitlab.GitlabPagesHtmlReporter ldapserver > pylint.html || true
-  - python3 -m pylint --rcfile .pylintrc --output-format=text ldapserver || true
+  - python3 -m pylint --exit-zero --rcfile .pylintrc --output-format=pylint_gitlab.GitlabCodeClimateReporter ldapserver > codeclimate.json
+  - python3 -m pylint --exit-zero --rcfile .pylintrc --output-format=pylint_gitlab.GitlabPagesHtmlReporter ldapserver > pylint.html
+  - python3 -m pylint --rcfile .pylintrc --output-format=text ldapserver
   artifacts:
     when: always
     paths:
diff --git a/ldapserver/dn.py b/ldapserver/dn.py
index 690fa3255d86aaaec5592b08974381ccd3754baa..0ede9a1db5ad4858eb6e840749b2bdbf002a7644 100644
--- a/ldapserver/dn.py
+++ b/ldapserver/dn.py
@@ -39,7 +39,6 @@ def parse_assertion(expr, case_ignore_attrs=None):
 	value = tokens[1]
 	if not name or not value:
 		raise ValueError('Invalid assertion in RDN: "%s"'%expr)
-	# TODO: handle hex strings
 	if name in case_ignore_attrs:
 		value = value.lower()
 	return (name, value)
diff --git a/ldapserver/ldap.py b/ldapserver/ldap.py
index a1c9f5193bcfb344417b499fafbefc1931613936..9a1e24df78199bbd32f571e421eb13c55a716344 100644
--- a/ldapserver/ldap.py
+++ b/ldapserver/ldap.py
@@ -1,6 +1,3 @@
-# Enums/constants/attributes are mostly named after RFCs
-# No-members is raised for all the dynamically populated attributes
-# pylint: disable=invalid-name
 import typing
 from abc import ABC, abstractmethod
 import enum
@@ -31,10 +28,10 @@ class AttributeValueAssertion(asn1.Sequence):
 	attributeDesc: str
 	assertionValue: bytes
 
-def escape_filter_assertionvalue(s):
+def escape_filter_assertionvalue(value):
 	allowed_bytes = b'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'+,-./:;<=>?@[\\]^_`{|}~ '
 	res = []
-	for byte in s:
+	for byte in value:
 		if byte not in allowed_bytes:
 			res += b'\\%02X'%byte
 		else:
@@ -192,6 +189,7 @@ class FilterExtensibleMatch(asn1.Sequence, Filter):
 
 class SearchScope(enum.Enum):
 	''':any:`enum.Enum` of `scope` values in SEARCH operations'''
+	# pylint: disable=invalid-name
 	#: Search is constrained to the base object
 	baseObject = 0
 	#: Search is constrained to the immediate subordinates of the base object
@@ -200,12 +198,14 @@ class SearchScope(enum.Enum):
 	wholeSubtree = 2
 
 class DerefAliases(enum.Enum):
+	# pylint: disable=invalid-name
 	neverDerefAliases = 0
 	derefInSearching = 1
 	derefFindingBaseObj = 2
 	derefAlways = 3
 
 class LDAPResultCode(enum.Enum):
+	# pylint: disable=invalid-name
 	success                      = 0
 	operationsError              = 1
 	protocolError                = 2
@@ -360,6 +360,7 @@ class SearchResultDone(LDAPResult, ProtocolOp):
 	BER_TAG = (1, True, 5)
 
 class ModifyOperation(enum.Enum):
+	# pylint: disable=invalid-name
 	add = 0
 	delete = 1
 	replace = 2
@@ -474,6 +475,7 @@ class LDAPMessage(asn1.Sequence):
 
 class ShallowLDAPMessage(asn1.BERType):
 	BER_TAG = (0, True, 16)
+	# pylint: disable=invalid-name
 
 	def __init__(self, messageID=None, protocolOpType=None, data=None):
 		self.messageID = messageID
diff --git a/ldapserver/server.py b/ldapserver/server.py
index afe268786f14493c6931d3d3b7fd61b1ad4d743b..e59ef2c7e7369875291fbc60ab46df52edaf52b3 100644
--- a/ldapserver/server.py
+++ b/ldapserver/server.py
@@ -227,7 +227,7 @@ class SimpleLDAPRequestHandler(BaseLDAPRequestHandler):
 				self.bind_sasl_state = (mechanism, iterator)
 			except StopIteration as e:
 				resp_code = ldap.LDAPResultCode.success
-				self.bind_object, resp = e.value
+				self.bind_object, resp = e.value # pylint: disable=unpacking-non-sequence
 			yield ldap.BindResponse(resp_code, serverSaslCreds=resp)
 			return
 		# If auth type or SASL method changed, abort SASL dialog
@@ -248,7 +248,7 @@ class SimpleLDAPRequestHandler(BaseLDAPRequestHandler):
 				self.bind_sasl_state = (auth.mechanism, iterator)
 			except StopIteration as e:
 				resp_code = ldap.LDAPResultCode.success
-				self.bind_object, resp = e.value
+				self.bind_object, resp = e.value # pylint: disable=unpacking-non-sequence
 			yield ldap.BindResponse(resp_code, serverSaslCreds=resp)
 		else:
 			yield from super().handle_bind(op, controls)