doc, vtysh: Fixup of history handling

This fix does two things:

1) If the ${HOME}/.history_quagga file does not exist, create it
for history storing.
2) Allow vtysh -c "..." commands to be stored in history file
as well

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2016-01-13 10:49:50 -08:00
parent d4573a1274
commit fba55c8ac3
4 changed files with 46 additions and 3 deletions

View File

@ -76,6 +76,9 @@ config file.
.BI /etc/quagga/Quagga.conf .BI /etc/quagga/Quagga.conf
The default location of the integrated Quagga routing engine config file The default location of the integrated Quagga routing engine config file
if integrated config file is in use (not default). if integrated config file is in use (not default).
.TP
.BI ${HOME}/.history_quagga
Location of history of commands entered via cli
.SH WARNING .SH WARNING
This man page is intended to be a quick reference for command line This man page is intended to be a quick reference for command line
options. The definitive document is the Info file \fBQuagga\fR. options. The definitive document is the Info file \fBQuagga\fR.

View File

@ -232,6 +232,7 @@ main (int argc, char **argv, char **env)
int echo_command = 0; int echo_command = 0;
int no_error = 0; int no_error = 0;
int markfile = 0; int markfile = 0;
char *homedir = NULL;
/* Preserve name of myself. */ /* Preserve name of myself. */
progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]); progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);
@ -360,6 +361,27 @@ main (int argc, char **argv, char **env)
exit(0); exit(0);
} }
/*
* Setup history file for use by both -c and regular input
* If we can't find the home directory, then don't store
* the history information
*/
homedir = vtysh_get_home ();
if (homedir)
{
snprintf(history_file, sizeof(history_file), "%s/.history_quagga", homedir);
if (read_history (history_file) != 0)
{
int fp;
fp = open (history_file, O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
if (fp)
close (fp);
read_history (history_file);
}
}
/* If eval mode. */ /* If eval mode. */
if (cmd) if (cmd)
{ {
@ -375,6 +397,9 @@ main (int argc, char **argv, char **env)
{ {
*eol = '\0'; *eol = '\0';
add_history (cmd->line);
append_history (1, history_file);
if (echo_command) if (echo_command)
printf("%s%s\n", vtysh_prompt(), cmd->line); printf("%s%s\n", vtysh_prompt(), cmd->line);
@ -391,6 +416,9 @@ main (int argc, char **argv, char **env)
cmd->line = eol+1; cmd->line = eol+1;
} }
add_history (cmd->line);
append_history (1, history_file);
if (echo_command) if (echo_command)
printf("%s%s\n", vtysh_prompt(), cmd->line); printf("%s%s\n", vtysh_prompt(), cmd->line);
@ -411,6 +439,8 @@ main (int argc, char **argv, char **env)
XFREE(0, cr); XFREE(0, cr);
} }
} }
history_truncate_file(history_file,1000);
exit (0); exit (0);
} }
@ -440,8 +470,6 @@ main (int argc, char **argv, char **env)
sigsetjmp (jmpbuf, 1); sigsetjmp (jmpbuf, 1);
jmpflag = 1; jmpflag = 1;
snprintf(history_file, sizeof(history_file), "%s/.history_quagga", getenv("HOME"));
read_history(history_file);
/* Main command loop. */ /* Main command loop. */
while (vtysh_rl_gets ()) while (vtysh_rl_gets ())
vtysh_execute (line_read); vtysh_execute (line_read);

View File

@ -207,8 +207,18 @@ vtysh_auth ()
return 0; return 0;
} }
char *
vtysh_get_home (void)
{
struct passwd *passwd;
passwd = getpwuid (getuid ());
return passwd ? passwd->pw_dir : NULL;
}
void void
vtysh_user_init () vtysh_user_init (void)
{ {
userlist = list_new (); userlist = list_new ();
install_element (CONFIG_NODE, &username_nopassword_cmd); install_element (CONFIG_NODE, &username_nopassword_cmd);

View File

@ -25,4 +25,6 @@
int vtysh_auth (); int vtysh_auth ();
void user_config_write(void); void user_config_write(void);
char *vtysh_get_home (void);
#endif /* _VTYSH_USER_H */ #endif /* _VTYSH_USER_H */