From 452e50919efcd5d92df2bfad48ef106cd75ebad9 Mon Sep 17 00:00:00 2001 From: Giampaolo Lauria Date: Mon, 18 Jul 2011 16:48:03 -0400 Subject: samba-tool: Fixed bugs to determine min and max # of allowed arguments Fixed the bugs in the code to determine both the min and the max # of allowed arguments Changed the argument suffix convention from "*" to "+" to represent one or more arguments as: 1. It follows the Regular expression convention ("*" means 0 or more) 2. It is what was missing in terms of functionality NB Currently, no command is using the "*/+", but it is a good thing to have to help out the validation of the args if/when in the future we have such need Signed-off-by: Andrew Tridgell --- source4/scripting/python/samba/netcmd/__init__.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'source4') diff --git a/source4/scripting/python/samba/netcmd/__init__.py b/source4/scripting/python/samba/netcmd/__init__.py index 05ed321ef9..e7ec1f7836 100644 --- a/source4/scripting/python/samba/netcmd/__init__.py +++ b/source4/scripting/python/samba/netcmd/__init__.py @@ -124,17 +124,24 @@ class Command(object): if option.dest is not None: del kwargs[option.dest] kwargs.update(optiongroups) + + # Check for a min a max number of allowed arguments, whenever possible + # The suffix "?" means zero or one occurence + # The suffix "+" means at least one occurence min_args = 0 max_args = 0 + undetermined_max_args = False for i, arg in enumerate(self.takes_args): - if arg[-1] not in ("?", "*"): - min_args += 1 - max_args += 1 - if arg[-1] == "*": - max_args = -1 - if len(args) < min_args or (max_args != -1 and len(args) > max_args): - self.usage(*args) + if arg[-1] != "?": + min_args += 1 + if arg[-1] == "+": + undetermined_max_args = True + else: + max_args += 1 + if (len(args) < min_args) or (undetermined_max_args == False and len(args) > max_args): + parser.print_usage() return -1 + try: return self.run(*args, **kwargs) except Exception, e: -- cgit