mirror of
https://github.com/samba-team/samba.git
synced 2025-08-03 04:22:09 +03:00
cldap: add talloc context to ads_cldap_netlogon().
Guenther
(This used to be commit 4cee7b1bd5
)
This commit is contained in:
@ -116,7 +116,9 @@ static void gotalarm_sig(void)
|
||||
/*
|
||||
receive a cldap netlogon reply
|
||||
*/
|
||||
static int recv_cldap_netlogon(int sock, struct nbt_cldap_netlogon_5 *reply)
|
||||
static int recv_cldap_netlogon(TALLOC_CTX *mem_ctx,
|
||||
int sock,
|
||||
struct nbt_cldap_netlogon_5 *reply)
|
||||
{
|
||||
int ret;
|
||||
ASN1_DATA data;
|
||||
@ -182,7 +184,7 @@ static int recv_cldap_netlogon(int sock, struct nbt_cldap_netlogon_5 *reply)
|
||||
return -1;
|
||||
}
|
||||
|
||||
ndr_err = ndr_pull_union_blob_all(&os3, talloc_tos(), &p, 5,
|
||||
ndr_err = ndr_pull_union_blob_all(&os3, mem_ctx, &p, 5,
|
||||
(ndr_pull_flags_fn_t)ndr_pull_nbt_cldap_netlogon);
|
||||
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
|
||||
return -1;
|
||||
@ -208,7 +210,10 @@ static int recv_cldap_netlogon(int sock, struct nbt_cldap_netlogon_5 *reply)
|
||||
do a cldap netlogon query. Always 389/udp
|
||||
*******************************************************************/
|
||||
|
||||
bool ads_cldap_netlogon(const char *server, const char *realm, struct nbt_cldap_netlogon_5 *reply)
|
||||
bool ads_cldap_netlogon(TALLOC_CTX *mem_ctx,
|
||||
const char *server,
|
||||
const char *realm,
|
||||
struct nbt_cldap_netlogon_5 *reply)
|
||||
{
|
||||
int sock;
|
||||
int ret;
|
||||
@ -225,7 +230,7 @@ bool ads_cldap_netlogon(const char *server, const char *realm, struct nbt_cldap
|
||||
close(sock);
|
||||
return False;
|
||||
}
|
||||
ret = recv_cldap_netlogon(sock, reply);
|
||||
ret = recv_cldap_netlogon(mem_ctx, sock, reply);
|
||||
close(sock);
|
||||
|
||||
if (ret == -1) {
|
||||
|
@ -177,6 +177,8 @@ bool ads_try_connect(ADS_STRUCT *ads, const char *server )
|
||||
{
|
||||
char *srv;
|
||||
struct nbt_cldap_netlogon_5 cldap_reply;
|
||||
TALLOC_CTX *mem_ctx = NULL;
|
||||
bool ret = false;
|
||||
|
||||
if (!server || !*server) {
|
||||
return False;
|
||||
@ -185,16 +187,22 @@ bool ads_try_connect(ADS_STRUCT *ads, const char *server )
|
||||
DEBUG(5,("ads_try_connect: sending CLDAP request to %s (realm: %s)\n",
|
||||
server, ads->server.realm));
|
||||
|
||||
mem_ctx = talloc_init("ads_try_connect");
|
||||
if (!mem_ctx) {
|
||||
DEBUG(0,("out of memory\n"));
|
||||
return false;
|
||||
}
|
||||
|
||||
/* this copes with inet_ntoa brokenness */
|
||||
|
||||
srv = SMB_STRDUP(server);
|
||||
|
||||
ZERO_STRUCT( cldap_reply );
|
||||
|
||||
if ( !ads_cldap_netlogon( srv, ads->server.realm, &cldap_reply ) ) {
|
||||
if ( !ads_cldap_netlogon(mem_ctx, srv, ads->server.realm, &cldap_reply ) ) {
|
||||
DEBUG(3,("ads_try_connect: CLDAP request %s failed.\n", srv));
|
||||
SAFE_FREE( srv );
|
||||
return False;
|
||||
ret = false;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Check the CLDAP reply flags */
|
||||
@ -202,8 +210,8 @@ bool ads_try_connect(ADS_STRUCT *ads, const char *server )
|
||||
if ( !(cldap_reply.server_type & ADS_LDAP) ) {
|
||||
DEBUG(1,("ads_try_connect: %s's CLDAP reply says it is not an LDAP server!\n",
|
||||
srv));
|
||||
SAFE_FREE( srv );
|
||||
return False;
|
||||
ret = false;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Fill in the ads->config values */
|
||||
@ -235,16 +243,19 @@ bool ads_try_connect(ADS_STRUCT *ads, const char *server )
|
||||
DEBUG(1,("ads_try_connect: unable to convert %s "
|
||||
"to an address\n",
|
||||
srv));
|
||||
SAFE_FREE( srv );
|
||||
return False;
|
||||
ret = false;
|
||||
goto out;
|
||||
}
|
||||
|
||||
SAFE_FREE(srv);
|
||||
|
||||
/* Store our site name. */
|
||||
sitename_store( cldap_reply.domain, cldap_reply.client_site);
|
||||
|
||||
return True;
|
||||
ret = true;
|
||||
out:
|
||||
SAFE_FREE(srv);
|
||||
TALLOC_FREE(mem_ctx);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
|
@ -203,7 +203,7 @@ static NTSTATUS dsgetdcname_cache_refresh(TALLOC_CTX *mem_ctx,
|
||||
|
||||
ZERO_STRUCT(r);
|
||||
|
||||
if (ads_cldap_netlogon(info->dc_unc,
|
||||
if (ads_cldap_netlogon(mem_ctx, info->dc_unc,
|
||||
info->domain_name, &r)) {
|
||||
|
||||
dsgetdcname_cache_delete(mem_ctx, domain_name);
|
||||
@ -618,7 +618,7 @@ static NTSTATUS process_dc_dns(TALLOC_CTX *mem_ctx,
|
||||
|
||||
DEBUG(10,("LDAP ping to %s\n", dclist[i].hostname));
|
||||
|
||||
if ((ads_cldap_netlogon(dclist[i].hostname,
|
||||
if ((ads_cldap_netlogon(mem_ctx, dclist[i].hostname,
|
||||
domain_name, &r)) &&
|
||||
(check_cldap_reply_required_flags(r.server_type, flags))) {
|
||||
valid_dc = true;
|
||||
|
@ -84,7 +84,7 @@ static int net_ads_cldap_netlogon(ADS_STRUCT *ads)
|
||||
struct nbt_cldap_netlogon_5 reply;
|
||||
|
||||
print_sockaddr(addr, sizeof(addr), &ads->ldap.ss);
|
||||
if ( !ads_cldap_netlogon(addr, ads->server.realm, &reply ) ) {
|
||||
if ( !ads_cldap_netlogon(talloc_tos(), addr, ads->server.realm, &reply ) ) {
|
||||
d_fprintf(stderr, "CLDAP query failed!\n");
|
||||
return -1;
|
||||
}
|
||||
@ -389,7 +389,7 @@ static int net_ads_workgroup(int argc, const char **argv)
|
||||
}
|
||||
|
||||
print_sockaddr(addr, sizeof(addr), &ads->ldap.ss);
|
||||
if ( !ads_cldap_netlogon(addr, ads->server.realm, &reply ) ) {
|
||||
if ( !ads_cldap_netlogon(talloc_tos(), addr, ads->server.realm, &reply ) ) {
|
||||
d_fprintf(stderr, "CLDAP query failed!\n");
|
||||
return -1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user