Annotation of src/tests/include/t_paths.c, Revision 1.13
1.13 ! jmmv 1: /* $NetBSD: t_paths.c,v 1.12 2012/06/03 21:42:47 joerg Exp $ */
1.1 jruoho 2:
3: /*-
4: * Copyright (c) 2011 The NetBSD Foundation, Inc.
5: * All rights reserved.
6: *
7: * This code is derived from software contributed to The NetBSD Foundation
8: * by Jukka Ruohonen.
9: *
10: * Redistribution and use in source and binary forms, with or without
11: * modification, are permitted provided that the following conditions
12: * are met:
13: * 1. Redistributions of source code must retain the above copyright
14: * notice, this list of conditions and the following disclaimer.
15: * 2. Redistributions in binary form must reproduce the above copyright
16: * notice, this list of conditions and the following disclaimer in the
17: * documentation and/or other materials provided with the distribution.
18: *
19: * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21: * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29: * POSSIBILITY OF SUCH DAMAGE.
30: */
31: #include <sys/cdefs.h>
1.13 ! jmmv 32: __RCSID("$NetBSD: t_paths.c,v 1.12 2012/06/03 21:42:47 joerg Exp $");
1.1 jruoho 33:
34: #include <sys/param.h>
35: #include <sys/stat.h>
36:
37: #include <errno.h>
38: #include <fcntl.h>
39: #include <paths.h>
1.10 jruoho 40: #include <stdio.h>
1.1 jruoho 41: #include <string.h>
42: #include <unistd.h>
43:
44: #include <atf-c.h>
1.11 jruoho 45: #include <atf-c/config.h>
1.1 jruoho 46:
47: #define PATH_DEV __BIT(0) /* A device node */
48: #define PATH_DIR __BIT(1) /* A directory */
49: #define PATH_FILE __BIT(2) /* A file */
50: #define PATH_ROOT __BIT(3) /* Access for root only */
51:
52: static const struct {
53: const char *path;
54: int flags;
55: } paths[] = {
56: { _PATH_AUDIO, PATH_DEV },
57: { _PATH_AUDIO0, PATH_DEV },
58: { _PATH_AUDIOCTL, PATH_DEV },
59: { _PATH_AUDIOCTL0, PATH_DEV },
60: { _PATH_BPF, PATH_DEV | PATH_ROOT },
61: { _PATH_CLOCKCTL, PATH_DEV | PATH_ROOT },
1.3 jruoho 62: { _PATH_CONSOLE, PATH_DEV | PATH_ROOT },
1.1 jruoho 63: { _PATH_CONSTTY, PATH_DEV | PATH_ROOT },
1.9 jruoho 64: { _PATH_CPUCTL, PATH_DEV },
1.1 jruoho 65: { _PATH_CSMAPPER, PATH_DIR },
66: { _PATH_DEFTAPE, PATH_DEV | PATH_ROOT },
1.12 joerg 67: { _PATH_DEVCDB, PATH_FILE },
1.1 jruoho 68: { _PATH_DEVDB, PATH_FILE },
69: { _PATH_DEVNULL, PATH_DEV },
70: { _PATH_DRUM, PATH_DEV | PATH_ROOT },
71: { _PATH_ESDB, PATH_DIR },
72: { _PATH_FTPUSERS, PATH_FILE },
73: { _PATH_GETTYTAB, PATH_FILE },
74: { _PATH_I18NMODULE, PATH_DIR },
75: { _PATH_ICONV, PATH_DIR },
76: { _PATH_KMEM, PATH_DEV | PATH_ROOT },
77: { _PATH_KSYMS, PATH_DEV },
78: { _PATH_KVMDB, PATH_FILE },
79: { _PATH_LOCALE, PATH_DIR },
80: { _PATH_MAILDIR, PATH_DIR },
81: { _PATH_MAN, PATH_DIR },
82: { _PATH_MEM, PATH_DEV | PATH_ROOT },
83: { _PATH_MIXER, PATH_DEV },
84: { _PATH_MIXER0, PATH_DEV },
85: { _PATH_NOLOGIN, PATH_FILE },
1.8 riastrad 86: { _PATH_POWER, PATH_DEV | PATH_ROOT },
1.1 jruoho 87: { _PATH_PRINTCAP, PATH_FILE },
88: { _PATH_PUD, PATH_DEV | PATH_ROOT },
89: { _PATH_PUFFS, PATH_DEV | PATH_ROOT },
90: { _PATH_RANDOM, PATH_DEV },
91: { _PATH_SENDMAIL, PATH_FILE },
92: { _PATH_SHELLS, PATH_FILE },
93: { _PATH_SKEYKEYS, PATH_FILE | PATH_ROOT },
94: { _PATH_SOUND, PATH_DEV },
95: { _PATH_SOUND0, PATH_DEV },
96: { _PATH_SYSMON, PATH_DEV },
97: { _PATH_TTY, PATH_DEV },
1.9 jruoho 98: { _PATH_UNIX, PATH_FILE | PATH_ROOT },
1.1 jruoho 99: { _PATH_URANDOM, PATH_DEV },
100: { _PATH_VIDEO, PATH_DEV },
101: { _PATH_VIDEO0, PATH_DEV },
102:
103: { _PATH_DEV, PATH_DIR },
104: { _PATH_DEV_PTS, PATH_DIR },
105: { _PATH_EMUL_AOUT, PATH_DIR },
106: { _PATH_TMP, PATH_DIR },
107: { _PATH_VARDB, PATH_DIR },
108: { _PATH_VARRUN, PATH_DIR },
109: { _PATH_VARTMP, PATH_DIR },
110:
111: { _PATH_BSHELL, PATH_FILE },
112: { _PATH_CSHELL, PATH_FILE },
113: { _PATH_VI, PATH_FILE },
114: };
115:
116: ATF_TC(paths);
117: ATF_TC_HEAD(paths, tc)
118: {
119: atf_tc_set_md_var(tc, "descr", "A basic test for <paths.h>");
120: }
121:
122: ATF_TC_BODY(paths, tc)
123: {
124: struct stat st;
125: uid_t uid;
126: mode_t m;
127: size_t i;
128: int fd;
129:
1.13 ! jmmv 130: #if defined(__sparc__)
! 131: atf_tc_skip("PR port-sparc/45580");
! 132: #endif
1.11 jruoho 133:
1.1 jruoho 134: uid = getuid();
135:
136: for (i = 0; i < __arraycount(paths); i++) {
137:
1.10 jruoho 138: (void)fprintf(stderr, "testing '%s'\n", paths[i].path);
139:
1.1 jruoho 140: errno = 0;
141: fd = open(paths[i].path, O_RDONLY);
142:
143: if (fd < 0) {
144:
145: switch (errno) {
146:
147: case EPERM: /* FALLTHROUGH */
148: case EACCES: /* FALLTHROUGH */
149:
150: if ((paths[i].flags & PATH_ROOT) == 0) {
151:
152: atf_tc_fail("UID %u failed to open %s",
153: (uint32_t)uid, paths[i].path);
154: }
155:
156: case EBUSY: /* FALLTHROUGH */
157: case ENXIO: /* FALLTHROUGH */
158: case ENOENT: /* FALLTHROUGH */
159:
160: default:
161: continue;
162: }
163: }
164:
165: (void)memset(&st, 0, sizeof(struct stat));
166:
167: ATF_REQUIRE(fstat(fd, &st) == 0);
168:
169: m = st.st_mode;
170:
171: if ((paths[i].flags & PATH_DEV) != 0) {
172:
1.6 njoly 173: ATF_CHECK(S_ISBLK(m) != 0 || S_ISCHR(m) != 0);
1.1 jruoho 174:
1.6 njoly 175: ATF_CHECK((paths[i].flags & PATH_DIR) == 0);
176: ATF_CHECK((paths[i].flags & PATH_FILE) == 0);
1.1 jruoho 177: }
178:
179: if ((paths[i].flags & PATH_DIR) != 0) {
180:
1.6 njoly 181: ATF_CHECK(S_ISDIR(m) != 0);
1.1 jruoho 182:
1.6 njoly 183: ATF_CHECK((paths[i].flags & PATH_DEV) == 0);
184: ATF_CHECK((paths[i].flags & PATH_FILE) == 0);
1.1 jruoho 185: }
186:
187: if ((paths[i].flags & PATH_FILE) != 0) {
188:
1.6 njoly 189: ATF_CHECK(S_ISREG(m) != 0);
1.1 jruoho 190:
1.6 njoly 191: ATF_CHECK((paths[i].flags & PATH_DEV) == 0);
192: ATF_CHECK((paths[i].flags & PATH_DIR) == 0);
1.1 jruoho 193: }
194:
195: ATF_REQUIRE(close(fd) == 0);
196: }
197: }
198:
199: ATF_TP_ADD_TCS(tp)
200: {
201:
202: ATF_TP_ADD_TC(tp, paths);
203:
204: return atf_no_error();
205: }
CVSweb <webmaster@jp.NetBSD.org>