diff --git a/src/cli/file-cli.c b/src/cli/file-cli.c index b07d42ee..04644e5e 100644 --- a/src/cli/file-cli.c +++ b/src/cli/file-cli.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -72,6 +73,28 @@ static int ftw_add_list_append(const char *fpath, } else { msg(LOG_INFO, "Skipping non regular file: %s", fpath); } + } else if (typeflag == FTW_SL) { + char target[PATH_MAX]; + ssize_t len = readlink(fpath, target, sizeof (target) - 1); + if (len == -1) { + msg(LOG_ERR, "Cannot read value of symbolic link %s: %s", + fpath, strerror(errno)); + return FTW_CONTINUE; + } + target[len] = '\0'; + struct stat st; + if (stat(fpath, &st) == -1) + msg(LOG_WARNING, "Cannot stat symbolic link %s pointing to %s: %s", + fpath, target, strerror(errno)); + else if (target[0] == '/') + msg(LOG_INFO, "Skipping symbolic link %s: " + "consider adding target %s", fpath, target); + else if (realpath(fpath, target) == NULL) + msg(LOG_WARNING, "Cannot resolve symbolic link %s: %s", + fpath, strerror(errno)); + else + msg(LOG_INFO, "Skipping symbolic link %s: " + "consider adding target %s", fpath, target); } return FTW_CONTINUE; }