git.samba.org
/
nivanova
/
samba-autobuild
/
.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
877db70
)
dynamic memory allocation in samr enum dom users. works with 849 entries now.
author
Luke Leighton
<lkcl@samba.org>
Tue, 23 Mar 1999 20:43:44 +0000
(20:43 +0000)
committer
Luke Leighton
<lkcl@samba.org>
Tue, 23 Mar 1999 20:43:44 +0000
(20:43 +0000)
(This used to be commit
103557e26b071bf1e65e025ef5a52ccdbf483d02
)
source3/include/rpc_samr.h
patch
|
blob
|
history
source3/rpc_client/cli_samr.c
patch
|
blob
|
history
source3/rpc_parse/parse_samr.c
patch
|
blob
|
history
source3/rpc_server/srv_samr.c
patch
|
blob
|
history
diff --git
a/source3/include/rpc_samr.h
b/source3/include/rpc_samr.h
index 54df4844447a4fd7cd85ddf112771f3d495447b5..44e1c6148417cce73739e6c2e4dfffeb9a5bb62d 100644
(file)
--- a/
source3/include/rpc_samr.h
+++ b/
source3/include/rpc_samr.h
@@
-535,8
+535,8
@@
typedef struct r_samr_enum_dom_users_info
uint32 num_entries3;
uint32 num_entries3;
- SAM_ENTRY
sam[MAX_SAM_ENTRIES]
;
- UNISTR2
uni_acct_name[MAX_SAM_ENTRIES]
;
+ SAM_ENTRY
*sam
;
+ UNISTR2
*uni_acct_name
;
uint32 num_entries4;
uint32 num_entries4;
diff --git
a/source3/rpc_client/cli_samr.c
b/source3/rpc_client/cli_samr.c
index f822937cef53eeeba3b91cf2245a55d80e126bc5..49db8c821608a4d7a7d40a136d757fe1400cf127 100644
(file)
--- a/
source3/rpc_client/cli_samr.c
+++ b/
source3/rpc_client/cli_samr.c
@@
-769,13
+769,6
@@
BOOL samr_enum_dom_users(struct cli_state *cli, uint16 fnum,
int name_idx = 0;
*num_sam_users = r_e.num_entries2;
int name_idx = 0;
*num_sam_users = r_e.num_entries2;
- if (*num_sam_users > MAX_SAM_ENTRIES)
- {
- *num_sam_users = MAX_SAM_ENTRIES;
- DEBUG(2,("samr_enum_dom_users: sam user entries limited to %d\n",
- *num_sam_users));
- }
-
*sam = (struct acct_info*) malloc(sizeof(struct acct_info) * (*num_sam_users));
if ((*sam) == NULL)
*sam = (struct acct_info*) malloc(sizeof(struct acct_info) * (*num_sam_users));
if ((*sam) == NULL)
@@
-798,6
+791,15
@@
BOOL samr_enum_dom_users(struct cli_state *cli, uint16 fnum,
}
valid_pol = True;
}
}
valid_pol = True;
}
+
+ if (r_e.sam != NULL)
+ {
+ free(r_e.sam);
+ }
+ if (r_e.uni_acct_name != NULL)
+ {
+ free(r_e.uni_acct_name);
+ }
}
prs_mem_free(&data );
}
prs_mem_free(&data );
diff --git
a/source3/rpc_parse/parse_samr.c
b/source3/rpc_parse/parse_samr.c
index f4447c7dc93578c5e3b46d9f6cb599569e58b378..a6069f5ff32266bcc033d3f10e12e6d4069f9bfc 100644
(file)
--- a/
source3/rpc_parse/parse_samr.c
+++ b/
source3/rpc_parse/parse_samr.c
@@
-1047,14
+1047,9
@@
void make_samr_r_enum_dom_users(SAMR_R_ENUM_DOM_USERS *r_u,
DEBUG(5,("make_samr_r_enum_dom_users\n"));
DEBUG(5,("make_samr_r_enum_dom_users\n"));
- if (num_sam_entries >= MAX_SAM_ENTRIES)
- {
- num_sam_entries = MAX_SAM_ENTRIES;
- DEBUG(5,("limiting number of entries to %d\n",
- num_sam_entries));
- }
-
r_u->next_idx = next_idx;
r_u->next_idx = next_idx;
+ r_u->sam = NULL;
+ r_u->uni_acct_name = NULL;
if (num_sam_entries != 0)
{
if (num_sam_entries != 0)
{
@@
-1063,8
+1058,14
@@
void make_samr_r_enum_dom_users(SAMR_R_ENUM_DOM_USERS *r_u,
r_u->num_entries2 = num_sam_entries;
r_u->num_entries3 = num_sam_entries;
r_u->num_entries2 = num_sam_entries;
r_u->num_entries3 = num_sam_entries;
- SMB_ASSERT_ARRAY(r_u->sam, num_sam_entries);
- SMB_ASSERT_ARRAY(r_u->uni_acct_name, num_sam_entries);
+ r_u->sam = Realloc(NULL, r_u->num_entries2 * sizeof(r_u->sam[0]));
+ r_u->uni_acct_name = Realloc(NULL, r_u->num_entries2 * sizeof(r_u->uni_acct_name[0]));
+
+ if (r_u->sam == NULL || r_u->uni_acct_name == NULL)
+ {
+ DEBUG(0,("NULL pointers in SAMR_R_QUERY_DISPINFO\n"));
+ return;
+ }
for (i = 0; i < num_sam_entries; i++)
{
for (i = 0; i < num_sam_entries; i++)
{
@@
-1110,7
+1111,17
@@
void samr_io_r_enum_dom_users(char *desc, SAMR_R_ENUM_DOM_USERS *r_u, prs_struc
prs_uint32("ptr_entries2", ps, depth, &(r_u->ptr_entries2));
prs_uint32("num_entries3", ps, depth, &(r_u->num_entries3));
prs_uint32("ptr_entries2", ps, depth, &(r_u->ptr_entries2));
prs_uint32("num_entries3", ps, depth, &(r_u->num_entries3));
- SMB_ASSERT_ARRAY(r_u->sam, r_u->num_entries2);
+ if (ps->io)
+ {
+ r_u->sam = Realloc(NULL, r_u->num_entries2 * sizeof(r_u->sam[0]));
+ r_u->uni_acct_name = Realloc(NULL, r_u->num_entries2 * sizeof(r_u->uni_acct_name[0]));
+ }
+
+ if ((r_u->sam == NULL || r_u->uni_acct_name == NULL) && r_u->num_entries2 != 0)
+ {
+ DEBUG(0,("NULL pointers in SAMR_R_QUERY_DISPINFO\n"));
+ return;
+ }
for (i = 0; i < r_u->num_entries2; i++)
{
for (i = 0; i < r_u->num_entries2; i++)
{
@@
-1118,8
+1129,6
@@
void samr_io_r_enum_dom_users(char *desc, SAMR_R_ENUM_DOM_USERS *r_u, prs_struc
sam_io_sam_entry("", &(r_u->sam[i]), ps, depth);
}
sam_io_sam_entry("", &(r_u->sam[i]), ps, depth);
}
- SMB_ASSERT_ARRAY(r_u->uni_acct_name, r_u->num_entries2);
-
for (i = 0; i < r_u->num_entries2; i++)
{
prs_grow(ps);
for (i = 0; i < r_u->num_entries2; i++)
{
prs_grow(ps);
diff --git
a/source3/rpc_server/srv_samr.c
b/source3/rpc_server/srv_samr.c
index 4f190270dda8c044d72a4f42638d6091c2c0f520..0371fbc88c492f64986f65bcec8faf22d622a076 100644
(file)
--- a/
source3/rpc_server/srv_samr.c
+++ b/
source3/rpc_server/srv_samr.c
@@
-354,6
+354,16
@@
static void samr_reply_enum_dom_users(SAMR_Q_ENUM_DOM_USERS *q_u,
/* store the response in the SMB stream */
samr_io_r_enum_dom_users("", &r_e, rdata, 0);
/* store the response in the SMB stream */
samr_io_r_enum_dom_users("", &r_e, rdata, 0);
+ if (r_e.sam != NULL)
+ {
+ free(r_e.sam);
+ }
+
+ if (r_e.uni_acct_name != NULL)
+ {
+ free(r_e.uni_acct_name);
+ }
+
DEBUG(5,("samr_enum_dom_users: %d\n", __LINE__));
}
DEBUG(5,("samr_enum_dom_users: %d\n", __LINE__));
}