summaryrefslogtreecommitdiff
path: root/usr/src/lib/libadutils/common/addisc.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libadutils/common/addisc.c')
-rw-r--r--usr/src/lib/libadutils/common/addisc.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/usr/src/lib/libadutils/common/addisc.c b/usr/src/lib/libadutils/common/addisc.c
index 7a9805bc68..b32f9d7694 100644
--- a/usr/src/lib/libadutils/common/addisc.c
+++ b/usr/src/lib/libadutils/common/addisc.c
@@ -672,7 +672,7 @@ srv_query(res_state state, const char *svc_name, const char *dname,
char **rrname, uint32_t *ttl)
{
idmap_ad_disc_ds_t *srv;
- idmap_ad_disc_ds_t *srv_res;
+ idmap_ad_disc_ds_t *srv_res = NULL;
union {
HEADER hdr;
uchar_t buf[NS_MAXMSG];
@@ -748,6 +748,11 @@ srv_query(res_state state, const char *svc_name, const char *dname,
/* 3. walk through the answer section */
srv_res = calloc(ancount + 1, sizeof (idmap_ad_disc_ds_t));
+ if (srv_res == NULL) {
+ logger(LOG_ERR, "Out of memory");
+ return (NULL);
+ }
+
*ttl = (uint32_t)-1;
for (srv = srv_res, cnt = ancount;
@@ -757,10 +762,15 @@ srv_query(res_state state, const char *svc_name, const char *dname,
sizeof (namebuf));
if (len < 0) {
logger(LOG_ERR, "DNS query invalid message format");
- return (NULL);
+ goto err;
}
- if (rrname != NULL && *rrname == NULL)
+ if (rrname != NULL && *rrname == NULL) {
*rrname = strdup(namebuf);
+ if (*rrname == NULL) {
+ logger(LOG_ERR, "Out of memory");
+ goto err;
+ }
+ }
ptr += len;
NS_GET16(type, ptr);
NS_GET16(class, ptr);
@@ -768,7 +778,7 @@ srv_query(res_state state, const char *svc_name, const char *dname,
NS_GET16(size, ptr);
if ((end = ptr + size) > eom) {
logger(LOG_ERR, "DNS query invalid message format");
- return (NULL);
+ goto err;
}
if (type != T_SRV) {
@@ -783,7 +793,7 @@ srv_query(res_state state, const char *svc_name, const char *dname,
sizeof (srv->host));
if (len < 0) {
logger(LOG_ERR, "DNS query invalid SRV record");
- return (NULL);
+ goto err;
}
if (rttl < *ttl)
@@ -803,6 +813,14 @@ srv_query(res_state state, const char *svc_name, const char *dname,
(int (*)(const void *, const void *))srvcmp);
return (srv_res);
+
+err:
+ free(srv_res);
+ if (rrname != NULL) {
+ free(*rrname);
+ *rrname = NULL;
+ }
+ return (NULL);
}
@@ -1045,6 +1063,7 @@ ldap_lookup_domains_in_forest(LDAP **ld, idmap_ad_disc_ds_t *globalCatalogs)
adutils_sid_t sid;
char *sid_str;
char *name;
+ char *dn;
sid_ber = ldap_get_values_len(*ld, entry,
"objectSid");
@@ -1062,7 +1081,9 @@ ldap_lookup_domains_in_forest(LDAP **ld, idmap_ad_disc_ds_t *globalCatalogs)
strcpy(domains[ndomains].sid, sid_str);
free(sid_str);
- name = DN_to_DNS(ldap_get_dn(*ld, entry));
+ dn = ldap_get_dn(*ld, entry);
+ name = DN_to_DNS(dn);
+ free(dn);
if (name == NULL)
goto err;