added basic ssl support to ircu
[ircu2.10.12-pk.git] / ircd / ircd_parser.y
index 64a112cb9e54000097c2ef1df176debd3c6b7db9..38d725a41461ad571d6085a4f6d2c14e42940e3d 100644 (file)
@@ -175,6 +175,10 @@ static void free_slist(struct SLink **link) {
 %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
@@ -199,7 +203,7 @@ static void free_slist(struct SLink **link) {
 %%
 /* 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 ';';
@@ -406,6 +410,40 @@ admincontact: CONTACT '=' QSTRING ';'
  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 '}' ';'
@@ -722,6 +760,7 @@ portblock: PORT '{' portitems '}' ';' {
       FlagSet(&flags_here, LISTEN_IPV6);
       break;
     }
+    
     if (link->flags & 65535)
       port = link->flags & 65535;
     add_listener(port, link->value.cp, pass, &flags_here);
@@ -733,7 +772,7 @@ portblock: PORT '{' portitems '}' ';' {
   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) {
@@ -783,6 +822,14 @@ portserver: SERVER '=' YES ';'
   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);