This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*****************************************************/
/*****************************************************/
#include "includes.h"
+#include "utils/net/net.h"
+#include "lib/cmdline/popt_common.h"
+#include "lib/ldb/include/ldb.h"
+#include "librpc/rpc/dcerpc.h"
+#include "param/param.h"
+#include "lib/events/events.h"
+#include "auth/credentials/credentials.h"
/*
run a function from a function table. If not found then
{
int i;
- if (argc < 1) {
- d_printf("Usage: \n");
+ if (argc == 0) {
return usage_fn(ctx, argc, argv);
+
+ } else if (argc == 1 && strequal(argv[0], "help")) {
+ return net_help(ctx, functable);
}
for (i=0; functable[i].name; i++) {
- if (StrCaseCmp(argv[0], functable[i].name) == 0)
+ if (strcasecmp_m(argv[0], functable[i].name) == 0)
return functable[i].fn(ctx, argc-1, argv+1);
}
{
int i;
- if (argc < 1) {
- d_printf("net_run_usage: TODO (argc < 1)\n");
- return 1;
- }
-
for (i=0; functable[i].name; i++) {
- if (StrCaseCmp(argv[0], functable[i].name) == 0)
+ if (strcasecmp_m(argv[0], functable[i].name) == 0)
if (functable[i].usage) {
return functable[i].usage(ctx, argc-1, argv+1);
}
}
- d_printf("No usage for command: %s\n", argv[0]);
+ d_printf("No usage information for command: %s\n", argv[0]);
return 1;
}
-/*
- run a usage function from a function table. If not found then fail
-*/
-int net_run_help(struct net_context *ctx,
- int argc, const char **argv,
- const struct net_functable *functable)
-{
- int i;
- if (argc < 1) {
- d_printf("net_run_help: TODO (argc < 1)\n");
- return 1;
- }
+/* main function table */
+static const struct net_functable net_functable[] = {
+ {"password", "change password\n", net_password, net_password_usage},
+ {"time", "get remote server's time\n", net_time, net_time_usage},
+ {"join", "join a domain\n", net_join, net_join_usage},
+ {"samdump", "dump the sam of a domain\n", net_samdump, net_samdump_usage},
+ {"vampire", "join and syncronise an AD domain onto the local server\n", net_vampire, net_vampire_usage},
+ {"samsync", "synchronise into the local ldb the sam of an NT4 domain\n", net_samsync_ldb, net_samsync_ldb_usage},
+ {"user", "manage user accounts\n", net_user, net_user_usage},
+ {"machinepw", "Get a machine password out of our SAM", net_machinepw,
+ net_machinepw_usage},
+ {NULL, NULL, NULL, NULL}
+};
- for (i=0; functable[i].name; i++) {
- if (StrCaseCmp(argv[0], functable[i].name) == 0)
- if (functable[i].help) {
- return functable[i].help(ctx, argc-1, argv+1);
- }
+int net_help(struct net_context *ctx, const struct net_functable *ftable)
+{
+ int i = 0;
+ const char *name = ftable[i].name;
+ const char *desc = ftable[i].desc;
+
+ d_printf("Available commands:\n");
+ while (name && desc) {
+ d_printf("\t%s\t\t%s", name, desc);
+ name = ftable[++i].name;
+ desc = ftable[i].desc;
}
- d_printf("No help for command: %s\n", argv[0]);
-
- return 1;
-}
-
-static int net_help(struct net_context *ctx, int argc, const char **argv)
-{
- d_printf("net_help: TODO\n");
return 0;
}
-static int net_help_usage(struct net_context *ctx, int argc, const char **argv)
-{
- d_printf("net_help_usage: TODO\n");
- return 0;
-}
-
-/* main function table */
-static const struct net_functable const net_functable[] = {
- {"password", net_password, net_password_usage, net_password_help},
-
- {"help", net_help, net_help_usage, net_help},
- {NULL, NULL}
-};
-
static int net_usage(struct net_context *ctx, int argc, const char **argv)
{
- return net_run_usage(ctx, argc, argv, net_functable);
+ d_printf("Usage:\n");
+ d_printf("net <command> [options]\n");
+ return 0;
}
/****************************************************************************
int rc;
int argc_new;
const char **argv_new;
- TALLOC_CTX *mem_ctx;
- struct net_context *ctx;
+ struct tevent_context *ev;
+ struct net_context *ctx = NULL;
poptContext pc;
struct poptOption long_options[] = {
POPT_AUTOHELP
POPT_COMMON_CONNECTION
POPT_COMMON_CREDENTIALS
POPT_COMMON_VERSION
- POPT_TABLEEND
+ { NULL }
};
- setup_logging("net", DEBUG_STDOUT);
-
-#ifdef HAVE_SETBUFFER
- setbuffer(stdout, NULL, 0);
-#endif
-
- mem_ctx = talloc_init("net_context");
- ctx = talloc_p(mem_ctx, struct net_context);
- if (!ctx) {
- d_printf("talloc_init(net_context) failed\n");
- exit(1);
- }
-
- ZERO_STRUCTP(ctx);
- ctx->mem_ctx = mem_ctx;
+ setlinebuf(stdout);
pc = poptGetContext("net", argc, (const char **) argv, long_options,
- POPT_CONTEXT_KEEP_FIRST);
+ POPT_CONTEXT_KEEP_FIRST);
while((opt = poptGetNextOpt(pc)) != -1) {
switch (opt) {
default:
d_printf("Invalid option %s: %s\n",
poptBadOption(pc, 0), poptStrerror(opt));
- net_help(ctx, argc, argv);
+ net_usage(ctx, argc, argv);
exit(1);
}
}
- lp_load(dyn_CONFIGFILE,True,False,False);
- load_interfaces();
-
argv_new = (const char **)poptGetArgs(pc);
argc_new = argc;
}
if (argc_new < 2) {
- d_printf("Usage: TODO\n");
- return 1;
+ return net_usage(ctx, argc, argv);
+ }
+
+ dcerpc_init(cmdline_lp_ctx);
+
+ ev = s4_event_context_init(NULL);
+ if (!ev) {
+ d_printf("Failed to create an event context\n");
+ exit(1);
}
+ ctx = talloc(ev, struct net_context);
+ if (!ctx) {
+ d_printf("Failed to talloc a net_context\n");
+ exit(1);
+ }
+
+ ZERO_STRUCTP(ctx);
+ ctx->lp_ctx = cmdline_lp_ctx;
+ ctx->credentials = cmdline_credentials;
+ ctx->event_ctx = ev;
rc = net_run_function(ctx, argc_new-1, argv_new+1, net_functable, net_usage);
DEBUG(0,("return code = %d\n", rc));
}
- talloc_destroy(mem_ctx);
+ talloc_free(ev);
return rc;
}