Annotation of src/tests/fs/vfs/t_unpriv.c, Revision 1.5
1.5 ! njoly 1: /* $NetBSD: t_unpriv.c,v 1.4 2012/01/31 19:02:49 njoly Exp $ */
1.1 njoly 2:
3: /*-
4: * Copyright (c) 2011 The NetBSD Foundation, Inc.
5: * All rights reserved.
6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
15: *
16: * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18: * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26: * POSSIBILITY OF SUCH DAMAGE.
27: */
28:
29: #include <atf-c.h>
1.5 ! njoly 30: #include <libgen.h>
1.1 njoly 31: #include <unistd.h>
32:
33: #include <rump/rump_syscalls.h>
34: #include <rump/rump.h>
35:
36: #include "../common/h_fsmacros.h"
37: #include "../../h_macros.h"
38:
1.2 njoly 39: #define USES_OWNER \
1.4 njoly 40: if (FSTYPE_MSDOS(tc)) \
1.1 njoly 41: atf_tc_skip("owner not supported by file system")
42:
43: static void
44: owner(const atf_tc_t *tc, const char *mp)
45: {
46:
1.2 njoly 47: USES_OWNER;
1.1 njoly 48:
49: FSTEST_ENTER();
50:
51: rump_pub_lwproc_rfork(RUMP_RFCFDG);
52: if (rump_sys_setuid(1) == -1)
53: atf_tc_fail_errno("setuid");
54: if (rump_sys_chown(".", 1, -1) != -1 || errno != EPERM)
55: atf_tc_fail_errno("chown");
56: if (rump_sys_chmod(".", 0000) != -1 || errno != EPERM)
57: atf_tc_fail_errno("chmod");
58: rump_pub_lwproc_releaselwp();
59:
60: if (rump_sys_chown(".", 1, -1) == -1)
61: atf_tc_fail_errno("chown");
62:
63: rump_pub_lwproc_rfork(RUMP_RFCFDG);
64: if (rump_sys_setuid(1) == -1)
65: atf_tc_fail_errno("setuid");
66: if (rump_sys_chown(".", 1, -1) == -1)
67: atf_tc_fail_errno("chown");
68: if (rump_sys_chmod(".", 0000) == -1)
69: atf_tc_fail_errno("chmod");
70: rump_pub_lwproc_releaselwp();
71:
72: FSTEST_EXIT();
73: }
74:
1.5 ! njoly 75: static void
! 76: dirperms(const atf_tc_t *tc, const char *mp)
! 77: {
! 78: char name[] = "dir.test/file.test";
! 79: char *dir = dirname(name);
! 80: int fd;
! 81:
! 82: if (FSTYPE_SYSVBFS(tc))
! 83: atf_tc_skip("directories not supported by file system");
! 84:
! 85: FSTEST_ENTER();
! 86:
! 87: if (rump_sys_mkdir(dir, 0777) == -1)
! 88: atf_tc_fail_errno("mkdir");
! 89:
! 90: rump_pub_lwproc_rfork(RUMP_RFCFDG);
! 91: if (rump_sys_setuid(1) == -1)
! 92: atf_tc_fail_errno("setuid");
! 93: if (rump_sys_open(name, O_RDWR|O_CREAT, 0666) != -1 || errno != EACCES)
! 94: atf_tc_fail_errno("open");
! 95: rump_pub_lwproc_releaselwp();
! 96:
! 97: if ((fd = rump_sys_open(name, O_RDWR|O_CREAT, 0666)) == -1)
! 98: atf_tc_fail_errno("open");
! 99: if (rump_sys_close(fd) == -1)
! 100: atf_tc_fail_errno("close");
! 101:
! 102: rump_pub_lwproc_rfork(RUMP_RFCFDG);
! 103: if (rump_sys_setuid(1) == -1)
! 104: atf_tc_fail_errno("setuid");
! 105: if (rump_sys_unlink(name) != -1 || errno != EACCES)
! 106: atf_tc_fail_errno("unlink");
! 107: rump_pub_lwproc_releaselwp();
! 108:
! 109: if (rump_sys_unlink(name) == -1)
! 110: atf_tc_fail_errno("unlink");
! 111:
! 112: if (rump_sys_rmdir(dir) == -1)
! 113: atf_tc_fail_errno("rmdir");
! 114:
! 115: FSTEST_EXIT();
! 116: }
1.1 njoly 117:
118: ATF_TC_FSAPPLY(owner, "owner unprivileged checks");
1.5 ! njoly 119: ATF_TC_FSAPPLY(dirperms, "directory permission checks");
1.1 njoly 120:
121: ATF_TP_ADD_TCS(tp)
122: {
123:
124: ATF_TP_FSAPPLY(owner);
1.5 ! njoly 125: ATF_TP_FSAPPLY(dirperms);
1.1 njoly 126:
127: return atf_no_error();
128: }
CVSweb <webmaster@jp.NetBSD.org>