if (blob.length < 4) {
DEBUG(0,("invalid length: %d\n", (int)blob.length));
+ free_packet(packet);
return false;
}
if (RIVAL(blob.data,0) != DGRAM_SMB) {
DEBUG(0,("invalid packet\n"));
+ free_packet(packet);
return false;
}
(ndr_pull_flags_fn_t)ndr_pull_dgram_smb_packet);
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
DEBUG(0,("failed to parse packet\n"));
+ free_packet(packet);
return false;
}
if (p.smb.smb_command != SMB_TRANSACTION) {
DEBUG(0,("invalid smb_command: %d\n", p.smb.smb_command));
+ free_packet(packet);
return false;
}
status = pull_netlogon_samlogon_response(&blob, mem_ctx, NULL, &r);
if (!NT_STATUS_IS_OK(status)) {
+ free_packet(packet);
return false;
}
if (!strequal(returned_domain, domain_name)) {
DEBUG(3, ("GetDC: Expected domain %s, got %s\n",
domain_name, returned_domain));
+ free_packet(packet);
return false;
}
*dc_name = talloc_strdup(mem_ctx, returned_dc);
if (!*dc_name) {
+ free_packet(packet);
return false;
}
*_r = (struct netlogon_samlogon_response *)talloc_memdup(
mem_ctx, &r, sizeof(struct netlogon_samlogon_response));
if (!*_r) {
+ free_packet(packet);
return false;
}
}
DEBUG(10, ("GetDC gave name %s for domain %s\n",
*dc_name, returned_domain));
+ free_packet(packet);
return True;
}