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 174548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18865695bbc89088b9526ea9045410e5afb70a985cplars */ 19865695bbc89088b9526ea9045410e5afb70a985cplars 204bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak/* 21865695bbc89088b9526ea9045410e5afb70a985cplars * Test Name: chmod01 22865695bbc89088b9526ea9045410e5afb70a985cplars * 23865695bbc89088b9526ea9045410e5afb70a985cplars * Test Description: 24865695bbc89088b9526ea9045410e5afb70a985cplars * Verify that, chmod(2) succeeds when used to change the mode permissions 254bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * of a file. 26865695bbc89088b9526ea9045410e5afb70a985cplars * 27865695bbc89088b9526ea9045410e5afb70a985cplars * Expected Result: 284bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak * chmod(2) should return 0 and the mode permissions set on file should match 29865695bbc89088b9526ea9045410e5afb70a985cplars * the specified mode. 30bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak * 31865695bbc89088b9526ea9045410e5afb70a985cplars * Algorithm: 32865695bbc89088b9526ea9045410e5afb70a985cplars * Setup: 33865695bbc89088b9526ea9045410e5afb70a985cplars * Setup signal handling. 34865695bbc89088b9526ea9045410e5afb70a985cplars * Create temporary directory. 35865695bbc89088b9526ea9045410e5afb70a985cplars * Pause for SIGUSR1 if option specified. 36865695bbc89088b9526ea9045410e5afb70a985cplars * 37865695bbc89088b9526ea9045410e5afb70a985cplars * Test: 38865695bbc89088b9526ea9045410e5afb70a985cplars * Loop if the proper options are given. 39865695bbc89088b9526ea9045410e5afb70a985cplars * Execute system call 40865695bbc89088b9526ea9045410e5afb70a985cplars * Check return code, if system call failed (return=-1) 41865695bbc89088b9526ea9045410e5afb70a985cplars * Log the errno and Issue a FAIL message. 42865695bbc89088b9526ea9045410e5afb70a985cplars * Otherwise, 43bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak * Verify the Functionality of system call 44865695bbc89088b9526ea9045410e5afb70a985cplars * if successful, 45865695bbc89088b9526ea9045410e5afb70a985cplars * Issue Functionality-Pass message. 46865695bbc89088b9526ea9045410e5afb70a985cplars * Otherwise, 47865695bbc89088b9526ea9045410e5afb70a985cplars * Issue Functionality-Fail message. 48865695bbc89088b9526ea9045410e5afb70a985cplars * Cleanup: 49865695bbc89088b9526ea9045410e5afb70a985cplars * Print errno log and/or timing stats if options given 50865695bbc89088b9526ea9045410e5afb70a985cplars * Delete the temporary directory created. 51865695bbc89088b9526ea9045410e5afb70a985cplars * 52865695bbc89088b9526ea9045410e5afb70a985cplars * Usage: <for command-line> 53865695bbc89088b9526ea9045410e5afb70a985cplars * chmod01 [-c n] [-e] [-f] [-i n] [-I x] [-P x] [-t] 54865695bbc89088b9526ea9045410e5afb70a985cplars * where, -c n : Run n copies concurrently. 55865695bbc89088b9526ea9045410e5afb70a985cplars * -e : Turn on errno logging. 56865695bbc89088b9526ea9045410e5afb70a985cplars * -f : Turn off functionality Testing. 57865695bbc89088b9526ea9045410e5afb70a985cplars * -i n : Execute test n times. 58865695bbc89088b9526ea9045410e5afb70a985cplars * -I x : Execute test for x seconds. 59865695bbc89088b9526ea9045410e5afb70a985cplars * -P x : Pause for x seconds between iterations. 60865695bbc89088b9526ea9045410e5afb70a985cplars * -t : Turn on syscall timing. 61865695bbc89088b9526ea9045410e5afb70a985cplars * 62865695bbc89088b9526ea9045410e5afb70a985cplars * HISTORY 63865695bbc89088b9526ea9045410e5afb70a985cplars * 07/2001 Ported by Wayne Boyer 64865695bbc89088b9526ea9045410e5afb70a985cplars * 65865695bbc89088b9526ea9045410e5afb70a985cplars * RESTRICTIONS: 66865695bbc89088b9526ea9045410e5afb70a985cplars * None. 67865695bbc89088b9526ea9045410e5afb70a985cplars * 68865695bbc89088b9526ea9045410e5afb70a985cplars */ 69865695bbc89088b9526ea9045410e5afb70a985cplars 70865695bbc89088b9526ea9045410e5afb70a985cplars#include <stdio.h> 71865695bbc89088b9526ea9045410e5afb70a985cplars#include <sys/types.h> 72865695bbc89088b9526ea9045410e5afb70a985cplars#include <sys/stat.h> 73a7fa8561a5a095faf6e202a80b0c7729be8bb82dSteven Jackson#include <fcntl.h> 74865695bbc89088b9526ea9045410e5afb70a985cplars#include <errno.h> 75865695bbc89088b9526ea9045410e5afb70a985cplars#include <string.h> 76865695bbc89088b9526ea9045410e5afb70a985cplars#include <signal.h> 77865695bbc89088b9526ea9045410e5afb70a985cplars 78865695bbc89088b9526ea9045410e5afb70a985cplars#include "test.h" 79df007542635aed8686b5ebc111b0807a67349b41Cyril Hrubis#include "safe_macros.h" 80865695bbc89088b9526ea9045410e5afb70a985cplars 81865695bbc89088b9526ea9045410e5afb70a985cplars#define FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH 82865695bbc89088b9526ea9045410e5afb70a985cplars#define TESTFILE "testfile" 83865695bbc89088b9526ea9045410e5afb70a985cplars 84c5f4023abc580b0106928d93921eec62863c2b6eGarrett Cooperchar *TCID = "chmod01"; 85c5f4023abc580b0106928d93921eec62863c2b6eGarrett Cooperint TST_TOTAL = 8; 86865695bbc89088b9526ea9045410e5afb70a985cplars 87c5f4023abc580b0106928d93921eec62863c2b6eGarrett Cooperint modes[] = { 0, 07, 070, 0700, 0777, 02777, 04777, 06777 }; 88865695bbc89088b9526ea9045410e5afb70a985cplars 89c5f4023abc580b0106928d93921eec62863c2b6eGarrett Coopervoid setup(); 90c5f4023abc580b0106928d93921eec62863c2b6eGarrett Coopervoid cleanup(); 91865695bbc89088b9526ea9045410e5afb70a985cplars 9256207cec7732e09c216c751c0b5f88a242bacae6subrata_modakint main(int ac, char **av) 93865695bbc89088b9526ea9045410e5afb70a985cplars{ 94c5f4023abc580b0106928d93921eec62863c2b6eGarrett Cooper struct stat stat_buf; 951e6f5a673655551de5734ff31ef48cd63b604e6dGarrett Cooper int lc; 96c5f4023abc580b0106928d93921eec62863c2b6eGarrett Cooper int i; 971e6f5a673655551de5734ff31ef48cd63b604e6dGarrett Cooper int mode; 9856207cec7732e09c216c751c0b5f88a242bacae6subrata_modak 99c5f4023abc580b0106928d93921eec62863c2b6eGarrett Cooper TST_TOTAL = sizeof(modes) / sizeof(int); 100865695bbc89088b9526ea9045410e5afb70a985cplars 101d6d11d08678aac1ed2c370ea8e42e5f45aea07beCyril Hrubis tst_parse_opts(ac, av, NULL, NULL); 1022c28215423293e443469a07ae7011135d058b671Garrett Cooper 103865695bbc89088b9526ea9045410e5afb70a985cplars setup(); 104865695bbc89088b9526ea9045410e5afb70a985cplars 105865695bbc89088b9526ea9045410e5afb70a985cplars for (lc = 0; TEST_LOOPING(lc); lc++) { 1062c28215423293e443469a07ae7011135d058b671Garrett Cooper 107d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang tst_count = 0; 108865695bbc89088b9526ea9045410e5afb70a985cplars 109c5f4023abc580b0106928d93921eec62863c2b6eGarrett Cooper for (i = 0; i < TST_TOTAL; i++) { 110c5f4023abc580b0106928d93921eec62863c2b6eGarrett Cooper mode = modes[i]; 111865695bbc89088b9526ea9045410e5afb70a985cplars 112865695bbc89088b9526ea9045410e5afb70a985cplars TEST(chmod(TESTFILE, mode)); 113865695bbc89088b9526ea9045410e5afb70a985cplars 114865695bbc89088b9526ea9045410e5afb70a985cplars if (TEST_RETURN == -1) { 115354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_resm(TFAIL | TTERRNO, 116354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "chmod(%s, %#o) failed", TESTFILE, 117354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao mode); 118865695bbc89088b9526ea9045410e5afb70a985cplars continue; 119865695bbc89088b9526ea9045410e5afb70a985cplars } 120e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis if (stat(TESTFILE, &stat_buf) < 0) 121e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis tst_brkm(TFAIL | TERRNO, cleanup, 122e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis "stat(%s) failed", TESTFILE); 123e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis stat_buf.st_mode &= ~S_IFREG; 124e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis 125e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis if (stat_buf.st_mode == mode) 126e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis tst_resm(TPASS, "Functionality of " 127e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis "chmod(%s, %#o) successful", 128e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis TESTFILE, mode); 129e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis else 130e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis tst_resm(TFAIL, "%s: Incorrect " 131e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis "modes 0%03o, Expected 0%03o", 132e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis TESTFILE, stat_buf.st_mode, 133e38b961c385192f0d804914b77bd590734b42e75Cyril Hrubis mode); 134865695bbc89088b9526ea9045410e5afb70a985cplars } 1352c28215423293e443469a07ae7011135d058b671Garrett Cooper } 136865695bbc89088b9526ea9045410e5afb70a985cplars 137865695bbc89088b9526ea9045410e5afb70a985cplars cleanup(); 138c5f4023abc580b0106928d93921eec62863c2b6eGarrett Cooper tst_exit(); 139c5f4023abc580b0106928d93921eec62863c2b6eGarrett Cooper} 140865695bbc89088b9526ea9045410e5afb70a985cplars 141c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid setup(void) 142865695bbc89088b9526ea9045410e5afb70a985cplars{ 143865695bbc89088b9526ea9045410e5afb70a985cplars int fd; 144865695bbc89088b9526ea9045410e5afb70a985cplars 145865695bbc89088b9526ea9045410e5afb70a985cplars tst_sig(NOFORK, DEF_HANDLER, cleanup); 146865695bbc89088b9526ea9045410e5afb70a985cplars 147865695bbc89088b9526ea9045410e5afb70a985cplars TEST_PAUSE; 148865695bbc89088b9526ea9045410e5afb70a985cplars 149865695bbc89088b9526ea9045410e5afb70a985cplars tst_tmpdir(); 150865695bbc89088b9526ea9045410e5afb70a985cplars 151d8cd45ca8cb268a3fcf4d0679d5fdd24f499ece6Cyril Hrubis fd = SAFE_OPEN(cleanup, TESTFILE, O_RDWR | O_CREAT, FILE_MODE); 152df007542635aed8686b5ebc111b0807a67349b41Cyril Hrubis SAFE_CLOSE(cleanup, fd); 153865695bbc89088b9526ea9045410e5afb70a985cplars 1542c28215423293e443469a07ae7011135d058b671Garrett Cooper} 155865695bbc89088b9526ea9045410e5afb70a985cplars 156c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid cleanup(void) 157865695bbc89088b9526ea9045410e5afb70a985cplars{ 158865695bbc89088b9526ea9045410e5afb70a985cplars tst_rmdir(); 159ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 160