[BACK]Return to t_paths.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / tests / include

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>