quagga: option "-z" ("--socket <path>") added

All daemons modified to support custom path to zserv
socket.

lib: generalize a zclient connection

zclient_socket_connect added. zclient_socket and
zclient_socket_un were hidden under static expression.
"zclient_serv_path_set" modified.
diff --git a/ospfd/ospf_main.c b/ospfd/ospf_main.c
index 8b9a345..bad674b 100644
--- a/ospfd/ospf_main.c
+++ b/ospfd/ospf_main.c
@@ -38,6 +38,7 @@
 #include "memory.h"
 #include "privs.h"
 #include "sigevent.h"
+#include "zclient.h"
 
 #include "ospfd/ospfd.h"
 #include "ospfd/ospf_interface.h"
@@ -80,6 +81,7 @@
   { "daemon",      no_argument,       NULL, 'd'},
   { "config_file", required_argument, NULL, 'f'},
   { "pid_file",    required_argument, NULL, 'i'},
+  { "socket",      required_argument, NULL, 'z'},
   { "dryrun",      no_argument,       NULL, 'C'},
   { "help",        no_argument,       NULL, 'h'},
   { "vty_addr",    required_argument, NULL, 'A'},
@@ -116,6 +118,7 @@
 -d, --daemon       Runs in daemon mode\n\
 -f, --config_file  Set configuration file name\n\
 -i, --pid_file     Set process identifier file name\n\
+-z, --socket       Set path of zebra socket\n\
 -A, --vty_addr     Set vty's bind address\n\
 -P, --vty_port     Set vty's port number\n\
 -u, --user         User to run as\n\
@@ -191,30 +194,11 @@
   /* get program name */
   progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);
 
-  /* Invoked by a priviledged user? -- endo. */
-  if (geteuid () != 0)
-    {
-      errno = EPERM;
-      perror (progname);
-      exit (1);
-    }
-
-  zlog_default = openzlog (progname, ZLOG_OSPF,
-			   LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON);
-
-  /* OSPF master init. */
-  ospf_master_init ();
-
-#ifdef SUPPORT_OSPF_API
-  /* OSPF apiserver is disabled by default. */
-  ospf_apiserver_enable = 0;
-#endif /* SUPPORT_OSPF_API */
-
   while (1) 
     {
       int opt;
 
-      opt = getopt_long (argc, argv, "df:i:hA:P:u:g:avC", longopts, 0);
+      opt = getopt_long (argc, argv, "df:i:z:hA:P:u:g:avC", longopts, 0);
     
       if (opt == EOF)
 	break;
@@ -235,6 +219,9 @@
         case 'i':
           pid_file = optarg;
           break;
+	case 'z':
+	  zclient_serv_path_set (optarg);
+	  break;
 	case 'P':
           /* Deal with atoi() returning 0 on failure, and ospfd not
              listening on ospfd port... */
@@ -274,6 +261,25 @@
 	}
     }
 
+  /* Invoked by a priviledged user? -- endo. */
+  if (geteuid () != 0)
+    {
+      errno = EPERM;
+      perror (progname);
+      exit (1);
+    }
+
+  zlog_default = openzlog (progname, ZLOG_OSPF,
+			   LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON);
+
+  /* OSPF master init. */
+  ospf_master_init ();
+
+#ifdef SUPPORT_OSPF_API
+  /* OSPF apiserver is disabled by default. */
+  ospf_apiserver_enable = 0;
+#endif /* SUPPORT_OSPF_API */
+
   /* Initializations. */
   master = om->master;