~ubuntu-branches/ubuntu/trusty/syslog-ng/trusty-proposed

« back to all changes in this revision

Viewing changes to modules/affile/affile-grammar.y

  • Committer: Package Import Robot
  • Author(s): Laszlo Boszormenyi (GCS), Gergely Nagy
  • Date: 2011-10-11 14:30:48 UTC
  • mfrom: (1.3.7)
  • Revision ID: package-import@ubuntu.com-20111011143048-r1iljux9xbvj3lwh
Tags: 3.3.1.dfsg-1
* New upstream release with important fixes from upstream git tree with
  non-free manpages removed.
* Drop syslog-ng.conf(5) (closes: #496521).
* syslog-ng(8) is generated, and does not mention -Q anymore
  (closes: #616069).
* Supports CAP_SYSLOG on recent kernels (closes: #630172).
* Does not use g_timeout_add_seconds anymore (closes: #609154).

[ Gergely Nagy <algernon@madhouse-project.org> ]
* Update debian/copyright to DEP-5 format.
* Simplified the logrotate file by merging identical entries.
* Include local configuration files from /etc/syslog-ng/conf.d/ (Closes:
  #609050).
* Update syslog-ng.conf to be fully 3.3 compliant.
* Compress both source and binaries (except the syslog-ng meta
  package) with xz, instead of gzip.
* Use dpkg triggers to restart syslog-ng when appropriate.
* Include DFSG-free manual pages for all binaries.
* Build with Hardening enabled.
* Mention syslog(3) in /etc/default/syslog-ng, instead of
  <linux/kernel.h> (Closes: #608605)
* Support 'status' in the init script.
  Patch from Peter Eisentraut <petere@debian.org> (Closes: #644458)
* Build-Depend on libevtlog-dev (>= 0.2.12-5~) for correct shlibs.
* Use [linux-any] in Build-Depends instead of hardcoded links.
  (Closes: #634715)
* Use $SYSLOGNG_OPTS in the init script when reloading syslog-ng.
  (Closes: #589081)

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
#include "affile-grammar.h"
35
35
#include "syslog-names.h"
36
36
#include "messages.h"
 
37
#include "plugin.h"
37
38
 
38
39
#include <string.h>
39
40
 
40
 
extern LogReaderOptions *last_reader_options;
41
 
extern LogWriterOptions *last_writer_options;
42
 
 
43
41
}
44
42
 
45
43
%name-prefix "affile_"
49
47
 
50
48
%lex-param {CfgLexer *lexer}
51
49
%parse-param {CfgLexer *lexer}
52
 
%parse-param {LogDriver **last_driver}
 
50
%parse-param {LogDriver **instance}
 
51
%parse-param {gpointer arg}
53
52
 
54
53
 
55
54
%require "2.4.1"
87
86
          {                                                             \
88
87
            gchar __buf[256];                                           \
89
88
            g_snprintf(__buf, sizeof(__buf), errorfmt ? errorfmt : "x", ## __VA_ARGS__); \
90
 
            yyerror(& (token), lexer, NULL, __buf);                     \
 
89
            yyerror(& (token), lexer, NULL, NULL, __buf);               \
91
90
          }                                                             \
92
91
        YYERROR;                                                        \
93
92
      }                                                                 \
113
112
%token LL_CONTEXT_PRAGMA              11
114
113
%token LL_CONTEXT_FORMAT              12
115
114
%token LL_CONTEXT_TEMPLATE_FUNC       13
 
115
%token LL_CONTEXT_INNER_DEST          14
 
116
%token LL_CONTEXT_INNER_SRC           15
116
117
 
117
118
/* statements */
118
119
%token KW_SOURCE                      10000
147
148
 
148
149
%token KW_SYSLOG                      10060
149
150
 
150
 
 
151
151
/* option items */
152
152
%token KW_MARK_FREQ                   10071
153
153
%token KW_STATS_FREQ                  10072
191
191
%token KW_HOST_OVERRIDE               10166
192
192
 
193
193
%token KW_THROTTLE                    10170
 
194
%token KW_THREADED                    10171
194
195
 
195
196
/* log statement options */
196
197
%token KW_FLAGS                       10190
275
276
%token LL_EOL                         10428
276
277
%token LL_ERROR                       10429
277
278
 
 
279
/* value pairs */
 
280
%token KW_VALUE_PAIRS                 10500
 
281
%token KW_SELECT                      10501
 
282
%token KW_EXCLUDE                     10502
 
283
%token KW_PAIR                        10503
 
284
%token KW_KEY                         10504
 
285
%token KW_SCOPE                       10505
 
286
 
 
287
 
 
288
%type   <ptr> value_pair_option
278
289
 
279
290
%type   <num> yesno
280
291
%type   <num> dnsmode
318
329
source_affile_params
319
330
        : string
320
331
          {
321
 
            (*last_driver) = affile_sd_new($1, 0);
 
332
            last_driver = *instance = affile_sd_new($1, 0);
322
333
            free($1);
323
 
            last_reader_options = &((AFFileSourceDriver *) (*last_driver))->reader_options;
 
334
            last_reader_options = &((AFFileSourceDriver *) last_driver)->reader_options;
324
335
          }
325
 
          source_affile_options                 { $$ = (*last_driver); }
 
336
          source_affile_options                 { $$ = last_driver; }
326
337
        ;
327
338
 
328
339
source_affile_options
340
351
source_afpipe_params
341
352
        : string
342
353
          {
343
 
            (*last_driver) = affile_sd_new($1, AFFILE_PIPE);
 
354
            last_driver = *instance = affile_sd_new($1, AFFILE_PIPE);
344
355
            free($1);
345
 
            last_reader_options = &((AFFileSourceDriver *) (*last_driver))->reader_options;
 
356
            last_reader_options = &((AFFileSourceDriver *) last_driver)->reader_options;
346
357
          }
347
 
          source_afpipe_options                         { $$ = (*last_driver); }
 
358
          source_afpipe_options                         { $$ = last_driver; }
348
359
        ;
349
360
 
350
361
source_afpipe_options
353
364
        ;
354
365
 
355
366
source_afpipe_option
356
 
        : KW_OPTIONAL '(' yesno ')'                     { (*last_driver)->optional = $3; }
 
367
        : KW_OPTIONAL '(' yesno ')'                     { last_driver->optional = $3; }
357
368
        | source_reader_option
358
369
        ;
359
370
 
365
376
dest_affile_params
366
377
        : string
367
378
          {
368
 
            (*last_driver) = affile_dd_new($1, 0);
 
379
            last_driver = *instance = affile_dd_new($1, 0);
369
380
            free($1);
370
 
            last_writer_options = &((AFFileDestDriver *) (*last_driver))->writer_options;
 
381
            last_writer_options = &((AFFileDestDriver *) last_driver)->writer_options;
371
382
          }
372
 
          dest_affile_options                           { $$ = (*last_driver); }
 
383
          dest_affile_options                           { $$ = last_driver; }
373
384
        ;
374
385
 
375
386
dest_affile_options
379
390
 
380
391
dest_affile_option
381
392
        : dest_writer_option
382
 
        | KW_OPTIONAL '(' yesno ')'             { (*last_driver)->optional = $3; }
383
 
        | KW_OWNER '(' string_or_number ')'     { affile_dd_set_file_uid((*last_driver), $3); free($3); }
384
 
        | KW_GROUP '(' string_or_number ')'     { affile_dd_set_file_gid((*last_driver), $3); free($3); }
385
 
        | KW_PERM '(' LL_NUMBER ')'             { affile_dd_set_file_perm((*last_driver), $3); }
386
 
        | KW_DIR_OWNER '(' string_or_number ')' { affile_dd_set_dir_uid((*last_driver), $3); free($3); }
387
 
        | KW_DIR_GROUP '(' string_or_number ')' { affile_dd_set_dir_gid((*last_driver), $3); free($3); }
388
 
        | KW_DIR_PERM '(' LL_NUMBER ')'         { affile_dd_set_dir_perm((*last_driver), $3); }
389
 
        | KW_CREATE_DIRS '(' yesno ')'          { affile_dd_set_create_dirs((*last_driver), $3); }
390
 
        | KW_OVERWRITE_IF_OLDER '(' LL_NUMBER ')'       { affile_dd_set_overwrite_if_older((*last_driver), $3); }
391
 
        | KW_FSYNC '(' yesno ')'                { affile_dd_set_fsync((*last_driver), $3); }
392
 
        | KW_LOCAL_TIME_ZONE '(' string ')'     { affile_dd_set_local_time_zone((*last_driver), $3); free($3); }
 
393
        | dest_driver_option
 
394
        | KW_OPTIONAL '(' yesno ')'             { last_driver->optional = $3; }
 
395
        | KW_OWNER '(' string_or_number ')'     { affile_dd_set_file_uid(last_driver, $3); free($3); }
 
396
        | KW_OWNER '(' ')'                      { affile_dd_set_file_uid(last_driver, "-2"); }
 
397
        | KW_GROUP '(' string_or_number ')'     { affile_dd_set_file_gid(last_driver, $3); free($3); }
 
398
        | KW_GROUP '(' ')'                      { affile_dd_set_file_gid(last_driver, "-2"); }
 
399
        | KW_PERM '(' LL_NUMBER ')'             { affile_dd_set_file_perm(last_driver, $3); }
 
400
        | KW_PERM '(' ')'                       { affile_dd_set_file_perm(last_driver, -2); }
 
401
        | KW_DIR_OWNER '(' string_or_number ')' { affile_dd_set_dir_uid(last_driver, $3); free($3); }
 
402
        | KW_DIR_OWNER '(' ')'                  { affile_dd_set_dir_uid(last_driver, "-2"); }
 
403
        | KW_DIR_GROUP '(' string_or_number ')' { affile_dd_set_dir_gid(last_driver, $3); free($3); }
 
404
        | KW_DIR_GROUP '(' ')'                  { affile_dd_set_dir_gid(last_driver, "-2"); }
 
405
        | KW_DIR_PERM '(' LL_NUMBER ')'         { affile_dd_set_dir_perm(last_driver, $3); }
 
406
        | KW_DIR_PERM '(' ')'                   { affile_dd_set_dir_perm(last_driver, -2); }
 
407
        | KW_CREATE_DIRS '(' yesno ')'          { affile_dd_set_create_dirs(last_driver, $3); }
 
408
        | KW_OVERWRITE_IF_OLDER '(' LL_NUMBER ')'       { affile_dd_set_overwrite_if_older(last_driver, $3); }
 
409
        | KW_FSYNC '(' yesno ')'                { affile_dd_set_fsync(last_driver, $3); }
 
410
        | KW_LOCAL_TIME_ZONE '(' string ')'     { affile_dd_set_local_time_zone(last_driver, $3); free($3); }
393
411
        ;
394
412
 
395
413
dest_afpipe_params
396
414
        : string
397
415
          {
398
 
            (*last_driver) = affile_dd_new($1, AFFILE_PIPE);
 
416
            last_driver = *instance = affile_dd_new($1, AFFILE_PIPE);
399
417
            free($1);
400
 
            last_writer_options = &((AFFileDestDriver *) (*last_driver))->writer_options;
401
 
            last_writer_options->flush_lines = 0;
 
418
            last_writer_options = &((AFFileDestDriver *) last_driver)->writer_options;
402
419
          }
403
 
          dest_afpipe_options                   { $$ = (*last_driver); }
 
420
          dest_afpipe_options                   { $$ = last_driver; }
404
421
        ;
405
422
 
406
423
dest_afpipe_options
410
427
 
411
428
dest_afpipe_option
412
429
        : dest_writer_option
413
 
        | KW_OWNER '(' string_or_number ')'     { affile_dd_set_file_uid((*last_driver), $3); free($3); }
414
 
        | KW_GROUP '(' string_or_number ')'     { affile_dd_set_file_gid((*last_driver), $3); free($3); }
415
 
        | KW_PERM '(' LL_NUMBER ')'             { affile_dd_set_file_perm((*last_driver), $3); }
 
430
        | dest_driver_option
 
431
        | KW_OWNER '(' string_or_number ')'     { affile_dd_set_file_uid(last_driver, $3); free($3); }
 
432
        | KW_OWNER '(' ')'                      { affile_dd_set_file_uid(last_driver, "-2"); }
 
433
        | KW_GROUP '(' string_or_number ')'     { affile_dd_set_file_gid(last_driver, $3); free($3); }
 
434
        | KW_GROUP '(' ')'                      { affile_dd_set_file_gid(last_driver, "-2"); }
 
435
        | KW_PERM '(' LL_NUMBER ')'             { affile_dd_set_file_perm(last_driver, $3); }
 
436
        | KW_PERM '(' ')'                       { affile_dd_set_file_perm(last_driver, -2); }
416
437
        ;
417
438
 
418
439
 
477
498
        ;
478
499
 
479
500
 
 
501
/* LogSource related options */
 
502
source_option
 
503
        /* NOTE: plugins need to set "last_source_options" in order to incorporate this rule in their grammar */
 
504
        : KW_LOG_IW_SIZE '(' LL_NUMBER ')'      { last_source_options->init_window_size = $3; }
 
505
        | KW_CHAIN_HOSTNAMES '(' yesno ')'      { last_source_options->chain_hostnames = $3; }
 
506
        | KW_NORMALIZE_HOSTNAMES '(' yesno ')'  { last_source_options->normalize_hostnames = $3; }
 
507
        | KW_KEEP_HOSTNAME '(' yesno ')'        { last_source_options->keep_hostname = $3; }
 
508
        | KW_USE_FQDN '(' yesno ')'             { last_source_options->use_fqdn = $3; }
 
509
        | KW_USE_DNS '(' dnsmode ')'            { last_source_options->use_dns = $3; }
 
510
        | KW_DNS_CACHE '(' yesno ')'            { last_source_options->use_dns_cache = $3; }
 
511
        | KW_PROGRAM_OVERRIDE '(' string ')'    { last_source_options->program_override = g_strdup($3); free($3); }
 
512
        | KW_HOST_OVERRIDE '(' string ')'       { last_source_options->host_override = g_strdup($3); free($3); }
 
513
        | KW_LOG_PREFIX '(' string ')'          { gchar *p = strrchr($3, ':'); if (p) *p = 0; last_source_options->program_override = g_strdup($3); free($3); }
 
514
        | KW_KEEP_TIMESTAMP '(' yesno ')'       { last_source_options->keep_timestamp = $3; }
 
515
        | KW_TAGS '(' string_list ')'           { log_source_options_set_tags(last_source_options, $3); }
 
516
        ;
 
517
 
 
518
 
480
519
source_reader_options
481
520
        : source_reader_option source_reader_options
482
521
        |
483
522
        ;
484
523
 
 
524
/* LogReader related options, inherits from LogSource */
485
525
source_reader_option
486
 
        : KW_LOG_IW_SIZE '(' LL_NUMBER ')'              { last_reader_options->super.init_window_size = $3; }
487
 
        | KW_CHAIN_HOSTNAMES '(' yesno ')'      { last_reader_options->super.chain_hostnames = $3; }
488
 
        | KW_NORMALIZE_HOSTNAMES '(' yesno ')'  { last_reader_options->super.normalize_hostnames = $3; }
489
 
        | KW_KEEP_HOSTNAME '(' yesno ')'        { last_reader_options->super.keep_hostname = $3; }
490
 
        | KW_USE_FQDN '(' yesno ')'             { last_reader_options->super.use_fqdn = $3; }
491
 
        | KW_USE_DNS '(' dnsmode ')'            { last_reader_options->super.use_dns = $3; }
492
 
        | KW_DNS_CACHE '(' yesno ')'            { last_reader_options->super.use_dns_cache = $3; }
493
 
        | KW_PROGRAM_OVERRIDE '(' string ')'    { last_reader_options->super.program_override = g_strdup($3); free($3); }
494
 
        | KW_HOST_OVERRIDE '(' string ')'       { last_reader_options->super.host_override = g_strdup($3); free($3); }
495
 
        | KW_LOG_PREFIX '(' string ')'          { gchar *p = strrchr($3, ':'); if (p) *p = 0; last_reader_options->super.program_override = g_strdup($3); free($3); }
496
 
        | KW_TIME_ZONE '(' string ')'           { last_reader_options->parse_options.recv_time_zone = g_strdup($3); free($3); }
 
526
        /* NOTE: plugins need to set "last_reader_options" in order to incorporate this rule in their grammar */
 
527
 
 
528
        : KW_TIME_ZONE '(' string ')'           { last_reader_options->parse_options.recv_time_zone = g_strdup($3); free($3); }
497
529
        | KW_CHECK_HOSTNAME '(' yesno ')'       { last_reader_options->check_hostname = $3; }
498
530
        | KW_FLAGS '(' source_reader_option_flags ')'
499
531
        | KW_LOG_MSG_SIZE '(' LL_NUMBER ')'     { last_reader_options->msg_size = $3; }
500
532
        | KW_LOG_FETCH_LIMIT '(' LL_NUMBER ')'  { last_reader_options->fetch_limit = $3; }
501
533
        | KW_PAD_SIZE '(' LL_NUMBER ')'         { last_reader_options->padding = $3; }
502
 
        | KW_KEEP_TIMESTAMP '(' yesno ')'       { last_reader_options->super.keep_timestamp = $3; }
503
534
        | KW_ENCODING '(' string ')'            { last_reader_options->text_encoding = g_strdup($3); free($3); }
504
 
        | KW_TAGS '(' string_list ')'           { log_reader_options_set_tags(last_reader_options, $3); }
505
535
        | KW_FORMAT '(' string ')'              { last_reader_options->parse_options.format = g_strdup($3); free($3); }
506
536
        | KW_DEFAULT_LEVEL '(' level_string ')'
507
537
          {
515
545
              last_reader_options->parse_options.default_pri = LOG_NOTICE;
516
546
            last_reader_options->parse_options.default_pri = (last_reader_options->parse_options.default_pri & 7) | $3;
517
547
          }
 
548
        | { last_source_options = &last_reader_options->super; } source_option
518
549
        ;
519
550
 
520
551
source_reader_option_flags
521
552
        : string source_reader_option_flags     { CHECK_ERROR(log_reader_options_process_flag(last_reader_options, $1), @1, "Unknown flag %s", $1); free($1); }
 
553
        | KW_CHECK_HOSTNAME source_reader_option_flags     { log_reader_options_process_flag(last_reader_options, "check-hostname"); }
522
554
        |
523
555
        ;
524
556
 
 
557
dest_driver_option
 
558
        /* NOTE: plugins need to set "last_driver" in order to incorporate this rule in their grammar */
 
559
 
 
560
        : KW_LOG_FIFO_SIZE '(' LL_NUMBER ')'    { ((LogDestDriver *) last_driver)->log_fifo_size = $3; }
 
561
        | KW_THROTTLE '(' LL_NUMBER ')'         { ((LogDestDriver *) last_driver)->throttle = $3; }
 
562
        | LL_IDENTIFIER
 
563
          {
 
564
            Plugin *p;
 
565
            gint context = LL_CONTEXT_INNER_DEST;
 
566
            gpointer value;
 
567
 
 
568
            p = plugin_find(configuration, context, $1);
 
569
            CHECK_ERROR(p, @1, "%s plugin %s not found", cfg_lexer_lookup_context_name_by_type(context), $1);
 
570
 
 
571
            value = plugin_parse_config(p, configuration, &@1, last_driver);
 
572
 
 
573
            free($1);
 
574
            if (!value)
 
575
              {
 
576
                YYERROR;
 
577
              }
 
578
            log_driver_add_plugin(last_driver, (LogDriverPlugin *) value);
 
579
          }
 
580
        ;
 
581
 
525
582
dest_writer_options
526
583
        : dest_writer_option dest_writer_options
527
584
        |
528
585
        ;
529
586
 
530
587
dest_writer_option
 
588
        /* NOTE: plugins need to set "last_writer_options" in order to incorporate this rule in their grammar */
 
589
 
531
590
        : KW_FLAGS '(' dest_writer_options_flags ')' { last_writer_options->options = $3; }
532
 
        | KW_LOG_FIFO_SIZE '(' LL_NUMBER ')'    { last_writer_options->mem_fifo_size = $3; }
533
591
        | KW_FLUSH_LINES '(' LL_NUMBER ')'              { last_writer_options->flush_lines = $3; }
534
592
        | KW_FLUSH_TIMEOUT '(' LL_NUMBER ')'    { last_writer_options->flush_timeout = $3; }
535
593
        | KW_SUPPRESS '(' LL_NUMBER ')'            { last_writer_options->suppress = $3; }
536
594
        | KW_TEMPLATE '(' string ')'            {
537
595
                                                  GError *error = NULL;
538
596
 
539
 
                                                  last_writer_options->template = cfg_check_inline_template(configuration, $3);
540
 
                                                  CHECK_ERROR(log_template_compile(last_writer_options->template, &error), @3, "Error compiling template (%s)", error->message);
 
597
                                                  last_writer_options->template = cfg_check_inline_template(configuration, $3, &error);
 
598
                                                  CHECK_ERROR(last_writer_options->template != NULL, @3, "Error compiling template (%s)", error->message);
541
599
                                                  free($3);
542
600
                                                }
543
601
        | KW_TEMPLATE_ESCAPE '(' yesno ')'      { log_writer_options_set_template_escape(last_writer_options, $3); }
544
602
        | KW_TIME_ZONE '(' string ')'           { last_writer_options->template_options.time_zone[LTZ_SEND] = g_strdup($3); free($3); }
545
603
        | KW_TS_FORMAT '(' string ')'           { last_writer_options->template_options.ts_format = cfg_ts_format_value($3); free($3); }
546
604
        | KW_FRAC_DIGITS '(' LL_NUMBER ')'      { last_writer_options->template_options.frac_digits = $3; }
547
 
        | KW_THROTTLE '(' LL_NUMBER ')'         { last_writer_options->throttle = $3; }
 
605
        | KW_PAD_SIZE '(' LL_NUMBER ')'         { last_writer_options->padding = $3; }
548
606
        ;
549
607
 
550
608
dest_writer_options_flags
552
610
        |                                       { $$ = 0; }
553
611
        ;
554
612
 
 
613
value_pair_option
 
614
        : KW_VALUE_PAIRS
 
615
          { last_value_pairs = value_pairs_new(); }
 
616
          '(' vp_options ')'
 
617
          { $$ = last_value_pairs; }
 
618
        ;
 
619
 
 
620
vp_options
 
621
        : vp_option vp_options
 
622
        |
 
623
        ;
 
624
 
 
625
vp_option
 
626
        : KW_PAIR '(' string ':' string ')'      { value_pairs_add_pair(last_value_pairs, configuration, $3, $5); free($3); free($5); }
 
627
        | KW_PAIR '(' string string ')'          { value_pairs_add_pair(last_value_pairs, configuration, $3, $4); free($3); free($4); }
 
628
        | KW_KEY '(' string ')'             {
 
629
                gchar *k = g_strconcat("$", $3, NULL);
 
630
                value_pairs_add_pair(last_value_pairs, configuration, $3, k);
 
631
                g_free(k);
 
632
                free($3);
 
633
          }
 
634
        | KW_EXCLUDE '(' string ')'              { value_pairs_add_exclude_glob(last_value_pairs, $3); free($3); }
 
635
        | KW_SCOPE '(' vp_scope_list ')'
 
636
        ;
 
637
 
 
638
vp_scope_list
 
639
        : string vp_scope_list              { value_pairs_add_scope(last_value_pairs, $1); free($1); }
 
640
        |
 
641
        ;
 
642
 
555
643
 
556
644
%%