diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-11-18 12:38:32 +0100 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-11-18 12:39:43 +0100 |
commit | 18bf3a0effeb1d4bd5f544f442b03b6265addbd2 (patch) | |
tree | b510d0affb6240685be3a25380eca6cc72181cc2 /mkfs/dirscan.c | |
parent | f2333bdf01e0894a412d1ab5d395687aa189eef1 (diff) |
Fix: do not follow symlinks when scanning xattrs from a directory
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'mkfs/dirscan.c')
-rw-r--r-- | mkfs/dirscan.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/mkfs/dirscan.c b/mkfs/dirscan.c index 334957a..b380d73 100644 --- a/mkfs/dirscan.c +++ b/mkfs/dirscan.c @@ -51,9 +51,9 @@ static int xattr_from_path(sqfs_xattr_writer_t *xwr, const char *path) ssize_t buflen, vallen, keylen; int ret; - buflen = listxattr(path, NULL, 0); + buflen = llistxattr(path, NULL, 0); if (buflen < 0) { - perror("listxattr"); + fprintf(stderr, "llistxattr %s: %s", path, strerror(errno)); return -1; } @@ -66,17 +66,20 @@ static int xattr_from_path(sqfs_xattr_writer_t *xwr, const char *path) return -1; } - buflen = listxattr(path, buffer, buflen); + buflen = llistxattr(path, buffer, buflen); if (buflen == -1) { - perror("listxattr"); + fprintf(stderr, "llistxattr %s: %s", path, strerror(errno)); goto fail; } key = buffer; while (buflen > 0) { - vallen = getxattr(path, key, NULL, 0); - if (vallen == -1) + vallen = lgetxattr(path, key, NULL, 0); + if (vallen == -1) { + fprintf(stderr, "lgetxattr %s: %s", + path, strerror(errno)); goto fail; + } if (vallen > 0) { value = calloc(1, vallen); @@ -85,9 +88,9 @@ static int xattr_from_path(sqfs_xattr_writer_t *xwr, const char *path) goto fail; } - vallen = getxattr(path, key, value, vallen); + vallen = lgetxattr(path, key, value, vallen); if (vallen == -1) { - fprintf(stderr, "%s: getxattr: %s\n", + fprintf(stderr, "lgetxattr %s: %s\n", path, strerror(errno)); goto fail; } |