0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 09:41:54 +00:00

Merge commit '08ff0af8' into thread-merge-2.16

This commit is contained in:
Maria Matejka 2024-11-28 12:07:30 +01:00
commit eba3a26537
6 changed files with 28 additions and 11 deletions

View File

@ -105,7 +105,6 @@ CF_DECLS
struct adata *ad; struct adata *ad;
const struct adata *bs; const struct adata *bs;
struct aggr_item_node *ai; struct aggr_item_node *ai;
struct cli_config *cli;
} }
%token END CLI_MARKER INVALID_TOKEN ELSECOL DDOT %token END CLI_MARKER INVALID_TOKEN ELSECOL DDOT

View File

@ -1298,6 +1298,11 @@ socket multiple times and BIRD may behave weirdly if this happens. On shutdown,
the additional sockets get removed immediately and only the main socket stays the additional sockets get removed immediately and only the main socket stays
until the very end. until the very end.
<p>The remote control socket can be also set as restricted by
<cf/cli "name" { restrict; };/ instead of sending the <cf/restrict/ command
after connecting. The user may still overload the daemon by requesting insanely
complex filters so you shouldn't expose this socket to public anyway.
<sect>Usage <sect>Usage
<label id="remote-control-usage"> <label id="remote-control-usage">

View File

@ -272,7 +272,7 @@ cli_event(void *data)
} }
cli * cli *
cli_new(struct birdsock *sock) cli_new(struct birdsock *sock, struct cli_config *cf)
{ {
pool *p = rp_new(cli_pool, the_bird_domain.the_bird, "CLI"); pool *p = rp_new(cli_pool, the_bird_domain.the_bird, "CLI");
cli *c = mb_alloc(p, sizeof(cli)); cli *c = mb_alloc(p, sizeof(cli));
@ -286,6 +286,10 @@ cli_new(struct birdsock *sock)
c->cont = cli_hello; c->cont = cli_hello;
c->parser_pool = lp_new_default(c->pool); c->parser_pool = lp_new_default(c->pool);
c->rx_buf = mb_alloc(c->pool, CLI_RX_BUF_SIZE); c->rx_buf = mb_alloc(c->pool, CLI_RX_BUF_SIZE);
if (cf->restricted)
c->restricted = 1;
ev_schedule(c->event); ev_schedule(c->event);
return c; return c;
} }

View File

@ -58,6 +58,7 @@ struct cli_config {
const char *name; const char *name;
struct config *config; struct config *config;
uint uid, gid, mode; uint uid, gid, mode;
_Bool restricted;
}; };
#include "lib/tlists.h" #include "lib/tlists.h"
@ -78,7 +79,7 @@ static inline void cli_separator(cli *c)
/* Functions provided to sysdep layer */ /* Functions provided to sysdep layer */
cli *cli_new(struct birdsock *); cli *cli_new(struct birdsock *, struct cli_config *);
void cli_init(void); void cli_init(void);
void cli_free(cli *); void cli_free(cli *);
void cli_kick(cli *); void cli_kick(cli *);

View File

@ -14,6 +14,7 @@ CF_HDR
CF_DEFINES CF_DEFINES
static struct log_config *this_log; static struct log_config *this_log;
static struct cli_config *this_cli_config;
CF_DECLS CF_DECLS
@ -22,7 +23,6 @@ CF_KEYWORDS(NAME, CONFIRM, UNDO, CHECK, TIMEOUT, DEBUG, LATENCY, LIMIT, WATCHDOG
CF_KEYWORDS(PING, WAKEUP, SOCKETS, SCHEDULING, EVENTS, TIMERS, ALLOCATOR) CF_KEYWORDS(PING, WAKEUP, SOCKETS, SCHEDULING, EVENTS, TIMERS, ALLOCATOR)
CF_KEYWORDS(GRACEFUL, RESTART, FIXED) CF_KEYWORDS(GRACEFUL, RESTART, FIXED)
%type <cli> cli_opts
%type <i> log_mask log_mask_list log_cat cfg_timeout debug_unix latency_debug_mask latency_debug_flag latency_debug_list %type <i> log_mask log_mask_list log_cat cfg_timeout debug_unix latency_debug_mask latency_debug_flag latency_debug_list
%type <t> cfg_name %type <t> cfg_name
%type <tf> timeformat_which %type <tf> timeformat_which
@ -126,18 +126,26 @@ mrtdump_base:
conf: cli ; conf: cli ;
cli: CLI text cli_opts { cli: CLI text cli_opts {
$3->name = $2; this_cli_config->name = $2;
cli_config_add_tail(&new_config->cli, $3); cli_config_add_tail(&new_config->cli, this_cli_config);
this_cli_config = NULL;
} ; } ;
cli_opts: ';' { cli_opts: cli_opts_begin '{' cli_opts_block '}' ';' | cli_opts_begin ';' ;
$$ = cfg_alloc(sizeof *$$);
*$$ = (typeof (*$$)) { cli_opts_begin: {
this_cli_config = cfg_alloc(sizeof *this_cli_config);
*this_cli_config = (typeof (*this_cli_config)) {
.config = new_config, .config = new_config,
.mode = 0660, .mode = 0660,
}; };
}; };
cli_opts_block:
/* EMPTY */ |
cli_opts_block RESTRICT { this_cli_config->restricted = 1; }
;
conf: THREADS expr { conf: THREADS expr {
if ($2 < 1) cf_error("Number of threads must be at least one."); if ($2 < 1) cf_error("Number of threads must be at least one.");
new_config->thread_count = $2; new_config->thread_count = $2;

View File

@ -550,7 +550,7 @@ cli_connect(sock *s, uint size UNUSED)
s->rx_hook = cli_rx; s->rx_hook = cli_rx;
s->tx_hook = cli_tx; s->tx_hook = cli_tx;
s->err_hook = cli_err; s->err_hook = cli_err;
s->data = c = cli_new(s); s->data = c = cli_new(s, ((struct cli_listener *) s->data)->config);
s->pool = c->pool; /* We need to have all the socket buffers allocated in the cli pool */ s->pool = c->pool; /* We need to have all the socket buffers allocated in the cli pool */
s->fast_rx = 1; s->fast_rx = 1;
c->rx_pos = c->rx_buf; c->rx_pos = c->rx_buf;
@ -567,7 +567,7 @@ cli_listen(struct cli_config *cf)
s->type = SK_UNIX_PASSIVE; s->type = SK_UNIX_PASSIVE;
s->rx_hook = cli_connect; s->rx_hook = cli_connect;
s->err_hook = cli_connect_err; s->err_hook = cli_connect_err;
s->data = cf; s->data = l;
s->rbsize = 1024; s->rbsize = 1024;
s->fast_rx = 1; s->fast_rx = 1;