From 0dc248b6f929781deb31e0834c4dd16ac3da1be5 Mon Sep 17 00:00:00 2001 From: Alex Jordan Date: Thu, 7 Jul 2016 15:02:23 -0700 Subject: [PATCH] changes to logic in followsymlink --- src/libpsl-native/src/followsymlink.cpp | 103 ++++++++++++------------ 1 file changed, 50 insertions(+), 53 deletions(-) diff --git a/src/libpsl-native/src/followsymlink.cpp b/src/libpsl-native/src/followsymlink.cpp index 24a544664..1540037eb 100644 --- a/src/libpsl-native/src/followsymlink.cpp +++ b/src/libpsl-native/src/followsymlink.cpp @@ -49,64 +49,13 @@ char* FollowSymLink(const char* fileName) //if lstat in IsSymLink returns -1, path does not exist if (IsSymLink(fileName) == -1) { - printf("-1 %s", fileName); return NULL; } /*If the path is a symlink, the function return the absolute filepath if valid. if not valid, return null*/ - if (IsSymLink(fileName) == 1) + if (IsSymLink(fileName) == 0) { - printf("readlink %s", fileName); - char buffer[PATH_MAX]; - ssize_t sz = readlink(fileName, buffer, PATH_MAX); - if (sz == -1) - { - switch(errno) - { - case EACCES: - errno = ERROR_ACCESS_DENIED; - break; - case EFAULT: - errno = ERROR_INVALID_ADDRESS; - break; - case EINVAL: - errno = ERROR_INVALID_NAME; - break; - case EIO: - errno = ERROR_GEN_FAILURE; - break; - case ELOOP: - errno = ERROR_STOPPED_ON_SYMLINK; - break; - case ENAMETOOLONG: - errno = ERROR_BAD_PATH_NAME; - break; - case ENOENT: - errno = ERROR_FILE_NOT_FOUND; - break; - case ENOMEM: - errno = ERROR_OUTOFMEMORY; - break; - case ENOTDIR: - errno = ERROR_BAD_PATH_NAME; - break; - default: - errno = ERROR_INVALID_FUNCTION; - } - - return NULL; - } - - buffer[sz] = '\0'; - return strndup(buffer, sz + 1); - - } - - /*else the path is not a symlink - but attempt to resolve*/ - else - { - printf("realpath %s", fileName); //Attempt to resolve with the absolute filepath char actualpath[PATH_MAX+1]; char* realPath = realpath(fileName, actualpath); @@ -150,5 +99,53 @@ char* FollowSymLink(const char* fileName) } return strndup(realPath, strlen(realPath) + 1 ); - } + + } + + /*else the path is not a symlink - but attempt to resolve*/ + else + { + char buffer[PATH_MAX]; + ssize_t sz = readlink(fileName, buffer, PATH_MAX); + + if (sz == -1) + { + switch(errno) + { + case EACCES: + errno = ERROR_ACCESS_DENIED; + break; + case EFAULT: + errno = ERROR_INVALID_ADDRESS; + break; + case EINVAL: + errno = ERROR_INVALID_NAME; + case EIO: + errno = ERROR_GEN_FAILURE; + break; + case ELOOP: + errno = ERROR_STOPPED_ON_SYMLINK; + break; + case ENAMETOOLONG: + errno = ERROR_BAD_PATH_NAME; + break; + case ENOENT: + errno = ERROR_FILE_NOT_FOUND; + break; + case ENOMEM: + errno = ERROR_OUTOFMEMORY; + break; + case ENOTDIR: + errno = ERROR_BAD_PATH_NAME; + break; + default: + errno = ERROR_INVALID_FUNCTION; + } + + return NULL; + } + + buffer[sz] = '\0'; + return strndup(buffer, sz + 1); +} }