View | Details | Raw Unified | Return to bug 45898
Collapse All | Expand All

(-)src/parser.y (-3 / +119 lines)
Lines 90-95 Link Here
90
90
91
statements	: statement
91
statements	: statement
92
		| statements statement
92
		| statements statement
93
		;
93
94
94
statement	: logfile
95
statement	: logfile
95
		| accesslog
96
		| accesslog
Lines 153-158 Link Here
153
			yyerrok;
154
			yyerrok;
154
		  }
155
		  }
155
		| L_EOS
156
		| L_EOS
157
		;
156
158
157
logfile		: LOGFILE string L_EOS {
159
logfile		: LOGFILE string L_EOS {
158
			verb_printf("LOGFILE:\t<<%s>>\n", $2);
160
			verb_printf("LOGFILE:\t<<%s>>\n", $2);
Lines 208-235 Link Here
208
			}
210
			}
209
			free($7);
211
			free($7);
210
		}
212
		}
213
		;
211
214
212
userid		: USERID_T string L_EOS {
215
userid		: USERID_T string L_EOS {
213
			oops_user = $2;
216
			oops_user = $2;
214
		}
217
		}
218
		;
215
219
216
chroot		: CHROOT_T string L_EOS {
220
chroot		: CHROOT_T string L_EOS {
217
			oops_chroot = $2;
221
			oops_chroot = $2;
218
		}
222
		}
223
		;
219
224
220
blacklist	: BLACKLIST_T num L_EOS {
225
blacklist	: BLACKLIST_T num L_EOS {
221
			blacklist_len = $2;
226
			blacklist_len = $2;
222
		}
227
		}
228
		;
223
229
224
refuse_at	: REFUSE_AT_T num L_EOS {
230
refuse_at	: REFUSE_AT_T num L_EOS {
225
			refuse_at = $2;
231
			refuse_at = $2;
226
		}
232
		}
233
		;
234
227
start_red	: START_RED_T num L_EOS {
235
start_red	: START_RED_T num L_EOS {
228
			start_red = $2;
236
			start_red = $2;
229
		}
237
		}
238
		;
230
dont_cache_without_last_modified : DONT_CACHE_WITHOUT_LAST_MODIFIED_T L_EOS {
239
dont_cache_without_last_modified : DONT_CACHE_WITHOUT_LAST_MODIFIED_T L_EOS {
231
			dont_cache_without_last_modified = TRUE;
240
			dont_cache_without_last_modified = TRUE;
232
		}
241
		}
242
		;
233
243
234
insert_x_forwarded_for : INSERT_X_FORWARDED_FOR_T string L_EOS {
244
insert_x_forwarded_for : INSERT_X_FORWARDED_FOR_T string L_EOS {
235
			if ( !strcasecmp(yylval.STRPTR, "yes") )
245
			if ( !strcasecmp(yylval.STRPTR, "yes") )
Lines 241-246 Link Here
241
				printf("insert_x_forwarded_for can be 'yes' or 'no'\n");
251
				printf("insert_x_forwarded_for can be 'yes' or 'no'\n");
242
			free(yylval.STRPTR);
252
			free(yylval.STRPTR);
243
		}
253
		}
254
		;
244
255
245
fetch_with_client_speed : FETCH_WITH_CLIENT_SPEED_T string L_EOS {
256
fetch_with_client_speed : FETCH_WITH_CLIENT_SPEED_T string L_EOS {
246
			if ( !strcasecmp(yylval.STRPTR, "yes") )
257
			if ( !strcasecmp(yylval.STRPTR, "yes") )
Lines 252-257 Link Here
252
				printf("fetch_with_client_speed can be 'yes' or 'no'\n");
263
				printf("fetch_with_client_speed can be 'yes' or 'no'\n");
253
			free(yylval.STRPTR);
264
			free(yylval.STRPTR);
254
		}
265
		}
266
		;
255
267
256
insert_via	: INSERT_VIA_T string L_EOS {
268
insert_via	: INSERT_VIA_T string L_EOS {
257
			if ( !strcasecmp(yylval.STRPTR, "yes") )
269
			if ( !strcasecmp(yylval.STRPTR, "yes") )
Lines 263-268 Link Here
263
				printf("insert_via can be 'yes' or 'no'\n");
275
				printf("insert_via can be 'yes' or 'no'\n");
264
			free(yylval.STRPTR);
276
			free(yylval.STRPTR);
265
		}
277
		}
278
		;
266
279
267
accesslog	: ACCESSLOG string L_EOS {
280
accesslog	: ACCESSLOG string L_EOS {
268
			verb_printf("ACCESSLOG:\t<<%s>>\n", $2);
281
			verb_printf("ACCESSLOG:\t<<%s>>\n", $2);
Lines 320-325 Link Here
320
			}
333
			}
321
			free($7);
334
			free($7);
322
		}
335
		}
336
		;
323
337
324
refresh_pattern	: REFRESH_PATTERN_T string num string num L_EOS {
338
refresh_pattern	: REFRESH_PATTERN_T string num string num L_EOS {
325
			char	*buf;
339
			char	*buf;
Lines 334-356 Link Here
334
			free($2);
348
			free($2);
335
			free($4);
349
			free($4);
336
		}
350
		}
351
		;
352
		
337
bind_acl	: BIND_ACL_T STRING L_EOS {
353
bind_acl	: BIND_ACL_T STRING L_EOS {
338
			parse_bind_acl(yylval.STRPTR);
354
			parse_bind_acl(yylval.STRPTR);
339
			free(yylval.STRPTR);
355
			free(yylval.STRPTR);
340
		}
356
		}
357
		;
341
358
342
acl_allow	: ACL_ALLOW_T STRING L_EOS {
359
acl_allow	: ACL_ALLOW_T STRING L_EOS {
343
			parse_acl_access(&acl_allow, yylval.STRPTR);
360
			parse_acl_access(&acl_allow, yylval.STRPTR);
344
			free(yylval.STRPTR);
361
			free(yylval.STRPTR);
345
		}
362
		}
363
		;
364
346
acl_deny	: ACL_DENY_T  STRING L_EOS {
365
acl_deny	: ACL_DENY_T  STRING L_EOS {
347
			parse_acl_access(&acl_deny, yylval.STRPTR);
366
			parse_acl_access(&acl_deny, yylval.STRPTR);
348
			free(yylval.STRPTR);
367
			free(yylval.STRPTR);
349
		}
368
		}
369
		;
370
350
stop_cache_acl	: STOP_CACHE_ACL_T  STRING L_EOS {
371
stop_cache_acl	: STOP_CACHE_ACL_T  STRING L_EOS {
351
			parse_acl_access(&stop_cache_acl, yylval.STRPTR);
372
			parse_acl_access(&stop_cache_acl, yylval.STRPTR);
352
			free(yylval.STRPTR);
373
			free(yylval.STRPTR);
353
		}
374
		}
375
		;
376
354
acl		: ACL_T	STRING L_EOS {
377
acl		: ACL_T	STRING L_EOS {
355
			char		  *token, *p, *tptr;
378
			char		  *token, *p, *tptr;
356
			char		  *n=NULL, *type=NULL, *data=NULL;
379
			char		  *n=NULL, *type=NULL, *data=NULL;
Lines 409-426 Link Here
409
		done:;
432
		done:;
410
			free(yylval.STRPTR);
433
			free(yylval.STRPTR);
411
		}
434
		}
435
		;
412
436
413
statistics	: STATISTICS STRING L_EOS {
437
statistics	: STATISTICS STRING L_EOS {
414
			verb_printf("STATISTICS:\t<<%s>>\n", yylval.STRPTR);
438
			verb_printf("STATISTICS:\t<<%s>>\n", yylval.STRPTR);
415
			strncpy(statisticslog, yylval.STRPTR, sizeof(statisticslog)-1);
439
			strncpy(statisticslog, yylval.STRPTR, sizeof(statisticslog)-1);
416
			free(yylval.STRPTR);
440
			free(yylval.STRPTR);
417
		}
441
		}
442
		;
418
443
419
pidfile		: PIDFILE STRING L_EOS {
444
pidfile		: PIDFILE STRING L_EOS {
420
			verb_printf("PIDFILE:\t<<%s>>\n", yylval.STRPTR);
445
			verb_printf("PIDFILE:\t<<%s>>\n", yylval.STRPTR);
421
			strncpy(pidfile, yylval.STRPTR, sizeof(pidfile)-1);
446
			strncpy(pidfile, yylval.STRPTR, sizeof(pidfile)-1);
422
			free(yylval.STRPTR);
447
			free(yylval.STRPTR);
423
		}
448
		}
449
		;
424
450
425
nameserver	: NAMESERVER STRING L_EOS {
451
nameserver	: NAMESERVER STRING L_EOS {
426
			verb_printf("NAMESERVER:\t<<%s>>\n", yylval.STRPTR);
452
			verb_printf("NAMESERVER:\t<<%s>>\n", yylval.STRPTR);
Lines 438-443 Link Here
438
			}
464
			}
439
			free(yylval.STRPTR);
465
			free(yylval.STRPTR);
440
		}
466
		}
467
		;
441
468
442
connect_from	: CONNECT_FROM STRING L_EOS {
469
connect_from	: CONNECT_FROM STRING L_EOS {
443
			char	*p;
470
			char	*p;
Lines 447-529 Link Here
447
			while ( *p ) { *p=tolower(*p); p++; }
474
			while ( *p ) { *p=tolower(*p); p++; }
448
			verb_printf("CONNECT_FROM:\t<<%s>>\n", connect_from);
475
			verb_printf("CONNECT_FROM:\t<<%s>>\n", connect_from);
449
		}
476
		}
477
		;
450
478
451
stop_cache	: STOP_CACHE STRING L_EOS {
479
stop_cache	: STOP_CACHE STRING L_EOS {
452
			verb_printf("STOP_CACHE:\t<<%s>>\n", yylval.STRPTR);
480
			verb_printf("STOP_CACHE:\t<<%s>>\n", yylval.STRPTR);
453
			add_to_stop_cache(yylval.STRPTR);
481
			add_to_stop_cache(yylval.STRPTR);
454
		}
482
		}
483
		;
484
455
maxresident	: MAXRESIDENT NUMBER L_EOS {
485
maxresident	: MAXRESIDENT NUMBER L_EOS {
456
			verb_printf("MAXRESIDENT:\t %d\n", yylval.INT);
486
			verb_printf("MAXRESIDENT:\t %d\n", yylval.INT);
457
			maxresident = yylval.INT;
487
			maxresident = yylval.INT;
458
		}
488
		}
489
		;
459
490
460
minresident	: MINRESIDENT NUMBER L_EOS {
491
minresident	: MINRESIDENT NUMBER L_EOS {
461
			verb_printf("MINRESIDENT:\t %d\n", yylval.INT);
492
			verb_printf("MINRESIDENT:\t %d\n", yylval.INT);
462
			minresident = yylval.INT;
493
			minresident = yylval.INT;
463
		}
494
		}
495
		;
464
496
465
bind		: BIND_T string L_EOS {
497
bind		: BIND_T string L_EOS {
466
			bind_addr = $2;
498
			bind_addr = $2;
467
		}
499
		}
500
		;
468
501
469
http_port	: HTTP_PORT NUMBER L_EOS {
502
http_port	: HTTP_PORT NUMBER L_EOS {
470
			verb_printf("HTTP_PORT\t<<%d>>\n", yylval.INT);
503
			verb_printf("HTTP_PORT\t<<%d>>\n", yylval.INT);
471
			http_port = yylval.INT;
504
			http_port = yylval.INT;
472
		}
505
		}
506
		;
473
507
474
icp_port	: ICP_PORT NUMBER L_EOS {
508
icp_port	: ICP_PORT NUMBER L_EOS {
475
			verb_printf("ICP_PORT\t<<%d>>\n", yylval.INT);
509
			verb_printf("ICP_PORT\t<<%d>>\n", yylval.INT);
476
			icp_port = yylval.INT;
510
			icp_port = yylval.INT;
477
		}
511
		}
512
		;
478
513
479
icp_timeout	: ICP_TIMEOUT NUMBER L_EOS {
514
icp_timeout	: ICP_TIMEOUT NUMBER L_EOS {
480
			verb_printf("ICP_TIMEOUT\t<<%d>>\n", yylval.INT);
515
			verb_printf("ICP_TIMEOUT\t<<%d>>\n", yylval.INT);
481
			icp_timeout = 1000*yylval.INT;
516
			icp_timeout = 1000*yylval.INT;
482
		}
517
		}
518
		;
483
519
484
icons_host	: ICONS_HOST STRING L_EOS {
520
icons_host	: ICONS_HOST STRING L_EOS {
485
			verb_printf("ICONS_HOST:\t<<%s>>\n", yylval.STRPTR);
521
			verb_printf("ICONS_HOST:\t<<%s>>\n", yylval.STRPTR);
486
			strncpy(icons_host, yylval.STRPTR, sizeof(icons_host)-1);
522
			strncpy(icons_host, yylval.STRPTR, sizeof(icons_host)-1);
487
			free(yylval.STRPTR);
523
			free(yylval.STRPTR);
488
		}
524
		}
525
		;
489
526
490
icons_port	: ICONS_PORT NUMBER L_EOS {
527
icons_port	: ICONS_PORT NUMBER L_EOS {
491
			verb_printf("ICONS_PORT:\t<<%d>>\n", yylval.INT);
528
			verb_printf("ICONS_PORT:\t<<%d>>\n", yylval.INT);
492
			sprintf(icons_port, "%d", yylval.INT);
529
			sprintf(icons_port, "%d", yylval.INT);
493
		}
530
		}
531
		;
494
532
495
icons_path	: ICONS_PATH STRING L_EOS {
533
icons_path	: ICONS_PATH STRING L_EOS {
496
			verb_printf("ICONS_PATH:\t<<%s>>\n", yylval.STRPTR);
534
			verb_printf("ICONS_PATH:\t<<%s>>\n", yylval.STRPTR);
497
			strncpy(icons_path, yylval.STRPTR, sizeof(icons_path)-1);
535
			strncpy(icons_path, yylval.STRPTR, sizeof(icons_path)-1);
498
			free(yylval.STRPTR);
536
			free(yylval.STRPTR);
499
		}
537
		}
538
		;
500
539
501
always_check_freshness : ALWAYS_CHECK_FRESHNESS_T L_EOS {
540
always_check_freshness : ALWAYS_CHECK_FRESHNESS_T L_EOS {
502
			verb_printf("ALWAYS CHECK FRESHNESS\n");
541
			verb_printf("ALWAYS CHECK FRESHNESS\n");
503
			always_check_freshness = TRUE;
542
			always_check_freshness = TRUE;
504
		}
543
		}
544
		;
545
505
always_check_freshness_acl : ALWAYS_CHECK_FRESHNESS_ACL_T STRING L_EOS {
546
always_check_freshness_acl : ALWAYS_CHECK_FRESHNESS_ACL_T STRING L_EOS {
506
			verb_printf("ALWAYS CHECK FRESHNESS ACL\n");
547
			verb_printf("ALWAYS CHECK FRESHNESS ACL\n");
507
			parse_acl_access(&always_check_freshness_acl, yylval.STRPTR);
548
			parse_acl_access(&always_check_freshness_acl, yylval.STRPTR);
508
			free(yylval.STRPTR);
549
			free(yylval.STRPTR);
509
		}
550
		}
551
		;
510
552
511
force_http11	: FORCE_HTTP11_T L_EOS {
553
force_http11	: FORCE_HTTP11_T L_EOS {
512
			verb_printf("FORCE_HTTP11\n");
554
			verb_printf("FORCE_HTTP11\n");
513
			force_http11 = TRUE;
555
			force_http11 = TRUE;
514
		}
556
		}
557
		;
558
515
force_completion : FORCE_COMPLETION_T NUMBER L_EOS {
559
force_completion : FORCE_COMPLETION_T NUMBER L_EOS {
516
			verb_printf("FORCE_COMPLETION: %d%%\n", yylval.INT);
560
			verb_printf("FORCE_COMPLETION: %d%%\n", yylval.INT);
517
			force_completion = yylval.INT;
561
			force_completion = yylval.INT;
518
		}
562
		}
563
		;
564
519
last_modified_factor : LAST_MODIFIED_FACTOR_T NUMBER L_EOS {
565
last_modified_factor : LAST_MODIFIED_FACTOR_T NUMBER L_EOS {
520
			verb_printf("LAST_MODIFIED_FACTOR: %d\n", yylval.INT);
566
			verb_printf("LAST_MODIFIED_FACTOR: %d\n", yylval.INT);
521
			last_modified_factor = yylval.INT;
567
			last_modified_factor = yylval.INT;
522
		}
568
		}
569
		;
570
523
expire_value	: EXPIRE_VALUE NUMBER L_EOS {
571
expire_value	: EXPIRE_VALUE NUMBER L_EOS {
524
			verb_printf("EXPIRE_VALUE:\t<<%d days>>\n", yylval.INT);
572
			verb_printf("EXPIRE_VALUE:\t<<%d days>>\n", yylval.INT);
525
			default_expire_value=yylval.INT * 24 * 3600;
573
			default_expire_value=yylval.INT * 24 * 3600;
526
		}
574
		}
575
		;
527
576
528
expiretime	: EXPIRE_TIME_T string_list {
577
expiretime	: EXPIRE_TIME_T string_list {
529
		    struct	denytime		*denytime;
578
		    struct	denytime		*denytime;
Lines 537-566 Link Here
537
		    }
586
		    }
538
		    free_string_list($2);
587
		    free_string_list($2);
539
		}
588
		}
589
		;
590
540
max_expire_value : MAX_EXPIRE_VALUE_T NUMBER L_EOS {
591
max_expire_value : MAX_EXPIRE_VALUE_T NUMBER L_EOS {
541
			verb_printf("MAX_EXPIRE_VALUE:\t<<%d days>>\n", yylval.INT);
592
			verb_printf("MAX_EXPIRE_VALUE:\t<<%d days>>\n", yylval.INT);
542
			max_expire_value=yylval.INT * 24 * 3600;
593
			max_expire_value=yylval.INT * 24 * 3600;
543
		}
594
		}
595
		;
544
596
545
ftp_expire_value : FTP_EXPIRE_VALUE_T NUMBER L_EOS {
597
ftp_expire_value : FTP_EXPIRE_VALUE_T NUMBER L_EOS {
546
			verb_printf("FTP_EXPIRE_VALUE:\t<<%d days>>\n", yylval.INT);
598
			verb_printf("FTP_EXPIRE_VALUE:\t<<%d days>>\n", yylval.INT);
547
			ftp_expire_value=yylval.INT * 24 * 3600;
599
			ftp_expire_value=yylval.INT * 24 * 3600;
548
		}
600
		}
601
		;
549
602
550
expire_interval	: EXPIRE_INTERVAL NUMBER L_EOS {
603
expire_interval	: EXPIRE_INTERVAL NUMBER L_EOS {
551
			verb_printf("EXPIRE_INTERVAL:<<%d hours>>\n", yylval.INT);
604
			verb_printf("EXPIRE_INTERVAL:<<%d hours>>\n", yylval.INT);
552
			default_expire_interval=yylval.INT * 3600;
605
			default_expire_interval=yylval.INT * 3600;
553
		}
606
		}
607
		;
554
608
555
disk_low_free	: DISK_LOW_FREE_T NUMBER L_EOS {
609
disk_low_free	: DISK_LOW_FREE_T NUMBER L_EOS {
556
			verb_printf("DISK_LOW_FREE:\t<<%d %%>>\n", yylval.INT);
610
			verb_printf("DISK_LOW_FREE:\t<<%d %%>>\n", yylval.INT);
557
			disk_low_free=yylval.INT ;
611
			disk_low_free=yylval.INT ;
558
		}
612
		}
613
		;
559
614
560
disk_hi_free	: DISK_HI_FREE_T NUMBER L_EOS {
615
disk_hi_free	: DISK_HI_FREE_T NUMBER L_EOS {
561
			verb_printf("DISK_HI_FREE:\t<<%d %%>>\n", yylval.INT);
616
			verb_printf("DISK_HI_FREE:\t<<%d %%>>\n", yylval.INT);
562
			disk_hi_free=yylval.INT ;
617
			disk_hi_free=yylval.INT ;
563
		}
618
		}
619
		;
564
620
565
parent		: PARENT_T string num L_EOS{
621
parent		: PARENT_T string num L_EOS{
566
			verb_printf("PARENT: %s:%d\n", $2, $3);
622
			verb_printf("PARENT: %s:%d\n", $2, $3);
Lines 568-579 Link Here
568
			parent_port = $3;
624
			parent_port = $3;
569
			free($2);
625
			free($2);
570
		}
626
		}
627
		;
571
628
572
parent_auth	: PARENT_AUTH_T string L_EOS{
629
parent_auth	: PARENT_AUTH_T string L_EOS{
573
			verb_printf("PARENT_AUTH: %s\n", $2);
630
			verb_printf("PARENT_AUTH: %s\n", $2);
574
			parent_auth = base64_encode($2);
631
			parent_auth = base64_encode($2);
575
			free($2);
632
			free($2);
576
		}
633
		}
634
		;
577
635
578
local_domain	: LOCAL_DOMAIN_T domainlist L_EOS {
636
local_domain	: LOCAL_DOMAIN_T domainlist L_EOS {
579
		    struct domain_list *d;
637
		    struct domain_list *d;
Lines 591-596 Link Here
591
			    }
649
			    }
592
			}
650
			}
593
		}
651
		}
652
		;
594
653
595
local_networks	: LOCAL_NETWORKS_T network_list L_EOS {
654
local_networks	: LOCAL_NETWORKS_T network_list L_EOS {
596
		    struct cidr_net *n;
655
		    struct cidr_net *n;
Lines 607-653 Link Here
607
			    }
666
			    }
608
			}
667
			}
609
		}
668
		}
669
		;
610
670
611
dbhome		: DBHOME STRING L_EOS {
671
dbhome		: DBHOME STRING L_EOS {
612
			printf("WARNING!!!! dbhome must be moved to module berkeley_db\n");
672
			printf("WARNING!!!! dbhome must be moved to module berkeley_db\n");
613
			free(yylval.STRPTR);
673
			free(yylval.STRPTR);
614
		}
674
		}
675
		;
615
676
616
dbname		: DBNAME STRING L_EOS {
677
dbname		: DBNAME STRING L_EOS {
617
			printf("WARNING!!!! dbname must be moved to module berkeley_db\n");
678
			printf("WARNING!!!! dbname must be moved to module berkeley_db\n");
618
			free(yylval.STRPTR);
679
			free(yylval.STRPTR);
619
		}
680
		}
681
		;
620
682
621
db_cache_mem    : DB_CACHE_MEM num L_EOS {
683
db_cache_mem    : DB_CACHE_MEM num L_EOS {
622
			printf("WARNING!!!! db_cache_mem must be moved to module berkeley_db\n");
684
			printf("WARNING!!!! db_cache_mem must be moved to module berkeley_db\n");
623
		}
685
		}
686
		;
624
687
625
mem_max		: MEM_MAX num L_EOS {
688
mem_max		: MEM_MAX num L_EOS {
626
			verb_printf("MEM_MAX:\t<<%d>>\n", $2);
689
			verb_printf("MEM_MAX:\t<<%d>>\n", $2);
627
			mem_max_val = $2 ;
690
			mem_max_val = $2 ;
628
		}
691
		}
692
		;
629
693
630
lo_mark		: LO_MARK num L_EOS {
694
lo_mark		: LO_MARK num L_EOS {
631
			verb_printf("LO_MARK:\t<<%d>>\n", $2);
695
			verb_printf("LO_MARK:\t<<%d>>\n", $2);
632
			lo_mark_val = $2 ;
696
			lo_mark_val = $2 ;
633
		}
697
		}
698
		;
634
699
635
swap_advance	: SWAP_ADVANCE_T num L_EOS {
700
swap_advance	: SWAP_ADVANCE_T num L_EOS {
636
			verb_printf("SWAP_ADVANCE:\t<<%d>>\n", $2);
701
			verb_printf("SWAP_ADVANCE:\t<<%d>>\n", $2);
637
			swap_advance = $2 ;
702
			swap_advance = $2 ;
638
			if ( swap_advance <= 0 ) swap_advance = 1;
703
			if ( swap_advance <= 0 ) swap_advance = 1;
639
		}
704
		}
705
		;
640
706
641
hi_mark		: HI_MARK num L_EOS {
707
hi_mark		: HI_MARK num L_EOS {
642
			verb_printf("HI_MARK:\t<<%d>>\n", $2);
708
			verb_printf("HI_MARK:\t<<%d>>\n", $2);
643
			hi_mark_val = $2 ;
709
			hi_mark_val = $2 ;
644
		}
710
		}
711
		;
645
712
646
num		: NUMBER { $$ = yylval.INT;}
713
num		: NUMBER { $$ = yylval.INT;};
647
714
648
offset		: NUMBER { $$ = yylval.OFFSET;}
715
offset		: NUMBER { $$ = yylval.OFFSET;};
649
716
650
string		: STRING { $$ = yylval.STRPTR; }
717
string		: STRING { $$ = yylval.STRPTR; };
651
718
652
module		: MODULE module_name '{' mod_ops '}' L_EOS {
719
module		: MODULE module_name '{' mod_ops '}' L_EOS {
653
			struct string_list	*list = $4;
720
			struct string_list	*list = $4;
Lines 683-688 Link Here
683
			if ( mod && mod->config_end ) (*mod->config_end)(0);
750
			if ( mod && mod->config_end ) (*mod->config_end)(0);
684
			free($2);
751
			free($2);
685
		}
752
		}
753
		;
754
686
mod_ops		: mod_op {
755
mod_ops		: mod_op {
687
			$$ = $1;
756
			$$ = $1;
688
			verb_printf("mod_op: %s\n", $$->string);
757
			verb_printf("mod_op: %s\n", $$->string);
Lines 694-699 Link Here
694
			$$ = $1;
763
			$$ = $1;
695
			verb_printf("mod_op: %s\n", $2->string);
764
			verb_printf("mod_op: %s\n", $2->string);
696
		}
765
		}
766
		;
697
767
698
mod_op		: string {
768
mod_op		: string {
699
			struct string_list *new = xmalloc(sizeof(*new), "parser: mod_ops");
769
			struct string_list *new = xmalloc(sizeof(*new), "parser: mod_ops");
Lines 711-720 Link Here
711
			new->string = new_str;
781
			new->string = new_str;
712
			$$=new;
782
			$$=new;
713
		}
783
		}
784
		;
714
785
715
module_name	: STRING {
786
module_name	: STRING {
716
			$$ = yylval.STRPTR;
787
			$$ = yylval.STRPTR;
717
		}
788
		}
789
		;
718
790
719
791
720
storage		: STORAGE '{' st_ops '}' L_EOS {
792
storage		: STORAGE '{' st_ops '}' L_EOS {
Lines 746-751 Link Here
746
		    storage_size = 0;
818
		    storage_size = 0;
747
		    storage_offset = 0;
819
		    storage_offset = 0;
748
		}
820
		}
821
		;
749
822
750
peerconfig	: PEER_PARENT_T ';' {
823
peerconfig	: PEER_PARENT_T ';' {
751
			if ( !peerc_ptr )
824
			if ( !peerc_ptr )
Lines 803-811 Link Here
803
			$1->next = peerc_ptr->acls->deny;
876
			$1->next = peerc_ptr->acls->deny;
804
			peerc_ptr->acls->deny = $1;
877
			peerc_ptr->acls->deny = $1;
805
		  }
878
		  }
879
		;
806
880
807
peerops		: peerconfig {}
881
peerops		: peerconfig {}
808
		| peerops peerconfig {}
882
		| peerops peerconfig {}
883
		;
809
884
810
peer		: PEER_T string num num '{' peerops '}' L_EOS {
885
peer		: PEER_T string num num '{' peerops '}' L_EOS {
811
			struct	peer *peer,*p;
886
			struct	peer *peer,*p;
Lines 837-850 Link Here
837
			peer_c.type = PEER_SIBLING;
912
			peer_c.type = PEER_SIBLING;
838
			peerc_ptr = NULL;
913
			peerc_ptr = NULL;
839
		}
914
		}
915
		;
840
916
841
st_ops		: st_op {}
917
st_ops		: st_op {}
842
		| st_op st_ops {}
918
		| st_op st_ops {}
919
		;
843
920
844
st_op		: SIZE offset ';' { storage_size = $2; }
921
st_op		: SIZE offset ';' { storage_size = $2; }
845
		| SIZE AUTO_T ';' { storage_size = -1; }
922
		| SIZE AUTO_T ';' { storage_size = -1; }
846
		| STORAGE_OFFSET_T offset ';' {storage_offset = $2; }
923
		| STORAGE_OFFSET_T offset ';' {storage_offset = $2; }
847
		| PATH STRING ';' { storage_path = yylval.STRPTR; }
924
		| PATH STRING ';' { storage_path = yylval.STRPTR; }
925
		;
848
926
849
group		: GROUP group_name '{' group_ops '}' L_EOS {
927
group		: GROUP group_name '{' group_ops '}' L_EOS {
850
			struct	group_ops_struct *ops, *next_ops;
928
			struct	group_ops_struct *ops, *next_ops;
Lines 977-988 Link Here
977
                                g->next = new_grp;
1055
                                g->next = new_grp;
978
                        }
1056
                        }
979
		}
1057
		}
1058
		;
1059
980
group_name	: STRING {
1060
group_name	: STRING {
981
			$$ = yylval.STRPTR;
1061
			$$ = yylval.STRPTR;
982
		}
1062
		}
1063
		;
983
1064
984
group_ops	: group_op { $$ = $1;}
1065
group_ops	: group_op { $$ = $1;}
985
		| group_op group_ops { $1->next = $2; $$=$1;}
1066
		| group_op group_ops { $1->next = $2; $$=$1;}
1067
		;
986
1068
987
group_op	: NETWORKS network_list ';' {
1069
group_op	: NETWORKS network_list ';' {
988
			struct	group_ops_struct	*new;
1070
			struct	group_ops_struct	*new;
Lines 1034-1039 Link Here
1034
		| denytime	{ $$ = $1; }
1116
		| denytime	{ $$ = $1; }
1035
		| auth_mods	{ $$ = $1; }
1117
		| auth_mods	{ $$ = $1; }
1036
		| redir_mods	{ $$ = $1; }
1118
		| redir_mods	{ $$ = $1; }
1119
		;
1037
1120
1038
denytime	: DENYTIME_T string_list {
1121
denytime	: DENYTIME_T string_list {
1039
		    struct	group_ops_struct	*new_op;
1122
		    struct	group_ops_struct	*new_op;
Lines 1055-1060 Link Here
1055
			}
1138
			}
1056
			free_string_list($2);
1139
			free_string_list($2);
1057
		}
1140
		}
1141
		;
1142
1058
miss		: MISS_T DENY ';' {
1143
miss		: MISS_T DENY ';' {
1059
		    struct	group_ops_struct	*new_op;
1144
		    struct	group_ops_struct	*new_op;
1060
1145
Lines 1085-1090 Link Here
1085
			    $$ = new_op;
1170
			    $$ = new_op;
1086
			}
1171
			}
1087
		}
1172
		}
1173
		;
1088
1174
1089
auth_mods	: AUTH_MODS_T string_list ';' {
1175
auth_mods	: AUTH_MODS_T string_list ';' {
1090
		    struct	group_ops_struct	*new_op;
1176
		    struct	group_ops_struct	*new_op;
Lines 1101-1106 Link Here
1101
			    $$ = new_op;
1187
			    $$ = new_op;
1102
			}
1188
			}
1103
		}
1189
		}
1190
		;
1191
		
1104
redir_mods	: REDIR_MODS_T string_list ';' {
1192
redir_mods	: REDIR_MODS_T string_list ';' {
1105
		    struct	group_ops_struct	*new_op;
1193
		    struct	group_ops_struct	*new_op;
1106
1194
Lines 1116-1121 Link Here
1116
			    $$ = new_op;
1204
			    $$ = new_op;
1117
			}
1205
			}
1118
		}
1206
		}
1207
		;
1208
1119
bandwidth	: BANDWIDTH_T num ';' {
1209
bandwidth	: BANDWIDTH_T num ';' {
1120
		    struct	group_ops_struct	*new_op;
1210
		    struct	group_ops_struct	*new_op;
1121
1211
Lines 1131-1136 Link Here
1131
			    $$ = new_op;
1221
			    $$ = new_op;
1132
			}
1222
			}
1133
		}
1223
		}
1224
		;
1225
		
1134
per_sess_bw	: PER_SESS_BW_T num ';' {
1226
per_sess_bw	: PER_SESS_BW_T num ';' {
1135
		    struct	group_ops_struct	*new_op;
1227
		    struct	group_ops_struct	*new_op;
1136
1228
Lines 1146-1151 Link Here
1146
			    $$ = new_op;
1238
			    $$ = new_op;
1147
			}
1239
			}
1148
		}
1240
		}
1241
		;
1242
		
1149
per_ip_bw	: PER_IP_BW_T num ';' {
1243
per_ip_bw	: PER_IP_BW_T num ';' {
1150
		    struct	group_ops_struct	*new_op;
1244
		    struct	group_ops_struct	*new_op;
1151
1245
Lines 1161-1166 Link Here
1161
			    $$ = new_op;
1255
			    $$ = new_op;
1162
			}
1256
			}
1163
		}
1257
		}
1258
		;
1259
		
1164
per_ip_conn	: PER_IP_CONN_T num ';' {
1260
per_ip_conn	: PER_IP_CONN_T num ';' {
1165
		    struct	group_ops_struct	*new_op;
1261
		    struct	group_ops_struct	*new_op;
1166
1262
Lines 1176-1181 Link Here
1176
			    $$ = new_op;
1272
			    $$ = new_op;
1177
			}
1273
			}
1178
		}
1274
		}
1275
		;
1276
		
1179
conn_from	: CONN_FROM_T string ';' {
1277
conn_from	: CONN_FROM_T string ';' {
1180
		    struct	group_ops_struct	*new_op;
1278
		    struct	group_ops_struct	*new_op;
1181
1279
Lines 1205-1210 Link Here
1205
			$$ = new_op;
1303
			$$ = new_op;
1206
		    }
1304
		    }
1207
		}
1305
		}
1306
		;
1307
		
1208
range		: '[' num ':' num ']'  {
1308
range		: '[' num ':' num ']'  {
1209
			if ( !badp_p ) badp_p = &badports[0];
1309
			if ( !badp_p ) badp_p = &badports[0];
1210
			badp_p->from = $2;
1310
			badp_p->from = $2;
Lines 1242-1250 Link Here
1242
			    }
1342
			    }
1243
			    free($2);
1343
			    free($2);
1244
			}
1344
			}
1345
		;
1245
1346
1246
ranges		: range {}
1347
ranges		: range {}
1247
		| range ',' ranges {}
1348
		| range ',' ranges {}
1349
		;
1248
1350
1249
badports	: BADPORTS_T ranges ';' {
1351
badports	: BADPORTS_T ranges ';' {
1250
		    struct	group_ops_struct	*new_op;
1352
		    struct	group_ops_struct	*new_op;
Lines 1270-1275 Link Here
1270
			    }
1372
			    }
1271
			}
1373
			}
1272
		}
1374
		}
1375
		;
1273
1376
1274
icp		: ICP '{' deny_acls allow_acls '}' {
1377
icp		: ICP '{' deny_acls allow_acls '}' {
1275
			struct	acls			*new_acls;
1378
			struct	acls			*new_acls;
Lines 1371-1376 Link Here
1371
				}
1474
				}
1372
			}
1475
			}
1373
		}
1476
		}
1477
		;
1374
1478
1375
http		: HTTP '{' deny_acls allow_acls '}' {
1479
http		: HTTP '{' deny_acls allow_acls '}' {
1376
			struct	acls			*new_acls;
1480
			struct	acls			*new_acls;
Lines 1472-1479 Link Here
1472
				}
1576
				}
1473
			}
1577
			}
1474
		}
1578
		}
1579
		;
1580
1475
deny_acls	: deny_acl 			{ $$ = $1; }
1581
deny_acls	: deny_acl 			{ $$ = $1; }
1476
		| deny_acl deny_acls 		{ $2->next = $1 ; $$ = $2; }
1582
		| deny_acl deny_acls 		{ $2->next = $1 ; $$ = $2; }
1583
		;
1477
1584
1478
deny_acl	: DENY DSTDOMAIN string_list ';' { 
1585
deny_acl	: DENY DSTDOMAIN string_list ';' { 
1479
			struct acl *new = xmalloc(sizeof(*new), "parser: deny_acl new acl 2");
1586
			struct acl *new = xmalloc(sizeof(*new), "parser: deny_acl new acl 2");
Lines 1495-1503 Link Here
1495
			}
1602
			}
1496
			free_string_list($3);
1603
			free_string_list($3);
1497
		}
1604
		}
1605
		;
1498
1606
1499
allow_acls	: allow_acl 			{ $$ = $1; }
1607
allow_acls	: allow_acl 			{ $$ = $1; }
1500
		| allow_acl allow_acls 		{ $1->next = $2 ; $$ = $1; }
1608
		| allow_acl allow_acls 		{ $1->next = $2 ; $$ = $1; }
1609
		;
1501
1610
1502
allow_acl	: ALLOW  DSTDOMAIN string_list ';' {
1611
allow_acl	: ALLOW  DSTDOMAIN string_list ';' {
1503
			struct acl *new = xmalloc(sizeof(*new), "parser: allow_acl new acl 2");
1612
			struct acl *new = xmalloc(sizeof(*new), "parser: allow_acl new acl 2");
Lines 1519-1524 Link Here
1519
			}
1628
			}
1520
			free_string_list($3);
1629
			free_string_list($3);
1521
		}
1630
		}
1631
		;
1522
1632
1523
string_list	: string_list_e { $$ = $1; }
1633
string_list	: string_list_e { $$ = $1; }
1524
		| string_list_e string_list {
1634
		| string_list_e string_list {
Lines 1539-1544 Link Here
1539
				d = d->next;
1649
				d = d->next;
1540
			}
1650
			}
1541
		}
1651
		}
1652
		;
1542
1653
1543
string_list_e	: string {
1654
string_list_e	: string {
1544
		struct string_list	*new;
1655
		struct string_list	*new;
Lines 1551-1556 Link Here
1551
			$$ = new;
1662
			$$ = new;
1552
			free($1);
1663
			free($1);
1553
		}
1664
		}
1665
		;
1666
1554
domainlist	: domain {
1667
domainlist	: domain {
1555
			struct domain_list *d=$1;
1668
			struct domain_list *d=$1;
1556
			verb_printf("<%s>\n", d->domain);
1669
			verb_printf("<%s>\n", d->domain);
Lines 1588-1599 Link Here
1588
			new->next = NULL;
1701
			new->next = NULL;
1589
			$$ = new;
1702
			$$ = new;
1590
			}
1703
			}
1704
		;
1591
1705
1592
1706
1593
network_list	: network
1707
network_list	: network
1594
		| network network_list {
1708
		| network network_list {
1595
			$1->next = $2; $$ = $1;
1709
			$1->next = $2; $$ = $1;
1596
		}
1710
		}
1711
		;
1597
1712
1598
network		: NETWORK {
1713
network		: NETWORK {
1599
			char	*n, *l, *dot, *dot_holder, *t;
1714
			char	*n, *l, *dot, *dot_holder, *t;
Lines 1632-1637 Link Here
1632
			free(yylval.STRPTR);
1747
			free(yylval.STRPTR);
1633
			$$ = new;
1748
			$$ = new;
1634
		}
1749
		}
1750
		;
1635
1751
1636
1752
1637
%%
1753
%%

Return to bug 45898