def parseString(self, str): val = str.split() if len(val) == 3: # Output from an entitlement file, which still has a class import warnings warnings.warn( "\nExpected an entitlement line with no entitlement " "class.\nEntitlement classes will be ignored in the future.\n" "Please change the 'entitlement %s' config line to\n" "'entitlement %s %s'" % (str, val[0], val[2]), DeprecationWarning) return (val[0], (val[1], util.ProtectedString(val[2]))) elif len(val) != 2: raise ParseError("expected <hostglob> <entitlement>") return (val[0], (None, util.ProtectedString(val[1])))
def _filter_password(self, password): if self.user == password == 'anonymous': return password elif password is ValidPasswordToken: return password else: return util.ProtectedString(password)
def parseString(self, str): val = str.split() if len(val) < 2 or len(val) > 3: raise ParseError("expected <hostglob> <user> [<password>]") elif len(val) == 2: return (val[0], val[1], None) else: pw = (val[2] is not None and util.ProtectedString(val[2])) or None return (val[0], val[1], pw)
def testProtectedTemplate(self): t = util.ProtectedTemplate("$foo is the new $bar", foo='a', bar='b') self.assertEqual(t, "a is the new b") self.assertEqual(str(t), "a is the new b") self.assertEqual(t.__safe_str__(), "a is the new b") t = util.ProtectedTemplate("$foo is the new $bar", foo='a', bar=util.ProtectedString('b')) self.assertEqual(t, "a is the new b") self.assertEqual(str(t), "a is the new b") self.assertEqual(t.__safe_str__(), "a is the new <BAR>")
def testXMLRPCbinary(self): # CNY-1932 # Make sure we properly encode and decode XMLRPC Binary objects on the # fly marshaller = util.XMLRPCMarshaller("utf-8", allow_none=False) srcdata = "abc\x80" data = marshaller.dumps((srcdata, )) self.assertEqual( data, "<params>\n<param>\n<value><base64>\nYWJjgA==\n</base64></value>\n" "</param>\n</params>\n") data = util.xmlrpcDump((srcdata, ), methodresponse=True) self.assertEqual( data, "<?xml version='1.0'?>\n" "<methodResponse>\n" "<params>\n<param>\n<value><base64>\nYWJjgA==\n</base64></value>\n" "</param>\n</params>\n" "</methodResponse>\n") srcdata = ["abc\x80", util.ProtectedString("abc\x80")] data = util.xmlrpcDump((srcdata, ), methodresponse=True) sio = StringIO.StringIO(data) params, methodname = util.xmlrpcLoad(sio) self.assertEqual(params, (srcdata, )) self.assertEqual(methodname, None) # Produce a very large string representation srcdata = ["abc\x80"] * 4096 sio = util.BoundedStringIO() util.xmlrpcDump((srcdata, ), methodname="somemethod", stream=sio) sio.seek(0) params, methodname = util.xmlrpcLoad(sio) self.assertEqual(params, (srcdata, )) self.assertEqual(methodname, 'somemethod') sio.seek(0) params, methodname = util.xmlrpcLoad(sio.read()) self.assertEqual(params, (srcdata, )) self.assertEqual(methodname, 'somemethod') # Test a Fault too x = util.xmlrpclib.Fault(1001, "blah") repr1 = util.xmlrpclib.dumps(x) repr2 = util.xmlrpcDump(x) self.assertEqual(repr1, repr2) try: util.xmlrpcLoad(repr1) except util.xmlrpclib.Fault, x2: self.assertEqual(x.faultCode, x2.faultCode) self.assertEqual(x.faultString, x2.faultString)
def getAuth(req): if hasattr(req, 'headers_in'): # mod_python headers_in = req.headers_in remote_ip = req.connection.remote_ip else: # webob headers_in = req.headers remote_ip = req.remote_addr if not 'Authorization' in headers_in: authToken = ['anonymous', 'anonymous'] else: info = headers_in['Authorization'].split(' ', 1) if len(info) != 2 or info[0] != "Basic": return None try: authString = base64.decodestring(info[1]) except: return None authToken = authString.split(":", 1) if len(authToken) != 2: # No password authToken.append(util.ProtectedString('')) else: authToken[1] = util.ProtectedString(authToken[1]) try: entitlementList = parseEntitlement( headers_in.get('X-Conary-Entitlement', '')) except: return None authToken.append(entitlementList) authToken.append(remote_ip) return authToken
def __init__(self, uri, username=None, password=None, *args, **kwargs): xmlrpclib.ServerProxy.__init__(self, uri, *args, **kwargs) # Hide password userpass, hostport = urllib.splituser(self.__host) if userpass and not username: self.__host = hostport username, password = urllib.splitpasswd(userpass) if username: password = util.ProtectedString(urllib.quote(password)) self.__host = ProtectedTemplate('${user}:${password}@${host}', user=username, password=password, host=self.__host)
def addEntitlement(self, serverGlob, entitlement, entClass=None): self.append( (serverGlob, (entClass, util.ProtectedString(entitlement))))
def setPassword(self, passwd): passwd = util.ProtectedString(passwd) self.user = (self.user[0], passwd) self._externalPassword = True