From a68bf830adf982141dc41b44ee7a66dafd45ae9f Mon Sep 17 00:00:00 2001 From: ian Date: Wed, 19 May 1999 23:13:44 +0000 Subject: [PATCH] New "shutdown" builtin service for terminating uservd. setenv emulation using putenv works properly (previously you would get wrong environment variable settings). (Thanks to Ben Harris.) Makefile bug fixed (tokens.h would sometimes not be rebuilt). --- INSTALL | 5 +- Makefile.in | 4 +- daemon.h | 2 +- debian/changelog | 3 + language.i4 | 1 + lexer.c | 942 ++++++++++++++++++++++++----------------------- lexer.l | 2 + overlord.c | 19 +- process.c | 32 +- servexec.c | 9 + spec.sgml | 11 +- tokens.h | 112 +++--- 12 files changed, 596 insertions(+), 546 deletions(-) diff --git a/INSTALL b/INSTALL index c7940ed..1399ae8 100644 --- a/INSTALL +++ b/INSTALL @@ -153,6 +153,9 @@ completeness and as programming documentation. example, if the client receives a fatal signal of some kind from its execution environment (eg its controlling terminal). + 10 - The per-request child wishes the server to check whether it is + still the uservd. + 12 - The service failed onm the service side in an expected and controlled manner, for example because it was rejected in the configuration files. @@ -170,7 +173,7 @@ completeness and as programming documentation. internal error occurred. This can also occur if an attempt to block signals using sigprocmask fails. - 0-3,5-7,9-11,13-15,17-19 are not currently used. + 0-3,5-7,9,11,13-15,17-19 are not currently used by normal children. REENTRANCY IN THE LIBC: diff --git a/Makefile.in b/Makefile.in index 58a4a5a..eb16251 100644 --- a/Makefile.in +++ b/Makefile.in @@ -126,8 +126,6 @@ version.h: Makefile tokens.h: language.i4 - rm -f *.o *~ core ./#*# - autoconf configure: autoheader autoconf @@ -136,7 +134,7 @@ clean: find -name '*.orig' -o -name '*~' -o -name '.*~' \ -o -name '*#' -o -name '.#*' -o -name '*.bak' \ | xargs -r rm - rm -rf $(TARGETS) *.o version.h + rm -rf $(TARGETS) *.o core version.h rm -f overview.eps rm -f spec.lout* spec.text* spec.ps?* spec.sgml.new rm -f lout.li *.ld *.lix *.ldx diff --git a/daemon.h b/daemon.h index 96ab37b..a8f5344 100644 --- a/daemon.h +++ b/daemon.h @@ -131,7 +131,7 @@ typedef void builtinserviceexec_fnt(const char *const *args); builtinserviceexec_fnt NONRETURNING bisexec_environment, bisexec_parameter; builtinserviceexec_fnt NONRETURNING bisexec_version, bisexec_help; builtinserviceexec_fnt NONRETURNING bisexec_toplevel, bisexec_override, bisexec_reset; -builtinserviceexec_fnt NONRETURNING bisexec_execute; +builtinserviceexec_fnt NONRETURNING bisexec_execute, bisexec_shutdown; extern const char *const builtinservicehelpstrings[]; void execservice(const int synchsocket[], int clientfd) NONRETURNING; diff --git a/debian/changelog b/debian/changelog index e2f0b35..e189458 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,7 +1,10 @@ userv (0.63) unstable; urgency=low + * New "shutdown" builtin service for terminating uservd. + * setenv emulation using putenv works properly (previously you would get wrong environment variable settings). (Thanks to Ben Harris.) + * Makefile bug fixed (tokens.h would sometimes not be rebuilt). -- diff --git a/language.i4 b/language.i4 index 295a5da..d660b27 100644 --- a/language.i4 +++ b/language.i4 @@ -162,6 +162,7 @@ isbuiltinservice(`parameter',`parameter',`',` ') isbuiltinservice(`version',`none') isbuiltinservice(`toplevel',`none') isbuiltinservice(`override',`none') +isbuiltinservice(`shutdown',`none') dnl builtin services that are also directive names define(`isdirectivebuiltinservice', diff --git a/lexer.c b/lexer.c index 1a94c7b..6d2c63d 100644 --- a/lexer.c +++ b/lexer.c @@ -285,73 +285,73 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 103 -#define YY_END_OF_BUFFER 104 -static yyconst short int yy_accept[572] = +#define YY_NUM_RULES 104 +#define YY_END_OF_BUFFER 105 +static yyconst short int yy_accept[579] = { 0, - 0, 0, 104, 102, 96, 97, 89, 101, 99, 86, - 90, 87, 88, 93, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 91, 102, 96, 97, - 99, 101, 101, 100, 101, 99, 99, 98, 95, 93, - 102, 102, 102, 102, 19, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 37, 102, 102, 102, 102, - 32, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 100, 101, 101, 101, - - 101, 0, 101, 101, 94, 93, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 31, 62, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 70, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 101, 101, 100, 0, 101, 101, 94, 93, 102, - 102, 102, 66, 102, 102, 63, 67, 102, 102, 102, - 35, 36, 102, 102, 102, 102, 40, 42, 102, 50, - 102, 102, 59, 69, 102, 71, 102, 72, 102, 102, - - 102, 102, 102, 102, 102, 30, 102, 84, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 74, 75, - 102, 61, 102, 101, 101, 0, 0, 0, 101, 94, - 93, 102, 64, 102, 102, 102, 102, 102, 58, 102, - 65, 102, 92, 102, 38, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 41, 102, 102, - 48, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 85, 101, 0, 0, 94, 93, 102, 102, 102, - 102, 102, 68, 102, 102, 102, 102, 102, 102, 69, - 76, 77, 78, 79, 80, 81, 82, 83, 102, 102, - - 102, 102, 60, 102, 102, 102, 1, 102, 102, 102, - 102, 39, 102, 73, 102, 102, 102, 102, 0, 94, - 93, 102, 102, 102, 102, 102, 102, 102, 102, 49, - 102, 21, 26, 102, 102, 102, 10, 102, 102, 102, - 102, 102, 51, 102, 102, 102, 102, 45, 61, 94, - 93, 102, 9, 66, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 47, 102, 102, 102, - 102, 102, 102, 46, 102, 94, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 12, 102, 102, 102, - 102, 102, 102, 44, 11, 102, 102, 102, 102, 102, - - 102, 94, 102, 102, 102, 102, 102, 33, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 8, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 43, 34, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 20, 102, - 102, 102, 102, 52, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 55, 102, 102, - 102, 102, 102, 53, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 56, 102, 102, - 15, 102, 102, 102, 102, 17, 7, 102, 102, 102, - - 102, 102, 102, 102, 23, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 4, 102, 102, 102, - 22, 102, 102, 102, 102, 102, 13, 102, 102, 102, - 102, 5, 6, 102, 102, 102, 102, 102, 102, 16, - 102, 102, 102, 102, 102, 102, 3, 25, 102, 18, - 102, 102, 102, 27, 102, 54, 102, 24, 14, 57, - 102, 102, 102, 102, 28, 102, 102, 102, 29, 2, - 0 + 0, 0, 105, 103, 97, 98, 90, 102, 100, 87, + 91, 88, 89, 94, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 92, 103, 97, 98, + 100, 102, 102, 101, 102, 100, 100, 99, 96, 94, + 103, 103, 103, 103, 19, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 37, 103, 103, 103, 103, + 32, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 101, 102, 102, + + 102, 102, 0, 102, 102, 95, 94, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 31, 63, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 71, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 102, 102, 101, 0, 102, 102, 95, + 94, 103, 103, 103, 67, 103, 103, 64, 68, 103, + 103, 103, 35, 36, 103, 103, 103, 103, 40, 42, + 103, 51, 103, 103, 60, 70, 103, 72, 103, 73, + + 103, 103, 103, 103, 103, 103, 103, 30, 103, 85, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 75, 76, 103, 62, 103, 102, 102, 0, 0, + 0, 102, 95, 94, 103, 65, 103, 103, 103, 103, + 103, 59, 103, 66, 103, 93, 103, 38, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 41, 103, 103, 49, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 86, 102, 0, 0, 95, + 94, 103, 103, 103, 103, 103, 69, 103, 103, 103, + 103, 103, 103, 70, 77, 78, 79, 80, 81, 82, + + 83, 84, 103, 103, 103, 103, 61, 103, 103, 103, + 1, 103, 103, 103, 103, 103, 39, 103, 74, 103, + 103, 103, 103, 0, 95, 94, 103, 103, 103, 103, + 103, 103, 103, 103, 50, 103, 21, 26, 103, 103, + 103, 10, 103, 103, 103, 103, 103, 52, 103, 103, + 103, 103, 103, 45, 62, 95, 94, 103, 9, 67, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 47, 103, 103, 103, 103, 103, 48, 103, + 46, 103, 95, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 12, 103, 103, 103, 103, 103, 103, + + 44, 11, 103, 103, 103, 103, 103, 103, 95, 103, + 103, 103, 103, 103, 33, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 8, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 43, + 34, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 20, 103, 103, 103, 103, + 53, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 56, 103, 103, 103, 103, 103, + 54, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 57, 103, 103, 15, 103, 103, + + 103, 103, 17, 7, 103, 103, 103, 103, 103, 103, + 103, 23, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 4, 103, 103, 103, 22, 103, 103, + 103, 103, 103, 13, 103, 103, 103, 103, 5, 6, + 103, 103, 103, 103, 103, 103, 16, 103, 103, 103, + 103, 103, 103, 3, 25, 103, 18, 103, 103, 103, + 27, 103, 55, 103, 24, 14, 58, 103, 103, 103, + 103, 28, 103, 103, 103, 29, 2, 0 } ; static yyconst int yy_ec[256] = @@ -396,253 +396,254 @@ static yyconst int yy_meta[52] = 1 } ; -static yyconst short int yy_base[582] = +static yyconst short int yy_base[589] = { 0, - 0, 0, 917, 0, 50, 918, 0, 52, 56, 0, - 0, 0, 0, 64, 883, 19, 44, 37, 51, 882, - 25, 36, 64, 885, 34, 67, 62, 867, 887, 866, - 75, 68, 871, 60, 880, 73, 0, 0, 106, 918, - 905, 109, 101, 905, 132, 116, 903, 918, 168, 177, - 867, 87, 860, 24, 0, 87, 874, 876, 858, 88, - 871, 853, 868, 855, 867, 0, 856, 865, 849, 856, - 0, 853, 95, 848, 862, 846, 854, 843, 838, 115, - 848, 854, 98, 849, 843, 130, 114, 841, 839, 835, - 837, 847, 848, 832, 831, 839, 0, 198, 869, 0, - - 126, 134, 245, 265, 283, 292, 843, 827, 829, 835, - 830, 838, 820, 825, 825, 816, 833, 829, 829, 815, - 823, 0, 816, 827, 827, 812, 826, 810, 810, 812, - 808, 808, 820, 0, 808, 800, 799, 132, 808, 804, - 797, 805, 812, 792, 804, 806, 804, 787, 802, 785, - 783, 816, 785, 786, 789, 788, 781, 782, 778, 782, - 775, 301, 318, 918, 348, 384, 393, 411, 420, 782, - 773, 769, 775, 781, 781, 0, 0, 773, 780, 771, - 0, 0, 778, 766, 765, 761, 0, 0, 778, 0, - 762, 758, 0, 773, 765, 0, 775, 0, 766, 132, - - 771, 785, 754, 768, 757, 0, 764, 0, 765, 758, - 746, 747, 755, 758, 744, 743, 745, 754, 770, 0, - 748, 747, 750, 429, 438, 135, 0, 464, 200, 482, - 491, 733, 0, 765, 734, 737, 762, 735, 0, 734, - 0, 732, 727, 725, 0, 739, 739, 730, 500, 734, - 721, 719, 722, 732, 730, 726, 729, 0, 713, 714, - 0, 722, 727, 715, 723, 722, 719, 703, 706, 708, - 708, 0, 139, 0, 508, 526, 535, 717, 714, 710, - 711, 700, 0, 702, 701, 726, 708, 724, 706, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 705, 706, - - 720, 691, 0, 702, 701, 684, 715, 697, 681, 695, - 677, 0, 679, 0, 692, 693, 681, 687, 198, 544, - 553, 688, 688, 669, 702, 668, 683, 674, 123, 698, - 679, 696, 0, 668, 677, 663, 0, 675, 674, 672, - 689, 651, 687, 665, 654, 660, 665, 0, 0, 562, - 682, 681, 0, 0, 134, 659, 664, 661, 644, 649, - 140, 659, 194, 648, 647, 655, 0, 641, 654, 651, - 179, 638, 667, 0, 645, 571, 198, 635, 633, 631, - 630, 635, 629, 659, 625, 627, 0, 635, 637, 627, - 627, 618, 620, 0, 0, 634, 619, 617, 620, 633, - - 621, 0, 620, 606, 611, 614, 623, 0, 639, 606, - 617, 100, 615, 608, 604, 616, 605, 614, 609, 598, - 0, 601, 610, 600, 595, 607, 602, 591, 604, 587, - 589, 598, 0, 0, 596, 125, 592, 590, 597, 577, - 588, 592, 573, 599, 554, 553, 557, 501, 0, 502, - 461, 434, 435, 462, 428, 436, 443, 427, 418, 449, - 390, 383, 350, 350, 354, 367, 351, 378, 360, 345, - 349, 347, 373, 0, 341, 343, 353, 352, 344, 346, - 198, 334, 334, 336, 363, 336, 331, 0, 329, 333, - 0, 316, 321, 316, 325, 0, 0, 314, 316, 316, - - 320, 327, 303, 286, 317, 296, 290, 295, 293, 280, - 277, 247, 249, 246, 232, 242, 0, 230, 227, 227, - 0, 243, 212, 227, 212, 225, 0, 226, 219, 221, - 214, 0, 0, 220, 216, 196, 208, 202, 202, 0, - 203, 198, 205, 202, 198, 206, 0, 0, 196, 0, - 187, 193, 190, 0, 173, 0, 164, 0, 0, 0, - 177, 177, 165, 145, 0, 134, 141, 119, 0, 0, - 918, 592, 596, 600, 604, 608, 612, 616, 620, 138, - 67 + 0, 0, 924, 0, 50, 925, 0, 52, 56, 0, + 0, 0, 0, 64, 890, 19, 44, 37, 51, 889, + 25, 36, 64, 892, 34, 67, 62, 874, 894, 873, + 75, 74, 878, 65, 887, 72, 0, 0, 109, 925, + 912, 115, 104, 912, 138, 119, 910, 925, 174, 183, + 874, 69, 867, 24, 0, 85, 881, 883, 865, 92, + 878, 860, 875, 862, 874, 0, 863, 872, 856, 863, + 0, 860, 99, 855, 869, 853, 861, 850, 845, 101, + 855, 861, 90, 856, 850, 136, 104, 842, 847, 845, + 841, 843, 853, 854, 838, 837, 845, 0, 204, 875, + + 0, 131, 139, 251, 271, 289, 298, 849, 833, 835, + 841, 836, 844, 826, 831, 831, 822, 839, 835, 835, + 821, 829, 0, 822, 833, 833, 818, 832, 816, 816, + 818, 814, 814, 826, 0, 814, 806, 805, 121, 814, + 810, 803, 811, 818, 798, 810, 812, 810, 793, 808, + 791, 789, 822, 789, 790, 791, 794, 793, 786, 787, + 783, 787, 780, 307, 324, 925, 354, 390, 399, 417, + 426, 787, 778, 774, 780, 786, 786, 0, 0, 778, + 785, 776, 0, 0, 783, 771, 770, 766, 0, 0, + 783, 0, 767, 763, 0, 778, 770, 0, 780, 0, + + 771, 118, 776, 790, 759, 773, 762, 0, 769, 0, + 770, 763, 751, 752, 760, 763, 763, 748, 747, 749, + 758, 774, 0, 752, 751, 754, 435, 444, 134, 0, + 470, 206, 488, 497, 737, 0, 769, 738, 741, 766, + 739, 0, 738, 0, 736, 731, 729, 0, 743, 743, + 734, 506, 738, 725, 723, 726, 736, 734, 730, 733, + 0, 717, 718, 0, 726, 731, 719, 717, 726, 725, + 722, 706, 709, 711, 711, 0, 145, 0, 514, 532, + 541, 720, 717, 713, 714, 703, 0, 705, 704, 729, + 711, 727, 709, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 708, 709, 723, 694, 0, 705, 704, 687, + 718, 700, 684, 698, 680, 678, 0, 681, 0, 694, + 695, 683, 689, 160, 550, 559, 690, 690, 671, 704, + 670, 685, 676, 127, 700, 681, 698, 0, 670, 679, + 665, 0, 677, 676, 674, 691, 653, 689, 667, 661, + 655, 661, 666, 0, 0, 568, 683, 682, 0, 0, + 135, 660, 665, 662, 645, 650, 143, 660, 148, 649, + 648, 656, 0, 642, 655, 652, 182, 639, 0, 668, + 0, 646, 577, 185, 636, 634, 632, 631, 636, 630, + 660, 626, 628, 0, 636, 638, 628, 628, 619, 621, + + 0, 0, 635, 620, 618, 621, 634, 622, 0, 621, + 607, 612, 615, 624, 0, 640, 607, 618, 100, 616, + 609, 605, 617, 606, 615, 610, 599, 0, 602, 611, + 601, 596, 608, 603, 592, 605, 588, 590, 599, 0, + 0, 596, 165, 589, 584, 588, 557, 566, 573, 496, + 525, 449, 440, 444, 449, 0, 450, 451, 435, 436, + 456, 422, 387, 394, 358, 356, 387, 371, 364, 351, + 351, 355, 368, 352, 379, 361, 346, 350, 348, 374, + 0, 342, 344, 354, 353, 345, 347, 203, 335, 335, + 337, 354, 327, 322, 0, 320, 324, 0, 317, 322, + + 317, 326, 0, 0, 306, 297, 297, 301, 308, 293, + 287, 318, 263, 246, 251, 249, 236, 267, 248, 250, + 246, 232, 232, 0, 220, 217, 218, 0, 234, 213, + 228, 213, 226, 0, 227, 218, 220, 213, 0, 0, + 219, 215, 197, 209, 204, 204, 0, 205, 201, 208, + 205, 201, 209, 0, 0, 199, 0, 190, 197, 194, + 0, 180, 0, 171, 0, 0, 0, 180, 156, 143, + 145, 0, 133, 143, 123, 0, 0, 925, 598, 602, + 606, 610, 614, 618, 622, 626, 138, 67 } ; -static yyconst short int yy_def[582] = +static yyconst short int yy_def[589] = { 0, - 571, 1, 571, 572, 571, 571, 572, 573, 574, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 571, 571, - 575, 573, 576, 577, 573, 574, 575, 571, 572, 14, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 578, 576, 577, 578, - - 578, 579, 577, 573, 572, 14, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 578, 576, 571, 579, 103, 104, 572, 14, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 578, 163, 571, 580, 579, 573, 572, - 14, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 576, 581, 228, 572, 14, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 579, 572, - 14, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 0, 571, 571, 571, 571, 571, 571, 571, 571, 571, - 571 + 578, 1, 578, 579, 578, 578, 579, 580, 581, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 578, 578, + 582, 580, 583, 584, 580, 581, 582, 578, 579, 14, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 585, 583, 584, + + 585, 585, 586, 584, 580, 579, 14, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 585, 583, 578, 586, 104, 105, 579, + 14, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 585, 165, 578, 587, + 586, 580, 579, 14, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 583, 588, 231, 579, + 14, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 586, 579, 14, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 579, 579, 579, 0, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578 } ; -static yyconst short int yy_nxt[970] = +static yyconst short int yy_nxt[977] = { 0, 4, 5, 6, 7, 8, 9, 10, 4, 11, 12, 13, 4, 14, 14, 14, 14, 14, 14, 14, 14, 14, 4, 4, 15, 16, 4, 17, 18, 19, 20, 21, 22, 23, 4, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 4, 4, 4, - 37, 39, 40, 43, 52, 41, 44, 47, 48, 111, - 67, 57, 69, 53, 70, 58, 68, 112, 54, 59, - 102, 55, 75, 76, 45, 49, 50, 50, 50, 50, + 37, 39, 40, 43, 52, 41, 44, 47, 48, 112, + 67, 57, 69, 53, 70, 58, 68, 113, 54, 59, + 103, 55, 75, 76, 45, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 56, 60, 61, 62, 63, - 79, 77, 64, 71, 72, 78, 87, 95, 65, 85, - - 80, 73, 92, 86, 93, 97, 81, 39, 40, 88, - 43, 41, 89, 44, 96, 108, 90, 47, 48, 113, - 118, 130, 109, 98, 131, 114, 138, 101, 102, 435, - 119, 45, 99, 101, 102, 142, 226, 102, 164, 143, - 150, 274, 436, 97, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 99, 146, 151, 165, 152, 139, 199, - 252, 98, 359, 147, 378, 385, 360, 570, 457, 386, - 148, 569, 149, 458, 200, 568, 253, 567, 379, 104, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, - 106, 106, 106, 106, 106, 106, 106, 106, 100, 101, - - 102, 43, 164, 566, 44, 565, 564, 563, 562, 397, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 100, - 165, 388, 45, 398, 403, 501, 389, 561, 560, 390, - 559, 558, 557, 556, 555, 554, 553, 502, 552, 551, - 404, 550, 405, 549, 548, 163, 100, 547, 546, 545, - 544, 543, 542, 541, 540, 539, 538, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 43, 537, 536, 44, - 535, 534, 533, 532, 531, 530, 529, 167, 167, 167, - 167, 167, 167, 167, 167, 167, 167, 45, 528, 167, - 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, - - 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 97, 527, 526, 525, 524, 523, 522, 521, - 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, - 98, 520, 225, 225, 225, 225, 225, 225, 571, 226, - 102, 519, 518, 517, 516, 515, 514, 513, 512, 511, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 571, - 510, 509, 508, 507, 506, 505, 504, 503, 500, 499, - 498, 497, 496, 495, 494, 493, 492, 491, 490, 489, - 488, 487, 486, 485, 484, 228, 42, 42, 42, 42, - - 42, 42, 42, 42, 42, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 483, 482, 229, 229, 229, - 229, 229, 229, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 231, 231, 231, 231, 231, 231, 231, 231, - 231, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, - 481, 480, 273, 273, 273, 273, 273, 273, 164, 479, - 478, 477, 476, 475, 474, 473, 275, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 165, 472, 275, 275, - 275, 275, 275, 275, 276, 276, 276, 276, 276, 276, - - 276, 276, 276, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 291, 292, 293, 294, 295, 296, 297, 298, - 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - 471, 470, 319, 319, 319, 319, 319, 319, 320, 320, - 320, 320, 320, 320, 320, 320, 320, 321, 321, 321, - 321, 321, 321, 321, 321, 321, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 351, 351, 351, 351, 351, - 351, 351, 351, 351, 376, 376, 376, 376, 376, 376, - 376, 376, 376, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 38, 469, 468, 38, 42, 42, 467, 42, - - 46, 46, 46, 46, 47, 47, 47, 47, 43, 43, - 466, 43, 99, 99, 465, 99, 100, 100, 464, 100, - 102, 102, 463, 102, 462, 461, 460, 459, 456, 455, - 454, 453, 452, 451, 450, 449, 448, 447, 446, 445, - 444, 443, 442, 441, 440, 439, 438, 437, 434, 433, - 432, 431, 430, 429, 428, 427, 426, 425, 424, 423, - 422, 421, 420, 419, 418, 417, 416, 415, 414, 413, - 412, 411, 410, 409, 408, 407, 406, 401, 400, 399, - 396, 395, 394, 393, 392, 391, 387, 384, 383, 382, - 381, 380, 377, 49, 375, 374, 373, 372, 371, 354, - - 370, 369, 368, 367, 366, 365, 364, 363, 362, 361, - 358, 357, 356, 355, 354, 353, 352, 349, 348, 347, - 346, 345, 344, 343, 342, 341, 340, 339, 338, 337, - 336, 335, 334, 333, 332, 331, 330, 329, 328, 327, - 326, 325, 324, 323, 322, 318, 317, 316, 315, 314, - 313, 312, 311, 310, 309, 308, 307, 306, 305, 304, - 303, 302, 301, 300, 299, 290, 289, 288, 287, 286, - 285, 284, 283, 282, 281, 280, 279, 278, 272, 271, - 270, 269, 268, 267, 266, 265, 264, 263, 262, 261, - 260, 259, 258, 257, 241, 256, 255, 254, 251, 250, - - 249, 248, 247, 246, 245, 244, 243, 242, 241, 240, - 239, 238, 237, 236, 235, 234, 233, 232, 223, 222, - 221, 220, 219, 218, 217, 216, 215, 214, 213, 212, - 211, 210, 209, 208, 207, 206, 205, 204, 203, 202, - 201, 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, - 100, 161, 160, 159, 158, 157, 156, 155, 154, 153, - 145, 144, 141, 140, 137, 136, 135, 134, 133, 132, - 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, - - 117, 116, 115, 110, 107, 48, 100, 48, 94, 91, - 84, 83, 82, 74, 66, 51, 571, 3, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571 + 79, 77, 64, 71, 72, 78, 96, 109, 65, 85, + + 80, 73, 87, 86, 110, 88, 81, 93, 98, 94, + 39, 40, 139, 97, 41, 89, 43, 114, 90, 44, + 47, 48, 91, 115, 119, 131, 99, 143, 132, 442, + 151, 144, 102, 103, 120, 229, 103, 45, 100, 102, + 103, 278, 443, 166, 140, 152, 255, 153, 201, 98, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 100, + 147, 167, 256, 202, 166, 385, 365, 99, 392, 148, + 366, 577, 393, 576, 575, 395, 149, 574, 150, 386, + 396, 573, 167, 397, 572, 105, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, + + 107, 107, 107, 107, 101, 102, 103, 43, 464, 571, + 44, 410, 404, 465, 570, 569, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 101, 405, 411, 45, 412, + 508, 568, 567, 566, 565, 564, 563, 562, 561, 560, + 559, 558, 509, 557, 556, 555, 554, 553, 552, 551, + 550, 165, 101, 549, 548, 547, 546, 545, 544, 543, + 542, 541, 540, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 43, 539, 538, 44, 537, 536, 535, 534, + 533, 532, 531, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 45, 530, 169, 169, 169, 169, 169, + + 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 171, 171, 171, 171, 171, 171, 171, 171, 171, 227, + 227, 227, 227, 227, 227, 227, 227, 227, 98, 529, + 528, 527, 526, 525, 524, 523, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 99, 522, 228, 228, + 228, 228, 228, 228, 578, 229, 103, 521, 520, 519, + 518, 517, 516, 515, 514, 513, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 578, 512, 511, 510, 507, + 506, 505, 504, 503, 502, 501, 500, 499, 498, 497, + 496, 495, 494, 493, 492, 491, 490, 489, 488, 487, + + 486, 231, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 485, 484, 232, 232, 232, 232, 232, 232, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 483, 482, 277, 277, + 277, 277, 277, 277, 166, 481, 480, 479, 478, 477, + 476, 475, 279, 279, 279, 279, 279, 279, 279, 279, + 279, 279, 167, 474, 279, 279, 279, 279, 279, 279, + + 280, 280, 280, 280, 280, 280, 280, 280, 280, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 295, 296, + 297, 298, 299, 300, 301, 302, 324, 324, 324, 324, + 324, 324, 324, 324, 324, 324, 473, 472, 324, 324, + 324, 324, 324, 324, 325, 325, 325, 325, 325, 325, + 325, 325, 325, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 383, 383, 383, 383, 383, 383, 383, 383, 383, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 38, 471, + + 470, 38, 42, 42, 469, 42, 46, 46, 46, 46, + 47, 47, 47, 47, 43, 43, 468, 43, 100, 100, + 467, 100, 101, 101, 466, 101, 103, 103, 463, 103, + 462, 461, 460, 459, 458, 457, 456, 455, 454, 453, + 452, 451, 450, 449, 448, 447, 446, 445, 444, 441, + 440, 439, 438, 437, 436, 435, 434, 433, 432, 431, + 430, 429, 428, 427, 426, 425, 424, 423, 422, 421, + 420, 419, 418, 417, 416, 415, 414, 413, 408, 407, + 406, 403, 402, 401, 400, 399, 398, 394, 391, 390, + 389, 388, 387, 384, 49, 382, 381, 380, 379, 378, + + 377, 360, 376, 375, 374, 373, 372, 371, 370, 369, + 368, 367, 364, 363, 362, 361, 360, 359, 358, 355, + 354, 353, 352, 351, 350, 349, 348, 347, 346, 345, + 344, 343, 342, 341, 340, 339, 338, 337, 336, 335, + 334, 333, 332, 331, 330, 329, 328, 327, 323, 322, + 321, 320, 319, 318, 317, 316, 315, 314, 313, 312, + 311, 310, 309, 308, 307, 306, 305, 304, 303, 294, + 293, 292, 291, 290, 289, 288, 287, 286, 285, 284, + 283, 282, 276, 275, 274, 273, 272, 271, 270, 269, + 268, 267, 266, 265, 264, 263, 262, 261, 260, 244, + + 259, 258, 257, 254, 253, 252, 251, 250, 249, 248, + 247, 246, 245, 244, 243, 242, 241, 240, 239, 238, + 237, 236, 235, 226, 225, 224, 223, 222, 221, 220, + 219, 218, 217, 216, 215, 214, 213, 212, 211, 210, + 209, 208, 207, 206, 205, 204, 203, 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, 101, 163, 162, 161, + 160, 159, 158, 157, 156, 155, 154, 146, 145, 142, + 141, 138, 137, 136, 135, 134, 133, 130, 129, 128, + + 127, 126, 125, 124, 123, 122, 121, 118, 117, 116, + 111, 108, 48, 101, 48, 95, 92, 84, 83, 82, + 74, 66, 51, 578, 3, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578 } ; -static yyconst short int yy_chk[970] = +static yyconst short int yy_chk[977] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -651,105 +652,106 @@ static yyconst short int yy_chk[970] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 8, 16, 5, 8, 9, 9, 54, 21, 18, 22, 16, 22, 18, 21, 54, 17, 18, - 581, 17, 25, 25, 8, 14, 14, 14, 14, 14, + 588, 17, 25, 25, 8, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 17, 19, 19, 19, 19, - 27, 26, 19, 23, 23, 26, 32, 36, 19, 31, - - 27, 23, 34, 31, 34, 43, 27, 39, 39, 32, - 42, 39, 32, 42, 36, 52, 32, 46, 46, 56, - 60, 73, 52, 43, 73, 56, 80, 101, 101, 412, - 60, 42, 45, 45, 45, 83, 226, 226, 102, 83, - 87, 580, 412, 273, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 86, 87, 102, 87, 80, 138, - 200, 273, 329, 86, 355, 361, 329, 568, 436, 361, - 86, 567, 86, 436, 138, 566, 200, 564, 355, 45, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 98, 98, - - 98, 229, 319, 563, 229, 562, 561, 557, 555, 371, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 319, 363, 229, 371, 377, 481, 363, 553, 552, 363, - 551, 549, 546, 545, 544, 543, 542, 481, 541, 539, - 377, 538, 377, 537, 536, 98, 103, 535, 534, 531, - 530, 529, 528, 526, 525, 524, 523, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 104, 522, 520, 104, - 519, 518, 516, 515, 514, 513, 512, 104, 104, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 511, 104, - 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, - - 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, - 106, 106, 106, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 163, 510, 509, 508, 507, 506, 505, 504, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 503, 163, 163, 163, 163, 163, 163, 165, 165, - 165, 502, 501, 500, 499, 498, 495, 494, 493, 492, - 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, - 490, 489, 487, 486, 485, 484, 483, 482, 480, 479, - 478, 477, 476, 475, 473, 472, 471, 470, 469, 468, - 467, 466, 465, 464, 463, 165, 166, 166, 166, 166, - - 166, 166, 166, 166, 166, 167, 167, 167, 167, 167, - 167, 167, 167, 167, 167, 462, 461, 167, 167, 167, - 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, - 460, 459, 225, 225, 225, 225, 225, 225, 228, 458, - 457, 456, 455, 454, 453, 452, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 451, 228, 228, - 228, 228, 228, 228, 230, 230, 230, 230, 230, 230, - - 230, 230, 230, 231, 231, 231, 231, 231, 231, 231, - 231, 231, 249, 249, 249, 249, 249, 249, 249, 249, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 450, 448, 275, 275, 275, 275, 275, 275, 276, 276, - 276, 276, 276, 276, 276, 276, 276, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 321, 321, 321, 321, 321, - 321, 321, 321, 321, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 376, 376, 376, 376, 376, 376, 376, - 376, 376, 572, 447, 446, 572, 573, 573, 445, 573, - - 574, 574, 574, 574, 575, 575, 575, 575, 576, 576, - 444, 576, 577, 577, 443, 577, 578, 578, 442, 578, - 579, 579, 441, 579, 440, 439, 438, 437, 435, 432, - 431, 430, 429, 428, 427, 426, 425, 424, 423, 422, - 420, 419, 418, 417, 416, 415, 414, 413, 411, 410, - 409, 407, 406, 405, 404, 403, 401, 400, 399, 398, - 397, 396, 393, 392, 391, 390, 389, 388, 386, 385, - 384, 383, 382, 381, 380, 379, 378, 375, 373, 372, - 370, 369, 368, 366, 365, 364, 362, 360, 359, 358, - 357, 356, 352, 351, 347, 346, 345, 344, 343, 342, - - 341, 340, 339, 338, 336, 335, 334, 332, 331, 330, - 328, 327, 326, 325, 324, 323, 322, 318, 317, 316, - 315, 313, 311, 310, 309, 308, 307, 306, 305, 304, - 302, 301, 300, 299, 289, 288, 287, 286, 285, 284, - 282, 281, 280, 279, 278, 271, 270, 269, 268, 267, - 266, 265, 264, 263, 262, 260, 259, 257, 256, 255, - 254, 253, 252, 251, 250, 248, 247, 246, 244, 243, - 242, 240, 238, 237, 236, 235, 234, 232, 223, 222, - 221, 219, 218, 217, 216, 215, 214, 213, 212, 211, - 210, 209, 207, 205, 204, 203, 202, 201, 199, 197, - - 195, 194, 192, 191, 189, 186, 185, 184, 183, 180, - 179, 178, 175, 174, 173, 172, 171, 170, 161, 160, - 159, 158, 157, 156, 155, 154, 153, 152, 151, 150, - 149, 148, 147, 146, 145, 144, 143, 142, 141, 140, - 139, 137, 136, 135, 133, 132, 131, 130, 129, 128, - 127, 126, 125, 124, 123, 121, 120, 119, 118, 117, - 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, - 99, 96, 95, 94, 93, 92, 91, 90, 89, 88, - 85, 84, 82, 81, 79, 78, 77, 76, 75, 74, - 72, 70, 69, 68, 67, 65, 64, 63, 62, 61, - - 59, 58, 57, 53, 51, 47, 44, 41, 35, 33, - 30, 29, 28, 24, 20, 15, 3, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571 + 27, 26, 19, 23, 23, 26, 36, 52, 19, 31, + + 27, 23, 32, 31, 52, 32, 27, 34, 43, 34, + 39, 39, 80, 36, 39, 32, 42, 56, 32, 42, + 46, 46, 32, 56, 60, 73, 43, 83, 73, 419, + 87, 83, 102, 102, 60, 229, 229, 42, 45, 45, + 45, 587, 419, 103, 80, 87, 202, 87, 139, 277, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 86, 103, 202, 139, 324, 361, 334, 277, 367, 86, + 334, 575, 367, 574, 573, 369, 86, 571, 86, 361, + 369, 570, 324, 369, 569, 45, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, + + 50, 50, 50, 50, 99, 99, 99, 232, 443, 568, + 232, 384, 377, 443, 564, 562, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 377, 384, 232, 384, + 488, 560, 559, 558, 556, 553, 552, 551, 550, 549, + 548, 546, 488, 545, 544, 543, 542, 541, 538, 537, + 536, 99, 104, 535, 533, 532, 531, 530, 529, 527, + 526, 525, 523, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 105, 522, 521, 105, 520, 519, 518, 517, + 516, 515, 514, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 513, 105, 105, 105, 105, 105, + + 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 165, 512, + 511, 510, 509, 508, 507, 506, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 505, 165, 165, + 165, 165, 165, 165, 167, 167, 167, 502, 501, 500, + 499, 497, 496, 494, 493, 492, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 491, 490, 489, 487, + 486, 485, 484, 483, 482, 480, 479, 478, 477, 476, + 475, 474, 473, 472, 471, 470, 469, 468, 467, 466, + + 465, 167, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 464, 463, 169, 169, 169, 169, 169, 169, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 227, 227, 227, + 227, 227, 227, 227, 227, 227, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 462, 461, 228, 228, + 228, 228, 228, 228, 231, 460, 459, 458, 457, 455, + 454, 453, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 452, 231, 231, 231, 231, 231, 231, + + 233, 233, 233, 233, 233, 233, 233, 233, 233, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 252, 252, + 252, 252, 252, 252, 252, 252, 279, 279, 279, 279, + 279, 279, 279, 279, 279, 279, 451, 450, 279, 279, + 279, 279, 279, 279, 280, 280, 280, 280, 280, 280, + 280, 280, 280, 281, 281, 281, 281, 281, 281, 281, + 281, 281, 325, 325, 325, 325, 325, 325, 325, 325, + 325, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 383, + 383, 383, 383, 383, 383, 383, 383, 383, 579, 449, + + 448, 579, 580, 580, 447, 580, 581, 581, 581, 581, + 582, 582, 582, 582, 583, 583, 446, 583, 584, 584, + 445, 584, 585, 585, 444, 585, 586, 586, 442, 586, + 439, 438, 437, 436, 435, 434, 433, 432, 431, 430, + 429, 427, 426, 425, 424, 423, 422, 421, 420, 418, + 417, 416, 414, 413, 412, 411, 410, 408, 407, 406, + 405, 404, 403, 400, 399, 398, 397, 396, 395, 393, + 392, 391, 390, 389, 388, 387, 386, 385, 382, 380, + 378, 376, 375, 374, 372, 371, 370, 368, 366, 365, + 364, 363, 362, 358, 357, 353, 352, 351, 350, 349, + + 348, 347, 346, 345, 344, 343, 341, 340, 339, 337, + 336, 335, 333, 332, 331, 330, 329, 328, 327, 323, + 322, 321, 320, 318, 316, 315, 314, 313, 312, 311, + 310, 309, 308, 306, 305, 304, 303, 293, 292, 291, + 290, 289, 288, 286, 285, 284, 283, 282, 275, 274, + 273, 272, 271, 270, 269, 268, 267, 266, 265, 263, + 262, 260, 259, 258, 257, 256, 255, 254, 253, 251, + 250, 249, 247, 246, 245, 243, 241, 240, 239, 238, + 237, 235, 226, 225, 224, 222, 221, 220, 219, 218, + 217, 216, 215, 214, 213, 212, 211, 209, 207, 206, + + 205, 204, 203, 201, 199, 197, 196, 194, 193, 191, + 188, 187, 186, 185, 182, 181, 180, 177, 176, 175, + 174, 173, 172, 163, 162, 161, 160, 159, 158, 157, + 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, + 146, 145, 144, 143, 142, 141, 140, 138, 137, 136, + 134, 133, 132, 131, 130, 129, 128, 127, 126, 125, + 124, 122, 121, 120, 119, 118, 117, 116, 115, 114, + 113, 112, 111, 110, 109, 108, 100, 97, 96, 95, + 94, 93, 92, 91, 90, 89, 88, 85, 84, 82, + 81, 79, 78, 77, 76, 75, 74, 72, 70, 69, + + 68, 67, 65, 64, 63, 62, 61, 59, 58, 57, + 53, 51, 47, 44, 41, 35, 33, 30, 29, 28, + 24, 20, 15, 3, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 578, 578, 578, 578, 578, 578 } ; static yy_state_type yy_last_accepting_state; @@ -1104,13 +1106,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 >= 572 ) + if ( yy_current_state >= 579 ) 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] != 918 ); + while ( yy_base[yy_current_state] != 925 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1374,231 +1376,236 @@ YY_RULE_SETUP case 48: YY_RULE_SETUP #line 191 "lexer.l" -{ lr_bispa= bispa_none; lr_bisexec= bisexec_reset; lr_dir= df_reset; return tokv_word_reset; } +{ lr_bispa= bispa_none; lr_bisexec= bisexec_shutdown; return tokv_word_shutdown; } YY_BREAK case 49: YY_RULE_SETUP #line 192 "lexer.l" -{ lr_bispa= bispa_none; lr_bisexec= bisexec_execute; lr_dir= df_execute; return tokv_word_execute; } +{ lr_bispa= bispa_none; lr_bisexec= bisexec_reset; lr_dir= df_reset; return tokv_word_reset; } YY_BREAK case 50: YY_RULE_SETUP #line 193 "lexer.l" -{ lr_bispa= bispa_none; lr_bisexec= bisexec_help; return tokv_word_help; } +{ lr_bispa= bispa_none; lr_bisexec= bisexec_execute; lr_dir= df_execute; return tokv_word_execute; } YY_BREAK case 51: YY_RULE_SETUP #line 194 "lexer.l" -{ lr_parameter= pf_service; return tokv_word_service; } +{ lr_bispa= bispa_none; lr_bisexec= bisexec_help; return tokv_word_help; } YY_BREAK case 52: YY_RULE_SETUP #line 195 "lexer.l" -{ lr_parameter= pf_callinguser; return tokv_word_callinguser; } +{ lr_parameter= pf_service; return tokv_word_service; } YY_BREAK case 53: YY_RULE_SETUP #line 196 "lexer.l" -{ lr_parameter= pf_callinggroup; return tokv_word_callinggroup; } +{ lr_parameter= pf_callinguser; return tokv_word_callinguser; } YY_BREAK case 54: YY_RULE_SETUP #line 197 "lexer.l" -{ lr_parameter= pf_callingusershell; return tokv_word_callingusershell; } +{ lr_parameter= pf_callinggroup; return tokv_word_callinggroup; } YY_BREAK case 55: YY_RULE_SETUP #line 198 "lexer.l" -{ lr_parameter= pf_serviceuser; return tokv_word_serviceuser; } +{ lr_parameter= pf_callingusershell; return tokv_word_callingusershell; } YY_BREAK case 56: YY_RULE_SETUP #line 199 "lexer.l" -{ lr_parameter= pf_servicegroup; return tokv_word_servicegroup; } +{ lr_parameter= pf_serviceuser; return tokv_word_serviceuser; } YY_BREAK case 57: YY_RULE_SETUP #line 200 "lexer.l" -{ lr_parameter= pf_serviceusershell; return tokv_word_serviceusershell; } +{ lr_parameter= pf_servicegroup; return tokv_word_servicegroup; } YY_BREAK case 58: YY_RULE_SETUP #line 201 "lexer.l" -{ lr_loglevel= LOG_DEBUG; return tokv_syslog_debug; } +{ lr_parameter= pf_serviceusershell; return tokv_word_serviceusershell; } YY_BREAK case 59: YY_RULE_SETUP #line 202 "lexer.l" -{ lr_loglevel= LOG_INFO; return tokv_syslog_info; } +{ lr_loglevel= LOG_DEBUG; return tokv_syslog_debug; } YY_BREAK case 60: YY_RULE_SETUP #line 203 "lexer.l" -{ lr_loglevel= LOG_NOTICE; return tokv_syslog_notice; } +{ lr_loglevel= LOG_INFO; return tokv_syslog_info; } YY_BREAK case 61: YY_RULE_SETUP #line 204 "lexer.l" -{ lr_loglevel= LOG_WARNING; return tokv_syslog_warning; } +{ lr_loglevel= LOG_NOTICE; return tokv_syslog_notice; } YY_BREAK case 62: YY_RULE_SETUP #line 205 "lexer.l" -{ lr_loglevel= LOG_ERR; return tokv_syslog_err; } +{ lr_loglevel= LOG_WARNING; return tokv_syslog_warning; } YY_BREAK case 63: YY_RULE_SETUP #line 206 "lexer.l" -{ lr_loglevel= LOG_CRIT; return tokv_syslog_crit; } +{ lr_loglevel= LOG_ERR; return tokv_syslog_err; } YY_BREAK case 64: YY_RULE_SETUP #line 207 "lexer.l" -{ lr_loglevel= LOG_ALERT; return tokv_syslog_alert; } +{ lr_loglevel= LOG_CRIT; return tokv_syslog_crit; } YY_BREAK case 65: YY_RULE_SETUP #line 208 "lexer.l" -{ lr_loglevel= LOG_EMERG; return tokv_syslog_emerg; } +{ lr_loglevel= LOG_ALERT; return tokv_syslog_alert; } YY_BREAK case 66: YY_RULE_SETUP #line 209 "lexer.l" -{ lr_logfacility= LOG_AUTHPRIV; return tokv_syslog_authpriv; } +{ lr_loglevel= LOG_EMERG; return tokv_syslog_emerg; } YY_BREAK case 67: YY_RULE_SETUP #line 210 "lexer.l" -{ lr_logfacility= LOG_CRON; return tokv_syslog_cron; } +{ lr_logfacility= LOG_AUTHPRIV; return tokv_syslog_authpriv; } YY_BREAK case 68: YY_RULE_SETUP #line 211 "lexer.l" -{ lr_logfacility= LOG_DAEMON; return tokv_syslog_daemon; } +{ lr_logfacility= LOG_CRON; return tokv_syslog_cron; } YY_BREAK case 69: YY_RULE_SETUP #line 212 "lexer.l" -{ lr_logfacility= LOG_KERN; return tokv_syslog_kern; } +{ lr_logfacility= LOG_DAEMON; return tokv_syslog_daemon; } YY_BREAK case 70: YY_RULE_SETUP #line 213 "lexer.l" -{ lr_logfacility= LOG_LPR; return tokv_syslog_lpr; } +{ lr_logfacility= LOG_KERN; return tokv_syslog_kern; } YY_BREAK case 71: YY_RULE_SETUP #line 214 "lexer.l" -{ lr_logfacility= LOG_MAIL; return tokv_syslog_mail; } +{ lr_logfacility= LOG_LPR; return tokv_syslog_lpr; } YY_BREAK case 72: YY_RULE_SETUP #line 215 "lexer.l" -{ lr_logfacility= LOG_NEWS; return tokv_syslog_news; } +{ lr_logfacility= LOG_MAIL; return tokv_syslog_mail; } YY_BREAK case 73: YY_RULE_SETUP #line 216 "lexer.l" -{ lr_logfacility= LOG_SYSLOG; return tokv_syslog_syslog; } +{ lr_logfacility= LOG_NEWS; return tokv_syslog_news; } YY_BREAK case 74: YY_RULE_SETUP #line 217 "lexer.l" -{ lr_logfacility= LOG_USER; return tokv_syslog_user; } +{ lr_logfacility= LOG_SYSLOG; return tokv_syslog_syslog; } YY_BREAK case 75: YY_RULE_SETUP #line 218 "lexer.l" -{ lr_logfacility= LOG_UUCP; return tokv_syslog_uucp; } +{ lr_logfacility= LOG_USER; return tokv_syslog_user; } YY_BREAK case 76: YY_RULE_SETUP #line 219 "lexer.l" -{ lr_logfacility= LOG_LOCAL0; return tokv_syslog_local0; } +{ lr_logfacility= LOG_UUCP; return tokv_syslog_uucp; } YY_BREAK case 77: YY_RULE_SETUP #line 220 "lexer.l" -{ lr_logfacility= LOG_LOCAL1; return tokv_syslog_local1; } +{ lr_logfacility= LOG_LOCAL0; return tokv_syslog_local0; } YY_BREAK case 78: YY_RULE_SETUP #line 221 "lexer.l" -{ lr_logfacility= LOG_LOCAL2; return tokv_syslog_local2; } +{ lr_logfacility= LOG_LOCAL1; return tokv_syslog_local1; } YY_BREAK case 79: YY_RULE_SETUP #line 222 "lexer.l" -{ lr_logfacility= LOG_LOCAL3; return tokv_syslog_local3; } +{ lr_logfacility= LOG_LOCAL2; return tokv_syslog_local2; } YY_BREAK case 80: YY_RULE_SETUP #line 223 "lexer.l" -{ lr_logfacility= LOG_LOCAL4; return tokv_syslog_local4; } +{ lr_logfacility= LOG_LOCAL3; return tokv_syslog_local3; } YY_BREAK case 81: YY_RULE_SETUP #line 224 "lexer.l" -{ lr_logfacility= LOG_LOCAL5; return tokv_syslog_local5; } +{ lr_logfacility= LOG_LOCAL4; return tokv_syslog_local4; } YY_BREAK case 82: YY_RULE_SETUP #line 225 "lexer.l" -{ lr_logfacility= LOG_LOCAL6; return tokv_syslog_local6; } +{ lr_logfacility= LOG_LOCAL5; return tokv_syslog_local5; } YY_BREAK case 83: YY_RULE_SETUP #line 226 "lexer.l" -{ lr_logfacility= LOG_LOCAL7; return tokv_syslog_local7; } +{ lr_logfacility= LOG_LOCAL6; return tokv_syslog_local6; } YY_BREAK case 84: YY_RULE_SETUP #line 227 "lexer.l" -{ return tokv_word_read; } +{ lr_logfacility= LOG_LOCAL7; return tokv_syslog_local7; } YY_BREAK case 85: YY_RULE_SETUP #line 228 "lexer.l" -{ return tokv_word_write; } +{ return tokv_word_read; } YY_BREAK case 86: YY_RULE_SETUP #line 229 "lexer.l" -{ return tokv_dollar; } +{ return tokv_word_write; } YY_BREAK case 87: YY_RULE_SETUP #line 230 "lexer.l" -{ return tokv_openparen; } +{ return tokv_dollar; } YY_BREAK case 88: YY_RULE_SETUP #line 231 "lexer.l" -{ return tokv_closeparen; } +{ return tokv_openparen; } YY_BREAK case 89: YY_RULE_SETUP #line 232 "lexer.l" -{ return tokv_not; } +{ return tokv_closeparen; } YY_BREAK case 90: YY_RULE_SETUP #line 233 "lexer.l" -{ return tokv_and; } +{ return tokv_not; } YY_BREAK case 91: YY_RULE_SETUP #line 234 "lexer.l" -{ return tokv_or; } +{ return tokv_and; } YY_BREAK case 92: YY_RULE_SETUP #line 235 "lexer.l" -{ lr_dir= df_error; lr_loglevel= LOG_ERR; return tokv_word_error; } +{ return tokv_or; } YY_BREAK case 93: YY_RULE_SETUP -#line 239 "lexer.l" +#line 236 "lexer.l" +{ lr_dir= df_error; lr_loglevel= LOG_ERR; return tokv_word_error; } + YY_BREAK +case 94: +YY_RULE_SETUP +#line 240 "lexer.l" { char *ep; lr_min=lr_max= (int)strtoul(yytext,&ep,10); @@ -1606,9 +1613,9 @@ YY_RULE_SETUP return tokv_ordinal; } YY_BREAK -case 94: +case 95: YY_RULE_SETUP -#line 245 "lexer.l" +#line 246 "lexer.l" { char *ep; lr_min= (int)strtoul(yytext,&ep,10); @@ -1623,9 +1630,9 @@ YY_RULE_SETUP return tokv_fdrange; } YY_BREAK -case 95: +case 96: YY_RULE_SETUP -#line 258 "lexer.l" +#line 259 "lexer.l" { char *ep; lr_min= (int)strtoul(yytext,&ep,10); @@ -1635,15 +1642,10 @@ YY_RULE_SETUP return tokv_fdstoend; } YY_BREAK -case 96: -YY_RULE_SETUP -#line 266 "lexer.l" -return tokv_lwsp; - YY_BREAK case 97: YY_RULE_SETUP #line 267 "lexer.l" -cstate->lineno++; return tokv_newline; +return tokv_lwsp; YY_BREAK case 98: YY_RULE_SETUP @@ -1653,38 +1655,43 @@ cstate->lineno++; return tokv_newline; case 99: YY_RULE_SETUP #line 269 "lexer.l" +cstate->lineno++; return tokv_newline; + YY_BREAK +case 100: +YY_RULE_SETUP +#line 270 "lexer.l" { parseerrprint("missing newline at eof after comment"); return tokv_error; } YY_BREAK -case 100: +case 101: YY_RULE_SETUP -#line 273 "lexer.l" +#line 274 "lexer.l" { return dequote(yytext); } YY_BREAK -case 101: +case 102: YY_RULE_SETUP -#line 276 "lexer.l" +#line 277 "lexer.l" { parseerrprint("misquoted or unterminated string"); return tokv_error; } YY_BREAK -case 102: +case 103: YY_RULE_SETUP -#line 280 "lexer.l" +#line 281 "lexer.l" return tokv_barestring; YY_BREAK case YY_STATE_EOF(INITIAL): -#line 281 "lexer.l" +#line 282 "lexer.l" return tokv_eof; YY_BREAK -case 103: +case 104: YY_RULE_SETUP -#line 284 "lexer.l" +#line 285 "lexer.l" ECHO; YY_BREAK @@ -1976,7 +1983,7 @@ static yy_state_type yy_get_previous_state() 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 >= 572 ) + if ( yy_current_state >= 579 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2011,11 +2018,11 @@ yy_state_type yy_current_state; 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 >= 572 ) + if ( yy_current_state >= 579 ) 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 == 571); + yy_is_jam = (yy_current_state == 578); return yy_is_jam ? 0 : yy_current_state; } @@ -2570,7 +2577,7 @@ int main() return 0; } #endif -#line 284 "lexer.l" +#line 285 "lexer.l" const char *const builtinservicehelpstrings[]= { @@ -2579,6 +2586,7 @@ const char *const builtinservicehelpstrings[]= { "version", "toplevel", "override", + "shutdown", "reset", "execute", "help", diff --git a/lexer.l b/lexer.l index 6af0345..388089a 100644 --- a/lexer.l +++ b/lexer.l @@ -188,6 +188,7 @@ parameter { lr_bispa= bispa_parameter; lr_bisexec= bisexec_parameter; return tok version { lr_bispa= bispa_none; lr_bisexec= bisexec_version; return tokv_word_version; } toplevel { lr_bispa= bispa_none; lr_bisexec= bisexec_toplevel; return tokv_word_toplevel; } override { lr_bispa= bispa_none; lr_bisexec= bisexec_override; return tokv_word_override; } +shutdown { lr_bispa= bispa_none; lr_bisexec= bisexec_shutdown; return tokv_word_shutdown; } reset { lr_bispa= bispa_none; lr_bisexec= bisexec_reset; lr_dir= df_reset; return tokv_word_reset; } execute { lr_bispa= bispa_none; lr_bisexec= bisexec_execute; lr_dir= df_execute; return tokv_word_execute; } help { lr_bispa= bispa_none; lr_bisexec= bisexec_help; return tokv_word_help; } @@ -289,6 +290,7 @@ const char *const builtinservicehelpstrings[]= { "version", "toplevel", "override", + "shutdown", "reset", "execute", "help", diff --git a/overlord.c b/overlord.c index dfb58a2..ae6fbfb 100644 --- a/overlord.c +++ b/overlord.c @@ -43,7 +43,7 @@ pid_t overlordpid; static pid_t checkpid= -1, detachpid= -1; -static sig_atomic_t needcheck= 1; +static sig_atomic_t needcheck= 1; /* 2 means we half-expect the server to be down */ static void checkstalepipes(void) { /* There is an unimportant race here. If there is a stale pipe but @@ -128,11 +128,14 @@ static void sighandler_chld(int x) { } else if (!WIFEXITED(status)) { syslog(LOG_ERR,"call pid %ld died due to unknown reason, code %d", (long)r,status); + } else if (WEXITSTATUS(status)==10) { + needcheck= 2; } else if (WEXITSTATUS(status)>12) { if (WEXITSTATUS(status)>24) syslog(LOG_ERR,"call pid %ld exited with status %d >24", (long)r,WEXITSTATUS(status)); checkstalepipes(); + needcheck= 1; } } } @@ -165,7 +168,7 @@ static void blocksignals(int how) { r= sigprocmask(how,&set,0); assert(!r); } -static void NONRETURNING docheck(void) { +static void NONRETURNING docheck(int needwanted) { #ifndef DEBUG /* This subprocess exits with status 0 if the parent should die, * 1 if it should not, and something else if it fails horribly. @@ -197,8 +200,11 @@ static void NONRETURNING docheck(void) { r= connect(sfd,(struct sockaddr*)&ssockname,sizeof(ssockname)); if (r) { - if (errno == ECONNREFUSED || errno == ENOENT) - { syslog(LOG_WARNING,"real uservd daemon is not running: %m"); exit(0); } + if (errno == ECONNREFUSED || errno == ENOENT) { + if (needwanted != 2) + syslog(LOG_WARNING,"real uservd daemon is not running: %m"); + exit(0); + } syslog(LOG_ERR,"unable to connect to uservd daemon: %m"); exit(1); } @@ -340,11 +346,10 @@ int main(int argc, char *const *argv) { for (;;) { if (needcheck) { - assert(checkpid==-1); - for (;;) { + while (checkpid==-1) { checkpid= fork(); if (checkpid!=-1) { - if (!checkpid) docheck(); + if (!checkpid) docheck(needcheck); break; } else if (errno==EAGAIN) { syslog(LOG_ERR,"fork for check - will wait and retry: %m"); diff --git a/process.c b/process.c index 64afd5c..636255a 100644 --- a/process.c +++ b/process.c @@ -271,8 +271,18 @@ void NONRETURNING disconnect(int exitstatus) { _exit(exitstatus); } -static void NONRETURNING sighandler_chld(int ignored) { +static void reporttermination(int status) { struct progress_msg progress_mbuf; + + memset(&progress_mbuf,0,sizeof(progress_mbuf)); + progress_mbuf.magic= PROGRESS_MAGIC; + progress_mbuf.type= pt_terminated; + progress_mbuf.data.terminated.status= status; + xfwrite(&progress_mbuf,sizeof(progress_mbuf),swfile); + xfflush(swfile); +} + +static void NONRETURNING sighandler_chld(int ignored) { int status; pid_t returned; @@ -282,13 +292,7 @@ static void NONRETURNING sighandler_chld(int ignored) { if (returned!=child) syscallerror("spurious child process"); child= childtokill= -1; - memset(&progress_mbuf,0,sizeof(progress_mbuf)); - progress_mbuf.magic= PROGRESS_MAGIC; - progress_mbuf.type= pt_terminated; - progress_mbuf.data.terminated.status= status; - xfwrite(&progress_mbuf,sizeof(progress_mbuf),swfile); - xfflush(swfile); - + reporttermination(status); syslog(LOG_INFO,"service completed (status %d %d)",(status>>8)&0x0ff,status&0x0ff); _exit(0); } @@ -746,6 +750,18 @@ void servicerequest(int sfd) { getevent(&event_mbuf); assert(event_mbuf.type == et_confirm); + if (execbuiltin == bisexec_shutdown && !serviceuser_uid) { + /* The check for the uid is just so we can give a nice + * error message (in the actual code for bisexec_shutdown). + * If this is spoofed somehow then the unlink() will simply fail. + */ + r= unlink(RENDEZVOUSPATH); + if (r) syscallfailure("remove rendezvous socket %s",RENDEZVOUSPATH); + syslog(LOG_NOTICE,"arranging for termination, due to client request"); + reporttermination(0); + _exit(10); + } + fork_service_synch(); getevent(&event_mbuf); diff --git a/servexec.c b/servexec.c index 168e076..fa8b8ac 100644 --- a/servexec.c +++ b/servexec.c @@ -137,6 +137,15 @@ void bisexec_execute(const char *const *argv) { serv_checkstdoutexit(); } +void bisexec_shutdown(const char *const *argv) { + /* This is only reached if the serviceuser_uid test in + * process.c:servicerequest() fails (we have to handle the + * shutdown request there, unfortunately). + */ + fputs("uservd: builtin service shutdown: permission denied\n",stderr); + _exit(-1); +} + static void serv_resetsignal(int signo) { struct sigaction sig; diff --git a/spec.sgml b/spec.sgml index 82a74dd..86d612e 100644 --- a/spec.sgml +++ b/spec.sgml @@ -30,7 +30,7 @@ You should have received a copy of the GNU General Public License along with + Introduction

@@ -954,10 +954,13 @@ to be parsed). Displays a list of the understood builtin service names and arguments. - -In the future other builtin services may be defined which do more than -just print information. + +Arranges for the