%token PROGRAM
%token TOK_IPV4 TOK_IPV6
%token DNS
+%token SSL
+%token CERTFILE
+%token KEYFILE
+%token CAFILE
/* and now a lot of privileges... */
%token TPRIV_CHAN_LIMIT TPRIV_MODE_LCHAN TPRIV_DEOP_LCHAN TPRIV_WALK_LCHAN
%token TPRIV_LOCAL_KILL TPRIV_REHASH TPRIV_RESTART TPRIV_DIE
%token TPRIV_GLINE TPRIV_LOCAL_GLINE TPRIV_LOCAL_JUPE TPRIV_LOCAL_BADCHAN
%token TPRIV_LOCAL_OPMODE TPRIV_OPMODE TPRIV_SET TPRIV_WHOX TPRIV_BADCHAN
%token TPRIV_SEE_CHAN TPRIV_SHOW_INVIS TPRIV_SHOW_ALL_INVIS TPRIV_PROPAGATE
-%token TPRIV_UNLIMIT_QUERY TPRIV_DISPLAY TPRIV_SEE_OPERS TPRIV_WIDE_GLINE
-%token TPRIV_FORCE_OPMODE TPRIV_FORCE_LOCAL_OPMODE TPRIV_APASS_OPMODE
-%token TPRIV_LIST_CHAN
+%token TPRIV_UNLIMIT_QUERY TPRIV_UNLIMIT_FLOOD TPRIV_DISPLAY TPRIV_SEE_OPERS
+%token TPRIV_WIDE_GLINE TPRIV_FORCE_OPMODE TPRIV_FORCE_LOCAL_OPMODE
+%token TPRIV_APASS_OPMODE TPRIV_LIST_CHAN
/* and some types... */
%type <num> sizespec
%type <num> timespec timefactor factoredtimes factoredtime
%%
/* Blocks in the config file... */
blocks: blocks block | block;
-block: adminblock | generalblock | classblock | connectblock |
+block: adminblock | generalblock | classblock | connectblock | sslblock |
uworldblock | operblock | portblock | jupeblock | clientblock |
killblock | cruleblock | motdblock | featuresblock | quarantineblock |
pseudoblock | iauthblock | error ';';
localConf.contact = $3;
};
+sslblock: SSL
+{
+ MyFree(localConf.sslcertfile);
+ MyFree(localConf.sslkeyfile);
+ MyFree(localConf.sslcafile);
+ localConf.sslcertfile = localConf.sslkeyfile = localConf.sslcafile = NULL;
+}
+'{' sslitems '}' ';'
+{
+ if (localConf.sslcertfile == NULL)
+ DupString(localConf.sslcertfile, "");
+ if (localConf.sslkeyfile == NULL)
+ DupString(localConf.sslkeyfile, "");
+ if (localConf.sslcafile == NULL)
+ DupString(localConf.sslcafile, "");
+};
+sslitems: sslitems sslitem | sslitem;
+sslitem: sslcertfile | sslkeyfile | sslcafile;
+sslcertfile: CERTFILE '=' QSTRING ';'
+{
+ MyFree(localConf.sslcertfile);
+ localConf.sslcertfile = $3;
+};
+sslkeyfile: KEYFILE '=' QSTRING ';'
+{
+ MyFree(localConf.sslkeyfile);
+ localConf.sslkeyfile = $3;
+};
+sslcafile: CAFILE '=' QSTRING ';'
+{
+ MyFree(localConf.sslcafile);
+ localConf.sslcafile = $3;
+};
+
classblock: CLASS {
tping = 90;
} '{' classitems '}' ';'
TPRIV_SHOW_ALL_INVIS { $$ = PRIV_SHOW_ALL_INVIS; } |
TPRIV_PROPAGATE { $$ = PRIV_PROPAGATE; } |
TPRIV_UNLIMIT_QUERY { $$ = PRIV_UNLIMIT_QUERY; } |
+ TPRIV_UNLIMIT_FLOOD { $$ = PRIV_UNLIMIT_FLOOD; } |
TPRIV_DISPLAY { $$ = PRIV_DISPLAY; } |
TPRIV_SEE_OPERS { $$ = PRIV_SEE_OPERS; } |
TPRIV_WIDE_GLINE { $$ = PRIV_WIDE_GLINE; } |
FlagSet(&flags_here, LISTEN_IPV6);
break;
}
+
if (link->flags & 65535)
port = link->flags & 65535;
add_listener(port, link->value.cp, pass, &flags_here);
port = 0;
};
portitems: portitem portitems | portitem;
-portitem: portnumber | portvhost | portvhostnumber | portmask | portserver | porthidden;
+portitem: portnumber | portvhost | portvhostnumber | portmask | portserver | portssl | porthidden;
portnumber: PORT '=' address_family NUMBER ';'
{
if ($4 < 1 || $4 > 65535) {
FlagClr(&listen_flags, LISTEN_SERVER);
};
+portssl: SSL '=' YES ';'
+{
+ FlagSet(&listen_flags, LISTEN_SSL);
+} | SSL '=' NO ';'
+{
+ FlagClr(&listen_flags, LISTEN_SSL);
+};
+
porthidden: HIDDEN '=' YES ';'
{
FlagSet(&listen_flags, LISTEN_HIDDEN);