diff options
Diffstat (limited to 'src/conf_parser.y')
-rw-r--r-- | src/conf_parser.y | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/conf_parser.y b/src/conf_parser.y index 4aeec9f..d247062 100644 --- a/src/conf_parser.y +++ b/src/conf_parser.y @@ -47,6 +47,7 @@ #include "resv.h" #include "numeric.h" #include "s_user.h" +#include "motd.h" #ifdef HAVE_LIBCRYPTO #include <openssl/rsa.h> @@ -231,6 +232,7 @@ reset_block_state(void) %token MIN_NONWILDCARD_SIMPLE %token MODULE %token MODULES +%token MOTD %token NAME %token NEED_IDENT %token NEED_PASSWORD @@ -385,6 +387,7 @@ conf_item: admin_entry | general_entry | gecos_entry | modules_entry + | motd_entry | error ';' | error '}' ; @@ -872,6 +875,42 @@ admin_description: DESCRIPTION '=' QSTRING ';' }; /*************************************************************************** + * motd section + ***************************************************************************/ +motd_entry: MOTD +{ + if (conf_parser_ctx.pass == 2) + reset_block_state(); +} '{' motd_items '}' ';' +{ + dlink_node *ptr = NULL; + + if (conf_parser_ctx.pass != 2) + break; + + if (!block_state.file.buf[0]) + break; + + DLINK_FOREACH(ptr, block_state.mask.list.head) + motd_add(ptr->data, block_state.file.buf); +}; + +motd_items: motd_items motd_item | motd_item; +motd_item: motd_mask | motd_file | error ';' ; + +motd_mask: MASK '=' QSTRING ';' +{ + if (conf_parser_ctx.pass == 2) + dlinkAdd(xstrdup(yylval.string), make_dlink_node(), &block_state.mask.list); +}; + +motd_file: T_FILE '=' QSTRING ';' +{ + if (conf_parser_ctx.pass == 2) + strlcpy(block_state.file.buf, yylval.string, sizeof(block_state.file.buf)); +}; + +/*************************************************************************** * section logging ***************************************************************************/ logging_entry: T_LOG '{' logging_items '}' ';' ; |