add support for reading of configuration file to VTY

This commit is contained in:
Harald Welte 2009-08-07 13:28:08 +02:00
parent 07dc73d4f7
commit c7c19822fd
3 changed files with 51 additions and 7 deletions

View File

@ -129,6 +129,7 @@ static inline char *vty_newline(struct vty *vty)
/* Prototypes. */
void vty_init (void);
int vty_read_config_file(const char *file_name);
void vty_init_vtysh (void);
void vty_reset (void);
struct vty *vty_new (void);
@ -136,8 +137,7 @@ struct vty *vty_create (int vty_sock, void *priv);
int vty_out (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3);
int vty_out_newline(struct vty *);
int vty_read(struct vty *vty);
void vty_read_config (char *, char *);
void vty_time_print (struct vty *, int);
//void vty_time_print (struct vty *, int);
void vty_close (struct vty *);
char *vty_get_cwd (void);
void vty_log (const char *level, const char *proto, const char *fmt, va_list);

View File

@ -507,7 +507,6 @@ static char *zencrypt(const char *passwd)
/* This function write configuration of this host. */
static int config_write_host(struct vty *vty)
{
#if 0
if (host.name)
vty_out(vty, "hostname %s%s", host.name, VTY_NEWLINE);
@ -527,6 +526,7 @@ static int config_write_host(struct vty *vty)
VTY_NEWLINE);
}
#if 0
if (zlog_default->default_lvl != LOG_DEBUG) {
vty_out(vty, "! N.B. The 'log trap' command is deprecated.%s",
VTY_NEWLINE);
@ -579,7 +579,7 @@ static int config_write_host(struct vty *vty)
if (zlog_default->record_priority == 1)
vty_out(vty, "log record-priority%s", VTY_NEWLINE);
#endif
if (host.advanced)
vty_out(vty, "service advanced-vty%s", VTY_NEWLINE);
@ -596,7 +596,6 @@ static int config_write_host(struct vty *vty)
else if (!host.motd)
vty_out(vty, "no banner motd%s", VTY_NEWLINE);
#endif
return 1;
}

View File

@ -1373,6 +1373,39 @@ int vty_read(struct vty *vty)
return 0;
}
/* Read up configuration file */
static int
vty_read_file(FILE *confp)
{
int ret;
struct vty *vty;
vty = vty_new();
vty->fd = 0;
vty->type = VTY_FILE;
vty->node = CONFIG_NODE;
ret = config_from_file(vty, confp);
if (ret != CMD_SUCCESS) {
switch (ret) {
case CMD_ERR_AMBIGUOUS:
fprintf(stderr, "Ambiguous command.\n");
break;
case CMD_ERR_NO_MATCH:
fprintf(stderr, "Ther is no such command.\n");
break;
}
fprintf(stderr, "Error occurred during reading below "
"line:\n%s\n", vty->buf);
vty_close(vty);
return -EINVAL;
}
vty_close(vty);
return 0;
}
/* Create new vty structure. */
struct vty *
vty_create (int vty_sock, void *priv)
@ -1648,7 +1681,19 @@ void vty_init()
#endif
}
static __attribute__((constructor)) void on_dso_load_vty(void)
int vty_read_config_file(const char *file_name)
{
tall_vty_ctx = talloc_named_const(NULL, 1, "vty");
FILE *cfile;
int rc;
cfile = fopen(file_name, "r");
if (!cfile)
return -ENOENT;
rc = vty_read_file(cfile);
fclose(cfile);
host_config_set(file_name);
return rc;
}