]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Main: Add local option
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Thu, 7 Apr 2016 10:20:45 +0000 (12:20 +0200)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Thu, 7 Apr 2016 10:39:49 +0000 (12:39 +0200)
Add option that changes default paths for config file and control socket
to the current working directory.

client/client.c
doc/bird.sgml
lib/string.h
sysdep/unix/main.c

index b938f344361f70cea21579ba6968b4453cf5f066..4075b9e6aa0f38ccea9a97fdc8ea5d39d764f9d2 100644 (file)
@@ -37,7 +37,7 @@
 
 #define SERVER_READ_BUF_LEN 4096
 
-static char *opt_list = "s:vr";
+static char *opt_list = "s:vrl";
 static int verbose, restricted, once;
 static char *init_cmd;
 
@@ -59,13 +59,14 @@ int term_lns, term_cls;
 static void
 usage(char *name)
 {
-  fprintf(stderr, "Usage: %s [-s <control-socket>] [-v] [-r]\n", name);
+  fprintf(stderr, "Usage: %s [-s <control-socket>] [-v] [-r] [-l]\n", name);
   exit(1);
 }
 
 static void
 parse_args(int argc, char **argv)
 {
+  int server_changed = 0;
   int c;
 
   while ((c = getopt(argc, argv, opt_list)) >= 0)
@@ -73,6 +74,7 @@ parse_args(int argc, char **argv)
       {
       case 's':
        server_path = optarg;
+       server_changed = 1;
        break;
       case 'v':
        verbose++;
@@ -80,6 +82,10 @@ parse_args(int argc, char **argv)
       case 'r':
        restricted = 1;
        break;
+      case 'l':
+       if (!server_changed)
+         server_path = xbasename(server_path);
+       break;
       default:
        usage(argv[0]);
       }
index 5e5aeee496754ade5a77615e825f14990ab08bfd..5e943d7c027989c623484adac211306d4ae36fbd 100644 (file)
@@ -171,6 +171,11 @@ BIRD executable by configuring out routing protocols you don't use, and
        <tag>-f</tag>
        run bird in foreground.
 
+       <tag>-l</tag>
+       look for a configuration file and a communication socket in the current
+       working directory instead of in default system paths. However, paths
+       specified by options <cf/-c/, <cf/-s/ have higher priority.
+
        <tag>-R</tag>
        apply graceful restart recovery after start.
 </descrip>
index 218f7b1cf44af26c491a4e13f873b0190d397a0e..0f249d3733663a136e274d9eb657efee23646110 100644 (file)
@@ -24,4 +24,10 @@ void buffer_puts(buffer *buf, const char *str);
 
 int patmatch(const byte *pat, const byte *str);
 
+static inline char *xbasename(const char *str)
+{
+  char *s = strrchr(str, '/');
+  return s ? s+1 : (char *) str;
+}
+
 #endif
index 5d5586a02f2a28c00f7eaf1b07fc92ff300695af..11a4acc6ae01ef99bab4ff318be6f3eaad1d9bea 100644 (file)
@@ -617,7 +617,7 @@ signal_init(void)
  *     Parsing of command-line arguments
  */
 
-static char *opt_list = "c:dD:ps:P:u:g:fR";
+static char *opt_list = "c:dD:ps:P:u:g:flR";
 static int parse_and_exit;
 char *bird_name;
 static char *use_user;
@@ -627,7 +627,7 @@ static int run_in_foreground = 0;
 static void
 usage(void)
 {
-  fprintf(stderr, "Usage: %s [-c <config-file>] [-d] [-D <debug-file>] [-p] [-s <control-socket>] [-P <pid-file>] [-u <user>] [-g <group>] [-f] [-R]\n", bird_name);
+  fprintf(stderr, "Usage: %s [-c <config-file>] [-d] [-D <debug-file>] [-p] [-s <control-socket>] [-P <pid-file>] [-u <user>] [-g <group>] [-f] [-l] [-R]\n", bird_name);
   exit(1);
 }
 
@@ -677,7 +677,7 @@ get_gid(const char *s)
 
   if (!s)
     return 0;
-  
+
   errno = 0;
   rv = strtol(s, &endptr, 10);
 
@@ -694,6 +694,8 @@ get_gid(const char *s)
 static void
 parse_args(int argc, char **argv)
 {
+  int config_changed = 0;
+  int socket_changed = 0;
   int c;
 
   bird_name = get_bird_name(argv[0], "bird");
@@ -712,6 +714,7 @@ parse_args(int argc, char **argv)
       {
       case 'c':
        config_name = optarg;
+       config_changed = 1;
        break;
       case 'd':
        debug_flag |= 1;
@@ -725,6 +728,7 @@ parse_args(int argc, char **argv)
        break;
       case 's':
        path_control_socket = optarg;
+       socket_changed = 1;
        break;
       case 'P':
        pid_file = optarg;
@@ -738,6 +742,12 @@ parse_args(int argc, char **argv)
       case 'f':
        run_in_foreground = 1;
        break;
+      case 'l':
+       if (!config_changed)
+         config_name = xbasename(config_name);
+       if (!socket_changed)
+         path_control_socket = xbasename(path_control_socket);
+       break;
       case 'R':
        graceful_restart_recovery();
        break;