summaryrefslogtreecommitdiff
path: root/ripd/ripd.c
diff options
context:
space:
mode:
Diffstat (limited to 'ripd/ripd.c')
-rw-r--r--ripd/ripd.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/ripd/ripd.c b/ripd/ripd.c
index 7d940efd9c..3d1427c3b6 100644
--- a/ripd/ripd.c
+++ b/ripd/ripd.c
@@ -920,9 +920,11 @@ static int rip_auth_md5(struct rip_packet *packet, struct sockaddr_in *from,
if (key == NULL || key->string == NULL)
return 0;
- strlcpy(auth_str, key->string, sizeof(auth_str));
+ memcpy(auth_str, key->string,
+ MIN(sizeof(auth_str), strlen(key->string)));
} else if (ri->auth_str)
- strlcpy(auth_str, ri->auth_str, sizeof(auth_str));
+ memcpy(auth_str, ri->auth_str,
+ MIN(sizeof(auth_str), strlen(ri->auth_str)));
if (auth_str[0] == 0)
return 0;
@@ -965,9 +967,11 @@ static void rip_auth_prepare_str_send(struct rip_interface *ri, struct key *key,
memset(auth_str, 0, len);
if (key && key->string)
- strlcpy(auth_str, key->string, len);
+ memcpy(auth_str, key->string,
+ MIN((size_t)len, strlen(key->string)));
else if (ri->auth_str)
- strlcpy(auth_str, ri->auth_str, len);
+ memcpy(auth_str, ri->auth_str,
+ MIN((size_t)len, strlen(ri->auth_str)));
return;
}
@@ -2143,7 +2147,8 @@ void rip_output_process(struct connected *ifc, struct sockaddr_in *to,
&rp->p)) {
if ((ifc->address->prefixlen
!= rp->p.prefixlen)
- && (rp->p.prefixlen != 32))
+ && (rp->p.prefixlen
+ != IPV4_MAX_BITLEN))
continue;
} else {
memcpy(&classfull, &rp->p,
@@ -2429,7 +2434,7 @@ static void rip_update_interface(struct connected *ifc, uint8_t version,
/* use specified broadcast or peer destination
* addr */
to.sin_addr = ifc->destination->u.prefix4;
- else if (ifc->address->prefixlen < IPV4_MAX_PREFIXLEN)
+ else if (ifc->address->prefixlen < IPV4_MAX_BITLEN)
/* calculate the appropriate broadcast address
*/
to.sin_addr.s_addr = ipv4_broadcast_addr(