diff options
author | Gerald Carter <jerry@samba.org> | 2001-04-27 22:40:46 +0000 |
---|---|---|
committer | Gerald Carter <jerry@samba.org> | 2001-04-27 22:40:46 +0000 |
commit | d120fb9968fb42632352bded56c13bf009cd093b (patch) | |
tree | 2694bfcca2c9e08ba8a164b78b309585a150a740 | |
parent | b6fe3814f976e470a296ff3ee9458b285cffb480 (diff) | |
download | samba-d120fb9968fb42632352bded56c13bf009cd093b.tar.gz samba-d120fb9968fb42632352bded56c13bf009cd093b.tar.xz samba-d120fb9968fb42632352bded56c13bf009cd093b.zip |
finished moving cli_<pipe>_XXX to use talloc() (was doing this already).
I'll summarize the work on samba-technical in a separate mail.
Still a few memory leaks. I'm working on 'em.
-rw-r--r-- | source/include/proto.h | 149 | ||||
-rw-r--r-- | source/libsmb/cli_lsarpc.c | 104 | ||||
-rw-r--r-- | source/libsmb/cli_samr.c | 121 | ||||
-rw-r--r-- | source/rpcclient/cmd_lsarpc.c | 66 | ||||
-rw-r--r-- | source/rpcclient/cmd_samr.c | 90 | ||||
-rw-r--r-- | source/rpcclient/rpcclient.c | 14 |
6 files changed, 391 insertions, 153 deletions
diff --git a/source/include/proto.h b/source/include/proto.h index 2f222e9db61..0989c2dd34b 100644 --- a/source/include/proto.h +++ b/source/include/proto.h @@ -748,47 +748,126 @@ unsigned long wins_srv_count( void ); struct cli_state *cli_lsa_initialise(struct cli_state *cli, char *system_name, struct ntuser_creds *creds); void cli_lsa_shutdown(struct cli_state *cli); -uint32 cli_lsa_open_policy(struct cli_state *cli, BOOL sec_qos, - uint32 des_access, POLICY_HND *pol); -uint32 cli_lsa_close(struct cli_state *cli, POLICY_HND *pol); -uint32 cli_lsa_lookup_sids(struct cli_state *cli, POLICY_HND *pol, - int num_sids, DOM_SID *sids, char ***names, - uint32 **types, int *num_names); -uint32 cli_lsa_lookup_names(struct cli_state *cli, POLICY_HND *pol, - int num_names, char **names, DOM_SID **sids, - uint32 **types, int *num_sids); -uint32 cli_lsa_query_info_policy(struct cli_state *cli, POLICY_HND *pol, - uint16 info_class, fstring domain_name, - DOM_SID * domain_sid); -uint32 cli_lsa_enum_trust_dom(struct cli_state *cli, POLICY_HND *pol, - uint32 *enum_ctx, uint32 *num_domains, - char ***domain_names, DOM_SID **domain_sids); +uint32 cli_lsa_open_policy( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + BOOL sec_qos, + uint32 des_access, + POLICY_HND *pol +); +uint32 cli_lsa_close( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *pol +); +uint32 cli_lsa_lookup_sids( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *pol, + int num_sids, + DOM_SID *sids, + char ***names, + uint32 **types, + int *num_names +); +uint32 cli_lsa_lookup_names( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *pol, + int num_names, + char **names, + DOM_SID **sids, + uint32 **types, + int *num_sids +); +uint32 cli_lsa_query_info_policy( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *pol, + uint16 info_class, + fstring domain_name, + DOM_SID * domain_sid +); +uint32 cli_lsa_enum_trust_dom( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *pol, + uint32 *enum_ctx, + uint32 *num_domains, + char ***domain_names, + DOM_SID **domain_sids +); /*The following definitions come from libsmb/cli_samr.c */ struct cli_state *cli_samr_initialise(struct cli_state *cli, char *system_name, struct ntuser_creds *creds); void cli_samr_shutdown(struct cli_state *cli); -uint32 cli_samr_connect(struct cli_state *cli, char *srv_name, - uint32 access_mask, POLICY_HND *connect_pol); -uint32 cli_samr_close(struct cli_state *cli, POLICY_HND *connect_pol); -uint32 cli_samr_open_domain(struct cli_state *cli, POLICY_HND *connect_pol, - uint32 access_mask, DOM_SID *domain_sid, - POLICY_HND *domain_pol); -uint32 cli_samr_open_user(struct cli_state *cli, POLICY_HND *domain_pol, - uint32 access_mask, uint32 user_rid, - POLICY_HND *user_pol); -uint32 cli_samr_open_group(struct cli_state *cli, POLICY_HND *domain_pol, - uint32 access_mask, uint32 group_rid, - POLICY_HND *group_pol); -uint32 cli_samr_query_userinfo(struct cli_state *cli, POLICY_HND *user_pol, - uint16 switch_value, SAM_USERINFO_CTR *ctr); -uint32 cli_samr_query_groupinfo(struct cli_state *cli, POLICY_HND *group_pol, - uint32 info_level, GROUP_INFO_CTR *ctr); -uint32 cli_samr_query_usergroups(struct cli_state *cli, POLICY_HND *user_pol, - uint32 *num_groups, DOM_GID **gid); -uint32 cli_samr_query_groupmem(struct cli_state *cli, POLICY_HND *group_pol, - uint32 *num_mem, uint32 **rid, uint32 **attr); +uint32 cli_samr_connect( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + char *srv_name, + uint32 access_mask, + POLICY_HND *connect_pol +); +uint32 cli_samr_close( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *connect_pol +); +uint32 cli_samr_open_domain( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *connect_pol, + uint32 access_mask, + DOM_SID *domain_sid, + POLICY_HND *domain_pol +); +uint32 cli_samr_open_user( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *domain_pol, + uint32 access_mask, + uint32 user_rid, + POLICY_HND *user_pol +); +uint32 cli_samr_open_group( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *domain_pol, + uint32 access_mask, + uint32 group_rid, + POLICY_HND *group_pol +); +uint32 cli_samr_query_userinfo( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *user_pol, + uint16 switch_value, + SAM_USERINFO_CTR *ctr +); +uint32 cli_samr_query_groupinfo( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *group_pol, + uint32 info_level, + GROUP_INFO_CTR *ctr +); +uint32 cli_samr_query_usergroups( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *user_pol, + uint32 *num_groups, + DOM_GID **gid +); +uint32 cli_samr_query_groupmem( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *group_pol, + uint32 *num_mem, + uint32 **rid, + uint32 **attr +); /*The following definitions come from libsmb/cli_spoolss.c */ diff --git a/source/libsmb/cli_lsarpc.c b/source/libsmb/cli_lsarpc.c index 7f5431e4b3a..d2174f8d370 100644 --- a/source/libsmb/cli_lsarpc.c +++ b/source/libsmb/cli_lsarpc.c @@ -84,8 +84,13 @@ void cli_lsa_shutdown(struct cli_state *cli) /* Open a LSA policy handle */ -uint32 cli_lsa_open_policy(struct cli_state *cli, BOOL sec_qos, - uint32 des_access, POLICY_HND *pol) +uint32 cli_lsa_open_policy( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + BOOL sec_qos, + uint32 des_access, + POLICY_HND *pol +) { prs_struct qbuf, rbuf; LSA_Q_OPEN_POL q; @@ -98,8 +103,8 @@ uint32 cli_lsa_open_policy(struct cli_state *cli, BOOL sec_qos, /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Initialise input parameters */ @@ -140,7 +145,11 @@ uint32 cli_lsa_open_policy(struct cli_state *cli, BOOL sec_qos, /* Close a LSA policy handle */ -uint32 cli_lsa_close(struct cli_state *cli, POLICY_HND *pol) +uint32 cli_lsa_close( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *pol +) { prs_struct qbuf, rbuf; LSA_Q_CLOSE q; @@ -152,8 +161,8 @@ uint32 cli_lsa_close(struct cli_state *cli, POLICY_HND *pol) /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ @@ -187,9 +196,16 @@ uint32 cli_lsa_close(struct cli_state *cli, POLICY_HND *pol) /* Lookup a list of sids */ -uint32 cli_lsa_lookup_sids(struct cli_state *cli, POLICY_HND *pol, - int num_sids, DOM_SID *sids, char ***names, - uint32 **types, int *num_names) +uint32 cli_lsa_lookup_sids( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *pol, + int num_sids, + DOM_SID *sids, + char ***names, + uint32 **types, + int *num_names +) { prs_struct qbuf, rbuf; LSA_Q_LOOKUP_SIDS q; @@ -204,12 +220,12 @@ uint32 cli_lsa_lookup_sids(struct cli_state *cli, POLICY_HND *pol, /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ - init_q_lookup_sids(cli->mem_ctx, &q, pol, num_sids, sids, 1); + init_q_lookup_sids(mem_ctx, &q, pol, num_sids, sids, 1); if (!lsa_io_q_lookup_sids("", &q, &qbuf, 0) || !rpc_api_pipe_req(cli, LSA_LOOKUPSIDS, &qbuf, &rbuf)) { @@ -246,14 +262,14 @@ uint32 cli_lsa_lookup_sids(struct cli_state *cli, POLICY_HND *pol, (*num_names) = r.names->num_entries; - if (!((*names) = (char **)malloc(sizeof(char *) * + if (!((*names) = (char **)talloc(mem_ctx, sizeof(char *) * r.names->num_entries))) { DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n")); result = NT_STATUS_UNSUCCESSFUL; goto done; } - if (!((*types) = (uint32 *)malloc(sizeof(uint32) * + if (!((*types) = (uint32 *)talloc(mem_ctx, sizeof(uint32) * r.names->num_entries))) { DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n")); result = NT_STATUS_UNSUCCESSFUL; @@ -294,9 +310,16 @@ uint32 cli_lsa_lookup_sids(struct cli_state *cli, POLICY_HND *pol, /* Lookup a list of names */ -uint32 cli_lsa_lookup_names(struct cli_state *cli, POLICY_HND *pol, - int num_names, char **names, DOM_SID **sids, - uint32 **types, int *num_sids) +uint32 cli_lsa_lookup_names( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *pol, + int num_names, + char **names, + DOM_SID **sids, + uint32 **types, + int *num_sids +) { prs_struct qbuf, rbuf; LSA_Q_LOOKUP_NAMES q; @@ -310,12 +333,12 @@ uint32 cli_lsa_lookup_names(struct cli_state *cli, POLICY_HND *pol, /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ - init_q_lookup_names(cli->mem_ctx, &q, pol, num_names, names); + init_q_lookup_names(mem_ctx, &q, pol, num_names, names); if (!lsa_io_q_lookup_names("", &q, &qbuf, 0) || !rpc_api_pipe_req(cli, LSA_LOOKUPNAMES, &qbuf, &rbuf)) { @@ -349,14 +372,14 @@ uint32 cli_lsa_lookup_names(struct cli_state *cli, POLICY_HND *pol, (*num_sids) = r.num_entries; - if (!((*sids = (DOM_SID *)malloc(sizeof(DOM_SID) * + if (!((*sids = (DOM_SID *)talloc(mem_ctx, sizeof(DOM_SID) * r.num_entries)))) { DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n")); result = NT_STATUS_UNSUCCESSFUL; goto done; } - if (!((*types = (uint32 *)malloc(sizeof(uint32) * + if (!((*types = (uint32 *)talloc(mem_ctx, sizeof(uint32) * r.num_entries)))) { DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n")); result = NT_STATUS_UNSUCCESSFUL; @@ -395,9 +418,14 @@ uint32 cli_lsa_lookup_names(struct cli_state *cli, POLICY_HND *pol, /* Query info policy */ -uint32 cli_lsa_query_info_policy(struct cli_state *cli, POLICY_HND *pol, - uint16 info_class, fstring domain_name, - DOM_SID * domain_sid) +uint32 cli_lsa_query_info_policy( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *pol, + uint16 info_class, + fstring domain_name, + DOM_SID * domain_sid +) { prs_struct qbuf, rbuf; LSA_Q_QUERY_INFO q; @@ -409,8 +437,8 @@ uint32 cli_lsa_query_info_policy(struct cli_state *cli, POLICY_HND *pol, /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ @@ -479,9 +507,15 @@ uint32 cli_lsa_query_info_policy(struct cli_state *cli, POLICY_HND *pol, /* Enumerate list of trusted domains */ -uint32 cli_lsa_enum_trust_dom(struct cli_state *cli, POLICY_HND *pol, - uint32 *enum_ctx, uint32 *num_domains, - char ***domain_names, DOM_SID **domain_sids) +uint32 cli_lsa_enum_trust_dom( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *pol, + uint32 *enum_ctx, + uint32 *num_domains, + char ***domain_names, + DOM_SID **domain_sids +) { prs_struct qbuf, rbuf; LSA_Q_ENUM_TRUST_DOM q; @@ -494,8 +528,8 @@ uint32 cli_lsa_enum_trust_dom(struct cli_state *cli, POLICY_HND *pol, /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ @@ -527,14 +561,14 @@ uint32 cli_lsa_enum_trust_dom(struct cli_state *cli, POLICY_HND *pol, /* Return output parameters */ - if (!((*domain_names) = (char **)malloc(sizeof(char *) * + if (!((*domain_names) = (char **)talloc(mem_ctx, sizeof(char *) * r.num_domains))) { DEBUG(0, ("cli_lsa_enum_trust_dom(): out of memory\n")); result = NT_STATUS_UNSUCCESSFUL; goto done; } - if (!((*domain_sids) = (DOM_SID *)malloc(sizeof(DOM_SID) * + if (!((*domain_sids) = (DOM_SID *)talloc(mem_ctx, sizeof(DOM_SID) * r.num_domains))) { DEBUG(0, ("cli_lsa_enum_trust_dom(): out of memory\n")); result = NT_STATUS_UNSUCCESSFUL; diff --git a/source/libsmb/cli_samr.c b/source/libsmb/cli_samr.c index 4c53bd05847..a822611445d 100644 --- a/source/libsmb/cli_samr.c +++ b/source/libsmb/cli_samr.c @@ -84,8 +84,13 @@ void cli_samr_shutdown(struct cli_state *cli) /* Connect to SAMR database */ -uint32 cli_samr_connect(struct cli_state *cli, char *srv_name, - uint32 access_mask, POLICY_HND *connect_pol) +uint32 cli_samr_connect( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + char *srv_name, + uint32 access_mask, + POLICY_HND *connect_pol +) { prs_struct qbuf, rbuf; SAMR_Q_CONNECT q; @@ -97,8 +102,8 @@ uint32 cli_samr_connect(struct cli_state *cli, char *srv_name, /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ @@ -132,7 +137,11 @@ uint32 cli_samr_connect(struct cli_state *cli, char *srv_name, /* Close SAMR handle */ -uint32 cli_samr_close(struct cli_state *cli, POLICY_HND *connect_pol) +uint32 cli_samr_close( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *connect_pol +) { prs_struct qbuf, rbuf; SAMR_Q_CLOSE_HND q; @@ -144,8 +153,8 @@ uint32 cli_samr_close(struct cli_state *cli, POLICY_HND *connect_pol) /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ @@ -179,9 +188,14 @@ uint32 cli_samr_close(struct cli_state *cli, POLICY_HND *connect_pol) /* Open handle on a domain */ -uint32 cli_samr_open_domain(struct cli_state *cli, POLICY_HND *connect_pol, - uint32 access_mask, DOM_SID *domain_sid, - POLICY_HND *domain_pol) +uint32 cli_samr_open_domain( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *connect_pol, + uint32 access_mask, + DOM_SID *domain_sid, + POLICY_HND *domain_pol +) { prs_struct qbuf, rbuf; SAMR_Q_OPEN_DOMAIN q; @@ -193,8 +207,8 @@ uint32 cli_samr_open_domain(struct cli_state *cli, POLICY_HND *connect_pol, /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ @@ -228,9 +242,14 @@ uint32 cli_samr_open_domain(struct cli_state *cli, POLICY_HND *connect_pol, /* Open handle on a user */ -uint32 cli_samr_open_user(struct cli_state *cli, POLICY_HND *domain_pol, - uint32 access_mask, uint32 user_rid, - POLICY_HND *user_pol) +uint32 cli_samr_open_user( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *domain_pol, + uint32 access_mask, + uint32 user_rid, + POLICY_HND *user_pol +) { prs_struct qbuf, rbuf; SAMR_Q_OPEN_USER q; @@ -242,8 +261,8 @@ uint32 cli_samr_open_user(struct cli_state *cli, POLICY_HND *domain_pol, /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ @@ -277,9 +296,14 @@ uint32 cli_samr_open_user(struct cli_state *cli, POLICY_HND *domain_pol, /* Open handle on a group */ -uint32 cli_samr_open_group(struct cli_state *cli, POLICY_HND *domain_pol, - uint32 access_mask, uint32 group_rid, - POLICY_HND *group_pol) +uint32 cli_samr_open_group( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *domain_pol, + uint32 access_mask, + uint32 group_rid, + POLICY_HND *group_pol +) { prs_struct qbuf, rbuf; SAMR_Q_OPEN_GROUP q; @@ -291,8 +315,8 @@ uint32 cli_samr_open_group(struct cli_state *cli, POLICY_HND *domain_pol, /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ @@ -326,8 +350,13 @@ uint32 cli_samr_open_group(struct cli_state *cli, POLICY_HND *domain_pol, /* Query user info */ -uint32 cli_samr_query_userinfo(struct cli_state *cli, POLICY_HND *user_pol, - uint16 switch_value, SAM_USERINFO_CTR *ctr) +uint32 cli_samr_query_userinfo( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *user_pol, + uint16 switch_value, + SAM_USERINFO_CTR *ctr +) { prs_struct qbuf, rbuf; SAMR_Q_QUERY_USERINFO q; @@ -339,8 +368,8 @@ uint32 cli_samr_query_userinfo(struct cli_state *cli, POLICY_HND *user_pol, /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ @@ -374,8 +403,13 @@ uint32 cli_samr_query_userinfo(struct cli_state *cli, POLICY_HND *user_pol, /* Query group info */ -uint32 cli_samr_query_groupinfo(struct cli_state *cli, POLICY_HND *group_pol, - uint32 info_level, GROUP_INFO_CTR *ctr) +uint32 cli_samr_query_groupinfo( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *group_pol, + uint32 info_level, + GROUP_INFO_CTR *ctr +) { prs_struct qbuf, rbuf; SAMR_Q_QUERY_GROUPINFO q; @@ -387,8 +421,8 @@ uint32 cli_samr_query_groupinfo(struct cli_state *cli, POLICY_HND *group_pol, /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ @@ -422,8 +456,13 @@ uint32 cli_samr_query_groupinfo(struct cli_state *cli, POLICY_HND *group_pol, /* Query user groups */ -uint32 cli_samr_query_usergroups(struct cli_state *cli, POLICY_HND *user_pol, - uint32 *num_groups, DOM_GID **gid) +uint32 cli_samr_query_usergroups( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *user_pol, + uint32 *num_groups, + DOM_GID **gid +) { prs_struct qbuf, rbuf; SAMR_Q_QUERY_USERGROUPS q; @@ -435,8 +474,8 @@ uint32 cli_samr_query_usergroups(struct cli_state *cli, POLICY_HND *user_pol, /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ @@ -471,8 +510,14 @@ uint32 cli_samr_query_usergroups(struct cli_state *cli, POLICY_HND *user_pol, /* Query user groups */ -uint32 cli_samr_query_groupmem(struct cli_state *cli, POLICY_HND *group_pol, - uint32 *num_mem, uint32 **rid, uint32 **attr) +uint32 cli_samr_query_groupmem( + struct cli_state *cli, + TALLOC_CTX *mem_ctx, + POLICY_HND *group_pol, + uint32 *num_mem, + uint32 **rid, + uint32 **attr +) { prs_struct qbuf, rbuf; SAMR_Q_QUERY_GROUPMEM q; @@ -484,8 +529,8 @@ uint32 cli_samr_query_groupmem(struct cli_state *cli, POLICY_HND *group_pol, /* Initialise parse structures */ - prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); - prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); /* Marshall data and send request */ diff --git a/source/rpcclient/cmd_lsarpc.c b/source/rpcclient/cmd_lsarpc.c index a574f2e128a..153d5366e00 100644 --- a/source/rpcclient/cmd_lsarpc.c +++ b/source/rpcclient/cmd_lsarpc.c @@ -34,12 +34,19 @@ static uint32 cmd_lsa_query_info_policy(struct cli_state *cli, int argc, char ** DOM_SID dom_sid; fstring sid_str, domain_name; uint32 info_class = 3; + TALLOC_CTX *mem_ctx; if (argc > 2) { printf("Usage: %s [info_class]\n", argv[0]); return 0; } + if (!(mem_ctx=talloc_init())) + { + DEBUG(0,("cmd_lsa_query_info_poicy: talloc_init returned NULL!\n")); + return NT_STATUS_UNSUCCESSFUL; + } + if (argc == 2) { info_class = atoi(argv[1]); } @@ -50,7 +57,7 @@ static uint32 cmd_lsa_query_info_policy(struct cli_state *cli, int argc, char ** return NT_STATUS_UNSUCCESSFUL; } - if ((result = cli_lsa_open_policy(cli, True, + if ((result = cli_lsa_open_policy(cli, mem_ctx, True, SEC_RIGHTS_MAXIMUM_ALLOWED, &pol)) != NT_STATUS_NOPROBLEMO) { goto done; @@ -60,7 +67,7 @@ static uint32 cmd_lsa_query_info_policy(struct cli_state *cli, int argc, char ** /* Lookup info policy */ - if ((result = cli_lsa_query_info_policy(cli, &pol, info_class, + if ((result = cli_lsa_query_info_policy(cli, mem_ctx, &pol, info_class, domain_name, &dom_sid)) != NT_STATUS_NOPROBLEMO) { goto done; @@ -73,10 +80,11 @@ static uint32 cmd_lsa_query_info_policy(struct cli_state *cli, int argc, char ** done: if (got_policy_hnd) { - cli_lsa_close(cli, &pol); + cli_lsa_close(cli, mem_ctx, &pol); } cli_nt_session_close(cli); + talloc_destroy(mem_ctx); return result; } @@ -91,12 +99,19 @@ static uint32 cmd_lsa_lookup_names(struct cli_state *cli, int argc, char **argv) DOM_SID *sids; uint32 *types; int num_names, i; + TALLOC_CTX *mem_ctx; if (argc == 1) { printf("Usage: %s [name1 [name2 [...]]]\n", argv[0]); return 0; } + if (!(mem_ctx=talloc_init())) + { + DEBUG(0,("cmd_lsa_lookup_names: talloc_init returned NULL!\n")); + return NT_STATUS_UNSUCCESSFUL; + } + /* Initialise RPC connection */ if (!cli_nt_session_open (cli, PIPE_LSARPC)) { fprintf (stderr, "Could not initialize samr pipe!\n"); @@ -104,7 +119,7 @@ static uint32 cmd_lsa_lookup_names(struct cli_state *cli, int argc, char **argv) } - if ((result = cli_lsa_open_policy(cli, True, + if ((result = cli_lsa_open_policy(cli, mem_ctx, True, SEC_RIGHTS_MAXIMUM_ALLOWED, &pol)) != NT_STATUS_NOPROBLEMO) { goto done; @@ -114,8 +129,8 @@ static uint32 cmd_lsa_lookup_names(struct cli_state *cli, int argc, char **argv) /* Lookup the names */ - if ((result = cli_lsa_lookup_names( - cli, &pol, argc - 1, &argv[1], &sids, &types, &num_names) != + if ((result = cli_lsa_lookup_names(cli, mem_ctx, &pol, argc - 1, + &argv[1], &sids, &types, &num_names) != NT_STATUS_NOPROBLEMO)) { goto done; } @@ -130,16 +145,19 @@ static uint32 cmd_lsa_lookup_names(struct cli_state *cli, int argc, char **argv) types[i]); } +#if 0 /* JERRY */ safe_free(sids); safe_free(types); +#endif done: if (got_policy_hnd) { - cli_lsa_close(cli, &pol); + cli_lsa_close(cli, mem_ctx, &pol); } cli_nt_session_close(cli); + talloc_destroy(mem_ctx); return result; } @@ -155,19 +173,26 @@ static uint32 cmd_lsa_lookup_sids(struct cli_state *cli, int argc, char **argv) char **names; uint32 *types; int num_names, i; + TALLOC_CTX *mem_ctx; if (argc == 1) { printf("Usage: %s [sid1 [sid2 [...]]]\n", argv[0]); return 0; } + if (!(mem_ctx=talloc_init())) + { + DEBUG(0,("cmd_lsa_lookup_sids: talloc_init returned NULL!\n")); + return NT_STATUS_UNSUCCESSFUL; + } + /* Initialise RPC connection */ if (!cli_nt_session_open (cli, PIPE_LSARPC)) { fprintf (stderr, "Could not initialize samr pipe!\n"); return NT_STATUS_UNSUCCESSFUL; } - if ((result = cli_lsa_open_policy(cli, True, + if ((result = cli_lsa_open_policy(cli, mem_ctx, True, SEC_RIGHTS_MAXIMUM_ALLOWED, &pol)) != NT_STATUS_NOPROBLEMO) { goto done; @@ -177,7 +202,7 @@ static uint32 cmd_lsa_lookup_sids(struct cli_state *cli, int argc, char **argv) /* Convert arguments to sids */ - sids = (DOM_SID *)malloc(sizeof(DOM_SID) * (argc - 1)); + sids = (DOM_SID *)talloc(mem_ctx, sizeof(DOM_SID) * (argc - 1)); if (!sids) { printf("out of memory\n"); @@ -190,7 +215,7 @@ static uint32 cmd_lsa_lookup_sids(struct cli_state *cli, int argc, char **argv) /* Lookup the SIDs */ - if ((result = cli_lsa_lookup_sids(cli, &pol, argc - 1, sids, + if ((result = cli_lsa_lookup_sids(cli, mem_ctx, &pol, argc - 1, sids, &names, &types, &num_names) != NT_STATUS_NOPROBLEMO)) { goto done; @@ -206,6 +231,7 @@ static uint32 cmd_lsa_lookup_sids(struct cli_state *cli, int argc, char **argv) "*unknown*", types[i]); } +#if 0 /* JERRY */ safe_free(sids); safe_free(types); @@ -214,14 +240,16 @@ static uint32 cmd_lsa_lookup_sids(struct cli_state *cli, int argc, char **argv) } safe_free(names); +#endif done: if (got_policy_hnd) { - cli_lsa_close(cli, &pol); + cli_lsa_close(cli, mem_ctx, &pol); } cli_nt_session_close(cli); + talloc_destroy (mem_ctx); return result; } @@ -238,19 +266,26 @@ static uint32 cmd_lsa_enum_trust_dom(struct cli_state *cli, int argc, char **arg uint32 enum_ctx = 0; uint32 num_domains; int i; + TALLOC_CTX *mem_ctx; if (argc != 1) { printf("Usage: %s\n", argv[0]); return 0; } + if (!(mem_ctx=talloc_init())) + { + DEBUG(0,("cmd_lsa_enum_trust_dom: talloc_init returned NULL!\n")); + return NT_STATUS_UNSUCCESSFUL; + } + /* Initialise RPC connection */ if (!cli_nt_session_open (cli, PIPE_LSARPC)) { fprintf (stderr, "Could not initialize samr pipe!\n"); return NT_STATUS_UNSUCCESSFUL; } - if ((result = cli_lsa_open_policy(cli, True, + if ((result = cli_lsa_open_policy(cli, mem_ctx, True, SEC_RIGHTS_MAXIMUM_ALLOWED, &pol)) != NT_STATUS_NOPROBLEMO) { goto done; @@ -260,7 +295,7 @@ static uint32 cmd_lsa_enum_trust_dom(struct cli_state *cli, int argc, char **arg /* Lookup list of trusted domains */ - if ((result = cli_lsa_enum_trust_dom(cli, &pol, &enum_ctx, + if ((result = cli_lsa_enum_trust_dom(cli, mem_ctx, &pol, &enum_ctx, &num_domains, &domain_names, &domain_sids) != NT_STATUS_NOPROBLEMO)) { @@ -277,6 +312,7 @@ static uint32 cmd_lsa_enum_trust_dom(struct cli_state *cli, int argc, char **arg "*unknown*", sid_str); } +#if 0 /* JERRY */ safe_free(domain_sids); for (i = 0; i < num_domains; i++) { @@ -284,14 +320,16 @@ static uint32 cmd_lsa_enum_trust_dom(struct cli_state *cli, int argc, char **arg } safe_free(domain_names); +#endif done: if (got_policy_hnd) { - cli_lsa_close(cli, &pol); + cli_lsa_close(cli, mem_ctx, &pol); } cli_nt_session_close(cli); + talloc_destroy(mem_ctx); return result; } diff --git a/source/rpcclient/cmd_samr.c b/source/rpcclient/cmd_samr.c index b3d135275a7..d0706cc9b76 100644 --- a/source/rpcclient/cmd_samr.c +++ b/source/rpcclient/cmd_samr.c @@ -108,11 +108,20 @@ static uint32 cmd_samr_query_user(struct cli_state *cli, int argc, char **argv) SAM_USERINFO_CTR user_ctr; SAM_USER_INFO_21 info_21; fstring server; + TALLOC_CTX *mem_ctx; + if (argc != 1) { printf("Usage: %s\n", argv[0]); return 0; } + + if (!(mem_ctx=talloc_init())) + { + DEBUG(0,("cmd_samr_query_user: talloc_init returned NULL!\n")); + return NT_STATUS_UNSUCCESSFUL; + } + /* Initialise RPC connection */ if (!cli_nt_session_open (cli, PIPE_SAMR)) { @@ -123,7 +132,7 @@ static uint32 cmd_samr_query_user(struct cli_state *cli, int argc, char **argv) slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost); strupper (server); - if ((result = cli_samr_connect(cli, server, MAXIMUM_ALLOWED_ACCESS, + if ((result = cli_samr_connect(cli, mem_ctx, server, MAXIMUM_ALLOWED_ACCESS, &connect_pol)) != NT_STATUS_NOPROBLEMO) { goto done; @@ -132,7 +141,7 @@ static uint32 cmd_samr_query_user(struct cli_state *cli, int argc, char **argv) got_connect_pol = True; fetch_domain_sid(cli); - if ((result = cli_samr_open_domain(cli, &connect_pol, + if ((result = cli_samr_open_domain(cli, mem_ctx, &connect_pol, MAXIMUM_ALLOWED_ACCESS, &domain_sid, &domain_pol)) != NT_STATUS_NOPROBLEMO) { @@ -141,7 +150,7 @@ static uint32 cmd_samr_query_user(struct cli_state *cli, int argc, char **argv) got_domain_pol = True; - if ((result = cli_samr_open_user(cli, &domain_pol, + if ((result = cli_samr_open_user(cli, mem_ctx, &domain_pol, MAXIMUM_ALLOWED_ACCESS, 0x1f4, &user_pol)) != NT_STATUS_NOPROBLEMO) { @@ -155,7 +164,7 @@ static uint32 cmd_samr_query_user(struct cli_state *cli, int argc, char **argv) user_ctr.info.id21 = &info_21; - if ((result = cli_samr_query_userinfo(cli, &user_pol, info_level, + if ((result = cli_samr_query_userinfo(cli, mem_ctx, &user_pol, info_level, &user_ctr)) != NT_STATUS_NOPROBLEMO) { goto done; @@ -164,11 +173,12 @@ static uint32 cmd_samr_query_user(struct cli_state *cli, int argc, char **argv) display_sam_user_info_21(&info_21); done: - if (got_user_pol) cli_samr_close(cli, &user_pol); - if (got_domain_pol) cli_samr_close(cli, &domain_pol); - if (got_connect_pol) cli_samr_close(cli, &connect_pol); + if (got_user_pol) cli_samr_close(cli, mem_ctx, &user_pol); + if (got_domain_pol) cli_samr_close(cli, mem_ctx, &domain_pol); + if (got_connect_pol) cli_samr_close(cli, mem_ctx, &connect_pol); cli_nt_session_close(cli); + talloc_destroy(mem_ctx); return result; } @@ -227,12 +237,19 @@ static uint32 cmd_samr_query_group(struct cli_state *cli, int argc, char **argv) got_group_pol = False; GROUP_INFO_CTR group_ctr; fstring server; + TALLOC_CTX *mem_ctx; if (argc != 1) { printf("Usage: %s\n", argv[0]); return 0; } + if (!(mem_ctx=talloc_init())) + { + DEBUG(0,("cmd_samr_query_group: talloc_init returned NULL!\n")); + return NT_STATUS_UNSUCCESSFUL; + } + /* Initialise RPC connection */ if (!cli_nt_session_open (cli, PIPE_SAMR)) { fprintf (stderr, "Could not initialize samr pipe!\n"); @@ -242,7 +259,7 @@ static uint32 cmd_samr_query_group(struct cli_state *cli, int argc, char **argv) slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost); strupper (server); - if ((result = cli_samr_connect(cli, server, MAXIMUM_ALLOWED_ACCESS, + if ((result = cli_samr_connect(cli, mem_ctx, server, MAXIMUM_ALLOWED_ACCESS, &connect_pol)) != NT_STATUS_NOPROBLEMO) { goto done; @@ -251,7 +268,7 @@ static uint32 cmd_samr_query_group(struct cli_state *cli, int argc, char **argv) got_connect_pol = True; fetch_domain_sid(cli); - if ((result = cli_samr_open_domain(cli, &connect_pol, + if ((result = cli_samr_open_domain(cli, mem_ctx, &connect_pol, MAXIMUM_ALLOWED_ACCESS, &domain_sid, &domain_pol)) != NT_STATUS_NOPROBLEMO) { @@ -260,7 +277,7 @@ static uint32 cmd_samr_query_group(struct cli_state *cli, int argc, char **argv) got_domain_pol = True; - if ((result = cli_samr_open_group(cli, &domain_pol, + if ((result = cli_samr_open_group(cli, mem_ctx, &domain_pol, MAXIMUM_ALLOWED_ACCESS, 0x202, &group_pol)) != NT_STATUS_NOPROBLEMO) { @@ -271,7 +288,7 @@ static uint32 cmd_samr_query_group(struct cli_state *cli, int argc, char **argv) ZERO_STRUCT(group_ctr); - if ((result = cli_samr_query_groupinfo(cli, &group_pol, info_level, + if ((result = cli_samr_query_groupinfo(cli, mem_ctx, &group_pol, info_level, &group_ctr)) != NT_STATUS_NOPROBLEMO) { goto done; @@ -280,11 +297,12 @@ static uint32 cmd_samr_query_group(struct cli_state *cli, int argc, char **argv) display_group_info_ctr(&group_ctr); done: - if (got_group_pol) cli_samr_close(cli, &group_pol); - if (got_domain_pol) cli_samr_close(cli, &domain_pol); - if (got_connect_pol) cli_samr_close(cli, &connect_pol); + if (got_group_pol) cli_samr_close(cli, mem_ctx, &group_pol); + if (got_domain_pol) cli_samr_close(cli, mem_ctx, &domain_pol); + if (got_connect_pol) cli_samr_close(cli, mem_ctx, &connect_pol); cli_nt_session_close(cli); + talloc_destroy(mem_ctx); return result; } @@ -305,12 +323,19 @@ static uint32 cmd_samr_query_usergroups(struct cli_state *cli, int argc, char ** DOM_GID *user_gids; int i; fstring server; + TALLOC_CTX *mem_ctx; if (argc != 2) { printf("Usage: %s rid\n", argv[0]); return 0; } + if (!(mem_ctx=talloc_init())) + { + DEBUG(0,("cmd_samr_query_usergroups: talloc_init returned NULL!\n")); + return NT_STATUS_UNSUCCESSFUL; + } + sscanf(argv[1], "%i", &user_rid); /* Initialise RPC connection */ @@ -322,7 +347,7 @@ static uint32 cmd_samr_query_usergroups(struct cli_state *cli, int argc, char ** slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost); strupper (server); - if ((result = cli_samr_connect(cli, server, MAXIMUM_ALLOWED_ACCESS, + if ((result = cli_samr_connect(cli, mem_ctx, server, MAXIMUM_ALLOWED_ACCESS, &connect_pol)) != NT_STATUS_NOPROBLEMO) { goto done; @@ -331,7 +356,7 @@ static uint32 cmd_samr_query_usergroups(struct cli_state *cli, int argc, char ** got_connect_pol = True; fetch_domain_sid(cli); - if ((result = cli_samr_open_domain(cli, &connect_pol, + if ((result = cli_samr_open_domain(cli, mem_ctx, &connect_pol, MAXIMUM_ALLOWED_ACCESS, &domain_sid, &domain_pol)) != NT_STATUS_NOPROBLEMO) { @@ -340,7 +365,7 @@ static uint32 cmd_samr_query_usergroups(struct cli_state *cli, int argc, char ** got_domain_pol = True; - if ((result = cli_samr_open_user(cli, &domain_pol, + if ((result = cli_samr_open_user(cli, mem_ctx, &domain_pol, MAXIMUM_ALLOWED_ACCESS, user_rid, &user_pol)) != NT_STATUS_NOPROBLEMO) { @@ -349,7 +374,7 @@ static uint32 cmd_samr_query_usergroups(struct cli_state *cli, int argc, char ** got_user_pol = True; - if ((result = cli_samr_query_usergroups(cli, &user_pol, + if ((result = cli_samr_query_usergroups(cli, mem_ctx, &user_pol, &num_groups, &user_gids)) != NT_STATUS_NOPROBLEMO) { goto done; @@ -361,11 +386,12 @@ static uint32 cmd_samr_query_usergroups(struct cli_state *cli, int argc, char ** } done: - if (got_user_pol) cli_samr_close(cli, &user_pol); - if (got_domain_pol) cli_samr_close(cli, &domain_pol); - if (got_connect_pol) cli_samr_close(cli, &connect_pol); + if (got_user_pol) cli_samr_close(cli, mem_ctx, &user_pol); + if (got_domain_pol) cli_samr_close(cli, mem_ctx, &domain_pol); + if (got_connect_pol) cli_samr_close(cli, mem_ctx, &connect_pol); cli_nt_session_close(cli); + talloc_destroy(mem_ctx); return result; } @@ -382,12 +408,19 @@ static uint32 cmd_samr_query_groupmem(struct cli_state *cli, int argc, char **ar uint32 num_members, *group_rids, *group_attrs, group_rid; int i; fstring server; + TALLOC_CTX *mem_ctx; if (argc != 2) { printf("Usage: %s rid\n", argv[0]); return 0; } + if (!(mem_ctx=talloc_init())) + { + DEBUG(0,("cmd_samr_query_groupmem: talloc_init returned NULL!\n")); + return NT_STATUS_UNSUCCESSFUL; + } + sscanf(argv[1], "%i", &group_rid); /* Initialise RPC connection */ @@ -399,7 +432,7 @@ static uint32 cmd_samr_query_groupmem(struct cli_state *cli, int argc, char **ar slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost); strupper (server); - if ((result = cli_samr_connect(cli, server, MAXIMUM_ALLOWED_ACCESS, + if ((result = cli_samr_connect(cli, mem_ctx, server, MAXIMUM_ALLOWED_ACCESS, &connect_pol)) != NT_STATUS_NOPROBLEMO) { goto done; @@ -408,7 +441,7 @@ static uint32 cmd_samr_query_groupmem(struct cli_state *cli, int argc, char **ar got_connect_pol = True; fetch_domain_sid(cli); - if ((result = cli_samr_open_domain(cli, &connect_pol, + if ((result = cli_samr_open_domain(cli, mem_ctx, &connect_pol, MAXIMUM_ALLOWED_ACCESS, &domain_sid, &domain_pol)) != NT_STATUS_NOPROBLEMO) { @@ -417,7 +450,7 @@ static uint32 cmd_samr_query_groupmem(struct cli_state *cli, int argc, char **ar got_domain_pol = True; - if ((result = cli_samr_open_group(cli, &domain_pol, + if ((result = cli_samr_open_group(cli, mem_ctx, &domain_pol, MAXIMUM_ALLOWED_ACCESS, group_rid, &group_pol)) != NT_STATUS_NOPROBLEMO) { @@ -426,7 +459,7 @@ static uint32 cmd_samr_query_groupmem(struct cli_state *cli, int argc, char **ar got_group_pol = True; - if ((result = cli_samr_query_groupmem(cli, &group_pol, + if ((result = cli_samr_query_groupmem(cli, mem_ctx, &group_pol, &num_members, &group_rids, &group_attrs)) != NT_STATUS_NOPROBLEMO) { @@ -439,11 +472,12 @@ static uint32 cmd_samr_query_groupmem(struct cli_state *cli, int argc, char **ar } done: - if (got_group_pol) cli_samr_close(cli, &group_pol); - if (got_domain_pol) cli_samr_close(cli, &domain_pol); - if (got_connect_pol) cli_samr_close(cli, &connect_pol); + if (got_group_pol) cli_samr_close(cli, mem_ctx, &group_pol); + if (got_domain_pol) cli_samr_close(cli, mem_ctx, &domain_pol); + if (got_connect_pol) cli_samr_close(cli, mem_ctx, &connect_pol); cli_nt_session_close(cli); + talloc_destroy(mem_ctx); return result; } diff --git a/source/rpcclient/rpcclient.c b/source/rpcclient/rpcclient.c index db4b5c5bdeb..80e1787df72 100644 --- a/source/rpcclient/rpcclient.c +++ b/source/rpcclient/rpcclient.c @@ -201,22 +201,29 @@ void fetch_domain_sid(struct cli_state *cli) uint32 result = 0, info_class = 5; fstring domain_name; static BOOL got_domain_sid; + TALLOC_CTX *mem_ctx; if (got_domain_sid) return; + if (!(mem_ctx=talloc_init())) + { + DEBUG(0,("fetch_domain_sid: talloc_init returned NULL!\n")); + return NT_STATUS_UNSUCCESSFUL; + } + if (!cli_nt_session_open (cli, PIPE_LSARPC)) { fprintf(stderr, "could not initialise lsa pipe\n"); goto error; } - if ((result = cli_lsa_open_policy(cli, True, + if ((result = cli_lsa_open_policy(cli, mem_ctx, True, SEC_RIGHTS_MAXIMUM_ALLOWED, &pol) != NT_STATUS_NOPROBLEMO)) { goto error; } - if ((result = cli_lsa_query_info_policy(cli, &pol, info_class, + if ((result = cli_lsa_query_info_policy(cli, mem_ctx, &pol, info_class, domain_name, &domain_sid)) != NT_STATUS_NOPROBLEMO) { goto error; @@ -224,8 +231,9 @@ void fetch_domain_sid(struct cli_state *cli) got_domain_sid = True; - cli_lsa_close(cli, &pol); + cli_lsa_close(cli, mem_ctx, &pol); cli_nt_session_close(cli); + talloc_destroy(mem_ctx); return; |