diff options
author | Drew DeVault <sir@cmpwn.com> | 2017-05-11 12:48:30 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-11 12:48:30 -0400 |
commit | 6df0f9a7e4d41cdc56206d178e57eb141a0e3d8f (patch) | |
tree | ee9a1ffafa93162484829ca42f6f61a997ca0f90 /common/util.c | |
parent | 46fbb413f27d6f2a90ffa4216fb9fde5b7058684 (diff) | |
parent | f470fa58a3fb56f456f83f08e3509d9785ad06d5 (diff) |
Merge pull request #1218 from Hummer12007/suicaps
Terminate when both suid bit and filecaps are set
Diffstat (limited to 'common/util.c')
-rw-r--r-- | common/util.c | 66 |
1 files changed, 33 insertions, 33 deletions
diff --git a/common/util.c b/common/util.c index a9e6a9c2..34bb5ec1 100644 --- a/common/util.c +++ b/common/util.c @@ -124,38 +124,38 @@ uint32_t parse_color(const char *color) { } char* resolve_path(const char* path) { - struct stat sb; - ssize_t r; - int i; - char *current = NULL; - char *resolved = NULL; - - if(!(current = strdup(path))) { - return NULL; - } - for (i = 0; i < 16; ++i) { - if (lstat(current, &sb) == -1) { - goto failed; - } - if((sb.st_mode & S_IFMT) != S_IFLNK) { - return current; - } - if (!(resolved = malloc(sb.st_size + 1))) { - goto failed; - } - r = readlink(current, resolved, sb.st_size); - if (r == -1 || r > sb.st_size) { - goto failed; - } - resolved[r] = '\0'; - free(current); - current = strdup(resolved); - free(resolved); - resolved = NULL; - } + struct stat sb; + ssize_t r; + int i; + char *current = NULL; + char *resolved = NULL; + + if(!(current = strdup(path))) { + return NULL; + } + for (i = 0; i < 16; ++i) { + if (lstat(current, &sb) == -1) { + goto failed; + } + if((sb.st_mode & S_IFMT) != S_IFLNK) { + return current; + } + if (!(resolved = malloc(sb.st_size + 1))) { + goto failed; + } + r = readlink(current, resolved, sb.st_size); + if (r == -1 || r > sb.st_size) { + goto failed; + } + resolved[r] = '\0'; + free(current); + current = strdup(resolved); + free(resolved); + resolved = NULL; + } failed: - free(resolved); - free(current); - return NULL; -}
\ No newline at end of file + free(resolved); + free(current); + return NULL; +} |