1 /* wait_check.c: wait, check and log */ 2 3 /* 4 * Copyright (C) 1999 Uwe Ohse 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 */ 20 21 #include "config.h" 22 #include <sys/types.h> 23 24 #include <netinet/in.h> 25 #include <syslog.h> 26 #include <sys/wait.h> 27 #include <unistd.h> 28 29 #include "str_ulong.h" 30 #include "utftpd.h" /* get my prototype */ 31 32 int 33 wait_check_and_log(pid_t pid) 34 { 35 int status; 36 pid=waitpid(pid,&status,0); 37 if (WIFEXITED(status)) { 38 char nb[STR_ULONG]; 39 int ec=WEXITSTATUS(status); 40 if (ec!=0) { utftpd_nak(int peer,int ec,const char * et,struct utftpd_ctrl * flags)41 str_ulong(nb,ec); 42 syslog(LOG_ERR,"child terminated with code %s",nb); 43 return -1; 44 } 45 } else if (WIFSIGNALED(status)) { 46 char nb[STR_ULONG]; 47 int sig=WTERMSIG(status); 48 str_ulong(nb,sig); 49 syslog(LOG_ERR,"child terminated by signal %s",nb); 50 return -1; 51 } 52 return 0; 53 } 54