]> git.proxmox.com Git - mirror_frr.git/blobdiff - ripd/ripd.c
ripd: Convert zlog_err to zlog_ferr for LIB_ERR_XXX
[mirror_frr.git] / ripd / ripd.c
index 92c27106d583be85b09f9ba645e354e5b9408026..b91e7a4ceda6c7b681a7fc434a723d059454cc3b 100644 (file)
@@ -40,6 +40,7 @@
 #include "md5.h"
 #include "keychain.h"
 #include "privs.h"
+#include "lib_errors.h"
 
 #include "ripd/ripd.h"
 #include "ripd/rip_debug.h"
@@ -799,11 +800,11 @@ static int rip_auth_simple_password(struct rte *rte, struct sockaddr_in *from,
                                    struct interface *ifp)
 {
        struct rip_interface *ri;
-       char *auth_str = (char *)&rte->prefix;
+       char *auth_str = (char *)rte + offsetof(struct rte, prefix);
        int i;
 
        /* reject passwords with zeros in the middle of the string */
-       for (i = strlen(auth_str); i < 16; i++) {
+       for (i = strnlen(auth_str, 16); i < 16; i++) {
                if (auth_str[i] != '\0')
                        return 0;
        }
@@ -828,7 +829,7 @@ static int rip_auth_simple_password(struct rte *rte, struct sockaddr_in *from,
                struct key *key;
 
                keychain = keychain_lookup(ri->key_chain);
-               if (keychain == NULL)
+               if (keychain == NULL || keychain->key == NULL)
                        return 0;
 
                key = key_match_for_accept(keychain, auth_str);
@@ -902,7 +903,7 @@ static int rip_auth_md5(struct rip_packet *packet, struct sockaddr_in *from,
                        return 0;
 
                key = key_lookup_for_accept(keychain, md5->keyid);
-               if (key == NULL)
+               if (key == NULL || key->string == NULL)
                        return 0;
 
                strncpy(auth_str, key->string, RIP_AUTH_MD5_SIZE);
@@ -1339,7 +1340,8 @@ static int rip_create_socket(void)
        /* Make datagram socket. */
        sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
        if (sock < 0) {
-               zlog_err("Cannot create UDP socket: %s", safe_strerror(errno));
+               zlog_ferr(LIB_ERR_SOCKET, "Cannot create UDP socket: %s",
+                         safe_strerror(errno));
                exit(1);
        }
 
@@ -1355,25 +1357,29 @@ static int rip_create_socket(void)
 #endif
 
        if (ripd_privs.change(ZPRIVS_RAISE))
-               zlog_err("rip_create_socket: could not raise privs");
+               zlog_ferr(LIB_ERR_PRIVILEGES,
+                         "rip_create_socket: could not raise privs");
        setsockopt_so_recvbuf(sock, RIP_UDP_RCV_BUF);
        if ((ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr))) < 0)
 
        {
                int save_errno = errno;
                if (ripd_privs.change(ZPRIVS_LOWER))
-                       zlog_err("rip_create_socket: could not lower privs");
+                       zlog_ferr(LIB_ERR_PRIVILEGES,
+                                 "rip_create_socket: could not lower privs");
 
-               zlog_err("%s: Can't bind socket %d to %s port %d: %s", __func__,
-                        sock, inet_ntoa(addr.sin_addr),
-                        (int)ntohs(addr.sin_port), safe_strerror(save_errno));
+               zlog_ferr(LIB_ERR_SOCKET,
+                         "%s: Can't bind socket %d to %s port %d: %s",
+                         __func__, sock, inet_ntoa(addr.sin_addr),
+                         (int)ntohs(addr.sin_port), safe_strerror(save_errno));
 
                close(sock);
                return ret;
        }
 
        if (ripd_privs.change(ZPRIVS_LOWER))
-               zlog_err("rip_create_socket: could not lower privs");
+               zlog_ferr(LIB_ERR_PRIVILEGES,
+                         "rip_create_socket: could not lower privs");
 
        return sock;
 }
@@ -2101,6 +2107,8 @@ void rip_output_process(struct connected *ifc, struct sockaddr_in *to,
                /* to be passed to auth functions later */
                rip_auth_prepare_str_send(ri, key, auth_str,
                                          RIP_AUTH_SIMPLE_SIZE);
+               if (strlen(auth_str) == 0)
+                       return;
        }
 
        if (version == RIPv1) {
@@ -2810,6 +2818,7 @@ DEFUN_NOSH (router_rip,
                        return CMD_WARNING_CONFIG_FAILED;
                }
        }
+
        VTY_PUSH_CONTEXT(RIP_NODE, rip);
 
        return CMD_SUCCESS;