On 2013-09-23 16:09:52, John Johansen wrote: > The parser is not correctly clearing cache files if cache-loc is specified. > Fix this and unify creation and use of cacheloc so that we can hopefully > avoid these bugs. > > Signed-off-by: John Johansen <[email protected]>
Acked-by: Tyler Hicks <[email protected]> > > --- > > === modified file 'parser/parser_main.c' > --- parser/parser_main.c 2013-09-23 21:56:16 +0000 > +++ parser/parser_main.c 2013-09-23 22:23:20 +0000 > @@ -1086,12 +1086,7 @@ > */ > if ((profilename && option != OPTION_REMOVE) && !force_complain && > !skip_cache) { > - if (cacheloc) { > - if (asprintf(&cachename, "%s/%s", cacheloc, > basename)<0) { > - PERROR(_("Memory allocation error.")); > - exit(1); > - } > - } else if (asprintf(&cachename, "%s/%s/%s", basedir, "cache", > basename)<0) { > + if (asprintf(&cachename, "%s/%s", cacheloc, basename)<0) { > PERROR(_("Memory allocation error.")); > exit(1); > } > @@ -1260,18 +1255,8 @@ > > static int clear_cache_files(const char *path) > { > - char *cache; > int error; > - > - if (asprintf(&cache, "%s/cache", path) == -1) { > - perror("asprintf"); > - exit(1); > - } > - > - error = dir_for_each(cache, clear_cache_cb); > - > - free(cache); > - > + error = dir_for_each(path, clear_cache_cb); > return error; > } > > @@ -1300,7 +1285,6 @@ > { > char *cache_features_path = NULL; > char *cache_flags = NULL; > - int rc; > > /* Get the match string to determine type of regex support needed */ > get_match_string(); > @@ -1327,12 +1311,8 @@ > * - If cache/.features exists, and does not match flags_string, > * force cache reading/writing off. > */ > - if (cacheloc) > - rc = asprintf(&cache_features_path, "%s/.features", cacheloc); > - else > - rc = asprintf(&cache_features_path, "%s/cache/.features", > basedir); > - if (rc == -1) { > - perror("asprintf"); > + if (asprintf(&cache_features_path, "%s/.features", cacheloc) == -1) { > + PERROR(_("Memory allocation error.")); > exit(1); > } > > @@ -1340,7 +1320,7 @@ > if (cache_flags) { > if (strcmp(flags_string, cache_flags) != 0) { > if (write_cache && cond_clear_cache) { > - if (clear_cache_files(basedir) || > + if (clear_cache_files(cacheloc) || > create_cache(cache_features_path, > flags_string)) { > skip_read_cache = 1; > @@ -1385,8 +1365,16 @@ > return retval; > } > > + /* create the cacheloc once and use it everywhere */ > + if (!cacheloc) { > + if (asprintf(&cacheloc, "%s/cache", basedir) == -1) { > + PERROR(_("Memory allocation error.")); > + exit(1); > + } > + } > + > if (force_clear_cache) { > - clear_cache_files(basedir); > + clear_cache_files(cacheloc); > exit(0); > } > > > > > -- > AppArmor mailing list > [email protected] > Modify settings or unsubscribe at: > https://lists.ubuntu.com/mailman/listinfo/apparmor
signature.asc
Description: Digital signature
-- AppArmor mailing list [email protected] Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor
