From 527c3c7d0d3bb4bf5fad699f10cf0d1a45a54692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= Date: Tue, 10 Aug 2021 22:50:33 +0100 Subject: [PATCH] Remove remaining uses of deprecated inet_ntoa() --- src/dhcp.c | 17 +++++---- src/dnsmasq.c | 1 - src/helper.c | 12 +++++-- src/option.c | 7 ++-- src/rfc2131.c | 96 +++++++++++++++++++++++++++++++-------------------- 5 files changed, 84 insertions(+), 49 deletions(-) diff --git a/src/dhcp.c b/src/dhcp.c index 3d41a08..a50568b 100644 --- a/src/dhcp.c +++ b/src/dhcp.c @@ -468,8 +468,11 @@ void dhcp_packet(time_t now, int pxe_fd) /* This can fail when, eg, iptables DROPS destination 255.255.255.255 */ if (errno != 0) - my_syslog(MS_DHCP | LOG_WARNING, _("Error sending DHCP packet to %s: %s"), - inet_ntoa(dest.sin_addr), strerror(errno)); + { + inet_ntop(AF_INET, &dest.sin_addr, daemon->addrbuff, ADDRSTRLEN); + my_syslog(MS_DHCP | LOG_WARNING, _("Error sending DHCP packet to %s: %s"), + daemon->addrbuff, strerror(errno)); + } } /* check against secondary interface addresses */ @@ -521,10 +524,11 @@ static void guess_range_netmask(struct in_addr addr, struct in_addr netmask) !(is_same_net(addr, context->start, netmask) && is_same_net(addr, context->end, netmask))) { - strcpy(daemon->dhcp_buff, inet_ntoa(context->start)); - strcpy(daemon->dhcp_buff2, inet_ntoa(context->end)); + inet_ntop(AF_INET, &context->start, daemon->dhcp_buff, sizeof(DHCP_BUFF_SZ)); + inet_ntop(AF_INET, &context->end, daemon->dhcp_buff2, sizeof(DHCP_BUFF_SZ)); + inet_ntop(AF_INET, &netmask, daemon->addrbuff, ADDRSTRLEN); my_syslog(MS_DHCP | LOG_WARNING, _("DHCP range %s -- %s is not consistent with netmask %s"), - daemon->dhcp_buff, daemon->dhcp_buff2, inet_ntoa(netmask)); + daemon->dhcp_buff, daemon->dhcp_buff2, daemon->addrbuff); } context->netmask = netmask; } @@ -1097,7 +1101,8 @@ static int relay_upstream4(struct dhcp_relay *relay, struct dhcp_packet *mess, if (option_bool(OPT_LOG_OPTS)) { inet_ntop(AF_INET, &relay->local, daemon->addrbuff, ADDRSTRLEN); - my_syslog(MS_DHCP | LOG_INFO, _("DHCP relay %s -> %s"), daemon->addrbuff, inet_ntoa(relay->server.addr4)); + inet_ntop(AF_INET, &relay->server.addr4, daemon->dhcp_buff2, DHCP_BUFF_SZ); + my_syslog(MS_DHCP | LOG_INFO, _("DHCP relay %s -> %s"), daemon->addrbuff, daemon->dhcp_buff2); } /* Save this for replies */ diff --git a/src/dnsmasq.c b/src/dnsmasq.c index 4483bd5..18fdfb0 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -109,7 +109,6 @@ int main (int argc, char **argv) daemon->packet_buff_sz = daemon->edns_pktsz + MAXDNAME + RRFIXEDSZ; daemon->packet = safe_malloc(daemon->packet_buff_sz); - daemon->addrbuff = safe_malloc(ADDRSTRLEN); if (option_bool(OPT_EXTRALOG)) daemon->addrbuff2 = safe_malloc(ADDRSTRLEN); diff --git a/src/helper.c b/src/helper.c index d81de96..02340a0 100644 --- a/src/helper.c +++ b/src/helper.c @@ -432,7 +432,8 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) buf = grab_extradata_lua(buf, end, "relay_address"); else if (data.giaddr.s_addr != 0) { - lua_pushstring(lua, inet_ntoa(data.giaddr)); + inet_ntop(AF_INET, &data.giaddr, daemon->addrbuff, ADDRSTRLEN); + lua_pushstring(lua, daemon->addrbuff); lua_setfield(lua, -2, "relay_address"); } @@ -610,8 +611,13 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) if (is6) buf = grab_extradata(buf, end, "DNSMASQ_RELAY_ADDRESS", &err); - else - my_setenv("DNSMASQ_RELAY_ADDRESS", data.giaddr.s_addr != 0 ? inet_ntoa(data.giaddr) : NULL, &err); + else + { + const char *giaddr = NULL; + if (data.giaddr.s_addr != 0) + giaddr = inet_ntop(AF_INET, &data.giaddr, daemon->addrbuff, ADDRSTRLEN); + my_setenv("DNSMASQ_RELAY_ADDRESS", giaddr, &err); + } for (i = 0; buf; i++) { diff --git a/src/option.c b/src/option.c index 03feb29..14fa537 100644 --- a/src/option.c +++ b/src/option.c @@ -3612,7 +3612,9 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma for (configs = daemon->dhcp_conf; configs; configs = configs->next) if ((configs->flags & CONFIG_ADDR) && configs->addr.s_addr == in.s_addr) { - sprintf(errstr, _("duplicate dhcp-host IP address %s"), inet_ntoa(in)); + inet_ntop(AF_INET, &in, daemon->addrbuff, ADDRSTRLEN); + sprintf(errstr, _("duplicate dhcp-host IP address %s"), + daemon->addrbuff); return 0; } } @@ -5234,7 +5236,8 @@ void read_opts(int argc, char **argv, char *compile_opts) daemon = opt_malloc(sizeof(struct daemon)); memset(daemon, 0, sizeof(struct daemon)); daemon->namebuff = buff; - + daemon->addrbuff = safe_malloc(ADDRSTRLEN); + /* Set defaults - everything else is zero or NULL */ daemon->cachesize = CACHESIZ; daemon->ftabsize = FTABSIZ; diff --git a/src/rfc2131.c b/src/rfc2131.c index 0baa602..11c9e4f 100644 --- a/src/rfc2131.c +++ b/src/rfc2131.c @@ -372,9 +372,22 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, if (!context) { - my_syslog(MS_DHCP | LOG_WARNING, _("no address range available for DHCP request %s %s"), - subnet_addr.s_addr ? _("with subnet selector") : _("via"), - subnet_addr.s_addr ? inet_ntoa(subnet_addr) : (mess->giaddr.s_addr ? inet_ntoa(mess->giaddr) : iface_name)); + const char *via; + if (subnet_addr.s_addr) + { + via = _("with subnet selector"); + inet_ntop(AF_INET, &subnet_addr, daemon->addrbuff, ADDRSTRLEN); + } + else + { + via = _("via"); + if (mess->giaddr.s_addr) + inet_ntop(AF_INET, &mess->giaddr, daemon->addrbuff, ADDRSTRLEN); + else + safe_strncpy(daemon->addrbuff, iface_name, ADDRSTRLEN); + } + my_syslog(MS_DHCP | LOG_WARNING, _("no address range available for DHCP request %s %s"), + via, daemon->addrbuff); return 0; } @@ -383,13 +396,19 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, struct dhcp_context *context_tmp; for (context_tmp = context; context_tmp; context_tmp = context_tmp->current) { - strcpy(daemon->namebuff, inet_ntoa(context_tmp->start)); + inet_ntop(AF_INET, &context_tmp->start, daemon->namebuff, MAXDNAME); if (context_tmp->flags & (CONTEXT_STATIC | CONTEXT_PROXY)) - my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCP subnet: %s/%s"), - ntohl(mess->xid), daemon->namebuff, inet_ntoa(context_tmp->netmask)); + { + inet_ntop(AF_INET, &context_tmp->netmask, daemon->addrbuff, ADDRSTRLEN); + my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCP subnet: %s/%s"), + ntohl(mess->xid), daemon->namebuff, daemon->addrbuff); + } else - my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCP range: %s -- %s"), - ntohl(mess->xid), daemon->namebuff, inet_ntoa(context_tmp->end)); + { + inet_ntop(AF_INET, &context_tmp->end, daemon->addrbuff, ADDRSTRLEN); + my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCP range: %s -- %s"), + ntohl(mess->xid), daemon->namebuff, daemon->addrbuff); + } } } @@ -1031,8 +1050,9 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, config->addr.s_addr == option_addr(opt).s_addr) { prettyprint_time(daemon->dhcp_buff, DECLINE_BACKOFF); + inet_ntop(AF_INET, &config->addr, daemon->addrbuff, ADDRSTRLEN); my_syslog(MS_DHCP | LOG_WARNING, _("disabling DHCP static address %s for %s"), - inet_ntoa(config->addr), daemon->dhcp_buff); + daemon->addrbuff, daemon->dhcp_buff); config->flags |= CONFIG_DECLINED; config->decline_time = now; } @@ -1078,7 +1098,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, if (have_config(config, CONFIG_ADDR)) { - char *addrs = inet_ntoa(config->addr); + inet_ntop(AF_INET, &config->addr, daemon->addrbuff, ADDRSTRLEN); if ((ltmp = lease_find_by_addr(config->addr)) && ltmp != lease && @@ -1088,7 +1108,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, unsigned char *mac = extended_hwaddr(ltmp->hwaddr_type, ltmp->hwaddr_len, ltmp->hwaddr, ltmp->clid_len, ltmp->clid, &len); my_syslog(MS_DHCP | LOG_WARNING, _("not using configured address %s because it is leased to %s"), - addrs, print_mac(daemon->namebuff, mac, len)); + daemon->addrbuff, print_mac(daemon->namebuff, mac, len)); } else { @@ -1097,10 +1117,10 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, if (context->router.s_addr == config->addr.s_addr) break; if (tmp) - my_syslog(MS_DHCP | LOG_WARNING, _("not using configured address %s because it is in use by the server or relay"), addrs); + my_syslog(MS_DHCP | LOG_WARNING, _("not using configured address %s because it is in use by the server or relay"), daemon->addrbuff); else if (have_config(config, CONFIG_DECLINED) && difftime(now, config->decline_time) < (float)DECLINE_BACKOFF) - my_syslog(MS_DHCP | LOG_WARNING, _("not using configured address %s because it was previously declined"), addrs); + my_syslog(MS_DHCP | LOG_WARNING, _("not using configured address %s because it was previously declined"), daemon->addrbuff); else conf = config->addr; } @@ -1303,9 +1323,10 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, a lease from one of it's MACs to give the address to another. */ if (config && config_has_mac(config, ltmp->hwaddr, ltmp->hwaddr_len, ltmp->hwaddr_type)) { + inet_ntop(AF_INET, <mp->addr, daemon->addrbuff, ADDRSTRLEN); my_syslog(MS_DHCP | LOG_INFO, _("abandoning lease to %s of %s"), print_mac(daemon->namebuff, ltmp->hwaddr, ltmp->hwaddr_len), - inet_ntoa(ltmp->addr)); + daemon->addrbuff); lease = ltmp; } else @@ -1674,42 +1695,40 @@ static void add_extradata_opt(struct dhcp_lease *lease, unsigned char *opt) static void log_packet(char *type, void *addr, unsigned char *ext_mac, int mac_len, char *interface, char *string, char *err, u32 xid) { - struct in_addr a; - if (!err && !option_bool(OPT_LOG_OPTS) && option_bool(OPT_QUIET_DHCP)) return; - /* addr may be misaligned */ + daemon->dhcp_buff2[0] = 0; if (addr) - memcpy(&a, addr, sizeof(a)); + inet_ntop(AF_INET, addr, daemon->dhcp_buff2, DHCP_BUFF_SZ - 1); print_mac(daemon->namebuff, ext_mac, mac_len); - if(option_bool(OPT_LOG_OPTS)) - my_syslog(MS_DHCP | LOG_INFO, "%u %s(%s) %s%s%s %s%s", - ntohl(xid), - type, - interface, - addr ? inet_ntoa(a) : "", - addr ? " " : "", - daemon->namebuff, - string ? string : "", - err ? err : ""); - else - my_syslog(MS_DHCP | LOG_INFO, "%s(%s) %s%s%s %s%s", + if (option_bool(OPT_LOG_OPTS)) + my_syslog(MS_DHCP | LOG_INFO, "%u %s(%s) %s%s%s %s%s", + ntohl(xid), type, interface, - addr ? inet_ntoa(a) : "", + daemon->dhcp_buff2, addr ? " " : "", daemon->namebuff, string ? string : "", err ? err : ""); - + else + my_syslog(MS_DHCP | LOG_INFO, "%s(%s) %s%s%s %s%s", + type, + interface, + daemon->dhcp_buff2, + addr ? " " : "", + daemon->namebuff, + string ? string : "", + err ? err : ""); + #ifdef HAVE_UBUS - if (!strcmp(type, "DHCPACK")) - ubus_event_bcast("dhcp.ack", daemon->namebuff, addr ? inet_ntoa(a) : NULL, string ? string : NULL, interface); - else if (!strcmp(type, "DHCPRELEASE")) - ubus_event_bcast("dhcp.release", daemon->namebuff, addr ? inet_ntoa(a) : NULL, string ? string : NULL, interface); + if (!strcmp(type, "DHCPACK")) + ubus_event_bcast("dhcp.ack", daemon->namebuff, addr ? daemon->dhcp_buff2 : NULL, string, interface); + else if (!strcmp(type, "DHCPRELEASE")) + ubus_event_bcast("dhcp.release", daemon->namebuff, addr ? daemon->dhcp_buff2 : NULL, string, interface); #endif } @@ -1861,7 +1880,10 @@ static size_t dhcp_packet_size(struct dhcp_packet *mess, unsigned char *agent_id if (option_bool(OPT_LOG_OPTS)) { if (mess->siaddr.s_addr != 0) - my_syslog(MS_DHCP | LOG_INFO, _("%u next server: %s"), ntohl(mess->xid), inet_ntoa(mess->siaddr)); + { + inet_ntop(AF_INET, &mess->siaddr, daemon->addrbuff, ADDRSTRLEN); + my_syslog(MS_DHCP | LOG_INFO, _("%u next server: %s"), ntohl(mess->xid), daemon->addrbuff); + } if ((mess->flags & htons(0x8000)) && mess->ciaddr.s_addr == 0) my_syslog(MS_DHCP | LOG_INFO, _("%u broadcast response"), ntohl(mess->xid));