diff options
Diffstat (limited to 'source3/utils/net_util.c')
-rw-r--r-- | source3/utils/net_util.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/source3/utils/net_util.c b/source3/utils/net_util.c index 771c7e4f46..20f004b790 100644 --- a/source3/utils/net_util.c +++ b/source3/utils/net_util.c @@ -546,3 +546,49 @@ const char *net_prompt_pass(struct net_context *c, const char *user) return pass; } +/* + run a function from a function table. If not found then + call the specified usage function +*/ +int net_run_function(struct net_context *c, int argc, const char **argv, + struct functable *table, + int (*usage_fn)(struct net_context *c, + int argc, const char **argv)) +{ + int i; + + if (argc < 1) { + d_printf("\nUsage: \n"); + return usage_fn(c, argc, argv); + } + for (i=0; table[i].funcname; i++) { + if (StrCaseCmp(argv[0], table[i].funcname) == 0) + return table[i].fn(c, argc-1, argv+1); + } + d_fprintf(stderr, "No command: %s\n", argv[0]); + return usage_fn(c, argc, argv); +} + +/* + * run a function from a function table. + */ +int net_run_function2(struct net_context *c, int argc, const char **argv, + const char *whoami, struct functable2 *table) +{ + int i; + + if (argc != 0) { + for (i=0; table[i].funcname; i++) { + if (StrCaseCmp(argv[0], table[i].funcname) == 0) + return table[i].fn(c, argc-1, argv+1); + } + } + + for (i=0; table[i].funcname != NULL; i++) { + d_printf("%s %-15s %s\n", whoami, table[i].funcname, + table[i].helptext); + } + + return -1; +} + |