install_element (BGP_NODE, &no_bgp_scan_time_cmd);
install_element (BGP_NODE, &no_bgp_scan_time_val_cmd);
install_element (VIEW_NODE, &show_ip_bgp_scan_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_scan_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_scan_cmd);
}
install_element (VIEW_NODE, &show_ip_bgp_view_rsclient_cmd);
install_element (VIEW_NODE, &show_ip_bgp_view_rsclient_route_cmd);
install_element (VIEW_NODE, &show_ip_bgp_view_rsclient_prefix_cmd);
+
+ /* Restricted node: VIEW_NODE - (set of dangerous commands) */
+ install_element (RESTRICTED_NODE, &show_ip_bgp_route_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_route_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_rd_route_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_prefix_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_prefix_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_all_prefix_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_rd_prefix_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_view_route_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_view_prefix_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_community_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_community2_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_community3_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_community4_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_community_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_community2_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_community3_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_community4_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_community_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_community2_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_community3_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_community4_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_community_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_community2_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_community3_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_community4_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_rsclient_route_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_rsclient_prefix_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_view_rsclient_route_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_view_rsclient_prefix_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_ipv4_cmd);
install_element (VIEW_NODE, &show_bgp_view_rsclient_cmd);
install_element (VIEW_NODE, &show_bgp_view_rsclient_route_cmd);
install_element (VIEW_NODE, &show_bgp_view_rsclient_prefix_cmd);
+
+ /* Restricted:
+ * VIEW_NODE - (set of dangerous commands) - (commands dependent on prev)
+ */
+ install_element (RESTRICTED_NODE, &show_bgp_route_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_ipv6_route_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_prefix_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_ipv6_prefix_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_community_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_ipv6_community_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_community2_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_ipv6_community2_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_community3_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_ipv6_community3_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_community4_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_ipv6_community4_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_community_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_ipv6_community_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_community2_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_ipv6_community2_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_community3_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_ipv6_community3_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_community4_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_ipv6_community4_exact_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_rsclient_route_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_rsclient_prefix_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_view_route_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_view_ipv6_route_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_view_prefix_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_view_ipv6_prefix_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_view_neighbor_received_prefix_filter_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_view_ipv6_neighbor_received_prefix_filter_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_view_rsclient_route_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_view_rsclient_prefix_cmd);
install_element (ENABLE_NODE, &show_bgp_cmd);
install_element (ENABLE_NODE, &show_bgp_ipv6_cmd);
install_element (VIEW_NODE, &show_bgp_instance_summary_cmd);
install_element (VIEW_NODE, &show_bgp_ipv6_summary_cmd);
install_element (VIEW_NODE, &show_bgp_instance_ipv6_summary_cmd);
+#endif /* HAVE_IPV6 */
+ install_element (RESTRICTED_NODE, &show_ip_bgp_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_instance_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_instance_ipv4_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_all_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_rd_summary_cmd);
+#ifdef HAVE_IPV6
+ install_element (RESTRICTED_NODE, &show_bgp_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_instance_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_ipv6_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_instance_ipv6_summary_cmd);
#endif /* HAVE_IPV6 */
install_element (ENABLE_NODE, &show_ip_bgp_summary_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_instance_summary_cmd);
install_element (VIEW_NODE, &show_ip_bgp_vpnv4_rd_neighbors_peer_cmd);
install_element (VIEW_NODE, &show_ip_bgp_instance_neighbors_cmd);
install_element (VIEW_NODE, &show_ip_bgp_instance_neighbors_peer_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_neighbors_peer_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_neighbors_peer_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_all_neighbors_peer_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_vpnv4_rd_neighbors_peer_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_instance_neighbors_peer_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_neighbors_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbors_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_neighbors_peer_cmd);
install_element (VIEW_NODE, &show_bgp_instance_ipv6_neighbors_cmd);
install_element (VIEW_NODE, &show_bgp_instance_neighbors_peer_cmd);
install_element (VIEW_NODE, &show_bgp_instance_ipv6_neighbors_peer_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_neighbors_peer_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_ipv6_neighbors_peer_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_instance_neighbors_peer_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_instance_ipv6_neighbors_peer_cmd);
install_element (ENABLE_NODE, &show_bgp_neighbors_cmd);
install_element (ENABLE_NODE, &show_bgp_ipv6_neighbors_cmd);
install_element (ENABLE_NODE, &show_bgp_neighbors_peer_cmd);
install_element (VIEW_NODE, &show_ip_bgp_instance_rsclient_summary_cmd);
install_element (VIEW_NODE, &show_ip_bgp_ipv4_rsclient_summary_cmd);
install_element (VIEW_NODE, &show_ip_bgp_instance_ipv4_rsclient_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_rsclient_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_instance_rsclient_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_ipv4_rsclient_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_ip_bgp_instance_ipv4_rsclient_summary_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_rsclient_summary_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_instance_rsclient_summary_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_ipv4_rsclient_summary_cmd);
install_element (VIEW_NODE, &show_bgp_ipv6_rsclient_summary_cmd);
install_element (VIEW_NODE, &show_bgp_instance_rsclient_summary_cmd);
install_element (VIEW_NODE, &show_bgp_instance_ipv6_rsclient_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_rsclient_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_ipv6_rsclient_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_instance_rsclient_summary_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_instance_ipv6_rsclient_summary_cmd);
install_element (ENABLE_NODE, &show_bgp_rsclient_summary_cmd);
install_element (ENABLE_NODE, &show_bgp_ipv6_rsclient_summary_cmd);
install_element (ENABLE_NODE, &show_bgp_instance_rsclient_summary_cmd);
/* "show bgp memory" commands. */
install_element (VIEW_NODE, &show_bgp_memory_cmd);
+ install_element (RESTRICTED_NODE, &show_bgp_memory_cmd);
install_element (ENABLE_NODE, &show_bgp_memory_cmd);
/* Community-list. */
"%s> ",
};
+struct cmd_node restricted_node =
+{
+ RESTRICTED_NODE,
+ "%s$ ",
+};
+
struct cmd_node auth_enable_node =
{
AUTH_ENABLE_NODE,
node != VIEW_NODE &&
node != AUTH_ENABLE_NODE &&
node != ENABLE_NODE &&
+ node != RESTRICTED_NODE &&
0 == strcmp( "do", first_word ) )
return 1;
return 0;
{
case VIEW_NODE:
case ENABLE_NODE:
+ case RESTRICTED_NODE:
if (vty_shell (vty))
exit (0);
else
{
case VIEW_NODE:
case ENABLE_NODE:
+ case RESTRICTED_NODE:
/* Nothing to do. */
break;
case CONFIG_NODE:
install_node (&enable_node, NULL);
install_node (&auth_node, NULL);
install_node (&auth_enable_node, NULL);
+ install_node (&restricted_node, NULL);
install_node (&config_node, config_write_host);
/* Each node's basic commands. */
install_element (VIEW_NODE, &config_terminal_no_length_cmd);
install_element (VIEW_NODE, &show_logging_cmd);
install_element (VIEW_NODE, &echo_cmd);
+
+ install_element (RESTRICTED_NODE, &config_list_cmd);
+ install_element (RESTRICTED_NODE, &config_exit_cmd);
+ install_element (RESTRICTED_NODE, &config_quit_cmd);
+ install_element (RESTRICTED_NODE, &config_help_cmd);
+ install_element (RESTRICTED_NODE, &config_enable_cmd);
+ install_element (RESTRICTED_NODE, &config_terminal_length_cmd);
+ install_element (RESTRICTED_NODE, &config_terminal_no_length_cmd);
+ install_element (RESTRICTED_NODE, &echo_cmd);
}
if (terminal)
install_element (VIEW_NODE, &show_thread_cpu_cmd);
install_element (ENABLE_NODE, &show_thread_cpu_cmd);
+ install_element (RESTRICTED_NODE, &show_thread_cpu_cmd);
install_element (VIEW_NODE, &show_work_queues_cmd);
install_element (ENABLE_NODE, &show_work_queues_cmd);
}
enum node_type
{
AUTH_NODE, /* Authentication mode of vty interface. */
+ RESTRICTED_NODE, /* Restricted view mode */
VIEW_NODE, /* View node. Default mode of vty interface. */
AUTH_ENABLE_NODE, /* Authentication mode for change enable. */
ENABLE_NODE, /* Enable node. */
DUMP_NODE, /* Packet dump node. */
FORWARDING_NODE, /* IP forwarding node. */
PROTOCOL_NODE, /* protocol filtering node */
- VTY_NODE /* Vty node. */
+ VTY_NODE, /* Vty node. */
};
/* Node which has some commands and prompt string and configuration
void
memory_init (void)
{
+ install_element (RESTRICTED_NODE, &show_memory_cmd);
+ install_element (RESTRICTED_NODE, &show_memory_all_cmd);
+ install_element (RESTRICTED_NODE, &show_memory_lib_cmd);
+ install_element (RESTRICTED_NODE, &show_memory_rip_cmd);
+ install_element (RESTRICTED_NODE, &show_memory_ripng_cmd);
+ install_element (RESTRICTED_NODE, &show_memory_bgp_cmd);
+ install_element (RESTRICTED_NODE, &show_memory_ospf_cmd);
+ install_element (RESTRICTED_NODE, &show_memory_ospf6_cmd);
+ install_element (RESTRICTED_NODE, &show_memory_isis_cmd);
+
install_element (VIEW_NODE, &show_memory_cmd);
install_element (VIEW_NODE, &show_memory_all_cmd);
install_element (VIEW_NODE, &show_memory_lib_cmd);
/* Login password check. */
static int no_password_check = 0;
+/* Restrict unauthenticated logins? */
+static const u_char restricted_mode_default = 0;
+static u_char restricted_mode = 0;
+
/* Integrated configuration file path */
char integrate_default[] = SYSCONFDIR INTEGRATE_DEFAULT_CONFIG;
/* AUTH_ENABLE_NODE */
vty->fail = 0;
vty_out (vty, "%% Bad enable passwords, too many failures!%s", VTY_NEWLINE);
- vty->node = VIEW_NODE;
+ vty->node = restricted_mode ? RESTRICTED_NODE : VIEW_NODE;
}
}
}
{
case VIEW_NODE:
case ENABLE_NODE:
+ case RESTRICTED_NODE:
/* Nothing to do. */
break;
case CONFIG_NODE:
{
case VIEW_NODE:
case ENABLE_NODE:
+ case RESTRICTED_NODE:
/* Nothing to do. */
break;
case CONFIG_NODE:
vty->address = sockunion_su2str (su);
if (no_password_check)
{
- if (host.advanced)
+ if (restricted_mode)
+ vty->node = RESTRICTED_NODE;
+ else if (host.advanced)
vty->node = ENABLE_NODE;
else
vty->node = VIEW_NODE;
return CMD_SUCCESS;
}
+/* initial mode. */
+DEFUN (vty_restricted_mode,
+ vty_restricted_mode_cmd,
+ "anonymous restricted",
+ "Restrict view commands available in anonymous, unauthenticated vty\n")
+{
+ restricted_mode = 1;
+ return CMD_SUCCESS;
+}
+
+DEFUN (vty_no_restricted_mode,
+ vty_no_restricted_mode_cmd,
+ "no anonymous restricted",
+ NO_STR
+ "Enable password checking\n")
+{
+ restricted_mode = 0;
+ return CMD_SUCCESS;
+}
+
DEFUN (service_advanced_vty,
service_advanced_vty_cmd,
"service advanced-vty",
/* login */
if (no_password_check)
vty_out (vty, " no login%s", VTY_NEWLINE);
-
+
+ if (restricted_mode != restricted_mode_default)
+ {
+ if (restricted_mode_default)
+ vty_out (vty, " no anonymous restricted%s", VTY_NEWLINE);
+ else
+ vty_out (vty, " anonymous restricted%s", VTY_NEWLINE);
+ }
+
vty_out (vty, "!%s", VTY_NEWLINE);
return CMD_SUCCESS;
/* Install bgp top node. */
install_node (&vty_node, vty_config_write);
+ install_element (RESTRICTED_NODE, &config_who_cmd);
+ install_element (RESTRICTED_NODE, &show_history_cmd);
install_element (VIEW_NODE, &config_who_cmd);
install_element (VIEW_NODE, &show_history_cmd);
install_element (ENABLE_NODE, &config_who_cmd);
install_element (VTY_NODE, &no_vty_access_class_cmd);
install_element (VTY_NODE, &vty_login_cmd);
install_element (VTY_NODE, &no_vty_login_cmd);
+ install_element (VTY_NODE, &vty_restricted_mode_cmd);
+ install_element (VTY_NODE, &vty_no_restricted_mode_cmd);
#ifdef HAVE_IPV6
install_element (VTY_NODE, &vty_ipv6_access_class_cmd);
install_element (VTY_NODE, &no_vty_ipv6_access_class_cmd);