Signed-off-by: Vitezslav Samel <vitezslav(a)samel.cz>
---
src/othptab.c | 6 ++++--
src/revname.c | 20 ++++++++++----------
src/revname.h | 2 +-
src/tcptable.c | 10 ++++++----
4 files changed, 21 insertions(+), 17 deletions(-)
diff --git a/src/othptab.c b/src/othptab.c
index 1d223ce..ef5587b 100644
--- a/src/othptab.c
+++ b/src/othptab.c
@@ -204,8 +204,10 @@ struct othptabent *add_othp_entry(struct othptable *table, struct
pkt_hdr *pkt,
else
memset(&new_entry->s6addr, 0, 16);
- revname(rev_lookup, &isaddr, s6addr, new_entry->s_fqdn, rvnfd);
- revname(rev_lookup, &idaddr, d6addr, new_entry->d_fqdn, rvnfd);
+ revname(rev_lookup, &isaddr, s6addr, new_entry->s_fqdn,
+ sizeof(new_entry->s_fqdn), rvnfd);
+ revname(rev_lookup, &idaddr, d6addr, new_entry->d_fqdn,
+ sizeof(new_entry->d_fqdn), rvnfd);
if (!fragment) {
if (protocol == IPPROTO_ICMP) {
diff --git a/src/revname.c b/src/revname.c
index 627b00d..28a1b68 100644
--- a/src/revname.c
+++ b/src/revname.c
@@ -134,7 +134,7 @@ void close_rvn_socket(int fd)
}
int revname(int *lookup, struct in_addr *saddr, struct in6_addr *s6addr,
- char *target, int rvnfd)
+ char *target, size_t target_size, int rvnfd)
{
struct hostent *he;
struct rvn rpkt;
@@ -145,7 +145,7 @@ int revname(int *lookup, struct in_addr *saddr, struct in6_addr
*s6addr,
struct timeval tv;
int sstat = 0;
- memset(target, 0, 45);
+ memset(target, 0, target_size);
if (*lookup) {
if (rvnfd > 0) {
su.sun_family = AF_UNIX;
@@ -189,14 +189,14 @@ int revname(int *lookup, struct in_addr *saddr, struct in6_addr
*s6addr,
if (br < 0) {
if (saddr->s_addr != 0)
- inet_ntop(AF_INET, saddr, target, 44);
+ inet_ntop(AF_INET, saddr, target, target_size - 1);
else
- inet_ntop(AF_INET6, s6addr, target, 44);
+ inet_ntop(AF_INET6, s6addr, target, target_size - 1);
printipcerr();
*lookup = 0;
return RESOLVED;
}
- strncpy(target, rpkt.fqdn, 44);
+ strncpy(target, rpkt.fqdn, target_size - 1);
return (rpkt.ready);
} else {
if (saddr->s_addr != 0)
@@ -210,20 +210,20 @@ int revname(int *lookup, struct in_addr *saddr, struct in6_addr
*s6addr,
if (he == NULL) {
if (saddr->s_addr != 0)
- inet_ntop(AF_INET, saddr, target, 44);
+ inet_ntop(AF_INET, saddr, target, target_size - 1);
else
- inet_ntop(AF_INET6, s6addr, target, 44);
+ inet_ntop(AF_INET6, s6addr, target, target_size - 1);
} else {
- strncpy(target, he->h_name, 44);
+ strncpy(target, he->h_name, target_size - 1);
}
return RESOLVED;
}
} else {
if (saddr->s_addr != 0 || s6addr == NULL)
- inet_ntop(AF_INET, saddr, target, 44);
+ inet_ntop(AF_INET, saddr, target, target_size - 1);
else
- inet_ntop(AF_INET6, s6addr, target, 44);
+ inet_ntop(AF_INET6, s6addr, target, target_size - 1);
return RESOLVED;
}
diff --git a/src/revname.h b/src/revname.h
index 63dceb1..9a994da 100644
--- a/src/revname.h
+++ b/src/revname.h
@@ -13,6 +13,6 @@ void open_rvn_socket(int *fd);
void close_rvn_socket(int fd);
int revname(int *lookup, struct in_addr *saddr, struct in6_addr *s6addr,
- char *target, int rvnfd);
+ char *target, size_t target_size, int rvnfd);
#endif /* IPTRAF_NG_REVNAME_H */
diff --git a/src/tcptable.c b/src/tcptable.c
index ff85c9b..5a19cb5 100644
--- a/src/tcptable.c
+++ b/src/tcptable.c
@@ -352,11 +352,11 @@ struct tcptableent *addentry(struct tcptable *table, unsigned long
int saddr,
new_entry->s_fstat =
revname(rev_lookup, &(new_entry->saddr), &new_entry->s6addr,
- new_entry->s_fqdn, rvnfd);
+ new_entry->s_fqdn, sizeof(new_entry->s_fqdn), rvnfd);
new_entry->d_fstat =
revname(rev_lookup, &(new_entry->daddr), &new_entry->d6addr,
- new_entry->d_fqdn, rvnfd);
+ new_entry->d_fqdn, sizeof(new_entry->d_fqdn), rvnfd);
/*
* Set port service names (where applicable)
@@ -600,14 +600,16 @@ void updateentry(struct tcptable *table, struct tcptableent
*tableentry,
if (tableentry->s_fstat != RESOLVED) {
tableentry->s_fstat =
revname(revlook, &(tableentry->saddr),
- &(tableentry->s6addr), tableentry->s_fqdn, rvnfd);
+ &(tableentry->s6addr), tableentry->s_fqdn,
+ sizeof(tableentry->s_fqdn), rvnfd);
strcpy(tableentry->oth_connection->d_fqdn, tableentry->s_fqdn);
tableentry->oth_connection->d_fstat = tableentry->s_fstat;
}
if (tableentry->d_fstat != RESOLVED) {
tableentry->d_fstat =
revname(revlook, &(tableentry->daddr),
- &(tableentry->d6addr), tableentry->d_fqdn, rvnfd);
+ &(tableentry->d6addr), tableentry->d_fqdn,
+ sizeof(tableentry->d_fqdn), rvnfd);
strcpy(tableentry->oth_connection->s_fqdn, tableentry->d_fqdn);
tableentry->oth_connection->s_fstat = tableentry->d_fstat;
}
--
1.7.8.4