From 811d7cb04831b0717de5c69f4a48abdee9ec2372 Mon Sep 17 00:00:00 2001 From: nohar Date: Mon, 30 May 2005 18:01:00 +0000 Subject: [PATCH] blreset_on_talk, plus a fix in log_reset --- samples/bip.conf | 9 +- src/bip.c | 24 ++- src/conf.c | 404 ++++++++++++++++++++++++----------------------- src/conf.h | 16 +- src/conf.y | 5 +- src/irc.c | 4 + src/lex.c | 317 +++++++++++++++++++------------------ src/lex.l | 1 + src/log.c | 1 + 9 files changed, 413 insertions(+), 368 deletions(-) diff --git a/samples/bip.conf b/samples/bip.conf index e41b8bf..3c53c7c 100644 --- a/samples/bip.conf +++ b/samples/bip.conf @@ -39,6 +39,11 @@ log_level = 3; backlog_lines = 10; # number of lines in backlog, 0 means no limit always_backlog = true; # backlog even lines already backlogged +# If blreset_on_talk talking on an irc network has the same effect of issuing +# /bip blreset, meaning that stuffed logged before the command won't be read +# back on backlog +#blreset_on_talk = false; + # Network definition, a name and server info network { name = "iiens"; @@ -66,8 +71,8 @@ user { # The name in bip of the user # This is used by bip only name = "nohar"; - # this user's password - password = "233a8d53b55a268d4a84a3acdd5ed57d"; # (md5(md5("tata"))) + # this user's password (md5(md5("tata"))) plus seed + password = "3880f2b39b3b9cb507b052b695d2680859bfc327"; # A user can have mutiple connections to irc networks. # define a connection: diff --git a/src/bip.c b/src/bip.c index c803a36..d7da355 100644 --- a/src/bip.c +++ b/src/bip.c @@ -54,6 +54,7 @@ int conf_backlog_lines = 10; /* backlog even lines already backlogged */ int conf_always_backlog; int conf_log_sync_interval; +int conf_blreset_on_talk = 0; list_t *parse_conf(FILE *file); static void conf_die(char *fmt, ...); @@ -678,6 +679,9 @@ int fireup(FILE *conf) free(conf_pid_file); conf_pid_file = t->pdata; break; + case LEX_BLRESET_ON_TALK: + conf_blreset_on_talk = t->ndata; + break; case LEX_NETWORK: r = add_network(t->pdata); list_free(t->pdata); @@ -1057,6 +1061,16 @@ void write_user_list(connection_t *c, char *dest) } extern struct link_client *reloading_client; +void adm_blreset(struct link_client *ic) +{ + hash_iterator_t it; + for (hash_it_init(&LINK(ic)->log->logfgs, &it); + hash_it_item(&it); + hash_it_next(&it)) { + logfilegroup_t *lfg = hash_it_item(&it); + log_reset(lfg); + } +} void adm_bip(struct link_client *ic, struct line *line) { @@ -1080,16 +1094,10 @@ void adm_bip(struct link_client *ic, struct line *line) connection_close(CONN(LINK(ic)->l_server)); } } else if (strcasecmp(line->elemv[1], "BLRESET") == 0) { - hash_iterator_t it; - for (hash_it_init(&LINK(ic)->log->logfgs, &it); - hash_it_item(&it); - hash_it_next(&it)) { - logfilegroup_t *lfg = hash_it_item(&it); - log_reset(lfg); - } + adm_blreset(ic); } else if (strcasecmp(line->elemv[1], "HELP") == 0) { WRITE_LINE2(CONN(ic), P_IRCMASK, "PRIVMSG", nick, - "/BIP (RELOAD|LIST|JUMP|HELP)"); + "/BIP (RELOAD|LIST|JUMP|BLRESET|HELP)"); } } diff --git a/src/conf.c b/src/conf.c index 622d82d..64d10db 100644 --- a/src/conf.c +++ b/src/conf.c @@ -93,9 +93,10 @@ LEX_IGN_FIRST_NICK = 295, LEX_ALWAYS_BACKLOG = 296, LEX_LOGIN = 297, - LEX_BOOL = 298, - LEX_INT = 299, - LEX_STRING = 300 + LEX_BLRESET_ON_TALK = 298, + LEX_BOOL = 299, + LEX_INT = 300, + LEX_STRING = 301 }; #endif #define LEX_IP 258 @@ -138,9 +139,10 @@ #define LEX_IGN_FIRST_NICK 295 #define LEX_ALWAYS_BACKLOG 296 #define LEX_LOGIN 297 -#define LEX_BOOL 298 -#define LEX_INT 299 -#define LEX_STRING 300 +#define LEX_BLRESET_ON_TALK 298 +#define LEX_BOOL 299 +#define LEX_INT 300 +#define LEX_STRING 301 @@ -251,7 +253,7 @@ typedef union YYSTYPE { struct tuple *tuple; } YYSTYPE; /* Line 191 of yacc.c. */ -#line 255 "y.tab.c" +#line 257 "y.tab.c" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 @@ -263,7 +265,7 @@ typedef union YYSTYPE { /* Line 214 of yacc.c. */ -#line 267 "y.tab.c" +#line 269 "y.tab.c" #if ! defined (yyoverflow) || YYERROR_VERBOSE @@ -369,20 +371,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 144 +#define YYLAST 130 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 46 +#define YYNTOKENS 47 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 13 /* YYNRULES -- Number of rules. */ -#define YYNRULES 52 +#define YYNRULES 53 /* YYNRULES -- Number of states. */ -#define YYNSTATES 137 +#define YYNSTATES 140 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 300 +#define YYMAXUTOK 301 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -420,7 +422,7 @@ static const unsigned char yytranslate[] = 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45 + 45, 46 }; #if YYDEBUG @@ -429,47 +431,47 @@ static const unsigned char yytranslate[] = static const unsigned char yyprhs[] = { 0, 0, 3, 4, 8, 12, 16, 20, 24, 28, - 32, 36, 40, 44, 48, 52, 56, 61, 66, 67, - 71, 75, 79, 84, 85, 89, 93, 97, 102, 103, + 32, 36, 40, 44, 48, 52, 56, 60, 65, 70, + 71, 75, 79, 83, 88, 89, 93, 97, 101, 106, 107, 111, 115, 119, 123, 127, 131, 135, 139, 143, - 147, 151, 155, 159, 164, 168, 169, 173, 177, 181, - 182, 186, 190 + 147, 151, 155, 159, 163, 168, 172, 173, 177, 181, + 185, 186, 190, 194 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yysigned_char yyrhs[] = { - 47, 0, -1, -1, 47, 48, 7, -1, 29, 4, - 45, -1, 30, 4, 45, -1, 31, 4, 44, -1, - 3, 4, 45, -1, 5, 4, 44, -1, 6, 4, - 43, -1, 32, 4, 44, -1, 33, 4, 43, -1, - 34, 4, 43, -1, 41, 4, 43, -1, 35, 4, - 44, -1, 39, 4, 45, -1, 9, 10, 49, 11, - -1, 12, 10, 51, 11, -1, -1, 49, 50, 7, - -1, 13, 4, 45, -1, 26, 4, 43, -1, 16, - 10, 57, 11, -1, -1, 51, 52, 7, -1, 13, - 4, 45, -1, 17, 4, 45, -1, 8, 10, 53, - 11, -1, -1, 53, 54, 7, -1, 13, 4, 45, - -1, 9, 4, 45, -1, 42, 4, 45, -1, 15, - 4, 45, -1, 12, 4, 45, -1, 25, 4, 45, - -1, 17, 4, 45, -1, 20, 4, 45, -1, 21, - 4, 44, -1, 26, 4, 43, -1, 38, 4, 45, - -1, 36, 4, 43, -1, 40, 4, 43, -1, 27, - 10, 55, 11, -1, 37, 4, 45, -1, -1, 55, - 56, 7, -1, 13, 4, 45, -1, 28, 4, 45, - -1, -1, 57, 58, 7, -1, 19, 4, 45, -1, - 5, 4, 44, -1 + 48, 0, -1, -1, 48, 49, 7, -1, 29, 4, + 46, -1, 30, 4, 46, -1, 31, 4, 45, -1, + 3, 4, 46, -1, 5, 4, 45, -1, 6, 4, + 44, -1, 32, 4, 45, -1, 33, 4, 44, -1, + 34, 4, 44, -1, 41, 4, 44, -1, 35, 4, + 45, -1, 39, 4, 46, -1, 43, 4, 44, -1, + 9, 10, 50, 11, -1, 12, 10, 52, 11, -1, + -1, 50, 51, 7, -1, 13, 4, 46, -1, 26, + 4, 44, -1, 16, 10, 58, 11, -1, -1, 52, + 53, 7, -1, 13, 4, 46, -1, 17, 4, 46, + -1, 8, 10, 54, 11, -1, -1, 54, 55, 7, + -1, 13, 4, 46, -1, 9, 4, 46, -1, 42, + 4, 46, -1, 15, 4, 46, -1, 12, 4, 46, + -1, 25, 4, 46, -1, 17, 4, 46, -1, 20, + 4, 46, -1, 21, 4, 45, -1, 26, 4, 44, + -1, 38, 4, 46, -1, 36, 4, 44, -1, 40, + 4, 44, -1, 27, 10, 56, 11, -1, 37, 4, + 46, -1, -1, 56, 57, 7, -1, 13, 4, 46, + -1, 28, 4, 46, -1, -1, 58, 59, 7, -1, + 19, 4, 46, -1, 5, 4, 45, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned char yyrline[] = { 0, 100, 100, 101, 105, 106, 108, 109, 110, 111, - 112, 114, 116, 117, 119, 121, 122, 124, 127, 128, - 131, 132, 133, 137, 138, 141, 143, 145, 149, 150, - 154, 155, 157, 158, 159, 160, 162, 164, 165, 167, - 168, 170, 172, 174, 176, 179, 180, 183, 184, 187, - 188, 191, 192 + 112, 114, 116, 117, 119, 121, 122, 125, 127, 130, + 131, 134, 135, 136, 140, 141, 144, 146, 148, 152, + 153, 157, 158, 160, 161, 162, 163, 165, 167, 168, + 170, 171, 173, 175, 177, 179, 182, 183, 186, 187, + 190, 191, 194, 195 }; #endif @@ -487,10 +489,11 @@ static const char *const yytname[] = "LEX_LOG_FORMAT", "LEX_LOG_LEVEL", "LEX_BACKLOG_LINES", "LEX_BACKLOG", "LEX_LOG", "LEX_LOG_SYNC_INTERVAL", "LEX_FOLLOW_NICK", "LEX_ON_CONNECT_SEND", "LEX_AWAY_NICK", "LEX_PID_FILE", - "LEX_IGN_FIRST_NICK", "LEX_ALWAYS_BACKLOG", "LEX_LOGIN", "LEX_BOOL", - "LEX_INT", "LEX_STRING", "$accept", "commands", "command", "network", - "net_command", "user", "usr_command", "connection", "con_command", - "channel", "cha_command", "server", "ser_command", 0 + "LEX_IGN_FIRST_NICK", "LEX_ALWAYS_BACKLOG", "LEX_LOGIN", + "LEX_BLRESET_ON_TALK", "LEX_BOOL", "LEX_INT", "LEX_STRING", "$accept", + "commands", "command", "network", "net_command", "user", "usr_command", + "connection", "con_command", "channel", "cha_command", "server", + "ser_command", 0 }; #endif @@ -503,30 +506,30 @@ static const unsigned short int yytoknum[] = 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300 + 295, 296, 297, 298, 299, 300, 301 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const unsigned char yyr1[] = { - 0, 46, 47, 47, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, - 50, 50, 50, 51, 51, 52, 52, 52, 53, 53, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 55, 55, 56, 56, 57, - 57, 58, 58 + 0, 47, 48, 48, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, + 50, 51, 51, 51, 52, 52, 53, 53, 53, 54, + 54, 55, 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 56, 56, 57, 57, + 58, 58, 59, 59 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const unsigned char yyr2[] = { 0, 2, 0, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 4, 4, 0, 3, - 3, 3, 4, 0, 3, 3, 3, 4, 0, 3, + 3, 3, 3, 3, 3, 3, 3, 4, 4, 0, + 3, 3, 3, 4, 0, 3, 3, 3, 4, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 4, 3, 0, 3, 3, 3, 0, - 3, 3, 3 + 3, 3, 3, 3, 4, 3, 0, 3, 3, 3, + 0, 3, 3, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -536,25 +539,25 @@ static const unsigned char yydefact[] = { 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 18, 23, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 7, 8, 9, 0, 0, 4, 5, - 6, 10, 11, 12, 14, 15, 13, 16, 0, 0, - 0, 0, 0, 17, 0, 0, 0, 0, 49, 0, - 19, 28, 0, 0, 24, 20, 0, 21, 0, 25, - 26, 0, 22, 0, 0, 0, 27, 0, 0, 0, + 0, 0, 19, 24, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 7, 8, 9, 0, 0, + 4, 5, 6, 10, 11, 12, 14, 15, 13, 16, + 17, 0, 0, 0, 0, 0, 18, 0, 0, 0, + 0, 50, 0, 20, 29, 0, 0, 25, 21, 0, + 22, 0, 26, 27, 0, 23, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, - 29, 52, 51, 31, 34, 30, 33, 36, 37, 38, - 35, 39, 0, 41, 44, 40, 42, 32, 43, 0, - 0, 0, 0, 0, 46, 47, 48 + 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, + 0, 0, 0, 30, 53, 52, 32, 35, 31, 34, + 37, 38, 39, 36, 40, 0, 42, 45, 41, 43, + 33, 44, 0, 0, 0, 0, 0, 47, 48, 49 }; /* YYDEFGOTO[NTERM-NUM]. */ static const short int yydefgoto[] = { - -1, 1, 17, 36, 51, 37, 56, 68, 91, 122, - 131, 66, 74 + -1, 1, 18, 38, 54, 39, 59, 71, 94, 125, + 134, 69, 77 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -563,19 +566,19 @@ static const short int yydefgoto[] = static const yysigned_char yypact[] = { -10, 0, -10, 13, 14, 17, 12, 15, 20, 22, - 23, 24, 32, 33, 34, 41, 43, 42, 5, 9, - 11, -10, -10, 10, 16, 18, 19, 21, 27, 28, - 29, 35, -10, -10, -10, -10, -3, 3, -10, -10, - -10, -10, -10, -10, -10, -10, -10, -10, 55, 50, - 61, 59, 65, -10, 72, 73, 74, 37, -10, 36, - -10, -10, 38, 39, -10, -10, -4, -10, 31, -10, - -10, 76, -10, 81, 79, 83, -10, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 52, 58, -10, 62, 63, 64, 66, 67, - 68, 60, 69, 75, -10, 77, 70, 71, 78, 80, + 23, 24, 32, 34, 36, 43, 45, 47, 30, 6, + 10, 18, -10, -10, 11, 19, 16, 21, 28, 35, + 29, 31, 37, 38, -10, -10, -10, -10, -3, 3, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, - -10, -10, -9, -10, -10, -10, -10, -10, -10, 102, - 106, 110, 82, 99, -10, -10, -10 + -10, 52, 53, 60, 61, 57, -10, 72, 74, 73, + 39, -10, 40, -10, -10, 41, 42, -10, -10, -4, + -10, 33, -10, -10, 79, -10, 82, 83, 85, -10, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 54, 63, -10, 64, 65, + 66, 67, 68, 69, 62, 70, 75, -10, 76, 71, + 77, 78, 80, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -9, -10, -10, -10, -10, + -10, -10, 102, 114, 117, 81, 84, -10, -10, -10 }; /* YYPGOTO[NTERM-NUM]. */ @@ -592,21 +595,20 @@ static const yysigned_char yypgoto[] = #define YYTABLE_NINF -1 static const unsigned char yytable[] = { - 2, 71, 128, 3, 129, 4, 5, 72, 47, 6, - 48, 52, 7, 49, 53, 73, 54, 18, 19, 130, - 55, 20, 21, 50, 23, 22, 24, 25, 26, 8, - 9, 10, 11, 12, 13, 14, 27, 28, 29, 15, - 75, 16, 76, 77, 78, 30, 79, 31, 80, 32, - 33, 81, 82, 34, 35, 38, 83, 84, 85, 57, - 58, 39, 40, 41, 42, 59, 60, 86, 87, 88, - 43, 89, 44, 90, 45, 61, 62, 63, 46, 67, - 92, 64, 65, 69, 70, 93, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 111, 105, 106, 107, - 108, 109, 104, 112, 119, 110, 132, 113, 114, 115, - 133, 116, 117, 118, 120, 124, 125, 134, 121, 0, - 123, 126, 0, 0, 0, 127, 0, 135, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 136 + 2, 74, 131, 3, 132, 4, 5, 75, 50, 6, + 51, 55, 7, 52, 56, 76, 57, 19, 20, 133, + 58, 21, 22, 53, 24, 23, 25, 26, 27, 8, + 9, 10, 11, 12, 13, 14, 28, 34, 29, 15, + 30, 16, 78, 17, 79, 80, 81, 31, 82, 32, + 83, 33, 35, 84, 85, 36, 60, 40, 86, 87, + 88, 42, 37, 61, 62, 41, 43, 64, 63, 89, + 90, 91, 44, 92, 46, 93, 65, 47, 66, 45, + 67, 48, 49, 95, 70, 68, 96, 72, 73, 98, + 97, 99, 100, 101, 102, 103, 104, 105, 106, 114, + 108, 109, 110, 111, 112, 107, 135, 122, 113, 115, + 116, 117, 118, 119, 120, 121, 123, 127, 136, 124, + 126, 0, 129, 128, 137, 0, 130, 138, 0, 0, + 139 }; static const yysigned_char yycheck[] = @@ -614,38 +616,37 @@ static const yysigned_char yycheck[] = 0, 5, 11, 3, 13, 5, 6, 11, 11, 9, 13, 8, 12, 16, 11, 19, 13, 4, 4, 28, 17, 4, 10, 26, 4, 10, 4, 4, 4, 29, - 30, 31, 32, 33, 34, 35, 4, 4, 4, 39, - 9, 41, 11, 12, 13, 4, 15, 4, 17, 7, - 45, 20, 21, 44, 43, 45, 25, 26, 27, 4, - 10, 45, 44, 44, 43, 4, 7, 36, 37, 38, - 43, 40, 44, 42, 45, 10, 4, 4, 43, 43, - 4, 7, 45, 45, 45, 4, 7, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 44, 4, 4, 4, - 4, 4, 10, 45, 44, 7, 4, 45, 45, 45, - 4, 45, 45, 45, 45, 45, 45, 7, 43, -1, - 43, 43, -1, -1, -1, 45, -1, 45, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 45 + 30, 31, 32, 33, 34, 35, 4, 7, 4, 39, + 4, 41, 9, 43, 11, 12, 13, 4, 15, 4, + 17, 4, 46, 20, 21, 45, 4, 46, 25, 26, + 27, 45, 44, 10, 4, 46, 45, 10, 7, 36, + 37, 38, 44, 40, 45, 42, 4, 46, 4, 44, + 7, 44, 44, 4, 44, 46, 4, 46, 46, 4, + 7, 4, 4, 4, 4, 4, 4, 4, 4, 45, + 4, 4, 4, 4, 4, 10, 4, 45, 7, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 4, 44, + 44, -1, 44, 46, 7, -1, 46, 46, -1, -1, + 46 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const unsigned char yystos[] = { - 0, 47, 0, 3, 5, 6, 9, 12, 29, 30, - 31, 32, 33, 34, 35, 39, 41, 48, 4, 4, - 4, 10, 10, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 7, 45, 44, 43, 49, 51, 45, 45, - 44, 44, 43, 43, 44, 45, 43, 11, 13, 16, - 26, 50, 8, 11, 13, 17, 52, 4, 10, 4, - 7, 10, 4, 4, 7, 45, 57, 43, 53, 45, - 45, 5, 11, 19, 58, 9, 11, 12, 13, 15, - 17, 20, 21, 25, 26, 27, 36, 37, 38, 40, - 42, 54, 4, 4, 7, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 10, 4, 4, 4, 4, 4, - 7, 44, 45, 45, 45, 45, 45, 45, 45, 44, - 45, 43, 55, 43, 45, 45, 43, 45, 11, 13, - 28, 56, 4, 4, 7, 45, 45 + 0, 48, 0, 3, 5, 6, 9, 12, 29, 30, + 31, 32, 33, 34, 35, 39, 41, 43, 49, 4, + 4, 4, 10, 10, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 7, 46, 45, 44, 50, 52, + 46, 46, 45, 45, 44, 44, 45, 46, 44, 44, + 11, 13, 16, 26, 51, 8, 11, 13, 17, 53, + 4, 10, 4, 7, 10, 4, 4, 7, 46, 58, + 44, 54, 46, 46, 5, 11, 19, 59, 9, 11, + 12, 13, 15, 17, 20, 21, 25, 26, 27, 36, + 37, 38, 40, 42, 55, 4, 4, 7, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 10, 4, 4, + 4, 4, 4, 7, 45, 46, 46, 46, 46, 46, + 46, 46, 45, 46, 44, 56, 44, 46, 46, 44, + 46, 11, 13, 28, 57, 4, 4, 7, 46, 46 }; #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) @@ -1333,201 +1334,208 @@ yyreduce: case 16: #line 122 "conf.y" + { + yyval.tuple = tuple_i_new(LEX_BLRESET_ON_TALK, yyvsp[0].number); + } + break; + + case 17: +#line 125 "conf.y" { yyval.tuple = tuple_l_new(LEX_NETWORK, yyvsp[-1].list); } break; - case 17: -#line 124 "conf.y" + case 18: +#line 127 "conf.y" { yyval.tuple = tuple_l_new(LEX_USER, yyvsp[-1].list); } break; - case 18: -#line 127 "conf.y" - { yyval.list = list_new(NULL); } - break; - case 19: -#line 128 "conf.y" - { list_add_last(yyvsp[-2].list, yyvsp[-1].tuple); yyval.list = yyvsp[-2].list; } +#line 130 "conf.y" + { yyval.list = list_new(NULL); } break; case 20: #line 131 "conf.y" - { yyval.tuple = tuple_s_new(LEX_NAME, yyvsp[0].string); } + { list_add_last(yyvsp[-2].list, yyvsp[-1].tuple); yyval.list = yyvsp[-2].list; } break; case 21: -#line 132 "conf.y" - { yyval.tuple = tuple_i_new(LEX_SSL, yyvsp[0].number); } +#line 134 "conf.y" + { yyval.tuple = tuple_s_new(LEX_NAME, yyvsp[0].string); } break; case 22: -#line 133 "conf.y" +#line 135 "conf.y" + { yyval.tuple = tuple_i_new(LEX_SSL, yyvsp[0].number); } + break; + + case 23: +#line 136 "conf.y" { yyval.tuple = tuple_l_new(LEX_SERVER, yyvsp[-1].list); } break; - case 23: -#line 137 "conf.y" - { yyval.list = list_new(NULL); } - break; - case 24: -#line 138 "conf.y" - { list_add_last(yyvsp[-2].list, yyvsp[-1].tuple); yyval.list = yyvsp[-2].list; } +#line 140 "conf.y" + { yyval.list = list_new(NULL); } break; case 25: #line 141 "conf.y" + { list_add_last(yyvsp[-2].list, yyvsp[-1].tuple); yyval.list = yyvsp[-2].list; } + break; + + case 26: +#line 144 "conf.y" { yyval.tuple = tuple_s_new(LEX_NAME, yyvsp[0].string); } break; - case 26: -#line 143 "conf.y" + case 27: +#line 146 "conf.y" { yyval.tuple = tuple_s_new(LEX_PASSWORD, yyvsp[0].string); } break; - case 27: -#line 145 "conf.y" + case 28: +#line 148 "conf.y" { yyval.tuple = tuple_l_new(LEX_CONNECTION, yyvsp[-1].list); } break; - case 28: -#line 149 "conf.y" + case 29: +#line 152 "conf.y" { yyval.list = list_new(NULL); } break; - case 29: -#line 150 "conf.y" + case 30: +#line 153 "conf.y" { list_add_last(yyvsp[-2].list, yyvsp[-1].tuple); yyval.list = yyvsp[-2].list; } break; - case 30: -#line 154 "conf.y" + case 31: +#line 157 "conf.y" { yyval.tuple = tuple_s_new(LEX_NAME, yyvsp[0].string); } break; - case 31: -#line 155 "conf.y" + case 32: +#line 158 "conf.y" { yyval.tuple = tuple_s_new(LEX_NETWORK, yyvsp[0].string); } break; - case 32: -#line 157 "conf.y" + case 33: +#line 160 "conf.y" { yyval.tuple = tuple_s_new(LEX_LOGIN, yyvsp[0].string); } break; - case 33: -#line 158 "conf.y" + case 34: +#line 161 "conf.y" { yyval.tuple = tuple_s_new(LEX_NICK, yyvsp[0].string); } break; - case 34: -#line 159 "conf.y" + case 35: +#line 162 "conf.y" { yyval.tuple = tuple_s_new(LEX_USER, yyvsp[0].string); } break; - case 35: -#line 160 "conf.y" + case 36: +#line 163 "conf.y" { yyval.tuple = tuple_s_new(LEX_REALNAME, yyvsp[0].string); } break; - case 36: -#line 162 "conf.y" + case 37: +#line 165 "conf.y" { yyval.tuple = tuple_s_new(LEX_PASSWORD, yyvsp[0].string); } break; - case 37: -#line 164 "conf.y" + case 38: +#line 167 "conf.y" { yyval.tuple = tuple_s_new(LEX_VHOST, yyvsp[0].string); } break; - case 38: -#line 165 "conf.y" + case 39: +#line 168 "conf.y" { yyval.tuple = tuple_i_new(LEX_SOURCE_PORT, yyvsp[0].number); } break; - case 39: -#line 167 "conf.y" + case 40: +#line 170 "conf.y" { yyval.tuple = tuple_i_new(LEX_SSL, yyvsp[0].number); } break; - case 40: -#line 168 "conf.y" + case 41: +#line 171 "conf.y" { yyval.tuple = tuple_s_new(LEX_AWAY_NICK, yyvsp[0].string); } break; - case 41: -#line 170 "conf.y" + case 42: +#line 173 "conf.y" { yyval.tuple = tuple_i_new(LEX_FOLLOW_NICK, yyvsp[0].number); } break; - case 42: -#line 172 "conf.y" + case 43: +#line 175 "conf.y" { yyval.tuple = tuple_i_new( LEX_IGN_FIRST_NICK, yyvsp[0].number); } break; - case 43: -#line 174 "conf.y" + case 44: +#line 177 "conf.y" { yyval.tuple = tuple_l_new( LEX_CHANNEL, yyvsp[-1].list); } break; - case 44: -#line 176 "conf.y" + case 45: +#line 179 "conf.y" { yyval.tuple = tuple_s_new( LEX_ON_CONNECT_SEND, yyvsp[0].string); } break; - case 45: -#line 179 "conf.y" - { yyval.list = list_new(NULL); } - break; - case 46: -#line 180 "conf.y" - { list_add_last(yyvsp[-2].list, yyvsp[-1].tuple); yyval.list = yyvsp[-2].list; } +#line 182 "conf.y" + { yyval.list = list_new(NULL); } break; case 47: #line 183 "conf.y" - { yyval.tuple = tuple_s_new(LEX_NAME, yyvsp[0].string); } + { list_add_last(yyvsp[-2].list, yyvsp[-1].tuple); yyval.list = yyvsp[-2].list; } break; case 48: -#line 184 "conf.y" - { yyval.tuple = tuple_s_new(LEX_KEY, yyvsp[0].string); } +#line 186 "conf.y" + { yyval.tuple = tuple_s_new(LEX_NAME, yyvsp[0].string); } break; case 49: #line 187 "conf.y" - { yyval.list = list_new(NULL); } + { yyval.tuple = tuple_s_new(LEX_KEY, yyvsp[0].string); } break; case 50: -#line 188 "conf.y" - { list_add_last(yyvsp[-2].list, yyvsp[-1].tuple); yyval.list = yyvsp[-2].list; } +#line 190 "conf.y" + { yyval.list = list_new(NULL); } break; case 51: #line 191 "conf.y" - { yyval.tuple = tuple_s_new(LEX_HOST, yyvsp[0].string); } + { list_add_last(yyvsp[-2].list, yyvsp[-1].tuple); yyval.list = yyvsp[-2].list; } break; case 52: -#line 192 "conf.y" +#line 194 "conf.y" + { yyval.tuple = tuple_s_new(LEX_HOST, yyvsp[0].string); } + break; + + case 53: +#line 195 "conf.y" { yyval.tuple = tuple_i_new(LEX_PORT, yyvsp[0].number); } break; @@ -1535,7 +1543,7 @@ yyreduce: } /* Line 1010 of yacc.c. */ -#line 1539 "y.tab.c" +#line 1547 "y.tab.c" yyvsp -= yylen; yyssp -= yylen; diff --git a/src/conf.h b/src/conf.h index 9d8ecdc..5476c77 100644 --- a/src/conf.h +++ b/src/conf.h @@ -69,9 +69,10 @@ LEX_IGN_FIRST_NICK = 295, LEX_ALWAYS_BACKLOG = 296, LEX_LOGIN = 297, - LEX_BOOL = 298, - LEX_INT = 299, - LEX_STRING = 300 + LEX_BLRESET_ON_TALK = 298, + LEX_BOOL = 299, + LEX_INT = 300, + LEX_STRING = 301 }; #endif #define LEX_IP 258 @@ -114,9 +115,10 @@ #define LEX_IGN_FIRST_NICK 295 #define LEX_ALWAYS_BACKLOG 296 #define LEX_LOGIN 297 -#define LEX_BOOL 298 -#define LEX_INT 299 -#define LEX_STRING 300 +#define LEX_BLRESET_ON_TALK 298 +#define LEX_BOOL 299 +#define LEX_INT 300 +#define LEX_STRING 301 @@ -130,7 +132,7 @@ typedef union YYSTYPE { struct tuple *tuple; } YYSTYPE; /* Line 1285 of yacc.c. */ -#line 134 "y.tab.h" +#line 136 "y.tab.h" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 diff --git a/src/conf.y b/src/conf.y index 5340eb2..120677b 100644 --- a/src/conf.y +++ b/src/conf.y @@ -80,7 +80,7 @@ struct tuple *tuple_l_new(int type, void *p) %} -%token LEX_IP LEX_EQ LEX_PORT LEX_CSS LEX_SEMICOLON LEX_CONNECTION LEX_NETWORK LEX_LBRA LEX_RBRA LEX_USER LEX_NAME LEX_USERNAME LEX_NICK LEX_SERVER LEX_PASSWORD LEX_SRCIP LEX_HOST LEX_VHOST LEX_SOURCE_PORT LEX_NONE LEX_COMMENT LEX_BUNCH LEX_REALNAME LEX_SSL LEX_CHANNEL LEX_KEY LEX_LOG_ROOT LEX_LOG_FORMAT LEX_LOG_LEVEL LEX_BACKLOG_LINES LEX_BACKLOG LEX_LOG LEX_LOG_SYNC_INTERVAL LEX_FOLLOW_NICK LEX_ON_CONNECT_SEND LEX_AWAY_NICK LEX_PID_FILE LEX_IGN_FIRST_NICK LEX_ALWAYS_BACKLOG LEX_LOGIN +%token LEX_IP LEX_EQ LEX_PORT LEX_CSS LEX_SEMICOLON LEX_CONNECTION LEX_NETWORK LEX_LBRA LEX_RBRA LEX_USER LEX_NAME LEX_USERNAME LEX_NICK LEX_SERVER LEX_PASSWORD LEX_SRCIP LEX_HOST LEX_VHOST LEX_SOURCE_PORT LEX_NONE LEX_COMMENT LEX_BUNCH LEX_REALNAME LEX_SSL LEX_CHANNEL LEX_KEY LEX_LOG_ROOT LEX_LOG_FORMAT LEX_LOG_LEVEL LEX_BACKLOG_LINES LEX_BACKLOG LEX_LOG LEX_LOG_SYNC_INTERVAL LEX_FOLLOW_NICK LEX_ON_CONNECT_SEND LEX_AWAY_NICK LEX_PID_FILE LEX_IGN_FIRST_NICK LEX_ALWAYS_BACKLOG LEX_LOGIN LEX_BLRESET_ON_TALK %union { int number; @@ -119,6 +119,9 @@ command: | LEX_LOG_SYNC_INTERVAL LEX_EQ LEX_INT { $$ = tuple_i_new( LEX_LOG_SYNC_INTERVAL, $3); } | LEX_PID_FILE LEX_EQ LEX_STRING { $$ = tuple_s_new(LEX_PID_FILE, $3); } + | LEX_BLRESET_ON_TALK LEX_EQ LEX_BOOL { + $$ = tuple_i_new(LEX_BLRESET_ON_TALK, $3); + } | LEX_NETWORK LEX_LBRA network LEX_RBRA { $$ = tuple_l_new(LEX_NETWORK, $3); } | LEX_USER LEX_LBRA user LEX_RBRA { $$ = tuple_l_new(LEX_USER, $3); } diff --git a/src/irc.c b/src/irc.c index 4583629..48c80c6 100644 --- a/src/irc.c +++ b/src/irc.c @@ -47,6 +47,7 @@ extern int conf_backlog; extern int conf_log_sync_interval; extern int conf_error; extern char conf_errstr[]; +extern int conf_blreset_on_talk; void write_user_list(connection_t *c, char *dest); @@ -713,10 +714,13 @@ static int irc_cli_quit(struct link_client *ic, struct line *line) return OK_CLOSE; } +void adm_blreset(struct link_client *ic); static int irc_cli_privmsg(struct link_client *ic, struct line *line) { log_cli_privmsg(LINK(ic)->log, LINK(ic)->l_server->nick, line->elemv[1], line->elemv[2]); + if (conf_blreset_on_talk) + adm_blreset(ic); return OK_COPY_CLI; } diff --git a/src/lex.c b/src/lex.c index 572b56b..802e9e9 100644 --- a/src/lex.c +++ b/src/lex.c @@ -351,8 +351,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 44 -#define YY_END_OF_BUFFER 45 +#define YY_NUM_RULES 45 +#define YY_END_OF_BUFFER 46 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -360,35 +360,37 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[248] = +static yyconst flex_int16_t yy_accept[262] = { 0, - 0, 0, 45, 43, 1, 2, 43, 43, 4, 42, - 39, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 40, 41, 1, - 0, 38, 0, 3, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, + 0, 0, 46, 44, 1, 2, 44, 44, 4, 43, + 40, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 41, 42, 1, + 0, 39, 0, 3, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 23, 30, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, + 0, 0, 0, 0, 23, 30, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, - 12, 0, 17, 0, 0, 0, 7, 0, 0, 0, - 5, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 17, 0, 0, 0, 7, + 0, 0, 0, 5, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 29, 24, 0, - 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 29, 0, 24, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 26, 0, 0, 21, 37, 18, 0, - 13, 0, 35, 0, 0, 0, 0, 0, 0, 25, + 26, 0, 0, 21, 37, 18, 0, 13, 0, 35, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 27, + 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 28, 0, - 0, 0, 0, 31, 0, 0, 0, 0, 8, 0, - 0, 36, 0, 0, 34, 32, 0 + 19, 0, 0, 0, 0, 0, 0, 0, 0, 28, + 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, + 0, 38, 8, 0, 0, 36, 0, 0, 34, 32, + 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -431,140 +433,146 @@ static yyconst flex_int32_t yy_meta[35] = 1, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[250] = +static yyconst flex_int16_t yy_base[264] = { 0, - 0, 0, 259, 260, 33, 260, 253, 254, 249, 260, - 260, 15, 244, 20, 28, 230, 23, 238, 228, 32, - 228, 31, 235, 30, 223, 221, 229, 260, 260, 54, - 241, 260, 242, 260, 237, 212, 231, 228, 229, 220, - 215, 216, 215, 208, 211, 260, 201, 215, 209, 202, - 216, 218, 200, 212, 199, 213, 197, 193, 200, 191, - 204, 194, 206, 184, 195, 191, 198, 189, 184, 189, - 181, 184, 260, 43, 192, 175, 185, 191, 176, 192, - 173, 179, 169, 172, 260, 182, 170, 168, 162, 183, - 171, 168, 167, 174, 173, 163, 260, 160, 43, 162, + 0, 0, 273, 274, 33, 274, 267, 268, 263, 274, + 274, 15, 27, 21, 29, 245, 24, 253, 243, 32, + 243, 33, 250, 35, 238, 236, 244, 274, 274, 52, + 256, 274, 257, 274, 252, 227, 246, 243, 229, 243, + 234, 229, 230, 229, 222, 225, 274, 215, 229, 223, + 216, 230, 232, 214, 226, 213, 227, 211, 207, 214, + 205, 218, 208, 220, 198, 209, 213, 204, 211, 202, + 197, 202, 194, 197, 274, 45, 205, 188, 198, 204, + 189, 205, 186, 192, 182, 185, 274, 195, 183, 181, + 175, 196, 184, 177, 180, 179, 186, 185, 175, 274, - 260, 160, 260, 159, 151, 165, 260, 157, 164, 165, - 260, 154, 148, 148, 151, 149, 157, 143, 157, 138, - 153, 143, 151, 141, 132, 260, 137, 139, 137, 141, - 148, 132, 142, 145, 260, 145, 135, 136, 131, 141, - 122, 139, 138, 121, 116, 121, 121, 123, 119, 115, - 119, 117, 260, 128, 115, 124, 122, 124, 260, 106, - 113, 108, 114, 107, 113, 99, 113, 260, 110, 110, - 108, 107, 96, 105, 108, 98, 96, 97, 91, 95, - 94, 101, 90, 260, 100, 96, 260, 260, 260, 84, - 260, 94, 260, 87, 91, 81, 90, 76, 73, 260, + 172, 42, 174, 274, 172, 274, 171, 163, 177, 274, + 169, 176, 177, 274, 166, 160, 160, 163, 161, 169, + 168, 154, 168, 149, 164, 154, 162, 152, 143, 274, + 148, 150, 148, 152, 159, 143, 153, 156, 274, 156, + 146, 147, 135, 141, 151, 132, 149, 148, 131, 126, + 131, 131, 133, 129, 125, 129, 127, 274, 138, 125, + 134, 132, 134, 133, 274, 115, 122, 117, 123, 116, + 122, 108, 122, 274, 119, 119, 117, 116, 105, 114, + 117, 107, 105, 101, 105, 99, 103, 102, 109, 98, + 274, 108, 104, 274, 274, 274, 92, 274, 102, 274, - 81, 71, 72, 77, 73, 80, 260, 74, 66, 260, - 69, 81, 62, 68, 73, 77, 260, 58, 57, 57, - 260, 59, 55, 54, 70, 64, 63, 60, 260, 49, - 52, 48, 50, 260, 51, 52, 38, 53, 260, 53, - 54, 260, 43, 40, 260, 260, 260, 59, 48 + 95, 90, 98, 88, 97, 83, 80, 274, 88, 78, + 79, 84, 80, 92, 86, 274, 80, 72, 274, 75, + 87, 68, 74, 79, 65, 82, 274, 63, 62, 62, + 274, 64, 60, 75, 58, 74, 68, 67, 64, 274, + 59, 52, 55, 51, 53, 274, 55, 53, 54, 42, + 57, 274, 274, 57, 56, 274, 46, 44, 274, 274, + 274, 60, 59 } ; -static yyconst flex_int16_t yy_def[250] = +static yyconst flex_int16_t yy_def[264] = { 0, - 247, 1, 247, 247, 247, 247, 248, 249, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 248, 247, 249, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 261, 1, 261, 261, 261, 261, 262, 263, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 262, 261, 263, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 0, 247, 247 + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 0, 261, 261 } ; -static yyconst flex_int16_t yy_nxt[295] = +static yyconst flex_int16_t yy_nxt[309] = { 0, 4, 5, 6, 5, 7, 8, 9, 10, 11, 4, 12, 13, 14, 4, 4, 15, 4, 16, 17, 18, 19, 4, 20, 21, 22, 23, 24, 25, 26, 27, - 4, 4, 28, 29, 30, 36, 30, 39, 42, 45, - 40, 53, 49, 41, 57, 37, 50, 46, 33, 54, - 51, 43, 99, 58, 55, 30, 59, 30, 122, 31, - 246, 100, 245, 123, 244, 243, 242, 241, 124, 125, - 240, 239, 238, 237, 236, 235, 234, 233, 232, 231, - 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, - 220, 219, 218, 217, 216, 215, 214, 213, 212, 211, + 4, 4, 28, 29, 30, 36, 30, 38, 40, 43, + 46, 41, 50, 54, 42, 37, 51, 39, 47, 58, + 52, 55, 44, 30, 102, 30, 56, 126, 59, 33, + 31, 60, 127, 103, 260, 259, 258, 128, 129, 257, + 256, 255, 254, 253, 252, 251, 250, 249, 248, 247, + 246, 245, 244, 243, 242, 241, 240, 239, 238, 237, + 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, - 210, 209, 208, 207, 206, 205, 204, 203, 202, 201, - 200, 199, 198, 197, 196, 195, 194, 193, 192, 191, - 190, 189, 188, 187, 186, 185, 184, 183, 182, 181, - 180, 179, 178, 177, 176, 175, 174, 173, 172, 171, - 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, - 160, 159, 158, 157, 156, 155, 154, 153, 152, 151, - 150, 149, 148, 147, 146, 145, 144, 143, 142, 141, - 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, - 130, 129, 128, 127, 126, 121, 120, 111, 119, 118, - 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, + 226, 225, 224, 223, 222, 221, 220, 219, 218, 217, + 216, 215, 214, 213, 212, 211, 210, 209, 208, 207, + 206, 205, 204, 203, 202, 201, 200, 199, 198, 197, + 196, 195, 194, 193, 192, 191, 190, 189, 188, 187, + 186, 185, 184, 183, 182, 181, 180, 179, 178, 177, + 176, 175, 174, 173, 172, 171, 170, 169, 168, 167, + 166, 165, 164, 163, 162, 161, 160, 159, 158, 157, + 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, + 146, 145, 144, 143, 142, 141, 140, 139, 138, 137, + 136, 135, 134, 133, 132, 131, 130, 125, 124, 114, - 107, 106, 105, 104, 103, 102, 101, 98, 97, 96, - 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, - 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, - 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, - 65, 64, 63, 35, 34, 32, 62, 61, 60, 56, - 52, 48, 47, 44, 38, 35, 34, 32, 247, 3, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247 + 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, + 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, + 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, + 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, + 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, + 71, 70, 69, 68, 67, 66, 65, 64, 35, 34, + 32, 63, 62, 61, 57, 53, 49, 48, 45, 35, + 34, 32, 261, 3, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261 } ; -static yyconst flex_int16_t yy_chk[295] = +static yyconst flex_int16_t yy_chk[309] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 5, 12, 5, 14, 15, 17, - 14, 22, 20, 14, 24, 12, 20, 17, 249, 22, - 20, 15, 74, 24, 22, 30, 24, 30, 99, 248, - 244, 74, 243, 99, 241, 240, 238, 237, 99, 99, - 236, 235, 233, 232, 231, 230, 228, 227, 226, 225, - 224, 223, 222, 220, 219, 218, 216, 215, 214, 213, - 212, 211, 209, 208, 206, 205, 204, 203, 202, 201, + 1, 1, 1, 1, 5, 12, 5, 13, 14, 15, + 17, 14, 20, 22, 14, 12, 20, 13, 17, 24, + 20, 22, 15, 30, 76, 30, 22, 102, 24, 263, + 262, 24, 102, 76, 258, 257, 255, 102, 102, 254, + 251, 250, 249, 248, 247, 245, 244, 243, 242, 241, + 239, 238, 237, 236, 235, 234, 233, 232, 230, 229, + 228, 226, 225, 224, 223, 222, 221, 220, 218, 217, - 199, 198, 197, 196, 195, 194, 192, 190, 186, 185, - 183, 182, 181, 180, 179, 178, 177, 176, 175, 174, - 173, 172, 171, 170, 169, 167, 166, 165, 164, 163, - 162, 161, 160, 158, 157, 156, 155, 154, 152, 151, - 150, 149, 148, 147, 146, 145, 144, 143, 142, 141, - 140, 139, 138, 137, 136, 134, 133, 132, 131, 130, - 129, 128, 127, 125, 124, 123, 122, 121, 120, 119, - 118, 117, 116, 115, 114, 113, 112, 110, 109, 108, - 106, 105, 104, 102, 100, 98, 96, 95, 94, 93, - 92, 91, 90, 89, 88, 87, 86, 84, 83, 82, + 215, 214, 213, 212, 211, 210, 209, 207, 206, 205, + 204, 203, 202, 201, 199, 197, 193, 192, 190, 189, + 188, 187, 186, 185, 184, 183, 182, 181, 180, 179, + 178, 177, 176, 175, 173, 172, 171, 170, 169, 168, + 167, 166, 164, 163, 162, 161, 160, 159, 157, 156, + 155, 154, 153, 152, 151, 150, 149, 148, 147, 146, + 145, 144, 143, 142, 141, 140, 138, 137, 136, 135, + 134, 133, 132, 131, 129, 128, 127, 126, 125, 124, + 123, 122, 121, 120, 119, 118, 117, 116, 115, 113, + 112, 111, 109, 108, 107, 105, 103, 101, 99, 98, - 81, 80, 79, 78, 77, 76, 75, 72, 71, 70, - 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, - 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, - 49, 48, 47, 45, 44, 43, 42, 41, 40, 39, - 38, 37, 36, 35, 33, 31, 27, 26, 25, 23, - 21, 19, 18, 16, 13, 9, 8, 7, 3, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247 + 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, + 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, + 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, + 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, + 54, 53, 52, 51, 50, 49, 48, 46, 45, 44, + 43, 42, 41, 40, 39, 38, 37, 36, 35, 33, + 31, 27, 26, 25, 23, 21, 19, 18, 16, 9, + 8, 7, 3, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261 } ; static yy_state_type yy_last_accepting_state; @@ -616,7 +624,7 @@ list_t *parse_conf(FILE *file) } return root_list; } -#line 620 "lex.yy.c" +#line 628 "lex.yy.c" #define INITIAL 0 @@ -769,7 +777,7 @@ YY_DECL #line 36 "lex.l" -#line 773 "lex.yy.c" +#line 781 "lex.yy.c" if ( (yy_init) ) { @@ -822,13 +830,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 248 ) + if ( yy_current_state >= 262 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 260 ); + while ( yy_base[yy_current_state] != 274 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1049,9 +1057,14 @@ YY_RULE_SETUP { return LEX_PID_FILE; } YY_BREAK case 38: -/* rule 38 can match eol */ YY_RULE_SETUP #line 81 "lex.l" +{ return LEX_BLRESET_ON_TALK; } + YY_BREAK +case 39: +/* rule 39 can match eol */ +YY_RULE_SETUP +#line 82 "lex.l" { size_t len = strlen(yytext) - 2; yylval.string = malloc(len + 1); @@ -1062,38 +1075,38 @@ YY_RULE_SETUP return LEX_STRING; } YY_BREAK -case 39: -YY_RULE_SETUP -#line 90 "lex.l" -{ return LEX_EQ; } - YY_BREAK case 40: YY_RULE_SETUP #line 91 "lex.l" -{ return LEX_LBRA; } +{ return LEX_EQ; } YY_BREAK case 41: YY_RULE_SETUP #line 92 "lex.l" -{ return LEX_RBRA; } +{ return LEX_LBRA; } YY_BREAK case 42: YY_RULE_SETUP #line 93 "lex.l" -{ return LEX_SEMICOLON; } +{ return LEX_RBRA; } YY_BREAK case 43: YY_RULE_SETUP #line 94 "lex.l" -{ printf("Parse error line %d, unknown character '%s'\n", linec + 1, yytext); - return LEX_BUNCH; } +{ return LEX_SEMICOLON; } YY_BREAK case 44: YY_RULE_SETUP -#line 96 "lex.l" +#line 95 "lex.l" +{ printf("Parse error line %d, unknown character '%s'\n", linec + 1, yytext); + return LEX_BUNCH; } + YY_BREAK +case 45: +YY_RULE_SETUP +#line 97 "lex.l" ECHO; YY_BREAK -#line 1097 "lex.yy.c" +#line 1110 "lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -1377,7 +1390,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 248 ) + if ( yy_current_state >= 262 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1405,11 +1418,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 248 ) + if ( yy_current_state >= 262 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 247); + yy_is_jam = (yy_current_state == 261); return yy_is_jam ? 0 : yy_current_state; } @@ -2059,7 +2072,7 @@ void yyfree (void * ptr ) #undef YY_DECL_IS_OURS #undef YY_DECL #endif -#line 96 "lex.l" +#line 97 "lex.l" diff --git a/src/lex.l b/src/lex.l index 0bcb62a..acf1b24 100644 --- a/src/lex.l +++ b/src/lex.l @@ -78,6 +78,7 @@ list_t *parse_conf(FILE *file) "away_nick" { return LEX_AWAY_NICK; } "on_connect_send" { return LEX_ON_CONNECT_SEND; } "pid_file" { return LEX_PID_FILE; } +"blreset_on_talk" { return LEX_BLRESET_ON_TALK; } \"[^"]*\" { size_t len = strlen(yytext) - 2; yylval.string = malloc(len + 1); diff --git a/src/log.c b/src/log.c index ecc21c9..e60482d 100644 --- a/src/log.c +++ b/src/log.c @@ -181,6 +181,7 @@ void log_updatelast(logfile_t *lf) void log_reset(logfilegroup_t *lfg) { logfile_t *olf; + lfg->skip_advance = 0; if (lfg->memlog) { while (!list_is_empty(lfg->memlog))