Matthew Grant <grantma@anathoth.gen.nz>
[zebra 17290] [PATCHES] - Fixes for problems in 0.93b

portfix patch
diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c
index 7fc68fa..7037791 100644
--- a/bgpd/bgp_main.c
+++ b/bgpd/bgp_main.c
@@ -113,7 +113,7 @@
   vty_read_config (config_file, config_current, config_default);
 
   /* Create VTY's socket */
-  vty_serv_sock (vty_addr, vty_port ? vty_port : BGP_VTY_PORT, BGP_VTYSH_PATH);
+  vty_serv_sock (vty_addr, vty_port, BGP_VTYSH_PATH);
 
   /* Try to return to normal operation. */
 }
@@ -222,7 +222,15 @@
 	  vty_addr = optarg;
 	  break;
 	case 'P':
-	  vty_port = atoi (optarg);
+          /* Deal with atoi() returning 0 on failure, and bgpd not
+             listening on bgp port... */
+          if (strcmp(optarg, "0") == 0) 
+            {
+              vty_port = 0;
+              break;
+            } 
+          vty_port = atoi (optarg);
+          vty_port = (vty_port ? vty_port : BGP_VTY_PORT);
 	  break;
 	case 'r':
 	  retain_mode = 1;
diff --git a/ospf6d/ospf6_main.c b/ospf6d/ospf6_main.c
index 5ab517f..3f3d550 100644
--- a/ospf6d/ospf6_main.c
+++ b/ospf6d/ospf6_main.c
@@ -206,7 +206,7 @@
   char *p;
   int opt;
   char *vty_addr = NULL;
-  int vty_port = 0;
+  int vty_port = OSPF6_VTY_PORT;
   char *config_file = NULL;
   char *progname;
   struct thread thread;
@@ -253,8 +253,16 @@
           pid_file = optarg;
           break;
         case 'P':
+         /* Deal with atoi() returning 0 on failure, and ospf6d not
+             listening on ospf6d port... */
+          if (strcmp(optarg, "0") == 0) 
+            {
+              vty_port = 0;
+              break;
+            } 
           vty_port = atoi (optarg);
-          break;
+          vty_port = (vty_port ? vty_port : OSPF6_VTY_PORT);
+	  break;
         case 'v':
           print_version (progname);
           exit (0);
@@ -305,8 +313,7 @@
   thread_add_read (master, ospf6_receive, NULL, ospf6_sock);
 
   /* Make ospf vty socket. */
-  vty_serv_sock (vty_addr,
-		 vty_port ? vty_port : OSPF6_VTY_PORT, OSPF6_VTYSH_PATH);
+  vty_serv_sock (vty_addr, vty_port, OSPF6_VTYSH_PATH);
 
   /* Print start message */
   zlog_notice ("OSPF6d (Zebra-%s ospf6d-%s) starts",
diff --git a/ospfd/ospf_main.c b/ospfd/ospf_main.c
index 82960b2..6f6262a 100644
--- a/ospfd/ospf_main.c
+++ b/ospfd/ospf_main.c
@@ -170,7 +170,7 @@
 {
   char *p;
   char *vty_addr = NULL;
-  int vty_port = 0;
+  int vty_port = OSPF_VTY_PORT;
   int daemon_mode = 0;
   char *config_file = NULL;
   char *progname;
@@ -219,8 +219,16 @@
           pid_file = optarg;
           break;
 	case 'P':
-	  vty_port = atoi (optarg);
-	  break;
+          /* Deal with atoi() returning 0 on failure, and ospfd not
+             listening on ospfd port... */
+          if (strcmp(optarg, "0") == 0) 
+            {
+              vty_port = 0;
+              break;
+            } 
+          vty_port = atoi (optarg);
+          vty_port = (vty_port ? vty_port : OSPF_VTY_PORT);
+  	  break;
 	case 'v':
 	  print_version (progname);
 	  exit (0);
@@ -277,8 +285,7 @@
   pid_output (pid_file);
 
   /* Create VTY socket */
-  vty_serv_sock (vty_addr,
-		 vty_port ? vty_port : OSPF_VTY_PORT, OSPF_VTYSH_PATH);
+  vty_serv_sock (vty_addr, vty_port, OSPF_VTYSH_PATH);
 
   /* Print banner. */
   zlog (NULL, LOG_INFO, "OSPFd (%s) starts", ZEBRA_VERSION);
diff --git a/ripd/rip_main.c b/ripd/rip_main.c
index 1070fb4..5e56052 100644
--- a/ripd/rip_main.c
+++ b/ripd/rip_main.c
@@ -211,7 +211,15 @@
           pid_file = optarg;
           break;
 	case 'P':
-	  vty_port = atoi (optarg);
+          /* Deal with atoi() returning 0 on failure, and ripd not
+             listening on rip port... */
+          if (strcmp(optarg, "0") == 0) 
+            {
+              vty_port = 0;
+              break;
+            } 
+          vty_port = atoi (optarg);
+          vty_port = (vty_port ? vty_port : RIP_VTY_PORT);
 	  break;
 	case 'r':
 	  retain_mode = 1;
diff --git a/ripngd/ripng_main.c b/ripngd/ripng_main.c
index aec74bb..3a7ed4a 100644
--- a/ripngd/ripng_main.c
+++ b/ripngd/ripng_main.c
@@ -155,7 +155,7 @@
 {
   char *p;
   char *vty_addr = NULL;
-  int vty_port = 0;
+  int vty_port = RIPNG_VTY_PORT;
   int daemon_mode = 0;
   char *config_file = NULL;
   char *progname;
@@ -197,10 +197,18 @@
 	  break;
         case 'i':
           pid_file = optarg;
-          break;
+          break; 
 	case 'P':
-	  vty_port = atoi (optarg);
-	  break;
+          /* Deal with atoi() returning 0 on failure, and ripngd not
+             listening on ripngd port... */
+          if (strcmp(optarg, "0") == 0) 
+            {
+              vty_port = 0;
+              break;
+            } 
+          vty_port = atoi (optarg);
+          vty_port = (vty_port ? vty_port : RIPNG_VTY_PORT);
+          break;
 	case 'r':
 	  retain_mode = 1;
 	  break;
@@ -237,8 +245,7 @@
     daemon (0, 0);
 
   /* Create VTY socket */
-  vty_serv_sock (vty_addr,
-		 vty_port ? vty_port : RIPNG_VTY_PORT, RIPNG_VTYSH_PATH);
+  vty_serv_sock (vty_addr, vty_port, RIPNG_VTYSH_PATH);
 
   /* Process id file create. */
   pid_output (pid_file);
diff --git a/zebra/main.c b/zebra/main.c
index 25d8b6d..66469a2 100644
--- a/zebra/main.c
+++ b/zebra/main.c
@@ -174,7 +174,7 @@
 {
   char *p;
   char *vty_addr = NULL;
-  int vty_port = 0;
+  int vty_port = ZEBRA_VTY_PORT;
   int batch_mode = 0;
   int daemon_mode = 0;
   char *config_file = NULL;
@@ -226,7 +226,15 @@
           pid_file = optarg;
           break;
 	case 'P':
+	  /* Deal with atoi() returning 0 on failure, and zebra not
+	     listening on zebra port... */
+	  if (strcmp(optarg, "0") == 0) 
+	    {
+	      vty_port = 0;
+	      break;
+	    } 
 	  vty_port = atoi (optarg);
+	  vty_port = (vty_port ? vty_port : ZEBRA_VTY_PORT);
 	  break;
 	case 'r':
 	  retain_mode = 1;
@@ -305,8 +313,7 @@
   pid = getpid ();
 
   /* Make vty server socket. */
-  vty_serv_sock (vty_addr,
-		 vty_port ? vty_port : ZEBRA_VTY_PORT, ZEBRA_VTYSH_PATH);
+  vty_serv_sock (vty_addr, vty_port, ZEBRA_VTYSH_PATH);
 
   while (thread_fetch (master, &thread))
     thread_call (&thread);