1 #include <signal.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <unistd.h> 5 #include <errno.h> 6 #include <sys/types.h> 7 #include "posixtest.h" 8 9 /* 10 * Copyright (c) 2002-2003, Intel Corporation. All rights reserved. 11 * Created by: julie.n.fleischer REMOVE-THIS AT intel DOT com 12 * This file is licensed under the GPL license. For the full content 13 * of this license, see the COPYING file at the top level of this 14 * source tree. 15 16 * Test that when the null signal is sent to kill(), error checking is 17 * still performed. 18 * 1) Send a signal to generate an ESRCH error. 19 * ==> Send a signal to PID 999999 20 * 2) Verify ESRCH error received and kill() returned -1. 21 * 3) Send a signal to generate an EPERM error. 22 * ==> Set UID to 1 and send a signal to init (pid = 1) 23 * 4) Verify EPERM error received and kill() returned -1. 24 * 25 * Note: These tests make the assumptions that: 26 * - They will be running as root. 27 * - The PID 999999 can never exist. 28 * - The UID 1 is available for assignment and cannot sent 29 * signals to root. 30 * *** I need to check to see if these assumptions are always valid. 31 */ 32 33 int main(void) 34 { 35 int failure = 0; 36 37 /* 38 * ESRCH 39 */ 40 if (-1 == kill(999999, 0)) { 41 if (ESRCH == errno) { 42 printf("ESRCH error received\n"); 43 } else { 44 printf 45 ("kill() failed on ESRCH errno not set correctly\n"); 46 failure = 1; 47 } 48 } else { 49 printf("kill() did not fail on ESRCH\n"); 50 failure = 1; 51 } 52 53 /* 54 * EPERM 55 */ 56 /* this is added incase user is root. If user is normal user, then it 57 * has no effect on the tests */ 58 setuid(1); 59 60 if (-1 == kill(1, 0)) { 61 if (EPERM == errno) { 62 printf("EPERM error received\n"); 63 } else { 64 printf 65 ("kill() failed on EPERM errno not set correctly\n"); 66 failure = 1; 67 } 68 } else { 69 printf("kill() did not fail on EPERM\n"); 70 failure = 1; 71 } 72 73 if (failure) { 74 printf("At least one test FAILED -- see output for status\n"); 75 return PTS_FAIL; 76 } else { 77 printf("Test PASSED\n"); 78 return PTS_PASS; 79 } 80 } 81