access05.c revision 6f5501711e001323cad34cc706980cbbfbfe1aec
1865695bbc89088b9526ea9045410e5afb70a985cplars/* 2865695bbc89088b9526ea9045410e5afb70a985cplars * 3865695bbc89088b9526ea9045410e5afb70a985cplars * Copyright (c) International Business Machines Corp., 2001 4865695bbc89088b9526ea9045410e5afb70a985cplars * 5865695bbc89088b9526ea9045410e5afb70a985cplars * This program is free software; you can redistribute it and/or modify 6865695bbc89088b9526ea9045410e5afb70a985cplars * it under the terms of the GNU General Public License as published by 7865695bbc89088b9526ea9045410e5afb70a985cplars * the Free Software Foundation; either version 2 of the License, or 8865695bbc89088b9526ea9045410e5afb70a985cplars * (at your option) any later version. 9865695bbc89088b9526ea9045410e5afb70a985cplars * 10865695bbc89088b9526ea9045410e5afb70a985cplars * This program is distributed in the hope that it will be useful, 11865695bbc89088b9526ea9045410e5afb70a985cplars * but WITHOUT ANY WARRANTY; without even the implied warranty of 12865695bbc89088b9526ea9045410e5afb70a985cplars * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 13865695bbc89088b9526ea9045410e5afb70a985cplars * the GNU General Public License for more details. 14865695bbc89088b9526ea9045410e5afb70a985cplars * 15865695bbc89088b9526ea9045410e5afb70a985cplars * You should have received a copy of the GNU General Public License 16865695bbc89088b9526ea9045410e5afb70a985cplars * along with this program; if not, write to the Free Software 17865695bbc89088b9526ea9045410e5afb70a985cplars * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18865695bbc89088b9526ea9045410e5afb70a985cplars */ 19865695bbc89088b9526ea9045410e5afb70a985cplars 20865695bbc89088b9526ea9045410e5afb70a985cplars/* 21bfc42dad4386b0088e4b5c3bc7fdfc1ad017ac7bplars * Test Name: access05 22865695bbc89088b9526ea9045410e5afb70a985cplars * 23865695bbc89088b9526ea9045410e5afb70a985cplars * Test Description: 24865695bbc89088b9526ea9045410e5afb70a985cplars * Verify that, 25865695bbc89088b9526ea9045410e5afb70a985cplars * 1. access() fails with -1 return value and sets errno to EACCES 26865695bbc89088b9526ea9045410e5afb70a985cplars * if the permission bits of the file mode do not permit the 27865695bbc89088b9526ea9045410e5afb70a985cplars * requested (Read/Write/Execute) access. 28865695bbc89088b9526ea9045410e5afb70a985cplars * 2. access() fails with -1 return value and sets errno to EINVAL 29865695bbc89088b9526ea9045410e5afb70a985cplars * if the specified access mode argument is invalid. 30865695bbc89088b9526ea9045410e5afb70a985cplars * 3. access() fails with -1 return value and sets errno to EFAULT 31865695bbc89088b9526ea9045410e5afb70a985cplars * if the pathname points outside allocate address space for the 32865695bbc89088b9526ea9045410e5afb70a985cplars * process. 33865695bbc89088b9526ea9045410e5afb70a985cplars * 4. access() fails with -1 return value and sets errno to ENOENT 34865695bbc89088b9526ea9045410e5afb70a985cplars * if the specified file doesn't exist (or pathname is NULL). 35865695bbc89088b9526ea9045410e5afb70a985cplars * 5. access() fails with -1 return value and sets errno to ENAMETOOLONG 36865695bbc89088b9526ea9045410e5afb70a985cplars * if the pathname size is > PATH_MAX characters. 37865695bbc89088b9526ea9045410e5afb70a985cplars * 38865695bbc89088b9526ea9045410e5afb70a985cplars * Expected Result: 39865695bbc89088b9526ea9045410e5afb70a985cplars * access() should fail with return value -1 and set expected errno. 40865695bbc89088b9526ea9045410e5afb70a985cplars * 41865695bbc89088b9526ea9045410e5afb70a985cplars * Algorithm: 42865695bbc89088b9526ea9045410e5afb70a985cplars * Setup: 43865695bbc89088b9526ea9045410e5afb70a985cplars * Setup signal handling. 44865695bbc89088b9526ea9045410e5afb70a985cplars * Create temporary directory. 45865695bbc89088b9526ea9045410e5afb70a985cplars * Pause for SIGUSR1 if option specified. 46865695bbc89088b9526ea9045410e5afb70a985cplars * 47865695bbc89088b9526ea9045410e5afb70a985cplars * Test: 48865695bbc89088b9526ea9045410e5afb70a985cplars * Loop if the proper options are given. 49865695bbc89088b9526ea9045410e5afb70a985cplars * Execute system call 50865695bbc89088b9526ea9045410e5afb70a985cplars * Check return code, if system call failed (return=-1) 5156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * if errno set == expected errno 5256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * Issue sys call fails with expected return value and errno. 5356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * Otherwise, 54865695bbc89088b9526ea9045410e5afb70a985cplars * Issue sys call fails with unexpected errno. 55865695bbc89088b9526ea9045410e5afb70a985cplars * Otherwise, 56865695bbc89088b9526ea9045410e5afb70a985cplars * Issue sys call returns unexpected value. 57865695bbc89088b9526ea9045410e5afb70a985cplars * 58865695bbc89088b9526ea9045410e5afb70a985cplars * Cleanup: 59865695bbc89088b9526ea9045410e5afb70a985cplars * Print errno log and/or timing stats if options given 60865695bbc89088b9526ea9045410e5afb70a985cplars * Delete the temporary directory(s)/file(s) created. 61865695bbc89088b9526ea9045410e5afb70a985cplars * 62865695bbc89088b9526ea9045410e5afb70a985cplars * Usage: <for command-line> 63bfc42dad4386b0088e4b5c3bc7fdfc1ad017ac7bplars * access05 [-c n] [-e] [-i n] [-I x] [-P x] [-t] 64865695bbc89088b9526ea9045410e5afb70a985cplars * where, -c n : Run n copies concurrently. 65865695bbc89088b9526ea9045410e5afb70a985cplars * -e : Turn on errno logging. 66865695bbc89088b9526ea9045410e5afb70a985cplars * -i n : Execute test n times. 67865695bbc89088b9526ea9045410e5afb70a985cplars * -I x : Execute test for x seconds. 68865695bbc89088b9526ea9045410e5afb70a985cplars * -P x : Pause for x seconds between iterations. 69865695bbc89088b9526ea9045410e5afb70a985cplars * -t : Turn on syscall timing. 70865695bbc89088b9526ea9045410e5afb70a985cplars * 71865695bbc89088b9526ea9045410e5afb70a985cplars * HISTORY 72865695bbc89088b9526ea9045410e5afb70a985cplars * 07/2001 Ported by Wayne Boyer 73865695bbc89088b9526ea9045410e5afb70a985cplars * 74865695bbc89088b9526ea9045410e5afb70a985cplars * RESTRICTIONS: 75865695bbc89088b9526ea9045410e5afb70a985cplars * This test should be run by 'non-super-user' only. 764bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * 77865695bbc89088b9526ea9045410e5afb70a985cplars */ 78865695bbc89088b9526ea9045410e5afb70a985cplars 79865695bbc89088b9526ea9045410e5afb70a985cplars#include <stdio.h> 80865695bbc89088b9526ea9045410e5afb70a985cplars#include <errno.h> 81865695bbc89088b9526ea9045410e5afb70a985cplars#include <unistd.h> 82865695bbc89088b9526ea9045410e5afb70a985cplars#include <fcntl.h> 83865695bbc89088b9526ea9045410e5afb70a985cplars#include <string.h> 84865695bbc89088b9526ea9045410e5afb70a985cplars#include <signal.h> 85865695bbc89088b9526ea9045410e5afb70a985cplars#include <sys/types.h> 86865695bbc89088b9526ea9045410e5afb70a985cplars#include <sys/stat.h> 871ad845172048e19f8669f4f940296afe39c8f43eplars#include <sys/mman.h> 8873c2db7d46bd20fff64fba937ec7ae30f2f2f294robbiew#include <pwd.h> 89865695bbc89088b9526ea9045410e5afb70a985cplars 90865695bbc89088b9526ea9045410e5afb70a985cplars#include "test.h" 91865695bbc89088b9526ea9045410e5afb70a985cplars#include "usctest.h" 92865695bbc89088b9526ea9045410e5afb70a985cplars 93865695bbc89088b9526ea9045410e5afb70a985cplars#define INV_OK -1 94865695bbc89088b9526ea9045410e5afb70a985cplars#define TEST_FILE1 "test_file1" 95865695bbc89088b9526ea9045410e5afb70a985cplars#define TEST_FILE2 "test_file2" 96865695bbc89088b9526ea9045410e5afb70a985cplars#define TEST_FILE3 "test_file3" 97865695bbc89088b9526ea9045410e5afb70a985cplars#define TEST_FILE4 "test_file4" 98865695bbc89088b9526ea9045410e5afb70a985cplars 99865695bbc89088b9526ea9045410e5afb70a985cplars#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH 100865695bbc89088b9526ea9045410e5afb70a985cplars 101865695bbc89088b9526ea9045410e5afb70a985cplarsint no_setup(); 102865695bbc89088b9526ea9045410e5afb70a985cplarsint setup1(); /* setup() to test access() for EACCES */ 103865695bbc89088b9526ea9045410e5afb70a985cplarsint setup2(); /* setup() to test access() for EACCES */ 104865695bbc89088b9526ea9045410e5afb70a985cplarsint setup3(); /* setup() to test access() for EACCES */ 105865695bbc89088b9526ea9045410e5afb70a985cplarsint setup4(); /* setup() to test access() for EINVAL */ 10656207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint longpath_setup(); /* setup function to test access() for ENAMETOOLONG */ 107865695bbc89088b9526ea9045410e5afb70a985cplars 108d34d581c6a320e356a6cda923c7aa399479e812crobbiew#if !defined(UCLINUX) 10956207cec7732e09c216c751c0b5f88a242bacae6subrata_modakchar *get_high_address(); /* function from ltp-lib */ 110d34d581c6a320e356a6cda923c7aa399479e812crobbiewchar High_address_node[64]; 111d34d581c6a320e356a6cda923c7aa399479e812crobbiew#endif 11215226cdbc46b1a13023484bd304b13aa47d42b87robbiew 11356207cec7732e09c216c751c0b5f88a242bacae6subrata_modakchar Longpathname[PATH_MAX + 2]; 114865695bbc89088b9526ea9045410e5afb70a985cplars 115865695bbc89088b9526ea9045410e5afb70a985cplarsstruct test_case_t { /* test case structure */ 116865695bbc89088b9526ea9045410e5afb70a985cplars char *pathname; 117865695bbc89088b9526ea9045410e5afb70a985cplars int a_mode; 118865695bbc89088b9526ea9045410e5afb70a985cplars char *desc; 119865695bbc89088b9526ea9045410e5afb70a985cplars int exp_errno; 12056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak int (*setupfunc) (); 121865695bbc89088b9526ea9045410e5afb70a985cplars} Test_cases[] = { 12256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak { 12356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak TEST_FILE1, R_OK, "Read Access denied on file", EACCES, setup1}, { 12456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak TEST_FILE2, W_OK, "Write Access denied on file", EACCES, setup2}, { 12556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak TEST_FILE3, X_OK, "Execute Access denied on file", EACCES, setup3}, 12656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak { 12756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak TEST_FILE4, INV_OK, "Access mode invalid", EINVAL, setup4}, 128d34d581c6a320e356a6cda923c7aa399479e812crobbiew#if !defined(UCLINUX) 12956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak { 13056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak (char *)-1, R_OK, "Negative address", EFAULT, no_setup}, { 13156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak High_address_node, R_OK, "Address beyond address space", EFAULT, 13256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak no_setup}, 133d34d581c6a320e356a6cda923c7aa399479e812crobbiew#endif 13456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak { 13556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak "", W_OK, "Pathname is empty", ENOENT, no_setup}, { 13656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak Longpathname, R_OK, "Pathname too long", ENAMETOOLONG, longpath_setup}, 13756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak { 13856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak NULL, 0, NULL, 0, no_setup} 139865695bbc89088b9526ea9045410e5afb70a985cplars}; 140865695bbc89088b9526ea9045410e5afb70a985cplars 14156207cec7732e09c216c751c0b5f88a242bacae6subrata_modakchar *TCID = "access05"; /* Test program identifier. */ 14256207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint TST_TOTAL = 8; /* Total number of test cases. */ 143865695bbc89088b9526ea9045410e5afb70a985cplarsextern int Tst_count; /* Test Case counter for tst_* routines */ 14456207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint exp_enos[] = { EACCES, EFAULT, EINVAL, ENOENT, ENAMETOOLONG, 0 }; 145865695bbc89088b9526ea9045410e5afb70a985cplars 14673c2db7d46bd20fff64fba937ec7ae30f2f2f294robbiewchar nobody_uid[] = "nobody"; 14773c2db7d46bd20fff64fba937ec7ae30f2f2f294robbiewstruct passwd *ltpuser; 14873c2db7d46bd20fff64fba937ec7ae30f2f2f294robbiew 149865695bbc89088b9526ea9045410e5afb70a985cplarsvoid setup(); /* Main setup function of test */ 150865695bbc89088b9526ea9045410e5afb70a985cplarsvoid cleanup(); /* cleanup function for the test */ 151865695bbc89088b9526ea9045410e5afb70a985cplars 15256207cec7732e09c216c751c0b5f88a242bacae6subrata_modakchar *bad_addr = 0; 1531ad845172048e19f8669f4f940296afe39c8f43eplars 15456207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint main(int ac, char **av) 155865695bbc89088b9526ea9045410e5afb70a985cplars{ 156865695bbc89088b9526ea9045410e5afb70a985cplars int lc; /* loop counter */ 157865695bbc89088b9526ea9045410e5afb70a985cplars char *msg; /* message returned from parse_opts */ 158865695bbc89088b9526ea9045410e5afb70a985cplars char *file_name; /* name of the testfile */ 159865695bbc89088b9526ea9045410e5afb70a985cplars char *test_desc; /* test specific message */ 160865695bbc89088b9526ea9045410e5afb70a985cplars int access_mode; /* specified access mode for testfile */ 161865695bbc89088b9526ea9045410e5afb70a985cplars int ind; /* counter for testcase looping */ 162865695bbc89088b9526ea9045410e5afb70a985cplars 163865695bbc89088b9526ea9045410e5afb70a985cplars /* Parse standard options given to run the test. */ 164865695bbc89088b9526ea9045410e5afb70a985cplars msg = parse_opts(ac, av, (option_t *) NULL, NULL); 16556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak if (msg != (char *)NULL) { 166865695bbc89088b9526ea9045410e5afb70a985cplars tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg); 167865695bbc89088b9526ea9045410e5afb70a985cplars } 168865695bbc89088b9526ea9045410e5afb70a985cplars 169865695bbc89088b9526ea9045410e5afb70a985cplars /* Perform global setup for test */ 170865695bbc89088b9526ea9045410e5afb70a985cplars setup(); 171865695bbc89088b9526ea9045410e5afb70a985cplars 172865695bbc89088b9526ea9045410e5afb70a985cplars /* set the expected errnos... */ 173865695bbc89088b9526ea9045410e5afb70a985cplars TEST_EXP_ENOS(exp_enos); 174865695bbc89088b9526ea9045410e5afb70a985cplars 175865695bbc89088b9526ea9045410e5afb70a985cplars /* Check looping state if -i option given */ 176865695bbc89088b9526ea9045410e5afb70a985cplars for (lc = 0; TEST_LOOPING(lc); lc++) { 177865695bbc89088b9526ea9045410e5afb70a985cplars /* Reset Tst_count in case we are looping. */ 178865695bbc89088b9526ea9045410e5afb70a985cplars Tst_count = 0; 179865695bbc89088b9526ea9045410e5afb70a985cplars 180865695bbc89088b9526ea9045410e5afb70a985cplars for (ind = 0; Test_cases[ind].desc != NULL; ind++) { 181865695bbc89088b9526ea9045410e5afb70a985cplars file_name = Test_cases[ind].pathname; 182865695bbc89088b9526ea9045410e5afb70a985cplars access_mode = Test_cases[ind].a_mode; 183865695bbc89088b9526ea9045410e5afb70a985cplars test_desc = Test_cases[ind].desc; 184865695bbc89088b9526ea9045410e5afb70a985cplars 185d34d581c6a320e356a6cda923c7aa399479e812crobbiew#if !defined(UCLINUX) 186865695bbc89088b9526ea9045410e5afb70a985cplars if (file_name == High_address_node) { 18715226cdbc46b1a13023484bd304b13aa47d42b87robbiew file_name = get_high_address(); 188865695bbc89088b9526ea9045410e5afb70a985cplars } 189d34d581c6a320e356a6cda923c7aa399479e812crobbiew#endif 190865695bbc89088b9526ea9045410e5afb70a985cplars 1914bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak /* 192865695bbc89088b9526ea9045410e5afb70a985cplars * Call access(2) to test different test conditions. 193865695bbc89088b9526ea9045410e5afb70a985cplars * verify that it fails with -1 return value and 194865695bbc89088b9526ea9045410e5afb70a985cplars * sets appropriate errno. 195865695bbc89088b9526ea9045410e5afb70a985cplars */ 196865695bbc89088b9526ea9045410e5afb70a985cplars TEST(access(file_name, access_mode)); 197865695bbc89088b9526ea9045410e5afb70a985cplars 198865695bbc89088b9526ea9045410e5afb70a985cplars if (TEST_RETURN != -1) { 1996f5501711e001323cad34cc706980cbbfbfe1aecvapier tst_resm(TFAIL, "access() returned %ld, " 200865695bbc89088b9526ea9045410e5afb70a985cplars "expected -1, errno:%d", TEST_RETURN, 201865695bbc89088b9526ea9045410e5afb70a985cplars Test_cases[ind].exp_errno); 202865695bbc89088b9526ea9045410e5afb70a985cplars continue; 203865695bbc89088b9526ea9045410e5afb70a985cplars } 204865695bbc89088b9526ea9045410e5afb70a985cplars 205865695bbc89088b9526ea9045410e5afb70a985cplars TEST_ERROR_LOG(TEST_ERRNO); 206865695bbc89088b9526ea9045410e5afb70a985cplars 207865695bbc89088b9526ea9045410e5afb70a985cplars /* 208865695bbc89088b9526ea9045410e5afb70a985cplars * Call a function to verify whether 2094bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * the specified file has specified 210865695bbc89088b9526ea9045410e5afb70a985cplars * access mode. 211865695bbc89088b9526ea9045410e5afb70a985cplars */ 212865695bbc89088b9526ea9045410e5afb70a985cplars if (TEST_ERRNO == Test_cases[ind].exp_errno) { 2136f5501711e001323cad34cc706980cbbfbfe1aecvapier tst_resm(TPASS|TTERRNO, "access() fails, %s", 2146f5501711e001323cad34cc706980cbbfbfe1aecvapier test_desc); 215865695bbc89088b9526ea9045410e5afb70a985cplars } else { 2166f5501711e001323cad34cc706980cbbfbfe1aecvapier tst_resm(TFAIL|TTERRNO, "access() fails %s (expected errno %d)", 2176f5501711e001323cad34cc706980cbbfbfe1aecvapier test_desc, Test_cases[ind].exp_errno); 218865695bbc89088b9526ea9045410e5afb70a985cplars } 21956207cec7732e09c216c751c0b5f88a242bacae6subrata_modak } /* Test Case Looping */ 22056207cec7732e09c216c751c0b5f88a242bacae6subrata_modak } /* End for TEST_LOOPING */ 221865695bbc89088b9526ea9045410e5afb70a985cplars 222865695bbc89088b9526ea9045410e5afb70a985cplars /* Call cleanup() to undo setup done for the test. */ 223865695bbc89088b9526ea9045410e5afb70a985cplars cleanup(); 224865695bbc89088b9526ea9045410e5afb70a985cplars 2252c9452499e6aa5681ccb1cc52c6009c06a2c0702robbiew return 0; 22656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak /*NOTREACHED*/} 227865695bbc89088b9526ea9045410e5afb70a985cplars 228865695bbc89088b9526ea9045410e5afb70a985cplars/* 229865695bbc89088b9526ea9045410e5afb70a985cplars * setup() - performs all ONE TIME setup for this test. 230865695bbc89088b9526ea9045410e5afb70a985cplars * 231865695bbc89088b9526ea9045410e5afb70a985cplars * Create a temporary directory and change directory to it. 232865695bbc89088b9526ea9045410e5afb70a985cplars * Call individual test specific setup functions. 233865695bbc89088b9526ea9045410e5afb70a985cplars */ 23456207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid setup() 235865695bbc89088b9526ea9045410e5afb70a985cplars{ 23656207cec7732e09c216c751c0b5f88a242bacae6subrata_modak int ind; /* counter for testsetup functions */ 237865695bbc89088b9526ea9045410e5afb70a985cplars 238865695bbc89088b9526ea9045410e5afb70a985cplars /* capture signals */ 239865695bbc89088b9526ea9045410e5afb70a985cplars tst_sig(NOFORK, DEF_HANDLER, cleanup); 240865695bbc89088b9526ea9045410e5afb70a985cplars 24156207cec7732e09c216c751c0b5f88a242bacae6subrata_modak /* Switch to nobody user for correct error code collection */ 24256207cec7732e09c216c751c0b5f88a242bacae6subrata_modak if (geteuid() != 0) { 24356207cec7732e09c216c751c0b5f88a242bacae6subrata_modak tst_brkm(TBROK, tst_exit, "Test must be run as root"); 24456207cec7732e09c216c751c0b5f88a242bacae6subrata_modak } 24556207cec7732e09c216c751c0b5f88a242bacae6subrata_modak ltpuser = getpwnam(nobody_uid); 2466f5501711e001323cad34cc706980cbbfbfe1aecvapier if (setuid(ltpuser->pw_uid) == -1) 2476f5501711e001323cad34cc706980cbbfbfe1aecvapier tst_resm(TINFO|TERRNO, "setuid(%d) failed", ltpuser->pw_uid); 248865695bbc89088b9526ea9045410e5afb70a985cplars 249865695bbc89088b9526ea9045410e5afb70a985cplars /* Pause if that option was specified */ 250865695bbc89088b9526ea9045410e5afb70a985cplars TEST_PAUSE; 251865695bbc89088b9526ea9045410e5afb70a985cplars 252865695bbc89088b9526ea9045410e5afb70a985cplars /* make a temp directory and cd to it */ 253865695bbc89088b9526ea9045410e5afb70a985cplars tst_tmpdir(); 254865695bbc89088b9526ea9045410e5afb70a985cplars 25562b16cfc513f6d873f3ba8fa6d19d308c8500557vapier#if !defined(UCLINUX) 256d34d581c6a320e356a6cda923c7aa399479e812crobbiew bad_addr = mmap(0, 1, PROT_NONE, 25756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak MAP_PRIVATE_EXCEPT_UCLINUX | MAP_ANONYMOUS, 0, 0); 2580722a2ba05fbb7f320e3f3cc63f86c97393bdd71vapier if (bad_addr == MAP_FAILED) { 2596f5501711e001323cad34cc706980cbbfbfe1aecvapier tst_brkm(TBROK|TERRNO, cleanup, "mmap failed"); 2601ad845172048e19f8669f4f940296afe39c8f43eplars } 26181534c34da4dfd09031f11b787eb53bf7e7fa70cmreed Test_cases[5].pathname = bad_addr; 26281534c34da4dfd09031f11b787eb53bf7e7fa70cmreed#endif 2631ad845172048e19f8669f4f940296afe39c8f43eplars 264865695bbc89088b9526ea9045410e5afb70a985cplars /* call individual setup functions */ 265865695bbc89088b9526ea9045410e5afb70a985cplars for (ind = 0; Test_cases[ind].desc != NULL; ind++) { 266865695bbc89088b9526ea9045410e5afb70a985cplars Test_cases[ind].setupfunc(); 267865695bbc89088b9526ea9045410e5afb70a985cplars } 268865695bbc89088b9526ea9045410e5afb70a985cplars} 269865695bbc89088b9526ea9045410e5afb70a985cplars 270865695bbc89088b9526ea9045410e5afb70a985cplars/* 271865695bbc89088b9526ea9045410e5afb70a985cplars * no_setup() - some test conditions do not need any setup. 272865695bbc89088b9526ea9045410e5afb70a985cplars * Hence, this function simply returns 0. 273865695bbc89088b9526ea9045410e5afb70a985cplars */ 27456207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint no_setup() 275865695bbc89088b9526ea9045410e5afb70a985cplars{ 276865695bbc89088b9526ea9045410e5afb70a985cplars return 0; 277865695bbc89088b9526ea9045410e5afb70a985cplars} 278865695bbc89088b9526ea9045410e5afb70a985cplars 2796f5501711e001323cad34cc706980cbbfbfe1aecvapierint setup_file(const char *file, mode_t perms) 2806f5501711e001323cad34cc706980cbbfbfe1aecvapier{ 2816f5501711e001323cad34cc706980cbbfbfe1aecvapier int fd; /* file handle for testfile */ 2826f5501711e001323cad34cc706980cbbfbfe1aecvapier 2836f5501711e001323cad34cc706980cbbfbfe1aecvapier /* Creat a test file under above directory created */ 2846f5501711e001323cad34cc706980cbbfbfe1aecvapier fd = open(file, O_RDWR | O_CREAT, FILE_MODE); 2856f5501711e001323cad34cc706980cbbfbfe1aecvapier if (fd == -1) 2866f5501711e001323cad34cc706980cbbfbfe1aecvapier tst_brkm(TBROK|TERRNO, cleanup, 2876f5501711e001323cad34cc706980cbbfbfe1aecvapier "open(%s, O_RDWR|O_CREAT, %#o) failed", 2886f5501711e001323cad34cc706980cbbfbfe1aecvapier file, FILE_MODE); 2896f5501711e001323cad34cc706980cbbfbfe1aecvapier 2906f5501711e001323cad34cc706980cbbfbfe1aecvapier /* Close the testfile created above */ 2916f5501711e001323cad34cc706980cbbfbfe1aecvapier if (close(fd) == -1) 2926f5501711e001323cad34cc706980cbbfbfe1aecvapier tst_brkm(TBROK|TERRNO, cleanup, "close(%s) failed", file); 2936f5501711e001323cad34cc706980cbbfbfe1aecvapier 2946f5501711e001323cad34cc706980cbbfbfe1aecvapier /* Change mode permissions on testfile */ 2956f5501711e001323cad34cc706980cbbfbfe1aecvapier if (chmod(file, perms) < 0) 2966f5501711e001323cad34cc706980cbbfbfe1aecvapier tst_brkm(TBROK|TERRNO, cleanup, "chmod(%s, %#o) failed", 2976f5501711e001323cad34cc706980cbbfbfe1aecvapier file, perms); 2986f5501711e001323cad34cc706980cbbfbfe1aecvapier 2996f5501711e001323cad34cc706980cbbfbfe1aecvapier return 0; 3006f5501711e001323cad34cc706980cbbfbfe1aecvapier} 3016f5501711e001323cad34cc706980cbbfbfe1aecvapier 302865695bbc89088b9526ea9045410e5afb70a985cplars/* 303865695bbc89088b9526ea9045410e5afb70a985cplars * setup1() - Setup function to test access() for return value -1 304865695bbc89088b9526ea9045410e5afb70a985cplars * and errno EACCES when read access denied for specified 305865695bbc89088b9526ea9045410e5afb70a985cplars * testfile. 306865695bbc89088b9526ea9045410e5afb70a985cplars * 307865695bbc89088b9526ea9045410e5afb70a985cplars * Creat/open a testfile and close it. 308865695bbc89088b9526ea9045410e5afb70a985cplars * Deny read access permissions on testfile. 309865695bbc89088b9526ea9045410e5afb70a985cplars * This function returns 0. 310865695bbc89088b9526ea9045410e5afb70a985cplars */ 31156207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint setup1() 312865695bbc89088b9526ea9045410e5afb70a985cplars{ 3136f5501711e001323cad34cc706980cbbfbfe1aecvapier return setup_file(TEST_FILE1, 0333); 314865695bbc89088b9526ea9045410e5afb70a985cplars} 315865695bbc89088b9526ea9045410e5afb70a985cplars 316865695bbc89088b9526ea9045410e5afb70a985cplars/* 317865695bbc89088b9526ea9045410e5afb70a985cplars * setup2() - Setup function to test access() for return value -1 and 318865695bbc89088b9526ea9045410e5afb70a985cplars * errno EACCES when write access denied on testfile. 319865695bbc89088b9526ea9045410e5afb70a985cplars * 320865695bbc89088b9526ea9045410e5afb70a985cplars * Creat/open a testfile and close it. 321865695bbc89088b9526ea9045410e5afb70a985cplars * Deny write access permissions on testfile. 322865695bbc89088b9526ea9045410e5afb70a985cplars * This function returns 0. 323865695bbc89088b9526ea9045410e5afb70a985cplars */ 32456207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint setup2() 325865695bbc89088b9526ea9045410e5afb70a985cplars{ 3266f5501711e001323cad34cc706980cbbfbfe1aecvapier return setup_file(TEST_FILE2, 0555); 327865695bbc89088b9526ea9045410e5afb70a985cplars} 328865695bbc89088b9526ea9045410e5afb70a985cplars 329865695bbc89088b9526ea9045410e5afb70a985cplars/* 330865695bbc89088b9526ea9045410e5afb70a985cplars * setup3() - Setup function to test access() for return value -1 and 331865695bbc89088b9526ea9045410e5afb70a985cplars * errno EACCES when execute access denied on testfile. 332865695bbc89088b9526ea9045410e5afb70a985cplars * 333865695bbc89088b9526ea9045410e5afb70a985cplars * Creat/open a testfile and close it. 334865695bbc89088b9526ea9045410e5afb70a985cplars * Deny search access permissions on testfile. 335865695bbc89088b9526ea9045410e5afb70a985cplars * This function returns 0. 336865695bbc89088b9526ea9045410e5afb70a985cplars */ 33756207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint setup3() 338865695bbc89088b9526ea9045410e5afb70a985cplars{ 3396f5501711e001323cad34cc706980cbbfbfe1aecvapier return setup_file(TEST_FILE3, 0666); 340865695bbc89088b9526ea9045410e5afb70a985cplars} 341865695bbc89088b9526ea9045410e5afb70a985cplars 342865695bbc89088b9526ea9045410e5afb70a985cplars/* 343865695bbc89088b9526ea9045410e5afb70a985cplars * setup4() - Setup function to test access() for return value -1 344865695bbc89088b9526ea9045410e5afb70a985cplars * and errno EINVAL when specified access mode argument is 345865695bbc89088b9526ea9045410e5afb70a985cplars * invalid. 346865695bbc89088b9526ea9045410e5afb70a985cplars * 347865695bbc89088b9526ea9045410e5afb70a985cplars * Creat/open a testfile and close it. 348865695bbc89088b9526ea9045410e5afb70a985cplars * This function returns 0. 349865695bbc89088b9526ea9045410e5afb70a985cplars */ 35056207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint setup4() 351865695bbc89088b9526ea9045410e5afb70a985cplars{ 3526f5501711e001323cad34cc706980cbbfbfe1aecvapier return setup_file(TEST_FILE4, FILE_MODE); 353865695bbc89088b9526ea9045410e5afb70a985cplars} 354865695bbc89088b9526ea9045410e5afb70a985cplars 355865695bbc89088b9526ea9045410e5afb70a985cplars/* 356865695bbc89088b9526ea9045410e5afb70a985cplars * longpath_setup() - setup to create a node with a name length exceeding 35756207cec7732e09c216c751c0b5f88a242bacae6subrata_modak * the MAX. length of PATH_MAX. 358865695bbc89088b9526ea9045410e5afb70a985cplars */ 35956207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint longpath_setup() 360865695bbc89088b9526ea9045410e5afb70a985cplars{ 361865695bbc89088b9526ea9045410e5afb70a985cplars int ind; 362865695bbc89088b9526ea9045410e5afb70a985cplars 363865695bbc89088b9526ea9045410e5afb70a985cplars for (ind = 0; ind <= (PATH_MAX + 1); ind++) { 364865695bbc89088b9526ea9045410e5afb70a985cplars Longpathname[ind] = 'a'; 365865695bbc89088b9526ea9045410e5afb70a985cplars } 366865695bbc89088b9526ea9045410e5afb70a985cplars 367865695bbc89088b9526ea9045410e5afb70a985cplars return 0; 368865695bbc89088b9526ea9045410e5afb70a985cplars} 369865695bbc89088b9526ea9045410e5afb70a985cplars 370865695bbc89088b9526ea9045410e5afb70a985cplars/* 371865695bbc89088b9526ea9045410e5afb70a985cplars * cleanup() - performs all ONE TIME cleanup for this test at 372865695bbc89088b9526ea9045410e5afb70a985cplars * completion or premature exit. 373865695bbc89088b9526ea9045410e5afb70a985cplars * 374865695bbc89088b9526ea9045410e5afb70a985cplars * Remove the test directory and testfile created in the setup. 375865695bbc89088b9526ea9045410e5afb70a985cplars */ 37656207cec7732e09c216c751c0b5f88a242bacae6subrata_modakvoid cleanup() 377865695bbc89088b9526ea9045410e5afb70a985cplars{ 378865695bbc89088b9526ea9045410e5afb70a985cplars /* 379865695bbc89088b9526ea9045410e5afb70a985cplars * print timing stats if that option was specified. 380865695bbc89088b9526ea9045410e5afb70a985cplars * print errno log if that option was specified. 381865695bbc89088b9526ea9045410e5afb70a985cplars */ 382865695bbc89088b9526ea9045410e5afb70a985cplars TEST_CLEANUP; 383865695bbc89088b9526ea9045410e5afb70a985cplars 384865695bbc89088b9526ea9045410e5afb70a985cplars /* 385865695bbc89088b9526ea9045410e5afb70a985cplars * Delete the test directory/file and temporary directory 386865695bbc89088b9526ea9045410e5afb70a985cplars * created in the setup. 387865695bbc89088b9526ea9045410e5afb70a985cplars */ 388865695bbc89088b9526ea9045410e5afb70a985cplars tst_rmdir(); 389865695bbc89088b9526ea9045410e5afb70a985cplars 390865695bbc89088b9526ea9045410e5afb70a985cplars /* exit with return code appropriate for results */ 391865695bbc89088b9526ea9045410e5afb70a985cplars tst_exit(); 392865695bbc89088b9526ea9045410e5afb70a985cplars} 393