Linux Archive

Linux Archive (http://www.linux-archive.org/)
-   ArchLinux Pacman Development (http://www.linux-archive.org/archlinux-pacman-development/)
-   -   query_fileowner: remove trailing '/' from targets (http://www.linux-archive.org/archlinux-pacman-development/686253-query_fileowner-remove-trailing-targets.html)

Andrew Gregory 07-22-2012 05:30 PM

query_fileowner: remove trailing '/' from targets
 
Trailing '/' in paths causes lstat to dereference symlinks to directories which
causes it to break even though the symlink is a valid target.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
---
src/pacman/query.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/src/pacman/query.c b/src/pacman/query.c
index 84c9d3b..dca45e7 100644
--- a/src/pacman/query.c
+++ b/src/pacman/query.c
@@ -136,6 +136,12 @@ static int query_fileowner(alpm_list_t *targets)

filename = strdup(t->data);

+ /* trailing '/' causes lstat to resolve directory symlinks */
+ size_t len = strlen(filename) - 1;
+ while(len > 0 && filename[len] == '/'){
+ filename[len] = '';
+ }
+
if(lstat(filename, &buf) == -1) {
/* if it is not a path but a program name, then check in PATH */
if(strchr(filename, '/') == NULL) {
--
1.7.11.2

Andrew Gregory 07-26-2012 05:04 AM

query_fileowner: remove trailing '/' from targets
 
Trailing '/' in paths causes lstat to dereference symlinks to directories which
causes it to break even though the symlink is a valid target.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
---
src/pacman/query.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/src/pacman/query.c b/src/pacman/query.c
index 176f91c..d145707 100644
--- a/src/pacman/query.c
+++ b/src/pacman/query.c
@@ -137,6 +137,12 @@ static int query_fileowner(alpm_list_t *targets)

filename = strdup(t->data);

+ /* trailing '/' causes lstat to dereference directory symlinks */
+ size_t len = strlen(filename) - 1;
+ while(len > 0 && filename[len] == '/'){
+ filename[len--] = '';
+ }
+
if(lstat(filename, &buf) == -1) {
/* if it is not a path but a program name, then check in PATH */
if(strchr(filename, '/') == NULL) {
--
1.7.11.3


All times are GMT. The time now is 04:12 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.