]> git.proxmox.com Git - mirror_frr.git/commitdiff
bgpd: restore -S, --skip_runas options
authorLou Berger <lberger@labn.net>
Sun, 2 Apr 2017 19:34:55 +0000 (15:34 -0400)
committerLou Berger <lberger@labn.net>
Tue, 9 May 2017 18:31:07 +0000 (14:31 -0400)
Signed-off-by: Lou Berger <lberger@labn.net>
bgpd/bgp_main.c

index 55bf410628e38be92d10e2c5f36fd4df253affd8..1773070fe3551f3f27d3067caec7fc48515d89ad 100644 (file)
@@ -66,6 +66,7 @@ static const struct option longopts[] =
   { "listenon",    required_argument, NULL, 'l'},
   { "retain",      no_argument,       NULL, 'r'},
   { "no_kernel",   no_argument,       NULL, 'n'},
+  { "skip_runas",  no_argument,       NULL, 'S'},
   { "ecmp",        required_argument, NULL, 'e'},
   { 0 }
 };
@@ -151,7 +152,8 @@ sigint (void)
   if (! retain_mode)
     {
       bgp_terminate ();
-      zprivs_terminate (&bgpd_privs);
+      if (bgpd_privs.user)      /* NULL if skip_runas flag set */
+        zprivs_terminate (&bgpd_privs);
     }
 
   bgp_exit (0);
@@ -364,6 +366,7 @@ main (int argc, char **argv)
   int bgp_port = BGP_PORT_DEFAULT;
   char *bgp_address = NULL;
   int no_fib_flag = 0;
+  int skip_runas = 0;
 
   frr_preinit(&bgpd_di, argc, argv);
   frr_opt_add("p:l:rne:", longopts,
@@ -371,6 +374,7 @@ main (int argc, char **argv)
        "  -l, --listenon     Listen on specified address (implies -n)\n"
        "  -r, --retain       When program terminates, retain added route by bgpd.\n"
        "  -n, --no_kernel    Do not install route to kernel.\n"
+        "  -S, --skip_runas   Skip capabilities checks, and changing user and group IDs.\n"
        "  -e, --ecmp         Specify ECMP to use.\n");
 
   /* Command line argument treatment. */
@@ -409,11 +413,16 @@ main (int argc, char **argv)
        case 'n':
           no_fib_flag = 1;
          break;
+       case 'S':
+          skip_runas = 1;
+         break;
        default:
          frr_help_exit (1);
          break;
        }
     }
+  if (skip_runas)
+    memset (&bgpd_privs, 0, sizeof (bgpd_privs));
 
   /* BGP master init. */
   bgp_master_init (frr_init ());