From 18bf3a0effeb1d4bd5f544f442b03b6265addbd2 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Mon, 18 Nov 2019 12:38:32 +0100 Subject: Fix: do not follow symlinks when scanning xattrs from a directory Signed-off-by: David Oberhollenzer --- mkfs/dirscan.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'mkfs') 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; } -- cgit v1.2.3