diff options
Diffstat (limited to 'ripd/ripd.c')
| -rw-r--r-- | ripd/ripd.c | 17 |
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( |
