r14272: Fix Coverity # 81: free alloc'ed storage before returning
authorJim McDonough <jmcd@samba.org>
Mon, 13 Mar 2006 00:35:33 +0000 (00:35 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:15:22 +0000 (11:15 -0500)
(This used to be commit 1899d8ea283845141b24d91d230248009744fe1a)

source3/utils/smbcacls.c

index cff3bc5dde44cf3fe2b5c4a989969b9854800601..8c08e7f2f146ccb1016df7f16d7fedaca555f023 100644 (file)
@@ -378,7 +378,7 @@ static SEC_DESC *sec_desc_parse(char *str)
 {
        const char *p = str;
        fstring tok;
-       SEC_DESC *ret;
+       SEC_DESC *ret = NULL;
        size_t sd_size;
        DOM_SID *grp_sid=NULL, *owner_sid=NULL;
        SEC_ACL *dacl=NULL;
@@ -396,7 +396,7 @@ static SEC_DESC *sec_desc_parse(char *str)
                        if (!owner_sid ||
                            !StringToSid(owner_sid, tok+6)) {
                                printf("Failed to parse owner sid\n");
-                               return NULL;
+                               goto done;
                        }
                        continue;
                }
@@ -406,7 +406,7 @@ static SEC_DESC *sec_desc_parse(char *str)
                        if (!grp_sid ||
                            !StringToSid(grp_sid, tok+6)) {
                                printf("Failed to parse group sid\n");
-                               return NULL;
+                               goto done;
                        }
                        continue;
                }
@@ -414,22 +414,23 @@ static SEC_DESC *sec_desc_parse(char *str)
                if (strncmp(tok,"ACL:", 4) == 0) {
                        SEC_ACE ace;
                        if (!parse_ace(&ace, tok+4)) {
-                               return NULL;
+                               goto done;
                        }
                        if(!add_ace(&dacl, &ace)) {
                                printf("Failed to add ACL %s\n", tok);
-                               return NULL;
+                               goto done;
                        }
                        continue;
                }
 
                printf("Failed to parse token '%s' in security descriptor,\n", tok);
-               return NULL;
+               goto done;
        }
 
        ret = make_sec_desc(ctx,revision, SEC_DESC_SELF_RELATIVE, owner_sid, grp_sid, 
                            NULL, dacl, &sd_size);
 
+  done:
        SAFE_FREE(grp_sid);
        SAFE_FREE(owner_sid);