#define REGISTER 0
#endif
+extern pstring debugf;
extern pstring scope;
+extern pstring global_myname;
extern pstring user_socket_options;
-extern pstring debugf;
extern int DEBUGLEVEL;
static struct cli_state smbcli;
struct cli_state *smb_cli = &smbcli;
-FILE *out_hnd = stdout;
+FILE *out_hnd;
/****************************************************************************
initialise smb client structure
{
bzero(smb_cli, sizeof(smb_cli));
cli_initialise(smb_cli);
+ smb_cli->capabilities |= CAP_NT_SMBS | CAP_STATUS32;
}
/****************************************************************************
char *description;
} commands[] =
{
-#if 0
- {"ntlogin", cmd_netlogon_login_test, "<username> NT Domain login test"},
-#endif
- {"wksinfo", cmd_wks_query_info, "DCE/RPC - Workstation Query Info"},
-#if 0
- {"srvinfo", cmd_srv_query_info, "DCE/RPC - Server Query Info"},
- {"srvsessions",cmd_srv_enum_sess, "DCE/RPC - List sessions on a server"},
- {"srvshares", cmd_srv_enum_shares, "DCE/RPC - List shares on a server"},
- {"srvconnections",cmd_srv_enum_conn, "DCE/RPC - List connections on a server"},
- {"srvfiles", cmd_srv_enum_files, "DCE/RPC - List files on a server"},
-#endif
+ {"svcenum", cmd_svc_enum, "[-i] Lists Services Manager"},
+ {"regenum", cmd_reg_enum, "<keyname> Registry Enumeration (keys, values)"},
+ {"regdeletekey",cmd_reg_delete_key, "<keyname> Registry Key Delete"},
+ {"regcreatekey",cmd_reg_create_key, "<keyname> [keyclass] Registry Key Create"},
+ {"shutdown",cmd_reg_shutdown, "[-m message] [-t timeout] [-r or --reboot] Server Shutdown"},
+ {"regquerykey",cmd_reg_query_key, "<keyname> Registry Key Query"},
+ {"regdeleteval",cmd_reg_delete_val, "<valname> Registry Value Delete"},
+ {"regcreateval",cmd_reg_create_val, "<valname> <valtype> <value> Registry Key Create"},
+ {"reggetsec", cmd_reg_get_key_sec, "<keyname> Registry Key Security"},
+ {"regtestsec", cmd_reg_test_key_sec, "<keyname> Test Registry Key Security"},
+ {"ntlogin", cmd_netlogon_login_test, "[username] [password] NT Domain login test"},
+ {"wksinfo", cmd_wks_query_info, "Workstation Query Info"},
+ {"srvinfo", cmd_srv_query_info, "Server Query Info"},
+ {"srvsessions",cmd_srv_enum_sess, "List sessions on a server"},
+ {"srvshares", cmd_srv_enum_shares, "List shares on a server"},
+ {"srvconnections",cmd_srv_enum_conn, "List connections on a server"},
+ {"srvfiles", cmd_srv_enum_files, "List files on a server"},
{"lsaquery", cmd_lsa_query_info, "Query Info Policy (domain member or server)"},
+ {"lookupsids", cmd_lsa_lookup_sids, "Resolve names from SIDs"},
+ {"lookupnames",cmd_lsa_lookup_names, "Resolve SIDs from names"},
+ {"lookupdomain",cmd_sam_lookup_domain, "Obtain SID for a local domain"},
{"enumusers", cmd_sam_enum_users, "SAM User Database Query (experimental!)"},
+ {"addgroupmem",cmd_sam_add_groupmem,"<group rid> [member rid1] [member rid2] ... SAM Add Domain Group Member"},
+ {"addaliasmem",cmd_sam_add_aliasmem,"<alias rid> [member sid1] [member sid2] ... SAM Add Domain Alias Member"},
+ {"creategroup",cmd_sam_create_dom_group,"SAM Create Domain Group"},
+ {"createalias",cmd_sam_create_dom_alias,"SAM Create Domain Alias"},
+ {"delgroup", cmd_sam_delete_dom_group,"SAM Delete Domain Group"},
+ {"delalias", cmd_sam_delete_dom_alias,"SAM Delete Domain Alias"},
+ {"ntpass", cmd_sam_ntchange_pwd, "NT SAM Password Change"},
{"samuser", cmd_sam_query_user, "<username> SAM User Query (experimental!)"},
{"samtest", cmd_sam_test , "SAM User Encrypted RPC test (experimental!)"},
{"enumaliases",cmd_sam_enum_aliases, "SAM Aliases Database Query (experimental!)"},
-#if 0
{"enumgroups", cmd_sam_enum_groups, "SAM Group Database Query (experimental!)"},
-#endif
- {"samgroups", cmd_sam_query_groups, "SAM Group Database Query (experimental!)"},
+ {"samgroups", cmd_sam_query_dominfo, "SAM Query Domain Info(experimental!)"},
{"quit", cmd_quit, "logoff the server"},
{"q", cmd_quit, "logoff the server"},
{"exit", cmd_quit, "logoff the server"},
smb_mem_write_status(dbf);
smb_mem_write_errors(dbf);
smb_mem_write_verbose(dbf);
+ dbgflush();
}
#endif
exit(0);
static void wait_keyboard(struct cli_state *cli)
{
fd_set fds;
- int selrtn;
struct timeval timeout;
while (1)
timeout.tv_sec = 20;
timeout.tv_usec = 0;
- selrtn = sys_select(MAX(cli->fd,fileno(stdin))+1,&fds,&timeout);
+ sys_select(MAX(cli->fd,fileno(stdin))+1,&fds,&timeout);
if (FD_ISSET(fileno(stdin),&fds))
return;
****************************************************************************/
static BOOL process( struct client_info *info, char *cmd_str)
{
- extern FILE *dbf;
pstring line;
char *cmd = cmd_str;
****************************************************************************/
static void usage(char *pname)
{
- fprintf(out_hnd, "Usage: %s service <password> [-p port] [-d debuglevel] [-l log] ",
+ fprintf(out_hnd, "Usage: %s service <password> [-d debuglevel] [-l log] ",
pname);
fprintf(out_hnd, "\nVersion %s\n",VERSION);
- fprintf(out_hnd, "\t-p port connect to the specified port\n");
fprintf(out_hnd, "\t-d debuglevel set the debuglevel\n");
fprintf(out_hnd, "\t-l log basename. Basename for log/debug files\n");
fprintf(out_hnd, "\t-n netbios name. Use this name as my netbios name\n");
****************************************************************************/
int main(int argc,char *argv[])
{
- char *pname = argv[0];
- int port = SMB_PORT;
+ BOOL interactive = True;
+
int opt;
extern FILE *dbf;
extern char *optarg;
char *p;
BOOL got_pass = False;
char *cmd_str="";
- int myumask = 0755;
+ mode_t myumask = 0755;
enum client_action cli_action = CLIENT_NONE;
- int ret = 0;
struct client_info cli_info;
pstring password; /* local copy only, if one is entered */
- pstring tmp;
+
+ out_hnd = stdout;
+ fstrcpy(debugf, argv[0]);
rpcclient_init();
pstrcpy(cli_info.share, "");
pstrcpy(cli_info.service, "");
- pstrcpy(cli_info.dom.level3_sid, "");
- pstrcpy(cli_info.dom.level3_dom, "");
- pstrcpy(cli_info.dom.level5_sid, "");
- pstrcpy(cli_info.dom.level5_dom, "");
-
- smb_cli->nt_pipe_fnum = 0xffff;
-
- setup_logging(pname, True);
+ ZERO_STRUCT(cli_info.dom.level3_sid);
+ ZERO_STRUCT(cli_info.dom.level5_sid);
+ fstrcpy(cli_info.dom.level3_dom, "");
+ fstrcpy(cli_info.dom.level5_dom, "");
TimeInit();
charset_initialise();
myumask = umask(0);
umask(myumask);
+ if (!get_myname(global_myname, NULL))
+ {
+ fprintf(stderr, "Failed to get my hostname.\n");
+ }
+
if (getenv("USER"))
{
pstrcpy(smb_cli->user_name,getenv("USER"));
if (argc < 2)
{
- usage(pname);
+ usage(argv[0]);
exit(1);
}
argc--;
argv++;
- DEBUG(1,("service: %s\n", cli_info.service));
+ fprintf(out_hnd, "service: %s\n", cli_info.service);
if (count_chars(cli_info.service,'\\') < 3)
{
- usage(pname);
+ usage(argv[0]);
printf("\n%s: Not enough '\\' characters in service\n", cli_info.service);
exit(1);
}
cli_action = CLIENT_SVC;
}
- while ((opt = getopt(argc, argv,"s:B:O:M:S:i:N:d:Pp:l:hI:EB:U:L:t:m:W:T:D:c:")) != EOF)
+ while ((opt = getopt(argc, argv,"s:B:O:M:S:i:N:n:d:l:hI:EB:U:L:t:m:W:T:D:c:")) != EOF)
{
switch (opt)
{
case 'm':
{
- int max_protocol = interpret_protocol(optarg,max_protocol);
+ /* FIXME ... max_protocol seems to be funny here */
+
+ int max_protocol = 0;
+ max_protocol = interpret_protocol(optarg,max_protocol);
fprintf(stderr, "max protocol not currently supported\n");
break;
}
break;
}
+ case 'n':
+ {
+ fstrcpy(global_myname, optarg);
+ break;
+ }
+
case 'N':
{
got_pass = True;
case 'l':
{
slprintf(debugf, sizeof(debugf)-1,
- "%s.client",optarg);
- break;
- }
-
- case 'p':
- {
- port = atoi(optarg);
+ "%s.client", optarg);
+ interactive = False;
break;
}
case 'h':
{
- usage(pname);
+ usage(argv[0]);
exit(0);
break;
}
default:
{
- usage(pname);
+ usage(argv[0]);
exit(1);
break;
}
}
}
+ setup_logging(debugf, interactive);
+
if (cli_action == CLIENT_NONE)
{
- usage(pname);
+ usage(argv[0]);
exit(1);
}
- DEBUG(3,("%s client started (version %s)\n",timestring(),VERSION));
+ strupper(global_myname);
+ fstrcpy(cli_info.myhostname, global_myname);
- if (!get_myname(cli_info.myhostname, NULL))
- {
- fprintf(stderr, "Failed to get my hostname.\n");
- }
+ DEBUG(3,("%s client started (version %s)\n",timestring(),VERSION));
if (!lp_load(servicesf,True, False, False))
{
}
else
{
- pwd_make_lm_nt_16(&(smb_cli->pwd), password); /* generate 16 byte hashes */
+ /* generate 16 byte hashes */
+ pwd_make_lm_nt_16(&(smb_cli->pwd), password);
}
}
else
exit(-1);
}
- ret = 0;
-
switch (cli_action)
{
case CLIENT_IPC:
{
- ret = process(&cli_info, cmd_str) ? 0 : 1;
+ process(&cli_info, cmd_str);
break;
}
default:
{
fprintf(stderr, "unknown client action requested\n");
- ret = 1;
break;
}
}