false /* require_smbconf */);
if (!ok) {
DBG_ERR("Failed to init cmdline parser!\n");
- TALLOC_FREE(ctx);
- exit(1);
+ rc = 1;
+ goto done;
}
pc = samba_popt_get_context(getprogname(),
if (pc == NULL) {
DBG_ERR("Failed to setup popt context!\n");
TALLOC_FREE(ctx);
- exit(1);
+ rc = 1;
+ goto done;
}
poptSetOtherOptionHelp(pc, "[OPTIONS] service <password>");
* to port 139 instead of port 445. srl,crh
*/
name_type = 0x03;
- desthost = strdup(poptGetOptArg(pc));
+ desthost = talloc_strdup(mem_ctx, poptGetOptArg(pc));
if( 0 == port ) port = 139;
message = true;
break;
dest_ip = poptGetOptArg(pc);
break;
case 'L':
- query_host = strdup(poptGetOptArg(pc));
+ query_host = talloc_strdup(mem_ctx, poptGetOptArg(pc));
break;
case 'D':
- base_directory = strdup(poptGetOptArg(pc));
+ base_directory = talloc_strdup(mem_ctx, poptGetOptArg(pc));
break;
case 'b':
ctx->io_bufsize = MAX(1, atoi(poptGetOptArg(pc)));
fprintf(stderr, "\nInvalid option %s: %s\n\n",
poptBadOption(pc, 0), poptStrerror(opt));
poptPrintUsage(pc, stderr, 0);
- exit(1);
+ rc = 1;
+ goto done;
}
}
gensec_init();
if(poptPeekArg(pc)) {
- char *s = strdup(poptGetArg(pc));
+ char *s = talloc_strdup(mem_ctx, poptGetArg(pc));
/* Convert any '/' characters in the service name to '\' characters */
string_replace(s, '/','\\');
if (count_chars(s,'\\') < 3) {
d_printf("\n%s: Not enough '\\' characters in service\n",s);
poptPrintUsage(pc, stderr, 0);
- exit(1);
+ rc = 1;
+ goto done;
}
}
if (!query_host && !service && !message) {
poptPrintUsage(pc, stderr, 0);
- exit(1);
+ rc = 1;
+ goto done;
}
poptFreeContext(pc);
if (query_host) {
rc = do_host_query(lp_ctx, ev_ctx, query_host,
lpcfg_workgroup(lp_ctx));
- return rc;
+ goto done;
}
if (message) {
lpcfg_resolve_context(lp_ctx),
&smb_options,
lpcfg_socket_options(lp_ctx));
- return rc;
+ goto done;
}
if (!do_connect(ctx, ev_ctx, lpcfg_resolve_context(lp_ctx),
creds,
&smb_options, &smb_session_options,
lpcfg_gensec_settings(ctx, lp_ctx)))
- return 1;
+ {
+ rc = 1;
+ goto done;
+ }
if (base_directory) {
do_cd(ctx, base_directory);
- free(base_directory);
}
if (cmdstr) {
rc = process_stdin(ctx);
}
- free(desthost);
+done:
talloc_free(mem_ctx);
return rc;