From: Christian Franke <nob...@nowhere.ws>

This cleans up circuit password configuration a little bit.
(Restructured several times by both Christian Franke and David
Lamparter.)

Signed-off-by: David Lamparter <equi...@opensourcerouting.org>
---
 isisd/isis_circuit.c | 81 +++++++++++++++-------------------------------------
 isisd/isis_circuit.h |  4 +++
 isisd/isis_vty.c     | 57 ++++++++++++++++++++++++++++++++++++
 3 files changed, 84 insertions(+), 58 deletions(-)

diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c
index a12be11..598afc1 100644
--- a/isisd/isis_circuit.c
+++ b/isisd/isis_circuit.c
@@ -1324,72 +1324,41 @@ isis_circuit_metric_set (struct isis_circuit *circuit, 
int level, int metric)
   return 0;
 }
 
-DEFUN (isis_passwd_md5,
-       isis_passwd_md5_cmd,
-       "isis password md5 WORD",
-       "IS-IS commands\n"
-       "Configure the authentication password for a circuit\n"
-       "Authentication type\n"
-       "Circuit password\n")
+int
+isis_circuit_passwd_unset (struct isis_circuit *circuit)
 {
-  int len;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  len = strlen (argv[0]);
-  if (len > 254)
-    {
-      vty_out (vty, "Too long circuit password (>254)%s", VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-  circuit->passwd.len = len;
-  circuit->passwd.type = ISIS_PASSWD_TYPE_HMAC_MD5;
-  strncpy ((char *)circuit->passwd.passwd, argv[0], 255);
-
-  return CMD_SUCCESS;
+  memset(&circuit->passwd, 0, sizeof(circuit->passwd));
+  return 0;
 }
 
-DEFUN (isis_passwd_clear,
-       isis_passwd_clear_cmd,
-       "isis password clear WORD",
-       "IS-IS commands\n"
-       "Configure the authentication password for a circuit\n"
-       "Authentication type\n"
-       "Circuit password\n")
+static int
+isis_circuit_passwd_set (struct isis_circuit *circuit, u_char passwd_type, 
const char *passwd)
 {
   int len;
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
 
-  len = strlen (argv[0]);
+  if (!passwd)
+    return -1;
+
+  len = strlen(passwd);
   if (len > 254)
-    {
-      vty_out (vty, "Too long circuit password (>254)%s", VTY_NEWLINE);
-      return CMD_ERR_AMBIGUOUS;
-    }
-  circuit->passwd.len = len;
-  circuit->passwd.type = ISIS_PASSWD_TYPE_CLEARTXT;
-  strncpy ((char *)circuit->passwd.passwd, argv[0], 255);
+    return -1;
 
-  return CMD_SUCCESS;
+  circuit->passwd.len = len;
+  strncpy((char *)circuit->passwd.passwd, passwd, 255);
+  circuit->passwd.type = passwd_type;
+  return 0;
 }
 
-DEFUN (no_isis_passwd,
-       no_isis_passwd_cmd,
-       "no isis password",
-       NO_STR
-       "IS-IS commands\n"
-       "Configure the authentication password for a circuit\n")
+int
+isis_circuit_passwd_cleartext_set (struct isis_circuit *circuit, const char 
*passwd)
 {
-  struct isis_circuit *circuit = isis_circuit_lookup (vty);
-  if (!circuit)
-    return CMD_ERR_NO_MATCH;
-
-  memset (&circuit->passwd, 0, sizeof (struct isis_passwd));
+  return isis_circuit_passwd_set (circuit, ISIS_PASSWD_TYPE_CLEARTXT, passwd);
+}
 
-  return CMD_SUCCESS;
+int
+isis_circuit_passwd_hmac_md5_set (struct isis_circuit *circuit, const char 
*passwd)
+{
+  return isis_circuit_passwd_set (circuit, ISIS_PASSWD_TYPE_HMAC_MD5, passwd);
 }
 
 DEFUN (isis_hello_interval,
@@ -2135,10 +2104,6 @@ isis_circuit_init ()
   install_element (INTERFACE_NODE, &interface_desc_cmd);
   install_element (INTERFACE_NODE, &no_interface_desc_cmd);
 
-  install_element (INTERFACE_NODE, &isis_passwd_clear_cmd);
-  install_element (INTERFACE_NODE, &isis_passwd_md5_cmd);
-  install_element (INTERFACE_NODE, &no_isis_passwd_cmd);
-
   install_element (INTERFACE_NODE, &isis_hello_interval_cmd);
   install_element (INTERFACE_NODE, &no_isis_hello_interval_cmd);
   install_element (INTERFACE_NODE, &no_isis_hello_interval_arg_cmd);
diff --git a/isisd/isis_circuit.h b/isisd/isis_circuit.h
index cd64202..45bac09 100644
--- a/isisd/isis_circuit.h
+++ b/isisd/isis_circuit.h
@@ -179,4 +179,8 @@ int  isis_circuit_circ_type_set (struct isis_circuit 
*circuit, int circ_type);
 
 int  isis_circuit_metric_set (struct isis_circuit *circuit, int level, int 
metric);
 
+int  isis_circuit_passwd_unset (struct isis_circuit *circuit);
+int  isis_circuit_passwd_cleartext_set (struct isis_circuit *circuit, const 
char *passwd);
+int  isis_circuit_passwd_hmac_md5_set (struct isis_circuit *circuit, const 
char *passwd);
+
 #endif /* _ZEBRA_ISIS_CIRCUIT_H */
diff --git a/isisd/isis_vty.c b/isisd/isis_vty.c
index 06d59a8..c6f2465 100644
--- a/isisd/isis_vty.c
+++ b/isisd/isis_vty.c
@@ -293,6 +293,59 @@ DEFUN (no_isis_network,
   return CMD_SUCCESS;
 }
 
+DEFUN (isis_passwd,
+       isis_passwd_cmd,
+       "isis password (md5|clear) WORD",
+       "IS-IS commands\n"
+       "Configure the authentication password for a circuit\n"
+       "HMAC-MD5 authentication\n"
+       "Cleartext password\n"
+       "Circuit password\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  int rv;
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  if (argv[0][0] == 'm')
+    rv = isis_circuit_passwd_hmac_md5_set(circuit, argv[1]);
+  else
+    rv = isis_circuit_passwd_cleartext_set(circuit, argv[1]);
+  if (rv)
+    {
+      vty_out (vty, "Too long circuit password (>254)%s", VTY_NEWLINE);
+      return CMD_ERR_AMBIGUOUS;
+    }
+
+  return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_passwd,
+       no_isis_passwd_cmd,
+       "no isis password",
+       NO_STR
+       "IS-IS commands\n"
+       "Configure the authentication password for a circuit\n")
+{
+  struct isis_circuit *circuit = isis_circuit_lookup (vty);
+  if (!circuit)
+    return CMD_ERR_NO_MATCH;
+
+  isis_circuit_passwd_unset(circuit);
+
+  return CMD_SUCCESS;
+}
+
+ALIAS (no_isis_passwd,
+       no_isis_passwd_arg_cmd,
+       "no isis password (md5|clear) WORD",
+       NO_STR
+       "IS-IS commands\n"
+       "Configure the authentication password for a circuit\n"
+       "HMAC-MD5 authentication\n"
+       "Cleartext password\n"
+       "Circuit password\n")
+
 DEFUN (isis_priority,
        isis_priority_cmd,
        "isis priority <0-127>",
@@ -822,6 +875,10 @@ isis_vty_init (void)
   install_element (INTERFACE_NODE, &isis_network_cmd);
   install_element (INTERFACE_NODE, &no_isis_network_cmd);
 
+  install_element (INTERFACE_NODE, &isis_passwd_cmd);
+  install_element (INTERFACE_NODE, &no_isis_passwd_cmd);
+  install_element (INTERFACE_NODE, &no_isis_passwd_arg_cmd);
+
   install_element (INTERFACE_NODE, &isis_priority_cmd);
   install_element (INTERFACE_NODE, &no_isis_priority_cmd);
   install_element (INTERFACE_NODE, &no_isis_priority_arg_cmd);
-- 
2.3.6


_______________________________________________
Quagga-dev mailing list
Quagga-dev@lists.quagga.net
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to