Copyright (C) Simo Sorce 2002
Copyright (C) Eric Lorimer 2002
- Copyright (C) Jelmer Vernooij 2002
+ Copyright (C) Jelmer Vernooij 2002,2003
Most of this code was ripped off of rpcclient.
Copyright (C) Tim Potter 2000-2001
struct cmd_set *cmd_set;
} *cmd_list;
-TALLOC_CTX *global_ctx;
-
extern pstring user_socket_options;
/****************************************************************************
if (!commands)
return NULL;
- matches = (char **)malloc(sizeof(matches[0])*MAX_COMPLETIONS);
+ matches = SMB_MALLOC_ARRAY(char *, MAX_COMPLETIONS);
if (!matches) return NULL;
- matches[count++] = strdup(text);
+ matches[count++] = SMB_STRDUP(text);
if (!matches[0]) return NULL;
while (commands && count < MAX_COMPLETIONS-1)
if ((strncmp(text, commands->cmd_set[i].name, strlen(text)) == 0) &&
commands->cmd_set[i].fn)
{
- matches[count] = strdup(commands->cmd_set[i].name);
+ matches[count] = SMB_STRDUP(commands->cmd_set[i].name);
if (!matches[count])
return NULL;
count++;
if (count == 2) {
SAFE_FREE(matches[0]);
- matches[0] = strdup(matches[1]);
+ matches[0] = SMB_STRDUP(matches[1]);
}
matches[count] = NULL;
return matches;
/* Load specified configuration file */
static NTSTATUS cmd_conf(struct vfs_state *vfs, TALLOC_CTX *mem_ctx,
- int argc, char **argv)
+ int argc, const char **argv)
{
if (argc != 2) {
printf("Usage: %s <smb.conf>\n", argv[0]);
/* Display help on commands */
static NTSTATUS cmd_help(struct vfs_state *vfs, TALLOC_CTX *mem_ctx,
- int argc, char **argv)
+ int argc, const char **argv)
{
struct cmd_list *tmp;
struct cmd_set *tmp_set;
}
/* Change the debug level */
-static NTSTATUS cmd_debuglevel(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv)
+static NTSTATUS cmd_debuglevel(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, const char **argv)
{
if (argc > 2) {
printf("Usage: %s [debuglevel]\n", argv[0]);
return NT_STATUS_OK;
}
-static NTSTATUS cmd_freemem(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv)
+static NTSTATUS cmd_freemem(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, const char **argv)
{
/* Cleanup */
- talloc_destroy(global_ctx);
- global_ctx = NULL;
+ talloc_destroy(mem_ctx);
+ mem_ctx = NULL;
vfs->data = NULL;
vfs->data_size = 0;
return NT_STATUS_OK;
}
-static NTSTATUS cmd_quit(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv)
+static NTSTATUS cmd_quit(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, const char **argv)
{
/* Cleanup */
- talloc_destroy(global_ctx);
+ talloc_destroy(mem_ctx);
exit(0);
return NT_STATUS_OK; /* NOTREACHED */
{
struct cmd_list *entry;
- if (!(entry = (struct cmd_list *)malloc(sizeof(struct cmd_list)))) {
+ if (!(entry = SMB_MALLOC_P(struct cmd_list))) {
DEBUG(0, ("out of memory\n"));
return;
}
static NTSTATUS do_cmd(struct vfs_state *vfs, struct cmd_set *cmd_entry, char *cmd)
{
- char *p = cmd, **argv = NULL;
+ const char *p = cmd;
+ char **argv = NULL;
NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
pstring buf;
+ TALLOC_CTX *mem_ctx = NULL;
int argc = 0, i;
/* Count number of arguments first time through the loop then
again:
while(next_token(&p, buf, " ", sizeof(buf))) {
if (argv) {
- argv[argc] = strdup(buf);
+ argv[argc] = SMB_STRDUP(buf);
}
argc++;
/* Create argument list */
- argv = (char **)malloc(sizeof(char *) * argc);
+ argv = SMB_MALLOC_ARRAY(char *, argc);
memset(argv, 0, sizeof(char *) * argc);
if (!argv) {
if (cmd_entry->fn) {
- if (global_ctx == NULL) {
+ if (mem_ctx == NULL) {
/* Create mem_ctx */
- if (!(global_ctx = talloc_init())) {
+ if (!(mem_ctx = talloc_init("do_cmd"))) {
DEBUG(0, ("talloc_init() failed\n"));
goto done;
}
}
/* Run command */
- result = cmd_entry->fn(vfs, global_ctx, argc, argv);
+ result = cmd_entry->fn(vfs, mem_ctx, argc, (const char **)argv);
} else {
fprintf (stderr, "Invalid command\n");
struct cmd_list *temp_list;
BOOL found = False;
pstring buf;
- char *p = cmd;
+ const char *p = cmd;
NTSTATUS result = NT_STATUS_OK;
int len = 0;
}
}
-void exit_server(char *reason)
+void exit_server(const char *reason)
{
DEBUG(3,("Server exit (%s)\n", (reason ? reason : "")));
exit(0);
return server_fd;
}
+void reload_printers(void)
+{
+ return;
+}
+
/****************************************************************************
Reload the services file.
**************************************************************************/
ret = lp_load(dyn_CONFIGFILE, False, False, True);
- load_printers();
-
/* perhaps the config filename is now set */
if (!test)
reload_services(True);
reset_stat_cache();
/* this forces service parameters to be flushed */
- set_current_service(NULL,True);
+ set_current_service(NULL,0,True);
return (ret);
}
-/* Print usage information */
-static void usage(void)
-{
- printf("Usage: vfstest [options]\n");
-
- printf("\t-c or --command \"command string\" execute semicolon separated cmds\n");
- printf("\t-f or --file filename execute a set of operations as described in the file\n");
- printf("\t-d or --debug debuglevel set the debuglevel\n");
- printf("\t-l or --logfile logfile logfile to use instead of stdout\n");
- printf("\t-h or --help Print this help message.\n");
- printf("\n");
-}
-
/* Main function */
int main(int argc, char *argv[])
{
- BOOL interactive = True;
- int opt;
- static char *cmdstr = "";
- static char *opt_logfile=NULL;
- static int opt_debuglevel;
- pstring logfile;
+ static char *cmdstr = NULL;
struct cmd_set **cmd_set;
- extern BOOL AllowDebugChange;
static struct vfs_state vfs;
int i;
- static char *filename = "";
+ static char *filename = NULL;
/* make sure the vars that get altered (4th field) are in
a fixed location or certain compilers complain */
poptContext pc;
struct poptOption long_options[] = {
- {"file", 'f', POPT_ARG_STRING, &filename},
- {"debug", 'd', POPT_ARG_INT, &opt_debuglevel, 'd'},
- {"debuglevel", 'd', POPT_ARG_INT, &opt_debuglevel, 'd'},
- {"command", 'c', POPT_ARG_STRING, &cmdstr},
- {"logfile", 'l', POPT_ARG_STRING, &opt_logfile, 'l'},
- {"help", 'h', POPT_ARG_NONE, 0, 'h'},
- { 0, 0, 0, 0}
+ POPT_AUTOHELP
+ {"file", 'f', POPT_ARG_STRING, &filename, 0, },
+ {"command", 'c', POPT_ARG_STRING, &cmdstr, 0, "Execute specified list of commands" },
+ POPT_COMMON_SAMBA
+ POPT_TABLEEND
};
setlinebuf(stdout);
- DEBUGLEVEL = 1;
- AllowDebugChange = False;
-
pc = poptGetContext("vfstest", argc, (const char **) argv,
long_options, 0);
- while((opt = poptGetNextOpt(pc)) != -1) {
- switch (opt) {
- case 'l':
- slprintf(logfile, sizeof(logfile) - 1, "%s.client",
- opt_logfile);
- lp_set_logfile(logfile);
- interactive = False;
- break;
-
- case 'd':
- DEBUGLEVEL = opt_debuglevel;
- break;
-
- case 'h':
- default:
- usage();
- exit(1);
- }
- }
+ while(poptGetNextOpt(pc) != -1);
poptFreeContext(pc);
/* the following functions are part of the Samba debugging
facilities. See lib/debug.c */
- setup_logging("vfstest", interactive);
- if (!interactive)
- reopen_logs();
+ setup_logging("vfstest", True);
/* Load command lists */
}
/* some basic initialization stuff */
- vfs.conn = (struct connection_struct *)malloc(sizeof(struct connection_struct));
- vfs.conn->user = "vfstest";
+ sec_init();
+ conn_init();
+ vfs.conn = conn_new();
+ string_set(&vfs.conn->user,"vfstest");
for (i=0; i < 1024; i++)
vfs.files[i] = NULL;
smbd_vfs_init(vfs.conn);
/* Do we have a file input? */
- if (filename[0]) {
+ if (filename && filename[0]) {
process_file(&vfs, filename);
return 0;
}
/* Do anything specified with -c */
- if (cmdstr[0]) {
+ if (cmdstr && cmdstr[0]) {
char *cmd;
char *p = cmdstr;