ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/branches/8.2.x/src/conf_parser.y
(Generate patch)

Comparing ircd-hybrid/trunk/src/conf_parser.y (file contents):
Revision 1823 by michael, Sun Apr 14 18:24:38 2013 UTC vs.
Revision 2093 by michael, Sat May 18 19:10:13 2013 UTC

# Line 190 | Line 190 | reset_block_state(void)
190   %token  HIDDEN_NAME
191   %token  HIDE_SERVER_IPS
192   %token  HIDE_SERVERS
193 + %token  HIDE_SERVICES
194   %token  HIDE_SPOOF_IPS
195   %token  HOST
196   %token  HUB
# Line 207 | Line 208 | reset_block_state(void)
208   %token  LINKS_DELAY
209   %token  LISTEN
210   %token  T_LOG
211 + %token  MASK
212   %token  MAX_ACCEPT
213   %token  MAX_BANS
214   %token  MAX_CHANS_PER_OPER
# Line 221 | Line 223 | reset_block_state(void)
223   %token  MAX_TARGETS
224   %token  MAX_TOPIC_LENGTH
225   %token  MAX_WATCH
224 %token  MESSAGE_LOCALE
226   %token  MIN_NONWILDCARD
227   %token  MIN_NONWILDCARD_SIMPLE
228   %token  MIN_IDLE
# Line 235 | Line 236 | reset_block_state(void)
236   %token  NETWORK_DESC
237   %token  NETWORK_NAME
238   %token  NICK
238 %token  NICK_CHANGES
239   %token  NO_CREATE_ON_SPLIT
240   %token  NO_JOIN_ON_SPLIT
241   %token  NO_OPER_FLOOD
# Line 247 | Line 247 | reset_block_state(void)
247   %token  OPERS_BYPASS_CALLERID
248   %token  OPER_ONLY_UMODES
249   %token  OPER_PASS_RESV
250 %token  OPER_SPY_T
250   %token  OPER_UMODES
251   %token  JOIN_FLOOD_COUNT
252   %token  JOIN_FLOOD_TIME
# Line 259 | Line 258 | reset_block_state(void)
258   %token  PING_TIME
259   %token  PORT
260   %token  QSTRING
262 %token  QUIET_ON_BAN
261   %token  REASON
262   %token  REDIRPORT
263   %token  REDIRSERV
266 %token  REGEX_T
264   %token  REHASH
265   %token  REMOTE
266   %token  REMOTEBAN
270 %token  RESTRICT_CHANNELS
267   %token  RSA_PRIVATE_KEY_FILE
268   %token  RSA_PUBLIC_KEY_FILE
269   %token  SSL_CERTIFICATE_FILE
# Line 283 | Line 279 | reset_block_state(void)
279   %token  SEND_PASSWORD
280   %token  SERVERHIDE
281   %token  SERVERINFO
282 + %token  SQUIT
283   %token  IRCD_SID
284   %token  TKLINE_EXPIRE_NOTICES
285   %token  T_SHARED
# Line 312 | Line 309 | reset_block_state(void)
309   %token  T_DEBUG
310   %token  T_DLINE
311   %token  T_EXTERNAL
312 + %token  T_FARCONNECT
313   %token  T_FULL
314   %token  T_INVISIBLE
315   %token  T_IPV4
# Line 319 | Line 317 | reset_block_state(void)
317   %token  T_LOCOPS
318   %token  T_MAX_CLIENTS
319   %token  T_NCHANGE
320 + %token  T_NONONREG
321   %token  T_OPERWALL
322   %token  T_RECVQ
323   %token  T_REJ
# Line 336 | Line 335 | reset_block_state(void)
335   %token  T_UNXLINE
336   %token  T_GLOBOPS
337   %token  T_WALLOP
338 + %token  T_WALLOPS
339   %token  T_WEBIRC
340   %token  T_RESTART
341   %token  T_SERVICE
# Line 896 | Line 896 | logging_file_entry:
896      break;
897  
898    if (block_state.type.value && block_state.file.buf[0])
899 <    log_add_file(block_state.type.value, block_state.size.value,
899 >    log_set_file(block_state.type.value, block_state.size.value,
900                   block_state.file.buf);
901   };
902  
# Line 1173 | Line 1173 | oper_umodes_item:  T_BOTS
1173   {
1174    if (conf_parser_ctx.pass == 2)
1175      block_state.modes.value |= UMODE_LOCOPS;
1176 + } | T_NONONREG
1177 + {
1178 +  if (conf_parser_ctx.pass == 2)
1179 +    block_state.modes.value |= UMODE_REGONLY;
1180 + } | T_FARCONNECT
1181 + {
1182 +  if (conf_parser_ctx.pass == 2)
1183 +    block_state.modes.value |= UMODE_FARCONNECT;
1184   };
1185  
1186   oper_flags: IRCD_FLAGS
# Line 1182 | Line 1190 | oper_flags: IRCD_FLAGS
1190   } '='  oper_flags_items ';';
1191  
1192   oper_flags_items: oper_flags_items ',' oper_flags_item | oper_flags_item;
1193 < oper_flags_item: GLOBAL_KILL
1193 > oper_flags_item: KILL ':' REMOTE
1194 > {
1195 >  if (conf_parser_ctx.pass == 2)
1196 >    block_state.port.value |= OPER_FLAG_KILL_REMOTE;
1197 > } | KILL
1198   {
1199    if (conf_parser_ctx.pass == 2)
1200 <    block_state.port.value |= OPER_FLAG_GLOBAL_KILL;
1201 < } | REMOTE
1200 >    block_state.port.value |= OPER_FLAG_KILL;
1201 > } | CONNECT ':' REMOTE
1202   {
1203    if (conf_parser_ctx.pass == 2)
1204 <    block_state.port.value |= OPER_FLAG_REMOTE;
1204 >    block_state.port.value |= OPER_FLAG_CONNECT_REMOTE;
1205 > } | CONNECT
1206 > {
1207 >  if (conf_parser_ctx.pass == 2)
1208 >    block_state.port.value |= OPER_FLAG_CONNECT;
1209 > } | SQUIT ':' REMOTE
1210 > {
1211 >  if (conf_parser_ctx.pass == 2)
1212 >    block_state.port.value |= OPER_FLAG_SQUIT_REMOTE;
1213 > } | SQUIT
1214 > {
1215 >  if (conf_parser_ctx.pass == 2)
1216 >    block_state.port.value |= OPER_FLAG_SQUIT;
1217   } | KLINE
1218   {
1219    if (conf_parser_ctx.pass == 2)
# Line 1230 | Line 1254 | oper_flags_item: GLOBAL_KILL
1254   {
1255    if (conf_parser_ctx.pass == 2)
1256      block_state.port.value |= OPER_FLAG_ADMIN;
1233 } | NICK_CHANGES
1234 {
1235  if (conf_parser_ctx.pass == 2)
1236    block_state.port.value |= OPER_FLAG_N;
1257   } | T_OPERWALL
1258   {
1259    if (conf_parser_ctx.pass == 2)
# Line 1242 | Line 1262 | oper_flags_item: GLOBAL_KILL
1262   {
1263    if (conf_parser_ctx.pass == 2)
1264      block_state.port.value |= OPER_FLAG_GLOBOPS;
1265 < } | OPER_SPY_T
1265 > } | T_WALLOPS
1266 > {
1267 >  if (conf_parser_ctx.pass == 2)
1268 >    block_state.port.value |= OPER_FLAG_WALLOPS;
1269 > } | T_LOCOPS
1270   {
1271    if (conf_parser_ctx.pass == 2)
1272 <    block_state.port.value |= OPER_FLAG_OPER_SPY;
1272 >    block_state.port.value |= OPER_FLAG_LOCOPS;
1273   } | REMOTEBAN
1274   {
1275    if (conf_parser_ctx.pass == 2)
# Line 1574 | Line 1598 | auth_entry: IRCD_AUTH
1598      if (block_state.rpass.buf[0])
1599        conf->passwd = xstrdup(block_state.rpass.buf);
1600      if (block_state.name.buf[0])
1601 <      conf->passwd = xstrdup(block_state.name.buf);
1601 >      conf->name = xstrdup(block_state.name.buf);
1602  
1603      conf->flags = block_state.flags.value;
1604      conf->port  = block_state.port.value;
# Line 1621 | Line 1645 | auth_encrypted: ENCRYPTED '=' TBOOL ';'
1645   auth_flags: IRCD_FLAGS
1646   {
1647    if (conf_parser_ctx.pass == 2)
1648 <    block_state.flags.value &= CONF_FLAGS_ENCRYPTED;
1648 >    block_state.flags.value &= (CONF_FLAGS_ENCRYPTED | CONF_FLAGS_SPOOF_IP);
1649   } '='  auth_flags_items ';';
1650  
1651   auth_flags_items: auth_flags_items ',' auth_flags_item | auth_flags_item;
# Line 1712 | Line 1736 | resv_entry: RESV
1736    strlcpy(block_state.rpass.buf, CONF_NOREASON, sizeof(block_state.rpass.buf));
1737   } '{' resv_items '}' ';'
1738   {
1739 <  if (IsChanPrefix(block_state.name.buf[0]))
1740 <    create_channel_resv(block_state.name.buf, block_state.rpass.buf, 1);
1741 <  else if (block_state.name.buf[0])
1742 <    create_nick_resv(block_state.name.buf, block_state.rpass.buf, 1);
1739 >  if (conf_parser_ctx.pass != 2)
1740 >    break;
1741 >
1742 >  create_resv(block_state.name.buf, block_state.rpass.buf, &block_state.mask.list);
1743   };
1744  
1745   resv_items:     resv_items resv_item | resv_item;
1746 < resv_item:      resv_reason | resv_channel | resv_nick | error ';' ;
1746 > resv_item:      resv_mask | resv_reason | resv_exempt | error ';' ;
1747  
1748 < resv_reason: REASON '=' QSTRING ';'
1748 > resv_mask: MASK '=' QSTRING ';'
1749   {
1750    if (conf_parser_ctx.pass == 2)
1751 <    strlcpy(block_state.rpass.buf, yylval.string, sizeof(block_state.rpass.buf));
1751 >    strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf));
1752   };
1753  
1754 < resv_channel: CHANNEL '=' QSTRING ';'
1754 > resv_reason: REASON '=' QSTRING ';'
1755   {
1756    if (conf_parser_ctx.pass == 2)
1757 <    strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf));
1757 >    strlcpy(block_state.rpass.buf, yylval.string, sizeof(block_state.rpass.buf));
1758   };
1759  
1760 < resv_nick: NICK '=' QSTRING ';'
1760 > resv_exempt: EXEMPT '=' QSTRING ';'
1761   {
1762    if (conf_parser_ctx.pass == 2)
1763 <    strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf));
1763 >    dlinkAdd(xstrdup(yylval.string), make_dlink_node(), &block_state.mask.list);
1764   };
1765  
1766 +
1767   /***************************************************************************
1768   *  section service
1769   ***************************************************************************/
# Line 1784 | Line 1809 | shared_entry: T_SHARED
1809    conf->flags = block_state.flags.value;
1810    conf->name = xstrdup(block_state.name.buf);
1811    conf->user = xstrdup(block_state.user.buf);
1812 <  conf->user = xstrdup(block_state.host.buf);
1812 >  conf->host = xstrdup(block_state.host.buf);
1813   };
1814  
1815   shared_items: shared_items shared_item | shared_item;
# Line 2160 | Line 2185 | kill_entry: KILL
2185        !block_state.host.buf[0])
2186      break;
2187  
2188 +  conf = conf_make(CONF_KLINE);
2189 +  conf->user = xstrdup(block_state.user.buf);
2190 +  conf->host = xstrdup(block_state.host.buf);
2191  
2192 <  if (block_state.port.value == 1)
2193 <  {
2166 < #ifdef HAVE_LIBPCRE
2167 <    void *exp_user = NULL;
2168 <    void *exp_host = NULL;
2169 <    const char *errptr = NULL;
2170 <
2171 <    if (!(exp_user = ircd_pcre_compile(block_state.user.buf, &errptr)) ||
2172 <        !(exp_host = ircd_pcre_compile(block_state.host.buf, &errptr)))
2173 <    {
2174 <      ilog(LOG_TYPE_IRCD, "Failed to add regular expression based K-Line: %s",
2175 <           errptr);
2176 <      break;
2177 <    }
2178 <
2179 <    conf = conf_make(CONF_RKLINE);
2180 <    conf->regexuser = exp_user;
2181 <    conf->regexhost = exp_host;
2182 <
2183 <    conf->user = xstrdup(block_state.user.buf);
2184 <    conf->host = xstrdup(block_state.host.buf);
2185 <
2186 <    if (block_state.rpass.buf[0])
2187 <      conf->reason = xstrdup(block_state.rpass.buf);
2188 <    else
2189 <      conf->reason = xstrdup(CONF_NOREASON);
2190 < #else
2191 <    ilog(LOG_TYPE_IRCD, "Failed to add regular expression based K-Line: no PCRE support");
2192 <    break;
2193 < #endif
2194 <  }
2192 >  if (block_state.rpass.buf[0])
2193 >    conf->reason = xstrdup(block_state.rpass.buf);
2194    else
2195 <  {
2196 <    conf = conf_make(CONF_KLINE);
2198 <
2199 <    conf->user = xstrdup(block_state.user.buf);
2200 <    conf->host = xstrdup(block_state.host.buf);
2201 <
2202 <    if (block_state.rpass.buf[0])
2203 <      conf->reason = xstrdup(block_state.rpass.buf);
2204 <    else
2205 <      conf->reason = xstrdup(CONF_NOREASON);
2206 <    add_conf_by_address(CONF_KLINE, conf);
2207 <  }
2195 >    conf->reason = xstrdup(CONF_NOREASON);
2196 >  add_conf_by_address(CONF_KLINE, conf);
2197   };
2198  
2210 kill_type: TYPE
2211 {
2212  if (conf_parser_ctx.pass == 2)
2213    block_state.port.value = 0;
2214 } '='  kill_type_items ';';
2215
2216 kill_type_items: kill_type_items ',' kill_type_item | kill_type_item;
2217 kill_type_item: REGEX_T
2218 {
2219  if (conf_parser_ctx.pass == 2)
2220    block_state.port.value = 1;
2221 };
2222
2199   kill_items:     kill_items kill_item | kill_item;
2200 < kill_item:      kill_user | kill_reason | kill_type | error;
2200 > kill_item:      kill_user | kill_reason | error;
2201  
2202   kill_user: USER '=' QSTRING ';'
2203   {
# Line 2333 | Line 2309 | gecos_entry: GECOS
2309    if (!block_state.name.buf[0])
2310      break;
2311  
2312 <  if (block_state.port.value == 1)
2337 <  {
2338 < #ifdef HAVE_LIBPCRE
2339 <    void *exp_p = NULL;
2340 <    const char *errptr = NULL;
2341 <
2342 <    if (!(exp_p = ircd_pcre_compile(block_state.name.buf, &errptr)))
2343 <    {
2344 <      ilog(LOG_TYPE_IRCD, "Failed to add regular expression based X-Line: %s",
2345 <           errptr);
2346 <      break;
2347 <    }
2348 <
2349 <    conf = conf_make(CONF_RXLINE);
2350 <    conf->regexuser = exp_p;
2351 < #else
2352 <    conf_error_report("Failed to add regular expression based X-Line: no PCRE support");
2353 <    break;
2354 < #endif
2355 <  }
2356 <  else
2357 <    conf = conf_make(CONF_XLINE);
2358 <
2312 >  conf = conf_make(CONF_XLINE);
2313    conf->name = xstrdup(block_state.name.buf);
2314  
2315    if (block_state.rpass.buf[0])
# Line 2364 | Line 2318 | gecos_entry: GECOS
2318      conf->reason = xstrdup(CONF_NOREASON);
2319   };
2320  
2367 gecos_flags: TYPE
2368 {
2369  if (conf_parser_ctx.pass == 2)
2370    block_state.port.value = 0;
2371 } '='  gecos_flags_items ';';
2372
2373 gecos_flags_items: gecos_flags_items ',' gecos_flags_item | gecos_flags_item;
2374 gecos_flags_item: REGEX_T
2375 {
2376  if (conf_parser_ctx.pass == 2)
2377    block_state.port.value = 1;
2378 };
2379
2321   gecos_items: gecos_items gecos_item | gecos_item;
2322 < gecos_item:  gecos_name | gecos_reason | gecos_flags | error;
2322 > gecos_item:  gecos_name | gecos_reason | error;
2323  
2324   gecos_name: NAME '=' QSTRING ';'
2325   {
# Line 2412 | Line 2353 | general_item:       general_hide_spoof_i
2353                      general_pace_wait_simple | general_stats_P_oper_only |
2354                      general_short_motd | general_no_oper_flood |
2355                      general_true_no_oper_flood | general_oper_pass_resv |
2415                    general_message_locale |
2356                      general_oper_only_umodes | general_max_targets |
2357                      general_use_egd | general_egdpool_path |
2358                      general_oper_umodes | general_caller_id_wait |
# Line 2622 | Line 2562 | general_oper_pass_resv: OPER_PASS_RESV '
2562    ConfigFileEntry.oper_pass_resv = yylval.number;
2563   };
2564  
2625 general_message_locale: MESSAGE_LOCALE '=' QSTRING ';'
2626 {
2627  if (conf_parser_ctx.pass == 2)
2628  {
2629    if (strlen(yylval.string) > LOCALE_LENGTH-2)
2630      yylval.string[LOCALE_LENGTH-1] = '\0';
2631
2632    set_locale(yylval.string);
2633  }
2634 };
2635
2565   general_dots_in_ident: DOTS_IN_IDENT '=' NUMBER ';'
2566   {
2567    ConfigFileEntry.dots_in_ident = $3;
# Line 2747 | Line 2676 | umode_oitem:     T_BOTS
2676   } | T_LOCOPS
2677   {
2678    ConfigFileEntry.oper_umodes |= UMODE_LOCOPS;
2679 + } | T_NONONREG
2680 + {
2681 +  ConfigFileEntry.oper_umodes |= UMODE_REGONLY;
2682 + } | T_FARCONNECT
2683 + {
2684 +  ConfigFileEntry.oper_umodes |= UMODE_FARCONNECT;
2685   };
2686  
2687   general_oper_only_umodes: OPER_ONLY_UMODES
# Line 2815 | Line 2750 | umode_item:    T_BOTS
2750   } | T_LOCOPS
2751   {
2752    ConfigFileEntry.oper_only_umodes |= UMODE_LOCOPS;
2753 + } | T_NONONREG
2754 + {
2755 +  ConfigFileEntry.oper_only_umodes |= UMODE_REGONLY;
2756 + } | T_FARCONNECT
2757 + {
2758 +  ConfigFileEntry.oper_only_umodes |= UMODE_FARCONNECT;
2759   };
2760  
2761   general_min_nonwildcard: MIN_NONWILDCARD '=' NUMBER ';'
# Line 2843 | Line 2784 | channel_items:      channel_items channe
2784   channel_item:       channel_max_bans |
2785                      channel_knock_delay | channel_knock_delay_channel |
2786                      channel_max_chans_per_user | channel_max_chans_per_oper |
2787 <                    channel_quiet_on_ban | channel_default_split_user_count |
2787 >                    channel_default_split_user_count |
2788                      channel_default_split_server_count |
2789 <                    channel_no_create_on_split | channel_restrict_channels |
2789 >                    channel_no_create_on_split |
2790                      channel_no_join_on_split |
2791                      channel_jflood_count | channel_jflood_time |
2792                      channel_disable_fake_channels | error;
# Line 2855 | Line 2796 | channel_disable_fake_channels: DISABLE_F
2796    ConfigChannel.disable_fake_channels = yylval.number;
2797   };
2798  
2858 channel_restrict_channels: RESTRICT_CHANNELS '=' TBOOL ';'
2859 {
2860  ConfigChannel.restrict_channels = yylval.number;
2861 };
2862
2799   channel_knock_delay: KNOCK_DELAY '=' timespec ';'
2800   {
2801    ConfigChannel.knock_delay = $3;
# Line 2880 | Line 2816 | channel_max_chans_per_oper: MAX_CHANS_PE
2816    ConfigChannel.max_chans_per_oper = $3;
2817   };
2818  
2883 channel_quiet_on_ban: QUIET_ON_BAN '=' TBOOL ';'
2884 {
2885  ConfigChannel.quiet_on_ban = yylval.number;
2886 };
2887
2819   channel_max_bans: MAX_BANS '=' NUMBER ';'
2820   {
2821    ConfigChannel.max_bans = $3;
# Line 2928 | Line 2859 | serverhide_entry: SERVERHIDE
2859  
2860   serverhide_items:   serverhide_items serverhide_item | serverhide_item;
2861   serverhide_item:    serverhide_flatten_links | serverhide_hide_servers |
2862 +                    serverhide_hide_services |
2863                      serverhide_links_delay |
2864                      serverhide_hidden | serverhide_hidden_name |
2865                      serverhide_hide_server_ips |
# Line 2945 | Line 2877 | serverhide_hide_servers: HIDE_SERVERS '=
2877      ConfigServerHide.hide_servers = yylval.number;
2878   };
2879  
2880 + serverhide_hide_services: HIDE_SERVICES '=' TBOOL ';'
2881 + {
2882 +  if (conf_parser_ctx.pass == 2)
2883 +    ConfigServerHide.hide_services = yylval.number;
2884 + };
2885 +
2886   serverhide_hidden_name: HIDDEN_NAME '=' QSTRING ';'
2887   {
2888    if (conf_parser_ctx.pass == 2)

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)