mirror of https://gerrit.osmocom.org/libosmocore
vty: add bind command for telnet vty line
Add VTY command line vty bind A.B.C.D The command merely stores the configured IP-address, which can then be used by the calling main program to set the telnet port of the VTY line. (Commits in openbsc and osmo-iuh will follow up on this.) Add function vty_get_bind_addr() to publish the address in the vty.h API. Add static vty_bind_addr to store. For allocation/freeing reasons, a NULL address defaults to 127.0.0.1. BTW, I decided against allowing keywords 'any' and 'localhost' in place of an actual IP address to make sure a written config is always identical to the parsed config.
This commit is contained in:
parent
cc00bf8779
commit
96172f0100
|
@ -186,6 +186,9 @@ void *vty_current_index(struct vty *);
|
|||
int vty_current_node(struct vty *vty);
|
||||
int vty_go_parent(struct vty *vty);
|
||||
|
||||
/* Return IP address passed to the 'line vty'/'bind' command, or "127.0.0.1" */
|
||||
const char *vty_get_bind_addr(void);
|
||||
|
||||
extern void *tall_vty_ctx;
|
||||
|
||||
extern struct cmd_element cfg_description_cmd;
|
||||
|
|
|
@ -75,6 +75,12 @@ vector Vvty_serv_thread;
|
|||
|
||||
char *vty_cwd = NULL;
|
||||
|
||||
/* IP address passed to the 'line vty'/'bind' command.
|
||||
* Setting the default as vty_bind_addr = "127.0.0.1" doesn't allow freeing, so
|
||||
* use NULL and VTY_BIND_ADDR_DEFAULT instead. */
|
||||
static const char *vty_bind_addr = NULL;
|
||||
#define VTY_BIND_ADDR_DEFAULT "127.0.0.1"
|
||||
|
||||
/* Configure lock. */
|
||||
static int vty_config;
|
||||
|
||||
|
@ -1585,6 +1591,23 @@ DEFUN(no_vty_login,
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
/* vty bind */
|
||||
DEFUN(vty_bind, vty_bind_cmd, "bind A.B.C.D",
|
||||
"Accept VTY telnet connections on local interface\n"
|
||||
"Local interface IP address (default: " VTY_BIND_ADDR_DEFAULT ")\n")
|
||||
{
|
||||
talloc_free((void*)vty_bind_addr);
|
||||
vty_bind_addr = talloc_strdup(tall_vty_ctx, argv[0]);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
const char *vty_get_bind_addr(void)
|
||||
{
|
||||
if (!vty_bind_addr)
|
||||
return VTY_BIND_ADDR_DEFAULT;
|
||||
return vty_bind_addr;
|
||||
}
|
||||
|
||||
DEFUN(service_advanced_vty,
|
||||
service_advanced_vty_cmd,
|
||||
"service advanced-vty",
|
||||
|
@ -1654,6 +1677,10 @@ static int vty_config_write(struct vty *vty)
|
|||
if (!password_check)
|
||||
vty_out(vty, " no login%s", VTY_NEWLINE);
|
||||
|
||||
/* bind */
|
||||
if (vty_bind_addr && (strcmp(vty_bind_addr, "127.0.0.1") != 0))
|
||||
vty_out(vty, " bind %s%s", vty_bind_addr, VTY_NEWLINE);
|
||||
|
||||
vty_out(vty, "!%s", VTY_NEWLINE);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
|
@ -1757,6 +1784,7 @@ void vty_init(struct vty_app_info *app_info)
|
|||
vty_install_default(VTY_NODE);
|
||||
install_element(VTY_NODE, &vty_login_cmd);
|
||||
install_element(VTY_NODE, &no_vty_login_cmd);
|
||||
install_element(VTY_NODE, &vty_bind_cmd);
|
||||
}
|
||||
|
||||
/*! \brief Read the configuration file using the VTY code
|
||||
|
|
Loading…
Reference in New Issue