]> git.puffer.fish Git - mirror/frr.git/commitdiff
quagga: vtysh-integrated-fix.patch
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 20 May 2015 01:29:18 +0000 (18:29 -0700)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 20 May 2015 01:29:18 +0000 (18:29 -0700)
Fixup to allow 'no service-integrated-vtysh' to work properly and vice versa
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:

debian/patches/80_vtysh__vtysh.c__privs.diff
lib/vty.c
vtysh/vtysh.c
vtysh/vtysh_config.c
vtysh/vtysh_user.c

index 30b46bf3efa14aa3613b43be5a99cf72620e7074..863c81391f894c61baa32d226f98ba7280280a49 100644 (file)
@@ -1,7 +1,9 @@
 Description: Fixes group permission. (line numbers adjusted for 0.99.22)
 
---- old/vtysh/vtysh.c.orig     2004-10-30 23:16:08.000000000 +0200
-+++ new/vtysh/vtysh.c  2004-10-30 23:16:41.000000000 +0200
+Index: quagga-0.99.23.1/vtysh/vtysh.c
+===================================================================
+--- quagga-0.99.23.1.orig/vtysh/vtysh.c        2015-04-16 07:58:08.000000000 -0700
++++ quagga-0.99.23.1/vtysh/vtysh.c     2015-04-16 08:02:16.108035000 -0700
 @@ -26,6 +26,8 @@
  #include <sys/wait.h>
  #include <sys/resource.h>
@@ -11,35 +13,47 @@ Description: Fixes group permission. (line numbers adjusted for 0.99.22)
  
  #include <readline/readline.h>
  #include <readline/history.h>
-@@ -1786,6 +1794,9 @@
-   FILE *fp;
-   char *integrate_sav = NULL;
+@@ -2026,6 +2028,9 @@
+   char line[] = "write terminal\n";
+   FILE *fp, *fp1;
  
 +  /* Setting file permissions */
 +  struct group *quagga_vty_group;
 +
-   integrate_sav = malloc (strlen (integrate_default) +
-                         strlen (CONF_BACKUP_EXT) + 1);
-   strcpy (integrate_sav, integrate_default);
-@@ -1812,6 +1823,21 @@
-   vtysh_config_dump (fp);
+   fprintf (stdout,"Building Configuration...\n");
+   backup_config_file(integrate_default);
+@@ -2058,16 +2063,31 @@
  
    fclose (fp);
-+      
 +  errno = 0;
-+  if ((quagga_vty_group = getgrnam(VTY_GROUP)) == NULL) 
++  if ((quagga_vty_group = getgrnam(VTY_GROUP)) == NULL)
 +    {
 +      fprintf (stdout, "%% Can't get group %s: %s (%d)\n",
 +        VTY_GROUP, strerror(errno), errno);
 +      return CMD_WARNING;
-+    }    
++    }
 +
 +  if ((chown(integrate_default, -1, quagga_vty_group->gr_gid)) != 0)
 +    {
-+      fprintf (stdout,"%% Can't chown configuration file %s: %s (%d)\n", 
++      fprintf (stdout,"%% Can't chown configuration file %s: %s (%d)\n",
 +      integrate_default, strerror(errno), errno);
 +      return CMD_WARNING;
 +    }
++
    if (chmod (integrate_default, CONFIGFILE_MASK) != 0)
      {
+-      fprintf (stdout,"%% Can't chmod configuration file %s: %s (%d)\n", 
++      fprintf (stdout,"%% Can't chmod configuration file %s: %s (%d)\n",
+              integrate_default, safe_strerror(errno), errno);
+       return CMD_WARNING;
+     }
+  if (chmod (host.config, CONFIGFILE_MASK) != 0)
+     {
+-      fprintf (stdout,"%% Can't chmod configuration file %s: %s (%d)\n", 
++      fprintf (stdout,"%% Can't chmod configuration file %s: %s (%d)\n",
+              integrate_default, safe_strerror(errno), errno);
+       return CMD_WARNING;
+     }
index 41e340131debf02741555d951d88b6e044079a07..c143a681f36fee5965b42ecf892d463bccf63c21 100644 (file)
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -2366,7 +2366,34 @@ vty_read_config (char *config_file,
     }
   else
     {
+      confp = fopen (config_default_dir, "r");
+      if (confp == NULL)
+        {
+          fprintf (stderr, "%s: failed to open configuration file %s: %s\n",
+                   __func__, config_default_dir, safe_strerror (errno));
+          
+          confp = vty_use_backup_config (config_default_dir);
+          if (confp)
+            {
+              fprintf (stderr, "WARNING: using backup configuration file!\n");
+              fullpath = config_default_dir;
+            }
+          else
+            {
+              fprintf (stderr, "can't open configuration file [%s]\n",
+                                config_default_dir);
+                 exit (1);
+            }
+        }      
+      else
+        fullpath = config_default_dir;
+    }
+
+  host_config_set (fullpath);
+
 #ifdef VTYSH
+  if (config_file)
+    {
       int ret;
       struct stat conf_stat;
 
@@ -2388,33 +2415,10 @@ vty_read_config (char *config_file,
         {
           ret = stat (integrate_default, &conf_stat);
           if (ret >= 0)
-            return;
+           return;
         }
-#endif /* VTYSH */
-
-      confp = fopen (config_default_dir, "r");
-      if (confp == NULL)
-        {
-          fprintf (stderr, "%s: failed to open configuration file %s: %s\n",
-                   __func__, config_default_dir, safe_strerror (errno));
-          
-          confp = vty_use_backup_config (config_default_dir);
-          if (confp)
-            {
-              fprintf (stderr, "WARNING: using backup configuration file!\n");
-              fullpath = config_default_dir;
-            }
-          else
-            {
-              fprintf (stderr, "can't open configuration file [%s]\n",
-                                config_default_dir);
-                 exit (1);
-            }
-        }      
-      else
-        fullpath = config_default_dir;
     }
-
+#endif /* VTYSH */
   vty_read_file (confp);
 
   fclose (confp);
index 2967dedcb309c93e81782cbdc4d30928462ce123..b1c9f453b6cc11e773f0bef8b2c46a6882abc9c8 100644 (file)
@@ -2001,26 +2001,34 @@ DEFUN (no_vtysh_integrated_config,
   return CMD_SUCCESS;
 }
 
-static int
-write_config_integrated(void)
+static void
+backup_config_file (const char *fbackup)
 {
-  u_int i;
-  char line[] = "write terminal\n";
-  FILE *fp;
   char *integrate_sav = NULL;
 
-  integrate_sav = malloc (strlen (integrate_default) +
+  integrate_sav = malloc (strlen (fbackup) +
                          strlen (CONF_BACKUP_EXT) + 1);
-  strcpy (integrate_sav, integrate_default);
+  strcpy (integrate_sav, fbackup);
   strcat (integrate_sav, CONF_BACKUP_EXT);
 
-  fprintf (stdout,"Building Configuration...\n");
-
   /* Move current configuration file to backup config file. */
   unlink (integrate_sav);
-  rename (integrate_default, integrate_sav);
+  rename (fbackup, integrate_sav);
   free (integrate_sav);
+}
+
+static int
+write_config_integrated(void)
+{
+  u_int i;
+  char line[] = "write terminal\n";
+  FILE *fp, *fp1;
+
+  fprintf (stdout,"Building Configuration...\n");
+
+  backup_config_file(integrate_default);
+  backup_config_file(host.config);
+
   fp = fopen (integrate_default, "w");
   if (fp == NULL)
     {
@@ -2029,6 +2037,18 @@ write_config_integrated(void)
       return CMD_SUCCESS;
     }
 
+  fp1 = fopen (host.config, "w");
+  if (fp1 == NULL)
+    {
+      fprintf (stdout,"%% Can't open configuration file %s.\n",
+              host.config);
+      return CMD_SUCCESS;
+    }
+
+  vtysh_config_write ();
+  vtysh_config_dump (fp1);
+
+  fclose (fp1);
   for (i = 0; i < array_size(vtysh_client); i++)
     vtysh_client_config (&vtysh_client[i], line);
 
@@ -2040,10 +2060,16 @@ write_config_integrated(void)
   if (chmod (integrate_default, CONFIGFILE_MASK) != 0)
     {
       fprintf (stdout,"%% Can't chmod configuration file %s: %s (%d)\n", 
-       integrate_default, safe_strerror(errno), errno);
+              integrate_default, safe_strerror(errno), errno);
       return CMD_WARNING;
     }
 
+ if (chmod (host.config, CONFIGFILE_MASK) != 0)
+    {
+      fprintf (stdout,"%% Can't chmod configuration file %s: %s (%d)\n", 
+              integrate_default, safe_strerror(errno), errno);
+      return CMD_WARNING;
+    }
   fprintf(stdout,"Integrated configuration saved to %s\n",integrate_default);
 
   fprintf (stdout,"[OK]\n");
@@ -2060,16 +2086,40 @@ DEFUN (vtysh_write_memory,
   int ret = CMD_SUCCESS;
   char line[] = "write memory\n";
   u_int i;
-  
+  FILE *fp;
+
   /* If integrated Quagga.conf explicitely set. */
   if (vtysh_writeconfig_integrated)
     return write_config_integrated();
+  else
+    backup_config_file(integrate_default);
 
   fprintf (stdout,"Building Configuration...\n");
          
   for (i = 0; i < array_size(vtysh_client); i++)
     ret = vtysh_client_execute (&vtysh_client[i], line, stdout);
-  
+
+
+  fp = fopen(host.config, "w");
+  if (fp == NULL)
+    {
+      fprintf (stdout,"%% Can't open configuration file %s.\n",
+              host.config);
+      return CMD_SUCCESS;
+    }
+
+  vtysh_config_write ();
+  vtysh_config_dump (fp);
+
+  fclose (fp);
+
+  if (chmod (host.config, CONFIGFILE_MASK) != 0)
+    {
+      fprintf (stdout,"%% Can't chmod configuration file %s: %s (%d)\n", 
+              integrate_default, safe_strerror(errno), errno);
+      return CMD_WARNING;
+    }
+
   fprintf (stdout,"[OK]\n");
 
   return ret;
index e16b885480444d685c47c17e337670cecd2c5ecf..e7da30ff32c439c888fe41fbb564a66bf20c495f 100644 (file)
@@ -437,6 +437,8 @@ vtysh_config_write ()
     }
   if (vtysh_writeconfig_integrated)
     vtysh_config_parse_line ("service integrated-vtysh-config");
+
+  user_config_write ();
 }
 
 void
index e2432dec2c87b3e79813c08222991ebc2e826327..c074169fdb5f0b302e98c139019fdb71e961680e 100644 (file)
@@ -38,6 +38,9 @@
 #include "linklist.h"
 #include "command.h"
 
+extern struct list *config_top;
+extern void config_add_line(struct list *config, const char *line);
+
 /* 
  * Compiler is warning about prototypes not being declared.
  * The DEFUNSH and DEFUN macro's are messing with the
@@ -143,11 +146,15 @@ user_config_write ()
 {
   struct listnode *node, *nnode;
   struct vtysh_user *user;
+  char line[128];
 
   for (ALL_LIST_ELEMENTS (userlist, node, nnode, user))
     {
       if (user->nopassword)
-       printf (" username %s nopassword\n", user->name);
+       {
+         sprintf(line, "username %s nopassword", user->name);
+         config_add_line (config_top, line);
+       }
     }
 }