From acb1a41f1073f5fced4bad97a96654fca9b757a6 Mon Sep 17 00:00:00 2001 From: cheoleun moon Date: Fri, 19 Nov 2021 17:19:23 +0900 Subject: [PATCH] dhcpd: Exit on an error in signal_handler Change-Id: I59ad3a67d7591b24e806d9a5cecc895bfbe9a881 --- toys/pending/dhcpd.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/toys/pending/dhcpd.c b/toys/pending/dhcpd.c index d9ca7f0..e30c249 100644 --- a/toys/pending/dhcpd.c +++ b/toys/pending/dhcpd.c @@ -27,7 +27,7 @@ config DEBUG_DHCP /* * Things to do - * + * * - Working as an relay agent * - Rapid commit option support * - Additional packet options (commented on the middle of sources) @@ -37,7 +37,7 @@ config DEBUG_DHCP #define FOR_dhcpd #include "toys.h" -#include +#include #include // Todo: headers not in posix @@ -46,11 +46,7 @@ config DEBUG_DHCP #include #include -#if CFG_DEBUG_DHCP==1 # define dbg(fmt, arg...) printf(fmt, ##arg) -#else -# define dbg(fmt, arg...) -#endif #define flag_get(f,v,d) ((toys.optflags & (f)) ? (v) : (d)) #define flag_chk(f) ((toys.optflags & (f)) ? 1 : 0) @@ -497,7 +493,10 @@ static void write_pid(char *path) static void signal_handler(int sig) { unsigned char ch = sig; - if (write(sigfd.wr, &ch, 1) != 1) dbg("can't send signal\n"); + if (write(sigfd.wr, &ch, 1) != 1) { + dbg("can't send signal\n"); + exit(0); + } } // signal setup for SIGUSR1 SIGTERM @@ -1334,7 +1333,7 @@ static int verifyip6_in_lease(uint32_t *nip6, uint8_t *duid, uint16_t ia_type, u return -1; if (!memcmp(((dyn_lease6*) listdls->arg)->duid, duid, ((dyn_lease6*) listdls->arg)->duid_len) - && ((dyn_lease6*) listdls->arg)->ia_type == ia_type) + && ((dyn_lease6*) listdls->arg)->ia_type == ia_type) return -1; } for (sls6 = gstate.leases.sleases6; sls6; sls6 = sls6->next) @@ -1424,7 +1423,7 @@ static int addip6_to_lease(uint32_t *assigned_nip, uint8_t *duid, uint16_t ia_ty dls6->ia_type = ia_type; dls6->iaid = iaid; memcpy(dls6->lease_nip6, assigned_nip, sizeof(uint32_t)*4); - + if (update) *lifetime = get_lease(*lifetime + now); dls6->expires = *lifetime + now; @@ -1717,7 +1716,7 @@ void dhcpd_main(void) dbg("Error in select wait again...\n"); continue; } - if (!retval) { // Timed out + if (!retval) { // Timed out dbg("select wait Timed Out...\n"); waited = 0; (addr_version==AF_INET6)? write_lease6file() : write_leasefile(); @@ -1730,7 +1729,7 @@ void dhcpd_main(void) } else gconfig.server_nip = htonl(gconfig.server_nip); continue; } - if (FD_ISSET(sigfd.rd, &rfds)) { // Some Activity on RDFDs : is signal + if (FD_ISSET(sigfd.rd, &rfds)) { // Some Activity on RDFDs : is signal unsigned char sig; if (read(sigfd.rd, &sig, 1) != 1) { dbg("signal read failed.\n"); @@ -1774,7 +1773,7 @@ void dhcpd_main(void) dbg("no or bad message type option, ignoring packet.\n"); continue; } - if (!gstate.rcvd.rcvd_pkt6.transaction_id || + if (!gstate.rcvd.rcvd_pkt6.transaction_id || memcmp(gstate.rcvd.rcvd_pkt6.transaction_id, transactionid, 3)) { dbg("no or bad transaction id, ignoring packet.\n"); continue; @@ -2002,7 +2001,7 @@ void dhcpd_main(void) dbg("Message Type : %u\n", gstate.rqcode); break; } - + } else { if(read_packet() < 0) { open_listensock(); @@ -2012,7 +2011,7 @@ void dhcpd_main(void) get_optval((uint8_t*)&gstate.rcvd.rcvd_pkt.options, DHCP_OPT_MESSAGE_TYPE, &gstate.rqcode); - if (gstate.rqcode == 0 || gstate.rqcode < DHCPDISCOVER + if (gstate.rqcode == 0 || gstate.rqcode < DHCPDISCOVER || gstate.rqcode > DHCPINFORM) { dbg("no or bad message type option, ignoring packet.\n"); continue; -- 2.7.4