diff -ruN userv-0.62/INSTALL userv-0.64.1/INSTALL --- userv-0.62/INSTALL Wed Apr 7 23:43:42 1999 +++ userv-0.64.1/INSTALL Thu May 20 00:13:44 1999 @@ -153,6 +153,9 @@ 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 @@ 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 -ruN userv-0.62/Makefile.in userv-0.64.1/Makefile.in --- userv-0.62/Makefile.in Sun Apr 18 19:53:44 1999 +++ userv-0.64.1/Makefile.in Thu May 20 00:13:45 1999 @@ -126,8 +126,6 @@ tokens.h: language.i4 - rm -f *.o *~ core ./#*# - autoconf configure: autoheader autoconf @@ -136,7 +134,7 @@ 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 -ruN userv-0.62/daemon.h userv-0.64.1/daemon.h --- userv-0.62/daemon.h Thu Apr 8 00:43:11 1999 +++ userv-0.64.1/daemon.h Thu May 20 00:13:47 1999 @@ -131,7 +131,7 @@ 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 -ruN userv-0.62/debian/changelog userv-0.64.1/debian/changelog --- userv-0.62/debian/changelog Sun Apr 18 21:23:53 1999 +++ userv-0.64.1/debian/changelog Sun Jun 20 19:14:36 1999 @@ -1,3 +1,16 @@ +userv (0.64.1) unstable; urgency=low + + * New "shutdown" builtin service for terminating uservd. + * Spec. document shows subsections in TOC. + + * 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). + + * Regenerated formatted documentation (spec.ps, spec.html). + + -- Ian Jackson Sun, 20 Jun 1999 19:13:42 +0100 + userv (0.62) unstable; urgency=low * New builtin service `help' lists builtin services. diff -ruN userv-0.62/language.i4 userv-0.64.1/language.i4 --- userv-0.62/language.i4 Thu Apr 8 00:43:13 1999 +++ userv-0.64.1/language.i4 Thu May 20 00:13:48 1999 @@ -162,6 +162,7 @@ isbuiltinservice(`version',`none') isbuiltinservice(`toplevel',`none') isbuiltinservice(`override',`none') +isbuiltinservice(`shutdown',`none') dnl builtin services that are also directive names define(`isdirectivebuiltinservice', diff -ruN userv-0.62/lexer.c userv-0.64.1/lexer.c --- userv-0.62/lexer.c Sun Apr 18 19:15:15 1999 +++ userv-0.64.1/lexer.c Thu May 20 00:13:49 1999 @@ -1,7 +1,7 @@ /* A lexical scanner generated by flex */ /* Scanner skeleton version: - * $Header: /usr/src/CVS/userv/lexer.c,v 1.1 1999/04/18 18:15:15 ian Exp $ + * $Header: /usr/src/CVS/userv/lexer.c,v 1.2 1999/05/19 23:13:49 ian Exp $ */ #define FLEX_SCANNER @@ -285,73 +285,73 @@ *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 @@ 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, + 79, 77, 64, 71, 72, 78, 96, 109, 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 + 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 @@ 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, 26, 19, 23, 23, 26, 36, 52, 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, 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ return 0; } #endif -#line 284 "lexer.l" +#line 285 "lexer.l" const char *const builtinservicehelpstrings[]= { @@ -2579,6 +2586,7 @@ "version", "toplevel", "override", + "shutdown", "reset", "execute", "help", diff -ruN userv-0.62/lexer.l userv-0.64.1/lexer.l --- userv-0.62/lexer.l Sun Apr 18 19:15:17 1999 +++ userv-0.64.1/lexer.l Thu May 20 00:13:52 1999 @@ -188,6 +188,7 @@ 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 @@ "version", "toplevel", "override", + "shutdown", "reset", "execute", "help", diff -ruN userv-0.62/lib.c userv-0.64.1/lib.c --- userv-0.62/lib.c Wed Apr 7 23:33:44 1999 +++ userv-0.64.1/lib.c Wed May 19 22:03:33 1999 @@ -116,14 +116,10 @@ #ifndef HAVE_SETENV int setenv(const char *name, const char *value, int overwrite) { - static char *buffer= 0; - static int avail= 0; - - int r; + char *buffer= 0; assert(overwrite==1); - r= makeroom(&buffer,&avail,strlen(name)+strlen(value)+2); - if (r) { errno= EINVAL; return -1; } + buffer= xmalloc(strlen(name)+strlen(value)+2); sprintf(buffer,"%s=%s",name,value); return putenv(buffer); diff -ruN userv-0.62/overlord.c userv-0.64.1/overlord.c --- userv-0.62/overlord.c Wed Apr 7 23:33:47 1999 +++ userv-0.64.1/overlord.c Thu May 20 00:13:54 1999 @@ -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 @@ } 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 @@ 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 @@ 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 @@ 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 -ruN userv-0.62/process.c userv-0.64.1/process.c --- userv-0.62/process.c Wed Apr 7 23:33:50 1999 +++ userv-0.64.1/process.c Thu May 20 00:13:55 1999 @@ -271,8 +271,18 @@ _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 @@ 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); } @@ -745,6 +749,18 @@ 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(); diff -ruN userv-0.62/servexec.c userv-0.64.1/servexec.c --- userv-0.62/servexec.c Thu Apr 8 00:43:15 1999 +++ userv-0.64.1/servexec.c Thu May 20 00:13:57 1999 @@ -137,6 +137,15 @@ 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 -ruN userv-0.62/spec.html/ch-client.html userv-0.64.1/spec.html/ch-client.html --- userv-0.62/spec.html/ch-client.html Sun Apr 18 20:09:49 1999 +++ userv-0.64.1/spec.html/ch-client.html Sun Jun 20 19:14:36 1999 @@ -1,110 +1,159 @@ - -User service daemon and client specification - Client program usage - - - + + + + + + +User service daemon and client specification - Client program usage + + + + + +
+ +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+

-User service daemon and client specification - chapter 2
+User service daemon and client specification - Chapter 2
Client program usage -

-
userv options [--] service-user service-name [argument ...]
-userv options -B|--builtin [--] builtin-service [info-argument ...]

+


+ +

+

+userv options [--] service-user service-name [argument ...]
+userv options -B|--builtin [--] builtin-service [info-argument ...]
+
+

+ +

service-user specifies which user is to provide the service. -The user may be a login name or a numeric uid, or - to indicate -that the service user is to be the same as the calling user.

+The user may be a login name or a numeric uid, or - to indicate +that the service user is to be the same as the calling user. +

-The service name is interpreted by the userv[1] +

+The service name is interpreted by the userv[1] daemon on behalf of the service user. It will often be the name of a program. +

+
-

-2.1 Options -

+

+2.1 Options +

+ +

Single-letter options may be combined as is usual with Unix programs, and the value for such an option may appear in the same argument or in the next.

-
-B
--builtin
Requests that a builtin service be provided. This is equivalent to -using the --override option to specify a string consisting of -execute-builtin followed by the builtin-service -requested, and requesting a service user of - (indicating the -calling user).

+

-B

--builtin
Requests that a builtin service be provided. This is equivalent to +using the --override option to specify a string consisting of +execute-builtin followed by the builtin-service +requested, and requesting a service user of - (indicating the +calling user). If the builtin service being requested requires a service-argument then this must be supplied to the client in the -same argument as the builtin-service. See Directives for changing execution settings, subsection 4.2.4 for details of the builtin services available, -and Security-overriding options, section 2.2 for details of the --override -options.

+same argument as the builtin-service. See Directives for changing execution settings, subsection 4.2.4 for details of the builtin services available, +and Security-overriding options, section 2.2 for details of the --override +options. The actual service name passed will be the builtin-service; note that this actual service name (as opposed to the override data) and the info-arguments supplied will be ignored by most builtin -services; the override mechanism and execute-builtin will be +services; the override mechanism and execute-builtin will be used to ensure that the right builtin service is called with the right service-arguments. -

-ffd[modifiers]=filename
--file fd[modifiers]=filename
Requests that data be copied in and out of the service using pipes. + +

-ffd[modifiers]=filename

--file fd[modifiers]=filename
Requests that data be copied in and out of the service using pipes. For each file or descriptor this will be done by creating a pipe, one end of which is passed to the service program and the other end of -which is passed to a copy of cat invoked by the client; the -other file descriptor passed to cat will be one inherited by +which is passed to a copy of cat invoked by the client; the +other file descriptor passed to cat will be one inherited by the client program from the caller or one opened by the client program -on behalf of the caller.

+on behalf of the caller. The descriptor in the service program that should be connected must be specified as fd, either as a decimal number or as one of the -strings stdin, stdout or stderr. The next argument is +strings stdin, stdout or stderr. The next argument is a filename which will be opened by the client with the privileges of the calling user. -

+ modifiers is used to specify whether the file or descriptor is to be read from or written to. It consists of a series of words separated by commas. A comma may separate the modifiers from the fd and is required if fd is not numeric. -

+ +

The modifier words are:

-
read
O_RDONLY: Allow reading and not writing. May not be used with -write or things that imply it. -
write
O_WRONLY: Allow writing and not reading. Doesn't truncate or -create without truncate or create. write or things -that imply it may not be used with read. -
overwrite
Equivalent to write,create,truncate. -
create
creat
O_CREAT: Creates the file if necessary. Implies write. -
exclusive
excl
O_EXCL: Fails if the file already exists. Implies write and -create. May not be used with truncate. -
truncate
trunc
O_TRUNC: Truncate any existing file. Implies write. -May not be used with exclusive. -
append
O_APPEND: All writes will append to the file. Implies write -(but not create). -
sync
O_SYNC: Do writes synchronously. Implies write. -
wait
nowait
close
These modifiers control the behaviour of the client, with respect to +
read
O_RDONLY: Allow reading and not writing. May not be used with +write or things that imply it. + +
write
O_WRONLY: Allow writing and not reading. Doesn't truncate or +create without truncate or create. write or things +that imply it may not be used with read. + +
overwrite
Equivalent to write,create,truncate. + +
create
creat
O_CREAT: Creates the file if necessary. Implies write. + +
exclusive
excl
O_EXCL: Fails if the file already exists. Implies write and +create. May not be used with truncate. + +
truncate
trunc
O_TRUNC: Truncate any existing file. Implies write. +May not be used with exclusive. + +
append
O_APPEND: All writes will append to the file. Implies write +(but not create). + +
sync
O_SYNC: Do writes synchronously. Implies write. + +
wait
nowait
close
These modifiers control the behaviour of the client, with respect to the pipes carrying data to and from the service, when the service terminates. See below. -
fd
The filename is not a filename but a numeric file descriptor. -One or both of read and write must be specified, and no -other words are allowed. The filename may also be stdin, -stdout or stderr for file descriptor 0, 1 or 2 respectively. + +
fd
The filename is not a filename but a numeric file descriptor. +One or both of read and write must be specified, and no +other words are allowed. The filename may also be stdin, +stdout or stderr for file descriptor 0, 1 or 2 respectively. +
-

+

-If no modifiers which imply read or write are used it -is as if write had been specified, except that if the +

+If no modifiers which imply read or write are used it +is as if write had been specified, except that if the filedescriptor 0 of the service is being opened (either specified -numerically or with stdin) it is as if overwrite had been -specified (or write if only fd was specified).

- -The client will also use O_NOCTTY when opening files specified by -the caller, to avoid changing its controlling terminal.

+numerically or with stdin) it is as if overwrite had been +specified (or write if only fd was specified). +

+ +

+The client will also use O_NOCTTY when opening files specified by +the caller, to avoid changing its controlling terminal. +

+

By default stdin, stdout and stderr of the service will be connected to the corresponding descriptors on the client. Diagnostics from -the client and daemon will also appear on stderr.

+the client and daemon will also appear on stderr. +

-If wait is specified, the client will wait for the pipe to be +

+If wait is specified, the client will wait for the pipe to be closed, and only exit after this has happened. This means that either the receiving end of the pipe connection was closed while data was still available at the sending end, or that the end of file was @@ -112,102 +161,128 @@ writing in the client at this stage will be considered a system error and cause the client to exit with status 255, but will not cause disconnection at the service side since the service has already -exited.

+exited. +

-If close is specified the client will immediately close the pipe -connection by killing the relevant copy of cat. If the service -uses the descriptor it will get SIGPIPE (or EPIPE) for a +

+If close is specified the client will immediately close the pipe +connection by killing the relevant copy of cat. If the service +uses the descriptor it will get SIGPIPE (or EPIPE) for a writing descriptor or end of file for a reading one; the descriptor -opened by or passed to the client will also be closed.

+opened by or passed to the client will also be closed. +

-If nowait is specified then the client will not wait and the +

+If nowait is specified then the client will not wait and the connection will remain open after the client terminates. Data may continue to be passed between the inheritors of the relevant descriptor on the service side and the corresponding file or descriptor on the client side until either side closes their descriptor. This should not usually be specified for stderr (or -stdout if --signals stdout is used) since diagnostics from +stdout if --signals stdout is used) since diagnostics from the service side may arrive after the client has exited and be -confused with expected output.

+confused with expected output. +

-The default is wait for writing file descriptors and close +

+The default is wait for writing file descriptors and close for reading ones. -

-wfd=action
--fdwaitfd=action
Sets the action on termination of the service for the specified file -descriptor; action must be wait, nowait or close +

+ +
-wfd=action
--fdwaitfd=action
Sets the action on termination of the service for the specified file +descriptor; action must be wait, nowait or close as described above. The file descriptor must be specified as open when this option is encountered; this option is overridden by any -later --file or --fdwait option - even by a ---file which does not specify an action on termination (in this +later --file or --fdwait option - even by a +--file which does not specify an action on termination (in this case the default will be used, as described above). -
-Dname=value
--defvar name=value
Set a user-defined variable name to value. These + +
-Dname=value
--defvar name=value
Set a user-defined variable name to value. These user-defined variables are made available in the configuration -language as the parameters u-name and are passed to the -service in environment variables USERV_U_name. name +language as the parameters u-name and are passed to the +service in environment variables USERV_U_name. name may contain only alphanumerics and underscores, and must start with a letter. If several definitions are given for the same name then only the last is effective. -
-t seconds
--timeout seconds
Time out the service if it takes longer than seconds seconds (a + +
-t seconds
--timeout seconds
Time out the service if it takes longer than seconds seconds (a positive integer, in decimal). Timeout will produce a diagnostic on stderr and an exit status of 255. If seconds is zero then no timeout will be implemented (this is the default). -
-S method
--signals method
Affects the handling of the exit status when the service terminates + +
-S method
--signals method
Affects the handling of the exit status when the service terminates due to a signal. (The client will always finish by calling -_exit, so that only numbers from 0 to 255 can be returned and +_exit, so that only numbers from 0 to 255 can be returned and not the full range of numbers and signal indications which can be -returned by the wait family of system calls.)

+returned by the wait family of system calls.) +

The method may be one of the following:

status
The client's exit status will be status. This will not be distinguishable from the service really having exited with code status. This method is the default, with a status of 254. -
number
number-nocore
The client's exit status will be the number of the signal which caused -the termination of the service. If number is used rather than -number-nocore then 128 will be added if the service dumped core. -number is very like the exit code mangling done by the Bourne + +
number
number-nocore
The client's exit status will be the number of the signal which caused +the termination of the service. If number is used rather than +number-nocore then 128 will be added if the service dumped core. +number is very like the exit code mangling done by the Bourne shell. -
highbit
The client's exit status will be the number of the signal with + +
highbit
The client's exit status will be the number of the signal with 128 added. If the service exits normally with an exit code of greater than 127 then 127 will be returned. -
stdout
The service's numeric wait status as two decimal numbers (high byte + +
stdout
The service's numeric wait status as two decimal numbers (high byte first) and a textual description of its meaning will be printed to the client's standard output. It will be preceded by a newline and followed by an extra newline, and the numbers are separated from each other and from the textual description by single spaces. The exit status of the client will be zero, unless a system error occurs in which case no exit status and description will be printed to stdout, -and an error message will be printed to stderr as usual.
+and an error message will be printed to stderr as usual. -

+

+

+ +

Problems such as client usage errors, the service not being found or permission being denied or failure of a system call are system errors. An error message describing the problem will be printed on the client's stderr, and the client's exit status will be 255. If the client dies due to a signal this should be treated as a serious system error. -

-H
--hidecwd
Prevents the calling process's current directory name from being +

+ +
-H
--hidecwd
Prevents the calling process's current directory name from being passed to the service; the null string will be passed instead. -
-P
--sigpipe
If the service program is terminated due to a SIGPIPE the exit + +
-P
--sigpipe
If the service program is terminated due to a SIGPIPE the exit status of the client will be zero, even if it would have been something else according to the exit status method specified. This option has no effect on the code and description printed if the exit -status method stdout is in use. -
-h
--help
--copyright
-h or --help prints the client's usage message; ---copyright prints the copyright and lack of warranty notice. +status method stdout is in use. + +
-h
--help
--copyright
-h or --help prints the client's usage message; +--copyright prints the copyright and lack of warranty notice. + +


-

-2.2 Security-overriding options -

+

+2.2 Security-overriding options +

+ +

There are also some options which are available for debugging and to allow the system administrator to override a user's policy. These options are available only if the client is called by root or if the calling user is the same as the service user.

-
--override configuration-data
--override-file filename
Do not read the usual configuration files. Instead, the client sends +

--override configuration-data

--override-file filename
Do not read the usual configuration files. Instead, the client sends configuration-data (followed by a newline) or the contents of filename (which is opened in the context of the client) to the daemon and the daemon uses that data instead. The @@ -215,22 +290,36 @@ single newline appended so that a single directive can easily be given, but if more than one directive is required it will have to contain one or more real newlines. -

--spoof-user user
Pretend to the service that it is being called by user (which + +

--spoof-user user
Pretend to the service that it is being called by user (which may be a username or a uid). This will also affect the group and supplementary groups supplied to the service; they will be the standard group and supplementary groups for user. The ---spoof-user option will not affect which user is chosen if -the service user is specified as just -; in this case the service +--spoof-user option will not affect which user is chosen if +the service user is specified as just -; in this case the service user will be the real calling user. -

+ +


-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract; next; back. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+ +User service daemon and client specification
+ +
+0.64.1
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff -ruN userv-0.62/spec.html/ch-config.html userv-0.64.1/spec.html/ch-config.html --- userv-0.62/spec.html/ch-config.html Sun Apr 18 20:09:50 1999 +++ userv-0.64.1/spec.html/ch-config.html Sun Jun 20 19:14:36 1999 @@ -1,40 +1,73 @@ - + + + + + + User service daemon and client specification - Service-side configuration - - + + + + + +
+ +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+

-User service daemon and client specification - chapter 4
+User service daemon and client specification - Chapter 4
Service-side configuration

+
+ +

Which services may be run by whom and under what conditions is -controlled by configuration files.

+controlled by configuration files. +

+

The daemon will read these files in order. Certain directives in the files modify the daemon's execution settings for invoking the service, for example allowing certain file descriptors to be specified by the -client or specifying which program to execute to provide the service.

+client or specifying which program to execute to provide the service. +

+

The last instance of each such setting will take effect. The directives which specify which program to execute will not stop the configuration file from being read; they will be remembered and will -only take effect if they are not overridden by a later directive.

+only take effect if they are not overridden by a later directive. +

-The daemon will first read /etc/userv/system.default. Then, by +

+The daemon will first read /etc/userv/system.default. Then, by default (this behaviour may be modified), it will read a per-user file -~/.userv/rc, if it exists and the service user's shell is in -/etc/shells. Finally it will read -/etc/userv/system.override.

+~/.userv/rc, if it exists and the service user's shell is in +/etc/shells. Finally it will read +/etc/userv/system.override. +

+

When it has read all of these files it will act according to the currently values of of the execution settings. +

+
-

-4.1 Configuration file syntax -

+

+4.1 Configuration file syntax +

+ +

The configuration file is a series of directives, usually one per -line. The portion of a line following a hash character # is +line. The portion of a line following a hash character # is taken as a comment and ignored. Each directive consists of a series of tokens separated by linear whitespace (spaces and tabs); tokens may be words consisting of non-space characters, or, where a string is @@ -42,77 +75,104 @@ contain the following backslash escapes:

-
\n
newline
\t
tab
\r
carriage return
\OOO
character whose octal code is OOO
\xXX
character whose hex code is XX
\punctuation
literal punctuation character (eg \\, \")
\newline (ie, backslash at end of line)
string continues on next line
-

+

\n
newline + +
\t
tab + +
\r
carriage return + +
\OOO
character whose octal code is OOO +
\xXX
character whose hex code is XX + +
\punctuation
literal punctuation character (eg \\, \") + +
\newline (ie, backslash at end of line)
string continues on next line + + +

+ +

Relative pathnames in directives are relative to the service program's current directory (usually the service user's home directory). -Pathnames starting with the two characters ~/ are taken to be +Pathnames starting with the two characters ~/ are taken to be relative to the service user's home directory. +

+
-

-4.2 Configuration file directives -

-
-

-4.2.1 Immediate directives -

+

+4.2 Configuration file directives +

+ +
+ +

+4.2.1 Immediate directives +

+ +

The following directives take effect immediately:

-
cd pathname
Change directory in the service program. cd is cumulative. It -is an error if the directory cannot be changed to.

+

cd pathname
Change directory in the service program. cd is cumulative. It +is an error if the directory cannot be changed to. -cd should not be used between execute-from-directory and +cd should not be used between execute-from-directory and the invocation of the service program, as the test for the availability of the service program would be done with the old current directory and the actual execution with the new (probably causing an error). -

eof
Stop reading the configuration file in question, as if end of file had -been reached. Any control constructs (if, catch-quit or -errors-push) which were started in that file will be considered + +

eof
Stop reading the configuration file in question, as if end of file had +been reached. Any control constructs (if, catch-quit or +errors-push) which were started in that file will be considered finished. Parsing will continue in the file which caused the file -containing the eof to be read. -

quit
Stop reading configuration files and act immediately on the current -settings. The behaviour of quit is subject to the -catch-quit control construct. -

include filename
include-ifexist filename
Read the configuration file filename, and then return to this +containing the eof to be read. + +

quit
Stop reading configuration files and act immediately on the current +settings. The behaviour of quit is subject to the +catch-quit control construct. + +

include filename

include-ifexist filename
Read the configuration file filename, and then return to this file and continue parsing it with the next directive. It is an error -if the file cannot be opened and read, unless include-ifexist +if the file cannot be opened and read, unless include-ifexist is used and the file does not exist, in which case the directive is silently ignored. -

include-lookup parameter directory
include-lookup-all parameter directory
Read the configuration file in directory whose name is the value -of parameter (see the description of if, Control structure directives, subsection 4.2.3). If parameter has several values they will -be tried in order; with include-lookup this search will stop -when one is found, but with include-lookup-all the search will -continue and any files appropriate to other values will be read too.

+ +

include-lookup parameter directory

include-lookup-all parameter directory
Read the configuration file in directory whose name is the value +of parameter (see the description of if, Control structure directives, subsection 4.2.3). If parameter has several values they will +be tried in order; with include-lookup this search will stop +when one is found, but with include-lookup-all the search will +continue and any files appropriate to other values will be read too. If none of the parameter's values had a corresponding file then the -file :default will be read, if it exists. If parameter's -list of values was empty then the file :none will be tried first -and read if it exists, otherwise :default will be tried.

+file :default will be read, if it exists. If parameter's +list of values was empty then the file :none will be tried first +and read if it exists, otherwise :default will be tried. -It is not an error for any of the files (including :default) not +It is not an error for any of the files (including :default) not to exist, but it is an error if a file exists and cannot be read or if the directory cannot be accessed. -

+ A translation will be applied to values before they are used to construct a filename, so that the lookup cannot access dotfiles or files in other directories: values starting with full stops will have -a colon prepended (making :.), colons will be doubled, and each -slash will be replaced with a colon followed by a hyphen :-. A +a colon prepended (making :.), colons will be doubled, and each +slash will be replaced with a colon followed by a hyphen :-. A parameter value which is the empty string will be replaced with -:empty (note that this is different from a parameter not having +:empty (note that this is different from a parameter not having any values). -

include-directory directory
Read configuration from all files in directory directory which + +

include-directory directory
Read configuration from all files in directory directory which are plain files whose names consist only of alphanumerics and hyphens and start with an alphanumeric. They will be read in lexical order. It is an error for the directory not to exist or for it or any of the files found not to be read successfully, or for anything with an appropriate name not to be a plain file or a symbolic link to a plain file. -

error text ...
Causes an error whose message includes the descriptive string + +

error text ...
Causes an error whose message includes the descriptive string text. text may consist of several tokens with intervening whitespace. The whitespace will be included in the message as found in the configuration file: all the characters until the end of the @@ -121,159 +181,203 @@ (i.e., after backslash escape processing) will be used. Comments and linear whitespace at the end of the line (or just before the comment) will still be ignored. -

message text ...
Causes a message including the descriptive string text to be + +

message text ...
Causes a message including the descriptive string text to be delivered as if it were an error message, but does not actually cause -an error.

+an error. + + +


-

-4.2.2 Directives with delayed effect -

+

+4.2.2 Directives with delayed effect +

+ +

The following directives have no immediate effect, but are remembered and have an effect on later processing of the configuration files.

-
user-rcfile filename
Specifies that the file filename should be read instead of the -user's ~/.userv/rc. This does not happen immediately; +

user-rcfile filename
Specifies that the file filename should be read instead of the +user's ~/.userv/rc. This does not happen immediately; instead, the setting is remembered and used after the -system.default configuration file has been read. This +system.default configuration file has been read. This directive has no effect in a user's configuration file or in the -system.override file, as the user's configuration file has +system.override file, as the user's configuration file has already been found and read by then and will not be re-read. -

errors-to-stderr
Causes error messages to be delivered to the client's stderr. -

errors-to-file filename
Error messages will be written to filename, which will be opened + +

errors-to-stderr
Causes error messages to be delivered to the client's stderr. + +

errors-to-file filename
Error messages will be written to filename, which will be opened in the context of and with the privileges of the service user. -

errors-to-syslog [facility [level]]
Error messages will be delivered using syslog. The default -facility is user; the default level is error.

+ +

errors-to-syslog [facility [level]]
Error messages will be delivered using syslog. The default +facility is user; the default level is error. + + +


-

-4.2.3 Control structure directives -

+

+4.2.3 Control structure directives +

+ +

The following directives are used to create control structures. If the end of the file is encountered before the end of any control structure which was started inside it then that control structure is considered finished. This is not an error.

-
if condition
elif condition
else
fi
Lines following if are interpreted only if the condition is +

if condition

elif condition

else

fi
Lines following if are interpreted only if the condition is true. Many conditions are properties of parameter values. Most parameters have a single string as a value; however, some may yield zero or several strings, in which case the condition is true if it is true of any of the strings individually. Parameters are described -below.

+below. +

The conditions are:

-
glob parameter glob-pattern ...
The value of the parameter whose name is given matches one of the glob +
glob parameter glob-pattern ...
The value of the parameter whose name is given matches one of the glob patterns (anchored at both ends; backslashes can be used to escape metacharacters). -
range parameter min max
The value of the parameter is a nonnegative integer and lies within -the range specified. min or max may be $ to indicate + +
range parameter min max
The value of the parameter is a nonnegative integer and lies within +the range specified. min or max may be $ to indicate no lower or upper limit, respectively. -
grep parameter filename
The filename refers to a file one of whose lines is the value of + +
grep parameter filename
The filename refers to a file one of whose lines is the value of the parameter (leading or trailing whitespace on each line and empty lines in the file are ignored). It is an error for the file not to be opened and read. -
! condition
The condition is not true. -
Conjunctions: & and |
( condition
+
+
! condition
The condition is not true. + +
Conjunctions: & and |
+( condition
 & condition
 & condition
 ...
-)
-is true if all the listed conditions are true; where | is used it +) +
+ +is true if all the listed conditions are true; where | is used it is true if any of them is true. Newlines must be used to separate one condition from the next, as shown, and the parentheses are mandatory. -These conjunctions do not do lazy evaluation.
-

+These conjunctions do not do lazy evaluation. + +

+

+

The parameters are:

-
service
The service name specified when the client was called. -
calling-user
Two strings: the login name of the calling user (determined as for -USERV_USER, above) and the calling uid (represented in +
service
The service name specified when the client was called. + +
calling-user
Two strings: the login name of the calling user (determined as for +USERV_USER, above) and the calling uid (represented in decimal). -
calling-group
Several strings: the primary and supplementary group names and gids + +
calling-group
Several strings: the primary and supplementary group names and gids (in decimal) of the calling process. All the group names come first, and then the gids. If the first supplementary group is the same as the primary group then it is elided. -
calling-user-shell
The calling user's shell, as listed in the password entry for the -calling login name (as determined for USERV_USER, above). -
service-user
Two strings: the name of the service user (as specified to the client) + +
calling-user-shell
The calling user's shell, as listed in the password entry for the +calling login name (as determined for USERV_USER, above). + +
service-user
Two strings: the name of the service user (as specified to the client) and their uid (represented in decimal). -
service-group
Several strings: the primary and supplementary group names and gids + +
service-group
Several strings: the primary and supplementary group names and gids (in decimal) of the service user. -
service-user-shell
The service user's shell, as listed in their password entry. -
u-name
The value of the user-defined variable name passed by the caller -using the --defvar command-line option to the client. If the + +
service-user-shell
The service user's shell, as listed in their password entry. + +
u-name
The value of the user-defined variable name passed by the caller +using the --defvar command-line option to the client. If the variable was not defined then this parameter is an empty list of strings; in this case any condition which tests it will be false, and -include-lookup on it will read the :none file, or -:default if :none is not found. +include-lookup on it will read the :none file, or +:default if :none is not found. +
+

-
errors-push filename
srorre
Stacks the error handling behaviour currently in effect. Any changes -to error handling will take effect only between errors-push and -srorre. -
catch-quit
hctac
Any use of quit inside catch-quit will merely cause the -parsing to continue at hctac instead. Any control constructs -started since the catch-quit will be considered finished if a -quit is found.

- -If an error occurs inside catch-quit the execution settings -will be reset (as if by the reset directive) and parsing will -likewise continue at hctac.

+

errors-push filename
srorre
Stacks the error handling behaviour currently in effect. Any changes +to error handling will take effect only between errors-push and +srorre. + +
catch-quit
hctac
Any use of quit inside catch-quit will merely cause the +parsing to continue at hctac instead. Any control constructs +started since the catch-quit will be considered finished if a +quit is found. + +If an error occurs inside catch-quit the execution settings +will be reset (as if by the reset directive) and parsing will +likewise continue at hctac. If a lexical or syntax error is detected in the same configuration -file as the catch-quit, while looking for the hctac -after an error or quit, that new error will not be caught. +file as the catch-quit, while looking for the hctac +after an error or quit, that new error will not be caught. + +


-

-4.2.4 Directives for changing execution settings -

+

+4.2.4 Directives for changing execution settings +

+ +

The following directives modify the execution settings; the server will remember the fact that the directive was encountered and act on it only after all the configuration has been parsed. The last directive which modifies any particuar setting will take effect.

-
reject
Reject the request. execute, execute-from-directory and -execute-from-path will change this setting. -

execute program [argument ...]
Execute the program program, with the arguments as specified, +

reject
Reject the request. execute, execute-from-directory and +execute-from-path will change this setting. + +

execute program [argument ...]
Execute the program program, with the arguments as specified, followed by any arguments given to the client if -no-suppress-args is in effect. It is an error for the +no-suppress-args is in effect. It is an error for the execution to fail when it is attempted (after all the configuration has been parsed). If program does not contain a slash it will be searched for on the service user's path. -

execute-from-directory pathname [argument ...]
Take all the characters after the last slash of the service name + +

execute-from-directory pathname [argument ...]
Take all the characters after the last slash of the service name specified when the client was called, and execute that program in the directory named by pathname as if it had been specified for execute. The part of the service name used may contain only alphanumerics and hyphens and must start with an alphanumeric (and it -must be non-empty), otherwise it is an error.

+must be non-empty), otherwise it is an error. This directive is ignored if the relevant program does not exist in the directory specified; in this case the program to execute is left -at its previous setting (or unset, if it was not set before).

+at its previous setting (or unset, if it was not set before). It is an error for the test for the existence of the program to fail other than with a `no such file or directory' indication. It is also an error for the execution to fail if and when it is attempted (after all the configuration has been parsed). -

execute-from-path
service is interpreted as a program on the default PATH -(or as a pathname of an executable, if it contains a /). This + +

execute-from-path
service is interpreted as a program on the default PATH +(or as a pathname of an executable, if it contains a /). This directive is very dangerous, and is only provided to make the ---override options effective. It should not normally be used. +--override options effective. It should not normally be used. It is an error for the execution to fail when it is attempted (after all the configuration has been parsed). -

execute-builtin service-name service-arguments
Executes the builtin service service-name. These builtin + +

execute-builtin service-name service-arguments

+Executes the builtin service service-name. These builtin services display information about the server and/or the request, and ignore any arguments passed from the service side except possibly to print them as part of their output. They write their results to their @@ -281,129 +385,166 @@ builtin services are:

-
execute
Displays the execution settings, defined variables, +
execute
Displays the execution settings, defined variables, arguments, etc. with which the builtin service was invoked. -
environment
Displays the environment variable settings with which the builtin + +
environment
Displays the environment variable settings with which the builtin service was invoked. -
parameter parameter
Displays the values of the service configuration language parameter + +
parameter parameter
Displays the values of the service configuration language parameter specified. -
version
Displays the version string and compilation details of the uservd + +
version
Displays the version string and compilation details of the uservd server program. -
reset
Displays the default reset configuration (evaluated when reset + +
reset
Displays the default reset configuration (evaluated when reset is found in a configuration file, or when an error is caught by -catch-quit). -
toplevel
Displays the top-level default configuration (the configuration data, +catch-quit). + +
toplevel
Displays the top-level default configuration (the configuration data, evaluated by the server, which calls all the other configuration files). -
override
Displays the top-level override configuration (the configuration data, + +
override
Displays the top-level override configuration (the configuration data, evaluated by the server, which causes all the other configuration data to be parsed). -
help
Displays a list of the understood builtin service names and arguments.
+ +
help
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. -
set-environment
no-set-environment
Runs /etc/environment to set the service user's environment. +

+ +
set-environment
no-set-environment
Runs /etc/environment to set the service user's environment. This adds the overhead of invoking a shell, but doesn't cause any shell (de)mangling of the service's arguments. This is achieved by invoking -
.../program arg arg arg ...
+
+.../program arg arg arg ...
+
+ as -
/bin/sh -c '. /etc/environment; exec "$@"' - .../program arg arg arg ...
-no-set-environment cancels the effect of -set-environment. -
no-suppress-args
suppress-args
Include any arguments given to the client as arguments to the program -invoked as a result of an execute, -execute-from-directory or execute-from-path directive. -suppress-args undoes the effect of no-suppress-args. -
require-fd fd-range read|write
Insist that the filedescriptor(s) be opened for reading resp. writing. +
+/bin/sh -c '. /etc/environment; exec "$@"' - .../program arg arg arg ...
+
+ +no-set-environment cancels the effect of +set-environment. + +
no-suppress-args
suppress-args
Include any arguments given to the client as arguments to the program +invoked as a result of an execute, +execute-from-directory or execute-from-path directive. +suppress-args undoes the effect of no-suppress-args. + +
require-fd fd-range read|write
Insist that the filedescriptor(s) be opened for reading resp. writing. It is an error if any descriptor marked as required when the service is about to be invoked (after the configuration has been parsed) was not specified when the client was invoked. Each file descriptor has a -separate setting, and the last one of require-fd, -allow-fd, ignore-fd, null-fd or reject-fd -which affected a particular file descriptor will take effect.

+separate setting, and the last one of require-fd, +allow-fd, ignore-fd, null-fd or reject-fd +which affected a particular file descriptor will take effect. fd-range may be a single number, two numbers separated by a hyphen, or one number followed by a hyphen (indicating all descriptors from that number onwards). It may also be one of the words -stdin, stdout or stderr. Open-ended file descriptor -rangers are allowed only with reject-fd and ignore-fd, +stdin, stdout or stderr. Open-ended file descriptor +rangers are allowed only with reject-fd and ignore-fd, as otherwise the service program would find itself with a very large -number of file descriptors open.

+number of file descriptors open. When the configuration has been parsed, and before the service is about to be executed, stderr (fd 2) must be required or allowed -(require-fd or allow-fd) for writing; this is so that +(require-fd or allow-fd) for writing; this is so that the error message printed by the server's child process if it cannot -exec the service program is not lost. -

allow-fd fd-range [read|write]
Allow the descriptor(s) to be opened for reading resp. writing, or -either if neither read nor write is specified. If a +exec the service program is not lost. + +
allow-fd fd-range [read|write]
Allow the descriptor(s) to be opened for reading resp. writing, or +either if neither read nor write is specified. If a particular descriptor not specified by the client then it will be open -onto /dev/null (for reading, writing, or both, depending on -whether read, write or neither was specified). -
null-fd fd-range [read|write]
Specify that the descriptor(s) be opened onto /dev/null for -reading resp. writing, or both if neither read nor write +onto /dev/null (for reading, writing, or both, depending on +whether read, write or neither was specified). + +
null-fd fd-range [read|write]
Specify that the descriptor(s) be opened onto /dev/null for +reading resp. writing, or both if neither read nor write is specified. Any specification of these file descriptors by the client will be silently ignored; the client will see its ends of the descriptors being closed immediately. -
reject-fd fd-range
Do not allow the descriptor(s) to be specified by the client. It is + +
reject-fd fd-range
Do not allow the descriptor(s) to be specified by the client. It is an error if any descriptor(s) marked for rejection are specified when the service is about to be invoked (after the configuration has been parsed). -
ignore-fd fd-range
Silently ignore any specification by the client of those + +
ignore-fd fd-range
Silently ignore any specification by the client of those descriptor(s). The pipes corresponding to these descriptors will be closed just before the service is invoked. -
disconnect-hup
no-disconnect-hup
Causes the service's process group to get a SIGHUP if the + +
disconnect-hup
no-disconnect-hup
Causes the service's process group to get a SIGHUP if the client disconnects before the main service process terminates. -no-disconnect-hup cancels disconnect-hup.

+no-disconnect-hup cancels disconnect-hup. If one of the reading descriptors specified when the client is called gets a read error, or if the service is disconnected for some other -reason, then the SIGHUP will be delivered before the +reason, then the SIGHUP will be delivered before the writing end(s) of the service's reading pipe(s) are closed, so that the client can distinguish disconnection from reading EOF on a pipe. -

reset
Resets the execution settings to the default. This is equivalent to: -
cd ~/
+
+
reset
Resets the execution settings to the default. This is equivalent to: +
+cd ~/
 reject
 no-set-environment
 suppress-args
 allow-fd 0 read
 allow-fd 1-2 write
 reject-fd 3-
-disconnect-hup
+disconnect-hup +
+ -If no execute, execute-from-path, -execute-from-directory or builtin is interpreted before +If no execute, execute-from-path, +execute-from-directory or builtin is interpreted before all the files are read then the request is rejected. +


-

-4.3 Errors in the configuration file -

+

+4.3 Errors in the configuration file +

+ +

If a syntax error or other problem occurs when processing a configuration file then a diagnostic will be issued, to wherever the -error messages are currently being sent (see the errors- family -of directives, above).

+error messages are currently being sent (see the errors- family +of directives, above). +

+

The error will cause processing of the configuration files to cease at -that point, unless the error was inside a catch-quit construct. +that point, unless the error was inside a catch-quit construct. In this case the settings controlling the program's execution will be -reset to the defaults as if a reset directive had been issued, -and parsing continues after hctac. +reset to the defaults as if a reset directive had been issued, +and parsing continues after hctac. +


-

-4.4 Defaults -

+

+4.4 Defaults +

+ +

The default configuration processing is as if the daemon were parsing an overall configuration file whose contents were as follows: -

reset
+
+reset
 user-rcfile ~/.userv/rc
 errors-to-stderr
 include /etc/userv/system.default
@@ -415,23 +556,41 @@
    srorre
 fi
 include /etc/userv/system.override
-quit

+quit +

+

-If one of the --override options to the client is used then it +

+If one of the --override options to the client is used then it will instead be as if the daemon were parsing an overall configuration as follows: -

reset
+
+reset
 errors-to-stderr
 include file containing configuration data sent by client
-quit
+quit +
+

+ +
+ +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next]
-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract; next; back. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +User service daemon and client specification
+ +
+0.64.1
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff -ruN userv-0.62/spec.html/ch-envir.html userv-0.64.1/spec.html/ch-envir.html --- userv-0.62/spec.html/ch-envir.html Sun Apr 18 20:09:52 1999 +++ userv-0.64.1/spec.html/ch-envir.html Sun Jun 20 19:14:37 1999 @@ -1,125 +1,192 @@ - + + + + + + User service daemon and client specification - Execution environment of the service program - - + + + + + +
+ +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+

-User service daemon and client specification - chapter 3
+User service daemon and client specification - Chapter 3
Execution environment of the service program

+
+ +

The daemon which is handling the service user side of things will read configuration files to decide what to do. If it decides to allow the service to be provided it will fork a subprocess to execute the -service.

+service. +

+

The service will have no controlling terminal, but it will be a -process group leader.

+process group leader. +

+

If the client is killed or times out or a file or descriptor being read or written by the client process gets an error then the service will be disconnected from the client. The client will return an exit status of 255 and some the service's pipes may be closed at the other -end. The service will become a child of init. The service may +end. The service will become a child of init. The service may well not notice the disconnection, though writing to a pipe after this -may produce a SIGPIPE and the facility exists to have a -SIGHUP sent to the service on disconnection. +may produce a SIGPIPE and the facility exists to have a +SIGHUP sent to the service on disconnection. +

+
-

-3.1 File descriptors -

+

+3.1 File descriptors +

+ +

The service program's standard filedescriptors, and possibly other file descriptors, will be connected to pipes or to -/dev/null. The userv client/daemon pair will arrange +/dev/null. The userv client/daemon pair will arrange that data is copied between the files or file descriptors specified to -to the client by the caller and these these pipes.

+to the client by the caller and these these pipes. +

+

Pipes which may be written to will be closed if a write error occurs on the corresponding client-side file or descriptor, which may result -in a SIGPIPE in the service program; pipes open for reading -will get EOF if the client-side file descriptor gets EOF -or an error.

+in a SIGPIPE in the service program; pipes open for reading +will get EOF if the client-side file descriptor gets EOF +or an error. +

+

If the service closes one of its reading file descriptors the writing -end of the corresponding pipe will generate a SIGPIPE when +end of the corresponding pipe will generate a SIGPIPE when attempts are made by the client/daemon pair to write to it. This will not be considered an error; rather, the relevant pipe will be discarded and the corresponding file or file descriptor held by the -client will be closed.

+client will be closed. +

+

Likewise, if one of the file descriptors held by the client for writing by the service is a pipe whose other end is closed by the caller then the client/daemon pair will see an error when trying to copy data provided by the service. This too will not be considered an error; rather, the pipe correspondong to that descriptor will be closed and any further writes will cause the service to get a -SIGPIPE.

+SIGPIPE. +

+

Note that not all write errors or broken pipes on file descriptors may be visible to the service, since buffered data may be discarded by the operating system and there will be a finite interval between the error happening and the service being disconnected from the client or the -next write causing a SIGPIPE.

+next write causing a SIGPIPE. +

+

Read errors on file descriptors (and disconnection) will only be visible to the service and distinguishable from normal end of file if -disconnect-hup is in effect.

+disconnect-hup is in effect. +

+

Read and write errors (other than broken pipes, as described above) will always be visible to the caller; they are system errors, and will therefore cause the client to print an error message to stderr and -return with an exit status of 255.

+return with an exit status of 255. +

+

If the main service program process exits while it still has running children any file descriptors held by those children can remain open, -depending on the use of wait, nowait or close for the +depending on the use of wait, nowait or close for the relevant file descriptor in the client's arguments. By default writing filedescriptors remain open and the client will wait for them to be closed at the service end, and reading file descriptors are closed immediately. These leftover child processes will not get a any -SIGHUP even if a read or write error occurs or the client +SIGHUP even if a read or write error occurs or the client disconnects before then. +

+
-

-3.2 Environment -

+

+3.2 Environment +

+ +

The service will have some information in environment variables:

-
USERV_USER
The login name of the calling user. If the LOGNAME variable is -set (or, if that is unset, if the USER variable is set) in the +
USERV_USER
The login name of the calling user. If the LOGNAME variable is +set (or, if that is unset, if the USER variable is set) in the environment passed to the client by the caller then the password entry for that login name will be looked up; if that password entry's uid is the same as that of the calling process then that login name will be -used, otherwise (or if neither LOGNAME nor USER is set) +used, otherwise (or if neither LOGNAME nor USER is set) the calling process's uid will be looked up to determine their login name (and if this lookup fails then the service will not be invoked). -
USERV_UID
The uid of the calling process. -
USERV_GID
The gid and supplementary group list of the calling process: first the + +
USERV_UID
The uid of the calling process. + +
USERV_GID
The gid and supplementary group list of the calling process: first the group in gid and then those in the supplementary group list, in decimal, separated by spaces. -
USERV_GROUP
The group names of the calling process, listed in the same way as the -ids are in USERV_GID. If no name can be found for any of the + +
USERV_GROUP
The group names of the calling process, listed in the same way as the +ids are in USERV_GID. If no name can be found for any of the calling process's group(s) then the service will not be invoked. -
USERV_CWD
The client's current working directory name (this directory may not be + +
USERV_CWD
The client's current working directory name (this directory may not be accessible to the service). If it could not be determined or the ---hidecwd flag was used then this variable will be set to an +--hidecwd flag was used then this variable will be set to an empty string (this is not considered an error). -
USERV_SERVICE
The service name requested by the caller. -
USERV_U_name
The value supplied to the client by the caller using -Dname. + +
USERV_SERVICE
The service name requested by the caller. + +
USERV_U_name
The value supplied to the client by the caller using -Dname. +
-HOME, PATH, SHELL, LOGNAME and USER +HOME, PATH, SHELL, LOGNAME and USER will be set appropriately (according to the details of the service user). +


-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract; next; back. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+ +User service daemon and client specification
+ +
+0.64.1
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff -ruN userv-0.62/spec.html/ch-intro.html userv-0.64.1/spec.html/ch-intro.html --- userv-0.62/spec.html/ch-intro.html Sun Apr 18 20:09:53 1999 +++ userv-0.64.1/spec.html/ch-intro.html Sun Jun 20 19:14:37 1999 @@ -1,32 +1,68 @@ - + + + + + + User service daemon and client specification - Introduction - - + + + + + +
+ + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+

-User service daemon and client specification - chapter 1
+User service daemon and client specification - Chapter 1
Introduction

+ +
+ +

There is a daemon which invokes user service programs (henceforth `services') in response to requests by callers of a companion client program (henceforth the `client') and according to rules set forth in system-wide and user-specific configuration files. The companion client program is setuid root, and negotiates with the daemon through -an AF_UNIX socket and associated objects in a system-wide +an AF_UNIX socket and associated objects in a system-wide private directory set aside for the purpose. The user who wishes the service to be performed and calls the client is called the `calling user'; the process which calls the client is called the `calling process'. -

+

+ +

The daemon and the client are responsible for ensuring that information is safely carried across the security boundary between the two users, and that the processes on either side cannot interact with each other in any unexpected ways. +

+ +
+ + [Abstract] + [Copyright Notice] + [Contents] + [next] +
-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract; next. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +User service daemon and client specification
+ +
+0.64.1
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff -ruN userv-0.62/spec.html/ch-ipass.html userv-0.64.1/spec.html/ch-ipass.html --- userv-0.62/spec.html/ch-ipass.html Sun Apr 18 20:09:55 1999 +++ userv-0.64.1/spec.html/ch-ipass.html Sun Jun 20 19:14:37 1999 @@ -1,101 +1,144 @@ - + + + + + + User service daemon and client specification - Information passed through the client/daemon combination - - + + + + + +
+ +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+

-User service daemon and client specification - chapter 5
+User service daemon and client specification - Chapter 5
Information passed through the client/daemon combination

+
+ +

The information described below is the only information which passes between the caller and the service.

+ + +


-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract; next; back. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+ +User service daemon and client specification
+ +
+0.64.1
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff -ruN userv-0.62/spec.html/ch-notes.html userv-0.64.1/spec.html/ch-notes.html --- userv-0.62/spec.html/ch-notes.html Sun Apr 18 20:09:56 1999 +++ userv-0.64.1/spec.html/ch-notes.html Sun Jun 20 19:14:37 1999 @@ -1,106 +1,156 @@ - + + + + + + User service daemon and client specification - Applications and notes on use - - + + + + + +
+ +[back] + [Abstract] + [Copyright Notice] + [Contents] + +
+

-User service daemon and client specification - chapter 6
+User service daemon and client specification - Chapter 6
Applications and notes on use

+
-

-6.1 Standard services and directory management -

+

+6.1 Standard services and directory management +

+ +

In later versions of this specification standard service names and interfaces for common services such as mail delivery and WWW CGI -scripts will be specified.

+scripts will be specified. +

-userv-using applications and system services which hide -userv behind wrapper scripts may need to store information in +

+userv-using applications and system services which hide +userv behind wrapper scripts may need to store information in the user's filespace to preserve the correct placement of the security perimiters. Such applications should usually do so in a directory -(created by them) ~/.userv/.servdata/service, where -service is the service name or application in question.

+(created by them) ~/.userv/.servdata/service, where +service is the service name or application in question. +

-The use of a dot-directory inside ~/.userv will hopefully avoid +

+The use of a dot-directory inside ~/.userv will hopefully avoid the user becoming confused by finding parts of a semi-privileged application's internal state in their filespace, and or discourage them from fiddling with and thus corrupting it. (Note that such applications should of course not rely for their global integrity on the integrity of the data on the user's side of the security boundary.) +

+
-

-6.2 Reducing the number of absolutely privileged subsystems -

+

+6.2 Reducing the number of absolutely privileged subsystems +

+ +

Currently most Unix systems have many components which need to run as root, even though most of their activity does not strictly require it. This gives rise to a large and complex body of code which must be -trusted with the security of the system.

- -Using userv many of these subsystems no longer need any unusual -privilege.

+trusted with the security of the system. +

-cron and at, lpr and the system's mail transfer -agent (sendmail, smail, exim or the like) all +

+Using userv many of these subsystems no longer need any unusual +privilege. +

+ +

+cron and at, lpr and the system's mail transfer +agent (sendmail, smail, exim or the like) all fall into this category. +

+
-

-6.3 Do not give away excessive privilege to userv-using facilities -

+

+6.3 Do not give away excessive privilege to userv-using facilities +

+ +

There is a danger that people reimplementing the facilities I mention -above using userv will discard much of the security benefit by +above using userv will discard much of the security benefit by using a naive implementation technique. This will become clearer with -an example:

+an example: +

-Consider the lpr program. In current systems this needs to +

+Consider the lpr program. In current systems this needs to have an absolutely privileged component in order to support delayed printing without copying: when the user queues a file to be printed the filename is stored in the print queue, rather than a copy of it, and the printer daemon accesses the file directly when it is ready to print the job. In order that the user can print files which are not world-readable the daemon is given root privilege so that it can open -the file in the context of the user, rather than its own.

+the file in the context of the user, rather than its own. +

-A simple-minded approach to converting this scheme to use userv -might involve giving the printer daemon (the lp user) the -ability to read the file by allowing them to run cat (or a -special-purpose file-reading program) as any user. The lpr -program would use a userv service to store the filename in the +

+A simple-minded approach to converting this scheme to use userv +might involve giving the printer daemon (the lp user) the +ability to read the file by allowing them to run cat (or a +special-purpose file-reading program) as any user. The lpr +program would use a userv service to store the filename in the printer daemon's queues, and the daemon would read the file later when -it felt like it.

+it felt like it. +

+

However, this would allow the printer daemon to read any file on the system, whether or not someone had asked for it to be printed. Since many files will contain passwords and other security-critical information this is nearly as bad as giving the daemon root access in the first place. Any security holes in the print server which allow a -user to execute commands as the lp user will give the user the -ability to read any file on the system.

+user to execute commands as the lp user will give the user the +ability to read any file on the system. +

+

Instead, it is necessary to keep a record of which files the daemon has been asked to print outside the control of the print daemon. This record could be kept by a new root-privileged component, but this is not necessary: the record of which files a user has asked to be printed can be kept under the control of the user in question. The -submission program lpr will make a record in an area under the +submission program lpr will make a record in an area under the user's control before communicating with the print server, and the print server would be given the ability to run a special file-reading program which would only allow files to be read which were listed in -the user's file of things they'd asked to print.

+the user's file of things they'd asked to print. +

+

Now security holes in most of the printing system do not critically affect the security of the entire system: they only allow the attacker to read and interfere with print jobs. Bugs in the programs run by the print server to read users' files (and to remove entries from the list of files when it has done with them) will still be serious, but this -program can be quite simple.

+program can be quite simple. +

-Similar considerations apply to many userv-based versions of -facilities which currently run as root.

+

+Similar considerations apply to many userv-based versions of +facilities which currently run as root. +

+

It is debatable whether the user-controlled state should be kept in the user's filespace (in dotfiles, say) or kept in a separate area set aside for the purpose; however, using the user's home directory (and @@ -108,43 +158,68 @@ contain many subsystems' state) has fewer implications for the rest of the system and makes it entirely clear where the security boundaries lie. +

+
-

-6.4 userv is not a replacement for really and sudo -

-userv is not intended as a general-purpose system +

+6.4 userv is not a replacement for really and sudo +

+ +

+userv is not intended as a general-purpose system administration tool with which system administrators can execute privileged programs when they need to. It is unsuitable for this purpose precisely because it enforces a strong separation between the -calling and the called program, which is undesirable in this context.

+calling and the called program, which is undesirable in this context. +

+

Its facilities for restricting activities to running certain programs may at first glance seem to provide similar functionality to -sudo[2]. However, the +sudo[2]. However, the separation mentioned above is a problem here too, particular for -interaction - it can be hard for a userv service program to +interaction - it can be hard for a userv service program to interact with its real caller or the user in question. +

+
-

-6.5 Don't give access to general-purpose utilities -

- -Do not specify general purpose programs like mv or cat -in execute- directives without careful thought about their -arguments, and certainly not if no-suppress-args is specified. + +

+6.5 Don't give access to general-purpose utilities +

+ +

+Do not specify general purpose programs like mv or cat +in execute- directives without careful thought about their +arguments, and certainly not if no-suppress-args is specified. If you do so it will give the caller much more privilige than you -probably intend.

+probably intend. +

+

It is a shame that I have to say this here, but inexperienced administrators have made similar mistakes with programs like -sudo. +sudo. +

+
-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract; back. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +[back] + [Abstract] + [Copyright Notice] + [Contents] + +
+ +User service daemon and client specification
+ +
+0.64.1
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff -ruN userv-0.62/spec.html/footnotes.html userv-0.64.1/spec.html/footnotes.html --- userv-0.62/spec.html/footnotes.html Sun Apr 18 20:09:57 1999 +++ userv-0.64.1/spec.html/footnotes.html Sun Jun 20 19:14:37 1999 @@ -1,21 +1,54 @@ - -User service daemon and client specification - footnotes - - -

User service daemon and client specification - footnotes

-

1

-

-userv is -short for `user services', and is pronounced `you-serve'.

2

-

-sudo is a program which allows users to + + + + + + +User service daemon and client specification - Footnotes + + + + + +


+ + [Abstract] + [Copyright Notice] + [Contents] + +
+ +

User service daemon and client specification - Footnotes

+ +
+ +

1 +

+

+userv is +short for `user services', and is pronounced `you-serve'. +

2 +

+

+sudo is a program which allows users to execute certain programs as root, according to configuration files -specified by the system administrator.


-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- +specified by the system administrator. +


+ + [Abstract] + [Copyright Notice] + [Contents] + +
+ +User service daemon and client specification
+ +
+0.64.1
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff -ruN userv-0.62/spec.html/index.html userv-0.64.1/spec.html/index.html --- userv-0.62/spec.html/index.html Sun Apr 18 20:09:58 1999 +++ userv-0.64.1/spec.html/index.html Sun Jun 20 19:14:37 1999 @@ -1,73 +1,111 @@ - + + + + + + User service daemon and client specification - - + + + + + +
+ + [Abstract] + [Copyright Notice] + [Contents] + +
+

User service daemon and client specification

-

-0.1 Abstract -

+
+ +

Abstract

This is a specification for a Unix system facility to allow one program to invoke another when only limited trust exists between them. +

Copyright Notice

+ +

+userv is Copyright 1996-1999 Ian Jackson. +

+ +

+userv is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or (at +your option) any later version. +

+ +

+This program is distributed in the hope that it will be useful, but +without any warranty; without even the implied warranty of +merchantability or fitness for a particular purpose. See +the GNU General Public License for more details. +

+ +

+You should have received a copy of the GNU General Public License +along with userv; if not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +

+ + +
-

-0.2 Table of contents -

+ +

Contents

+ -

0.3 Copyright

-userv is Copyright 1996-1999 Ian Jackson.

-userv is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at -your option) any later version.

+


-This program is distributed in the hope that it will be useful, but -without any warranty; without even the implied warranty of -merchantability or fitness for a particular purpose. See -the GNU General Public License for more details.

+ [Abstract] + [Copyright Notice] + [Contents] -You should have received a copy of the GNU General Public License -along with userv; if not, write to the Free Software -Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +User service daemon and client specification
+ +
+0.64.1
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff -ruN userv-0.62/spec.ps userv-0.64.1/spec.ps --- userv-0.62/spec.ps Sun Apr 18 20:09:39 1999 +++ userv-0.64.1/spec.ps Sun Jun 20 19:14:30 1999 @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 %%Creator: Basser Lout Version 3.10 (November 1996) -%%CreationDate: Sun Apr 18 20:08:36 1999 +%%CreationDate: Sun Jun 20 19:14:05 1999 %%DocumentData: Binary %%DocumentNeededResources: (atend) %%DocumentMedia: Plain 595 842 0 white () @@ -268,7 +268,7 @@ 0.6953 1.0000 scale 200 fnt31 1031 -43()m grestore -240 fnt82 4326 12513(0.62)m +240 fnt82 4245 12513(0.64.1)m 9066 609 0 609 240 240 60 0 11253 LoutGr2 newpath 0 ysize 0.3 ft sub moveto xsize 0 rlineto @@ -278,12 +278,12 @@ grestore 320 fnt84 0 5(0.1.)m 628(Abstract)s grestore -0 10791(This)m 476(is)s +0 10959(This)m 476(is)s 686(a)s 852(speci\207cation)s 2117(for)s 2455(a)s 2621(Unix)s 3155(system)s 3879(f)s 2(acility)k 4606(to)s 4845(allo)s 6(w)k 5424(one)s 5826(program)s 6696(to)s 6935(in)s 9(v)k 4(ok)k 2(e)k -7628(another)s 8405(when)s 0 10551(only)m 480(limited)s 1214(trust)s -1698(e)s 3(xists)k 2290(between)s 3144(them.)s 9066 610 0 610 240 240 60 0 9587 LoutGr2 +7628(another)s 8405(when)s 0 10719(only)m 480(limited)s 1214(trust)s +1698(e)s 3(xists)k 2290(between)s 3144(them.)s 9066 670 0 670 240 240 60 0 9695 LoutGr2 newpath 0 ysize 0.3 ft sub moveto xsize 0 rlineto 0 0.1 ft rlineto @@ -291,102 +291,114 @@ closepath fill grestore 320 fnt84 -0 6(0.2.)m 628(Contents)s +0 66(0.2.)m 628(Copyright)s 2109(Notice)s grestore -240 fnt84 0 9175(1.)m 1200(Intr)s 4(oduction)k -8953(3)s 0 8818(2.)m 1200(Client)s 1883(pr)s 4(ogram)k -2839(usage)s 8952(4)s 240 fnt82 0 8579(2.1.)m 1200(Options)s -8952(4)s 0 8342(2.2.)m 1200(Security-o)s 3(v)k 3(erriding)k -3118(options)s 8958(7)s 240 fnt84 0 7997(3.)m 1200(Execution)s -2279(en)s 9(vir)k 4(onment)k 3627(of)s 3899(the)s -4273(ser)s 2(vice)k 5030(pr)s 4(ogram)k 8952(8)s -240 fnt82 0 7758(3.1.)m 1200(File)s 1627(descriptors)s 8959(8)s -0 7521(3.2.)m 1200(En)s 9(vironment)k 8955(9)s 240 fnt84 -0 7176(4.)m 1200(Ser)s 2(vice-side)k 2474(con\207guration)s 8831(10)s -240 fnt82 0 6937(4.1.)m 1200(Con\207guration)s 2587(\207le)s 2948(syntax)s -8831(10)s 0 6700(4.2.)m 1200(Con\207guration)s 2587(\207le)s 2948(directi)s 6(v)k 3(es)k -8831(10)s 0 6462(4.3.)m 1200(Errors)s 1847(in)s 2090(the)s -2438(con\207guration)s 3771(\207le)s 8833(16)s 0 6225(4.4.)m 1200(Def)s 2(aults)k -8838(17)s 240 fnt84 0 5880(5.)m 1200(Inf)s 6(ormation)k -2498(passed)s 3231(thr)s 4(ough)k 4106(the)s 4480(client/daemon)s -5969(combination)s 8832(18)s 0 5523(6.)m 1200(A)s 6(pplications)k -2536(and)s 2977(notes)s 3562(on)s 3871(use)s 8831(20)s -240 fnt82 0 5284(6.1.)m 1200(Standard)s 2108(services)s 2928(and)s -3332(directory)s 4248(management)s 8831(20)s 0 5046(6.2.)m 1200(Reducing)s +gsave +0 9455 translate +0.6953 1.0000 scale +240 fnt31 0 -52(userv)m + +grestore +560 9401(is)m 770(Cop)s 2(yright)k 1799(1996-1999)s 2889(Ian)s +3251(Jackson.)s gsave +0 9047 translate +0.6953 1.0000 scale +240 fnt31 0 -52(userv)m +grestore +544 8993(is)m 737(free)s +1146(softw)s 2(are;)k 2062(you)s 2460(can)s 2832(redistrib)s 4(ute)k +3955(it)s 4130(and/or)s 4784(modify)s 5512(it)s 5688(under)s +6276(the)s 6607(terms)s 7172(of)s 7426(the)s 7757(GNU)s +8315(General)s 0 8753(Public)m 659(License)s 1453(as)s 1698(published)s +2682(by)s 2971(the)s 3314(Free)s 3789(Softw)s 2(are)k +4699(F)s 3(oundation;)k 5894(either)s 6492(v)s 3(ersion)k +7245(2)s 7414(of)s 7680(the)s 8023(License,)s 8867(or)s +0 8513(\(at)m 311(your)s 810(option\))s 1550(an)s 3(y)k +1947(later)s 2430(v)s 3(ersion.)k 0 8105(This)m 476(program)s +1346(is)s 1556(distrib)s 4(uted)k 2632(in)s 2875(the)s +3223(hope)s 3745(that)s 4163(it)s 4355(will)s 4781(be)s +5063(useful,)s 5754(b)s 4(ut)k 240 fnt83 6116 8107(without)m +6898(any)s 7300(warr)s 3(anty)k 240 fnt82 8171 8105(;)m +8283(without)s 0 7864(e)m 6(v)k 3(en)k 500(the)s +848(implied)s 1636(w)s 2(arranty)k 2537(of)s 240 fnt83 +2808 7866(mer)m 8(c)k 3(hantability)k 240 fnt82 4367 7864(or)m +240 fnt83 4626 7866(\207tness)m 5279(for)s 5623(a)s 5798(particular)s +6833(purpose)s 240 fnt82 7598 7864(.)m 7702(See)s 8103(the)s +8451(GNU)s 0 7624(General)m 811(Public)s 1475(License)s 2274(for)s +2612(more)s 3159(details.)s 0 7216(Y)m 26(ou)k 442(should)s +1139(ha)s 4(v)k 3(e)k 1640(re)s 1821(cei)s 6(v)k 3(ed)k +2494(a)s 2660(cop)s 2(y)k 3178(of)s 3449(the)s +3797(GNU)s 4372(Gen)s 4768(er)s 4953(al)s 5180(Pub)s +5546(lic)s 5837(Li)s 6043(cense)s 6630(along)s 7215(with)s +gsave +7697 7270 translate +0.6953 1.0000 scale +240 fnt31 0 -52(userv)m +grestore +8197(;)s 8309(if)s 8526(not,)s +0 6975(write)m 546(to)s 785(the)s 1133(Free)s 1613(Soft)s +2011(w)s 2(are)k 2529(F)s 3(oun)k 3016(da)s +3242(tion,)s 3721(59)s 4012(T)s 16(em)k 4434(ple)s +4782(Place)s 5355(-)s 5483(Suite)s 6030(330,)s 6497(Boston,)s +7283(MA)s 7726(02111-1307,)s 0 6735(USA.)m 9066 610 0 610 240 240 60 0 5771 LoutGr2 +newpath 0 ysize 0.3 ft sub moveto +xsize 0 rlineto +0 0.1 ft rlineto +xsize neg 0 rlineto +closepath fill +grestore +320 fnt84 0 6(0.3.)m +628(Contents)s +grestore +0 5477(1.)m 1200(Introduction)s 8952(2)s 0 5250(2.)m +1200(Client)s 1844(program)s 2714(usage)s 8962(3)s 0 5013(2.1.)m +1200(Options)s 8962(3)s 0 4775(2.2.)m 1200(Security-o)s 3(v)k 3(erriding)k +3118(options)s 8953(6)s 0 4538(3.)m 1200(Ex)s 3(ecution)k +2224(en)s 9(vironment)k 3484(of)s 3755(the)s 4103(service)s +4835(program)s 8958(7)s 0 4301(3.1.)m 1200(File)s 1627(descriptors)s +8958(7)s 0 4064(3.2.)m 1200(En)s 9(vironment)k 8959(8)s +0 3837(4.)m 1200(Service-side)s 2436(con\207guration)s 8955(9)s 0 3600(4.1.)m +1200(Con\207guration)s 2587(\207le)s 2948(syntax)s 8955(9)s 0 3363(4.2.)m +1200(Con\207guration)s 2587(\207le)s 2948(directi)s 6(v)k 3(es)k +8955(9)s 0 3124(4.3.)m 1200(Errors)s 1847(in)s 2090(the)s +2438(con\207guration)s 3771(\207le)s 8840(15)s 0 2885(4.4.)m 1200(Def)s 2(aults)k +8840(15)s 0 2658(5.)m 1200(Information)s 2398(passed)s 3094(through)s +3896(the)s 4244(client/daemon)s 5655(combination)s 8838(17)s 0 2420(6.)m +1200(Applications)s 2473(and)s 2877(notes)s 3433(on)s 3730(use)s +8835(19)s 0 2182(6.1.)m 1200(Standard)s 2108(services)s 2928(and)s +3332(directory)s 4248(management)s 8835(19)s 0 1944(6.2.)m 1200(Reducing)s 2171(the)s 2519(number)s 3310(of)s 3581(absolutely)s 4618(pri)s 6(vile)k 3(ged)k -5636(subsystems)s 8831(20)s 0 4808(6.3.)m 1200(Do)s 1546(not)s +5636(subsystems)s 8835(19)s 0 1706(6.3.)m 1200(Do)s 1546(not)s 1912(gi)s 6(v)k 3(e)k 2371(a)s 3(w)k 2(ay)k 2925(e)s 3(xcessi)k 6(v)k 3(e)k 3885(pri)s 6(vile)k 3(ge)k 4781(to)s gsave -5020 4862 translate +5020 1760 translate 0.6953 1.0000 scale 240 fnt31 0 -52(userv)m grestore 5520(-using)s 6171(f)s 2(acilities)k -8831(20)s 0 4570(6.4.)m gsave -1200 4624 translate +8835(19)s 0 1468(6.4.)m gsave +1200 1522 translate 0.6953 1.0000 scale 240 fnt31 0 -52(userv)m grestore 1760(is)s 1970(not)s 2336(a)s 2502(replacement)s 3729(for)s gsave -4067 4624 translate +4067 1522 translate 0.6953 1.0000 scale 240 fnt31 0 -52(really)m grestore 4727(and)s gsave -5131 4624 translate +5131 1522 translate 0.6953 1.0000 scale 240 fnt31 0 -52(sudo)m grestore -8851(21)s -0 4331(6.5.)m 1200(Don')s 4(t)k 1814(gi)s 6(v)k 3(e)k -2273(access)s 2934(to)s 3173(general-purpose)s 4769(utilities)s 8851(21)s -9066 670 0 670 240 240 60 0 3080 LoutGr2 -newpath 0 ysize 0.3 ft sub moveto -xsize 0 rlineto -0 0.1 ft rlineto -xsize neg 0 rlineto -closepath fill -grestore -320 fnt84 0 66(0.3.)m 628(Copyright)s 2109(Notice)s -grestore -gsave -0 2970 translate -0.6953 1.0000 scale -240 fnt31 -0 -460(userv)m -grestore -560 2916(is)m 770(Cop)s 2(yright)k 1799(1996-1999)s -2889(Ian)s 3251(Jackson.)s gsave -0 2357 translate -0.6953 1.0000 scale -240 fnt31 0 -52(userv)m -grestore -544 2303(is)m -737(free)s 1146(softw)s 2(are;)k 2062(you)s 2460(can)s -2832(redistrib)s 4(ute)k 3955(it)s 4130(and/or)s 4784(modify)s -5512(it)s 5688(under)s 6276(the)s 6607(terms)s 7172(of)s -7426(the)s 7757(GNU)s 8315(General)s 0 2063(Public)m 659(License)s -1453(as)s 1698(published)s 2682(by)s 2971(the)s 3314(Free)s -3789(Softw)s 2(are)k 4699(F)s 3(oundation;)k 5894(either)s -6492(v)s 3(ersion)k 7245(2)s 7414(of)s 7680(the)s -8023(License,)s 8867(or)s 0 1823(\(at)m 311(your)s 810(option\))s -1550(an)s 3(y)k 1947(later)s 2430(v)s 3(ersion.)k -0 1415(This)m 476(program)s 1346(is)s 1556(distrib)s 4(uted)k -2632(in)s 2875(the)s 3223(hope)s 3745(that)s 4163(it)s -4355(will)s 4781(be)s 5063(useful,)s 5754(b)s 4(ut)k -240 fnt83 6116 1417(without)m 6898(any)s 7300(warr)s 3(anty)k -240 fnt82 8171 1415(;)m 8283(without)s 0 1174(e)m 6(v)k 3(en)k -500(the)s 848(implied)s 1636(w)s 2(arranty)k 2537(of)s -240 fnt83 2808 1176(mer)m 8(c)k 3(hantability)k 240 fnt82 -4367 1174(or)m 240 fnt83 4626 1176(\207tness)m 5279(for)s 5623(a)s -5798(particular)s 6833(purpose)s 240 fnt82 7598 1174(.)m 7702(See)s -8103(the)s 8451(GNU)s 0 934(General)m 811(Public)s 1475(License)s -2274(for)s 2612(more)s 3159(details.)s 0 52(User)m 511(service)s -1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s 8652(0.62)s - +8831(20)s +0 1229(6.5.)m 1200(Don')s 4(t)k 1814(gi)s 6(v)k 3(e)k +2273(access)s 2934(to)s 3173(general-purpose)s 4769(utilities)s 8831(20)s +0 52(User)m 511(service)s 1243(daemon)s 2058(and)s 2462(client)s +3052(speci\207cation)s 8491(0.64.1)s grestore grestore @@ -424,63 +436,8 @@ gsave 0 LoutMargSet grestore -240 fnt84 0 13842(2)m 240 fnt82 0 13254(Y)m 26(ou)k -442(should)s 1139(ha)s 4(v)k 3(e)k 1640(re)s -1821(cei)s 6(v)k 3(ed)k 2494(a)s 2660(cop)s 2(y)k -3178(of)s 3449(the)s 3797(GNU)s 4372(Gen)s 4768(er)s -4953(al)s 5180(Pub)s 5546(lic)s 5837(Li)s 6043(cense)s -6630(along)s 7215(with)s gsave -7697 13308 translate -0.6953 1.0000 scale -240 fnt31 0 -52(userv)m -grestore -8197(;)s -8309(if)s 8526(not,)s 0 13013(write)m 546(to)s 785(the)s -1133(Free)s 1613(Soft)s 2011(w)s 2(are)k 2529(F)s 3(oun)k -3016(da)s 3242(tion,)s 3721(59)s 4012(T)s 16(em)k -4434(ple)s 4782(Place)s 5355(-)s 5483(Suite)s 6030(330,)s -6497(Boston,)s 7283(MA)s 7726(02111-1307,)s 0 12773(USA.)m 0 52(0.62)m -4809(User)s 5320(service)s 6052(daemon)s 6867(and)s 7271(client)s -7861(speci\207cation)s -grestore - -grestore - -pgsave restore -showpage - -%%Page: 3 3 -%%BeginPageSetup -%%PageResources: font Times-Roman -%%+ font Times-Bold -%%+ font Courier-Bold -/pgsave save def -0.0500 dup scale 10 setlinewidth -%%EndPageSetup -gsave -0 0 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic -gsave -LoutPageSet -grestore -gsave -0 16840 translate -0.0000 rotate - -grestore - -grestore -gsave -0 16840 translate -0.0000 rotate -gsave -1417 -15423 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic -gsave -1 LoutMargSet -grestore -240 fnt84 8953 13842(3)m gsave -0 12792 translate +240 fnt84 0 13842(2)m gsave +0 12795 translate 240 fnt82 9066 622 0 622 240 240 60 LoutGraphic gsave newpath 0 ysize 0.3 ft sub moveto @@ -492,42 +449,42 @@ 340 fnt84 0 4(1.)m 412(Intr)s 6(oduction)k grestore -240 fnt82 0 12330(There)m 613(is)s 823(a)s 989(daemon)s +240 fnt82 0 12333(There)m 613(is)s 823(a)s 989(daemon)s 1804(which)s 2446(in)s 9(v)k 4(ok)k 2(es)k 3227(user)s 3685(service)s 4417(programs)s 5371(\(henceforth)s 6529(`services'\))s -7584(in)s 7827(response)s 8720(to)s 0 12090(requests)m 822(by)s +7584(in)s 7827(response)s 8720(to)s 0 12093(requests)m 822(by)s 1104(callers)s 1765(of)s 2024(a)s 2178(companion)s 3287(client)s 3865(program)s 4723(\(henceforth)s 5869(the)s 6205(`client'\))s 7009(and)s -7401(according)s 8385(to)s 8611(rules)s 0 11850(set)m 325(forth)s +7401(according)s 8385(to)s 8611(rules)s 0 11853(set)m 325(forth)s 846(in)s 1089(system-wide)s 2353(and)s 2757(user)s 4(-speci\207c)k 4013(con\207guration)s 5346(\207les.)s 5848(The)s 6276(companion)s 7397(client)s -7987(program)s 0 11610(is)m 210(setuid)s 839(root,)s 1331(and)s +7987(program)s 0 11613(is)m 210(setuid)s 839(root,)s 1331(and)s 1735(ne)s 3(gotiates)k 2752(with)s 3234(the)s 3582(daemon)s 4397(through)s 5199(an)s gsave -5482 11664 translate +5482 11667 translate 0.6953 1.0000 scale 240 fnt31 0 -52(AF_UNIX)m grestore 6242(sock)s 2(et)k -6911(and)s 7315(associated)s 8355(objects)s 0 11370(in)m 243(a)s +6911(and)s 7315(associated)s 8355(objects)s 0 11373(in)m 243(a)s 409(system-wide)s 1673(pri)s 6(v)k 6(ate)k 2380(directory)s 3296(set)s 3621(aside)s 4168(for)s 4506(the)s 4854(purpose.)s 5716(The)s 6144(user)s 6602(who)s 7068(wishes)s 7770(the)s -8118(service)s 8850(to)s 0 11130(be)m 282(performed)s 1335(and)s +8118(service)s 8850(to)s 0 11133(be)m 282(performed)s 1335(and)s 1739(calls)s 2227(the)s 2575(client)s 3165(is)s 3375(called)s 4003(the)s 4351(`calling)s 5133(user';)s 5722(the)s 6070(process)s 6838(which)s 7480(calls)s 7968(the)s 8316(client)s 8906(is)s -0 10890(called)m 628(the)s 976(`calling)s 1758(process'.)s 0 10482(The)m +0 10893(called)m 628(the)s 976(`calling)s 1758(process'.)s 0 10485(The)m 428(daemon)s 1243(and)s 1647(the)s 1995(client)s 2585(are)s 2932(responsible)s 4077(for)s 4415(ensuring)s 5292(that)s 5710(information)s -6895(is)s 7105(safely)s 7729(carried)s 8449(across)s 0 10242(the)m +6895(is)s 7105(safely)s 7729(carried)s 8449(across)s 0 10245(the)m 338(security)s 1138(boundary)s 2087(between)s 2931(the)s 3269(tw)s 2(o)k 3669(users,)s 4257(and)s 4650(that)s 5058(the)s 5396(processes)s 6353(on)s 6640(either)s 7233(side)s 7664(cannot)s 8351(interact)s -0 10002(with)m 482(each)s 977(other)s 1528(in)s 1771(an)s 3(y)k -2168(une)s 3(xpected)k 3313(w)s 2(ays.)k 0 52(User)m -511(service)s 1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s -8652(0.62)s +0 10005(with)m 482(each)s 977(other)s 1528(in)s 1771(an)s 3(y)k +2168(une)s 3(xpected)k 3313(w)s 2(ays.)k 0 52(0.64.1)m +4809(User)s 5320(service)s 6052(daemon)s 6867(and)s 7271(client)s +7861(speci\207cation)s grestore grestore @@ -535,7 +492,7 @@ pgsave restore showpage -%%Page: 4 4 +%%Page: 3 3 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -564,10 +521,10 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -0 LoutMargSet +1 LoutMargSet grestore -240 fnt84 0 13842(4)m gsave -0 12729 translate +240 fnt84 8953 13842(3)m gsave +0 12726 translate 240 fnt82 9066 688 0 688 240 240 60 LoutGraphic gsave newpath 0 ysize 0.3 ft sub moveto @@ -580,7 +537,7 @@ 1382(pr)s 6(ogram)k 2737(usage)s grestore gsave -480 12321 translate +480 12078 translate 0.6953 1.0000 scale 240 fnt31 0 -52(userv)m gsave @@ -625,12 +582,12 @@ 9029(\202])s grestore 240 fnt83 -0 11448(service-user)m 240 fnt82 1232 11446(speci\207es)m 2106(which)s 2748(user)s +0 11205(service-user)m 240 fnt82 1232 11203(speci\207es)m 2106(which)s 2748(user)s 3206(is)s 3416(to)s 3655(pro)s 3(vide)k 4439(the)s 4787(service.)s 5567(The)s 5995(user)s 6453(may)s 6919(be)s 7201(a)s 7367(login)s 7916(name)s 8490(or)s 8749(a)s -0 11206(numeric)m 836(uid,)s 1249(or)s gsave -1508 11260 translate +0 10963(numeric)m 836(uid,)s 1249(or)s gsave +1508 11017 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211)m @@ -638,12 +595,12 @@ 1668(to)s 1907(indicate)s 2719(that)s 3137(the)s 3485(service)s 4217(user)s 4675(is)s 4885(to)s 5124(be)s 5406(the)s 5754(same)s 6301(as)s 6551(the)s 6899(calling)s 7602(user)s 13(.)k -0 10798(The)m 428(service)s 1160(name)s 1734(is)s 1944(interpreted)s -3036(by)s 3330(the)s 3678(userv)s 153 fnt82 4191 10887(1)m -240 fnt82 4311 10798(daemon)m 5126(on)s 5423(behalf)s 6092(of)s +0 10555(The)m 428(service)s 1160(name)s 1734(is)s 1944(interpreted)s +3036(by)s 3330(the)s 3678(userv)s 153 fnt82 4191 10644(1)m +240 fnt82 4311 10555(daemon)m 5126(on)s 5423(behalf)s 6092(of)s 6363(the)s 6711(service)s 7443(user)s 13(.)k 7932(It)s -8137(will)s 8563(often)s 0 10558(be)m 282(the)s 630(name)s -1204(of)s 1475(a)s 1641(program.)s 9066 670 0 670 240 240 60 0 9534 LoutGr2 +8137(will)s 8563(often)s 0 10315(be)m 282(the)s 630(name)s +1204(of)s 1475(a)s 1641(program.)s 9066 670 0 670 240 240 60 0 9291 LoutGr2 newpath 0 ysize 0.3 ft sub moveto xsize 0 rlineto 0 0.1 ft rlineto @@ -653,201 +610,236 @@ 320 fnt84 0 66(2.1.)m 628(Options)s grestore -0 9072(Single-letter)m 1233(options)s 1983(may)s 2442(be)s +0 8829(Single-letter)m 1233(options)s 1983(may)s 2442(be)s 2718(combined)s 3714(as)s 3957(is)s 4161(usual)s 4714(with)s 5190(Unix)s 5718(programs,)s 6721(and)s 7119(the)s 7461(v)s 6(alue)k -8022(for)s 8354(such)s 8843(an)s 0 8832(option)m 669(may)s +8022(for)s 8354(such)s 8843(an)s 0 8589(option)m 669(may)s 1135(appear)s 1832(in)s 2075(the)s 2423(same)s 2970(ar)s 4(gument)k 3929(or)s 4188(in)s 4431(the)s 4779(ne)s 3(xt.)k gsave -120 8478 translate +120 8235 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211B)m grestore gsave -120 8238 translate +120 7995 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211builtin)m grestore -480 7944(Requests)m -1387(that)s 1797(a)s 1955(b)s 4(uiltin)k 2624(service)s -3347(be)s 3621(pro)s 3(vided.)k 4565(This)s 5033(is)s -5235(equi)s 6(v)k 6(alent)k 6270(to)s 6501(using)s -7065(the)s gsave -7405 7998 translate +480 7701(Re)m +742(quests)s 1385(that)s 1797(a)s 1956(b)s 4(uiltin)k +2627(ser)s 2905(vice)s 3352(be)s 3628(pro)s 3940(vid)s +4244(ed.)s 4567(This)s 5037(is)s 5241(equi)s 6(v)k +5762(a)s 5868(lent)s 6279(to)s 6512(us)s 6716(ing)s +7068(the)s gsave +7410 7755 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211override)m grestore -8457(option)s 480 7703(to)m -719(specify)s 1463(a)s 1629(string)s 2226(consisting)s 3249(of)s +8464(op)s 8697(tion)s +480 7460(to)m 719(spec)s 1137(i)s 1197(fy)s 1450(a)s +1616(string)s 2213(con)s 2556(sist)s 2874(ing)s 3233(of)s gsave -3520 7757 translate +3504 7514 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211builtin)m grestore -5081(follo)s 6(wed)k 5983(by)s -6277(the)s 240 fnt83 6625 7705(b)m 4(uiltin-service)k 240 fnt82 -8053 7703(requested,)m 480 7463(and)m 884(requesting)s 1933(a)s 2099(service)s -2831(user)s 3289(of)s gsave -3560 7517 translate -0.6953 1.0000 scale -240 fnt31 0 -52(\211)m -grestore -3720(\(indicating)s -4808(the)s 5156(calling)s 5859(user\).)s 480 7055(If)m 701(the)s -1039(b)s 4(uiltin)k 1707(ser)s 1985(vice)s 2429(be)s -2651(ing)s 3000(re)s 3181(quest)s 3686(ed)s 3961(re)s -4142(quires)s 4767(a)s 240 fnt83 4924 7057(service-)m 5667(ar)s 8(gument)k -240 fnt82 6631 7055(then)m 7090(this)s 7477(must)s 7992(be)s -8264(sup)s 8590(plied)s 480 6814(to)m 712(the)s 1052(client)s -1635(in)s 1870(the)s 2211(same)s 2750(ar)s 2935(gu)s -3170(ment)s 3700(as)s 3943(the)s 240 fnt83 4283 6816(b)m 4(uiltin-)k -4970(service)s 240 fnt82 5639 6814(.)m 5736(See)s 6129(`Di)s -6441(rec)s 6725(ti)s 6(v)k 3(es)k 7211(for)s -7541(chang)s 8106(ing)s 8457(e)s 3(x)k 8675(e)s -8777(cu)s 8998(-)s 480 6574(tion)m 909(set)s 1174(tings',)s -1825(page)s 2333(14)s 2627(for)s 2965(de)s 3187(tails)s -3635(of)s 3906(the)s 4254(b)s 4(uiltin)k 4931(ser)s -5209(vices)s 5751(a)s 4(v)k 6(ail)k 6200(able,)s -6705(and)s 7109(`Security-)s 8052(o)s 3(v)k 3(erriding)k -480 6334(op)m 713(tions',)s 1364(page)s 1872(7)s 2040(for)s -2378(de)s 2600(tails)s 3048(of)s 3319(the)s gsave -3667 6388 translate +5065(fol)s 5325(lo)s 6(wed)k +5962(by)s 6256(the)s 240 fnt83 6604 7462(b)m 4(uiltin-)k +7291(service)s 240 fnt82 8020 7460(re)m 8201(quest)s 8706(ed,)s +480 7220(and)m 870(re)s 1051(quest)s 1556(ing)s 1900(a)s +2052(ser)s 2330(vice)s 2769(user)s 3213(of)s gsave +3469 7274 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(\211)m +grestore +3615(\(in)s 3877(di)s 4057(cat)s 4335(ing)s +4679(the)s 5012(call)s 5351(ing)s 5696(user\).)s 6322(If)s +6538(the)s 6871(b)s 4(uiltin)k 7534(ser)s 7812(vice)s +8251(be)s 8473(ing)s 8817(re)s 8998(-)s 480 6980(quest)m +985(ed)s 1254(re)s 1435(quires)s 2054(a)s 240 fnt83 +2204 6982(service-)m 2947(ar)s 8(gument)k 240 fnt82 3905 6980(then)m +4358(this)s 4738(must)s 5247(be)s 5513(sup)s 5839(plied)s +6359(to)s 6582(the)s 6914(client)s 7488(in)s 7715(the)s +8047(same)s 8578(ar)s 8763(gu)s 8998(-)s 480 6739(ment)m +1013(as)s 1258(the)s 240 fnt83 1601 6741(b)m 4(uiltin-)k +2288(service)s 240 fnt82 2957 6739(.)m 3056(See)s 3451(`Di)s +3763(rec)s 4047(ti)s 6(v)k 3(es)k 4535(for)s +4868(chang)s 5433(ing)s 5787(e)s 3(x)k 6005(e)s +6107(cu)s 6328(tion)s 6751(set)s 7016(tings',)s 7662(page)s +8165(13)s 8444(for)s 8776(de)s 8998(-)s 480 6499(tails)m +920(of)s 1183(the)s 1523(b)s 4(uiltin)k 2192(ser)s +2470(vices)s 3004(a)s 4(v)k 6(ail)k 3453(able,)s +3950(and)s 4345(`Security-)s 5288(o)s 3(v)k 3(erriding)k +6323(op)s 6556(tions',)s 7199(page)s 7699(6)s 7864(for)s +8194(de)s 8416(tails)s 8855(of)s 480 6258(the)m gsave +822 6312 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211override)m grestore -4728(op)s 4961(tions.)s 480 5926(The)m 897(actual)s -1511(service)s 2232(name)s 2794(passed)s 3479(will)s 3894(be)s -4164(the)s 240 fnt83 4501 5928(b)m 4(uiltin-service)k 240 fnt82 -5869 5926(;)m 5970(note)s 6427(that)s 6833(this)s 7218(actual)s -7832(service)s 8552(name)s 480 5686(\(as)m 809(opposed)s 1666(to)s -1905(the)s 2253(o)s 3(v)k 3(erride)k 3099(data\))s -3625(and)s 4029(the)s 240 fnt83 4377 5688(info-ar)m 8(gument)k -240 fnt82 5742 5686(s)m 5886(supplied)s 6755(will)s 7181(be)s -7463(ignored)s 8252(by)s 8546(most)s 480 5446(b)m 4(uiltin)k -1149(services;)s 2022(the)s 2361(o)s 3(v)k 3(erride)k -3199(mechanism)s 4339(and)s gsave -4735 5500 translate +1877(op)s 2110(tions.)s 2733(The)s 3155(ac)s +3360(tu)s 3541(al)s 3762(ser)s 4040(vice)s 4488(name)s +5056(passed)s 5746(will)s 6166(be)s 6442(the)s 240 fnt83 +6784 6260(b)m 4(uiltin-)k 7471(service)s 240 fnt82 8140 6258(;)m +8246(note)s 8708(that)s 480 6018(this)m 876(ac)s 1081(tu)s +1262(al)s 1489(ser)s 1767(vice)s 2221(name)s 2795(\(as)s +3124(op)s 3357(posed)s 3974(to)s 4213(the)s 4561(o)s 3(v)k 3(er)k +4980(ride)s 5407(data\))s 5933(and)s 6337(the)s 240 fnt83 +6685 6020(info-)m 7124(ar)s 8(gument)k 240 fnt82 8038 6018(s)m +8182(sup)s 8508(plied)s 480 5778(will)m 906(be)s 1188(ig)s +1367(nored)s 1970(by)s 2264(most)s 2789(b)s 4(uiltin)k +3466(ser)s 3744(vices;)s 4347(the)s 4695(o)s 3(v)k 3(er)k +5114(ride)s 5541(mech)s 6056(a)s 6162(nism)s 6687(and)s +gsave +7091 5832 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211builtin)m grestore -6287(will)s -6705(be)s 6978(used)s 7467(to)s 7697(ensure)s 8369(that)s -8778(the)s 480 5206(right)m 991(b)s 4(uiltin)k 1668(service)s -2400(is)s 2610(called)s 3238(with)s 3720(the)s 4068(right)s -240 fnt83 4579 5208(service-ar)m 8(gument)k 240 fnt82 6248 5206(s.)m -gsave -120 4866 translate +8652(will)s 480 5538(be)m 762(used)s +1259(to)s 1498(en)s 1721(sure)s 2175(that)s 2593(the)s +2941(right)s 3452(b)s 4(uiltin)k 4129(ser)s 4407(vice)s +4861(is)s 5071(called)s 5699(with)s 6181(the)s 6529(right)s +240 fnt83 7040 5540(service-)m 7783(ar)s 8(gument)k 240 fnt82 +8697 5538(s.)m gsave +120 5198 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211f)m gsave 288 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd)m +240 fnt83 0 -52(fd)m + grestore -561([)s -gsave +561([)s gsave 705 0 translate 1.4219 1.0000 scale 240 fnt83 0 -52(modi\207er)m 2(s)k grestore -1961(]=)s gsave +1961(]=)s +gsave 2249 0 translate 1.4219 1.0000 scale -240 fnt83 -0 -52(\207lename)m +240 fnt83 0 -52(\207lename)m grestore grestore gsave -120 4626 translate +120 4958 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211file)m gsave 1008 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd)m - +240 fnt83 +0 -52(fd)m grestore 1281([)s gsave 1425 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(modi\207er)m 2(s)k +240 fnt83 0 -52(modi\207er)m 2(s)k + grestore -2681(]=)s -gsave +2681(]=)s gsave 2969 0 translate 1.4219 1.0000 scale 240 fnt83 0 -52(\207lename)m grestore grestore -480 4332(Requests)m 1384(that)s 1791(data)s -2238(be)s 2509(copied)s 3194(in)s 3426(and)s 3819(out)s -4174(of)s 4434(the)s 4771(service)s 5492(using)s 6053(pipes.)s -6651(F)s 3(or)k 7029(each)s 7513(\207le)s 7863(or)s -8111(descriptor)s 480 4092(this)m 858(will)s 1266(be)s 1530(done)s -2033(by)s 2309(creating)s 3113(a)s 3261(pipe,)s 3761(one)s -4145(end)s 4531(of)s 4784(which)s 5407(is)s 5599(passed)s -6277(to)s 6498(the)s 6827(service)s 7541(program)s 8393(and)s -8778(the)s 480 3852(other)m 1028(end)s 1429(of)s 1697(which)s -2336(is)s 2543(passed)s 3236(to)s 3472(a)s 3635(cop)s 2(y)k -4149(of)s gsave -4417 3906 translate +480 4664(Requests)m 1384(that)s +1791(data)s 2238(be)s 2509(copied)s 3194(in)s 3426(and)s +3819(out)s 4174(of)s 4434(the)s 4771(service)s 5492(using)s +6053(pipes.)s 6651(F)s 3(or)k 7029(each)s 7513(\207le)s +7863(or)s 8111(descriptor)s 480 4424(this)m 858(will)s 1266(be)s +1530(done)s 2033(by)s 2309(creating)s 3113(a)s 3261(pipe,)s +3761(one)s 4145(end)s 4531(of)s 4784(which)s 5407(is)s +5599(passed)s 6277(to)s 6498(the)s 6827(service)s 7541(program)s +8393(and)s 8778(the)s 480 4184(other)m 1028(end)s 1429(of)s +1697(which)s 2336(is)s 2543(passed)s 3236(to)s 3472(a)s +3635(cop)s 2(y)k 4149(of)s gsave +4417 4238 translate +0.6953 1.0000 scale +240 fnt31 0 -52(cat)m + +grestore +4774(in)s 9(v)k 4(ok)k 2(ed)k 5586(by)s +5877(the)s 6222(client;)s 6861(the)s 7206(other)s 7754(\207le)s +8111(descriptor)s 480 3944(passed)m 1161(to)s gsave +1384 3998 translate +0.6953 1.0000 scale +240 fnt31 0 -52(cat)m + +grestore +1728(will)s 2139(be)s 2405(one)s 2791(inherited)s 3683(by)s +3961(the)s 4293(client)s 4868(program)s 5722(from)s 6230(the)s +6563(caller)s 7136(or)s 7379(one)s 7766(opened)s 8500(by)s +8778(the)s 480 3704(client)m 1063(program)s 1926(on)s 2215(behalf)s +2877(of)s 3140(the)s 3481(caller)s 13(.)k 4153(The)s +4574(descriptor)s 5581(in)s 5817(the)s 6157(service)s 6882(program)s +7744(that)s 8155(should)s 8844(be)s 480 3463(connected)m 1503(must)s +2023(be)s 2299(speci\207ed)s 3202(as)s 240 fnt83 3446 3465(fd)m +240 fnt82 3638 3463(,)m 3740(either)s 4338(as)s 4582(a)s +4743(decimal)s 5548(number)s 6334(or)s 6588(as)s 6832(one)s +7229(of)s 7494(the)s 7837(strings)s gsave +8519 3517 translate 0.6953 1.0000 scale -240 fnt31 0 -52(cat)m +240 fnt31 0 -52(stdin)m + +grestore +9019(,)s gsave +480 3277 translate +0.6953 1.0000 scale +240 fnt31 0 -52(stdout)m grestore -4774(in)s 9(v)k 4(ok)k 2(ed)k -5586(by)s 5877(the)s 6222(client;)s 6861(the)s 7206(other)s -7754(\207le)s 8111(descriptor)s 480 3612(passed)m 1176(to)s gsave -1415 3666 translate -0.6953 1.0000 scale -240 fnt31 -0 -52(cat)m -grestore -1775(will)s 2201(be)s 2483(one)s 2885(inherited)s -3792(by)s 4086(the)s 4434(client)s 5024(program)s 5894(from)s -6418(the)s 6766(caller)s 7355(or)s 7614(one)s 8016(opened)s -8766(by)s 480 3372(the)m 828(client)s 1418(program)s 2288(on)s -2585(behalf)s 3254(of)s 3525(the)s 3873(caller)s 13(.)k -480 2964(The)m 890(descriptor)s 1886(in)s 2110(the)s 2439(service)s -3152(program)s 4004(that)s 4403(should)s 5081(be)s 5344(connected)s -6353(must)s 6860(be)s 7123(speci\207ed)s 8012(as)s 240 fnt83 -8243 2966(fd)m 240 fnt82 8435 2964(,)m 8523(either)s 480 2724(as)m -728(a)s 891(decimal)s 1699(number)s 2487(or)s 2743(as)s -2990(one)s 3389(of)s 3657(the)s 4002(strings)s gsave -4688 2778 translate +1126 3223(or)m gsave +1370 3277 translate 0.6953 1.0000 scale 240 fnt31 -0 -52(stdin)m +0 -52(stderr)m grestore -5188(,)s gsave -5292 2778 translate +1970(.)s 2059(The)s 2473(ne)s 3(xt)k +2927(ar)s 4(gument)k 3871(is)s 4067(a)s 4218(\207lename)s +5082(which)s 5709(will)s 6121(be)s 6388(opened)s 7123(by)s +7403(the)s 7736(client)s 8311(with)s 8778(the)s 480 2982(pri)m 6(vile)k 3(ges)k +1458(of)s 1722(the)s 2064(calling)s 2760(user)s 13(.)k +240 fnt83 3303 2984(modi\207er)m 2(s)k 240 fnt82 4240 2982(is)m +4444(used)s 4934(to)s 5166(specify)s 5904(whether)s 6727(the)s +7069(\207le)s 7423(or)s 7676(descriptor)s 8684(is)s 8887(to)s +480 2742(be)m 762(read)s 1230(from)s 1754(or)s 2012(written)s +2745(to.)s 3034(It)s 3239(consists)s 4046(of)s 4317(a)s +4482(series)s 5076(of)s 5346(w)s 2(ords)k 5980(separated)s +6939(by)s 7233(commas.)s 8133(A)s 8362(comma)s 480 2501(may)m +946(separate)s 1784(the)s 240 fnt83 2132 2503(modi\207er)m 2(s)k +240 fnt82 3076 2501(from)m 3600(the)s 240 fnt83 3948 2503(fd)m +240 fnt82 4200 2501(and)m 4604(is)s 4814(required)s 5668(if)s +240 fnt83 5885 2503(fd)m 240 fnt82 6137 2501(is)m 6347(not)s +6713(numeric.)s 7660(The)s 8088(modi\207er)s 480 2261(w)m 2(ords)k +1114(are:)s gsave +600 2075 translate 0.6953 1.0000 scale -240 fnt31 0 -52(stdout)m +240 fnt31 0 -52(read)m grestore -5949(or)s gsave -6205 2778 translate +960 1835 translate 0.6953 1.0000 scale -240 fnt31 0 -52(stderr)m +240 fnt31 0 -52(O_RDONLY)m + grestore -6805(.)s 6906(The)s 7331(ne)s 3(xt)k -7797(ar)s 4(gument)k 8753(is)s 8960(a)s 480 2484(\207lename)m -1359(which)s 2001(will)s 2427(be)s 2709(opened)s 3459(by)s -3753(the)s 4101(client)s 4691(with)s 5173(the)s 5521(pri)s 6(vile)k 3(ges)k -6505(of)s 6776(the)s 7124(calling)s 7827(user)s 13(.)k -240 fnt83 480 2078(modi\207er)m 2(s)k 240 fnt82 1424 2076(is)m -1634(used)s 2131(to)s 2370(specify)s 3114(whether)s 3944(the)s -4292(\207le)s 4653(or)s 4912(descriptor)s 5927(is)s 6137(to)s -6376(be)s 6658(read)s 7127(from)s 7651(or)s 7910(written)s -8643(to.)s 480 1835(It)m 682(consists)s 1487(of)s 1755(a)s -1918(series)s 2508(of)s 2776(w)s 2(ords)k 3407(separated)s -4364(by)s 4655(commas.)s 5552(A)s 5779(comma)s 6540(may)s -7003(separate)s 7838(the)s 240 fnt83 8182 1837(modi\207er)m 2(s)k -240 fnt82 480 1594(from)m 1004(the)s 240 fnt83 1352 1596(fd)m -240 fnt82 1604 1594(and)m 2008(is)s 2218(required)s 3072(if)s -240 fnt83 3289 1596(fd)m 240 fnt82 3541 1594(is)m 3751(not)s -4117(numeric.)s 1134 0 0 0 240 240 60 0 948 LoutGr2 +1761 1781(:)m 1867(Allo)s 6(w)k 2513(reading)s 3283(and)s +3687(not)s 4053(writing.)s 4847(May)s 5340(not)s 5706(be)s +5988(used)s 6485(with)s gsave +6967 1835 translate +0.6953 1.0000 scale +240 fnt31 0 -52(write)m +grestore +7527(or)s +7786(things)s 8422(that)s 960 1541(imply)m 1572(it.)s gsave +600 1355 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(write)m +grestore +1134 0 0 0 240 240 60 0 948 LoutGr2 0 0 moveto xsize 0 lineto stroke grestore @@ -860,8 +852,8 @@ grestore 192 fnt82 505 683(is)m 673(short)s 1103(for)s 1373(`user)s 1802(services',)s 2566(and)s 2890(is)s 3058(pronounced)s 4010(`you-serv)s 2(e'.)k -240 fnt82 0 52(0.62)m 4809(User)s 5320(service)s 6052(daemon)s -6867(and)s 7271(client)s 7861(speci\207cation)s +240 fnt82 0 52(User)m 511(service)s 1243(daemon)s 2058(and)s +2462(client)s 3052(speci\207cation)s 8491(0.64.1)s grestore grestore @@ -869,7 +861,7 @@ pgsave restore showpage -%%Page: 5 5 +%%Page: 4 4 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -898,484 +890,414 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -1 LoutMargSet -grestore -240 fnt84 8953 13844(5)m 240 fnt82 480 13254(The)m 908(modi\207er)s -1778(w)s 2(ords)k 2412(are:)s gsave -600 13068 translate -0.6953 1.0000 scale -240 fnt31 0 -52(read)m - -grestore -gsave -960 12828 translate -0.6953 1.0000 scale -240 fnt31 0 -52(O_RDONLY)m -grestore -1761 12774(:)m 1867(Allo)s 6(w)k -2513(reading)s 3283(and)s 3687(not)s 4053(writing.)s 4847(May)s -5340(not)s 5706(be)s 5988(used)s 6485(with)s gsave -6967 12828 translate -0.6953 1.0000 scale -240 fnt31 -0 -52(write)m -grestore -7527(or)s 7786(things)s 8422(that)s 960 12534(imply)m -1572(it.)s gsave -600 12348 translate -0.6953 1.0000 scale -240 fnt31 0 -52(write)m +0 LoutMargSet grestore -gsave -960 12108 translate +240 fnt84 0 13842(4)m gsave +960 13308 translate 0.6953 1.0000 scale -240 fnt31 0 -52(O_WRONLY)m - +240 fnt31 0 -52(O_WRONLY)m grestore -1761 12054(:)m 1867(Allo)s 6(w)k 2513(writing)s 3256(and)s -3660(not)s 4026(reading.)s 240 fnt83 4847 12056(Doesn')m 7(t)k +240 fnt82 +1761 13254(:)m 1867(Allo)s 6(w)k 2513(writing)s 3256(and)s +3660(not)s 4026(reading.)s 240 fnt83 4847 13256(Doesn')m 7(t)k 5661(truncate)s 6511(or)s 6789(cr)s 8(eate)k 240 fnt82 -7431 12054(without)m gsave -8222 12108 translate +7431 13254(without)m gsave +8222 13308 translate 0.6953 1.0000 scale 240 fnt31 0 -52(truncate)m grestore -960 11814(or)m gsave -1219 11868 translate +960 13014(or)m gsave +1219 13068 translate 0.6953 1.0000 scale 240 fnt31 0 -52(create)m grestore 1819(.)s gsave -1923 11868 translate +1923 13068 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 2483(or)s 2742(things)s 3378(that)s 3796(imply)s 4408(it)s 4600(may)s 5066(not)s 5432(be)s 5714(used)s 6211(with)s gsave -6693 11868 translate +6693 13068 translate 0.6953 1.0000 scale 240 fnt31 0 -52(read)m grestore 7093(.)s gsave -600 11628 translate +600 12828 translate 0.6953 1.0000 scale 240 fnt31 0 -52(overwrite)m grestore -960 11334(Equi)m 6(v)k 6(alent)k +960 12534(Equi)m 6(v)k 6(alent)k 2044(to)s gsave -2283 11388 translate +2283 12588 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write,create,truncate)m grestore 4385(.)s gsave -600 11148 translate +600 12348 translate 0.6953 1.0000 scale 240 fnt31 0 -52(create)m grestore gsave -600 10908 translate +600 12108 translate 0.6953 1.0000 scale 240 fnt31 0 -52(creat)m grestore gsave -960 10668 translate +960 11868 translate 0.6953 1.0000 scale 240 fnt31 0 -52(O_CREAT)m grestore -1660 10614(:)m 1766(Creates)s 2533(the)s 2881(\207le)s 3242(if)s +1660 11814(:)m 1766(Creates)s 2533(the)s 2881(\207le)s 3242(if)s 3459(necessary)s 15(.)k 4477(Implies)s gsave -5244 10668 translate +5244 11868 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 5744(.)s gsave -600 10428 translate +600 11628 translate 0.6953 1.0000 scale 240 fnt31 0 -52(exclusive)m grestore gsave -600 10188 translate +600 11388 translate 0.6953 1.0000 scale 240 fnt31 0 -52(excl)m grestore gsave -960 9948 translate +960 11148 translate 0.6953 1.0000 scale 240 fnt31 0 -52(O_EXCL)m grestore -1560 9894(:)m 1666(F)s 3(ails)k +1560 11094(:)m 1666(F)s 3(ails)k 2178(if)s 2395(the)s 2743(\207le)s 3104(already)s 3861(e)s 3(xists.)k 4506(Implies)s gsave -5273 9948 translate +5273 11148 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 5833(and)s gsave -6237 9948 translate +6237 11148 translate 0.6953 1.0000 scale 240 fnt31 0 -52(create)m grestore 6837(.)s 6941(May)s 7434(not)s 7800(be)s 8082(used)s 8579(with)s gsave -960 9708 translate +960 10908 translate 0.6953 1.0000 scale 240 fnt31 0 -52(truncate)m grestore -1761 9654(.)m +1761 10854(.)m gsave -600 9468 translate +600 10668 translate 0.6953 1.0000 scale 240 fnt31 0 -52(truncate)m grestore gsave -600 9228 translate +600 10428 translate 0.6953 1.0000 scale 240 fnt31 0 -52(trunc)m grestore gsave -960 8988 translate +960 10188 translate 0.6953 1.0000 scale 240 fnt31 0 -52(O_TRUNC)m grestore -1660 8934(:)m 1766(T)s 8(runcate)k 2663(an)s 3(y)k +1660 10134(:)m 1766(T)s 8(runcate)k 2663(an)s 3(y)k 3060(e)s 3(xisting)k 3867(\207le.)s 4276(Implies)s gsave -5043 8988 translate +5043 10188 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 5543(.)s 5647(May)s 6140(not)s 6506(be)s 6788(used)s 7285(with)s gsave -7767 8988 translate +7767 10188 translate 0.6953 1.0000 scale 240 fnt31 0 -52(exclusive)m grestore 8668(.)s gsave -600 8748 translate +600 9948 translate 0.6953 1.0000 scale 240 fnt31 0 -52(append)m grestore gsave -960 8508 translate +960 9708 translate 0.6953 1.0000 scale 240 fnt31 0 -52(O_APPEND)m grestore -1761 8454(:)m +1761 9654(:)m 1867(All)s 2227(writes)s 2861(will)s 3287(append)s 4037(to)s 4276(the)s 4624(\207le.)s 5033(Implies)s gsave -5800 8508 translate +5800 9708 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 6360(\(b)s 4(ut)k 6801(not)s gsave -7167 8508 translate +7167 9708 translate 0.6953 1.0000 scale 240 fnt31 0 -52(create)m grestore 7767(\).)s gsave -600 8268 translate +600 9468 translate 0.6953 1.0000 scale 240 fnt31 0 -52(sync)m grestore gsave -960 8028 translate +960 9228 translate 0.6953 1.0000 scale 240 fnt31 0 -52(O_SYNC)m grestore -1560 7974(:)m 1666(Do)s 2012(writes)s 2646(synchronously)s 15(.)k +1560 9174(:)m 1666(Do)s 2012(writes)s 2646(synchronously)s 15(.)k 4132(Implies)s gsave -4899 8028 translate +4899 9228 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 5399(.)s gsave -600 7788 translate +600 8988 translate 0.6953 1.0000 scale 240 fnt31 0 -52(wait)m grestore gsave -600 7548 translate +600 8748 translate 0.6953 1.0000 scale 240 fnt31 0 -52(nowait)m grestore gsave -600 7308 translate +600 8508 translate 0.6953 1.0000 scale 240 fnt31 0 -52(close)m grestore -960 7014(These)m 1587(modi\207ers)s 2541(control)s 3273(the)s 3621(beha)s 4(viour)k +960 8214(These)m 1587(modi\207ers)s 2541(control)s 3273(the)s 3621(beha)s 4(viour)k 4634(of)s 4905(the)s 5253(client,)s 5890(with)s 6372(respect)s -7108(to)s 7347(the)s 7695(pipes)s 8251(carrying)s 960 6774(data)m +7108(to)s 7347(the)s 7695(pipes)s 8251(carrying)s 960 7974(data)m 1418(to)s 1657(and)s 2061(from)s 2585(the)s 2933(service,)s 3716(when)s 4292(the)s 4640(service)s 5372(terminates.)s 6470(See)s 6871(belo)s 6(w)k 15(.)k gsave -600 6588 translate +600 7788 translate 0.6953 1.0000 scale 240 fnt31 0 -52(fd)m grestore -960 6294(The)m 240 fnt83 1388 6296(\207lename)m 240 fnt82 2252 6294(is)m +960 7494(The)m 240 fnt83 1388 7496(\207lename)m 240 fnt82 2252 7494(is)m 2462(not)s 2828(a)s 2994(\207lename)s 3873(b)s 4(ut)k 4235(a)s 4401(numeric)s 5237(\207le)s 5598(descriptor)s 13(.)k 6644(One)s 7099(or)s 7358(both)s 7841(of)s gsave -8112 6348 translate +8112 7548 translate 0.6953 1.0000 scale 240 fnt31 0 -52(read)m grestore 8572(and)s gsave -960 6107 translate +960 7307 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore -1520 6053(must)m +1520 7253(must)m 2045(be)s 2327(speci\207ed,)s 3284(and)s 3688(no)s 3981(other)s 4532(w)s 2(ords)k 5166(are)s 5513(allo)s 6(wed.)k -6368(The)s 240 fnt83 6796 6055(\207lename)m 240 fnt82 7660 6053(may)m +6368(The)s 240 fnt83 6796 7255(\207lename)m 240 fnt82 7660 7253(may)m 8126(also)s 8564(be)s gsave -960 5867 translate +960 7067 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stdin)m grestore -1460 5813(,)m +1460 7013(,)m gsave -1567 5867 translate +1567 7067 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stdout)m grestore 2227(or)s gsave -2486 5867 translate +2486 7067 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stderr)m grestore 3146(for)s 3484(\207le)s 3845(descriptor)s 4860(0,)s 5087(1)s 5242(or)s 5501(2)s 5675(respecti)s 6(v)k 3(ely)k 15(.)k -480 5251(If)m 701(no)s 240 fnt83 984 5253(modi\207er)m 2(s)k -240 fnt82 1918 5251(which)m 2550(imply)s gsave -3152 5305 translate +480 6748(If)m 701(no)s 240 fnt83 984 6750(modi\207er)m 2(s)k +240 fnt82 1918 6748(which)m 2550(imply)s gsave +3152 6802 translate 0.6953 1.0000 scale 240 fnt31 0 -52(read)m grestore 3602(or)s gsave -3851 5305 translate +3851 6802 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 4401(are)s 4738(used)s 5226(it)s 5408(is)s 5608(as)s 5848(if)s gsave -6055 5305 translate +6055 6802 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 6605(had)s 6999(been)s 7498(speci\207ed,)s 8445(e)s 3(xcept)k -480 5011(that)m 898(if)s 1115(the)s 1463(\207ledescriptor)s 2783(0)s +480 6508(that)m 898(if)s 1115(the)s 1463(\207ledescriptor)s 2783(0)s 2958(of)s 3229(the)s 3577(service)s 4309(is)s 4519(being)s 5104(opened)s 5854(\(either)s 6536(speci\207ed)s 7444(numerically)s 8639(or)s -480 4771(with)m gsave -962 4825 translate +480 6268(with)m gsave +962 6322 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stdin)m grestore 1462(\))s 1590(it)s 1782(is)s 1992(as)s 2242(if)s gsave -2459 4825 translate +2459 6322 translate 0.6953 1.0000 scale 240 fnt31 0 -52(overwrite)m grestore 3420(had)s 3824(been)s 4333(speci\207ed)s 5241(\(or)s gsave -5579 4825 translate +5579 6322 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 6139(if)s 6356(only)s gsave -6836 4825 translate +6836 6322 translate 0.6953 1.0000 scale 240 fnt31 0 -52(fd)m grestore -7096(w)s 2(as)k 7517(speci\207ed\).)s 480 4363(The)m 892(client)s -1465(will)s 1874(also)s 2296(use)s gsave -2654 4417 translate +7096(w)s 2(as)k 7517(speci\207ed\).)s 8610(The)s 480 6028(client)m +1064(will)s 1483(also)s 1915(use)s gsave +2283 6082 translate 0.6953 1.0000 scale 240 fnt31 0 -52(O_NOCTTY)m grestore -3498(when)s 4057(opening)s 4866(\207les)s 5298(speci\207ed)s 6189(by)s -6466(the)s 6798(caller)s 9(,)k 7408(to)s 7630(a)s 4(v)k 4(oid)k -8195(changing)s 480 4123(its)m 756(controlling)s 1858(terminal.)s 480 3715(By)m -810(de)s 1032(f)s 2(ault)k 1523(stdin,)s 2091(std)s -2368(out)s 2729(and)s 3129(stderr)s 3728(of)s 3995(the)s -4338(ser)s 4616(vice)s 5066(will)s 5488(be)s 5766(con)s -6109(nect)s 6507(ed)s 6786(to)s 7021(the)s 7365(cor)s -7670(re)s 7851(spond)s 8422(ing)s 8776(de)s 8998(-)s -480 3475(scrip)m 937(tors)s 1346(on)s 1643(the)s 1991(client.)s -2625(Di)s 2858(ag)s 3077(nos)s 3401(tics)s 3783(from)s -4307(the)s 4655(client)s 5245(and)s 5649(dae)s 5977(mon)s -6460(will)s 6886(also)s 7324(ap)s 7543(pear)s 8014(on)s -8311(stderr)s 13(.)k 480 3067(If)m gsave -710 3121 translate -0.6953 1.0000 scale -240 fnt31 0 -52(wait)m - -grestore -1170(is)s 1380(speci\207ed,)s 2337(the)s 2685(client)s 3275(will)s -3701(w)s 2(ait)k 4170(for)s 4508(the)s 4856(pipe)s -5324(to)s 5563(be)s 5845(closed,)s 6563(and)s 6967(only)s -7447(e)s 3(xit)k 7862(after)s 8358(this)s 480 2827(has)m -850(happened.)s 1872(This)s 2348(means)s 3010(that)s 3428(either)s -4031(the)s 4379(recei)s 6(ving)k 5315(end)s 5719(of)s -5990(the)s 6338(pipe)s 6806(connection)s 7913(w)s 2(as)k -8334(closed)s 480 2587(while)m 1067(data)s 1525(w)s 2(as)k -1946(still)s 2358(a)s 4(v)k 6(ailable)k 3266(at)s -3498(the)s 3846(sending)s 4644(end,)s 5097(or)s 5356(that)s -5774(the)s 6122(end)s 6526(of)s 6797(\207le)s 7158(w)s 2(as)k -7579(reached)s 8380(on)s 8677(the)s 480 2347(reading)m 1250(\207le)s -1611(descriptor)s 13(.)k 2657(Errors)s 3304(encountered)s 4531(reading)s -5301(or)s 5560(writing)s 6303(in)s 6546(the)s 6894(client)s -7484(at)s 7716(this)s 8112(stage)s 8659(will)s 480 2106(be)m -762(considered)s 1855(a)s 2021(system)s 2744(error)s 3266(and)s -3670(cause)s 4256(the)s 4603(client)s 5193(to)s 5431(e)s 3(xit)k -5845(with)s 6327(status)s 6921(255,)s 7387(b)s 4(ut)k -7749(will)s 8174(not)s 8539(cause)s 480 1866(disconnection)m 1866(at)s -2098(the)s 2446(service)s 3178(side)s 3619(since)s 4166(the)s -4514(service)s 5246(has)s 5616(already)s 6373(e)s 3(xited.)k -480 1458(If)m gsave -710 1512 translate -0.6953 1.0000 scale -240 fnt31 0 -52(close)m -grestore -1270(is)s 1480(speci\207ed)s -2388(the)s 2736(client)s 3326(will)s 3752(immediately)s 5000(close)s -5547(the)s 5895(pipe)s 6363(connection)s 7470(by)s 7764(killing)s -8441(the)s 480 1218(rele)m 6(v)k 6(ant)k 1297(cop)s 2(y)k -1815(of)s gsave -2086 1272 translate +3137(when)s 3707(opening)s 4525(\207les)s 4968(speci\207ed)s 5869(by)s +6156(the)s 6498(caller)s 9(,)k 7118(to)s 7351(a)s 4(v)k 4(oid)k +7926(changing)s 8850(its)s 480 5788(controlling)m 1581(terminal.)s 2539(By)s +2871(def)s 2(ault)k 3591(stdin,)s 4161(stdout)s 4805(and)s +5207(stderr)s 5809(of)s 6079(the)s 6425(service)s 7156(will)s +7580(be)s 7861(connected)s 8887(to)s 480 5548(the)m 811(corresponding)s +2216(descriptors)s 3297(on)s 3577(the)s 3907(client.)s 4524(Diagnostics)s +5686(from)s 6193(the)s 6523(client)s 7096(and)s 7482(daemon)s +8280(will)s 8688(also)s 480 5308(appear)m 1177(on)s 1473(stderr)s 13(.)k +2167(If)s gsave +2396 5362 translate 0.6953 1.0000 scale -240 fnt31 0 -52(cat)m -grestore -2386(.)s 2490(If)s -2720(the)s 3068(service)s 3800(uses)s 4263(the)s 4611(descriptor)s -5626(it)s 5818(will)s 6244(get)s gsave -6596 1272 translate -0.6953 1.0000 scale -240 fnt31 0 -52(SIGPIPE)m - +240 fnt31 0 -52(wait)m grestore -7356(\(or)s gsave -7694 1272 translate +2856(is)s 3065(speci\207ed,)s +4022(the)s 4369(client)s 4959(will)s 5384(w)s 2(ait)k +5853(for)s 6190(the)s 6538(pipe)s 7005(to)s 7244(be)s +7525(closed,)s 8243(and)s 8646(only)s 480 5068(e)m 3(xit)k +889(after)s 1379(this)s 1769(has)s 2132(happened.)s 3148(This)s +3618(means)s 4274(that)s 4685(either)s 5282(the)s 5624(recei)s 6(ving)k +6554(end)s 6951(of)s 7216(the)s 7558(pipe)s 8019(connection)s +480 4828(w)m 2(as)k 901(closed)s 1570(while)s 2157(data)s +2615(w)s 2(as)k 3036(still)s 3448(a)s 4(v)k 6(ailable)k +4356(at)s 4588(the)s 4936(sending)s 5734(end,)s 6187(or)s +6446(that)s 6864(the)s 7212(end)s 7616(of)s 7887(\207le)s +8248(w)s 2(as)k 480 4588(reached)m 1279(on)s 1573(the)s +1919(reading)s 2686(\207le)s 3045(descriptor)s 13(.)k 4088(Errors)s +4732(encountered)s 5957(reading)s 6724(or)s 6981(writing)s 7721(in)s +7962(the)s 8307(client)s 8894(at)s 480 4347(this)m 876(stage)s +1423(will)s 1849(be)s 2131(considered)s 3225(a)s 3391(system)s +4115(error)s 4638(and)s 5042(cause)s 5629(the)s 5977(client)s +6567(to)s 6806(e)s 3(xit)k 7221(with)s 7703(status)s +8298(255,)s 8764(b)s 4(ut)k 480 4107(will)m 896(not)s +1251(cause)s 1827(disconnection)s 3203(at)s 3424(the)s 3761(service)s +4482(side)s 4913(since)s 5449(the)s 5786(service)s 6507(has)s +6867(already)s 7613(e)s 3(xited.)k 8347(If)s gsave +8566 4161 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(close)m +grestore +480 3867(is)m 676(speci\207ed)s 1569(the)s 1902(client)s +2477(will)s 2888(immediately)s 4121(close)s 4653(the)s 4987(pipe)s +5440(connection)s 6532(by)s 6811(killing)s 7473(the)s 7806(rele)s 6(v)k 6(ant)k +8608(cop)s 2(y)k 480 3627(of)m gsave +744 3681 translate 0.6953 1.0000 scale -240 fnt31 0 -52(EPIPE)m -grestore -8194(\))s 8322(for)s -8660(a)s 480 978(writing)m 1218(descriptor)s 2228(or)s 2482(end)s -2881(of)s 3147(\207le)s 3502(for)s 3835(a)s 3996(reading)s -4761(one;)s 5214(the)s 5557(descriptor)s 6566(opened)s 7311(by)s -7600(or)s 7854(passed)s 8545(to)s 8778(the)s 480 738(client)m -1070(will)s 1496(also)s 1934(be)s 2216(closed.)s 0 52(User)m -511(service)s 1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s -8652(0.62)s -grestore +240 fnt31 0 -52(cat)m grestore - -pgsave restore -showpage - -%%Page: 6 6 -%%BeginPageSetup -%%PageResources: font Times-Roman -%%+ font Times-Bold -%%+ font Courier-Bold -%%+ font Times-Italic -/pgsave save def -0.0500 dup scale 10 setlinewidth -%%EndPageSetup +1044(.)s 1141(If)s 1364(the)s 1705(service)s 2429(uses)s +2885(the)s 3226(descriptor)s 4234(it)s 4418(will)s 4837(get)s gsave -0 0 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic -gsave -LoutPageSet -grestore -gsave -0 16840 translate -0.0000 rotate - +5182 3681 translate +0.6953 1.0000 scale +240 fnt31 0 -52(SIGPIPE)m grestore +5935(\(or)s gsave +6265 3681 translate +0.6953 1.0000 scale +240 fnt31 0 -52(EPIPE)m grestore -gsave -0 16840 translate -0.0000 rotate -gsave -1417 -15423 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic -gsave -0 LoutMargSet -grestore -240 fnt84 0 13842(6)m 240 fnt82 480 13251(If)m gsave -707 13305 translate +6765(\))s 6886(for)s 7217(a)s 7376(writing)s 8111(descriptor)s +480 3387(or)m 736(end)s 1137(of)s 1404(\207le)s 1762(for)s +2096(a)s 2259(reading)s 3025(one;)s 3480(the)s 3824(descriptor)s +4836(opened)s 5582(by)s 5873(or)s 6128(passed)s 6821(to)s +7056(the)s 7401(client)s 7987(will)s 8410(also)s 8844(be)s +480 3147(closed.)m 1255(If)s gsave +1485 3201 translate 0.6953 1.0000 scale -240 fnt31 -0 -52(nowait)m +240 fnt31 0 -52(nowait)m grestore -1364(is)s 1570(speci\207ed)s 2475(then)s 2941(the)s -3285(client)s 3872(will)s 4294(not)s 4657(w)s 2(ait)k -5123(and)s 5523(the)s 5868(connection)s 6972(will)s 7394(remain)s -8111(open)s 8630(after)s 480 13011(the)m 824(client)s 1409(terminates.)s -2502(Data)s 3008(may)s 3469(continue)s 4344(to)s 4578(be)s -4856(passed)s 5547(between)s 6396(the)s 6739(inheritors)s 7700(of)s -7966(the)s 8309(rele)s 6(v)k 6(ant)k 480 12771(descriptor)m -1484(on)s 1770(the)s 2107(service)s 2828(side)s 3258(and)s -3651(the)s 3988(corresponding)s 5399(\207le)s 5749(or)s 5997(descriptor)s -7001(on)s 7287(the)s 7624(client)s 8203(side)s 8633(until)s -480 12531(either)m 1071(side)s 1499(closes)s 2121(their)s 2606(descriptor)s 13(.)k -3639(This)s 4102(should)s 4786(not)s 5140(usually)s 5872(be)s -6141(speci\207ed)s 7036(for)s 7362(stderr)s 7952(\(or)s 8277(stdout)s -8909(if)s gsave -480 12345 translate -0.6953 1.0000 scale -240 fnt31 0 -52(\211\211signals)m 1440(stdout)s -grestore -2141 12291(is)m -2350(used\))s 2916(since)s 3462(diagnostics)s 4588(from)s 5111(the)s -5457(service)s 6188(side)s 6628(may)s 7093(arri)s 6(v)k 3(e)k -7695(after)s 8190(the)s 8536(client)s 480 12051(has)m 850(e)s 3(xited)k -1489(and)s 1893(be)s 2175(confused)s 3097(with)s 3579(e)s 3(xpected)k -4484(output.)s 480 11643(The)m 908(def)s 2(ault)k 1629(is)s +2145(is)s +2355(speci\207ed)s 3263(then)s 3732(the)s 4080(client)s 4670(will)s +5096(not)s 5462(w)s 2(ait)k 5931(and)s 6335(the)s +6683(connection)s 7790(will)s 8216(remain)s 480 2907(open)m 1003(after)s +1499(the)s 1847(client)s 2437(terminates.)s 3535(Data)s 4046(may)s +4512(continue)s 5392(to)s 5631(be)s 5913(passed)s 6609(between)s +7463(the)s 7811(inheritors)s 8777(of)s 480 2667(the)m 828(rele)s 6(v)k 6(ant)k +1645(descriptor)s 2660(on)s 2957(the)s 3305(service)s 4037(side)s +4478(and)s 4882(the)s 5230(corresponding)s 6652(\207le)s 7013(or)s +7272(descriptor)s 8287(on)s 8584(the)s 480 2427(client)m 1070(side)s +1511(until)s 2004(either)s 2607(side)s 3048(closes)s 3683(their)s +4180(descriptor)s 13(.)k 5226(This)s 5702(should)s 6399(not)s +6765(usually)s 7510(be)s 7792(speci\207ed)s 8700(for)s 480 2187(stderr)m +1083(\(or)s 1421(stdout)s 2066(if)s gsave +2283 2241 translate +0.6953 1.0000 scale +240 fnt31 0 -52(\211\211signals)m +1440(stdout)s +grestore +3945(is)s 4155(used\))s 4722(since)s 5269(diagnostics)s +6396(from)s 6920(the)s 7268(service)s 8000(side)s 8441(may)s +480 1947(arri)m 6(v)k 3(e)k 1083(after)s 1579(the)s +1927(client)s 2517(has)s 2887(e)s 3(xited)k 3526(and)s +3930(be)s 4212(confused)s 5134(with)s 5616(e)s 3(xpected)k +6521(output.)s 7297(The)s 7725(def)s 2(ault)k 8446(is)s gsave -1839 11697 translate +8656 2001 translate 0.6953 1.0000 scale 240 fnt31 0 -52(wait)m grestore -2299(for)s 2637(writing)s 3380(\207le)s -3741(descriptors)s 4840(and)s gsave -5244 11697 translate +480 1707(for)m 818(writing)s 1561(\207le)s +1922(descriptors)s 3021(and)s gsave +3425 1761 translate 0.6953 1.0000 scale 240 fnt31 0 -52(close)m grestore -5804(for)s -6142(reading)s 6912(ones.)s gsave -120 11303 translate +3985(for)s +4323(reading)s 5093(ones.)s gsave +120 1367 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211w)m gsave 288 0 translate @@ -1391,7 +1313,7 @@ grestore gsave -120 11063 translate +120 1127 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211fdwait)m gsave @@ -1407,55 +1329,96 @@ grestore grestore -480 10769(Sets)m 924(the)s 1267(action)s 1903(on)s +480 833(Sets)m 924(the)s 1267(action)s 1903(on)s 2194(termination)s 3347(of)s 3613(the)s 3956(service)s 4682(for)s 5015(the)s 5358(speci\207ed)s 6261(\207le)s 6616(descriptor;)s 240 fnt83 -7678 10771(action)m 240 fnt82 8325 10769(must)m 8844(be)s gsave -480 10583 translate +7678 835(action)m 240 fnt82 8325 833(must)m 8844(be)s 0 52(0.64.1)m +4809(User)s 5320(service)s 6052(daemon)s 6867(and)s 7271(client)s +7861(speci\207cation)s +grestore + +grestore + +pgsave restore +showpage + +%%Page: 5 5 +%%BeginPageSetup +%%PageResources: font Times-Roman +%%+ font Times-Bold +%%+ font Courier-Bold +%%+ font Times-Italic +/pgsave save def +0.0500 dup scale 10 setlinewidth +%%EndPageSetup +gsave +0 0 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic +gsave +LoutPageSet +grestore +gsave +0 16840 translate +0.0000 rotate + +grestore + +grestore +gsave +0 16840 translate +0.0000 rotate +gsave +1417 -15423 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic +gsave +1 LoutMargSet +grestore +240 fnt84 8953 13844(5)m gsave +480 13308 translate 0.6953 1.0000 scale -240 fnt31 -0 -52(wait)m +240 fnt31 0 -52(wait)m grestore -880 10529(,)m gsave -981 10583 translate +240 fnt82 +880 13254(,)m gsave +981 13308 translate 0.6953 1.0000 scale 240 fnt31 0 -52(nowait)m grestore -1634(or)s -gsave -1886 10583 translate +1634(or)s gsave +1886 13308 translate 0.6953 1.0000 scale -240 fnt31 0 -52(close)m +240 fnt31 +0 -52(close)m grestore 2439(as)s 2682(described)s 3650(abo)s 3(v)k 3(e.)k 4313(The)s 4734(\207le)s 5088(descriptor)s 6096(must)s 6615(be)s -6890(speci\207ed)s 7791(as)s 8034(open)s 8550(when)s 480 10289(this)m +6890(speci\207ed)s 7791(as)s 8034(open)s 8550(when)s 480 13014(this)m 876(option)s 1545(is)s 1755(encountered;)s 3036(this)s 3432(option)s 4101(is)s 4311(o)s 3(v)k 3(erridden)k 5398(by)s 5692(an)s 3(y)k 6089(later)s gsave -6572 10343 translate +6572 13068 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211file)m grestore 7232(or)s gsave -7491 10343 translate +7491 13068 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211fdwait)m grestore -8352(option)s 480 10049(-)m +8352(option)s 480 12774(-)m 608(e)s 6(v)k 3(en)k 1108(by)s 1402(a)s gsave -1568 10103 translate +1568 12828 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211file)m grestore 2228(which)s 2870(does)s 3360(not)s 3726(specify)s 4470(an)s 4753(action)s 5394(on)s 5691(termination)s 6849(\(in)s 7171(this)s 7567(case)s 8034(the)s 8382(def)s 2(ault)k -480 9809(will)m 906(be)s 1188(used,)s 1734(as)s 1984(described)s +480 12534(will)m 906(be)s 1188(used,)s 1734(as)s 1984(described)s 2958(abo)s 3(v)k 3(e\).)k gsave -120 9479 translate +120 12204 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211D)m gsave @@ -1472,7 +1435,7 @@ grestore gsave -120 9239 translate +120 11964 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211defvar)m gsave 1296 0 translate @@ -1487,17 +1450,17 @@ grestore grestore -480 8945(Set)m 845(a)s 1011(user)s 4(-)k +480 11670(Set)m 845(a)s 1011(user)s 4(-)k 1473(de\207ned)s 2236(v)s 6(ari)k 2595(able)s 240 fnt83 -3049 8947(name)m 240 fnt82 3621 8945(to)m 240 fnt83 3860 8947(val)m -4152(ue)s 240 fnt82 4371 8945(.)m 4475(These)s 5102(user)s 4(-)k +3049 11672(name)m 240 fnt82 3621 11670(to)m 240 fnt83 3860 11672(val)m +4152(ue)s 240 fnt82 4371 11670(.)m 4475(These)s 5102(user)s 4(-)k 5564(de\207ned)s 6327(v)s 6(ari)k 6686(ables)s 7228(are)s 7575(made)s 8149(a)s 4(v)k 6(ail)k 8598(able)s -480 8705(in)m 723(the)s 1071(con)s 1414(\207g)s 1660(u)s +480 11430(in)m 723(the)s 1071(con)s 1414(\207g)s 1660(u)s 1775(ra)s 1960(tion)s 2389(lan)s 2678(guage)s 3306(as)s 3556(the)s 3904(pa)s 4130(ram)s 4501(e)s 4603(ters)s gsave -4998 8759 translate +4998 11484 translate 0.6953 1.0000 scale 240 fnt31 0 -52(u\211)m gsave 288 0 translate @@ -1508,10 +1471,10 @@ grestore 5764(and)s 6168(are)s 6515(passed)s 7211(to)s 7450(the)s 7798(ser)s -8076(vice)s 8530(in)s 8773(en)s 8996(-)s 480 8465(vi)m +8076(vice)s 8530(in)s 8773(en)s 8996(-)s 480 11190(vi)m 660(ron)s 976(ment)s 1508(v)s 6(ari)k 1867(ables)s gsave -2402 8519 translate +2402 11244 translate 0.6953 1.0000 scale 240 fnt31 0 -52(USERV_U_)m gsave 1152 0 translate @@ -1521,18 +1484,18 @@ grestore 3709(.)s -240 fnt83 3806 8467(name)m 240 fnt82 4371 8465(may)m 4831(con)s +240 fnt83 3806 11192(name)m 240 fnt82 4371 11190(may)m 4831(con)s 5174(tain)s 5582(only)s 6055(al)s 6222(phanu)s 6803(mer)s 7174(ics)s 7483(and)s 7880(un)s 8117(der)s 8422(scores,)s -480 8225(and)m 884(must)s 1409(start)s 1879(with)s 2360(a)s +480 10950(and)m 884(must)s 1409(start)s 1879(with)s 2360(a)s 2526(let)s 2764(ter)s 13(.)k 3106(If)s 3335(se)s 6(v)k 3643(er)s 3828(al)s 4055(de\207)s 4406(ni)s 4586(tions)s 5102(are)s 5449(gi)s 6(v)k 5744(en)s 6026(for)s -6364(the)s 6712(same)s 240 fnt83 7258 8227(name)m 240 fnt82 -7830 8225(then)m 8299(only)s 8778(the)s 480 7985(last)m 871(is)s +6364(the)s 6712(same)s 240 fnt83 7258 10952(name)m 240 fnt82 +7830 10950(then)m 8299(only)s 8778(the)s 480 10710(last)m 871(is)s 1081(ef)s 1278(fec)s 1562(ti)s 6(v)k 3(e.)k gsave -120 7694 translate +120 10419 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211t)m gsave 432 0 translate @@ -1542,7 +1505,7 @@ grestore gsave -120 7454 translate +120 10179 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211timeout)m gsave @@ -1552,130 +1515,170 @@ grestore grestore -480 7160(T)m 8(ime)k +480 9885(T)m 8(ime)k 1029(out)s 1392(the)s 1736(service)s 2465(if)s 2678(it)s 2867(tak)s 2(es)k 3403(longer)s 4071(than)s 240 fnt83 -4536 7162(seconds)m 240 fnt82 5346 7160(seconds)m 6151(\(a)s 6393(positi)s 6(v)k 3(e)k +4536 9887(seconds)m 240 fnt82 5346 9885(seconds)m 6151(\(a)s 6393(positi)s 6(v)k 3(e)k 7193(inte)s 3(ger)k 9(,)k 7948(in)s 8187(decimal\).)s -480 6919(T)m 8(imeout)k 1331(will)s 1746(produce)s 2562(a)s +480 9644(T)m 8(imeout)k 1331(will)s 1746(produce)s 2562(a)s 2717(diagnostic)s 3742(on)s 4028(stderr)s 4620(and)s 5013(an)s 5284(e)s 3(xit)k 5688(status)s 6272(of)s 6532(255.)s -6985(If)s 240 fnt83 7204 6921(seconds)m 240 fnt82 8006 6919(is)m -8205(zero)s 8657(then)s 480 6679(no)m 773(timeout)s 1563(will)s +6985(If)s 240 fnt83 7204 9646(seconds)m 240 fnt82 8006 9644(is)m +8205(zero)s 8657(then)s 480 9404(no)m 773(timeout)s 1563(will)s 1989(be)s 2271(implemented)s 3577(\(this)s 4052(is)s 4262(the)s 4610(def)s 2(ault\).)k gsave -120 6339 translate +120 9064 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211S)m grestore 240 fnt83 -380 6287(method)m gsave -120 6099 translate +380 9012(method)m gsave +120 8824 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211signals)m grestore -1081 6047(method)m 240 fnt82 -480 5805(Af)m 6(fects)k 1212(the)s 1544(handling)s 2420(of)s +1081 8772(method)m 240 fnt82 +480 8530(Af)m 6(fects)k 1212(the)s 1544(handling)s 2420(of)s 2675(the)s 3008(e)s 3(xit)k 3407(status)s 3987(when)s 4547(the)s 4879(service)s 5596(terminates)s 6625(due)s 7012(to)s -7235(a)s 7386(signal.)s 8045(\(The)s 8536(client)s 480 5564(will)m +7235(a)s 7386(signal.)s 8045(\(The)s 8536(client)s 480 8289(will)m 906(al)s 2(w)k 2(ays)k 1617(\207nish)s 2206(by)s 2500(calling)s gsave -3203 5618 translate +3203 8343 translate 0.6953 1.0000 scale 240 fnt31 0 -52(_exit)m grestore 3703(,)s 3810(so)s 4076(that)s 4494(only)s 4974(numbers)s 5849(from)s 6373(0)s 6548(to)s 6787(255)s 7193(can)s 7582(be)s 7864(returned)s -8718(and)s 480 5324(not)m 830(the)s 1162(full)s 1532(range)s +8718(and)s 480 8049(not)m 830(the)s 1162(full)s 1532(range)s 2102(of)s 2357(numbers)s 3216(and)s 3603(signal)s 4213(indications)s 5297(which)s 5922(can)s 6295(be)s 6561(returned)s 7398(by)s 7676(the)s gsave -8008 5378 translate +8008 8103 translate 0.6953 1.0000 scale 240 fnt31 0 -52(wait)m grestore 8451(f)s 2(amily)k -480 5084(of)m 751(system)s 1475(calls.\))s 480 4676(The)m 240 fnt83 -908 4678(method)m 240 fnt82 1679 4676(may)m 2145(be)s 2427(one)s -2829(of)s 3100(the)s 3448(follo)s 6(wing:)k 240 fnt83 -600 4438(status)m 240 fnt82 960 4196(The)m 1386(client')s 13(s)k +480 7808(of)m 751(system)s 1475(calls.\))s 2160(The)s 240 fnt83 +2588 7810(method)m 240 fnt82 3359 7808(may)m 3825(be)s 4107(one)s +4509(of)s 4780(the)s 5128(follo)s 6(wing:)k 240 fnt83 +600 7570(status)m 240 fnt82 960 7328(The)m 1386(client')s 13(s)k 2123(e)s 3(xit)k 2536(status)s 3128(will)s 3552(be)s -240 fnt83 3831 4198(status)m 240 fnt82 4384 4196(.)m 4486(This)s +240 fnt83 3831 7330(status)m 240 fnt82 4384 7328(.)m 4486(This)s 4959(will)s 5383(not)s 5746(be)s 6026(distinguishable)s 7527(from)s -8049(the)s 8394(service)s 960 3955(really)m 1557(ha)s 4(ving)k +8049(the)s 8394(service)s 960 7087(really)m 1557(ha)s 4(ving)k 2258(e)s 3(xited)k 2897(with)s 3379(code)s 240 fnt83 -3887 3957(status)m 240 fnt82 4440 3955(.)m 4544(This)s 5020(method)s +3887 7089(status)m 240 fnt82 4440 7087(.)m 4544(This)s 5020(method)s 5796(is)s 6006(the)s 6354(def)s 2(ault,)k 7122(with)s -7604(a)s 240 fnt83 7770 3957(status)m 240 fnt82 8383 3955(of)m +7604(a)s 240 fnt83 7770 7089(status)m 240 fnt82 8383 7087(of)m 8654(254.)s gsave -600 3769 translate +600 6901 translate 0.6953 1.0000 scale 240 fnt31 0 -52(number)m grestore gsave -600 3529 translate +600 6661 translate 0.6953 1.0000 scale 240 fnt31 0 -52(number\211nocore)m grestore -960 3235(The)m 1388(client')s 13(s)k 2128(e)s 3(xit)k +960 6367(The)m 1388(client')s 13(s)k 2128(e)s 3(xit)k 2543(status)s 3138(will)s 3564(be)s 3846(the)s 4194(number)s 4985(of)s 5256(the)s 5604(signal)s 6230(which)s 6872(caused)s -7581(the)s 7929(termination)s 960 2995(of)m 1231(the)s 1579(service.)s +7581(the)s 7929(termination)s 960 6127(of)m 1231(the)s 1579(service.)s 2359(If)s gsave -2589 3049 translate +2589 6181 translate 0.6953 1.0000 scale 240 fnt31 0 -52(number)m grestore 3249(is)s 3459(used)s 3956(rather)s 4572(than)s gsave -5041 3049 translate +5041 6181 translate 0.6953 1.0000 scale 240 fnt31 0 -52(number\211nocore)m grestore 6402(then)s -6871(128)s 7278(will)s 7704(be)s 7986(added)s 960 2755(if)m +6871(128)s 7278(will)s 7704(be)s 7986(added)s 960 5887(if)m 1177(the)s 1525(service)s 2257(dumped)s 3087(core.)s gsave -3602 2809 translate +3602 5941 translate 0.6953 1.0000 scale 240 fnt31 0 -52(number)m grestore 4262(is)s 4472(v)s 3(ery)k 4948(lik)s 2(e)k 5360(the)s 5708(e)s 3(xit)k 6123(code)s 6631(mangling)s -7588(done)s 8110(by)s 8404(the)s 960 2515(Bourne)m 1721(shell.)s +7588(done)s 8110(by)s 8404(the)s 960 5647(Bourne)m 1721(shell.)s gsave -600 2329 translate +600 5461 translate 0.6953 1.0000 scale 240 fnt31 0 -52(highbit)m grestore -960 2035(The)m 1388(client')s 13(s)k +960 5167(The)m 1388(client')s 13(s)k 2128(e)s 3(xit)k 2543(status)s 3138(will)s 3564(be)s 3846(the)s 4194(number)s 4985(of)s 5256(the)s 5604(signal)s 6230(with)s 6712(128)s 7119(added.)s 7795(If)s 8025(the)s -8373(service)s 960 1795(e)m 3(xits)k 1459(normally)s 2376(with)s +8373(service)s 960 4927(e)m 3(xits)k 1459(normally)s 2376(with)s 2858(an)s 3141(e)s 3(xit)k 3556(code)s 4064(of)s 4335(greater)s 5057(than)s 5526(127)s 5934(then)s 6403(127)s 6811(will)s 7237(be)s 7519(returned.)s gsave -600 1609 translate +600 4741 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stdout)m grestore -960 1315(The)m 1375(service')s 13(s)k 2247(numeric)s 3069(w)s 2(ait)k +960 4447(The)m 1375(service')s 13(s)k 2247(numeric)s 3069(w)s 2(ait)k 3524(status)s 4105(as)s 4341(tw)s 2(o)k 4737(decimal)s 5534(numbers)s 6395(\(high)s 6943(byte)s 7397(\207rst\))s 7882(and)s -8272(a)s 8424(te)s 3(xtual)k 960 1075(description)m 2079(of)s +8272(a)s 8424(te)s 3(xtual)k 960 4207(description)m 2079(of)s 2350(its)s 2626(meaning)s 3503(will)s 3929(be)s 4211(printed)s 4946(to)s 5185(the)s 5533(client')s 13(s)k 6273(standard)s -7141(output.)s 7857(It)s 8062(will)s 8488(be)s 960 835(preceded)m +7141(output.)s 7857(It)s 8062(will)s 8488(be)s 960 3967(preceded)m 1865(by)s 2142(a)s 2292(ne)s 6(wline)k 3082(and)s 3470(follo)s 6(wed)k 4355(by)s 4633(an)s 4899(e)s 3(xtra)k 5417(ne)s 6(wline,)k 6258(and)s 6646(the)s 6977(numbers)s -7836(are)s 8166(separated)s 0 52(0.62)m 4809(User)s 5320(service)s -6052(daemon)s 6867(and)s 7271(client)s 7861(speci\207cation)s +7836(are)s 8166(separated)s 960 3727(from)m 1484(each)s 1979(other)s +2530(and)s 2934(from)s 3458(the)s 3806(te)s 3(xtual)k +4508(description)s 5627(by)s 5921(single)s 6548(spaces.)s 7276(The)s +7704(e)s 3(xit)k 8119(status)s 8714(of)s 960 3487(the)m +1308(client)s 1898(will)s 2324(be)s 2606(zero,)s 3124(unless)s +3773(a)s 3939(system)s 4663(error)s 5186(occurs)s 5861(in)s +6104(which)s 6746(case)s 7213(no)s 7506(e)s 3(xit)k +7921(status)s 8516(and)s 960 3247(description)m 2079(will)s 2505(be)s +2787(printed)s 3522(to)s 3761(stdout,)s 4453(and)s 4857(an)s +5140(error)s 5663(message)s 6529(will)s 6955(be)s 7237(printed)s +7972(to)s 8211(stderr)s 960 3007(as)m 1210(usual.)s 480 2794(Problems)m +1420(such)s 1902(as)s 2137(client)s 2713(usage)s 3299(errors,)s +3948(the)s 4281(service)s 4999(not)s 5351(being)s 5921(found)s +6524(or)s 6768(permission)s 7860(being)s 8430(denied)s 480 2554(or)m +739(f)s 2(ailure)k 1415(of)s 1686(a)s 1852(system)s +2576(call)s 2975(are)s 3322(system)s 4046(errors.)s 4706(An)s +5056(error)s 5579(message)s 6445(describing)s 7494(the)s 7842(problem)s +8699(will)s 480 2313(be)m 758(printed)s 1489(on)s 1782(the)s +2125(client')s 13(s)k 2861(stderr)s 9(,)k 3498(and)s +3898(the)s 4241(client')s 13(s)k 4977(e)s 3(xit)k +5388(status)s 5978(will)s 6400(be)s 6678(255.)s 7138(If)s +7363(the)s 7707(client)s 8293(dies)s 8724(due)s 480 2073(to)m +719(a)s 885(signal)s 1511(this)s 1907(should)s 2604(be)s +2886(treated)s 3593(as)s 3843(a)s 4009(serious)s 4737(system)s +5461(error)s 13(.)k gsave +120 1733 translate +0.6953 1.0000 scale +240 fnt31 0 -52(\211H)m +grestore +gsave +120 1493 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(\211\211hidecwd)m +grestore +480 1199(Pre)m 6(v)k 3(ents)k 1345(the)s +1693(calling)s 2396(process')s 13(s)k 3323(current)s 4059(directory)s +4975(name)s 5549(from)s 6073(being)s 6658(passed)s 7354(to)s +7593(the)s 7941(service;)s 8729(the)s 480 959(null)m 907(string)s +1504(will)s 1930(be)s 2212(passed)s 2908(instead.)s 0 52(User)m +511(service)s 1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s +8491(0.64.1)s grestore grestore @@ -1683,7 +1686,7 @@ pgsave restore showpage -%%Page: 7 7 +%%Page: 6 6 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -1712,117 +1715,78 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -1 LoutMargSet +0 LoutMargSet grestore -240 fnt84 8951 13844(7)m 240 fnt82 960 13256(from)m 1484(each)s -1979(other)s 2530(and)s 2934(from)s 3458(the)s 3806(te)s 3(xtual)k -4508(description)s 5627(by)s 5921(single)s 6548(spaces.)s 7276(The)s -7704(e)s 3(xit)k 8119(status)s 8714(of)s 960 13016(the)m -1308(client)s 1898(will)s 2324(be)s 2606(zero,)s 3124(unless)s -3773(a)s 3939(system)s 4663(error)s 5186(occurs)s 5861(in)s -6104(which)s 6746(case)s 7213(no)s 7506(e)s 3(xit)k -7921(status)s 8516(and)s 960 12776(description)m 2079(will)s 2505(be)s -2787(printed)s 3522(to)s 3761(stdout,)s 4453(and)s 4857(an)s -5140(error)s 5663(message)s 6529(will)s 6955(be)s 7237(printed)s -7972(to)s 8211(stderr)s 960 12536(as)m 1210(usual.)s 480 12024(Problems)m -1420(such)s 1902(as)s 2137(client)s 2713(usage)s 3299(errors,)s -3948(the)s 4281(service)s 4999(not)s 5351(being)s 5921(found)s -6524(or)s 6768(permission)s 7860(being)s 8430(denied)s 480 11784(or)m -739(f)s 2(ailure)k 1415(of)s 1686(a)s 1852(system)s -2576(call)s 2975(are)s 3322(system)s 4046(errors.)s 4706(An)s -5056(error)s 5579(message)s 6445(describing)s 7494(the)s 7842(problem)s -8699(will)s 480 11543(be)m 758(printed)s 1489(on)s 1782(the)s -2125(client')s 13(s)k 2861(stderr)s 9(,)k 3498(and)s -3898(the)s 4241(client')s 13(s)k 4977(e)s 3(xit)k -5388(status)s 5978(will)s 6400(be)s 6678(255.)s 7138(If)s -7363(the)s 7707(client)s 8293(dies)s 8724(due)s 480 11303(to)m -719(a)s 885(signal)s 1511(this)s 1907(should)s 2604(be)s -2886(treated)s 3593(as)s 3843(a)s 4009(serious)s 4737(system)s -5461(error)s 13(.)k gsave -120 10963 translate +240 fnt84 0 13842(6)m gsave +120 13332 translate 0.6953 1.0000 scale -240 fnt31 0 -52(\211H)m +240 fnt31 0 -52(\211P)m grestore gsave -120 10723 translate -0.6953 1.0000 scale -240 fnt31 -0 -52(\211\211hidecwd)m -grestore -480 10429(Pre)m 6(v)k 3(ents)k 1345(the)s -1693(calling)s 2396(process')s 13(s)k 3323(current)s 4059(directory)s -4975(name)s 5549(from)s 6073(being)s 6658(passed)s 7354(to)s -7593(the)s 7941(service;)s 8729(the)s 480 10189(null)m 907(string)s -1504(will)s 1930(be)s 2212(passed)s 2908(instead.)s gsave -120 9849 translate +120 13092 translate 0.6953 1.0000 scale 240 fnt31 -0 -52(\211P)m -grestore -gsave -120 9609 translate -0.6953 1.0000 scale -240 fnt31 0 -52(\211\211sigpipe)m +0 -52(\211\211sigpipe)m grestore -480 9315(If)m 700(the)s -1038(service)s 1760(program)s 2620(is)s 2820(terminated)s 3888(due)s -4280(to)s 4509(a)s gsave -4665 9369 translate +240 fnt82 480 12798(If)m 700(the)s 1038(service)s +1760(program)s 2620(is)s 2820(terminated)s 3888(due)s 4280(to)s +4509(a)s gsave +4665 12852 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGPIPE)m grestore -5415(the)s -5753(e)s 3(xit)k 6157(status)s 6742(of)s 7003(the)s -7341(client)s 7921(will)s 8337(be)s 8608(zero,)s 480 9075(e)m 6(v)k 3(en)k +5415(the)s 5753(e)s 3(xit)k +6157(status)s 6742(of)s 7003(the)s 7341(client)s 7921(will)s +8337(be)s 8608(zero,)s 480 12558(e)m 6(v)k 3(en)k 967(if)s 1170(it)s 1349(w)s 2(ould)k 1990(ha)s 4(v)k 3(e)k 2477(been)s 2973(something)s 4009(else)s 4423(according)s 5405(to)s 5630(the)s 5965(e)s 3(xit)k 6366(status)s 6948(method)s -7710(speci\207ed.)s 8650(This)s 480 8835(option)m 1149(has)s 1519(no)s +7710(speci\207ed.)s 8650(This)s 480 12318(option)m 1149(has)s 1519(no)s 1812(ef)s 6(fect)k 2408(on)s 2705(the)s 3053(code)s 3561(and)s 3965(description)s 5084(printed)s 5819(if)s 6036(the)s 6384(e)s 3(xit)k 6799(status)s 7394(method)s gsave -8170 8889 translate +8170 12372 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stdout)m grestore -8830(is)s 480 8595(in)m 723(use.)s gsave -120 8305 translate +8830(is)s 480 12078(in)m 723(use.)s gsave +120 11788 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211h)m grestore gsave -120 8065 translate +120 11548 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211help)m grestore gsave -120 7825 translate +120 11308 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211copyright)m grestore gsave -480 7585 translate +480 11068 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211h)m grestore -740 7531(or)m gsave -999 7585 translate +740 11014(or)m gsave +999 11068 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211help)m grestore 1659(prints)s 2254(the)s 2602(client')s 13(s)k 3342(usage)s 3943(message;)s gsave -4865 7585 translate +4865 11068 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211copyright)m grestore 6026(prints)s 6621(the)s 6969(cop)s 2(yright)k 7944(and)s 8348(lack)s 8807(of)s -480 7291(w)m 2(arranty)k 1381(notice.)s 9066 670 0 670 240 240 60 0 6161 LoutGr2 +480 10774(w)m 2(arranty)k 1381(notice.)s 9066 670 0 670 240 240 60 0 9644 LoutGr2 newpath 0 ysize 0.3 ft sub moveto xsize 0 rlineto 0 0.1 ft rlineto @@ -1832,30 +1796,30 @@ 320 fnt84 0 66(2.2.)m 628(Security-o)s 3(v)k 3(erriding)k 3373(options)s grestore -0 5699(There)m +0 9182(There)m 613(are)s 960(also)s 1398(some)s 1959(options)s 2715(which)s 3357(are)s 3704(a)s 4(v)k 6(ailable)k 4612(for)s 4950(deb)s 4(ugging)k 6011(and)s 6415(to)s 6654(allo)s 6(w)k -7233(the)s 7581(system)s 0 5459(administrator)m 1333(to)s 1572(o)s 3(v)k 3(erride)k +7233(the)s 7581(system)s 0 8942(administrator)m 1333(to)s 1572(o)s 3(v)k 3(erride)k 2418(a)s 2584(user')s 13(s)k 3192(polic)s 3(y)k 15(.)k 3876(These)s 4503(options)s 5259(are)s 5606(a)s 4(v)k 6(ailable)k 6514(only)s 6994(if)s 7211(the)s 7559(client)s 8149(is)s -8359(called)s 0 5219(by)m 294(root)s 739(or)s 998(if)s +8359(called)s 0 8702(by)m 294(root)s 739(or)s 998(if)s 1215(the)s 1563(calling)s 2266(user)s 2724(is)s 2934(the)s 3282(same)s 3829(as)s 4079(the)s 4427(service)s 5159(user)s 13(.)k gsave -120 4865 translate +120 8348 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211override)m gsave 1584 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(con\207gur)m 3(ation-data)k +240 fnt83 0 -52(con\207gur)m 3(ation\211data)k grestore grestore gsave -120 4625 translate +120 8108 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211override\211file)m gsave 2304 0 translate @@ -1864,29 +1828,29 @@ grestore grestore -480 4331(Do)m +480 7814(Do)m 826(not)s 1192(read)s 1661(the)s 2009(usual)s 2569(con\207guration)s 3902(\207les.)s 4404(Instead,)s 5201(the)s 5549(client)s 6139(sends)s -240 fnt83 6722 4333(con\207gur)m 3(ation-data)k 240 fnt82 480 4090(\(follo)m 6(wed)k +240 fnt83 6722 7816(con\207gur)m 3(ation-data)k 240 fnt82 480 7573(\(follo)m 6(wed)k 1461(by)s 1755(a)s 1921(ne)s 6(wline\))k 2800(or)s -3059(the)s 3407(contents)s 4255(of)s 240 fnt83 4526 4092(\207lename)m -240 fnt82 5390 4090(\(which)m 6111(is)s 6321(opened)s 7071(in)s +3059(the)s 3407(contents)s 4255(of)s 240 fnt83 4526 7575(\207lename)m +240 fnt82 5390 7573(\(which)m 6111(is)s 6321(opened)s 7071(in)s 7314(the)s 7662(conte)s 3(xt)k 8423(of)s 8694(the)s -480 3849(client\))m 1138(to)s 1377(the)s 1725(daemon)s 2540(and)s +480 7332(client\))m 1138(to)s 1377(the)s 1725(daemon)s 2540(and)s 2944(the)s 3292(daemon)s 4107(uses)s 4570(that)s 4988(data)s -5446(instead.)s 6227(The)s 240 fnt83 6655 3851(con\207gur)m 3(ation-data)k -240 fnt82 8503 3849(must)m 480 3609(all)m 772(be)s 1052(in)s +5446(instead.)s 6227(The)s 240 fnt83 6655 7334(con\207gur)m 3(ation-data)k +240 fnt82 8503 7332(must)m 480 7092(all)m 772(be)s 1052(in)s 1293(one)s 1693(ar)s 4(gument.)k 2694(It)s 2897(will)s 3321(ha)s 4(v)k 3(e)k 3820(a)s 3984(single)s 4609(ne)s 6(wline)k 5414(appended)s 6388(so)s 6652(that)s 7068(a)s 7232(single)s 7857(directi)s 6(v)k 3(e)k -8737(can)s 480 3369(easily)m 1083(be)s 1357(gi)s 6(v)k 3(en,)k +8737(can)s 480 6852(easily)m 1083(be)s 1357(gi)s 6(v)k 3(en,)k 1979(b)s 4(ut)k 2333(if)s 2542(more)s 3080(than)s 3541(one)s 3935(directi)s 6(v)k 3(e)k 4809(is)s 5011(required)s 5857(it)s 6040(will)s 6458(ha)s 4(v)k 3(e)k 6951(to)s 7182(contain)s 7935(one)s 8329(or)s 8579(more)s -480 3129(real)m 892(ne)s 6(wlines.)k gsave -120 2838 translate +480 6612(real)m 892(ne)s 6(wlines.)k gsave +120 6321 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211spoof\211user)m gsave @@ -1896,36 +1860,36 @@ grestore grestore -480 2544(Pretend)m 1268(to)s 1507(the)s +480 6027(Pretend)m 1268(to)s 1507(the)s 1855(service)s 2587(that)s 3005(it)s 3197(is)s 3407(being)s -3992(called)s 4620(by)s 240 fnt83 4914 2546(user)m 240 fnt82 -5391 2544(\(which)m 6112(may)s 6578(be)s 6860(a)s 7026(username)s -7998(or)s 8257(a)s 8423(uid\).)s 480 2304(This)m 956(will)s +3992(called)s 4620(by)s 240 fnt83 4914 6029(user)m 240 fnt82 +5391 6027(\(which)m 6112(may)s 6578(be)s 6860(a)s 7026(username)s +7998(or)s 8257(a)s 8423(uid\).)s 480 5787(This)m 956(will)s 1382(also)s 1820(af)s 6(fect)k 2416(the)s 2764(group)s 3376(and)s 3780(supplementary)s 5242(groups)s 5945(supplied)s 6814(to)s 7053(the)s 7401(service;)s 8189(the)s 3(y)k 8652(will)s -480 2064(be)m 759(the)s 1103(standard)s 1968(group)s 2576(and)s -2977(supplementary)s 4435(groups)s 5135(for)s 240 fnt83 5469 2066(user)m -240 fnt82 5886 2064(.)m 5987(The)s gsave -6411 2118 translate +480 5547(be)m 759(the)s 1103(standard)s 1968(group)s 2576(and)s +2977(supplementary)s 4435(groups)s 5135(for)s 240 fnt83 5469 5549(user)m +240 fnt82 5886 5547(.)m 5987(The)s gsave +6411 5601 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211spoof\211user)m grestore -7669(option)s 8334(will)s 240 fnt83 8756 2066(not)m 240 fnt82 -480 1824(af)m 6(fect)k 1076(which)s 1718(user)s 2176(is)s +7669(option)s 8334(will)s 240 fnt83 8756 5549(not)m 240 fnt82 +480 5307(af)m 6(fect)k 1076(which)s 1718(user)s 2176(is)s 2386(chosen)s 3108(if)s 3325(the)s 3673(service)s 4405(user)s 4863(is)s 5073(speci\207ed)s 5981(as)s 6231(just)s gsave -6636 1878 translate +6636 5361 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211)m grestore 6736(;)s 6848(in)s 7091(this)s 7487(case)s -7954(the)s 8302(service)s 480 1584(user)m 938(will)s 1364(be)s +7954(the)s 8302(service)s 480 5067(user)m 938(will)s 1364(be)s 1646(the)s 1994(real)s 2406(calling)s 3109(user)s 13(.)k -0 52(User)m 511(service)s 1243(daemon)s 2058(and)s 2462(client)s -3052(speci\207cation)s 8652(0.62)s +0 52(0.64.1)m 4809(User)s 5320(service)s 6052(daemon)s 6867(and)s +7271(client)s 7861(speci\207cation)s grestore grestore @@ -1933,7 +1897,7 @@ pgsave restore showpage -%%Page: 8 8 +%%Page: 7 7 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -1961,10 +1925,10 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -0 LoutMargSet +1 LoutMargSet grestore -240 fnt84 0 13842(8)m gsave -0 12726 translate +240 fnt84 8951 13844(7)m gsave +0 12731 translate 240 fnt82 9066 688 0 688 240 240 60 LoutGraphic gsave newpath 0 ysize 0.3 ft sub moveto @@ -1978,54 +1942,54 @@ 4774(ser)s 3(vice)k 5846(pr)s 6(ogram)k grestore 240 fnt82 -0 12264(The)m 428(daemon)s 1243(which)s 1885(is)s 2095(handling)s +0 12269(The)m 428(daemon)s 1243(which)s 1885(is)s 2095(handling)s 2986(the)s 3334(service)s 4066(user)s 4524(side)s 4965(of)s 5236(things)s 5872(will)s 6298(read)s 6767(con\207guration)s 8100(\207les)s -8549(to)s 0 12024(decide)m 680(what)s 1205(to)s 1444(do.)s +8549(to)s 0 12029(decide)m 680(what)s 1205(to)s 1444(do.)s 1788(If)s 2018(it)s 2210(decides)s 2978(to)s 3217(allo)s 6(w)k 3796(the)s 4144(service)s 4876(to)s 5115(be)s 5397(pro)s 3(vided)k 6303(it)s 6495(will)s 6921(fork)s 7380(a)s 7546(subprocess)s -8647(to)s 0 11784(e)m 3(x)k 3(ecute)k 780(the)s -1128(service.)s 0 11376(The)m 428(service)s 1160(will)s 1586(ha)s 4(v)k 3(e)k +8647(to)s 0 11789(e)m 3(x)k 3(ecute)k 780(the)s +1128(service.)s 0 11381(The)m 428(service)s 1160(will)s 1586(ha)s 4(v)k 3(e)k 2087(no)s 2380(controlling)s 3482(terminal,)s 4384(b)s 4(ut)k 4746(it)s 4938(will)s 5364(be)s 5646(a)s 5812(process)s -6580(group)s 7192(leader)s 13(.)k 0 10968(If)m 223(the)s +6580(group)s 7192(leader)s 13(.)k 0 10973(If)m 223(the)s 563(client)s 1146(is)s 1348(killed)s 1942(or)s 2194(times)s 2754(out)s 3112(or)s 3364(a)s 3522(\207le)s 3875(or)s 4127(descriptor)s 5134(being)s 5711(read)s 6173(or)s 6424(written)s -7149(by)s 7436(the)s 7776(client)s 8358(process)s 0 10728(gets)m +7149(by)s 7436(the)s 7776(client)s 8358(process)s 0 10733(gets)m 436(an)s 719(error)s 1242(then)s 1711(the)s 2059(service)s 2791(will)s 3217(be)s 3499(disconnected)s 4806(from)s 5330(the)s 5678(client.)s 6312(The)s 6740(client)s 7330(will)s 7756(return)s -8383(an)s 0 10487(e)m 3(xit)k 415(status)s 1010(of)s +8383(an)s 0 10492(e)m 3(xit)k 415(status)s 1010(of)s 1281(255)s 1687(and)s 2091(some)s 2652(the)s 3000(service')s 13(s)k 3886(pipes)s 4442(may)s 4908(be)s 5190(closed)s 5859(at)s 6091(the)s 6439(other)s 6990(end.)s 7440(The)s 7868(service)s -8600(will)s 0 10247(become)m 800(a)s 966(child)s 1502(of)s +8600(will)s 0 10252(become)m 800(a)s 966(child)s 1502(of)s gsave -1773 10301 translate +1773 10306 translate 0.6953 1.0000 scale 240 fnt31 0 -52(init)m grestore 2173(.)s 2277(The)s 2705(service)s 3437(may)s 3903(well)s 4369(not)s 4735(notice)s 5375(the)s 5723(disconnection,)s 7159(though)s 7882(writing)s 8625(to)s 8864(a)s -0 10007(pipe)m 468(after)s 964(this)s 1360(may)s 1826(produce)s +0 10012(pipe)m 468(after)s 964(this)s 1360(may)s 1826(produce)s 2653(a)s gsave -2819 10061 translate +2819 10066 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGPIPE)m grestore 3579(and)s 3983(the)s 4331(f)s 2(acility)k 5058(e)s 3(xists)k 5650(to)s 5889(ha)s 4(v)k 3(e)k 6390(a)s gsave -6556 10061 translate +6556 10066 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGHUP)m grestore 7216(sent)s 7661(to)s 7900(the)s 8248(service)s -0 9767(on)m 297(disconnection.)s 9066 670 0 670 240 240 60 0 8743 LoutGr2 +0 9772(on)m 297(disconnection.)s 9066 670 0 670 240 240 60 0 8748 LoutGr2 newpath 0 ysize 0.3 ft sub moveto xsize 0 rlineto 0 0.1 ft rlineto @@ -2035,57 +1999,57 @@ 320 fnt84 0 66(3.1.)m 628(File)s 1216(descriptors)s grestore -0 8281(The)m 428(service)s 1160(program')s 13(s)k +0 8286(The)m 428(service)s 1160(program')s 13(s)k 2180(standard)s 3048(\207ledescriptors,)s 4508(and)s 4912(possibly)s 5764(other)s -6315(\207le)s 6676(descriptors,)s 7831(will)s 8257(be)s 0 8041(connected)m +6315(\207le)s 6676(descriptors,)s 7831(will)s 8257(be)s 0 8046(connected)m 1028(to)s 1266(pipes)s 1821(or)s 2080(to)s gsave -2318 8095 translate +2318 8100 translate 0.6953 1.0000 scale 240 fnt31 0 -52(/dev/null)m grestore 3219(.)s 3322(The)s gsave -3750 8095 translate +3750 8100 translate 0.6953 1.0000 scale 240 fnt31 0 -52(userv)m grestore 4309(client/daemon)s 5719(pair)s 6150(will)s 6575(arrange)s 7346(that)s -7764(data)s 8221(is)s 8430(copied)s 0 7801(between)m 854(the)s +7764(data)s 8221(is)s 8430(copied)s 0 7806(between)m 854(the)s 1202(\207les)s 1651(or)s 1910(\207le)s 2271(descriptors)s 3370(speci\207ed)s 4278(to)s 4517(to)s 4756(the)s 5104(client)s 5694(by)s 5988(the)s 6336(caller)s 6925(and)s 7329(these)s 7876(these)s -8423(pipes.)s 0 7393(Pipes)m 569(which)s 1211(may)s 1677(be)s +8423(pipes.)s 0 7398(Pipes)m 569(which)s 1211(may)s 1677(be)s 1959(written)s 2692(to)s 2931(will)s 3357(be)s 3639(closed)s 4308(if)s 4525(a)s 4691(write)s 5237(error)s 5760(occurs)s -6435(on)s 6732(the)s 7080(corresponding)s 0 7153(client-side)m 1043(\207le)s +6435(on)s 6732(the)s 7080(corresponding)s 0 7158(client-side)m 1043(\207le)s 1396(or)s 1647(descriptor)s 9(,)k 2692(which)s 3326(may)s 3784(result)s 4366(in)s 4601(a)s gsave -4760 7207 translate +4760 7212 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGPIPE)m grestore 5512(in)s 5747(the)s 6087(service)s 6811(program;)s 7725(pipes)s -8273(open)s 8788(for)s 0 6913(reading)m 770(will)s 1196(get)s +8273(open)s 8788(for)s 0 6918(reading)m 770(will)s 1196(get)s gsave -1548 6967 translate +1548 6972 translate 0.6953 1.0000 scale 240 fnt31 0 -52(EOF)m grestore 1908(if)s 2125(the)s 2473(client-side)s 3523(\207le)s 3884(descriptor)s 4899(gets)s gsave -5335 6967 translate +5335 6972 translate 0.6953 1.0000 scale 240 fnt31 0 -52(EOF)m grestore -5695(or)s 5954(an)s 6237(error)s 13(.)k 0 6505(If)m +5695(or)s 5954(an)s 6237(error)s 13(.)k 0 6510(If)m 230(the)s 578(service)s 1310(closes)s 1945(one)s 2347(of)s 2618(its)s 2894(reading)s 3663(\207le)s 4024(descriptors)s 5123(the)s 5471(writing)s 6214(end)s 6618(of)s 6889(the)s 7237(corresponding)s -8658(pipe)s 0 6265(will)m 421(generate)s 1280(a)s gsave -1441 6319 translate +8658(pipe)s 0 6270(will)m 421(generate)s 1280(a)s gsave +1441 6324 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGPIPE)m @@ -2093,98 +2057,98 @@ 2195(when)s 2766(attempts)s 3620(are)s 3962(made)s 4530(by)s 4819(the)s 5161(client/daemon)s 6567(pair)s 6992(to)s 7226(write)s 7766(to)s 8000(it.)s 8230(This)s 8700(will)s -0 6025(not)m 366(be)s 648(considered)s 1742(an)s 2025(error;)s +0 6030(not)m 366(be)s 648(considered)s 1742(an)s 2025(error;)s 2600(rather)s 9(,)k 3254(the)s 3602(rele)s 6(v)k 6(ant)k 4419(pipe)s 4887(will)s 5313(be)s 5595(discarded)s 6569(and)s -6973(the)s 7321(corresponding)s 8743(\207le)s 0 5785(or)m 259(\207le)s +6973(the)s 7321(corresponding)s 8743(\207le)s 0 5790(or)m 259(\207le)s 620(descriptor)s 1635(held)s 2105(by)s 2399(the)s 2747(client)s -3337(will)s 3763(be)s 4045(closed.)s 0 5377(Lik)m 2(e)k 6(wise,)k +3337(will)s 3763(be)s 4045(closed.)s 0 5382(Lik)m 2(e)k 6(wise,)k 975(if)s 1192(one)s 1594(of)s 1865(the)s 2213(\207le)s 2574(descriptors)s 3673(held)s 4143(by)s 4437(the)s 4785(client)s 5375(for)s 5713(writing)s 6456(by)s 6750(the)s 7098(service)s -7830(is)s 8040(a)s 8206(pipe)s 0 5137(whose)m 665(other)s +7830(is)s 8040(a)s 8206(pipe)s 0 5142(whose)m 665(other)s 1213(end)s 1613(is)s 1820(closed)s 2485(by)s 2776(the)s 3120(caller)s 3706(then)s 4171(the)s 4516(client/daemon)s 5923(pair)s 6351(will)s 6773(see)s 7131(an)s 7410(error)s 7930(when)s -8502(trying)s 0 4897(to)m 239(cop)s 2(y)k 757(data)s +8502(trying)s 0 4902(to)m 239(cop)s 2(y)k 757(data)s 1215(pro)s 3(vided)k 2121(by)s 2415(the)s 2763(service.)s 3543(This)s 4019(too)s 4378(will)s 4804(not)s 5170(be)s 5452(considered)s 6546(an)s 6829(error;)s 7404(rather)s 9(,)k -8058(the)s 8406(pipe)s 0 4657(correspondong)m 1476(to)s 1715(that)s +8058(the)s 8406(pipe)s 0 4662(correspondong)m 1476(to)s 1715(that)s 2133(descriptor)s 3148(will)s 3574(be)s 3856(closed)s 4525(and)s 4929(an)s 3(y)k 5326(further)s 6035(writes)s 6669(will)s -7095(cause)s 7682(the)s 8030(service)s 8762(to)s 0 4417(get)m +7095(cause)s 7682(the)s 8030(service)s 8762(to)s 0 4422(get)m 352(a)s gsave -518 4471 translate +518 4476 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGPIPE)m grestore -1218(.)s 0 4009(Note)m +1218(.)s 0 4014(Note)m 521(that)s 939(not)s 1305(all)s 1598(write)s 2144(errors)s 2751(or)s 3010(brok)s 2(en)k 3730(pipes)s 4286(on)s 4583(\207le)s 4944(descriptors)s 6043(may)s 6509(be)s 6791(visible)s -7484(to)s 7723(the)s 8071(service,)s 0 3769(since)m 547(b)s 4(uf)k 6(fered)k +7484(to)s 7723(the)s 8071(service,)s 0 3774(since)m 547(b)s 4(uf)k 6(fered)k 1404(data)s 1862(may)s 2328(be)s 2610(discarded)s 3584(by)s 3878(the)s 4226(operating)s 5182(system)s 5906(and)s 6310(there)s 6843(will)s 7269(be)s 7551(a)s 7717(\207nite)s 8264(interv)s 6(al)k -0 3529(between)m 847(the)s 1188(error)s 1703(happening)s 2747(and)s +0 3534(between)m 847(the)s 1188(error)s 1703(happening)s 2747(and)s 3144(the)s 3484(service)s 4209(being)s 4787(disconnected)s 6086(from)s 6603(the)s 6944(client)s 7526(or)s 7778(the)s 8119(ne)s 3(xt)k -8580(write)s 0 3289(causing)m 784(a)s gsave -950 3343 translate +8580(write)s 0 3294(causing)m 784(a)s gsave +950 3348 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGPIPE)m grestore -1650(.)s 0 2881(Read)m 550(errors)s 1157(on)s 1454(\207le)s +1650(.)s 0 2886(Read)m 550(errors)s 1157(on)s 1454(\207le)s 1815(descriptors)s 2914(\(and)s 3397(disconnection\))s 4854(will)s 5280(only)s 5760(be)s 6042(visible)s 6735(to)s 6974(the)s 7322(service)s -8054(and)s 0 2641(distinguishable)m 1504(from)s 2028(normal)s 2760(end)s +8054(and)s 0 2646(distinguishable)m 1504(from)s 2028(normal)s 2760(end)s 3164(of)s 3435(\207le)s 3796(if)s gsave -4013 2695 translate +4013 2700 translate 0.6953 1.0000 scale 240 fnt31 0 -52(disconnect\211hup)m grestore -5474(is)s 5684(in)s 5927(ef)s 6(fect.)k 0 2233(Read)m +5474(is)s 5684(in)s 5927(ef)s 6(fect.)k 0 2238(Read)m 549(and)s 951(write)s 1495(errors)s 2100(\(other)s 2728(than)s 3196(brok)s 2(en)k 3914(pipes,)s 4524(as)s 4772(described)s 5744(abo)s 3(v)k 3(e\))k 6437(will)s 6861(al)s 2(w)k 2(ays)k -7570(be)s 7850(visible)s 8541(to)s 8778(the)s 0 1993(caller;)m +7570(be)s 7850(visible)s 8541(to)s 8778(the)s 0 1998(caller;)m 627(the)s 3(y)k 1075(are)s 1408(system)s 2117(errors,)s 2766(and)s 3155(will)s 3566(therefore)s 4469(cause)s 5041(the)s 5375(client)s 5950(to)s 6174(print)s 6671(an)s 6939(error)s -7448(message)s 8299(to)s 8523(stderr)s 0 1752(and)m 404(return)s +7448(message)s 8299(to)s 8523(stderr)s 0 1757(and)m 404(return)s 1031(with)s 1513(an)s 1796(e)s 3(xit)k 2211(status)s -2806(of)s 3077(255.)s 0 1344(If)m 230(the)s 578(main)s +2806(of)s 3077(255.)s 0 1349(If)m 230(the)s 578(main)s 1113(service)s 1845(program)s 2715(process)s 3483(e)s 3(xits)k 3982(while)s 4569(it)s 4761(still)s 5173(has)s 5543(running)s 6341(children)s 7181(an)s 3(y)k 7578(\207le)s 7939(descriptors)s -0 1104(held)m 470(by)s 764(those)s 1325(children)s 2165(can)s +0 1109(held)m 470(by)s 764(those)s 1325(children)s 2165(can)s 2554(remain)s 3274(open,)s 3847(depending)s 4898(on)s 5195(the)s 5543(use)s 5918(of)s gsave -6189 1158 translate +6189 1163 translate 0.6953 1.0000 scale 240 fnt31 0 -52(wait)m grestore 6589(,)s gsave -6696 1158 translate +6696 1163 translate 0.6953 1.0000 scale 240 fnt31 0 -52(nowait)m grestore 7356(or)s gsave -7615 1158 translate +7615 1163 translate 0.6953 1.0000 scale 240 fnt31 0 -52(close)m grestore -8175(for)s 8513(the)s 0 864(rele)m 6(v)k 6(ant)k +8175(for)s 8513(the)s 0 869(rele)m 6(v)k 6(ant)k 817(\207le)s 1178(descriptor)s 2193(in)s 2436(the)s 2784(client')s 13(s)k 3524(ar)s 4(guments.)k 4620(By)s 4954(def)s 2(ault)k -5675(writing)s 6418(\207ledescriptors)s 7822(remain)s 8542(open)s 0 52(0.62)m -4809(User)s 5320(service)s 6052(daemon)s 6867(and)s 7271(client)s -7861(speci\207cation)s +5675(writing)s 6418(\207ledescriptors)s 7822(remain)s 8542(open)s 0 52(User)m +511(service)s 1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s +8491(0.64.1)s grestore grestore @@ -2192,7 +2156,7 @@ pgsave restore showpage -%%Page: 9 9 +%%Page: 8 8 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -2221,9 +2185,9 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -1 LoutMargSet +0 LoutMargSet grestore -240 fnt84 8952 13842(9)m 240 fnt82 0 13251(and)m 404(the)s +240 fnt84 0 13842(8)m 240 fnt82 0 13251(and)m 404(the)s 752(client)s 1342(will)s 1768(w)s 2(ait)k 2237(for)s 2575(them)s 3113(to)s 3352(be)s 3634(closed)s 4303(at)s 4535(the)s 4883(service)s 5615(end,)s 6068(and)s 6472(reading)s @@ -2408,8 +2372,8 @@ 3245(will)s 3671(be)s 3953(set)s 4278(appropriately)s 5606(\(according)s 6681(to)s 6920(the)s 7268(details)s 7942(of)s 8213(the)s 0 5083(service)m -732(user\).)s 0 52(User)m 511(service)s 1243(daemon)s 2058(and)s -2462(client)s 3052(speci\207cation)s 8652(0.62)s +732(user\).)s 0 52(0.64.1)m 4809(User)s 5320(service)s 6052(daemon)s +6867(and)s 7271(client)s 7861(speci\207cation)s grestore grestore @@ -2417,7 +2381,7 @@ pgsave restore showpage -%%Page: 10 10 +%%Page: 9 9 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -2446,9 +2410,9 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -0 LoutMargSet +1 LoutMargSet grestore -240 fnt84 0 13842(10)m gsave +240 fnt84 8952 13842(9)m gsave 0 12725 translate 240 fnt82 9066 689 0 689 240 240 60 LoutGraphic gsave @@ -2660,8 +2624,8 @@ 628(Con\207guration)s 2618(\207le)s 3100(dir)s 5(ecti)k 3(v)k 3(es)k grestore -0 52(0.62)m 4809(User)s 5320(service)s 6052(daemon)s 6867(and)s -7271(client)s 7861(speci\207cation)s +0 52(User)m 511(service)s 1243(daemon)s 2058(and)s 2462(client)s +3052(speci\207cation)s 8491(0.64.1)s grestore grestore @@ -2669,7 +2633,7 @@ pgsave restore showpage -%%Page: 11 11 +%%Page: 10 10 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -2698,14 +2662,14 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -1 LoutMargSet +0 LoutMargSet grestore -240 fnt84 8839 13842(11)m 300 fnt84 0 13210(4.2.1.)m 813(Immediate)s +240 fnt84 0 13842(10)m 300 fnt84 0 13207(4.2.1.)m 813(Immediate)s 2261(dir)s 5(ecti)k 3(v)k 3(es)k 240 fnt82 -0 12696(The)m 428(follo)s 6(wing)k 1405(directi)s 6(v)k 3(es)k +0 12693(The)m 428(follo)s 6(wing)k 1405(directi)s 6(v)k 3(es)k 2375(tak)s 2(e)k 2827(ef)s 6(fect)k 3423(immediately:)s gsave -120 12342 translate +120 12339 translate 0.6953 1.0000 scale 240 fnt31 0 -52(cd)m gsave 432 0 translate @@ -2714,95 +2678,95 @@ grestore grestore -480 12048(Change)m +480 12045(Change)m 1268(directory)s 2184(in)s 2427(the)s 2775(service)s 3507(program.)s gsave -4421 12102 translate +4421 12099 translate 0.6953 1.0000 scale 240 fnt31 0 -52(cd)m grestore 4681(is)s 4891(cumulati)s 6(v)k 3(e.)k 6048(It)s 6253(is)s 6463(an)s 6746(error)s 7269(if)s -7486(the)s 7834(directory)s 480 11808(cannot)m 1178(be)s 1460(changed)s +7486(the)s 7834(directory)s 480 11805(cannot)m 1178(be)s 1460(changed)s 2316(to.)s gsave -480 11454 translate +2666 11859 translate 0.6953 1.0000 scale 240 fnt31 0 -52(cd)m grestore -740 11400(should)m 1437(not)s -1803(be)s 2085(used)s 2582(between)s gsave -3436 11454 translate +2926(should)s 3623(not)s +3989(be)s 4271(used)s 4768(between)s gsave +5622 11859 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211directory)m grestore -5698(and)s 6102(the)s 6450(in)s 9(v)k 4(ocation)k -7504(of)s 7775(the)s 8123(service)s 480 11160(program,)m 1397(as)s -1647(the)s 1995(test)s 2386(for)s 2724(the)s 3072(a)s 4(v)k 6(ailability)k -4190(of)s 4461(the)s 4809(service)s 5541(program)s 6411(w)s 2(ould)k -7066(be)s 7348(done)s 7870(with)s 8352(the)s 8700(old)s -480 10920(current)m 1216(directory)s 2132(and)s 2536(the)s 2884(actual)s -3509(e)s 3(x)k 3(ecution)k 4490(with)s 4972(the)s -5320(ne)s 6(w)k 5767(\(probably)s 6751(causing)s 7535(an)s -7818(error\).)s gsave -120 10580 translate +7884(and)s 8288(the)s 480 11565(in)m 9(v)k 4(ocation)k +1534(of)s 1805(the)s 2153(service)s 2885(program,)s 3802(as)s +4052(the)s 4400(test)s 4791(for)s 5129(the)s 5477(a)s 4(v)k 6(ailability)k +6595(of)s 6866(the)s 7214(service)s 7946(program)s 480 11325(w)m 2(ould)k +1117(be)s 1380(done)s 1884(with)s 2347(the)s 2677(old)s +3022(current)s 3740(directory)s 4637(and)s 5023(the)s 5352(actual)s +5959(e)s 3(x)k 3(ecution)k 6921(with)s 7385(the)s +7714(ne)s 6(w)k 8142(\(probably)s 480 11085(causing)m 1264(an)s +1547(error\).)s gsave +120 10745 translate 0.6953 1.0000 scale 240 fnt31 0 -52(eof)m grestore -480 10286(Stop)m 972(reading)s +480 10451(Stop)m 972(reading)s 1742(the)s 2090(con\207guration)s 3423(\207le)s 3784(in)s 4027(question,)s 4945(as)s 5195(if)s 5412(end)s 5816(of)s 6087(\207le)s 6448(had)s 6852(been)s 7361(reached.)s 8208(An)s 3(y)k -480 10046(control)m 1212(constructs)s 2232(\()s gsave -2305 10100 translate +480 10211(control)m 1212(constructs)s 2232(\()s gsave +2305 10265 translate 0.6953 1.0000 scale 240 fnt31 0 -52(if)m grestore 2505(,)s gsave -2612 10100 translate +2612 10265 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore 3673(or)s gsave -3932 10100 translate +3932 10265 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211push)m grestore 5033(\))s 5161(which)s 5803(were)s 6323(started)s 7017(in)s 7260(that)s 7678(\207le)s 8039(will)s 8465(be)s -480 9806(considered)m 1574(\207nished.)s 2436(P)s 3(arsing)k 3203(will)s +480 9971(considered)m 1574(\207nished.)s 2436(P)s 3(arsing)k 3203(will)s 3629(continue)s 4509(in)s 4752(the)s 5100(\207le)s 5461(which)s 6103(caused)s 6812(the)s 7160(\207le)s 7521(containing)s 8584(the)s gsave -480 9620 translate +480 9785 translate 0.6953 1.0000 scale 240 fnt31 0 -52(eof)m grestore -840 9566(to)m 1079(be)s 1361(read.)s +840 9731(to)m 1079(be)s 1361(read.)s gsave -120 9276 translate +120 9441 translate 0.6953 1.0000 scale 240 fnt31 0 -52(quit)m grestore -480 8982(Stop)m 969(reading)s 1735(con\207guration)s +480 9147(Stop)m 969(reading)s 1735(con\207guration)s 3064(\207les)s 3510(and)s 3910(act)s 4244(immediately)s 5489(on)s 5782(the)s 6126(current)s 6859(settings.)s 7689(The)s 8113(beha)s 4(viour)k -480 8742(of)m gsave -751 8796 translate +480 8907(of)m gsave +751 8961 translate 0.6953 1.0000 scale 240 fnt31 0 -52(quit)m grestore 1211(is)s 1421(subject)s 2158(to)s 2397(the)s gsave -2745 8796 translate +2745 8961 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore 3806(control)s 4538(construct.)s gsave -120 8402 translate +120 8567 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include)m gsave 1152 0 translate @@ -2813,7 +2777,7 @@ grestore gsave -120 8162 translate +120 8327 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211ifexist)m gsave 2304 0 translate @@ -2822,25 +2786,25 @@ grestore grestore -480 7868(Read)m -1026(the)s 1369(con\207guration)s 2698(\207le)s 240 fnt83 3054 7870(\207lename)m -240 fnt82 3858 7868(,)m 3961(and)s 4360(then)s 4825(return)s +480 8033(Read)m +1026(the)s 1369(con\207guration)s 2698(\207le)s 240 fnt83 3054 8035(\207lename)m +240 fnt82 3858 8033(,)m 3961(and)s 4360(then)s 4825(return)s 5447(to)s 5682(this)s 6073(\207le)s 6430(and)s 6829(continue)s -7705(parsing)s 8457(it)s 8644(with)s 480 7628(the)m 822(ne)s 3(xt)k +7705(parsing)s 8457(it)s 8644(with)s 480 7793(the)m 822(ne)s 3(xt)k 1284(directi)s 6(v)k 3(e.)k 2207(It)s 2405(is)s 2608(an)s 2884(error)s 3400(if)s 3610(the)s 3952(\207le)s 4306(cannot)s 4997(be)s 5272(opened)s 6015(and)s 6412(read,)s 6923(unless)s gsave -7565 7682 translate +7565 7847 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211ifexist)m grestore -480 7388(is)m 690(used)s +480 7553(is)m 690(used)s 1187(and)s 1591(the)s 1939(\207le)s 2300(does)s 2790(not)s 3156(e)s 3(xist,)k 3711(in)s 3954(which)s 4596(case)s 5063(the)s 5411(directi)s 6(v)k 3(e)k 6293(is)s 6503(silently)s 7260(ignored.)s gsave -120 7048 translate +120 7213 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211lookup)m gsave 2160 0 translate @@ -2857,7 +2821,7 @@ grestore gsave -120 6808 translate +120 6973 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211lookup\211all)m gsave 2736 0 translate @@ -2872,113 +2836,113 @@ grestore grestore -480 6514(Read)m 1030(the)s -1378(con\207guration)s 2711(\207le)s 3072(in)s 240 fnt83 3315 6516(dir)m 8(ectory)k -240 fnt82 4239 6514(whose)m 4907(name)s 5481(is)s 5691(the)s -6039(v)s 6(alue)k 6607(of)s 240 fnt83 6878 6516(par)m 3(ameter)k -240 fnt82 7937 6514(\(see)m 8377(the)s 480 6274(description)m 1599(of)s +480 6679(Read)m 1030(the)s +1378(con\207guration)s 2711(\207le)s 3072(in)s 240 fnt83 3315 6681(dir)m 8(ectory)k +240 fnt82 4239 6679(whose)m 4907(name)s 5481(is)s 5691(the)s +6039(v)s 6(alue)k 6607(of)s 240 fnt83 6878 6681(par)m 3(ameter)k +240 fnt82 7937 6679(\(see)m 8377(the)s 480 6439(description)m 1599(of)s gsave -1870 6328 translate +1870 6493 translate 0.6953 1.0000 scale 240 fnt31 0 -52(if)m grestore 2070(,)s 2177(`Control)s 3042(structure)s -3933(directi)s 6(v)k 3(es',)k 5038(page)s 5546(12\).)s -5969(If)s 240 fnt83 6199 6276(par)m 3(ameter)k 240 fnt82 -7258 6274(has)m 7628(se)s 6(v)k 3(eral)k 8350(v)s 6(alues)k -480 6034(the)m 3(y)k 943(will)s 1369(be)s 1651(tried)s +3933(directi)s 6(v)k 3(es',)k 5038(page)s 5546(11\).)s +5969(If)s 240 fnt83 6199 6441(par)m 3(ameter)k 240 fnt82 +7258 6439(has)m 7628(se)s 6(v)k 3(eral)k 8350(v)s 6(alues)k +480 6199(the)m 3(y)k 943(will)s 1369(be)s 1651(tried)s 2146(in)s 2389(order;)s 3005(with)s gsave -3487 6088 translate +3487 6253 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211lookup)m grestore 4948(this)s 5344(search)s 6011(will)s 6437(stop)s 6889(when)s 7465(one)s 7867(is)s 8077(found,)s 8743(b)s 4(ut)k -480 5794(with)m gsave -962 5848 translate +480 5959(with)m gsave +962 6013 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211lookup\211all)m grestore 2824(the)s 3172(search)s 3839(will)s 4265(continue)s 5145(and)s 5549(an)s 3(y)k 5946(\207les)s 6395(appropriate)s 7539(to)s 7778(other)s 8329(v)s 6(alues)k -480 5554(will)m 906(be)s 1188(read)s 1657(too.)s 480 5146(If)m -700(none)s 1212(of)s 1473(the)s 1811(parameter')s 13(s)k -2965(v)s 6(alues)k 3610(had)s 4004(a)s 4160(corresponding)s -5572(\207le)s 5923(then)s 6381(the)s 6719(\207le)s gsave -7070 5200 translate +480 5719(will)m 906(be)s 1188(read)s 1657(too.)s 2127(If)s +2357(none)s 2879(of)s 3150(the)s 3498(parameter')s 13(s)k +4662(v)s 6(alues)k 5318(had)s 5722(a)s 5888(corresponding)s +7310(\207le)s 7671(then)s 8140(the)s 8488(\207le)s gsave +480 5533 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:default)m grestore -7921(will)s 8337(be)s 8608(read,)s 480 4906(if)m -697(it)s 889(e)s 3(xists.)k 1534(If)s 240 fnt83 -1764 4908(par)m 3(ameter)k 240 fnt82 2763 4906(')m 13(s)k -2973(list)s 3324(of)s 3595(v)s 6(alues)k 4251(w)s 2(as)k -4672(empty)s 5324(then)s 5793(the)s 6141(\207le)s gsave -6502 4960 translate +1340 5479(will)m 1765(be)s 2045(read,)s 2562(if)s +2778(it)s 2968(e)s 3(xists.)k 3612(If)s 240 fnt83 +3841 5481(par)m 3(ameter)k 240 fnt82 4840 5479(')m 13(s)k +5048(list)s 5398(of)s 5668(v)s 6(alues)k 6322(w)s 2(as)k +6742(empty)s 7393(then)s 7860(the)s 8207(\207le)s gsave +8566 5533 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:none)m grestore -7062(will)s 7488(be)s 7770(tried)s 8265(\207rst)s -8696(and)s 480 4666(read)m 949(if)s 1166(it)s 1358(e)s 3(xists,)k -2006(otherwise)s gsave -2991 4720 translate +480 5239(will)m 906(be)s 1188(tried)s 1683(\207rst)s +2114(and)s 2518(read)s 2987(if)s 3204(it)s 3396(e)s 3(xists,)k +4044(otherwise)s gsave +5029 5293 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:default)m grestore -3852(will)s 4278(be)s -4560(tried.)s 480 4258(It)m 685(is)s 895(not)s 1261(an)s -1544(error)s 2067(for)s 2405(an)s 3(y)k 2802(of)s -3073(the)s 3421(\207les)s 3870(\(including)s gsave -4906 4312 translate +5890(will)s 6316(be)s +6598(tried.)s 7199(It)s 7404(is)s 7614(not)s 7980(an)s +8263(error)s 8786(for)s 480 4999(an)m 3(y)k 877(of)s +1148(the)s 1496(\207les)s 1945(\(including)s gsave +2981 5053 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:default)m grestore -5707(\))s 5835(not)s 6201(to)s 6440(e)s 3(xist,)k -6995(b)s 4(ut)k 7357(it)s 7549(is)s 7759(an)s -8042(error)s 8565(if)s 8782(a)s 480 4018(\207le)m 841(e)s 3(xists)k -1433(and)s 1837(cannot)s 2535(be)s 2817(read)s 3286(or)s -3545(if)s 3762(the)s 4110(directory)s 5026(cannot)s 5724(be)s -6006(accessed.)s 480 3610(A)m 693(translation)s 1741(will)s 2150(be)s -2415(applied)s 3160(to)s 3382(v)s 6(alues)k 4021(before)s -4670(the)s 3(y)k 5116(are)s 5446(used)s 5926(to)s -6148(construct)s 7067(a)s 7216(\207lename,)s 8129(so)s 8378(that)s -8778(the)s 480 3370(lookup)m 1195(cannot)s 1888(access)s 2545(dot\207les)s -3295(or)s 3550(\207les)s 3994(in)s 4232(other)s 4779(directories:)s -5887(v)s 6(alues)k 6539(starting)s 7303(with)s 7781(full)s -8162(stops)s 8700(will)s 480 3130(ha)m 4(v)k 3(e)k -970(a)s 1124(colon)s 1702(prepended)s 2745(\(making)s gsave -3584 3184 translate +3782(\))s 3910(not)s 4276(to)s 4515(e)s 3(xist,)k +5070(b)s 4(ut)k 5432(it)s 5624(is)s 5834(an)s +6117(error)s 6640(if)s 6857(a)s 7023(\207le)s 7384(e)s 3(xists)k +7976(and)s 8380(cannot)s 480 4759(be)m 753(read)s 1213(or)s +1462(if)s 1670(the)s 2008(directory)s 2915(cannot)s 3603(be)s +3876(accessed.)s 4867(A)s 5087(translation)s 6143(will)s 6559(be)s +6832(applied)s 7584(to)s 7814(v)s 6(alues)k 8460(before)s +480 4519(the)m 3(y)k 943(are)s 1290(used)s 1787(to)s +2026(construct)s 2962(a)s 3128(\207lename,)s 4058(so)s 4324(that)s +4742(the)s 5090(lookup)s 5809(cannot)s 6507(access)s 7168(dot\207les)s +7923(or)s 8182(\207les)s 8631(in)s 480 4279(other)m 1031(directories:)s +2144(v)s 6(alues)k 2800(starting)s 3569(with)s 4051(full)s +4437(stops)s 4980(will)s 5406(ha)s 4(v)k 3(e)k +5907(a)s 6073(colon)s 6662(prepended)s 7717(\(making)s gsave +8567 4333 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:.)m grestore -3784(\),)s 3958(colons)s 4623(will)s 5037(be)s -5308(doubled,)s 6175(and)s 6568(each)s 7051(slash)s 7575(will)s -7989(be)s 8259(replaced)s 480 2890(with)m 962(a)s 1128(colon)s -1717(follo)s 6(wed)k 2619(by)s 2913(a)s 3079(h)s 1(yphen)k +8767(\),)s 480 4039(colons)m 1156(will)s 1582(be)s +1864(doubled,)s 2743(and)s 3147(each)s 3642(slash)s 4177(will)s +4603(be)s 4885(replaced)s 5752(with)s 6234(a)s 6400(colon)s +6989(follo)s 6(wed)k 7891(by)s 8185(a)s 8351(h)s 1(yphen)k gsave -3841 2944 translate +480 3853 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:\211)m grestore -4041(.)s 4145(A)s 4375(parameter)s -5389(v)s 6(alue)k 5957(which)s 6599(is)s 6809(the)s -7157(empty)s 7809(string)s 8406(will)s 8832(be)s 480 2650(replaced)m -1347(with)s gsave -1829 2704 translate +680 3799(.)m 784(A)s 1014(parameter)s +2028(v)s 6(alue)k 2596(which)s 3238(is)s 3448(the)s +3796(empty)s 4448(string)s 5045(will)s 5471(be)s 5753(replaced)s +6620(with)s gsave +7102 3853 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:empty)m grestore -2489(\(note)s 3036(that)s -3454(this)s 3850(is)s 4060(dif)s 6(ferent)k 4935(from)s -5459(a)s 5625(parameter)s 6639(not)s 7005(ha)s 4(ving)k -7706(an)s 3(y)k 8103(v)s 6(alues\).)k gsave -120 2310 translate +7762(\(note)s 8309(that)s +8727(this)s 480 3559(is)m 690(dif)s 6(ferent)k 1565(from)s +2089(a)s 2255(parameter)s 3269(not)s 3635(ha)s 4(ving)k +4336(an)s 3(y)k 4733(v)s 6(alues\).)k gsave +120 3219 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211directory)m gsave @@ -2988,26 +2952,26 @@ grestore grestore -480 2016(Read)m +480 2925(Read)m 1030(con\207guration)s 2363(from)s 2887(all)s 3180(\207les)s 3629(in)s -3872(directory)s 240 fnt83 4788 2018(dir)m 8(ectory)k 240 fnt82 -5712 2016(which)m 6354(are)s 6701(plain)s 7236(\207les)s 7685(whose)s -8353(names)s 480 1776(consist)m 1204(only)s 1684(of)s 1955(alphanumerics)s +3872(directory)s 240 fnt83 4788 2927(dir)m 8(ectory)k 240 fnt82 +5712 2925(which)m 6354(are)s 6701(plain)s 7236(\207les)s 7685(whose)s +8353(names)s 480 2685(consist)m 1204(only)s 1684(of)s 1955(alphanumerics)s 3400(and)s 3804(h)s 1(yphens)k 4653(and)s 5057(start)s 5527(with)s 6009(an)s 6292(alphanumeric.)s 7697(The)s 3(y)k -8240(will)s 8666(be)s 480 1536(read)m 949(in)s 1192(le)s 3(xical)k +8240(will)s 8666(be)s 480 2445(read)m 949(in)s 1192(le)s 3(xical)k 1880(order)s 13(.)k 2475(It)s 2680(is)s 2890(an)s 3173(error)s 3696(for)s 4034(the)s 4382(directory)s 5298(not)s 5664(to)s 5903(e)s 3(xist)k 6411(or)s 6670(for)s 7008(it)s 7200(or)s 7459(an)s 3(y)k 7856(of)s -8127(the)s 8475(\207les)s 480 1296(found)m 1089(not)s 1447(to)s +8127(the)s 8475(\207les)s 480 2205(found)m 1089(not)s 1447(to)s 1677(be)s 1951(read)s 2411(successfully)s 15(,)k 3663(or)s 3914(for)s 4243(an)s 3(ything)k 5123(with)s 5596(an)s 5871(appropriate)s 7007(name)s 7572(not)s 7930(to)s 8160(be)s -8434(a)s 8591(plain)s 480 1056(\207le)m 841(or)s 1100(a)s +8434(a)s 8591(plain)s 480 1965(\207le)m 841(or)s 1100(a)s 1266(symbolic)s 2196(link)s 2629(to)s 2868(a)s 3034(plain)s 3569(\207le.)s gsave -120 716 translate +120 1625 translate 0.6953 1.0000 scale 240 fnt31 0 -52(error)m gsave 864 0 translate @@ -3017,8 +2981,19 @@ grestore grestore -0 52(User)m 511(service)s 1243(daemon)s 2058(and)s -2462(client)s 3052(speci\207cation)s 8652(0.62)s +480 1331(Causes)m 1209(an)s 1492(error)s 2015(whose)s +2683(message)s 3549(includes)s 4397(the)s 4745(descripti)s 6(v)k 3(e)k +5840(string)s 240 fnt83 6437 1333(te)m 4(xt)k 240 fnt82 +6781 1331(.)m 240 fnt83 6885 1333(te)m 4(xt)k 240 fnt82 +7289 1331(may)m 7755(consist)s 8479(of)s 480 1091(se)m 6(v)k 3(eral)k +1192(tok)s 2(ens)k 1855(with)s 2326(interv)s 3(ening)k +3454(whitespace.)s 4609(The)s 5026(whitespace)s 6134(will)s 6549(be)s +6820(included)s 7691(in)s 7923(the)s 8260(message)s 480 851(as)m +726(found)s 1338(in)s 1576(the)s 1919(con\207guration)s 3247(\207le:)s +3653(all)s 3941(the)s 4284(characters)s 5298(until)s 5786(the)s +6129(end)s 6528(of)s 6794(the)s 7137(line)s 7546(will)s +7967(be)s 8244(included)s 0 52(0.64.1)m 4809(User)s 5320(service)s +6052(daemon)s 6867(and)s 7271(client)s 7861(speci\207cation)s grestore grestore @@ -3026,12 +3001,12 @@ pgsave restore showpage -%%Page: 12 12 +%%Page: 11 11 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold -%%+ font Times-Italic %%+ font Courier-Bold +%%+ font Times-Italic /pgsave save def 0.0500 dup scale 10 setlinewidth %%EndPageSetup @@ -3055,57 +3030,46 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -0 LoutMargSet +1 LoutMargSet grestore -240 fnt84 0 13842(12)m 240 fnt82 480 13254(Causes)m 1209(an)s -1492(error)s 2015(whose)s 2683(message)s 3549(includes)s 4397(the)s -4745(descripti)s 6(v)k 3(e)k 5840(string)s 240 fnt83 -6437 13256(te)m 4(xt)k 240 fnt82 6781 13254(.)m 240 fnt83 -6885 13256(te)m 4(xt)k 240 fnt82 7289 13254(may)m 7755(consist)s -8479(of)s 480 13014(se)m 6(v)k 3(eral)k 1192(tok)s 2(ens)k -1855(with)s 2326(interv)s 3(ening)k 3454(whitespace.)s 4609(The)s -5026(whitespace)s 6134(will)s 6549(be)s 6820(included)s 7691(in)s -7923(the)s 8260(message)s 480 12774(as)m 726(found)s 1338(in)s -1576(the)s 1919(con\207guration)s 3247(\207le:)s 3653(all)s 3941(the)s -4284(characters)s 5298(until)s 5786(the)s 6129(end)s 6528(of)s -6794(the)s 7137(line)s 7546(will)s 7967(be)s 8244(included)s -480 12534(v)m 3(erbatim,)k 1433(unless)s 2082(the)s 3(y)k -2545(are)s 2892(part)s 3323(of)s 3594(a)s 3760(double-quoted)s -5201(string,)s 5852(in)s 6095(which)s 6737(case)s 7204(the)s -7552(usual)s 8112(meaning)s 480 12294(of)m 751(the)s 1099(string)s -1696(\(i.e.,)s 2174(after)s 2670(backslash)s 3657(escape)s 4350(processing\))s -5501(will)s 5927(be)s 6209(used.)s 6752(Comments)s 7840(and)s -8244(linear)s 480 12054(whitespace)m 1598(at)s 1830(the)s 2178(end)s -2582(of)s 2853(the)s 3201(line)s 3615(\(or)s 3953(just)s -4358(before)s 5024(the)s 5372(comment\))s 6390(will)s 6816(still)s -7228(be)s 7510(ignored.)s gsave -120 11714 translate +240 fnt84 8839 13842(11)m 240 fnt82 480 13254(v)m 3(erbatim,)k +1433(unless)s 2082(the)s 3(y)k 2545(are)s 2892(part)s +3323(of)s 3594(a)s 3760(double-quoted)s 5201(string,)s 5852(in)s +6095(which)s 6737(case)s 7204(the)s 7552(usual)s 8112(meaning)s +480 13014(of)m 751(the)s 1099(string)s 1696(\(i.e.,)s 2174(after)s +2670(backslash)s 3657(escape)s 4350(processing\))s 5501(will)s 5927(be)s +6209(used.)s 6752(Comments)s 7840(and)s 8244(linear)s 480 12774(whitespace)m +1598(at)s 1830(the)s 2178(end)s 2582(of)s 2853(the)s +3201(line)s 3615(\(or)s 3953(just)s 4358(before)s 5024(the)s +5372(comment\))s 6390(will)s 6816(still)s 7228(be)s 7510(ignored.)s +gsave +120 12434 translate 0.6953 1.0000 scale 240 fnt31 0 -52(message)m gsave 1152 0 translate 1.4219 1.0000 scale -240 fnt83 -0 -52(te)m 4(xt)k 404(\202)s +240 fnt83 0 -52(te)m 4(xt)k +404(\202)s grestore grestore -480 11420(Causes)m 1209(a)s -1375(message)s 2241(including)s 3198(the)s 3546(descripti)s 6(v)k 3(e)k -4641(string)s 240 fnt83 5238 11422(te)m 4(xt)k 240 fnt82 -5642 11420(to)m 5881(be)s 6163(deli)s 6(v)k 3(ered)k -7101(as)s 7351(if)s 7568(it)s 7760(were)s 8280(an)s -8563(error)s 480 11180(message,)m 1397(b)s 4(ut)k 1759(does)s -2249(not)s 2615(actually)s 3425(cause)s 4012(an)s 4295(error)s 13(.)k -300 fnt84 0 10513(4.2.2.)m 813(Dir)s 5(ecti)k 3(v)k 3(es)k +480 12140(Causes)m 1209(a)s 1375(message)s 2241(including)s +3198(the)s 3546(descripti)s 6(v)k 3(e)k 4641(string)s +240 fnt83 5238 12142(te)m 4(xt)k 240 fnt82 5642 12140(to)m +5881(be)s 6163(deli)s 6(v)k 3(ered)k 7101(as)s +7351(if)s 7568(it)s 7760(were)s 8280(an)s 8563(error)s +480 11900(message,)m 1397(b)s 4(ut)k 1759(does)s 2249(not)s +2615(actually)s 3425(cause)s 4012(an)s 4295(error)s 13(.)k +300 fnt84 0 11233(4.2.2.)m 813(Dir)s 5(ecti)k 3(v)k 3(es)k 2148(with)s 2781(delay)s 3(ed)k 3828(effect)s 240 fnt82 -0 9942(The)m 428(follo)s 6(wing)k 1405(directi)s 6(v)k 3(es)k +0 10662(The)m 428(follo)s 6(wing)k 1405(directi)s 6(v)k 3(es)k 2375(ha)s 4(v)k 3(e)k 2876(no)s 3169(immediate)s 4233(ef)s 6(fect,)k 4876(b)s 4(ut)k 5238(are)s 5585(remembered)s 6837(and)s 7241(ha)s 4(v)k 3(e)k -7742(an)s 8025(ef)s 6(fect)k 8621(on)s 0 9702(later)m +7742(an)s 8025(ef)s 6(fect)k 8621(on)s 0 10422(later)m 483(processing)s 1559(of)s 1830(the)s 2178(con\207guration)s 3511(\207les.)s gsave -120 9348 translate +120 10068 translate 0.6953 1.0000 scale 240 fnt31 0 -52(user\211rcfile)m gsave 1728 0 translate @@ -3114,99 +3078,99 @@ grestore grestore -480 9054(Speci\207es)m -1380(that)s 1784(the)s 2118(\207le)s 240 fnt83 2465 9056(\207lename)m -240 fnt82 3315 9054(should)m 3998(be)s 4266(read)s 4721(instead)s +480 9774(Speci\207es)m +1380(that)s 1784(the)s 2118(\207le)s 240 fnt83 2465 9776(\207lename)m +240 fnt82 3315 9774(should)m 3998(be)s 4266(read)s 4721(instead)s 5442(of)s 5699(the)s 6033(user')s 13(s)k gsave -6627 9108 translate +6627 9828 translate 0.6953 1.0000 scale 240 fnt31 0 -52(~/.userv/rc)m grestore 7728(.)s 7818(This)s 8280(does)s 240 fnt83 -8756 9056(not)m 240 fnt82 480 8814(happen)m 1229(immediately;)s 2535(instead,)s +8756 9776(not)m 240 fnt82 480 9534(happen)m 1229(immediately;)s 2535(instead,)s 3319(the)s 3667(setting)s 4357(is)s 4567(remembered)s 5819(and)s 6223(used)s 6720(after)s 7216(the)s gsave -7564 8868 translate +7564 9588 translate 0.6953 1.0000 scale 240 fnt31 0 -52(system.default)m grestore -480 8574(con\207guration)m 1812(\207le)s 2171(has)s 2539(been)s 3046(read.)s +480 9294(con\207guration)m 1812(\207le)s 2171(has)s 2539(been)s 3046(read.)s 3559(This)s 4033(directi)s 6(v)k 3(e)k 4913(has)s 5281(no)s 5572(ef)s 6(fect)k 6166(in)s 6407(a)s 6571(user')s 13(s)k 7177(con\207guration)s 8508(\207le)s 8867(or)s -480 8334(in)m 723(the)s gsave -1071 8388 translate +480 9054(in)m 723(the)s gsave +1071 9108 translate 0.6953 1.0000 scale 240 fnt31 0 -52(system.override)m grestore 2632(\207le,)s 3044(as)s 3294(the)s 3642(user')s 13(s)k 4250(con\207guration)s 5583(\207le)s 5944(has)s 6314(already)s 7071(been)s 7580(found)s -8197(and)s 8601(read)s 480 8094(by)m 774(then)s 1243(and)s +8197(and)s 8601(read)s 480 8814(by)m 774(then)s 1243(and)s 1647(will)s 2073(not)s 2439(be)s 2721(re-read.)s gsave -120 7754 translate +120 8474 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211to\211stderr)m grestore -480 7460(Causes)m 1209(error)s 1732(messages)s 2686(to)s +480 8180(Causes)m 1209(error)s 1732(messages)s 2686(to)s 2925(be)s 3207(deli)s 6(v)k 3(ered)k 4145(to)s 4384(the)s 4732(client')s 13(s)k 5472(stderr)s 13(.)k gsave -120 7120 translate +120 7840 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211to\211file)m grestore -240 fnt83 1581 7068(\207lename)m 240 fnt82 -480 6826(Error)m 1039(messages)s 1989(will)s 2410(be)s 2688(written)s -3416(to)s 240 fnt83 3651 6828(\207lename)m 240 fnt82 4455 6826(,)m +240 fnt83 1581 7788(\207lename)m 240 fnt82 +480 7546(Error)m 1039(messages)s 1989(will)s 2410(be)s 2688(written)s +3416(to)s 240 fnt83 3651 7548(\207lename)m 240 fnt82 4455 7546(,)m 4557(which)s 5195(will)s 5617(be)s 5894(opened)s 6640(in)s 6878(the)s 7222(conte)s 3(xt)k 7978(of)s 8245(and)s -8644(with)s 480 6586(the)m 828(pri)s 6(vile)k 3(ges)k +8644(with)s 480 7306(the)m 828(pri)s 6(vile)k 3(ges)k 1812(of)s 2083(the)s 2431(service)s 3163(user)s 13(.)k gsave -120 6246 translate +120 6966 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211to\211syslog)m grestore -1782 6192([)m 240 fnt83 1853 6194(facility)m -240 fnt82 2571 6192([)m 240 fnt83 2642 6194(le)m 3(vel)k -240 fnt82 3089 6192(]])m 480 5952(Error)m 1043(messages)s 1997(will)s +1782 6912([)m 240 fnt83 1853 6914(facility)m +240 fnt82 2571 6912([)m 240 fnt83 2642 6914(le)m 3(vel)k +240 fnt82 3089 6912(]])m 480 6672(Error)m 1043(messages)s 1997(will)s 2423(be)s 2705(deli)s 6(v)k 3(ered)k 3643(using)s gsave -4215 6006 translate +4215 6726 translate 0.6953 1.0000 scale 240 fnt31 0 -52(syslog)m grestore 4815(.)s 4919(The)s 5347(def)s 2(ault)k -240 fnt83 6068 5954(facility)m 240 fnt82 6786 5952(is)m gsave -6996 6006 translate +240 fnt83 6068 6674(facility)m 240 fnt82 6786 6672(is)m gsave +6996 6726 translate 0.6953 1.0000 scale 240 fnt31 0 -52(user)m grestore 7396(;)s 7508(the)s 7856(def)s 2(ault)k -240 fnt83 8577 5954(le)m 3(vel)k 240 fnt82 480 5712(is)m +240 fnt83 8577 6674(le)m 3(vel)k 240 fnt82 480 6432(is)m gsave -690 5766 translate +690 6486 translate 0.6953 1.0000 scale 240 fnt31 0 -52(error)m grestore -1190(.)s 300 fnt84 0 5095(4.2.3.)m +1190(.)s 300 fnt84 0 5815(4.2.3.)m 813(Contr)s 5(ol)k 1874(structur)s 5(e)k 3117(dir)s 5(ecti)k 3(v)k 3(es)k -240 fnt82 0 4580(The)m 421(follo)s 6(wing)k 1390(directi)s 6(v)k 3(es)k +240 fnt82 0 5300(The)m 421(follo)s 6(wing)k 1390(directi)s 6(v)k 3(es)k 2353(are)s 2692(used)s 3182(to)s 3413(create)s 4031(control)s 4755(structures.)s 5780(If)s 6002(the)s 6343(end)s 6739(of)s -7003(the)s 7343(\207le)s 7697(is)s 7899(encountered)s 0 4340(before)m +7003(the)s 7343(\207le)s 7697(is)s 7899(encountered)s 0 5060(before)m 666(the)s 1014(end)s 1418(of)s 1689(an)s 3(y)k 2086(control)s 2818(structure)s 3709(which)s 4351(w)s 2(as)k 4772(started)s 5466(inside)s 6093(it)s 6285(then)s 6754(that)s -7172(control)s 7904(structure)s 8795(is)s 0 4100(considered)m 1094(\207nished.)s +7172(control)s 7904(structure)s 8795(is)s 0 4820(considered)m 1094(\207nished.)s 1956(This)s 2432(is)s 2642(not)s 3008(an)s 3291(error)s 13(.)k gsave -120 3746 translate +120 4466 translate 0.6953 1.0000 scale 240 fnt31 0 -52(if)m gsave 432 0 translate @@ -3216,7 +3180,7 @@ grestore gsave -120 3506 translate +120 4226 translate 0.6953 1.0000 scale 240 fnt31 0 -52(elif)m gsave @@ -3227,38 +3191,38 @@ grestore gsave -120 3266 translate +120 3986 translate 0.6953 1.0000 scale 240 fnt31 0 -52(else)m grestore gsave -120 3026 translate +120 3746 translate 0.6953 1.0000 scale 240 fnt31 0 -52(fi)m grestore -480 2732(Lines)m 1062(follo)s 6(wing)k +480 3452(Lines)m 1062(follo)s 6(wing)k gsave -2039 2786 translate +2039 3506 translate 0.6953 1.0000 scale 240 fnt31 0 -52(if)m grestore 2299(are)s 2646(interpreted)s 3738(only)s 4218(if)s 4435(the)s 4783(condition)s 5744(is)s 5954(true.)s -6429(Man)s 3(y)k 7039(conditions)s 8087(are)s 480 2492(properties)m +6429(Man)s 3(y)k 7039(conditions)s 8087(are)s 480 3212(properties)m 1486(of)s 1757(parameter)s 2771(v)s 6(alues.)k 3480(Most)s 4032(parameters)s 5130(ha)s 4(v)k 3(e)k 5631(a)s 5797(single)s 6424(string)s 7021(as)s 7271(a)s 7437(v)s 6(alue;)k 8061(ho)s 6(we)k 6(v)k 3(er)k 9(,)k -480 2252(some)m 1035(may)s 1495(yield)s 2025(zero)s 2483(or)s +480 2972(some)m 1035(may)s 1495(yield)s 2025(zero)s 2483(or)s 2735(se)s 6(v)k 3(eral)k 3451(strings,)s 4189(in)s 4426(which)s 5062(case)s 5522(the)s 5864(condition)s 6819(is)s 7023(true)s 7444(if)s 7654(it)s 7840(is)s 8044(true)s -8465(of)s 8729(an)s 3(y)k 480 2012(of)m 751(the)s +8465(of)s 8729(an)s 3(y)k 480 2732(of)m 751(the)s 1099(strings)s 1787(indi)s 6(vidually)k 15(.)k 3026(P)s 3(arameters)k 4134(are)s 4481(described)s 5455(belo)s 6(w)k 15(.)k -480 1604(The)m 908(conditions)s 1956(are:)s gsave -600 1418 translate +6183(The)s 6611(conditions)s 7659(are:)s gsave +600 2545 translate 0.6953 1.0000 scale 240 fnt31 0 -52(glob)m gsave @@ -3269,65 +3233,25 @@ gsave 2284 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(glob-pattern)m +240 fnt83 0 -52(glob\211pattern)m grestore -4120(\202)s +4178(\202)s grestore -960 1124(The)m 1388(v)s 6(alue)k 1956(of)s +960 2251(The)m 1388(v)s 6(alue)k 1956(of)s 2227(the)s 2575(parameter)s 3589(whose)s 4257(name)s 4831(is)s 5041(gi)s 6(v)k 3(en)k 5621(matches)s 6455(one)s -6857(of)s 7128(the)s 7476(glob)s 7955(patterns)s 960 884(\(anchored)m +6857(of)s 7128(the)s 7476(glob)s 7955(patterns)s 960 2011(\(anchored)m 1974(at)s 2206(both)s 2689(ends;)s 3240(backslashes)s 4420(can)s 4809(be)s 5091(used)s 5588(to)s 5827(escape)s 6520(metacharacters\).)s -0 52(0.62)m 4809(User)s 5320(service)s 6052(daemon)s 6867(and)s -7271(client)s 7861(speci\207cation)s -grestore - -grestore - -pgsave restore -showpage - -%%Page: 13 13 -%%BeginPageSetup -%%PageResources: font Times-Roman -%%+ font Times-Bold -%%+ font Courier-Bold -%%+ font Times-Italic -/pgsave save def -0.0500 dup scale 10 setlinewidth -%%EndPageSetup -gsave -0 0 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic -gsave -LoutPageSet -grestore -gsave -0 16840 translate -0.0000 rotate - -grestore - -grestore -gsave -0 16840 translate -0.0000 rotate -gsave -1417 -15423 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -1 LoutMargSet -grestore -240 fnt84 8833 13842(13)m gsave -600 13310 translate +600 1825 translate 0.6953 1.0000 scale 240 fnt31 0 -52(range)m gsave 864 0 translate 1.4219 1.0000 scale -240 fnt83 -0 -52(par)m 3(ameter)k +240 fnt83 0 -52(par)m 3(ameter)k + grestore gsave 2428 0 translate @@ -3337,19 +3261,18 @@ gsave 3073 0 translate 1.4219 1.0000 scale -240 fnt83 -0 -52(max)m +240 fnt83 0 -52(max)m grestore grestore -240 fnt82 960 13016(The)m 1380(v)s 6(alue)k -1940(of)s 2203(the)s 2543(parameter)s 3548(is)s 3750(a)s -3908(nonne)s 3(g)k 1(ati)k 6(v)k 3(e)k +960 1531(The)m +1380(v)s 6(alue)k 1940(of)s 2203(the)s 2543(parameter)s +3548(is)s 3750(a)s 3908(nonne)s 3(g)k 1(ati)k 6(v)k 3(e)k 5113(inte)s 3(ger)k 5825(and)s 6220(lies)s 6594(within)s -7254(the)s 7594(range)s 8172(speci\207ed.)s 240 fnt83 960 12778(min)m -240 fnt82 1373 12776(or)m 240 fnt83 1632 12778(max)m 240 fnt82 -2091 12776(may)m 2557(be)s gsave -2839 12830 translate +7254(the)s 7594(range)s 8172(speci\207ed.)s 240 fnt83 960 1293(min)m +240 fnt82 1373 1291(or)m 240 fnt83 1632 1293(max)m 240 fnt82 +2091 1291(may)m 2557(be)s gsave +2839 1345 translate 0.6953 1.0000 scale 240 fnt31 0 -52($)m grestore @@ -3357,7 +3280,7 @@ 3238(indicate)s 4050(no)s 4343(lo)s 6(wer)k 4941(or)s 5200(upper)s 5805(limit,)s 6362(respecti)s 6(v)k 3(ely)k 15(.)k gsave -600 12589 translate +600 1104 translate 0.6953 1.0000 scale 240 fnt31 0 -52(grep)m gsave 720 0 translate @@ -3372,44 +3295,84 @@ grestore grestore -960 12295(The)m 240 fnt83 1388 12297(\207lename)m -240 fnt82 2252 12295(refers)m 2845(to)s 3084(a)s 3250(\207le)s +960 810(The)m 240 fnt83 1388 812(\207lename)m +240 fnt82 2252 810(refers)m 2845(to)s 3084(a)s 3250(\207le)s 3611(one)s 4013(of)s 4284(whose)s 4952(lines)s 5454(is)s 5664(the)s 6012(v)s 6(alue)k 6580(of)s 6851(the)s -7199(parameter)s 8213(\(leading)s 960 12055(or)m 1211(trailing)s 1944(whitespace)s -3053(on)s 3341(each)s 3827(line)s 4232(and)s 4627(empty)s -5270(lines)s 5764(in)s 5998(the)s 6337(\207le)s 6689(are)s -7027(ignored\).)s 7932(It)s 8128(is)s 8329(an)s 8603(error)s -960 11815(for)m 1298(the)s 1646(\207le)s 2007(not)s 2373(to)s -2612(be)s 2894(opened)s 3644(and)s 4048(read.)s gsave -600 11628 translate +7199(parameter)s 8213(\(leading)s 0 52(User)m 511(service)s 1243(daemon)s +2058(and)s 2462(client)s 3052(speci\207cation)s 8491(0.64.1)s +grestore + +grestore + +pgsave restore +showpage + +%%Page: 12 12 +%%BeginPageSetup +%%PageResources: font Times-Roman +%%+ font Times-Bold +%%+ font Courier-Bold +%%+ font Times-Italic +/pgsave save def +0.0500 dup scale 10 setlinewidth +%%EndPageSetup +gsave +0 0 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic +gsave +LoutPageSet +grestore +gsave +0 16840 translate +0.0000 rotate + +grestore + +grestore +gsave +0 16840 translate +0.0000 rotate +gsave +1417 -15423 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic +gsave +0 LoutMargSet +grestore +240 fnt84 0 13842(12)m 240 fnt82 960 13254(or)m 1211(trailing)s +1944(whitespace)s 3053(on)s 3341(each)s 3827(line)s 4232(and)s +4627(empty)s 5270(lines)s 5764(in)s 5998(the)s 6337(\207le)s +6689(are)s 7027(ignored\).)s 7932(It)s 8128(is)s 8329(an)s +8603(error)s 960 13014(for)m 1298(the)s 1646(\207le)s 2007(not)s +2373(to)s 2612(be)s 2894(opened)s 3644(and)s 4048(read.)s +gsave +600 12827 translate 0.6953 1.0000 scale -240 fnt31 -0 -52(!)m gsave +240 fnt31 0 -52(!)m gsave 288 0 translate 1.4219 1.0000 scale 240 fnt83 0 -52(condition)m grestore grestore -960 11334(The)m 240 fnt83 -1388 11336(condition)m 240 fnt82 2346 11334(is)m 240 fnt83 2556 11336(not)m -240 fnt82 2926 11334(true.)m 600 11094(Conjunctions:)m gsave -1983 11148 translate +960 12533(The)m +240 fnt83 1388 12535(condition)m 240 fnt82 2346 12533(is)m 240 fnt83 +2556 12535(not)m 240 fnt82 2926 12533(true.)m 600 12293(Conjunctions:)m gsave +1983 12347 translate 0.6953 1.0000 scale -240 fnt31 0 -52(&)m - +240 fnt31 +0 -52(&)m grestore 2143(and)s gsave -2547 11148 translate +2547 12347 translate 0.6953 1.0000 scale 240 fnt31 0 -52(|)m grestore gsave -1440 10901 translate +1440 11867 translate 0.6953 1.0000 scale -240 fnt31 0 -52(\()m -gsave +240 fnt31 +0 -52(\()m gsave 288 0 translate 1.4219 1.0000 scale 240 fnt83 0 -52(condition)m @@ -3417,113 +3380,113 @@ 0 -292(&)m gsave 288 -240 translate 1.4219 1.0000 scale -240 fnt83 0 -52(condition)m - +240 fnt83 +0 -52(condition)m grestore 0 -532(&)m gsave 288 -480 translate 1.4219 1.0000 scale 240 fnt83 0 -52(condition)m grestore -0 -772(\202)m 0 -1012(\))m - +0 -772(\202)m +0 -1012(\))m grestore -960 9635(is)m 1170(true)s 1597(if)s 1814(all)s 2107(the)s -2455(listed)s 3030(conditions)s 4078(are)s 4425(true;)s 4908(where)s -gsave -5548 9689 translate +960 10601(is)m 1170(true)s 1597(if)s 1814(all)s +2107(the)s 2455(listed)s 3030(conditions)s 4078(are)s 4425(true;)s +4908(where)s gsave +5548 10655 translate 0.6953 1.0000 scale 240 fnt31 0 -52(|)m grestore -5708(is)s 5918(used)s 6415(it)s -6607(is)s 6817(true)s 7244(if)s 7461(an)s 3(y)k -7858(of)s 8129(them)s 8667(is)s 960 9390(true.)m 1428(Ne)s 6(wlines)k +5708(is)s 5918(used)s +6415(it)s 6607(is)s 6817(true)s 7244(if)s 7461(an)s 3(y)k +7858(of)s 8129(them)s 8667(is)s 960 10356(true.)m 1428(Ne)s 6(wlines)k 2368(must)s 2885(be)s 3159(used)s 3648(to)s 3879(separate)s 4709(one)s 5104(condition)s 6057(from)s 6573(the)s 6913(ne)s 3(xt,)k 7421(as)s 7663(sho)s 6(wn,)k 8382(and)s 8778(the)s -960 9150(parentheses)m 2126(are)s 2473(mandatory)s 15(.)k 3585(These)s +960 10116(parentheses)m 2126(are)s 2473(mandatory)s 15(.)k 3585(These)s 4212(conjunctions)s 5486(do)s 5779(not)s 6145(do)s 6438(lazy)s -6890(e)s 6(v)k 6(aluation.)k 480 8588(The)m 908(parameters)s +6890(e)s 6(v)k 6(aluation.)k 480 9853(The)m 908(parameters)s 2006(are:)s gsave -600 8402 translate +600 9667 translate 0.6953 1.0000 scale 240 fnt31 0 -52(service)m grestore -960 8108(The)m 1388(service)s +960 9373(The)m 1388(service)s 2120(name)s 2694(speci\207ed)s 3602(when)s 4178(the)s 4526(client)s 5116(w)s 2(as)k 5537(called.)s gsave -600 7922 translate +600 9187 translate 0.6953 1.0000 scale 240 fnt31 0 -52(calling\211user)m grestore -960 7628(T)m 19(w)k 2(o)k 1431(strings:)s 2174(the)s +960 8893(T)m 19(w)k 2(o)k 1431(strings:)s 2174(the)s 2522(login)s 3071(name)s 3645(of)s 3916(the)s 4264(calling)s 4967(user)s 5425(\(determined)s 6637(as)s 6887(for)s gsave -7225 7682 translate +7225 8947 translate 0.6953 1.0000 scale 240 fnt31 0 -52(USERV_USER)m grestore 8226(,)s 8333(abo)s 3(v)k 3(e\))k -960 7388(and)m 1364(the)s 1712(calling)s 2415(uid)s 2779(\(represented)s +960 8653(and)m 1364(the)s 1712(calling)s 2415(uid)s 2779(\(represented)s 4017(in)s 4260(decimal\).)s gsave -600 7202 translate +600 8467 translate 0.6953 1.0000 scale 240 fnt31 0 -52(calling\211group)m grestore -960 6908(Se)m 6(v)k 3(eral)k +960 8173(Se)m 6(v)k 3(eral)k 1722(strings:)s 2465(the)s 2813(primary)s 3623(and)s 4027(supplementary)s 5489(group)s 6101(names)s 6763(and)s 7167(gids)s 7617(\(in)s -7939(decimal\))s 960 6668(of)m 1231(the)s 1579(calling)s 2282(process.)s +7939(decimal\))s 960 7933(of)m 1231(the)s 1579(calling)s 2282(process.)s 3103(All)s 3463(the)s 3811(group)s 4423(names)s 5085(come)s 5659(\207rst,)s 6137(and)s 6541(then)s 7010(the)s 7358(gids.)s -7861(If)s 8091(the)s 8439(\207rst)s 960 6428(supplementary)m 2422(group)s +7861(If)s 8091(the)s 8439(\207rst)s 960 7693(supplementary)m 2422(group)s 3034(is)s 3244(the)s 3592(same)s 4139(as)s 4389(the)s 4737(primary)s 5547(group)s 6159(then)s 6628(it)s 6820(is)s 7030(elided.)s gsave -600 6242 translate +600 7507 translate 0.6953 1.0000 scale 240 fnt31 0 -52(calling\211user\211shell)m grestore -960 5948(The)m 1388(calling)s +960 7213(The)m 1388(calling)s 2091(user')s 13(s)k 2699(shell,)s 3257(as)s 3507(listed)s 4082(in)s 4325(the)s 4673(passw)s 2(ord)k 5633(entry)s 6178(for)s 6516(the)s 6864(calling)s 7567(login)s 8116(name)s -8690(\(as)s 960 5708(determined)m 2093(for)s gsave -2431 5762 translate +8690(\(as)s 960 6973(determined)m 2093(for)s gsave +2431 7027 translate 0.6953 1.0000 scale 240 fnt31 0 -52(USERV_USER)m grestore 3432(,)s 3539(abo)s 3(v)k 3(e\).)k gsave -600 5522 translate +600 6787 translate 0.6953 1.0000 scale 240 fnt31 0 -52(service\211user)m grestore -960 5228(T)m 19(w)k 2(o)k 1431(strings:)s +960 6493(T)m 19(w)k 2(o)k 1431(strings:)s 2174(the)s 2522(name)s 3096(of)s 3367(the)s 3715(service)s 4447(user)s 4905(\(as)s 5234(speci\207ed)s 6142(to)s 6381(the)s -6729(client\))s 7387(and)s 7791(their)s 8288(uid)s 960 4988(\(represented)m +6729(client\))s 7387(and)s 7791(their)s 8288(uid)s 960 6253(\(represented)m 2198(in)s 2441(decimal\).)s gsave -600 4802 translate +600 6067 translate 0.6953 1.0000 scale 240 fnt31 0 -52(service\211group)m grestore -960 4508(Se)m 6(v)k 3(eral)k +960 5773(Se)m 6(v)k 3(eral)k 1722(strings:)s 2465(the)s 2813(primary)s 3623(and)s 4027(supplementary)s 5489(group)s 6101(names)s 6763(and)s 7167(gids)s 7617(\(in)s -7939(decimal\))s 8823(of)s 960 4268(the)m 1308(service)s 2040(user)s 13(.)k +7939(decimal\))s 8823(of)s 960 5533(the)m 1308(service)s 2040(user)s 13(.)k gsave -600 4082 translate +600 5347 translate 0.6953 1.0000 scale 240 fnt31 0 -52(service\211user\211shell)m grestore -960 3788(The)m 1388(service)s 2120(user')s 13(s)k +960 5053(The)m 1388(service)s 2120(user')s 13(s)k 2728(shell,)s 3286(as)s 3536(listed)s 4111(in)s 4354(their)s 4851(passw)s 2(ord)k 5811(entry)s 15(.)k gsave -600 3602 translate +600 4867 translate 0.6953 1.0000 scale 240 fnt31 0 -52(u\211)m gsave @@ -3533,240 +3496,239 @@ grestore grestore -960 3308(The)m 1388(v)s 6(alue)k +960 4573(The)m 1388(v)s 6(alue)k 1956(of)s 2227(the)s 2575(user)s 4(-de\207ned)k 3811(v)s 6(ariable)k -240 fnt83 4630 3310(name)m 240 fnt82 5202 3308(passed)m 5898(by)s +240 fnt83 4630 4575(name)m 240 fnt82 5202 4573(passed)m 5898(by)s 6192(the)s 6540(caller)s 7129(using)s 7701(the)s gsave -8049 3362 translate +8049 4627 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211defvar)m grestore -960 3068(command-line)m 2397(option)s 3066(to)s 3305(the)s +960 4333(command-line)m 2397(option)s 3066(to)s 3305(the)s 3653(client.)s 4287(If)s 4517(the)s 4865(v)s 6(ariable)k 5684(w)s 2(as)k 6105(not)s 6471(de\207ned)s 7234(then)s -7703(this)s 8099(parameter)s 960 2828(is)m 1170(an)s 1453(empty)s +7703(this)s 8099(parameter)s 960 4093(is)m 1170(an)s 1453(empty)s 2105(list)s 2456(of)s 2727(strings;)s 3476(in)s 3719(this)s 4115(case)s 4582(an)s 3(y)k 4979(condition)s 5940(which)s 6582(tests)s 7057(it)s 7249(will)s 7675(be)s 7957(f)s 2(alse,)k 8512(and)s gsave -960 2642 translate +960 3907 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211lookup)m grestore -2421 2588(on)m 2718(it)s +2421 3853(on)m 2718(it)s 2910(will)s 3336(read)s 3805(the)s gsave -4153 2642 translate +4153 3907 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:none)m grestore 4713(\207le,)s 5125(or)s gsave -5384 2642 translate +5384 3907 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:default)m grestore 6245(if)s gsave -6462 2642 translate +6462 3907 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:none)m grestore 7022(is)s 7232(not)s 7598(found.)s gsave -120 2219 translate +120 3484 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211push)m grestore -240 fnt83 1281 2167(\207lename)m gsave -120 1979 translate +240 fnt83 1281 3432(\207lename)m gsave +120 3244 translate 0.6953 1.0000 scale 240 fnt31 0 -52(srorre)m grestore -240 fnt82 480 1685(Stacks)m 1155(the)s 1503(error)s +240 fnt82 480 2950(Stacks)m 1155(the)s 1503(error)s 2026(handling)s 2917(beha)s 4(viour)k 3930(currently)s 4846(in)s 5089(ef)s 6(fect.)k 5729(An)s 3(y)k 6193(changes)s -7015(to)s 7254(error)s 7777(handling)s 8668(will)s 480 1445(tak)m 2(e)k +7015(to)s 7254(error)s 7777(handling)s 8668(will)s 480 2710(tak)m 2(e)k 932(ef)s 6(fect)k 1528(only)s 2008(between)s gsave -2862 1499 translate +2862 2764 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211push)m grestore 4023(and)s gsave -4427 1499 translate +4427 2764 translate 0.6953 1.0000 scale 240 fnt31 0 -52(srorre)m grestore 5027(.)s gsave -120 1105 translate +120 2370 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore gsave -120 865 translate +120 2130 translate 0.6953 1.0000 scale 240 fnt31 0 -52(hctac)m grestore -0 52(User)m -511(service)s 1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s -8652(0.62)s -grestore - -grestore - -pgsave restore -showpage - -%%Page: 14 14 -%%BeginPageSetup -%%PageResources: font Times-Roman -%%+ font Times-Bold -%%+ font Courier-Bold -%%+ font Times-Italic -/pgsave save def -0.0500 dup scale 10 setlinewidth -%%EndPageSetup -gsave -0 0 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic -gsave -LoutPageSet -grestore -gsave -0 16840 translate -0.0000 rotate - -grestore - -grestore -gsave -0 16840 translate -0.0000 rotate -gsave -1417 -15423 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic -gsave -0 LoutMargSet -grestore -240 fnt84 0 13842(14)m 240 fnt82 480 13254(An)m 3(y)k +480 1836(An)m 3(y)k 935(use)s 1301(of)s gsave -1563 13308 translate +1563 1890 translate 0.6953 1.0000 scale 240 fnt31 0 -52(quit)m grestore 2013(inside)s gsave -2631 13308 translate +2631 1890 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore 3683(will)s 4100(merely)s 4807(cause)s 5385(the)s 5724(parsing)s 6472(to)s 6701(continue)s 7572(at)s gsave -7795 13308 translate +7795 1890 translate 0.6953 1.0000 scale 240 fnt31 0 -52(hctac)m grestore -8345(instead.)s 480 13014(An)m 3(y)k +8345(instead.)s 480 1596(An)m 3(y)k 944(control)s 1676(constructs)s 2696(started)s 3390(since)s 3937(the)s gsave -4285 13068 translate +4285 1650 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore 5346(will)s 5772(be)s 6054(considered)s 7148(\207nished)s 7964(if)s 8181(a)s gsave -8347 13068 translate +8347 1650 translate 0.6953 1.0000 scale 240 fnt31 0 -52(quit)m grestore -480 12774(is)m 690(found.)s 480 12366(If)m 710(an)s 993(error)s -1516(occurs)s 2191(inside)s gsave -2818 12420 translate +8807(is)s 480 1356(found.)m 1203(If)s 1433(an)s 1716(error)s +2239(occurs)s 2914(inside)s gsave +3541 1410 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore -3879(the)s -4227(e)s 3(x)k 3(ecution)k 5208(settings)s 5989(will)s -6415(be)s 6697(reset)s 7207(\(as)s 7536(if)s 7753(by)s -8047(the)s gsave -8395 12420 translate +4602(the)s +4950(e)s 3(x)k 3(ecution)k 5931(settings)s 6712(will)s +7138(be)s 7420(reset)s 7930(\(as)s 8259(if)s 8476(by)s +8770(the)s gsave +480 1170 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reset)m grestore -480 12126(directi)m 6(v)k 3(e\))k -1434(and)s 1838(parsing)s 2595(will)s 3021(lik)s 2(e)k 6(wise)k -3865(continue)s 4745(at)s gsave -4977 12180 translate +1040 1116(directi)m 6(v)k 3(e\))k +1994(and)s 2398(parsing)s 3155(will)s 3581(lik)s 2(e)k 6(wise)k +4425(continue)s 5305(at)s gsave +5537 1170 translate 0.6953 1.0000 scale 240 fnt31 0 -52(hctac)m grestore -5477(.)s -480 11718(If)m 705(a)s 865(le)s 3(xical)k 1548(or)s -1801(syntax)s 2476(error)s 2993(is)s 3198(detected)s 4046(in)s -4283(the)s 4626(same)s 5167(con\207guration)s 6495(\207le)s 6850(as)s -7095(the)s gsave -7437 11772 translate +6037(.)s +6201(If)s 6431(a)s 6597(le)s 3(xical)k 7285(or)s +7544(syntax)s 8224(error)s 8747(is)s 480 876(detected)m 1334(in)s +1577(the)s 1925(same)s 2472(con\207guration)s 3805(\207le)s 4166(as)s +4416(the)s gsave +4764 930 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore -8438(,)s 8539(while)s -480 11478(looking)m 1265(for)s 1603(the)s gsave -1951 11532 translate +5765(,)s 5872(while)s +6459(looking)s 7244(for)s 7582(the)s gsave +7930 930 translate 0.6953 1.0000 scale 240 fnt31 0 -52(hctac)m grestore -2511(after)s 3007(an)s 3290(error)s 3813(or)s gsave -4072 11532 translate +8490(after)s 0 52(0.64.1)m 4809(User)s 5320(service)s 6052(daemon)s +6867(and)s 7271(client)s 7861(speci\207cation)s +grestore + +grestore + +pgsave restore +showpage + +%%Page: 13 13 +%%BeginPageSetup +%%PageResources: font Times-Roman +%%+ font Times-Bold +%%+ font Courier-Bold +%%+ font Times-Italic +/pgsave save def +0.0500 dup scale 10 setlinewidth +%%EndPageSetup +gsave +0 0 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic +gsave +LoutPageSet +grestore +gsave +0 16840 translate +0.0000 rotate + +grestore + +grestore +gsave +0 16840 translate +0.0000 rotate +gsave +1417 -15423 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic +gsave +1 LoutMargSet +grestore +240 fnt84 8833 13842(13)m 240 fnt82 480 13251(an)m 763(error)s +1286(or)s gsave +1545 13305 translate 0.6953 1.0000 scale -240 fnt31 -0 -52(quit)m +240 fnt31 0 -52(quit)m grestore -4472(,)s 4579(that)s 4997(ne)s 6(w)k -5444(error)s 5967(will)s 6393(not)s 6759(be)s 7041(caught.)s -300 fnt84 0 10811(4.2.4.)m 813(Dir)s 5(ecti)k 3(v)k 3(es)k +1945(,)s 2052(that)s +2470(ne)s 6(w)k 2917(error)s 3440(will)s 3866(not)s +4232(be)s 4514(caught.)s 300 fnt84 0 12584(4.2.4.)m 813(Dir)s 5(ecti)k 3(v)k 3(es)k 2148(f)s 7(or)k 2595(changing)s 3829(execution)s 5112(settings)s -240 fnt82 0 10240(The)m 419(follo)s 6(wing)k 1386(directi)s 6(v)k 3(es)k +240 fnt82 0 12013(The)m 419(follo)s 6(wing)k 1386(directi)s 6(v)k 3(es)k 2346(modify)s 3082(the)s 3420(e)s 3(x)k 3(ecution)k 4391(settings;)s 5223(the)s 5562(serv)s 3(er)k 6192(will)s 6608(remember)s 7627(the)s 7965(f)s 2(act)k 8370(that)s -8778(the)s 0 9999(directi)m 6(v)k 3(e)k 881(w)s 2(as)k +8778(the)s 0 11772(directi)m 6(v)k 3(e)k 881(w)s 2(as)k 1300(encountered)s 2525(and)s 2927(act)s 3263(on)s 3559(it)s 3749(only)s 4227(after)s 4721(all)s 5012(the)s 5359(con\207guration)s 6690(has)s 7058(been)s 7565(parsed.)s 8291(The)s 240 fnt83 -8717 10001(last)m 240 fnt82 0 9759(directi)m 6(v)k 3(e)k +8717 11774(last)m 240 fnt82 0 11532(directi)m 6(v)k 3(e)k 882(which)s 1524(modi\207es)s 2399(an)s 3(y)k 2796(particuar)s 3704(setting)s 4394(will)s 4820(tak)s 2(e)k 5272(ef)s 6(fect.)k gsave -120 9405 translate +120 11178 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reject)m grestore -480 9111(Reject)m 1150(the)s 1498(request.)s +480 10884(Reject)m 1150(the)s 1498(request.)s gsave -2292 9165 translate +2292 10938 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute)m grestore 2992(,)s gsave -3099 9165 translate +3099 10938 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211directory)m grestore 5361(and)s gsave -5765 9165 translate +5765 10938 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211path)m grestore 7527(will)s 7953(change)s -480 8871(this)m 876(setting.)s gsave -120 8531 translate +480 10644(this)m 876(setting.)s gsave +120 10304 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute)m gsave 1152 0 translate @@ -3782,13 +3744,13 @@ grestore 4048(\202])s grestore -480 8237(Ex)m 3(ecute)k -1300(the)s 1645(program)s 240 fnt83 2512 8239(pr)m 10(o)k 2(gr)k 3(am)k -240 fnt82 3332 8237(,)m 3436(with)s 3915(the)s 4259(ar)s 4(guments)k +480 10010(Ex)m 3(ecute)k +1300(the)s 1645(program)s 240 fnt83 2512 10012(pr)m 10(o)k 2(gr)k 3(am)k +240 fnt82 3332 10010(,)m 3436(with)s 3915(the)s 4259(ar)s 4(guments)k 5299(as)s 5546(speci\207ed,)s 6500(follo)s 6(wed)k 7399(by)s -7690(an)s 3(y)k 8083(ar)s 4(guments)k 480 7997(gi)m 6(v)k 3(en)k +7690(an)s 3(y)k 8083(ar)s 4(guments)k 480 9770(gi)m 6(v)k 3(en)k 1052(to)s 1282(the)s 1621(client)s 2203(if)s gsave -2411 8051 translate +2411 9824 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211suppress\211args)m @@ -3796,15 +3758,15 @@ 4064(is)s 4266(in)s 4500(ef)s 6(fect.)k 5131(It)s 5328(is)s 5529(an)s 5803(error)s 6318(for)s 6647(the)s 6986(e)s 3(x)k 3(ecution)k 7959(to)s -8189(f)s 2(ail)k 8550(when)s 480 7757(it)m 672(is)s +8189(f)s 2(ail)k 8550(when)s 480 9530(it)m 672(is)s 882(attempted)s 1882(\(after)s 2457(all)s 2750(the)s 3098(con\207guration)s 4431(has)s 4801(been)s 5310(parsed\).)s 6117(If)s 240 fnt83 -6347 7759(pr)m 10(o)k 2(gr)k 3(am)k 240 fnt82 -7227 7757(does)m 7717(not)s 8083(contain)s 8844(a)s 480 7517(slash)m +6347 9532(pr)m 10(o)k 2(gr)k 3(am)k 240 fnt82 +7227 9530(does)m 7717(not)s 8083(contain)s 8844(a)s 480 9290(slash)m 1015(it)s 1207(will)s 1633(be)s 1915(searched)s 2809(for)s 3147(on)s 3444(the)s 3792(service)s 4524(user')s 13(s)k 5132(path.)s gsave -120 7177 translate +120 8950 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211directory)m gsave 3312 0 translate @@ -3820,117 +3782,172 @@ 6376(\202])s grestore -480 6883(T)m 19(ak)k 2(e)k 993(all)s 1286(the)s +480 8656(T)m 19(ak)k 2(e)k 993(all)s 1286(the)s 1634(characters)s 2652(after)s 3148(the)s 3496(last)s 3887(slash)s 4422(of)s 4693(the)s 5041(service)s 5773(name)s 6347(speci\207ed)s -7255(when)s 7831(the)s 8179(client)s 480 6642(w)m 2(as)k +7255(when)s 7831(the)s 8179(client)s 480 8415(w)m 2(as)k 901(called,)s 1578(and)s 1982(e)s 3(x)k 3(ecute)k 2762(that)s 3180(program)s 4050(in)s 4293(the)s 4641(directory)s -5557(named)s 6253(by)s 240 fnt83 6547 6644(pathname)m 240 fnt82 -7545 6642(as)m 7795(if)s 8012(it)s 8204(had)s 8608(been)s -480 6402(speci\207ed)m 1388(for)s 240 fnt83 1726 6404(e)m 4(xecute)k -240 fnt82 2431 6402(.)m 2535(The)s 2963(part)s 3394(of)s +5557(named)s 6253(by)s 240 fnt83 6547 8417(pathname)m 240 fnt82 +7545 8415(as)m 7795(if)s 8012(it)s 8204(had)s 8608(been)s +480 8175(speci\207ed)m 1388(for)s 240 fnt83 1726 8177(e)m 4(xecute)k +240 fnt82 2431 8175(.)m 2535(The)s 2963(part)s 3394(of)s 3665(the)s 4013(service)s 4745(name)s 5319(used)s 5816(may)s -6282(contain)s 7043(only)s 7523(alphanumerics)s 480 6162(and)m 884(h)s 1(yphens)k +6282(contain)s 7043(only)s 7523(alphanumerics)s 480 7935(and)m 884(h)s 1(yphens)k 1732(and)s 2136(must)s 2660(start)s 3130(with)s 3611(an)s 3894(alphanumeric)s 5247(\(and)s 5730(it)s 5921(must)s 6446(be)s -6727(non-empty\),)s 7950(otherwise)s 8934(it)s 480 5922(is)m 690(an)s -973(error)s 13(.)k 480 5514(This)m 956(directi)s 6(v)k 3(e)k -1838(is)s 2048(ignored)s 2837(if)s 3054(the)s 3402(rele)s 6(v)k 6(ant)k -4219(program)s 5089(does)s 5579(not)s 5945(e)s 3(xist)k -6453(in)s 6696(the)s 7044(directory)s 7960(speci\207ed;)s 480 5274(in)m -723(this)s 1119(case)s 1586(the)s 1934(program)s 2804(to)s -3043(e)s 3(x)k 3(ecute)k 3823(is)s 4033(left)s -4410(at)s 4642(its)s 4918(pre)s 6(vious)k 5787(setting)s -6477(\(or)s 6815(unset,)s 7427(if)s 7644(it)s 7836(w)s 2(as)k -8257(not)s 480 5034(set)m 805(before\).)s 480 4626(It)m 672(is)s -869(an)s 1139(error)s 1649(for)s 1974(the)s 2309(test)s -2687(for)s 3012(the)s 3347(e)s 3(xistence)k 4276(of)s -4533(the)s 4868(program)s 5725(to)s 5951(f)s 2(ail)k -6308(other)s 6846(than)s 7302(with)s 7771(a)s 7924(`no)s -8283(such)s 8765(\207le)s 480 4386(or)m 729(directory')s 1693(indication.)s -2743(It)s 2938(is)s 3138(also)s 3566(an)s 3839(error)s -4352(for)s 4680(the)s 5018(e)s 3(x)k 3(ecution)k -5989(to)s 6218(f)s 2(ail)k 6578(if)s 6785(and)s -7179(when)s 7745(it)s 7927(is)s 8126(attempted)s 480 4146(\(after)m -1055(all)s 1348(the)s 1696(con\207guration)s 3029(has)s 3399(been)s -3908(parsed\).)s gsave -120 3806 translate +6727(non-empty\),)s 7950(otherwise)s 8934(it)s 480 7695(is)m 690(an)s +973(error)s 13(.)k 1587(This)s 2063(directi)s 6(v)k 3(e)k +2945(is)s 3155(ignored)s 3944(if)s 4161(the)s 4509(rele)s 6(v)k 6(ant)k +5326(program)s 6196(does)s 6686(not)s 7052(e)s 3(xist)k +7560(in)s 7803(the)s 8151(directory)s 480 7455(speci\207ed;)m 1437(in)s +1675(this)s 2066(case)s 2528(the)s 2871(program)s 3735(to)s +3969(e)s 3(x)k 3(ecute)k 4744(is)s 4949(left)s +5321(at)s 5548(its)s 5818(pre)s 6(vious)k 6682(setting)s +7367(\(or)s 7700(unset,)s 8307(if)s 8519(it)s 8705(w)s 2(as)k +480 7215(not)m 846(set)s 1171(before\).)s 2024(It)s 2229(is)s +2439(an)s 2722(error)s 3245(for)s 3583(the)s 3931(test)s +4322(for)s 4660(the)s 5008(e)s 3(xistence)k 5950(of)s +6221(the)s 6569(program)s 7439(to)s 7678(f)s 2(ail)k +8048(other)s 8599(than)s 480 6975(with)m 958(a)s 1120(`no)s +1488(such)s 1980(\207le)s 2336(or)s 2591(directory')s 3561(indication.)s +4617(It)s 4818(is)s 5023(also)s 5457(an)s 5736(error)s +6255(for)s 6589(the)s 6932(e)s 3(x)k 3(ecution)k +7909(to)s 8144(f)s 2(ail)k 8510(if)s 8722(and)s +480 6735(when)m 1056(it)s 1248(is)s 1458(attempted)s 2458(\(after)s +3033(all)s 3326(the)s 3674(con\207guration)s 5007(has)s 5377(been)s +5886(parsed\).)s gsave +120 6395 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211path)m grestore -240 fnt83 480 3514(service)m -240 fnt82 1202 3512(is)m 1404(interpreted)s 2488(as)s 2731(a)s +240 fnt83 480 6103(service)m +240 fnt82 1202 6101(is)m 1404(interpreted)s 2488(as)s 2731(a)s 2889(program)s 3751(on)s 4041(the)s 4381(def)s 2(ault)k gsave -5094 3566 translate +5094 6155 translate 0.6953 1.0000 scale 240 fnt31 0 -52(PATH)m grestore 5546(\(or)s 5877(as)s 6119(a)s 6277(pathname)s 7256(of)s 7519(an)s 7794(e)s 3(x)k 3(ecutable,)k -8909(if)s 480 3271(it)m 660(contains)s 1495(a)s gsave -1649 3325 translate +8909(if)s 480 5860(it)m 660(contains)s 1495(a)s gsave +1649 5914 translate 0.6953 1.0000 scale 240 fnt31 0 -52(/)m grestore 1749(\).)s 1919(This)s 2383(directi)s 6(v)k 3(e)k -3252(is)s 240 fnt83 3450 3273(very)m 3904(dang)s 2(er)k 10(ous)k -240 fnt82 4899 3271(,)m 4994(and)s 5385(is)s 5583(only)s +3252(is)s 240 fnt83 3450 5862(very)m 3904(dang)s 2(er)k 10(ous)k +240 fnt82 4899 5860(,)m 4994(and)s 5385(is)s 5583(only)s 6050(pro)s 3(vided)k 6944(to)s 7170(mak)s 2(e)k 7730(the)s gsave -8065 3325 translate +8065 5914 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211override)m grestore -480 3031(options)m 1230(ef)s 6(fecti)k 6(v)k 3(e.)k +480 5620(options)m 1230(ef)s 6(fecti)k 6(v)k 3(e.)k 2146(It)s 2344(should)s 3034(not)s 3393(normally)s 4304(be)s 4579(used.)s 5115(It)s 5313(is)s 5516(an)s 5792(error)s 6309(for)s 6640(the)s 6981(e)s 3(x)k 3(ecution)k -7955(to)s 8187(f)s 2(ail)k 8550(when)s 480 2791(it)m +7955(to)s 8187(f)s 2(ail)k 8550(when)s 480 5380(it)m 672(is)s 882(attempted)s 1882(\(after)s 2457(all)s 2750(the)s 3098(con\207guration)s 4431(has)s 4801(been)s 5310(parsed\).)s gsave -120 2451 translate +120 5040 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211builtin)m gsave 2304 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(service-name)m +240 fnt83 0 -52(service\211name)m grestore gsave -4249 0 translate +4307 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(service-ar)m 8(guments)k +240 fnt83 0 -52(service\211ar)m 8(guments)k grestore grestore -480 2157(Ex)m 3(ecutes)k 1388(the)s 1732(b)s 4(uiltin)k -2405(service)s 240 fnt83 3133 2159(service-name)m 240 fnt82 4400 2157(.)m +480 4746(Ex)m 3(ecutes)k 1388(the)s 1732(b)s 4(uiltin)k +2405(service)s 240 fnt83 3133 4748(service-name)m 240 fnt82 4400 4746(.)m 4500(These)s 5123(b)s 4(uiltin)k 5796(services)s 6612(display)s -7353(information)s 8534(about)s 480 1917(the)m 822(serv)s 3(er)k +7353(information)s 8534(about)s 480 4506(the)m 822(serv)s 3(er)k 1455(and/or)s 2120(the)s 2461(request,)s 3252(and)s 3649(ignore)s 4310(an)s 3(y)k 4700(ar)s 4(guments)k 5737(passed)s 6426(from)s 6944(the)s 7285(service)s 8011(side)s 8445(e)s 3(xcept)k -480 1677(possibly)m 1320(to)s 1547(print)s 2046(them)s 2572(as)s +480 4266(possibly)m 1320(to)s 1547(print)s 2046(them)s 2572(as)s 2810(part)s 3228(of)s 3487(their)s 3972(output.)s 4676(The)s 3(y)k 5207(write)s 5740(their)s 6225(results)s 6887(to)s 7114(their)s -7599(standard)s 8454(output)s 480 1437(\(i.e.,)m 958(where)s 6(v)k 3(er)k +7599(standard)s 8454(output)s 480 4026(\(i.e.,)m 958(where)s 6(v)k 3(er)k 1898(\207le)s 2259(descriptor)s 3274(1)s 3429(is)s 3639(directed\).)s 4591(The)s 5019(b)s 4(uiltin)k 5696(services)s 6516(are:)s gsave -600 1251 translate +600 3840 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute)m grestore -960 957(Displays)m 1848(the)s 2196(e)s 3(x)k 3(ecution)k +960 3546(Displays)m 1848(the)s 2196(e)s 3(x)k 3(ecution)k 3177(settings,)s 4014(de\207ned)s 4777(v)s 6(ariables,)k 5740(ar)s 4(guments,)k -6839(etc.)s 7221(with)s 7703(which)s 8345(the)s 960 717(b)m 4(uiltin)k +6839(etc.)s 7221(with)s 7703(which)s 8345(the)s 960 3306(b)m 4(uiltin)k 1637(service)s 2369(w)s 2(as)k 2790(in)s 9(v)k 4(ok)k 2(ed.)k -0 52(0.62)m 4809(User)s 5320(service)s 6052(daemon)s 6867(and)s -7271(client)s 7861(speci\207cation)s +gsave +600 3120 translate +0.6953 1.0000 scale +240 fnt31 0 -52(environment)m +grestore +960 2826(Dis)m 1283(plays)s 1839(the)s +2187(en)s 2410(vi)s 2590(ron)s 2906(ment)s 3444(v)s 6(ari)k +3803(able)s 4257(set)s 4522(tings)s 5038(with)s 5520(which)s +6162(the)s 6510(b)s 4(uiltin)k 7187(ser)s 7465(vice)s +7919(w)s 2(as)k 960 2586(in)m 1143(v)s 4(ok)k 2(ed.)k +gsave +600 2400 translate +0.6953 1.0000 scale +240 fnt31 0 -52(parameter)m gsave +1440 0 translate +1.4219 1.0000 scale +240 fnt83 0 -52(par)m 3(ameter)k + +grestore + +grestore +960 2106(Displays)m 1848(the)s 2196(v)s 6(alues)k 2852(of)s +3123(the)s 3471(service)s 4203(con\207guration)s 5536(language)s 6456(parameter)s +7470(speci\207ed.)s gsave +600 1920 translate +0.6953 1.0000 scale +240 fnt31 0 -52(version)m +grestore +960 1626(Displays)m 1848(the)s +2196(v)s 3(ersion)k 2954(string)s 3551(and)s 3955(compilation)s +5154(details)s 5828(of)s 6099(the)s 6447(uservd)s 7143(serv)s 3(er)k +7783(program.)s gsave +600 1440 translate +0.6953 1.0000 scale +240 fnt31 0 -52(reset)m +grestore +960 1146(Dis)m 1283(plays)s +1838(the)s 2184(de)s 2406(f)s 2(ault)k 2899(re)s +3080(set)s 3403(con)s 3746(\207g)s 3992(u)s 4107(ra)s +4292(tion)s 4719(\(e)s 6(v)k 6(al)k 5179(u)s +5294(at)s 5466(ed)s 5748(when)s gsave +6323 1200 translate +0.6953 1.0000 scale +240 fnt31 0 -52(reset)m + +grestore +6881(is)s 7089(found)s 7704(in)s 7945(a)s 8109(con)s +8452(\207g)s 8698(u)s 8813(ra)s 8998(-)s 960 906(tion)m +1389(\207le,)s 1801(or)s 2060(when)s 2636(an)s 2919(er)s +3104(ror)s 3442(is)s 3652(caught)s 4350(by)s gsave +4644 960 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(catch\211quit)m +grestore +5645(\).)s 0 52(User)m 511(service)s 1243(daemon)s +2058(and)s 2462(client)s 3052(speci\207cation)s 8491(0.64.1)s grestore grestore @@ -3938,7 +3955,7 @@ pgsave restore showpage -%%Page: 15 15 +%%Page: 14 14 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -3955,450 +3972,364 @@ grestore gsave 0 16840 translate -0.0000 rotate - -grestore - -grestore -gsave -0 16840 translate -0.0000 rotate -gsave -1417 -15423 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic -gsave -1 LoutMargSet -grestore -240 fnt84 8833 13842(15)m gsave -600 13310 translate -0.6953 1.0000 scale -240 fnt31 0 -52(environment)m -grestore -240 fnt82 -960 13016(Dis)m 1283(plays)s 1839(the)s 2187(en)s 2410(vi)s -2590(ron)s 2906(ment)s 3444(v)s 6(ari)k 3803(able)s -4257(set)s 4522(tings)s 5038(with)s 5520(which)s 6162(the)s -6510(b)s 4(uiltin)k 7187(ser)s 7465(vice)s 7919(w)s 2(as)k -960 12776(in)m 1143(v)s 4(ok)k 2(ed.)k gsave -600 12590 translate -0.6953 1.0000 scale -240 fnt31 -0 -52(parameter)m gsave -1440 0 translate -1.4219 1.0000 scale -240 fnt83 0 -52(par)m 3(ameter)k -grestore - -grestore -960 12296(Displays)m -1848(the)s 2196(v)s 6(alues)k 2852(of)s 3123(the)s -3471(service)s 4203(con\207guration)s 5536(language)s 6456(parameter)s 7470(speci\207ed.)s -gsave -600 12110 translate -0.6953 1.0000 scale -240 fnt31 0 -52(version)m -grestore -960 11816(Displays)m 1848(the)s 2196(v)s 3(ersion)k -2954(string)s 3551(and)s 3955(compilation)s 5154(details)s 5828(of)s -6099(the)s 6447(uservd)s 7143(serv)s 3(er)k 7783(program.)s -gsave -600 11630 translate -0.6953 1.0000 scale -240 fnt31 0 -52(reset)m -grestore -960 11336(Dis)m 1283(plays)s 1838(the)s -2184(de)s 2406(f)s 2(ault)k 2899(re)s 3080(set)s -3403(con)s 3746(\207g)s 3992(u)s 4107(ra)s 4292(tion)s -4719(\(e)s 6(v)k 6(al)k 5179(u)s 5294(at)s -5466(ed)s 5748(when)s gsave -6323 11390 translate -0.6953 1.0000 scale -240 fnt31 0 -52(reset)m +0.0000 rotate + grestore -6881(is)s -7089(found)s 7704(in)s 7945(a)s 8109(con)s 8452(\207g)s -8698(u)s 8813(ra)s 8998(-)s 960 11096(tion)m 1389(\207le,)s -1801(or)s 2060(when)s 2636(an)s 2919(er)s 3104(ror)s -3442(is)s 3652(caught)s 4350(by)s gsave -4644 11150 translate -0.6953 1.0000 scale -240 fnt31 0 -52(catch\211quit)m grestore -5645(\).)s gsave -600 10910 translate +gsave +0 16840 translate +0.0000 rotate +gsave +1417 -15423 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic +gsave +0 LoutMargSet +grestore +240 fnt84 0 13842(14)m gsave +600 13320 translate 0.6953 1.0000 scale 240 fnt31 0 -52(toplevel)m grestore -960 10616(Displays)m 1848(the)s -2196(top-le)s 6(v)k 3(el)k 3091(def)s 2(ault)k -3812(con\207guration)s 5145(\(the)s 5572(con\207guration)s 6905(data,)s 7410(e)s 6(v)k 6(aluated)k -8372(by)s 8666(the)s 960 10376(serv)m 3(er)k 9(,)k -1638(which)s 2280(calls)s 2768(all)s 3061(the)s 3409(other)s -3960(con\207guration)s 5293(\207les\).)s gsave -600 10190 translate +240 fnt82 +960 13026(Displays)m 1848(the)s 2196(top-le)s 6(v)k 3(el)k +3091(def)s 2(ault)k 3812(con\207guration)s 5145(\(the)s 5572(con\207guration)s +6905(data,)s 7410(e)s 6(v)k 6(aluated)k 8372(by)s +8666(the)s 960 12786(serv)m 3(er)k 9(,)k 1638(which)s +2280(calls)s 2768(all)s 3061(the)s 3409(other)s 3960(con\207guration)s +5293(\207les\).)s gsave +600 12600 translate 0.6953 1.0000 scale 240 fnt31 0 -52(override)m grestore -960 9896(Displays)m -1847(the)s 2194(top-le)s 6(v)k 3(el)k 3088(o)s 3(v)k 3(erride)k +960 12306(Displays)m 1847(the)s +2194(top-le)s 6(v)k 3(el)k 3088(o)s 3(v)k 3(erride)k 3932(con\207guration)s 5264(\(the)s 5690(con\207guration)s 7021(data,)s 7525(e)s 6(v)k 6(aluated)k -8486(by)s 8778(the)s 960 9656(serv)m 3(er)k 9(,)k +8486(by)s 8778(the)s 960 12066(serv)m 3(er)k 9(,)k 1638(which)s 2280(causes)s 2955(all)s 3248(the)s 3596(other)s 4147(con\207guration)s 5480(data)s 5938(to)s 6177(be)s 6459(parsed\).)s gsave -600 9470 translate +600 11880 translate 0.6953 1.0000 scale 240 fnt31 0 -52(help)m grestore -960 9176(Displays)m 1848(a)s 2014(list)s +960 11586(Displays)m 1848(a)s 2014(list)s 2365(of)s 2636(the)s 2984(understood)s 4106(b)s 4(uiltin)k 4783(service)s 5515(names)s 6177(and)s 6581(ar)s 4(guments.)k -480 8913(In)m 736(the)s 1084(fu)s 1278(ture)s 1705(oth)s +480 11323(In)m 736(the)s 1084(fu)s 1278(ture)s 1705(oth)s 2008(er)s 2253(b)s 4(uiltin)k 2930(ser)s 3208(vices)s 3750(may)s 4216(be)s 4498(de)s 4720(\207ned)s 5257(which)s 5899(do)s 6192(more)s 6739(than)s 7208(just)s 7613(print)s -8124(in)s 8307(for)s 8585(-)s 480 8673(ma)m 772(tion.)s +8124(in)s 8307(for)s 8585(-)s 480 11083(ma)m 772(tion.)s gsave -120 8383 translate +120 10793 translate 0.6953 1.0000 scale 240 fnt31 0 -52(set\211environment)m grestore gsave -120 8143 translate +120 10553 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211set\211environment)m grestore -480 7849(Runs)m +480 10259(Runs)m gsave -1024 7903 translate +1024 10313 translate 0.6953 1.0000 scale 240 fnt31 0 -52(/etc/environment)m grestore 2686(to)s 2925(set)s 3250(the)s 3598(service)s 4330(user')s 13(s)k 4938(en)s 9(vironment.)k 6242(This)s 6718(adds)s 7208(the)s 7556(o)s 3(v)k 3(erhead)k -8485(of)s 480 7609(in)m 9(v)k 4(oking)k 1372(a)s +8485(of)s 480 10019(in)m 9(v)k 4(oking)k 1372(a)s 1538(shell,)s 2096(b)s 4(ut)k 2458(doesn')s 4(t)k 3218(cause)s 3805(an)s 3(y)k 4202(shell)s 4708(\(de\)mangling)s 6049(of)s 6320(the)s 6668(service')s 13(s)k 7554(ar)s 4(guments.)k -8650(This)s 480 7369(is)m 690(achie)s 6(v)k 3(ed)k +8650(This)s 480 9779(is)m 690(achie)s 6(v)k 3(ed)k 1589(by)s 1883(in)s 9(v)k 4(oking)k gsave -960 7183 translate +960 9593 translate 0.6953 1.0000 scale 240 fnt31 0 -52(.../program)m 1728(arg)s 2304(arg)s 2880(arg)s 3456(\202)s grestore -480 6938(as)m gsave -960 6752 translate +480 9348(as)m gsave +960 9162 translate 0.6953 1.0000 scale 240 fnt31 0 -52(/bin/sh)m 1152(\211c)s 1584('.)s 2016(/etc/environment;)s 4608(exec)s 5328("$@"')s 6192(\211)s 6480(.../program)s 8208(arg)s 8784(arg)s 9360(arg)s 9936(\202)s grestore gsave -480 6508 translate +480 8918 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211set\211environment)m grestore -2342 6454(cancels)m 3096(the)s 3444(ef)s 6(fect)k +2342 8864(cancels)m 3096(the)s 3444(ef)s 6(fect)k 4040(of)s gsave -4311 6508 translate +4311 8918 translate 0.6953 1.0000 scale 240 fnt31 0 -52(set\211environment)m grestore 5812(.)s gsave -120 6164 translate +120 8574 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211suppress\211args)m grestore gsave -120 5924 translate +120 8334 translate 0.6953 1.0000 scale 240 fnt31 0 -52(suppress\211args)m grestore -480 5630(Include)m 1253(an)s 3(y)k +480 8040(Include)m 1253(an)s 3(y)k 1650(ar)s 4(guments)k 2693(gi)s 6(v)k 3(en)k 3273(to)s 3512(the)s 3860(client)s 4450(as)s 4700(ar)s 4(guments)k 5743(to)s 5982(the)s 6330(program)s 7200(in)s 9(v)k 4(ok)k 2(ed)k -8015(as)s 8265(a)s 8431(result)s 480 5390(of)m 749(an)s +8015(as)s 8265(a)s 8431(result)s 480 7800(of)m 749(an)s gsave -1030 5444 translate +1030 7854 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute)m grestore 1730(,)s gsave -1834 5444 translate +1834 7854 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211directory)m grestore 4094(or)s gsave -4351 5444 translate +4351 7854 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211path)m grestore 6110(directi)s 6(v)k 3(e.)k gsave -7038 5444 translate +7038 7854 translate 0.6953 1.0000 scale 240 fnt31 0 -52(suppress\211args)m grestore -8396(undoes)s 480 5150(the)m 828(ef)s 6(fect)k +8396(undoes)s 480 7560(the)m 828(ef)s 6(fect)k 1424(of)s gsave -1695 5204 translate +1695 7614 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211suppress\211args)m grestore 3297(.)s gsave -120 4829 translate +120 7239 translate 0.6953 1.0000 scale 240 fnt31 0 -52(require\211fd)m gsave 1584 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd-r)m 3(ang)k 2(e)k +240 fnt83 0 -52(fd\211r)m 3(ang)k 2(e)k grestore -2882(read|write)s +2940(read|write)s grestore -480 4530(In)m 676(sist)s 1054(that)s 1472(the)s +480 6940(In)m 676(sist)s 1054(that)s 1472(the)s 1820(\207ledescrip)s 2808(tor\(s\))s 3373(be)s 3655(opened)s 4405(for)s 4743(read)s 5152(ing)s 5511(resp.)s 6013(writ)s 6397(ing.)s 6807(It)s 7012(is)s 7222(an)s 7505(er)s 7690(ror)s 8028(if)s 8245(an)s 3(y)k 8642(de)s 8864(-)s -480 4290(scrip)m 937(tor)s 1258(mark)s 2(ed)k 2027(as)s +480 6700(scrip)m 937(tor)s 1258(mark)s 2(ed)k 2027(as)s 2272(re)s 2453(quired)s 3118(when)s 3689(the)s 4033(ser)s 4311(vice)s 4760(is)s 4966(about)s 5554(to)s 5788(be)s 6066(in)s 6249(v)s 4(ok)k 2(ed)k 6882(\(af)s 7158(ter)s 7465(the)s 7808(con)s 8151(\207g)s 8397(u)s -8512(ra)s 8697(tion)s 480 4050(has)m 850(been)s 1359(parsed\))s +8512(ra)s 8697(tion)s 480 6460(has)m 850(been)s 1359(parsed\))s 2111(w)s 2(as)k 2532(not)s 2898(spec)s 3316(i)s 3376(\207ed)s 3793(when)s 4369(the)s 4717(client)s 5307(w)s 2(as)k 5728(in)s 5911(v)s 4(ok)k 2(ed.)k 6595(Each)s 7130(\207le)s 7491(de)s 7713(scrip)s 8170(tor)s 8495(has)s -480 3810(a)m 646(sep)s 958(a)s 1064(rate)s 1477(set)s +480 6220(a)m 646(sep)s 958(a)s 1064(rate)s 1477(set)s 1742(ting,)s 2221(and)s 2625(the)s 2973(last)s 3364(one)s 3766(of)s gsave -4037 3864 translate +4037 6274 translate 0.6953 1.0000 scale 240 fnt31 0 -52(require\211fd)m grestore 5038(,)s gsave -5145 3864 translate +5145 6274 translate 0.6953 1.0000 scale 240 fnt31 0 -52(allow\211fd)m grestore 5946(,)s gsave -6053 3864 translate +6053 6274 translate 0.6953 1.0000 scale 240 fnt31 0 -52(ignore\211fd)m grestore 6954(,)s gsave -7061 3864 translate +7061 6274 translate 0.6953 1.0000 scale 240 fnt31 0 -52(null\211fd)m grestore 7821(or)s gsave -8080 3864 translate +8080 6274 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reject\211fd)m grestore -480 3570(which)m 1122(af)s 1319(fect)s 1676(ed)s 1960(a)s +480 5979(which)m 1122(af)s 1319(fect)s 1676(ed)s 1960(a)s 2126(par)s 2431(tic)s 2662(u)s 2777(lar)s 3088(\207le)s 3449(de)s 3671(scrip)s 4128(tor)s 4453(will)s 4879(tak)s 2(e)k -5331(ef)s 5528(fect.)s 240 fnt83 480 3164(fd-r)m 3(ang)k 2(e)k -240 fnt82 1352 3162(may)m 1818(be)s 2100(a)s 2266(single)s -2893(number)s 9(,)k 3722(tw)s 2(o)k 4132(numbers)s -5007(separated)s 5967(by)s 6261(a)s 6427(h)s 1(yphen,)k -7239(or)s 7498(one)s 7900(number)s 480 2922(follo)m 6(wed)k -1382(by)s 1676(a)s 1842(h)s 1(yphen)k 2604(\(indicating)s -3692(all)s 3985(descriptors)s 5084(from)s 5608(that)s 6026(number)s -6817(onw)s 2(ards\).)k 7809(It)s 8014(may)s 8480(also)s -480 2682(be)m 760(one)s 1159(of)s 1428(the)s 1773(w)s 2(ords)k -gsave -2405 2736 translate +5331(ef)s 5528(fect.)s 240 fnt83 6049 5981(fd-)m 6302(r)s 3(ang)k 2(e)k +240 fnt82 6909 5979(may)m 7375(be)s 7657(a)s 7823(sin)s +8099(gle)s 8447(num)s 8873(-)s 480 5739(ber)m 9(,)k +883(tw)s 2(o)k 1293(num)s 1719(bers)s 2168(sep)s +2480(a)s 2586(rat)s 2837(ed)s 3121(by)s 3415(a)s +3581(h)s 1(y)k 3814(phen,)s 4387(or)s 4646(one)s +5048(num)s 5474(ber)s 5839(fol)s 6099(lo)s 6(wed)k +6736(by)s 7030(a)s 7196(h)s 1(y)k 7429(phen)s +7952(\(in)s 8214(di)s 8394(cat)s 8672(ing)s 480 5499(all)m +772(de)s 994(scrip)s 1451(tors)s 1858(from)s 2380(that)s +2796(num)s 3222(ber)s 3585(on)s 3822(w)s 2(ards\).)k +4573(It)s 4776(may)s 5240(also)s 5676(be)s 5956(one)s +6357(of)s 6626(the)s 6972(w)s 2(ords)k gsave +7604 5553 translate 0.6953 1.0000 scale -240 fnt31 0 -52(stdin)m +240 fnt31 +0 -52(stdin)m grestore -2905(,)s gsave -3009 2736 translate +8104(,)s gsave +8209 5553 translate 0.6953 1.0000 scale -240 fnt31 0 -52(stdout)m - +240 fnt31 0 -52(stdout)m grestore -3667(or)s gsave -3923 2736 translate +8867(or)s +gsave +480 5313 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stderr)m grestore -4523(.)s 4625(Open-ended)s -5850(\207le)s 6209(descriptor)s 7221(rangers)s 7973(are)s 8317(allo)s 6(wed)k -480 2442(only)m 960(with)s gsave -1442 2496 translate +1080 5259(.)m 1174(Open-)s 1761(ended)s +2380(\207le)s 2730(de)s 2952(scrip)s 3409(tor)s 3723(rangers)s +4466(are)s 4802(al)s 4969(lo)s 6(wed)k 5596(only)s +6065(with)s gsave +6536 5313 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reject\211fd)m grestore -2403(and)s -gsave -2807 2496 translate +7486(and)s gsave +7879 5313 translate 0.6953 1.0000 scale -240 fnt31 0 -52(ignore\211fd)m +240 fnt31 +0 -52(ignore\211fd)m grestore -3708(,)s 3815(as)s 4065(otherwise)s -5050(the)s 5398(service)s 6130(program)s 7000(w)s 2(ould)k -7655(\207nd)s 8086(itself)s 8634(with)s 480 2202(a)m 646(v)s 3(ery)k -1122(lar)s 4(ge)k 1651(number)s 2442(of)s 2713(\207le)s -3074(descriptors)s 4173(open.)s 480 1794(When)m 1109(the)s 1457(con\207guration)s -2790(has)s 3160(been)s 3669(parsed,)s 4400(and)s 4804(before)s -5470(the)s 5818(service)s 6550(is)s 6760(about)s 7352(to)s -7591(be)s 7873(e)s 3(x)k 3(ecuted,)k 480 1554(stderr)m -1082(\(fd)s 1417(2\))s 1663(must)s 2187(be)s 2468(required)s -3320(or)s 3578(allo)s 6(wed)k 4385(\()s gsave -4458 1608 translate -0.6953 1.0000 scale -240 fnt31 -0 -52(require\211fd)m -grestore -5518(or)s gsave -5776 1608 translate -0.6953 1.0000 scale -240 fnt31 0 -52(allow\211fd)m -grestore -6577(\))s -6703(for)s 7040(writing;)s 7841(this)s 8235(is)s 8444(so)s -8708(that)s 480 1314(the)m 823(error)s 1341(message)s 2202(printed)s -2931(by)s 3220(the)s 3563(serv)s 3(er')k 13(s)k -4348(child)s 4878(process)s 5641(if)s 5853(it)s 6040(cannot)s -gsave -6732 1368 translate +8780(,)s 8876(as)s 480 5019(oth)m 783(er)s +968(wise)s 1457(the)s 1799(ser)s 2077(vice)s 2526(pro)s +2838(gram)s 3383(w)s 2(ould)k 4033(\207nd)s 4458(it)s +4590(self)s 5001(with)s 5477(a)s 5638(v)s 3(ery)k +6108(lar)s 4(ge)k 6632(num)s 7058(ber)s 7417(of)s +7683(\207le)s 8038(de)s 8260(scrip)s 8717(tors)s 480 4779(open.)m +1090(When)s 1699(the)s 2027(con)s 2370(\207g)s 2616(u)s +2731(ra)s 2916(tion)s 3325(has)s 3674(been)s 4163(parsed,)s +4874(and)s 5258(be)s 5480(fore)s 5900(the)s 6227(ser)s +6505(vice)s 6939(is)s 7129(about)s 7701(to)s 7920(be)s +8181(e)s 3(x)k 8399(e)s 8501(cut)s 8793(ed,)s +480 4539(stderr)m 1083(\(fd)s 1418(2\))s 1665(must)s 2189(be)s +2470(re)s 2651(quired)s 3320(or)s 3578(al)s 3745(lo)s 6(wed)k +4381(\()s gsave +4454 4593 translate +0.6953 1.0000 scale +240 fnt31 0 -52(require\211fd)m +grestore +5514(or)s gsave +5772 4593 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(allow\211fd)m +grestore +6573(\))s 6701(for)s 7038(writ)s 7422(ing;)s +7839(this)s 8234(is)s 8443(so)s 8708(that)s 480 4299(the)m +825(er)s 1010(ror)s 1345(mes)s 1721(sage)s 2198(print)s +2649(ed)s 2930(by)s 3220(the)s 3565(serv)s 3958(er')s 13(s)k +4350(child)s 4882(pro)s 5194(cess)s 5640(if)s 5853(it)s +6042(can)s 6371(not)s gsave +6734 4353 translate 0.6953 1.0000 scale 240 fnt31 0 -52(exec)m grestore -7187(the)s 7530(service)s 8256(program)s -480 1074(is)m 690(not)s 1056(lost.)s gsave -120 784 translate +7190(the)s +7535(ser)s 7813(vice)s 8263(pro)s 8575(gram)s 480 4059(is)m +690(not)s 1056(lost.)s gsave +120 3769 translate 0.6953 1.0000 scale -240 fnt31 0 -52(allow\211fd)m -gsave +240 fnt31 0 -52(allow\211fd)m gsave 1296 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd-r)m 3(ang)k 2(e)k -grestore -2594([read|write])s - -grestore -0 52(User)m 511(service)s 1243(daemon)s 2058(and)s 2462(client)s -3052(speci\207cation)s 8652(0.62)s -grestore - -grestore - -pgsave restore -showpage - -%%Page: 16 16 -%%BeginPageSetup -%%PageResources: font Times-Roman -%%+ font Times-Bold -%%+ font Courier-Bold -%%+ font Times-Italic -/pgsave save def -0.0500 dup scale 10 setlinewidth -%%EndPageSetup -gsave -0 0 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic -gsave -LoutPageSet -grestore -gsave -0 16840 translate -0.0000 rotate - -grestore - +240 fnt83 +0 -52(fd\211r)m 3(ang)k 2(e)k grestore -gsave -0 16840 translate -0.0000 rotate -gsave -1417 -15423 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic -gsave -0 LoutMargSet +2652([read|write])s grestore -240 fnt84 0 13842(16)m 240 fnt82 480 13251(Allo)m 6(w)k +480 3470(Allo)m 6(w)k 1126(the)s 1474(descriptor\(s\))s 2729(to)s 2968(be)s 3250(opened)s 4000(for)s 4338(reading)s 5108(resp.)s 5610(writing,)s 6407(or)s 6666(either)s 7269(if)s 7486(neither)s gsave -8209 13305 translate +8209 3524 translate 0.6953 1.0000 scale 240 fnt31 0 -52(read)m grestore 8669(nor)s gsave -480 13065 translate +480 3284 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore -1040 13011(is)m 1250(speci\207ed.)s +1040 3230(is)m 1250(speci\207ed.)s 2204(If)s 2434(a)s 2600(particular)s 3574(descriptor)s 4589(not)s 4955(speci\207ed)s 5863(by)s 6157(the)s 6505(client)s 7095(then)s -7564(it)s 7756(will)s 8182(be)s 8464(open)s 480 12771(onto)m +7564(it)s 7756(will)s 8182(be)s 8464(open)s 480 2990(onto)m gsave -959 12825 translate +959 3044 translate 0.6953 1.0000 scale 240 fnt31 0 -52(/dev/null)m grestore 1920(\(for)s 2337(reading,)s 3161(writing,)s 3958(or)s 4217(both,)s 4750(depending)s 5801(on)s 6098(whether)s gsave -6928 12825 translate +6928 3044 translate 0.6953 1.0000 scale 240 fnt31 0 -52(read)m grestore 7328(,)s gsave -7435 12825 translate +7435 3044 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore -7995(or)s 8254(neither)s 480 12531(w)m 2(as)k 901(speci\207ed\).)s +7995(or)s 8254(neither)s 480 2750(w)m 2(as)k 901(speci\207ed\).)s gsave -120 12191 translate +120 2410 translate 0.6953 1.0000 scale 240 fnt31 0 -52(null\211fd)m gsave 1152 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd-r)m 3(ang)k 2(e)k +240 fnt83 0 -52(fd\211r)m 3(ang)k 2(e)k grestore -2450([read|write])s +2508([read|write])s grestore -480 11892(Spec)m 938(i)s 998(fy)s 1251(that)s +480 2111(Spec)m 938(i)s 998(fy)s 1251(that)s 1669(the)s 2017(de)s 2239(scrip)s 2696(tor\(s\))s 3261(be)s 3543(opened)s 4293(onto)s gsave -4772 11946 translate +4772 2165 translate 0.6953 1.0000 scale 240 fnt31 0 -52(/dev/null)m grestore 5733(for)s 6071(read)s 6480(ing)s 6839(resp.)s 7341(writ)s 7725(ing,)s -8138(or)s 8397(both)s 8880(if)s 480 11652(nei)m 766(ther)s +8138(or)s 8397(both)s 8880(if)s 480 1871(nei)m 766(ther)s gsave -1181 11706 translate +1181 1925 translate 0.6953 1.0000 scale 240 fnt31 0 -52(read)m grestore 1624(nor)s gsave -1986 11706 translate +1986 1925 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m @@ -4407,141 +4338,188 @@ 4093(spec)s 4511(i)s 4571(\207)s 4696(ca)s 4908(tion)s 5320(of)s 5574(these)s 6104(\207le)s 6448(de)s 6670(scrip)s 7127(tors)s 7519(by)s 7796(the)s 8127(client)s 8700(will)s -480 11412(be)m 762(silent)s 1279(ly)s 1519(ig)s 1698(nored;)s +480 1631(be)m 762(silent)s 1279(ly)s 1519(ig)s 1698(nored;)s 2355(the)s 2703(client)s 3293(will)s 3719(see)s 4080(its)s 4356(ends)s 4846(of)s 5117(the)s 5465(de)s 5687(scrip)s 6144(tors)s 6553(be)s 6775(ing)s 7134(closed)s 7803(im)s 8055(me)s 8343(di)s 8523(ate)s 8797(ly)s 15(.)k gsave -120 11072 translate +120 1291 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reject\211fd)m gsave 1440 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd-r)m 3(ang)k 2(e)k +240 fnt83 0 -52(fd\211r)m 3(ang)k 2(e)k grestore grestore -480 10778(Do)m 824(not)s 1187(allo)s 6(w)k 1764(the)s +480 997(Do)m 824(not)s 1187(allo)s 6(w)k 1764(the)s 2109(descriptor\(s\))s 3362(to)s 3598(be)s 3878(speci\207ed)s 4783(by)s 5075(the)s 5420(client.)s 6052(It)s 6254(is)s 6462(an)s 6742(error)s 7263(if)s 7477(an)s 3(y)k 7871(descriptor\(s\))s -480 10538(mark)m 2(ed)k 1253(for)s 1591(rejection)s 2483(are)s +480 757(mark)m 2(ed)k 1253(for)s 1591(rejection)s 2483(are)s 2830(speci\207ed)s 3738(when)s 4314(the)s 4662(service)s 5394(is)s 5604(about)s 6196(to)s 6435(be)s 6717(in)s 9(v)k 4(ok)k 2(ed)k -7532(\(after)s 8107(the)s 480 10298(con\207guration)m 1813(has)s 2183(been)s -2692(parsed\).)s gsave -120 9958 translate +7532(\(after)s 8107(the)s 0 52(0.64.1)m 4809(User)s 5320(service)s +6052(daemon)s 6867(and)s 7271(client)s 7861(speci\207cation)s +grestore + +grestore + +pgsave restore +showpage + +%%Page: 15 15 +%%BeginPageSetup +%%PageResources: font Times-Roman +%%+ font Times-Bold +%%+ font Courier-Bold +%%+ font Times-Italic +/pgsave save def +0.0500 dup scale 10 setlinewidth +%%EndPageSetup +gsave +0 0 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic +gsave +LoutPageSet +grestore +gsave +0 16840 translate +0.0000 rotate + +grestore + +grestore +gsave +0 16840 translate +0.0000 rotate +gsave +1417 -15423 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic +gsave +1 LoutMargSet +grestore +240 fnt84 8833 13842(15)m 240 fnt82 480 13252(con\207guration)m 1813(has)s +2183(been)s 2692(parsed\).)s gsave +120 12912 translate 0.6953 1.0000 scale 240 fnt31 0 -52(ignore\211fd)m gsave 1440 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd-r)m 3(ang)k 2(e)k - +240 fnt83 +0 -52(fd\211r)m 3(ang)k 2(e)k grestore grestore -480 9664(Silent)m 1037(ly)s 1260(ig)s 1439(nore)s 1902(an)s 3(y)k -2281(spec)s 2699(i)s 2759(\207)s 2884(ca)s 3096(tion)s -3507(by)s 3783(the)s 4113(client)s 4685(of)s 4938(those)s -5481(de)s 5703(scrip)s 6160(tor\(s\).)s 6762(The)s 7172(pipes)s -7710(cor)s 8015(re)s 8196(spond)s 8767(ing)s 480 9424(to)m -719(these)s 1266(de)s 1488(scrip)s 1945(tors)s 2354(will)s -2780(be)s 3062(closed)s 3731(just)s 4136(be)s 4358(fore)s -4798(the)s 5146(ser)s 5424(vice)s 5878(is)s 6088(in)s -6271(v)s 4(ok)k 2(ed.)k gsave -120 9084 translate +480 12618(Silent)m 1037(ly)s +1260(ig)s 1439(nore)s 1902(an)s 3(y)k 2281(spec)s +2699(i)s 2759(\207)s 2884(ca)s 3096(tion)s 3507(by)s +3783(the)s 4113(client)s 4685(of)s 4938(those)s 5481(de)s +5703(scrip)s 6160(tor\(s\).)s 6762(The)s 7172(pipes)s 7710(cor)s +8015(re)s 8196(spond)s 8767(ing)s 480 12378(to)m 719(these)s +1266(de)s 1488(scrip)s 1945(tors)s 2354(will)s 2780(be)s +3062(closed)s 3731(just)s 4136(be)s 4358(fore)s 4798(the)s +5146(ser)s 5424(vice)s 5878(is)s 6088(in)s 6271(v)s 4(ok)k 2(ed.)k +gsave +120 12038 translate 0.6953 1.0000 scale -240 fnt31 0 -52(disconnect\211hup)m - +240 fnt31 0 -52(disconnect\211hup)m grestore gsave -120 8844 translate +120 11798 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211disconnect\211hup)m grestore -480 8550(Causes)m 1209(the)s 1557(service')s 13(s)k -2443(process)s 3211(group)s 3823(to)s 4062(get)s 4414(a)s -gsave -4580 8604 translate +480 11504(Caus)m +950(es)s 1200(the)s 1548(ser)s 1826(vice')s 13(s)k +2434(pro)s 2746(cess)s 3195(group)s 3807(to)s 4046(get)s +4398(a)s gsave +4564 11558 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGHUP)m grestore -5240(if)s 5457(the)s 5805(client)s -6395(disconnects)s 7562(before)s 8228(the)s 8576(main)s 480 8310(service)m -1212(process)s 1980(terminates.)s gsave -3078 8364 translate +5224(if)s 5441(the)s +5789(client)s 6379(dis)s 6649(con)s 6992(nects)s 7534(be)s +7756(fore)s 8196(the)s 8544(main)s 480 11264(ser)m 758(vice)s +1209(pro)s 1521(cess)s 1966(ter)s 2217(mi)s 2463(nates.)s +gsave +3055 11318 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211disconnect\211hup)m grestore -4840(cancels)s -gsave -5594 8364 translate +4813(can)s 5142(cels)s gsave +5560 11318 translate 0.6953 1.0000 scale -240 fnt31 0 -52(disconnect\211hup)m +240 fnt31 +0 -52(disconnect\211hup)m grestore -6995(.)s 480 7902(If)m 700(one)s -1091(of)s 1352(the)s 1689(reading)s 2449(descriptors)s 3537(speci\207ed)s -4435(when)s 5000(the)s 5337(client)s 5917(is)s 6116(called)s -6734(gets)s 7159(a)s 7315(read)s 7773(error)s 9(,)k -8324(or)s 8572(if)s 8778(the)s 480 7661(service)m 1212(is)s -1422(disconnected)s 2729(for)s 3067(some)s 3628(other)s 4179(reason,)s -4910(then)s 5379(the)s gsave -5727 7715 translate +6961(.)s 7122(If)s 7348(one)s 7747(of)s +8014(the)s 8358(read)s 8767(ing)s 480 11024(de)m 702(scrip)s +1159(tors)s 1568(spec)s 1986(i)s 2046(\207ed)s 2463(when)s +3039(the)s 3387(client)s 3977(is)s 4187(called)s 4815(gets)s +5251(a)s 5417(read)s 5886(er)s 6071(ror)s 9(,)k +6447(or)s 6706(if)s 6923(the)s 7271(ser)s 7549(vice)s +8003(is)s 8213(dis)s 8483(con)s 8826(-)s 480 10783(nect)m +878(ed)s 1162(for)s 1500(some)s 2061(oth)s 2364(er)s +2609(rea)s 2900(son,)s 3340(then)s 3809(the)s gsave +4157 10837 translate 0.6953 1.0000 scale -240 fnt31 0 -52(SIGHUP)m +240 fnt31 +0 -52(SIGHUP)m grestore -6387(will)s -6813(be)s 7095(deli)s 6(v)k 3(ered)k 240 fnt83 -8033 7663(befor)m 8(e)k 240 fnt82 8689 7661(the)m 480 7421(writing)m -1223(end\(s\))s 1869(of)s 2140(the)s 2488(service')s 13(s)k -3374(reading)s 4144(pipe\(s\))s 4856(are)s 5203(closed,)s 5921(so)s -6187(that)s 6605(the)s 6953(client)s 7543(can)s 7932(distinguish)s -480 7181(disconnection)m 1866(from)s 2390(reading)s 3160(EOF)s 3670(on)s -3967(a)s 4133(pipe.)s gsave -120 6841 translate -0.6953 1.0000 scale -240 fnt31 0 -52(reset)m +4817(will)s 5243(be)s 5525(de)s 5747(li)s 6(v)k +5988(ered)s 240 fnt83 6457 10785(be)m 6676(for)s 8(e)k +240 fnt82 7106 10783(the)m 7454(writ)s 7838(ing)s 8197(end\(s\))s +8843(of)s 480 10543(the)m 818(ser)s 1096(vice')s 13(s)k +1694(read)s 2103(ing)s 2452(pipe\(s\))s 3154(are)s 3491(closed,)s +4199(so)s 4455(that)s 4863(the)s 5201(client)s 5781(can)s +6160(dis)s 6430(tin)s 6679(guish)s 7245(dis)s 7515(con)s +7858(nec)s 8183(tion)s 8602(from)s 480 10303(read)m 889(ing)s +1248(EOF)s 1758(on)s 2055(a)s 2221(pipe.)s gsave +120 9963 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(reset)m +grestore +480 9669(Resets)m 1155(the)s 1503(e)s 3(x)k 3(ecution)k +2484(settings)s 3265(to)s 3504(the)s 3852(def)s 2(ault.)k +4617(This)s 5093(is)s 5303(equi)s 6(v)k 6(alent)k +6347(to:)s gsave +960 9483 translate +0.6953 1.0000 scale +240 fnt31 0 -52(cd)m 432(~/)s 0 -292(reject)m +0 -532(no\211set\211environment)m 0 -772(suppress\211args)m 0 -1012(allow\211fd)m 1296(0)s 1584(read)s +0 -1252(allow\211fd)m 1296(1\2112)s 1872(write)s 0 -1492(reject\211fd)m 1440(3\211)s +0 -1732(disconnect\211hup)m grestore -480 6547(Resets)m -1155(the)s 1503(e)s 3(x)k 3(ecution)k 2484(settings)s -3265(to)s 3504(the)s 3852(def)s 2(ault.)k 4617(This)s -5093(is)s 5303(equi)s 6(v)k 6(alent)k 6347(to:)s -gsave -960 6361 translate +0 7506(If)m 230(no)s gsave +523 7560 translate 0.6953 1.0000 scale -240 fnt31 0 -52(cd)m 432(~/)s 0 -292(reject)m 0 -532(no\211set\211environment)m -0 -772(suppress\211args)m 0 -1012(allow\211fd)m 1296(0)s 1584(read)s 0 -1252(allow\211fd)m -1296(1\2112)s 1872(write)s 0 -1492(reject\211fd)m 1440(3\211)s 0 -1732(disconnect\211hup)m +240 fnt31 0 -52(execute)m grestore -0 4085(If)m 230(no)s gsave -523 4139 translate -0.6953 1.0000 scale -240 fnt31 0 -52(execute)m -grestore -1223(,)s -gsave -1330 4139 translate +1223(,)s gsave +1330 7560 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211path)m grestore 3032(,)s gsave -3139 4139 translate +3139 7560 translate 0.6953 1.0000 scale -240 fnt31 0 -52(execute\211from\211directory)m - +240 fnt31 +0 -52(execute\211from\211directory)m grestore 5401(or)s gsave -5660 4139 translate +5660 7560 translate 0.6953 1.0000 scale 240 fnt31 0 -52(builtin)m grestore -6420(is)s 6630(interpreted)s -7722(before)s 8388(all)s 8681(the)s 0 3845(\207les)m 449(are)s -796(read)s 1265(then)s 1734(the)s 2082(request)s 2832(is)s -3042(rejected.)s 9066 670 0 670 240 240 60 0 2821 LoutGr2 +6420(is)s +6630(interpreted)s 7722(before)s 8388(all)s 8681(the)s 0 7266(\207les)m +449(are)s 796(read)s 1265(then)s 1734(the)s 2082(request)s +2832(is)s 3042(rejected.)s 9066 670 0 670 240 240 60 0 6242 LoutGr2 newpath 0 ysize 0.3 ft sub moveto xsize 0 rlineto 0 0.1 ft rlineto @@ -4551,35 +4529,35 @@ 320 fnt84 0 66(4.3.)m 628(Err)s 5(ors)k 1618(in)s 1958(the)s 2458(con\207guration)s 4359(\207le)s grestore -0 2359(If)m +0 5780(If)m 230(a)s 396(syntax)s 1076(error)s 1599(or)s 1858(other)s 2409(problem)s 3266(occurs)s 3941(when)s 4517(processing)s 5593(a)s 5759(con\207guration)s 7092(\207le)s 7453(then)s 7922(a)s 8088(diagnostic)s -0 2119(will)m 422(be)s 699(issued,)s 1399(to)s 1633(where)s 6(v)k 3(er)k +0 5540(will)m 422(be)s 699(issued,)s 1399(to)s 1633(where)s 6(v)k 3(er)k 2568(the)s 2911(error)s 3429(messages)s 4378(are)s 4721(currently)s 5632(being)s 6212(sent)s 6652(\(see)s 7087(the)s gsave -7430 2173 translate +7430 5594 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211)m grestore -8185(f)s 2(amily)k 8855(of)s 0 1879(directi)m 6(v)k 3(es,)k -1026(abo)s 3(v)k 3(e\).)k 0 1471(The)m 428(error)s +8185(f)s 2(amily)k 8855(of)s 0 5300(directi)m 6(v)k 3(es,)k +1026(abo)s 3(v)k 3(e\).)k 0 4892(The)m 428(error)s 951(will)s 1377(cause)s 1964(processing)s 3040(of)s 3311(the)s 3659(con\207guration)s 4992(\207les)s 5441(to)s 5680(cease)s 6253(at)s 6485(that)s 6903(point,)s 7502(unless)s 8151(the)s 8499(error)s -0 1231(w)m 2(as)k 421(inside)s 1048(a)s gsave -1214 1285 translate +0 4652(w)m 2(as)k 421(inside)s 1048(a)s gsave +1214 4706 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore 2275(construct.)s 3255(In)s 3511(this)s 3907(case)s 4374(the)s 4722(settings)s 5503(controlling)s 6605(the)s 6953(program')s 13(s)k -7973(e)s 3(x)k 3(ecution)k 0 991(will)m 426(be)s +7973(e)s 3(x)k 3(ecution)k 0 4412(will)m 426(be)s 708(reset)s 1218(to)s 1457(the)s 1805(def)s 2(aults)k 2610(as)s 2860(if)s 3077(a)s gsave -3243 1045 translate +3243 4466 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reset)m @@ -4587,12 +4565,26 @@ 3803(directi)s 6(v)k 3(e)k 4685(had)s 5089(been)s 5598(issued,)s 6303(and)s 6707(parsing)s 7464(continues)s 8432(after)s gsave -0 805 translate +0 4226 translate 0.6953 1.0000 scale 240 fnt31 0 -52(hctac)m grestore -500 751(.)m 0 52(0.62)m 4809(User)s -5320(service)s 6052(daemon)s 6867(and)s 7271(client)s 7861(speci\207cation)s +500 4172(.)m 9066 609 0 609 240 240 60 0 3209 LoutGr2 +newpath 0 ysize 0.3 ft sub moveto +xsize 0 rlineto +0 0.1 ft rlineto +xsize neg 0 rlineto +closepath fill +grestore +320 fnt84 0 5(4.4.)m +628(Defaults)s +grestore +0 2747(The)m 428(def)s 2(ault)k 1149(con\207guration)s +2482(processing)s 3558(is)s 3768(as)s 4018(if)s 4235(the)s +4583(daemon)s 5398(were)s 5918(parsing)s 6675(an)s 6958(o)s 3(v)k 3(erall)k +7670(con\207guration)s 0 2507(\207le)m 361(whose)s 1029(contents)s 1877(were)s +2397(as)s 2647(follo)s 6(ws:)k 0 52(User)m 511(service)s +1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s 8491(0.64.1)s grestore @@ -4601,7 +4593,7 @@ pgsave restore showpage -%%Page: 17 17 +%%Page: 16 16 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -4630,54 +4622,37 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -1 LoutMargSet -grestore -240 fnt84 8831 13842(17)m gsave -0 12808 translate -240 fnt82 9066 609 0 609 240 240 60 LoutGraphic -gsave -newpath 0 ysize 0.3 ft sub moveto -xsize 0 rlineto -0 0.1 ft rlineto -xsize neg 0 rlineto -closepath fill -grestore -320 fnt84 0 5(4.4.)m 628(Defaults)s - +0 LoutMargSet grestore -240 fnt82 0 12346(The)m 428(def)s 2(ault)k 1149(con\207guration)s -2482(processing)s 3558(is)s 3768(as)s 4018(if)s 4235(the)s -4583(daemon)s 5398(were)s 5918(parsing)s 6675(an)s 6958(o)s 3(v)k 3(erall)k -7670(con\207guration)s 0 12106(\207le)m 361(whose)s 1029(contents)s 1877(were)s -2397(as)s 2647(follo)s 6(ws:)k gsave -480 11920 translate +240 fnt84 0 13842(16)m gsave +480 13332 translate 0.6953 1.0000 scale -240 fnt31 0 -52(reset)m -0 -292(user\211rcfile)m 1728(~/.userv/rc)s 0 -532(errors\211to\211stderr)m 0 -772(include)m 1152(/etc/userv/system.default)s -0 -1012(if)m 432(grep)s 1152(service\211user\211shell)s 3888(/etc/shells)s 432 -1252(errors\211push)m -720 -1492(catch\211quit)m 1008 -1732(include\211ifexist)m gsave +240 fnt31 0 -52(reset)m 0 -292(user\211rcfile)m +1728(~/.userv/rc)s 0 -532(errors\211to\211stderr)m 0 -772(include)m 1152(/etc/userv/system.default)s 0 -1012(if)m +432(grep)s 1152(service\211user\211shell)s 3888(/etc/shells)s 432 -1252(errors\211push)m 720 -1492(catch\211quit)m +1008 -1732(include\211ifexist)m gsave 3312 -1680 translate 1.4219 1.0000 scale -240 fnt83 0 -52(\207le)m 345(speci\207ed)s -1248(by)s 1530(most)s 2046(r)s 8(ecent)k 2699(user\211r)s 8(c\207le)k +240 fnt83 0 -52(\207le)m 345(speci\207ed)s 1248(by)s +1530(most)s 2046(r)s 8(ecent)k 2699(user\211r)s 8(c\207le)k 3767(dir)s 8(ective)k grestore 720 -1972(hctac)m 432 -2212(srorre)m 0 -2452(fi)m 0 -2692(include)m 1152(/etc/userv/system.override)s 0 -2932(quit)m grestore -0 8444(If)m 226(one)s -624(of)s 891(the)s gsave -1235 8498 translate +240 fnt82 0 9856(If)m +226(one)s 624(of)s 891(the)s gsave +1235 9910 translate 0.6953 1.0000 scale -240 fnt31 0 -52(\211\211override)m +240 fnt31 0 -52(\211\211override)m + grestore -2292(options)s -3044(to)s 3279(the)s 3623(client)s 4209(is)s 4415(used)s -4908(then)s 5373(it)s 5561(will)s 5983(instead)s 6714(be)s -6992(as)s 7238(if)s 7451(the)s 7795(daemon)s 8606(were)s -0 8204(parsing)m 757(an)s 1040(o)s 3(v)k 3(erall)k +2292(options)s 3044(to)s 3279(the)s 3623(client)s 4209(is)s +4415(used)s 4908(then)s 5373(it)s 5561(will)s 5983(instead)s +6714(be)s 6992(as)s 7238(if)s 7451(the)s 7795(daemon)s +8606(were)s 0 9616(parsing)m 757(an)s 1040(o)s 3(v)k 3(erall)k 1752(con\207guration)s 3085(as)s 3335(follo)s 6(ws:)k gsave -480 8018 translate +480 9430 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reset)m 0 -292(errors\211to\211stderr)m 0 -532(include)m gsave @@ -4689,8 +4664,8 @@ grestore 0 -772(quit)m grestore -0 52(User)m 511(service)s -1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s 8652(0.62)s +0 52(0.64.1)m 4809(User)s +5320(service)s 6052(daemon)s 6867(and)s 7271(client)s 7861(speci\207cation)s grestore @@ -4699,7 +4674,7 @@ pgsave restore showpage -%%Page: 18 18 +%%Page: 17 17 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -4727,10 +4702,10 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -0 LoutMargSet +1 LoutMargSet grestore -240 fnt84 0 13842(18)m gsave -0 12726 translate +240 fnt84 8831 13842(17)m gsave +0 12729 translate 240 fnt82 9066 688 0 688 240 240 60 LoutGraphic gsave newpath 0 ysize 0.3 ft sub moveto @@ -4743,120 +4718,120 @@ 2257(passed)s 3297(thr)s 6(ough)k 4539(the)s 5070(client/daemon)s 7185(combination)s grestore -240 fnt82 0 12264(The)m 428(information)s 1613(described)s +240 fnt82 0 12267(The)m 428(information)s 1613(described)s 2587(belo)s 6(w)k 3220(is)s 3430(the)s 3778(only)s 4258(information)s 5443(which)s 6085(passes)s 6747(between)s 7601(the)s -7949(caller)s 8538(and)s 0 12024(the)m 348(service.)s 0 11616(\213)m +7949(caller)s 8538(and)s 0 12027(the)m 348(service.)s 0 11619(\213)m 480(The)s 908(service)s 1640(name)s 2214(supplied)s 3083(by)s 3377(the)s 3725(caller)s 4314(is)s 4524(a)s 4(v)k 6(ailable)k 5432(in)s 5675(the)s 6023(con\207guration)s 7356(language)s 8276(for)s -480 11376(deciding)m 1343(whether)s 2158(and)s 2547(which)s 3175(service)s +480 11379(deciding)m 1343(whether)s 2158(and)s 2547(which)s 3175(service)s 3892(program)s 4747(to)s 4971(in)s 9(v)k 4(ok)k 2(e,)k 5701(in)s 5929(the)s gsave -6262 11430 translate +6262 11433 translate 0.6953 1.0000 scale 240 fnt31 0 -52(service)m grestore 7008(parameter)s 9(,)k -8045(and)s 8434(is)s 8629(used)s 480 11136(by)m 774(the)s +8045(and)s 8434(is)s 8629(used)s 480 11139(by)m 774(the)s gsave -1122 11190 translate +1122 11193 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211directory)m grestore 3384(and)s gsave -3788 11190 translate +3788 11193 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211path)m grestore 5550(con\207guration)s 6883(directi)s 6(v)k 3(es.)k 7906(It)s -8111(is)s 8321(usually)s 480 10896(used)m 977(to)s 1216(select)s +8111(is)s 8321(usually)s 480 10899(used)m 977(to)s 1216(select)s 1819(which)s 2461(service)s 3193(program)s 4063(to)s 4302(in)s 9(v)k 4(ok)k 2(e.)k 5043(It)s 5248(is)s 5458(also)s 5896(passed)s 6592(to)s -6831(the)s 7179(service)s 7911(program)s 8781(in)s 480 10656(the)m +6831(the)s 7179(service)s 7911(program)s 8781(in)s 480 10659(the)m gsave -828 10710 translate +828 10713 translate 0.6953 1.0000 scale 240 fnt31 0 -52(USERV_SERVICE)m grestore 2189(en)s 9(vironment)k 3449(v)s 6(ariable.)k -0 10225(\213)m 480(File)s 902(descriptors)s 1995(speci\207ed)s 2897(by)s +0 10228(\213)m 480(File)s 902(descriptors)s 1995(speci\207ed)s 2897(by)s 3185(the)s 3528(client)s 4112(and)s 4510(allo)s 6(wed)k 5313(according)s 6304(to)s 6537(the)s 6879(con\207guration)s 8206(language)s -480 9985(will)m 906(be)s 1188(connected.)s 2262(Each)s 2797(\207le)s +480 9988(will)m 906(be)s 1188(connected.)s 2262(Each)s 2797(\207le)s 3158(descriptor)s 4173(is)s 4383(opened)s 5133(for)s 5471(reading)s -6241(or)s 6500(writing.)s 7294(Communication)s 8893(is)s 480 9745(via)m +6241(or)s 6500(writing.)s 7294(Communication)s 8893(is)s 480 9748(via)m 832(pipes,)s 1444(one)s 1846(end)s 2250(of)s 2521(each)s 3016(pipe)s 3484(being)s 4069(open)s 4592(on)s 4889(the)s 5237(appropriate)s 6381(\207le)s 6742(descriptor)s 7757(in)s 8000(the)s -8348(service)s 480 9505(program)m 1350(\(when)s 2005(it)s 2197(is)s -2407(in)s 9(v)k 4(ok)k 2(ed\))k 3292(and)s -3696(the)s 4044(other)s 4595(end)s 4999(being)s 5584(held)s -6054(by)s 6348(the)s 6696(client)s 7286(process,)s 8110(which)s -480 9265(will)m 906(read)s 1375(and)s 1779(write)s 2325(\207les)s -2774(it)s 2966(opens)s 3576(on)s 3873(behalf)s 4542(of)s -4813(its)s 5089(caller)s 5678(or)s 5937(\207le)s 6298(descriptors)s -7397(it)s 7589(is)s 7799(passed)s 8495(by)s 480 9025(its)m -756(caller)s 13(.)k 480 8617(Data)m 991(may)s 1457(be)s +8348(service)s 480 9508(program)m 1347(\(when)s 1999(it)s 2188(is)s +2394(in)s 9(v)k 4(ok)k 2(ed\))k 3276(and)s +3677(the)s 4022(other)s 4569(end)s 4970(being)s 5552(held)s +6019(by)s 6309(the)s 6654(client)s 7241(process,)s 8062(which)s +8700(will)s 480 9268(read)m 942(and)s 1339(write)s 1878(\207les)s +2320(it)s 2505(opens)s 3108(on)s 3398(behalf)s 4060(of)s +4324(its)s 4593(caller)s 5175(or)s 5427(\207le)s 5781(descriptors)s +6873(it)s 7058(is)s 7261(passed)s 7950(by)s 8237(its)s +8506(caller)s 13(.)k 480 9028(Data)m 991(may)s 1457(be)s 1739(passed)s 2435(into)s 2860(the)s 3208(service)s 3940(through)s 4742(reading)s 5512(pipes)s 6068(and)s 6472(out)s 6838(of)s -7109(it)s 7301(through)s 8103(writing)s 480 8377(pipes.)m 1083(These)s +7109(it)s 7301(through)s 8103(writing)s 480 8788(pipes.)m 1083(These)s 1703(pipes)s 2252(can)s 2634(remain)s 3347(open)s 3864(only)s 4337(until)s 4823(the)s 5164(service)s 5889(and)s 6287(client)s 6870(ha)s 4(v)k 3(e)k 7364(terminated,)s 8485(or)s -8737(can)s 480 8137(be)m 762(made)s 1336(to)s 1575(stay)s +8737(can)s 480 8548(be)m 762(made)s 1336(to)s 1575(stay)s 2014(open)s 2537(after)s 3033(the)s 3381(client)s 3971(has)s 4341(terminated)s 5420(and)s 5824(\(if)s 6120(the)s 6468(service)s -7200(program)s 8070(forks\))s 8689(the)s 480 7897(main)m 1015(service)s -1747(process)s 2515(has)s 2885(e)s 3(xited;)k 3578(the)s -3926(beha)s 4(viour)k 4939(is)s 5149(controlled)s 6176(by)s -6470(options)s 7226(passed)s 7922(to)s 8161(the)s 8509(client)s -480 7657(by)m 774(its)s 1050(caller)s 13(.)k 480 7249(The)m -901(caller)s 1483(can)s 1864(arrange)s 2629(that)s 3039(a)s -3198(writing)s 3934(pipe)s 4394(be)s 4669(connected)s 5689(to)s -5921(a)s 6080(pipe)s 6540(or)s 6792(similar)s 7506(object)s -8143(and)s 8539(cause)s 480 7009(attempts)m 1340(to)s 1579(write)s -2125(to)s 2364(that)s 2782(descriptor)s 3797(by)s 4091(the)s -4439(service)s 5171(to)s 5410(generate)s 6275(a)s gsave -6441 7063 translate +7200(program)s 8070(forks\))s 8689(the)s 480 8308(main)m 998(service)s +1712(process)s 2462(has)s 2814(e)s 3(xited;)k 3489(the)s +3820(beha)s 4(viour)k 4815(is)s 5007(controlled)s 6016(by)s +6292(options)s 7031(passed)s 7709(to)s 7930(the)s 8260(client)s +8832(by)s 480 8068(its)m 751(caller)s 13(.)k 1426(The)s +1848(caller)s 2432(can)s 2816(arrange)s 3582(that)s 3995(a)s +4156(writing)s 4893(pipe)s 5356(be)s 5633(connected)s 6655(to)s +6889(a)s 7050(pipe)s 7512(or)s 7766(similar)s 8482(object)s +480 7828(and)m 884(cause)s 1471(attempts)s 2331(to)s 2570(write)s +3116(to)s 3355(that)s 3773(descriptor)s 4788(by)s 5082(the)s +5430(service)s 6162(to)s 6401(generate)s 7266(a)s gsave +7432 7882 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGPIPE)m grestore -7201(\(or)s gsave -7539 7063 translate +8192(\(or)s gsave +8530 7882 translate 0.6953 1.0000 scale 240 fnt31 0 -52(EPIPE)m grestore -8099(if)s +480 7588(if)m gsave -8316 7063 translate +684 7642 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGPIPE)m grestore -480 6769(is)m 690(caught)s 1388(or)s -1647(ignored\))s 2506(in)s 2749(the)s 3097(service.)s 480 6361(Lik)m 2(e)k 6(wise,)k -1455(the)s 1803(service)s 2535(can)s 2924(close)s 3471(\207ledescriptors)s -4875(speci\207ed)s 5783(for)s 6121(reading,)s 6945(which)s 7587(will)s -8013(cause)s 8600(the)s 480 6121(corresponding)m 1902(\207ledescriptors)s 3306(passed)s -4002(by)s 4296(the)s 4644(caller)s 5233(to)s 5472(be)s -5754(closed,)s 6472(so)s 6738(that)s 7156(if)s 7373(these)s -7920(are)s 8267(pipes)s 480 5881(processes)m 1447(which)s 2089(write)s -2635(to)s 2874(them)s 3412(will)s 3838(recei)s 6(v)k 3(e)k +1431(is)s 1628(caught)s 2313(or)s +2559(ignored\))s 3405(in)s 3635(the)s 3970(service.)s 4797(Lik)s 2(e)k 6(wise,)k +5759(the)s 6094(service)s 6813(can)s 7189(close)s 7722(\207ledescriptors)s +480 7348(speci\207ed)m 1373(for)s 1696(reading,)s 2505(which)s 3132(will)s +3543(cause)s 4115(the)s 4448(corresponding)s 5855(\207ledescriptors)s 7244(passed)s +7925(by)s 8204(the)s 8537(caller)s 480 7108(to)m 716(be)s +995(closed,)s 1709(so)s 1972(that)s 2387(if)s 2600(these)s +3144(are)s 3488(pipes)s 4040(processes)s 5004(which)s 5643(write)s +6185(to)s 6421(them)s 6956(will)s 7378(recei)s 6(v)k 3(e)k gsave -4574 5935 translate +8111 7162 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGPIPE)m grestore -5334(or)s gsave -5593 5935 translate +8867(or)s gsave +480 6922 translate 0.6953 1.0000 scale 240 fnt31 0 -52(EPIPE)m grestore -6093(.)s 0 5426(\213)m 480(If)s gsave -706 5480 translate +980 6868(.)m 0 6463(\213)m 480(If)s gsave +706 6517 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211suppress\211args)m @@ -4864,96 +4839,133 @@ 2363(is)s 2568(set)s 2888(then)s 3353(ar)s 4(guments)k 4391(passed)s 5082(to)s 5316(the)s 5660(client)s 6245(by)s 6534(its)s 6805(caller)s 7390(will)s 7811(be)s 8088(passed)s -8779(on,)s 480 5186(v)m 3(erbatim,)k 1433(to)s 1672(the)s -2020(service.)s 0 4750(\213)m 480(F)s 3(a)k 716(tal)s +8779(on,)s 480 6223(v)m 3(erbatim,)k 1433(to)s 1672(the)s +2020(service.)s 0 5787(\213)m 480(F)s 3(a)k 716(tal)s 1009(sig)s 1281(nals)s 1717(and)s 2121(sys)s 2418(tem)s 2836(call)s 3235(f)s 2(ail)k 3545(ures)s 3994(e)s 3(x)k 4212(pe)s 4434(ri)s 4573(enced)s 5189(by)s 5483(the)s 5831(client)s 6421(will)s 6847(re)s 7028(sult)s 7433(in)s 7676(the)s 8024(dis)s 8294(con)s 8637(nec)s 8962(-)s -480 4510(tion)m 909(of)s 1180(the)s 1528(ser)s 1806(vice)s +480 5547(tion)m 909(of)s 1180(the)s 1528(ser)s 1806(vice)s 2260(from)s 2784(the)s 3132(client)s 3722(and)s 4126(pos)s 4450(si)s 4603(bly)s 4963(some)s 5524(of)s 5795(the)s 6143(com)s 6555(mu)s 6856(ni)s 7036(ca)s 7248(tion)s -7677(\207le)s 8038(de)s 8260(scrip)s 8717(tors)s 480 4270(de)m +7677(\207le)s 8038(de)s 8260(scrip)s 8717(tors)s 480 5307(de)m 702(scribed)s 1450(abo)s 3(v)k 3(e;)k 2128(if)s gsave -2345 4324 translate +2345 5361 translate 0.6953 1.0000 scale 240 fnt31 0 -52(disconnect\211hup)m grestore 3806(is)s 4016(set)s 4341(then)s 4810(the)s 5158(ser)s 5436(vice)s 5890(will)s 6316(also)s 6754(be)s 7036(sent)s 7481(a)s gsave -7647 4324 translate +7647 5361 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGHUP)m grestore -8247(.)s 0 3834(\213)m 480(The)s 908(v)s 6(alue)k +8247(.)s 0 4871(\213)m 480(The)s 908(v)s 6(alue)k 1476(of)s 1747(the)s gsave -2095 3888 translate +2095 4925 translate 0.6953 1.0000 scale 240 fnt31 0 -52(LOGNAME)m grestore 2855(\(or)s gsave -3193 3888 translate +3193 4925 translate 0.6953 1.0000 scale 240 fnt31 0 -52(USER)m grestore 3593(\))s 3721(en)s 9(vironment)k 4981(v)s 6(ariable)k 5800(as)s 6050(passed)s 6746(to)s -6985(the)s 7333(client)s 7923(will)s 8349(be)s 480 3594(used)m +6985(the)s 7333(client)s 7923(will)s 8349(be)s 480 4631(used)m 977(as)s 1227(the)s 1575(login)s 2124(name)s 2698(of)s 2969(the)s 3317(calling)s 4020(user)s 4478(if)s 4695(the)s 5043(uid)s 5407(of)s 5678(the)s 6026(calling)s 6729(process)s -7497(matches)s 8331(the)s 8679(uid)s 480 3354(corresponding)m 1902(to)s +7497(matches)s 8331(the)s 8679(uid)s 480 4391(corresponding)m 1902(to)s 2141(that)s 2559(login)s 3108(name.)s 3730(Otherwise)s 4768(the)s 5116(calling)s 5819(uid')s 13(s)k 6335(passw)s 2(ord)k -7295(entry)s 7840(will)s 8266(be)s 8548(used)s 480 3114(to)m -719(determine)s 1730(the)s 2078(calling)s 2781(user')s 13(s)k -3389(login)s 3938(name.)s 480 2706(This)m 956(login)s 1505(name)s -2079(and)s 2483(the)s 2831(calling)s 3534(uid)s 3898(are)s -4245(a)s 4(v)k 6(ailable)k 5153(in)s 5396(the)s -5744(con\207guration)s 7077(language)s 7997(in)s 8240(the)s gsave -480 2520 translate +7295(entry)s 7840(will)s 8266(be)s 8548(used)s 480 4151(to)m +708(determine)s 1708(the)s 2045(calling)s 2737(user')s 13(s)k +3334(login)s 3872(name.)s 4543(This)s 5007(login)s 5545(name)s +6108(and)s 6501(the)s 6838(calling)s 7530(uid)s 7883(are)s +8218(a)s 4(v)k 6(ailable)k 480 3911(in)m 723(the)s +1071(con\207guration)s 2404(language)s 3324(in)s 3567(the)s gsave +3915 3965 translate 0.6953 1.0000 scale 240 fnt31 0 -52(calling\211user)m grestore -1741 2466(parameter)m 2755(and)s 3159(are)s 3506(passed)s -4202(to)s 4441(the)s 4789(service)s 5521(program)s 6391(in)s -6634(en)s 9(vironment)k 7894(v)s 6(ariables)k gsave -480 2280 translate +5176(parameter)s 6190(and)s 6594(are)s 6941(passed)s +7637(to)s 7876(the)s 8224(service)s 480 3671(program)m 1334(in)s +1561(en)s 9(vironment)k 2805(v)s 6(ariables)k gsave +3696 3725 translate 0.6953 1.0000 scale 240 fnt31 0 -52(USERV_USER)m grestore -1541 2226(and)m gsave -1945 2280 translate +4741(and)s gsave +5129 3725 translate 0.6953 1.0000 scale 240 fnt31 0 -52(USERV_UID)m grestore -2846(.)s -480 1818(The)m 901(shell)s 1400(corresponding)s 2815(to)s 3047(that)s -3458(login)s 4000(name)s 4567(\(according)s 5635(to)s 5867(the)s -6208(passw)s 2(ord)k 7161(entry\))s 7773(is)s 7976(a)s 4(v)k 6(ailable)k -8876(as)s 480 1578(in)m 723(the)s 1071(con\207guration)s 2404(language')s 13(s)k +6030(.)s +6178(The)s 6590(shell)s 7080(corresponding)s 8486(to)s 8708(that)s +480 3431(login)m 1023(name)s 1591(\(according)s 2659(to)s 2892(the)s +3233(passw)s 2(ord)k 4187(entry\))s 4799(is)s 5003(a)s 4(v)k 6(ailable)k +5904(as)s 6148(in)s 6384(the)s 6726(con\207guration)s 8052(language')s 13(s)k gsave -3478 1632 translate +480 3245 translate 0.6953 1.0000 scale 240 fnt31 0 -52(calling\211user\211shell)m grestore -5340(parameter)s 13(.)k 480 1170(If)m -710(no)s 1003(rele)s 6(v)k 6(ant)k 1820(passw)s 2(ord)k -2780(entry)s 3325(can)s 3714(be)s 3996(found)s 4613(then)s -5082(no)s 5375(service)s 6107(will)s 6533(be)s 6815(in)s 9(v)k 4(ok)k 2(ed.)k -0 715(\213)m 480(The)s 908(numeric)s 1744(v)s 6(alues)k +2342 3191(parameter)m 13(.)k 3447(If)s +3677(no)s 3970(rele)s 6(v)k 6(ant)k 4787(passw)s 2(ord)k +5747(entry)s 6292(can)s 6681(be)s 6963(found)s 7580(then)s +8049(no)s 8342(service)s 480 2951(will)m 906(be)s 1188(in)s 9(v)k 4(ok)k 2(ed.)k +0 2545(\213)m 480(The)s 908(numeric)s 1744(v)s 6(alues)k 2400(and)s 2804(te)s 3(xtual)k 3506(names)s 4168(for)s 4506(calling)s 5209(gid)s 5573(and)s 5977(supplementary)s 7439(group)s -8051(list)s 8402(are)s 0 52(0.62)m 4809(User)s 5320(service)s -6052(daemon)s 6867(and)s 7271(client)s 7861(speci\207cation)s +8051(list)s 8402(are)s 480 2305(a)m 4(v)k 6(ailable)k +1380(in)s 1615(the)s 1955(con\207guration)s 3280(language)s 4192(in)s +4427(the)s gsave +4766 2359 translate +0.6953 1.0000 scale +240 fnt31 0 -52(calling\211group)m +grestore +6119(parameter)s 7125(and)s +7521(are)s 7860(passed)s 8548(to)s 8778(the)s 480 2065(service)m +1212(in)s 1455(en)s 9(vironment)k 2715(v)s 6(ariables.)k +3735(If)s 3965(no)s 4258(name)s 4832(can)s 5221(be)s +5503(found)s 6120(for)s 6458(a)s 6624(numeric)s 7460(group)s +8072(to)s 8311(which)s 480 1825(the)m 828(calling)s 1531(process)s +2299(belongs)s 3095(then)s 3564(no)s 3857(service)s 4589(will)s +5015(be)s 5297(in)s 9(v)k 4(ok)k 2(ed.)k +0 1370(\213)m 480(The)s 908(name)s 1482(of)s 1753(the)s +2101(current)s 2837(w)s 2(orking)k 3686(directory)s 4602(in)s +4845(which)s 5487(the)s 5835(client)s 6425(w)s 2(as)k +6846(in)s 9(v)k 4(ok)k 2(ed)k 7661(is)s +7871(passed,)s 8616(if)s 480 1130(a)m 4(v)k 6(ailable)k +1388(and)s 1792(not)s 2158(hidden)s 2867(using)s gsave +3439 1184 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(\211\211hidecwd)m +grestore +4340(,)s 4447(to)s 4686(the)s 5034(service)s +5766(program)s 6636(in)s 6879(the)s gsave +7227 1184 translate +0.6953 1.0000 scale +240 fnt31 0 -52(USERV_CWD)m + +grestore +8188(v)s 6(ariable.)k 480 890(This)m 946(grants)s 1570(no)s +1852(special)s 2560(access)s 3210(to)s 3438(that)s 3846(directory)s +4751(unless)s 5389(it)s 5571(is)s 5770(a)s 5925(subdirectory)s +7164(of)s 7424(a)s 7579(directory)s 8484(which)s 0 52(User)m +511(service)s 1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s +8491(0.64.1)s grestore grestore @@ -4961,7 +4973,7 @@ pgsave restore showpage -%%Page: 19 19 +%%Page: 18 18 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -4990,103 +5002,67 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -1 LoutMargSet -grestore -240 fnt84 8832 13842(19)m 240 fnt82 480 13251(a)m 4(v)k 6(ailable)k -1380(in)s 1615(the)s 1955(con\207guration)s 3280(language)s 4192(in)s -4427(the)s gsave -4766 13305 translate -0.6953 1.0000 scale -240 fnt31 0 -52(calling\211group)m -grestore -6119(parameter)s 7125(and)s -7521(are)s 7860(passed)s 8548(to)s 8778(the)s 480 13011(service)m -1212(in)s 1455(en)s 9(vironment)k 2715(v)s 6(ariables.)k -480 12603(If)m 710(no)s 1003(name)s 1577(can)s 1966(be)s -2248(found)s 2865(for)s 3203(a)s 3369(numeric)s 4205(group)s -4817(to)s 5056(which)s 5698(the)s 6046(calling)s 6749(process)s -7517(belongs)s 8313(then)s 8782(no)s 480 12363(service)m 1212(will)s -1638(be)s 1920(in)s 9(v)k 4(ok)k 2(ed.)k -0 11957(\213)m 480(The)s 908(name)s 1482(of)s 1753(the)s -2101(current)s 2837(w)s 2(orking)k 3686(directory)s 4602(in)s -4845(which)s 5487(the)s 5835(client)s 6425(w)s 2(as)k -6846(in)s 9(v)k 4(ok)k 2(ed)k 7661(is)s -7871(passed,)s 8616(if)s 480 11717(a)m 4(v)k 6(ailable)k -1388(and)s 1792(not)s 2158(hidden)s 2867(using)s gsave -3439 11771 translate -0.6953 1.0000 scale -240 fnt31 -0 -52(\211\211hidecwd)m +0 LoutMargSet grestore -4340(,)s 4447(to)s 4686(the)s 5034(service)s -5766(program)s 6636(in)s 6879(the)s gsave -7227 11771 translate +240 fnt84 0 13842(18)m 240 fnt82 480 13251(is)m 690(e)s 3(x)k 3(ecutable)k +1762(\(searchable\))s 2977(b)s 4(ut)k 3339(not)s 3705(readable)s +4570(by)s 4864(the)s 5212(service)s 5944(user)s 13(.)k +0 12794(\213)m 480(Settings)s 1301(speci\207ed)s 2209(by)s 2503(the)s +2851(caller)s 3440(using)s 4012(the)s gsave +4360 12848 translate 0.6953 1.0000 scale -240 fnt31 0 -52(USERV_CWD)m - -grestore -8188(v)s 6(ariable.)k 480 11477(This)m 946(grants)s 1570(no)s -1852(special)s 2560(access)s 3210(to)s 3438(that)s 3846(directory)s -4751(unless)s 5389(it)s 5571(is)s 5770(a)s 5925(subdirectory)s -7164(of)s 7424(a)s 7579(directory)s 8484(which)s 480 11237(is)m -690(e)s 3(x)k 3(ecutable)k 1762(\(searchable\))s 2977(b)s 4(ut)k -3339(not)s 3705(readable)s 4570(by)s 4864(the)s 5212(service)s -5944(user)s 13(.)k 0 10780(\213)m 480(Settings)s 1301(speci\207ed)s -2209(by)s 2503(the)s 2851(caller)s 3440(using)s 4012(the)s +240 fnt31 0 -52(\211\211defvar)m gsave -4360 10834 translate -0.6953 1.0000 scale -240 fnt31 0 -52(\211\211defvar)m gsave 1295 0 translate 1.4219 1.0000 scale 240 fnt83 0 -52(name)m grestore -2023(=)s -gsave +2023(=)s gsave 2167 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(value)m +240 fnt83 0 -52(value)m + grestore grestore -6432(option)s 7101(to)s 7340(the)s -7688(client)s 8278(are)s 480 10540(a)m 4(v)k 6(ailable)k -1388(in)s 1631(the)s 1979(con\207guration)s 3312(language)s 4232(as)s -4482(the)s 4830(corresponding)s gsave -6252 10594 translate +6432(option)s 7101(to)s 7340(the)s 7688(client)s 8278(are)s +480 12554(a)m 4(v)k 6(ailable)k 1388(in)s 1631(the)s +1979(con\207guration)s 3312(language)s 4232(as)s 4482(the)s 4830(corresponding)s +gsave +6252 12608 translate 0.6953 1.0000 scale 240 fnt31 0 -52(u\211)m gsave 288 0 translate 1.4219 1.0000 scale -240 fnt83 -0 -52(name)m +240 fnt83 0 -52(name)m grestore grestore -7018(parameters)s 8116(and)s 8520(are)s 480 10300(passed)m -1176(to)s 1415(the)s 1763(service)s 2495(program)s 3365(in)s -3608(en)s 9(vironment)k 4868(v)s 6(ariables)k gsave -5775 10354 translate +7018(parameters)s +8116(and)s 8520(are)s 480 12314(passed)m 1176(to)s 1415(the)s +1763(service)s 2495(program)s 3365(in)s 3608(en)s 9(vironment)k +4868(v)s 6(ariables)k gsave +5775 12368 translate 0.6953 1.0000 scale -240 fnt31 -0 -52(USERV_U_)m gsave +240 fnt31 0 -52(USERV_U_)m gsave 1152 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(name)m +240 fnt83 +0 -52(name)m grestore grestore -7082(.)s 0 9845(\213)m -480(If)s 710(the)s 1058(calling)s 1761(user)s 2219(is)s -2429(root)s 2874(or)s 3133(the)s 3481(same)s 4028(as)s -4278(the)s 4626(service)s 5358(user)s 5816(then)s 6285(options)s -7041(may)s 7507(be)s 7789(gi)s 6(v)k 3(en)k -8369(to)s 8608(the)s 480 9605(client)m 1070(which)s 1712(bypass)s -2415(the)s 2763(usual)s 3323(security)s 4133(features;)s 5000(in)s -5243(this)s 5639(case)s 6106(other)s 6657(information)s 7842(may)s -8308(pass)s 480 9365(between)m 1334(the)s 1682(caller)s 2271(and)s -2675(the)s 3023(service.)s 0 52(User)m 511(service)s 1243(daemon)s -2058(and)s 2462(client)s 3052(speci\207cation)s 8652(0.62)s +7082(.)s 0 11859(\213)m 480(If)s 710(the)s +1058(calling)s 1761(user)s 2219(is)s 2429(root)s 2874(or)s +3133(the)s 3481(same)s 4028(as)s 4278(the)s 4626(service)s +5358(user)s 5816(then)s 6285(options)s 7041(may)s 7507(be)s +7789(gi)s 6(v)k 3(en)k 8369(to)s 8608(the)s +480 11619(client)m 1070(which)s 1712(bypass)s 2415(the)s 2763(usual)s +3323(security)s 4133(features;)s 5000(in)s 5243(this)s 5639(case)s +6106(other)s 6657(information)s 7842(may)s 8308(pass)s 480 11379(between)m +1334(the)s 1682(caller)s 2271(and)s 2675(the)s 3023(service.)s +0 52(0.64.1)m 4809(User)s 5320(service)s 6052(daemon)s 6867(and)s +7271(client)s 7861(speci\207cation)s grestore grestore @@ -5094,7 +5070,7 @@ pgsave restore showpage -%%Page: 20 20 +%%Page: 19 19 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -5123,9 +5099,9 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -0 LoutMargSet +1 LoutMargSet grestore -240 fnt84 0 13842(20)m gsave +240 fnt84 8832 13842(19)m gsave 0 12727 translate 240 fnt82 9066 687 0 687 240 240 60 LoutGraphic gsave @@ -5381,8 +5357,8 @@ 1287(daemon')s 13(s)k 2255(queues,)s 3027(and)s 3431(the)s 3779(daemon)s 4594(w)s 2(ould)k 5249(read)s 5718(the)s 6066(\207le)s 6427(later)s 6910(when)s 7486(it)s 7678(felt)s -8055(lik)s 2(e)k 8467(it.)s 0 52(0.62)m 4809(User)s -5320(service)s 6052(daemon)s 6867(and)s 7271(client)s 7861(speci\207cation)s +8055(lik)s 2(e)k 8467(it.)s 0 52(User)m 511(service)s +1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s 8491(0.64.1)s grestore @@ -5391,7 +5367,7 @@ pgsave restore showpage -%%Page: 21 21 +%%Page: 20 20 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -5420,105 +5396,105 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -1 LoutMargSet +0 LoutMargSet grestore -240 fnt84 8839 13842(21)m 240 fnt82 0 13254(Ho)m 6(we)k 6(v)k 3(er)k 9(,)k +240 fnt84 0 13842(20)m 240 fnt82 0 13251(Ho)m 6(we)k 6(v)k 3(er)k 9(,)k 960(this)s 1356(w)s 2(ould)k 2011(allo)s 6(w)k 2590(the)s 2938(printer)s 3634(daemon)s 4449(to)s 4688(read)s 5157(an)s 3(y)k 5554(\207le)s 5915(on)s 6212(the)s -6560(system,)s 7331(whether)s 8161(or)s 8420(not)s 0 13014(someone)m +6560(system,)s 7331(whether)s 8161(or)s 8420(not)s 0 13011(someone)m 907(had)s 1311(ask)s 2(ed)k 1912(for)s 2250(it)s 2442(to)s 2681(be)s 2963(printed.)s 3744(Since)s 4331(man)s 3(y)k 4914(\207les)s 5363(will)s 5789(contain)s 6550(passw)s 2(ords)k -7596(and)s 8000(other)s 0 12774(security-critical)m 1551(information)s 2736(this)s +7596(and)s 8000(other)s 0 12771(security-critical)m 1551(information)s 2736(this)s 3132(is)s 3342(nearly)s 3993(as)s 4243(bad)s 4647(as)s 4897(gi)s 6(ving)k 5556(the)s 5904(daemon)s 6719(root)s -7164(access)s 7825(in)s 8068(the)s 8416(\207rst)s 0 12534(place.)m +7164(access)s 7825(in)s 8068(the)s 8416(\207rst)s 0 12531(place.)m 608(An)s 3(y)k 1072(security)s 1882(holes)s 2438(in)s 2681(the)s 3029(print)s 3540(serv)s 3(er)k 4180(which)s 4822(allo)s 6(w)k 5401(a)s 5567(user)s 6025(to)s 6264(e)s 3(x)k 3(ecute)k 7044(commands)s 8132(as)s 8382(the)s gsave -8730 12588 translate +8730 12585 translate 0.6953 1.0000 scale 240 fnt31 0 -52(lp)m grestore -0 12294(user)m 458(will)s +0 12291(user)m 458(will)s 884(gi)s 6(v)k 3(e)k 1343(the)s 1691(user)s 2149(the)s 2497(ability)s 3161(to)s 3400(read)s 3869(an)s 3(y)k -4266(\207le)s 4627(on)s 4924(the)s 5272(system.)s 0 11886(Instead,)m +4266(\207le)s 4627(on)s 4924(the)s 5272(system.)s 0 11883(Instead,)m 790(it)s 975(is)s 1178(necessary)s 2153(to)s 2385(k)s 2(eep)k 2881(a)s 3040(record)s 3700(of)s 3964(which)s 4599(\207les)s 5040(the)s 5381(daemon)s 6189(has)s 6552(been)s 7053(ask)s 2(ed)k -7647(to)s 7879(print)s 240 fnt83 8382 11888(outside)m 240 fnt82 -0 11646(the)m 348(control)s 1080(of)s 1351(the)s 1699(print)s +7647(to)s 7879(print)s 240 fnt83 8382 11885(outside)m 240 fnt82 +0 11643(the)m 348(control)s 1080(of)s 1351(the)s 1699(print)s 2210(daemon.)s 3072(This)s 3548(record)s 4216(could)s 4806(be)s 5088(k)s 2(ept)k 5558(by)s 5852(a)s 6018(ne)s 6(w)k -6465(root-pri)s 6(vile)k 3(ged)k 7947(component,)s 0 11406(b)m 4(ut)k +6465(root-pri)s 6(vile)k 3(ged)k 7947(component,)s 0 11403(b)m 4(ut)k 352(this)s 737(is)s 936(not)s 1291(necessary:)s 2315(the)s 2652(record)s 3309(of)s 3569(which)s 4200(\207les)s 4638(a)s 4794(user)s 5241(has)s 5600(ask)s 2(ed)k 6190(to)s 6418(be)s 6689(printed)s 7413(can)s 7791(be)s 8062(k)s 2(ept)k -8521(under)s 0 11166(the)m 348(control)s 1080(of)s 1351(the)s +8521(under)s 0 11163(the)m 348(control)s 1080(of)s 1351(the)s 1699(user)s 2157(in)s 2400(question.)s 3315(The)s 3743(submission)s 4877(program)s gsave -5747 11220 translate +5747 11217 translate 0.6953 1.0000 scale 240 fnt31 0 -52(lpr)m grestore 6107(will)s 6533(mak)s 2(e)k 7105(a)s 7271(record)s 7939(in)s 8182(an)s 8465(area)s -0 10926(under)m 605(the)s 953(user')s 13(s)k 1561(control)s +0 10923(under)m 605(the)s 953(user')s 13(s)k 1561(control)s 2293(before)s 2959(communicating)s 4500(with)s 4982(the)s 5330(print)s 5841(serv)s 3(er)k 9(,)k 6519(and)s 6923(the)s 7271(print)s 7782(serv)s 3(er)k 8422(w)s 2(ould)k -0 10686(be)m 279(gi)s 6(v)k 3(en)k 855(the)s +0 10683(be)m 279(gi)s 6(v)k 3(en)k 855(the)s 1199(ability)s 1859(to)s 2094(run)s 2466(a)s 2628(special)s 3342(\207le-reading)s 4493(program)s 5359(which)s 5997(w)s 2(ould)k 6648(only)s 7124(allo)s 6(w)k 7699(\207les)s 8144(to)s -8379(be)s 8657(read)s 0 10446(which)m 642(were)s 1162(listed)s +8379(be)s 8657(read)s 0 10443(which)m 642(were)s 1162(listed)s 1737(in)s 1980(the)s 2328(user')s 13(s)k 2936(\207le)s 3297(of)s 3568(things)s 4204(the)s 3(y')k 12(d)k -4858(ask)s 2(ed)k 5459(to)s 5698(print.)s 0 10038(No)m 6(w)k +4858(ask)s 2(ed)k 5459(to)s 5698(print.)s 0 10035(No)m 6(w)k 502(security)s 1300(holes)s 1844(in)s 2075(most)s 2588(of)s 2846(the)s 3182(printing)s 3980(system)s 4692(do)s 4973(not)s 5327(critically)s 6215(af)s 6(fect)k 6799(the)s 7135(security)s -7933(of)s 8192(the)s 8527(entire)s 0 9798(system:)m 770(the)s 3(y)k +7933(of)s 8192(the)s 8527(entire)s 0 9795(system:)m 770(the)s 3(y)k 1233(only)s 1713(allo)s 6(w)k 2292(the)s 2640(attack)s 2(er)k 3453(to)s 3692(read)s 4161(and)s 4565(interfere)s 5428(with)s 5910(print)s 6421(jobs.)s 6924(Bugs)s 7468(in)s 7711(the)s -8059(programs)s 0 9558(run)m 373(by)s 664(the)s 1009(print)s +8059(programs)s 0 9555(run)m 373(by)s 664(the)s 1009(print)s 1517(serv)s 3(er)k 2154(to)s 2390(read)s 2856(users')s 3456(\207les)s 3902(\(and)s 4382(to)s 4618(remo)s 3(v)k 3(e)k 5382(entries)s 6066(from)s 6587(the)s 6932(list)s 7280(of)s -7548(\207les)s 7994(when)s 8567(it)s 8756(has)s 0 9318(done)m +7548(\207les)s 7994(when)s 8567(it)s 8756(has)s 0 9315(done)m 522(with)s 1004(them\))s 1610(will)s 2036(still)s 2448(be)s 2730(serious,)s 3514(b)s 4(ut)k 3876(this)s 4272(program)s -5142(can)s 5531(be)s 5813(quite)s 6347(simple.)s 0 8910(Similar)m +5142(can)s 5531(be)s 5813(quite)s 6347(simple.)s 0 8907(Similar)m 762(considerations)s 2194(apply)s 2780(to)s 3019(man)s 3(y)k gsave -3602 8964 translate +3602 8961 translate 0.6953 1.0000 scale 240 fnt31 0 -52(userv)m grestore 4102(-based)s 4784(v)s 3(ersions)k 5629(of)s 5900(f)s 2(acilities)k 6769(which)s 7411(currently)s -8327(run)s 0 8670(as)m 250(root.)s 0 8262(It)m 198(is)s +8327(run)s 0 8667(as)m 250(root.)s 0 8259(It)m 198(is)s 401(debatable)s 1366(whether)s 2189(the)s 2530(user)s 4(-controlled)k 4023(state)s 4509(should)s 5199(be)s 5474(k)s 2(ept)k 5937(in)s 6173(the)s 6514(user')s 13(s)k 7115(\207lespace)s -8000(\(in)s 8315(dot\207les,)s 0 8022(say\))m 440(or)s 692(k)s 2(ept)k +8000(\(in)s 8315(dot\207les,)s 0 8019(say\))m 440(or)s 692(k)s 2(ept)k 1155(in)s 1391(a)s 1550(separate)s 2381(area)s 2831(set)s 3149(aside)s 3688(for)s 4019(the)s 4360(purpose;)s 5223(ho)s 6(we)k 6(v)k 3(er)k 9(,)k 6123(using)s 6688(the)s 7029(user')s 13(s)k 7630(home)s -8210(directory)s 0 7782(\(and)m 468(probably)s 1357(creating)s 2164(a)s +8210(directory)s 0 7779(\(and)m 468(probably)s 1357(creating)s 2164(a)s 2314(separate)s 3137(subdirectory)s 4370(of)s 4626(it)s 4802(as)s 5037(a)s 5187(dot\207le)s 5839(to)s 6062(contain)s 6808(man)s 3(y)k -7375(subsystems')s 8561(state\))s 0 7542(has)m 370(fe)s 6(wer)k +7375(subsystems')s 8561(state\))s 0 7539(has)m 370(fe)s 6(wer)k 967(implications)s 2199(for)s 2537(the)s 2885(rest)s 3289(of)s 3560(the)s 3908(system)s 4632(and)s 5036(mak)s 2(es)k 5696(it)s 5888(entirely)s 6671(clear)s 7194(where)s 7834(the)s -8182(security)s 0 7302(boundaries)m 1101(lie.)s 9066 670 0 670 240 240 60 0 6278 LoutGr2 +8182(security)s 0 7299(boundaries)m 1101(lie.)s 9066 670 0 670 240 240 60 0 6275 LoutGr2 newpath 0 ysize 0.3 ft sub moveto xsize 0 rlineto 0 0.1 ft rlineto @@ -5546,45 +5522,45 @@ grestore gsave -0 5870 translate +0 5867 translate 0.6953 1.0000 scale 240 fnt31 0 -52(userv)m grestore -560 5816(is)m 770(not)s 1136(intended)s 2018(as)s +560 5813(is)m 770(not)s 1136(intended)s 2018(as)s 2268(a)s 2434(general-purpose)s 4030(system)s 4754(administration)s 6191(tool)s -6618(with)s 7100(which)s 7742(system)s 0 5576(administrators)m 1398(can)s +6618(with)s 7100(which)s 7742(system)s 0 5573(administrators)m 1398(can)s 1767(e)s 3(x)k 3(ecute)k 2528(pri)s 6(vile)k 3(ged)k 3526(programs)s 4461(when)s 5017(the)s 3(y)k 5461(need)s 5951(to.)s 6222(It)s 6407(is)s 6598(unsuitable)s 7617(for)s -7936(this)s 8312(purpose)s 0 5336(precisely)m 916(because)s 1729(it)s +7936(this)s 8312(purpose)s 0 5333(precisely)m 916(because)s 1729(it)s 1921(enforces)s 2781(a)s 2947(strong)s 3598(separation)s 4637(between)s 5491(the)s 5839(calling)s 6542(and)s 6946(the)s 7294(called)s -7922(program,)s 0 5096(which)m 642(is)s 852(undesirable)s 2010(in)s -2253(this)s 2649(conte)s 3(xt.)k 0 4688(Its)m 289(f)s 2(acilities)k +7922(program,)s 0 5093(which)m 642(is)s 852(undesirable)s 2010(in)s +2253(this)s 2649(conte)s 3(xt.)k 0 4685(Its)m 289(f)s 2(acilities)k 1158(for)s 1496(restricting)s 2516(acti)s 6(vities)k 3422(to)s 3661(running)s 4459(certain)s 5165(programs)s 6119(may)s 6585(at)s -6817(\207rst)s 7248(glance)s 7928(seem)s 8479(to)s 0 4420(pro)m 3(vide)k +6817(\207rst)s 7248(glance)s 7928(seem)s 8479(to)s 0 4417(pro)m 3(vide)k 769(similar)s 1476(functionality)s 2736(to)s gsave -2960 4474 translate +2960 4471 translate 0.6953 1.0000 scale 240 fnt31 0 -52(sudo)m grestore -153 fnt82 3360 4509(1)m 240 fnt82 3420 4420(.)m 3509(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k +153 fnt82 3360 4506(1)m 240 fnt82 3420 4417(.)m 3509(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k 4454(the)s 4787(separation)s 5811(mentioned)s 6864(abo)s 3(v)k 3(e)k -7471(is)s 7666(a)s 7817(problem)s 8659(here)s 0 4180(too,)m +7471(is)s 7666(a)s 7817(problem)s 8659(here)s 0 4177(too,)m 413(particular)s 1387(for)s 1725(interaction)s 2803(-)s 2931(it)s 3123(can)s 3512(be)s 3794(hard)s 4277(for)s 4615(a)s gsave -4781 4234 translate +4781 4231 translate 0.6953 1.0000 scale 240 fnt31 0 -52(userv)m grestore 5341(service)s 6073(program)s 6943(to)s -7182(interact)s 7957(with)s 8439(its)s 8714(real)s 0 3940(caller)m +7182(interact)s 7957(with)s 8439(its)s 8714(real)s 0 3937(caller)m 589(or)s 848(the)s 1196(user)s 1654(in)s 1897(question.)s -9066 670 0 670 240 240 60 0 2916 LoutGr2 +9066 670 0 670 240 240 60 0 2913 LoutGr2 newpath 0 ysize 0.3 ft sub moveto xsize 0 rlineto 0 0.1 ft rlineto @@ -5595,36 +5571,36 @@ 2107(access)s 3013(to)s 3352(general-pur)s 3(pose)k 5640(utilities)s grestore -0 2454(Do)m 346(not)s 712(specify)s 1456(general)s 2214(purpose)s +0 2451(Do)m 346(not)s 712(specify)s 1456(general)s 2214(purpose)s 3028(programs)s 3982(lik)s 2(e)k gsave -4394 2508 translate +4394 2505 translate 0.6953 1.0000 scale 240 fnt31 0 -52(mv)m grestore 4654(or)s gsave -4913 2508 translate +4913 2505 translate 0.6953 1.0000 scale 240 fnt31 0 -52(cat)m grestore 5273(in)s gsave -5516 2508 translate +5516 2505 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211)m grestore 6377(directi)s 6(v)k 3(es)k 7347(without)s -8138(careful)s 0 2214(thought)m 792(about)s 1384(their)s 1881(ar)s 4(guments,)k +8138(careful)s 0 2211(thought)m 792(about)s 1384(their)s 1881(ar)s 4(guments,)k 2980(and)s 3384(certainly)s 4273(not)s 4639(if)s gsave -4856 2268 translate +4856 2265 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211suppress\211args)m grestore 6518(is)s 6728(speci\207ed.)s 7682(If)s 7912(you)s -8327(do)s 8620(so)s 8886(it)s 0 1974(will)m 426(gi)s 6(v)k 3(e)k +8327(do)s 8620(so)s 8886(it)s 0 1971(will)m 426(gi)s 6(v)k 3(e)k 885(the)s 1233(caller)s 1822(much)s 2411(more)s 2958(pri)s 6(vilige)k -3817(than)s 4286(you)s 4701(probably)s 5606(intend.)s 0 1566(It)m +3817(than)s 4286(you)s 4701(probably)s 5606(intend.)s 0 1563(It)m 205(is)s 415(a)s 581(shame)s 1248(that)s 1666(I)s 1801(ha)s 4(v)k 3(e)k 2302(to)s 2541(say)s 2914(this)s 3310(here,)s 3828(b)s 4(ut)k 4190(ine)s 3(xperienced)k @@ -5645,8 +5621,8 @@ 3723(certain)s 4289(programs)s 5052(as)s 5252(root,)s 5646(according)s 6444(to)s 6636(con\207guration)s 7703(\207les)s 8062(speci\207ed)s 8789(by)s 0 683(the)m 279(system)s 858(administrator)s 10(.)k 240 fnt82 -0 52(User)m 511(service)s 1243(daemon)s 2058(and)s 2462(client)s -3052(speci\207cation)s 8652(0.62)s +0 52(0.64.1)m 4809(User)s 5320(service)s 6052(daemon)s 6867(and)s +7271(client)s 7861(speci\207cation)s grestore grestore @@ -5654,7 +5630,7 @@ pgsave restore showpage -%%Page: 22 22 +%%Page: 21 21 %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold @@ -5682,17 +5658,17 @@ 1417 -15423 translate 240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic gsave -0 LoutMargSet +1 LoutMargSet grestore -240 fnt84 0 13842(22)m 240 fnt82 0 13254(mistak)m 2(es)k +240 fnt84 8839 13842(21)m 240 fnt82 0 13254(mistak)m 2(es)k 885(with)s 1367(programs)s 2321(lik)s 2(e)k gsave 2733 13308 translate 0.6953 1.0000 scale 240 fnt31 0 -52(sudo)m grestore -3133(.)s 0 52(0.62)m 4809(User)s 5320(service)s -6052(daemon)s 6867(and)s 7271(client)s 7861(speci\207cation)s +3133(.)s 0 52(User)m 511(service)s 1243(daemon)s +2058(and)s 2462(client)s 3052(speci\207cation)s 8491(0.64.1)s grestore grestore @@ -5708,5 +5684,5 @@ %%DocumentSuppliedResources: procset LoutStartUp %%+ procset LoutMarginNotes %%+ encoding vec2 -%%Pages: 22 +%%Pages: 21 %%EOF diff -ruN userv-0.62/spec.sgml userv-0.64.1/spec.sgml --- userv-0.62/spec.sgml Sun Apr 18 20:09:44 1999 +++ userv-0.64.1/spec.sgml Sun Jun 20 19:14:36 1999 @@ -3,7 +3,7 @@ User service daemon and client specification <author>Ian Jackson <email>ian@davenant.greenend.org.uk -<version>0.62</version> +<version>0.64.1</version> <abstract> This is a specification for a Unix system facility to allow one diff -ruN userv-0.62/tokens.h userv-0.64.1/tokens.h --- userv-0.62/tokens.h Sun Apr 18 19:15:25 1999 +++ userv-0.64.1/tokens.h Thu May 20 00:14:02 1999 @@ -98,61 +98,62 @@ toki_word_version= 0x0000002d, toki_word_toplevel= 0x0000002e, toki_word_override= 0x0000002f, - toki_word_reset= 0x00000030, - toki_word_execute= 0x00000031, - toki_word_help= 0x00000032, - toki_word_service= 0x00000033, - toki_word_callinguser= 0x00000034, - toki_word_callinggroup= 0x00000035, - toki_word_callingusershell= 0x00000036, - toki_word_serviceuser= 0x00000037, - toki_word_servicegroup= 0x00000038, - toki_word_serviceusershell= 0x00000039, - toki_syslog_debug= 0x0000003a, - toki_syslog_info= 0x0000003b, - toki_syslog_notice= 0x0000003c, - toki_syslog_warning= 0x0000003d, - toki_syslog_err= 0x0000003e, - toki_syslog_crit= 0x0000003f, - toki_syslog_alert= 0x00000040, - toki_syslog_emerg= 0x00000041, - toki_syslog_authpriv= 0x00000042, - toki_syslog_cron= 0x00000043, - toki_syslog_daemon= 0x00000044, - toki_syslog_kern= 0x00000045, - toki_syslog_lpr= 0x00000046, - toki_syslog_mail= 0x00000047, - toki_syslog_news= 0x00000048, - toki_syslog_syslog= 0x00000049, - toki_syslog_user= 0x0000004a, - toki_syslog_uucp= 0x0000004b, - toki_syslog_local0= 0x0000004c, - toki_syslog_local1= 0x0000004d, - toki_syslog_local2= 0x0000004e, - toki_syslog_local3= 0x0000004f, - toki_syslog_local4= 0x00000050, - toki_syslog_local5= 0x00000051, - toki_syslog_local6= 0x00000052, - toki_syslog_local7= 0x00000053, - toki_word_read= 0x00000054, - toki_word_write= 0x00000055, - toki_ordinal= 0x00000056, - toki_fdrange= 0x00000057, - toki_fdstoend= 0x00000058, - toki_dollar= 0x00000059, - toki_lwsp= 0x0000005a, - toki_newline= 0x0000005b, - toki_barestring= 0x0000005c, - toki_quotedstring= 0x0000005d, - toki_eof= 0x0000005e, - toki_quit= 0x0000005f, - toki_error= 0x00000060, - toki_openparen= 0x00000061, - toki_closeparen= 0x00000062, - toki_not= 0x00000063, - toki_and= 0x00000064, - toki_or= 0x00000065, - toki_word_error= 0x00000066, + toki_word_shutdown= 0x00000030, + toki_word_reset= 0x00000031, + toki_word_execute= 0x00000032, + toki_word_help= 0x00000033, + toki_word_service= 0x00000034, + toki_word_callinguser= 0x00000035, + toki_word_callinggroup= 0x00000036, + toki_word_callingusershell= 0x00000037, + toki_word_serviceuser= 0x00000038, + toki_word_servicegroup= 0x00000039, + toki_word_serviceusershell= 0x0000003a, + toki_syslog_debug= 0x0000003b, + toki_syslog_info= 0x0000003c, + toki_syslog_notice= 0x0000003d, + toki_syslog_warning= 0x0000003e, + toki_syslog_err= 0x0000003f, + toki_syslog_crit= 0x00000040, + toki_syslog_alert= 0x00000041, + toki_syslog_emerg= 0x00000042, + toki_syslog_authpriv= 0x00000043, + toki_syslog_cron= 0x00000044, + toki_syslog_daemon= 0x00000045, + toki_syslog_kern= 0x00000046, + toki_syslog_lpr= 0x00000047, + toki_syslog_mail= 0x00000048, + toki_syslog_news= 0x00000049, + toki_syslog_syslog= 0x0000004a, + toki_syslog_user= 0x0000004b, + toki_syslog_uucp= 0x0000004c, + toki_syslog_local0= 0x0000004d, + toki_syslog_local1= 0x0000004e, + toki_syslog_local2= 0x0000004f, + toki_syslog_local3= 0x00000050, + toki_syslog_local4= 0x00000051, + toki_syslog_local5= 0x00000052, + toki_syslog_local6= 0x00000053, + toki_syslog_local7= 0x00000054, + toki_word_read= 0x00000055, + toki_word_write= 0x00000056, + toki_ordinal= 0x00000057, + toki_fdrange= 0x00000058, + toki_fdstoend= 0x00000059, + toki_dollar= 0x0000005a, + toki_lwsp= 0x0000005b, + toki_newline= 0x0000005c, + toki_barestring= 0x0000005d, + toki_quotedstring= 0x0000005e, + toki_eof= 0x0000005f, + toki_quit= 0x00000060, + toki_error= 0x00000061, + toki_openparen= 0x00000062, + toki_closeparen= 0x00000063, + toki_not= 0x00000064, + toki_and= 0x00000065, + toki_or= 0x00000066, + toki_word_error= 0x00000067, tokv_word_reject= tokt_directive|tokt_execmode|tokr_word|toki_word_reject, tokv_word_executefromdirectory=tokt_directive|tokt_execmode|tokr_word|toki_word_executefromdirectory, @@ -201,6 +202,7 @@ tokv_word_version= tokt_builtinservice|tokr_word|toki_word_version, tokv_word_toplevel= tokt_builtinservice|tokr_word|toki_word_toplevel, tokv_word_override= tokt_builtinservice|tokr_word|toki_word_override, + tokv_word_shutdown= tokt_builtinservice|tokr_word|toki_word_shutdown, tokv_word_reset= tokt_builtinservice|tokt_directive|tokr_word|toki_word_reset, tokv_word_execute= tokt_builtinservice|tokt_directive|tokt_execmode|tokr_word|toki_word_execute, tokv_word_help= tokt_builtinservice|tokr_word|toki_word_help,