mirror of
https://github.com/samba-team/samba.git
synced 2025-01-27 14:04:05 +03:00
Fix Out of memory checks
Günther pushed an older version of the patch "s3:auth add function to copy a netr_SamInfo3 structure" that was missing these fixes.
This commit is contained in:
parent
2a6a696e32
commit
3bb819581b
@ -393,51 +393,73 @@ struct netr_SamInfo3 *copy_netr_SamInfo3(TALLOC_CTX *mem_ctx,
|
||||
{
|
||||
struct netr_SamInfo3 *info3;
|
||||
|
||||
info3 = talloc(mem_ctx, struct netr_SamInfo3);
|
||||
info3 = talloc_zero(mem_ctx, struct netr_SamInfo3);
|
||||
if (!info3) return NULL;
|
||||
|
||||
/* first copy all, then realloc pointers */
|
||||
info3->base = orig->base;
|
||||
|
||||
info3->base.account_name.string =
|
||||
talloc_strdup(info3, orig->base.account_name.string);
|
||||
RET_NOMEM(info3->base.account_name.string);
|
||||
info3->base.full_name.string =
|
||||
talloc_strdup(info3, orig->base.full_name.string);
|
||||
RET_NOMEM(info3->base.full_name.string);
|
||||
info3->base.logon_script.string =
|
||||
talloc_strdup(info3, orig->base.logon_script.string);
|
||||
RET_NOMEM(info3->base.logon_script.string);
|
||||
info3->base.profile_path.string =
|
||||
talloc_strdup(info3, orig->base.profile_path.string);
|
||||
RET_NOMEM(info3->base.profile_path.string);
|
||||
info3->base.home_directory.string =
|
||||
talloc_strdup(info3, orig->base.home_directory.string);
|
||||
RET_NOMEM(info3->base.home_directory.string);
|
||||
info3->base.home_drive.string =
|
||||
talloc_strdup(info3, orig->base.home_drive.string);
|
||||
RET_NOMEM(info3->base.home_drive.string);
|
||||
if (orig->base.account_name.string) {
|
||||
info3->base.account_name.string =
|
||||
talloc_strdup(info3, orig->base.account_name.string);
|
||||
RET_NOMEM(info3->base.account_name.string);
|
||||
}
|
||||
if (orig->base.full_name.string) {
|
||||
info3->base.full_name.string =
|
||||
talloc_strdup(info3, orig->base.full_name.string);
|
||||
RET_NOMEM(info3->base.full_name.string);
|
||||
}
|
||||
if (orig->base.logon_script.string) {
|
||||
info3->base.logon_script.string =
|
||||
talloc_strdup(info3, orig->base.logon_script.string);
|
||||
RET_NOMEM(info3->base.logon_script.string);
|
||||
}
|
||||
if (orig->base.profile_path.string) {
|
||||
info3->base.profile_path.string =
|
||||
talloc_strdup(info3, orig->base.profile_path.string);
|
||||
RET_NOMEM(info3->base.profile_path.string);
|
||||
}
|
||||
if (orig->base.home_directory.string) {
|
||||
info3->base.home_directory.string =
|
||||
talloc_strdup(info3, orig->base.home_directory.string);
|
||||
RET_NOMEM(info3->base.home_directory.string);
|
||||
}
|
||||
if (orig->base.home_drive.string) {
|
||||
info3->base.home_drive.string =
|
||||
talloc_strdup(info3, orig->base.home_drive.string);
|
||||
RET_NOMEM(info3->base.home_drive.string);
|
||||
}
|
||||
|
||||
info3->base.groups.rids =
|
||||
talloc_memdup(info3, orig->base.groups.rids,
|
||||
(sizeof(struct samr_RidWithAttribute) *
|
||||
orig->base.groups.count));
|
||||
RET_NOMEM(info3->base.groups.rids);
|
||||
if (orig->base.groups.count) {
|
||||
info3->base.groups.rids =
|
||||
talloc_memdup(info3, orig->base.groups.rids,
|
||||
(sizeof(struct samr_RidWithAttribute) *
|
||||
orig->base.groups.count));
|
||||
RET_NOMEM(info3->base.groups.rids);
|
||||
}
|
||||
|
||||
info3->base.logon_server.string =
|
||||
talloc_strdup(info3, orig->base.logon_server.string);
|
||||
RET_NOMEM(info3->base.logon_server.string);
|
||||
info3->base.domain.string =
|
||||
talloc_strdup(info3, orig->base.domain.string);
|
||||
RET_NOMEM(info3->base.domain.string);
|
||||
if (orig->base.logon_server.string) {
|
||||
info3->base.logon_server.string =
|
||||
talloc_strdup(info3, orig->base.logon_server.string);
|
||||
RET_NOMEM(info3->base.logon_server.string);
|
||||
}
|
||||
if (orig->base.domain.string) {
|
||||
info3->base.domain.string =
|
||||
talloc_strdup(info3, orig->base.domain.string);
|
||||
RET_NOMEM(info3->base.domain.string);
|
||||
}
|
||||
|
||||
info3->base.domain_sid = sid_dup_talloc(info3, orig->base.domain_sid);
|
||||
RET_NOMEM(info3->base.domain_sid);
|
||||
if (orig->base.domain_sid) {
|
||||
info3->base.domain_sid = sid_dup_talloc(info3, orig->base.domain_sid);
|
||||
RET_NOMEM(info3->base.domain_sid);
|
||||
}
|
||||
|
||||
info3->sids = talloc_memdup(info3, orig->sids,
|
||||
(sizeof(struct netr_SidAttr) *
|
||||
if (orig->sidcount) {
|
||||
info3->sids = talloc_memdup(info3, orig->sids,
|
||||
(sizeof(struct netr_SidAttr) *
|
||||
orig->sidcount));
|
||||
RET_NOMEM(info3->sids);
|
||||
RET_NOMEM(info3->sids);
|
||||
}
|
||||
|
||||
return info3;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user