diff options
Diffstat (limited to 'src/conf_parser.y')
-rw-r--r-- | src/conf_parser.y | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/src/conf_parser.y b/src/conf_parser.y index d1d7495..0bc1e70 100644 --- a/src/conf_parser.y +++ b/src/conf_parser.y @@ -56,6 +56,8 @@ #include <openssl/dh.h> #endif +#include "rsa.h" + int yylex(void); static struct @@ -495,7 +497,7 @@ serverinfo_ssl_certificate_file: SSL_CERTIFICATE_FILE '=' QSTRING ';' { if (!ServerInfo.rsa_private_key_file) { - yyerror("No rsa_private_key_file specified, SSL disabled"); + conf_error_report("No rsa_private_key_file specified, SSL disabled"); break; } @@ -504,7 +506,8 @@ serverinfo_ssl_certificate_file: SSL_CERTIFICATE_FILE '=' QSTRING ';' SSL_CTX_use_certificate_file(ServerInfo.client_ctx, yylval.string, SSL_FILETYPE_PEM) <= 0) { - yyerror(ERR_lib_error_string(ERR_get_error())); + report_crypto_errors(); + conf_error_report("Could not open/read certificate file"); break; } @@ -513,14 +516,16 @@ serverinfo_ssl_certificate_file: SSL_CERTIFICATE_FILE '=' QSTRING ';' SSL_CTX_use_PrivateKey_file(ServerInfo.client_ctx, ServerInfo.rsa_private_key_file, SSL_FILETYPE_PEM) <= 0) { - yyerror(ERR_lib_error_string(ERR_get_error())); + report_crypto_errors(); + conf_error_report("Could not read RSA private key"); break; } if (!SSL_CTX_check_private_key(ServerInfo.server_ctx) || !SSL_CTX_check_private_key(ServerInfo.client_ctx)) { - yyerror(ERR_lib_error_string(ERR_get_error())); + report_crypto_errors("Could not read RSA private key"); + conf_error_report(ERR_lib_error_string(ERR_get_error())); break; } } @@ -550,7 +555,7 @@ serverinfo_rsa_private_key_file: RSA_PRIVATE_KEY_FILE '=' QSTRING ';' if ((file = BIO_new_file(yylval.string, "r")) == NULL) { - yyerror("File open failed, ignoring"); + conf_error_report("File open failed, ignoring"); break; } @@ -561,7 +566,7 @@ serverinfo_rsa_private_key_file: RSA_PRIVATE_KEY_FILE '=' QSTRING ';' if (ServerInfo.rsa_private_key == NULL) { - yyerror("Couldn't extract key, ignoring"); + conf_error_report("Couldn't extract key, ignoring"); break; } @@ -570,7 +575,7 @@ serverinfo_rsa_private_key_file: RSA_PRIVATE_KEY_FILE '=' QSTRING ';' RSA_free(ServerInfo.rsa_private_key); ServerInfo.rsa_private_key = NULL; - yyerror("Invalid key, ignoring"); + conf_error_report("Invalid key, ignoring"); break; } @@ -580,7 +585,7 @@ serverinfo_rsa_private_key_file: RSA_PRIVATE_KEY_FILE '=' QSTRING ';' RSA_free(ServerInfo.rsa_private_key); ServerInfo.rsa_private_key = NULL; - yyerror("Not a 2048 bit key, ignoring"); + conf_error_report("Not a 2048 bit key, ignoring"); } } #endif @@ -603,7 +608,7 @@ serverinfo_ssl_dh_param_file: SSL_DH_PARAM_FILE '=' QSTRING ';' if (dh) { if (DH_size(dh) < 128) - ilog(LOG_TYPE_IRCD, "Ignoring serverinfo::ssl_dh_param_file -- need at least a 1024 bit DH prime size"); + conf_error_report("Ignoring serverinfo::ssl_dh_param_file -- need at least a 1024 bit DH prime size"); else SSL_CTX_set_tmp_dh(ServerInfo.server_ctx, dh); @@ -631,7 +636,7 @@ serverinfo_name: NAME '=' QSTRING ';' ServerInfo.name = xstrdup(yylval.string); else { - ilog(LOG_TYPE_IRCD, "Ignoring serverinfo::name -- invalid name. Aborting."); + conf_error_report("Ignoring serverinfo::name -- invalid name. Aborting."); exit(0); } } @@ -646,7 +651,7 @@ serverinfo_sid: IRCD_SID '=' QSTRING ';' ServerInfo.sid = xstrdup(yylval.string); else { - ilog(LOG_TYPE_IRCD, "Ignoring serverinfo::sid -- invalid SID. Aborting."); + conf_error_report("Ignoring serverinfo::sid -- invalid SID. Aborting."); exit(0); } } @@ -752,7 +757,7 @@ serverinfo_max_clients: T_MAX_CLIENTS '=' NUMBER ';' char buf[IRCD_BUFSIZE]; snprintf(buf, sizeof(buf), "MAXCLIENTS too low, setting to %d", MAXCLIENTS_MIN); - yyerror(buf); + conf_error_report(buf); ServerInfo.max_clients = MAXCLIENTS_MIN; } else if ($3 > MAXCLIENTS_MAX) @@ -760,7 +765,7 @@ serverinfo_max_clients: T_MAX_CLIENTS '=' NUMBER ';' char buf[IRCD_BUFSIZE]; snprintf(buf, sizeof(buf), "MAXCLIENTS too high, setting to %d", MAXCLIENTS_MAX); - yyerror(buf); + conf_error_report(buf); ServerInfo.max_clients = MAXCLIENTS_MAX; } else @@ -1007,12 +1012,12 @@ oper_entry: OPERATOR if ((file = BIO_new_file(block_state.file.buf, "r")) == NULL) { - yyerror("Ignoring rsa_public_key_file -- file doesn't exist"); + conf_error_report("Ignoring rsa_public_key_file -- file doesn't exist"); break; } if ((pkey = PEM_read_bio_RSA_PUBKEY(file, NULL, 0, NULL)) == NULL) - yyerror("Ignoring rsa_public_key_file -- Key invalid; check key syntax."); + conf_error_report("Ignoring rsa_public_key_file -- Key invalid; check key syntax."); conf->rsa_public_key = pkey; BIO_set_close(file, BIO_CLOSE); @@ -1435,7 +1440,7 @@ port_item: NUMBER if (!ServerInfo.server_ctx) #endif { - yyerror("SSL not available - port closed"); + conf_error_report("SSL not available - port closed"); break; } add_listener($1, block_state.addr.buf, block_state.flags.value); @@ -1451,7 +1456,7 @@ port_item: NUMBER if (!ServerInfo.server_ctx) #endif { - yyerror("SSL not available - port closed"); + conf_error_report("SSL not available - port closed"); break; } @@ -1977,9 +1982,9 @@ connect_send_password: SEND_PASSWORD '=' QSTRING ';' break; if ($3[0] == ':') - yyerror("Server passwords cannot begin with a colon"); + conf_error_report("Server passwords cannot begin with a colon"); else if (strchr($3, ' ') != NULL) - yyerror("Server passwords cannot contain spaces"); + conf_error_report("Server passwords cannot contain spaces"); else strlcpy(block_state.spass.buf, yylval.string, sizeof(block_state.spass.buf)); }; @@ -1990,9 +1995,9 @@ connect_accept_password: ACCEPT_PASSWORD '=' QSTRING ';' break; if ($3[0] == ':') - yyerror("Server passwords cannot begin with a colon"); + conf_error_report("Server passwords cannot begin with a colon"); else if (strchr($3, ' ') != NULL) - yyerror("Server passwords cannot contain spaces"); + conf_error_report("Server passwords cannot contain spaces"); else strlcpy(block_state.rpass.buf, yylval.string, sizeof(block_state.rpass.buf)); }; @@ -2067,7 +2072,7 @@ connect_ssl_cipher_list: T_SSL_CIPHER_LIST '=' QSTRING ';' strlcpy(block_state.ciph.buf, yylval.string, sizeof(block_state.ciph.buf)); #else if (conf_parser_ctx.pass == 2) - yyerror("Ignoring connect::ciphers -- no OpenSSL support"); + conf_error_report("Ignoring connect::ciphers -- no OpenSSL support"); #endif }; @@ -2279,7 +2284,7 @@ gecos_entry: GECOS conf = conf_make(CONF_RXLINE); conf->regexuser = exp_p; #else - ilog(LOG_TYPE_IRCD, "Failed to add regular expression based X-Line: no PCRE support"); + conf_error_report("Failed to add regular expression based X-Line: no PCRE support"); break; #endif } |