diff --git a/warden3/warden_server/warden_server.py b/warden3/warden_server/warden_server.py index 898b27ffaf4ba8888a2b260641dc88edb0a2fbdc..1ebfd5ccbdeb2a8d635f75ef9740375da1396aa0 100755 --- a/warden3/warden_server/warden_server.py +++ b/warden3/warden_server/warden_server.py @@ -208,9 +208,8 @@ def SysLogger(req, socket="/dev/log", facility=logging.handlers.SysLogHandler.LO Client = namedtuple("Client", - ["id", "registered", "requestor", "hostname", "name", "note", - "valid", "secret", "read", "debug", "write", "test"]) - + ["id", "registered", "requestor", "hostname", "name", + "secret", "valid", "read", "debug", "write", "test", "note"]) class Object(object): @@ -522,7 +521,7 @@ class MySQL(ObjectReq): def get_client_by_name(self, cert_names, name=None, secret=None): - query = ["SELECT id, registered, requestor, hostname, note, valid, name, secret, `read`, debug, `write`, test FROM clients WHERE valid = 1"] + query = ["SELECT * FROM clients WHERE valid = 1"] params = [] if name: query.append(" AND name = %s") @@ -543,7 +542,7 @@ class MySQL(ObjectReq): def get_clients(self, id=None): - query = ["SELECT id, registered, requestor, hostname, note, valid, name, secret, `read`, debug, `write`, test FROM clients"] + query = ["SELECT * FROM clients"] params = [] if id: query.append("WHERE id = %s") @@ -562,12 +561,9 @@ class MySQL(ObjectReq): uquery.append("registered = now()") else: query.append("UPDATE clients SET") - for attr in ["name", "hostname", "requestor", "secret", "note", - "valid", "read", "write", "debug", "test"]: + for attr in set(Client._fields) - set(["id", "registered"]): val = kwargs.get(attr, None) if val is not None: - if attr in ["name", "hostname"]: - val = val.lower() uquery.append("`%s` = %%s" % attr) params.append(val) if not uquery: @@ -1307,28 +1303,24 @@ def check_config(): def list_clients(id=None): clients = server.handler.db.get_clients(id) - order = ["id", "registered", "requestor", "hostname", "name", - "secret", "valid", "read", "debug", "write", "test", "note"] - lines = [[str(getattr(client, col)) for col in order] for client in clients] - col_width = [max(len(val) for val in col) for col in zip(*(lines+[order]))] + lines = [[str(getattr(client, col)) for col in Client._fields] for client in clients] + col_width = [max(len(val) for val in col) for col in zip(*(lines+[Client._fields]))] divider = ["-" * l for l in col_width] - for line in [order, divider] + lines: + for line in [Client._fields, divider] + lines: print " ".join([val.ljust(width) for val, width in zip(line, col_width)]) -def register_client(name, hostname, requestor, secret, note, valid, read, write, debug, test): +def register_client(**kwargs): # argparse does _always_ return something, so we cannot rely on missing arguments - if valid is None: valid = 1 - if read is None: read = 1 - if write is None: write = 0 - if debug is None: debug = 0 - if test is None: test = 1 - modify_client(id=None, - name=name, hostname=hostname, requestor=requestor, secret=secret, - note=note, valid=valid, read=read, write=write, debug=debug, test=test) + if kwargs["valid"] is None: kwargs["valid"] = 1 + if kwargs["read"] is None: kwargs["read"] = 1 + if kwargs["write"] is None: kwargs["write"] = 0 + if kwargs["debug"] is None: kwargs["debug"] = 0 + if kwargs["test"] is None: kwargs["test"] = 1 + modify_client(id=None, **kwargs) -def modify_client(id, name, hostname, requestor, secret, note, valid, read, write, debug, test): +def modify_client(**kwargs): def isValidHostname(hostname): if len(hostname) > 255: @@ -1356,33 +1348,35 @@ def modify_client(id, name, hostname, requestor, secret, note, valid, read, writ return client and True or False - if name is not None and not isValidNSID(name): - print >>sys.stderr, "Invalid client name \"%s\"." % name + if kwargs["name"] is not None: + kwargs["name"] = kwargs["name"].lower() + if not isValidNSID(kwargs["name"]): + print >>sys.stderr, "Invalid client name \"%s\"." % kwargs["name"] + return 254 - if hostname is not None and not isValidHostname(hostname): - print >>sys.stderr, "Invalid hostname \"%s\"." % hostname - return 254 + if kwargs["hostname"] is not None: + kwargs["hostname"] = kwargs["hostname"].lower() + if not isValidHostname(kwargs["hostname"]): + print >>sys.stderr, "Invalid hostname \"%s\"." % kwargs["hostname"] + return 254 - if requestor is not None and not isValidEmail(requestor): - print >>sys.stderr, "Invalid requestor email \"%s\"." % requestor + if kwargs["requestor"] is not None and not isValidEmail(kwargs["requestor"]): + print >>sys.stderr, "Invalid requestor email \"%s\"." % kwargs["requestor"] return 254 - if id is not None and not isValidID(id): - print >>sys.stderr, "Invalid id \"%s\"." % id + if kwargs["id"] is not None and not isValidID(kwargs["id"]): + print >>sys.stderr, "Invalid id \"%s\"." % kwargs["id"] return 254 for c in server.handler.db.get_clients(): - if name is not None and name.lower()==c.name: + if kwargs["name"] is not None and kwargs["name"].lower()==c.name: print >>sys.stderr, "Clash with existing name: %s" % str(c) return 254 - if secret is not None and secret==c.secret: + if kwargs["secret"] is not None and kwargs["secret"]==c.secret: print >>sys.stderr, "Clash with existing secret: %s" % str(c) return 254 - newid = server.handler.db.add_modify_client( - id=id, name=name, hostname=hostname, - requestor=requestor, secret=secret, note=note, valid=valid, - read=read, write=write, debug=debug, test=test) + newid = server.handler.db.add_modify_client(**kwargs) list_clients(id=newid)