Revision: 108468 https://trac.macports.org/changeset/108468 Author: cal@macports.org Date: 2013-07-23 14:58:15 -0700 (Tue, 23 Jul 2013) Log Message: ----------- darwintrace: don't hide directories in access(2), different solution for the problem of missing '/' Modified Paths: -------------- trunk/base/src/darwintracelib1.0/darwintrace.c Modified: trunk/base/src/darwintracelib1.0/darwintrace.c =================================================================== --- trunk/base/src/darwintracelib1.0/darwintrace.c 2013-07-23 21:46:59 UTC (rev 108467) +++ trunk/base/src/darwintracelib1.0/darwintrace.c 2013-07-23 21:58:15 UTC (rev 108468) @@ -912,10 +912,6 @@ strcat(normalizedpath, "/"); } - if (strcmp("/", normalizedpath) == 0) { - /* always allow '/' */ - return 1; - } for (__darwintrace_filemap_iterator_init(&filemap_it); (t = __darwintrace_filemap_iter(&command, &replacementpath, &filemap_it));) { if (__darwintrace_pathbeginswith(normalizedpath, t)) { @@ -1460,10 +1456,20 @@ int access(const char *path, int amode) { #define access(x, y) syscall(SYS_access, (x), (y)) +#define lstat(path, sb) syscall(SYS_lstat, path, sb) + struct stat st; char newpath[MAXPATHLEN]; debug_printf("access(%s, %d)\n", path, amode); + if (-1 == (result = lstat(path, &st))) { + return -1; + } + + if (S_ISDIR(st.st_mode)) { + return access(path, amode); + } + *newpath = '\0'; if (!__darwintrace_is_in_sandbox(path, newpath)) { errno = ENOENT; @@ -1475,6 +1481,7 @@ } return access(path, amode); +#undef lstat #undef access }
participants (1)
-
cal@macports.org