diff options
author | Andrew Tridgell <tridge@samba.org> | 2002-08-22 22:50:57 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2002-08-22 22:50:57 +0000 |
commit | 228fc518da0404fe770175d5277fe5f5b08f9c67 (patch) | |
tree | fc1132a63ad374ba6e9dff8c482d27e01ac32899 /source/utils/net_ads_cldap.c | |
parent | e4cb106d2e3e6a41529369545a7a6ce5fe6d8986 (diff) | |
download | samba-228fc518da0404fe770175d5277fe5f5b08f9c67.tar.gz samba-228fc518da0404fe770175d5277fe5f5b08f9c67.tar.xz samba-228fc518da0404fe770175d5277fe5f5b08f9c67.zip |
a few minor cleanups in the cldap request
Diffstat (limited to 'source/utils/net_ads_cldap.c')
-rw-r--r-- | source/utils/net_ads_cldap.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/source/utils/net_ads_cldap.c b/source/utils/net_ads_cldap.c index 1bf96fc5d51..6821a5902e0 100644 --- a/source/utils/net_ads_cldap.c +++ b/source/utils/net_ads_cldap.c @@ -45,7 +45,7 @@ static unsigned pull_len_string(char **ret, const char *p) unsigned len = *p; (*ret) = NULL; if (len == 0) return 1; - (*ret) = strndup(p+1, len); + (*ret) = smb_xstrndup(p+1, len); return len+1; } @@ -156,8 +156,9 @@ static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply) blob = data_blob(NULL, 8192); ret = read(sock, blob.data, blob.length); + if (ret <= 0) { - d_printf("no reply to cldap netlogon\n"); + d_printf("no reply received to cldap netlogon\n"); return -1; } blob.length = ret; @@ -180,6 +181,11 @@ static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply) asn1_end_tag(&data); asn1_end_tag(&data); + if (data.has_error) { + d_printf("Failed to parse cldap reply\n"); + return -1; + } + file_save("cldap_reply_core.dat", os3.data, os3.length); p = os3.data; @@ -208,6 +214,18 @@ static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply) /* + free a cldap reply packet +*/ +static void cldap_reply_free(struct cldap_netlogon_reply *reply) +{ + SAFE_FREE(reply->domain); + SAFE_FREE(reply->server_name); + SAFE_FREE(reply->domain_flatname); + SAFE_FREE(reply->server_flatname); + SAFE_FREE(reply->dns_name); +} + +/* do a cldap netlogon query */ int ads_cldap_netlogon(ADS_STRUCT *ads) @@ -233,6 +251,10 @@ int ads_cldap_netlogon(ADS_STRUCT *ads) ret = recv_cldap_netlogon(sock, &reply); close(sock); + if (ret == -1) { + return -1; + } + d_printf("Version: 0x%x\n", reply.version); d_printf("GUID: "); print_guid(&reply.guid); @@ -242,6 +264,8 @@ int ads_cldap_netlogon(ADS_STRUCT *ads) d_printf("Flatname: %s\n", reply.domain_flatname); d_printf("Server Name2: %s\n", reply.server_flatname); d_printf("DNS Name: %s\n", reply.dns_name); + + cldap_reply_free(&reply); return ret; } |