summaryrefslogtreecommitdiffstats
path: root/source3/utils/net_util.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/utils/net_util.c')
-rw-r--r--source3/utils/net_util.c46
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;
+}
+