Author: gd Date: 2007-10-10 13:49:15 +0000 (Wed, 10 Oct 2007) New Revision: 25610
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=25610 Log: Add security_descriptor_appendv() which takes va_list directly. Guenther Modified: branches/SAMBA_4_0/source/libcli/security/security_descriptor.c Changeset: Modified: branches/SAMBA_4_0/source/libcli/security/security_descriptor.c =================================================================== --- branches/SAMBA_4_0/source/libcli/security/security_descriptor.c 2007-10-10 13:23:06 UTC (rev 25609) +++ branches/SAMBA_4_0/source/libcli/security/security_descriptor.c 2007-10-10 13:49:15 UTC (rev 25610) @@ -338,13 +338,11 @@ that would create a sd with one DACL ACE */ -struct security_descriptor *security_descriptor_append(struct security_descriptor *sd, - ...) +struct security_descriptor *security_descriptor_appendv(struct security_descriptor *sd, + va_list ap) { - va_list ap; const char *sidstr; - va_start(ap, sd); while ((sidstr = va_arg(ap, const char *))) { struct dom_sid *sid; struct security_ace *ace = talloc(sd, struct security_ace); @@ -352,7 +350,6 @@ if (ace == NULL) { talloc_free(sd); - va_end(ap); return NULL; } ace->type = va_arg(ap, unsigned int); @@ -360,7 +357,6 @@ ace->flags = va_arg(ap, unsigned int); sid = dom_sid_parse_talloc(ace, sidstr); if (sid == NULL) { - va_end(ap); talloc_free(sd); return NULL; } @@ -368,15 +364,24 @@ status = security_descriptor_dacl_add(sd, ace); /* TODO: check: would talloc_free(ace) here be correct? */ if (!NT_STATUS_IS_OK(status)) { - va_end(ap); talloc_free(sd); return NULL; } } + + return sd; +} + +struct security_descriptor *security_descriptor_append(struct security_descriptor *sd, + ...) +{ + va_list ap; + + va_start(ap, sd); + sd = security_descriptor_appendv(sd, ap); va_end(ap); return sd; - } struct security_descriptor *security_descriptor_create(TALLOC_CTX *mem_ctx, @@ -409,7 +414,7 @@ } va_start(ap, group_sid); - sd = security_descriptor_append(sd, ap); + sd = security_descriptor_appendv(sd, ap); va_end(ap); return sd;