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>
#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;
+ }
}
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;
{
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);
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)
{
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);
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");
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;
}
if (vtysh_writeconfig_integrated)
vtysh_config_parse_line ("service integrated-vtysh-config");
+
+ user_config_write ();
}
void
#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
{
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);
+ }
}
}