@@ -193,32 +193,42 @@ class X509Authenticator(NoAuthenticator):
defauthorize(self,env,client,method,event,args):
logging.debug("authorize: Client: "+str(client))
# Authorize for debug
if (method=='getDebug'):
returnclientifclient[0]['debug']==1elseNone
cl=None
identity=event['Node'][0]['Name']
test='Test'inevent['Category']
logging.debug("Event identity: "+identity)
ifnotclient["debug"]:
logging.info("Auth failed: client does not have debug enabled")
returnNone
returnclient
forclxinclient:
ifclx['identity']==identity:
cl=clx
break
try:
identity=event['Node'][0]['Name'].lower()
exceptKeyError:
# Event does not bear valid Node attribute
logging.info("Auth failed: event does not bear valid Node attribute")
returnNone
ifclisNone:
try:
service=client["services"][identity]
exceptKeyError:
# We are unable to pair service in message to service in db
logging.info("Auth failed: '%s' from event not found in services for client %i"%(identity,client["id"]))
returnNone
client["service"]=service
# Authorize for sending events
if ((method=='sendEvents'andcl['write']==1)or
(method=='sendEvents'andcl['test']==1andtest)):
returncl
returnNone
if (method=="sendEvents"):
ifnot(service["write"]orservice["test"]):
logging.info("Auth failed: service %i (%s) is not allowed to write or test"%(service["service_id"],identity))
returnNone
test='Test'inevent.get('Category',[])
ifnottest:
logging.info("Auth failed: service %i (%s) does not send Test category in event"%(service["service_id"],identity))
returnNone
returnclient
classNoValidator(Object):
...
...
@@ -280,10 +290,26 @@ class MySQL(Object):
defget_client_by_name(self,name):
format_strings=','.join(['%s']*len(name))
self.crs.execute("SELECT cl.`id`, cl.`hostname`, s.`service`, s.`service_id`, s.`identity`, cl.`read`, s.`write`, s.`test`, cl.`debug` FROM `clients` cl LEFT JOIN `services` s ON cl.`id` = s.`client_id` WHERE cl.`valid` = 1 AND s.`valid` = 1 AND `hostname` IN (%s)"%format_strings,tuple(name))