From bbf6f00c25b6a2bed23c35eac6d62998ecdb338c Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Thu, 5 Nov 2009 14:34:36 -0800 Subject: 6747532 ns_lookup_bypid spams syslog with too many messages 6888836 Not listing all files in a directory of a CIFS share in Windows XP 6812570 Trans2 is missing pass-through levels: FILE_RENAME_INFORMATION (and others) 6888827 Add Unicode codepage support 6865488 libadutils: leak in ldap_lookup_domains_in_forest() 6888708 idmapd crashing periodically. Need cores analyzed. 6891342 invalid, redundant SQL in rule WHERE expressions 6891767 minor cleanups in idmap 6892544 Panic occurred at smb_node_ref+0x7f(ffffffd612297310) --HG-- rename : usr/src/uts/common/smbsrv/cifs.h => usr/src/uts/common/smbsrv/smb.h --- usr/src/lib/libadutils/common/addisc.c | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'usr/src/lib/libadutils/common/addisc.c') 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; -- cgit v1.2.3