From fefa0d82145890019b5cf66bc2e2323f603f6d79 Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Tue, 15 Nov 2016 01:45:58 +0000 Subject: [PATCH] ospfd: Fix bad index for ospf message-digest-key Signed-off-by: Quentin Young --- lib/memtypes.h | 249 +++++++++++++++++++++++++++++++++++++++++++++++ ospfd/ospf_vty.c | 21 ++-- 2 files changed, 262 insertions(+), 8 deletions(-) create mode 100644 lib/memtypes.h diff --git a/lib/memtypes.h b/lib/memtypes.h new file mode 100644 index 0000000000..c9300bd9b1 --- /dev/null +++ b/lib/memtypes.h @@ -0,0 +1,249 @@ +/* Auto-generated from memtypes.c by gawk. */ +/* Do not edit! */ + +#ifndef _QUAGGA_MEMTYPES_H +#define _QUAGGA_MEMTYPES_H + +enum +{ + MTYPE_TMP = 1, + MTYPE_STRVEC, + MTYPE_VECTOR, + MTYPE_VECTOR_INDEX, + MTYPE_LINK_LIST, + MTYPE_LINK_NODE, + MTYPE_THREAD, + MTYPE_THREAD_MASTER, + MTYPE_THREAD_STATS, + MTYPE_VTY, + MTYPE_VTY_OUT_BUF, + MTYPE_VTY_HIST, + MTYPE_IF, + MTYPE_CONNECTED, + MTYPE_NBR_CONNECTED, + MTYPE_CONNECTED_LABEL, + MTYPE_BUFFER, + MTYPE_BUFFER_DATA, + MTYPE_STREAM, + MTYPE_STREAM_DATA, + MTYPE_STREAM_FIFO, + MTYPE_PREFIX, + MTYPE_PREFIX_IPV4, + MTYPE_PREFIX_IPV6, + MTYPE_HASH, + MTYPE_HASH_BACKET, + MTYPE_HASH_INDEX, + MTYPE_ROUTE_TABLE, + MTYPE_ROUTE_NODE, + MTYPE_DISTRIBUTE, + MTYPE_DISTRIBUTE_IFNAME, + MTYPE_DISTRIBUTE_NAME, + MTYPE_ACCESS_LIST, + MTYPE_ACCESS_LIST_STR, + MTYPE_ACCESS_FILTER, + MTYPE_PREFIX_LIST, + MTYPE_PREFIX_LIST_ENTRY, + MTYPE_PREFIX_LIST_STR, + MTYPE_PREFIX_LIST_TRIE, + MTYPE_ROUTE_MAP, + MTYPE_ROUTE_MAP_NAME, + MTYPE_ROUTE_MAP_INDEX, + MTYPE_ROUTE_MAP_RULE, + MTYPE_ROUTE_MAP_RULE_STR, + MTYPE_ROUTE_MAP_COMPILED, + MTYPE_ROUTE_MAP_DEP, + MTYPE_CMD_TOKENS, + MTYPE_KEY, + MTYPE_KEYCHAIN, + MTYPE_IF_RMAP, + MTYPE_IF_RMAP_NAME, + MTYPE_SOCKUNION, + MTYPE_PRIVS, + MTYPE_ZLOG, + MTYPE_ZCLIENT, + MTYPE_WORK_QUEUE, + MTYPE_WORK_QUEUE_ITEM, + MTYPE_WORK_QUEUE_NAME, + MTYPE_PQUEUE, + MTYPE_PQUEUE_DATA, + MTYPE_HOST, + MTYPE_BFD_INFO, + MTYPE_VRF, + MTYPE_VRF_NAME, + MTYPE_VRF_BITMAP, + MTYPE_RTADV_PREFIX, + MTYPE_ZEBRA_NS, + MTYPE_ZEBRA_VRF, + MTYPE_NEXTHOP, + MTYPE_RIB, + MTYPE_RIB_QUEUE, + MTYPE_STATIC_ROUTE, + MTYPE_RIB_DEST, + MTYPE_RIB_TABLE_INFO, + MTYPE_RNH, + MTYPE_NETLINK_NAME, + MTYPE_BGP, + MTYPE_BGP_LISTENER, + MTYPE_BGP_PEER, + MTYPE_BGP_PEER_HOST, + MTYPE_BGP_PEER_IFNAME, + MTYPE_BGP_PEER_GROUP, + MTYPE_BGP_PEER_GROUP_HOST, + MTYPE_PEER_DESC, + MTYPE_PEER_PASSWORD, + MTYPE_BGP_PEER_AF, + MTYPE_BGP_UPDGRP, + MTYPE_BGP_UPD_SUBGRP, + MTYPE_BGP_PACKET, + MTYPE_ATTR, + MTYPE_ATTR_EXTRA, + MTYPE_AS_PATH, + MTYPE_AS_SEG, + MTYPE_AS_SEG_DATA, + MTYPE_AS_STR, + MTYPE_BGP_TABLE, + MTYPE_BGP_NODE, + MTYPE_BGP_ROUTE, + MTYPE_BGP_ROUTE_EXTRA, + MTYPE_BGP_CONN, + MTYPE_BGP_STATIC, + MTYPE_BGP_ADVERTISE_ATTR, + MTYPE_BGP_ADVERTISE, + MTYPE_BGP_SYNCHRONISE, + MTYPE_BGP_ADJ_IN, + MTYPE_BGP_ADJ_OUT, + MTYPE_BGP_MPATH_INFO, + MTYPE_AS_LIST, + MTYPE_AS_FILTER, + MTYPE_AS_FILTER_STR, + MTYPE_COMMUNITY, + MTYPE_COMMUNITY_VAL, + MTYPE_COMMUNITY_STR, + MTYPE_ECOMMUNITY, + MTYPE_ECOMMUNITY_VAL, + MTYPE_ECOMMUNITY_STR, + MTYPE_COMMUNITY_LIST, + MTYPE_COMMUNITY_LIST_NAME, + MTYPE_COMMUNITY_LIST_ENTRY, + MTYPE_COMMUNITY_LIST_CONFIG, + MTYPE_COMMUNITY_LIST_HANDLER, + MTYPE_CLUSTER, + MTYPE_CLUSTER_VAL, + MTYPE_BGP_PROCESS_QUEUE, + MTYPE_BGP_CLEAR_NODE_QUEUE, + MTYPE_TRANSIT, + MTYPE_TRANSIT_VAL, + MTYPE_BGP_DEBUG_FILTER, + MTYPE_BGP_DEBUG_STR, + MTYPE_BGP_DISTANCE, + MTYPE_BGP_NEXTHOP_CACHE, + MTYPE_BGP_CONFED_LIST, + MTYPE_PEER_UPDATE_SOURCE, + MTYPE_PEER_CONF_IF, + MTYPE_BGP_DAMP_INFO, + MTYPE_BGP_DAMP_ARRAY, + MTYPE_BGP_REGEXP, + MTYPE_BGP_AGGREGATE, + MTYPE_BGP_ADDR, + MTYPE_BGP_REDIST, + MTYPE_BGP_FILTER_NAME, + MTYPE_BGP_DUMP_STR, + MTYPE_ENCAP_TLV, + MTYPE_RIP, + MTYPE_RIP_INFO, + MTYPE_RIP_INTERFACE, + MTYPE_RIP_PEER, + MTYPE_RIP_OFFSET_LIST, + MTYPE_RIP_DISTANCE, + MTYPE_RIPNG, + MTYPE_RIPNG_ROUTE, + MTYPE_RIPNG_AGGREGATE, + MTYPE_RIPNG_PEER, + MTYPE_RIPNG_OFFSET_LIST, + MTYPE_RIPNG_RTE_DATA, + MTYPE_OSPF_TOP, + MTYPE_OSPF_AREA, + MTYPE_OSPF_AREA_RANGE, + MTYPE_OSPF_NETWORK, + MTYPE_OSPF_NEIGHBOR_STATIC, + MTYPE_OSPF_IF, + MTYPE_OSPF_NEIGHBOR, + MTYPE_OSPF_ROUTE, + MTYPE_OSPF_TMP, + MTYPE_OSPF_LSA, + MTYPE_OSPF_LSA_DATA, + MTYPE_OSPF_LSDB, + MTYPE_OSPF_PACKET, + MTYPE_OSPF_FIFO, + MTYPE_OSPF_VERTEX, + MTYPE_OSPF_VERTEX_PARENT, + MTYPE_OSPF_NEXTHOP, + MTYPE_OSPF_PATH, + MTYPE_OSPF_VL_DATA, + MTYPE_OSPF_CRYPT_KEY, + MTYPE_OSPF_EXTERNAL_INFO, + MTYPE_OSPF_DISTANCE, + MTYPE_OSPF_IF_INFO, + MTYPE_OSPF_IF_PARAMS, + MTYPE_OSPF_MESSAGE, + MTYPE_OSPF6_TOP, + MTYPE_OSPF6_AREA, + MTYPE_OSPF6_IF, + MTYPE_OSPF6_NEIGHBOR, + MTYPE_OSPF6_ROUTE, + MTYPE_OSPF6_PREFIX, + MTYPE_OSPF6_MESSAGE, + MTYPE_OSPF6_LSA, + MTYPE_OSPF6_LSA_SUMMARY, + MTYPE_OSPF6_LSDB, + MTYPE_OSPF6_VERTEX, + MTYPE_OSPF6_SPFTREE, + MTYPE_OSPF6_NEXTHOP, + MTYPE_OSPF6_EXTERNAL_INFO, + MTYPE_OSPF6_OTHER, + MTYPE_ISIS, + MTYPE_ISIS_TMP, + MTYPE_ISIS_CIRCUIT, + MTYPE_ISIS_LSP, + MTYPE_ISIS_ADJACENCY, + MTYPE_ISIS_AREA, + MTYPE_ISIS_AREA_ADDR, + MTYPE_ISIS_TLV, + MTYPE_ISIS_DYNHN, + MTYPE_ISIS_SPFTREE, + MTYPE_ISIS_VERTEX, + MTYPE_ISIS_ROUTE_INFO, + MTYPE_ISIS_NEXTHOP, + MTYPE_ISIS_NEXTHOP6, + MTYPE_ISIS_DICT, + MTYPE_ISIS_DICT_NODE, + MTYPE_PIM_CHANNEL_OIL, + MTYPE_PIM_INTERFACE, + MTYPE_PIM_IGMP_JOIN, + MTYPE_PIM_IGMP_SOCKET, + MTYPE_PIM_IGMP_GROUP, + MTYPE_PIM_IGMP_GROUP_SOURCE, + MTYPE_PIM_NEIGHBOR, + MTYPE_PIM_IFCHANNEL, + MTYPE_PIM_UPSTREAM, + MTYPE_PIM_SSMPINGD, + MTYPE_PIM_STATIC_ROUTE, + MTYPE_PIM_BR, + MTYPE_VTYSH_CONFIG, + MTYPE_VTYSH_CONFIG_LINE, + MTYPE_MAX, +}; + +extern struct memory_list memory_list_lib[]; +extern struct memory_list memory_list_zebra[]; +extern struct memory_list memory_list_bgp[]; +extern struct memory_list memory_list_rip[]; +extern struct memory_list memory_list_ripng[]; +extern struct memory_list memory_list_ospf[]; +extern struct memory_list memory_list_ospf6[]; +extern struct memory_list memory_list_isis[]; +extern struct memory_list memory_list_pim[]; +extern struct memory_list memory_list_vtysh[]; + +#endif /* _QUAGGA_MEMTYPES_H */ + diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index 48c0de5f69..88c61ab175 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -6180,11 +6180,9 @@ DEFUN (ip_ospf_message_digest_key, "Message digest authentication password (key)\n" "Key ID\n" "Use MD5 algorithm\n" - "The OSPF password (key)" - "Address of interface") + "The OSPF password (key)\n" + "Address of interface\n") { - int idx_number = 3; - int idx_ipv4 = 6; struct interface *ifp; struct crypt_key *ck; u_char key_id; @@ -6194,10 +6192,17 @@ DEFUN (ip_ospf_message_digest_key, ifp = vty->index; params = IF_DEF_PARAMS (ifp); + int idx = 0; - if (argc == 7) + argv_find (argv, argc, "(1-255)", &idx); + char *keyid = argv[idx]->arg; + argv_find (argv, argc, "KEY", &idx); + char *cryptkey = argv[idx]->arg; + char *ifaddr = argv_find (argv, argc, "A.B.C.D", &idx) ? argv[idx]->arg : NULL; + + if (ifaddr) { - ret = inet_aton(argv[idx_ipv4]->arg, &addr); + ret = inet_aton(ifaddr, &addr); if (!ret) { vty_out (vty, "Please specify interface address by A.B.C.D%s", @@ -6209,7 +6214,7 @@ DEFUN (ip_ospf_message_digest_key, ospf_if_update_params (ifp, addr); } - key_id = strtol (argv[idx_number]->arg, NULL, 10); + key_id = strtol (keyid, NULL, 10); if (ospf_crypt_key_lookup (params->auth_crypt, key_id) != NULL) { vty_out (vty, "OSPF: Key %d already exists%s", key_id, VTY_NEWLINE); @@ -6219,7 +6224,7 @@ DEFUN (ip_ospf_message_digest_key, ck = ospf_crypt_key_new (); ck->key_id = (u_char) key_id; memset (ck->auth_key, 0, OSPF_AUTH_MD5_SIZE+1); - strncpy ((char *) ck->auth_key, argv[idx_ipv4]->arg, OSPF_AUTH_MD5_SIZE); + strncpy ((char *) ck->auth_key, cryptkey, OSPF_AUTH_MD5_SIZE); ospf_crypt_key_add (params->auth_crypt, ck); SET_IF_PARAM (params, auth_crypt); -- 2.39.5