On Fri, 2016-05-13 at 10:55 +0200, Pavel Hrdina wrote: > Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx> > --- > src/security/virt-aa-helper.c | 76 +++++-------------------------------------- > 1 file changed, 9 insertions(+), 67 deletions(-) > > diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c > index 7eeb4ef..537e89d 100644 > --- a/src/security/virt-aa-helper.c > +++ b/src/security/virt-aa-helper.c > @@ -148,62 +148,6 @@ vah_info(const char *str) > } > > /* > - * Replace @oldstr in @orig with @repstr > - * @len is number of bytes allocated for @orig. Assumes @orig, @oldstr and > - * @repstr are null terminated > - */ > -static int > -replace_string(char *orig, const size_t len, const char *oldstr, > - const char *repstr) > -{ > - int idx; > - char *pos = NULL; > - char *tmp = NULL; > - > - if ((pos = strstr(orig, oldstr)) == NULL) { > - vah_error(NULL, 0, _("could not find replacement string")); > - return -1; > - } > - > - if (VIR_ALLOC_N_QUIET(tmp, len) < 0) { > - vah_error(NULL, 0, _("could not allocate memory for string")); > - return -1; > - } > - tmp[0] = '\0'; > - > - idx = abs(pos - orig); > - > - /* copy everything up to oldstr */ > - strncat(tmp, orig, idx); > - > - /* add the replacement string */ > - if (strlen(tmp) + strlen(repstr) > len - 1) { > - vah_error(NULL, 0, _("not enough space in target buffer")); > - VIR_FREE(tmp); > - return -1; > - } > - strcat(tmp, repstr); > - > - /* add everything after oldstr */ > - if (strlen(tmp) + strlen(orig) - (idx + strlen(oldstr)) > len - 1) { > - vah_error(NULL, 0, _("not enough space in target buffer")); > - VIR_FREE(tmp); > - return -1; > - } > - strncat(tmp, orig + idx + strlen(oldstr), > - strlen(orig) - (idx + strlen(oldstr))); > - > - if (virStrcpy(orig, tmp, len) == NULL) { > - vah_error(NULL, 0, _("error replacing string")); > - VIR_FREE(tmp); > - return -1; > - } > - VIR_FREE(tmp); > - > - return 0; > -} > - > -/* > * run an apparmor_parser command > */ > static int > @@ -340,6 +284,7 @@ create_profile(const char *profile, const char *profile_name, > char *pcontent = NULL; > char *replace_name = NULL; > char *replace_files = NULL; > + char *tmp = NULL; > const char *template_name = "\nprofile LIBVIRT_TEMPLATE"; > const char *template_end = "\n}"; > int tlen, plen; > @@ -412,19 +357,16 @@ create_profile(const char *profile, const char *profile_name, > goto clean_replace; > } > > - if (VIR_ALLOC_N_QUIET(pcontent, plen) < 0) { > - vah_error(NULL, 0, _("could not allocate memory for profile")); > - goto clean_replace; > - } > - pcontent[0] = '\0'; > - strcpy(pcontent, tcontent); > - > - if (replace_string(pcontent, plen, template_name, replace_name) < 0) > + if (!(pcontent = virStringReplace(tcontent, template_name, replace_name))) > goto clean_all; > > - if ((virtType != VIR_DOMAIN_VIRT_LXC) && > - replace_string(pcontent, plen, template_end, replace_files) < 0) > - goto clean_all; > + if (virtType != VIR_DOMAIN_VIRT_LXC) { > + if (!(tmp = virStringReplace(pcontent, template_end, replace_files))) > + goto clean_all; > + VIR_FREE(pcontent); > + pcontent = tmp; > + tmp = NULL; > + } > > /* write the file */ > if ((fd = open(profile, O_CREAT | O_EXCL | O_WRONLY, 0644)) == -1) { ACK As a side note, the use of cleanup labels could probably be simplified a lot here, if you feel like doing that in a separate patch... -- Andrea Bolognani Software Engineer - Virtualization Team -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list