mirror of
				https://github.com/sqlmapproject/sqlmap.git
				synced 2025-10-31 07:57:47 +03:00 
			
		
		
		
	Minor bug fixes and code refactoring
This commit is contained in:
		
							parent
							
								
									919a8345d6
								
							
						
					
					
						commit
						a138dbe5f6
					
				|  | @ -37,6 +37,8 @@ import ntpath | |||
| import posixpath | ||||
| import subprocess | ||||
| 
 | ||||
| from ConfigParser import DEFAULTSECT | ||||
| from ConfigParser import RawConfigParser | ||||
| from StringIO import StringIO | ||||
| from subprocess import PIPE | ||||
| from subprocess import Popen as execute | ||||
|  | @ -1365,3 +1367,22 @@ def getBruteUnicode(string): | |||
|     for char in string: | ||||
|         retVal += unichr(ord(char)) | ||||
|     return retVal | ||||
| 
 | ||||
| class UnicodeRawConfigParser(RawConfigParser): | ||||
|     def write(self, fp): | ||||
|         """Write an .ini-format representation of the configuration state.""" | ||||
|         if self._defaults: | ||||
|             fp.write("[%s]\n" % DEFAULTSECT) | ||||
|             for (key, value) in self._defaults.items(): | ||||
|                 fp.write("%s = %s\n" % (key, unicode(value).replace('\n', '\n\t'))) | ||||
|             fp.write("\n") | ||||
|         for section in self._sections: | ||||
|             fp.write("[%s]\n" % section) | ||||
|             for (key, value) in self._sections[section].items(): | ||||
|                 if key != "__name__": | ||||
|                     if value is None: | ||||
|                         fp.write("%s\n" % (key)) | ||||
|                     else: | ||||
|                         fp.write("%s = %s\n" % | ||||
|                                  (key, unicode(value).replace('\n', '\n\t'))) | ||||
|             fp.write("\n") | ||||
|  |  | |||
|  | @ -33,9 +33,6 @@ import socket | |||
| import urllib2 | ||||
| import urlparse | ||||
| 
 | ||||
| from ConfigParser import DEFAULTSECT | ||||
| from ConfigParser import RawConfigParser | ||||
| 
 | ||||
| from lib.core.common import getConsoleWidth | ||||
| from lib.core.common import getFileType | ||||
| from lib.core.common import normalizePath | ||||
|  | @ -45,6 +42,7 @@ from lib.core.common import parseTargetUrl | |||
| from lib.core.common import paths | ||||
| from lib.core.common import randomRange | ||||
| from lib.core.common import sanitizeStr | ||||
| from lib.core.common import UnicodeRawConfigParser | ||||
| from lib.core.data import conf | ||||
| from lib.core.data import kb | ||||
| from lib.core.data import logger | ||||
|  | @ -77,26 +75,6 @@ authHandler  = urllib2.BaseHandler() | |||
| proxyHandler = urllib2.BaseHandler() | ||||
| redirectHandler = SmartRedirectHandler() | ||||
| 
 | ||||
| 
 | ||||
| class UnicodeRawConfigParser(RawConfigParser): | ||||
|     def write(self, fp): | ||||
|         """Write an .ini-format representation of the configuration state.""" | ||||
|         if self._defaults: | ||||
|             fp.write("[%s]\n" % DEFAULTSECT) | ||||
|             for (key, value) in self._defaults.items(): | ||||
|                 fp.write("%s = %s\n" % (key, unicode(value).replace('\n', '\n\t'))) | ||||
|             fp.write("\n") | ||||
|         for section in self._sections: | ||||
|             fp.write("[%s]\n" % section) | ||||
|             for (key, value) in self._sections[section].items(): | ||||
|                 if key != "__name__": | ||||
|                     if value is None: | ||||
|                         fp.write("%s\n" % (key)) | ||||
|                     else: | ||||
|                         fp.write("%s = %s\n" % | ||||
|                                  (key, unicode(value).replace('\n', '\n\t'))) | ||||
|             fp.write("\n") | ||||
| 
 | ||||
| def __urllib2Opener(): | ||||
|     """ | ||||
|     This function creates the urllib2 OpenerDirector. | ||||
|  | @ -118,7 +96,7 @@ def __urllib2Opener(): | |||
|     urllib2.install_opener(opener) | ||||
| 
 | ||||
| def __feedTargetsDict(reqFile, addedTargetUrls): | ||||
|     fp = codecs.open(reqFile, "r", conf.dataEncoding) | ||||
|     fp = codecs.open(reqFile, "rb", conf.dataEncoding) | ||||
| 
 | ||||
|     fread = fp.read() | ||||
|     fread = fread.replace("\r", "") | ||||
|  | @ -856,6 +834,13 @@ def __cleanupOptions(): | |||
|     debugMsg = "cleaning up configuration parameters" | ||||
|     logger.debug(debugMsg) | ||||
| 
 | ||||
|     width = getConsoleWidth() | ||||
| 
 | ||||
|     if conf.eta: | ||||
|         conf.progressWidth = width-26 | ||||
|     else: | ||||
|         conf.progressWidth = width-46 | ||||
| 
 | ||||
|     if conf.testParameter: | ||||
|         conf.testParameter = conf.testParameter.replace(" ", "") | ||||
|         conf.testParameter = conf.testParameter.split(",") | ||||
|  | @ -932,13 +917,6 @@ def __setConfAttributes(): | |||
|     conf.threadException  = False | ||||
|     conf.wFileType        = None | ||||
| 
 | ||||
|     width = getConsoleWidth() | ||||
| 
 | ||||
|     if conf.eta: | ||||
|         conf.progressWidth = width-26 | ||||
|     else: | ||||
|         conf.progressWidth = width-46 | ||||
| 
 | ||||
| def __setKnowledgeBaseAttributes(): | ||||
|     """ | ||||
|     This function set some needed attributes into the knowledge base | ||||
|  | @ -989,7 +967,6 @@ def __setKnowledgeBaseAttributes(): | |||
|     kb.unionNegative  = False | ||||
|     kb.unionFalseCond = False | ||||
| 
 | ||||
| 
 | ||||
| def __saveCmdline(): | ||||
|     """ | ||||
|     Saves the command line options on a sqlmap configuration INI file | ||||
|  | @ -1019,6 +996,9 @@ def __saveCmdline(): | |||
|         optionData.sort() | ||||
| 
 | ||||
|         for option, value, datatype in optionData: | ||||
|             if isinstance(datatype, (list, tuple, set)): | ||||
|                 datatype = datatype[0] | ||||
| 
 | ||||
|             if value is None: | ||||
|                 if datatype == "boolean": | ||||
|                     value = "False" | ||||
|  | @ -1037,10 +1017,8 @@ def __saveCmdline(): | |||
| 
 | ||||
|             config.set(family, option, value) | ||||
| 
 | ||||
|     print 11111 | ||||
|     confFP = codecs.open(paths.SQLMAP_CONFIG, "wb", "UTF8") | ||||
|     confFP = codecs.open(paths.SQLMAP_CONFIG, "wb", conf.dataEncoding) | ||||
|     config.write(confFP) | ||||
|     print 22222 | ||||
| 
 | ||||
|     infoMsg = "saved command line options on '%s' configuration file" % paths.SQLMAP_CONFIG | ||||
|     logger.info(infoMsg) | ||||
|  | @ -1112,11 +1090,11 @@ def init(inputOptions=advancedDict()): | |||
|     based upon command line and configuration file options. | ||||
|     """ | ||||
| 
 | ||||
|     __setConfAttributes() | ||||
|     __setKnowledgeBaseAttributes() | ||||
|     __mergeOptions(inputOptions) | ||||
|     __setVerbosity() | ||||
|     __saveCmdline() | ||||
|     __setConfAttributes() | ||||
|     __setKnowledgeBaseAttributes() | ||||
|     __cleanupOptions() | ||||
|     __basicOptionValidation() | ||||
|     __setRequestFromFile() | ||||
|  |  | |||
|  | @ -24,9 +24,9 @@ Franklin St, Fifth Floor, Boston, MA  02110-1301  USA | |||
| import codecs | ||||
| 
 | ||||
| from ConfigParser import NoSectionError | ||||
| from ConfigParser import RawConfigParser | ||||
| 
 | ||||
| from lib.core.common import checkFile | ||||
| from lib.core.common import UnicodeRawConfigParser | ||||
| from lib.core.data import conf | ||||
| from lib.core.data import logger | ||||
| from lib.core.exception import sqlmapMissingMandatoryOptionException | ||||
|  | @ -43,17 +43,13 @@ def configFileProxy(section, option, boolean=False, integer=False): | |||
|     global config | ||||
| 
 | ||||
|     if config.has_option(section, option): | ||||
|         if boolean: | ||||
|             value = config.getboolean(section, option) | ||||
|         elif integer: | ||||
|             value = config.getint(section, option) | ||||
|         else: | ||||
|             value = config.get(section, option) | ||||
| 
 | ||||
|         if not value: | ||||
|             value = None | ||||
|         elif value.isdigit(): | ||||
|             value = int(value) | ||||
|         elif value in ("false", "False"): | ||||
|             value = False | ||||
|         elif value in ("true", "True"): | ||||
|             value = True | ||||
| 
 | ||||
|         if value: | ||||
|             conf[option] = value | ||||
|         else: | ||||
|  | @ -76,8 +72,8 @@ def configFileParser(configFile): | |||
|     logger.debug(debugMsg) | ||||
| 
 | ||||
|     checkFile(configFile) | ||||
|     config = RawConfigParser() | ||||
|     config.readfp(codecs.open(configFile, "r", "UTF8")) | ||||
|     config = UnicodeRawConfigParser() | ||||
|     config.readfp(codecs.open(configFile, "rb", conf.dataEncoding)) | ||||
| 
 | ||||
|     if not config.has_section("Target"): | ||||
|         raise NoSectionError, "Target in the configuration file is mandatory" | ||||
|  | @ -92,16 +88,16 @@ def configFileParser(configFile): | |||
|         raise sqlmapMissingMandatoryOptionException, errMsg | ||||
| 
 | ||||
|     for family, optionData in optDict.items(): | ||||
|         for option, data in optionData.items(): | ||||
|         for option, datatype in optionData.items(): | ||||
|             boolean = False | ||||
|             integer = False | ||||
| 
 | ||||
|             if isinstance(data, (tuple, dict, set)): | ||||
|                 data = data[0] | ||||
|             if isinstance(datatype, (list, tuple, set)): | ||||
|                 datatype = datatype[0] | ||||
| 
 | ||||
|             if data == "boolean": | ||||
|             if datatype == "boolean": | ||||
|                 boolean = True | ||||
|             elif data == "integer": | ||||
|             elif datatype == "integer": | ||||
|                 integer = True | ||||
| 
 | ||||
|             configFileProxy(family, option, boolean, integer) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user