X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=cmds.c;h=3af02a354c25f39f893b21b5d9b568a0154a77f5;hb=00bc8103dc2171defe1f3d05d9c94bf57a84d41c;hp=6c277af284ba815871f7e36dab8e4059af1b20f9;hpb=8edfedb1174845aada331cfd3d31b817cb8e3d11;p=betaftpd diff --git a/cmds.c b/cmds.c index 6c277af..3af02a3 100644 --- a/cmds.c +++ b/cmds.c @@ -1052,7 +1052,7 @@ int long_listing(char * const retbuf, const char * const pathname, const int do_ #if WANT_NONROOT char rights[16]; - if (nr_check_permission(0, pathname, 0, (buf.st_mode & S_IFDIR), rights) == -1) { + if (nr_check_permission(0, pathname, 0, (S_ISDIR(buf.st_mode)), rights) == -1) { /* no permission to even see this file */ return 0; } @@ -1664,13 +1664,13 @@ void prepare_for_transfer(struct ftran *f) * The most common cases are put first, for speed :-) */ char decode_mode(mode_t mode) { - if (mode & S_IFREG) return '-'; - if (mode & S_IFDIR) return 'd'; - if (mode & S_IFLNK) return 'l'; - if (mode & S_IFBLK) return 'b'; - if (mode & S_IFCHR) return 'c'; - if (mode & S_IFSOCK) return 's'; - if (mode & S_IFIFO) return 'f'; + if (S_ISREG(mode)) return '-'; + if (S_ISDIR(mode)) return 'd'; + if (S_ISLNK(mode)) return 'l'; + if (S_ISBLK(mode)) return 'b'; + if (S_ISCHR(mode)) return 'c'; + if (S_ISSOCK(mode)) return 's'; + if (S_ISFIFO(mode)) return 'f'; return '-'; } @@ -1745,9 +1745,9 @@ int do_openfile(struct conn * const c, char * const path, #if WANT_UPLOAD if ((flags & O_CREAT) == 0) { #endif - stat(ptr, &buf); + TRAP_ERROR(stat(ptr, &buf) == -1, 550, return -2); if (!S_ISREG(buf.st_mode)) { - numeric(c, 550, "%s: Not a plain file.", ptr); + numeric(c, 550, "Not a plain file.", ptr); return -2; } #if WANT_UPLOAD