From 03c70cc2e629e2ad8dcd5718be0132f17b9b8328 Mon Sep 17 00:00:00 2001 From: rtm Date: Sat, 26 Aug 2006 16:31:05 +0000 Subject: consistently ignore more than 14 chars in path component forbid create or write of existing directory mkdir("d1/d2/d3"), .. should refer to d2, not cwd mkdir increase parent link count --- fstests.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) (limited to 'fstests.c') diff --git a/fstests.c b/fstests.c index d6356ac..ac9478e 100644 --- a/fstests.c +++ b/fstests.c @@ -412,8 +412,9 @@ bigdir() void subdir() { - int fd; + int fd, cc; + unlink("ff"); if(mkdir("dd") != 0){ puts("subdir mkdir dd failed\n"); exit(); @@ -440,6 +441,18 @@ subdir() write(fd, "FF", 2); close(fd); + fd = open("dd/dd/../ff", 0); + if(fd < 0){ + puts("open dd/dd/../ff failed\n"); + exit(); + } + cc = read(fd, buf, sizeof(buf)); + if(cc != 2 || buf[0] != 'f'){ + puts("dd/dd/../ff wrong content\n"); + exit(); + } + close(fd); + if(link("dd/dd/ff", "dd/dd/ffff") != 0){ puts("link dd/dd/ff dd/dd/ffff failed\n"); exit(); @@ -487,6 +500,18 @@ subdir() puts("create dd/xx/ff succeeded!\n"); exit(); } + if(open("dd", O_CREATE) >= 0){ + puts("create dd succeeded!\n"); + exit(); + } + if(open("dd", O_RDWR) >= 0){ + puts("open dd rdwr succeeded!\n"); + exit(); + } + if(open("dd", O_WRONLY) >= 0){ + puts("open dd wronly succeeded!\n"); + exit(); + } if(link("dd/ff/ff", "dd/dd/xx") == 0){ puts("link dd/ff/ff dd/dd/xx succeeded!\n"); exit(); @@ -597,11 +622,50 @@ bigfile() puts("bigfile ok\n"); } +void +fourteen() +{ + int fd; + + if(mkdir("12345678901234") != 0){ + puts("mkdir 12345678901234 failed\n"); + exit(); + } + if(mkdir("12345678901234/123456789012345") != 0){ + puts("mkdir 12345678901234/123456789012345 failed\n"); + exit(); + } + fd = open("123456789012345/123456789012345/123456789012345", O_CREATE); + if(fd < 0){ + puts("create 123456789012345/123456789012345/123456789012345 failed\n"); + exit(); + } + close(fd); + fd = open("12345678901234/12345678901234/12345678901234", 0); + if(fd < 0){ + puts("open 12345678901234/12345678901234/12345678901234 failed\n"); + exit(); + } + close(fd); + + if(mkdir("12345678901234/12345678901234") == 0){ + puts("mkdir 12345678901234/12345678901234 succeeded!\n"); + exit(); + } + if(mkdir("123456789012345/12345678901234") == 0){ + puts("mkdir 12345678901234/123456789012345 succeeded!\n"); + exit(); + } + + puts("fourteen ok\n"); +} + int main(int argc, char *argv[]) { puts("fstests starting\n"); + fourteen(); bigfile(); subdir(); // bigdir(); // slow -- cgit v1.2.3