6901693 memory leaks in acltext.c
authorGowtham Thommandra <Gowtham.Thommandra@Sun.COM>
Mon, 01 Feb 2010 11:22:42 +0530
changeset 11605 36ab2c35cbe8
parent 11604 32b1ad1f9837
child 11606 3abeacfac929
6901693 memory leaks in acltext.c
usr/src/lib/libsec/common/acltext.c
--- a/usr/src/lib/libsec/common/acltext.c	Mon Feb 01 11:54:17 2010 +0800
+++ b/usr/src/lib/libsec/common/acltext.c	Mon Feb 01 11:22:42 2010 +0530
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -124,8 +124,8 @@
 	idmap_rid_t rid;
 	int error = IDMAP_ERR_NORESULT;
 	int len;
-	char *domain;
-	char *name;
+	char *domain = NULL;
+	char *name = NULL;
 
 	*sidp = NULL;
 
@@ -174,9 +174,12 @@
 		len = snprintf(NULL, 0, "%s@%s", name, domain);
 		if (*sidp = malloc(len + 1))
 			(void) snprintf(*sidp, len + 1, "%s@%s", name, domain);
+	}
+
+	if (name)
 		free(name);
+	if (domain)
 		free(domain);
-	}
 	return (*sidp ? 0 : 1);
 }
 
@@ -894,6 +897,7 @@
 	int		isdir = (aceaclp->acl_flags & ACL_IS_DIR);
 	dynaclstr_t 	*dstr;
 	char		*aclexport = NULL;
+	char		*rawsidp = NULL;
 
 	if (aclp == NULL)
 		return (NULL);
@@ -925,7 +929,6 @@
 		    ((aclp->a_flags & ACE_TYPE_FLAGS) ==
 		    ACE_IDENTIFIER_GROUP))) {
 			char id[ID_STR_MAX], *idstr;
-			char *rawsidp;
 
 			if (error = str_append(dstr, ":"))
 				break;
@@ -937,9 +940,9 @@
 				error = getsidname(aclp->a_who,
 				    ((aclp->a_flags & ACE_TYPE_FLAGS) == 0) ?
 				    B_TRUE : B_FALSE, &idstr, 1);
+				rawsidp = idstr;
 				if (error)
 					break;
-				rawsidp = idstr;
 			} else if (aclp->a_who > MAXUID &&
 			    !(flags & ACL_NORESOLVE)) {
 				idstr = lltostr(UID_NOBODY,
@@ -950,14 +953,19 @@
 			}
 			if (error = str_append(dstr, idstr))
 				break;
-			if (rawsidp)
+			if (rawsidp) {
 				free(rawsidp);
+				rawsidp = NULL;
+			}
 		}
 		if (i < aclcnt - 1) {
 			if (error = str_append(dstr, ","))
 				break;
 		}
 	}
+
+	if (rawsidp)
+		free(rawsidp);
 	if (error) {
 		if (dstr->d_aclexport)
 			free(dstr->d_aclexport);