From 4077cd2342d33b73281425c3303cae7407f164f7 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Wed, 29 May 2019 16:42:04 +0200 Subject: [PATCH] Pleasing the pylint gods --- lib/core/agent.py | 4 +- lib/core/common.py | 5 +-- lib/core/compat.py | 2 +- lib/core/enums.py | 78 +++++++++++++++++----------------- lib/core/replication.py | 4 +- lib/core/settings.py | 2 +- lib/core/subprocessng.py | 6 +-- lib/core/testing.py | 2 +- lib/takeover/icmpsh.py | 2 +- lib/takeover/metasploit.py | 2 +- lib/takeover/registry.py | 2 +- lib/takeover/udf.py | 2 +- lib/takeover/web.py | 2 +- lib/takeover/xp_cmdshell.py | 2 +- lib/utils/har.py | 14 +++--- plugins/generic/connector.py | 2 +- plugins/generic/custom.py | 2 +- plugins/generic/databases.py | 2 +- plugins/generic/entries.py | 2 +- plugins/generic/filesystem.py | 2 +- plugins/generic/fingerprint.py | 2 +- plugins/generic/misc.py | 2 +- plugins/generic/search.py | 2 +- plugins/generic/syntax.py | 2 +- plugins/generic/users.py | 2 +- 25 files changed, 74 insertions(+), 75 deletions(-) diff --git a/lib/core/agent.py b/lib/core/agent.py index 1a2cf9ce8..dbcb68dfb 100644 --- a/lib/core/agent.py +++ b/lib/core/agent.py @@ -172,9 +172,9 @@ class Agent(object): if place in (PLACE.URI, PLACE.CUSTOM_POST, PLACE.CUSTOM_HEADER): _ = "%s%s" % (origValue, kb.customInjectionMark) - if kb.postHint == POST_HINT.JSON and not isNumber(newValue) and not '"%s"' % _ in paramString: + if kb.postHint == POST_HINT.JSON and not isNumber(newValue) and '"%s"' % _ not in paramString: newValue = '"%s"' % newValue - elif kb.postHint == POST_HINT.JSON_LIKE and not isNumber(newValue) and not "'%s'" % _ in paramString: + elif kb.postHint == POST_HINT.JSON_LIKE and not isNumber(newValue) and "'%s'" % _ not in paramString: newValue = "'%s'" % newValue newValue = newValue.replace(kb.customInjectionMark, REPLACEMENT_MARKER) retVal = paramString.replace(_, self.addPayloadDelimiters(newValue)) diff --git a/lib/core/common.py b/lib/core/common.py index df76d5988..ee753692d 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -328,8 +328,7 @@ class Format(object): else: return infoStr.lstrip() -class Backend: - # Set methods +class Backend(object): @staticmethod def setDbms(dbms): dbms = aliasToDbmsEnum(dbms) @@ -3547,7 +3546,7 @@ def checkIntegrity(): retVal = True baseTime = os.path.getmtime(paths.SQLMAP_SETTINGS_PATH) + 3600 # First hour free parking :) - for root, dirnames, filenames in os.walk(paths.SQLMAP_ROOT_PATH): + for root, _, filenames in os.walk(paths.SQLMAP_ROOT_PATH): for filename in filenames: if re.search(r"(\.py|\.xml|_)\Z", filename): filepath = os.path.join(root, filename) diff --git a/lib/core/compat.py b/lib/core/compat.py index 8388deb71..436700749 100644 --- a/lib/core/compat.py +++ b/lib/core/compat.py @@ -110,7 +110,7 @@ class WichmannHill(random.Random): period. """ - if not n >= 0: + if n < 0: raise ValueError("n must be >= 0") x, y, z = self._seed x = int(x * pow(171, n, 30269)) % 30269 diff --git a/lib/core/enums.py b/lib/core/enums.py index bc5748de5..d2b91441f 100644 --- a/lib/core/enums.py +++ b/lib/core/enums.py @@ -5,7 +5,7 @@ Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ -class PRIORITY: +class PRIORITY(object): LOWEST = -100 LOWER = -50 LOW = -10 @@ -14,7 +14,7 @@ class PRIORITY: HIGHER = 50 HIGHEST = 100 -class SORT_ORDER: +class SORT_ORDER(object): FIRST = 0 SECOND = 1 THIRD = 2 @@ -23,7 +23,7 @@ class SORT_ORDER: LAST = 100 # Reference: https://docs.python.org/2/library/logging.html#logging-levels -class LOGGING_LEVELS: +class LOGGING_LEVELS(object): NOTSET = 0 DEBUG = 10 INFO = 20 @@ -31,7 +31,7 @@ class LOGGING_LEVELS: ERROR = 40 CRITICAL = 50 -class DBMS: +class DBMS(object): ACCESS = "Microsoft Access" DB2 = "IBM DB2" FIREBIRD = "Firebird" @@ -46,7 +46,7 @@ class DBMS: H2 = "H2" INFORMIX = "Informix" -class DBMS_DIRECTORY_NAME: +class DBMS_DIRECTORY_NAME(object): ACCESS = "access" DB2 = "db2" FIREBIRD = "firebird" @@ -61,16 +61,16 @@ class DBMS_DIRECTORY_NAME: H2 = "h2" INFORMIX = "informix" -class CUSTOM_LOGGING: +class CUSTOM_LOGGING(object): PAYLOAD = 9 TRAFFIC_OUT = 8 TRAFFIC_IN = 7 -class OS: +class OS(object): LINUX = "Linux" WINDOWS = "Windows" -class PLACE: +class PLACE(object): GET = "GET" POST = "POST" URI = "URI" @@ -81,7 +81,7 @@ class PLACE: CUSTOM_POST = "(custom) POST" CUSTOM_HEADER = "(custom) HEADER" -class POST_HINT: +class POST_HINT(object): SOAP = "SOAP" JSON = "JSON" JSON_LIKE = "JSON-like" @@ -89,7 +89,7 @@ class POST_HINT: XML = "XML (generic)" ARRAY_LIKE = "Array-like" -class HTTPMETHOD: +class HTTPMETHOD(object): GET = "GET" POST = "POST" HEAD = "HEAD" @@ -100,28 +100,28 @@ class HTTPMETHOD: CONNECT = "CONNECT" PATCH = "PATCH" -class NULLCONNECTION: +class NULLCONNECTION(object): HEAD = "HEAD" RANGE = "Range" SKIP_READ = "skip-read" -class REFLECTIVE_COUNTER: +class REFLECTIVE_COUNTER(object): MISS = "MISS" HIT = "HIT" -class CHARSET_TYPE: +class CHARSET_TYPE(object): BINARY = 1 DIGITS = 2 HEXADECIMAL = 3 ALPHA = 4 ALPHANUM = 5 -class HEURISTIC_TEST: +class HEURISTIC_TEST(object): CASTED = 1 NEGATIVE = 2 POSITIVE = 3 -class HASH: +class HASH(object): MYSQL = r'(?i)\A\*[0-9a-f]{40}\Z' MYSQL_OLD = r'(?i)\A(?![0-9]+\Z)[0-9a-f]{16}\Z' POSTGRES = r'(?i)\Amd5[0-9a-f]{32}\Z' @@ -155,7 +155,7 @@ class HASH: SHA512_BASE64 = r'\A[a-zA-Z0-9+/]{86}==\Z' # Reference: http://www.zytrax.com/tech/web/mobile_ids.html -class MOBILES: +class MOBILES(object): BLACKBERRY = ("BlackBerry Z10", "Mozilla/5.0 (BB10; Kbd) AppleWebKit/537.35+ (KHTML, like Gecko) Version/10.3.3.2205 Mobile Safari/537.35+") GALAXY = ("Samsung Galaxy S7", "Mozilla/5.0 (Linux; Android 7.0; SM-G930V Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36") HP = ("HP iPAQ 6365", "Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320; HP iPAQ h6300)") @@ -168,23 +168,23 @@ class MOBILES: PIXEL = ("Google Pixel", "Mozilla/5.0 (Linux; Android 8.0.0; Pixel Build/OPR3.170623.013) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36") XIAOMI = ("Xiaomi Mi 3", "Mozilla/5.0 (Linux; U; Android 4.4.4; en-gb; MI 3W Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36 XiaoMi/MiuiBrowser/2.1.1") -class PROXY_TYPE: +class PROXY_TYPE(object): HTTP = "HTTP" HTTPS = "HTTPS" SOCKS4 = "SOCKS4" SOCKS5 = "SOCKS5" -class REGISTRY_OPERATION: +class REGISTRY_OPERATION(object): READ = "read" ADD = "add" DELETE = "delete" -class DUMP_FORMAT: +class DUMP_FORMAT(object): CSV = "CSV" HTML = "HTML" SQLITE = "SQLITE" -class HTTP_HEADER: +class HTTP_HEADER(object): ACCEPT = "Accept" ACCEPT_CHARSET = "Accept-Charset" ACCEPT_ENCODING = "Accept-Encoding" @@ -217,17 +217,17 @@ class HTTP_HEADER: X_POWERED_BY = "X-Powered-By" X_DATA_ORIGIN = "X-Data-Origin" -class EXPECTED: +class EXPECTED(object): BOOL = "bool" INT = "int" -class OPTION_TYPE: +class OPTION_TYPE(object): BOOLEAN = "boolean" INTEGER = "integer" FLOAT = "float" STRING = "string" -class HASHDB_KEYS: +class HASHDB_KEYS(object): DBMS = "DBMS" DBMS_FORK = "DBMS_FORK" CHECK_WAF_RESULT = "CHECK_WAF_RESULT" @@ -243,11 +243,11 @@ class HASHDB_KEYS: KB_XP_CMDSHELL_AVAILABLE = "KB_XP_CMDSHELL_AVAILABLE" OS = "OS" -class REDIRECTION: +class REDIRECTION(object): YES = "Y" NO = "N" -class PAYLOAD: +class PAYLOAD(object): SQLINJECTION = { 1: "boolean-based blind", 2: "error-based", @@ -286,13 +286,13 @@ class PAYLOAD: 9: "Pre-WHERE (non-query)", } - class METHOD: + class METHOD(object): COMPARISON = "comparison" GREP = "grep" TIME = "time" UNION = "union" - class TECHNIQUE: + class TECHNIQUE(object): BOOLEAN = 1 ERROR = 2 QUERY = 3 @@ -300,28 +300,28 @@ class PAYLOAD: TIME = 5 UNION = 6 - class WHERE: + class WHERE(object): ORIGINAL = 1 NEGATIVE = 2 REPLACE = 3 -class WIZARD: +class WIZARD(object): BASIC = ("getBanner", "getCurrentUser", "getCurrentDb", "isDba") INTERMEDIATE = ("getBanner", "getCurrentUser", "getCurrentDb", "isDba", "getUsers", "getDbs", "getTables", "getSchema", "excludeSysDbs") ALL = ("getBanner", "getCurrentUser", "getCurrentDb", "isDba", "getHostname", "getUsers", "getPasswordHashes", "getPrivileges", "getRoles", "dumpAll") -class ADJUST_TIME_DELAY: +class ADJUST_TIME_DELAY(object): DISABLE = -1 NO = 0 YES = 1 -class WEB_PLATFORM: +class WEB_PLATFORM(object): PHP = "php" ASP = "asp" ASPX = "aspx" JSP = "jsp" -class CONTENT_TYPE: +class CONTENT_TYPE(object): TARGET = 0 TECHNIQUES = 1 DBMS_FINGERPRINT = 2 @@ -350,26 +350,26 @@ class CONTENT_TYPE: REG_READ = 25 STATEMENTS = 26 -class CONTENT_STATUS: +class CONTENT_STATUS(object): IN_PROGRESS = 0 COMPLETE = 1 -class AUTH_TYPE: +class AUTH_TYPE(object): BASIC = "basic" DIGEST = "digest" NTLM = "ntlm" PKI = "pki" -class AUTOCOMPLETE_TYPE: +class AUTOCOMPLETE_TYPE(object): SQL = 0 OS = 1 SQLMAP = 2 API = 3 -class NOTE: +class NOTE(object): FALSE_POSITIVE_OR_UNEXPLOITABLE = "false positive or unexploitable" -class MKSTEMP_PREFIX: +class MKSTEMP_PREFIX(object): HASHES = "sqlmaphashes-" CRAWLER = "sqlmapcrawler-" IPC = "sqlmapipc-" @@ -381,11 +381,11 @@ class MKSTEMP_PREFIX: SPECIFIC_RESPONSE = "sqlmapresponse-" PREPROCESS = "sqlmappreprocess-" -class TIMEOUT_STATE: +class TIMEOUT_STATE(object): NORMAL = 0 EXCEPTION = 1 TIMEOUT = 2 -class HINT: +class HINT(object): PREPEND = 0 APPEND = 1 diff --git a/lib/core/replication.py b/lib/core/replication.py index 01f2495a6..837839289 100644 --- a/lib/core/replication.py +++ b/lib/core/replication.py @@ -32,7 +32,7 @@ class Replication(object): errMsg += "file '%s' ('%s')" % (self.filepath, getSafeExString(ex)) raise SqlmapConnectionException(errMsg) - class DataType: + class DataType(object): """ Using this class we define auxiliary objects used for representing sqlite data types. @@ -47,7 +47,7 @@ class Replication(object): def __repr__(self): return "" % self - class Table: + class Table(object): """ This class defines methods used to manipulate table objects. """ diff --git a/lib/core/settings.py b/lib/core/settings.py index 8d7137dd1..cf2bfa8e1 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.3.5.152" +VERSION = "1.3.5.153" TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable" TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34} VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE) diff --git a/lib/core/subprocessng.py b/lib/core/subprocessng.py index b33218210..fa77fbbde 100644 --- a/lib/core/subprocessng.py +++ b/lib/core/subprocessng.py @@ -94,7 +94,7 @@ class Popen(subprocess.Popen): try: x = msvcrt.get_osfhandle(self.stdin.fileno()) - (errCode, written) = WriteFile(x, input) + (_, written) = WriteFile(x, input) except ValueError: return self._close('stdin') except (subprocess.pywintypes.error, Exception) as ex: @@ -111,11 +111,11 @@ class Popen(subprocess.Popen): try: x = msvcrt.get_osfhandle(conn.fileno()) - (read, nAvail, nMessage) = PeekNamedPipe(x, 0) + (read, nAvail, _) = PeekNamedPipe(x, 0) if maxsize < nAvail: nAvail = maxsize if nAvail > 0: - (errCode, read) = ReadFile(x, nAvail, None) + (_, read) = ReadFile(x, nAvail, None) except (ValueError, NameError): return self._close(which) except (subprocess.pywintypes.error, Exception) as ex: diff --git a/lib/core/testing.py b/lib/core/testing.py index d98a512f1..14d4de5c4 100644 --- a/lib/core/testing.py +++ b/lib/core/testing.py @@ -169,7 +169,7 @@ def smokeTest(): logger.setLevel(logging.CRITICAL) kb.smokeMode = True - (failure_count, test_count) = doctest.testmod(module) + (failure_count, _) = doctest.testmod(module) kb.smokeMode = False logger.setLevel(logging.INFO) diff --git a/lib/takeover/icmpsh.py b/lib/takeover/icmpsh.py index 4be69f468..0fcec0f2d 100644 --- a/lib/takeover/icmpsh.py +++ b/lib/takeover/icmpsh.py @@ -22,7 +22,7 @@ from lib.core.data import logger from lib.core.data import paths from lib.core.exception import SqlmapDataException -class ICMPsh: +class ICMPsh(object): """ This class defines methods to call icmpsh for plugins. """ diff --git a/lib/takeover/metasploit.py b/lib/takeover/metasploit.py index 9d4f29c54..2cc04f2c5 100644 --- a/lib/takeover/metasploit.py +++ b/lib/takeover/metasploit.py @@ -53,7 +53,7 @@ from thirdparty import six if IS_WIN: import msvcrt -class Metasploit: +class Metasploit(object): """ This class defines methods to call Metasploit for plugins. """ diff --git a/lib/takeover/registry.py b/lib/takeover/registry.py index 5b83526c0..d70a2b607 100644 --- a/lib/takeover/registry.py +++ b/lib/takeover/registry.py @@ -12,7 +12,7 @@ from lib.core.data import conf from lib.core.data import logger from lib.core.enums import REGISTRY_OPERATION -class Registry: +class Registry(object): """ This class defines methods to read and write Windows registry keys """ diff --git a/lib/takeover/udf.py b/lib/takeover/udf.py index e5025d73d..e5ac1f9e5 100644 --- a/lib/takeover/udf.py +++ b/lib/takeover/udf.py @@ -29,7 +29,7 @@ from lib.core.exception import SqlmapUserQuitException from lib.core.unescaper import unescaper from lib.request import inject -class UDF: +class UDF(object): """ This class defines methods to deal with User-Defined Functions for plugins. diff --git a/lib/takeover/web.py b/lib/takeover/web.py index fb76432e8..8e14c988e 100644 --- a/lib/takeover/web.py +++ b/lib/takeover/web.py @@ -56,7 +56,7 @@ from lib.core.settings import VIEWSTATE_REGEX from lib.request.connect import Connect as Request from thirdparty.six.moves import urllib as _urllib -class Web: +class Web(object): """ This class defines web-oriented OS takeover functionalities for plugins. diff --git a/lib/takeover/xp_cmdshell.py b/lib/takeover/xp_cmdshell.py index 519be56e2..476a7d3dd 100644 --- a/lib/takeover/xp_cmdshell.py +++ b/lib/takeover/xp_cmdshell.py @@ -35,7 +35,7 @@ from lib.core.exception import SqlmapUnsupportedFeatureException from lib.core.threads import getCurrentThreadData from lib.request import inject -class XP_cmdshell: +class XP_cmdshell(object): """ This class defines methods to deal with Microsoft SQL Server xp_cmdshell extended procedure for plugins. diff --git a/lib/utils/har.py b/lib/utils/har.py index 2d9519d09..a065a9b01 100644 --- a/lib/utils/har.py +++ b/lib/utils/har.py @@ -21,14 +21,14 @@ from thirdparty.six.moves import http_client as _http_client # Reference: https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/HAR/Overview.html # http://www.softwareishard.com/har/viewer/ -class HTTPCollectorFactory: +class HTTPCollectorFactory(object): def __init__(self, harFile=False): self.harFile = harFile def create(self): return HTTPCollector() -class HTTPCollector: +class HTTPCollector(object): def __init__(self): self.messages = BigArray() self.extendedArguments = {} @@ -48,7 +48,7 @@ class HTTPCollector: "entries": [pair.toEntry().toDict() for pair in self.messages], }} -class RawPair: +class RawPair(object): def __init__(self, request, response, startTime=None, endTime=None, extendedArguments=None): self.request = getBytes(request) self.response = getBytes(response) @@ -61,7 +61,7 @@ class RawPair: startTime=self.startTime, endTime=self.endTime, extendedArguments=self.extendedArguments) -class Entry: +class Entry(object): def __init__(self, request, response, startTime, endTime, extendedArguments): self.request = request self.response = response @@ -85,7 +85,7 @@ class Entry: out.update(self.extendedArguments) return out -class Request: +class Request(object): def __init__(self, method, path, httpVersion, headers, postBody=None, raw=None, comment=None): self.method = method self.path = path @@ -133,7 +133,7 @@ class Request: return out -class Response: +class Response(object): extract_status = re.compile(b'\\((\\d{3}) (.*)\\)') def __init__(self, httpVersion, status, statusText, headers, content, raw=None, comment=None): @@ -202,7 +202,7 @@ class Response: "comment": getText(self.comment), } -class FakeSocket: +class FakeSocket(object): # Original source: # https://stackoverflow.com/questions/24728088/python-parse-http-response-string diff --git a/plugins/generic/connector.py b/plugins/generic/connector.py index 76188988f..656485e1a 100644 --- a/plugins/generic/connector.py +++ b/plugins/generic/connector.py @@ -12,7 +12,7 @@ from lib.core.data import logger from lib.core.exception import SqlmapFilePathException from lib.core.exception import SqlmapUndefinedMethod -class Connector: +class Connector(object): """ This class defines generic dbms protocol functionalities for plugins. """ diff --git a/plugins/generic/custom.py b/plugins/generic/custom.py index b902bd115..ccee31a5b 100644 --- a/plugins/generic/custom.py +++ b/plugins/generic/custom.py @@ -26,7 +26,7 @@ from lib.core.shell import autoCompletion from lib.request import inject from thirdparty.six.moves import input as _input -class Custom: +class Custom(object): """ This class defines custom enumeration functionalities for plugins. """ diff --git a/plugins/generic/databases.py b/plugins/generic/databases.py index 0c4ed0f16..143746509 100644 --- a/plugins/generic/databases.py +++ b/plugins/generic/databases.py @@ -51,7 +51,7 @@ from lib.utils.brute import columnExists from lib.utils.brute import tableExists from thirdparty import six -class Databases: +class Databases(object): """ This class defines databases' enumeration functionalities for plugins. """ diff --git a/plugins/generic/entries.py b/plugins/generic/entries.py index 1e072d771..f5f894bc3 100644 --- a/plugins/generic/entries.py +++ b/plugins/generic/entries.py @@ -48,7 +48,7 @@ from lib.utils.pivotdumptable import pivotDumpTable from thirdparty import six from thirdparty.six.moves import zip as _zip -class Entries: +class Entries(object): """ This class defines entries' enumeration functionalities for plugins. """ diff --git a/plugins/generic/filesystem.py b/plugins/generic/filesystem.py index bb417be1a..eccf17cc5 100644 --- a/plugins/generic/filesystem.py +++ b/plugins/generic/filesystem.py @@ -35,7 +35,7 @@ from lib.core.settings import TAKEOVER_TABLE_PREFIX from lib.core.settings import UNICODE_ENCODING from lib.request import inject -class Filesystem: +class Filesystem(object): """ This class defines generic OS file system functionalities for plugins. """ diff --git a/plugins/generic/fingerprint.py b/plugins/generic/fingerprint.py index b593e629c..26ff4e39b 100644 --- a/plugins/generic/fingerprint.py +++ b/plugins/generic/fingerprint.py @@ -11,7 +11,7 @@ from lib.core.data import logger from lib.core.enums import OS from lib.core.exception import SqlmapUndefinedMethod -class Fingerprint: +class Fingerprint(object): """ This class defines generic fingerprint functionalities for plugins. """ diff --git a/plugins/generic/misc.py b/plugins/generic/misc.py index cfced34e2..26a21928c 100644 --- a/plugins/generic/misc.py +++ b/plugins/generic/misc.py @@ -28,7 +28,7 @@ from lib.core.exception import SqlmapNoneDataException from lib.core.exception import SqlmapUnsupportedFeatureException from lib.request import inject -class Miscellaneous: +class Miscellaneous(object): """ This class defines miscellaneous functionalities for plugins. """ diff --git a/plugins/generic/search.py b/plugins/generic/search.py index b8cda1410..119af82c6 100644 --- a/plugins/generic/search.py +++ b/plugins/generic/search.py @@ -37,7 +37,7 @@ from lib.utils.brute import columnExists from lib.utils.brute import tableExists from thirdparty import six -class Search: +class Search(object): """ This class defines search functionalities for plugins. """ diff --git a/plugins/generic/syntax.py b/plugins/generic/syntax.py index 9ef65a54b..ccbeb4b69 100644 --- a/plugins/generic/syntax.py +++ b/plugins/generic/syntax.py @@ -9,7 +9,7 @@ import re from lib.core.exception import SqlmapUndefinedMethod -class Syntax: +class Syntax(object): """ This class defines generic syntax functionalities for plugins. """ diff --git a/plugins/generic/users.py b/plugins/generic/users.py index e0c527df0..79bf750f0 100644 --- a/plugins/generic/users.py +++ b/plugins/generic/users.py @@ -45,7 +45,7 @@ from lib.utils.hash import storeHashesToFile from lib.utils.pivotdumptable import pivotDumpTable from thirdparty.six.moves import zip as _zip -class Users: +class Users(object): """ This class defines users' enumeration functionalities for plugins. """