whoa. _major_ restructure of rpcclient. fixed some buuugs, created a few.
authorLuke Leighton <lkcl@samba.org>
Fri, 26 Nov 1999 23:04:19 +0000 (23:04 +0000)
committerLuke Leighton <lkcl@samba.org>
Fri, 26 Nov 1999 23:04:19 +0000 (23:04 +0000)
found out that getopt() _must_ have optind set to 0 before reuse.

still haven't decided what to do with the net* api yet...
(This used to be commit 29c480085e786905bfd92ea3cd93658f94e96e47)

15 files changed:
source3/client/client.c
source3/include/ntdomain.h
source3/include/proto.h
source3/include/rpcclient.h
source3/lib/util.c
source3/libsmb/namequery.c
source3/rpc_client/cli_atsvc.c
source3/rpc_client/cli_samr.c
source3/rpc_client/msrpc_samr.c
source3/rpcclient/cmd_atsvc.c
source3/rpcclient/cmd_reg.c
source3/rpcclient/cmd_samr.c
source3/rpcclient/cmd_svcctl.c
source3/rpcclient/display.c
source3/rpcclient/rpcclient.c

index 8d1e73c5c246229720fbb425e08035e391226882..e27e169405067f010cab43e43d5d336d10f939e7 100644 (file)
@@ -1846,8 +1846,8 @@ struct cli_state *do_connect(char *server, char *share, int smb_port)
        make_nmb_name(&called , server, name_type, "");
        make_nmb_name(&stupid_smbserver_called , "*SMBSERVER", 0x20, scope);
 
-       fstrcpy(smb_cli->user_name, username);
-       fstrcpy(smb_cli->domain, workgroup);
+       fstrcpy(smb_cli->usr.user_name, username);
+       fstrcpy(smb_cli->usr.domain, workgroup);
 
        ip = ipzero;
        if (have_ip) ip = dest_ip;
@@ -1862,17 +1862,17 @@ struct cli_state *do_connect(char *server, char *share, int smb_port)
        {
                if (password[0] == 0)
                {
-                       pwd_set_nullpwd(&(smb_cli->pwd));
+                       pwd_set_nullpwd(&(smb_cli->usr.pwd));
                }
                else
                {
                        /* generate 16 byte hashes */
-                       pwd_make_lm_nt_16(&(smb_cli->pwd), password);
+                       pwd_make_lm_nt_16(&(smb_cli->usr.pwd), password);
                }
        }
        else 
        {
-               pwd_read(&(smb_cli->pwd), "Password:", True);
+               pwd_read(&(smb_cli->usr.pwd), "Password:", True);
        }
 
        /* paranoia: destroy the local copy of the password */
index 67befd81dc4ce4f541f523e11bd9c227871da2a7..603dce0a17b17eb404a8e109d551555143bd6a3e 100644 (file)
@@ -183,6 +183,10 @@ struct acct_info
        void (*fn)(const char*, const DOM_SID*, uint32, const char*,\
                   uint32, const uint32*, char *const *const, uint32* const)
 
+#define DISP_FN(fn)\
+       void (*fn)(const char*, const DOM_SID*, uint16, uint32, \
+                  SAM_DISPINFO_CTR *)
+
 #define REG_FN(fn)\
        void (*fn)(int, const char *, int)
 #define REG_KEY_FN(fn)\
index cb61009a646ebabffd26a06dd4f47df5080424ad..ec340ec1d6442da7d93861f2d96b06c42705d619 100644 (file)
@@ -481,8 +481,6 @@ int set_maxfiles(int requested_max);
 void reg_get_subkey(char *full_keyname, char *key_name, char *subkey_name);
 BOOL reg_split_key(const char *full_keyname, uint32 *reg_type, char *key_name);
 BOOL become_user_permanently(uid_t uid, gid_t gid);
-BOOL resolve_srv_name(const char* srv_name, fstring dest_host,
-                               struct in_addr *ip);
 
 /*The following definitions come from  lib/util_array.c  */
 
@@ -805,6 +803,8 @@ FILE *startlmhosts(char *fname);
 BOOL getlmhostsent( FILE *fp, pstring name, int *name_type, struct in_addr *ipaddr);
 void endlmhosts(FILE *fp);
 BOOL resolve_name(const char *name, struct in_addr *return_ip, int name_type);
+BOOL resolve_srv_name(const char* srv_name, fstring dest_host,
+                               struct in_addr *ip);
 BOOL find_master_ip(char *group, struct in_addr *master_ip);
 
 /*The following definitions come from  libsmb/nmblib.c  */
@@ -1776,7 +1776,7 @@ BOOL at_del_job(struct cli_state *cli, uint16 fnum,
                char *server_name, uint32 min_jobid, uint32 max_jobid);
 BOOL at_enum_jobs(struct cli_state *cli, uint16 fnum, 
                  char *server_name, uint32 *num_jobs,
-                 AT_ENUM_INFO *jobs, fstring *commands);
+                 AT_ENUM_INFO *jobs, char ***commands);
 BOOL at_query_job(struct cli_state *cli, uint16 fnum, char *server_name,
                  uint32 jobid, AT_JOB_INFO *job, fstring command);
 
@@ -2293,6 +2293,11 @@ BOOL get_samr_query_aliasinfo(
 BOOL msrpc_sam_create_dom_user(const char* srv_name, DOM_SID *sid1,
                                char *acct_name, uint16 acb_info,
                                uint32 *rid);
+BOOL msrpc_sam_query_dispinfo(const char* srv_name, const char* domain,
+                               DOM_SID *sid1,
+                               uint16 switch_value,
+                               uint32 *num_entries, SAM_DISPINFO_CTR *ctr,
+                               DISP_FN(disp_fn));
 
 /*The following definitions come from  rpc_parse/parse_at.c  */
 
@@ -3769,7 +3774,8 @@ void display_query_svc_cfg(FILE *out_hnd, enum action_type action,
 void display_svc_info(FILE *out_hnd, enum action_type action,
                                const ENUM_SRVC_STATUS *const svc);
 void display_at_enum_info(FILE *out_hnd, enum action_type action, 
-                    uint32 num_jobs, const AT_ENUM_INFO *const jobs, const fstring *const commands);
+                               uint32 num_jobs, const AT_ENUM_INFO *const jobs,
+                               char *const *const commands);
 void display_at_job_info(FILE *out_hnd, enum action_type action, 
                     AT_JOB_INFO *const job, fstring command);
 void display_eventlog_eventrecord(FILE *out_hnd, enum action_type action, EVENTLOGRECORD *const ev);
@@ -3784,6 +3790,13 @@ void display_sam_unk_info_2(FILE *out_hnd, enum action_type action,
                                SAM_UNK_INFO_2 *const info2);
 void display_sam_unk_ctr(FILE *out_hnd, enum action_type action, 
                                uint32 switch_value, SAM_UNK_CTR *const ctr);
+void display_sam_info_1(FILE *out_hnd, enum action_type action, 
+               SAM_ENTRY1 *const e1, SAM_STR1 *const s1);
+void display_sam_info_1_ctr(FILE *out_hnd, enum action_type action, 
+                               uint32 count, SAM_DISPINFO_1 *const ctr);
+void display_sam_disp_info_ctr(FILE *out_hnd, enum action_type action, 
+                               uint16 level, uint32 count,
+                               SAM_DISPINFO_CTR *const ctr);
 void display_print_info_0(FILE *out_hnd, enum action_type action, 
                PRINTER_INFO_0 *const i0);
 void display_print_info_1(FILE *out_hnd, enum action_type action, 
index e843d5601034b886bd9f6abd22c91f3c92d1018e..ba284e66f0cd56e86911ced439554128e129355c 100644 (file)
@@ -76,34 +76,10 @@ struct client_info
 {
     struct in_addr dest_ip;
     fstring dest_host;
-    fstring query_host;
-    uint8 name_type;
 
     fstring myhostname;
     fstring mach_acct;
 
-    pstring cur_dir;
-    pstring base_dir;
-    pstring file_sel;
-
-    fstring service;
-    fstring share;
-    fstring svc_type;
-
-    time_t newer_than;
-    int archive_level;
-    int dir_total;
-    int put_total_time_ms;
-    int put_total_size;
-    int get_total_time_ms;
-    int get_total_size;
-    int print_mode;
-    BOOL translation;
-    BOOL recurse_dir;
-    BOOL prompt;
-    BOOL lowercase;
-    BOOL abort_mget;
-
     struct tar_client_info tar;
     struct nt_client_info dom;
 };
index cd6368ee77fb0bcd12746ad212fd70b263f3a424..26f0482162abc5bc12cd3bbce24f943e59ae191a 100644 (file)
@@ -3228,24 +3228,3 @@ BOOL become_user_permanently(uid_t uid, gid_t gid)
        return(True);
 }
 
-BOOL resolve_srv_name(const char* srv_name, fstring dest_host,
-                               struct in_addr *ip)
-{
-       DEBUG(10,("resolve_srv_name: %s\n", srv_name));
-
-       if (srv_name == NULL || strequal("\\\\.", srv_name))
-       {
-               fstrcpy(dest_host, global_myname);
-               ip = interpret_addr2("127.0.0.1");
-               return True;
-       }
-
-       if (!strnequal("\\\\", srv_name, 2))
-       {
-               return False;
-       }
-
-       fstrcpy(dest_host, &srv_name[2]);
-       return resolve_name(dest_host, ip, 0x20);
-}
-
index 149b977746c9ef130b40ec3b53208967f55e10e4..114f656d8cc709e999af2789eae2bec4aa78c145 100644 (file)
@@ -23,6 +23,7 @@
 #include "includes.h"
 
 extern pstring scope;
+extern pstring global_myname;
 extern int DEBUGLEVEL;
 
 /* nmbd.c sets this to True. */
@@ -646,7 +647,30 @@ BOOL resolve_name(const char *name, struct in_addr *return_ip, int name_type)
   return False;
 }
 
+/********************************************************
+ resolve a name of format \\server_name or \\ipaddress
+ into a name.  also, cut the \\ from the front for us.
+*********************************************************/
+BOOL resolve_srv_name(const char* srv_name, fstring dest_host,
+                               struct in_addr *ip)
+{
+       DEBUG(10,("resolve_srv_name: %s\n", srv_name));
 
+       if (srv_name == NULL || strequal("\\\\.", srv_name))
+       {
+               fstrcpy(dest_host, global_myname);
+               ip = interpret_addr2("127.0.0.1");
+               return True;
+       }
+
+       if (!strnequal("\\\\", srv_name, 2))
+       {
+               return False;
+       }
+
+       fstrcpy(dest_host, &srv_name[2]);
+       return resolve_name(dest_host, ip, 0x20);
+}
 
 /********************************************************
 find the IP address of the master browser or DMB for a workgroup
index bebc4d0bc76fe498faf02c371fe4f047ddaedd41..ba18a36313c0e0366c0a8cfbc9fefd239d7e0dda 100644 (file)
@@ -128,7 +128,7 @@ enumerate scheduled jobs
 ****************************************************************************/
 BOOL at_enum_jobs(struct cli_state *cli, uint16 fnum, 
                  char *server_name, uint32 *num_jobs,
-                 AT_ENUM_INFO *jobs, fstring *commands)
+                 AT_ENUM_INFO *jobs, char ***commands)
 {
        prs_struct rbuf;
        prs_struct buf; 
@@ -167,13 +167,18 @@ BOOL at_enum_jobs(struct cli_state *cli, uint16 fnum,
                {
                        int i;
 
-                       *num_jobs = r_e.num_entries;
+                       *num_jobs = 0;
                        memcpy(jobs, &r_e.info, r_e.num_entries * sizeof(AT_ENUM_INFO));
 
                        for (i = 0; i < r_e.num_entries; i++)
                        {
-                               unistr2_to_ascii(commands[i], &r_e.command[i],
-                                                sizeof(commands[i]));
+                               fstring cmd;
+                               unistr2_to_ascii(cmd, &r_e.command[i], sizeof(cmd));
+                               add_chars_to_array(num_jobs, commands, cmd);
+                       }
+                       if ((*num_jobs) != r_e.num_entries)
+                       {
+                               p = False;
                        }
                }
        }
index 44425b5358dfb56d803010d9cb1d27669f8f78b7..86f78d18168db85b2d41f844b4a1bec576f9bc32 100644 (file)
@@ -2444,6 +2444,7 @@ BOOL samr_query_dispinfo(  POLICY_HND *pol_domain, uint16 level,
                if (p && r_o.ptr_entries != 0)
                {
                        valid_query = True;
+                       (*num_entries) = r_o.num_entries;
                }
        }
 
index 8dd5201bb1ca39446e22a4b0f7ed1918623132bf..d72e57308cb5e687714fda10c96ce961d61bc3be 100644 (file)
@@ -1388,12 +1388,50 @@ BOOL msrpc_sam_create_dom_user(const char* srv_name, DOM_SID *sid1,
 
        if (res2)
        {
-               DEBUG(5,("cmd_sam_create_dom_user: succeeded\n"));
+               DEBUG(5,("msrpc_sam_create_dom_user: succeeded\n"));
        }
        else
        {
-               DEBUG(5,("cmd_sam_create_dom_user: failed\n"));
+               DEBUG(5,("msrpc_sam_create_dom_user: failed\n"));
        }
 
        return res2;
 }
+
+/****************************************************************************
+experimental SAM query display info.
+****************************************************************************/
+BOOL msrpc_sam_query_dispinfo(const char* srv_name, const char* domain,
+                               DOM_SID *sid1,
+                               uint16 switch_value,
+                               uint32 *num_entries, SAM_DISPINFO_CTR *ctr,
+                               DISP_FN(disp_fn))
+{
+       BOOL res = True;
+       BOOL res1 = True;
+       uint32 ace_perms = 0x304; /* absolutely no idea. */
+       POLICY_HND sam_pol;
+       POLICY_HND pol_dom;
+
+       /* establish a connection. */
+       res = res ? samr_connect( srv_name, 0x02000000, &sam_pol) : False;
+
+       /* connect to the domain */
+       res = res ? samr_open_domain( &sam_pol, ace_perms, sid1,
+                   &pol_dom) : False;
+
+       /* send a samr query_disp_info command */
+       res1 = res ? samr_query_dispinfo( &pol_dom, switch_value, 
+                   num_entries, ctr) : False;
+
+       res = res ? samr_close(&sam_pol) : False;
+       res = res ? samr_close(&pol_dom) : False;
+
+       if (res1 && disp_fn != NULL)
+       {
+               disp_fn(domain, sid1, switch_value, *num_entries, ctr);
+       }
+
+       return res1;
+}
+
index 5c5986eaa03fb214756a0093960e6c805ef8ce32..e07a89f4d995f77cc8c72129ce290a7db18f444d 100644 (file)
@@ -344,16 +344,18 @@ void cmd_at(struct client_info *info, int argc, char *argv[])
        else if (jobid == -1) /* enumerate */
        {
                AT_ENUM_INFO jobs[AT_MAX_JOBS];
-               fstring commands[AT_MAX_JOBS];
+               char **commands;
                uint32 num_jobs;
 
                if (at_enum_jobs(smb_cli, nt_pipe_fnum, dest_wks, &num_jobs,
-                            jobs, commands))
+                            jobs, &commands))
                {
                        display_at_enum_info(out_hnd, ACTION_HEADER   , num_jobs, jobs, commands);
                        display_at_enum_info(out_hnd, ACTION_ENUMERATE, num_jobs, jobs, commands);
                        display_at_enum_info(out_hnd, ACTION_FOOTER   , num_jobs, jobs, commands);
                }
+
+               free_char_array(num_jobs, commands);
        }
        else /* job info */
        {
index cae24faf9fb0a9c0318ed8d823cf92f3a2b33f1e..38c14ea96b1d396627355055770d5b522b1ff5b7 100644 (file)
@@ -294,13 +294,10 @@ void cmd_reg_enum(struct client_info *info, int argc, char *argv[])
 
        full_keyname = argv[1];
 
-       if (msrpc_reg_enum_key(srv_name, full_keyname,
+       (void)(msrpc_reg_enum_key(srv_name, full_keyname,
                                reg_display_key,
                                reg_display_key_info,
-                               reg_display_val_info))
-       {
-               pstrcpy(info->cur_dir, full_keyname);
-       }
+                               reg_display_val_info));
 }
 
 /****************************************************************************
@@ -1104,9 +1101,6 @@ void cmd_reg_shutdown(struct client_info *info, int argc, char *argv[])
        fstrcat(srv_name, info->dest_host);
        strupper(srv_name);
 
-       argc--;
-       argv++;
-
        while ((opt = getopt(argc, argv,"fim:t:r-")) != EOF)
        {
                switch (opt)
index cdb56e0a325829ba118d4e866c8589e5a5004ad3..fbfde7c9a4338b71a59df816931eee3a3051d2d1 100644 (file)
@@ -278,15 +278,13 @@ void cmd_sam_lookup_domain(struct client_info *info, int argc, char *argv[])
        report(out_hnd, "Lookup Domain in SAM Server\n");
 
        /* establish a connection. */
-       res = res ? samr_connect(
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_query_lookup_domain( 
-                   &sam_pol, domain, &dom_sid) : False;
+       res = res ? samr_query_lookup_domain( &sam_pol, domain, &dom_sid) : False;
 
-       res = res ? samr_close( &sam_pol) : False;
+       res = res ? samr_close(&sam_pol) : False;
 
        if (res)
        {
@@ -350,18 +348,15 @@ void cmd_sam_del_aliasmem(struct client_info *info, int argc, char *argv[])
        report(out_hnd, "SAM Domain Alias Member\n");
 
        /* establish a connection. */
-       res = res ? samr_connect( 
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain( 
-                   &sam_pol, ace_perms, &sid1,
+       res = res ? samr_open_domain( &sam_pol, ace_perms, &sid1,
                    &pol_dom) : False;
 
        /* connect to the domain */
-       res1 = res ? samr_open_alias(
-                   &pol_dom,
+       res1 = res ? samr_open_alias( &pol_dom,
                    0x000f001f, alias_rid, &alias_pol) : False;
 
        while (argc > 0 && res2 && res1)
@@ -370,7 +365,7 @@ void cmd_sam_del_aliasmem(struct client_info *info, int argc, char *argv[])
                argv++;
                /* get a sid, delete a member from the alias */
                res2 = res2 ? string_to_sid(&member_sid, argv[0]) : False;
-               res2 = res2 ? samr_del_aliasmem( &alias_pol, &member_sid) : False;
+               res2 = res2 ? samr_del_aliasmem(&alias_pol, &member_sid) : False;
 
                if (res2)
                {
@@ -378,9 +373,9 @@ void cmd_sam_del_aliasmem(struct client_info *info, int argc, char *argv[])
                }
        }
 
-       res1 = res1 ? samr_close( &alias_pol) : False;
-       res  = res  ? samr_close( &pol_dom) : False;
-       res  = res  ? samr_close( &sam_pol) : False;
+       res1 = res1 ? samr_close(&alias_pol) : False;
+       res  = res  ? samr_close(&pol_dom) : False;
+       res  = res  ? samr_close(&sam_pol) : False;
 
        if (res && res1 && res2)
        {
@@ -442,19 +437,16 @@ void cmd_sam_delete_dom_alias(struct client_info *info, int argc, char *argv[])
        report(out_hnd, "SAM Delete Domain Alias\n");
 
        /* establish a connection. */
-       res = res ? samr_connect( 
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain( 
-                   &sam_pol, ace_perms, &sid1,
+       res = res ? samr_open_domain( &sam_pol, ace_perms, &sid1,
                    &pol_dom) : False;
 
        names[0] = name;
 
-       res1 = res ? samr_query_lookup_names(
-                   &pol_dom, 0x000003e8,
+       res1 = res ? samr_query_lookup_names( &pol_dom, 0x000003e8,
                    1, names,
                    &num_rids, rid, type) : False;
 
@@ -464,15 +456,14 @@ void cmd_sam_delete_dom_alias(struct client_info *info, int argc, char *argv[])
        }
 
        /* connect to the domain */
-       res1 = res1 ? samr_open_alias(
-                   &pol_dom,
+       res1 = res1 ? samr_open_alias( &pol_dom,
                    0x000f001f, alias_rid, &alias_pol) : False;
 
-       res2 = res1 ? samr_delete_dom_alias( &alias_pol) : False;
+       res2 = res1 ? samr_delete_dom_alias(&alias_pol) : False;
 
-       res1 = res1 ? samr_close( &alias_pol) : False;
-       res  = res  ? samr_close( &pol_dom) : False;
-       res  = res  ? samr_close( &sam_pol) : False;
+       res1 = res1 ? samr_close(&alias_pol) : False;
+       res  = res  ? samr_close(&pol_dom) : False;
+       res  = res  ? samr_close(&sam_pol) : False;
 
        if (res && res1 && res2)
        {
@@ -539,11 +530,11 @@ void cmd_sam_add_aliasmem(struct client_info *info, int argc, char *argv[])
        report(out_hnd, "SAM Domain Alias Member\n");
 
        /* lookup domain controller; receive a policy handle */
-       res3 = res3 ? lsa_open_policy( srv_name,
+       res3 = res3 ? lsa_open_policy(srv_name,
                                &lsa_pol, True) : False;
 
        /* send lsa lookup sids call */
-       res4 = res3 ? lsa_lookup_names( &lsa_pol,
+       res4 = res3 ? lsa_lookup_names(&lsa_pol,
                                       num_names, names, 
                                       &sids, NULL, &num_sids) : False;
 
@@ -572,24 +563,21 @@ void cmd_sam_add_aliasmem(struct client_info *info, int argc, char *argv[])
        }
 
        /* establish a connection. */
-       res = res ? samr_connect( 
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain( 
-                   &sam_pol, ace_perms, &sid1,
+       res = res ? samr_open_domain( &sam_pol, ace_perms, &sid1,
                    &pol_dom) : False;
 
        /* connect to the domain */
-       res1 = res ? samr_open_alias(
-                   &pol_dom,
+       res1 = res ? samr_open_alias( &pol_dom,
                    0x000f001f, alias_rid, &alias_pol) : False;
 
        for (i = 1; i < num_sids && res2 && res1; i++)
        {
                /* add a member to the alias */
-               res2 = res2 ? samr_add_aliasmem( &alias_pol, &sids[i]) : False;
+               res2 = res2 ? samr_add_aliasmem(&alias_pol, &sids[i]) : False;
 
                if (res2)
                {
@@ -598,9 +586,9 @@ void cmd_sam_add_aliasmem(struct client_info *info, int argc, char *argv[])
                }
        }
 
-       res1 = res1 ? samr_close( &alias_pol) : False;
-       res  = res  ? samr_close( &pol_dom) : False;
-       res  = res  ? samr_close( &sam_pol) : False;
+       res1 = res1 ? samr_close(&alias_pol) : False;
+       res  = res  ? samr_close(&pol_dom) : False;
+       res  = res  ? samr_close(&sam_pol) : False;
 
        if (sids != NULL)
        {
@@ -743,9 +731,6 @@ void cmd_sam_create_dom_user(struct client_info *info, int argc, char *argv[])
                acb_info = ACB_WSTRUST;
        }
 
-       argc--;
-       argv++;
-
        while ((opt = getopt(argc, argv,"is")) != EOF)
        {
                switch (opt)
@@ -834,25 +819,20 @@ void cmd_sam_create_dom_alias(struct client_info *info, int argc, char *argv[])
                          domain, acct_name, acct_desc);
 
        /* establish a connection. */
-       res = res ? samr_connect( 
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain( 
-                   &sam_pol, ace_perms, &sid1,
+       res = res ? samr_open_domain( &sam_pol, ace_perms, &sid1,
                    &pol_dom) : False;
 
        /* create a domain alias */
-       res1 = res ? create_samr_domain_alias( 
-                               &pol_dom,
+       res1 = res ? create_samr_domain_alias( &pol_dom,
                                acct_name, acct_desc, &alias_rid) : False;
 
-       res = res ? samr_close(
-                   &pol_dom) : False;
+       res = res ? samr_close( &pol_dom) : False;
 
-       res = res ? samr_close(
-                   &sam_pol) : False;
+       res = res ? samr_close( &sam_pol) : False;
 
        if (res && res1)
        {
@@ -914,18 +894,15 @@ void cmd_sam_del_groupmem(struct client_info *info, int argc, char *argv[])
        report(out_hnd, "SAM Add Domain Group member\n");
 
        /* establish a connection. */
-       res = res ? samr_connect( 
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain( 
-                   &sam_pol, ace_perms, &sid1,
+       res = res ? samr_open_domain( &sam_pol, ace_perms, &sid1,
                    &pol_dom) : False;
 
        /* connect to the domain */
-       res1 = res ? samr_open_group(
-                   &pol_dom,
+       res1 = res ? samr_open_group( &pol_dom,
                    0x0000001f, group_rid, &pol_grp) : False;
 
        while (argc > 0 && res2 && res1)
@@ -935,7 +912,7 @@ void cmd_sam_del_groupmem(struct client_info *info, int argc, char *argv[])
 
                /* get a rid, delete a member from the group */
                member_rid = get_number(argv[0]);
-               res2 = res2 ? samr_del_groupmem( &pol_grp, member_rid) : False;
+               res2 = res2 ? samr_del_groupmem(&pol_grp, member_rid) : False;
 
                if (res2)
                {
@@ -943,9 +920,9 @@ void cmd_sam_del_groupmem(struct client_info *info, int argc, char *argv[])
                }
        }
 
-       res1 = res1 ? samr_close( &pol_grp) : False;
-       res  = res  ? samr_close( &pol_dom) : False;
-       res  = res  ? samr_close( &sam_pol) : False;
+       res1 = res1 ? samr_close(&pol_grp) : False;
+       res  = res  ? samr_close(&pol_dom) : False;
+       res  = res  ? samr_close(&sam_pol) : False;
 
        if (res && res1 && res2)
        {
@@ -1008,19 +985,16 @@ void cmd_sam_delete_dom_group(struct client_info *info, int argc, char *argv[])
        report(out_hnd, "SAM Delete Domain Group\n");
 
        /* establish a connection. */
-       res = res ? samr_connect( 
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain( 
-                   &sam_pol, ace_perms, &sid1,
+       res = res ? samr_open_domain( &sam_pol, ace_perms, &sid1,
                    &pol_dom) : False;
 
        names[0] = name;
 
-       res1 = res ? samr_query_lookup_names(
-                   &pol_dom, 0x000003e8,
+       res1 = res ? samr_query_lookup_names( &pol_dom, 0x000003e8,
                    1, names,
                    &num_rids, rid, type) : False;
 
@@ -1030,15 +1004,14 @@ void cmd_sam_delete_dom_group(struct client_info *info, int argc, char *argv[])
        }
 
        /* connect to the domain */
-       res1 = res1 ? samr_open_group(
-                   &pol_dom,
+       res1 = res1 ? samr_open_group( &pol_dom,
                    0x0000001f, group_rid, &pol_grp) : False;
 
-       res2 = res1 ? samr_delete_dom_group( &pol_grp) : False;
+       res2 = res1 ? samr_delete_dom_group(&pol_grp) : False;
 
-       res1 = res1 ? samr_close( &pol_grp) : False;
-       res  = res  ? samr_close( &pol_dom) : False;
-       res  = res  ? samr_close( &sam_pol) : False;
+       res1 = res1 ? samr_close(&pol_grp) : False;
+       res  = res  ? samr_close(&pol_dom) : False;
+       res  = res  ? samr_close(&sam_pol) : False;
 
        if (res && res1 && res2)
        {
@@ -1121,40 +1094,33 @@ void cmd_sam_add_groupmem(struct client_info *info, int argc, char *argv[])
        report(out_hnd, "SAM Add Domain Group member\n");
 
        /* establish a connection. */
-       res = res ? samr_connect( 
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res4 = res ? samr_open_domain( 
-                   &sam_pol, ace_perms, &sid1,
+       res4 = res ? samr_open_domain( &sam_pol, ace_perms, &sid1,
                    &pol_dom) : False;
 
        /* connect to the domain */
-       res3 = res ? samr_open_domain( 
-                   &sam_pol, ace_perms, &sid_1_5_20,
+       res3 = res ? samr_open_domain( &sam_pol, ace_perms, &sid_1_5_20,
                    &pol_blt) : False;
 
-       res2 = res4 ? samr_query_lookup_names(
-                   &pol_dom, 0x000003e8,
+       res2 = res4 ? samr_query_lookup_names( &pol_dom, 0x000003e8,
                    1, group_names,
                    &num_group_rids, group_rid, group_type) : False;
 
        /* open the group */
-       res2 = res2 ? samr_open_group(
-                   &pol_dom,
+       res2 = res2 ? samr_open_group( &pol_dom,
                    0x0000001f, group_rid[0], &pol_grp) : False;
 
        if (!res2 || (group_type != NULL && group_type[0] == SID_NAME_UNKNOWN))
        {
-               res2 = res3 ? samr_query_lookup_names(
-                           &pol_blt, 0x000003e8,
+               res2 = res3 ? samr_query_lookup_names( &pol_blt, 0x000003e8,
                            1, group_names, 
                            &num_group_rids, group_rid, group_type) : False;
 
                /* open the group */
-               res2 = res2 ? samr_open_group(
-                           &pol_blt,
+               res2 = res2 ? samr_open_group( &pol_blt,
                            0x0000001f, group_rid[0], &pol_grp) : False;
        }
 
@@ -1164,8 +1130,7 @@ void cmd_sam_add_groupmem(struct client_info *info, int argc, char *argv[])
                        group_name);
                return;
        }
-       res1 = res2 ? samr_query_lookup_names(
-                   &pol_dom, 0x000003e8,
+       res1 = res2 ? samr_query_lookup_names( &pol_dom, 0x000003e8,
                    num_names, names,
                    &num_rids, rid, type) : False;
 
@@ -1181,7 +1146,7 @@ void cmd_sam_add_groupmem(struct client_info *info, int argc, char *argv[])
                }
                else
                {
-                       if (samr_add_groupmem( &pol_grp, rid[i]))
+                       if (samr_add_groupmem(&pol_grp, rid[i]))
                        {
                                report(out_hnd, "RID added to Group 0x%x: 0x%x\n",
                                                 group_rid[0], rid[i]);
@@ -1189,10 +1154,10 @@ void cmd_sam_add_groupmem(struct client_info *info, int argc, char *argv[])
                }
        }
 
-       res1 = res ? samr_close( &pol_grp) : False;
-       res1 = res3 ? samr_close( &pol_blt) : False;
-       res1 = res4 ? samr_close( &pol_dom) : False;
-       res  = res ? samr_close( &sam_pol) : False;
+       res1 = res ? samr_close(&pol_grp) : False;
+       res1 = res3 ? samr_close(&pol_blt) : False;
+       res1 = res4 ? samr_close(&pol_dom) : False;
+       res  = res ? samr_close(&sam_pol) : False;
 
        free_char_array(num_names, names);
        
@@ -1274,25 +1239,20 @@ void cmd_sam_create_dom_group(struct client_info *info, int argc, char *argv[])
                          domain, acct_name, acct_desc);
 
        /* establish a connection. */
-       res = res ? samr_connect( 
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain( 
-                   &sam_pol, ace_perms, &sid1,
+       res = res ? samr_open_domain( &sam_pol, ace_perms, &sid1,
                    &pol_dom) : False;
 
        /* read some users */
-       res1 = res ? create_samr_domain_group( 
-                               &pol_dom,
+       res1 = res ? create_samr_domain_group( &pol_dom,
                                acct_name, acct_desc, &group_rid) : False;
 
-       res = res ? samr_close(
-                   &pol_dom) : False;
+       res = res ? samr_close( &pol_dom) : False;
 
-       res = res ? samr_close(
-                   &sam_pol) : False;
+       res = res ? samr_close( &sam_pol) : False;
 
        if (res && res1)
        {
@@ -1336,9 +1296,6 @@ void cmd_sam_enum_users(struct client_info *info, int argc, char *argv[])
        fstrcat(srv_name, info->dest_host);
        strupper(srv_name);
 
-       argc--;
-       argv++;
-
        while ((opt = getopt(argc, argv, "uga")) != EOF)
        {
                switch (opt)
@@ -1363,7 +1320,7 @@ void cmd_sam_enum_users(struct client_info *info, int argc, char *argv[])
 
        report(out_hnd, "SAM Enumerate Users\n");
 
-       msrpc_sam_enum_users( srv_name, domain, &sid1,
+       msrpc_sam_enum_users(srv_name, domain, &sid1,
                    &sam, &num_sam_entries,
                    sam_display_user,
                    request_user_info  ? sam_display_user_info     : NULL,
@@ -1425,26 +1382,22 @@ void cmd_sam_query_groupmem(struct client_info *info, int argc, char *argv[])
                          info->myhostname, srv_name, domain, sid_str);
 
        /* establish a connection. */
-       res = res ? samr_connect(
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain(
-                   &sam_pol, 0x304, &sid,
+       res = res ? samr_open_domain( &sam_pol, 0x304, &sid,
                    &pol_dom) : False;
 
        /* look up group rid */
        names[0] = group_name;
-       res1 = res ? samr_query_lookup_names(
-                                       &pol_dom, 0x3e8,
+       res1 = res ? samr_query_lookup_names( &pol_dom, 0x3e8,
                                        1, names,
                                        &num_rids, rid, type) : False;
 
        if (res1 && num_rids == 1)
        {
-               res1 = req_groupmem_info(
-                               &pol_dom,
+               res1 = req_groupmem_info( &pol_dom,
                                domain,
                                &sid,
                                rid[0],
@@ -1452,11 +1405,9 @@ void cmd_sam_query_groupmem(struct client_info *info, int argc, char *argv[])
                                sam_display_group_members);
        }
 
-       res = res ? samr_close(
-                   &sam_pol) : False;
+       res = res ? samr_close( &sam_pol) : False;
 
-       res = res ? samr_close(
-                   &pol_dom) : False;
+       res = res ? samr_close( &pol_dom) : False;
 
        if (res1)
        {
@@ -1517,37 +1468,31 @@ void cmd_sam_query_group(struct client_info *info, int argc, char *argv[])
                          info->myhostname, srv_name, domain, sid_str);
 
        /* establish a connection. */
-       res = res ? samr_connect(
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain(
-                   &sam_pol, 0x304, &sid,
+       res = res ? samr_open_domain( &sam_pol, 0x304, &sid,
                    &pol_dom) : False;
 
        /* look up group rid */
        names[0] = group_name;
-       res1 = res ? samr_query_lookup_names(
-                                       &pol_dom, 0x3e8,
+       res1 = res ? samr_query_lookup_names( &pol_dom, 0x3e8,
                                        1, names,
                                        &num_rids, rid, type) : False;
 
        if (res1 && num_rids == 1)
        {
-               res1 = query_groupinfo(
-                               &pol_dom,
+               res1 = query_groupinfo( &pol_dom,
                                domain,
                                &sid,
                                rid[0],
                                sam_display_group_info);
        }
 
-       res = res ? samr_close(
-                   &sam_pol) : False;
+       res = res ? samr_close( &sam_pol) : False;
 
-       res = res ? samr_close(
-                   &pol_dom) : False;
+       res = res ? samr_close( &pol_dom) : False;
 
        if (res1)
        {
@@ -1608,37 +1553,31 @@ void cmd_sam_query_user(struct client_info *info, int argc, char *argv[])
                          info->myhostname, srv_name, domain, sid_str);
 
        /* establish a connection. */
-       res = res ? samr_connect(
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain(
-                   &sam_pol, 0x304, &sid,
+       res = res ? samr_open_domain( &sam_pol, 0x304, &sid,
                    &pol_dom) : False;
 
        /* look up user rid */
        names[0] = user_name;
-       res1 = res ? samr_query_lookup_names(
-                                       &pol_dom, 0x3e8,
+       res1 = res ? samr_query_lookup_names( &pol_dom, 0x3e8,
                                        1, names,
                                        &num_rids, rid, type) : False;
 
        /* send user info query */
        if (res1 && num_rids == 1)
        {
-               res1 = req_user_info(
-                               &pol_dom,
+               res1 = req_user_info( &pol_dom,
                                domain,
                                &sid,
                                rid[0],
                                sam_display_user_info);
        }
-       res = res ? samr_close(
-                   &sam_pol) : False;
+       res = res ? samr_close( &sam_pol) : False;
 
-       res = res ? samr_close(
-                   &pol_dom) : False;
+       res = res ? samr_close( &pol_dom) : False;
 
        if (res1)
        {
@@ -1696,9 +1635,6 @@ void cmd_sam_set_userinfo2(struct client_info *info, int argc, char *argv[])
 
        safe_strcpy(user_name, argv[0], sizeof(user_name));
 
-       argc--;
-       argv++;
-
        while ((opt = getopt(argc, argv,"s:")) != EOF)
        {
                switch (opt)
@@ -1721,25 +1657,21 @@ void cmd_sam_set_userinfo2(struct client_info *info, int argc, char *argv[])
        report(out_hnd, "SAM Set User Info: %s\n", user_name);
 
        /* establish a connection. */
-       res = res ? samr_connect(
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain(
-                   &sam_pol, 0x02000000, &sid,
+       res = res ? samr_open_domain( &sam_pol, 0x02000000, &sid,
                    &pol_dom) : False;
 
        /* look up user rid */
        names[0] = user_name;
-       res1 = res ? samr_query_lookup_names(
-                                       &pol_dom, 0x3e8,
+       res1 = res ? samr_query_lookup_names( &pol_dom, 0x3e8,
                                        1, names,
                                        &num_rids, rid, type) : False;
 
        /* send set user info */
-       if (res1 && num_rids == 1 && get_samr_query_userinfo(
-                                                   &pol_dom,
+       if (res1 && num_rids == 1 && get_samr_query_userinfo( &pol_dom,
                                                    0x10, rid[0],
                                                    (void*)&usr16))
        {
@@ -1762,16 +1694,13 @@ void cmd_sam_set_userinfo2(struct client_info *info, int argc, char *argv[])
                
                if (usr != NULL)
                {
-                       res1 = set_samr_set_userinfo2(
-                                           &pol_dom,
+                       res1 = set_samr_set_userinfo2( &pol_dom,
                                            switch_value, rid[0], usr);
                }
        }
-       res = res ? samr_close(
-                   &sam_pol) : False;
+       res = res ? samr_close( &sam_pol) : False;
 
-       res = res ? samr_close(
-                   &pol_dom) : False;
+       res = res ? samr_close( &pol_dom) : False;
 
        if (res1)
        {
@@ -1830,10 +1759,7 @@ void cmd_sam_set_userinfo(struct client_info *info, int argc, char *argv[])
 
        safe_strcpy(user_name, argv[0], sizeof(user_name));
 
-       argc--;
-       argv++;
-
-       if (argc == 0)
+       if (argc == 1)
        {
                fstring pass_str;
                char *pass;
@@ -1875,25 +1801,21 @@ void cmd_sam_set_userinfo(struct client_info *info, int argc, char *argv[])
        report(out_hnd, "Password: %s\n", password);
 
        /* establish a connection. */
-       res = res ? samr_connect(
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain(
-                   &sam_pol, 0x02000000, &sid,
+       res = res ? samr_open_domain( &sam_pol, 0x02000000, &sid,
                    &pol_dom) : False;
 
        /* look up user rid */
        names[0] = user_name;
-       res1 = res ? samr_query_lookup_names(
-                                       &pol_dom, 0x3e8,
+       res1 = res ? samr_query_lookup_names( &pol_dom, 0x3e8,
                                        1, names,
                                        &num_rids, rid, type) : False;
 
        /* send set user info */
-       if (res1 && num_rids == 1 && get_samr_query_userinfo(
-                                                   &pol_dom,
+       if (res1 && num_rids == 1 && get_samr_query_userinfo( &pol_dom,
                                                    0x15, rid[0], &usr21))
        {
                void *usr = NULL;
@@ -1954,16 +1876,13 @@ void cmd_sam_set_userinfo(struct client_info *info, int argc, char *argv[])
                }
                if (usr != NULL)
                {
-                       res1 = set_samr_set_userinfo(
-                                           &pol_dom,
+                       res1 = set_samr_set_userinfo( &pol_dom,
                                            switch_value, rid[0], usr);
                }
        }
-       res = res ? samr_close(
-                   &sam_pol) : False;
+       res = res ? samr_close( &sam_pol) : False;
 
-       res = res ? samr_close(
-                   &pol_dom) : False;
+       res = res ? samr_close( &pol_dom) : False;
 
        if (res1)
        {
@@ -1977,6 +1896,17 @@ void cmd_sam_set_userinfo(struct client_info *info, int argc, char *argv[])
        }
 }
 
+static void sam_display_disp_info(const char* domain, const DOM_SID *sid,
+                               uint16 info, uint32 num,
+                               SAM_DISPINFO_CTR *ctr)
+                               
+{
+       report(out_hnd, "SAM Display Info for Domain %s\n", domain);
+
+       display_sam_disp_info_ctr(out_hnd, ACTION_HEADER   , info, num, ctr);
+       display_sam_disp_info_ctr(out_hnd, ACTION_ENUMERATE, info, num, ctr);
+       display_sam_disp_info_ctr(out_hnd, ACTION_FOOTER   , info, num, ctr);
+}
 
 /****************************************************************************
 experimental SAM query display info.
@@ -1987,14 +1917,10 @@ void cmd_sam_query_dispinfo(struct client_info *info, int argc, char *argv[])
        fstring domain;
        fstring sid;
        DOM_SID sid1;
-       BOOL res = True;
        uint16 switch_value = 1;
-       uint32 ace_perms = 0x304; /* absolutely no idea. */
        SAM_DISPINFO_CTR ctr;
        SAM_DISPINFO_1 inf1;
        uint32 num_entries;
-       POLICY_HND sam_pol;
-       POLICY_HND pol_dom;
 
        sid_to_string(sid, &info->dom.level5_sid);
        fstrcpy(domain, info->dom.level5_dom);
@@ -2016,41 +1942,14 @@ void cmd_sam_query_dispinfo(struct client_info *info, int argc, char *argv[])
                switch_value = strtoul(argv[1], (char**)NULL, 10);
        }
 
-       fprintf(out_hnd, "SAM Query Domain Info: info level %d\n", switch_value);
-       fprintf(out_hnd, "From: %s To: %s Domain: %s SID: %s\n",
-                         info->myhostname, srv_name, domain, sid);
-
-       /* establish a connection. */
-       res = res ? samr_connect( 
-                               srv_name, 0x02000000,
-                               &sam_pol) : False;
-
-       /* connect to the domain */
-       res = res ? samr_open_domain( 
-                   &sam_pol, ace_perms, &sid1,
-                   &pol_dom) : False;
-
        ctr.sam.info1 = &inf1;
 
-       /* send a samr query_disp_info command */
-       res = res ? samr_query_dispinfo(
-                   &pol_dom, switch_value, 
-                   &num_entries, &ctr) : False;
-
-       res = res ? samr_close(
-                   &sam_pol) : False;
-
-       res = res ? samr_close( 
-                   &pol_dom) : False;
-
-       if (res)
+       if (msrpc_sam_query_dispinfo( srv_name, domain, &sid1,
+                   switch_value, 
+                   &num_entries, &ctr, sam_display_disp_info))
        {
+
                DEBUG(5,("cmd_sam_query_dispinfo: succeeded\n"));
-#if 0
-               display_sam_disp_info_ctr(out_hnd, ACTION_HEADER   , switch_value, &ctr);
-               display_sam_disp_info_ctr(out_hnd, ACTION_ENUMERATE, switch_value, &ctr);
-               display_sam_disp_info_ctr(out_hnd, ACTION_FOOTER   , switch_value, &ctr);
-#endif
        }
        else
        {
@@ -2094,7 +1993,7 @@ void cmd_sam_query_dominfo(struct client_info *info, int argc, char *argv[])
        report(out_hnd, "From: %s Domain: %s SID: %s\n",
                          info->myhostname, domain, sid);
 
-       if (sam_query_dominfo( srv_name, &sid1, switch_value, &ctr))
+       if (sam_query_dominfo(srv_name, &sid1, switch_value, &ctr))
        {
                DEBUG(5,("cmd_sam_query_dominfo: succeeded\n"));
                display_sam_unk_ctr(out_hnd, ACTION_HEADER   , switch_value, &ctr);
@@ -2155,25 +2054,22 @@ void cmd_sam_query_aliasmem(struct client_info *info, int argc, char *argv[])
                          info->myhostname, srv_name, domain, sid_str);
 
        /* establish a connection. */
-       res = res ? samr_connect(
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain(
-                   &sam_pol, 0x304, &sid,
+       res = res ? samr_open_domain( &sam_pol, 0x304, &sid,
                    &pol_dom) : False;
 
        /* look up alias rid */
        names[0] = alias_name;
-       res1 = res ? samr_query_lookup_names(
-                                       &pol_dom, 0x3e8,
+       res1 = res ? samr_query_lookup_names( &pol_dom, 0x3e8,
                                        1, names,
                                        &num_rids, rid, type) : False;
 
        if (res1 && num_rids == 1)
        {
-               res1 = req_aliasmem_info(
+               res1 = req_aliasmem_info(srv_name,
                                &pol_dom,
                                domain,
                                &sid,
@@ -2182,11 +2078,9 @@ void cmd_sam_query_aliasmem(struct client_info *info, int argc, char *argv[])
                                sam_display_alias_members);
        }
 
-       res = res ? samr_close(
-                   &sam_pol) : False;
+       res = res ? samr_close( &sam_pol) : False;
 
-       res = res ? samr_close(
-                   &pol_dom) : False;
+       res = res ? samr_close( &pol_dom) : False;
 
        if (res1)
        {
@@ -2247,37 +2141,31 @@ void cmd_sam_query_alias(struct client_info *info, int argc, char *argv[])
                          info->myhostname, srv_name, domain, sid_str);
 
        /* establish a connection. */
-       res = res ? samr_connect(
-                               srv_name, 0x02000000,
+       res = res ? samr_connect( srv_name, 0x02000000,
                                &sam_pol) : False;
 
        /* connect to the domain */
-       res = res ? samr_open_domain(
-                   &sam_pol, 0x304, &sid,
+       res = res ? samr_open_domain( &sam_pol, 0x304, &sid,
                    &pol_dom) : False;
 
        /* look up alias rid */
        names[0] = alias_name;
-       res1 = res ? samr_query_lookup_names(
-                                       &pol_dom, 0x3e8,
+       res1 = res ? samr_query_lookup_names( &pol_dom, 0x3e8,
                                        1, names,
                                        &num_rids, rid, type) : False;
 
        if (res1 && num_rids == 1)
        {
-               res1 = query_aliasinfo(
-                               &pol_dom,
+               res1 = query_aliasinfo( &pol_dom,
                                domain,
                                &sid,
                                rid[0],
                                sam_display_alias_info);
        }
 
-       res = res ? samr_close(
-                   &sam_pol) : False;
+       res = res ? samr_close( &sam_pol) : False;
 
-       res = res ? samr_close(
-                   &pol_dom) : False;
+       res = res ? samr_close( &pol_dom) : False;
 
        if (res1)
        {
@@ -2319,9 +2207,6 @@ void cmd_sam_enum_aliases(struct client_info *info, int argc, char *argv[])
        fstrcat(srv_name, info->dest_host);
        strupper(srv_name);
 
-       argc--;
-       argv++;
-
        while ((opt = getopt(argc, argv, "ma")) != EOF)
        {
                switch (opt)
@@ -2382,9 +2267,6 @@ void cmd_sam_enum_groups(struct client_info *info, int argc, char *argv[])
        fstrcat(srv_name, info->dest_host);
        strupper(srv_name);
 
-       argc--;
-       argv++;
-
        while ((opt = getopt(argc, argv, "mg")) != EOF)
        {
                switch (opt)
@@ -2432,9 +2314,6 @@ void cmd_sam_enum_domains(struct client_info *info, int argc, char *argv[])
        fstrcat(srv_name, info->dest_host);
        strupper(srv_name);
 
-       argc--;
-       argv++;
-
        while ((opt = getopt(argc, argv, "i")) != EOF)
        {
                switch (opt)
index 7f3f8532a5e1784f2a12a0982c8dc675f8a1a787..d118a7d15dbb1529518056874de115a544a27199 100644 (file)
@@ -201,9 +201,6 @@ void cmd_svc_enum(struct client_info *info, int argc, char *argv[])
        fstrcat(srv_name, info->dest_host);
        strupper(srv_name);
 
-       argc--;
-       argv++;
-
        while ((opt = getopt(argc, argv,"i")) != EOF)
        {
                switch (opt)
index d1dfbd117d3d1983b27716a1fa900d7df174cdbb..58bdba5ffb971cbd8d3d9fce2ef2dbf484eba030 100644 (file)
@@ -181,7 +181,7 @@ void display_srv_info_101(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "Server Info Level 101:\n");
+                       report(out_hnd, "Server Info Level 101:\n");
 
                        break;
                }
@@ -195,8 +195,8 @@ void display_srv_info_101(FILE *out_hnd, enum action_type action,
 
                        display_server(out_hnd, action, name, sv101->srv_type, comment);
 
-                       fprintf(out_hnd, "\tplatform_id     :\t%d\n"    , sv101->platform_id);
-                       fprintf(out_hnd, "\tos version      :\t%d.%d\n" , sv101->ver_major, sv101->ver_minor);
+                       report(out_hnd, "\tplatform_id     :\t%d\n"    , sv101->platform_id);
+                       report(out_hnd, "\tos version      :\t%d.%d\n" , sv101->ver_major, sv101->ver_minor);
 
                        break;
                }
@@ -222,7 +222,7 @@ void display_srv_info_102(FILE *out_hnd, enum action_type action, SRV_INFO_102 *
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "Server Info Level 102:\n");
+                       report(out_hnd, "Server Info Level 102:\n");
 
                        break;
                }
@@ -239,14 +239,14 @@ void display_srv_info_102(FILE *out_hnd, enum action_type action, SRV_INFO_102 *
 
                        display_server(out_hnd, action, name, sv102->srv_type, comment);
 
-                       fprintf(out_hnd, "\tplatform_id     :\t%d\n"    , sv102->platform_id);
-                       fprintf(out_hnd, "\tos version      :\t%d.%d\n" , sv102->ver_major, sv102->ver_minor);
+                       report(out_hnd, "\tplatform_id     :\t%d\n"    , sv102->platform_id);
+                       report(out_hnd, "\tos version      :\t%d.%d\n" , sv102->ver_major, sv102->ver_minor);
 
-                       fprintf(out_hnd, "\tusers           :\t%x\n"    , sv102->users      );
-                       fprintf(out_hnd, "\tdisc, hidden    :\t%x, %x\n" , sv102->disc     , sv102->hidden   );
-                       fprintf(out_hnd, "\tannounce, delta :\t%d, %d\n", sv102->announce , sv102->ann_delta);
-                       fprintf(out_hnd, "\tlicenses        :\t%d\n"    , sv102->licenses   );
-                       fprintf(out_hnd, "\tuser path       :\t%s\n"    , usr_path);
+                       report(out_hnd, "\tusers           :\t%x\n"    , sv102->users      );
+                       report(out_hnd, "\tdisc, hidden    :\t%x, %x\n" , sv102->disc     , sv102->hidden   );
+                       report(out_hnd, "\tannounce, delta :\t%d, %d\n", sv102->announce , sv102->ann_delta);
+                       report(out_hnd, "\tlicenses        :\t%d\n"    , sv102->licenses   );
+                       report(out_hnd, "\tuser path       :\t%s\n"    , usr_path);
 
                        break;
                }
@@ -264,7 +264,7 @@ void display_srv_info_ctr(FILE *out_hnd, enum action_type action, SRV_INFO_CTR *
 {
        if (ctr == NULL || ctr->ptr_srv_ctr == 0)
        {
-               fprintf(out_hnd, "Server Information: unavailable due to an error\n");
+               report(out_hnd, "Server Information: unavailable due to an error\n");
                return;
        }
 
@@ -282,7 +282,7 @@ void display_srv_info_ctr(FILE *out_hnd, enum action_type action, SRV_INFO_CTR *
                }
                default:
                {
-                       fprintf(out_hnd, "Server Information: Unknown Info Level\n");
+                       report(out_hnd, "Server Information: Unknown Info Level\n");
                        break;
                }
        }
@@ -303,19 +303,19 @@ void display_conn_info_0(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "Connection Info Level 0:\n");
+                       report(out_hnd, "Connection Info Level 0:\n");
 
                        break;
                }
                case ACTION_ENUMERATE:
                {
-                       fprintf(out_hnd, "\tid:\t%d\n", info0->id);
+                       report(out_hnd, "\tid:\t%d\n", info0->id);
 
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -337,7 +337,7 @@ void display_conn_info_1(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "Connection Info Level 1:\n");
+                       report(out_hnd, "Connection Info Level 1:\n");
 
                        break;
                }
@@ -349,20 +349,20 @@ void display_conn_info_1(FILE *out_hnd, enum action_type action,
                        unistr2_to_ascii(usr_name, &str1->uni_usr_name, sizeof(usr_name)-1);
                        unistr2_to_ascii(net_name, &str1->uni_net_name, sizeof(net_name)-1);
 
-                       fprintf(out_hnd, "\tid       :\t%d\n", info1->id);
-                       fprintf(out_hnd, "\ttype     :\t%s\n", get_share_type_str(info1->type));
-                       fprintf(out_hnd, "\tnum_opens:\t%d\n", info1->num_opens);
-                       fprintf(out_hnd, "\tnum_users:\t%d\n", info1->num_users);
-                       fprintf(out_hnd, "\topen_time:\t%d\n", info1->open_time);
+                       report(out_hnd, "\tid       :\t%d\n", info1->id);
+                       report(out_hnd, "\ttype     :\t%s\n", get_share_type_str(info1->type));
+                       report(out_hnd, "\tnum_opens:\t%d\n", info1->num_opens);
+                       report(out_hnd, "\tnum_users:\t%d\n", info1->num_users);
+                       report(out_hnd, "\topen_time:\t%d\n", info1->open_time);
 
-                       fprintf(out_hnd, "\tuser name:\t%s\n", usr_name);
-                       fprintf(out_hnd, "\tnet  name:\t%s\n", net_name);
+                       report(out_hnd, "\tuser name:\t%s\n", usr_name);
+                       report(out_hnd, "\tnet  name:\t%s\n", net_name);
 
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -377,7 +377,7 @@ void display_srv_conn_info_0_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_srv_conn_info_0_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_srv_conn_info_0_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -414,7 +414,7 @@ void display_srv_conn_info_1_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_srv_conn_info_1_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_srv_conn_info_1_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -451,7 +451,7 @@ void display_srv_conn_info_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL || ctr->ptr_conn_ctr == 0)
        {
-               fprintf(out_hnd, "display_srv_conn_info_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_srv_conn_info_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -471,7 +471,7 @@ void display_srv_conn_info_ctr(FILE *out_hnd, enum action_type action,
                }
                default:
                {
-                       fprintf(out_hnd, "display_srv_conn_info_ctr: Unknown Info Level\n");
+                       report(out_hnd, "display_srv_conn_info_ctr: Unknown Info Level\n");
                        break;
                }
        }
@@ -493,7 +493,7 @@ void display_tprt_info_0(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "Transport Info Level 0:\n");
+                       report(out_hnd, "Transport Info Level 0:\n");
 
                        break;
                }
@@ -507,16 +507,16 @@ void display_tprt_info_0(FILE *out_hnd, enum action_type action,
                        buffer4_to_str(trans_addr, &str0->buf_trans_addr, sizeof(trans_addr)-1);
                        unistr2_to_ascii(addr_name, &str0->uni_addr_name, sizeof(addr_name)-1);
 
-                       fprintf(out_hnd, "\tnum_vcs  :\t%d\n", info0->num_vcs);
-                       fprintf(out_hnd, "\ttransport name:\t%s\n", trans_name);
-                       fprintf(out_hnd, "\ttransport addr:\t%s\n", trans_addr);
-                       fprintf(out_hnd, "\taddress name:\t%s\n", addr_name);
+                       report(out_hnd, "\tnum_vcs  :\t%d\n", info0->num_vcs);
+                       report(out_hnd, "\ttransport name:\t%s\n", trans_name);
+                       report(out_hnd, "\ttransport addr:\t%s\n", trans_addr);
+                       report(out_hnd, "\taddress name:\t%s\n", addr_name);
 
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -531,7 +531,7 @@ void display_srv_tprt_info_0_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_srv_tprt_info_0_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_srv_tprt_info_0_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -568,7 +568,7 @@ void display_srv_tprt_info_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL || ctr->ptr_tprt_ctr == 0)
        {
-               fprintf(out_hnd, "display_srv_tprt_info_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_srv_tprt_info_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -582,7 +582,7 @@ void display_srv_tprt_info_ctr(FILE *out_hnd, enum action_type action,
                }
                default:
                {
-                       fprintf(out_hnd, "display_srv_tprt_info_ctr: Unknown Info Level\n");
+                       report(out_hnd, "display_srv_tprt_info_ctr: Unknown Info Level\n");
                        break;
                }
        }
@@ -604,7 +604,7 @@ void display_share_info_1(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "Share Info Level 1:\n");
+                       report(out_hnd, "Share Info Level 1:\n");
 
                        break;
                }
@@ -622,7 +622,7 @@ void display_share_info_1(FILE *out_hnd, enum action_type action,
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -644,7 +644,7 @@ void display_share_info_2(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "Share Info Level 2:\n");
+                       report(out_hnd, "Share Info Level 2:\n");
 
                        break;
                }
@@ -668,7 +668,7 @@ void display_share_info_2(FILE *out_hnd, enum action_type action,
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -683,7 +683,7 @@ void display_srv_share_info_1_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_srv_share_info_1_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_srv_share_info_1_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -720,7 +720,7 @@ void display_srv_share_info_2_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_srv_share_info_2_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_srv_share_info_2_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -757,7 +757,7 @@ void display_srv_share_info_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL || ctr->ptr_share_ctr == 0)
        {
-               fprintf(out_hnd, "display_srv_share_info_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_srv_share_info_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -777,7 +777,7 @@ void display_srv_share_info_ctr(FILE *out_hnd, enum action_type action,
                }
                default:
                {
-                       fprintf(out_hnd, "display_srv_share_info_ctr: Unknown Info Level\n");
+                       report(out_hnd, "display_srv_share_info_ctr: Unknown Info Level\n");
                        break;
                }
        }
@@ -799,7 +799,7 @@ void display_file_info_3(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "File Info Level 3:\n");
+                       report(out_hnd, "File Info Level 3:\n");
 
                        break;
                }
@@ -813,18 +813,18 @@ void display_file_info_3(FILE *out_hnd, enum action_type action,
                        unistr2_to_ascii(user_name, &str3->uni_user_name, 
                                         sizeof(user_name)-1);
 
-                       fprintf(out_hnd, "\tid       :\t%d\n", info3->id);
-                       fprintf(out_hnd, "\tperms    :\t%s\n", get_file_mode_str(info3->perms));
-                       fprintf(out_hnd, "\tnum_locks:\t%d\n", info3->num_locks);
+                       report(out_hnd, "\tid       :\t%d\n", info3->id);
+                       report(out_hnd, "\tperms    :\t%s\n", get_file_mode_str(info3->perms));
+                       report(out_hnd, "\tnum_locks:\t%d\n", info3->num_locks);
 
-                       fprintf(out_hnd, "\tpath name:\t%s\n", path_name);
-                       fprintf(out_hnd, "\tuser name:\t%s\n", user_name);
+                       report(out_hnd, "\tpath name:\t%s\n", path_name);
+                       report(out_hnd, "\tuser name:\t%s\n", user_name);
 
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -839,7 +839,7 @@ void display_srv_file_info_3_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_srv_file_info_3_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_srv_file_info_3_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -876,7 +876,7 @@ void display_srv_file_info_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL || ctr->ptr_file_ctr == 0)
        {
-               fprintf(out_hnd, "display_srv_file_info_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_srv_file_info_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -890,7 +890,7 @@ void display_srv_file_info_ctr(FILE *out_hnd, enum action_type action,
                }
                default:
                {
-                       fprintf(out_hnd, "display_srv_file_info_ctr: Unknown Info Level\n");
+                       report(out_hnd, "display_srv_file_info_ctr: Unknown Info Level\n");
                        break;
                }
        }
@@ -911,7 +911,7 @@ void display_sess_info_0(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "Session Info Level 0:\n");
+                       report(out_hnd, "Session Info Level 0:\n");
 
                        break;
                }
@@ -922,13 +922,13 @@ void display_sess_info_0(FILE *out_hnd, enum action_type action,
                        unistr2_to_ascii(name, &str0->uni_name, 
                                         sizeof(name)-1);
 
-                       fprintf(out_hnd, "\tname:\t%s\n", name);
+                       report(out_hnd, "\tname:\t%s\n", name);
 
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -950,7 +950,7 @@ void display_sess_info_1(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "Session Info Level 1:\n");
+                       report(out_hnd, "Session Info Level 1:\n");
 
                        break;
                }
@@ -964,20 +964,20 @@ void display_sess_info_1(FILE *out_hnd, enum action_type action,
                        unistr2_to_ascii(name, &str1->uni_name, 
                                         sizeof(name)-1);
 
-                       fprintf(out_hnd, "\tname:\t%s\n", name);
+                       report(out_hnd, "\tname:\t%s\n", name);
 
-                       fprintf(out_hnd, "\topen :\t%d\n", info1->num_opens);
-                       fprintf(out_hnd, "\ttime :\t%d\n", info1->open_time);
-                       fprintf(out_hnd, "\tidle :\t%d\n", info1->idle_time);
-                       fprintf(out_hnd, "\tflags:\t%d\n", info1->user_flags);
+                       report(out_hnd, "\topen :\t%d\n", info1->num_opens);
+                       report(out_hnd, "\ttime :\t%d\n", info1->open_time);
+                       report(out_hnd, "\tidle :\t%d\n", info1->idle_time);
+                       report(out_hnd, "\tflags:\t%d\n", info1->user_flags);
 
-                       fprintf(out_hnd, "\tuser :\t%s\n", user_name);
+                       report(out_hnd, "\tuser :\t%s\n", user_name);
 
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -992,7 +992,7 @@ void display_srv_sess_info_0_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_srv_sess_info_0_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_srv_sess_info_0_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -1029,7 +1029,7 @@ void display_srv_sess_info_1_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_srv_sess_info_1_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_srv_sess_info_1_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -1066,7 +1066,7 @@ void display_srv_sess_info_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL || ctr->ptr_sess_ctr == 0)
        {
-               fprintf(out_hnd, "display_srv_sess_info_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_srv_sess_info_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -1086,7 +1086,7 @@ void display_srv_sess_info_ctr(FILE *out_hnd, enum action_type action,
                }
                default:
                {
-                       fprintf(out_hnd, "display_srv_sess_info_ctr: Unknown Info Level\n");
+                       report(out_hnd, "display_srv_sess_info_ctr: Unknown Info Level\n");
                        break;
                }
        }
@@ -1106,7 +1106,7 @@ void display_server(FILE *out_hnd, enum action_type action,
                }
                case ACTION_ENUMERATE:
                {
-                       fprintf(out_hnd, "\t%-15.15s%-20s %s\n", 
+                       report(out_hnd, "\t%-15.15s%-20s %s\n", 
                                         sname, get_server_type_str(type), comment);
                        break;
                }
@@ -1131,7 +1131,7 @@ void display_share(FILE *out_hnd, enum action_type action,
                }
                case ACTION_ENUMERATE:
                {
-                       fprintf(out_hnd, "\t%-15.15s%-10.10s%s\n", 
+                       report(out_hnd, "\t%-15.15s%-10.10s%s\n", 
                                         sname, get_share_type_str(type), comment);
                        break;
                }
@@ -1159,7 +1159,7 @@ void display_share2(FILE *out_hnd, enum action_type action,
                }
                case ACTION_ENUMERATE:
                {
-                       fprintf(out_hnd, "\t%-15.15s%-10.10s%s %x %x %x %s %s\n", 
+                       report(out_hnd, "\t%-15.15s%-10.10s%s %x %x %x %s %s\n", 
                                         sname, get_share_type_str(type), comment, 
                                         perms, max_uses, num_uses, path, passwd);
                        break;
@@ -1186,7 +1186,7 @@ void display_name(FILE *out_hnd, enum action_type action,
                }
                case ACTION_ENUMERATE:
                {
-                       fprintf(out_hnd, "\t%-21.21s\n", sname);
+                       report(out_hnd, "\t%-21.21s\n", sname);
                        break;
                }
                case ACTION_FOOTER:
@@ -1210,12 +1210,12 @@ void display_alias_members(FILE *out_hnd, enum action_type action,
                {
                        if (num_mem == 0)
                        {
-                               fprintf(out_hnd, "\tNo Alias Members\n");
+                               report(out_hnd, "\tNo Alias Members\n");
                        }
                        else
                        {
-                               fprintf(out_hnd, "\tAlias Members:\n");
-                               fprintf(out_hnd, "\t-------------\n");
+                               report(out_hnd, "\tAlias Members:\n");
+                               report(out_hnd, "\t-------------\n");
                        }
                        break;
                }
@@ -1227,7 +1227,7 @@ void display_alias_members(FILE *out_hnd, enum action_type action,
                        {
                                if (sid_mem[i] != NULL)
                                {
-                                       fprintf(out_hnd, "\tMember Name:\t%s\tType:\t%s\n", 
+                                       report(out_hnd, "\tMember Name:\t%s\tType:\t%s\n", 
                                        sid_mem[i], 
                                        get_sid_name_use_str(type[i]));
                                }
@@ -1237,7 +1237,7 @@ void display_alias_members(FILE *out_hnd, enum action_type action,
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -1259,12 +1259,12 @@ void display_alias_rid_info(FILE *out_hnd, enum action_type action,
                        sid_to_string(sid_str, sid);
                        if (num_rids == 0)
                        {
-                               fprintf(out_hnd, "\tNo Aliases:\tSid %s\n", sid_str);
+                               report(out_hnd, "\tNo Aliases:\tSid %s\n", sid_str);
                        }
                        else
                        {
-                               fprintf(out_hnd, "\tAlias Info:\tSid %s\n", sid_str);
-                               fprintf(out_hnd, "\t----------\n");
+                               report(out_hnd, "\tAlias Info:\tSid %s\n", sid_str);
+                               report(out_hnd, "\t----------\n");
                        }
                        break;
                }
@@ -1274,14 +1274,14 @@ void display_alias_rid_info(FILE *out_hnd, enum action_type action,
 
                        for (i = 0; i < num_rids; i++)
                        {
-                               fprintf(out_hnd, "\tAlias RID:\t%8x\n", rid[i]);
+                               report(out_hnd, "\tAlias RID:\t%8x\n", rid[i]);
                        }
 
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -1299,12 +1299,12 @@ void display_group_members(FILE *out_hnd, enum action_type action,
                {
                        if (num_mem == 0)
                        {
-                               fprintf(out_hnd, "\tNo Members\n");
+                               report(out_hnd, "\tNo Members\n");
                        }
                        else
                        {
-                               fprintf(out_hnd, "\tMembers:\n");
-                               fprintf(out_hnd, "\t-------\n");
+                               report(out_hnd, "\tMembers:\n");
+                               report(out_hnd, "\t-------\n");
                        }
                        break;
                }
@@ -1314,7 +1314,7 @@ void display_group_members(FILE *out_hnd, enum action_type action,
 
                        for (i = 0; i < num_mem; i++)
                        {
-                               fprintf(out_hnd, "\tMember Name:\t%s\tType:\t%s\n", 
+                               report(out_hnd, "\tMember Name:\t%s\tType:\t%s\n", 
                                        name[i], get_sid_name_use_str(type[i]));
                        }
 
@@ -1322,7 +1322,7 @@ void display_group_members(FILE *out_hnd, enum action_type action,
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -1346,11 +1346,11 @@ void display_group_info1(FILE *out_hnd, enum action_type action, GROUP_INFO1 *co
                        fstring temp;
 
                        unistr2_to_ascii(temp, &info1->uni_acct_name, sizeof(temp)-1);
-                       fprintf(out_hnd, "\tGroup Name:\t%s\n", temp);
+                       report(out_hnd, "\tGroup Name:\t%s\n", temp);
                        unistr2_to_ascii(temp, &info1->uni_acct_desc, sizeof(temp)-1);
-                       fprintf(out_hnd, "\tDescription:\t%s\n", temp);
-                       fprintf(out_hnd, "\tunk1:%d\n", info1->unknown_1);
-                       fprintf(out_hnd, "\tNum Members:%d\n", info1->num_members);
+                       report(out_hnd, "\tDescription:\t%s\n", temp);
+                       report(out_hnd, "\tunk1:%d\n", info1->unknown_1);
+                       report(out_hnd, "\tNum Members:%d\n", info1->num_members);
                        break;
                }
                case ACTION_FOOTER:
@@ -1377,7 +1377,7 @@ void display_group_info4(FILE *out_hnd, enum action_type action, GROUP_INFO4 *co
                        fstring desc;
 
                        unistr2_to_ascii(desc, &info4->uni_acct_desc, sizeof(desc)-1);
-                       fprintf(out_hnd, "\tGroup Description:%s\n", 
+                       report(out_hnd, "\tGroup Description:%s\n", 
                                          desc);
                        break;
                }
@@ -1398,8 +1398,8 @@ void display_group_info_ctr(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "\tSAM Group Info\n"); 
-                       fprintf(out_hnd, "\t--------------\n");
+                       report(out_hnd, "\tSAM Group Info\n"); 
+                       report(out_hnd, "\t--------------\n");
 
                        break;
                }
@@ -1426,7 +1426,7 @@ void display_group_info_ctr(FILE *out_hnd, enum action_type action,
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -1444,12 +1444,12 @@ void display_group_rid_info(FILE *out_hnd, enum action_type action,
                {
                        if (num_gids == 0)
                        {
-                               fprintf(out_hnd, "\tNo Groups\n");
+                               report(out_hnd, "\tNo Groups\n");
                        }
                        else
                        {
-                               fprintf(out_hnd, "\tGroup Info\n");
-                               fprintf(out_hnd, "\t----------\n");
+                               report(out_hnd, "\tGroup Info\n");
+                               report(out_hnd, "\t----------\n");
                        }
                        break;
                }
@@ -1459,7 +1459,7 @@ void display_group_rid_info(FILE *out_hnd, enum action_type action,
 
                        for (i = 0; i < num_gids; i++)
                        {
-                               fprintf(out_hnd, "\tGroup RID:\t%8x attr:\t%x\n", 
+                               report(out_hnd, "\tGroup RID:\t%8x attr:\t%x\n", 
                                                                  gid[i].g_rid, gid[i].attr);
                        }
 
@@ -1467,7 +1467,7 @@ void display_group_rid_info(FILE *out_hnd, enum action_type action,
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -1486,12 +1486,12 @@ void display_alias_name_info(FILE *out_hnd, enum action_type action,
                {
                        if (num_aliases == 0)
                        {
-                               fprintf(out_hnd, "\tNo Aliases\n");
+                               report(out_hnd, "\tNo Aliases\n");
                        }
                        else
                        {
-                               fprintf(out_hnd, "\tAlias Names\n");
-                               fprintf(out_hnd, "\t----------- \n");
+                               report(out_hnd, "\tAlias Names\n");
+                               report(out_hnd, "\t----------- \n");
                        }
                        break;
                }
@@ -1501,7 +1501,7 @@ void display_alias_name_info(FILE *out_hnd, enum action_type action,
 
                        for (i = 0; i < num_aliases; i++)
                        {
-                               fprintf(out_hnd, "\tAlias Name:\t%s Attributes:\t%3d\n", 
+                               report(out_hnd, "\tAlias Name:\t%s Attributes:\t%3d\n", 
                                                                  alias_name[i], num_als_usrs[i]);
                        }
 
@@ -1509,7 +1509,7 @@ void display_alias_name_info(FILE *out_hnd, enum action_type action,
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -1532,7 +1532,7 @@ void display_alias_info3(FILE *out_hnd, enum action_type action, ALIAS_INFO3 *co
                        fstring temp;
 
                        unistr2_to_ascii(temp, &info3->uni_acct_desc, sizeof(temp)-1);
-                       fprintf(out_hnd, "\tDescription:\t%s\n", temp);
+                       report(out_hnd, "\tDescription:\t%s\n", temp);
                        break;
                }
                case ACTION_FOOTER:
@@ -1552,8 +1552,8 @@ void display_alias_info_ctr(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "\tSAM Group Info\n"); 
-                       fprintf(out_hnd, "\t--------------\n");
+                       report(out_hnd, "\tSAM Group Info\n"); 
+                       report(out_hnd, "\t--------------\n");
 
                        break;
                }
@@ -1573,7 +1573,7 @@ void display_alias_info_ctr(FILE *out_hnd, enum action_type action,
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -1589,8 +1589,8 @@ void display_sam_user_info_21(FILE *out_hnd, enum action_type action, SAM_USER_I
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "\tUser Info, Level 0x15\n");
-                       fprintf(out_hnd, "\t---------------------\n");
+                       report(out_hnd, "\tUser Info, Level 0x15\n");
+                       report(out_hnd, "\t---------------------\n");
 
                        break;
                }
@@ -1599,64 +1599,64 @@ void display_sam_user_info_21(FILE *out_hnd, enum action_type action, SAM_USER_I
                        fstring temp;
 
                        unistr2_to_ascii(temp, &usr->uni_user_name, sizeof(temp)-1);
-                       fprintf(out_hnd, "\t\tUser Name   :\t%s\n", temp);
+                       report(out_hnd, "\t\tUser Name   :\t%s\n", temp);
 
                        unistr2_to_ascii(temp, &usr->uni_full_name, sizeof(temp)-1);
-                       fprintf(out_hnd, "\t\tFull Name   :\t%s\n", temp);
+                       report(out_hnd, "\t\tFull Name   :\t%s\n", temp);
 
                        unistr2_to_ascii(temp, &usr->uni_home_dir, sizeof(temp)-1);
-                       fprintf(out_hnd, "\t\tHome Drive  :\t%s\n", temp);
+                       report(out_hnd, "\t\tHome Drive  :\t%s\n", temp);
 
                        unistr2_to_ascii(temp, &usr->uni_dir_drive, sizeof(temp)-1);
-                       fprintf(out_hnd, "\t\tDir Drive   :\t%s\n", temp);
+                       report(out_hnd, "\t\tDir Drive   :\t%s\n", temp);
 
                        unistr2_to_ascii(temp, &usr->uni_profile_path, sizeof(temp)-1);
-                       fprintf(out_hnd, "\t\tProfile Path:\t%s\n", temp);
+                       report(out_hnd, "\t\tProfile Path:\t%s\n", temp);
 
                        unistr2_to_ascii(temp, &usr->uni_logon_script, sizeof(temp)-1);
-                       fprintf(out_hnd, "\t\tLogon Script:\t%s\n", temp);
+                       report(out_hnd, "\t\tLogon Script:\t%s\n", temp);
 
                        unistr2_to_ascii(temp, &usr->uni_acct_desc, sizeof(temp)-1);
-                       fprintf(out_hnd, "\t\tDescription :\t%s\n", temp);
+                       report(out_hnd, "\t\tDescription :\t%s\n", temp);
 
                        unistr2_to_ascii(temp, &usr->uni_workstations, sizeof(temp)-1);
-                       fprintf(out_hnd, "\t\tWorkstations:\t%s\n", temp);
+                       report(out_hnd, "\t\tWorkstations:\t%s\n", temp);
 
                        unistr2_to_ascii(temp, &usr->uni_unknown_str, sizeof(temp)-1);
-                       fprintf(out_hnd, "\t\tUnknown Str :\t%s\n", temp);
+                       report(out_hnd, "\t\tUnknown Str :\t%s\n", temp);
 
                        unistr2_to_ascii(temp, &usr->uni_munged_dial, sizeof(temp)-1);
-                       fprintf(out_hnd, "\t\tRemote Dial :\t%s\n", temp);
-
-                       fprintf(out_hnd, "\t\tLogon Time               :\t%s\n", http_timestring(nt_time_to_unix(&(usr->logon_time           ))));
-                       fprintf(out_hnd, "\t\tLogoff Time              :\t%s\n", http_timestring(nt_time_to_unix(&(usr->logoff_time          ))));
-                       fprintf(out_hnd, "\t\tKickoff Time             :\t%s\n", http_timestring(nt_time_to_unix(&(usr->kickoff_time         ))));
-                       fprintf(out_hnd, "\t\tPassword last set Time   :\t%s\n", http_timestring(nt_time_to_unix(&(usr->pass_last_set_time   ))));
-                       fprintf(out_hnd, "\t\tPassword can change Time :\t%s\n", http_timestring(nt_time_to_unix(&(usr->pass_can_change_time ))));
-                       fprintf(out_hnd, "\t\tPassword must change Time:\t%s\n", http_timestring(nt_time_to_unix(&(usr->pass_must_change_time))));
+                       report(out_hnd, "\t\tRemote Dial :\t%s\n", temp);
+
+                       report(out_hnd, "\t\tLogon Time               :\t%s\n", http_timestring(nt_time_to_unix(&(usr->logon_time           ))));
+                       report(out_hnd, "\t\tLogoff Time              :\t%s\n", http_timestring(nt_time_to_unix(&(usr->logoff_time          ))));
+                       report(out_hnd, "\t\tKickoff Time             :\t%s\n", http_timestring(nt_time_to_unix(&(usr->kickoff_time         ))));
+                       report(out_hnd, "\t\tPassword last set Time   :\t%s\n", http_timestring(nt_time_to_unix(&(usr->pass_last_set_time   ))));
+                       report(out_hnd, "\t\tPassword can change Time :\t%s\n", http_timestring(nt_time_to_unix(&(usr->pass_can_change_time ))));
+                       report(out_hnd, "\t\tPassword must change Time:\t%s\n", http_timestring(nt_time_to_unix(&(usr->pass_must_change_time))));
                        
-                       fprintf(out_hnd, "\t\tunknown_2[0..31]...\n"); /* user passwords? */
+                       report(out_hnd, "\t\tunknown_2[0..31]...\n"); /* user passwords? */
 
-                       fprintf(out_hnd, "\t\tuser_rid :\t%x\n"  , usr->user_rid ); /* User ID */
-                       fprintf(out_hnd, "\t\tgroup_rid:\t%x\n"  , usr->group_rid); /* Group ID */
-                       fprintf(out_hnd, "\t\tacb_info :\t%04x\n", usr->acb_info ); /* Account Control Info */
+                       report(out_hnd, "\t\tuser_rid :\t%x\n"  , usr->user_rid ); /* User ID */
+                       report(out_hnd, "\t\tgroup_rid:\t%x\n"  , usr->group_rid); /* Group ID */
+                       report(out_hnd, "\t\tacb_info :\t%04x\n", usr->acb_info ); /* Account Control Info */
 
-                       fprintf(out_hnd, "\t\tunknown_3:\t%08x\n", usr->unknown_3); /* 0x00ff ffff */
-                       fprintf(out_hnd, "\t\tlogon_divs:\t%d\n", usr->logon_divs); /* 0x0000 00a8 which is 168 which is num hrs in a week */
-                       fprintf(out_hnd, "\t\tunknown_5:\t%08x\n", usr->unknown_5); /* 0x0002 0000 */
+                       report(out_hnd, "\t\tunknown_3:\t%08x\n", usr->unknown_3); /* 0x00ff ffff */
+                       report(out_hnd, "\t\tlogon_divs:\t%d\n", usr->logon_divs); /* 0x0000 00a8 which is 168 which is num hrs in a week */
+                       report(out_hnd, "\t\tunknown_5:\t%08x\n", usr->unknown_5); /* 0x0002 0000 */
 
-                       fprintf(out_hnd, "\t\tpadding1[0..7]...\n");
+                       report(out_hnd, "\t\tpadding1[0..7]...\n");
 
                        if (usr->ptr_logon_hrs)
                        {
-                               fprintf(out_hnd, "\t\tlogon_hrs[0..%d]...\n", usr->logon_hrs.len);
+                               report(out_hnd, "\t\tlogon_hrs[0..%d]...\n", usr->logon_hrs.len);
                        }
 
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -1740,7 +1740,7 @@ void display_sec_access(FILE *out_hnd, enum action_type action, SEC_ACCESS *cons
                }
                case ACTION_ENUMERATE:
                {
-                       fprintf(out_hnd, "\t\tPermissions:\t%s\n", 
+                       report(out_hnd, "\t\tPermissions:\t%s\n", 
                                get_sec_mask_str(info->mask));
                }
                case ACTION_FOOTER:
@@ -1759,7 +1759,7 @@ void display_sec_ace(FILE *out_hnd, enum action_type action, SEC_ACE *const ace)
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "\tACE\n");
+                       report(out_hnd, "\tACE\n");
                        break;
                }
                case ACTION_ENUMERATE:
@@ -1771,7 +1771,7 @@ void display_sec_ace(FILE *out_hnd, enum action_type action, SEC_ACE *const ace)
                        display_sec_access(out_hnd, ACTION_FOOTER   , &ace->info);
 
                        sid_to_string(sid_str, &ace->sid);
-                       fprintf(out_hnd, "\t\tSID:\t%s\n", sid_str);
+                       report(out_hnd, "\t\tSID:\t%s\n", sid_str);
                }
                case ACTION_FOOTER:
                {
@@ -1789,9 +1789,9 @@ void display_sec_acl(FILE *out_hnd, enum action_type action, SEC_ACL *const sec_
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "\tACL\tNum ACEs:\t%d\trevision:\t%x\n", 
+                       report(out_hnd, "\tACL\tNum ACEs:\t%d\trevision:\t%x\n", 
                                         sec_acl->num_aces, sec_acl->revision); 
-                       fprintf(out_hnd, "\t---\n");
+                       report(out_hnd, "\t---\n");
 
                        break;
                }
@@ -1812,7 +1812,7 @@ void display_sec_acl(FILE *out_hnd, enum action_type action, SEC_ACL *const sec_
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -1827,9 +1827,9 @@ void display_sec_desc(FILE *out_hnd, enum action_type action, SEC_DESC *const se
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "\tSecurity Descriptor\trevision:\t%x\ttype:\t%x\n", 
+                       report(out_hnd, "\tSecurity Descriptor\trevision:\t%x\ttype:\t%x\n", 
                                         sec->revision, sec->type); 
-                       fprintf(out_hnd, "\t-------------------\n");
+                       report(out_hnd, "\t-------------------\n");
 
                        break;
                }
@@ -1852,19 +1852,19 @@ void display_sec_desc(FILE *out_hnd, enum action_type action, SEC_DESC *const se
                        if (sec->off_owner_sid != 0)
                        {
                                sid_to_string(sid_str, sec->owner_sid);
-                               fprintf(out_hnd, "\tOwner SID:\t%s\n", sid_str);
+                               report(out_hnd, "\tOwner SID:\t%s\n", sid_str);
                        }
                        if (sec->off_grp_sid != 0)
                        {
                                sid_to_string(sid_str, sec->grp_sid);
-                               fprintf(out_hnd, "\tParent SID:\t%s\n", sid_str);
+                               report(out_hnd, "\tParent SID:\t%s\n", sid_str);
                        }
                                
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -1926,7 +1926,7 @@ static void print_reg_value(FILE *out_hnd, const char *val_name,
                {
                        unibuf_to_ascii(valstr, value->buffer, 
                                        MIN(value->buf_len, sizeof(valstr)-1));
-                       fprintf(out_hnd, "\t%s:\t%s:\t%s\n", val_name, type, valstr);
+                       report(out_hnd, "\t%s:\t%s:\t%s\n", val_name, type, valstr);
                        break;
                }
 
@@ -1935,13 +1935,13 @@ static void print_reg_value(FILE *out_hnd, const char *val_name,
                {
                        if (value->buf_len <= 8)
                        {
-                               fprintf(out_hnd, "\t%s:\t%s:\t", val_name, type);
+                               report(out_hnd, "\t%s:\t%s:\t", val_name, type);
                                out_data(out_hnd, (const char*)value->buffer, 
                                         value->buf_len, 8);
                        }
                        else
                        {
-                               fprintf(out_hnd, "\t%s:\t%s:\n", val_name, type);
+                               report(out_hnd, "\t%s:\t%s:\n", val_name, type);
                                out_data(out_hnd, (const char*)value->buffer, 
                                         value->buf_len, 16);
                        }
@@ -1950,14 +1950,14 @@ static void print_reg_value(FILE *out_hnd, const char *val_name,
 
                case 0x04: /* uint32 */
                {
-                       fprintf(out_hnd, "\t%s:\t%s:\t0x%08x\n", val_name, type, buffer2_to_uint32(value));
+                       report(out_hnd, "\t%s:\t%s:\t0x%08x\n", val_name, type, buffer2_to_uint32(value));
                        break;
                }
 
                case 0x07: /* multiunistr */
                {
                        buffer2_to_multistr(valstr, value, sizeof(valstr)-1);
-                       fprintf(out_hnd, "\t%s:\t%s:\t%s\n", val_name, type, valstr);
+                       report(out_hnd, "\t%s:\t%s:\t%s\n", val_name, type, valstr);
                        break;
                }
        }
@@ -2002,7 +2002,7 @@ void display_reg_key_info(FILE *out_hnd, enum action_type action,
                }
                case ACTION_ENUMERATE:
                {
-                       fprintf(out_hnd, "\t%s\t(%s)\n", 
+                       report(out_hnd, "\t%s\t(%s)\n", 
                                key_name, http_timestring(key_mod_time));
                        break;
                }
@@ -2047,8 +2047,8 @@ void display_query_svc_cfg(FILE *out_hnd, enum action_type action,
                        fstring service;
 
                        unistr2_to_ascii(service, &cfg->uni_display_name, sizeof(service)-1);
-                       fprintf(out_hnd, "\tService:\t%s\n", service);
-                       fprintf(out_hnd, "\t-------\n");
+                       report(out_hnd, "\tService:\t%s\n", service);
+                       report(out_hnd, "\t-------\n");
                        break;
                }
                case ACTION_ENUMERATE:
@@ -2056,27 +2056,27 @@ void display_query_svc_cfg(FILE *out_hnd, enum action_type action,
                        fstring temp;
 
                        unistr2_to_ascii(temp, &cfg->uni_bin_path_name, sizeof(temp)-1);
-                       fprintf(out_hnd, "\tPath:\t%s\n", temp);
+                       report(out_hnd, "\tPath:\t%s\n", temp);
 
                        unistr2_to_ascii(temp, &cfg->uni_load_order_grp, sizeof(temp)-1);
-                       fprintf(out_hnd, "\tLoad Order:\t%s\n", temp);
+                       report(out_hnd, "\tLoad Order:\t%s\n", temp);
 
                        unistr2_to_ascii(temp, &cfg->uni_dependencies, sizeof(temp)-1);
-                       fprintf(out_hnd, "\tDependencies:\t%s\n", temp);
+                       report(out_hnd, "\tDependencies:\t%s\n", temp);
 
                        unistr2_to_ascii(temp, &cfg->uni_service_start_name, sizeof(temp)-1);
-                       fprintf(out_hnd, "\tService Start:\t%s\n", temp);
+                       report(out_hnd, "\tService Start:\t%s\n", temp);
 
-                       fprintf(out_hnd, "\tService Type:\t%d\n", cfg->service_type);
-                       fprintf(out_hnd, "\tStart Type:\t%s\n" , get_svc_start_type_str(cfg->start_type));
-                       fprintf(out_hnd, "\tError Control:\t%d\n" , cfg->error_control);
-                       fprintf(out_hnd, "\tTag Id:\t%d\n" , cfg->tag_id);
+                       report(out_hnd, "\tService Type:\t%d\n", cfg->service_type);
+                       report(out_hnd, "\tStart Type:\t%s\n" , get_svc_start_type_str(cfg->start_type));
+                       report(out_hnd, "\tError Control:\t%d\n" , cfg->error_control);
+                       report(out_hnd, "\tTag Id:\t%d\n" , cfg->tag_id);
                        break;
 
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -2100,11 +2100,11 @@ void display_svc_info(FILE *out_hnd, enum action_type action,
 
                        unistr_to_ascii(name, svc->uni_srvc_name.buffer, 
                                        sizeof(name)-1); /* service name */
-                       fprintf(out_hnd, "\t%s:", name);
+                       report(out_hnd, "\t%s:", name);
 
                        unistr_to_ascii(name, svc->uni_disp_name.buffer, 
                                        sizeof(name)-1); /* display name */
-                       fprintf(out_hnd, "\t%s\n", name);
+                       report(out_hnd, "\t%s\n", name);
                        break;
                }
                case ACTION_FOOTER:
@@ -2189,7 +2189,8 @@ static char *get_at_days_str(uint32 monthdays, uint8 weekdays, uint8 flags)
  display scheduled jobs
  ****************************************************************************/
 void display_at_enum_info(FILE *out_hnd, enum action_type action, 
-                    uint32 num_jobs, const AT_ENUM_INFO *const jobs, const fstring *const commands)
+                               uint32 num_jobs, const AT_ENUM_INFO *const jobs,
+                               char *const *const commands)
 {
        switch (action)
        {
@@ -2197,12 +2198,12 @@ void display_at_enum_info(FILE *out_hnd, enum action_type action,
                {
                        if (num_jobs == 0)
                        {
-                               fprintf(out_hnd, "\tNo Jobs.\n");
+                               report(out_hnd, "\tNo Jobs.\n");
                        }
                        else
                        {
-                               fprintf(out_hnd, "\tJobs:\n");
-                               fprintf(out_hnd, "\t-----\n");
+                               report(out_hnd, "\tJobs:\n");
+                               report(out_hnd, "\t-----\n");
                        }
                        break;
                }
@@ -2214,7 +2215,7 @@ void display_at_enum_info(FILE *out_hnd, enum action_type action,
                        {
                                const AT_JOB_INFO *const job = &jobs[i].info;
 
-                               fprintf(out_hnd, "\t%d\t%s\t%s\t%s\n", 
+                               report(out_hnd, "\t%d\t%s\t%s\t%s\n", 
                                        jobs[i].jobid, 
                                        get_at_time_str(job->time), 
                                        get_at_days_str(job->monthdays, 
@@ -2227,7 +2228,7 @@ void display_at_enum_info(FILE *out_hnd, enum action_type action,
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -2243,37 +2244,37 @@ void display_at_job_info(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "\tJob Information:\n");
-                       fprintf(out_hnd, "\t----------------\n");
+                       report(out_hnd, "\tJob Information:\n");
+                       report(out_hnd, "\t----------------\n");
                        break;
                }
                case ACTION_ENUMERATE:
                {
-                       fprintf(out_hnd, "\tTime:        %s\n", 
+                       report(out_hnd, "\tTime:        %s\n", 
                                get_at_time_str(job->time));
 
-                       fprintf(out_hnd, "\tSchedule:    %s\n", 
+                       report(out_hnd, "\tSchedule:    %s\n", 
                                get_at_days_str(job->monthdays, job->weekdays, 
                                                job->flags));
 
-                       fprintf(out_hnd, "\tStatus:      %s", 
+                       report(out_hnd, "\tStatus:      %s", 
                                (job->flags & JOB_EXEC_ERR) ? "Failed" : "OK");
 
                        if (job->flags & JOB_RUNS_TODAY)
                        {
-                               fprintf(out_hnd, ", Runs Today");
+                               report(out_hnd, ", Runs Today");
                        }
 
-                       fprintf(out_hnd, "\n\tInteractive: %s\n", 
+                       report(out_hnd, "\n\tInteractive: %s\n", 
                                (job->flags & JOB_NONINTERACTIVE) ? "No"
                                : "Yes");
 
-                       fprintf(out_hnd, "\tCommand:     %s\n", command);
+                       report(out_hnd, "\tCommand:     %s\n", command);
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -2288,68 +2289,68 @@ void display_eventlog_eventrecord(FILE *out_hnd, enum action_type action, EVENTL
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "\tevent log records\n"); 
-                       fprintf(out_hnd, "\t-----------------\n");
+                       report(out_hnd, "\tevent log records\n"); 
+                       report(out_hnd, "\t-----------------\n");
                        break;
                }
                case ACTION_ENUMERATE:
                {
                        fstring temp;
-                       fprintf(out_hnd, "\t\trecord n.:\t%d\n", ev->recordnumber);
+                       report(out_hnd, "\t\trecord n.:\t%d\n", ev->recordnumber);
                        
-                       fprintf(out_hnd, "\t\tsource\teventnumber\teventtype\tcategory\n");
+                       report(out_hnd, "\t\tsource\teventnumber\teventtype\tcategory\n");
                        unistr_to_ascii(temp, ev->sourcename.buffer, sizeof(temp)-1);
                        
-                       fprintf(out_hnd, "\t\t%s", temp);
+                       report(out_hnd, "\t\t%s", temp);
                        
-                       fprintf(out_hnd, "\t%d\t\t", ev->eventnumber&0x0000FFFF);
+                       report(out_hnd, "\t%d\t\t", ev->eventnumber&0x0000FFFF);
                        
                        switch (ev->eventtype)
                        {
                                case EVENTLOG_OK:
-                                       fprintf(out_hnd, "Normal");
+                                       report(out_hnd, "Normal");
                                        break;
  
                                case EVENTLOG_ERROR:
-                                       fprintf(out_hnd, "Error");
+                                       report(out_hnd, "Error");
                                        break;
                        
                                case EVENTLOG_WARNING:
-                                       fprintf(out_hnd, "Warning");
+                                       report(out_hnd, "Warning");
                                        break;
                        
                                case EVENTLOG_INFORMATION:
-                                       fprintf(out_hnd, "Information");
+                                       report(out_hnd, "Information");
                                        break;
                        
                                case EVENTLOG_AUDIT_OK:
-                                       fprintf(out_hnd, "Audit Normal");
+                                       report(out_hnd, "Audit Normal");
                                        break;
                        
                                case EVENTLOG_AUDIT_ERROR:
-                                       fprintf(out_hnd, "Audit Error\n");
+                                       report(out_hnd, "Audit Error\n");
                                        break;                  
                        }
                        
-                       fprintf(out_hnd, "\t%d\n", ev->category);
-                       fprintf(out_hnd, "\t\tcreationtime:\t%s\n", http_timestring(ev->creationtime));
-                       fprintf(out_hnd, "\t\twritetime:\t%s\n", http_timestring(ev->writetime));
+                       report(out_hnd, "\t%d\n", ev->category);
+                       report(out_hnd, "\t\tcreationtime:\t%s\n", http_timestring(ev->creationtime));
+                       report(out_hnd, "\t\twritetime:\t%s\n", http_timestring(ev->writetime));
 
                        unistr_to_ascii(temp, ev->computername.buffer, sizeof(temp)-1);
-                       fprintf(out_hnd, "\t\tcomputer:\t%s\n", temp);
+                       report(out_hnd, "\t\tcomputer:\t%s\n", temp);
 
                        if (ev->num_of_strings!=0)
                        {
                                unistr_to_ascii(temp, ev->strings.buffer, sizeof(temp)-1);
-                               fprintf(out_hnd, "\t\tdescription:\t%s\n", temp);
+                               report(out_hnd, "\t\tdescription:\t%s\n", temp);
                        }
 
-                       fprintf(out_hnd, "\n");                 
+                       report(out_hnd, "\n");                  
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -2377,13 +2378,13 @@ void display_sam_sync_ctr(FILE *out_hnd, enum action_type action,
                                case 1:
                                {
                                        unistr2_to_ascii(name, &(ctr->domain_info.uni_dom_name), sizeof(name)-1); 
-                                       fprintf(out_hnd, "Domain: %s\n", name);
+                                       report(out_hnd, "Domain: %s\n", name);
                                        break;
                                }
                                case 2:
                                {
                                        unistr2_to_ascii(name, &(ctr->group_info.uni_grp_name), sizeof(name)-1); 
-                                       fprintf(out_hnd, "Group: %s\n", name);
+                                       report(out_hnd, "Group: %s\n", name);
                                        break;
                                }
                                case 5:
@@ -2392,7 +2393,7 @@ void display_sam_sync_ctr(FILE *out_hnd, enum action_type action,
                                        unsigned char nt_pwd[16];
 
                                        unistr2_to_ascii(name, &(ctr->account_info.uni_acct_name), sizeof(name)-1); 
-                                       fprintf(out_hnd, "Account: %s\n", name);
+                                       report(out_hnd, "Account: %s\n", name);
 
                                        sam_pwd_hash(ctr->account_info.user_rid, ctr->account_info.pass.buf_lm_pwd, lm_pwd, 0);
                                        out_struct(out_hnd, lm_pwd, 16, 8);
@@ -2422,8 +2423,8 @@ void display_sam_sync(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "\tSAM Database Sync\n"); 
-                       fprintf(out_hnd, "\t-----------------\n");
+                       report(out_hnd, "\tSAM Database Sync\n"); 
+                       report(out_hnd, "\t-----------------\n");
 
                        break;
                }
@@ -2440,7 +2441,7 @@ void display_sam_sync(FILE *out_hnd, enum action_type action,
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -2462,30 +2463,30 @@ void display_sam_unk_info_2(FILE *out_hnd, enum action_type action,
                {
                        fstring name;
                        unistr2_to_ascii(name, &(info2->uni_domain), sizeof(name)-1); 
-                       fprintf(out_hnd, "Domain:\t%s\n", name);
+                       report(out_hnd, "Domain:\t%s\n", name);
 
                        unistr2_to_ascii(name, &(info2->uni_server), sizeof(name)-1); 
-                       fprintf(out_hnd, "Server:\t%s\n", name);
+                       report(out_hnd, "Server:\t%s\n", name);
 
-                       fprintf(out_hnd, "Total Users:\t%d\n", info2->num_domain_usrs);
-                       fprintf(out_hnd, "Total Groups:\t%d\n", info2->num_domain_grps);
-                       fprintf(out_hnd, "Total Aliases:\t%d\n", info2->num_local_grps);
+                       report(out_hnd, "Total Users:\t%d\n", info2->num_domain_usrs);
+                       report(out_hnd, "Total Groups:\t%d\n", info2->num_domain_grps);
+                       report(out_hnd, "Total Aliases:\t%d\n", info2->num_local_grps);
 
-                       fprintf(out_hnd, "Sequence No:\t%d\n", info2->seq_num);
+                       report(out_hnd, "Sequence No:\t%d\n", info2->seq_num);
 
-                       fprintf(out_hnd, "Unknown 0:\t0x%x\n", info2->unknown_0);
-                       fprintf(out_hnd, "Unknown 1:\t0x%x\n", info2->unknown_1);
-                       fprintf(out_hnd, "Unknown 2:\t0x%x\n", info2->unknown_2);
-                       fprintf(out_hnd, "Unknown 3:\t0x%x\n", info2->unknown_3);
-                       fprintf(out_hnd, "Unknown 4:\t0x%x\n", info2->unknown_4);
-                       fprintf(out_hnd, "Unknown 5:\t0x%x\n", info2->unknown_5);
-                       fprintf(out_hnd, "Unknown 6:\t0x%x\n", info2->unknown_6);
+                       report(out_hnd, "Unknown 0:\t0x%x\n", info2->unknown_0);
+                       report(out_hnd, "Unknown 1:\t0x%x\n", info2->unknown_1);
+                       report(out_hnd, "Unknown 2:\t0x%x\n", info2->unknown_2);
+                       report(out_hnd, "Unknown 3:\t0x%x\n", info2->unknown_3);
+                       report(out_hnd, "Unknown 4:\t0x%x\n", info2->unknown_4);
+                       report(out_hnd, "Unknown 5:\t0x%x\n", info2->unknown_5);
+                       report(out_hnd, "Unknown 6:\t0x%x\n", info2->unknown_6);
 
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -2501,8 +2502,8 @@ void display_sam_unk_ctr(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "\tSAM Domain Info\n"); 
-                       fprintf(out_hnd, "\t---------------\n");
+                       report(out_hnd, "\tSAM Domain Info\n"); 
+                       report(out_hnd, "\t---------------\n");
 
                        break;
                }
@@ -2522,7 +2523,120 @@ void display_sam_unk_ctr(FILE *out_hnd, enum action_type action,
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
+                       break;
+               }
+       }
+}
+
+/****************************************************************************
+sam info level 1 display function
+****************************************************************************/
+void display_sam_info_1(FILE *out_hnd, enum action_type action, 
+               SAM_ENTRY1 *const e1, SAM_STR1 *const s1)
+{
+       if (e1 == NULL)
+       {
+               return;
+       }
+
+       switch (action)
+       {
+               case ACTION_HEADER:
+               {
+                       report(out_hnd, "Sam Level 1:\n");
+
+                       break;
+               }
+               case ACTION_ENUMERATE:
+               {
+                       fstring tmp;
+
+                       report(out_hnd, "\tIndex:\t%d\n", e1->user_idx);
+                       report(out_hnd, "\tRID:\t0x%x\n", e1->rid_user);
+                       report(out_hnd, "\tACB:\t%s\n", 
+                                    pwdb_encode_acct_ctrl(e1->acb_info,
+                                    NEW_PW_FORMAT_SPACE_PADDED_LEN));
+
+                       unistr_to_ascii(tmp, s1->uni_acct_name.buffer, sizeof(tmp)-1);
+                       report(out_hnd, "\tAccount Name:\t%s\n", tmp);
+                       unistr_to_ascii(tmp, s1->uni_full_name.buffer, sizeof(tmp)-1);
+                       report(out_hnd, "\tFull Name:\t%s\n", tmp);
+                       unistr_to_ascii(tmp, s1->uni_acct_desc.buffer, sizeof(tmp)-1);
+                       report(out_hnd, "\tUser Description:\t%s\n", tmp);
+
+                       break;
+               }
+               case ACTION_FOOTER:
+               {
+                       report(out_hnd, "\n");
+                       break;
+               }
+       }
+
+}
+
+/****************************************************************************
+connection info level 1 container display function
+****************************************************************************/
+void display_sam_info_1_ctr(FILE *out_hnd, enum action_type action, 
+                               uint32 count, SAM_DISPINFO_1 *const ctr)
+{
+       if (ctr == NULL)
+       {
+               report(out_hnd, "display_sam_info_1_ctr: unavailable due to an internal error\n");
+               return;
+       }
+
+       switch (action)
+       {
+               case ACTION_HEADER:
+               {
+                       break;
+               }
+               case ACTION_ENUMERATE:
+               {
+                       int i;
+
+                       for (i = 0; i < count; i++)
+                       {
+                               display_sam_info_1(out_hnd, ACTION_HEADER   , &ctr->sam[i], &ctr->str[i]);
+                               display_sam_info_1(out_hnd, ACTION_ENUMERATE, &ctr->sam[i], &ctr->str[i]);
+                               display_sam_info_1(out_hnd, ACTION_FOOTER   , &ctr->sam[i], &ctr->str[i]);
+                       }
+                       break;
+               }
+               case ACTION_FOOTER:
+               {
+                       break;
+               }
+       }
+}
+
+/****************************************************************************
+connection info container display function
+****************************************************************************/
+void display_sam_disp_info_ctr(FILE *out_hnd, enum action_type action, 
+                               uint16 level, uint32 count,
+                               SAM_DISPINFO_CTR *const ctr)
+{
+       if (ctr == NULL)
+       {
+               report(out_hnd, "display_sam_info_ctr: unavailable due to an internal error\n");
+               return;
+       }
+
+       switch (level)
+       {
+               case 1:
+               {
+                       display_sam_info_1_ctr(out_hnd, action, 
+                                          count, ctr->sam.info1);
+                       break;
+               }
+               default:
+               {
+                       report(out_hnd, "display_sam_info_ctr: Unknown Info Level\n");
                        break;
                }
        }
@@ -2543,7 +2657,7 @@ void display_print_info_0(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "Printer Info Level 0:\n");
+                       report(out_hnd, "Printer Info Level 0:\n");
 
                        break;
                }
@@ -2555,15 +2669,15 @@ void display_print_info_0(FILE *out_hnd, enum action_type action,
                        unistr_to_ascii(name, i0->printername.buffer, sizeof(name)-1);
                        unistr_to_ascii(serv, i0->servername .buffer, sizeof(serv)-1);
 
-                       fprintf(out_hnd, "\tprinter name:\t%s\n", name);
-                       fprintf(out_hnd, "\tserver name:\t%s\n", serv);
-                       fprintf(out_hnd, "\t[Other info not displayed]\n");
+                       report(out_hnd, "\tprinter name:\t%s\n", name);
+                       report(out_hnd, "\tserver name:\t%s\n", serv);
+                       report(out_hnd, "\t[Other info not displayed]\n");
 
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -2585,7 +2699,7 @@ void display_print_info_1(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "Printer Info Level 1:\n");
+                       report(out_hnd, "Printer Info Level 1:\n");
 
                        break;
                }
@@ -2599,16 +2713,16 @@ void display_print_info_1(FILE *out_hnd, enum action_type action,
                        unistr_to_ascii(name, i1->name       .buffer, sizeof(name)-1);
                        unistr_to_ascii(comm, i1->comment    .buffer, sizeof(comm)-1);
 
-                       fprintf(out_hnd, "\tflags:\t%d\n", i1->flags);
-                       fprintf(out_hnd, "\tname:\t%s\n", name);
-                       fprintf(out_hnd, "\tdescription:\t%s\n", desc);
-                       fprintf(out_hnd, "\tcomment:\t%s\n", comm);
+                       report(out_hnd, "\tflags:\t%d\n", i1->flags);
+                       report(out_hnd, "\tname:\t%s\n", name);
+                       report(out_hnd, "\tdescription:\t%s\n", desc);
+                       report(out_hnd, "\tcomment:\t%s\n", comm);
 
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -2623,7 +2737,7 @@ void display_printer_info_0_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_printer_info_0_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_printer_info_0_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -2660,7 +2774,7 @@ void display_printer_info_1_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_printer_info_1_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_printer_info_1_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -2698,7 +2812,7 @@ void display_printer_info_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_printer_info_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_printer_info_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -2718,7 +2832,7 @@ void display_printer_info_ctr(FILE *out_hnd, enum action_type action,
                }
                default:
                {
-                       fprintf(out_hnd, "display_printer_info_ctr: Unknown Info Level\n");
+                       report(out_hnd, "display_printer_info_ctr: Unknown Info Level\n");
                        break;
                }
        }
@@ -2739,7 +2853,7 @@ void display_job_info_2(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "Job Info Level 2:\n");
+                       report(out_hnd, "Job Info Level 2:\n");
 
                        break;
                }
@@ -2747,49 +2861,49 @@ void display_job_info_2(FILE *out_hnd, enum action_type action,
                {
                        fstring tmp;
 
-                       fprintf(out_hnd, "\tjob id:\t%d\n", i2->jobid);
+                       report(out_hnd, "\tjob id:\t%d\n", i2->jobid);
                        unistr_to_ascii(tmp, i2->printername.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tprinter name:\t%s\n", tmp);
+                       report(out_hnd, "\tprinter name:\t%s\n", tmp);
                        unistr_to_ascii(tmp, i2->machinename.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tmachine name:\t%s\n", tmp);
+                       report(out_hnd, "\tmachine name:\t%s\n", tmp);
                        unistr_to_ascii(tmp, i2->username.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tusername:\t%s\n", tmp);
+                       report(out_hnd, "\tusername:\t%s\n", tmp);
                        unistr_to_ascii(tmp, i2->document.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tdocument:\t%s\n", tmp);
+                       report(out_hnd, "\tdocument:\t%s\n", tmp);
                        unistr_to_ascii(tmp, i2->notifyname.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tnotify name:\t%s\n", tmp);
+                       report(out_hnd, "\tnotify name:\t%s\n", tmp);
                        unistr_to_ascii(tmp, i2->datatype.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tdata type:\t%s\n", tmp);
+                       report(out_hnd, "\tdata type:\t%s\n", tmp);
                        unistr_to_ascii(tmp, i2->printprocessor.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tprint processor:\t%s\n", tmp);
+                       report(out_hnd, "\tprint processor:\t%s\n", tmp);
                        unistr_to_ascii(tmp, i2->parameters.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tparameters:\t%s\n", tmp);
+                       report(out_hnd, "\tparameters:\t%s\n", tmp);
                        unistr_to_ascii(tmp, i2->drivername.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tdriver name:\t%s\n", tmp);
-                       fprintf(out_hnd, "\tDevice Mode:\tNOT DISPLAYED YET\n");
+                       report(out_hnd, "\tdriver name:\t%s\n", tmp);
+                       report(out_hnd, "\tDevice Mode:\tNOT DISPLAYED YET\n");
 /*
                        DEVICEMODE *devmode;
 */
                        unistr_to_ascii(tmp, i2->text_status.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\ttext status:\t%s\n", tmp);
+                       report(out_hnd, "\ttext status:\t%s\n", tmp);
                /*      SEC_DESC sec_desc;*/
-                       fprintf(out_hnd, "\tstatus:\t%d\n", i2->status);
-                       fprintf(out_hnd, "\tpriority:\t%d\n", i2->priority);
-                       fprintf(out_hnd, "\tposition:\t%d\n", i2->position);
-                       fprintf(out_hnd, "\tstarttime:\t%d\n", i2->starttime);
-                       fprintf(out_hnd, "\tuntiltime:\t%d\n", i2->untiltime);
-                       fprintf(out_hnd, "\ttotalpages:\t%d\n", i2->totalpages);
-                       fprintf(out_hnd, "\tsize:\t%d\n", i2->size);
+                       report(out_hnd, "\tstatus:\t%d\n", i2->status);
+                       report(out_hnd, "\tpriority:\t%d\n", i2->priority);
+                       report(out_hnd, "\tposition:\t%d\n", i2->position);
+                       report(out_hnd, "\tstarttime:\t%d\n", i2->starttime);
+                       report(out_hnd, "\tuntiltime:\t%d\n", i2->untiltime);
+                       report(out_hnd, "\ttotalpages:\t%d\n", i2->totalpages);
+                       report(out_hnd, "\tsize:\t%d\n", i2->size);
 /*
                        SYSTEMTIME submitted;
 */
-                       fprintf(out_hnd, "\tsubmitted:\tNOT DISPLAYED YET\n");
-                       fprintf(out_hnd, "\ttimeelapsed:\t%d\n", i2->timeelapsed);
-                       fprintf(out_hnd, "\tpagesprinted:\t%d\n", i2->pagesprinted);
+                       report(out_hnd, "\tsubmitted:\tNOT DISPLAYED YET\n");
+                       report(out_hnd, "\ttimeelapsed:\t%d\n", i2->timeelapsed);
+                       report(out_hnd, "\tpagesprinted:\t%d\n", i2->pagesprinted);
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -2811,7 +2925,7 @@ void display_job_info_1(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "Job Info Level 1:\n");
+                       report(out_hnd, "Job Info Level 1:\n");
 
                        break;
                }
@@ -2819,34 +2933,34 @@ void display_job_info_1(FILE *out_hnd, enum action_type action,
                {
                        fstring tmp;
 
-                       fprintf(out_hnd, "\tjob id:\t%d\n", i1->jobid);
+                       report(out_hnd, "\tjob id:\t%d\n", i1->jobid);
                        unistr_to_ascii(tmp, i1->printername.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tprinter name:\t%s\n", tmp);
+                       report(out_hnd, "\tprinter name:\t%s\n", tmp);
                        unistr_to_ascii(tmp, i1->machinename.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tmachine name:\t%s\n", tmp);
+                       report(out_hnd, "\tmachine name:\t%s\n", tmp);
                        unistr_to_ascii(tmp, i1->username.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tusername:\t%s\n", tmp);
+                       report(out_hnd, "\tusername:\t%s\n", tmp);
                        unistr_to_ascii(tmp, i1->document.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tdocument:\t%s\n", tmp);
+                       report(out_hnd, "\tdocument:\t%s\n", tmp);
                        unistr_to_ascii(tmp, i1->datatype.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\tdata type:\t%s\n", tmp);
+                       report(out_hnd, "\tdata type:\t%s\n", tmp);
                        unistr_to_ascii(tmp, i1->text_status.buffer, sizeof(tmp)-1);
-                       fprintf(out_hnd, "\ttext status:\t%s\n", tmp);
-                       fprintf(out_hnd, "\tstatus:\t%d\n", i1->status);
-                       fprintf(out_hnd, "\tpriority:\t%d\n", i1->priority);
-                       fprintf(out_hnd, "\tposition:\t%d\n", i1->position);
-                       fprintf(out_hnd, "\ttotalpages:\t%d\n", i1->totalpages);
+                       report(out_hnd, "\ttext status:\t%s\n", tmp);
+                       report(out_hnd, "\tstatus:\t%d\n", i1->status);
+                       report(out_hnd, "\tpriority:\t%d\n", i1->priority);
+                       report(out_hnd, "\tposition:\t%d\n", i1->position);
+                       report(out_hnd, "\ttotalpages:\t%d\n", i1->totalpages);
 /*
                        SYSTEMTIME submitted;
 */
-                       fprintf(out_hnd, "\tsubmitted:\tNOT DISPLAYED YET\n");
-                       fprintf(out_hnd, "\tpagesprinted:\t%d\n", i1->pagesprinted);
+                       report(out_hnd, "\tsubmitted:\tNOT DISPLAYED YET\n");
+                       report(out_hnd, "\tpagesprinted:\t%d\n", i1->pagesprinted);
 
                        break;
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
@@ -2861,7 +2975,7 @@ void display_job_info_2_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_job_info_2_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_job_info_2_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -2898,7 +3012,7 @@ void display_job_info_1_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_job_info_1_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_job_info_1_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -2936,7 +3050,7 @@ void display_job_info_ctr(FILE *out_hnd, enum action_type action,
 {
        if (ctr == NULL)
        {
-               fprintf(out_hnd, "display_job_info_ctr: unavailable due to an internal error\n");
+               report(out_hnd, "display_job_info_ctr: unavailable due to an internal error\n");
                return;
        }
 
@@ -2956,7 +3070,7 @@ void display_job_info_ctr(FILE *out_hnd, enum action_type action,
                }
                default:
                {
-                       fprintf(out_hnd, "display_job_info_ctr: Unknown Info Level\n");
+                       report(out_hnd, "display_job_info_ctr: Unknown Info Level\n");
                        break;
                }
        }
@@ -2972,8 +3086,8 @@ void display_job_info_ctr(FILE *out_hnd, enum action_type action,
        {
                case ACTION_HEADER:
                {
-                       fprintf(out_hnd, "\t\n"); 
-                       fprintf(out_hnd, "\t-------------------\n");
+                       report(out_hnd, "\t\n"); 
+                       report(out_hnd, "\t-------------------\n");
 
                        break;
                }
@@ -2983,7 +3097,7 @@ void display_job_info_ctr(FILE *out_hnd, enum action_type action,
                }
                case ACTION_FOOTER:
                {
-                       fprintf(out_hnd, "\n");
+                       report(out_hnd, "\n");
                        break;
                }
        }
index 490c52ab3d305d590c3c85c17c6b9da04fb847e9..70f7d0d87e86e73f1e2c981740d34d2cc2e3464b 100644 (file)
@@ -45,6 +45,7 @@ extern int DEBUGLEVEL;
 static int process_tok(fstring tok);
 static void cmd_help(struct client_info *info, int argc, char *argv[]);
 static void cmd_quit(struct client_info *info, int argc, char *argv[]);
+static void cmd_set (struct client_info *info, int argc, char *argv[]);
 
 static struct user_credentials usr;
 
@@ -498,6 +499,12 @@ commands[] =
                {COMPL_NONE, COMPL_NONE}
        },
 
+       {
+               "rpcclient",
+               cmd_set,
+               "run rpcclient inside rpcclient (change options etc.)",
+               {COMPL_NONE, COMPL_NONE}
+       },
        /*
         * bye bye
         */
@@ -642,6 +649,9 @@ static int process_tok(char *tok)
     return(-2);
 }
 
+/* command options mask */
+static uint32 cmd_set_options = 0xffffffff;
+
 /****************************************************************************
   process commands from the client
 ****************************************************************************/
@@ -651,6 +661,9 @@ static BOOL do_command(struct client_info *info, char *line)
        char *ptr = line;
        pstring tok;
 
+       cmd_argc = 0;
+       cmd_argv = NULL;
+
        /* get the first part of the command */
        if (!next_token(&ptr,tok,NULL, sizeof(tok)))
        {
@@ -668,10 +681,15 @@ static BOOL do_command(struct client_info *info, char *line)
                return False;
        }
 
+       cmd_set_options = 0x0;
+
        if ((i = process_tok(cmd_argv[0])) >= 0)
        {
-               optind = -1;
-               commands[i].fn(info, (uint32)cmd_argc, cmd_argv);
+               int argc = (int)cmd_argc;
+               char **argv = cmd_argv;
+               optind = 0;
+
+               commands[i].fn(info, argc, argv);
        }
        else if (i == -2)
        {
@@ -683,8 +701,6 @@ static BOOL do_command(struct client_info *info, char *line)
        }
 
        free_char_array(cmd_argc, cmd_argv);
-       cmd_argc = 0;
-       cmd_argv = NULL;
 
        return True;
 }
@@ -728,28 +744,31 @@ static BOOL process( struct client_info *info, char *cmd_str)
        pstring line;
        char *cmd = cmd_str;
 
-       if (cmd[0] != '\0') while (cmd[0] != '\0')
+       if (cmd != NULL)
        {
-               char *p;
-
-               if ((p = strchr(cmd, ';')) == 0)
+               while (cmd[0] != '\0')
                {
-                       strncpy(line, cmd, 999);
-                       line[1000] = '\0';
-                       cmd += strlen(cmd);
-               }
-               else
-               {
-                       if (p - cmd > 999) p = cmd + 999;
-                       strncpy(line, cmd, p - cmd);
-                       line[p - cmd] = '\0';
-                       cmd = p + 1;
-               }
+                       char *p;
 
-               /* input language code to internal one */
-               CNV_INPUT (line);
+                       if ((p = strchr(cmd, ';')) == 0)
+                       {
+                               strncpy(line, cmd, 999);
+                               line[1000] = '\0';
+                               cmd += strlen(cmd);
+                       }
+                       else
+                       {
+                               if (p - cmd > 999) p = cmd + 999;
+                               strncpy(line, cmd, p - cmd);
+                               line[p - cmd] = '\0';
+                               cmd = p + 1;
+                       }
 
-               if (!do_command(info, line)) continue;
+                       /* input language code to internal one */
+                       CNV_INPUT (line);
+
+                       if (!do_command(info, line)) continue;
+               }
        }
        else while (!feof(stdin))
        {
@@ -760,7 +779,7 @@ static BOOL process( struct client_info *info, char *cmd_str)
 #ifndef HAVE_LIBREADLINE
 
                /* display a prompt */
-               fprintf(out_hnd, "smb: %s> ", CNV_LANG(info->cur_dir));
+               fprintf(out_hnd, "%s$ ", CNV_LANG(cli_info.dest_host));
                fflush(out_hnd);
 
 #ifdef CLIX
@@ -786,8 +805,8 @@ static BOOL process( struct client_info *info, char *cmd_str)
 
 #else /* HAVE_LIBREADLINE */
 
-               slprintf(promptline, sizeof(promptline) - 1, "smb: %s> ",
-                        CNV_LANG(info->cur_dir));
+               slprintf(promptline, sizeof(promptline) - 1, "%s$ ",
+                        CNV_LANG(cli_info.dest_host));
 
                if (!readline(promptline))
                    break;
@@ -824,12 +843,11 @@ usage on the program
 ****************************************************************************/
 static void usage(char *pname)
 {
-  fprintf(out_hnd, "Usage: %s [service] [-S server] [-d debuglevel] [-l log] ",
+  fprintf(out_hnd, "Usage: %s [password] [-S server] [-U user] -[W domain] [-l log] ",
           pname);
 
   fprintf(out_hnd, "\nVersion %s\n",VERSION);
   fprintf(out_hnd, "\t-d debuglevel         set the debuglevel\n");
-  fprintf(out_hnd, "\tservice               connect to \\\\server\\share \n");
   fprintf(out_hnd, "\t-S server             connect to \\\\server\\IPC$ \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");
@@ -838,19 +856,13 @@ static void usage(char *pname)
   fprintf(out_hnd, "\t-I dest IP            use this IP to connect to\n");
   fprintf(out_hnd, "\t-E                    write messages to stderr instead of stdout\n");
   fprintf(out_hnd, "\t-U username           set the network username\n");
+  fprintf(out_hnd, "\t-U username%%pass      set the network username and password\n");
   fprintf(out_hnd, "\t-W domain             set the domain name\n");
-  fprintf(out_hnd, "\t-c command string     execute semicolon separated commands\n");
+  fprintf(out_hnd, "\t-c 'command string'   execute semicolon separated commands\n");
   fprintf(out_hnd, "\t-t terminal code      terminal i/o code {sjis|euc|jis7|jis8|junet|hex}\n");
   fprintf(out_hnd, "\n");
 }
 
-enum client_action
-{
-       CLIENT_NONE,
-       CLIENT_IPC,
-       CLIENT_SVC
-};
-
 #ifdef HAVE_LIBREADLINE
 
 /****************************************************************************
@@ -1320,183 +1332,77 @@ static char *complete_cmd_null(char *text, int state)
 
 #endif /* HAVE_LIBREADLINE */
 
-/****************************************************************************
-  main program
-****************************************************************************/
- int main(int argc,char *argv[])
+static void set_user_password(struct user_credentials *u,
+                               BOOL got_pass, char *password)
 {
-       BOOL interactive = True;
+       /* set the password cache info */
+       if (got_pass)
+       {
+               if (password == NULL)
+               {
+                       pwd_set_nullpwd(&(u->pwd));
+               }
+               else
+               {
+                       /* generate 16 byte hashes */
+                       pwd_make_lm_nt_16(&(u->pwd), password);
+               }
+       }
+       else 
+       {
+               pwd_read(&(u->pwd), "Enter Password:", True);
+       }
+}
 
-       int opt;
+#define CMD_INTER 0x0
+#define CMD_STR 0x1
+#define CMD_DBF 0x2
+#define CMD_SVC 0x4
+#define CMD_TERM 0x8
+#define CMD_PASS 0x10
+#define CMD_USER 0x20
+#define CMD_NOPW 0x40
+#define CMD_DBLV 0x80
+#define CMD_HELP 0x100
+#define CMD_SOCK 0x200
+#define CMD_IFACE 0x400
+#define CMD_DOM 0x800
+#define CMD_IP 0x1000
+#define CMD_HOST 0x2000
+#define CMD_NAME 0x4000
+#define CMD_DBG 0x8000
+#define CMD_SCOPE 0x10000
+
+static void cmd_set(struct client_info *info, int argc, char *argv[])
+{
+       BOOL interactive = True;
+       char *cmd_str = NULL;
+       char opt;
        extern FILE *dbf;
        extern char *optarg;
-       extern int optind;
        static pstring servicesf = CONFIGFILE;
        pstring term_code;
-       char *p;
-       BOOL got_pass = False;
-       char *cmd_str="";
-       mode_t myumask = 0755;
-       enum client_action cli_action = CLIENT_NONE;
-       extern struct user_credentials *usr_creds;
-
        pstring password; /* local copy only, if one is entered */
 
-       usr.ntlmssp_flags = 0x0;
-
-       usr_creds = &usr;
-       out_hnd = stdout;
-       fstrcpy(debugf, argv[0]);
-
-       init_policy_hnd(64);
-
 #ifdef KANJI
        pstrcpy(term_code, KANJI);
 #else /* KANJI */
        *term_code = 0;
 #endif /* KANJI */
 
-       DEBUGLEVEL = 2;
-
-       cli_info.put_total_size = 0;
-       cli_info.put_total_time_ms = 0;
-       cli_info.get_total_size = 0;
-       cli_info.get_total_time_ms = 0;
-
-       cli_info.dir_total = 0;
-       cli_info.newer_than = 0;
-       cli_info.archive_level = 0;
-       cli_info.print_mode = 1;
-
-       cli_info.translation = False;
-       cli_info.recurse_dir = False;
-       cli_info.lowercase = False;
-       cli_info.prompt = True;
-       cli_info.abort_mget = True;
-
-       cli_info.dest_ip.s_addr = 0;
-       cli_info.name_type = 0x20;
-
-       pstrcpy(cli_info.cur_dir , "\\");
-       pstrcpy(cli_info.file_sel, "");
-       pstrcpy(cli_info.base_dir, "");
-       pstrcpy(usr.domain, "");
-       pstrcpy(usr.user_name, "");
-       pstrcpy(cli_info.myhostname, "");
-       pstrcpy(cli_info.dest_host, "");
-
-       pstrcpy(cli_info.svc_type, "A:");
-       pstrcpy(cli_info.share, "");
-       pstrcpy(cli_info.service, "");
-
-       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, "");
-
-#ifdef HAVE_LIBREADLINE
-
-       /* Initialise GNU Readline */
-       
-       rl_readline_name = "rpcclient";
-       rl_attempted_completion_function = completion_fn;
-       rl_completion_entry_function = (Function *)complete_cmd_null;
-       
-       /* Initialise history list */
-       
-       using_history();
-
-#endif /* HAVE_LIBREADLINE */
-
-       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(usr.user_name,getenv("USER"));
-
-               /* modification to support userid%passwd syntax in the USER var
-               25.Aug.97, jdblair@uab.edu */
-
-               if ((p=strchr(usr.user_name,'%')))
-               {
-                       *p = 0;
-                       pstrcpy(password,p+1);
-                       got_pass = True;
-                       memset(strchr(getenv("USER"),'%')+1,'X',strlen(password));
-               }
-               strupper(usr.user_name);
-       }
-
-       password[0] = 0;
-
-       /* modification to support PASSWD environmental var
-          25.Aug.97, jdblair@uab.edu */
-       if (getenv("PASSWD"))
-       {
-               pstrcpy(password,getenv("PASSWD"));
-       }
-
-       if (*usr.user_name == 0 && getenv("LOGNAME"))
-       {
-               pstrcpy(usr.user_name,getenv("LOGNAME"));
-               strupper(usr.user_name);
-       }
-
-       if (argc < 2)
-       {
-               usage(argv[0]);
-               exit(1);
-       }
-
        if (*argv[1] != '-')
        {
-
-               pstrcpy(cli_info.service, argv[1]);  
-               /* Convert any '/' characters in the service name to '\' characters */
-               string_replace( cli_info.service, '/','\\');
-               argc--;
-               argv++;
-
-               fprintf(out_hnd, "service: %s\n", cli_info.service);
-
-               if (count_chars(cli_info.service,'\\') < 3)
-               {
-                       usage(argv[0]);
-                       printf("\n%s: Not enough '\\' characters in service\n", cli_info.service);
-                       exit(1);
-               }
-
-               /*
-               if (count_chars(cli_info.service,'\\') > 3)
-               {
-                       usage(pname);
-                       printf("\n%s: Too many '\\' characters in service\n", cli_info.service);
-                       exit(1);
-               }
-               */
-
                if (argc > 1 && (*argv[1] != '-'))
                {
-                       got_pass = True;
+                       cmd_set_options |= CMD_PASS;
                        pstrcpy(password,argv[1]);  
                        memset(argv[1],'X',strlen(argv[1]));
                        argc--;
                        argv++;
                }
-
-               cli_action = CLIENT_SVC;
        }
 
-       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)
+       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)
                {
@@ -1512,26 +1418,29 @@ static char *complete_cmd_null(char *text, int state)
 
                        case 'O':
                        {
+                               cmd_set_options |= CMD_SOCK;
                                pstrcpy(user_socket_options,optarg);
                                break;  
                        }
 
                        case 'S':
                        {
+                               cmd_set_options |= CMD_HOST;
                                pstrcpy(cli_info.dest_host,optarg);
                                strupper(cli_info.dest_host);
-                               cli_action = CLIENT_IPC;
                                break;
                        }
 
                        case 'B':
                        {
+                               cmd_set_options |= CMD_IFACE;
                                iface_set_default(NULL,optarg,NULL);
                                break;
                        }
 
                        case 'i':
                        {
+                               cmd_set_options |= CMD_SCOPE;
                                pstrcpy(scope, optarg);
                                break;
                        }
@@ -1539,12 +1448,13 @@ static char *complete_cmd_null(char *text, int state)
                        case 'U':
                        {
                                char *lp;
+                               cmd_set_options |= CMD_USER;
                                pstrcpy(usr.user_name,optarg);
                                if ((lp=strchr(usr.user_name,'%')))
                                {
                                        *lp = 0;
                                        pstrcpy(password,lp+1);
-                                       got_pass = True;
+                                       cmd_set_options |= CMD_PASS;
                                        memset(strchr(optarg,'%')+1,'X',strlen(password));
                                }
                                break;
@@ -1552,18 +1462,21 @@ static char *complete_cmd_null(char *text, int state)
 
                        case 'W':
                        {
+                               cmd_set_options |= CMD_DOM;
                                pstrcpy(usr.domain,optarg);
                                break;
                        }
 
                        case 'E':
                        {
+                               cmd_set_options |= CMD_DBG;
                                dbf = stderr;
                                break;
                        }
 
                        case 'I':
                        {
+                               cmd_set_options |= CMD_IP;
                                cli_info.dest_ip = *interpret_addr2(optarg);
                                if (zero_ip(cli_info.dest_ip))
                                {
@@ -1574,18 +1487,20 @@ static char *complete_cmd_null(char *text, int state)
 
                        case 'n':
                        {
+                               cmd_set_options |= CMD_NAME;
                                fstrcpy(global_myname, optarg);
                                break;
                        }
 
                        case 'N':
                        {
-                               got_pass = True;
+                               cmd_set_options |= CMD_NOPW | CMD_PASS;
                                break;
                        }
 
                        case 'd':
                        {
+                               cmd_set_options |= CMD_DBLV;
                                if (*optarg == 'A')
                                        DEBUGLEVEL = 10000;
                                else
@@ -1595,6 +1510,7 @@ static char *complete_cmd_null(char *text, int state)
 
                        case 'l':
                        {
+                               cmd_set_options |= CMD_INTER;
                                slprintf(debugf, sizeof(debugf)-1,
                                         "%s.client", optarg);
                                interactive = False;
@@ -1603,106 +1519,201 @@ static char *complete_cmd_null(char *text, int state)
 
                        case 'c':
                        {
+                               cmd_set_options |= CMD_STR | CMD_PASS;
                                cmd_str = optarg;
-                               got_pass = True;
                                break;
                        }
 
                        case 'h':
                        {
+                               cmd_set_options |= CMD_HELP;
                                usage(argv[0]);
-                               exit(0);
                                break;
                        }
 
                        case 's':
                        {
+                               cmd_set_options |= CMD_SVC;
                                pstrcpy(servicesf, optarg);
                                break;
                        }
 
                        case 't':
                        {
+                               cmd_set_options |= CMD_TERM;
                                pstrcpy(term_code, optarg);
                                break;
                        }
 
                        default:
                        {
+                               cmd_set_options |= CMD_HELP;
                                usage(argv[0]);
-                               exit(1);
                                break;
                        }
                }
        }
 
+       if (IS_BITS_SET_ALL(cmd_set_options, CMD_HELP))
+       {
+               return;
+       }
+
        setup_logging(debugf, interactive);
+       reopen_logs();
 
-       if (cli_action == CLIENT_NONE)
+       if (IS_BITS_SET_ALL(cmd_set_options, CMD_NOPW))
        {
-               usage(argv[0]);
-               exit(1);
+               set_user_password(&usr, True, NULL);
+       }
+       else if (IS_BITS_SET_ALL(cmd_set_options, CMD_PASS))
+       {
+               set_user_password(&usr, True, password);
        }
 
+       /* paranoia: destroy the local copy of the password */
+       bzero(password, sizeof(password)); 
+
        strupper(global_myname);
        fstrcpy(cli_info.myhostname, global_myname);
 
-       DEBUG(3,("%s client started (version %s)\n",timestring(),VERSION));
-
        if (!lp_load(servicesf,True, False, False))
        {
                fprintf(stderr, "Can't load %s - run testparm to debug it\n", servicesf);
        }
 
-       codepage_initialise(lp_client_code_page());
-
        load_interfaces();
 
-       if (cli_action == CLIENT_IPC)
-       {
-               pstrcpy(cli_info.share, "IPC$");
-               pstrcpy(cli_info.svc_type, "IPC");
-       }
-
        fstrcpy(cli_info.mach_acct, cli_info.myhostname);
        strupper(cli_info.mach_acct);
        fstrcat(cli_info.mach_acct, "$");
 
-       /* set the password cache info */
-       if (got_pass)
+       if (cmd_str != NULL)
        {
-               if (password[0] == 0)
-               {
-                       pwd_set_nullpwd(&(usr.pwd));
-               }
-               else
+               process(&cli_info, cmd_str);
+       }
+}
+
+static void read_user_env(struct user_credentials *u)
+{
+       pstring password;
+
+       password[0] = 0;
+
+       if (getenv("USER"))
+       {
+               char *p;
+               pstrcpy(u->user_name,getenv("USER"));
+
+               /* modification to support userid%passwd syntax in the USER var
+               25.Aug.97, jdblair@uab.edu */
+
+               if ((p=strchr(u->user_name,'%')))
                {
-                       /* generate 16 byte hashes */
-                       pwd_make_lm_nt_16(&(usr.pwd), password);
+                       *p = 0;
+                       pstrcpy(password,p+1);
+                       memset(strchr(getenv("USER"),'%')+1,'X',strlen(password));
                }
+               strupper(u->user_name);
        }
-       else 
+
+       /* modification to support PASSWD environmental var
+          25.Aug.97, jdblair@uab.edu */
+       if (getenv("PASSWD"))
        {
-               pwd_read(&(usr.pwd), "Enter Password:", True);
+               pstrcpy(password,getenv("PASSWD"));
        }
 
+       if (*u->user_name == 0 && getenv("LOGNAME"))
+       {
+               pstrcpy(u->user_name,getenv("LOGNAME"));
+               strupper(u->user_name);
+       }
+
+       set_user_password(u, True, password);
+
        /* paranoia: destroy the local copy of the password */
        bzero(password, sizeof(password)); 
+}
+
+/****************************************************************************
+  main program
+****************************************************************************/
+ int main(int argc,char *argv[])
+{
+       extern struct user_credentials *usr_creds;
+       mode_t myumask = 0755;
+
+       DEBUGLEVEL = 2;
+
+       usr.ntlmssp_flags = 0x0;
+
+       usr_creds = &usr;
+       out_hnd = stdout;
+       fstrcpy(debugf, argv[0]);
+
+       init_policy_hnd(64);
+
+       pstrcpy(usr.domain, "");
+       pstrcpy(usr.user_name, "");
+
+       pstrcpy(cli_info.myhostname, "");
+       pstrcpy(cli_info.dest_host, "");
+       cli_info.dest_ip.s_addr = 0;
+
+       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, "");
+
+#ifdef HAVE_LIBREADLINE
+
+       /* Initialise GNU Readline */
+       
+       rl_readline_name = "rpcclient";
+       rl_attempted_completion_function = completion_fn;
+       rl_completion_entry_function = (Function *)complete_cmd_null;
+       
+       /* Initialise history list */
+       
+       using_history();
+
+#endif /* HAVE_LIBREADLINE */
+
+       TimeInit();
+       charset_initialise();
+
+       myumask = umask(0);
+       umask(myumask);
 
-       switch (cli_action)
+       if (!get_myname(global_myname, NULL))
        {
-               case CLIENT_IPC:
-               {
-                       process(&cli_info, cmd_str);
-                       break;
-               }
+               fprintf(stderr, "Failed to get my hostname.\n");
+       }
 
-               default:
-               {
-                       fprintf(stderr, "unknown client action requested\n");
-                       break;
-               }
+       if (argc < 2)
+       {
+               usage(argv[0]);
+               exit(1);
        }
 
+       read_user_env(&usr);
+
+       cmd_set_options &= ~CMD_HELP;
+       cmd_set_options &= ~CMD_NOPW;
+
+       cmd_set(&cli_info, argc, argv);
+
+       if (IS_BITS_SET_ALL(cmd_set_options, CMD_HELP))
+       {
+               exit(0);
+       }
+
+       codepage_initialise(lp_client_code_page());
+
+       DEBUG(3,("%s client started (version %s)\n",timestring(),VERSION));
+
+       process(&cli_info, NULL);
+
        return(0);
 }