Ticket #5808: cred-open-5808.patch
| File cred-open-5808.patch, 7.9 KB (added by thijs, 10 months ago) |
|---|
-
twisted/cred/checkers.py
193 193 194 194 def _loadCredentials(self): 195 195 try: 196 f = file(self.filename)196 f = open(self.filename) 197 197 except: 198 198 log.err() 199 199 raise error.UnauthorizedLogin() -
twisted/test/test_newcred.py
177 177 ('user3', 'pass3'), 178 178 ] 179 179 180 181 def testUserLookup(self): 180 def test_userLookup(self): 182 181 dbfile = self.mktemp() 183 182 db = checkers.FilePasswordDB(dbfile) 184 f = file(dbfile, 'w') 185 for (u, p) in self.users: 186 f.write('%s:%s\n' % (u, p)) 187 f.close() 183 with open(dbfile, 'w') as f: 184 for (u, p) in self.users: 185 f.write('%s:%s\n' % (u, p)) 188 186 189 187 for (u, p) in self.users: 190 188 self.failUnlessRaises(KeyError, db.getUser, u.upper()) 191 189 self.assertEqual(db.getUser(u), (u, p)) 192 190 193 def testCaseInSensitivity(self): 191 192 def test_caseInSensitivity(self): 194 193 dbfile = self.mktemp() 195 194 db = checkers.FilePasswordDB(dbfile, caseSensitive=0) 196 f = file(dbfile, 'w') 197 for (u, p) in self.users: 198 f.write('%s:%s\n' % (u, p)) 199 f.close() 195 with open(dbfile, 'w') as f: 196 for (u, p) in self.users: 197 f.write('%s:%s\n' % (u, p)) 200 198 201 199 for (u, p) in self.users: 202 200 self.assertEqual(db.getUser(u.upper()), (u, p)) 203 201 204 def testRequestAvatarId(self): 202 203 def test_requestAvatarId(self): 205 204 dbfile = self.mktemp() 206 205 db = checkers.FilePasswordDB(dbfile, caseSensitive=0) 207 f = file(dbfile, 'w')208 for (u, p) in self.users:209 f.write('%s:%s\n' % (u, p))210 f.close() 206 with open(dbfile, 'w') as f: 207 for (u, p) in self.users: 208 f.write('%s:%s\n' % (u, p)) 209 211 210 creds = [credentials.UsernamePassword(u, p) for u, p in self.users] 212 211 d = defer.gatherResults( 213 212 [defer.maybeDeferred(db.requestAvatarId, c) for c in creds]) 214 213 d.addCallback(self.assertEqual, [u for u, p in self.users]) 215 214 return d 216 215 217 def testRequestAvatarId_hashed(self): 216 217 def test_requestAvatarId_hashed(self): 218 218 dbfile = self.mktemp() 219 219 db = checkers.FilePasswordDB(dbfile, caseSensitive=0) 220 f = file(dbfile, 'w')221 for (u, p) in self.users:222 f.write('%s:%s\n' % (u, p))223 f.close() 220 with open(dbfile, 'w') as f: 221 for (u, p) in self.users: 222 f.write('%s:%s\n' % (u, p)) 223 224 224 creds = [credentials.UsernameHashedPassword(u, p) for u, p in self.users] 225 225 d = defer.gatherResults( 226 226 [defer.maybeDeferred(db.requestAvatarId, c) for c in creds]) … … 240 240 def hash(self, u, p, s): 241 241 return crypt(p, s) 242 242 243 243 244 def setUp(self): 244 245 dbfile = self.mktemp() 245 246 self.db = checkers.FilePasswordDB(dbfile, hash=self.hash) 246 f = file(dbfile, 'w') 247 for (u, p) in self.users: 248 f.write('%s:%s\n' % (u, crypt(p, u[:2]))) 249 f.close() 247 with open(dbfile, 'w') as f: 248 for (u, p) in self.users: 249 f.write('%s:%s\n' % (u, crypt(p, u[:2]))) 250 250 r = TestRealm() 251 251 self.port = portal.Portal(r) 252 252 self.port.registerChecker(self.db) 253 253 254 def testGoodCredentials(self): 254 255 def test_goodCredentials(self): 255 256 goodCreds = [credentials.UsernamePassword(u, p) for u, p in self.users] 256 257 d = defer.gatherResults([self.db.requestAvatarId(c) for c in goodCreds]) 257 258 d.addCallback(self.assertEqual, [u for u, p in self.users]) 258 259 return d 259 260 260 def testGoodCredentials_login(self): 261 262 def test_goodCredentials_login(self): 261 263 goodCreds = [credentials.UsernamePassword(u, p) for u, p in self.users] 262 264 d = defer.gatherResults([self.port.login(c, None, ITestable) 263 265 for c in goodCreds]) … … 265 267 d.addCallback(self.assertEqual, [u for u, p in self.users]) 266 268 return d 267 269 268 def testBadCredentials(self): 270 271 def test_badCredentials(self): 269 272 badCreds = [credentials.UsernamePassword(u, 'wrong password') 270 273 for u, p in self.users] 271 274 d = defer.DeferredList([self.port.login(c, None, ITestable) … … 273 276 d.addCallback(self._assertFailures, error.UnauthorizedLogin) 274 277 return d 275 278 276 def testHashedCredentials(self): 279 280 def test_hashedCredentials(self): 277 281 hashedCreds = [credentials.UsernameHashedPassword(u, crypt(p, u[:2])) 278 282 for u, p in self.users] 279 283 d = defer.DeferredList([self.port.login(c, None, ITestable) … … 281 285 d.addCallback(self._assertFailures, error.UnhandledCredentials) 282 286 return d 283 287 288 284 289 def _assertFailures(self, failures, *expectedFailures): 285 290 for flag, failure in failures: 286 291 self.assertEqual(flag, defer.FAILURE) … … 290 295 if crypt is None: 291 296 skip = "crypt module not available" 292 297 298 299 293 300 class PluggableAuthenticationModulesTest(unittest.TestCase): 294 301 295 302 def setUp(self): … … 362 369 if not pamauth: 363 370 skip = "Can't run without PyPAM" 364 371 372 373 365 374 class CheckersMixin: 366 375 def testPositive(self): 367 376 for chk in self.getCheckers(): … … 379 388 self.assertRaises(error.UnauthorizedLogin, r.getResult) 380 389 testNegative = dG(testNegative) 381 390 391 392 382 393 class HashlessFilePasswordDBMixin: 383 394 credClass = credentials.UsernamePassword 384 395 diskHash = None … … 389 400 ('user2', 'password2'), 390 401 ('user3', 'password3')] 391 402 403 392 404 def getGoodCredentials(self): 393 405 for u, p in self._validCredentials: 394 406 yield self.credClass(u, self.networkHash(p)), u 395 407 408 396 409 def getBadCredentials(self): 397 410 for u, p in [('user1', 'password3'), 398 411 ('user2', 'password1'), 399 412 ('bloof', 'blarf')]: 400 413 yield self.credClass(u, self.networkHash(p)) 401 414 415 402 416 def getCheckers(self): 403 417 diskHash = self.diskHash or (lambda x: x) 404 418 hashCheck = self.diskHash and (lambda username, password, stored: self.diskHash(password)) 405 419 406 420 for cache in True, False: 407 421 fn = self.mktemp() 408 fObj = file(fn, 'w') 409 for u, p in self._validCredentials: 410 fObj.write('%s:%s\n' % (u, diskHash(p))) 411 fObj.close() 422 with open(fn, 'w') as fObj: 423 for u, p in self._validCredentials: 424 fObj.write('%s:%s\n' % (u, diskHash(p))) 412 425 yield checkers.FilePasswordDB(fn, cache=cache, hash=hashCheck) 413 426 414 427 fn = self.mktemp() 415 fObj = file(fn, 'w') 416 for u, p in self._validCredentials: 417 fObj.write('%s dingle dongle %s\n' % (diskHash(p), u)) 418 fObj.close() 428 with open(fn, 'w') as fObj: 429 for u, p in self._validCredentials: 430 fObj.write('%s dingle dongle %s\n' % (diskHash(p), u)) 419 431 yield checkers.FilePasswordDB(fn, ' ', 3, 0, cache=cache, hash=hashCheck) 420 432 421 433 fn = self.mktemp() 422 fObj = file(fn, 'w') 423 for u, p in self._validCredentials: 424 fObj.write('zip,zap,%s,zup,%s\n' % (u.title(), diskHash(p))) 425 fObj.close() 434 with open(fn, 'w') as fObj: 435 for u, p in self._validCredentials: 436 fObj.write('zip,zap,%s,zup,%s\n' % (u.title(), diskHash(p))) 426 437 yield checkers.FilePasswordDB(fn, ',', 2, 4, False, cache=cache, hash=hashCheck) 427 438 439 440 428 441 class LocallyHashedFilePasswordDBMixin(HashlessFilePasswordDBMixin): 429 442 diskHash = staticmethod(lambda x: x.encode('hex')) 430 443
