On Fri, May 13, 2016 at 05:10:15PM +0200, Andrea Bolognani wrote:
On Fri, 2016-05-13 at 10:55 +0200, Pavel Hrdina wrote:
> Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
> ---
> 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
Thaks, pushed.
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...
Yes, I've noticed that. This patch was mainly to fix clang build and Jan
pointed out, that the replace_string() could be removed and replaced by
virStringReplace().