|
|
1.1 root 1: /* @(#)open-chmod.c 1.2 90/01/03 NFS Rev 2 Testsuite
2: * 1.3 Lachman ONC Test Suite source
3: *
4: * tests operation on open file which has been chmod'd to 0.
5: * steps taken:
6: * 1. create file
7: * 2. open for read/write
8: * 3. chmod 0
9: * 4. write data
10: * 5. rewind
11: * 6. read data back
12: */
13:
14: #include <stdio.h>
15: #ifdef SVR3
16: #include <fcntl.h>
17: #else
18: #include <sys/file.h>
19: #endif
20: #include <errno.h>
21: extern int errno;
22: #define TBUFSIZ 100
23: char wbuf[TBUFSIZ], rbuf[TBUFSIZ];
24: char buf[BUFSIZ];
25: #define TMSG "This is a test message written to the chmod'd file\n"
26:
27: main(argc, argv)
28: int argc;
29: char *argv[];
30: {
31: int fd, ret;
32: char *tname = "nfstestXXXXXX";
33: int errcount = 0;
34: long lret;
35: extern long lseek();
36:
37: setbuf(stdout, NULL);
38: mktemp(tname);
39: #ifdef O_RDWR
40: if ((fd = open(tname, O_CREAT|O_TRUNC|O_RDWR, 0777)) < 0) {
41: fprintf(stderr, "can't create %s: ", tname);
42: xxit("open");
43: }
44: #else
45: if ((fd = creat(tname, 0777)) < 0) {
46: fprintf(stderr, "can't create %s: ", tname);
47: xxit("creat");
48: }
49: close(fd);
50: if ((fd = open(tname, 2)) < 0) {
51: fprintf(stderr, "can't reopen %s: ", tname);
52: unlink(tname);
53: xxit("open");
54: }
55: #endif /* O_RDWR */
56: printf("testfile before chmod:\n ");
57: sprintf(buf, "ls -l %s", tname);
58: system(buf);
59: ret = chmod(tname, 0);
60: printf("%s open; chmod ret = %d\n", tname, ret);
61: if (ret)
62: xxit(" chmod");
63: printf("testfile after chmod:\n ");
64: system(buf);
65: strcpy(wbuf, TMSG);
66: if ((ret = write(fd, wbuf, TBUFSIZ)) != TBUFSIZ) {
67: fprintf(stderr, "write ret %d; expected %d\n", ret, TBUFSIZ);
68: if (ret < 0)
69: perror(" write");
70: exit(1);
71: }
72: if ((lret = lseek(fd, 0L, 0)) != 0L) {
73: fprintf(stderr, "lseek ret %ld; expected 0\n", lret);
74: if (lret < 0)
75: perror(" lseek");
76: exit(1);
77: }
78: if ((ret = read(fd, rbuf, TBUFSIZ)) != TBUFSIZ) {
79: fprintf(stderr, "read ret %d; expected %d\n", ret, TBUFSIZ);
80: if (ret < 0)
81: perror(" read");
82: exit(1);
83: }
84: if (strcmp(wbuf, rbuf) != NULL) {
85: errcount++;
86: printf("read data not same as written data\n");
87: printf(" written: '%s'\n read: '%s'\n", wbuf, rbuf);
88: } else {
89: printf("data compare ok\n");
90: }
91:
92: printf("testfile after write/read:\n ");
93: system(buf);
94: if (unlink(tname) < 0) {
95: fprintf(stderr, "can't unlink %s", tname);
96: xxit(" ");
97: }
98:
99: if (close(fd))
100: xxit("error on close");
101:
102: printf("test completed successfully.\n");
103: exit(0);
104: }
105:
106: xxit(s)
107: char *s;
108: {
109: perror(s);
110: exit(1);
111: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.