diff options
author | Timo Teräs <timo.teras@iki.fi> | 2012-07-16 16:34:35 +0300 |
---|---|---|
committer | Timo Teräs <timo.teras@iki.fi> | 2012-07-16 16:34:35 +0300 |
commit | 0999ec9533688ac54b332b90d238a5801c9ee6f7 (patch) | |
tree | c4058f98be32544e6a2716130cf536a7428b5b34 /src | |
parent | ea5b08d1d574ae90ad6347a4d2f0a69bb656c7af (diff) | |
download | apk-tools-0999ec9533688ac54b332b90d238a5801c9ee6f7.tar.gz apk-tools-0999ec9533688ac54b332b90d238a5801c9ee6f7.tar.bz2 apk-tools-0999ec9533688ac54b332b90d238a5801c9ee6f7.tar.xz apk-tools-0999ec9533688ac54b332b90d238a5801c9ee6f7.zip |
audit: report new directories in recurse mode too
Add new 'd' flag for it.
Diffstat (limited to 'src')
-rw-r--r-- | src/audit.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/src/audit.c b/src/audit.c index a3382a3..3631518 100644 --- a/src/audit.c +++ b/src/audit.c @@ -103,8 +103,8 @@ static int audit_directory(struct audit_ctx *actx, struct apk_db_dir *dbd, struct apk_file_info *fi) { - if (dbd == NULL) - return 'D'; + if (dbd == NULL || dbd->refs == 1) + return actx->recursive ? 'd' : 'D'; if (actx->check_permissions && (dbd->mode != 0 || dbd->uid != 0 || dbd->gid != 0)) { @@ -171,26 +171,19 @@ static int audit_directory_tree_item(void *ctx, int dirfd, const char *name) } else { child = apk_db_dir_query(db, bfull); if (child == NULL) - recurse = FALSE; - else - child = apk_db_dir_ref(child); + goto done; + child = apk_db_dir_ref(child); } reason = audit_directory(actx, db, child, &fi); if (reason < 0) goto done; - if (reason == 'D') { - if (actx->mode == MODE_SYSTEM) - goto done; - if (!actx->recursive) - recurse = FALSE; - } recurse_check: atctx->path[atctx->pathlen++] = '/'; bfull.len++; report_audit(actx, reason, bfull, NULL); - if (recurse) { + if (reason != 'D' && recurse) { atctx->dir = child; reason = apk_dir_foreach_file( openat(dirfd, name, O_RDONLY|O_CLOEXEC), |