From 8f065f788b3af333c7c61236e33b6571b62b0c0d Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 28 Aug 2002 02:11:24 +0000 Subject: Some debugs for panic_action. --- source/lib/util.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/source/lib/util.c b/source/lib/util.c index bf012b97219..377457a7143 100644 --- a/source/lib/util.c +++ b/source/lib/util.c @@ -1140,8 +1140,18 @@ something really nasty happened - panic! void smb_panic(char *why) { char *cmd = lp_panic_action(); + int result; + if (cmd && *cmd) { - system(cmd); + DEBUG(0, ("smb_panic(): calling panic action [%s]\n", cmd)); + result = system(cmd); + + if (result == -1) + DEBUG(0, ("smb_panic(): fork failed in panic action: %s\n", + strerror(errno))); + else + DEBUG(0, ("smb_panic(): action returned status %d\n", + WEXITSTATUS(result))); } DEBUG(0,("PANIC: %s\n", why)); dbgflush(); -- cgit From 739bc21429fee6ceb7430eb6c5e63882f6d4f030 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 28 Aug 2002 04:19:15 +0000 Subject: Merge from 2_2. Volker --- docs/docbook/scripts/strip-links.pl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/docbook/scripts/strip-links.pl b/docs/docbook/scripts/strip-links.pl index d89da23abe9..66bc101e086 100644 --- a/docs/docbook/scripts/strip-links.pl +++ b/docs/docbook/scripts/strip-links.pl @@ -1,13 +1,15 @@ #!/usr/bin/perl -## small script to stirp the tags from +## small script to strip the tags from ## manpages generated from docbook2man. we'll leave ## the and links for now while () { chomp ($_); - $_ =~ s/\s*\s*//g; + $_ =~ s/\s*\s+/ /g; + $_ =~ s/\s*\S//g; + $_ =~ s/\s*$//g; print "$_\n"; } -- cgit From b1ab3bec8dc7c5d0873b7a4b4c6fab2d7591c9b3 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 04:21:11 +0000 Subject: Make const --- source/lib/util_seaccess.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/lib/util_seaccess.c b/source/lib/util_seaccess.c index 9fdf03adfc8..5aef69e5541 100644 --- a/source/lib/util_seaccess.c +++ b/source/lib/util_seaccess.c @@ -224,7 +224,7 @@ void se_map_standard(uint32 *access_mask, struct standard_mapping *mapping) "Access-Checking" document in MSDN. *****************************************************************************/ -BOOL se_access_check(SEC_DESC *sd, NT_USER_TOKEN *token, +BOOL se_access_check(SEC_DESC *sd, const NT_USER_TOKEN *token, uint32 acc_desired, uint32 *acc_granted, NTSTATUS *status) { -- cgit From 4b7de5ee236c043e6169f137992baf09a95c6f2c Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 04:54:43 +0000 Subject: Put in intermediate version of new SAM system. It's not stable yet, code might be ugly, etc - please don't blame me for anything but instead try to fix the code :-). Compiling of the new sam system can be enabled with the configure option --with-sam Removing passdb/passgrp.c as it's unused fix typo in utils/testparm.c --- source/Makefile.in | 14 +- source/acconfig.h | 1 + source/configure | 1659 ++++++++++++++++++++------------------- source/configure.in | 16 + source/groupdb/aliasdb.c | 4 +- source/groupdb/groupdb.c | 4 +- source/include/config.h.in | 3 +- source/include/debug.h | 5 +- source/include/includes.h | 4 + source/include/sam.h | 258 ++++++ source/lib/debug.c | 1 + source/lib/time.c | 6 + source/passdb/passgrp.c | 219 ------ source/rpc_server/srv_samr_nt.c | 4 +- source/sam/account.c | 301 +++++++ source/sam/get_set_domain.c | 263 +++++++ source/sam/get_set_group.c | 123 +++ source/sam/get_set_user.c | 903 +++++++++++++++++++++ source/sam/interface.c | 1001 +++++++++++++++++++++++ source/utils/testparm.c | 2 +- 20 files changed, 3741 insertions(+), 1050 deletions(-) create mode 100644 source/include/sam.h delete mode 100644 source/passdb/passgrp.c create mode 100644 source/sam/account.c create mode 100644 source/sam/get_set_domain.c create mode 100644 source/sam/get_set_group.c create mode 100644 source/sam/get_set_user.c create mode 100644 source/sam/interface.c diff --git a/source/Makefile.in b/source/Makefile.in index 7b958d03c5d..e5156d7b184 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -214,8 +214,12 @@ PASSDB_GET_SET_OBJ = passdb/pdb_get_set.o PASSDB_OBJ = $(PASSDB_GET_SET_OBJ) passdb/passdb.o passdb/pdb_interface.o \ passdb/machine_sid.o passdb/pdb_smbpasswd.o \ passdb/pdb_tdb.o passdb/pdb_ldap.o passdb/pdb_plugin.o \ - passdb/pdb_nisplus.o passdb/pdb_unix.o passdb/util_sam_sid.o \ - passdb/pdb_compat.o + passdb/pdb_unix.o passdb/util_sam_sid.o \ + passdb/pdb_compat.o passdb/pdb_nisplus.o + +SAM_OBJ = sam/account.o sam/get_set_user.o sam/get_set_group.o sam/get_set_domain.o sam/interface.o + +SAMTEST_OBJ = torture/samtest.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) $(READLINE_OBJ) GROUPDB_OBJ = groupdb/mapping.o @@ -446,7 +450,7 @@ PROTO_OBJ = $(SMBD_OBJ_MAIN) \ $(PRINTING_OBJ) $(PRINTBACKEND_OBJ) $(OPLOCK_OBJ) $(NOTIFY_OBJ) \ $(QUOTAOBJS) $(PASSDB_OBJ) $(GROUPDB_OBJ) $(MSDFS_OBJ) \ $(READLINE_OBJ) $(PROFILE_OBJ) $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) \ - $(LIB_SMBD_OBJ) + $(LIB_SMBD_OBJ) $(SAM_OBJ) NSS_OBJ_0 = nsswitch/wins.o $(PARAM_OBJ) $(UBIQX_OBJ) $(LIBSMB_OBJ) \ $(LIB_OBJ) $(NSSWINS_OBJ) @@ -675,6 +679,10 @@ bin/pdbedit: $(PDBEDIT_OBJ) bin/.dummy @echo Linking $@ @$(CC) $(FLAGS) -o $@ $(PDBEDIT_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) @BUILD_POPT@ +bin/samtest: $(SAMTEST_OBJ) bin/.dummy + @echo Linking $@ + @$(CC) $(FLAGS) -o $@ $(SAMTEST_OBJ) $(LDFLAGS) $(DYNEXP) $(TERMLDFLAGS) $(TERMLIBS) $(DYNEXP) $(LIBS) @BUILD_POPT@ + bin/smbgroupedit: $(SMBGROUPEDIT_OBJ) bin/.dummy @echo Linking $@ @$(CC) $(FLAGS) -o $@ $(SMBGROUPEDIT_OBJ) $(LDFLAGS) $(LIBS) diff --git a/source/acconfig.h b/source/acconfig.h index 64fbe1d7197..11db920e263 100644 --- a/source/acconfig.h +++ b/source/acconfig.h @@ -166,6 +166,7 @@ #undef MMAP_BLACKLIST #undef HAVE_IMMEDIATE_STRUCTURES #undef HAVE_CUPS +#undef WITH_SAM #undef WITH_LDAP_SAM #undef WITH_NISPLUS_SAM #undef WITH_TDB_SAM diff --git a/source/configure b/source/configure index 431edcbe355..bc494a16636 100755 --- a/source/configure +++ b/source/configure @@ -56,6 +56,8 @@ ac_help="$ac_help --with-pam Include PAM support (default=no)" ac_help="$ac_help --with-pam_smbpass Build a PAM module to allow other applications to use our smbpasswd file (default=no)" +ac_help="$ac_help + --with-sam Build new (experimental) SAM database (default=no)" ac_help="$ac_help --with-tdbsam Include experimental TDB SAM support (default=no)" ac_help="$ac_help @@ -814,7 +816,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:818: checking for $ac_word" >&5 +echo "configure:820: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -844,7 +846,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:848: checking for $ac_word" >&5 +echo "configure:850: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -895,7 +897,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:899: checking for $ac_word" >&5 +echo "configure:901: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -927,7 +929,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:931: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:933: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -938,12 +940,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 942 "configure" +#line 944 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -969,12 +971,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:973: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:975: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:978: checking whether we are using GNU C" >&5 +echo "configure:980: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -983,7 +985,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:987: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:989: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1002,7 +1004,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1006: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1008: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1064,7 +1066,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1068: checking for a BSD compatible install" >&5 +echo "configure:1070: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1116,12 +1118,12 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -for ac_prog in gawk mawk nawk awk +for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1125: checking for $ac_word" >&5 +echo "configure:1127: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1153,7 +1155,7 @@ done LD=ld echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1157: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1159: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1169,7 +1171,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1173: checking for POSIXized ISC" >&5 +echo "configure:1175: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1192,10 +1194,10 @@ fi if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:1196: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:1198: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:1199: checking whether cc understands -c and -o together" >&5 +echo "configure:1201: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -1207,16 +1209,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:1211: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1212: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:1213: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1214: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1222: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -1250,20 +1252,20 @@ fi echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6 -echo "configure:1254: checking that the C compiler understands volatile" >&5 +echo "configure:1256: checking that the C compiler understands volatile" >&5 if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { volatile int i = 0 ; return 0; } EOF -if { (eval echo configure:1267: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1269: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_volatile=yes else @@ -1312,7 +1314,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1316: checking host system type" >&5 +echo "configure:1318: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1333,7 +1335,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1337: checking target system type" >&5 +echo "configure:1339: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1351,7 +1353,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1355: checking build system type" >&5 +echo "configure:1357: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1385,7 +1387,7 @@ esac echo $ac_n "checking config.cache system type""... $ac_c" 1>&6 -echo "configure:1389: checking config.cache system type" >&5 +echo "configure:1391: checking config.cache system type" >&5 if { test x"${ac_cv_host_system_type+set}" = x"set" && test x"$ac_cv_host_system_type" != x"$host"; } || { test x"${ac_cv_build_system_type+set}" = x"set" && @@ -1413,7 +1415,7 @@ case "$host_os" in *hpux*) echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6 -echo "configure:1417: checking whether ${CC-cc} accepts -Ae" >&5 +echo "configure:1419: checking whether ${CC-cc} accepts -Ae" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1574,14 +1576,14 @@ EOF *sysv4*) if test $host = mips-sni-sysv4 ; then echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1578: checking for LFS support" >&5 +echo "configure:1580: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then SINIX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1593,7 +1595,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1597: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1599: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then SINIX_LFS_SUPPORT=yes else @@ -1624,14 +1626,14 @@ EOF # *linux*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1628: checking for LFS support" >&5 +echo "configure:1630: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then LINUX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1669,7 +1671,7 @@ main() { } EOF -if { (eval echo configure:1673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then LINUX_LFS_SUPPORT=yes else @@ -1702,14 +1704,14 @@ EOF *hurd*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1706: checking for LFS support" >&5 +echo "configure:1708: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then GLIBC_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1721,7 +1723,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then GLIBC_LFS_SUPPORT=yes else @@ -1751,21 +1753,21 @@ EOF esac echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1755: checking for inline" >&5 +echo "configure:1757: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1771: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -1791,7 +1793,7 @@ EOF esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1795: checking how to run the C preprocessor" >&5 +echo "configure:1797: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1806,13 +1808,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1816: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1818: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1823,13 +1825,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1840,13 +1842,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1850: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1871,12 +1873,12 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1875: checking for ANSI C header files" >&5 +echo "configure:1877: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1884,7 +1886,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1888: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1890: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1901,7 +1903,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1919,7 +1921,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1940,7 +1942,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1951,7 +1953,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1979,12 +1981,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1983: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1985: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -1992,7 +1994,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:1996: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2017,7 +2019,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2021: checking for opendir in -ldir" >&5 +echo "configure:2023: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2025,7 +2027,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2042: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2058,7 +2060,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2062: checking for opendir in -lx" >&5 +echo "configure:2064: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2066,7 +2068,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2100,12 +2102,12 @@ fi fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2104: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2106: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2114,7 +2116,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2135,12 +2137,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2139: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2141: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2156,7 +2158,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2180,17 +2182,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2184: checking for $ac_hdr" >&5 +echo "configure:2186: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2194: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2196: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2220,17 +2222,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2224: checking for $ac_hdr" >&5 +echo "configure:2226: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2234: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2236: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2260,17 +2262,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2264: checking for $ac_hdr" >&5 +echo "configure:2266: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2274: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2276: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2300,17 +2302,17 @@ for ac_hdr in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2304: checking for $ac_hdr" >&5 +echo "configure:2306: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2314: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2316: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2340,17 +2342,17 @@ for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h std do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2344: checking for $ac_hdr" >&5 +echo "configure:2346: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2354: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2356: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2380,17 +2382,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2384: checking for $ac_hdr" >&5 +echo "configure:2386: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2394: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2396: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2420,17 +2422,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2424: checking for $ac_hdr" >&5 +echo "configure:2426: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2434: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2436: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2460,17 +2462,17 @@ for ac_hdr in security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2464: checking for $ac_hdr" >&5 +echo "configure:2466: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2474: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2476: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2504,14 +2506,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2517: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2533,17 +2535,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2537: checking for $ac_hdr" >&5 +echo "configure:2539: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2547: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2549: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2573,17 +2575,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2577: checking for $ac_hdr" >&5 +echo "configure:2579: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2587: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2613,17 +2615,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2617: checking for $ac_hdr" >&5 +echo "configure:2619: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2627: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2653,17 +2655,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2657: checking for $ac_hdr" >&5 +echo "configure:2659: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2667: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2669: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2693,17 +2695,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2697: checking for $ac_hdr" >&5 +echo "configure:2699: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2707: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2735,17 +2737,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2739: checking for $ac_hdr" >&5 +echo "configure:2741: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2777,17 +2779,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2781: checking for $ac_hdr" >&5 +echo "configure:2783: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2819,17 +2821,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2823: checking for $ac_hdr" >&5 +echo "configure:2825: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2857,7 +2859,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2861: checking size of int" >&5 +echo "configure:2863: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2865,18 +2867,19 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); - return(0); + exit(0); } EOF -if { (eval echo configure:2880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2896,7 +2899,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2900: checking size of long" >&5 +echo "configure:2903: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2904,18 +2907,19 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); - return(0); + exit(0); } EOF -if { (eval echo configure:2919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2935,7 +2939,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2939: checking size of short" >&5 +echo "configure:2943: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2943,18 +2947,19 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(short)); - return(0); + exit(0); } EOF -if { (eval echo configure:2958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -2975,12 +2980,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:2979: checking for working const" >&5 +echo "configure:2984: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3038: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3050,21 +3055,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3054: checking for inline" >&5 +echo "configure:3059: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3090,14 +3095,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3094: checking whether byte ordering is bigendian" >&5 +echo "configure:3099: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3108,11 +3113,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3123,7 +3128,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3127: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3143,7 +3148,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3180,14 +3185,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3184: checking whether char is unsigned" >&5 +echo "configure:3189: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3244,12 +3249,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3248: checking return type of signal handlers" >&5 +echo "configure:3253: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3266,7 +3271,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3270: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3275: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3285,12 +3290,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3289: checking for uid_t in sys/types.h" >&5 +echo "configure:3294: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3319,12 +3324,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3323: checking for mode_t" >&5 +echo "configure:3328: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3352,12 +3357,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3356: checking for off_t" >&5 +echo "configure:3361: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3385,12 +3390,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3389: checking for size_t" >&5 +echo "configure:3394: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3418,12 +3423,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3422: checking for pid_t" >&5 +echo "configure:3427: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3451,12 +3456,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3455: checking for st_rdev in struct stat" >&5 +echo "configure:3460: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3464,7 +3469,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3468: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3473: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3485,12 +3490,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3489: checking for d_off in dirent" >&5 +echo "configure:3494: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3500,7 +3505,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3504: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3509: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3521,12 +3526,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3525: checking for ino_t" >&5 +echo "configure:3530: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3554,12 +3559,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3558: checking for loff_t" >&5 +echo "configure:3563: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3587,12 +3592,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3591: checking for offset_t" >&5 +echo "configure:3596: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3620,12 +3625,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3624: checking for ssize_t" >&5 +echo "configure:3629: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3653,12 +3658,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3657: checking for wchar_t" >&5 +echo "configure:3662: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3700,7 +3705,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3704: checking for $ac_word" >&5 +echo "configure:3709: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3749,12 +3754,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3753: checking for $ac_func" >&5 +echo "configure:3758: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3803,7 +3808,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3807: checking for dlopen in -ldl" >&5 +echo "configure:3812: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3811,7 +3816,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3852,13 +3857,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3856: checking for immediate structures" >&5 +echo "configure:3861: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3876,7 +3881,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3885: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3899,13 +3904,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3903: checking for unix domain sockets" >&5 +echo "configure:3908: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3920,7 +3925,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3924: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3929: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3942,13 +3947,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3946: checking for socklen_t type" >&5 +echo "configure:3951: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3961,7 +3966,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:3965: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3970: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -3982,13 +3987,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:3986: checking for sig_atomic_t type" >&5 +echo "configure:3991: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4001,7 +4006,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4005: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4024,20 +4029,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4028: checking for errno declaration" >&5 +echo "configure:4033: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4041: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4046: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4059,20 +4064,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4063: checking for setresuid declaration" >&5 +echo "configure:4068: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4076: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4094,20 +4099,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4098: checking for setresgid declaration" >&5 +echo "configure:4103: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4111: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4116: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4129,20 +4134,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4133: checking for asprintf declaration" >&5 +echo "configure:4138: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4146: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4151: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4164,20 +4169,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4168: checking for vasprintf declaration" >&5 +echo "configure:4173: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4181: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4186: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4199,20 +4204,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4203: checking for vsnprintf declaration" >&5 +echo "configure:4208: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4216: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4221: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4234,20 +4239,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4238: checking for snprintf declaration" >&5 +echo "configure:4243: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4251: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4256: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4271,7 +4276,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4275: checking for real setresuid" >&5 +echo "configure:4280: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4280,12 +4285,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4310,7 +4315,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4314: checking for real setresgid" >&5 +echo "configure:4319: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4319,13 +4324,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4348,7 +4353,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4352: checking for 8-bit clean memcmp" >&5 +echo "configure:4357: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4356,7 +4361,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4389,12 +4394,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4393: checking for $ac_func" >&5 +echo "configure:4398: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4443,7 +4448,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4447: checking for crypt in -lcrypt" >&5 +echo "configure:4452: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4451,7 +4456,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4495,7 +4500,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4499: checking whether to use readline" >&5 +echo "configure:4504: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4507,17 +4512,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4511: checking for $ac_hdr" >&5 +echo "configure:4516: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4521: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4526: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4547,17 +4552,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4551: checking for $ac_hdr" >&5 +echo "configure:4556: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4561: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4566: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4588,17 +4593,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4592: checking for $ac_hdr" >&5 +echo "configure:4597: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4602: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4621,7 +4626,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4625: checking for tgetent in -l${termlib}" >&5 +echo "configure:4630: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4629,7 +4634,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4662,7 +4667,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4666: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4671: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4670,7 +4675,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4732,17 +4737,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4736: checking for $ac_hdr" >&5 +echo "configure:4741: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4746: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4772,17 +4777,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4776: checking for $ac_hdr" >&5 +echo "configure:4781: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4786: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4813,17 +4818,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4817: checking for $ac_hdr" >&5 +echo "configure:4822: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4827: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4846,7 +4851,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4850: checking for tgetent in -l${termlib}" >&5 +echo "configure:4855: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4854,7 +4859,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4887,7 +4892,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4891: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4896: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4895,7 +4900,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4956,7 +4961,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:4960: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:4965: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4964,7 +4969,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5008,12 +5013,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5012: checking for $ac_func" >&5 +echo "configure:5017: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5045: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5064,7 +5069,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5068: checking for printf in -lnsl_s" >&5 +echo "configure:5073: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5072,7 +5077,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5114,7 +5119,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5118: checking for printf in -lnsl" >&5 +echo "configure:5123: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5122,7 +5127,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5164,7 +5169,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5168: checking for connect in -lsocket" >&5 +echo "configure:5173: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5172,7 +5177,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5214,7 +5219,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5218: checking for connect in -linet" >&5 +echo "configure:5223: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5222,7 +5227,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5277,12 +5282,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5281: checking for $ac_func" >&5 +echo "configure:5286: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5331,7 +5336,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5335: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5340: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5339,7 +5344,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5380,12 +5385,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5384: checking for $ac_func" >&5 +echo "configure:5389: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5441,12 +5446,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5445: checking for $ac_func" >&5 +echo "configure:5450: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5496,12 +5501,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5500: checking for $ac_func" >&5 +echo "configure:5505: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5551,12 +5556,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5555: checking for $ac_func" >&5 +echo "configure:5560: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5606,12 +5611,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5610: checking for $ac_func" >&5 +echo "configure:5615: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5661,12 +5666,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5665: checking for $ac_func" >&5 +echo "configure:5670: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5716,12 +5721,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5720: checking for $ac_func" >&5 +echo "configure:5725: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5771,12 +5776,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5775: checking for $ac_func" >&5 +echo "configure:5780: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5826,12 +5831,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5830: checking for $ac_func" >&5 +echo "configure:5835: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5881,12 +5886,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5885: checking for $ac_func" >&5 +echo "configure:5890: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5936,12 +5941,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5940: checking for $ac_func" >&5 +echo "configure:5945: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5992,12 +5997,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5996: checking for $ac_func" >&5 +echo "configure:6001: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6049,12 +6054,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6053: checking for $ac_func" >&5 +echo "configure:6058: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6086: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6105,12 +6110,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6109: checking for $ac_func" >&5 +echo "configure:6114: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6160,12 +6165,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6164: checking for $ac_func" >&5 +echo "configure:6169: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6197: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6215,12 +6220,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6219: checking for $ac_func" >&5 +echo "configure:6224: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6270,12 +6275,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6274: checking for $ac_func" >&5 +echo "configure:6279: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6325,12 +6330,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6329: checking for $ac_func" >&5 +echo "configure:6334: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6362: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6380,12 +6385,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6384: checking for $ac_func" >&5 +echo "configure:6389: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6435,12 +6440,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6439: checking for $ac_func" >&5 +echo "configure:6444: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6490,12 +6495,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6494: checking for $ac_func" >&5 +echo "configure:6499: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6545,12 +6550,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6549: checking for $ac_func" >&5 +echo "configure:6554: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6600,12 +6605,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6604: checking for $ac_func" >&5 +echo "configure:6609: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6655,12 +6660,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6659: checking for $ac_func" >&5 +echo "configure:6664: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6710,12 +6715,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6714: checking for $ac_func" >&5 +echo "configure:6719: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6765,12 +6770,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6769: checking for $ac_func" >&5 +echo "configure:6774: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6820,12 +6825,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6824: checking for $ac_func" >&5 +echo "configure:6829: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6879,9 +6884,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6883: checking for stat64 in " >&5 +echo "configure:6888: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6912,9 +6917,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6916: checking for lstat64 in " >&5 +echo "configure:6921: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6935: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6945,9 +6950,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6949: checking for fstat64 in " >&5 +echo "configure:6954: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -6979,7 +6984,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:6983: checking for dn_expand in -lresolv" >&5 +echo "configure:6988: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6987,7 +6992,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7036,12 +7041,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7040: checking for $ac_func" >&5 +echo "configure:7045: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7089,7 +7094,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7093: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7098: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7097,7 +7102,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7138,12 +7143,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7142: checking for $ac_func" >&5 +echo "configure:7147: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7197,12 +7202,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7201: checking for $ac_func" >&5 +echo "configure:7206: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7250,7 +7255,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7254: checking for putprpwnam in -lsec" >&5 +echo "configure:7259: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7258,7 +7263,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7299,12 +7304,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7303: checking for $ac_func" >&5 +echo "configure:7308: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7359,12 +7364,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7363: checking for $ac_func" >&5 +echo "configure:7368: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7412,7 +7417,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7416: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7421: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7420,7 +7425,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7461,12 +7466,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7465: checking for $ac_func" >&5 +echo "configure:7470: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7520,12 +7525,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7524: checking for $ac_func" >&5 +echo "configure:7529: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7557: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7573,7 +7578,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7577: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7582: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7581,7 +7586,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7622,12 +7627,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7626: checking for $ac_func" >&5 +echo "configure:7631: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7683,12 +7688,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7687: checking for $ac_func" >&5 +echo "configure:7692: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7736,7 +7741,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7740: checking for getspnam in -lgen" >&5 +echo "configure:7745: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7744,7 +7749,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7785,12 +7790,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7789: checking for $ac_func" >&5 +echo "configure:7794: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7822: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7845,12 +7850,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7849: checking for $ac_func" >&5 +echo "configure:7854: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7898,7 +7903,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7902: checking for getspnam in -lsecurity" >&5 +echo "configure:7907: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7906,7 +7911,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7947,12 +7952,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7951: checking for $ac_func" >&5 +echo "configure:7956: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8006,12 +8011,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8010: checking for $ac_func" >&5 +echo "configure:8015: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8043: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8059,7 +8064,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8063: checking for getspnam in -lsec" >&5 +echo "configure:8068: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8067,7 +8072,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8108,12 +8113,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8112: checking for $ac_func" >&5 +echo "configure:8117: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8168,12 +8173,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8172: checking for $ac_func" >&5 +echo "configure:8177: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8221,7 +8226,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8225: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8230: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8229,7 +8234,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8270,12 +8275,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8274: checking for $ac_func" >&5 +echo "configure:8279: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8329,12 +8334,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8333: checking for $ac_func" >&5 +echo "configure:8338: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8382,7 +8387,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8386: checking for bigcrypt in -lsec" >&5 +echo "configure:8391: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8390,7 +8395,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8410: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8431,12 +8436,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8435: checking for $ac_func" >&5 +echo "configure:8440: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8491,12 +8496,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8495: checking for $ac_func" >&5 +echo "configure:8500: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8528: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8544,7 +8549,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8548: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8553: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8552,7 +8557,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8593,12 +8598,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8597: checking for $ac_func" >&5 +echo "configure:8602: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8652,12 +8657,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8656: checking for $ac_func" >&5 +echo "configure:8661: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8705,7 +8710,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8709: checking for getprpwnam in -lsec" >&5 +echo "configure:8714: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8713,7 +8718,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8754,12 +8759,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8758: checking for $ac_func" >&5 +echo "configure:8763: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8826,7 +8831,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8830: checking ability to build shared libraries" >&5 +echo "configure:8835: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -8986,7 +8991,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:8990: checking for $ac_word" >&5 +echo "configure:8995: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9043,17 +9048,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9047: checking linker flags for shared libraries" >&5 +echo "configure:9052: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9050: checking compiler flags for position-independent code" >&5 +echo "configure:9055: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9057: checking whether building shared libraries actually works" >&5 +echo "configure:9062: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9084,7 +9089,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9088: checking for long long" >&5 +echo "configure:9093: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9093,12 +9098,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9125,20 +9130,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9129: checking for LL suffix on long long integers" >&5 +echo "configure:9134: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9142: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9147: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9160,7 +9165,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9164: checking for 64 bit off_t" >&5 +echo "configure:9169: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9169,13 +9174,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9198,7 +9203,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9202: checking for off64_t" >&5 +echo "configure:9207: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9207,7 +9212,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9240,7 +9245,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9244: checking for 64 bit ino_t" >&5 +echo "configure:9249: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9249,13 +9254,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9278,7 +9283,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9282: checking for ino64_t" >&5 +echo "configure:9287: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9287,7 +9292,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9320,7 +9325,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9324: checking for dev64_t" >&5 +echo "configure:9329: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9329,7 +9334,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9362,13 +9367,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9366: checking for struct dirent64" >&5 +echo "configure:9371: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9389: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9401,7 +9406,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9405: checking for major macro" >&5 +echo "configure:9410: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9410,7 +9415,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9442,7 +9447,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9446: checking for minor macro" >&5 +echo "configure:9451: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9451,7 +9456,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9483,7 +9488,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9487: checking for unsigned char" >&5 +echo "configure:9492: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9492,12 +9497,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9520,13 +9525,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9524: checking for sin_len in sock" >&5 +echo "configure:9529: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9535,7 +9540,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9539: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9544: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9556,13 +9561,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9560: checking whether seekdir returns void" >&5 +echo "configure:9565: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9571,7 +9576,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9575: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9580: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9592,20 +9597,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9596: checking for __FILE__ macro" >&5 +echo "configure:9601: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9609: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9614: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9626,20 +9631,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9630: checking for __FUNCTION__ macro" >&5 +echo "configure:9635: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9643: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9648: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9660,7 +9665,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9664: checking if gettimeofday takes tz argument" >&5 +echo "configure:9669: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9669,14 +9674,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9699,13 +9704,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9703: checking for __va_copy" >&5 +echo "configure:9708: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9713,7 +9718,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9734,7 +9739,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9738: checking for C99 vsnprintf" >&5 +echo "configure:9743: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9743,7 +9748,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9770,7 +9775,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9793,7 +9798,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9797: checking for broken readdir" >&5 +echo "configure:9802: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9802,7 +9807,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9810,7 +9815,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9833,13 +9838,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9837: checking for utimbuf" >&5 +echo "configure:9842: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9847,7 +9852,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9851: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9856: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9871,12 +9876,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9875: checking for $ac_func" >&5 +echo "configure:9880: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9925,13 +9930,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9929: checking for ut_name in utmp" >&5 +echo "configure:9934: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9939,7 +9944,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9943: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9948: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -9960,13 +9965,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:9964: checking for ut_user in utmp" >&5 +echo "configure:9969: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9974,7 +9979,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9978: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9983: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -9995,13 +10000,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:9999: checking for ut_id in utmp" >&5 +echo "configure:10004: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10009,7 +10014,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10018: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10030,13 +10035,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10034: checking for ut_host in utmp" >&5 +echo "configure:10039: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10044,7 +10049,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10048: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10053: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10065,13 +10070,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10069: checking for ut_time in utmp" >&5 +echo "configure:10074: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10079,7 +10084,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10100,13 +10105,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10104: checking for ut_tv in utmp" >&5 +echo "configure:10109: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10114,7 +10119,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10123: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10135,13 +10140,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10139: checking for ut_type in utmp" >&5 +echo "configure:10144: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10149,7 +10154,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10153: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10170,13 +10175,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10174: checking for ut_pid in utmp" >&5 +echo "configure:10179: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10184,7 +10189,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10205,13 +10210,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10209: checking for ut_exit in utmp" >&5 +echo "configure:10214: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10219,7 +10224,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10240,13 +10245,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10244: checking for ut_addr in utmp" >&5 +echo "configure:10249: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10254,7 +10259,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10258: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10263: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10276,13 +10281,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10280: checking whether pututline returns pointer" >&5 +echo "configure:10285: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10290,7 +10295,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10294: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10299: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10312,13 +10317,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10316: checking for ut_syslen in utmpx" >&5 +echo "configure:10321: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10326,7 +10331,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10330: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10335: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10350,7 +10355,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10354: checking whether to use libiconv" >&5 +echo "configure:10359: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10363,7 +10368,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10367: checking for iconv_open in -liconv" >&5 +echo "configure:10372: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10371,7 +10376,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10425,7 +10430,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10429: checking for working iconv" >&5 +echo "configure:10434: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10434,7 +10439,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10445,7 +10450,7 @@ main() { } EOF -if { (eval echo configure:10449: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10469,7 +10474,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10473: checking for Linux kernel oplocks" >&5 +echo "configure:10478: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10478,7 +10483,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10492,7 +10497,7 @@ main() { } EOF -if { (eval echo configure:10496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10515,7 +10520,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10519: checking for kernel change notify support" >&5 +echo "configure:10524: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10524,7 +10529,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10538,7 +10543,7 @@ main() { } EOF -if { (eval echo configure:10542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10561,7 +10566,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10565: checking for kernel share modes" >&5 +echo "configure:10570: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10570,7 +10575,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10586,7 +10591,7 @@ main() { } EOF -if { (eval echo configure:10590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10612,13 +10617,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10616: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10621: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10626,7 +10631,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10630: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10647,7 +10652,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10651: checking for irix specific capabilities" >&5 +echo "configure:10656: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10656,7 +10661,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10671,7 +10676,7 @@ main() { } EOF -if { (eval echo configure:10675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10699,13 +10704,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10703: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10708: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10715,7 +10720,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10719: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10724: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10736,13 +10741,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10740: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10745: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10752,7 +10757,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10756: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10773,13 +10778,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10777: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10782: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10789,7 +10794,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10793: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10798: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10810,13 +10815,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10814: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10819: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10826,7 +10831,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10835: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10848,13 +10853,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10852: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10857: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10868,7 +10873,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10877: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10889,16 +10894,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10893: checking for test routines" >&5 +echo "configure:10898: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10907: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10912,7 +10917,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10916: checking for ftruncate extend" >&5 +echo "configure:10921: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10921,11 +10926,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10948,7 +10953,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:10952: checking for AF_LOCAL socket support" >&5 +echo "configure:10957: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10957,11 +10962,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10970: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -10985,7 +10990,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:10989: checking for broken getgroups" >&5 +echo "configure:10994: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10994,11 +10999,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11021,7 +11026,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11025: checking whether getpass should be replaced" >&5 +echo "configure:11030: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11029,7 +11034,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11065,7 +11070,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11069: checking for broken inet_ntoa" >&5 +echo "configure:11074: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11074,7 +11079,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11088,7 +11093,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11111,7 +11116,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11115: checking for secure mkstemp" >&5 +echo "configure:11120: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11120,7 +11125,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11137,7 +11142,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11146: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11160,7 +11165,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11164: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11169: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11169,12 +11174,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11178: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11197,7 +11202,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11201: checking for root" >&5 +echo "configure:11206: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11206,11 +11211,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11238,7 +11243,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11242: checking for iface AIX" >&5 +echo "configure:11247: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11247,7 +11252,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11279,7 +11284,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11283: checking for iface ifconf" >&5 +echo "configure:11288: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11288,7 +11293,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11321,7 +11326,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11325: checking for iface ifreq" >&5 +echo "configure:11330: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11330,7 +11335,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11367,7 +11372,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11371: checking for setresuid" >&5 +echo "configure:11376: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11376,7 +11381,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11410,7 +11415,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11414: checking for setreuid" >&5 +echo "configure:11419: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11419,7 +11424,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11452,7 +11457,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11456: checking for seteuid" >&5 +echo "configure:11461: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11461,7 +11466,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11494,7 +11499,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11498: checking for setuidx" >&5 +echo "configure:11503: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11503,7 +11508,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11536,7 +11541,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11540: checking for working mmap" >&5 +echo "configure:11545: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11545,11 +11550,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11572,7 +11577,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11576: checking for ftruncate needs root" >&5 +echo "configure:11581: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11581,11 +11586,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11608,7 +11613,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11612: checking for fcntl locking" >&5 +echo "configure:11617: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11617,11 +11622,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11644,7 +11649,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11648: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11653: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11653,11 +11658,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11666: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11682,7 +11687,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11686: checking for 64 bit fcntl locking" >&5 +echo "configure:11691: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11691,7 +11696,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11740,13 +11745,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11744: checking for st_blocks in struct stat" >&5 +echo "configure:11749: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11755,7 +11760,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11759: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11764: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11776,13 +11781,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11780: checking for st_blksize in struct stat" >&5 +echo "configure:11785: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11791,7 +11796,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11795: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11800: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11814,13 +11819,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11818: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11823: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11843: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11857,13 +11862,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11861: checking for broken nisplus include files" >&5 +echo "configure:11866: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11873,7 +11878,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11877: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11882: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11897,7 +11902,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11901: checking whether to use smbwrapper" >&5 +echo "configure:11906: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11944,7 +11949,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11948: checking whether to use AFS clear-text auth" >&5 +echo "configure:11953: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -11970,7 +11975,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11974: checking whether to use DFS clear-text auth" >&5 +echo "configure:11979: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -11996,7 +12001,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12000: checking for /usr/kerberos" >&5 +echo "configure:12005: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12009,7 +12014,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12013: checking for kerberos 5 install path" >&5 +echo "configure:12018: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12038,17 +12043,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12042: checking for $ac_hdr" >&5 +echo "configure:12047: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12052: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12057: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12081,17 +12086,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12085: checking for $ac_hdr" >&5 +echo "configure:12090: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12095: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12100: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12121,7 +12126,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12125: checking for _et_list in -lcom_err" >&5 +echo "configure:12130: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12129,7 +12134,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12161,7 +12166,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12165: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12170: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12169,7 +12174,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12205,7 +12210,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12209: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12214: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12213,7 +12218,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12252,7 +12257,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12256: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12261: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12260,7 +12265,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12300,7 +12305,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12304: checking for ber_scanf in -llber" >&5 +echo "configure:12309: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12308,7 +12313,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12344,7 +12349,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12348: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12353: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12352,7 +12357,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12394,12 +12399,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12398: checking for $ac_func" >&5 +echo "configure:12403: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12447,13 +12452,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12451: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12456: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12462,7 +12467,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12466: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12471: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12484,7 +12489,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12488: checking whether to use AUTOMOUNT" >&5 +echo "configure:12493: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12509,7 +12514,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12513: checking whether to use SMBMOUNT" >&5 +echo "configure:12518: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12546,7 +12551,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12550: checking whether to use PAM" >&5 +echo "configure:12555: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12572,7 +12577,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12576: checking for pam_get_data in -lpam" >&5 +echo "configure:12581: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12580,7 +12585,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12600: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12618,7 +12623,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12622: checking whether to use pam_smbpass" >&5 +echo "configure:12627: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12656,12 +12661,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12660: checking for $ac_func" >&5 +echo "configure:12665: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12710,7 +12715,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12714: checking for crypt in -lcrypt" >&5 +echo "configure:12719: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12718,7 +12723,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12764,7 +12769,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12768: checking for a crypt that needs truncated salt" >&5 +echo "configure:12773: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12773,11 +12778,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12800,6 +12805,30 @@ EOF fi fi +# New experimental SAM system + +echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 +echo "configure:12812: checking whether to build the new (experimental) SAM database" >&5 +# Check whether --with-sam or --without-sam was given. +if test "${with_sam+set}" = set; then + withval="$with_sam" + case "$withval" in + yes) + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define WITH_SAM 1 +EOF + + ;; + *) + echo "$ac_t""no" 1>&6 + ;; + esac +else + echo "$ac_t""no" 1>&6 + +fi + ######################################################################################## @@ -12811,7 +12840,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12815: checking whether to use TDB SAM database" >&5 +echo "configure:12844: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12836,7 +12865,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12840: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12869: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12867,7 +12896,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12871: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12900: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12892,7 +12921,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12896: checking whether to use syslog logging" >&5 +echo "configure:12925: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12917,7 +12946,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12921: checking whether to use profiling" >&5 +echo "configure:12950: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -12945,7 +12974,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:12949: checking whether to support disk-quotas" >&5 +echo "configure:12978: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -12956,13 +12985,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:12960: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:12989: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -12974,7 +13003,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:12978: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13007: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13023,7 +13052,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13027: checking whether to support utmp accounting" >&5 +echo "configure:13056: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13048,7 +13077,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13052: checking chosen man pages' language(s)" >&5 +echo "configure:13081: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13079,7 +13108,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13083: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13112: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13107,14 +13136,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13111: checking how to get filesystem space usage" >&5 +echo "configure:13140: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13118: checking statvfs64 function (SVR4)" >&5 +echo "configure:13147: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13122,7 +13151,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13169,12 +13198,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13173: checking statvfs function (SVR4)" >&5 +echo "configure:13202: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13182,7 +13211,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13207,7 +13236,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13211: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13240: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13215,7 +13244,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13228,7 +13257,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13255,7 +13284,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13259: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13288: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13263,7 +13292,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13309,7 +13338,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13313: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13342: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13317,7 +13346,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13327,7 +13356,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13354,7 +13383,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13358: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13387: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13362,7 +13391,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13378,7 +13407,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13405,7 +13434,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13409: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13438: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13413,7 +13442,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13433,7 +13462,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13466,9 +13495,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13470: checking if large file support can be enabled" >&5 +echo "configure:13499: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13514: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13546,7 +13575,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13550: checking whether to support ACLs" >&5 +echo "configure:13579: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13599,7 +13628,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13603: checking for acl_get_file in -lacl" >&5 +echo "configure:13632: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13607,7 +13636,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13646,13 +13675,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13650: checking for ACL support" >&5 +echo "configure:13679: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13660,7 +13689,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13680,13 +13709,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13684: checking for acl_get_perm_np" >&5 +echo "configure:13713: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13694,7 +13723,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13741,7 +13770,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13745: checking whether to build winbind" >&5 +echo "configure:13774: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -13837,20 +13866,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:13841: checking whether struct passwd has pw_comment" >&5 +echo "configure:13870: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:13854: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13883: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -13875,20 +13904,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:13879: checking whether struct passwd has pw_age" >&5 +echo "configure:13908: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:13892: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -13927,7 +13956,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:13931: checking for poptGetContext in -lpopt" >&5 +echo "configure:13960: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13935,7 +13964,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13970,7 +13999,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:13974: checking whether to use included popt" >&5 +echo "configure:14003: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -13993,16 +14022,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:13997: checking configure summary" >&5 +echo "configure:14026: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source/configure.in b/source/configure.in index de8da340913..e4bc6982578 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2138,6 +2138,22 @@ if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then fi fi +# New experimental SAM system + +AC_MSG_CHECKING([whether to build the new (experimental) SAM database]) +AC_ARG_WITH(sam, +[ --with-sam Build new (experimental) SAM database (default=no)], +[ case "$withval" in + yes) + AC_MSG_RESULT(yes) + AC_DEFINE(WITH_SAM) + ;; + *) + AC_MSG_RESULT(no) + ;; + esac ], + AC_MSG_RESULT(no) +) ######################################################################################## diff --git a/source/groupdb/aliasdb.c b/source/groupdb/aliasdb.c index 718bf1d7ce1..05f584f980d 100644 --- a/source/groupdb/aliasdb.c +++ b/source/groupdb/aliasdb.c @@ -41,9 +41,7 @@ BOOL initialise_alias_db(void) return True; } -#ifdef WITH_NISPLUS - aldb_ops = nisplus_initialise_alias_db(); -#elif defined(WITH_LDAP) +#ifdef WITH_LDAP aldb_ops = ldap_initialise_alias_db(); #else aldb_ops = file_initialise_alias_db(); diff --git a/source/groupdb/groupdb.c b/source/groupdb/groupdb.c index c18463741d9..d50e4f7322d 100644 --- a/source/groupdb/groupdb.c +++ b/source/groupdb/groupdb.c @@ -39,9 +39,7 @@ BOOL initialise_group_db(void) return True; } -#ifdef WITH_NISPLUS - gpdb_ops = nisplus_initialise_group_db(); -#elif defined(WITH_LDAP) +#ifdef WITH_LDAP gpdb_ops = ldap_initialise_group_db(); #else gpdb_ops = file_initialise_group_db(); diff --git a/source/include/config.h.in b/source/include/config.h.in index 8c06e253968..70c0ae2f3c7 100644 --- a/source/include/config.h.in +++ b/source/include/config.h.in @@ -1,4 +1,4 @@ -/* include/config.h.in. Generated automatically from configure.in by autoheader. */ +/* include/config.h.in. Generated automatically from configure.in by autoheader 2.13. */ /* Define if on AIX 3. System headers sometimes define this. @@ -232,6 +232,7 @@ #undef MMAP_BLACKLIST #undef HAVE_IMMEDIATE_STRUCTURES #undef HAVE_CUPS +#undef WITH_SAM #undef WITH_LDAP_SAM #undef WITH_NISPLUS_SAM #undef WITH_TDB_SAM diff --git a/source/include/debug.h b/source/include/debug.h index 08858274337..a9261437012 100644 --- a/source/include/debug.h +++ b/source/include/debug.h @@ -89,8 +89,9 @@ extern int DEBUGLEVEL; #define DBGC_RPC_SRV 6 #define DBGC_RPC_CLI 7 #define DBGC_PASSDB 8 -#define DBGC_AUTH 9 -#define DBGC_WINBIND 10 +#define DBGC_SAM 9 +#define DBGC_AUTH 10 +#define DBGC_WINBIND 11 /* So you can define DBGC_CLASS before including debug.h */ diff --git a/source/include/includes.h b/source/include/includes.h index 9b597db78bc..f7b0d76dd4e 100644 --- a/source/include/includes.h +++ b/source/include/includes.h @@ -751,6 +751,10 @@ extern int errno; #include "passdb.h" +#ifdef WITH_SAM +#include "sam.h" +#endif + #include "session.h" #include "asn_1.h" diff --git a/source/include/sam.h b/source/include/sam.h new file mode 100644 index 00000000000..b279eb88a10 --- /dev/null +++ b/source/include/sam.h @@ -0,0 +1,258 @@ +/* + Unix SMB/CIFS implementation. + SAM structures + Copyright (C) Kai Krueger 2002 + Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Simo Sorce 2002 + Copyright (C) Andrew Bartlett 2002 + Copyright (C) Jelmer Vernooij 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef _SAM_H +#define _SAM_H + +#define SAM_INTERFACE_VERSION 1 + +/* use this inside a passdb module */ +#define SAM_MODULE_VERSIONING_MAGIC \ +int sam_version(void)\ +{\ + return SAM_INTERFACE_VERSION;\ +} + +typedef struct sam_domain { + TALLOC_CTX *mem_ctx; + uint32 access_granted; + struct sam_methods *current_sam_methods; /* sam_methods creating this +handle */ + void (*free_fn)(struct sam_domain **); + struct domain_data { + DOM_SID sid; /*SID of the domain. Should not be changed */ + char *name; /* Name of the domain */ + char *servername; /* */ + NTTIME max_passwordage; /* time till next password expiration */ + NTTIME min_passwordage; /* time till password can be changed again */ + NTTIME lockout_duration; /* time till login is allowed again after +lockout*/ + NTTIME reset_count; /* time till bad login counter is reset */ + uint16 min_passwordlength; /* minimum number of characters for a password +*/ + uint16 password_history; /* number of passwords stored in history */ + uint16 lockout_count; /* number of bad login attempts before lockout */ + BOOL force_logoff; /* force logoff after logon hours have expired */ + BOOL login_pwdchange; /* Users need to logon to change their password */ + uint32 num_users; /* number of users in the domain */ + uint32 num_groups; /* number of global groups */ + uint32 num_aliases; /* number of local groups */ + } private; +} SAM_DOMAIN_HANDLE; + +typedef struct sam_user { + TALLOC_CTX *mem_ctx; + uint32 access_granted; + struct sam_methods *current_sam_methods; /* sam_methods creating this +handle */ + void (*free_fn)(struct sam_user **); + struct sam_user_data { + uint32 init_flag; + NTTIME logon_time; /* logon time */ + NTTIME logoff_time; /* logoff time */ + NTTIME kickoff_time; /* kickoff time */ + NTTIME pass_last_set_time; /* password last set time */ + NTTIME pass_can_change_time; /* password can change time */ + NTTIME pass_must_change_time; /* password must change time */ + char * username; /* username string */ + SAM_DOMAIN_HANDLE * domain; /* domain of user */ + char * full_name; /* user's full name string */ + char * unix_home_dir; /* UNIX home directory string */ + char * home_dir; /* home directory string */ + char * dir_drive; /* home directory drive string */ + char * logon_script; /* logon script string */ + char * profile_path; /* profile path string */ + char * acct_desc; /* user description string */ + char * workstations; /* login from workstations string */ + char * unknown_str; /* don't know what this is, yet. */ + char * munged_dial; /* munged path name and dial-back tel number */ + DOM_SID user_sid; /* Primary User SID */ + DOM_SID group_sid; /* Primary Group SID */ + DATA_BLOB lm_pw; /* .data is Null if no password */ + DATA_BLOB nt_pw; /* .data is Null if no password */ + DATA_BLOB plaintext_pw; /* .data is Null if not available */ + uint16 acct_ctrl; /* account info (ACB_xxxx bit-mask) */ + uint32 unknown_1; /* 0x00ff ffff */ + uint16 logon_divs; /* 168 - number of hours in a week */ + uint32 hours_len; /* normally 21 bytes */ + uint8 hours[MAX_HOURS_LEN]; + uint32 unknown_2; /* 0x0002 0000 */ + uint32 unknown_3; /* 0x0000 04ec */ + } private; +} SAM_USER_HANDLE; + +typedef struct sam_group { + TALLOC_CTX *mem_ctx; + uint32 access_granted; + struct sam_methods *current_sam_methods; /* sam_methods creating this +handle */ + void (*free_fn)(struct sam_group **); + struct sam_group_data { + char *name; + char *comment; + DOM_SID sid; + int32 flags; /* specifies if the group is a lokal group or a global group +*/ + uint32 num_members; + PRIVILEGE_SET privileges; + } private; +} SAM_GROUP_HANDLE; + + +typedef struct sam_group_member { + DOM_SID sid; + BOOL group; /* specifies if it is a group or a user */ + +} SAM_GROUP_MEMBER; + +typedef struct sam_user_enum { + DOM_SID sid; + char *username; + char *full_name; + char *user_desc; + uint16 acc_ctrl; +} SAM_USER_ENUM; + +typedef struct sam_group_enum { + DOM_SID sid; + char *groupname; + char *comment; +} SAM_GROUP_ENUM; + +typedef struct sam_context +{ + struct sam_methods *methods; + TALLOC_CTX *mem_ctx; + + /* General API */ + + NTSTATUS (*sam_get_sec_desc) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd); + NTSTATUS (*sam_set_sec_desc) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd); + + NTSTATUS (*sam_lookup_sid) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type); + NTSTATUS (*sam_lookup_name) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID **sid, uint32 *type); + + + /* Domain API */ + + NTSTATUS (*sam_update_domain) ( const struct sam_context *, SAM_DOMAIN_HANDLE *domain); + + NTSTATUS (*sam_enum_domains) ( const struct sam_context *, const NT_USER_TOKEN *access_token, int32 *domain_count, DOM_SID **domains, char **domain_names); + NTSTATUS (*sam_lookup_domain) ( const struct sam_context *, const NT_USER_TOKEN * access_token, const char *domain, DOM_SID **domainsid); + + NTSTATUS (*sam_get_domain_by_sid) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain); + + + /* User API */ + + NTSTATUS (*sam_create_user) ( const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, DOM_SID *domainsid, SAM_USER_HANDLE **user); + NTSTATUS (*sam_add_user) ( const struct sam_context *, DOM_SID *domainsid, SAM_USER_HANDLE *user); + NTSTATUS (*sam_update_user) ( const struct sam_context *, SAM_USER_HANDLE *user); + NTSTATUS (*sam_delete_user) ( const struct sam_context *, SAM_USER_HANDLE * user); + NTSTATUS (*sam_enum_users) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domain, int32 *user_count, SAM_USER_ENUM **users); + + NTSTATUS (*sam_get_user_by_sid) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *usersid, SAM_USER_HANDLE **user); + NTSTATUS (*sam_get_user_by_name) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_USER_HANDLE **user); + + /* Group API */ + + + NTSTATUS (*sam_add_group) ( const struct sam_context *, DOM_SID *domainsid, SAM_GROUP_HANDLE *samgroup); + NTSTATUS (*sam_update_group) ( const struct sam_context *, SAM_GROUP_HANDLE *samgroup); + NTSTATUS (*sam_delete_group) ( const struct sam_context *, SAM_GROUP_HANDLE *groupsid); + NTSTATUS (*sam_enum_groups) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups); + NTSTATUS (*sam_get_group_by_sid) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_get_group_by_name) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group); + + NTSTATUS (*sam_add_member_to_group) ( const struct sam_context *, SAM_GROUP_HANDLE *group, SAM_GROUP_MEMBER *member); + NTSTATUS (*sam_delete_member_from_group) ( const struct sam_context *, SAM_GROUP_HANDLE *group, SAM_GROUP_MEMBER *member); + NTSTATUS (*sam_enum_groupmembers) ( const struct sam_context *, SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members); + + NTSTATUS (*sam_get_groups_of_user) ( const struct sam_context *, SAM_USER_HANDLE *user, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups); + + void (*free_fn)(struct sam_context **); +} SAM_CONTEXT; + +typedef struct sam_methods +{ + struct sam_context *parent; + struct sam_methods *next; + struct sam_methods *prev; + const char *backendname; + struct sam_domain *domain; + void *private_data; + + /* General API */ + + NTSTATUS (*sam_get_sec_desc) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd); + NTSTATUS (*sam_set_sec_desc) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd); + + NTSTATUS (*sam_lookup_sid) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type); + NTSTATUS (*sam_lookup_name) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type); + + /* Domain API */ + + NTSTATUS (*sam_update_domain) ( const struct sam_methods *, SAM_DOMAIN_HANDLE *domain); + NTSTATUS (*sam_get_domain_handle) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_DOMAIN_HANDLE **domain); + + /* User API */ + + NTSTATUS (*sam_create_user) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_USER_HANDLE **user); + NTSTATUS (*sam_add_user) ( const struct sam_methods *, const SAM_USER_HANDLE *user); + NTSTATUS (*sam_update_user) ( const struct sam_methods *, const SAM_USER_HANDLE *user); + NTSTATUS (*sam_delete_user) ( const struct sam_methods *, const SAM_USER_HANDLE *user); + NTSTATUS (*sam_enum_users) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, int32 *user_count, SAM_USER_ENUM **users); + + NTSTATUS (*sam_get_user_by_sid) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *usersid, SAM_USER_HANDLE **user); + NTSTATUS (*sam_get_user_by_name) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_USER_HANDLE **user); + + /* Group API */ + + NTSTATUS (*sam_create_group) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const uint32 type, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_add_group) ( const struct sam_methods *, SAM_GROUP_HANDLE *samgroup); + NTSTATUS (*sam_update_group) ( const struct sam_methods *, SAM_GROUP_HANDLE *samgroup); + NTSTATUS (*sam_delete_group) ( const struct sam_methods *, SAM_GROUP_HANDLE *groupsid); + NTSTATUS (*sam_enum_groups) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups); + NTSTATUS (*sam_get_group_by_sid) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_get_group_by_name) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group); + + NTSTATUS (*sam_add_member_to_group) ( const struct sam_methods *, SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); + NTSTATUS (*sam_delete_member_from_group) ( const struct sam_methods *, SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); + NTSTATUS (*sam_enum_groupmembers) ( const struct sam_methods *, SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members); + + NTSTATUS (*sam_get_groups_of_user) ( const struct sam_methods *, SAM_USER_HANDLE *user, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups); + + void (*free_private_data)(void **); +} SAM_METHODS; + +typedef NTSTATUS (*sam_init_function)( const struct sam_context *, struct sam_methods **, const char *); + +struct sam_init_function_entry { + char *name; + /* Function to create a member of the sam_methods list */ + sam_init_function init; +}; + + +#endif /* _SAM_H */ diff --git a/source/lib/debug.c b/source/lib/debug.c index 6dd9225bac8..65cac144ccc 100644 --- a/source/lib/debug.c +++ b/source/lib/debug.c @@ -153,6 +153,7 @@ static const char *default_classname_table[] = { "rpc_srv", /* DBGC_RPC_SRV */ "rpc_cli", /* DBGC_RPC_CLI */ "passdb", /* DBGC_PASSDB */ + "sam" /* DBGC_SAM */ "auth", /* DBGC_AUTH */ "winbind", /* DBGC_WINBIND */ NULL diff --git a/source/lib/time.c b/source/lib/time.c index 9d87414aea0..f37380df70c 100644 --- a/source/lib/time.c +++ b/source/lib/time.c @@ -40,6 +40,12 @@ int extra_time_offset = 0; #define TIME_T_MAX (~ (time_t) 0 - TIME_T_MIN) #endif +void get_nttime_max(NTTIME *t) +{ + /* FIXME: This is incorrect */ + unix_to_nt_time(get_time_t_max(),t); +} + /******************************************************************* External access to time_t_min and time_t_max. ********************************************************************/ diff --git a/source/passdb/passgrp.c b/source/passdb/passgrp.c deleted file mode 100644 index f73591793f5..00000000000 --- a/source/passdb/passgrp.c +++ /dev/null @@ -1,219 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Password and authentication handling - Copyright (C) Jeremy Allison 1996-1998 - Copyright (C) Luke Kenneth Casson Leighton 1996-1998 - - This program 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 this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_PASSDB - -/* - * NOTE. All these functions are abstracted into a structure - * that points to the correct function for the selected database. JRA. - * - * the API does NOT fill in the gaps if you set an API function - * to NULL: it will deliberately attempt to call the NULL function. - * - */ - -static struct passgrp_ops *pwgrp_ops; - -/*************************************************************** - Initialise the passgrp operations. -***************************************************************/ - -BOOL initialise_passgrp_db(void) -{ - if (pwgrp_ops) - { - return True; - } - -#ifdef WITH_NISPLUS - pwgrp_ops = nisplus_initialise_password_grp(); -#elif defined(WITH_LDAP) - pwgrp_ops = ldap_initialize_password_grp(); -#else - pwgrp_ops = file_initialise_password_grp(); -#endif - - return (pwgrp_ops != NULL); -} - -/* - * Functions that return/manipulate a struct smb_passwd. - */ - -/************************************************************************ - Utility function to search smb passwd by rid. -*************************************************************************/ - -struct smb_passwd *iterate_getsmbgrprid(uint32 user_rid, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - return iterate_getsmbgrpuid(pwdb_user_rid_to_uid(user_rid), - grps, num_grps, alss, num_alss); -} - -/************************************************************************ - Utility function to search smb passwd by uid. use this if your database - does not have search facilities. -*************************************************************************/ - -struct smb_passwd *iterate_getsmbgrpuid(uid_t smb_userid, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - struct smb_passwd *pwd = NULL; - void *fp = NULL; - - DEBUG(10, ("search by smb_userid: %x\n", (int)smb_userid)); - - /* Open the smb password database - not for update. */ - fp = startsmbgrpent(False); - - if (fp == NULL) - { - DEBUG(0, ("unable to open smb passgrp database.\n")); - return NULL; - } - - while ((pwd = getsmbgrpent(fp, grps, num_grps, alss, num_alss)) != NULL && pwd->smb_userid != smb_userid) - ; - - if (pwd != NULL) - { - DEBUG(10, ("found by smb_userid: %x\n", (int)smb_userid)); - } - - endsmbgrpent(fp); - return pwd; -} - -/************************************************************************ - Utility function to search smb passwd by name. use this if your database - does not have search facilities. -*************************************************************************/ - -struct smb_passwd *iterate_getsmbgrpnam(char *name, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - struct smb_passwd *pwd = NULL; - void *fp = NULL; - - DEBUG(10, ("search by name: %s\n", name)); - - /* Open the passgrp file - not for update. */ - fp = startsmbgrpent(False); - - if (fp == NULL) - { - DEBUG(0, ("unable to open smb passgrp database.\n")); - return NULL; - } - - while ((pwd = getsmbgrpent(fp, grps, num_grps, alss, num_alss)) != NULL && !strequal(pwd->smb_name, name)) - ; - - if (pwd != NULL) - { - DEBUG(10, ("found by name: %s\n", name)); - } - - endsmbgrpent(fp); - return pwd; -} - -/*************************************************************** - Start to enumerate the smb or sam passwd list. Returns a void pointer - to ensure no modification outside this module. - - Note that currently it is being assumed that a pointer returned - from this function may be used to enumerate struct sam_passwd - entries as well as struct smb_passwd entries. This may need - to change. JRA. - -****************************************************************/ - -void *startsmbgrpent(BOOL update) -{ - return pwgrp_ops->startsmbgrpent(update); -} - -/*************************************************************** - End enumeration of the smb or sam passwd list. - - Note that currently it is being assumed that a pointer returned - from this function may be used to enumerate struct sam_passwd - entries as well as struct smb_passwd entries. This may need - to change. JRA. - -****************************************************************/ - -void endsmbgrpent(void *vp) -{ - pwgrp_ops->endsmbgrpent(vp); -} - -/************************************************************************* - Routine to return the next entry in the smb passwd list. - *************************************************************************/ - -struct smb_passwd *getsmbgrpent(void *vp, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - return pwgrp_ops->getsmbgrpent(vp, grps, num_grps, alss, num_alss); -} - -/************************************************************************ - Routine to search smb passwd by name. -*************************************************************************/ - -struct smb_passwd *getsmbgrpnam(char *name, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - return pwgrp_ops->getsmbgrpnam(name, grps, num_grps, alss, num_alss); -} - -/************************************************************************ - Routine to search smb passwd by user rid. -*************************************************************************/ - -struct smb_passwd *getsmbgrprid(uint32 user_rid, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - return pwgrp_ops->getsmbgrprid(user_rid, grps, num_grps, alss, num_alss); -} - -/************************************************************************ - Routine to search smb passwd by uid. -*************************************************************************/ - -struct smb_passwd *getsmbgrpuid(uid_t smb_userid, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - return pwgrp_ops->getsmbgrpuid(smb_userid, grps, num_grps, alss, num_alss); -} diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c index a30622c6008..044a9042508 100644 --- a/source/rpc_server/srv_samr_nt.c +++ b/source/rpc_server/srv_samr_nt.c @@ -68,8 +68,6 @@ struct generic_mapping usr_generic_mapping = {USER_READ, USER_WRITE, USER_EXECUT struct generic_mapping grp_generic_mapping = {GROUP_READ, GROUP_WRITE, GROUP_EXECUTE, GROUP_ALL_ACCESS}; struct generic_mapping ali_generic_mapping = {ALIAS_READ, ALIAS_WRITE, ALIAS_EXECUTE, ALIAS_ALL_ACCESS}; -static NTSTATUS samr_make_dom_obj_sd(TALLOC_CTX *ctx, SEC_DESC **psd, size_t *d_size); - /******************************************************************* Checks if access to an object should be granted, and returns that @@ -411,7 +409,7 @@ NTSTATUS _samr_get_usrdom_pwinfo(pipes_struct *p, SAMR_Q_GET_USRDOM_PWINFO *q_u, samr_make_sam_obj_sd ********************************************************************/ -static NTSTATUS samr_make_sam_obj_sd(TALLOC_CTX *ctx, SEC_DESC **psd, size_t *sd_size) +NTSTATUS samr_make_sam_obj_sd(TALLOC_CTX *ctx, SEC_DESC **psd, size_t *sd_size) { extern DOM_SID global_sid_World; DOM_SID adm_sid; diff --git a/source/sam/account.c b/source/sam/account.c new file mode 100644 index 00000000000..1fec9966f64 --- /dev/null +++ b/source/sam/account.c @@ -0,0 +1,301 @@ +/* + Unix SMB/CIFS implementation. + Password and authentication handling + Copyright (C) Jeremy Allison 1996-2001 + Copyright (C) Luke Kenneth Casson Leighton 1996-1998 + Copyright (C) Gerald (Jerry) Carter 2000-2001 + Copyright (C) Andrew Bartlett 2001-2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_PASSDB + +/************************************************************ + Fill the SAM_USER_HANDLE with default values. + ***********************************************************/ + +static void sam_fill_default_user(SAM_USER_HANDLE *user) +{ + ZERO_STRUCT(user->private); /* Don't touch the talloc context */ + + /* Don't change these timestamp settings without a good reason. + They are important for NT member server compatibility. */ + + user->private.init_flag = FLAG_SAM_UNINIT; + + /* FIXME: We should actually call get_nt_time_max() or sthng + * here */ + unix_to_nt_time(&(user->private.logoff_time),get_time_t_max()); + unix_to_nt_time(&(user->private.kickoff_time),get_time_t_max()); + unix_to_nt_time(&(user->private.pass_must_change_time),get_time_t_max()); + user->private.unknown_1 = 0x00ffffff; /* don't know */ + user->private.logon_divs = 168; /* hours per week */ + user->private.hours_len = 21; /* 21 times 8 bits = 168 */ + memset(user->private.hours, 0xff, user->private.hours_len); /* available at all hours */ + user->private.unknown_2 = 0x00000000; /* don't know */ + user->private.unknown_3 = 0x000004ec; /* don't know */ +} + +static void destroy_sam_talloc(SAM_USER_HANDLE **user) +{ + if (*user) { + talloc_destroy((*user)->mem_ctx); + *user = NULL; + } +} + + +/********************************************************************** + Alloc memory and initialises a SAM_USER_HANDLE on supplied mem_ctx. +***********************************************************************/ + +NTSTATUS sam_init_user_talloc(TALLOC_CTX *mem_ctx, SAM_USER_HANDLE **user) +{ + SMB_ASSERT(*user != NULL); + + if (!mem_ctx) { + DEBUG(0,("sam_init_user_talloc: mem_ctx was NULL!\n")); + return NT_STATUS_UNSUCCESSFUL; + } + + *user=(SAM_USER_HANDLE *)talloc(mem_ctx, sizeof(SAM_USER_HANDLE)); + + if (*user==NULL) { + DEBUG(0,("sam_init_user_talloc: error while allocating memory\n")); + return NT_STATUS_NO_MEMORY; + } + + (*user)->mem_ctx = mem_ctx; + + (*user)->free_fn = NULL; + + sam_fill_default_user(*user); + + return NT_STATUS_OK; +} + + +/************************************************************* + Alloc memory and initialises a struct sam_passwd. + ************************************************************/ + +NTSTATUS sam_init_user(SAM_USER_HANDLE **user) +{ + TALLOC_CTX *mem_ctx; + NTSTATUS nt_status; + + mem_ctx = talloc_init_named("passdb internal SAM_USER_HANDLE allocation"); + + if (!mem_ctx) { + DEBUG(0,("sam_init_user: error while doing talloc_init()\n")); + return NT_STATUS_NO_MEMORY; + } + + if (!NT_STATUS_IS_OK(nt_status = sam_init_user_talloc(mem_ctx, user))) { + talloc_destroy(mem_ctx); + return nt_status; + } + + (*user)->free_fn = destroy_sam_talloc; + + return NT_STATUS_OK; +} + +/** + * Free the contets of the SAM_USER_HANDLE, but not the structure. + * + * Also wipes the LM and NT hashes and plaintext passwrod from + * memory. + * + * @param user SAM_USER_HANDLE to free members of. + **/ + +static void sam_free_user_contents(SAM_USER_HANDLE *user) +{ + + /* Kill off sensitive data. Free()ed by the + talloc mechinism */ + + data_blob_clear_free(&(user->private.lm_pw)); + data_blob_clear_free(&(user->private.nt_pw)); + data_blob_clear_free(&(user->private.plaintext_pw)); +} + + +/************************************************************ + Reset the SAM_USER_HANDLE and free the NT/LM hashes. + ***********************************************************/ + +NTSTATUS sam_reset_sam(SAM_USER_HANDLE *user) +{ + SMB_ASSERT(user != NULL); + + sam_free_user_contents(user); + + sam_fill_default_user(user); + + return NT_STATUS_OK; +} + + +/************************************************************ + Free the SAM_USER_HANDLE and the member pointers. + ***********************************************************/ + +NTSTATUS sam_free_user(SAM_USER_HANDLE **user) +{ + SMB_ASSERT(*user != NULL); + + sam_free_user_contents(*user); + + if ((*user)->free_fn) { + (*user)->free_fn(user); + } + + return NT_STATUS_OK; +} + + +/********************************************************** + Encode the account control bits into a string. + length = length of string to encode into (including terminating + null). length *MUST BE MORE THAN 2* ! + **********************************************************/ + +char *sam_encode_acct_ctrl(uint16 acct_ctrl, size_t length) +{ + static fstring acct_str; + size_t i = 0; + + acct_str[i++] = '['; + + if (acct_ctrl & ACB_PWNOTREQ ) acct_str[i++] = 'N'; + if (acct_ctrl & ACB_DISABLED ) acct_str[i++] = 'D'; + if (acct_ctrl & ACB_HOMDIRREQ) acct_str[i++] = 'H'; + if (acct_ctrl & ACB_TEMPDUP ) acct_str[i++] = 'T'; + if (acct_ctrl & ACB_NORMAL ) acct_str[i++] = 'U'; + if (acct_ctrl & ACB_MNS ) acct_str[i++] = 'M'; + if (acct_ctrl & ACB_WSTRUST ) acct_str[i++] = 'W'; + if (acct_ctrl & ACB_SVRTRUST ) acct_str[i++] = 'S'; + if (acct_ctrl & ACB_AUTOLOCK ) acct_str[i++] = 'L'; + if (acct_ctrl & ACB_PWNOEXP ) acct_str[i++] = 'X'; + if (acct_ctrl & ACB_DOMTRUST ) acct_str[i++] = 'I'; + + for ( ; i < length - 2 ; i++ ) + acct_str[i] = ' '; + + i = length - 2; + acct_str[i++] = ']'; + acct_str[i++] = '\0'; + + return acct_str; +} + +/********************************************************** + Decode the account control bits from a string. + **********************************************************/ + +uint16 sam_decode_acct_ctrl(const char *p) +{ + uint16 acct_ctrl = 0; + BOOL finished = False; + + /* + * Check if the account type bits have been encoded after the + * NT password (in the form [NDHTUWSLXI]). + */ + + if (*p != '[') + return 0; + + for (p++; *p && !finished; p++) { + switch (*p) { + case 'N': { acct_ctrl |= ACB_PWNOTREQ ; break; /* 'N'o password. */ } + case 'D': { acct_ctrl |= ACB_DISABLED ; break; /* 'D'isabled. */ } + case 'H': { acct_ctrl |= ACB_HOMDIRREQ; break; /* 'H'omedir required. */ } + case 'T': { acct_ctrl |= ACB_TEMPDUP ; break; /* 'T'emp account. */ } + case 'U': { acct_ctrl |= ACB_NORMAL ; break; /* 'U'ser account (normal). */ } + case 'M': { acct_ctrl |= ACB_MNS ; break; /* 'M'NS logon user account. What is this ? */ } + case 'W': { acct_ctrl |= ACB_WSTRUST ; break; /* 'W'orkstation account. */ } + case 'S': { acct_ctrl |= ACB_SVRTRUST ; break; /* 'S'erver account. */ } + case 'L': { acct_ctrl |= ACB_AUTOLOCK ; break; /* 'L'ocked account. */ } + case 'X': { acct_ctrl |= ACB_PWNOEXP ; break; /* No 'X'piry on password */ } + case 'I': { acct_ctrl |= ACB_DOMTRUST ; break; /* 'I'nterdomain trust account. */ } + case ' ': { break; } + case ':': + case '\n': + case '\0': + case ']': + default: { finished = True; } + } + } + + return acct_ctrl; +} + +/************************************************************* + Routine to set 32 hex password characters from a 16 byte array. +**************************************************************/ + +void sam_sethexpwd(char *p, const unsigned char *pwd, uint16 acct_ctrl) +{ + if (pwd != NULL) { + int i; + for (i = 0; i < 16; i++) + slprintf(&p[i*2], 3, "%02X", pwd[i]); + } else { + if (acct_ctrl & ACB_PWNOTREQ) + safe_strcpy(p, "NO PASSWORDXXXXXXXXXXXXXXXXXXXXX", 33); + else + safe_strcpy(p, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 33); + } +} + +/************************************************************* + Routine to get the 32 hex characters and turn them + into a 16 byte array. +**************************************************************/ + +BOOL sam_gethexpwd(const char *p, unsigned char *pwd) +{ + int i; + unsigned char lonybble, hinybble; + char *hexchars = "0123456789ABCDEF"; + char *p1, *p2; + + if (!p) + return (False); + + for (i = 0; i < 32; i += 2) { + hinybble = toupper(p[i]); + lonybble = toupper(p[i + 1]); + + p1 = strchr(hexchars, hinybble); + p2 = strchr(hexchars, lonybble); + + if (!p1 || !p2) + return (False); + + hinybble = PTR_DIFF(p1, hexchars); + lonybble = PTR_DIFF(p2, hexchars); + + pwd[i / 2] = (hinybble << 4) | lonybble; + } + return (True); +} diff --git a/source/sam/get_set_domain.c b/source/sam/get_set_domain.c new file mode 100644 index 00000000000..49a63f9fae6 --- /dev/null +++ b/source/sam/get_set_domain.c @@ -0,0 +1,263 @@ +/* + Unix SMB/CIFS implementation. + SAM_DOMAIN access routines + Copyright (C) Luke Kenneth Casson Leighton 1996-1998 + Copyright (C) Andrew Bartlett 2002 + Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Jelmer Vernooij 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_SAM + +NTSTATUS sam_get_domain_sid(SAM_DOMAIN_HANDLE *domain, DOM_SID **sid) +{ + if (!domain || !sid) return NT_STATUS_UNSUCCESSFUL; + + *sid = &domain->private.sid; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_num_users(SAM_DOMAIN_HANDLE *domain, uint32 *num_users) +{ + if (!domain || !num_users)return NT_STATUS_UNSUCCESSFUL; + + *num_users = domain->private.num_users; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_num_groups(SAM_DOMAIN_HANDLE *domain, uint32 *num_groups) +{ + if (!domain || !num_groups)return NT_STATUS_UNSUCCESSFUL; + + *num_groups = domain->private.num_groups; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_num_aliases(SAM_DOMAIN_HANDLE *domain, uint32 *num_aliases) +{ + if (!domain || !num_aliases)return NT_STATUS_UNSUCCESSFUL; + + *num_aliases = domain->private.num_aliases; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_name(SAM_DOMAIN_HANDLE *domain, char **domain_name) +{ + if (!domain || !domain_name)return NT_STATUS_UNSUCCESSFUL; + + *domain_name = domain->private.name; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, char *domain_name) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.name = talloc_strdup(domain->mem_ctx, domain_name); + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, char **server_name) +{ + if (!domain || !server_name)return NT_STATUS_UNSUCCESSFUL; + + *server_name = domain->private.servername; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_server(SAM_DOMAIN_HANDLE *domain, char *server_name) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.servername = talloc_strdup(domain->mem_ctx, server_name); + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwordage) +{ + if (!domain || !max_passwordage)return NT_STATUS_UNSUCCESSFUL; + + *max_passwordage = domain->private.max_passwordage; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwordage) +{ + if (!domain || !min_passwordage)return NT_STATUS_UNSUCCESSFUL; + + *min_passwordage = domain->private.min_passwordage; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME *lockout_duration) +{ + if (!domain || !lockout_duration)return NT_STATUS_UNSUCCESSFUL; + + *lockout_duration = domain->private.lockout_duration; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME *reset_lockout_count) +{ + if (!domain || !reset_lockout_count)return NT_STATUS_UNSUCCESSFUL; + + *reset_lockout_count = domain->private.reset_count; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 *min_passwordlength) +{ + if (!domain || !min_passwordlength)return NT_STATUS_UNSUCCESSFUL; + + *min_passwordlength = domain->private.min_passwordlength; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 *password_history) +{ + if (!domain || !password_history)return NT_STATUS_UNSUCCESSFUL; + + *password_history = domain->private.password_history; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 *lockout_count) +{ + if (!domain || !lockout_count)return NT_STATUS_UNSUCCESSFUL; + + *lockout_count = domain->private.lockout_count; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL *force_logoff) +{ + if (!domain || !force_logoff)return NT_STATUS_UNSUCCESSFUL; + + *force_logoff = domain->private.force_logoff; + + return NT_STATUS_OK; +} + + +NTSTATUS sam_get_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL *login_pwdchange) +{ + if (!domain || !login_pwdchange)return NT_STATUS_UNSUCCESSFUL; + + *login_pwdchange = domain->private.login_pwdchange; + + return NT_STATUS_OK; +} + +/* Set */ + +NTSTATUS sam_set_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME max_passwordage) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.max_passwordage = max_passwordage; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME min_passwordage) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.min_passwordage = min_passwordage; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME lockout_duration) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.lockout_duration = lockout_duration; + + return NT_STATUS_OK; +} +NTSTATUS sam_set_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME reset_lockout_count) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.reset_count = reset_lockout_count; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 min_passwordlength) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.min_passwordlength = min_passwordlength; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 password_history) +{ + if (!domain) return NT_STATUS_UNSUCCESSFUL; + + domain->private.password_history = password_history; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 lockout_count) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.lockout_count = lockout_count; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL force_logoff) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.force_logoff = force_logoff; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL login_pwdchange) +{ + if (!domain) return NT_STATUS_UNSUCCESSFUL; + + domain->private.login_pwdchange = login_pwdchange; + + return NT_STATUS_OK; +} diff --git a/source/sam/get_set_group.c b/source/sam/get_set_group.c new file mode 100644 index 00000000000..51f91ada820 --- /dev/null +++ b/source/sam/get_set_group.c @@ -0,0 +1,123 @@ +/* + Unix SMB/CIFS implementation. + SAM_USER_HANDLE access routines + Copyright (C) Andrew Bartlett 2002 + Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Jelmer Vernooij 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_SAM + +/* sam group get functions */ + +NTSTATUS sam_get_group_sid(const SAM_GROUP_HANDLE *group, DOM_SID **sid) +{ + if (!group || !sid) return NT_STATUS_UNSUCCESSFUL; + + *sid = &group->private.sid; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_group_typ(const SAM_GROUP_HANDLE *group, uint32 *typ) +{ + if (!group || !typ) return NT_STATUS_UNSUCCESSFUL; + + *typ = group->private.flags; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_group_name(const SAM_GROUP_HANDLE *group, char **group_name) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + *group_name = group->private.name; + + return NT_STATUS_OK; + +} +NTSTATUS sam_get_group_comment(const SAM_GROUP_HANDLE *group, char **comment) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + *comment = group->private.comment; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_group_priv_set(const SAM_GROUP_HANDLE *group, PRIVILEGE_SET *priv_set) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + *priv_set = group->private.privileges; + + return NT_STATUS_OK; +} + +/* sam group set functions */ + +NTSTATUS sam_set_group_sid(SAM_GROUP_HANDLE *group, DOM_SID *sid) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + if (!sid) ZERO_STRUCT(group->private.sid); + else sid_copy(&(group->private.sid), sid); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_group_typ(SAM_GROUP_HANDLE *group, uint32 typ) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + group->private.flags = typ; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_group_name(SAM_GROUP_HANDLE *group, char *group_name) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + group->private.name = talloc_strdup(group->mem_ctx, group_name); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_group_comment(SAM_GROUP_HANDLE *group, char *comment) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + group->private.comment = talloc_strdup(group->mem_ctx, comment); + + return NT_STATUS_OK; + +} + +NTSTATUS sam_set_group_priv_set(SAM_GROUP_HANDLE *group, PRIVILEGE_SET *priv_set) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + if (!priv_set) ZERO_STRUCT(group->private.privileges); + else memcpy(&(group->private.privileges), priv_set, sizeof(PRIVILEGE_SET)); + + return NT_STATUS_OK; +} diff --git a/source/sam/get_set_user.c b/source/sam/get_set_user.c new file mode 100644 index 00000000000..e58afe6880d --- /dev/null +++ b/source/sam/get_set_user.c @@ -0,0 +1,903 @@ +/* + Unix SMB/CIFS implementation. + SAM_USER_HANDLE access routines + Copyright (C) Andrew Bartlett 2002 + Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Jelmer Vernooij 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_SAM + +NTSTATUS sam_get_user_domain_sid (const SAM_USER_HANDLE *sampass, DOM_SID **sid) +{ + NTSTATUS status; + SAM_DOMAIN_HANDLE *domain; + if (!sampass || !sid) return NT_STATUS_UNSUCCESSFUL; + + if (!NT_STATUS_IS_OK(status = sam_get_user_domain(sampass, &domain))){ + DEBUG(0, ("sam_get_user_domain_sid: Can't get domain for user\n")); + return status; + } + + return sam_get_domain_sid(domain, sid); +} + +NTSTATUS sam_get_user_domain_name (const SAM_USER_HANDLE *sampass, char **domain_name) +{ + NTSTATUS status; + SAM_DOMAIN_HANDLE *domain; + if (!sampass || !domain_name) return NT_STATUS_UNSUCCESSFUL; + + if (!NT_STATUS_IS_OK(status = sam_get_user_domain(sampass, &domain))){ + DEBUG(0, ("sam_get_user_domain_name: Can't get domain for user\n")); + return status; + } + + return sam_get_domain_name(domain, domain_name); +} + +NTSTATUS sam_get_user_acct_ctrl (const SAM_USER_HANDLE *sampass, uint16 *acct_ctrl) +{ + if(!sampass || !acct_ctrl)return NT_STATUS_UNSUCCESSFUL; + + *acct_ctrl = sampass->private.acct_ctrl; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_logon_time (const SAM_USER_HANDLE *sampass, NTTIME *logon_time) +{ + if(!sampass || !logon_time)return NT_STATUS_UNSUCCESSFUL; + + *logon_time = sampass->private.logon_time; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_logoff_time (const SAM_USER_HANDLE *sampass, NTTIME *logoff_time) +{ + if(!sampass || !logoff_time)return NT_STATUS_UNSUCCESSFUL; + + *logoff_time = sampass->private.logoff_time; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_kickoff_time (const SAM_USER_HANDLE *sampass, NTTIME *kickoff_time) +{ + if (!sampass || !kickoff_time)return NT_STATUS_UNSUCCESSFUL; + + *kickoff_time = sampass->private.kickoff_time; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_pass_last_set_time (const SAM_USER_HANDLE *sampass, NTTIME *pass_last_set_time) +{ + if (!sampass || !pass_last_set_time)return NT_STATUS_UNSUCCESSFUL; + + *pass_last_set_time = sampass->private.pass_last_set_time; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_pass_can_change_time (const SAM_USER_HANDLE *sampass, NTTIME *pass_can_change_time) +{ + if (!sampass || !pass_can_change_time)return NT_STATUS_UNSUCCESSFUL; + + *pass_can_change_time = sampass->private.pass_can_change_time; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_pass_must_change_time (const SAM_USER_HANDLE *sampass, NTTIME *pass_must_change_time) +{ + if (!sampass || !pass_must_change_time)return NT_STATUS_UNSUCCESSFUL; + + *pass_must_change_time = sampass->private.pass_must_change_time; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_logon_divs (const SAM_USER_HANDLE *sampass, uint16 *logon_divs) +{ + if (!sampass || !logon_divs)return NT_STATUS_UNSUCCESSFUL; + + *logon_divs = sampass->private.logon_divs; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_hours_len (const SAM_USER_HANDLE *sampass, uint32 *hours_len) +{ + if (!sampass || !hours_len)return NT_STATUS_UNSUCCESSFUL; + + *hours_len = sampass->private.hours_len; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_hours (const SAM_USER_HANDLE *sampass, uint8 **hours) +{ + if (!sampass || !hours)return NT_STATUS_UNSUCCESSFUL; + + *hours = sampass->private.hours; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_nt_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB *nt_pwd) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + SMB_ASSERT((!sampass->private.nt_pw.data) + || sampass->private.nt_pw.length == NT_HASH_LEN); + + *nt_pwd = sampass->private.nt_pw; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_lm_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB *lm_pwd) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + SMB_ASSERT((!sampass->private.lm_pw.data) + || sampass->private.lm_pw.length == LM_HASH_LEN); + + *lm_pwd = sampass->private.lm_pw; + + return NT_STATUS_OK; +} + +/* Return the plaintext password if known. Most of the time + it isn't, so don't assume anything magic about this function. + + Used to pass the plaintext to sam backends that might + want to store more than just the NTLM hashes. +*/ + +NTSTATUS sam_get_user_plaintext_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB **plain_pwd) +{ + if (!sampass || !plain_pwd)return NT_STATUS_UNSUCCESSFUL; + + *plain_pwd = &(sampass->private.plaintext_pw); + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_sid(const SAM_USER_HANDLE *sampass, DOM_SID **sid) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *sid = &(sampass->private.user_sid); + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_pgroup(const SAM_USER_HANDLE *sampass, DOM_SID **sid) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *sid = &(sampass->private.group_sid); + + return NT_STATUS_OK; +} + +/** + * Get flags showing what is initalised in the SAM_USER_HANDLE + * @param sampass the SAM_USER_HANDLE in question + * @return the flags indicating the members initialised in the struct. + **/ + +NTSTATUS sam_get_user_init_flag (const SAM_USER_HANDLE *sampass, uint32 *initflag) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *initflag = sampass->private.init_flag; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_name (const SAM_USER_HANDLE *sampass, char **username) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *username = sampass->private.username; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_domain (const SAM_USER_HANDLE *sampass, SAM_DOMAIN_HANDLE **domain) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *domain = sampass->private.domain; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_fullname (const SAM_USER_HANDLE *sampass, char **fullname) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *fullname = sampass->private.full_name; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_homedir (const SAM_USER_HANDLE *sampass, char **homedir) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *homedir = sampass->private.home_dir; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_unix_home_dir (const SAM_USER_HANDLE *sampass, char **uhomedir) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *uhomedir = sampass->private.unix_home_dir; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_dir_drive (const SAM_USER_HANDLE *sampass, char **dirdrive) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *dirdrive = sampass->private.dir_drive; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_logon_script (const SAM_USER_HANDLE *sampass, char **logon_script) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *logon_script = sampass->private.logon_script; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_profile_path (const SAM_USER_HANDLE *sampass, char **profile_path) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *profile_path = sampass->private.profile_path; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_description (const SAM_USER_HANDLE *sampass, char **description) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *description = sampass->private.acct_desc; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_workstations (const SAM_USER_HANDLE *sampass, char **workstations) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *workstations = sampass->private.workstations; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_unknown_str (const SAM_USER_HANDLE *sampass, char **unknown_str) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *unknown_str = sampass->private.unknown_str; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_munged_dial (const SAM_USER_HANDLE *sampass, char **munged_dial) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *munged_dial = sampass->private.munged_dial; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_unknown_1 (const SAM_USER_HANDLE *sampass, uint32 *unknown1) +{ + if (!sampass || !unknown1)return NT_STATUS_UNSUCCESSFUL; + + *unknown1 = sampass->private.unknown_1; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_unknown_2 (const SAM_USER_HANDLE *sampass, uint32 *unknown2) +{ + if (!sampass || !unknown2)return NT_STATUS_UNSUCCESSFUL; + + *unknown2 = sampass->private.unknown_2; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_unknown_3 (const SAM_USER_HANDLE *sampass, uint32 *unknown3) +{ + if (!sampass || !unknown3)return NT_STATUS_UNSUCCESSFUL; + + *unknown3 = sampass->private.unknown_3; + + return NT_STATUS_OK; +} + +/********************************************************************* + Collection of set...() functions for SAM_USER_HANDLE_INFO. + ********************************************************************/ + +NTSTATUS sam_set_user_acct_ctrl (SAM_USER_HANDLE *sampass, uint16 flags) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.acct_ctrl = flags; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_logon_time (SAM_USER_HANDLE *sampass, NTTIME mytime, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.logon_time = mytime; + + if (store) + sam_set_user_init_flag(sampass, FLAG_SAM_LOGONTIME); + + return NT_STATUS_UNSUCCESSFUL; +} + +NTSTATUS sam_set_user_logoff_time (SAM_USER_HANDLE *sampass, NTTIME mytime, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.logoff_time = mytime; + + if (store) + sam_set_user_init_flag(sampass, FLAG_SAM_LOGOFFTIME); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_kickoff_time (SAM_USER_HANDLE *sampass, NTTIME mytime, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.kickoff_time = mytime; + + if (store) + sam_set_user_init_flag(sampass, FLAG_SAM_KICKOFFTIME); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_pass_can_change_time (SAM_USER_HANDLE *sampass, NTTIME mytime, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.pass_can_change_time = mytime; + + if (store) + sam_set_user_init_flag(sampass, FLAG_SAM_CANCHANGETIME); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_pass_must_change_time (SAM_USER_HANDLE *sampass, NTTIME mytime, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.pass_must_change_time = mytime; + + if (store) + sam_set_user_init_flag(sampass, FLAG_SAM_MUSTCHANGETIME); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_pass_last_set_time (SAM_USER_HANDLE *sampass, NTTIME mytime) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.pass_last_set_time = mytime; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_hours_len (SAM_USER_HANDLE *sampass, uint32 len) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.hours_len = len; + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_logon_divs (SAM_USER_HANDLE *sampass, uint16 hours) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.logon_divs = hours; + return NT_STATUS_OK; +} + +/** + * Set flags showing what is initalised in the SAM_USER_HANDLE + * @param sampass the SAM_USER_HANDLE in question + * @param flag The *new* flag to be set. Old flags preserved + * this flag is only added. + **/ + +NTSTATUS sam_set_user_init_flag (SAM_USER_HANDLE *sampass, uint32 flag) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.init_flag |= flag; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_sid (SAM_USER_HANDLE *sampass, DOM_SID *u_sid) +{ + if (!sampass || !u_sid) + return NT_STATUS_UNSUCCESSFUL; + + sid_copy(&sampass->private.user_sid, u_sid); + + DEBUG(10, ("sam_set_user_sid: setting user sid %s\n", + sid_string_static(&sampass->private.user_sid))); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_sid_from_string (SAM_USER_HANDLE *sampass, fstring u_sid) +{ + DOM_SID new_sid; + if (!sampass || !u_sid) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_user_sid_from_string: setting user sid %s\n", + u_sid)); + + if (!string_to_sid(&new_sid, u_sid)) { + DEBUG(1, ("sam_set_user_sid_from_string: %s isn't a valid SID!\n", u_sid)); + return NT_STATUS_UNSUCCESSFUL; + } + + if (!NT_STATUS_IS_OK(sam_set_user_sid(sampass, &new_sid))) { + DEBUG(1, ("sam_set_user_sid_from_string: could not set sid %s on SAM_USER_HANDLE!\n", u_sid)); + return NT_STATUS_UNSUCCESSFUL; + } + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_pgroup_sid (SAM_USER_HANDLE *sampass, DOM_SID *g_sid) +{ + if (!sampass || !g_sid) + return NT_STATUS_UNSUCCESSFUL; + + sid_copy(&sampass->private.group_sid, g_sid); + + DEBUG(10, ("sam_set_group_sid: setting group sid %s\n", + sid_string_static(&sampass->private.group_sid))); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_pgroup_string (SAM_USER_HANDLE *sampass, fstring g_sid) +{ + DOM_SID new_sid; + if (!sampass || !g_sid) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_group_sid_from_string: setting group sid %s\n", + g_sid)); + + if (!string_to_sid(&new_sid, g_sid)) { + DEBUG(1, ("sam_set_group_sid_from_string: %s isn't a valid SID!\n", g_sid)); + return NT_STATUS_UNSUCCESSFUL; + } + + if (!NT_STATUS_IS_OK(sam_set_user_pgroup_sid(sampass, &new_sid))) { + DEBUG(1, ("sam_set_group_sid_from_string: could not set sid %s on SAM_USER_HANDLE!\n", g_sid)); + return NT_STATUS_UNSUCCESSFUL; + } + return NT_STATUS_OK; +} + +/********************************************************************* + Set the domain name. + ********************************************************************/ + +NTSTATUS sam_set_user_domain(SAM_USER_HANDLE *sampass, SAM_DOMAIN_HANDLE *domain) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.domain = domain; + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's NT name. + ********************************************************************/ + +NTSTATUS sam_set_user_username(SAM_USER_HANDLE *sampass, const char *nt_username) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_user_username: setting nt username %s, was %s\n", nt_username, sampass->private.username)); + + sampass->private.username = talloc_strdup(sampass->mem_ctx, nt_username); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's full name. + ********************************************************************/ + +NTSTATUS sam_set_user_fullname(SAM_USER_HANDLE *sampass, const char *full_name) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_user_fullname: setting full name %s, was %s\n", full_name, sampass->private.full_name)); + + sampass->private.full_name = talloc_strdup(sampass->mem_ctx, full_name); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's logon script. + ********************************************************************/ + +NTSTATUS sam_set_user_logon_script(SAM_USER_HANDLE *sampass, const char *logon_script, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_logon_script: from %s to %s\n", logon_script, sampass->private.logon_script)); + + sampass->private.logon_script = talloc_strdup(sampass->mem_ctx, logon_script); + + sam_set_user_init_flag(sampass, FLAG_SAM_LOGONSCRIPT); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's profile path. + ********************************************************************/ + +NTSTATUS sam_set_user_profile_path (SAM_USER_HANDLE *sampass, const char *profile_path, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_profile_path: setting profile path %s, was %s\n", profile_path, sampass->private.profile_path)); + + sampass->private.profile_path = talloc_strdup(sampass->mem_ctx, profile_path); + + if (store) { + DEBUG(10, ("sam_set_profile_path: setting profile path sam flag!\n")); + sam_set_user_init_flag(sampass, FLAG_SAM_PROFILE); + } + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's directory drive. + ********************************************************************/ + +NTSTATUS sam_set_user_dir_drive (SAM_USER_HANDLE *sampass, const char *dir_drive, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_dir_drive: setting dir drive %s, was %s\n", dir_drive, + sampass->private.dir_drive)); + + sampass->private.dir_drive = talloc_strdup(sampass->mem_ctx, dir_drive); + + if (store) { + DEBUG(10, ("sam_set_dir_drive: setting dir drive sam flag!\n")); + sam_set_user_init_flag(sampass, FLAG_SAM_DRIVE); + } + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's home directory. + ********************************************************************/ + +NTSTATUS sam_set_user_homedir (SAM_USER_HANDLE *sampass, const char *home_dir, BOOL store) +{ + if (!sampass) return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_homedir: setting home dir %s, was %s\n", home_dir, + sampass->private.home_dir)); + + sampass->private.home_dir = talloc_strdup(sampass->mem_ctx, home_dir); + + if (store) { + DEBUG(10, ("sam_set_homedir: setting home dir sam flag!\n")); + sam_set_user_init_flag(sampass, FLAG_SAM_SMBHOME); + } + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's unix home directory. + ********************************************************************/ + +NTSTATUS sam_set_user_unix_homedir (SAM_USER_HANDLE *sampass, const char *unix_home_dir) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_unix_homedir: setting home dir %s, was %s\n", unix_home_dir, + sampass->private.unix_home_dir)); + + sampass->private.unix_home_dir = talloc_strdup(sampass->mem_ctx, unix_home_dir); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's account description. + ********************************************************************/ + +NTSTATUS sam_set_user_acct_desc (SAM_USER_HANDLE *sampass, const char *acct_desc) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.acct_desc = talloc_strdup(sampass->mem_ctx, acct_desc); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's workstation allowed list. + ********************************************************************/ + +NTSTATUS sam_set_user_workstations (SAM_USER_HANDLE *sampass, const char *workstations) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_workstations: setting workstations %s, was %s\n", workstations, + sampass->private.workstations)); + + sampass->private.workstations = talloc_strdup(sampass->mem_ctx, workstations); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's 'unknown_str', whatever the heck this actually is... + ********************************************************************/ + +NTSTATUS sam_set_user_unknown_str (SAM_USER_HANDLE *sampass, const char *unknown_str) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.unknown_str = talloc_strdup(sampass->mem_ctx, unknown_str); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's dial string. + ********************************************************************/ + +NTSTATUS sam_set_user_munged_dial (SAM_USER_HANDLE *sampass, const char *munged_dial) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.munged_dial = talloc_strdup(sampass->mem_ctx, munged_dial); + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's NT hash. + ********************************************************************/ + +NTSTATUS sam_set_user_nt_pwd (SAM_USER_HANDLE *sampass, DATA_BLOB data) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.nt_pw = data; + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's LM hash. + ********************************************************************/ + +NTSTATUS sam_set_user_lm_pwd (SAM_USER_HANDLE *sampass, DATA_BLOB data) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.lm_pw = data; + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's plaintext password only (base procedure, see helper + below) + ********************************************************************/ + +NTSTATUS sam_set_user_plaintext_pw_only (SAM_USER_HANDLE *sampass, DATA_BLOB data) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.plaintext_pw = data; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_unknown_1 (SAM_USER_HANDLE *sampass, uint32 unkn) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.unknown_1 = unkn; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_unknown_2 (SAM_USER_HANDLE *sampass, uint32 unkn) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.unknown_2 = unkn; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_unknown_3 (SAM_USER_HANDLE *sampass, uint32 unkn) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.unknown_3 = unkn; + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_hours (SAM_USER_HANDLE *sampass, const uint8 *hours) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + if (!hours) { + memset ((char *)sampass->private.hours, 0, MAX_HOURS_LEN); + return NT_STATUS_OK; + } + + memcpy (sampass->private.hours, hours, MAX_HOURS_LEN); + + return NT_STATUS_OK; +} + +/* Helpful interfaces to the above */ + +/********************************************************************* + Sets the last changed times and must change times for a normal + password change. + ********************************************************************/ + +NTSTATUS sam_set_user_pass_changed_now (SAM_USER_HANDLE *sampass) +{ + uint32 expire; + NTTIME temptime; + + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + unix_to_nt_time(&temptime, time(NULL)); + if (!NT_STATUS_IS_OK(sam_set_user_pass_last_set_time (sampass, temptime))) + return NT_STATUS_UNSUCCESSFUL; + + if (!account_policy_get(AP_MAX_PASSWORD_AGE, &expire) + || (expire==(uint32)-1)) { + + get_nttime_max(&temptime); + if (!NT_STATUS_IS_OK(sam_set_user_pass_must_change_time (sampass, temptime, False))) + return NT_STATUS_UNSUCCESSFUL; + + } else { + /* FIXME: Add expire to temptime */ + + if (!NT_STATUS_IS_OK(sam_get_user_pass_last_set_time(sampass,&temptime)) || !NT_STATUS_IS_OK(sam_set_user_pass_must_change_time (sampass, temptime,True))) + return NT_STATUS_UNSUCCESSFUL; + } + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's PLAINTEXT password. Used as an interface to the above. + Also sets the last change time to NOW. + ********************************************************************/ + +NTSTATUS sam_set_plaintext_passwd (SAM_USER_HANDLE *sampass, const char *plaintext) +{ + DATA_BLOB data; + uchar new_lanman_p16[16]; + uchar new_nt_p16[16]; + + if (!sampass || !plaintext) + return NT_STATUS_UNSUCCESSFUL; + + nt_lm_owf_gen (plaintext, new_nt_p16, new_lanman_p16); + + data = data_blob(new_nt_p16, 16); + if (!NT_STATUS_IS_OK(sam_set_user_nt_pwd (sampass, data))) + return NT_STATUS_UNSUCCESSFUL; + + data = data_blob(new_lanman_p16, 16); + + if (!NT_STATUS_IS_OK(sam_set_user_lm_pwd (sampass, data))) + return NT_STATUS_UNSUCCESSFUL; + + if (!NT_STATUS_IS_OK(sam_set_user_pass_changed_now (sampass))) + return NT_STATUS_UNSUCCESSFUL; + + return NT_STATUS_OK; +} + diff --git a/source/sam/interface.c b/source/sam/interface.c new file mode 100644 index 00000000000..6adf213d27b --- /dev/null +++ b/source/sam/interface.c @@ -0,0 +1,1001 @@ +/* + Unix SMB/CIFS implementation. + Password and authentication handling + Copyright (C) Andrew Bartlett 2002 + Copyright (C) Jelmer Vernooij 2002 + Copyright (C) Stefan (metze) Metzmacher 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_SAM + +/** List of various built-in sam modules */ + +const struct sam_init_function_entry builtin_sam_init_functions[] = { + { NULL, NULL} +}; + +/* FIXME: wrapper functions : context_* */ + +/****************************************************************** + context_sam_* functions are used to link the external SAM interface + with the internal backends. These functions lookup the appropriate + backends for the domain and pass on to the function in sam_methods + in the selected backend + *******************************************************************/ + +NTSTATUS sam_get_methods_by_sid(const struct sam_context *context, struct sam_methods **sam_method, const DOM_SID *domainsid) +{ + struct sam_methods *tmp_methods; + + DEBUG(5,("sam_get_methods_by_sid: %d\n", __LINE__)); + + if ((!context) || (!context->methods)) + { + DEBUG(2,("sam_get_methods_by_sid: invalid sam_context specified!\n")); + return NT_STATUS_INVALID_PARAMETER; + } + + tmp_methods = context->methods; + + while (tmp_methods) + { + if (sid_equal(domainsid, &tmp_methods->domain->private.sid)) + { + (*sam_method) = tmp_methods; + return NT_STATUS_OK; + } + tmp_methods = tmp_methods->next; + } + + DEBUG(3,("sam_get_methods_by_sid: There is no backend specified for domain %s\n", sid_string_static(domainsid))); + + return NT_STATUS_NO_SUCH_DOMAIN; +} + +NTSTATUS sam_get_methods_by_name(const struct sam_context *context, struct sam_methods **sam_method, const char *domainname) +{ + struct sam_methods *tmp_methods; + + DEBUG(5,("sam_get_methods_by_name: %d\n", __LINE__)); + + if ((!context) || (!context->methods)) + { + DEBUG(2,("sam_get_methods_by_sid: invalid sam_context specified!\n")); + return NT_STATUS_INVALID_PARAMETER; + } + + tmp_methods = context->methods; + + while (tmp_methods) + { + if (strcmp(domainname, tmp_methods->domain->private.name)) + { + (*sam_method) = tmp_methods; + return NT_STATUS_OK; + } + tmp_methods = tmp_methods->next; + } + + DEBUG(3,("sam_get_methods_by_sid: There is no backend specified for domain %s\n", domainname)); + + return NT_STATUS_NO_SUCH_DOMAIN; +} + +NTSTATUS context_sam_get_sec_desc(const struct sam_context *context, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) +{ + struct sam_methods *tmp_methods; +// DOM_SID *domainsid; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_get_sec_desc: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_get_sec_desc) { + DEBUG(3, ("context_sam_get_sec_desc: sam_methods of the domain did not specify sam_get_sec_desc\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_sec_desc(tmp_methods, access_token, sid, sd))) { + DEBUG(4,("context_sam_get_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_set_sec_desc(const struct sam_context *context, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) +{ + struct sam_methods *tmp_methods; +// DOM_SID *domainsid; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_set_sec_desc: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_set_sec_desc) { + DEBUG(3, ("context_sam_set_sec_desc: sam_methods of the domain did not specify sam_set_sec_desc\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_set_sec_desc(tmp_methods, access_token, sid, sd))) { + DEBUG(4,("context_sam_set_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + + +NTSTATUS context_sam_lookup_name(const struct sam_context *context, const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID **sid, uint32 *type) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_lookup_name: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_name(context, &tmp_methods, domain))) { + DEBUG(4,("sam_get_methods_by_name failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_lookup_name) { + DEBUG(3, ("context_sam_lookup_name: sam_methods of the domain did not specify sam_lookup_name\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_name(tmp_methods, access_token, name, sid, type))) { + DEBUG(4,("context_sam_lookup_name for %s\\%s in backend %s failed\n", + tmp_methods->domain->private.name, name, tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_lookup_sid(const struct sam_context *context, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type) +{ + struct sam_methods *tmp_methods; + uint32 rid; + NTSTATUS nt_status; + DOM_SID domainsid; + + DEBUG(5,("context_sam_lookup_sid: %d\n", __LINE__)); + + sid_copy(&domainsid, sid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_lookup_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_lookup_sid) { + DEBUG(3, ("context_sam_lookup_sid: sam_methods of the domain did not specify sam_lookup_sid\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_sid(tmp_methods, access_token, sid, name, type))) { + DEBUG(4,("context_sam_lookup_name for %s in backend %s failed\n", + sid_string_static(sid), tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + + +NTSTATUS context_sam_update_domain(const struct sam_context *context, const SAM_DOMAIN_HANDLE *domain) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS context_sam_enum_domains(const struct sam_context *context, const NT_USER_TOKEN *access_token, int32 *domain_count, DOM_SID **domains, char ***domain_names) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + SEC_DESC *sd; + size_t sd_size; + uint32 acc_granted; + int i = 0; + + DEBUG(5,("context_sam_enum_domains: %d\n", __LINE__)); + + if ((!context)|| (!context->methods)) { + DEBUG(2,("context_sam_enum_domains: invalid sam_context specified!\n")); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { + DEBUG(4,("samr_make_sam_obj_sd failed\n")); + return nt_status; + } + + if (!se_access_check(sd, access_token, SAMR_ACCESS_ENUM_DOMAINS, &acc_granted, &nt_status)) { + DEBUG(3,("context_sam_enum_domains: ACCESS DENIED\n")); + return nt_status; + } + + tmp_methods= context->methods; + + while (tmp_methods) + { + (*domain_count)++; + tmp_methods= tmp_methods->next; + } + + DEBUG(6,("context_sam_enum_domains: enumerating %d domains\n", (*domain_count))); + + tmp_methods = context->methods; + + if (((*domains) = malloc( sizeof(DOM_SID) * (*domain_count))) == NULL) { + DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain list\n")); + return NT_STATUS_NO_MEMORY; + } + + if (((*domain_names) = malloc( sizeof(char*) * (*domain_count))) == NULL) { + DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain list\n")); + SAFE_FREE((*domains)); + return NT_STATUS_NO_MEMORY; + } + + while (tmp_methods) + { + + DEBUGADD(7,(" [%d] %s: %s\n", i, tmp_methods->domain->private.name, sid_string_static(&tmp_methods->domain->private.sid))); + sid_copy(domains[i],&tmp_methods->domain->private.sid); + if(asprintf(&(*domain_names[i]),"%s",tmp_methods->domain->private.name) < 0) { + DEBUG(0,("context_sam_enum_domains: asprintf failed")); + SAFE_FREE((*domains)); + SAFE_FREE((*domain_names)); + return NT_STATUS_NO_MEMORY; + } + + i++; + tmp_methods= tmp_methods->next; + + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_lookup_domain(const struct sam_context *context, const NT_USER_TOKEN *access_token, const char *domain, DOM_SID **domainsid) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + SEC_DESC *sd; + size_t sd_size; + uint32 acc_granted; + + DEBUG(5,("context_sam_lookup_domain: %d\n", __LINE__)); + + if ((!context)|| (!context->methods)) { + DEBUG(2,("context_sam_lookup_domain: invalid sam_context specified!\n")); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { + DEBUG(4,("samr_make_sam_obj_sd failed\n")); + return nt_status; + } + + if (!se_access_check(sd, access_token, SAMR_ACCESS_OPEN_DOMAIN, &acc_granted, &nt_status)) { + DEBUG(3,("context_sam_lookup_domain: ACCESS DENIED\n")); + return nt_status; + } + + tmp_methods= context->methods; + + while (tmp_methods) + { + if (strcmp(domain, tmp_methods->domain->private.name) == 0) { + sid_copy((*domainsid), &tmp_methods->domain->private.sid); + return NT_STATUS_OK; + } + tmp_methods= tmp_methods->next; + } + + return NT_STATUS_NO_SUCH_DOMAIN; +} + + +NTSTATUS context_sam_get_domain_by_sid(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_get_domain_by_sid: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_get_domain_handle) { + DEBUG(3, ("context_sam_get_domain_by_sid: sam_methods of the domain did not specify sam_get_domain_handle\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_domain_handle(tmp_methods, access_token, access_desired, domain))) { + DEBUG(4,("context_sam_get_domain_by_sid for %s in backend %s failed\n", + sid_string_static(domainsid), tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_create_user(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, DOM_SID *domainsid, SAM_USER_HANDLE **user) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_create_user: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_create_user) { + DEBUG(3, ("context_sam_create_user: sam_methods of the domain did not specify sam_create_user\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_user(tmp_methods, access_token, access_desired, user))) { + DEBUG(4,("context_sam_create_user in backend %s failed\n", + tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_add_user(const struct sam_context *context, const SAM_USER_HANDLE *user) +{ + DOM_SID domainsid; + DOM_SID *usersid; + struct sam_methods *tmp_methods; + uint32 rid; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = sam_get_user_sid(user, &usersid))) { + DEBUG(0,("Can't get user SID\n")); + return status; + } + + sid_copy(&domainsid, usersid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_user_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return status; + } + + if (!tmp_methods->sam_add_user) { + DEBUG(3, ("context_sam_add_user: sam_methods of the domain did not specify sam_add_user\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(status = tmp_methods->sam_add_user(tmp_methods, user))){ + DEBUG(4,("context_sam_add_user in backend %s failed\n", + tmp_methods->backendname)); + return status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_update_user(const struct sam_context *context, const SAM_USER_HANDLE *user) +{ + DOM_SID domainsid; + struct sam_methods *tmp_methods; + DOM_SID *usersid; + uint32 rid; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = sam_get_user_sid(user, &usersid))) { + DEBUG(0,("Can't get user SID\n")); + return status; + } + + sid_copy(&domainsid, usersid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_user_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return status; + } + + if (!tmp_methods->sam_update_user) { + DEBUG(3, ("context_sam_update_user: sam_methods of the domain did not specify sam_update_user\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(status = tmp_methods->sam_update_user(tmp_methods, user))){ + DEBUG(4,("context_sam_update_user in backend %s failed\n", + tmp_methods->backendname)); + return status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_delete_user(const struct sam_context *context, SAM_USER_HANDLE *user) +{ + DOM_SID domainsid; + struct sam_methods *tmp_methods; + DOM_SID *usersid; + uint32 rid; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = sam_get_user_sid(user, &usersid))) { + DEBUG(0,("Can't get user SID\n")); + return status; + } + + sid_copy(&domainsid, usersid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_user_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return status; + } + + if (!tmp_methods->sam_delete_user) { + DEBUG(3, ("context_sam_delete_user: sam_methods of the domain did not specify sam_delete_user\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(status = tmp_methods->sam_delete_user(tmp_methods, user))){ + DEBUG(4,("context_sam_delete_user in backend %s failed\n", + tmp_methods->backendname)); + return status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_enum_users(const struct sam_context *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, int32 *user_count, SAM_USER_ENUM **users) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_enum_users: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_enum_users) { + DEBUG(3, ("context_sam_enum_users: sam_methods of the domain did not specify sam_enum_users\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_users(tmp_methods, access_token, user_count, users))) { + DEBUG(4,("context_sam_enum_users for domain %s in backend %s failed\n", + tmp_methods->domain->private.name, tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + + +NTSTATUS context_sam_get_user_by_sid(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *usersid, SAM_USER_HANDLE **user) +{ + struct sam_methods *tmp_methods; + uint32 rid; + DOM_SID domainsid; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_get_user_by_sid: %d\n", __LINE__)); + + sid_copy(&domainsid, usersid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_user_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_get_user_by_sid) { + DEBUG(3, ("context_sam_get_user_by_sid: sam_methods of the domain did not specify sam_get_user_by_sid\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_user_by_sid(tmp_methods, access_token, access_desired, usersid, user))) { + DEBUG(4,("context_sam_get_user_by_sid for %s in backend %s failed\n", + sid_string_static(usersid), tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_get_user_by_name(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_USER_HANDLE **user) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_get_user_by_name: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_name(context, &tmp_methods, domain))) { + DEBUG(4,("sam_get_methods_by_name failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_get_user_by_name) { + DEBUG(3, ("context_sam_get_user_by_name: sam_methods of the domain did not specify sam_get_user_by_name\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_user_by_name(tmp_methods, access_token, access_desired, name, user))) { + DEBUG(4,("context_sam_get_user_by_name for %s\\%s in backend %s failed\n", + domain, name, tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_create_group(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const uint32 type, DOM_SID *sid, SAM_GROUP_HANDLE **group) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_create_group: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_create_group) { + DEBUG(3, ("context_sam_create_group: sam_methods of the domain did not specify sam_create_group\n")); + return NT_STATUS_UNSUCCESSFUL; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_group(tmp_methods, access_token, access_desired, type, group))) { + DEBUG(4,("context_sam_create_group in backend %s failed\n", + tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_add_group(const struct sam_context *context, const SAM_GROUP_HANDLE *group) +{ + DOM_SID domainsid; + DOM_SID *groupsid; + struct sam_methods *tmp_methods; + uint32 rid; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = sam_get_group_sid(group, &groupsid))) { + DEBUG(0,("Can't get group SID\n")); + return status; + } + + sid_copy(&domainsid, groupsid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return status; + } + + if (!tmp_methods->sam_add_group) { + DEBUG(3, ("context_sam_add_group: sam_methods of the domain did not specify sam_add_group\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(status = tmp_methods->sam_add_group(tmp_methods, group))){ + DEBUG(4,("context_sam_add_group in backend %s failed\n", + tmp_methods->backendname)); + return status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_update_group(const struct sam_context *context, const DOM_SID *domainsid, const SAM_GROUP_HANDLE *group) +{ + DOM_SID domainsid; + DOM_SID *groupsid; + struct sam_methods *tmp_methods; + uint32 rid; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = sam_get_group_sid(group, &groupsid))) { + DEBUG(0,("Can't get group SID\n")); + return status; + } + + sid_copy(&domainsid, groupsid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return status; + } + + if (!tmp_methods->sam_update_group) { + DEBUG(3, ("context_sam_update_group: sam_methods of the domain did not specify sam_update_group\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(status = tmp_methods->sam_update_group(tmp_methods, group))){ + DEBUG(4,("context_sam_update_group in backend %s failed\n", + tmp_methods->backendname)); + return status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_delete_group(const struct sam_context *context, SAM_GROUP_HANDLE **groupsid) +{ + DOM_SID domainsid; + struct sam_methods *tmp_methods; + DOM_SID *groupsid; + uint32 rid; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = sam_get_group_sid(group, &groupsid))) { + DEBUG(0,("Can't get group SID\n")); + return status; + } + + sid_copy(&domainsid, groupsid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return status; + } + + if (!tmp_methods->sam_delete_group) { + DEBUG(3, ("context_sam_delete_group: sam_methods of the domain did not specify sam_delete_group\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(status = tmp_methods->sam_delete_group(tmp_methods, group))){ + DEBUG(4,("context_sam_delete_group in backend %s failed\n", + tmp_methods->backendname)); + return status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_enum_groups(const struct sam_context *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_enum_groups: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_enum_users) { + DEBUG(3, ("context_sam_enum_groups: sam_methods of the domain did not specify sam_enum_groups\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groups(tmp_methods, access_token, type, groups_count, groups))) { + DEBUG(4,("context_sam_enum_groups for domain %s in backend %s failed\n", + tmp_methods->domain->private.name, tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_get_group_by_sid(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) +{ + struct sam_methods *tmp_methods; + uint32 rid; + NTSTATUS nt_status; + DOM_SID domainsid; + + DEBUG(5,("context_sam_get_group_by_sid: %d\n", __LINE__)); + + sid_copy(&domainsid, groupsid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_get_group_by_sid) { + DEBUG(3, ("context_sam_get_group_by_sid: sam_methods of the domain did not specify sam_get_group_by_sid\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_group_by_sid(tmp_methods, access_token, access_desired, groupsid, group))) { + DEBUG(4,("context_sam_get_group_by_sid for %s in backend %s failed\n", + sid_string_static(groupsid), tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_get_group_by_name(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_get_group_by_name: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_name(context, &tmp_methods, domain))) { + DEBUG(4,("sam_get_methods_by_name failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_get_group_by_name) { + DEBUG(3, ("context_sam_get_group_by_name: sam_methods of the domain did not specify sam_get_group_by_name\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_group_by_name(tmp_methods, access_token, access_desired, name, group))) { + DEBUG(4,("context_sam_get_group_by_name for %s\\%s in backend %s failed\n", + domain, name, tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_add_member_to_group(const struct sam_context *context, SAM_GROUP_HANDLE *group, SAM_GROUP_MEMBER *member) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} +NTSTATUS context_sam_delete_member_from_group(const struct sam_context *context, SAM_GROUP_HANDLE *group, SAM_GROUP_MEMBER *member) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS context_sam_enum_groupmembers(const struct sam_context *context, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS context_sam_get_groups_of_user(const struct sam_context *context, const SAM_USER_HANDLE *user, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} + + +/****************************************************************** + Free and cleanup a sam context, any associated data and anything + that the attached modules might have associated. + *******************************************************************/ + +void free_sam_context(struct sam_context **context) +{ + struct sam_methods *sam_selected = (*context)->methods; + + while (sam_selected){ + if (sam_selected->free_private_data) { + sam_selected->free_private_data(&(sam_selected->private_data)); + } + sam_selected = sam_selected->next; + } + + talloc_destroy((*context)->mem_ctx); + *context = NULL; +} + +/****************************************************************** + Make a sam_methods from scratch + *******************************************************************/ + +NTSTATUS make_sam_context_list(struct sam_context **context, char **selected) +{ + int i = 0; + struct sam_methods *curmethods, *tmpmethods; + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; + + if (!NT_STATUS_IS_OK(nt_status = make_sam_context(context))) { + return nt_status; + } + while (selected[i]){ + /* Try to initialise sam */ + DEBUG(5,("Trying to load: %s\n", selected[i])); + if (!NT_STATUS_IS_OK(nt_status = make_sam_methods_name(&curmethods, *context, selected[i]))) { + DEBUG(1, ("Loading %s failed!\n", selected[i])); + free_sam_context(context); + return nt_status; + } + curmethods->parent = *context; + DLIST_ADD_END((*context)->methods, curmethods, tmpmethods); + i++; + } + return NT_STATUS_OK; +} + +NTSTATUS make_sam_methods_name(struct sam_methods **methods, struct sam_context *context, const char *selected) +{ + char *module_name = smb_xstrdup(selected); + char *module_location = NULL, *p; + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; + int i; + + p = strchr(module_name, ':'); + + if (p) { + *p = 0; + module_location = p+1; + trim_string(module_location, " ", " "); + } + + trim_string(module_name, " ", " "); + + DEBUG(5,("Attempting to find an sam backend to match %s (%s)\n", selected, module_name)); + for (i = 0; builtin_sam_init_functions[i].name; i++) + { + if (strequal(builtin_sam_init_functions[i].name, module_name)) + { + DEBUG(5,("Found sam backend %s (at pos %d)\n", module_name, i)); + nt_status = builtin_sam_init_functions[i].init(context, methods, module_location); + if (NT_STATUS_IS_OK(nt_status)) { + DEBUG(5,("sam backend %s has a valid init\n", selected)); + } else { + DEBUG(0,("sam backend %s did not correctly init (error was %s)\n", selected, nt_errstr(nt_status))); + } + SAFE_FREE(module_name); + return nt_status; + break; /* unreached */ + } + } + + /* No such backend found */ + SAFE_FREE(module_name); + return NT_STATUS_INVALID_PARAMETER; +} + +/****************************************************************** + Make a sam_context from scratch. + *******************************************************************/ + +NTSTATUS make_sam_context(struct sam_context **context) +{ + TALLOC_CTX *mem_ctx; + + mem_ctx = talloc_init_named("sam_context internal allocation context"); + + if (!mem_ctx) { + DEBUG(0, ("make_sam_context: talloc init failed!\n")); + return NT_STATUS_NO_MEMORY; + } + + *context = talloc(mem_ctx, sizeof(**context)); + if (!*context) { + DEBUG(0, ("make_sam_context: talloc failed!\n")); + return NT_STATUS_NO_MEMORY; + } + + ZERO_STRUCTP(*context); + + (*context)->mem_ctx = mem_ctx; + + /* FIXME */ + + (*context)->free_fn = free_sam_context; + + return NT_STATUS_OK; +} + + +/****************************************************************** + Return an already initialised sam_context, to facilitate backward + compatibility (see functions below). + *******************************************************************/ + +struct sam_context *sam_get_static_context(BOOL reload) +{ + static struct sam_context *sam_context = NULL; + + if ((sam_context) && (reload)) { + sam_context->free_fn(&sam_context); + if (!NT_STATUS_IS_OK(make_sam_context_list(&sam_context, lp_sam_backend()))) { + return NULL; + } + } + + if (!sam_context) { + if (!NT_STATUS_IS_OK(make_sam_context_list(&sam_context, lp_sam_backend()))) { + return NULL; + } + } + + return sam_context; +} + +/*************************************************************** + Initialize the static context (at smbd startup etc). + + If uninitialised, context will auto-init on first use. + ***************************************************************/ + +BOOL initialize_sam(BOOL reload) +{ + return (sam_get_static_context(reload) != NULL); +} + + +NTSTATUS make_sam_methods(TALLOC_CTX *mem_ctx, SAM_METHODS **methods) +{ + *methods = talloc(mem_ctx, sizeof(struct sam_methods)); + + if (!*methods) { + return NT_STATUS_NO_MEMORY; + } + + ZERO_STRUCTP(*methods); + + return NT_STATUS_OK; +} diff --git a/source/utils/testparm.c b/source/utils/testparm.c index 852472073b1..d48cecba47b 100644 --- a/source/utils/testparm.c +++ b/source/utils/testparm.c @@ -48,7 +48,7 @@ static int do_global_checks(void) SMB_STRUCT_STAT st; if (lp_security() >= SEC_DOMAIN && !lp_encrypted_passwords()) { - printf("ERROR: in 'security=domain' mode the 'encrypt passwords' parameter must also be set to 'true'.\n"); + printf("ERROR: in 'security=domain' mode the 'encrypt passwords' parameter must always be set to 'true'.\n"); ret = 1; } -- cgit From 067ae5f81076611a0042eb064afdffa5e37f93e9 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 05:55:08 +0000 Subject: Code style + typo fixes Added Kai Krüger to copyrightholders of interface.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/sam/account.c | 4 +-- source/sam/get_set_domain.c | 46 ++++++++++++++++----------------- source/sam/get_set_user.c | 62 ++++++++++++++++++++++----------------------- source/sam/interface.c | 1 + 4 files changed, 57 insertions(+), 56 deletions(-) diff --git a/source/sam/account.c b/source/sam/account.c index 1fec9966f64..9953ba956c6 100644 --- a/source/sam/account.c +++ b/source/sam/account.c @@ -118,9 +118,9 @@ NTSTATUS sam_init_user(SAM_USER_HANDLE **user) } /** - * Free the contets of the SAM_USER_HANDLE, but not the structure. + * Free the contents of the SAM_USER_HANDLE, but not the structure. * - * Also wipes the LM and NT hashes and plaintext passwrod from + * Also wipes the LM and NT hashes and plaintext password from * memory. * * @param user SAM_USER_HANDLE to free members of. diff --git a/source/sam/get_set_domain.c b/source/sam/get_set_domain.c index 49a63f9fae6..e9e61119cd7 100644 --- a/source/sam/get_set_domain.c +++ b/source/sam/get_set_domain.c @@ -37,7 +37,7 @@ NTSTATUS sam_get_domain_sid(SAM_DOMAIN_HANDLE *domain, DOM_SID **sid) NTSTATUS sam_get_domain_num_users(SAM_DOMAIN_HANDLE *domain, uint32 *num_users) { - if (!domain || !num_users)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !num_users) return NT_STATUS_UNSUCCESSFUL; *num_users = domain->private.num_users; @@ -46,7 +46,7 @@ NTSTATUS sam_get_domain_num_users(SAM_DOMAIN_HANDLE *domain, uint32 *num_users) NTSTATUS sam_get_domain_num_groups(SAM_DOMAIN_HANDLE *domain, uint32 *num_groups) { - if (!domain || !num_groups)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !num_groups) return NT_STATUS_UNSUCCESSFUL; *num_groups = domain->private.num_groups; @@ -55,7 +55,7 @@ NTSTATUS sam_get_domain_num_groups(SAM_DOMAIN_HANDLE *domain, uint32 *num_groups NTSTATUS sam_get_domain_num_aliases(SAM_DOMAIN_HANDLE *domain, uint32 *num_aliases) { - if (!domain || !num_aliases)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !num_aliases) return NT_STATUS_UNSUCCESSFUL; *num_aliases = domain->private.num_aliases; @@ -64,7 +64,7 @@ NTSTATUS sam_get_domain_num_aliases(SAM_DOMAIN_HANDLE *domain, uint32 *num_alias NTSTATUS sam_get_domain_name(SAM_DOMAIN_HANDLE *domain, char **domain_name) { - if (!domain || !domain_name)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !domain_name) return NT_STATUS_UNSUCCESSFUL; *domain_name = domain->private.name; @@ -73,7 +73,7 @@ NTSTATUS sam_get_domain_name(SAM_DOMAIN_HANDLE *domain, char **domain_name) NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, char *domain_name) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.name = talloc_strdup(domain->mem_ctx, domain_name); @@ -82,7 +82,7 @@ NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, char *domain_name) NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, char **server_name) { - if (!domain || !server_name)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !server_name) return NT_STATUS_UNSUCCESSFUL; *server_name = domain->private.servername; @@ -91,7 +91,7 @@ NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, char **server_name) NTSTATUS sam_set_domain_server(SAM_DOMAIN_HANDLE *domain, char *server_name) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.servername = talloc_strdup(domain->mem_ctx, server_name); @@ -100,7 +100,7 @@ NTSTATUS sam_set_domain_server(SAM_DOMAIN_HANDLE *domain, char *server_name) NTSTATUS sam_get_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwordage) { - if (!domain || !max_passwordage)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !max_passwordage) return NT_STATUS_UNSUCCESSFUL; *max_passwordage = domain->private.max_passwordage; @@ -109,7 +109,7 @@ NTSTATUS sam_get_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwo NTSTATUS sam_get_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwordage) { - if (!domain || !min_passwordage)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !min_passwordage) return NT_STATUS_UNSUCCESSFUL; *min_passwordage = domain->private.min_passwordage; @@ -118,7 +118,7 @@ NTSTATUS sam_get_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwo NTSTATUS sam_get_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME *lockout_duration) { - if (!domain || !lockout_duration)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !lockout_duration) return NT_STATUS_UNSUCCESSFUL; *lockout_duration = domain->private.lockout_duration; @@ -127,7 +127,7 @@ NTSTATUS sam_get_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME *lock NTSTATUS sam_get_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME *reset_lockout_count) { - if (!domain || !reset_lockout_count)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !reset_lockout_count) return NT_STATUS_UNSUCCESSFUL; *reset_lockout_count = domain->private.reset_count; @@ -136,7 +136,7 @@ NTSTATUS sam_get_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME *reset_loc NTSTATUS sam_get_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 *min_passwordlength) { - if (!domain || !min_passwordlength)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !min_passwordlength) return NT_STATUS_UNSUCCESSFUL; *min_passwordlength = domain->private.min_passwordlength; @@ -145,7 +145,7 @@ NTSTATUS sam_get_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 *min_pas NTSTATUS sam_get_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 *password_history) { - if (!domain || !password_history)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !password_history) return NT_STATUS_UNSUCCESSFUL; *password_history = domain->private.password_history; @@ -154,7 +154,7 @@ NTSTATUS sam_get_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 *password_ NTSTATUS sam_get_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 *lockout_count) { - if (!domain || !lockout_count)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !lockout_count) return NT_STATUS_UNSUCCESSFUL; *lockout_count = domain->private.lockout_count; @@ -163,7 +163,7 @@ NTSTATUS sam_get_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 *lockout NTSTATUS sam_get_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL *force_logoff) { - if (!domain || !force_logoff)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !force_logoff) return NT_STATUS_UNSUCCESSFUL; *force_logoff = domain->private.force_logoff; @@ -173,7 +173,7 @@ NTSTATUS sam_get_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL *force_logo NTSTATUS sam_get_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL *login_pwdchange) { - if (!domain || !login_pwdchange)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !login_pwdchange) return NT_STATUS_UNSUCCESSFUL; *login_pwdchange = domain->private.login_pwdchange; @@ -184,7 +184,7 @@ NTSTATUS sam_get_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL *login_p NTSTATUS sam_set_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME max_passwordage) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.max_passwordage = max_passwordage; @@ -193,7 +193,7 @@ NTSTATUS sam_set_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME max_passwor NTSTATUS sam_set_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME min_passwordage) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.min_passwordage = min_passwordage; @@ -202,7 +202,7 @@ NTSTATUS sam_set_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME min_passwor NTSTATUS sam_set_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME lockout_duration) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.lockout_duration = lockout_duration; @@ -210,7 +210,7 @@ NTSTATUS sam_set_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME locko } NTSTATUS sam_set_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME reset_lockout_count) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.reset_count = reset_lockout_count; @@ -219,7 +219,7 @@ NTSTATUS sam_set_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME reset_lock NTSTATUS sam_set_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 min_passwordlength) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.min_passwordlength = min_passwordlength; @@ -237,7 +237,7 @@ NTSTATUS sam_set_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 password_h NTSTATUS sam_set_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 lockout_count) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.lockout_count = lockout_count; @@ -246,7 +246,7 @@ NTSTATUS sam_set_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 lockout_ NTSTATUS sam_set_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL force_logoff) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.force_logoff = force_logoff; diff --git a/source/sam/get_set_user.c b/source/sam/get_set_user.c index e58afe6880d..753567ac06a 100644 --- a/source/sam/get_set_user.c +++ b/source/sam/get_set_user.c @@ -55,7 +55,7 @@ NTSTATUS sam_get_user_domain_name (const SAM_USER_HANDLE *sampass, char **domain NTSTATUS sam_get_user_acct_ctrl (const SAM_USER_HANDLE *sampass, uint16 *acct_ctrl) { - if(!sampass || !acct_ctrl)return NT_STATUS_UNSUCCESSFUL; + if(!sampass || !acct_ctrl) return NT_STATUS_UNSUCCESSFUL; *acct_ctrl = sampass->private.acct_ctrl; @@ -64,7 +64,7 @@ NTSTATUS sam_get_user_acct_ctrl (const SAM_USER_HANDLE *sampass, uint16 *acct_ct NTSTATUS sam_get_user_logon_time (const SAM_USER_HANDLE *sampass, NTTIME *logon_time) { - if(!sampass || !logon_time)return NT_STATUS_UNSUCCESSFUL; + if(!sampass || !logon_time) return NT_STATUS_UNSUCCESSFUL; *logon_time = sampass->private.logon_time; @@ -73,7 +73,7 @@ NTSTATUS sam_get_user_logon_time (const SAM_USER_HANDLE *sampass, NTTIME *logon_ NTSTATUS sam_get_user_logoff_time (const SAM_USER_HANDLE *sampass, NTTIME *logoff_time) { - if(!sampass || !logoff_time)return NT_STATUS_UNSUCCESSFUL; + if(!sampass || !logoff_time) return NT_STATUS_UNSUCCESSFUL; *logoff_time = sampass->private.logoff_time; @@ -82,7 +82,7 @@ NTSTATUS sam_get_user_logoff_time (const SAM_USER_HANDLE *sampass, NTTIME *logof NTSTATUS sam_get_user_kickoff_time (const SAM_USER_HANDLE *sampass, NTTIME *kickoff_time) { - if (!sampass || !kickoff_time)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !kickoff_time) return NT_STATUS_UNSUCCESSFUL; *kickoff_time = sampass->private.kickoff_time; @@ -91,7 +91,7 @@ NTSTATUS sam_get_user_kickoff_time (const SAM_USER_HANDLE *sampass, NTTIME *kick NTSTATUS sam_get_user_pass_last_set_time (const SAM_USER_HANDLE *sampass, NTTIME *pass_last_set_time) { - if (!sampass || !pass_last_set_time)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !pass_last_set_time) return NT_STATUS_UNSUCCESSFUL; *pass_last_set_time = sampass->private.pass_last_set_time; @@ -100,7 +100,7 @@ NTSTATUS sam_get_user_pass_last_set_time (const SAM_USER_HANDLE *sampass, NTTIME NTSTATUS sam_get_user_pass_can_change_time (const SAM_USER_HANDLE *sampass, NTTIME *pass_can_change_time) { - if (!sampass || !pass_can_change_time)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !pass_can_change_time) return NT_STATUS_UNSUCCESSFUL; *pass_can_change_time = sampass->private.pass_can_change_time; @@ -109,7 +109,7 @@ NTSTATUS sam_get_user_pass_can_change_time (const SAM_USER_HANDLE *sampass, NTTI NTSTATUS sam_get_user_pass_must_change_time (const SAM_USER_HANDLE *sampass, NTTIME *pass_must_change_time) { - if (!sampass || !pass_must_change_time)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !pass_must_change_time) return NT_STATUS_UNSUCCESSFUL; *pass_must_change_time = sampass->private.pass_must_change_time; @@ -118,7 +118,7 @@ NTSTATUS sam_get_user_pass_must_change_time (const SAM_USER_HANDLE *sampass, NTT NTSTATUS sam_get_user_logon_divs (const SAM_USER_HANDLE *sampass, uint16 *logon_divs) { - if (!sampass || !logon_divs)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !logon_divs) return NT_STATUS_UNSUCCESSFUL; *logon_divs = sampass->private.logon_divs; @@ -127,7 +127,7 @@ NTSTATUS sam_get_user_logon_divs (const SAM_USER_HANDLE *sampass, uint16 *logon_ NTSTATUS sam_get_user_hours_len (const SAM_USER_HANDLE *sampass, uint32 *hours_len) { - if (!sampass || !hours_len)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !hours_len) return NT_STATUS_UNSUCCESSFUL; *hours_len = sampass->private.hours_len; @@ -136,7 +136,7 @@ NTSTATUS sam_get_user_hours_len (const SAM_USER_HANDLE *sampass, uint32 *hours_l NTSTATUS sam_get_user_hours (const SAM_USER_HANDLE *sampass, uint8 **hours) { - if (!sampass || !hours)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !hours) return NT_STATUS_UNSUCCESSFUL; *hours = sampass->private.hours; @@ -145,7 +145,7 @@ NTSTATUS sam_get_user_hours (const SAM_USER_HANDLE *sampass, uint8 **hours) NTSTATUS sam_get_user_nt_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB *nt_pwd) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; SMB_ASSERT((!sampass->private.nt_pw.data) || sampass->private.nt_pw.length == NT_HASH_LEN); @@ -157,7 +157,7 @@ NTSTATUS sam_get_user_nt_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB *nt_pwd) NTSTATUS sam_get_user_lm_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB *lm_pwd) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; SMB_ASSERT((!sampass->private.lm_pw.data) || sampass->private.lm_pw.length == LM_HASH_LEN); @@ -176,7 +176,7 @@ NTSTATUS sam_get_user_lm_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB *lm_pwd) NTSTATUS sam_get_user_plaintext_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB **plain_pwd) { - if (!sampass || !plain_pwd)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !plain_pwd) return NT_STATUS_UNSUCCESSFUL; *plain_pwd = &(sampass->private.plaintext_pw); @@ -185,7 +185,7 @@ NTSTATUS sam_get_user_plaintext_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB * NTSTATUS sam_get_user_sid(const SAM_USER_HANDLE *sampass, DOM_SID **sid) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *sid = &(sampass->private.user_sid); @@ -194,7 +194,7 @@ NTSTATUS sam_get_user_sid(const SAM_USER_HANDLE *sampass, DOM_SID **sid) NTSTATUS sam_get_user_pgroup(const SAM_USER_HANDLE *sampass, DOM_SID **sid) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *sid = &(sampass->private.group_sid); @@ -209,7 +209,7 @@ NTSTATUS sam_get_user_pgroup(const SAM_USER_HANDLE *sampass, DOM_SID **sid) NTSTATUS sam_get_user_init_flag (const SAM_USER_HANDLE *sampass, uint32 *initflag) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *initflag = sampass->private.init_flag; @@ -218,7 +218,7 @@ NTSTATUS sam_get_user_init_flag (const SAM_USER_HANDLE *sampass, uint32 *initfla NTSTATUS sam_get_user_name (const SAM_USER_HANDLE *sampass, char **username) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *username = sampass->private.username; @@ -227,7 +227,7 @@ NTSTATUS sam_get_user_name (const SAM_USER_HANDLE *sampass, char **username) NTSTATUS sam_get_user_domain (const SAM_USER_HANDLE *sampass, SAM_DOMAIN_HANDLE **domain) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *domain = sampass->private.domain; @@ -236,7 +236,7 @@ NTSTATUS sam_get_user_domain (const SAM_USER_HANDLE *sampass, SAM_DOMAIN_HANDLE NTSTATUS sam_get_user_fullname (const SAM_USER_HANDLE *sampass, char **fullname) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *fullname = sampass->private.full_name; @@ -245,7 +245,7 @@ NTSTATUS sam_get_user_fullname (const SAM_USER_HANDLE *sampass, char **fullname) NTSTATUS sam_get_user_homedir (const SAM_USER_HANDLE *sampass, char **homedir) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *homedir = sampass->private.home_dir; @@ -254,7 +254,7 @@ NTSTATUS sam_get_user_homedir (const SAM_USER_HANDLE *sampass, char **homedir) NTSTATUS sam_get_user_unix_home_dir (const SAM_USER_HANDLE *sampass, char **uhomedir) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *uhomedir = sampass->private.unix_home_dir; @@ -263,7 +263,7 @@ NTSTATUS sam_get_user_unix_home_dir (const SAM_USER_HANDLE *sampass, char **uhom NTSTATUS sam_get_user_dir_drive (const SAM_USER_HANDLE *sampass, char **dirdrive) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *dirdrive = sampass->private.dir_drive; @@ -272,7 +272,7 @@ NTSTATUS sam_get_user_dir_drive (const SAM_USER_HANDLE *sampass, char **dirdrive NTSTATUS sam_get_user_logon_script (const SAM_USER_HANDLE *sampass, char **logon_script) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *logon_script = sampass->private.logon_script; @@ -281,7 +281,7 @@ NTSTATUS sam_get_user_logon_script (const SAM_USER_HANDLE *sampass, char **logon NTSTATUS sam_get_user_profile_path (const SAM_USER_HANDLE *sampass, char **profile_path) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *profile_path = sampass->private.profile_path; @@ -290,7 +290,7 @@ NTSTATUS sam_get_user_profile_path (const SAM_USER_HANDLE *sampass, char **profi NTSTATUS sam_get_user_description (const SAM_USER_HANDLE *sampass, char **description) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *description = sampass->private.acct_desc; @@ -299,7 +299,7 @@ NTSTATUS sam_get_user_description (const SAM_USER_HANDLE *sampass, char **descri NTSTATUS sam_get_user_workstations (const SAM_USER_HANDLE *sampass, char **workstations) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *workstations = sampass->private.workstations; @@ -308,7 +308,7 @@ NTSTATUS sam_get_user_workstations (const SAM_USER_HANDLE *sampass, char **works NTSTATUS sam_get_user_unknown_str (const SAM_USER_HANDLE *sampass, char **unknown_str) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *unknown_str = sampass->private.unknown_str; @@ -317,7 +317,7 @@ NTSTATUS sam_get_user_unknown_str (const SAM_USER_HANDLE *sampass, char **unknow NTSTATUS sam_get_user_munged_dial (const SAM_USER_HANDLE *sampass, char **munged_dial) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *munged_dial = sampass->private.munged_dial; @@ -326,7 +326,7 @@ NTSTATUS sam_get_user_munged_dial (const SAM_USER_HANDLE *sampass, char **munged NTSTATUS sam_get_user_unknown_1 (const SAM_USER_HANDLE *sampass, uint32 *unknown1) { - if (!sampass || !unknown1)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !unknown1) return NT_STATUS_UNSUCCESSFUL; *unknown1 = sampass->private.unknown_1; @@ -335,7 +335,7 @@ NTSTATUS sam_get_user_unknown_1 (const SAM_USER_HANDLE *sampass, uint32 *unknown NTSTATUS sam_get_user_unknown_2 (const SAM_USER_HANDLE *sampass, uint32 *unknown2) { - if (!sampass || !unknown2)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !unknown2) return NT_STATUS_UNSUCCESSFUL; *unknown2 = sampass->private.unknown_2; @@ -344,7 +344,7 @@ NTSTATUS sam_get_user_unknown_2 (const SAM_USER_HANDLE *sampass, uint32 *unknown NTSTATUS sam_get_user_unknown_3 (const SAM_USER_HANDLE *sampass, uint32 *unknown3) { - if (!sampass || !unknown3)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !unknown3) return NT_STATUS_UNSUCCESSFUL; *unknown3 = sampass->private.unknown_3; diff --git a/source/sam/interface.c b/source/sam/interface.c index 6adf213d27b..e4d4868b1e7 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -4,6 +4,7 @@ Copyright (C) Andrew Bartlett 2002 Copyright (C) Jelmer Vernooij 2002 Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Kai Krüger 2002 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -- cgit From 6395c34f2f981d59b761d8615851a8fd54c1c304 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 07:51:07 +0000 Subject: Silly of me to only test this with --with-sam and not without. Doh! --- source/include/includes.h | 2 -- source/sam/account.c | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/source/include/includes.h b/source/include/includes.h index f7b0d76dd4e..f1c8c50df43 100644 --- a/source/include/includes.h +++ b/source/include/includes.h @@ -751,9 +751,7 @@ extern int errno; #include "passdb.h" -#ifdef WITH_SAM #include "sam.h" -#endif #include "session.h" diff --git a/source/sam/account.c b/source/sam/account.c index 9953ba956c6..04be8ef1628 100644 --- a/source/sam/account.c +++ b/source/sam/account.c @@ -24,7 +24,7 @@ #include "includes.h" #undef DBGC_CLASS -#define DBGC_CLASS DBGC_PASSDB +#define DBGC_CLASS DBGC_SAM /************************************************************ Fill the SAM_USER_HANDLE with default values. -- cgit From e9cd8fb2e3104e1f9fd27277c90e1d09e55a0cf4 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 28 Aug 2002 08:13:29 +0000 Subject: There's no MACHINE.SID anymore... Volker --- docs/docbook/projdoc/Samba-BDC-HOWTO.sgml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/docbook/projdoc/Samba-BDC-HOWTO.sgml b/docs/docbook/projdoc/Samba-BDC-HOWTO.sgml index 53a0959c39a..7653e3d1c03 100644 --- a/docs/docbook/projdoc/Samba-BDC-HOWTO.sgml +++ b/docs/docbook/projdoc/Samba-BDC-HOWTO.sgml @@ -157,10 +157,17 @@ Several things have to be done: -The file private/MACHINE.SID identifies the domain. When a samba -server is first started, it is created on the fly and must never be -changed again. This file has to be the same on the PDC and the BDC, -so the MACHINE.SID has to be copied from the PDC to the BDC. +The domain SID has to be the same on the PDC and the BDC. This used to +be stored in the file private/MACHINE.SID. This file is not created +anymore since Samba 2.2.5 or even earlier. Nowadays the domain SID is +stored in the file private/secrets.tdb. Simply copying the secrets.tdb +from the PDC to the BDC does not work, as the BDC would +generate a new SID for itself and override the domain SID with this +new BDC SID. + + +To retrieve the domain SID from the PDC or an existing BDC and store it in the +secrets.tdb, execute 'net rpc getsid' on the BDC. -- cgit From 076f34af8e5af7fb2d07b724522ef77f33559c82 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 08:43:04 +0000 Subject: Adding new series of text-to-sgml converted files. Removed OS2-Client-HOWTO and put it into Other-Clients.sgml --- docs/docbook/Makefile.in | 11 +- docs/docbook/devdoc/NetBIOS.sgml | 154 ++++++++++++ docs/docbook/devdoc/dev-doc.sgml | 44 ++++ docs/docbook/manpages/smbtar.1.sgml | 2 +- docs/docbook/manpages/vfstest.1.sgml | 3 +- docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml | 78 ++++++ docs/docbook/projdoc/OS2-Client-HOWTO.sgml | 142 ----------- docs/docbook/projdoc/Other-Clients.sgml | 332 ++++++++++++++++++++++++++ docs/docbook/projdoc/Portability.sgml | 148 ++++++++++++ docs/docbook/projdoc/samba-doc.sgml | 8 +- 10 files changed, 773 insertions(+), 149 deletions(-) create mode 100644 docs/docbook/devdoc/NetBIOS.sgml create mode 100644 docs/docbook/devdoc/dev-doc.sgml create mode 100644 docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml delete mode 100644 docs/docbook/projdoc/OS2-Client-HOWTO.sgml create mode 100644 docs/docbook/projdoc/Other-Clients.sgml create mode 100644 docs/docbook/projdoc/Portability.sgml diff --git a/docs/docbook/Makefile.in b/docs/docbook/Makefile.in index 612c4951354..f1fb97d1e2e 100644 --- a/docs/docbook/Makefile.in +++ b/docs/docbook/Makefile.in @@ -50,7 +50,8 @@ all: @echo "manpages - Build manpages" @echo "ps - Build PostScript version of HOWTO Collection" @echo "pdf - Build PDF version of HOWTO Collection" - @echo "html-single - Build single HTML version of HOWTO Collection" + @echo -n "html-single - Build single file HTML version of HOWTO Collection" + @echo "and developers guide" @echo "html - Build HTML version of HOWTO Collection and manpages" @echo "txt - Build plain text version of HOWTO Collection" @@ -58,8 +59,8 @@ manpages: $(MANPAGES) pdf: ../Samba-HOWTO-Collection.pdf ps: ../Samba-HOWTO-Collection.ps txt: ../Samba-HOWTO-Collection.txt -html: $(HTMLDIR)/samba-doc.html -html-single: ../Samba-HOWTO-Collection.html $(MANPAGES_HTML) +html: $(HTMLDIR)/samba-doc.html $(MANPAGES_HTML) +html-single: ../Samba-HOWTO-Collection.html ../Samba-Developers-Guide.html ../Samba-HOWTO-Collection.txt: $(SGMLDIR)/samba-doc.sgml $(DOCBOOK2TXT) -o .. $< @@ -76,6 +77,10 @@ html-single: ../Samba-HOWTO-Collection.html $(MANPAGES_HTML) $(DOCBOOK2HTML) -u -o .. $< mv ../samba-doc.html $@ +../Samba-Developers-Guide.html: devdoc/dev-doc.sgml + $(DOCBOOK2HTML) -u -o .. $< + mv ../dev-doc.html $@ + $(HTMLDIR)/samba-doc.html: $(SGMLDIR)/samba-doc.sgml $(DOCBOOK2HTML) -o $(HTMLDIR) $< diff --git a/docs/docbook/devdoc/NetBIOS.sgml b/docs/docbook/devdoc/NetBIOS.sgml new file mode 100644 index 00000000000..ec9d3af563a --- /dev/null +++ b/docs/docbook/devdoc/NetBIOS.sgml @@ -0,0 +1,154 @@ + + + + LukeLeighton + + 12 June 1997 + + +Definition of NetBIOS Protocol and Name Resolution Modes + + +NETBIOS + + +NetBIOS runs over the following tranports: TCP/IP; NetBEUI and IPX/SPX. +Samba only uses NetBIOS over TCP/IP. For details on the TCP/IP NetBIOS +Session Service NetBIOS Datagram Service, and NetBIOS Names, see +rfc1001.txt and rfc1002.txt. + + + +NetBEUI is a raw NetBIOS frame protocol implementation that allows NetBIOS +datagrams to be sent out over the 'wire' embedded within LLC frames. +NetBEUI is not required when using NetBIOS over TCP/IP protocols and it +is preferable NOT to install NetBEUI if it can be avoided. + + + +IPX/SPX is also not required when using NetBIOS over TCP/IP, and it is +preferable NOT to install the IPX/SPX transport unless you are using Novell +servers. At the very least, it is recommended that you do not install +'NetBIOS over IPX/SPX'. + + + +[When installing Windows 95, you will find that NetBEUI and IPX/SPX are +installed as the default protocols. This is because they are the simplest +to manage: no Windows 95 user-configuration is required]. + + + +NetBIOS applications (such as samba) offer their services (for example, +SMB file and print sharing) on a NetBIOS name. They must claim this name +on the network before doing so. The NetBIOS session service will then +accept connections on the application's behalf (on the NetBIOS name +claimed by the application). A NetBIOS session between the application +and the client can then commence. + + + +NetBIOS names consist of 15 characters plus a 'type' character. This is +similar, in concept, to an IP address and a TCP port number, respectively. +A NetBIOS-aware application on a host will offer different services under +different NetBIOS name types, just as a host will offer different TCP/IP +services on different port numbers. + + + +NetBIOS names must be claimed on a network, and must be defended. The use +of NetBIOS names is most suitable on a single subnet; a Local Area Network +or a Wide Area Network. + + + +NetBIOS names are either UNIQUE or GROUP. Only one application can claim a +UNIQUE NetBIOS name on a network. + + + +There are two kinds of NetBIOS Name resolution: Broadcast and Point-to-Point. + + + + + +BROADCAST NetBIOS + + +Clients can claim names, and therefore offer services on successfully claimed +names, on their broadcast-isolated subnet. One way to get NetBIOS services +(such as browsing: see ftp.microsoft.com/drg/developr/CIFS/browdiff.txt; and +SMB file/print sharing: see cifs4.txt) working on a LAN or WAN is to make +your routers forward all broadcast packets from TCP/IP ports 137, 138 and 139. + + + +This, however, is not recommended. If you have a large LAN or WAN, you will +find that some of your hosts spend 95 percent of their time dealing with +broadcast traffic. [If you have IPX/SPX on your LAN or WAN, you will find +that this is already happening: a packet analyzer will show, roughly +every twelve minutes, great swathes of broadcast traffic!]. + + + + + +NBNS NetBIOS + + +rfc1001.txt describes, amongst other things, the implementation and use +of, a 'NetBIOS Name Service'. NT/AS offers 'Windows Internet Name Service' +which is fully rfc1001/2 compliant, but has had to take specific action +with certain NetBIOS names in order to make it useful. (for example, it +deals with the registration of <1c> <1d> <1e> names all in different ways. +I recommend the reading of the Microsoft WINS Server Help files for full +details). + + + +The use of a WINS server cuts down on broadcast network traffic for +NetBIOS name resolution. It has the effect of pulling all the broadcast +isolated subnets together into a single NetBIOS scope, across your LAN +or WAN, while avoiding the use of TCP/IP broadcast packets. + + + +When you have a WINS server on your LAN, WINS clients will be able to +contact the WINS server to resolve NetBIOS names. Note that only those +WINS clients that have registered with the same WINS server will be +visible. The WINS server _can_ have static NetBIOS entries added to its +database (usually for security reasons you might want to consider putting +your domain controllers or other important servers as static entries, +but you should not rely on this as your sole means of security), but for +the most part, NetBIOS names are registered dynamically. + + + +This provides some confusion for lots of people, and is worth mentioning +here: a Browse Server is NOT a WINS Server, even if these services are +implemented in the same application. A Browse Server _needs_ a WINS server +because a Browse Server is a WINS client, which is _not_ the same thing]. + + + +Clients can claim names, and therefore offer services on successfully claimed +names, on their broadcast-isolated subnet. One way to get NetBIOS services +(such as browsing: see ftp.microsoft.com/drg/developr/CIFS/browdiff.txt; and +SMB file/print sharing: see cifs6.txt) working on a LAN or WAN is to make +your routers forward all broadcast packets from TCP/IP ports 137, 138 and 139. +You will find, however, if you do this on a large LAN or a WAN, that your +network is completely swamped by NetBIOS and browsing packets, which is why +WINS was developed to minimise the necessity of broadcast traffic. + + + +WINS Clients therefore claim names from the WINS server. If the WINS +server allows them to register a name, the client's NetBIOS session service +can then offer services on this name. Other WINS clients will then +contact the WINS server to resolve a NetBIOS name. + + + + + diff --git a/docs/docbook/devdoc/dev-doc.sgml b/docs/docbook/devdoc/dev-doc.sgml new file mode 100644 index 00000000000..f84c129f00f --- /dev/null +++ b/docs/docbook/devdoc/dev-doc.sgml @@ -0,0 +1,44 @@ + +]> + + + +SAMBA Deverlopers Guide + + + + SAMBA Team + +
samba@samba.org
+
+ + +Abstract + + +Last Update : Mon aug 26 12:41:19 CEST 2002 + + + +This book is a collection of documents that might be useful for +people developing samba or those interested in doing so. +than one person can maintain. The most recent version of this document +can be found at http://www.samba.org/ +on the "Documentation" page. Please send updates to jerry@samba.org. + + + +This documentation is distributed under the GNU General Public License (GPL) +version 2. A copy of the license is included with the Samba source +distribution. A copy can be found on-line at http://www.fsf.org/licenses/gpl.txt + + + + + +&NetBIOS; + +
diff --git a/docs/docbook/manpages/smbtar.1.sgml b/docs/docbook/manpages/smbtar.1.sgml index 4e2ee5fff0a..d1585d7ca39 100644 --- a/docs/docbook/manpages/smbtar.1.sgml +++ b/docs/docbook/manpages/smbtar.1.sgml @@ -190,7 +190,7 @@ VERSION - This man page is correct for version 2.2 of + This man page is correct for version 3.0 of the Samba suite. diff --git a/docs/docbook/manpages/vfstest.1.sgml b/docs/docbook/manpages/vfstest.1.sgml index fe1d7560d0a..11878c1c896 100644 --- a/docs/docbook/manpages/vfstest.1.sgml +++ b/docs/docbook/manpages/vfstest.1.sgml @@ -52,7 +52,8 @@ -d|--debug=debuglevel set the debuglevel. Debug level 0 is the lowest and 100 being the highest. This should be set to 100 if you are - planning on submitting a bug report to the Samba team (see BUGS.txt). + planning on submitting a bug report to the Samba team (see + BUGS.txt). diff --git a/docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml b/docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml new file mode 100644 index 00000000000..6d5a019fcbe --- /dev/null +++ b/docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml @@ -0,0 +1,78 @@ + + + + Jean FrançoisMicouleau + + + +Group mapping HOWTO + + +Starting with Samba 3.0 alpha 2, a new group mapping function is available. The +current method (likely to change) to manage the groups is a new command called +smbgroupedit. + + + +The first immediate reason to use the group mapping on a PDC, is that +the domain admin group of smb.conf is +now gone. This parameter was used to give the listed users local admin rights +on their workstations. It was some magic stuff that simply worked but didn't +scale very well for complex setups. + + + +Let me explain how it works on NT/W2K, to have this magic fade away. +When installing NT/W2K on a computer, the installer program creates some users +and groups. Notably the 'Administrators' group, and gives to that group some +privileges like the ability to change the date and time or to kill any process +(or close too) running on the local machine. The 'Administrator' user is a +member of the 'Administrators' group, and thus 'inherit' the 'Administrators' +group privileges. If a 'joe' user is created and become a member of the +'Administrator' group, 'joe' has exactly the same rights as 'Administrator'. + + + +When a NT/W2K machine is joined to a domain, during that phase, the "Domain +Administrators' group of the PDC is added to the 'Administrators' group of the +workstation. Every members of the 'Domain Administrators' group 'inherit' the +rights of the 'Administrators' group when logging on the workstation. + + + +You are now wondering how to make some of your samba PDC users members of the +'Domain Administrators' ? That's really easy. + + + +create a unix group (usually in /etc/group), let's call it domadm +add to this group the users that must be Administrators. For example if you want joe,john and mary, your entry in /etc/group will look like: + + +domadm:x:502:joe,john,mary + + + + +Map this domadm group to the domain admins group by running the command: + +smbgroupedit -c "Domain Admins" -u domadm + + + +You're set, joe, john and mary are domain administrators ! + + +Like the Domain Admins group, you can map any arbitrary Unix group to any NT +group. You can also make any Unix group a domain group. For example, on a domain +member machine (an NT/W2K or a samba server running winbind), you would like to +give access to a certain directory to some users who are member of a group on +your samba PDC. Flag that group as a domain group by running: + + +smbgroupedit -a unixgroup -td + +You can list the various groups in the mapping database like this +smbgroupedit -v + + diff --git a/docs/docbook/projdoc/OS2-Client-HOWTO.sgml b/docs/docbook/projdoc/OS2-Client-HOWTO.sgml deleted file mode 100644 index ca7ad6a754e..00000000000 --- a/docs/docbook/projdoc/OS2-Client-HOWTO.sgml +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - JimMcDonough - - IBM -
- jerry@samba.org -
-
-
- - - 5 Mar 2001 -
- -OS2 Client HOWTO - - - FAQs - - - How can I configure OS/2 Warp Connect or - OS/2 Warp 4 as a client for Samba? - - A more complete answer to this question can be - found on - http://carol.wins.uva.nl/~leeuw/samba/warp.html. - - Basically, you need three components: - - - The File and Print Client ('IBM Peer') - - TCP/IP ('Internet support') - - The "NetBIOS over TCP/IP" driver ('TCPBEUI') - - - - Installing the first two together with the base operating - system on a blank system is explained in the Warp manual. If Warp - has already been installed, but you now want to install the - networking support, use the "Selective Install for Networking" - object in the "System Setup" folder. - - Adding the "NetBIOS over TCP/IP" driver is not described - in the manual and just barely in the online documentation. Start - MPTS.EXE, click on OK, click on "Configure LAPS" and click - on "IBM OS/2 NETBIOS OVER TCP/IP" in 'Protocols'. This line - is then moved to 'Current Configuration'. Select that line, - click on "Change number" and increase it from 0 to 1. Save this - configuration. - - If the Samba server(s) is not on your local subnet, you - can optionally add IP names and addresses of these servers - to the "Names List", or specify a WINS server ('NetBIOS - Nameserver' in IBM and RFC terminology). For Warp Connect you - may need to download an update for 'IBM Peer' to bring it on - the same level as Warp 4. See the webpage mentioned above. - - - - How can I configure OS/2 Warp 3 (not Connect), - OS/2 1.2, 1.3 or 2.x for Samba? - - You can use the free Microsoft LAN Manager 2.2c Client - for OS/2 from - - ftp://ftp.microsoft.com/BusSys/Clients/LANMAN.OS2/. - See - http://carol.wins.uva.nl/~leeuw/lanman.html for - more information on how to install and use this client. In - a nutshell, edit the file \OS2VER in the root directory of - the OS/2 boot partition and add the lines: - - - 20=setup.exe - 20=netwksta.sys - 20=netvdd.sys - - - before you install the client. Also, don't use the - included NE2000 driver because it is buggy. Try the NE2000 - or NS2000 driver from - - ftp://ftp.cdrom.com/pub/os2/network/ndis/ instead. - - - - - Are there any other issues when OS/2 (any version) - is used as a client? - - When you do a NET VIEW or use the "File and Print - Client Resource Browser", no Samba servers show up. This can - be fixed by a patch from - http://carol.wins.uva.nl/~leeuw/samba/fix.html. - The patch will be included in a later version of Samba. It also - fixes a couple of other problems, such as preserving long - filenames when objects are dragged from the Workplace Shell - to the Samba server. - - - - How do I get printer driver download working - for OS/2 clients? - - First, create a share called [PRINTDRV] that is - world-readable. Copy your OS/2 driver files there. Note - that the .EA_ files must still be separate, so you will need - to use the original install files, and not copy an installed - driver from an OS/2 system. - - Install the NT driver first for that printer. Then, - add to your smb.conf a parameter, "os2 driver map = - filename". Then, in the file - specified by filename, map the - name of the NT driver name to the OS/2 driver name as - follows: - - <nt driver name> = <os2 driver - name>.<device name>, e.g.: - HP LaserJet 5L = LASERJET.HP LaserJet 5L - - You can have multiple drivers mapped in this file. - - If you only specify the OS/2 driver name, and not the - device name, the first attempt to download the driver will - actually download the files, but the OS/2 client will tell - you the driver is not available. On the second attempt, it - will work. This is fixed simply by adding the device name - to the mapping, after which it will work on the first attempt. - - - - -
- diff --git a/docs/docbook/projdoc/Other-Clients.sgml b/docs/docbook/projdoc/Other-Clients.sgml new file mode 100644 index 00000000000..f790024c3a8 --- /dev/null +++ b/docs/docbook/projdoc/Other-Clients.sgml @@ -0,0 +1,332 @@ + + + + JimMcDonough + + IBM + + JelmerVernooij + + Samba Team +
jelmer@samba.org
+
+
+ + 5 Mar 2001 +
+ +Samba and other CIFS clients + +This chapter contains client-specific information. + + +Macintosh clients? + + +Yes. Thursby now have a CIFS Client / Server called DAVE - see + + + +They test it against Windows 95, Windows NT and samba for +compatibility issues. At the time of writing, DAVE was at version +1.0.1. The 1.0.0 to 1.0.1 update is available as a free download from +the Thursby web site (the speed of finder copies has been greatly +enhanced, and there are bug-fixes included). + + + +Alternatives - There are two free implementations of AppleTalk for +several kinds of UNIX machnes, and several more commercial ones. +These products allow you to run file services and print services +natively to Macintosh users, with no additional support required on +the Macintosh. The two free omplementations are +Netatalk, and +CAP. +What Samba offers MS +Windows users, these packages offer to Macs. For more info on these +packages, Samba, and Linux (and other UNIX-based systems) see +http://www.eats.com/linux_mac_win.html + + + + + +OS2 Client + + + How can I configure OS/2 Warp Connect or + OS/2 Warp 4 as a client for Samba? + + A more complete answer to this question can be + found on + http://carol.wins.uva.nl/~leeuw/samba/warp.html. + + Basically, you need three components: + + + The File and Print Client ('IBM Peer') + + TCP/IP ('Internet support') + + The "NetBIOS over TCP/IP" driver ('TCPBEUI') + + + + Installing the first two together with the base operating + system on a blank system is explained in the Warp manual. If Warp + has already been installed, but you now want to install the + networking support, use the "Selective Install for Networking" + object in the "System Setup" folder. + + Adding the "NetBIOS over TCP/IP" driver is not described + in the manual and just barely in the online documentation. Start + MPTS.EXE, click on OK, click on "Configure LAPS" and click + on "IBM OS/2 NETBIOS OVER TCP/IP" in 'Protocols'. This line + is then moved to 'Current Configuration'. Select that line, + click on "Change number" and increase it from 0 to 1. Save this + configuration. + + If the Samba server(s) is not on your local subnet, you + can optionally add IP names and addresses of these servers + to the "Names List", or specify a WINS server ('NetBIOS + Nameserver' in IBM and RFC terminology). For Warp Connect you + may need to download an update for 'IBM Peer' to bring it on + the same level as Warp 4. See the webpage mentioned above. + + + + How can I configure OS/2 Warp 3 (not Connect), + OS/2 1.2, 1.3 or 2.x for Samba? + + You can use the free Microsoft LAN Manager 2.2c Client + for OS/2 from + + ftp://ftp.microsoft.com/BusSys/Clients/LANMAN.OS2/. + See + http://carol.wins.uva.nl/~leeuw/lanman.html for + more information on how to install and use this client. In + a nutshell, edit the file \OS2VER in the root directory of + the OS/2 boot partition and add the lines: + + + 20=setup.exe + 20=netwksta.sys + 20=netvdd.sys + + + before you install the client. Also, don't use the + included NE2000 driver because it is buggy. Try the NE2000 + or NS2000 driver from + + ftp://ftp.cdrom.com/pub/os2/network/ndis/ instead. + + + + + Are there any other issues when OS/2 (any version) + is used as a client? + + When you do a NET VIEW or use the "File and Print + Client Resource Browser", no Samba servers show up. This can + be fixed by a patch from + http://carol.wins.uva.nl/~leeuw/samba/fix.html. + The patch will be included in a later version of Samba. It also + fixes a couple of other problems, such as preserving long + filenames when objects are dragged from the Workplace Shell + to the Samba server. + + + + How do I get printer driver download working + for OS/2 clients? + + First, create a share called [PRINTDRV] that is + world-readable. Copy your OS/2 driver files there. Note + that the .EA_ files must still be separate, so you will need + to use the original install files, and not copy an installed + driver from an OS/2 system. + + Install the NT driver first for that printer. Then, + add to your smb.conf a parameter, os2 driver map = + filename". Then, in the file + specified by filename, map the + name of the NT driver name to the OS/2 driver name as + follows: + + nt driver name = os2 "driver + name"."device name", e.g.: + HP LaserJet 5L = LASERJET.HP LaserJet 5L + + You can have multiple drivers mapped in this file. + + If you only specify the OS/2 driver name, and not the + device name, the first attempt to download the driver will + actually download the files, but the OS/2 client will tell + you the driver is not available. On the second attempt, it + will work. This is fixed simply by adding the device name + to the mapping, after which it will work on the first attempt. + + + + + +Windows for Workgroups + + +Use latest TCP/IP stack from Microsoft + +Use the latest TCP/IP stack from microsoft if you use Windows +for workgroups. + +The early TCP/IP stacks had lots of bugs. + + +Microsoft has released an incremental upgrade to their TCP/IP 32-Bit +VxD drivers. The latest release can be found on their ftp site at +ftp.microsoft.com, located in /peropsys/windows/public/tcpip/wfwt32.exe. +There is an update.txt file there that describes the problems that were +fixed. New files include WINSOCK.DLL, TELNET.EXE, WSOCK.386, VNBT.386, +WSTCP.386, TRACERT.EXE, NETSTAT.EXE, and NBTSTAT.EXE. + + + + + +Delete .pwl files after password change + + +WfWg does a lousy job with passwords. I find that if I change my +password on either the unix box or the PC the safest thing to do is to +delete the .pwl files in the windows directory. The PC will complain about not finding the files, but will soon get over it, allowing you to enter the new password. + + + +If you don't do this you may find that WfWg remembers and uses the old +password, even if you told it a new one. + + + +Often WfWg will totally ignore a password you give it in a dialog box. + + + + + +Configure WfW password handling + + +There is a program call admincfg.exe +on the last disk (disk 8) of the WFW 3.11 disk set. To install it +type EXPAND A:\ADMINCFG.EX_ C:\WINDOWS\ADMINCFG.EXE Then add an icon +for it via the "Progam Manager" "New" Menu. This program allows you +to control how WFW handles passwords. ie disable Password Caching etc +for use with security = user + + + + + +Case handling of passwords + +Windows for Workgroups uppercases the password before sending it to the server. Unix passwords can be case-sensitive though. Check the smb.conf(5) information on password level to specify what characters samba should try to uppercase when checking. + + + + + + +Windows '95/'98 + + +When using Windows 95 OEM SR2 the following updates are recommended where Samba +is being used. Please NOTE that the above change will affect you once these +updates have been installed. + + + +There are more updates than the ones mentioned here. You are referred to the +Microsoft Web site for all currently available updates to your specific version +of Windows 95. + + + +Kernel Update: KRNLUPD.EXE +Ping Fix: PINGUPD.EXE +RPC Update: RPCRTUPD.EXE +TCP/IP Update: VIPUPD.EXE +Redirector Update: VRDRUPD.EXE + + + +Also, if using MS OutLook it is desirable to install the OLEUPD.EXE fix. This +fix may stop your machine from hanging for an extended period when exiting +OutLook and you may also notice a significant speedup when accessing network +neighborhood services. + + + + + +Windows 2000 Service Pack 2 + + +There are several annoyances with Windows 2000 SP2. One of which +only appears when using a Samba server to host user profiles +to Windows 2000 SP2 clients in a Windows domain. This assumes +that Samba is a member of the domain, but the problem will +likely occur if it is not. + + + +In order to server profiles successfully to Windows 2000 SP2 +clients (when not operating as a PDC), Samba must have +nt acl support = no +added to the file share which houses the roaming profiles. +If this is not done, then the Windows 2000 SP2 client will +complain about not being able to access the profile (Access +Denied) and create multiple copies of it on disk (DOMAIN.user.001, +DOMAIN.user.002, etc...). See the +smb.conf(5) man page +for more details on this option. Also note that the +nt acl support parameter was formally a global parameter in +releases prior to Samba 2.2.2. + + + +The following is a minimal profile share: + + + + [profile] + path = /export/profile + create mask = 0600 + directory mask = 0700 + nt acl support = no + read only = no + + + +The reason for this bug is that the Win2k SP2 client copies +the security descriptor for the profile which contains +the Samba server's SID, and not the domain SID. The client +compares the SID for SAMBA\user and realizes it is +different that the one assigned to DOMAIN\user. Hence the reason +for the "access denied" message. + + + +By disabling the nt acl support parameter, Samba will send +the Win2k client a response to the QuerySecurityDescriptor +trans2 call which causes the client to set a default ACL +for the profile. This default ACL includes + + +DOMAIN\user "Full Control" + +NOTE : This bug does not occur when using winbind to +create accounts on the Samba host for Domain users. + + + +
diff --git a/docs/docbook/projdoc/Portability.sgml b/docs/docbook/projdoc/Portability.sgml new file mode 100644 index 00000000000..f2fe66b9dd5 --- /dev/null +++ b/docs/docbook/projdoc/Portability.sgml @@ -0,0 +1,148 @@ + + + + JelmerVernooij + + + +Portability + +Samba works on a wide range of platforms but the interface all the +platforms provide is not always compatible. This chapter contains +platform-specific information about compiling and using samba. + + +HPUX + + +HP's implementation of supplementary groups is, er, non-standard (for +hysterical reasons). There are two group files, /etc/group and +/etc/logingroup; the system maps UIDs to numbers using the former, but +initgroups() reads the latter. Most system admins who know the ropes +symlink /etc/group to /etc/logingroup (hard link doesn't work for reasons +too stupid to go into here). initgroups() will complain if one of the +groups you're in in /etc/logingroup has what it considers to be an invalid +ID, which means outside the range [0..UID_MAX], where UID_MAX is (I think) +60000 currently on HP-UX. This precludes -2 and 65534, the usual 'nobody' +GIDs. + + + +If you encounter this problem, make sure that the programs that are failing +to initgroups() be run as users not in any groups with GIDs outside the +allowed range. + + +This is documented in the HP manual pages under setgroups(2) and passwd(4). + + + + + +SCO Unix + + +If you run an old version of SCO Unix then you may need to get important +TCP/IP patches for Samba to work correctly. Without the patch, you may +encounter corrupt data transfers using samba. + + + +The patch you need is UOD385 Connection Drivers SLS. It is available from +SCO (ftp.sco.com, directory SLS, files uod385a.Z and uod385a.ltr.Z). + + + + + +DNIX + + +DNIX has a problem with seteuid() and setegid(). These routines are +needed for Samba to work correctly, but they were left out of the DNIX +C library for some reason. + + + +For this reason Samba by default defines the macro NO_EID in the DNIX +section of includes.h. This works around the problem in a limited way, +but it is far from ideal, some things still won't work right. + + + +To fix the problem properly you need to assemble the following two +functions and then either add them to your C library or link them into +Samba. + + + +put this in the file setegid.s: + + + + .globl _setegid +_setegid: + moveq #47,d0 + movl #100,a0 + moveq #1,d1 + movl 4(sp),a1 + trap #9 + bccs 1$ + jmp cerror +1$: + clrl d0 + rts + + + +put this in the file seteuid.s: + + + + .globl _seteuid +_seteuid: + moveq #47,d0 + movl #100,a0 + moveq #0,d1 + movl 4(sp),a1 + trap #9 + bccs 1$ + jmp cerror +1$: + clrl d0 + rts + + + +after creating the above files you then assemble them using + + +as seteuid.s +as setegid.s + + +that should produce the files seteuid.o and +setegid.o + + + +then you need to add these to the LIBSM line in the DNIX section of +the Samba Makefile. Your LIBSM line will then look something like this: + + + +LIBSM = setegid.o seteuid.o -ln + + + +You should then remove the line: + + + +#define NO_EID + + +from the DNIX section of includes.h + + + diff --git a/docs/docbook/projdoc/samba-doc.sgml b/docs/docbook/projdoc/samba-doc.sgml index e407b622dea..a50389b7f01 100644 --- a/docs/docbook/projdoc/samba-doc.sgml +++ b/docs/docbook/projdoc/samba-doc.sgml @@ -6,7 +6,6 @@ - @@ -19,6 +18,9 @@ + + + ]> @@ -78,8 +80,10 @@ Cheers, jerry &Samba-LDAP; &BROWSING; &SPEED; -&OS2-Client; +&Other-Clients; &CVS-Access; &BUGS; +&GROUP-MAPPING-HOWTO; +&Portability; -- cgit From 3b4316a7138982732fe77d42bb027a59851ee5a0 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 08:44:37 +0000 Subject: Remove yodldocs - it has been obsolete since 2.2 --- docs/yodldocs/README-NOW | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 docs/yodldocs/README-NOW diff --git a/docs/yodldocs/README-NOW b/docs/yodldocs/README-NOW deleted file mode 100644 index 592d38c1351..00000000000 --- a/docs/yodldocs/README-NOW +++ /dev/null @@ -1,14 +0,0 @@ -!== -!== Notice of change of documentation format -!== - -Samba is no longer using yodl as the source markup -language for our documentation. As of release 2.2.0, -we are using DocBook V4.1 exclusively (assuming you are not -counting the ASCII files yet to be converted). - -Please see ../docbook/docbook.txt for more information -on this. - -jerry carter -SAMBA Team -- cgit From 844d7254686b4a0429f30b4d4711387429172224 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 08:49:02 +0000 Subject: Remove obsolete text docs --- docs/textdocs/BROWSING.txt | 559 -------------------------------- docs/textdocs/BUGS.txt | 135 -------- docs/textdocs/DIAGNOSIS.txt | 321 ------------------ docs/textdocs/DNIX.txt | 69 ---- docs/textdocs/GROUP-MAPPING-HOWTO.txt | 60 ---- docs/textdocs/INSTALL.sambatar | 33 -- docs/textdocs/Imprints.txt | 47 --- docs/textdocs/Macintosh_Clients.txt | 23 -- docs/textdocs/NetBIOS.txt | 152 --------- docs/textdocs/Printing.txt | 255 --------------- docs/textdocs/README.sambatar | 23 -- docs/textdocs/SCO.txt | 19 -- docs/textdocs/SMBTAR.notes | 46 --- docs/textdocs/Solaris-Winbind-HOWTO.txt | 361 --------------------- docs/textdocs/Speed.txt | 338 ------------------- docs/textdocs/Speed2.txt | 57 ---- docs/textdocs/Win95.txt | 74 ----- docs/textdocs/WinNT.txt | 104 ------ docs/textdocs/security_level.txt | 100 ------ 19 files changed, 2776 deletions(-) delete mode 100644 docs/textdocs/BROWSING.txt delete mode 100644 docs/textdocs/BUGS.txt delete mode 100644 docs/textdocs/DIAGNOSIS.txt delete mode 100644 docs/textdocs/DNIX.txt delete mode 100644 docs/textdocs/GROUP-MAPPING-HOWTO.txt delete mode 100644 docs/textdocs/INSTALL.sambatar delete mode 100644 docs/textdocs/Imprints.txt delete mode 100644 docs/textdocs/Macintosh_Clients.txt delete mode 100644 docs/textdocs/NetBIOS.txt delete mode 100644 docs/textdocs/Printing.txt delete mode 100644 docs/textdocs/README.sambatar delete mode 100644 docs/textdocs/SCO.txt delete mode 100644 docs/textdocs/SMBTAR.notes delete mode 100644 docs/textdocs/Solaris-Winbind-HOWTO.txt delete mode 100644 docs/textdocs/Speed.txt delete mode 100644 docs/textdocs/Speed2.txt delete mode 100644 docs/textdocs/Win95.txt delete mode 100644 docs/textdocs/WinNT.txt delete mode 100644 docs/textdocs/security_level.txt diff --git a/docs/textdocs/BROWSING.txt b/docs/textdocs/BROWSING.txt deleted file mode 100644 index 2ca41e5624e..00000000000 --- a/docs/textdocs/BROWSING.txt +++ /dev/null @@ -1,559 +0,0 @@ -Author/s: Many (Thanks to Luke, Jeremy, Andrew, etc.) -Updated: July 5, 1998 -Status: Current - For VERY Advanced Users ONLY - -Summary: This describes how to configure Samba for improved browsing. -===================================================================== - -OVERVIEW: -========= - -SMB networking provides a mechanism by which clients can access a list -of machines in a network, a so-called "browse list". This list -contains machines that are ready to offer file and/or print services -to other machines within the network. Thus it does not include -machines which aren't currently able to do server tasks. The browse -list is heavily used by all SMB clients. Configuration of SMB -browsing has been problematic for some Samba users, hence this -document. - -Browsing will NOT work if name resolution from NetBIOS names to IP -addresses does not function correctly. Use of a WINS server is highly -recommended to aid the resolution of NetBIOS (SMB) names to IP addresses. -WINS allows remote segment clients to obtain NetBIOS name_type information -that can NOT be provided by any other means of name resolution. - -===================================================================== - -BROWSING -======== -Samba now fully supports browsing. The browsing is supported by nmbd -and is also controlled by options in the smb.conf file (see smb.conf(5)). - -Samba can act as a local browse master for a workgroup and the ability -for samba to support domain logons and scripts is now available. See -DOMAIN.txt for more information on domain logons. - -Samba can also act as a domain master browser for a workgroup. This -means that it will collate lists from local browse masters into a -wide area network server list. In order for browse clients to -resolve the names they may find in this list, it is recommended that -both samba and your clients use a WINS server. - -Note that you should NOT set Samba to be the domain master for a -workgroup that has the same name as an NT Domain: on each wide area -network, you must only ever have one domain master browser per workgroup, -regardless of whether it is NT, Samba or any other type of domain master -that is providing this service. - -[Note that nmbd can be configured as a WINS server, but it is not -necessary to specifically use samba as your WINS server. NTAS can -be configured as your WINS server. In a mixed NT server and -samba environment on a Wide Area Network, it is recommended that -you use the NT server's WINS server capabilities. In a samba-only -environment, it is recommended that you use one and only one nmbd -as your WINS server]. - -To get browsing to work you need to run nmbd as usual, but will need -to use the "workgroup" option in smb.conf to control what workgroup -Samba becomes a part of. - -Samba also has a useful option for a Samba server to offer itself for -browsing on another subnet. It is recommended that this option is only -used for 'unusual' purposes: announcements over the internet, for -example. See "remote announce" in the smb.conf man page. - -If something doesn't work then hopefully the log.nmb file will help -you track down the problem. Try a debug level of 2 or 3 for finding -problems. Also note that the current browse list usually gets stored -in text form in a file called browse.dat. - -Note that if it doesn't work for you, then you should still be able to -type the server name as \\SERVER in filemanager then hit enter and -filemanager should display the list of available shares. - -Some people find browsing fails because they don't have the global -"guest account" set to a valid account. Remember that the IPC$ -connection that lists the shares is done as guest, and thus you must -have a valid guest account. - -Also, a lot of people are getting bitten by the problem of too many -parameters on the command line of nmbd in inetd.conf. This trick is to -not use spaces between the option and the parameter (eg: -d2 instead -of -d 2), and to not use the -B and -N options. New versions of nmbd -are now far more likely to correctly find your broadcast and network -address, so in most cases these aren't needed. - -The other big problem people have is that their broadcast address, -netmask or IP address is wrong (specified with the "interfaces" option -in smb.conf) - - -BROWSING ACROSS SUBNETS -======================= - -With the release of Samba 1.9.17(alpha1 and above) Samba has been -updated to enable it to support the replication of browse lists -across subnet boundaries. New code and options have been added to -achieve this. This section describes how to set this feature up -in different settings. - -To see browse lists that span TCP/IP subnets (ie. networks separated -by routers that don't pass broadcast traffic) you must set up at least -one WINS server. The WINS server acts as a DNS for NetBIOS names, allowing -NetBIOS name to IP address translation to be done by doing a direct -query of the WINS server. This is done via a directed UDP packet on -port 137 to the WINS server machine. The reason for a WINS server is -that by default, all NetBIOS name to IP address translation is done -by broadcasts from the querying machine. This means that machines -on one subnet will not be able to resolve the names of machines on -another subnet without using a WINS server. - -Remember, for browsing across subnets to work correctly, all machines, -be they Windows 95, Windows NT, or Samba servers must have the IP address -of a WINS server given to them by a DHCP server, or by manual configuration -(for Win95 and WinNT, this is in the TCP/IP Properties, under Network -settings) for Samba this is in the smb.conf file. - -How does cross subnet browsing work ? -===================================== - -Cross subnet browsing is a complicated dance, containing multiple -moving parts. It has taken Microsoft several years to get the code -that achieves this correct, and Samba lags behind in some areas. -However, with the 1.9.17 release, Samba is capable of cross subnet -browsing when configured correctly. - -Consider a network set up as follows : - - (DMB) - N1_A N1_B N1_C N1_D N1_E - | | | | | - ------------------------------------------------------- - | subnet 1 | - +---+ +---+ - |R1 | Router 1 Router 2 |R2 | - +---+ +---+ - | | - | subnet 2 subnet 3 | - -------------------------- ------------------------------------ - | | | | | | | | - N2_A N2_B N2_C N2_D N3_A N3_B N3_C N3_D - (WINS) - -Consisting of 3 subnets (1, 2, 3) conneted by two routers -(R1, R2) - these do not pass broadcasts. Subnet 1 has 5 machines -on it, subnet 2 has 4 machines, subnet 3 has 4 machines. Assume -for the moment that all these machines are configured to be in the -same workgroup (for simplicities sake). Machine N1_C on subnet 1 -is configured as Domain Master Browser (ie. it will collate the -browse lists for the workgroup). Machine N2_D is configured as -WINS server and all the other machines are configured to register -their NetBIOS names with it. - -As all these machines are booted up, elections for master browsers -will take place on each of the three subnets. Assume that machine -N1_C wins on subnet 1, N2_B wins on subnet 2, and N3_D wins on -subnet 3 - these machines are known as local master browsers for -their particular subnet. N1_C has an advantage in winning as the -local master browser on subnet 1 as it is set up as Domain Master -Browser. - -On each of the three networks, machines that are configured to -offer sharing services will broadcast that they are offering -these services. The local master browser on each subnet will -receive these broadcasts and keep a record of the fact that -the machine is offering a service. This list of records is -the basis of the browse list. For this case, assume that -all the machines are configured to offer services so all machines -will be on the browse list. - -For each network, the local master browser on that network is -considered 'authoritative' for all the names it receives via -local broadcast. This is because a machine seen by the local -master browser via a local broadcast must be on the same -network as the local master browser and thus is a 'trusted' -and 'verifiable' resource. Machines on other networks that -the local master browsers learn about when collating their -browse lists have not been directly seen - these records are -called 'non-authoritative'. - -At this point the browse lists look as follows (these are -the machines you would see in your network neighborhood if -you looked in it on a particular network right now). - -Subnet Browse Master List ------- ------------- ---- -Subnet1 N1_C N1_A, N1_B, N1_C, N1_D, N1_E - -Subnet2 N2_B N2_A, N2_B, N2_C, N2_D - -Subnet3 N3_D N3_A, N3_B, N3_C, N3_D - -Note that at this point all the subnets are separate, no -machine is seen across any of the subnets. - -Now examine subnet 2. As soon as N2_B has become the local -master browser it looks for a Domain master browser to synchronize -its browse list with. It does this by querying the WINS server -(N2_D) for the IP address associated with the NetBIOS name -WORKGROUP<1B>. This name was registerd by the Domain master -browser (N1_C) with the WINS server as soon as it was booted. - -Once N2_B knows the address of the Domain master browser it -tells it that is the local master browser for subnet 2 by -sending a MasterAnnouncement packet as a UDP port 138 packet. -It then synchronizes with it by doing a NetServerEnum2 call. This -tells the Domain Master Browser to send it all the server -names it knows about. Once the domain master browser receives -the MasterAnnouncement packet it schedules a synchronization -request to the sender of that packet. After both synchronizations -are done the browse lists look like : - -Subnet Browse Master List ------- ------------- ---- -Subnet1 N1_C N1_A, N1_B, N1_C, N1_D, N1_E, - N2_A(*), N2_B(*), N2_C(*), N2_D(*) - -Subnet2 N2_B N2_A, N2_B, N2_C, N2_D - N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*) - -Subnet3 N3_D N3_A, N3_B, N3_C, N3_D - -Servers with a (*) after them are non-authoritative names. - -At this point users looking in their network neighborhood on -subnets 1 or 2 will see all the servers on both, users on -subnet 3 will still only see the servers on their own subnet. - -The same sequence of events that occured for N2_B now occurs -for the local master browser on subnet 3 (N3_D). When it -synchronizes browse lists with the domain master browser (N1_A) -it gets both the server entries on subnet 1, and those on -subnet 2. After N3_D has synchronized with N1_C and vica-versa -the browse lists look like. - -Subnet Browse Master List ------- ------------- ---- -Subnet1 N1_C N1_A, N1_B, N1_C, N1_D, N1_E, - N2_A(*), N2_B(*), N2_C(*), N2_D(*), - N3_A(*), N3_B(*), N3_C(*), N3_D(*) - -Subnet2 N2_B N2_A, N2_B, N2_C, N2_D - N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*) - -Subnet3 N3_D N3_A, N3_B, N3_C, N3_D - N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*), - N2_A(*), N2_B(*), N2_C(*), N2_D(*) - -Servers with a (*) after them are non-authoritative names. - -At this point users looking in their network neighborhood on -subnets 1 or 3 will see all the servers on all sunbets, users on -subnet 2 will still only see the servers on subnets 1 and 2, but not 3. - -Finally, the local master browser for subnet 2 (N2_B) will sync again -with the domain master browser (N1_C) and will recieve the missing -server entries. Finally - and as a steady state (if no machines -are removed or shut off) the browse lists will look like : - -Subnet Browse Master List ------- ------------- ---- -Subnet1 N1_C N1_A, N1_B, N1_C, N1_D, N1_E, - N2_A(*), N2_B(*), N2_C(*), N2_D(*), - N3_A(*), N3_B(*), N3_C(*), N3_D(*) - -Subnet2 N2_B N2_A, N2_B, N2_C, N2_D - N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*) - N3_A(*), N3_B(*), N3_C(*), N3_D(*) - -Subnet3 N3_D N3_A, N3_B, N3_C, N3_D - N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*), - N2_A(*), N2_B(*), N2_C(*), N2_D(*) - -Servers with a (*) after them are non-authoritative names. - -Synchronizations between the domain master browser and local -master browsers will continue to occur, but this should be a -steady state situation. - -If either router R1 or R2 fails the following will occur: - -1) Names of computers on each side of the inaccessible network fragments -will be maintained for as long as 36 minutes, in the network neighbourhood -lists. - -2) Attempts to connect to these inaccessible computers will fail, but the -names will not be removed from the network neighbourhood lists. - -3) If one of the fragments is cut off from the WINS server, it will only -be able to access servers on its local subnet, by using subnet-isolated -broadcast NetBIOS name resolution. The effects are similar to that of -losing access to a DNS server. - -Setting up a WINS server -======================== - -Either a Samba machine or a Windows NT Server machine may be set up -as a WINS server. To set a Samba machine to be a WINS server you must -add the following option to the smb.conf file on the selected machine : -in the [globals] section add the line - - wins support = yes - -Versions of Samba previous to 1.9.17 had this parameter default to -yes. If you have any older versions of Samba on your network it is -strongly suggested you upgrade to 1.9.17 or above, or at the very -least set the parameter to 'no' on all these machines. - -Machines with "wins support = yes" will keep a list of all NetBIOS -names registered with them, acting as a DNS for NetBIOS names. - -You should set up only ONE wins server. Do NOT set the -"wins support = yes" option on more than one Samba server. - -To set up a Windows NT Server as a WINS server you need to set up -the WINS service - see your NT documentation for details. Note that -Windows NT WINS Servers can replicate to each other, allowing more -than one to be set up in a complex subnet environment. As Microsoft -refuse to document these replication protocols Samba cannot currently -participate in these replications. It is possible in the future that -a Samba->Samba WINS replication protocol may be defined, in which -case more than one Samba machine could be set up as a WINS server -but currently only one Samba server should have the "wins support = yes" -parameter set. - -After the WINS server has been configured you must ensure that all -machines participating on the network are configured with the address -of this WINS server. If your WINS server is a Samba machine, fill in -the Samba machine IP address in the "Primary WINS Server" field of -the "Control Panel->Network->Protocols->TCP->WINS Server" dialogs -in Windows 95 or Windows NT. To tell a Samba server the IP address -of the WINS server add the following line to the [global] section of -all smb.conf files : - - wins server = - -where is either the DNS name of the WINS server -machine or its IP address. - -Note that this line MUST NOT BE SET in the smb.conf file of the Samba -server acting as the WINS server itself. If you set both the -"wins support = yes" option and the "wins server = " option then -nmbd will fail to start. - -There are two possible scenarios for setting up cross subnet browsing. -The first details setting up cross subnet browsing on a network containing -Windows 95, Samba and Windows NT machines that are not configured as -part of a Windows NT Domain. The second details setting up cross subnet -browsing on networks that contain NT Domains. - -Setting up Browsing in a WORKGROUP -================================== - -To set up cross subnet browsing on a network containing machines -in up to be in a WORKGROUP, not an NT Domain you need to set up one -Samba server to be the Domain Master Browser (note that this is *NOT* -the same as a Primary Domain Controller, although in an NT Domain the -same machine plays both roles). The role of a Domain master browser is -to collate the browse lists from local master browsers on all the -subnets that have a machine participating in the workgroup. Without -one machine configured as a domain master browser each subnet would -be an isolated workgroup, unable to see any machines on any other -subnet. It is the presense of a domain master browser that makes -cross subnet browsing possible for a workgroup. - -In an WORKGROUP environment the domain master browser must be a -Samba server, and there must only be one domain master browser per -workgroup name. To set up a Samba server as a domain master browser, -set the following option in the [global] section of the smb.conf file : - - domain master = yes - -The domain master browser should also preferrably be the local master -browser for its own subnet. In order to achieve this set the following -options in the [global] section of the smb.conf file : - - domain master = yes - local master = yes - preferred master = yes - os level = 65 - -The domain master browser may be the same machine as the WINS -server, if you require. - -Next, you should ensure that each of the subnets contains a -machine that can act as a local master browser for the -workgroup. Any NT machine should be able to do this, as will -Windows 95 machines (although these tend to get rebooted more -often, so it's not such a good idea to use these). To make a -Samba server a local master browser set the following -options in the [global] section of the smb.conf file : - - domain master = no - local master = yes - preferred master = yes - os level = 65 - -Do not do this for more than one Samba server on each subnet, -or they will war with each other over which is to be the local -master browser. - -The "local master" parameter allows Samba to act as a local master -browser. The "preferred master" causes nmbd to force a browser -election on startup and the "os level" parameter sets Samba high -enough so that it should win any browser elections. - -If you have an NT machine on the subnet that you wish to -be the local master browser then you can disable Samba from -becoming a local master browser by setting the following -options in the [global] section of the smb.conf file : - - domain master = no - local master = no - preferred master = no - os level = 0 - -Setting up Browsing in a DOMAIN -=============================== - -If you are adding Samba servers to a Windows NT Domain then -you must not set up a Samba server as a domain master browser. -By default, a Windows NT Primary Domain Controller for a Domain -name is also the Domain master browser for that name, and many -things will break if a Samba server registers the Domain master -browser NetBIOS name (DOMAIN<1B>) with WINS instead of the PDC. - -For subnets other than the one containing the Windows NT PDC -you may set up Samba servers as local master browsers as -described. To make a Samba server a local master browser set -the following options in the [global] section of the smb.conf -file : - - domain master = no - local master = yes - preferred master = yes - os level = 65 - -If you wish to have a Samba server fight the election with machines -on the same subnet you may set the "os level" parameter to lower -levels. By doing this you can tune the order of machines that -will become local master browsers if they are running. For -more details on this see the section "FORCING SAMBA TO BE THE MASTER" -below. - -If you have Windows NT machines that are members of the domain -on all subnets, and you are sure they will always be running then -you can disable Samba from taking part in browser elections and -ever becoming a local master browser by setting following options -in the [global] section of the smb.conf file : - - domain master = no - local master = no - preferred master = no - os level = 0 - -FORCING SAMBA TO BE THE MASTER -============================== - -Who becomes the "master browser" is determined by an election process -using broadcasts. Each election packet contains a number of parameters -which determine what precedence (bias) a host should have in the -election. By default Samba uses a very low precedence and thus loses -elections to just about anyone else. - -If you want Samba to win elections then just set the "os level" global -option in smb.conf to a higher number. It defaults to 0. Using 34 -would make it win all elections over every other system (except other -samba systems!) - -A "os level" of 2 would make it beat WfWg and Win95, but not NTAS. A -NTAS domain controller uses level 32. - -The maximum os level is 255 - -If you want samba to force an election on startup, then set the -"preferred master" global option in smb.conf to "yes". Samba will -then have a slight advantage over other potential master browsers -that are not preferred master browsers. Use this parameter with -care, as if you have two hosts (whether they are windows 95 or NT or -samba) on the same local subnet both set with "preferred master" to -"yes", then periodically and continually they will force an election -in order to become the local master browser. - -If you want samba to be a "domain master browser", then it is -recommended that you also set "preferred master" to "yes", because -samba will not become a domain master browser for the whole of your -LAN or WAN if it is not also a local master browser on its own -broadcast isolated subnet. - -It is possible to configure two samba servers to attempt to become -the domain master browser for a domain. The first server that comes -up will be the domain master browser. All other samba servers will -attempt to become the domain master browser every 5 minutes. They -will find that another samba server is already the domain master -browser and will fail. This provides automatic redundancy, should -the current domain master browser fail. - - -MAKING SAMBA THE DOMAIN MASTER -============================== - -The domain master is responsible for collating the browse lists of -multiple subnets so that browsing can occur between subnets. You can -make samba act as the domain master by setting "domain master = yes" -in smb.conf. By default it will not be a domain master. - -Note that you should NOT set Samba to be the domain master for a -workgroup that has the same name as an NT Domain. - -When samba is the domain master and the master browser it will listen -for master announcements (made roughly every twelve minutes) from local -master browsers on other subnets and then contact them to synchronise -browse lists. - -If you want samba to be the domain master then I suggest you also set -the "os level" high enough to make sure it wins elections, and set -"preferred master" to "yes", to get samba to force an election on -startup. - -Note that all your servers (including samba) and clients should be -using a WINS server to resolve NetBIOS names. If your clients are only -using broadcasting to resolve NetBIOS names, then two things will occur: - -a) your local master browsers will be unable to find a domain master - browser, as it will only be looking on the local subnet. - -b) if a client happens to get hold of a domain-wide browse list, and - a user attempts to access a host in that list, it will be unable to - resolve the NetBIOS name of that host. - -If, however, both samba and your clients are using a WINS server, then: - -a) your local master browsers will contact the WINS server and, as long as - samba has registered that it is a domain master browser with the WINS - server, your local master browser will receive samba's ip address - as its domain master browser. - -b) when a client receives a domain-wide browse list, and a user attempts - to access a host in that list, it will contact the WINS server to - resolve the NetBIOS name of that host. as long as that host has - registered its NetBIOS name with the same WINS server, the user will - be able to see that host. - -NOTE ABOUT BROADCAST ADDRESSES -============================== - -If your network uses a "0" based broadcast address (for example if it -ends in a 0) then you will strike problems. Windows for Workgroups -does not seem to support a 0's broadcast and you will probably find -that browsing and name lookups won't work. - - -MULTIPLE INTERFACES -=================== - -Samba now supports machines with multiple network interfaces. If you -have multiple interfaces then you will need to use the "interfaces" -option in smb.conf to configure them. See smb.conf(5) for details. - diff --git a/docs/textdocs/BUGS.txt b/docs/textdocs/BUGS.txt deleted file mode 100644 index 247998c6c7a..00000000000 --- a/docs/textdocs/BUGS.txt +++ /dev/null @@ -1,135 +0,0 @@ -Contributor: Samba Team -Updated: June 27, 1997 - -Subject: This file describes how to report Samba bugs. -============================================================================ - ->> The email address for bug reports is samba@samba.org << - -Please take the time to read this file before you submit a bug -report. Also, please see if it has changed between releases, as we -may be changing the bug reporting mechanism at some time. - -Please also do as much as you can yourself to help track down the -bug. Samba is maintained by a dedicated group of people who volunteer -their time, skills and efforts. We receive far more mail about it than -we can possibly answer, so you have a much higher chance of an answer -and a fix if you send us a "developer friendly" bug report that lets -us fix it fast. - -Do not assume that if you post the bug to the comp.protocols.smb -newsgroup or the mailing list that we will read it. If you suspect that your -problem is not a bug but a configuration problem then it is better to send -it to the Samba mailing list, as there are (at last count) 5000 other users on -that list that may be able to help you. - -You may also like to look though the recent mailing list archives, -which are conveniently accessible on the Samba web pages -at http://samba.org/samba/ - - -GENERAL INFO ------------- - -Before submitting a bug report check your config for silly -errors. Look in your log files for obvious messages that tell you that -you've misconfigured something and run testparm to test your config -file for correct syntax. - -Have you run through DIAGNOSIS.txt? This is very important. - -If you include part of a log file with your bug report then be sure to -annotate it with exactly what you were doing on the client at the -time, and exactly what the results were. - - -DEBUG LEVELS ------------- - -If the bug has anything to do with Samba behaving incorrectly as a -server (like refusing to open a file) then the log files will probably -be very useful. Depending on the problem a log level of between 3 and -10 showing the problem may be appropriate. A higher level givesmore -detail, but may use too much disk space. - -To set the debug level use "log level =" in your smb.conf. You may -also find it useful to set the log level higher for just one machine -and keep separate logs for each machine. To do this use: - -log level = 10 -log file = /usr/local/samba/lib/log.%m -include = /usr/local/samba/lib/smb.conf.%m - -then create a file "/usr/local/samba/lib/smb.conf.machine" where -"machine" is the name of the client you wish to debug. In that file -put any smb.conf commands you want, for example "log level=" may be -useful. This also allows you to experiment with different security -systems, protocol levels etc on just one machine. - -The smb.conf entry "log level =" is synonymous with the entry -"debuglevel =" that has been used in older versions of Samba and -is being retained for backwards compatibility of smb.conf files. - -As the "log level =" value is increased you will record a significantly -increasing level of debugging information. For most debugging operations -you may not need a setting higher than 3. Nearly all bugs can be tracked -at a setting of 10, but be prepared for a VERY large volume of log data. - - -INTERNAL ERRORs ---------------- - -If you get a "INTERNAL ERROR" message in your log files it means that -Samba got an unexpected signal while running. It is probably a -segmentation fault and almost certainly means a bug in Samba (unless -you have faulty hardware or system software) - -If the message came from smbd then it will probably be accompanied by -a message which details the last SMB message received by smbd. This -info is often very useful in tracking down the problem so please -include it in your bug report. - -You should also detail how to reproduce the problem, if -possible. Please make this reasonably detailed. - -You may also find that a core file appeared in a "corefiles" -subdirectory of the directory where you keep your samba log -files. This file is the most useful tool for tracking down the bug. To -use it you do this: - -gdb smbd core - -adding appropriate paths to smbd and core so gdb can find them. If you -don't have gdb then try "dbx". Then within the debugger use the -command "where" to give a stack trace of where the problem -occurred. Include this in your mail. - -If you known any assembly language then do a "disass" of the routine -where the problem occurred (if its in a library routine then -disassemble the routine that called it) and try to work out exactly -where the problem is by looking at the surrounding code. Even if you -don't know assembly then incuding this info in the bug report can be -useful. - - -ATTACHING TO A RUNNING PROCESS ------------------------------- - -Unfortunately some unixes (in particular some recent linux kernels) -refuse to dump a core file if the task has changed uid (which smbd -does often). To debug with this sort of system you could try to attach -to the running process using "gdb smbd PID" where you get PID from -smbstatus. Then use "c" to continue and try to cause the core dump -using the client. The debugger should catch the fault and tell you -where it occurred. - - -PATCHES -------- - -The best sort of bug report is one that includes a fix! If you send us -patches please use "diff -u" format if your version of diff supports -it, otherwise use "diff -c4". Make sure your do the diff against a -clean version of the source and let me know exactly what version you -used. - diff --git a/docs/textdocs/DIAGNOSIS.txt b/docs/textdocs/DIAGNOSIS.txt deleted file mode 100644 index 2816610a9cb..00000000000 --- a/docs/textdocs/DIAGNOSIS.txt +++ /dev/null @@ -1,321 +0,0 @@ -Contributor: Andrew Tridgell -Updated: November 1, 1999 - -Subject: DIAGNOSING YOUR SAMBA SERVER -=========================================================================== - -This file contains a list of tests you can perform to validate your -Samba server. It also tells you what the likely cause of the problem -is if it fails any one of these steps. If it passes all these tests -then it is probably working fine. - -You should do ALL the tests, in the order shown. I have tried to -carefully choose them so later tests only use capabilities verified in -the earlier tests. - -If you send me an email saying "it doesn't work" and you have not -followed this test procedure then you should not be surprised if I -ignore your email. - - -ASSUMPTIONS ------------ - -In all of the tests I assume you have a Samba server called BIGSERVER -and a PC called ACLIENT both in workgroup TESTGROUP. I also assume the -PC is running windows for workgroups with a recent copy of the -microsoft tcp/ip stack. Alternatively, your PC may be running Windows -95 or Windows NT (Workstation or Server). - -The procedure is similar for other types of clients. - -I also assume you know the name of an available share in your -smb.conf. I will assume this share is called "tmp". You can add a -"tmp" share like by adding the following to smb.conf: - -[tmp] - comment = temporary files - path = /tmp - read only = yes - - -THESE TESTS ASSUME VERSION 2.0.6 OR LATER OF THE SAMBA SUITE. SOME -COMMANDS SHOWN DID NOT EXIST IN EARLIER VERSIONS - -Please pay attention to the error messages you receive. If any error message -reports that your server is being unfriendly you should first check that you -IP name resolution is correctly set up. eg: Make sure your /etc/resolv.conf -file points to name servers that really do exist. - -Also, if you do not have DNS server access for name resolution please check -that the settings for your smb.conf file results in "dns proxy = no". The -best way to check this is with "testparm smb.conf" - - -TEST 1: -------- - -In the directory in which you store your smb.conf file, run the command -"testparm smb.conf". If it reports any errors then your smb.conf -configuration file is faulty. - -Note: Your smb.conf file may be located in: /etc - Or in: /usr/local/samba/lib - - -TEST 2: -------- - -run the command "ping BIGSERVER" from the PC and "ping ACLIENT" from -the unix box. If you don't get a valid response then your TCP/IP -software is not correctly installed. - -Note that you will need to start a "dos prompt" window on the PC to -run ping. - -If you get a message saying "host not found" or similar then your DNS -software or /etc/hosts file is not correctly setup. It is possible to -run samba without DNS entries for the server and client, but I assume -you do have correct entries for the remainder of these tests. - -Another reason why ping might fail is if your host is running firewall -software. You will need to relax the rules to let in the workstation -in question, perhaps by allowing access from another subnet (on Linux -this is done via the ipfwadm program.) - - -TEST 3: -------- - -Run the command "smbclient -L BIGSERVER" on the unix box. You -should get a list of available shares back. - -If you get a error message containing the string "Bad password" then -you probably have either an incorrect "hosts allow", "hosts deny" or -"valid users" line in your smb.conf, or your guest account is not -valid. Check what your guest account is using "testparm" and -temporarily remove any "hosts allow", "hosts deny", "valid users" or -"invalid users" lines. - -If you get a "connection refused" response then the smbd server may -not be running. If you installed it in inetd.conf then you probably edited -that file incorrectly. If you installed it as a daemon then check that -it is running, and check that the netbios-ssn port is in a LISTEN -state using "netstat -a". - -If you get a "session request failed" then the server refused the -connection. If it says "Your server software is being unfriendly" then -its probably because you have invalid command line parameters to smbd, -or a similar fatal problem with the initial startup of smbd. Also -check your config file (smb.conf) for syntax errors with "testparm" -and that the various directories where samba keeps its log and lock -files exist. - -There are a number of reasons for which smbd may refuse or decline -a session request. The most common of these involve one or more of -the following smb.conf file entries: - hosts deny = ALL - hosts allow = xxx.xxx.xxx.xxx/yy - bind interfaces only = Yes - -In the above, no allowance has been made for any session requests that -will automatically translate to the loopback adaptor address 127.0.0.1. -To solve this problem change these lines to: - hosts deny = ALL - hosts allow = xxx.xxx.xxx.xxx/yy 127. -Do NOT use the "bind interfaces only" parameter where you may wish to -use the samba password change facility, or where smbclient may need to -access local service for name resolution or for local resource -connections. (Note: the "bind interfaces only" parameter deficiency -where it will not allow connections to the loopback address will be -fixed soon). - -Another common cause of these two errors is having something already running -on port 139, such as Samba (ie: smbd is running from inetd already) or -something like Digital's Pathworks. Check your inetd.conf file before trying -to start smbd as a daemon, it can avoid a lot of frustration! - -And yet another possible cause for failure of TEST 3 is when the subnet mask -and / or broadcast address settings are incorrect. Please check that the -network interface IP Address / Broadcast Address / Subnet Mask settings are -correct and that Samba has correctly noted these in the log.nmb file. - -TEST 4: -------- - -Run the command "nmblookup -B BIGSERVER __SAMBA__". You should get the -IP address of your Samba server back. - -If you don't then nmbd is incorrectly installed. Check your inetd.conf -if you run it from there, or that the daemon is running and listening -to udp port 137. - -One common problem is that many inetd implementations can't take many -parameters on the command line. If this is the case then create a -one-line script that contains the right parameters and run that from -inetd. - - -TEST 5: -------- - -run the command "nmblookup -B ACLIENT '*'" - -You should get the PCs IP address back. If you don't then the client -software on the PC isn't installed correctly, or isn't started, or you -got the name of the PC wrong. - -If ACLIENT doesn't resolve via DNS then use the IP address of the -client in the above test. - - -TEST 6: -------- - -Run the command "nmblookup -d 2 '*'" - -This time we are trying the same as the previous test but are trying -it via a broadcast to the default broadcast address. A number of -Netbios/TCPIP hosts on the network should respond, although Samba may -not catch all of the responses in the short time it listens. You -should see "got a positive name query response" messages from several -hosts. - -If this doesn't give a similar result to the previous test then -nmblookup isn't correctly getting your broadcast address through its -automatic mechanism. In this case you should experiment use the -"interfaces" option in smb.conf to manually configure your IP -address, broadcast and netmask. - -If your PC and server aren't on the same subnet then you will need to -use the -B option to set the broadcast address to the that of the PCs -subnet. - -This test will probably fail if your subnet mask and broadcast address are -not correct. (Refer to TEST 3 notes above). - -TEST 7: -------- - -Run the command "smbclient //BIGSERVER/TMP". You should then be -prompted for a password. You should use the password of the account -you are logged into the unix box with. If you want to test with -another account then add the -U option to the end of -the command line. eg: smbclient //bigserver/tmp -Ujohndoe - -Note: It is possible to specify the password along with the username -as follows: - smbclient //bigserver/tmp -Ujohndoe%secret - -Once you enter the password you should get the "smb>" prompt. If you -don't then look at the error message. If it says "invalid network -name" then the service "tmp" is not correctly setup in your smb.conf. - -If it says "bad password" then the likely causes are: - -- you have shadow passords (or some other password system) but didn't -compile in support for them in smbd -- your "valid users" configuration is incorrect -- you have a mixed case password and you haven't enabled the "password -level" option at a high enough level -- the "path =" line in smb.conf is incorrect. Check it with testparm -- you enabled password encryption but didn't create the SMB encrypted -password file - -Once connected you should be able to use the commands "dir" "get" -"put" etc. Type "help " for instructions. You should -especially check that the amount of free disk space shown is correct -when you type "dir". - - -TEST 8: -------- - -On the PC type the command "net view \\BIGSERVER". You will need to do -this from within a "dos prompt" window. You should get back a list of -available shares on the server. - -If you get a "network name not found" or similar error then netbios -name resolution is not working. This is usually caused by a problem in -nmbd. To overcome it you could do one of the following (you only need -to choose one of them): - -- fixup the nmbd installation -- add the IP address of BIGSERVER to the "wins server" box in the -advanced tcp/ip setup on the PC. -- enable windows name resolution via DNS in the advanced section of -the tcp/ip setup -- add BIGSERVER to your lmhosts file on the PC. - -If you get a "invalid network name" or "bad password error" then the -same fixes apply as they did for the "smbclient -L" test above. In -particular, make sure your "hosts allow" line is correct (see the man -pages) - -Also, do not overlook that fact that when the workstation requests the -connection to the samba server it will attempt to connect using the -name with which you logged onto your Windows machine. You need to make -sure that an account exists on your Samba server with that exact same -name and password. - -If you get "specified computer is not receiving requests" or similar -it probably means that the host is not contactable via tcp services. -Check to see if the host is running tcp wrappers, and if so add an entry in -the hosts.allow file for your client (or subnet, etc.) - - -TEST 9: --------- - -Run the command "net use x: \\BIGSERVER\TMP". You should be prompted -for a password then you should get a "command completed successfully" -message. If not then your PC software is incorrectly installed or your -smb.conf is incorrect. make sure your "hosts allow" and other config -lines in smb.conf are correct. - -It's also possible that the server can't work out what user name to -connect you as. To see if this is the problem add the line "user = -USERNAME" to the [tmp] section of smb.conf where "USERNAME" is the -username corresponding to the password you typed. If you find this -fixes things you may need the username mapping option. - -TEST 10: --------- - -Run the command "nmblookup -M TESTGROUP" where TESTGROUP is the name -of the workgroup that your Samba server and Windows PCs belong to. You -should get back the IP address of the master browser for that -workgroup. - -If you don't then the election process has failed. Wait a minute to -see if it is just being slow then try again. If it still fails after -that then look at the browsing options you have set in smb.conf. Make -sure you have "preferred master = yes" to ensure that an election is -held at startup. - -TEST 11: --------- - -From file manager try to browse the server. Your samba server should -appear in the browse list of your local workgroup (or the one you -specified in smb.conf). You should be able to double click on the name -of the server and get a list of shares. If you get a "invalid -password" error when you do then you are probably running WinNT and it -is refusing to browse a server that has no encrypted password -capability and is in user level security mode. In this case either set -"security = server" AND "password server = Windows_NT_Machine" in your -smb.conf file, or enable encrypted passwords AFTER compiling in support -for encrypted passwords (refer to the Makefile). - - -Still having troubles? ----------------------- - -Try the mailing list or newsgroup, or use the tcpdump-smb utility to -sniff the problem. The official samba mailing list can be reached at -samba@samba.org. To find out more about samba and how to -subscribe to the mailing list check out the samba web page at - http://samba.org/samba - -Also look at the other docs in the Samba package! - diff --git a/docs/textdocs/DNIX.txt b/docs/textdocs/DNIX.txt deleted file mode 100644 index 51005e6ec8c..00000000000 --- a/docs/textdocs/DNIX.txt +++ /dev/null @@ -1,69 +0,0 @@ -DNIX has a problem with seteuid() and setegid(). These routines are -needed for Samba to work correctly, but they were left out of the DNIX -C library for some reason. - -For this reason Samba by default defines the macro NO_EID in the DNIX -section of includes.h. This works around the problem in a limited way, -but it is far from ideal, some things still won't work right. - -To fix the problem properly you need to assemble the following two -functions and then either add them to your C library or link them into -Samba. - -put this in the file setegid.s: - - .globl _setegid -_setegid: - moveq #47,d0 - movl #100,a0 - moveq #1,d1 - movl 4(sp),a1 - trap #9 - bccs 1$ - jmp cerror -1$: - clrl d0 - rts - - -put this in the file seteuid.s: - - .globl _seteuid -_seteuid: - moveq #47,d0 - movl #100,a0 - moveq #0,d1 - movl 4(sp),a1 - trap #9 - bccs 1$ - jmp cerror -1$: - clrl d0 - rts - -after creating the above files you then assemble them using - -as seteuid.s -as setegid.s - -that should produce the files seteuid.o and setegid.o - -then you need to add these to the LIBSM line in the DNIX section of -the Samba Makefile. Your LIBSM line will then look something like this: - -LIBSM = setegid.o seteuid.o -ln - -You should then remove the line: - -#define NO_EID - -from the DNIX section of includes.h - -Then recompile and try it out! - -Note that this file was derived from an email from Peter Olsson -. I don't have DNIX myself, so you're probably better -off contacting Peter if you have problems. - -Andrew - diff --git a/docs/textdocs/GROUP-MAPPING-HOWTO.txt b/docs/textdocs/GROUP-MAPPING-HOWTO.txt deleted file mode 100644 index c266f56548d..00000000000 --- a/docs/textdocs/GROUP-MAPPING-HOWTO.txt +++ /dev/null @@ -1,60 +0,0 @@ -Samba 3.0 prealpha guide to group mapping ---------------------------------------------------- - -Jean François Micouleau (jfm@samba.org) - -Starting with Samba 3.0 alpha 2, a new group mapping function is available. The -current method (likely to change) to manage the groups is a new command called -smbgroupedit. - -The first immediate reason to use the group mapping on a PDC, is that -the 'domain admin group' of smb.conf is now gone. This parameter was -used to give the listed users local admin rights on their -workstations. It was some magic stuff that simply worked but didn't -scale very well for complex setups. - -Let me explain how it works on NT/W2K, to have this magic fade away. -When installing NT/W2K on a computer, the installer program creates some users -and groups. Notably the 'Administrators' group, and gives to that group some -privileges like the ability to change the date and time or to kill any process -(or close too) running on the local machine. The 'Administrator' user is a -member of the 'Administrators' group, and thus 'inherit' the 'Administrators' -group privileges. If a 'joe' user is created and become a member of the -'Administrator' group, 'joe' has exactly the same rights as 'Administrator'. - -When a NT/W2K machine is joined to a domain, during that phase, the "Domain -Administrators' group of the PDC is added to the 'Administrators' group of the -workstation. Every members of the 'Domain Administrators' group 'inherit' the -rights of the 'Administrators' group when logging on the workstation. - - -You are now wondering how to make some of your samba PDC users members of the -'Domain Administrators' ? That's really easy. - -1) create a unix group (usually in /etc/group), let's call it domadm -2) add to this group the users that must be Administrators. For example if you -want joe,john and mary, your entry in /etc/group will look like: - - domadm:x:502:joe,john,mary - -3) map this domadm group to the 'domain admins' group by running the command: - - smbgroupedit -c "Domain Admins" -u domadm - -you're set, joe, john and mary are domain administrators ! - - - -Like the Domain Admins group, you can map any arbitrary Unix group to any NT -group. You can also make any Unix group a domain group. For example, on a domain -member machine (an NT/W2K or a samba server running winbind), you would like to -give access to a certain directory to some users who are member of a group on -your samba PDC. Flag that group as a domain group by running: - - smbgroupedit -a unixgroup -td - - -You can list the various groups in the mapping database like this - - smbgroupedit -v - diff --git a/docs/textdocs/INSTALL.sambatar b/docs/textdocs/INSTALL.sambatar deleted file mode 100644 index 413f54d3c65..00000000000 --- a/docs/textdocs/INSTALL.sambatar +++ /dev/null @@ -1,33 +0,0 @@ -Contributor: Ricky Poulten -Date: Unknown -Status: Current - -Subject: Using smbtar -============================================================================= - -Please see the readme and the man page for general info. - -1) Follow the samba installation instructions. - -2) If all goes well, test it out by creating a share on your PC (called -backup for example) then doing something like, - - ./smbtar -s mypc -t /dev/rmt/0ubn -x backup - -substituting whatever your tape drive is for the -t option, or set your -tape environmental variable. - -If all does not go well, feel free to mail the author (poultenr@logica.co.uk) -about bug reports / help / money / pizza / etc. - -3) Read the man page and the NOTES file for more information - -4) Work smbtar into your usual nightly backup scheme (presuming you -have one :-}). - - -NOTE: - -If you have problems with smbtar then it's probably best to contact the -author Ricky Poulten (poultenr@logica.co.uk). - diff --git a/docs/textdocs/Imprints.txt b/docs/textdocs/Imprints.txt deleted file mode 100644 index 4ea9782bd38..00000000000 --- a/docs/textdocs/Imprints.txt +++ /dev/null @@ -1,47 +0,0 @@ -================================================================== - - -Imprints (Installation Manager of Printer driver -Retreival and Installation for Samba) is a project to -implement a UNIX equivalent of the Windows NT APW. -It has been taken on in part by the Samba Team, VA Linux -Systems and Hewlett-Packard. The Imprints toolset seeks -to provide central repository for users and administrators -to locate, download, and install all variations Window -95/98/NT printer drivers on Samba print servers. - -The server portion of Imprints is composed of a database -server which contains information and locations of various -printer driver packages. This server can be queried over -standard HTTP get requests and should therefore be available -to most administrators behind firewalls. The server's -database consists of records containing data about each -known printer driver package. For example, each driver -record contains a URL from which the Imprints installation -client can download the package as well as a public key which -can be used to verify the package's integrity. - -Once downloaded, the installation client will attempt to -install the printer driver on the defined remote server -using the username and password provided by the administrator. -If the username/password pair can be authenticated by the -remote server (and has the appropriate authorization), then -the printer driver(s) is (are) installed and the new Printer -is created. - -From Samba's point of view, the process of creating a new -printer via the Imprints installation client is identical to -that of using the Windows NT APW. In fact, Imprints utilizes -Samba's rpcclient and smbclient tools to issue the same MS-RPC -and file copy operations as an NT client. This means that -Imprints can also be used to install printers on remote Windows -NT print servers. - -For more information on Imprints, visit the project homepage -at - - http://imprints.sourceforge.net/. - - - - diff --git a/docs/textdocs/Macintosh_Clients.txt b/docs/textdocs/Macintosh_Clients.txt deleted file mode 100644 index dfac97e1aa2..00000000000 --- a/docs/textdocs/Macintosh_Clients.txt +++ /dev/null @@ -1,23 +0,0 @@ -> Are there any Macintosh clients for Samba? - -Yes. Thursby now have a CIFS Client / Server called DAVE - see -http://www.thursby.com/ - -They test it against Windows 95, Windows NT and samba for -compatibility issues. At the time of writing, DAVE was at version -1.0.1. The 1.0.0 to 1.0.1 update is available as a free download from -the Thursby web site (the speed of finder copies has been greatly -enhanced, and there are bug-fixes included). - -Alternatives - There are two free implementations of AppleTalk for -several kinds of UNIX machnes, and several more commercial ones. -These products allow you to run file services and print services -natively to Macintosh users, with no additional support required on -the Macintosh. The two free omplementations are Netatalk, -http://www.umich.edu/~rsug/netatalk/, and CAP, -http://www.cs.mu.oz.au/appletalk/atalk.html. What Samba offers MS -Windows users, these packages offer to Macs. For more info on these -packages, Samba, and Linux (and other UNIX-based systems) see -http://www.eats.com/linux_mac_win.html - - diff --git a/docs/textdocs/NetBIOS.txt b/docs/textdocs/NetBIOS.txt deleted file mode 100644 index ca0dcc84b72..00000000000 --- a/docs/textdocs/NetBIOS.txt +++ /dev/null @@ -1,152 +0,0 @@ -Contributor: lkcl - samba@samba.org - Copyright 1997 Luke Kenneth Casson Leighton -Date: March 1997 -Status: Current -Updated: 12jun97 - -Subject: Definition of NetBIOS Protocol and Name Resolution Modes -============================================================================= - -======= -NETBIOS -======= - -NetBIOS runs over the following tranports: TCP/IP; NetBEUI and IPX/SPX. -Samba only uses NetBIOS over TCP/IP. For details on the TCP/IP NetBIOS -Session Service NetBIOS Datagram Service, and NetBIOS Names, see -rfc1001.txt and rfc1002.txt. - -NetBEUI is a raw NetBIOS frame protocol implementation that allows NetBIOS -datagrams to be sent out over the 'wire' embedded within LLC frames. -NetBEUI is not required when using NetBIOS over TCP/IP protocols and it -is preferable NOT to install NetBEUI if it can be avoided. - -IPX/SPX is also not required when using NetBIOS over TCP/IP, and it is -preferable NOT to install the IPX/SPX transport unless you are using Novell -servers. At the very least, it is recommended that you do not install -'NetBIOS over IPX/SPX'. - -[When installing Windows 95, you will find that NetBEUI and IPX/SPX are -installed as the default protocols. This is because they are the simplest -to manage: no Windows 95 user-configuration is required]. - - -NetBIOS applications (such as samba) offer their services (for example, -SMB file and print sharing) on a NetBIOS name. They must claim this name -on the network before doing so. The NetBIOS session service will then -accept connections on the application's behalf (on the NetBIOS name -claimed by the application). A NetBIOS session between the application -and the client can then commence. - -NetBIOS names consist of 15 characters plus a 'type' character. This is -similar, in concept, to an IP address and a TCP port number, respectively. -A NetBIOS-aware application on a host will offer different services under -different NetBIOS name types, just as a host will offer different TCP/IP -services on different port numbers. - -NetBIOS names must be claimed on a network, and must be defended. The use -of NetBIOS names is most suitable on a single subnet; a Local Area Network -or a Wide Area Network. - -NetBIOS names are either UNIQUE or GROUP. Only one application can claim a -UNIQUE NetBIOS name on a network. - -There are two kinds of NetBIOS Name resolution: Broadcast and Point-to-Point. - - -================= -BROADCAST NetBIOS -================= - -Clients can claim names, and therefore offer services on successfully claimed -names, on their broadcast-isolated subnet. One way to get NetBIOS services -(such as browsing: see ftp.microsoft.com/drg/developr/CIFS/browdiff.txt; and -SMB file/print sharing: see cifs4.txt) working on a LAN or WAN is to make -your routers forward all broadcast packets from TCP/IP ports 137, 138 and 139. - -This, however, is not recommended. If you have a large LAN or WAN, you will -find that some of your hosts spend 95 percent of their time dealing with -broadcast traffic. [If you have IPX/SPX on your LAN or WAN, you will find -that this is already happening: a packet analyzer will show, roughly -every twelve minutes, great swathes of broadcast traffic!]. - - -============ -NBNS NetBIOS -============ - -rfc1001.txt describes, amongst other things, the implementation and use -of, a 'NetBIOS Name Service'. NT/AS offers 'Windows Internet Name Service' -which is fully rfc1001/2 compliant, but has had to take specific action -with certain NetBIOS names in order to make it useful. (for example, it -deals with the registration of <1c> <1d> <1e> names all in different ways. -I recommend the reading of the Microsoft WINS Server Help files for full -details). - -Samba also offers WINS server capabilities. Samba does not interact -with NT/AS (WINS replication), so if you have a mixed NT server and -Samba server environment, it is recommended that you use the NT server's -WINS capabilities, instead of samba's WINS server capabilities. - -The use of a WINS server cuts down on broadcast network traffic for -NetBIOS name resolution. It has the effect of pulling all the broadcast -isolated subnets together into a single NetBIOS scope, across your LAN -or WAN, while avoiding the use of TCP/IP broadcast packets. - -When you have a WINS server on your LAN, WINS clients will be able to -contact the WINS server to resolve NetBIOS names. Note that only those -WINS clients that have registered with the same WINS server will be -visible. The WINS server _can_ have static NetBIOS entries added to its -database (usually for security reasons you might want to consider putting -your domain controllers or other important servers as static entries, -but you should not rely on this as your sole means of security), but for -the most part, NetBIOS names are registered dynamically. - -[It is important to mention that samba's browsing capabilities (as a WINS -client) must have access to a WINS server. if you are using samba also -as a WINS server, then it will have a direct short-cut into the WINS -database. - -This provides some confusion for lots of people, and is worth mentioning -here: a Browse Server is NOT a WINS Server, even if these services are -implemented in the same application. A Browse Server _needs_ a WINS server -because a Browse Server is a WINS client, which is _not_ the same thing]. - -Clients can claim names, and therefore offer services on successfully claimed -names, on their broadcast-isolated subnet. One way to get NetBIOS services -(such as browsing: see ftp.microsoft.com/drg/developr/CIFS/browdiff.txt; and -SMB file/print sharing: see cifs6.txt) working on a LAN or WAN is to make -your routers forward all broadcast packets from TCP/IP ports 137, 138 and 139. -You will find, however, if you do this on a large LAN or a WAN, that your -network is completely swamped by NetBIOS and browsing packets, which is why -WINS was developed to minimise the necessity of broadcast traffic. - -WINS Clients therefore claim names from the WINS server. If the WINS -server allows them to register a name, the client's NetBIOS session service -can then offer services on this name. Other WINS clients will then -contact the WINS server to resolve a NetBIOS name. - - -======================= -Samba WINS Capabilities -======================= - -To configure samba as a WINS server, you must add "wins support = yes" to -the [global] section of your smb.conf file. This will enable WINS server -capabilities in nmbd. - -To configure samba as a WINS client, you must add "wins server = x.x.x.x" -to the [global] section of your smb.conf file, where x.x.x.x is the TCP/IP -address of your WINS server. The browsing capabilities in nmbd will then -register (and resolve) WAN-wide NetBIOS names with this WINS server. - -Note that if samba has "wins support = yes", then the browsing capabilities -will _not_ use the "wins server" option to resolve NetBIOS names: it will -go directly to the internal WINS database for NetBIOS name resolution. It -is therefore invalid to have both "wins support = yes" and -"wins server = x.x.x.x". Note, in particular, that if you configure the -"wins server" parameter to be the ip address of your samba server itself -(as might one intuitively think), that you will run into difficulties. -Do not use both parameters! - - diff --git a/docs/textdocs/Printing.txt b/docs/textdocs/Printing.txt deleted file mode 100644 index 2c50e5f4fe6..00000000000 --- a/docs/textdocs/Printing.txt +++ /dev/null @@ -1,255 +0,0 @@ -Contributor: Unknown -Revised by: Patrick Powell -Date: August 11, 2000 -Status: Current - -Subject: Debugging Printing Problems -============================================================================= - -This is a short description of how to debug printing problems with -Samba. This describes how to debug problems with printing from a SMB -client to a Samba server, not the other way around. For the reverse -see the examples/printing directory. - -Please send enhancements to this file to samba@samba.org - -Ok, so you want to print to a Samba server from your PC. The first -thing you need to understand is that Samba does not actually do any -printing itself, it just acts as a middleman between your PC client -and your Unix printing subsystem. Samba receives the file from the PC -then passes the file to a external "print command". What print command -you use is up to you. - -The whole things is controlled using options in smb.conf. The most -relevant options (which you should look up in the smb.conf man page) -are: - [global] - print command - send a file to a spooler - lpq command - get spool queue status - lprm command - remove a job - [printers] - path = /var/spool/lpd/samba - -The following are nice to know about: - - queuepause command - stop a printer or print queue - queueresume command - start a printer or print queue - -Example: - print command = /usr/bin/lpr -r -P%p %s - lpq command = /usr/bin/lpq -P%p %s - lprm command = /usr/bin/lprm -P%p %j - queuepause command = /usr/sbin/lpc -P%p stop - queuepause command = /usr/sbin/lpc -P%p start - -Samba should set reasonable defaults for these depending on your -system type, but it isn't clairvoyant. It is not uncommon that you -have to tweak these for local conditions. The commands should -always have fully specified pathnames, as the smdb may not have -the correct PATH values. - -When you send a job to Samba to be printed, it will make a temporary -copy of it in the directory specified in the [printers] section. -and it should be periodically cleaned out. The lpr -r option -requests that the temporary copy be removed after printing; If -printing fails then you might find leftover files in this directory, -and it should be periodically cleaned out. Samba used the lpq -command to determine the "job number" assigned to your print job -by the spooler. - -The % are "macros" that get dynamically replaced with appropriate -values when they are used. The %s gets replaced with the name of the spool -file that Samba creates and the %p gets replaced with the name of the -printer. The %j gets replaced with the "job number" which comes from -the lpq output. - -DEBUGGING PRINTER PROBLEMS - -One way to debug printing problems is to start by replacing these -command with shell scripts that record the arguments and the contents -of the print file. A simple example of this kind of things might -be: - - print command = /tmp/saveprint %p %s - - #!/bin/saveprint - # we make sure that we are the right user - /usr/bin/id -p >/tmp/tmp.print - # we run the command and save the error messages - # replace the command with the one appropriate for your system - /usr/bin/lpr -r -P$1 $2 2>>&/tmp/tmp.print - -Then you print a file and try removing it. You may find that the -print queue needs to be stopped in order to see the queue status -and remove the job: - -h4: {42} % echo hi >/tmp/hi -h4: {43} % smbclient //localhost/lw4 -added interface ip=10.0.0.4 bcast=10.0.0.255 nmask=255.255.255.0 -Password: -Domain=[ASTART] OS=[Unix] Server=[Samba 2.0.7] -smb: \> print /tmp/hi -putting file /tmp/hi as hi-17534 (0.0 kb/s) (average 0.0 kb/s) -smb: \> queue -1049 3 hi-17534 -smb: \> cancel 1049 -Error cancelling job 1049 : code 0 -smb: \> cancel 1049 -Job 1049 cancelled -smb: \> queue -smb: \> exit - -The 'code 0' indicates that the job was removed. The comment -by the smbclient is a bit misleading on this. -You can observe the command output and then and look at the -/tmp/tmp.print file to see what the results are. You can quickly -find out if the problem is with your printing system. Often people -have problems with their /etc/printcap file or permissions on -various print queues. - -WHAT PRINTERS DO I HAVE - -You can use the 'testprns' program to check to see if the printer -name you are using is recognized by Samba. For example, you can -use: - - testprns printer /etc/printcap - -Samba can get its printcap information from a file or from a program. -You can try the following to see the format of the extracted -information: - - testprns -a printer /etc/printcap - - testprns -a printer '|/bin/cat printcap' - -SETTING UP PRINTCAP AND PRINT SERVERS - -You may need to set up some printcaps for your Samba system to use. -It is strongly recommended that you use the facilities provided by -the print spooler to set up queues and printcap information. - -Samba requires either a printcap or program to deliver printcap -information. This printcap information has the format: - - name|alias1|alias2...:option=value:... - -For almost all printing systems, the printer 'name' must be composed -only of alphanumeric or underscore '_' characters. Some systems also -allow hyphens ('-') as well. An alias is an alternative name for the -printer, and an alias with a space in it is used as a 'comment' -about the printer. The printcap format optionally uses a \ at the end of lines -to extend the printcap to multiple lines. - - -Here are some examples of printcap files: - -pr just printer name -pr|alias printer name and alias -pr|My Printer printer name, alias used as comment -pr:sh:\ Same as pr:sh:cm= testing - :cm= \ - testing -pr:sh Same as pr:sh:cm= testing - :cm= testing - -Samba reads the printcap information when first started. If you make -changes in the printcap information, then you must do the following: - -a) make sure that the print spooler is aware of these changes. - The LPRng system uses the 'lpc reread' command to do this. - -b) make sure that the spool queues, etc., exist and have the - correct permissions. The LPRng system uses the 'checkpc -f' - command to do this. - -c) You now should send a SIGHUP signal to the smbd server to have - it reread the printcap information. - -JOB SENT, NO OUTPUT - -This is the most frustrating part of printing. You may have sent the -job, verified that the job was forwarded, set up a wrapper around -the command to send the file, but there was no output from the printer. - -First, check to make sure that the job REALLY is getting to the -right print queue. If you are using a BSD or LPRng print spooler, -you can temporarily stop the printing of jobs. Jobs can still be -submitted, but they will not be printed. Use: - - lpc -Pprinter stop - -Now submit a print job and then use 'lpq -Pprinter' to see if the -job is in the print queue. If it is not in the print queue then -you will have to find out why it is not being accepted for printing. - -Next, you may want to check to see what the format of the job really -was. With the assistance of the system administrator you can view -the submitted jobs files. You may be surprised to find that these -are not in what you would expect to call a printable format. -You can use the UNIX 'file' utitily to determine what the job -format actually is: - - cd /var/spool/lpd/printer # spool directory of print jobs - ls # find job files - file dfA001myhost - -You should make sure that your printer supports this format OR that -your system administrator has installed a 'print filter' that will -convert the file to a format appropriate for your printer. - -JOB SENT, STRANGE OUTPUT - -Once you have the job printing, you can then start worrying about -making it print nicely. - -The most common problem is extra pages of output: banner pages -OR blank pages at the end. - -If you are getting banner pages, check and make sure that the -printcap option or printer option is configured for no banners. -If you have a printcap, this is the :sh (suppress header or banner -page) option. You should have the following in your printer. - - printer: ... :sh - -If you have this option and are still getting banner pages, there -is a strong chance that your printer is generating them for you -automatically. You should make sure that banner printing is disabled -for the printer. This usually requires using the printer setup software -or procedures supplied by the printer manufacturer. - -If you get an extra page of output, this could be due to problems -with your job format, or if you are generating PostScript jobs, -incorrect setting on your printer driver on the MicroSoft client. -For example, under Win95 there is a option: - - Printers|Printer Name|(Right Click)Properties|Postscript|Advanced| - -that allows you to choose if a Ctrl-D is appended to all jobs. -This is a very bad thing to do, as most spooling systems will -automatically add a ^D to the end of the job if it is detected as -PostScript. The multiple ^D may cause an additional page of output. - -RAW POSTSCRIPT PRINTED - -This is a problem that is usually caused by either the print spooling -system putting information at the start of the print job that makes -the printer think the job is a text file, or your printer simply -does not support PostScript. You may need to enable 'Automatic -Format Detection' on your printer. - -ADVANCED PRINTING - -Note that you can do some pretty magic things by using your -imagination with the "print command" option and some shell scripts. -Doing print accounting is easy by passing the %U option to a print -command shell script. You could even make the print command detect -the type of output and its size and send it to an appropriate -printer. - -DEBUGGING - -If the above debug tips don't help, then maybe you need to bring in -the bug guns, system tracing. See Tracing.txt in this directory. ------------------------------------------------------------------------------ diff --git a/docs/textdocs/README.sambatar b/docs/textdocs/README.sambatar deleted file mode 100644 index af7250c2a49..00000000000 --- a/docs/textdocs/README.sambatar +++ /dev/null @@ -1,23 +0,0 @@ -Contributor/s: Martin.Kraemer - and Ricky Poulten (ricky@logcam.co.uk) -Date: Unknown - circa 1994 -Status: Obsoleted - smbtar has been a stable part of Samba - since samba-1.9.13 - -Subject: Sambatar (now smbtar) -============================================================================= - -This is version 1.4 of my small extension to samba that allows PC shares -to be backed up directly to a UNIX tape. It only has been tested under -Solaris 2.3, Linux 1.1.59 and DG/UX 5.4r3.10 with version 1.9.13 of samba. - -See the file INSTALL for installation instructions, and -the man page and NOTES file for some basic usage. Please let me know if you -have any problems getting it to work under your flavour of Unix. - -This is only (yet another) intermediate version of sambatar. -This version also comes with an extra gift, zen.bas, written in -microsoft qbasic by a colleague. It is (apparently) based on a 70s -British sci-fi series known as Blake's 7. If you have any questions -about this program, or any suggestions (e.g. what about servillan.bas -?), feel free to mail the author (of zen.bas) greenm@lilhd.logica.com. diff --git a/docs/textdocs/SCO.txt b/docs/textdocs/SCO.txt deleted file mode 100644 index 7c01aa57c6c..00000000000 --- a/docs/textdocs/SCO.txt +++ /dev/null @@ -1,19 +0,0 @@ -Contributor: Geza Makay -Date: Unknown -Status: Obsolete - Dates to SCO Unix v3.2.4 approx. - -Subject: TCP/IP Bug in SCO Unix -============================================================================ - -There is an annoying TCPIP bug in SCO Unix. This causes corruption when -transferring files with Samba. - -Geza Makay (makayg@math.u-szeged.hu) sends this information: - -The patch you need is UOD385 Connection Drivers SLS. It is available from -SCO (ftp.sco.com, directory SLS, files uod385a.Z and uod385a.ltr.Z). - -You do not need anything else but the above patch. It installs in seconds, -and corrected the Excel problem. We also had some other minor problems (not -only with Samba) that disappeared by installing this patch. - diff --git a/docs/textdocs/SMBTAR.notes b/docs/textdocs/SMBTAR.notes deleted file mode 100644 index 679d776f56c..00000000000 --- a/docs/textdocs/SMBTAR.notes +++ /dev/null @@ -1,46 +0,0 @@ -Contributor: Unknown -Date: 1994 -Status: Mostly Current - refer man page - -Subject: Smbtar -============================================================================ - -Intro ------ - -sambatar is just a small extension to the smbclient program distributed with -samba. A basic front end shell script, smbtar, is provided as an interface -to the smbclient extensions. - -Extensions ----------- - -This release adds the following extensions to smbclient, - -tar [c|x] filename - creates or restores from a tar file. The tar file may be a tape -or a unix tar file. tar's behaviour is modified with the newer and tarmode -commands. - -tarmode [full|inc|reset|noreset] - With no arguments, tarmode prints the current tar mode (by default full, -noreset). In full mode, every file is backed up during a tar command. -In incremental, only files with the dos archive bit set are backed up. -The archive bit is reset if in reset mode, or left untouched if in noreset. -In reset mode, the share has to be writable, which makes sambatar even -less secure. An alternative might be to use tarmode inc noreset which -would implement an "expanding incremental" backup (which some may prefer -anyway). - -setmode filename - This is a "freebie" - nothing really to do with sambatar. This -is a crude attrib like command (only the other way around). Setmode string -is a combination of +-rhsa. So for example -rh would reset the read only -bit on filename. - -newer filename - This is in fact part of the 1.9.13 samba distribution, but comes -into its own with sambatar. This causes tar (or get, mget, etc) to -only copy files newer than the specified file name. Could be used -against the previous nights (or whatever) log file to implement incremental -backups. diff --git a/docs/textdocs/Solaris-Winbind-HOWTO.txt b/docs/textdocs/Solaris-Winbind-HOWTO.txt deleted file mode 100644 index a81bacf4864..00000000000 --- a/docs/textdocs/Solaris-Winbind-HOWTO.txt +++ /dev/null @@ -1,361 +0,0 @@ -!== -!== Solaris-Winbind-HOWTO.txt -!== -Contributors: Naag Mummaneni -Updated: May 2, 2002 -Status: Current - -Subject: Installing and Configuring Winbind on Solaris -============================================================================= - -Installation and Configuration of Winbind on Solaris. ------------------------------------------------------ - -This HOWTO describes how to get winbind services up and running to control -access and authenticate users on your Solaris box using the winbind services -which come with SAMBA 2.2.x latest CVS Checkout.Make sure you are using the -latest Samba 2.2.x cvs checkout as other versions come with a lots of bugs -regarding winbind .And even the Latest Samba Stable Release is also not an -exception to this. - -Introduction ------------- - -This HOWTO describes the procedures used to get winbind up and running on a -Solaris system. Winbind is capable of providing access and authentication -control for Windows Domain users through an NT or Win2K PDC for 'regular' -services, such as telnet and ftp, as well for SAMBA services. - -Why should I to this? - -This allows the SAMBA administrator to rely on the authentication mechanisms -on the NT/Win2K PDC for the authentication of domain members. NT/Win2K users -no longer need to have separate accounts on the SAMBA server. - -Who should be reading this document? - -This HOWTO is designed for system administrators. If you are implementing -SAMBA on a file server and wish to (fairly easily) integrate existing -NT/Win2K users from your PDC onto the SAMBA server, this HOWTO is for you. - -Requirements ------------- - -If you have a samba configuration file that you are currently using... BACK -IT UP! If your system already uses PAM, back up the /etc/pam.conf file ! If -you haven't already made a boot disk, MAKEONE NOW! Messing with the pam -configuration file can make it nearly impossible to log in to yourmachine. -That's why you want to be able to boot back into your machine in single user -mode and restore your /etc/pam.conf back to the original state they were in -if you get frustrated with the way things are going. ;-) Please refer to the -main SAMBA web page or, better yet, your closest SAMBA mirror site for -instructions on downloading the source code of Samba 2.2.x from the SAMBA -CVS repository. To allow Domain users the ability to access SAMBA shares and -files, as well as potentially other services provided by your SAMBA machine, -PAM (pluggable authentication modules) must be setup properly on your -machine. In order to compile the winbind modules, you should have at least -the pam libraries resident on your system. Solaris 7/8 has its pam modules -coming with the distribution itself. - -Testing Things Out ------------------- - -Before starting, it is probably best to kill off all the SAMBA related -daemons running on your server. Kill off all smbd, nmbd, and winbindd -processes that may be running. - - -Configure and compile SAMBA ---------------------------- - -The configuration and compilation of SAMBA is pretty straightforward. The -first three steps may not be necessary depending upon whether or not you -have previously built the Samba binaries. - -root# autoconf -root# make clean -root# rm config.cache -root# ./configure --with-winbind --with-pam -root# make -root# make install - -This will, by default, install SAMBA in /usr/local/samba. See the main SAMBA -documentation if you want to install SAMBA somewhere else. It will also -build the winbindd executable and libraries. - -Configure nsswitch.conf and the winbind libraries -------------------------------------------------- - -The libraries needed to run the winbindd daemon through nsswitch need to be -copied to their proper locations, so - -root# cp ../samba/source/nsswitch/libnss_winbind.so /usr/lib - -I also found it necessary to make the following symbolic links: - -root# ln -s /usr/lib/libnss_winbind.so /usr/lib/libnss_winbind.so.1 -root# ln -s /usr/lib/libnss_winbind.so /usr/lib/libnss_winbind.so.2 -root# ln -s /usr/lib/libnss_winbind.so /usr/lib/nss_winbind.so.1 -root# ln -s /usr/lib/libnss_winbind.so /usr/lib/nss_winbind.so.2 - -Now, as root you need to edit /etc/nsswitch.conf to allow user and group -entries to be visible from the winbindd daemon. My /etc/nsswitch.conf file -look like this after editing: - - passwd: files winbind - group: files winbind - - -Configure smb.conf ------------------- - -Several parameters are needed in the smb.conf file to control the behavior -of winbindd. Configure smb.conf These are described in more detail in the -winbindd(8) man page. My smb.conf file was modified to include the following -entries in the [global] section: - -[global] - <...> - # The previous documentation says to - # as the "winbind seperator " directive also but - # it is no longer supported. - - # use uids from 10000 to 20000 for domain users - winbind uid = 10000-20000 - - # use gids from 10000 to 20000 for domain groups - winbind gid = 10000-20000 - - # allow enumeration of winbind users and groups - winbind enum users = yes - winbind enum groups = yes - - # give winbind users a real shell (only needed if - # they have telnet access) - template homedir = /home/winnt/%D/%U - template shell = /bin/bash - - -Join the SAMBA server to the PDC domain ---------------------------------------- - -Enter the following command to make the SAMBA server join the PDC domain, -where DOMAIN is the name of your Windows domain and Administrator is a -domain user who has administrative privileges in the domain. - -root# /usr/local/samba/bin/smbpasswd -j DOMAIN -r PDC -U Administrator - -The proper response to the command should be: "Joined the domain DOMAIN" -where DOMAIN is your DOMAIN name. - -Start up the winbindd daemon and test it! - -Eventually, you will want to modify your smb startup script to automatically -invoke the winbindd daemon when the other parts of SAMBA start, but it is -possible to test out just the winbind portion first. To start up winbind -services, enter the following command as root: - -root# /usr/local/samba/bin/winbindd - -I'm always paranoid and like to make sure the daemon is really running... - -root# ps -ae | grep winbindd - -This command should produce output like this, if the daemon is running - - 3025 ? 00:00:00 winbindd - -Now... for the real test, try to get some information about the users on -your PDC - -root# /usr/local/samba/bin/wbinfo -u - -This should echo back a list of users on your Windows users on your PDC. For -example, I get the following response: - -CEO\Administrator -CEO\burdell -CEO\Guest -CEO\jt-ad -CEO\krbtgt -CEO\TsInternetUser - -root# /usr/local/samba/bin/wbinfo -g - -CEO\Domain Admins -CEO\Domain Users -CEO\Domain Guests -CEO\Domain Computers -CEO\Domain Controllers -CEO\Cert Publishers -CEO\Schema Admins -CEO\Enterprise Admins -CEO\Group Policy Creator Owners - -The function 'getent' can now be used to get unified lists of both local and -PDC users and groups. Try the following command: - -root# getent passwd - -You should get a list that looks like your /etc/passwd list followed by the domain users with their new -uids, gids, home directories and default shells. - -The same thing can be done for groups with the command - -root# getent group - -Fix the /etc/rc.d/init.d/samba.server startup files The winbindd daemon -needs to start up after the smbd and nmbd daemons are running. To accomplish -this task, you need to modify the /etc/init.d/samba.server script to add -commands to invoke this daemon in the proper sequence. My -/etc/init.d/samba.server file starts up smbd, nmbd, and winbindd from the -/usr/local/samba/bin directory directly. - -## -## samba.server -## - -if [ ! -d /usr/bin ] -then # /usr not mounted - exit -fi - -killproc() { # kill the named process(es) - pid=`/usr/bin/ps -e | - /usr/bin/grep -w $1 | - /usr/bin/sed -e 's/^ *//' -e 's/ .*//'` - [ "$pid" != "" ] && kill $pid -} - -# Start/stop processes required for samba server - -case "$1" in - -'start') -# -# Edit these lines to suit your installation (paths, workgroup, host) -# -echo Starting SMBD - /usr/local/samba/bin/smbd -D -s \ - /usr/local/samba/smb.conf - -echo Starting NMBD - /usr/local/samba/bin/nmbd -D -l \ - /usr/local/samba/var/log -s /usr/local/samba/smb.conf - -echo Starting Winbind Daemon - /usr/local/samba/bin/winbindd - ;; - -'stop') - killproc nmbd - killproc smbd - killproc winbindd - ;; - -*) - echo "Usage: /etc/init.d/samba.server { start | stop }" - ;; -esac - -If you restart the smbd, nmbd, and winbindd daemons at this point, you -should be able to connect to the samba server as a domain member just as if -you were a local user. - - -Configure Winbind and PAM -------------------------- - -If you have made it this far, you know that winbindd and samba are working -together. If you want to use winbind to provide authentication for other -services, keep reading. The pam configuration file need to be altered in -this step. (Did you remember to make backups of your original /etc/pam.conf -file? If not, do it now.) You will need a pam module to use winbindd with -these other services. This module will be compiled in the ../source/nsswitch -directory by default when we used ./configure --with-pam option. - -root# make nsswitch/pam_winbind.so - -from the ../source directory. The pam_winbind.so file should be copied to -the location of your other pam security modules. On my Solaris 8, this was -the /usr/lib/security directory. - -root# cp ../samba/source/nsswitch/pam_winbind.so /usr/lib/security - -The /etc/pam.conf need to be changed. I changed this file so that my Domain -users can logon both locally as well as telnet.The following are the changes -that I made.You can customize the pam.conf file as per your requirements,but -be sure of those changes because in the worst case it will leave your system -nearly impossible to boot. - -# -#ident "@(#)pam.conf 1.14 99/09/16 SMI" -# -# Copyright (c) 1996-1999, Sun Microsystems, Inc. -# All Rights Reserved. -# -# PAM configuration -# -# Authentication management -# -login auth required /usr/lib/security/pam_winbind.so -login auth required /usr/lib/security/$ISA/pam_unix.so.1 try_first_pass -login auth required /usr/lib/security/$ISA/pam_dial_auth.so.1 try_first_pass -# -rlogin auth sufficient /usr/lib/security/pam_winbind.so -rlogin auth sufficient /usr/lib/security/$ISA/pam_rhosts_auth.so.1 -rlogin auth required /usr/lib/security/$ISA/pam_unix.so.1 try_first_pass -# -dtlogin auth sufficient /usr/lib/security/pam_winbind.so -dtlogin auth required /usr/lib/security/$ISA/pam_unix.so.1 try_first_pass -# -rsh auth required /usr/lib/security/$ISA/pam_rhosts_auth.so.1 -other auth sufficient /usr/lib/security/pam_winbind.so -other auth required /usr/lib/security/$ISA/pam_unix.so.1 try_first_pass -# -# Account management -# -login account sufficient /usr/lib/security/pam_winbind.so -login account requisite /usr/lib/security/$ISA/pam_roles.so.1 -login account required /usr/lib/security/$ISA/pam_unix.so.1 -# -dtlogin account sufficient /usr/lib/security/pam_winbind.so -dtlogin account requisite /usr/lib/security/$ISA/pam_roles.so.1 -dtlogin account required /usr/lib/security/$ISA/pam_unix.so.1 -# -other account sufficient /usr/lib/security/pam_winbind.so -other account requisite /usr/lib/security/$ISA/pam_roles.so.1 -other account required /usr/lib/security/$ISA/pam_unix.so.1 -# -# Session management -# -other session required /usr/lib/security/$ISA/pam_unix.so.1 -# -# Password management -# -#other password sufficient /usr/lib/security/pam_winbind.so -other password required /usr/lib/security/$ISA/pam_unix.so.1 -dtsession auth required /usr/lib/security/$ISA/pam_unix.so.1 -# -# Support for Kerberos V5 authentication (uncomment to use Kerberos) -# -#rlogin auth optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass -#login auth optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass -#dtlogin auth optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass -#other auth optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass -#dtlogin account optional /usr/lib/security/$ISA/pam_krb5.so.1 -#other account optional /usr/lib/security/$ISA/pam_krb5.so.1 -#other session optional /usr/lib/security/$ISA/pam_krb5.so.1 -#other password optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass - -I also added a try_first_pass line after the winbind.so line to get rid of -annoying double prompts for passwords. - -Now restart your Samba & try connecting through your application that you -configured in the pam.conf. - - - -!== -!== end of Solaris-Winbind-HOWTO.txt -!== diff --git a/docs/textdocs/Speed.txt b/docs/textdocs/Speed.txt deleted file mode 100644 index b82db8f8f4d..00000000000 --- a/docs/textdocs/Speed.txt +++ /dev/null @@ -1,338 +0,0 @@ - -Subject: Samba performance issues -============================================================================ - -This file tries to outline the ways to improve the speed of a Samba server. - -COMPARISONS ------------ - -The Samba server uses TCP to talk to the client. Thus if you are -trying to see if it performs well you should really compare it to -programs that use the same protocol. The most readily available -programs for file transfer that use TCP are ftp or another TCP based -SMB server. - -If you want to test against something like a NT or WfWg server then -you will have to disable all but TCP on either the client or -server. Otherwise you may well be using a totally different protocol -(such as Netbeui) and comparisons may not be valid. - -Generally you should find that Samba performs similarly to ftp at raw -transfer speed. It should perform quite a bit faster than NFS, -although this very much depends on your system. - -Several people have done comparisons between Samba and Novell, NFS or -WinNT. In some cases Samba performed the best, in others the worst. I -suspect the biggest factor is not Samba vs some other system but the -hardware and drivers used on the various systems. Given similar -hardware Samba should certainly be competitive in speed with other -systems. - - -OPLOCKS -------- - -Oplocks are the way that SMB clients get permission from a server to -locally cache file operations. If a server grants an oplock -(opportunistic lock) then the client is free to assume that it is the -only one accessing the file and it will agressively cache file -data. With some oplock types the client may even cache file open/close -operations. This can give enormous performance benefits. - -With the release of Samba 1.9.18 we now correctly support opportunistic -locks. This is turned on by default, and can be turned off on a share- -by-share basis by setting the parameter : - -oplocks = False - -We recommend that you leave oplocks on however, as current benchmark -tests with NetBench seem to give approximately a 30% improvement in -speed with them on. This is on average however, and the actual -improvement seen can be orders of magnitude greater, depending on -what the client redirector is doing. - -Previous to Samba 1.9.18 there was a 'fake oplocks' option. This -option has been left in the code for backwards compatibility reasons -but it's use is now deprecated. A short summary of what the old -code did follows. - -LEVEL2 OPLOCKS --------------- - -With Samba 2.0.5 a new capability - level2 (read only) oplocks is -supported (although the option is off by default - see the smb.conf -man page for details). Turning on level2 oplocks (on a share-by-share basis) -by setting the parameter : - -level2 oplocks = true - -should speed concurrent access to files that are not commonly written -to, such as application serving shares (ie. shares that contain common -.EXE files - such as a Microsoft Office share) as it allows clients to -read-ahread cache copies of these files. - -Old 'fake oplocks' option - deprecated. ---------------------------------------- - -Samba can also fake oplocks, by granting a oplock whenever a client -asks for one. This is controlled using the smb.conf option "fake -oplocks". If you set "fake oplocks = yes" then you are telling the -client that it may agressively cache the file data for all opens. - -Enabling 'fake oplocks' on all read-only shares or shares that you know -will only be accessed from one client at a time you will see a big -performance improvement on many operations. If you enable this option -on shares where multiple clients may be accessing the files read-write -at the same time you can get data corruption. - -SOCKET OPTIONS --------------- - -There are a number of socket options that can greatly affect the -performance of a TCP based server like Samba. - -The socket options that Samba uses are settable both on the command -line with the -O option, or in the smb.conf file. - -The "socket options" section of the smb.conf manual page describes how -to set these and gives recommendations. - -Getting the socket options right can make a big difference to your -performance, but getting them wrong can degrade it by just as -much. The correct settings are very dependent on your local network. - -The socket option TCP_NODELAY is the one that seems to make the -biggest single difference for most networks. Many people report that -adding "socket options = TCP_NODELAY" doubles the read performance of -a Samba drive. The best explanation I have seen for this is that the -Microsoft TCP/IP stack is slow in sending tcp ACKs. - - -READ SIZE ---------- - -The option "read size" affects the overlap of disk reads/writes with -network reads/writes. If the amount of data being transferred in -several of the SMB commands (currently SMBwrite, SMBwriteX and -SMBreadbraw) is larger than this value then the server begins writing -the data before it has received the whole packet from the network, or -in the case of SMBreadbraw, it begins writing to the network before -all the data has been read from disk. - -This overlapping works best when the speeds of disk and network access -are similar, having very little effect when the speed of one is much -greater than the other. - -The default value is 16384, but very little experimentation has been -done yet to determine the optimal value, and it is likely that the best -value will vary greatly between systems anyway. A value over 65536 is -pointless and will cause you to allocate memory unnecessarily. - - -MAX XMIT --------- - -At startup the client and server negotiate a "maximum transmit" size, -which limits the size of nearly all SMB commands. You can set the -maximum size that Samba will negotiate using the "max xmit = " option -in smb.conf. Note that this is the maximum size of SMB request that -Samba will accept, but not the maximum size that the *client* will accept. -The client maximum receive size is sent to Samba by the client and Samba -honours this limit. - -It defaults to 65536 bytes (the maximum), but it is possible that some -clients may perform better with a smaller transmit unit. Trying values -of less than 2048 is likely to cause severe problems. - -In most cases the default is the best option. - - -LOCKING -------- - -By default Samba does not implement strict locking on each read/write -call (although it did in previous versions). If you enable strict -locking (using "strict locking = yes") then you may find that you -suffer a severe performance hit on some systems. - -The performance hit will probably be greater on NFS mounted -filesystems, but could be quite high even on local disks. - - -SHARE MODES ------------ - -Some people find that opening files is very slow. This is often -because of the "share modes" code needed to fully implement the dos -share modes stuff. You can disable this code using "share modes = -no". This will gain you a lot in opening and closing files but will -mean that (in some cases) the system won't force a second user of a -file to open the file read-only if the first has it open -read-write. For many applications that do their own locking this -doesn't matter, but for some it may. Most Windows applications -depend heavily on "share modes" working correctly and it is -recommended that the Samba share mode support be left at the -default of "on". - -The share mode code in Samba has been re-written in the 1.9.17 -release following tests with the Ziff-Davis NetBench PC Benchmarking -tool. It is now believed that Samba 1.9.17 implements share modes -similarly to Windows NT. - -NOTE: In the most recent versions of Samba there is an option to use -shared memory via mmap() to implement the share modes. This makes -things much faster. See the Makefile for how to enable this. - - -LOG LEVEL ---------- - -If you set the log level (also known as "debug level") higher than 2 -then you may suffer a large drop in performance. This is because the -server flushes the log file after each operation, which can be very -expensive. - - -WIDE LINKS ----------- - -The "wide links" option is now enabled by default, but if you disable -it (for better security) then you may suffer a performance hit in -resolving filenames. The performance loss is lessened if you have -"getwd cache = yes", which is now the default. - - -READ RAW --------- - -The "read raw" operation is designed to be an optimised, low-latency -file read operation. A server may choose to not support it, -however. and Samba makes support for "read raw" optional, with it -being enabled by default. - -In some cases clients don't handle "read raw" very well and actually -get lower performance using it than they get using the conventional -read operations. - -So you might like to try "read raw = no" and see what happens on your -network. It might lower, raise or not affect your performance. Only -testing can really tell. - - -WRITE RAW ---------- - -The "write raw" operation is designed to be an optimised, low-latency -file write operation. A server may choose to not support it, -however. and Samba makes support for "write raw" optional, with it -being enabled by default. - -Some machines may find "write raw" slower than normal write, in which -case you may wish to change this option. - -READ PREDICTION ---------------- - -Samba can do read prediction on some of the SMB commands. Read -prediction means that Samba reads some extra data on the last file it -read while waiting for the next SMB command to arrive. It can then -respond more quickly when the next read request arrives. - -This is disabled by default. You can enable it by using "read -prediction = yes". - -Note that read prediction is only used on files that were opened read -only. - -Read prediction should particularly help for those silly clients (such -as "Write" under NT) which do lots of very small reads on a file. - -Samba will not read ahead more data than the amount specified in the -"read size" option. It always reads ahead on 1k block boundaries. - - -MEMORY MAPPING --------------- - -Samba supports reading files via memory mapping them. One some -machines this can give a large boost to performance, on others it -makes not difference at all, and on some it may reduce performance. - -To enable you you have to recompile Samba with the -DUSE_MMAP option -on the FLAGS line of the Makefile. - -Note that memory mapping is only used on files opened read only, and -is not used by the "read raw" operation. Thus you may find memory -mapping is more effective if you disable "read raw" using "read raw = -no". - - -SLOW CLIENTS ------------- - -One person has reported that setting the protocol to COREPLUS rather -than LANMAN2 gave a dramatic speed improvement (from 10k/s to 150k/s). - -I suspect that his PC's (386sx16 based) were asking for more data than -they could chew. I suspect a similar speed could be had by setting -"read raw = no" and "max xmit = 2048", instead of changing the -protocol. Lowering the "read size" might also help. - - -SLOW LOGINS ------------ - -Slow logins are almost always due to the password checking time. Using -the lowest practical "password level" will improve things a lot. You -could also enable the "UFC crypt" option in the Makefile. - -CLIENT TUNING -------------- - -Often a speed problem can be traced to the client. The client (for -example Windows for Workgroups) can often be tuned for better TCP -performance. - -See your client docs for details. In particular, I have heard rumours -that the WfWg options TCPWINDOWSIZE and TCPSEGMENTSIZE can have a -large impact on performance. - -Also note that some people have found that setting DefaultRcvWindow in -the [MSTCP] section of the SYSTEM.INI file under WfWg to 3072 gives a -big improvement. I don't know why. - -My own experience wth DefaultRcvWindow is that I get much better -performance with a large value (16384 or larger). Other people have -reported that anything over 3072 slows things down enourmously. One -person even reported a speed drop of a factor of 30 when he went from -3072 to 8192. I don't know why. - -It probably depends a lot on your hardware, and the type of unix box -you have at the other end of the link. - - -MY RESULTS ----------- - -Some people want to see real numbers in a document like this, so here -they are. I have a 486sx33 client running WfWg 3.11 with the 3.11b -tcp/ip stack. It has a slow IDE drive and 20Mb of ram. It has a SMC -Elite-16 ISA bus ethernet card. The only WfWg tuning I've done is to -set DefaultRcvWindow in the [MSTCP] section of system.ini to 16384. My -server is a 486dx3-66 running Linux. It also has 20Mb of ram and a SMC -Elite-16 card. You can see my server config in the examples/tridge/ -subdirectory of the distribution. - -I get 490k/s on reading a 8Mb file with copy. -I get 441k/s writing the same file to the samba server. - -Of course, there's a lot more to benchmarks than 2 raw throughput -figures, but it gives you a ballpark figure. - -I've also tested Win95 and WinNT, and found WinNT gave me the best -speed as a samba client. The fastest client of all (for me) is -smbclient running on another linux box. Maybe I'll add those results -here someday ... - - diff --git a/docs/textdocs/Speed2.txt b/docs/textdocs/Speed2.txt deleted file mode 100644 index a8c3e7381fd..00000000000 --- a/docs/textdocs/Speed2.txt +++ /dev/null @@ -1,57 +0,0 @@ -Contributor: Paul Cochrane -Organization: Dundee Limb Fitting Centre -Date: Fri, 10 Apr 1998 -Subject: Samba SPEED.TXT comment -============================================================================= - -This might be relevant to Client Tuning. I have been trying various methods -of getting win95 to talk to Samba quicker. The results I have come up with -are: - -1. Install the W2setup.exe file from www.microsoft.com. This is an -update for the winsock stack and utilities which improve performance. - -2. Configure the win95 TCPIP registry settings to give better -perfomance. I use a program called MTUSPEED.exe which I got off the -net. There are various other utilities of this type freely available. -The setting which give the best performance for me are: - -(a) MaxMTU Remove -(b) RWIN Remove -(c) MTUAutoDiscover Disable -(d) MTUBlackHoleDetect Disable -(e) Time To Live Enabled -(f) Time To Live - HOPS 32 -(g) NDI Cache Size 0 - -3. I tried virtually all of the items mentioned in the document and -the only one which made a difference to me was the socket options. It -turned out I was better off without any!!!!! - -In terms of overall speed of transfer, between various win95 clients -and a DX2-66 20MB server with a crappy NE2000 compatible and old IDE -drive (Kernel 2.0.30). The transfer rate was reasonable for 10 baseT. - -The figures are: Put Get -P166 client 3Com card: 420-440kB/s 500-520kB/s -P100 client 3Com card: 390-410kB/s 490-510kB/s -DX4-75 client NE2000: 370-380kB/s 330-350kB/s - -I based these test on transfer two files a 4.5MB text file and a 15MB -textfile. The results arn't bad considering the hardware Samba is -running on. It's a crap machine!!!! - -The updates mentioned in 1 and 2 brought up the transfer rates from -just over 100kB/s in some clients. - -A new client is a P333 connected via a 100MB/s card and hub. The -transfer rates from this were good: 450-500kB/s on put and 600+kB/s -on get. - -Looking at standard FTP throughput, Samba is a bit slower (100kB/s -upwards). I suppose there is more going on in the samba protocol, but -if it could get up to the rate of FTP the perfomance would be quite -staggering. - -Paul Cochrane - diff --git a/docs/textdocs/Win95.txt b/docs/textdocs/Win95.txt deleted file mode 100644 index 69330c512d4..00000000000 --- a/docs/textdocs/Win95.txt +++ /dev/null @@ -1,74 +0,0 @@ -Copyright (C) 1997 - Samba-Team -Contributed Date: August 20, 1997 -Last Update: August 20, 1997 - -Subject: Windows 95 and Samba Interoperability -=============================================================================== - -Password Handling: ------------------- -Microsoft periodically release updates to all their operating systems. Some of -these are welcomed while others cause us to change the way we do things. Few -people like change, particularly if the change is unexpected. The best advice -always is to read the documentation provided BEFORE applying an update. - -One of the recent Win95 updates (VRDRUPD.EXE) disables plain text (also called -clear text) password authentication. The effects of this updates are desirable -where MS Windows NT is providing the password authentication service. This -update is most undesirable where Samba must provide the authentication service -unless Samba has been specifically configured to use encrypted passwords _AND_ -has been linked with the libdes library. - -If the above conditions have not been complied with, and you are using Samba, -then Windows 95 clients will NOT be able to authenticate to a Samba server. - -To re-enable plain text password capabilities AFTER applying this update -you must create a new value in the Windows 95 registry. - -Either foillow the following procedure or just double click on the -file Win95_PlainPassword.reg for an easier way to do this. - -Procedure: -1) Launch the Registry Editor as follows: - Click on: /Start/Run - Type "regedit" and press enter. - -2) Double click on: HKEY_LOCAL_MACHINE - -3) Locate the following Key: - /HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/VxD/VNETSUP - -4) From the menu bar select Edit/New/DWORD Value - -5) Rename the entry from "New Value #1" to: - EnablePlainTextPassword - -6) Press Enter, then double click on the new entry. - A dialog box will pop up and enable you to set a value. - You must set this value to 1. - -------------------------------------------------------------------------------- - -Windows 95 Updates: -------------------- -When using Windows 95 OEM SR2 the following updates are recommended where Samba -is being used. Please NOTE that the above change will affect you once these -updates have been installed. - -There are more updates than the ones mentioned here. You are referred to the -Microsoft Web site for all currently available updates to your specific version -of Windows 95. - -Kernel Update: KRNLUPD.EXE -Ping Fix: PINGUPD.EXE -RPC Update: RPCRTUPD.EXE -TCP/IP Update: VIPUPD.EXE -Redirector Update: VRDRUPD.EXE - -Also, if using MS OutLook it is desirable to install the OLEUPD.EXE fix. This -fix may stop your machine from hanging for an extended period when exiting -OutLook and you may also notice a significant speedup when accessing network -neighborhood services. - -------------------------------------------------------------------------------- -The above password information was provided by: Jochen Huppertz diff --git a/docs/textdocs/WinNT.txt b/docs/textdocs/WinNT.txt deleted file mode 100644 index 5c72fb08aa7..00000000000 --- a/docs/textdocs/WinNT.txt +++ /dev/null @@ -1,104 +0,0 @@ -Contributors: Various - Password Section - Copyright (C) 1997 - John H Terpstra - Printing Section - Copyright (C) 1997 - Matthew Harrell - Priting Info - Copyright (C) 1997 - Frank Varnavas -Updated: October 16, 1997 -Status: Current - -Subject: Samba and Windows NT Password Handling -============================================================================= - -There are some particular issues with Samba and Windows NT. - -Passwords: -========== -One of the most annoying problems with WinNT is that NT refuses to -connect to a server that is in user level security mode and that -doesn't support password encryption unless it first prompts the user -for a password. - -This means even if you have the same password on the NT box and the -Samba server you will get prompted for a password. Entering the -correct password will get you connected only if Windows NT can -communicate with Samba using a compatible mode of password security. - -All versions of Windows NT prior to 4.0 Service Pack 3 could negotiate -plain text (clear text) passwords. Windows NT 4.0 Service Pack 3 changed -this default behaviour so it now will only handle encrypted passwords. -The following registry entry change will re-enable clear text password -handling: - -Run regedt32.exe and locate the hive key entry: -HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Rdr\Parameters\ - -Add the following value: - EnablePlainTextPassword:REG_DWORD=1 - -Alternatively, use the NT4_PlainPassword.reg file in this directory (either -by double clicking on it, or run regedt32.exe and select "Import Registry -File" from the "Registry" Menu). - -The other major ramification of this feature of NT is that it can't -browse a user level non-encrypted server unless it already has a -connection open. This is because there is no spot for a password -prompt in the browser window. It works fine if you already have a -drive mounted (for example, one auto mounted on startup). -===================================================================== - -Printing: -========= -When you mount a printer using the print manager in NT you may find -the following info from Matthew Harrell -useful: - ------------- - I noticed in your change-log you noted that some people were -still unable to use print manager under NT. If this is the same problem -that I encountered, it's caused by the length of time it takes NT to -determine if the printer is ready. - -The problem occurs when you double-click on a printer to connect it to -the NT machine. Because it's unable to determine if the printer is ready -in the short span of time it has, it assumes it isn't and gives some -strange error about not having enough resources (I forget what the error -is). A solution to this that seems to work fine for us is to click -once on the printer, look at the bottom of the window and wait until -it says it's ready, then clilck on "OK". - -By the way, this problem probably occurs in our group because the -Samba server doesn't actually have the printers - it queues them to -remote printers either on other machines or using their own network -cards. Because of this "middle layer", it takes an extra amount of -time for the NT machine to get verification that the printer queue -actually exists. - -I hope this helped in some way... - -===================================================================== -Printing Info: --------------- - -From: Frank Varnavas -Subject: RE: Samba as a print server - -When an NT client attempts to connect to a printer on a non-NT print -server the attempt is failed with an error, something like: - - "You have insufficient access to your computer to perform the - operation because a driver needs to be installed" - -This is because domain users must have 'Power User' status on the -desktop to connect to printers on a non-NT print server. - -This error occurs regardless of whether the driver in question is -already installed or not. What it really means is that the server is -a non-NT server and the client does not have permission to create -printers locally. Apparently when a connection to a non-NT print -server is made the printer is defined locally. Such an action can be -performed by either a local administrator or a Power User. -Unfortunately there is no way to limit the powers of a Power User, nor -is there any way to grant the Printer Creation right to another group. - -This permission policy is documented in PSS database WINNT, ID Q101874 - -Frank Varnavas (varnavas@ny.ubs.com) diff --git a/docs/textdocs/security_level.txt b/docs/textdocs/security_level.txt deleted file mode 100644 index f4e0df7139c..00000000000 --- a/docs/textdocs/security_level.txt +++ /dev/null @@ -1,100 +0,0 @@ -Contributor: Andrew Tridgell -Updated: June 27, 1997 -Status: Current - -Subject: Description of SMB security levels. -=========================================================================== - -Samba supports the following options to the global smb.conf parameter -"security =": - share, user, server - -Note: Samba-2.0.0 now adds the "domain" security mode. Please refer to -the smb.conf man page for usage information and to the document -docs/textdocs/DOMAIN_MEMBER.txt for further background details. - -Of the above, "security = server" means that Samba reports to clients that -it is running in "user mode" but actually passes off all authentication -requests to another "user mode" server. This requires an additional -parameter "password server =" that points to the real authentication server. -That real authentication server can be another Samba server or can be a -Windows NT server, the later natively capable of encrypted password support. - -Below is a more complete description of security levels. -=========================================================================== - -A SMB server tells the client at startup what "security level" it is -running. There are two options "share level" and "user level". Which -of these two the client receives affects the way the client then tries -to authenticate itself. It does not directly affect (to any great -extent) the way the Samba server does security. I know this is -strange, but it fits in with the client/server approach of SMB. In SMB -everything is initiated and controlled by the client, and the server -can only tell the client what is available and whether an action is -allowed. - -I'll describe user level security first, as its simpler. In user level -security the client will send a "session setup" command directly after -the protocol negotiation. This contains a username and password. The -server can either accept or reject that username/password -combination. Note that at this stage the server has no idea what -share the client will eventually try to connect to, so it can't base -the "accept/reject" on anything other than: - -- the username/password -- the machine that the client is coming from - -If the server accepts the username/password then the client expects to -be able to mount any share (using a "tree connection") without -specifying a password. It expects that all access rights will be as -the username/password specified in the "session setup". - -It is also possible for a client to send multiple "session setup" -requests. When the server responds it gives the client a "uid" to use -as an authentication tag for that username/password. The client can -maintain multiple authentication contexts in this way (WinDD is an -example of an application that does this) - - -Ok, now for share level security. In share level security the client -authenticates itself separately for each share. It will send a -password along with each "tree connection" (share mount). It does not -explicitly send a username with this operation. The client is -expecting a password to be associated with each share, independent of -the user. This means that samba has to work out what username the -client probably wants to use. It is never explicitly sent the -username. Some commercial SMB servers such as NT actually associate -passwords directly with shares in share level security, but samba -always uses the unix authentication scheme where it is a -username/password that is authenticated, not a "share/password". - -Many clients send a "session setup" even if the server is in share -level security. They normally send a valid username but no -password. Samba records this username in a list of "possible -usernames". When the client then does a "tree connection" it also adds -to this list the name of the share they try to connect to (useful for -home directories) and any users listed in the "user =" smb.conf -line. The password is then checked in turn against these "possible -usernames". If a match is found then the client is authenticated as -that user. - -Finally "server level" security. In server level security the samba -server reports to the client that it is in user level security. The -client then does a "session setup" as described earlier. The samba -server takes the username/password that the client sends and attempts -to login to the "password server" by sending exactly the same -username/password that it got from the client. If that server is in -user level security and accepts the password then samba accepts the -clients connection. This allows the samba server to use another SMB -server as the "password server". - -You should also note that at the very start of all this, where the -server tells the client what security level it is in, it also tells -the client if it supports encryption. If it does then it supplies the -client with a random "cryptkey". The client will then send all -passwords in encrypted form. You have to compile samba with encryption -enabled to support this feature, and you have to maintain a separate -smbpasswd file with SMB style encrypted passwords. It is -cryptographically impossible to translate from unix style encryption -to SMB style encryption, although there are some fairly simple management -schemes by which the two could be kept in sync. -- cgit From 24103c2c20cd0727792be7efeb868ae988ffbd9b Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 09:02:38 +0000 Subject: Remove obsolete files Update generated docs --- docs/README.Win2kSP2 | 56 - docs/Samba-HOWTO-Collection.pdf | 8519 ++++++++++++++++++----------------- docs/docbook/stylesheets/ldp.dsl.in | 256 -- docs/manpages/findsmb.1 | 36 +- docs/manpages/smbclient.1 | 164 +- 5 files changed, 4466 insertions(+), 4565 deletions(-) delete mode 100644 docs/README.Win2kSP2 delete mode 100644 docs/docbook/stylesheets/ldp.dsl.in diff --git a/docs/README.Win2kSP2 b/docs/README.Win2kSP2 deleted file mode 100644 index 49a8fbf4ae1..00000000000 --- a/docs/README.Win2kSP2 +++ /dev/null @@ -1,56 +0,0 @@ -!== -!== README.Win2kSP2 -!== - -Author: Gerald (Jerry) Carter - -================================================================== - -There are several annoyances with Windows 2000 SP2. One of which -only appears when using a Samba server to host user profiles -to Windows 2000 SP2 clients in a Windows domain. This assumes -that Samba is a member of the domain, but the problem will -likely occur if it is not. - -In order to server profiles successfully to Windows 2000 SP2 -clients (when not operating as a PDC), Samba must have - - nt acl support = no - -added to the file share which houses the roaming profiles. -If this is not done, then the Windows 2000 SP2 client will -complain about not being able to access the profile (Access -Denied) and create multiple copies of it on disk (DOMAIN.user.001, -DOMAIN.user.002, etc...). See the smb.conf(5) man page -for more details on this option. Also note that the "nt acl support" -parameter was formally a global parameter in releases prior -to Samba 2.2.2. - -The following is a minimal profile share - - [profile] - path = /export/profile - create mask = 0600 - directory mask = 0700 - nt acl support = no - read only = no - -The reason for this bug is that the Win2k SP2 client copies -the security descriptor for the profile which contains -the Samba server's SID, and not the domain SID. The client -compares the SID for SAMBA\user and realizes it is -different that the one assigned to DOMAIN\user. Hence the reason -for the "access denied" message. - -By disabling the "nt acl support" parameter, Samba will send -the Win2k client a response to the QuerySecurityDescriptor -trans2 call which causes the client to set a default ACL -for the profile. This default ACL includes - - DOMAIN\user "Full Control" - - -NOTE : This bug does not occur when using winbind to -create accounts on the Samba host for Domain users. - - diff --git a/docs/Samba-HOWTO-Collection.pdf b/docs/Samba-HOWTO-Collection.pdf index e47621a0b84..85326c8b8ce 100644 --- a/docs/Samba-HOWTO-Collection.pdf +++ b/docs/Samba-HOWTO-Collection.pdf @@ -1,6 +1,6 @@ -%PDF-1.2 +%PDF-1.3 %âãÏÓ -1 0 obj<>endobj +1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj 4 0 obj<>endobj @@ -9,528 +9,686 @@ 7 0 obj<>endobj 8 0 obj<>endobj 9 0 obj<>endobj -10 0 obj<>endobj -11 0 obj<>endobj -12 0 obj<>endobj -13 0 obj<>endobj -14 0 obj<>endobj -15 0 obj<>endobj -16 0 obj<>endobj -17 0 obj<>endobj -18 0 obj<>endobj -19 0 obj[14 0 R +10 0 obj<>endobj +11 0 obj<>endobj +12 0 obj<>endobj +13 0 obj<>endobj +14 0 obj<>endobj +15 0 obj<>endobj +16 0 obj<>endobj +17 0 obj<>endobj +18 0 obj<>endobj +19 0 obj<>endobj +20 0 obj<>endobj +21 0 obj<>endobj +22 0 obj<>endobj +23 0 obj<>endobj +24 0 obj<>endobj +25 0 obj<>endobj +26 0 obj<>endobj +27 0 obj<>endobj +28 0 obj<>endobj +29 0 obj<>endobj +30 0 obj<>endobj +31 0 obj<>endobj +32 0 obj<>endobj +33 0 obj<>endobj +34 0 obj<>endobj +35 0 obj<>endobj +36 0 obj<>endobj +37 0 obj<>endobj +38 0 obj<>endobj +39 0 obj<>endobj +40 0 obj<>endobj +41 0 obj<>endobj +42 0 obj<>endobj +43 0 obj<>endobj +44 0 obj<>endobj +45 0 obj<>endobj +46 0 obj<>endobj +47 0 obj<>endobj +48 0 obj<>endobj +49 0 obj<>endobj +50 0 obj<>endobj +51 0 obj<>endobj +52 0 obj<>endobj +53 0 obj<>endobj +54 0 obj<>endobj +55 0 obj<>endobj +56 0 obj<>endobj +57 0 obj<>endobj +58 0 obj[14 0 R +15 0 R 16 0 R +17 0 R 18 0 R -]endobj -20 0 obj<>endobj -21 0 obj<>endobj -22 0 obj[21 0 R -]endobj -23 0 obj<>endobj -24 0 obj<>endobj -25 0 obj<>endobj -26 0 obj<>endobj -27 0 obj[24 0 R +19 0 R +20 0 R +21 0 R +22 0 R +23 0 R +24 0 R +25 0 R 26 0 R -]endobj -28 0 obj<>endobj -29 0 obj<>endobj -30 0 obj<>endobj -31 0 obj<>endobj -32 0 obj<>endobj -33 0 obj<>endobj -34 0 obj[29 0 R +27 0 R +28 0 R +29 0 R +30 0 R 31 0 R +32 0 R 33 0 R -]endobj -35 0 obj<>endobj -36 0 obj<>endobj -37 0 obj<>endobj -38 0 obj<>endobj -39 0 obj[36 0 R +34 0 R +35 0 R +36 0 R +37 0 R 38 0 R -]endobj -40 0 obj<>endobj -41 0 obj<>endobj -42 0 obj[41 0 R -]endobj -43 0 obj<>endobj -44 0 obj<>endobj -45 0 obj<>endobj -46 0 obj<>endobj -47 0 obj[44 0 R +39 0 R +40 0 R +41 0 R +42 0 R +43 0 R +44 0 R +45 0 R 46 0 R -]endobj -48 0 obj<>endobj -49 0 obj<>endobj -50 0 obj<>endobj -51 0 obj<>endobj -52 0 obj<>endobj -53 0 obj<>endobj -54 0 obj[49 0 R +47 0 R +48 0 R +49 0 R +50 0 R 51 0 R +52 0 R 53 0 R -]endobj -55 0 obj<>endobj -56 0 obj<>endobj -57 0 obj[56 0 R -]endobj -58 0 obj<>endobj -59 0 obj<>endobj -60 0 obj<>endobj -61 0 obj<>endobj -62 0 obj<>endobj -63 0 obj<>endobj -64 0 obj<>endobj -65 0 obj<>endobj -66 0 obj<>endobj -67 0 obj<>endobj -68 0 obj<>endobj -69 0 obj<>endobj -70 0 obj[59 0 R +54 0 R +55 0 R +56 0 R +57 0 R]endobj +59 0 obj<>endobj +60 0 obj<>endobj +61 0 obj<>endobj +62 0 obj<>endobj +63 0 obj<>endobj +64 0 obj<>endobj +65 0 obj<>endobj +66 0 obj<>endobj +67 0 obj<>endobj +68 0 obj<>endobj +69 0 obj<>endobj +70 0 obj<>endobj +71 0 obj<>endobj +72 0 obj<>endobj +73 0 obj<>endobj +74 0 obj<>endobj +75 0 obj<>endobj +76 0 obj<>endobj +77 0 obj<>endobj +78 0 obj<>endobj +79 0 obj<>endobj +80 0 obj<>endobj +81 0 obj<>endobj +82 0 obj<>endobj +83 0 obj<>endobj +84 0 obj<>endobj +85 0 obj<>endobj +86 0 obj<>endobj +87 0 obj<>endobj +88 0 obj<>endobj +89 0 obj<>endobj +90 0 obj<>endobj +91 0 obj<>endobj +92 0 obj<>endobj +93 0 obj<>endobj +94 0 obj<>endobj +95 0 obj<>endobj +96 0 obj<>endobj +97 0 obj<>endobj +98 0 obj<>endobj +99 0 obj<>endobj +100 0 obj<>endobj +101 0 obj<>endobj +102 0 obj<>endobj +103 0 obj[59 0 R +60 0 R 61 0 R +62 0 R 63 0 R +64 0 R 65 0 R +66 0 R 67 0 R +68 0 R 69 0 R -]endobj -71 0 obj<>endobj -72 0 obj<>endobj -73 0 obj<>endobj -74 0 obj<>endobj -75 0 obj<>endobj -76 0 obj<>endobj -77 0 obj[72 0 R +70 0 R +71 0 R +72 0 R +73 0 R 74 0 R +75 0 R 76 0 R -]endobj -78 0 obj<>endobj -79 0 obj<>endobj -80 0 obj<>endobj -81 0 obj<>endobj -82 0 obj<>endobj -83 0 obj<>endobj -84 0 obj<>endobj -85 0 obj<>endobj -86 0 obj<>endobj -87 0 obj<>endobj -88 0 obj<>endobj -89 0 obj[78 0 R +77 0 R +78 0 R +79 0 R 80 0 R +81 0 R 82 0 R +83 0 R 84 0 R +85 0 R 86 0 R +87 0 R 88 0 R -]endobj -90 0 obj<>endobj -91 0 obj<>endobj -92 0 obj[91 0 R -]endobj -93 0 obj<>endobj -94 0 obj<>endobj -95 0 obj<>endobj -96 0 obj<>endobj -97 0 obj<>endobj -98 0 obj<>endobj -99 0 obj<>endobj -100 0 obj<>endobj -101 0 obj[94 0 R +89 0 R +90 0 R +91 0 R +92 0 R +93 0 R +94 0 R +95 0 R 96 0 R +97 0 R 98 0 R +99 0 R 100 0 R -]endobj -102 0 obj<>endobj -103 0 obj<>endobj -104 0 obj<>endobj -105 0 obj<>endobj -106 0 obj<>endobj -107 0 obj<>endobj -108 0 obj<>endobj -109 0 obj<>endobj -110 0 obj[103 0 R +101 0 R +102 0 R]endobj +104 0 obj<>endobj +105 0 obj<>endobj +106 0 obj<>endobj +107 0 obj<>endobj +108 0 obj<>endobj +109 0 obj<>endobj +110 0 obj<>endobj +111 0 obj<>endobj +112 0 obj<>endobj +113 0 obj<>endobj +114 0 obj<>endobj +115 0 obj<>endobj +116 0 obj<>endobj +117 0 obj<>endobj +118 0 obj<>endobj +119 0 obj<>endobj +120 0 obj<>endobj +121 0 obj<>endobj +122 0 obj<>endobj +123 0 obj<>endobj +124 0 obj<>endobj +125 0 obj<>endobj +126 0 obj<>endobj +127 0 obj<>endobj +128 0 obj<>endobj +129 0 obj<>endobj +130 0 obj<>endobj +131 0 obj<>endobj +132 0 obj<>endobj +133 0 obj<>endobj +134 0 obj<>endobj +135 0 obj<>endobj +136 0 obj<>endobj +137 0 obj<>endobj +138 0 obj<>endobj +139 0 obj<>endobj +140 0 obj<>endobj +141 0 obj<>endobj +142 0 obj<>endobj +143 0 obj<>endobj +144 0 obj<>endobj +145 0 obj<>endobj +146 0 obj<>endobj +147 0 obj[104 0 R 105 0 R +106 0 R 107 0 R +108 0 R 109 0 R -]endobj -111 0 obj<>endobj -112 0 obj<>endobj -113 0 obj[112 0 R -]endobj -114 0 obj<>endobj -115 0 obj<>endobj -116 0 obj<>endobj -117 0 obj<>endobj -118 0 obj<>endobj -119 0 obj<>endobj -120 0 obj[115 0 R +110 0 R +111 0 R +112 0 R +113 0 R +114 0 R +115 0 R +116 0 R 117 0 R +118 0 R 119 0 R -]endobj -121 0 obj<>endobj -122 0 obj<>endobj -123 0 obj<>endobj -124 0 obj<>endobj -125 0 obj<>endobj -126 0 obj<>endobj -127 0 obj[122 0 R +120 0 R +121 0 R +122 0 R +123 0 R 124 0 R +125 0 R 126 0 R -]endobj -128 0 obj<>endobj -129 0 obj<>endobj -130 0 obj<>endobj -131 0 obj<>endobj -132 0 obj<>endobj -133 0 obj<>endobj -134 0 obj[129 0 R +127 0 R +128 0 R +129 0 R +130 0 R 131 0 R +132 0 R 133 0 R -]endobj -135 0 obj<>endobj -136 0 obj<>endobj -137 0 obj<>endobj -138 0 obj<>endobj -139 0 obj<>endobj -140 0 obj<>endobj -141 0 obj<>endobj -142 0 obj<>endobj -143 0 obj[136 0 R +134 0 R +135 0 R +136 0 R +137 0 R 138 0 R +139 0 R 140 0 R +141 0 R 142 0 R -]endobj -144 0 obj<>endobj -145 0 obj<>endobj -146 0 obj[145 0 R -]endobj -147 0 obj<>endobj -148 0 obj<>endobj -149 0 obj[148 0 R -]endobj -150 0 obj<>endobj -151 0 obj<>endobj -152 0 obj[151 0 R -]endobj -153 0 obj<>endobj -154 0 obj<>endobj -155 0 obj<>endobj -156 0 obj<>endobj -157 0 obj<>endobj -158 0 obj<>endobj -159 0 obj<>endobj -160 0 obj<>endobj -161 0 obj<>endobj -162 0 obj<>endobj -163 0 obj<>endobj -164 0 obj<>endobj -165 0 obj<>endobj -166 0 obj<>endobj -167 0 obj[154 0 R +143 0 R +144 0 R +145 0 R +146 0 R]endobj +148 0 obj<>endobj +149 0 obj<>endobj +150 0 obj<>endobj +151 0 obj<>endobj +152 0 obj<>endobj +153 0 obj<>endobj +154 0 obj<>endobj +155 0 obj<>endobj +156 0 obj<>endobj +157 0 obj<>endobj +158 0 obj<>endobj +159 0 obj<>endobj +160 0 obj<>endobj +161 0 obj<>endobj +162 0 obj<>endobj +163 0 obj<>endobj +164 0 obj<>endobj +165 0 obj<>endobj +166 0 obj<>endobj +167 0 obj<>endobj +168 0 obj<>endobj +169 0 obj<>endobj +170 0 obj<>endobj +171 0 obj<>endobj +172 0 obj<>endobj +173 0 obj<>endobj +174 0 obj<>endobj +175 0 obj<>endobj +176 0 obj<>endobj +177 0 obj<>endobj +178 0 obj<>endobj +179 0 obj<>endobj +180 0 obj<>endobj +181 0 obj<>endobj +182 0 obj<>endobj +183 0 obj<>endobj +184 0 obj<>endobj +185 0 obj<>endobj +186 0 obj<>endobj +187 0 obj<>endobj +188 0 obj<>endobj +189 0 obj<>endobj +190 0 obj<>endobj +191 0 obj<>endobj +192 0 obj[148 0 R +149 0 R +150 0 R +151 0 R +152 0 R +153 0 R +154 0 R +155 0 R 156 0 R +157 0 R 158 0 R +159 0 R 160 0 R +161 0 R 162 0 R +163 0 R 164 0 R +165 0 R 166 0 R -]endobj -168 0 obj<>endobj -169 0 obj<>endobj -170 0 obj<>endobj -171 0 obj<>endobj -172 0 obj<>endobj -173 0 obj<>endobj -174 0 obj<>endobj -175 0 obj<>endobj -176 0 obj[169 0 R +167 0 R +168 0 R +169 0 R +170 0 R 171 0 R +172 0 R 173 0 R +174 0 R 175 0 R -]endobj -177 0 obj<>endobj -178 0 obj<>endobj -179 0 obj<>endobj -180 0 obj<>endobj -181 0 obj<>endobj -182 0 obj<>endobj -183 0 obj<>endobj -184 0 obj<>endobj -185 0 obj<>endobj -186 0 obj<>endobj -187 0 obj<>endobj -188 0 obj<>endobj -189 0 obj<>endobj -190 0 obj<>endobj -191 0 obj<>endobj -192 0 obj<>endobj -193 0 obj<>endobj -194 0 obj<>endobj -195 0 obj<>endobj -196 0 obj<>endobj -197 0 obj<>endobj -198 0 obj<>endobj -199 0 obj<>endobj -200 0 obj<>endobj -201 0 obj<>endobj -202 0 obj<>endobj -203 0 obj<>endobj -204 0 obj<>endobj -205 0 obj<>endobj -206 0 obj<>endobj -207 0 obj<>endobj -208 0 obj<>endobj -209 0 obj<>endobj -210 0 obj<>endobj -211 0 obj<>endobj -212 0 obj<>endobj -213 0 obj<>endobj -214 0 obj<>endobj -215 0 obj<>endobj -216 0 obj<>endobj -217 0 obj<>endobj -218 0 obj<>endobj -219 0 obj<>endobj -220 0 obj<>endobj -221 0 obj[178 0 R +176 0 R +177 0 R +178 0 R +179 0 R 180 0 R +181 0 R 182 0 R +183 0 R 184 0 R +185 0 R 186 0 R +187 0 R 188 0 R +189 0 R 190 0 R -192 0 R +191 0 R]endobj +193 0 obj<>endobj +194 0 obj<>endobj +195 0 obj<>endobj +196 0 obj<>endobj +197 0 obj<>endobj +198 0 obj<>endobj +199 0 obj<>endobj +200 0 obj<>endobj +201 0 obj<>endobj +202 0 obj<>endobj +203 0 obj<>endobj +204 0 obj<>endobj +205 0 obj<>endobj +206 0 obj<>endobj +207 0 obj<>endobj +208 0 obj<>endobj +209 0 obj<>endobj +210 0 obj<>endobj +211 0 obj<>endobj +212 0 obj<>endobj +213 0 obj<>endobj +214 0 obj<>endobj +215 0 obj<>endobj +216 0 obj<>endobj +217 0 obj<>endobj +218 0 obj<>endobj +219 0 obj<>endobj +220 0 obj<>endobj +221 0 obj<>endobj +222 0 obj<>endobj +223 0 obj<>endobj +224 0 obj<>endobj +225 0 obj<>endobj +226 0 obj<>endobj +227 0 obj<>endobj +228 0 obj<>endobj +229 0 obj<>endobj +230 0 obj<>endobj +231 0 obj<>endobj +232 0 obj<>endobj +233 0 obj[193 0 R 194 0 R +195 0 R 196 0 R +197 0 R 198 0 R +199 0 R 200 0 R +201 0 R 202 0 R +203 0 R 204 0 R +205 0 R 206 0 R +207 0 R 208 0 R +209 0 R 210 0 R +211 0 R 212 0 R +213 0 R 214 0 R +215 0 R 216 0 R +217 0 R 218 0 R +219 0 R 220 0 R -]endobj -222 0 obj<>endobj -223 0 obj<>endobj -224 0 obj<>endobj -225 0 obj<>endobj -226 0 obj<>endobj -227 0 obj<>endobj -228 0 obj[223 0 R +221 0 R +222 0 R +223 0 R +224 0 R 225 0 R +226 0 R 227 0 R -]endobj -229 0 obj<>endobj -230 0 obj<>endobj -231 0 obj<>endobj -232 0 obj<>endobj -233 0 obj[230 0 R -232 0 R -]endobj -234 0 obj<>endobj -235 0 obj<>endobj -236 0 obj[235 0 R -]endobj -237 0 obj<>endobj -238 0 obj<>endobj -239 0 obj<>endobj -240 0 obj<>endobj -241 0 obj<>endobj -242 0 obj<>endobj -243 0 obj<>endobj -244 0 obj<>endobj -245 0 obj[238 0 R +228 0 R +229 0 R +230 0 R +231 0 R +232 0 R]endobj +234 0 obj<>endobj +235 0 obj<>endobj +236 0 obj<>endobj +237 0 obj<>endobj +238 0 obj<>endobj +239 0 obj<>endobj +240 0 obj<>endobj +241 0 obj<>endobj +242 0 obj<>endobj +243 0 obj<>endobj +244 0 obj<>endobj +245 0 obj<>endobj +246 0 obj<>endobj +247 0 obj<>endobj +248 0 obj<>endobj +249 0 obj<>endobj +250 0 obj<>endobj +251 0 obj<>endobj +252 0 obj<>endobj +253 0 obj<>endobj +254 0 obj<>endobj +255 0 obj<>endobj +256 0 obj<>endobj +257 0 obj<>endobj +258 0 obj<>endobj +259 0 obj<>endobj +260 0 obj<>endobj +261 0 obj<>endobj +262 0 obj<>endobj +263 0 obj<>endobj +264 0 obj<>endobj +265 0 obj<>endobj +266 0 obj<>endobj +267 0 obj<>endobj +268 0 obj<>endobj +269 0 obj<>endobj +270 0 obj<>endobj +271 0 obj<>endobj +272 0 obj<>endobj +273 0 obj<>endobj +274 0 obj[235 0 R +237 0 R +239 0 R 240 0 R +241 0 R 242 0 R +243 0 R 244 0 R -]endobj -246 0 obj<>endobj -247 0 obj<>endobj -248 0 obj<>endobj -249 0 obj<>endobj -250 0 obj<>endobj -251 0 obj<>endobj -252 0 obj<>endobj -253 0 obj<>endobj -254 0 obj<>endobj -255 0 obj<>endobj -256 0 obj<>endobj -257 0 obj<>endobj -258 0 obj<>endobj -259 0 obj<>endobj -260 0 obj<>endobj -261 0 obj<>endobj -262 0 obj[247 0 R +245 0 R +246 0 R +247 0 R +248 0 R 249 0 R +250 0 R 251 0 R +252 0 R 253 0 R +254 0 R 255 0 R +256 0 R 257 0 R +258 0 R 259 0 R +260 0 R 261 0 R -]endobj -263 0 obj<>endobj -264 0 obj<>endobj -265 0 obj<>endobj -266 0 obj<>endobj -267 0 obj[264 0 R +262 0 R +263 0 R +264 0 R +265 0 R 266 0 R -]endobj -268 0 obj<>endobj -269 0 obj<>endobj -270 0 obj[269 0 R -]endobj -271 0 obj<>endobj -272 0 obj<>endobj -273 0 obj<>endobj -274 0 obj<>endobj -275 0 obj<>endobj -276 0 obj<>endobj -277 0 obj<>endobj -278 0 obj<>endobj -279 0 obj<>endobj -280 0 obj<>endobj -281 0 obj<>endobj -282 0 obj<>endobj -283 0 obj[272 0 R -274 0 R +267 0 R +268 0 R +269 0 R +270 0 R +271 0 R +272 0 R +273 0 R]endobj +275 0 obj<>endobj +276 0 obj<>endobj +277 0 obj<>endobj +278 0 obj<>endobj +279 0 obj<>endobj +280 0 obj<>endobj +281 0 obj<>endobj +282 0 obj<>endobj +283 0 obj<>endobj +284 0 obj<>endobj +285 0 obj<>endobj +286 0 obj<>endobj +287 0 obj<>endobj +288 0 obj<>endobj +289 0 obj<>endobj +290 0 obj<>endobj +291 0 obj<>endobj +292 0 obj<>endobj +293 0 obj<>endobj +294 0 obj<>endobj +295 0 obj<>endobj +296 0 obj<>endobj +297 0 obj<>endobj +298 0 obj<>endobj +299 0 obj<>endobj +300 0 obj<>endobj +301 0 obj<>endobj +302 0 obj<>endobj +303 0 obj<>endobj +304 0 obj<>endobj +305 0 obj<>endobj +306 0 obj<>endobj +307 0 obj<>endobj +308 0 obj<>endobj +309 0 obj<>endobj +310 0 obj<>endobj +311 0 obj<>endobj +312 0 obj<>endobj +313 0 obj<>endobj +314 0 obj<>endobj +315 0 obj<>endobj +316 0 obj<>endobj +317 0 obj<>endobj +318 0 obj<>endobj +319 0 obj<>endobj +320 0 obj<>endobj +321 0 obj<>endobj +322 0 obj<>endobj +323 0 obj<>endobj +324 0 obj<>endobj +325 0 obj<>endobj +326 0 obj[275 0 R 276 0 R +277 0 R 278 0 R +279 0 R 280 0 R +281 0 R 282 0 R -]endobj -284 0 obj<>endobj -285 0 obj<>endobj -286 0 obj<>endobj -287 0 obj<>endobj -288 0 obj<>endobj -289 0 obj<>endobj -290 0 obj<>endobj -291 0 obj<>endobj -292 0 obj[285 0 R +283 0 R +284 0 R +285 0 R +286 0 R 287 0 R +288 0 R 289 0 R +290 0 R 291 0 R -]endobj -293 0 obj<>endobj -294 0 obj<>endobj -295 0 obj<>endobj -296 0 obj<>endobj -297 0 obj<>endobj -298 0 obj<>endobj -299 0 obj<>endobj -300 0 obj<>endobj -301 0 obj<>endobj -302 0 obj<>endobj -303 0 obj<>endobj -304 0 obj<>endobj -305 0 obj<>endobj -306 0 obj<>endobj -307 0 obj[294 0 R +292 0 R +293 0 R +294 0 R +295 0 R 296 0 R +297 0 R 298 0 R +299 0 R 300 0 R +301 0 R 302 0 R +303 0 R 304 0 R +305 0 R 306 0 R -]endobj -308 0 obj<>endobj -309 0 obj<>endobj -310 0 obj[309 0 R -]endobj -311 0 obj<>endobj -312 0 obj<>endobj -313 0 obj[312 0 R -]endobj -314 0 obj<>endobj -315 0 obj<>endobj -316 0 obj[315 0 R -]endobj -317 0 obj<>endobj -318 0 obj<>endobj -319 0 obj<>endobj -320 0 obj<>endobj -321 0 obj<>endobj -322 0 obj<>endobj -323 0 obj<>endobj -324 0 obj<>endobj -325 0 obj[318 0 R +307 0 R +308 0 R +309 0 R +310 0 R +311 0 R +312 0 R +313 0 R +314 0 R +315 0 R +316 0 R +317 0 R +318 0 R +319 0 R 320 0 R +321 0 R 322 0 R +323 0 R 324 0 R -]endobj -326 0 obj<>endobj -327 0 obj<>endobj -328 0 obj[327 0 R -]endobj -329 0 obj<>endobj -330 0 obj<>endobj -331 0 obj<>endobj -332 0 obj<>endobj -333 0 obj<>endobj -334 0 obj<>endobj -335 0 obj[330 0 R +325 0 R]endobj +327 0 obj<>endobj +328 0 obj<>endobj +329 0 obj<>endobj +330 0 obj<>endobj +331 0 obj<>endobj +332 0 obj<>endobj +333 0 obj<>endobj +334 0 obj<>endobj +335 0 obj<>endobj +336 0 obj<>endobj +337 0 obj<>endobj +338 0 obj<>endobj +339 0 obj<>endobj +340 0 obj<>endobj +341 0 obj<>endobj +342 0 obj<>endobj +343 0 obj<>endobj +344 0 obj<>endobj +345 0 obj<>endobj +346 0 obj<>endobj +347 0 obj<>endobj +348 0 obj<>endobj +349 0 obj<>endobj +350 0 obj<>endobj +351 0 obj<>endobj +352 0 obj<>endobj +353 0 obj<>endobj +354 0 obj<>endobj +355 0 obj<>endobj +356 0 obj<>endobj +357 0 obj<>endobj +358 0 obj<>endobj +359 0 obj<>endobj +360 0 obj<>endobj +361 0 obj<>endobj +362 0 obj<>endobj +363 0 obj<>endobj +364 0 obj<>endobj +365 0 obj<>endobj +366 0 obj<>endobj +367 0 obj<>endobj +368 0 obj<>endobj +369 0 obj<>endobj +370 0 obj<>endobj +371 0 obj<>endobj +372 0 obj<>endobj +373 0 obj<>endobj +374 0 obj<>endobj +375 0 obj<>endobj +376 0 obj<>endobj +377 0 obj<>endobj +378 0 obj[327 0 R +328 0 R +329 0 R +330 0 R +331 0 R 332 0 R +333 0 R 334 0 R -]endobj -336 0 obj<>endobj -337 0 obj<>endobj -338 0 obj[337 0 R -]endobj -339 0 obj<>endobj -340 0 obj<>endobj -341 0 obj[340 0 R -]endobj -342 0 obj<>endobj -343 0 obj<>endobj -344 0 obj<>endobj -345 0 obj<>endobj -346 0 obj<>endobj -347 0 obj<>endobj -348 0 obj<>endobj -349 0 obj<>endobj -350 0 obj<>endobj -351 0 obj<>endobj -352 0 obj<>endobj -353 0 obj<>endobj -354 0 obj<>endobj -355 0 obj<>endobj -356 0 obj<>endobj -357 0 obj<>endobj -358 0 obj<>endobj -359 0 obj<>endobj -360 0 obj<>endobj -361 0 obj<>endobj -362 0 obj<>endobj -363 0 obj<>endobj -364 0 obj<>endobj -365 0 obj<>endobj -366 0 obj<>endobj -367 0 obj<>endobj -368 0 obj<>endobj -369 0 obj<>endobj -370 0 obj<>endobj -371 0 obj<>endobj -372 0 obj<>endobj -373 0 obj<>endobj -374 0 obj<>endobj -375 0 obj<>endobj -376 0 obj<>endobj -377 0 obj<>endobj -378 0 obj<>endobj -379 0 obj<>endobj -380 0 obj<>endobj -381 0 obj<>endobj -382 0 obj<>endobj -383 0 obj<>endobj -384 0 obj<>endobj -385 0 obj<>endobj -386 0 obj<>endobj -387 0 obj<>endobj -388 0 obj[342 0 R +335 0 R +336 0 R +337 0 R +338 0 R +339 0 R +340 0 R +341 0 R +342 0 R 343 0 R 344 0 R 345 0 R @@ -565,9 +723,59 @@ 374 0 R 375 0 R 376 0 R -377 0 R -378 0 R -379 0 R +377 0 R]endobj +379 0 obj<>endobj +380 0 obj<>endobj +381 0 obj<>endobj +382 0 obj<>endobj +383 0 obj<>endobj +384 0 obj<>endobj +385 0 obj<>endobj +386 0 obj<>endobj +387 0 obj<>endobj +388 0 obj<>endobj +389 0 obj<>endobj +390 0 obj<>endobj +391 0 obj<>endobj +392 0 obj<>endobj +393 0 obj<>endobj +394 0 obj<>endobj +395 0 obj<>endobj +396 0 obj<>endobj +397 0 obj<>endobj +398 0 obj<>endobj +399 0 obj<>endobj +400 0 obj<>endobj +401 0 obj<>endobj +402 0 obj<>endobj +403 0 obj<>endobj +404 0 obj<>endobj +405 0 obj<>endobj +406 0 obj<>endobj +407 0 obj<>endobj +408 0 obj<>endobj +409 0 obj<>endobj +410 0 obj<>endobj +411 0 obj<>endobj +412 0 obj<>endobj +413 0 obj<>endobj +414 0 obj<>endobj +415 0 obj<>endobj +416 0 obj<>endobj +417 0 obj<>endobj +418 0 obj<>endobj +419 0 obj<>endobj +420 0 obj<>endobj +421 0 obj<>endobj +422 0 obj<>endobj +423 0 obj<>endobj +424 0 obj<>endobj +425 0 obj<>endobj +426 0 obj<>endobj +427 0 obj<>endobj +428 0 obj<>endobj +429 0 obj<>endobj +430 0 obj[379 0 R 380 0 R 381 0 R 382 0 R @@ -576,51 +784,8 @@ 385 0 R 386 0 R 387 0 R -]endobj -389 0 obj<>endobj -390 0 obj<>endobj -391 0 obj<>endobj -392 0 obj<>endobj -393 0 obj<>endobj -394 0 obj<>endobj -395 0 obj<>endobj -396 0 obj<>endobj -397 0 obj<>endobj -398 0 obj<>endobj -399 0 obj<>endobj -400 0 obj<>endobj -401 0 obj<>endobj -402 0 obj<>endobj -403 0 obj<>endobj -404 0 obj<>endobj -405 0 obj<>endobj -406 0 obj<>endobj -407 0 obj<>endobj -408 0 obj<>endobj -409 0 obj<>endobj -410 0 obj<>endobj -411 0 obj<>endobj -412 0 obj<>endobj -413 0 obj<>endobj -414 0 obj<>endobj -415 0 obj<>endobj -416 0 obj<>endobj -417 0 obj<>endobj -418 0 obj<>endobj -419 0 obj<>endobj -420 0 obj<>endobj -421 0 obj<>endobj -422 0 obj<>endobj -423 0 obj<>endobj -424 0 obj<>endobj -425 0 obj<>endobj -426 0 obj<>endobj -427 0 obj<>endobj -428 0 obj<>endobj -429 0 obj<>endobj -430 0 obj<>endobj -431 0 obj<>endobj -432 0 obj[389 0 R +388 0 R +389 0 R 390 0 R 391 0 R 392 0 R @@ -660,55 +825,31 @@ 426 0 R 427 0 R 428 0 R -429 0 R -430 0 R -431 0 R -]endobj -433 0 obj<>endobj -434 0 obj<>endobj -435 0 obj<>endobj -436 0 obj<>endobj -437 0 obj<>endobj -438 0 obj<>endobj -439 0 obj<>endobj -440 0 obj<>endobj -441 0 obj<>endobj -442 0 obj<>endobj -443 0 obj<>endobj -444 0 obj<>endobj -445 0 obj<>endobj -446 0 obj<>endobj -447 0 obj<>endobj -448 0 obj<>endobj -449 0 obj<>endobj -450 0 obj<>endobj -451 0 obj<>endobj -452 0 obj<>endobj -453 0 obj<>endobj -454 0 obj<>endobj -455 0 obj<>endobj -456 0 obj<>endobj -457 0 obj<>endobj -458 0 obj<>endobj -459 0 obj<>endobj -460 0 obj<>endobj -461 0 obj<>endobj -462 0 obj<>endobj -463 0 obj<>endobj -464 0 obj<>endobj -465 0 obj<>endobj -466 0 obj<>endobj -467 0 obj<>endobj -468 0 obj<>endobj -469 0 obj<>endobj -470 0 obj<>endobj -471 0 obj<>endobj -472 0 obj<>endobj -473 0 obj<>endobj -474 0 obj<>endobj -475 0 obj<>endobj -476 0 obj<>endobj -477 0 obj[433 0 R +429 0 R]endobj +431 0 obj<>endobj +432 0 obj<>endobj +433 0 obj<>endobj +434 0 obj<>endobj +435 0 obj<>endobj +436 0 obj<>endobj +437 0 obj<>endobj +438 0 obj<>endobj +439 0 obj<>endobj +440 0 obj<>endobj +441 0 obj<>endobj +442 0 obj<>endobj +443 0 obj<>endobj +444 0 obj<>endobj +445 0 obj<>endobj +446 0 obj<>endobj +447 0 obj<>endobj +448 0 obj<>endobj +449 0 obj<>endobj +450 0 obj<>endobj +451 0 obj<>endobj +452 0 obj[431 0 R +432 0 R +433 0 R 434 0 R 435 0 R 436 0 R @@ -726,3678 +867,3764 @@ 448 0 R 449 0 R 450 0 R -451 0 R -452 0 R -453 0 R -454 0 R -455 0 R -456 0 R -457 0 R -458 0 R -459 0 R -460 0 R -461 0 R -462 0 R -463 0 R +451 0 R]endobj +453 0 obj<>endobj +454 0 obj<>endobj +455 0 obj[454 0 R]endobj +456 0 obj<>endobj +457 0 obj<>endobj +458 0 obj<>endobj +459 0 obj<>endobj +460 0 obj[457 0 R +459 0 R]endobj +461 0 obj<>endobj +462 0 obj<>endobj +463 0 obj<>endobj +464 0 obj<>endobj +465 0 obj<>endobj +466 0 obj<>endobj +467 0 obj[462 0 R 464 0 R -465 0 R -466 0 R -467 0 R -468 0 R -469 0 R -470 0 R -471 0 R -472 0 R -473 0 R -474 0 R -475 0 R -476 0 R -]endobj -478 0 obj<>endobj -479 0 obj<>endobj -480 0 obj<>endobj -481 0 obj<>endobj -482 0 obj<>endobj -483 0 obj<>endobj -484 0 obj<>endobj -485 0 obj<>endobj -486 0 obj<>endobj -487 0 obj<>endobj -488 0 obj<>endobj -489 0 obj<>endobj -490 0 obj<>endobj -491 0 obj<>endobj -492 0 obj<>endobj -493 0 obj<>endobj -494 0 obj<>endobj -495 0 obj<>endobj -496 0 obj<>endobj -497 0 obj<>endobj -498 0 obj<>endobj -499 0 obj<>endobj -500 0 obj<>endobj -501 0 obj<>endobj -502 0 obj<>endobj -503 0 obj<>endobj -504 0 obj<>endobj -505 0 obj<>endobj -506 0 obj<>endobj -507 0 obj<>endobj -508 0 obj<>endobj -509 0 obj<>endobj -510 0 obj<>endobj -511 0 obj<>endobj -512 0 obj<>endobj -513 0 obj<>endobj -514 0 obj<>endobj -515 0 obj<>endobj -516 0 obj<>endobj -517 0 obj<>endobj -518 0 obj<>endobj -519 0 obj<>endobj -520 0 obj<>endobj -521 0 obj<>endobj -522 0 obj[478 0 R -479 0 R -480 0 R -481 0 R -482 0 R -483 0 R +466 0 R]endobj +468 0 obj<>endobj +469 0 obj<>endobj +470 0 obj<>endobj +471 0 obj<>endobj +472 0 obj[469 0 R +471 0 R]endobj +473 0 obj<>endobj +474 0 obj<>endobj +475 0 obj[474 0 R]endobj +476 0 obj<>endobj +477 0 obj<>endobj +478 0 obj<>endobj +479 0 obj<>endobj +480 0 obj[477 0 R +479 0 R]endobj +481 0 obj<>endobj +482 0 obj<>endobj +483 0 obj<>endobj +484 0 obj<>endobj +485 0 obj<>endobj +486 0 obj<>endobj +487 0 obj[482 0 R 484 0 R -485 0 R -486 0 R -487 0 R -488 0 R -489 0 R -490 0 R -491 0 R -492 0 R -493 0 R +486 0 R]endobj +488 0 obj<>endobj +489 0 obj<>endobj +490 0 obj[489 0 R]endobj +491 0 obj<>endobj +492 0 obj<>endobj +493 0 obj<>endobj +494 0 obj<>endobj +495 0 obj<>endobj +496 0 obj<>endobj +497 0 obj<>endobj +498 0 obj<>endobj +499 0 obj<>endobj +500 0 obj<>endobj +501 0 obj<>endobj +502 0 obj<>endobj +503 0 obj[492 0 R 494 0 R -495 0 R 496 0 R -497 0 R 498 0 R -499 0 R 500 0 R -501 0 R -502 0 R -503 0 R -504 0 R -505 0 R -506 0 R +502 0 R]endobj +504 0 obj<>endobj +505 0 obj<>endobj +506 0 obj<>endobj +507 0 obj<>endobj +508 0 obj<>endobj +509 0 obj<>endobj +510 0 obj<>endobj +511 0 obj[505 0 R 507 0 R -508 0 R 509 0 R -510 0 R -511 0 R -512 0 R -513 0 R +510 0 R]endobj +512 0 obj<>endobj +513 0 obj<>endobj +514 0 obj<>endobj +515 0 obj<>endobj +516 0 obj<>endobj +517 0 obj<>endobj +518 0 obj<>endobj +519 0 obj<>endobj +520 0 obj<>endobj +521 0 obj<>endobj +522 0 obj<>endobj +523 0 obj[512 0 R 514 0 R -515 0 R 516 0 R -517 0 R 518 0 R -519 0 R 520 0 R -521 0 R -]endobj -523 0 obj<>endobj -524 0 obj<>endobj -525 0 obj<>endobj -526 0 obj<>endobj -527 0 obj<>endobj -528 0 obj<>endobj -529 0 obj<>endobj -530 0 obj<>endobj -531 0 obj<>endobj -532 0 obj<>endobj -533 0 obj<>endobj -534 0 obj<>endobj -535 0 obj<>endobj -536 0 obj<>endobj -537 0 obj<>endobj -538 0 obj<>endobj -539 0 obj<>endobj -540 0 obj<>endobj -541 0 obj<>endobj -542 0 obj<>endobj -543 0 obj<>endobj -544 0 obj<>endobj -545 0 obj<>endobj -546 0 obj<>endobj -547 0 obj<>endobj -548 0 obj<>endobj -549 0 obj<>endobj -550 0 obj<>endobj -551 0 obj<>endobj -552 0 obj<>endobj -553 0 obj<>endobj -554 0 obj<>endobj -555 0 obj[523 0 R -524 0 R -525 0 R -526 0 R -527 0 R -528 0 R -529 0 R +522 0 R]endobj +524 0 obj<>endobj +525 0 obj<>endobj +526 0 obj[525 0 R]endobj +527 0 obj<>endobj +528 0 obj<>endobj +529 0 obj<>endobj +530 0 obj<>endobj +531 0 obj<>endobj +532 0 obj<>endobj +533 0 obj<>endobj +534 0 obj<>endobj +535 0 obj<>endobj +536 0 obj<>endobj +537 0 obj[528 0 R 530 0 R -531 0 R 532 0 R -533 0 R 534 0 R -535 0 R -536 0 R -537 0 R -538 0 R -539 0 R -540 0 R +536 0 R]endobj +538 0 obj<>endobj +539 0 obj<>endobj +540 0 obj<>endobj +541 0 obj<>endobj +542 0 obj<>endobj +543 0 obj<>endobj +544 0 obj[539 0 R 541 0 R -542 0 R -543 0 R -544 0 R -545 0 R -546 0 R -547 0 R -548 0 R -549 0 R -550 0 R +543 0 R]endobj +545 0 obj<>endobj +546 0 obj<>endobj +547 0 obj[546 0 R]endobj +548 0 obj<>endobj +549 0 obj<>endobj +550 0 obj<>endobj +551 0 obj<>endobj +552 0 obj<>endobj +553 0 obj<>endobj +554 0 obj[549 0 R 551 0 R -552 0 R -553 0 R -554 0 R -]endobj -556 0 obj<>endobj -557 0 obj<>endobj -558 0 obj<>endobj -559 0 obj<>endobj -560 0 obj<>endobj -561 0 obj<>endobj -562 0 obj<>endobj -563 0 obj<>endobj -564 0 obj<>endobj -565 0 obj<>endobj -566 0 obj<>endobj -567 0 obj<>endobj -568 0 obj<>endobj -569 0 obj<>endobj -570 0 obj<>endobj -571 0 obj<>endobj -572 0 obj<>endobj -573 0 obj<>endobj -574 0 obj<>endobj -575 0 obj<>endobj -576 0 obj<>endobj -577 0 obj<>endobj -578 0 obj<>endobj -579 0 obj<>endobj -580 0 obj<>endobj -581 0 obj<>endobj -582 0 obj<>endobj -583 0 obj<>endobj -584 0 obj<>endobj -585 0 obj<>endobj -586 0 obj<>endobj -587 0 obj<>endobj -588 0 obj<>endobj -589 0 obj<>endobj -590 0 obj<>endobj -591 0 obj<>endobj -592 0 obj<>endobj -593 0 obj<>endobj -594 0 obj<>endobj -595 0 obj<>endobj -596 0 obj<>endobj -597 0 obj<>endobj -598 0 obj<>endobj -599 0 obj<>endobj -600 0 obj<>endobj -601 0 obj<>endobj -602 0 obj<>endobj -603 0 obj<>endobj -604 0 obj<>endobj -605 0 obj<>endobj -606 0 obj<>endobj -607 0 obj<>endobj -608 0 obj<>endobj -609 0 obj<>endobj -610 0 obj<>endobj -611 0 obj<>endobj -612 0 obj<>endobj -613 0 obj<>endobj -614 0 obj<>endobj -615 0 obj<>endobj -616 0 obj<>endobj -617 0 obj<>endobj -618 0 obj<>endobj -619 0 obj<>endobj -620 0 obj<>endobj -621 0 obj<>endobj -622 0 obj<>endobj -623 0 obj<>endobj -624 0 obj<>endobj -625 0 obj<>endobj -626 0 obj<>endobj -627 0 obj<>endobj -628 0 obj<>endobj -629 0 obj<>endobj -630 0 obj<>endobj -631 0 obj<>endobj -632 0 obj<>endobj -633 0 obj<>endobj -634 0 obj<>endobj -635 0 obj<>endobj -636 0 obj<>endobj -637 0 obj<>endobj -638 0 obj<>endobj -639 0 obj<>endobj -640 0 obj<>endobj -641 0 obj<>endobj -642 0 obj<>endobj -643 0 obj<>endobj -644 0 obj<>endobj -645 0 obj<>endobj -646 0 obj<>endobj -647 0 obj<>endobj -648 0 obj<>endobj -649 0 obj<>endobj -650 0 obj<>endobj -651 0 obj<>endobj -652 0 obj<>endobj -653 0 obj<>endobj -654 0 obj<>endobj -655 0 obj<>endobj -656 0 obj<>endobj -657 0 obj<>endobj -658 0 obj<>endobj -659 0 obj<>endobj -660 0 obj<>endobj -661 0 obj<>endobj -662 0 obj<>endobj -663 0 obj<>endobj -664 0 obj<>endobj -665 0 obj<>endobj -666 0 obj<>endobj -667 0 obj<>endobj -668 0 obj<>endobj -669 0 obj<>endobj -670 0 obj<>endobj -671 0 obj<>endobj -672 0 obj<>endobj -673 0 obj<>endobj -674 0 obj<>endobj -675 0 obj<>endobj -676 0 obj<>endobj -677 0 obj<>endobj -678 0 obj<>endobj -679 0 obj<>endobj -680 0 obj<>endobj -681 0 obj<>endobj -682 0 obj<>endobj -683 0 obj<>endobj -684 0 obj<>endobj -685 0 obj<>endobj -686 0 obj<>endobj -687 0 obj<>endobj -688 0 obj<>endobj -689 0 obj<>endobj -690 0 obj<>endobj -691 0 obj<>endobj -692 0 obj<>endobj -693 0 obj<>endobj -694 0 obj<>endobj -695 0 obj<>endobj -696 0 obj<>endobj -697 0 obj<>endobj -698 0 obj<>endobj -699 0 obj<>endobj -700 0 obj<>endobj -701 0 obj<>endobj -702 0 obj<>endobj -703 0 obj<>endobj -704 0 obj<>endobj -705 0 obj<>endobj -706 0 obj<>endobj -707 0 obj<>endobj -708 0 obj<>endobj -709 0 obj<>endobj -710 0 obj<>endobj -711 0 obj<>endobj -712 0 obj<>endobj -713 0 obj<>endobj -714 0 obj<>endobj -715 0 obj<>endobj -716 0 obj<>endobj -717 0 obj<>endobj -718 0 obj<>endobj -719 0 obj<>endobj -720 0 obj<>endobj -721 0 obj<>endobj -722 0 obj<>endobj -723 0 obj<>endobj -724 0 obj<>endobj -725 0 obj<>endobj -726 0 obj<>endobj -727 0 obj<>endobj -728 0 obj<>endobj -729 0 obj<>endobj -730 0 obj<>endobj -731 0 obj<>endobj -732 0 obj<>endobj -733 0 obj<>endobj -734 0 obj<>endobj -735 0 obj<>endobj -736 0 obj<>endobj -737 0 obj<>endobj -738 0 obj<>endobj -739 0 obj<>endobj -740 0 obj<>endobj -741 0 obj<>endobj -742 0 obj<>endobj -743 0 obj<>endobj -744 0 obj<>endobj -745 0 obj<>endobj -746 0 obj<>endobj -747 0 obj<>endobj -748 0 obj<>endobj -749 0 obj<>endobj -750 0 obj<>endobj -751 0 obj<>endobj -752 0 obj<>endobj -753 0 obj<>endobj -754 0 obj<>endobj -755 0 obj<>endobj -756 0 obj<>endobj -757 0 obj<>endobj -758 0 obj<>endobj -759 0 obj<>endobj -760 0 obj<>endobj -761 0 obj<>endobj -762 0 obj<>endobj -763 0 obj<>endobj -764 0 obj<>endobj -765 0 obj<>endobj -766 0 obj<>endobj -767 0 obj<>endobj -768 0 obj<>endobj -769 0 obj<>endobj -770 0 obj<>endobj -771 0 obj<>endobj -772 0 obj<>endobj -773 0 obj<>endobj -774 0 obj<>endobj -775 0 obj<>endobj -776 0 obj<>endobj -777 0 obj<>endobj -778 0 obj<>endobj -779 0 obj<>endobj -780 0 obj<>endobj -781 0 obj<>endobj -782 0 obj<>endobj -783 0 obj<>endobj -784 0 obj<>endobj -785 0 obj<>endobj -786 0 obj<>endobj -787 0 obj<>endobj -788 0 obj<>endobj -789 0 obj<>endobj -790 0 obj<>endobj -791 0 obj<>endobj -792 0 obj<>endobj -793 0 obj<>endobj -794 0 obj<>endobj +556 0 obj<>endobj +557 0 obj<>endobj +558 0 obj<>endobj +559 0 obj<>endobj +560 0 obj<>endobj +561 0 obj[556 0 R +558 0 R +560 0 R]endobj +562 0 obj<>endobj +563 0 obj<>endobj +564 0 obj<>endobj +565 0 obj<>endobj +566 0 obj<>endobj +567 0 obj<>endobj +568 0 obj<>endobj +569 0 obj<>endobj +570 0 obj[563 0 R +565 0 R +567 0 R +569 0 R]endobj +571 0 obj<>endobj +572 0 obj<>endobj +573 0 obj<>endobj +574 0 obj<>endobj +575 0 obj<>endobj +576 0 obj<>endobj +577 0 obj[572 0 R +574 0 R +576 0 R]endobj +578 0 obj<>endobj +579 0 obj<>endobj +580 0 obj[579 0 R]endobj +581 0 obj<>endobj +582 0 obj<>endobj +583 0 obj[582 0 R]endobj +584 0 obj<>endobj +585 0 obj<>endobj +586 0 obj<>endobj +587 0 obj<>endobj +588 0 obj<>endobj +589 0 obj<>endobj +590 0 obj<>endobj +591 0 obj<>endobj +592 0 obj<>endobj +593 0 obj<>endobj +594 0 obj<>endobj +595 0 obj<>endobj +596 0 obj<>endobj +597 0 obj<>endobj +598 0 obj<>endobj +599 0 obj<>endobj +600 0 obj[585 0 R +587 0 R +589 0 R +591 0 R +593 0 R +595 0 R +597 0 R +599 0 R]endobj +601 0 obj<>endobj +602 0 obj<>endobj +603 0 obj<>endobj +604 0 obj<>endobj +605 0 obj<>endobj +606 0 obj<>endobj +607 0 obj<>endobj +608 0 obj<>endobj +609 0 obj[602 0 R +604 0 R +606 0 R +608 0 R]endobj +610 0 obj<>endobj +611 0 obj<>endobj +612 0 obj<>endobj +613 0 obj<>endobj +614 0 obj<>endobj +615 0 obj<>endobj +616 0 obj<>endobj +617 0 obj<>endobj +618 0 obj<>endobj +619 0 obj<>endobj +620 0 obj<>endobj +621 0 obj<>endobj +622 0 obj<>endobj +623 0 obj<>endobj +624 0 obj<>endobj +625 0 obj<>endobj +626 0 obj<>endobj +627 0 obj<>endobj +628 0 obj<>endobj +629 0 obj<>endobj +630 0 obj<>endobj +631 0 obj<>endobj +632 0 obj<>endobj +633 0 obj<>endobj +634 0 obj<>endobj +635 0 obj<>endobj +636 0 obj<>endobj +637 0 obj<>endobj +638 0 obj<>endobj +639 0 obj<>endobj +640 0 obj<>endobj +641 0 obj<>endobj +642 0 obj<>endobj +643 0 obj<>endobj +644 0 obj<>endobj +645 0 obj<>endobj +646 0 obj<>endobj +647 0 obj<>endobj +648 0 obj<>endobj +649 0 obj<>endobj +650 0 obj<>endobj +651 0 obj<>endobj +652 0 obj<>endobj +653 0 obj<>endobj +654 0 obj<>endobj +655 0 obj<>endobj +656 0 obj[611 0 R +613 0 R +615 0 R +617 0 R +619 0 R +621 0 R +623 0 R +625 0 R +627 0 R +629 0 R +631 0 R +633 0 R +635 0 R +637 0 R +639 0 R +641 0 R +643 0 R +645 0 R +647 0 R +649 0 R +651 0 R +653 0 R +655 0 R]endobj +657 0 obj<>endobj +658 0 obj<>endobj +659 0 obj<>endobj +660 0 obj<>endobj +661 0 obj[658 0 R +660 0 R]endobj +662 0 obj<>endobj +663 0 obj<>endobj +664 0 obj<>endobj +665 0 obj<>endobj +666 0 obj[663 0 R +665 0 R]endobj +667 0 obj<>endobj +668 0 obj<>endobj +669 0 obj[668 0 R]endobj +670 0 obj<>endobj +671 0 obj<>endobj +672 0 obj<>endobj +673 0 obj<>endobj +674 0 obj[671 0 R +673 0 R]endobj +675 0 obj<>endobj +676 0 obj<>endobj +677 0 obj<>endobj +678 0 obj<>endobj +679 0 obj[676 0 R +678 0 R]endobj +680 0 obj<>endobj +681 0 obj<>endobj +682 0 obj<>endobj +683 0 obj<>endobj +684 0 obj<>endobj +685 0 obj<>endobj +686 0 obj<>endobj +687 0 obj<>endobj +688 0 obj<>endobj +689 0 obj<>endobj +690 0 obj<>endobj +691 0 obj<>endobj +692 0 obj<>endobj +693 0 obj<>endobj +694 0 obj<>endobj +695 0 obj<>endobj +696 0 obj[681 0 R +683 0 R +685 0 R +687 0 R +689 0 R +691 0 R +693 0 R +695 0 R]endobj +697 0 obj<>endobj +698 0 obj<>endobj +699 0 obj<>endobj +700 0 obj<>endobj +701 0 obj[698 0 R +700 0 R]endobj +702 0 obj<>endobj +703 0 obj<>endobj +704 0 obj[703 0 R]endobj +705 0 obj<>endobj +706 0 obj<>endobj +707 0 obj<>endobj +708 0 obj<>endobj +709 0 obj<>endobj +710 0 obj<>endobj +711 0 obj<>endobj +712 0 obj<>endobj +713 0 obj<>endobj +714 0 obj<>endobj +715 0 obj<>endobj +716 0 obj<>endobj +717 0 obj[706 0 R +708 0 R +710 0 R +712 0 R +714 0 R +716 0 R]endobj +718 0 obj<>endobj +719 0 obj<>endobj +720 0 obj<>endobj +721 0 obj<>endobj +722 0 obj<>endobj +723 0 obj<>endobj +724 0 obj<>endobj +725 0 obj<>endobj +726 0 obj[719 0 R +721 0 R +723 0 R +725 0 R]endobj +727 0 obj<>endobj +728 0 obj<>endobj +729 0 obj[728 0 R]endobj +730 0 obj<>endobj +731 0 obj<>endobj +732 0 obj<>endobj +733 0 obj<>endobj +734 0 obj<>endobj +735 0 obj<>endobj +736 0 obj<>endobj +737 0 obj<>endobj +738 0 obj<>endobj +739 0 obj<>endobj +740 0 obj<>endobj +741 0 obj<>endobj +742 0 obj[731 0 R +733 0 R +735 0 R +737 0 R +739 0 R +741 0 R]endobj +743 0 obj<>endobj +744 0 obj<>endobj +745 0 obj[744 0 R]endobj +746 0 obj<>endobj +747 0 obj<>endobj +748 0 obj[747 0 R]endobj +749 0 obj<>endobj +750 0 obj<>endobj +751 0 obj[750 0 R]endobj +752 0 obj<>endobj +753 0 obj<>endobj +754 0 obj<>endobj +755 0 obj<>endobj +756 0 obj<>endobj +757 0 obj<>endobj +758 0 obj<>endobj +759 0 obj<>endobj +760 0 obj[753 0 R +755 0 R +757 0 R +759 0 R]endobj +761 0 obj<>endobj +762 0 obj<>endobj +763 0 obj[762 0 R]endobj +764 0 obj<>endobj +765 0 obj<>endobj +766 0 obj<>endobj +767 0 obj<>endobj +768 0 obj<>endobj +769 0 obj<>endobj +770 0 obj[765 0 R +767 0 R +769 0 R]endobj +771 0 obj<>endobj +772 0 obj<>endobj +773 0 obj[772 0 R]endobj +774 0 obj<>endobj +775 0 obj<>endobj +776 0 obj<>endobj +777 0 obj<>endobj +778 0 obj<>endobj +779 0 obj<>endobj +780 0 obj<>endobj +781 0 obj<>endobj +782 0 obj<>endobj +783 0 obj<>endobj +784 0 obj<>endobj +785 0 obj<>endobj +786 0 obj<>endobj +787 0 obj<>endobj +788 0 obj<>endobj +789 0 obj<>endobj +790 0 obj<>endobj +791 0 obj<>endobj +792 0 obj<>endobj +793 0 obj<>endobj +794 0 obj<>endobj +795 0 obj<>endobj +796 0 obj<>endobj +797 0 obj<>endobj +798 0 obj<>endobj +799 0 obj<>endobj +800 0 obj<>endobj +801 0 obj<>endobj +802 0 obj<>endobj +803 0 obj<>endobj +804 0 obj<>endobj +805 0 obj<>endobj +806 0 obj<>endobj +807 0 obj<>endobj +808 0 obj<>endobj +809 0 obj<>endobj +810 0 obj<>endobj +811 0 obj<>endobj +812 0 obj<>endobj +813 0 obj<>endobj +814 0 obj<>endobj +815 0 obj<>endobj +816 0 obj<>endobj +817 0 obj<>endobj +818 0 obj<>endobj +819 0 obj<>endobj +820 0 obj<>endobj +821 0 obj<>endobj +822 0 obj<>endobj +823 0 obj<>endobj +824 0 obj<>endobj +825 0 obj<>endobj +826 0 obj<>endobj +827 0 obj<>endobj +828 0 obj<>endobj +829 0 obj<>endobj +830 0 obj<>endobj +831 0 obj<>endobj +832 0 obj<>endobj +833 0 obj<>endobj +834 0 obj<>endobj +835 0 obj<>endobj +836 0 obj<>endobj +837 0 obj<>endobj +838 0 obj<>endobj +839 0 obj<>endobj +840 0 obj<>endobj +841 0 obj<>endobj +842 0 obj<>endobj +843 0 obj<>endobj +844 0 obj<>endobj +845 0 obj<>endobj +846 0 obj<>endobj +847 0 obj<>endobj +848 0 obj<>endobj +849 0 obj<>endobj +850 0 obj<>endobj +851 0 obj<>endobj +852 0 obj<>endobj +853 0 obj<>endobj +854 0 obj<>endobj +855 0 obj<>endobj +856 0 obj<>endobj +857 0 obj<>endobj +858 0 obj<>endobj +859 0 obj<>endobj +860 0 obj<>endobj +861 0 obj<>endobj +862 0 obj<>endobj +863 0 obj<>endobj +864 0 obj<>endobj +865 0 obj<>endobj +866 0 obj<>endobj +867 0 obj<>endobj +868 0 obj<>endobj +869 0 obj<>endobj +870 0 obj<>endobj +871 0 obj<>endobj +872 0 obj<>endobj +873 0 obj<>endobj +874 0 obj<>endobj +875 0 obj<>endobj +876 0 obj<>endobj +877 0 obj<>endobj +878 0 obj<>endobj +879 0 obj<>endobj +880 0 obj<>endobj +881 0 obj<>endobj +882 0 obj<>endobj +883 0 obj<>endobj +884 0 obj<>endobj +885 0 obj<>endobj +886 0 obj<>endobj +887 0 obj<>endobj +888 0 obj<>endobj +889 0 obj<>endobj +890 0 obj<>endobj +891 0 obj<>endobj +892 0 obj<>endobj +893 0 obj<>endobj +894 0 obj<>endobj +895 0 obj<>endobj +896 0 obj<>endobj +897 0 obj<>endobj +898 0 obj<>endobj +899 0 obj<>endobj +900 0 obj<>endobj +901 0 obj<>endobj +902 0 obj<>endobj +903 0 obj<>endobj +904 0 obj<>endobj +905 0 obj<>endobj +906 0 obj<>endobj +907 0 obj<>endobj +908 0 obj<>endobj +909 0 obj<>endobj +910 0 obj<>endobj +911 0 obj<>endobj +912 0 obj<>endobj +913 0 obj<>endobj +914 0 obj<>endobj +915 0 obj<>endobj +916 0 obj<>endobj +917 0 obj<>endobj +918 0 obj<>endobj +919 0 obj<>endobj +920 0 obj<>endobj +921 0 obj<>endobj +922 0 obj<>endobj +923 0 obj<>endobj +924 0 obj<>endobj +925 0 obj<>endobj +926 0 obj<>endobj +927 0 obj<>endobj +928 0 obj<>endobj +929 0 obj<>endobj +930 0 obj<>endobj +931 0 obj<>endobj +932 0 obj<>endobj +933 0 obj<>endobj +934 0 obj<>endobj +935 0 obj<>endobj +936 0 obj<>endobj +937 0 obj<>endobj +938 0 obj<>endobj +939 0 obj<>endobj +940 0 obj<>endobj +941 0 obj<>endobj +942 0 obj<>endobj +943 0 obj<>endobj +944 0 obj<>endobj +945 0 obj<>endobj +946 0 obj<>endobj +947 0 obj<>endobj +948 0 obj<>endobj +949 0 obj<>endobj +950 0 obj<>endobj +951 0 obj<>endobj +952 0 obj<>endobj +953 0 obj<>endobj +954 0 obj<>endobj +955 0 obj<>endobj +956 0 obj<>endobj +957 0 obj<>endobj +958 0 obj<>endobj +959 0 obj<>endobj +960 0 obj<>endobj +961 0 obj<>endobj +962 0 obj<>endobj +963 0 obj<>endobj +964 0 obj<>endobj +965 0 obj<>endobj +966 0 obj<>endobj +967 0 obj<>endobj +968 0 obj<>endobj +969 0 obj<>endobj +970 0 obj<>endobj +971 0 obj<>endobj +972 0 obj<>endobj +973 0 obj<>endobj +974 0 obj<>endobj +975 0 obj<>endobj +976 0 obj<>endobj +977 0 obj<>endobj +978 0 obj<>endobj +979 0 obj<>endobj +980 0 obj<>endobj +981 0 obj<>endobj +982 0 obj<>endobj +983 0 obj<>endobj +984 0 obj<>endobj +985 0 obj<>endobj +986 0 obj<>endobj +987 0 obj<>endobj +988 0 obj<>endobj +989 0 obj<>endobj +990 0 obj<>endobj +991 0 obj<>endobj +992 0 obj<>endobj +993 0 obj<>endobj +994 0 obj<>endobj +995 0 obj<>endobj +996 0 obj<>endobj +997 0 obj<>endobj +998 0 obj<>endobj +999 0 obj<>endobj +1000 0 obj<>endobj +1001 0 obj<>endobj +1002 0 obj<>endobj +1003 0 obj<>endobj +1004 0 obj<>endobj +1005 0 obj<>endobj +1006 0 obj<>endobj +1007 0 obj<>endobj +1008 0 obj<>endobj +1009 0 obj<>endobj +1010 0 obj<>endobj +1011 0 obj<>endobj -795 0 obj<>>>/Annots 19 0 R>>endobj -796 0 obj<>stream -x}SMsÚ0½ó+vr"3‰±lc§’¤¥IÚ8ÓK.²-°©mQI.åß÷I6Ði‡Á kwõ¾ôsÀÈLJÑ$ 0¦¬Ü&ƒÑ‡ -|JV؉È’œ|Ï÷ñ&>Í?ßÎi©äFd†îeÖÖ¢1Ü”²¹L6®•¡Ã¶^O|oŠæ¾'¼¶%ÑxÌ°M'øà«­º0öâó3TÑMìFqÍSmÏL"&ÆzÁÔ ,ˆ® =osnDWõ5CšQR´4o×ÄÆÄ‚Y4Ecº»O ‚Øj bÏ*1LŠRS*åÂ/§LV”}’+úøø=yÄë<9IO¼N9å§*‘ü%™BÐ^p¥=úDFím±ht LÁ ñªêÏea‡Ÿc+k•‚ÚW”¶†´¬…)k¡Ý0¦âjá™Ú)@ÔÚ -¥.òæ%¬*@XP-¡ˆ&0鞃A{vçÒë‰ÙÇ·Å€1+CÄ"È_SÀ&ÖC·ªèÉfÇÇr|æÍ¿‘ÂgÙ69¥£h'ÏPkÆlg£Ñn·ó´Гj=z[ël-8:þo¢xA[¾๬ׂ´À­3rÉ#=Š|†´Õ4q¼ÜâÀä/`àæ¨>½¡ÔþÝ+Ì ôÜû³dq—Ǧ)/‘áÞ"¼\Ò«}(Ï‘ÉíÞ¦!ëÏ=„Í®‡•MVµ6¦»ÒNÂ.¬Z¶*G,HÅq¨MÑ«²¹®J$Œ»K×_ë0šºh0\ïºÕ £›³°œ˜¿Ò+g}ZÖÛÊ3¿Ýq.Ç¢prGï -<_‘3§7ûëà0c¸endstream -endobj -797 0 obj -652 -endobj -798 0 obj<>>>/Annots 22 0 R>>endobj -799 0 obj<>stream -xV]sÛ6|ׯ¸¦‰:cS¢>,Éov§NóÐfë¥ Š¨H€À(šéïÞ‘´å4êÔeK{»{ þ5JiŠŸ”V3šßPVî·£ÉÆfSÚøæfµ¦mNÓd:Å'Ùø§R5Q{JúÅ):zoCTUEÊæ´Õ!Òãݯ÷w?nÿ”:颫s=O“*Ó[£nhzKµÊ)–šje©Q{º} JÓ~ßlÅ»¶çk(7!z³k£ÎéhbÙI™³QKT¹ÈÔ]´[8œ¢"h©«†ïu¤“k ð=*%Dï þ€!Lé:w€sgßF:Xt[v{Fý„˜ñ[ŠþD\­ciìž*sз]/`÷©—›täã¨û*í¿[®¹f¨wy²¦¿©v^˺Ÿ·#¦_4ïøïã»Ñl³J6´\ඦùf“Lûw=v">“¸\αì\Æí·õ™ª˜#_«hœ%…ƒg,Ó žhwU½StÔ; -&ê+¡é%.¿§1•16·“ÉñxLïHœßóÚmHCXŽ¿´\ÌñºX¯ð:Ã/N/öYN7¢Æ³a§ÞGé-Ý·¦Ê™wöÒ½±Ê›ËVr”³L¸¢ÂxÖ·Ðïö^Õ½8ËAœdcfßözLfÇ°–ì숄/½Î¢ó§„¶¨O¡tm•“j£cj3Œ \òTM|6ZÇ/d`zröØ„¦Â)D]'½=©TŸ4µ¶ ­ªˆ¬Öy`VÌ\«\J}u>ûŠ½sñû/mxÞéõµÌIW`hc1ë=ÜQ‡S‚Ötäá -Î ¹†]NGk«v•Æxm¤þ¬³–Ûz´ZôE,2ÖÆ2j‘c×; ¡6Ódâ[hÑf°z@tÔ©ào‰¨èÙø¿d1"è/áwøé—¼&a‰ig%öú£>á5`^Ú:Gžó§ ßÄæPdõEe„úëu*3Ä‹ÌüæD,øÆHêJê´ P™Ç@a"õ'ãÚ@Ÿ´MœêÝœ°pµÙ—Q²–í.-1ÏÃì0xý.¹TÎ5^ª!þÙi$Uõp§(z“ È86j˧w"‰]öŽv*;ð±]r|“o¥o íj/“ÖSUܵœ`C‡  -w¢BLøïøØ.k)­‘šÿ¬›…ÜIçÁ:ïƒuvË#K|¹›ºq>*‹)ÇÕýoQå’¾‹(ŒÄ^wiÔ"^ ³’ßú «P‘€EÔ€Äìyʽ±Ù …h궒ìK莂L³çÇ ¶Þ0†3M‡Qñb žh¹ŒMë Êâq!;œ®ð¡#‚sÞïM'ÉP¤DÒ×"®{èò¶¯sÈ¥†šp¨¤M—»râÁ4ì,N~°$å&ë³û%×ð«¢ëi²Áƒ?:õÒþ>úµ¶è!endstream -endobj -800 0 obj -1091 -endobj -801 0 obj<>>>>>endobj -802 0 obj<>stream -xV]oÓH}ï¯¸Ë A¢ÎG“4©´ÀªÛ¦ÚEtµÛc{¨=fÆ-ù÷{îŒÝÓò° BZ_ßÏsνߎ¦4Áß)ÎèdIYsôrsôzs4IV+ÚØ?Lh¾^&+š¯Nñý”¿ZIl'ðqÿÑÙ.WëdÞÙÎ`Lá|üfMÓ9m -„].É’6yx{B›l4Mæ ]z¹¥“3ze¥ð’|%É5)eFªl­ðÊh*T-“g›¯p8§é4:<žÂÝhSI„øçD³­å¯:R:x–߃‰#rmš++3o쮚+ç­J[™Ð9lÊR:O;Ó¢"‘³‹†³˜Ðñô$™qô ‹¶®wäL0Ì„&'%Uæ.„4[vç¨4äM)áÂr<ÚZ‘y•ItÖ\vƒ7·¢D—%Qׇ¯‡âv¶DŸcÑä—‹üZÇ)G‹¹uV>”¥Ú”˜£$cûT;T< ¥>!áÂÙ FŒº}0éÂd¢pœôÁð ¡¾ÂãKѤ‚”.,r*"X^^|üëòüÃÛÄ÷ƒÀ \z¡jwý¬E‡™}T~0~³è˜4j¡´óèP|Ô“l„ƈÚøþ9:DÑBˆ8]¦ëðÕ@Zú òh)ACYä¸òÄT±NÖ¨ˆ_;@ö{NƵ 3ÓnÛÆÆô1‚ô|ß%mkÎc·•™*bEºòdÏœÓ0Ïë³/—…hkÔ‰‘ÂtÍM—YOuî-R‡ïãqëì¸6™¨ÇH)ãZ¥ãA”ëgC -¿»Æ N¥á¹‰B'RƒŠÌZ«<4Ez๠œ%u$"W±âÿÂIp¡`XBa¸“µÔCd\}8ÿûßËׯ®.Î7Ÿ9!Ÿ þ:™­ïµþ1ýž­‡ê½èÔ{~F›N'm§BqNUäñ ø ʹç(7[c½ñîyôüZ(èVÔ*çn˜"ÀfØ~Þ°c.7¦ÏÒkJ+š„è¼ØÿÖ¶Ú &þñ' yê5DH©6"Ì:^;,‹‚"K:ËRÝb'i’Öò˜¥sö!öPGO(4ïpŸSî8ÍsF‹K.• `Mr#‘HÝÛ, 2ôã„дብ[Ô/»Ã0ƒŒº+&¡ Ë3o#•µµÝY†0ˆ°ŽVR€9ÊØÃÇI¬¾_¸F¿±y”¬ˆ‘¸é˜‘šï Ý |•s¡‡apa‰ -v°:6hU#à\ä·>¥ !9vå~T ËA£Äf?#~t )¸ 1©Y "œAv_€ƒIÇã]AMVº­Š\­ÊÊ㎠Ëà[«²ü€–·J+¯D8íº£…EàI‡ò½˜?ÂöU·£§ËÓ„Ï~œÝ÷÷å‹÷/_Ð'k¾â ±âÞ‹ˆs=ŽoÇ×þϵ>_M’5N3öuúóè?Ŭendstream -endobj -803 0 obj -1435 -endobj -804 0 obj<>>>>>endobj -805 0 obj<>stream -x•WaOã8ýί¸×ÕÒ´iK[¸O¬v¹Cºe9èiµÒJ'7qZC÷l‡¶ÿþÞØM[²ôX@ -E±Çã÷Þ¼™þ{S¿1zÔRR}˜}šu£ñ˜v3Ã?]÷¢1 Æ#| ¢I–â¿áîM¿ ÄÂKÄß>§suNñ€&ŽŽñ!õï»4IZq4Œâˆî\Й¸Àaœ*g”]*¥K£D—Ù»ÉÃQçj@qâ´{#ÄiÝ|™|ú&sd¥ó\/yçRå9M%¥*ˤ‘¥#•­uE••ts}OÚðŸ÷ä4YgÔ´r2%+Í“J¤¥B,lÄ'v©ÝâÖ8éO­I8Žc(d}6­ŽtI§Þý<ÓVDôuŽ}ÊR*3\(å( mÅýóŽK]gTj7çä÷–‘›Ë’DŠ ”c#r“UÜzœ6Ù‹pb¼‡Í&g 7UÚ¶­-©>íyz{´ªP¹0ùP¬uªtáa³s]å)ÍÅ“$Q5kŸÌë'—¶Žtðܹr$Sõ?Ð’A é ä–ÚcdÉêB(.`¸¨K笜žN©ñ³d!EAàÜ,Ò3Z;êTÖtrˆ¼cE1©*;¶˜B=ü¨éA1=øTXÒ™Ax†ø•à%Çõç¶q‘¾/–¿\‰Ä‘]—N¬Hg/*ô0ŒOÂ(è~*ÝRBsU©VÒFTkB$èSÏ=¯Tå^m’WŒ¨ï¾‘æ¬R©lV×+Šm!‘çtÔÅÒâ𞺠Xÿ,úÞB0›¼/•Æ&ÚÈïï8€ÊÏÖâ7]5ò,* ý©p=–Დ4–“7ƒÃPÃs -á…) ‚³Y®ý2P_J,.×à‹ -뫱kè6‚HlhŒ ¨ÒI“ ¸× é…Sš bMz÷äµv!•­ýúë[®#­m€ÁõÜ aYEÞìv¡#º«jÀÏjóSû³šj‡FiÚP10_öÞT—¿:zD-Ñ’ýÓž-ÒDØ»Ž?ðpt®êC`Sµãq%4 -¢a7—@¡`¯8Ä ]rª§‹§L¨Ü a“تü^­L>>>>>endobj -808 0 obj<>stream -x­VaOãFýί˜J­$â$&$!*ÝwÒIwÐ6nQÕôÃÆ^'Kì]Ÿw äß÷Í®]BôC v=óÞÌ{³ûídDC|hÓù„Òòä}r2ø4¦Ñˆ’+“Ù”’Œ†Ñp8¤$í%†¶ª(H9²Rg$ÂG«ÖZä ¹¤ª6©´VZ:Mîî¢ ×#]®²ð¿.EÂì³ÇÛ"Þ2¤~<‰Æ@Ô»¾I>ÎésN;ÓPc¥O¼øý×1Y·+$)ÍwÖÉ’—4ù¥ØQ¡¶Øm¨0fKÂñjH:´¬û£ó(æ,òQ”U!íÀÞ×ã¾u¢vMuHÀ¦µªÇP)z!Ê• é•öAŽÄsø˜œ š49ŸDϦxŽñSKÊCñ/i†¾øÃ8š=+ÿ(šF´p²¢Éœ’šÉX§ôÚ³·Q£æâ^¨B¬P£™tMhU}/ë#–1÷¶÷}[ýQ×%T?-”ÔŽú_ÚµónÍÜë´(Û²uÜkÎè‰Ý˜¦Èh-­DŠJ{¬dr¬ã @Ψkkfô¾?š¬)¥Û0SeQ×ÔÔµL]±5t¤G׶kãX¾¹ØϯšŒR¡IÖÐJ²b2’xc Šíy ôQÓ¡¿ --Öx µ±´ìÙ&Ý°­2»ä·ùízyÚAêôÚ*5ݱ"}M…¼—¤M­Ü.¨”ÕÌ"Í\(=Õò[#­C{©Ö>˜:Ü.”öÀžd-p”=»©MÞòA¡æ{ww€LdY§]S9¹öû¡"©) C`-#J6è£g© èšzKøè6¤î‡ -ñØå)gi]6¾¸Ä¸xÛeãøNÜr£hÖºl\–­!7ë“r­[-„Âí5VxãÉUƒµóÕ@0•¾n°dW©TÐÿSCãΣû¡B¢Î¢=TŽM ð{ìa6$?sn8ABOÜ_¥1ìŠ& žFøK³íédõŠ—9ôà_ŽˆaÑùEhv±çëSoĽ„ÜàdWzaWá0DèI~È.Wks‘k\æIªpNÜ5 éã úsƒ‘bÿbÿyé!U×eÙƒøJ¾C‚OÚƒBF``™øâBÀ+ Êx_aÖàÚ€Õ¼a.~h’ÛUr~©›'oLíÁÀçøx 5C<‹qª½m†x<óçëÓ‰?Š.[3ÌŽÌצ„ïngÄc¿•¾|ô®“3âñöŒ1p5'þ4ëÝ,ñI—FQôÌALù$ñGw²4öÎË”ÝbþÈõëEù0_.o?__ÝÜ.–ËŸÏ5£ˆo -Ùœ–ø -ó‚åžá·ö}íuƒ‘T5tÌ€ÿCQ¹ÑœŽqTÆÏÌ¿§Æ®õo³ô(q~Ò+?èFd!WµpòŒ [™Ã4´jÖ¸ŒT¦vßíig‚™ø¢tfíÔM¦_#qKÜ»..Þ}}ÿŽ~®Í\FW&mJÜ+ŽƒCüV?¼ÖûÏ·›ñl]âÖŠ[͸ÿËÉß°œ6‚endstream -endobj -809 0 obj -1189 -endobj -810 0 obj<>>>>>endobj -811 0 obj<>stream -xWÛnÛ8}ÏW òpT_â\ -,Îma qÓÚ c¼Pm³¡HW¤âøï{†”GmÑEÀ‘HΙ3gÎÐßúÔÃOŸÎ4<¥¬8¸œ|¼½ þ Í—xszŽ9õ’^¯Gó¬ÓOú½„kái²¤ùZ™•£kkŽ<-lùô÷‡ù7ì?¡~?î?œakõ¼š¶XæH˜œv¶"çEéÉ[â—Ot¸][Ú–ÖKâ'Ž6JK²Kò¥pëC<“†&äªÕJ:NÈ-‘X e豃³FŽûÃdÀáÛÇä•ÖaS&tA¹Ýš¤^98M8ÑÎœ0°B­ÖžJ)rJKÆq=ÿ3ý<›ÌÿâC -üŠnÇ_fƒ·‰R‡q¾Êž"`_îÂ!…Pš)Ð -ØmÙiäÖ­J[m‚¶ö‰ Ÿÿõf|}CK[R.=Žpš‰"´ŽR È $ˤsËJëv‚W­eN¨“_ÛÊÇ<:å¥kFEt¾U¹ì’³Tˆ]Š¤œ-¤5’¤v2„Y«ÀwI›Ò¦Z!ŽoŸe™a5)ŸÐà ³•Î‰„Æivs‹Å¢•‘pá]& ¥\)ç*PòÇ çŠ Ý®Ò¢©ÒR½„ãLw7ãÙ 9 y'AÕ&H:Š ™å6« -i¼ðʲ\À«³U™IÏ%TØž-ÌF¢îY:lÜr‘— -@ Iá”,â 7óô gÐÔÉù>ð e,Ûíur1LNn°~B×J¬Œu,—‡Hx(Û¯{‹•·Ï(A,|L­&™3]+de¾·èøП÷’fðo:1–®yrUšê‡ŠÔ‰žŒFÉùŸp#¶|dgv#irý»ä.wýRTÚ׊‡ à”j»põî„È¡âÂ8^hò%2èqtˆ}Á¦¢B×QªÞѪóä:¡¦£aÜR[a‚O± ÌÌ¿‡IæBa‘è>0×4À‘‘>UÖEÌGäŠ4ɬY¶"Û «ÑÇMW.ÙœÐ׉KïY$lÀ”=–©³íByèOH>%Ìí×o8:ûcý†ƒ_ÌaBWkEÊ€ To3«éN>Ký^Mpã8 -æX8»¿d!ÅÅì!…0(´ZfÞáÔª,Ñ¡ ½®º«6G£.Á»ÙÙ®>½é†¿wÿκt7žÞ§ýn‹ÐøÃÙOçý¶“¿‚eœ‡¤-÷}!^TQoÁh €SŽÉ½öÑ~5÷;ˆÇ‹S¾ªbõô@4®ØOF“òtã’2­Ïÿâ›-•ß½šx;“‰!«sYìØACÁHã”`UÂÖ£E,mU{–‘<1DìpÖ)SÊdFÄZ*š$#RfÝÛ¿ArA’…u\±0ŽàË2‡CzÆn±×9̽'‰á0Æu½ßYaÞ›¦œŠ5z׊[JLSÃÊù3zS¬`NpM‘W fð©Ë*˜0šý{±\¬Pbédù wLg,àp=”·'e˜È(X£Ý.#ù<§ ¾Ñ ÕŸ˜ò¡ÚP0æ$À¾ÐÛ¯!@ r#›é´ÒDý‹.qçʬí™Êas -øEÇýuHÑ?X¥!篭–#“·Çrn5 -ó׈ž)$mÙe g# -ä°U~]ÇÐ -½ê0IåêûZ´qQ›ñtŽ:•„/F|‘©n.`3/ MG=v° -pM%˜4T™ÑÌX}j§7ÅíñÍßzvS*x÷÷JV\|ö‘†JnŠ0Âß4Ý5úöüêáãäP^nÃf5ÅoU** È*¡[` ¨Å¦âíPKÒSLY©ö¹|`@)ö„‹#dö+àÖ´"‡@n‡[p﬛Ž•]"E¿‰¨õ´Zªê©=ýævr^_ú§g 1À½opÏÆ÷—cvúo°jÜü÷îR ë8î:ŽÛþ××…“ó^r¯¸}øàûrðìñrendstream -endobj -812 0 obj -1505 -endobj -813 0 obj<>>>>>endobj -814 0 obj<>stream -x•WÛnÛ8}ÏW ò²)hm'q’‡>äV Ø6é&n»‚.h‰ªÙJ¢JRqõ÷{fH9®ÒÅbQP,q.gΙ~ß™Òÿ¦t2£Ã9åõÎÅbç÷Wg4=¢E‰7óS<4É&“ -ò½i6dG½s¦ ¦ùB¥³5½¿yýKŠ.+£›@ï._,¾ÂÐM§ÑÐÁì†ö–:¯ñaË´£°RŒ'õ¨L¥–•¦G£ðÞ×˃¥òº òÚ=âKñ¤¨kÌZY¨·­MUQ£ñÜç¶n ,„•f÷:˜f3v kyŒ¬uö‹SuFŸp6›Ó¦ñAÁ~$Ÿ;Ó¢]”Hw3ºÓ -^ð’?t]ŒmðÌ‘Ê'TZGµucß…HÍg”bšÍ3Æto±ÒÆzåºûO÷ȇ $÷‚Maµ§ºËW#S5'ÈÐ爉þ3ßûÇŒ^àÐÀeã·#õ»¿^ì ”t|vˆŽNOð<ÃÄQŽ+||–ÍŸ×þ8£76ÿÿÿRáÛåuZÑze´·µ¦F¹Bå=g;.3¯¢!‰ ÅúØ °¶ú§l9|ì5_j¢V;`_‹eÏ@¾½HœÉ SiØ»NçÖƒ¥ÝIbÀÕ®QJ„¯8NüàTóEs$Ë> $”^‘mÁ ¤ËH|yxh -vÆLÙ-tÓƒ…ö»øLç¬|«sS]<ó[J¬[`Ûclî~ÊiÖ -:Ì=dQ@#ïY8 -½ôD…)Kp zíüœ}:ñÑ4òÍèƒvŒö„ GÝ«z©h©²_f´R(ŽC -,;4gÛ¨`ð;•yª‡½‡Q« eе°•¿6u[隃‚Q9OŠ2Teä{©ÃZ—§\b4±:ˆ{±B¾¹‚Ž- :”]UõЀƒá@E‡à,€$ª‚3å‘d$†—XÀ¡^¥ÊÃȬ%˜RÀ¥ð$ø!¼H,éZö:û|8#t…ÙçùÑ>-X¹h XbÝÞK<#ÏÒè’Dp9ù®m­ ~Ë -/žØÕ4£{à+Tg0Zë½a©!’A•|É:‰¼vú{§ý8mµ´(e4 - ¡îÌ\錧M=rí÷áÀÆwð„ -T/ˆù‹ÇRIô²a„¸0d-½ÒA#nðTðcæ@ƒŒŸp¾êQ‹"ÕÐKR#4Y³©6R.©ëV  ÿJµ¨l©äy€9….wQÿ“FeŸb&+¤3hȼ IÐS3òž,ˆ<‡ ÏaÛ®“:ÀÈ@b è™òhf’@_«þ’Ð_ÌvÃ#¿²]UP¾ÒhY<8Y&j—X=‹Øÿµ3@…çS2¶ž MC93îkVãl!¤-¥¯­ƒÓàÐFÅIA&ô`§}ì‹äÚ<ãÈ -™W¢&žUÍs]U°Í­Ñ`—W®ùW¼Ls€& •uÁ«`Þ¢ ‚¯Õ7Ð1ŽÉscÀÇ h™ÌÓ¤1~äL2è¸ì ¥ÃqÑC×¥ê*t‘H ‘*;Þ ¸äyÍÛ†þÑV&7R8ÿ 1³)[1¥}ZvPpÉÛÍÈ»× ‰”}“ÓKêãli(_Ö¡§¬#†]þÁ€g« ïF\FÙL -ãe/CQ<±n%qb°—ÝáÕKtc¬LÒ›Q]LteácÀêr¬P7æ‚7žÂ6¿…¡ÓmÒ‘ã ûHôaÏóJÄL(°ú‡`R“„˜coLÅ(¥¢^:× £`o­#ŒY "}ù« ͤ[t 8EN·Œ¹€,ÒüÏ+ªo--8ÀAl/Òóh¤0jË,æ-MÅÆ [Þx%áE|ÅŒS»Ú`ïÂì›I嬟¡'@“HήÁ9 >V5Úv>I3ƒEV:&KWyi$#ŸW×7Ÿþ¾¹½¹Þ'y¼»>¿Jï^/®±E¸øæüÍÉ4¡”l@˜Æ¼°#Ó¥©LH{ÒÈOÚq£©W—"Øø×Æ&vÚéì8;ýöŒ/£ËÌ<£·Àœ«ú7ûµÈþ—Œ¾sÈöó´€ÜñÔ0Öß]r3ae£âÒÁÓ cðsKR`¶ÅN‰b1+Pn;ÞJmËTÀzy¯ãš…}?Ã’YòÄ¥Va%å>?Ü2¶9šbµÿÕ’šneÓùIÆW?Üì¶P¹?{qŽ žýÊûÓ•Í;ÞÖ„lü ž:ˆÇþß…ðèt’áV‰ÛÏ<úçÎ?´Lendstream -endobj -815 0 obj -1723 -endobj -816 0 obj<>>>>>endobj -817 0 obj<>stream -x•VMoÛF½ûW |iÄ”DÉ’ Å–¶äšLÓ éaE.Å­É]v—´¢ß7KÒqØ @að´³óñæ½™ýûdBcüLhÒtNIyò>>YÅ'ãà₾ÿ±{|S¸X!Í.ø6 fd%e|‡póü棛K -Çgð>_\Pœús|“¼ºÊEUKKa@×JìµqJïéhKN”;ANÚ'i_Ç°›É¬us6 zœ¾ -ƒI@k][“6I­Œn-g4™t–á‚íâ\9ÊT!)1ºJ;T(W“ɨ–®v”¡©’63¶¤ÚГ(T*jÙ&½HAk…3¸\íåC.jªsÉ)Œél2mS,Ô£,ŽpÝ8é£å’*kv…, I©ŒTM™Pð"ô‘Œî­`îjY9Äò6•pN¨(8 -NÛ¼ñ¿fðÅnÅ®828ûÈ°fJË ; çè€ù‚ª]nš"¥ÔÐòö–}·žßÒþ“±)Z«ƒF.”‹'XX%SÆ(VfMÁæÆpV9 -0€³]ŽFãõKD%vªPµB]h³ÊØiU -[¨ÞÃ0m ÂýrR§TJG²„ Í‘+=©‘NÿRW -‹ÔßðÉkÄMQ˜×ÀÔ`(¾D¦ ˜ì1E€A¾P|}‡æ4¶²ÊqÆ`Q`/®â–m“ñ9{é|<Þ­\BH¦WËKRÏæ—Áüu„t±t®)+æ¶ãtF7ÿ"÷Z{R0“ûÞ!°¥4 “/ZÐK£oEÔ߯?D«‡ßV!A÷WýÉòêv½ÚÄ´3uŽž  `T÷Ö4Å«(þð°ýtÏÜð’è"s2ptm£5·å tj¢±¾-ÞÃ׈ €I"u VP¯e³T‰5ÎdPYRTyˆä`šµz‚ÐÞ´@àR¹M}ðÏ]ðËsBøþ -üúê3Š/Ægƒ¨‘Ÿ@__)·:îƒ**U!¬¯˜1uˆZ0Y×nèâG¼¸SÚ|µ@ïpÌO`6d ÆåëÓ̕»Ó,cÜ -SáwN¦5u]75ÖeuÐDä‘'Òøû/»‹<´hwän·²Œÿd¨ý–nÆtÉãvBgáy;Wþ@„?û¨Ø{¢õ=yöYéLÑø,á41Õ¸ïdMMÜ¿¥;ž`¶sos$ëdä½ùùê` RŽ5#ê:ä*É[–à«n£õÙzÞðPõ¼eEójýIYž¸ØÃS¨>3š;LKán¢ñ#-Sûƶ#Ù¿Û`&ýÑ“btsñý‰7 ýÞü?ÉÙÅ8¸Ä{0-:ü=ùÀtuendstream -endobj -818 0 obj -1398 -endobj -819 0 obj<>>>>>endobj -820 0 obj<>stream -x½WMOãH½ó+J¾lF‡„a¤9ìX–¢•FâÒ¶ÛI¶ÛÓm“äßï«j›33Ç%"¸]¯ê½*ÿ8˜Ð1^:ŸÒÉ¥åÁÕâàfqpÏç´{sK|8ƉxF³ù9þNã99M9ŽâþÉïáÊÉI|®À.Âþë쌿Ìpœ9ÜžÍÏi‘ÉõcZ¤£{ÛèôͶŽ|™Ä©­rÊM¡©T[J46UÎÈTéÃâûÁø »f[£±nÒðUo~D»Ÿ¤qëݘMc¯ÊD “ð­’6‚:?‹§}–ÈJ’D*ã/4™uϦ@b?ôi|OcZhßÐôm Çt4åé¨}ÂÖö%ìWÔ†~…úÓÑÝ>Å;ìÌ{´S‘Qhú ÉQjõ‚Š)n>¿A‡Y'*}~×oØ£CSö‚˜6è#[úmË”ºRÕèMT „‘†/ï-Ikj4¼45 -Ùµé BMê¦zÊtµ–FA†Z°ÃGT -!:Ô ý!³Y¾Yr§pG€äÂBf¼ˆéz¥Óçïu§DŽÞÝÙzI’ùR+WFÂËF—µuʤrYpOUÛ>fiÉA -HHüwé îÈTï2ô¿•¶õ¨ ´Ì§s˜üoeZÊT&Y¯)< - ÂŽ´¯úÿªÕd˜ƒ8w“…iú¾À:3.nîyž`ÖteÄaþLG*ú=¶Z€Õíc|%{5¨t<ùíë!Y#LOø‰)Îï ËĉæFk«Ã Ê -t½ø2:¯TJtªPgB«¾iú}@x>U¥n@™§¨¿0Cõ“nà8WÒâ£Ð¥L&ÉDo .Èö,QxÒ(à°À ¹›EU[&a†Q¦ïzeÒ•d)ëb¨-‹J¦¡ÄP@ø¶/ éˆµä¥‚K€v¶ù A$ƒŠ¡P¶€Lð aIµ# cÀÔ°»€e·|d{¼¦^ðâ8Áuv(ê~ÂbÂBIŸèòî®÷Ý›W­·ÇD›pn³ÙÄ{¿ãíö·%X=º)W°Hš÷‰¾…i²›cG¯½pyÆ·J Œ‡œ êªJ5†¦¶Æˆ(U†ÕP°pPEßrÈÞ ÚÆ–X°kÃqãTå &46 ÛÝ-¬…µ5O5R™ªÑ4ø›A=M¦xâÀk‚‚aÅ”RÈ*ÀÔâ¶OWªÂšŠÅµfîü_ÐKx¡ÌóîidrvOðt3‘Mbôxù×Õ%=8ûd Ï6Å"b±öó}G“³s?:Ÿâ!(½{’˜Íã <-áÚœÏc™ùçà?,;Z/endstream -endobj -821 0 obj -1601 -endobj -822 0 obj<>>>>>endobj -823 0 obj<>stream -xWÛNI}ç+jy¬`ð ï·¬â ÖJ+!¡ž™¶Ý¡§ÛéîÁñßï©îÛ˜„]EAÁž©Ë9§NU¾t©ƒ?]õ¨?¤¢:¸šœ}P·KÓ¾^ŒhZR'ët:4-Žo,Ý™Rí%……¤Ã\™’” ÒÍD!=Y£×‡´NTÒj!¤µ­©kZ)¿ `7¯{QåO{¿²®¤b!Ì\~˜~;èÐi·Ÿõúq•Va}B¶ 竼ÐJšƒ)K* -àIÛBhòÒ½¨BÒ /ÔBNz«ë ¬á8üqz?¯]±Ÿµ°ÆÈ‚÷=ßÛ ÿø—r¦ -W Ýؼ -è[k26ÐÚ®h'8 ÷zÖÖ.sQ<“(KèS€í¨hÖ[k?dÍK½a6` .‘ ½ªÐe!˜$;ãðÌÖÊ’tÎ:OÊÓB¼(3G °´à í¤(×äjcøwIKëuûãòu± áéùÚ«õñXPøÍû3g+èB†² ýøßfÔêYÒš« ô‘§‰ ˆàp_/$Z‡f\Š¯Z×û0å<¢5·æ’¤%ÇZP­ RH@qB  †Ä‹U¨Ìfæjœ`’{ƒeIk ¾L—Ö{•kÙ Êò™ ¥kdG éíÔúÜ>7Q&¾ÎÑ<ôéA"F䌛Ïe!<â&^÷ ô2t‚ÊW™Â: f4ÑR€Â"â"Ĉπm§î&tÙ挮6ɶŸ=¤ª>£ª÷R7‰cá1]ä¢ñW¬I¯YÎÜ~ýûö+===\~¾º|z:Ì蘑_ØZ—4Eè€k' t²òöàI°©`Àx2÷‡ï.¾F¥5G1¤!T'bÃ#0S -ÕZ–¿¹Ja0…¬Ù8D<Ó2š_Ëü^mIä»ÃÇHh僌£Ì~[.ÛiíWþÅ@YÉ2–ÎBã˜[T 2@Ê5ó«j‰o`¹q\ ˜áøÔÆñyDL[J4´9[OZ°èD ?F"®˜\(HŒ¨5ò”ß$_8µdHQ| `ã;5_„í¦ÁРk.>ºõŸ]!ö‡,Á÷…Øï§ÅóZˆçÏ!Ä”8!É…¤ÇΛ=züJ–—ןînï§tôûÑÛh™ÿD¤“k¿+Ô¨Bz«»hÚŽÞΊ½¤¡dr j™·÷¤´™î¨·ôlôTYÆO04‡yrŽ¸UÓz!^9kæYìË»ÝI(¯í¶´2掋øEÒ‹tsÿÀ±Ìæ x=ˆ;­4#r‹W,a—Ö^oŒø>­Ýñy6|uÊ°¿ Z‡o‰ø©¿üšÖ’zï:e½…Kd}ƒ“vkJœAø,Ézé䋲5~aßËkìŠíÃð†Mìl’t?®Qk¼Ðºþ³½etI¦®r¸¨»—!WÖŸM¯'~a}ØLo»\£iKk ¡¬s¾H§@º¿ ˆB¾´ÞKÛè#½îq6<",u„=%¯ÂæßQ½—¸.Yk¸­WA÷(¹ïµt¸SbA^R…ûHÌ¥ßË ÀKø5®ÁØZkB;ÚŒ&Ô -sÎ)yU)-g`@|_Ó5»é4(›ááµÂ{<0ÿÁôï"  -à‹:Ø -[ +>†•¯2ºcKƒx¢Kò6œÈKé (œÁ›s|{‰’]ÆkW™=dp¥‹ -­Á»k°¶fk©9ß3Èàv|æd+©è°5iÒÏ>^4×…³vi8ꤣ=n[š8û  ÝØ¢Þì®æ4=~:êá?åñ›M?¸èdcønÌÏãŽøëà_=0endstream -endobj -824 0 obj -1469 -endobj -825 0 obj<>>>>>endobj -826 0 obj<>stream -x}VaoÛ6ýž_q00Ìý`9vÛ-ºM–ùÐ6KÜò…’(‹Dj¢dÇÿ~ï(R–Ýn-¤6É{wïÝ»ûçbF—ø;£Õœ®–””7›‹é§Íf´ÉðÍr½¢MJ—Ñåå%m’ñ}FÓÖôpKB§de½“5‰Zê_2šš\’%~´±– ÿ_ó Ú«¢ -eJ¡ÖJwrrC¦jß3x˧¸6"M„mÞl¾_\ÒdvÍa,Ò´–ÖòQŽÒä3÷ûíõ#i¾Œ|i“+ܶéTµ‰E\(ª å“ñXKa_\V= -1‘ iÓPbêZ&MDÏãG™!s€ÙÜ=m芿–örlvòùu·¹@i9¿²Åz…ßçø‡‡³®èoiÈ\ôëõÛhyRöyt­"Úp"+2äh2gŽÆmWþÄ”%sÓ»öTŽm'…’º¡éôæþ§»Ç¿î§›Ï§Ï#útÙÜ´EJ\]M±$®¬°—ÐM•°voêÔ>KÚ_ ‡£+‘$¦ -—µ0Û-ÞUÚóÚjõJ±yaMQ'8Ú \á•M¢ ÀÕgÁÃë7Øsò˜|£þ m¾ˆŽ•$Q,/¤P»BiÉí»ó2R_dzÈÓi¬¶]?L›²¢É·ï&ש‘§õ… ƒ6¿@1ïè¾!H´2Öª¸€¬Ñ•LTvpÐûê‰Âè­«‰ûÕ­9”…ÙÛ öHÁø ¶3ä=Ò_¬LjéúîT_¾™¾êD:Þ "Ö>j×ãc:=ó[ßÈ#ø0òÒé™L […ã§0 ×u½¬k(«Dƒ‹­ ]Z"P |å`i¤ôN*…—4Pà qFÝ{ ˆP€9#®ì mÑ÷0™¶‚Ø:À(1: ñ3Ãx±Hû,q -õ"ñ^"À„e!¿ãªÂC{z¹"¹ØR.R³w e,¼™Zòœ‚û×Él#Ëç7· ¥*åBÁrÊJAÀlÛª2uãz¹–øŒƒN&‰ŒºÎŸÀÁCùf‘S1>‚«iÔU’µdG¤3µmká •SÚÛ»Íb¤ãùñµ OUP©^ÑÍ°ï6ØÂÎIjx0Oð5êD…ÜÉbšº”«m~¦V©M»Í»Ã=°äêˆ-péƒÀ1~÷µ«¤'žÒ§Ñm.“–{óšJÔeÅ¥¿8†Q9·SŸŽÔI}è†Û€Nô—hºá÷ôù·Ü!Ô⨂ŒÙv¼†Š_w!'óë#®A™Æ8Âu†àÛnÍåe' ìmͺg§Ÿú™‘ÕÄíZµg]?&Ù$pÀÍ¡êÀ n岨èƒó=#=ºÅ˜ÅyƘҶ©Û„eeO¦‹tN' -î#Wy7Ó™0QºWÎj)“ÙV}$÷ši Ú܇ £ÔLÈoÐHô èp(Ïkìÿ?”ç³…[)Ž»åµÊëÓ×ÙåÝPþÚÍd¬K Ï)>̘S¬cÞ–vJîéú}ú¬În—ê—©”÷!$ÈvÂ…S¥SÅMí?2¨Å^a,íO˜` ÄÚ„Á’Ê‹v$§$6¯~½s;ßO,“5È!øÐœgà3EoÃøT‰gkê dk¶òX®hˆdŠ6x»7Û¼Ò[TšÓTçKVkÛNBlÅ)Åà=¯pIŽˆ«†°ŠÕ¨=ú¿[>°†`ÃAõ <ÁÏÿn”"LšÓ1Úô[ëY“ܘÜñ2Œû‡©WŒV4ÀÕØX;‡å÷zSXtp•°½Ü?ôk(PöÊpÛ(èÄöëH¹Å üsDÜÚ LlølRMUågŸ_Òn½©“ù‰­wžM±^~¤g§ýþå‰ýÔõl‡-ÂÑ´î‹“ð'Yìz˜õIŽ ¡¦¢Ìm qöÆÿÊÀ;óôÓÚï¼³Å<šÑr¹pÛôøéãç›ôP›ïH¿›¤-±È82:TËŽOVs?æÎVîÅj­»8»ä Øèÿ¼øÕ|Pendstream -endobj -827 0 obj -1527 -endobj -828 0 obj<>>>>>endobj -829 0 obj<>stream -xWÛnÛF}÷W ô°I¾ðƒ“Ø…Úum¥AQÁŠ\JLÈ]f—”¬¿ï™YR¢è jÆDr.;sΙá÷ƒ1ð;¦ó ŸQ\¼Ÿ¼»=¡ñ˜¦)îœ]œÓ4¡Q4hïRÚØšº"EƒÌ¬Tž%dtµ¶îUèYGƒ¹J¨TÞãrBÚ9ëT-µáäñ¥Ù‹ö¤Ê2ßò|}C |¥0Ç—·Ó¯#:G$0øbç™6ýWÚ#¹]éˆî "¹*‹ë\¹C*Ô7D¨æD‘ÉÒú -qòÜ®”gFSæ)¶Î鸢ÙÐk-9ŠÝ,´Ÿ½mBO΢}{{H‰%c+BD—[û 6ª¢TÁ‡|Z·gã:øJU™5äô÷‰ÊáÒ„äë••(Ã\‘×>)«håyïتªtQ"†mí©ö™Yˆ½”VÕ’ÖË,^Jgr»X脬‰àsf»ö¨K¼Äé#ú ý3Ïà .V/¤”N΄Š¨8¶5j®_2>rŸÏÝÌ%1Ð/\é.#”Ù êUµ¤/uœ¥RŠmQÖ—ÃK¹Ñ$­øÀm-^>+24›‹V:;Ws`¨ÐÊp¥ÑÆ·½ñÒ; Q!OiZeŠª¸”&d±ö}Xêݵ¸¤¤{¾\mŒkèjçå”xÐ[RI‚oº e‚õ^lc$`£]JÚ€{6Ä_ÏÁ¨CÒU8ÞL@A:==&O.Îñy‚?€< Œ½¤1ÀÊŒ=Gg{œDÇÑeDSæÌ%'Ô%øÑ„ >|ª5Ñ0!¡ðØi£C¤àizù…føy÷ëóÍÓŸ7O³Ùôþqßå0 Ì/m'DsÍ-†Ñ]>¬ÚÉÚ$xêÕ¨±l$¦Mˆ‘‘kö‚òÄh•Oë<ß ÐwïÁ[è@*i½:zü€¦¤ÕZ¡LÀSfÖç›^ÄÌ€±yßm7 6p’îÙE?ׂExÇ\M³…¨ Ç¥­;¤Ò‹ÝäôŠÕ-€ª´ÞgŒÕ-´ň•yÑ`ݵ5>0òÑ#d¡£À耚ët‰ ”뢗C™i$‚9·Wô M¸¾¿þû»*ÊÀ” k$hë=DÕ;‹&{bmè…“*øÒšDø¼oç Ú”:‘&󷢆üà4Œ|4 /X¨M#oH¿ ‡Î•%é…µ%ë±Ô¾aØñÅçç ;> “a7™aãQC±ñˆ£üŽsž,uIG÷4½yžþúôû§>¹Ðf.ìî~ÛF\t€›Æ˜X8 OŒ™Þ™EmöœùNí˜xüàÁÙÜòŒ±{TfB΋#BÜ=²Ú9pš (±gåž;LízQÃTB·¹½B|Ø,˨Fˆ G:oÀ˜2éi‰]!UN€á³ÂPTd3££Ù¸ -d|­¡wsÍ€òþO(³Z¨Ì0”z9ÂÌW˜ÁâìKù8-ë ÉØo¦‹’=ä-Õ -›ªÔa|D÷Ý}é¯ûïn[mí,9¥Ó)v%èPSË+Úh¿¦!ŸS›Ý”–‰ÓV Ç^jÈ.Ò„¤¹ª.»àžL.ÿs|Œ/O0>ÆãÜãýt} ·ù0Ò0? Ç¨J\4A¸TrÝ¢Ñ|©<ÖCïË«ƒL€›ÛXõ—¤-¤°ÎAÀžkëÄn³èôdövטP² ×ÄÖ¬´˜Å€9/jpÕ!V/á8"ûaXµ™ú%t‚ÛÙq:Ër+kƒ°3£e òŠ)¸çÄyfµ«M/l»…€±S‰ðð4»á¶èÛíRPÌÔ1 žØmd·™P¬J5Ïò¬9 @ÊÅÚÙ ë•ÎYïkÇÏ6 û·(q¬° hl£è=³ ¥…9íÆê -wyå ÷ÛW!]?|ìÛìv…¦ÖW½„Õúò0ýröÛ¾WD€³L¼vò ×FÚþºž®o§7O²Œ¢(`9ƒ§.Këúbʲö#³¡P™ñÏb à¸@ç×Ìšó 0íG£æ¢Y»Ægç¿šáÍ«ó -ö|}ÿþšýÊo0m\Ø8僫£`6|µüœŸDرô…ÌÈ惯Ä{êendstream -endobj -830 0 obj -1609 -endobj -831 0 obj<>>>/Annots 27 0 R>>endobj -832 0 obj<>stream -x…RÛ²“0}ç+–ouƦR ¾hÏxyrFOùÈ) ÁŽïN@­·qÂNöe­Öç(ALO‚œcŸAöÑCíÞ‘¤(kÊdÄ,Žc”rÃYÊpvºëЊ/zhଙ«NM¯ž—OÔš"I–Ö-Ï©uSÚ¯p­B/tçë;=9‹Aݦ†zÇ~7O*T)*µJt˜ C;j5˜]×!;ZCP=CIM]k©©t}%¾Ï÷,Þ–‘'X#ñÑãûèx`$'å¬@$/è»ì:œ½jŸÜÓá½ÚÀUŠ•±’­º@8xŒßlƒMàñ:¬ÌØæתP靖¼A­‡ `f‡ÞXQùpÑ!(Óš[>W“´šÀéîîpÕ˜d; ãG–‘$žsÆ×ÝOIû˜’Jj•¼.ø~ì|SFÑ›*DëÜør·û¡q‰þ®4Æ–gÌÛgsê&ƒÎ˜«Ÿí -#'è!œœÃO…¼…g«Bº4Ž{’9Åœ^º®zqi±Z-ÉræL½sêùôáá„Ö<)éðÆȹWƒN›ÁOß.]Û¥í¾Nó”¬á6 _É}Š¾–¡èŸendstream -endobj -833 0 obj -445 -endobj -834 0 obj<>>>>>endobj -835 0 obj<>stream -x¥V]sê6}çWì#™)66&¼Ñ´™Þ™&sÛKç¾äEØÔØ’k ÿ¾gå0é¶sÃLléh÷œÝ³úkÑŸˆÒ˜fsÊÊÑëÑÏëÑ4X,èò¯Þá–¥ó`AÉ"Å÷8Æ×ZÒ–wà%`úX>=P<¥õèótAëÜ¿Ç“lü¸•“5Íú¤ÜÕÂ)½£ç/ôUéܼ[ÒÒ½›úÍÒ»rû»õŸ£)Mâ ã/¢Ü~ÂDxÄLfQóÛY´ÚI·kŠ¢vMœòŠµ!•KíÔöLn/éMži{ЙSF‹‚J™í…V¶´d¶ÿÇIÎÔbSH˪0瘼¥QE³&*aIYh*Oñ1Ðyhj‹U!² -^Öa<«iS˜Ý9舘žŠ¯ôÉ“(•–K~ 'qûþE”ØÖÎŽ”FÕšý¡Õ)üUéÉ֟ÃOŸ Um´Oƒ&à båcÊ¿ñ³Ïçù¬Ì½X8äJÇNHÎm€DýżӦ†ú¼¸“ÌéœöxÒ¦É:ϽƒG,6kÑï=x/ÄðPÔÛm*W±Z™jåÎd*¦kp2eFoÕŽ¹kp·ÐÍJYÒZÛ1Hd™|<ð±BÉcuW0$ìr¸õ¾Ùš¤=Wœ¹Î'¢0ZâôúˆjΛ¢"¼Z¢=‘ôz­š¼¬Ñx§0A÷)ç¦P®”å¦Çlõß|Ìx¢@k$qDHq­úÕ ?5ÀÈÚÕ¦(zð>à¬÷–3¥-“tƒ;¹nöYúÌQ™?A›ä‹ò÷©v˜J‘3eáÓGghÝ “ºQh« 1äרppäöÊ2q^?Q7m>Á½Ñ\7`(]îu¶92k×LRX§—ë5ž§^ ¿ë•ó¾…Çõ]8É÷£hkaÊÙþ¿!µºÆéýep|C×8a ªÚšOøµ^?¾åôƒŒ\j¨e¶\´‹SÊzk†Í­òlZ(ʶ¢a6 ¹óÖÉ<ð¬€ÓÅ÷ÅRûÅyøDíïÂd¢`>©ÿøoM#±Lìÿ l¡=ÊCDófTƒ³Q»9€Êe-@hÙ¬lžšL ›`É°b'à¼-k-,½2V²™4 »Zü&YcB £m«Ú1 A•çâzXôƒ¬AÍ Ço)7¤ƒ­£œéòlç\-[!P-:ªoÇÖK3Û©Ù›tˆƒÁÑHh*¡lj<˜«ýÙ*PÓr5hejGTˆ3V¯ò ±ÆIÔQ‰ÁÁ´9¸Û k¤Â3†Oy–9vÑ*ËØÈ[›êbÿàòÏ«Çî7®+ƒBÌ5Â.ÎD³˜6 -ùÀ# -©wý½¥¿ â8Mw®8/l©P‹Ø *1A·æPÓë8y½ÃœËT‰ÌIØU·%ìØœ¡Z)^Dz’µ2ùë/fò5ƵDmþÝ•€“¹ô…×6Q{˜9`´Ûc,.)}¸/.h”«r´Ç¤ ¹ø†v+¯ÂÎp™ÑMÛ%ÓåB.§bÅËY²¼ŸóÎðiq¹¶a¢…þç•ñr KÒ¤3ÛhÆàp¤ßFyû=)endstream -endobj -836 0 obj -1212 -endobj -837 0 obj<>>>>>endobj -838 0 obj<>stream -xWÉrÛ8½û+ºr¥Ê¢Û’’99[Uª&Ž'Qj.¾@$("&-ëïç5ÀML25–,[$€^Þë×Í šãµ õ’®V”Vo¶ï·ód³¡þÃîñË毒]oÖø¹L6d%å¼7qL÷å³×´XÐ6Çé«Íš¶Y¸?§m:yÿ$퉴ôGcIi/mnE*©ª§Bݾ%‘eV:—Эs&UÂËŒŽÊDbxŸ|!áJ%N´“d4~íËí÷‹9MWÉÆ'•Á‚÷í‰gnÃ&åèî3!’Rxe´+Ô‡ø£”š½è·à[vnö’DY’«Ó‚„sj¯+©½°+ìNy˜¥L¹ÔJ6Å”&-|m%BôU9Ø §R*å“,ƒ.Y©©ªZ«4úJ^cCó. ÄÁªŠ!ê»õȃ7¯nO€/`8×VÃ(`æE·_îqíPžZ÷—«äšÙùOÁl„p‰0nRŸŽŒ"o¨^Æ -ÚàH Ò§…BÁ¶y“š’Tu(CÒQ™ÇÆÔ ¾²_/ÚC´¨ä öàEÁ47ù;BÄfS>!¸r^MÀ š0žW§F{kÊëiwbÏF™Û¾½Ÿ!¯X—«}m£“Í.¬lÊ3üK¼wöêädB3éÓûâé…f¦þP‘|Ê/ÓÌ÷˜2ùJ&W(EÔeÏ\h‘ŽÀ÷¡RÍÐ¥9Eeà -p}apá0ä,V¬òS„iP–­}ÈÃ^"yA Q4Ðœç>>>>>endobj -841 0 obj<>stream -xWÛnã6}ÏW ܇zÑD¶¼Þ8»oIÛè^ŠèK€‚’h‹‰TIÊŽÿ¾gHÉV”¸ÛHli8sævføÏEJsü¦´ZÐÛkÊë‹»õÅïë‹yrsC§?v‹/sZ¦i² åÍ -Ÿé -Ÿ­¤ Á[è9þüìã{J—´Þ@ýõ >áýœÖùôm²H– ½Y¿˜}L;±éLú|¦Û+Ÿ—Inô& -,)M£ž«Å -z¦ëR9Ú¨J„¼5•#_J¹oEEZÔ¸œ©Z¯Œ&/ìVz—Ð2ñ˜?4*Uu R¸(»“–Lö]æž\#sµw$ØÓU -Øl~cªÊì݇ˆnNï\JW‹w »9¥îç'zÝ#V…Ð>íMŒŸÓöæ^ÚÊñ?„†½Þ¨mkÀàQrî|÷|‘&×C{@˜‹=Rh¬áÏ)¡ÛÊK«an'I"âJ"þÆRPclA¢E´ïbFÂÊ×<‡Ž¶£åà„#¼V…hh¯t¦tq+EaöÿýÖš¶9É>wu—Ò8ïÂ\dV¡eð"GçÂÃÚ^”ãÆæ¹ýh–C`œ_¨D]«‚Š¬óã®sè´ô{cNqˆzÏT‡D2íñëáÌ™|4Öx“£ »Èmœ‘·M>ˆñõ»Xþ½úçxf{~¸â¼Ž=úuƒµÖÉK’"/Él˜"œ¤Zæ¥ÀšûþŸV(ðFøÈ \i¬ž™BäªRžk]èb†rïqp}C½µ`‹êÐ;Ù±Cßœ²è›˜/|µ”¦­ -Ê$iãe-·E#Ôå*“ÎÏj<[`nQG8Ú_Òú×o³Oßzi‡BÕ>A§V#<4ú¬nõ€Ô\ õ0JðWçªs"Hà>ñ¨ô–Œ;îÑÔ°“3{ûs/êLˆÓ1Í.Àés4nU‘( -úCéö‰\Û4Æú@òÉKÍ¢¸¡ï@Õ]T)ò>)½±ÂyÛ‚ÍÙ1‚4rª -ÚóJÁir€D†™å&óBéá€kŸïé/p -˜›¾H÷éë}èÍ€á¤Û¢@18É“ÂЖx š‘åM«sž ¥q -eÔórQPù’Ä ¢0‡s ˆ¨FªÅc8P£¾èaªä‡n$¾ë&Þ”%Fú9«T†Ïƒ*]â KZaúð&Î;xÔVž -q‹$ö%È4Ç Ç=F!‡e;AºS¶3RNÚ&÷ÚyðeÂ8&#¬°_˜(¢SˆP\ú1“HyàÓ &j‹O~°Lã¤[nc\c”ö¤<'õ˜cØçTW+ Gèð>jPÃÉPòó©^±ø‚ ÷’k³2|e -éß'_éQ88çLÆa$…&Ø— -ä”T -¿t¡£z5[~:(ÜþU&ÙphÈ°¬Åuì¦_ÍЈýb6\ÃÒkØÛ$.ƒu δù‰ wô„x=¯Lù¸— €žd‰óaeÁÔµ"3m$ÛÐüœ{¯Xt‹CsíâsÀÿGmöšvÂ*Óº„û0å@ÃÀ,ÊcÀÉo8)!zîÈ6Ô ’6¹¤IoŽÕó÷ÖÁ£L™ˆ"4¹ÿ|7Jf „KPŽqRKÁŒ²Bú·‘ø™|ÊeÖQ0Q0yÒšå*ÈqtÚ³^ì63²gÙ ’0šØ¦fÖâ#±û#°É±æ&¡_'Q_P$V†=ø; §jFðŠÕ@g)냈ô`—49ÏÌ"†ã9»+ò Ë9ô¦¸b” …Èw;¦ÖÖ—mzíË‘«Ga. )¶B¥xêqr "?f·,f÷NT-§= Æ•çúé “;Y^`ƒ­»:Fpd|èG§ŒAl¹ÈPÐpö8HúhK!²8Àý8yéGî!æÈ2|Ã"²SÌ“à Ý8ìf!v<Š×ÈH¼–6ƒÙîŠsDÈ ‡ùìF`ñÑ_fn:ÖO¯WIŠk[¯)÷·Ÿïné›5á~ô›Éà ±cäWQüjµÀí®èow¯_~–«%t¹ôýyñ/1&wÊendstream -endobj -842 0 obj -1574 -endobj -843 0 obj<>>>>>endobj -844 0 obj<>stream -x¥X]S7}çWÜÉéÔÆ6ÔNÚ Nê)ŠÍ¤¼È»²­°+m$-†ßs¥ÕÚlfšfš0lé~œ{î¹wùz0¤þétDÇcÊʃ‹ÅÁdq0èŸÑîÅ®ñË€~9=ÃëÉÙ)^‡#~ÇJZñü ;í Î}Ð;Z¬`{ [‹<|< EvHÍ¿{­¾Ö’®¥¿˜ÞÌéZ”Òýúvñå`@½!œãR{6Ý™_þ1½ž\ŸÏ&ïƒßé7šKû$mø¦2IÊ‘­µVzMFÓÞñ1|̆?I-­Êh&²ÒˆñÑÃa -Wãׇ·?`u½z&tŠÚ!øÿõç›»??ÝÝÜß¾.9æ¦ -i çÉ…5[xhb ûã}H?YSWÿ õ›Á+h$V®»“9-_H•²\JëȬ¨½ù Úsï‡Ù^"—F{kŠ‚­1S -³FYcÍÝ·™³Í+“‰¢ƒÍØlcª‘©–>²áN:S€}ÁÊÑÇ™ò½!õFãþˆÑžzrSG’6(ùð§D¥22 Ìm Ä©,™­&bž9Ž*Tï“Xš'Ù§ÅTç/MO(wÂâ8ºÍ8¼MÞÐâòöhzK8é<Ê#¼2ÚÑvƒ’åŠßÀ/Á¼{A1Ky©4êj…7–¶ -e¥\"y¼.Óáì‘ôÙÑÆ8ßÂظǕæȇë9å‹¥p>‘yLˆ¼ çL¦ƒ²U~C@Byn¥sýÄÜqÿ„±¼çUm‚¥Ê(í™aY!¬Z©,¤ÕÅúç&›a=ŠÕ9|õ®l‡´R‚Ò\"I¹•™±¹£Üpí¨²æI岃5N¥ääÈ¿T ÑÊØ2F{H|6§ÏJçèI­¤ö°++ w 4êT€Ÿ·a.X@rIø~Çk)^(pJÊ\æ}:×$ŸEY!\ô ;âQÁM(¹FzßB´Î.”YJ:NcûqTÒö Ü^!¡è,…šàcÆ5uä€DÈ%PP4@‚½žEÔf°X´`0¦‡Ã'%HtH8/­y‚?¼%\%©ëR‚«`rðÆ*”º*€¿O’Ú ]ˆ~l«õë@„wLÇ©•˜Sè%tŠ£‘ ¨¬]÷øŠO‘O ék¨Džš E‡w -ôG¸c¹t}ú¼Q`>IÀÚñÝd -.ZY9M`Ž# Ádð˜:»a°|ÓB œY¿Ùû¸æð†€ß›Xî7ð” M X‘UíØ4^0]ámLLv†#'§Ö:´ 1«N`HèN lŒ(Ĭ¶ÊƒÄÂbÀz™³†»rŸ¢P[Ž•@€h?öÆ:0 èw|sŒ•U¥°/H{ßAcÄyRÖè’K"C]AJi{Þôø;•“åÑ@»¡Æ*ÞñزŽõ "VAkÕMÉ,eü]OéÿôfÍ»FÞÕ Bú#*T pÐd†j`ØèK *t;£‚˜§ó¨yr`dÌÿ8¿›Ðìæä5ùð6$QB´Q7_7Ó êï«”„¯à<Î9ÞΙßn S„Gô^j-ql8Qz!S…ž ÔѦ‡€7b‚l+ã"\H7¶ìý|rRè½ÃèuIö -Êê_s7~­•å<ÀX]Î&6ë•€XxÞòÖ”`ìΞ=ñÞ&0.*l?i8¶¥J­Û <&2 2_„ª[Yb!HBÕÉS߉5苺"°H´º7ÐFüP+Mçq ž5—.0KÁ„ùì%§ù‹'³—bgså:¾¯›•¼uÖ^îBº;ñTWµ§›Úó·yؘX髡ԙ¨\•£õvuu‰¸®ÌšÐí+¥©Yùvë½Ç:º  ÉG ¹­Ñ[uáCÉ(H¯ƒ™ÜOá ?íÅ=yöPM™wò½g6ÄÝn%2¬õ¯S…3œ,»—…xÿ ÓidûǭȱÒä9Û½†™] -hÆP²åKÇõ5 ‚ó3#ª†b£¿ì1ºl–¸„‰£.(ßäë÷bÁºÏ@-â–Ä?òsXÈ0ºû—&h›i¡2üz†–[ì%©0dP#SÔa(—’AQ®Ä´£y&[\„HF}VEKÆ»v³6„Å&Gã`™mæ=·ÁžJ†0,Bôáa«ßx€Å8>ºŽö\>¾£!–Ë?cgç=s÷¤zÜ?îcç%t®ye¸Äjzf·~ÏÏgçtkÍl>>>>>endobj -847 0 obj<>stream -x•WmOã8þί•/ ÑÒ–7­Nâ¥ÜU‚.G³·Z©ÒÉM\ê%±³±Sèýú{ÆNÚÒSà¤RÛ3óÌóÌŒîô¨‹ßöéè„âlç*ÚD;ÝÎÙ­?Š'üÓ¥~Çg§üùé¼Ó§BÒŒwà%ŽY}`ùáí1õzÍpúÉÙ)E‰ߥ(Þ:¡YZÚ¹ÄßÂdäæ’bÏåÕDB“pNf¹#gH¾Æs¡Ÿ$ ʤµß^”›c­p”aŸÒü$Mi*É–Ó2v„ûÑ.µ{Gð4JöœÊdÛ”Ž™Š¥íêÈÎ %-2IÊ’Ò›¾X‹þU!­IK§ |Ky.ó`Ï–q,er@SËQÔÞÄBoY×Æ.›t(šÃְÀ ´®Né'š™‚J+ Km¦rì– PˆØÉBY§b23o-/Œ3±I;•­þIç˜#àÉý˜¾)˜Kp†ÀÖ:ê ©Á“»û?¾Œ£1ÍT*Ù¡MæµûÌ<àWø=»SÚ-‘ÇX8†œo`5Šè^ Ôï‚ÔÊçñð©Ø¼âÓõÅdòm8E“Éøû8Üõ'“›Çá_ƒÇñd2ˆ®ßz³V'í„Ò@†é2| Ë$-c¼ÜdP ¤£„‘lA U€Áœ‰`¥öo*<¶ûðsY€a™¥:×Þ -k žˆÊ“Lä9sÑ -©”É6»† ú2WÌ FÑ<[JÕ³¼¨9ç¤õ¨ÝÿØHÕÏ.]›|Y¨§¹£É^<Ù§ÞùùÝ«¸0ÖÌ^ym ¬8ãÔ­6×l?ZB^Y‘åÈñ&!XL M™ûÄÊ”aé:åøàJF£³EׇÃ8 ÄÏ^¨•¾ÎÏšv6=>ûŒ¬ørï‘·,ŸuB¤å˜±Éò5€“fÏ^Å_ýÊÑE’l±$;7e -H$=K”WÈe…B-Ta •Z6&ÁníÙÆay*â &dv:ø›–™T\rViht<6EU ™}›Á¢×ü¬•Â+*4Ï\GkeŽÊ‚Ð7R)à¢Aç°9\gÅ;1 –Z»­uÅm<œ{’Z^žgHS"Q襧ˆRøJˆòm²,pÍÊð= ð£ú6'r*Ûd¿1Ž½)wŒÊüÂðMs-‚»ËÝ vZP¿óZ1œÒln¬kv‹iÊ•™Í¸Sù„ûsÞä«“Úr`¾ pÿÝ–l£ã^컃VÜ|¹¿øœ˜ …ô·–G×w_oô™Ýf9|´ájðûpô÷å]4x]Fy2Ýüßµ“I÷Uk”mt;/”ö ÕØ1¸ä¹)Üd¿)¢¦çt»_èe%ój’ñ5¦–0cÕS„¥ÃÜ -SL,ÀÞÆÓ9½¡t€Þ(y^ŠÄ‹Oøµï"~`èÐÕ˜‰2u~›b²ÍÇó\´:2 RXN+Wn£ÑcÄ 2§d 3˜}¼±l&Tj]$› Uñ­pjín2¬…ÂðÖšX¡Šp؈´V§¢¢ÌÈXÍT(@5{¹Þpï‚’bÌ¡sóòîÉÓ³°à˜š'oü·P10žÊ¹X`ÀѵŽ¥^¨Âh®;<)˜åF·9“,ý€ð*Ô$Ô †$àt@a*Õv­@O DÊÓr’Ðj(ÜV=1ãx)Ûñ]Æw“ ?ç¦/ÌkG”HÚÕÓœ-úliôŸ‡¨é…ïoyɧ/”Dúu¦Œ}â–\ÜZ»ÿ­'•ˆ0W¡‹°ÕÇÛëÕ|…f|5Kšxîya¾´†gÀš)ëªåSîEÁX\UfùŽ´xÂM;¥QX·,A_G×í©`±¨7:ÇٜĘÉ-Rõ6U"LÖ à’Ìó-Þòdáé)‹FÌqùbŸ.ï¾]~ÓBánƒ‰Äßùªy”ïFŒïÆün.Œ`q@-(¶¼50¯Î`¥¼zØÍpãaÑ[ðLMTMªÅ;ÓÐ!&‰¿C±cåUR+/§©Š[,E~Ê7-K};'o@…—žß Ö<þ§¸ôñHØ•i:†æÐ]ÇlËz#¦H$£‡‰¶º„òØÈoϪËKïä¤Ó£“ó^ç„gëñåýÕ%=Æ_˜oL\r±ðwBÞ×îœbyû´[{²÷ΕëøôÓº_Õ;å­¸Ûý¹ó/OÞÆ*endstream -endobj -848 0 obj -1741 -endobj -849 0 obj<>>>>>endobj -850 0 obj<>stream -x•W]OÛH}çW\%›• $!å£o@Ân$HYânµ’¥jbÉ´öŒ;cù÷{îØqZïBiilïç¹çžü8Ò?C:ÑÉ)EÙÁUp0 ýósÚþ²¸ÐÉè¢Jãó3þ|zÞ“•”ð+x -;Í/œ?¾Ð lŸÂVûÇ -¢Õº´”$–©¤ÂÀ’ˆ©XIJ³•q…£Dá+£H:—”iºîS°RŽ¾Ë5á¿RÇÒþ|;ÐÑ‘ÂÃŽá0ÌD´RZ†¡[»Bfa•ÖJ]DFÖ¤Nx$í“‚ý0L…΄ækiÃ0Vd²O4\;„ Œv+a¥kõ©´ßÊGå -‹p*ËÓ5‰8¦N^.Su8SŸ$ŽPb_ZÙo³ÚvµÔ½šþ1›%3Ýé|òõò6˜>Ì/ƒ)WéÙØØ‘HSóLY™*GA»³ùõíçÉ´Õ®+Ê…B9Ž z´¦Ì%â4’cíÓ¥^“Súq¯?¤t”–±l5ü¬Ò”"Q:´±{³ì·XÆï¯ÀÒHn}HÚè£Ü*] &ŠÐ$qïàLs2[Ê8FhP&ò§-×­&Ê¢9páþ°MŽw.‹«Ù§i ƒ-ý( *Ũ8äçšJ. l5†ƒ­nõ¢O>—‘J€ZÉzi‰2׿NêýU -{bž|À$HÓ E«=BÈ$9Z#_ -©=Ø?¶åÑvŸ†ƒQÿø¿g~Ä-&Ðl¦º÷SêN>Ý}Ô²8¿s@ÔÅE†ßM®ß`nØf­ôÍ ®ëpÜií|è:.°H ‡©ï·x°Üäe*쎹*‡½Δ6Qyêx‹í¡¯Mj"‘:û´cË×gçšK#· tçÿ&¬ÕyM 9´¬É%Ö‚=wáNÅÌo{Ý÷þïîÑW›‹¶û4«¸W,Íc؃ÜÏe“NÝ"â ”î©G«Õ†Kxà‘ñV›­ÁÑñäÛÙ«ñÂ'ᶳAnejú{èMpƒ;¾h{6xÕù0$8ƒ06¼&[C±¦˜nÛ>ÒÀê–)4¶Ä?˜Ü[·ÊÓmÓiµ_mÕj‹'¡RÞãïg§¹)xˆÂüyeÀM~ñ#mladX£ž¹"2Yµ˜Œ&‰õN©1ßËü°=Hƒ=(™ð½y]bXæºÆÊ$(SZeeF~Cag[Q.-æ¢ jO‹—°•8†Ù,¸ v¬û'å6ªÆm%À^¡¹ -½ hMAbµ{r†u.Œ/±h,džb•áÓFŒß\ÐpÌÚk@#ˆµÑžú:éóýùi,¼Iö}|3¦á°zåhtÆbÊ‹­M/JWzà0Πߺ[Ð¥cóìhÐþAS£t Ò•IèÊÉቢwý1 ¿Ìæó ÿ,‚éÝÉ( '³¿§‹0œžÿ·Áôüh4ë»8»§Ë8†ÃxUò‰p‹5ãf5g¢ˆVÛÙ¨]ç{½O³f~°±‘Ér]aƒ×:Œš´ä¥Ž+°!˨(¹½z'ßCŠeŽÆøý…³+,ßàúþxv¿ieíVê'efà2BK¢a2®åì¦Âð@êsMÏ¢ -Iþ(¿X­gú¬ÕËñ­Òå íW¸w,‹èØëæýnö~Íhp±üß žþ™qŸ&óÝú‘Ûw¾™Häb©RUx™¾Í—k¸­ظ(s&H±yP«jjäå%"òÖꄤæÉŠÑù×eÖ3•@Ûé¤C%¦˜¸ü•‚Ž )h-|Qäç•­(WõWpå5nÖôTKÀWžç&Fë×9ìm¾6ì7:š™¶çàh@™Ä÷ † 5Òri±" ŽÂ(ÈÒçÉk45GÂß}:^ªz×Ô])"ϨH—³tåò›Œ<† *æmòûÌWÕ·º9uŠþÜ«<#0®ôMðÖp¾w ‡5ŸðDÞÞUÜ‚ÞBËè;c½CÇYòîâ¼–ÎbS‚W.÷Wåàà[UúŽg£"P"ÐÊ‚^†ñ=³äv¯³]V<½õph³?ê‰5e¦Íë(—y—~?\´°ïyÍ{ÃÓ³>³Æ—Þo¿‹Ë»«Kº·Æweb¢’¹ÁcÓ?ªÞ:ª^ëý’­ÇgcÌ0›í Ïù%,„¿þ±£•Ôendstream -endobj -851 0 obj -1653 -endobj -852 0 obj<>>>>>endobj -853 0 obj<>stream -xWßOÛ:}ç¯ø´§N‚´)¥…I{€±iHpÕ^MWâÅM\â‘ØYìPúßßóÙNI3&]Ý¡Umì|?Ï9Ÿýë(¥ þRZLétNYutµ:ú¼:š$ççôúÑ<âÇ„ÎÒY2£ÙùߧÓäœIìÅÊbŽŸa%â_-,ÂÁþ†Æ_.(Ñj¿ós|Éýú„VÙè49MÎúqs»¤oÆ<µõûÕÏ£ñ—¥ixãdºÀ£Ë°çaôCéÜl-Ýh'-ÝŠJÒR6ϲyxO_T&IYr…$ù«UÏBjGfãP³ÉÒÉ$ãcJ¶–™Ú(™ÓíÕí’]Oè$=M¦ìòat+ÝÕÍÝòÐEB1v%²Î4Ò’·®‹%¡sº¹'‘çX°xà -áH B|TqÃázG‚b2ÇY©8bR!äÕ§û1ÌYéÚš -ai-¥¦GõŒOØ-¥°HOËP¡P öü'ÑútŽV"­•¡ÌèzlÐRTkAÎÀ&‡Ãmˆiqõ6¦,ÍVéGªEƒÔ9i)sÎ6¼’çHßywè°å;7²Õ:aGáq×ÐmT)?t{/¸É)LÏBpÿÁ©%ÛÖµi}¤¤=4sÂïÌCŸÞN¨µÿ1#ô …ðy!¥}.]ðÿ+Ú[ÃÁ2’@(.ùaV6éåå%éýÿs‚Ûˆ‰åvåí½ÉVßuø…!u è5ÙCÓB³ÅÅ+Õ{|î³w6;KæH¨ÏßYB_Í–Ö HÉHÙ´:sÊ }LƒK€G.ëÒì@±.Ñ,ð#©sþÝ‹ÅÚ[j½=ÐÃìPÙ( -Àˆmkó,éû²£U"+”ù:Îq_UC§Uéa¤™|ðM¯/û IØ袋¢Ðé‹ÛÕM¦–à|¡=Fs8,µ5T¢´æ˜@×ý*½ˆÌøT/ÛBeB€hyß!ä`wà߉'äT—"h\Îœ¬g´“à(B×Æùœz ²2ŽüþMIúì8JvL@bßÁ·ï_ï–«%•^¹!X–¤æ–æÇôë‚•ìW±¦l¹hoH— µê&°1 s`»÷ê®M?`eù{í€AHÕVb _|iC¨ó9‹&tøïëûAÂÀ ÈáÕ%´â®( œEý¢ö•&%k‰tL­.!üÔ• F^'KÈ¿ÕG8r3ô¾ ¦ŒV¹ÖÃÌFÉ®ó¬rD$€#¶!”(àH’õº[í¯ÄŽEÍÈ& Vú§Ì˜HJÇŒ< ¡‹>b O¬+ãdŸcHvkš'(p•±ý.nZH|÷:;ÞûûÃwópðÄj¿ _Ú*t“Å]Ñ´â6±Æìy¾UŽÉæá ÏP‘„–\ÔZdOÒYÊ„æÒ4¦å -xyrEk¾,>nD^î ‡Ò‘ÈƒvÇ÷cQì0×ë¶a}äÀ¼J`˜£‰þe‰ú3#|~ÌòHr8Ê ð¡ ìBÆ`yè§97ŒOÐ^”ØŸ;,_½„îà -ªöJÈØB€èÐÇ€Šø p_“ «ÜTòwJ`Ë äqç^Öùƒ0!Î(FƒAÊh„ÊÊ 5r;<óÆqzp) ±€ªpõÞt=pêû"…ɳ­AvÙ­¯@¨å @y؆ã™}âÍ~^BÂ6©:JCì1Ä>åKVýÈï‡ãf¢üþçåú,%¼0†¶¾úˆô-Ôc!Áí¶vªÂpGàià¾2Øa¥VXœÉLIÈÔ‚Kþ \éüa„±~àxyχ7q5dñ'6·°`;Çf÷Šj€¿,RþÖ²ŠÓºevZÂáG²†xªkU2ø=T›r0Hõ bŸ˜¦¸Å8\øÐßÝ:ƽ!ít€K½ÛßüLA)pXC5ž~:à|ŒÚî鋳*ãÉʵd¡ßq² ßL2Ái#®_¤PD Ò×(ôÏŸ»Ö€˜,½ -§‡PlŠ†:û‹ ®vAXÇ_ÎãI8/’”æó4Ü –—߯.é¾1<ÐèÚdmFù<9˜“°ýd1Åý3ÿÃýs¶˜á,ê7¤üÎÈý Â3ínendstream -endobj -854 0 obj -1696 -endobj -855 0 obj<>>>/Annots 34 0 R>>endobj -856 0 obj<>stream -x¥XÛnãÈ}÷WæI X´n–äò0Žg’ÆžM¬Å$À¼´È¦Ôk’­í&åQ¾>§ª›s7$@‡Í®êS眪֯Wsšáßœ6 Z®)-¯îwWvW³d»¥þÃðÇ ‹ð±Únð¹X$[ršr~Ï°K÷Õ7W4ŸÓ.Çæëí†v™<ŸÑ.<«r¯È7§“uµ'E¹Vuƒ½ê£ªI…}õ”[—êŒü¥J¶2^ÕÆVD6§½ÃsM…ñürê¬÷älScu¥ëWë^<5ÞTì§Øýr5£é|™,ÃäÓ¥­5µ›ðöï褜*u­™Š_"_î“ÔV9å¦Ð íŽÆSª¯=…䩶„µJky¡°©*¨Tž7 ºQhd¯˜„y’ª2â­œþµÑ¾n³â£…“»îè1 ç:­ÍY¬6Ù)ÝA…VÀÖk>%ƒ´¿¸œç=:Þnaé,Õ jÒxÈ‘T–âx´Wž^xÉÛ¢‘ºXG_?==âþîÚkÚ75ðh›éhªP’,TŸÑÿOE:9{6>`Â(²Ð¦¦j&j™`S¡v¹³e8 ª ² G™ºs]3!¬ @ V毙—8ç›=à–”„{–ò!˜µ©uUCÉpl„'DÑUm@™@ù“•:=* d¤âѳ„„”£àýÒ´…öl=<=_/½ù¥‹('7ºNoŽ -ZµN®I ò–l•ð31ƒÝn—|Ô>ôßJÿæãÍWAè··Ð÷@èËä6¡ÇgújªŒ5íuÚ8S_Èž¨ü?Úר¦ÜØ¢Ät{¼5"C¼^ë²à™ªÖ{¼ÍJ_°×LAÓÂkqFFW©»œ˜p'å½T•”g¨Ù]ð. -]郾NHT“jÀ”, >TÚLmzÑ[¾MTò’¨„žvŸÏóo?¨;³•¾æ¯i¡•£ZõkŽˆÉ‘7å©@ec2Q`£€ } -ÆiU˜èl”éŠOz~¼'&LmSËDÄ90°g¨›Ÿµ–ÏÄ?ŠýFúºÅ-šEßC(²?ŒÎÊÀåj/¬âJ­ð&›|°ýî`ÈÊP“9âõÚk¼…×`¸XOãC`5<ÜvãÀß^ÕÅÿÈù¢ÇußWôø°"ìväÊó??}úã—‡íŸ]ØX±(;ñRÙW8º—מv²KU–F•M7 .Kbòm±Þć­ÒøY×—v£ê · 0⊖Ð(q,¸/x$’A¦¨ìŠ ˆò¹´Äwx¤¸¿ÔÖºV`š˜¿5*™ÂÎï"¤¹ ¯òáŸ~þü™uàÐà´ Bõ§ö…ì¥Àz»¦=þïáÃ3½è °°-ô¤F¡Þ•ê`Ðk·„ΪhÐY¥AdM?>Ðûqöâ²\ϪzTÕ¿·åP‡op«8ŒÌy"ù럮æ³À^®ØGJ@t—lâ_=óü2œV–+®ÌÐÆþn›¶Y9³^¬TOˆxÃý°ûÝ6Y¿Ý½Œ$!LGmBãH?µ&ð!ˆ-\¿|Ã.L,N,à㟿|Ý}A§s…¦Ãª´P¦ke -?—¬MUiqÖiÈ¢ã ONìJ±p-´+½»…Ÿè)Dv6)ÛIúBóë¡ÃCà­s_&ß]ãÿÐ -mã7ï/Á½bl¥ƒÉƒ–Ù[À[+Nè}QôA±r°¸ELÐcøð0ò.½ÊŽ -£>Ð8—ݯµ¸Îpæ -t»Ø jÛqŽêŒÆò²FXæìéÄ4o½¶„þ¤HžXˆõâk&CGàÎgTš -³-Ê×µÃØoB¾ ‰²XÄýT]ëò„~ÇBeù ‚Ê3‡Á‘çÖ*rä­›J~:»–WÂ!F¡øSÕ*À ëúÝÂЧ*="\jOhõÁX[Ç°Iò†'*›×ÌjgAæ­Ýž© É¡ %ÖµÅb¬$,ÃÛ†ìÚ×è].Á"K­0Š¯l¬ÛéFDwaÚuwÜÚôxbžê -HìrÐ-Û˜TÆM’ ¡`¨\\h¦Wu§Š¼ a-†eš >ÏC$k†rÈš ¤2–›Å[qŒÎÂÃ3‹Ú¡wèu­½Ãºëp>ƒª˜ÊÔ|ÿà-¬Íã¸â3u¨Œ"ÀébtáÑ£}“1 ɤ6¦ÈõæâvõàYÅ31H.­áÄÌ` •Œ²õxG;Þ}1ú–Ê[²nøBÓ:_{Yäé´-%cP“YJSK»BôÁÐ xÚŠøJ5ƒ3ßÛÊÈ!¹yÀe².iË—kù»RoûmßàþŽgí9m¹¥ »g*ã,×C)@w#ïûÆâ²Md– !¦³Y"’6kô1ùþߤ³áQ®¿â·þϹôy:—‰M®ï÷ýÆK‚èîVó|$uïbÇ’Eq¥Q«ÂÚ—æÔ-lVKñu••,—ùýWû?7àf…ÛDB÷Z~à‰ño=ƒØ\Ï|O°îp¿ -òCH>ȳ­ÄÏ8ÖÍÇmœçëM2Ç&·a<~~ÿxÿž~rö˜6=Ø´) »üLÃòéf!ƒæÿ{å‡ÿ’µÚ0á$ÆbÆ ƒ-¹ú'¹äÜendstream -endobj -857 0 obj -2022 -endobj -858 0 obj<>>>>>endobj -859 0 obj<>stream -x½W]OÛH}çW\å)TÅÄIH`%ÊR´<º"¨»šØãdÀö¸3cBþýž;c;ÄPiµÛVÔ‰gîǹçž{ùyÓcši2£¤8¸X|]Œ¢ÓSÚý0+|À±É$šÑôtŽçé4š’‘”á,>ãhܼñ‡üØÂK8è~ÀÐñÕ˜â˜üÎNç´Hýû-’am¥)E!)—/2?\<_M›ÓCª„Á;' )KF™o çJ*¥Leñùgˆl‘ÿм5ŸqÏÚ6)é’îo®ÿ"»µN–tæp»Ï’à©P¯2¥DàS²†»ÞlD´XÃe!EiÉ­…#U "’L›Æm<p+Ø–a_‚~¨2ÕKg¯”äJ–Žœ¦D—¥Lü£ ;Q,á"ÅEU®pR -CN¾:µ[ã–J„Sºü ß’*-†Ã6¹^XÔÖÑRÂ÷ÎÖ -ñªŠº ².–uFuUáÁCKÇhoÖ*Y7~gm5]çiˆeW!»ˆX‰u w£ô¸õ‚Ä9Ž¡ÉþöŽ‘ _9#RÅ9‹œ.¿ÞбøÄñ%f[¹‡áᇃQþ"“Ni£òäµuÎ¥ìEåSW¥•¥E/²ËYY ÊdF]q¹ÜG¼e‘[½3O¹.W€1×+ÐÆ©9¯|ÏõZØu HQÕ3x—¦¨'3Ö#Ö¬3LQ¦DÎlùeêIZný5È“¢B8”xç\Å†ï‰ L],UÙ8Ë„Êûmµ@Å–DÒˆÃ)žÙ:že)–9j -iã¸?𕯼¶q[©$4‚´é\’i„^ã7hï8nm$ÚR—™ZÕÆÇH•¶V-UŽBUï­õ ¨>püõ7¢“IÌÒåålŒ§V³Ž¯Î(†„°BMÏæ¾­w5‰N¢8¢{HÄ·»Ž7 ®©÷Z¶á6;Ý)këÞ°Q·Ö)hø¢ó—†þ" ìï -žé<×.u'‚H—éÄýS,#†…2•KŸàñÕˆÎ8®N‚Ró§åM-Îéoi[°!úZ{Úʤ6ÊméüM*H îk+Û6ó9 n¤»¸¾½{dAÔÙã÷Ëßû@qx³ ›]ÕÉm4mÄÖç®R–¿lË™ƒ1Èe¨ÔÐF¯³~ZxúwTBA³P‘+ˆ¾?Ñ-º‚õ¥M´‘kÐÈ -£D• +…I]ýßè*Øä`{è¼^yÑËV ­Q£|­} ìè‰E—#”Ƽë¹D§ò£ÃÔ(,"~ÑNzùÛã?÷È0¨ð€ÁZ -š‘Âj̬0e¼6AÖR¾Óƒ¡C¯cAK½ª>’#™Sh¿íNó—* cdÁ2ßÜgíðzpŸü´C˜­­žo6ÒYôÕC|è$üË1XŽ ÂF áD3ù_èP¸NE~!hx¨{ç¢çŠøLºF° ¤˜HãZk79p¡W{áXT9ÞögŠÏ•Õö¦m¿Ä÷aÛð÷ÚÂö¬§ä1òg­ KL'üÔ<¼¡u€L`¡¹/Õ+‰³«K-“Qf"¦æU/ãÈÂÐ’£cŠÃnex‘r<£˜/<=Ø'¬àì™ [LȧQÑñÉ´[ý~¥¢ãñȋоŠŽ#úÆ»W`'†”lw}§ÐÖN†R] 6œÐ¿ÕS¯¥au`tzJÊûÝÿ¬£»>ÐQì©Ï+£ë -‚;ðâ~€pÉëç·ºîiºïœ>íCÔSZæHPIƒO ÛU]4ëé gl˜¾cýºÊŒ ‹„'\ˆ'³3˜S  ºG°†÷ˆ'°Î`àbàHÓ= kÊ{ËF¸{”»Yô»çúÍòxŽß -x†Â*ãçMR5xð/Þ铆qöü–ÔïùÅKˆêOŠ6DL„@"ÛÌÚÓf'Žgó(¦ÙlîÝ—o_è»Ñ^ÿ.uâ!ö2Ÿ…ãGó1~õI‡ÿu­˜Î§˜ØÞÄ8f»hË?þœ#fgendstream -endobj -860 0 obj -1525 -endobj -861 0 obj<>>>/Annots 39 0 R>>endobj -862 0 obj<>stream -xVïoÛ6ýî¿âÐ|ñ€Z²äŸí–I“t»›C7 ´DÛl%Ñi;þï÷Ž”,ÇHV` àXy¼{÷Þ;~oEÔÅoD£˜zCJòÖõ¼u;ouƒñ˜šr…‡.ûAŸú㾇ø(%-±´KñÉ›¨‡}þbá-8~ Pxק(¢ù’ŽG4OÝ‚.Í“ö´ »–t?£ÏªHõÞÐdN©Î…*(Ñ…-u–É’¶F+rKg²Üá?÷¢+üiJ‚r‘¬U!I$‰Þ––ºäÅ?Í¿¶ºÔ‰zAŒSÛ3‘/ ~Þ%UnŠ¨þGÕû:w~݉‡À&òѾ&ísÿ¨Ší#™ƒ±2'ù(“­•o«Ýƒ*z›L¾Øcö)uJútóîŸÉÕý-u¾ÒÍôþêÃÄ=>“@JÛϤӉǨé˜Ðƒ‘¤—(YÊuêÄV%Â*¤šjiÐ¥ï[….â jZH|ÆŠ"eJ…z<àgôC—)¾X}†*ªR«Q¶*&‰‹~ ²‡H¼oÒ‘)-®™¥Ìµ•ÇÞß¼ ˆæ\DÝÈDØ~vâ"ÓÉ7Aþ›RîP$ez¥ œt Ò\¢cç ­’La[”Š•!³Mք쌴–Ù…õªØ‰ U˜µÌ2.¹âPxÉ8 -Ÿ°)”6 }O}ãjª´ '•‡€ÿë¤U+"bYüñ¾Õï ƒ74ŽÐÂœú£XåŸ2š± »xäþž*å -fV–Ú¹s½óÀsên £Qkˆ;f˜Ÿ‚È“>—ù¨xîpiE_¦#l£[—*ÄÛFÈ”ÙÔBƒA€¼{œ¶{hÒ ž$=…TwJî]¦àŽáà”¬Å5ùÕoÓÏó)„Ñ'ÌÚ iÐïïFqmF+¼{Cd¹„¯ ¢®Shc0½`ôz§‹¥ZmAzúŽ~Ÿp’%âÑyÚL4 <ÂœðЕ›kô5•V¨ìØ¥jÇ—U¦"ûû,U?šG, ]ÒŸò•ú+ZJ7:ÙBäÖ]9ïŽßÕñÛÚÿoNöG}äæ.©qÌQ‘òï­,V¥Pendstream -endobj -863 0 obj -1423 -endobj -864 0 obj<>>>>>endobj -865 0 obj<>stream -x•TMoÛ0 ½çWÝ0ˉ8É1mWìÒ-z)0(²œ¨µ¥T’“õß´ì$: ³öD>ò=>½ F0Ä{ÓÒ D=¸ÊßòÁÍfp|Ø5~ a2Ÿ±1ŒgS|OS–•PR.bšÃ·Ç·s /1{6›B^´ëCÈÅeÊ&,e ƒ»%<)]˜½ƒûî¸Ø(-a!„i´w_ò—A|;>¤‰’ Ñóâ2ßH'#¸•o²²£«wØo¤†%¯W”ƒÆáî€Caj®4€0Ú[SUÒ2€Ÿ²”¼¿‘!(z¼¹Ž¾?<åPKèCˆFX(aÖá -鹪 • aNý J&¡0è®OnyQ@ä ^)—¼Â’£âBîbÝT\Ô¡ß_š×òâùùsˆ´â1Ù–;·Ç\ÿãêUÆ!ªÏЪU5Í/hš ®½¤­€H7 8™dgf ®Uã”Ñ(E‚_)¶ÖìT!Iˆ²’¿Õª’PK®‘o¶È“G1c-­8„°ô\¯ Ž2ºCÅ"¸7à¶R(^ñIm-ezƒA9QÖ ×”^XIÙI ÜÆŠfí9ïT'îr€®vÌî÷ƾBeÖG»”îkÛ‡ÒkÂóÐé‰}Ñbâ VÖržbû8kõqHªñ ´ó’˜öµí ̸)ÓÊSë„ýF‰ 1QÌ„Á>C;ñP?Îsâ/m3 íñ­èMq0Ò9Úµ|N²i·Þ;’–£I¦u¡OKB7§ìw<ÆyrR4Vù÷Þ…µ¬WdÀ°ðpø;PoDâ•—Vcé;¤ØJ}ÒØ 4Üãã¤|ÿOØÎcôôǶ˜uôŒ²)£s“ª>žmËÅÝÕ­y‘Âc¢©¥4t¢¢Ö„d¥R­´^° ZØfƒBk¯D+R7F”d<cm-[IJ?°æƒ?Ȥ«¤endstream -endobj -866 0 obj -736 -endobj -867 0 obj<>>>>>endobj -868 0 obj<>stream -xW[oÛ6~ϯ8@6ÌùçÒ{h»õi:Ä{ Ñms•H—¤â¸¿~ß!EIV4,› -(5ÅsûÎw¿Íi†sº]ÐÕ åÕÙ‡ÕÙ¯«³YvwGÝËnñcF7 ¼–w·xÏ—ó솬¤ öÎh±¼ÊéÓõ"[ÆOP†¯°Ð¾ iúé--f´ÚÀðÍí­Šð+ùäãNì½´´Ìè£Ñµ­­Ò[úòþ3mŒ¥B9oÕºö² ¼ß¬þ:›Ñåb “\joEY‰*¡Å[DíwXU¹ðÊhÞͶçØζ/¯æð’ËlžÑ½¨Ö‚„.ØXܺ¤ù¼Ùº¸åïI×Õî™ ý¡Õ3¹£ó²rô0‘Ûwt_kº7¥°Ê=¼¹ áè Ë’ÿ ¢g<¼dS¿)]?_6ª½*ÕwÉ[›°æ )¬~)ëíV¬KIïOâ!úlŠº”l>?¼æJü‘¼¡½5OªD8\PX0V}¸O¬t¦¶ùÐvnª)ÉIû¤ré2úb!&ÅŸ‹:g|øÀ©¹r¼„}µƒ~ ¯Ÿ£¡ ᣽pî`l1ˆ»^¬¤&1`]ÈÇd*}> RAfú)ejè`ê²ÿ¾Õ -üd7Á¸ØsÄR1Bرµ™ô;á[ìvúãÀ³û:ß!Þ|g€NcYé'S"Ê«§f€cÉÖ¬pï(y‚,ÍV5œmûnŠØ Qx± þ^èL³fiqƒfæ¡ìBH&¨’ùNh媈ŠôÐ2÷àHT‚«‹‹6ÖðvIµ.¤-¨æÝÓ"òÏŽšJo¬@̓aµ•`’,”ç¤t¡PQµ(ƒ†*+  \QºIO2›ˆZeà ‘^¡)Ks¦€¶&ù,ª=ª>:9¢s:F‘›XÛŒEF´Úµ¤p'ÐAz³ç²u´–2£‡R­sSUè–ã|®ÑŽèTš÷5åÉy‘uÜrlšÁŠ:ѯC÷‰!îhnS—ØÅa…Ž–1`S%„Å6Y"£_ã&Z;»Ý³’¦µäc]*ˆóÕ8Î8BYE¦öˆ<—{x˜CrgNQí…¾ÕãþP¬3×ìié’Ƥz˧ÂÏu¬“óÁËËy6KÁàääú9î2p6¶KJh=íŸ!ÜŸR‹ªüæò ÞÓ´9„ö>”¡ôþØ„ÀÁ5½F\›àÑKáópn$K”Zì‰íyª÷ÿ.¹‡Zêù] U¾”|ËM¾ÈÚ8K«âz\ÏsSkߘ °9åq,‡‡aóª’#æOäƃîÑ¥‡µ{ù LÏXªÆ%ÏA†¾ìX%Ú"òôÒáóö<†ÇÌæE[*æ8²èíñç«`éL~…óÔ»Óø’Kä¦bиQyæàÂ@€sØÊ})òÐJª8Çd(ÃÓˆ>=Aäbl¦¥ó².ä;vx¬ éZé)Š|Š§éLz_õJpƒx˜ÏÌM!ǵRUʧM¡÷RÌB:ß?2Gƒ$/XáÝ鎰ÎÔ˜–~F‚/[œg}oXs‰ñ74ôàäHD]é6Yc¼ùÚÅZ>>>/Annots 42 0 R>>endobj -871 0 obj<>stream -xÕXÛnÛF}÷W PQ‹”]ì}pàºPi­¾hWäRÜ„ä2»¤dõë{f—)*6ŒZeqw®gfÎèËÅ”&øÒjFo–åïÖ?®/&ÁÕu/f‹&4›¿ f4¿Záýj\‘‘”àì„Þ\-ñúµ'‹é"Xž=\ƒêã T„w°dJë-¯V´ŽÝó ­£Q)ò?l¾)…µÕ¯×Ÿ.»yszDûTE)ÕVZªRI"ߢXTb#¬lGº¨„*ü‘{muRÑýíœd™CYɘXÁ^›˜5LhÈÞû ÒáL> -¾=¡»ºÀ`E£FCÍEŒGš‡¸;AÇ×Í[¹ÃA7˜ê*"—Ö6&Í æÊÇdR‘ë!=Ô ÌZ…¨é,&‘¡ì1 œV–Èàâ -`ôÖˆœDÓÞÆÓÚâ -†Tv†¶DA9éQ*Š-ºNmÛ©Ó¨huü¿ðÞ8ú¢ŽùB ý·à}î £§ÒCð§Oƒÿ]É·®¥:Ô0OÑgFæç)F)—ŒesðKP´cÏRctl¸`´ƒæ)AØ0—•CžÊÇÛyÃ¥ªÔèz‹AŒóB>Ví3Ï Üigb@2ÉœÙÈl¶¹qÊ&P/ƒpô¯7#<ý£¯ÅXÂîÌBüVÇ4Ù"ÏÍPÒ n¥Ø¨ S\±b7œÊÍ“i‘ÅN]0ÉA™ë\6ƒ‰•™W-*½å’Î}Ÿµ–«yRÅÙ9GmªTT¾ü]8?HgSú-ïs» îHekÈ(·y†?eŽ¬R÷L˃ÐÙvÛ¾í‚.SKå¹gò¤‡+êè ·>¤[!Õ"ÎPó‹£0] ‰ý&m| ”©„4ê’о™⒋ϼ4ö±N rªyQ@Ó=Ð^€YñDˆ]V\¦ÏpFImC©Ìʤ†%IvÍÓíªÈåìú¸ÎðÎ-¦X2ûkš‚}òJy½pì§Û)çØ趥®èÓ7'ÃÃã¤m@ÞŒWÒÑx¶ª+üéB†8î"e¤ÈÔ_ WFçð«8ƒœ·‘*‚Ÿ ÷¢SNzª|ty¶¯€ºAX|¶=òØò—ÛݦW3ÆŠˆŸú°5û7(ù„~ûéb~\ÓbŽðå4]L‚7þŸŒø[ŽJ‚Яh±@0ºXÒǯ,»Ûé`,ö£´ªÊ·aèÔnlÚlÃÓÓîŸþøÚÇò8pI¢7m2eS.l×BÛJÊ€S!0e/»-ÄW/«n…±0 m~½ï8…+^[J€snådÜ;P~Éí[ß\`™Ø €«áh ¢,³†p4_8Ç:ÕÂ&Îx·š¦bÇt£åÔp¢D Ã5ïPpǺݪÀA¸ -€˜¡'vß]ÜD•‚¤Ûv;c½áÝU³ÔN—+ìÅËë©ß¿nîßÝУ?a•£Ûþ‚È÷Æþøx5Ã.ñèÅ1_ͱÁ¹Ó3Gª_/þ¬Ä®1endstream -endobj -872 0 obj -1701 -endobj -873 0 obj<>>>/Annots 47 0 R>>endobj -874 0 obj<>stream -xUÁnÛ8¼û+Þ­P1’,ËÎ.zpš¶§m- —\h‰²ØJ¤KRqý÷Rr,¸vÄM“3óÞÌÓ¯YB1þZ¥´È©ìf÷ÅìöcFIBE|½¢¢¢˜ÅqLE9ß -ó,KAOóÍÃö醤"«©æ†¸%2¢êK'µ"]ÓQV‚¸œ”pGm~ï]#”“%¿q†×µ,ÙMñcö¡˜ƒòUÎRÊÖ+<§ø7‚êÒ%ÙH)K'¤2¶`ôeóHﵪå¾7Ãýž[·c%¾¼@@.´Pâ?¾}š%¹Ì“ Wv”ÜÅl1®ZÚþUŒdy…\4¥%ɇ j‚J%o[Qш>½½£4ñd5]c7ÙÝdm ¼/äÍžÎä¯Yé8Ñw(ŸuF†ŽXOârExÂsFTë¶ÕG©ö^LmtGhiµR jD{ÀO ¾”á¢h€Ž’ªWTó‹öí÷MñoÀ¢(ÍC¹æßÑuÚònÇÑÔÔ#øžøF rš„â»V„ÚþpÐÆÁ^’  -wûÝ -nœS¥k"HóŸÎŸnÞnPmx'œ0°_Û’rF·#¡3Ýc# Ï)íFj¶Ñ}[Q(ÌôM-KÝ+GènEVXëÝqÅ÷¢ƒ©’F ¸Ï²PÄJÔ¼oíDߥ6W¨Ð µ½¤úr–­@rœøí®³¡U{ -°8Ar¯4Jž)áðß„}Ö%m¸óÐÈTºò_.–øìh‘Äl5®F{ÇXúLã4tŠ·G~B¦pÚã9_…v÷N)9d!ô#î ¸Ë;Äj`áq§kìæëŽaw²Æî:E.g_ ÂYæµX«4§ƒƒ-¬Åª,½£“ø,`dY4Ú·k¬d4¼ØÝÏšNW}+`e®¼‡ÎÎ Åh|îÕ^Ü"€­Pšë²u¢l¸’¶ÃpfÄXÇN€´¯å•{¶÷ô¢ã, †R_Òö0¸ðŸ1=Ësz^ -¨‡ÒcÓ0(ƒaòWðz¼'ÉWÌ¿/ð:˜Œàíæñ~C_ŒþDЃ.{Ÿ0‡ýí˜þT4›ÿ¿­2¶Æ;ó%ÍGŽ_gÐÜçMendstream -endobj -875 0 obj -822 -endobj -876 0 obj<>>>/Annots 54 0 R>>endobj -877 0 obj<>stream -x¥WÛnÛF}÷W Ї*€D‹º;@ -ØIÕä!(Z«ŠªKr%nBrU.)Eß3C.))M‹ à˜ÜÙ¹ž93üë.¤1þ…´œÐtAq~÷´¹ûqs7V+ê•{<Œi2›3š­–øûa…?KM;¾C¨é~Aü~ý@“1mvоX®h“È9Þăש:Tº¤y@o­«L±'EïM\Zgw½1®*MTW:¡µÉô‹ÍÇ»1&3(<Ÿ]¥sªJ­Éô¬òH±Û !ÁöFÓ0˜°ð<zW@]WÆ®‘œQ¶’“%ËmRý…Uj-m¶¤7;·}A‡ÒM¢¼Íµ*Ù‘ÓU* ¢‚šÌîM¬2:}âóÀ…"¡Ä”:®li´¸7Ãiãf•ªŠj§KÇêÒÒ"B(SqUC×!=;QšÙ–k†€Ó¨€³uòÁw¨ÐÕÉ–ŸxE*ËìÉÑ!¤fŸê²Í¥·¬ŽÊd*2™©ÎCr¹µPQ’ƒ›j¯I> LS E*SEÌÓUÐzs ˜&rñTdkqç†pnm•e«*’¡òëOŒšÏçHCN³E¶=ß]<æ¨WÌ/¯ 'Ê¡XHF{¨õ¨Jl\纨ÄIICW. jó3YÜ ãÈßätdÊ û©=!*üçbµÃ£¢ß -ó™(Wqj -MÛç#uRHTœøyKQ‰ÒhÀªvHèMa×Á­7–t¡¢LÓóû§Q¤äÍúYÊ+†Ûbgö5—¤¢“©RÁë¹_OZØh4â£Qî’ÝMK Èaý\Äš¢ÚdÕ1ö†:N–ó`E³åÕËiΙä‰ ÇµÁ#7V_€û(Ī H#; À-‰k¢3_u]´Ï, FY›¡Ó¤,0|i -†gLA׆»šzPôa{¯¯kŠØe¢ç0Šûµ§‹q§çš©Ë4ÍÖ$ü)|2pypøµ¸ àz‚lÁÝù’³&OmžzÝÈØbŠãËœ1uô»­ œcö…ª8i.e)&!^‰–m$•nN)ÓG}‘½ àÎj†^¹r§þËìMÑË­“$©7­]þ5=vÞó506«ïÑså™Y­ÁžÊÉ­ÌŸœ/Ó¡;ç‘ÍLLÍ©pêÁš¢"n¶–×…®!.ýYå‡LÝâxoüJ“@ï~Ý•˜>Ö…Ì’ÑùË–+ÃíVr²²¾®vó¢2}`àvÔLÀ³…ôz}Ó{Šþê‚ZéDU˜ƒ‡ŠƒS1ø¿ÑäµH†¬üLŒ—R7–Á|ƒz’÷C\%¨6·ã)Ñ i‹ŸÛX·/¼·ž09žÍ2Ž„“ˆ‡QCE˜F‘x*,U±ç‰ÒŒ½¦Hxd=ÌÙÏÉx<¾5ñV—ú{©àc© T¿%úÐö…_T‹Ð 3(ãr>ðb«`òÓGÎIÛÀ2¶_z\`b‘?Vúóæ5µ?˜»‘±Ž -P½¢çÇ÷O_•ÁÑ4AôÜmî6•ìÜ×ìXýÝcÙ²º‡$sÀW,õÝÙÛéÑ9B¦²½køìFi·³œé„äh0Í°nŒú>³tÝ\~ñk;Ö÷ïqíle¯¿kÛ+ô 'ÿØ7ÜÇh.R¼‰åýHs›Ðr>ÿîd\C‘ž(¥‘˜Ä%…íöê æ¿t¥Q ýÔ)6ݽQ¹Ÿbx´¸ÔÖYâk˼pÐeno}ÍÞŠ„b3M *u—%®HL¶÷žÆd¹:æÅ[­-²³‡f»ívà TÔ,½¼Ä¥Æ|bÔe°$‹ebvg1Ø Xˆ“#s– - ¡ÆèšO¤ïœKØæÆ2va]2›hv,v™ÉM³‚JðÑõœ“ª#,þ® u´&Ÿ%H°GÏ -°gå‘ÁD–,áÒ½pE ó¦%›U nd~Ú²Í7~ùoOjâ7[ÎÀMø¨J“%¿ÀÖñËÝß‚:!}endstream -endobj -878 0 obj -1534 -endobj -879 0 obj<>>>>>endobj -880 0 obj<>stream -xuTËnÛ0¼û+æVˆUKqü8&MskÑ".zñ…&鈉Eª$eAß¡$'¨‘Z0 ˆ\ÎÎcùg’cÎ'ǪÀͲšÜo'ŸÈsl\Y®WØ*̳ù|Ž­œ>+ŽÇAG45b©ºjïŽFâhìk@t¨±1½¤eX[ç_Jáu@ç´ÂÆk«¢ðO¢Ú‹ìjû2™cV,³1§¿‚öÎâáf¢e1äÑh¤°°®ÅÞ»6膛½&+n&ûô'í!"vü…„³Û©CÈp'¥ÁØg èùMV$ôDFÀù~qÝ´-,!êZ ž Œ×2:oÈi¤:´·»¢xåç¦g0l¤fã.á]íˆÔnÐdhù¢ƒQ·^–¯Û -À²¸¡6‹õŠïÿ”ä08¶ANÑ’c·ëM¶üdzÛ,çƒï.ê0Þý¥å³"<ým¬¢–o -[­Ujx¯ ²w,U€9@ öúd\H¨rM ÖÙ5ØÀTBinMßàYL/ȌԠ3AÐ ¢ÄH—ZÑ¥jÂ2?Þ©†{D -P;SQZÆ‹'€t~†—s;[ekœÜËÕ¸~ÎuZ~ËÙ—Æ{¦*Tj¯?b2¨ÑMï ÓS…ž ³ž‚+*úJ×8I§£kµ—"è»áô¨éÿZ9·úȼ-ob‡ºñµ :\TǸu€`_Œ-3˜4ô=ôïç!;+ÅIõ–:—¦f¥U>ÔÚW†cà,ép¦CZòu–z(̳eNÕå4wt]™C/Öåè›aòΓÑ}(Ä™ë›c¶› ýQ¶ieåËU–nª$åûôt÷íþ?¼{á8âÁɦ¢›"Y—¸Î†ªÙP6½œ…ÅjÁ,ôæë´ŸÝüœü¬úendstream -endobj -881 0 obj -687 -endobj -882 0 obj<>>>/Annots 57 0 R>>endobj -883 0 obj<>stream -x•XMoÛF½ûW rb›–dEŠ{s ; P$iì$=ø²"Wæ6ä.³$­êß÷Í,—¢hEaÀEr>ß{3«Ÿ'sšáoNë]¬(«NÞÝŸœß^ÒbF÷[ÜY­ßÒ}N³t6Ã7Yr]¨ºÕžV)}ýøá/ú¬}ešÆ8KïLÛ²9}76w»†>Þ¿¾ÿûdFg‹%l$WY¦›†®m½+éÓ´ ?Àîæx‚Ý]ÌÓ?¼Jç)}3zgì£Í -eùBÜÖƒÛ†º†¿n ‡DÎ:oÚ}ïz¾J9$7ªt½¿%Í罿Śï~Ô;2VlÜ©j£h‘ÎÒ%y]jÕh2ÜRSÂ2mrdŸYi´Eî­C,š5ž¬jÍ“ÂÁ‡¶Eœòœ_„ëºtÂiÌý„G aÏCù£G|w¼ïv³äù6f1Ìb]e6†âš•¼¼WÅñ~ Y€«p¹@§¢°@¿ˆÙŽšúê˜Ù;«' M¦é1WBhÑJr¯~húô2ÓHP3¬KAŒ„È2,–Òn! ¸ÐATB²ÂC ¯ot¹¥‡D6— ^0£sÓԥš§ËŸNJ…s@«ß`_, Xêh¤—ƒøõp-Èø4Á)ldUOÉÐâêxœð°BÈ¡N¶¡,|N6z”mœB8éæ+†*/baÆÈ€>$­ž”)Õ†7Fž}À¡?ÃBç“]Œ3Î=¥+ãxå E²µÇºl|▊ͲªÃ9OÍýï8‡Ih±yœl?‹£ûòb–åí·åÀ€·_™ƒ°IÛ¸˜˜˜ËóÛ·ý@ Zºâëõÿú=~õÂrÍS ¿PäÉâ’SÑíÏ“/]$3endstream -endobj -884 0 obj -1797 -endobj -885 0 obj<>>>>>endobj -886 0 obj<>stream -x•XMoÛ8½çW t‰ -¸Š?R'ÝË"I“EmÚm¼ír¡%*f#‰Z’Žãþú}CJ¶$· -'¤É™7oÞ<æߣ ñoBgSšÍ)-.G'7§4™Ð"ÇÊüüŒ“ñxL‹4^¬¤‘¤,‰Šî”®ô¦¢T—¥¨2r+áh£Š‚6Ú<á“[ѽ(—‚°=#QzC‚ÖVš°x‘•ªRÖá´¡Ú¨gUÈGùjñíhL¯'³dŠËãTW•L̈œÆ÷ÑÓdœœŽzÆiÂ’ÑÚñzºÕ£D,’›4v¥jÒ9QŽ³-銖q *t* -$qs–¶ÖÉ’´Ünd©¤R¯+ÁïÇ®&Š 1Ë„+@¨< Uˆe!9¢ZÇ7s(|èÉͼÁ5¾—i¡–Ío[´cFÔÊtm”ÛÖ0[Úà''õvØŸ¨D¹¥‹¢PYqŠ|S@g!E9ê„“]úåR¨ªÙ“»š¬r2ჯG(2ÍgódN§çgø „ ÅÎ'ÞÒä´áÄxšœ÷X1ONú¢äFUL(SUÓH¡–¦TÖ*]Ù€C›1ŠL¿9اÖ^lQ +‹|CÙÚößû†ogÿ°»£µÂÁ5½lfŸ']rþz@ðʺmѾ!šâJáø Ú™ãDòE¤lž8CËö›M‘—v¼Þ °è"…F;OÑKtjø=›Öä×^àtrsÞÕÉü,™àOì¥ð|¹¿øpyAŸŒþ†qDïtºfƒ!¸É¡¼Û_ŸMñ…,þoÇÓ³S¼=ýgc> ïÖ¿ŽþÄ6¦endstream -endobj -887 0 obj -1782 -endobj -888 0 obj<>>>>>endobj -889 0 obj<>stream -x•WÁrÛ6½û+vtRfÙ’mÉéÍ©›i&MÜ6ê´_ ”“¦õ÷}»€$ -r:ÓñØÖˆÀâí¾·ËïgSºÄÏ”3ºšSV½_ž]|¸¦é”–žÌo´ÌérryyIËl¼Ühò:³uŽ-Ù‚rãtÖZ·¥F»Êxolíi£<Õ–œV%UZÕ¦^™šZìÿëËÇŽ÷Ö•9)ÄtºqÚëºõo–ßÎ.éíôj2€1ïã¯.>ÜDlc™z£iu> -v°ÇGÑÛj|K…)5e€„Ô›v<dü ‡Þv€O"ˆÙ|rÍ ¾ªj¥Èok ñÆkÏéx½[Ž¨ÃÖÑ—%­¶„´ÚÎI PUó×w?ÿöZ1’´+›k,ã¨Ö}HaŸBH– ‹<üF9M!°¢Í³–~YžAšÏ®ÈõíŸgøÅÚ"þŽ¦È ¿¹}7™Q>ŸÜLè³ÍM±e¥ŠHíUÞy3–Ï8ÙÍL¿º*äMÕ€*þ˜mT½æcY¹ñM©¶I£ªr£J»Nê·²/ç",ÊJ“=í˜{%=|:Æ=¦U׶¶žÐ¯¶×ÏÚóñ¨W—JS™Vµ"óHMçµ?:‡",­°°ç¥¶‡«ÒÛ˜©[íT¢ˆ%Cߢ6Êå‘׃œ¨Rþ‰µ“ãSÓp"è½û‡¯¨RÛ:À"G(…q0 >X’ƒ[õ¤k(–d™íê6UùÇB 4Ê©Jeì»Ù®ïjˆ1+ÉwMc]›VŽUc@øðæ"V2.€GÀìeÌÕÒ›HBWìãíì1ZûØTzS–T(S&9q/s[…÷´Žî²L{O÷º6ðˆøø`ªuè–jìò%”VçåY8Y‹.çvG}Y‰''å§4n¢  ‘KƒØ`UãÙC£#ÑcÓ†=kt/Ø­“dµs辈äX¿ÓCnœÍtÞAŠ™Š¥ƒ6DE¹É•~A¥[:èã› -ÙRؼcâ[Û!NM¶.· ¨ -ßt%œUÊîL\2¼X;Û5Áã‚öR  &ÌÍÍýKèØx2º£ê-üÌAúß;8=õºLÙ‡K€Ø0·“#¬Xx“kgÔ+ÂWƒm„¶bzkè }À|“¤sNà@Rz|ƒ{ÍKÁŸ‘Mál% v$3ŽN÷ÿ±Yñæšzþù¤ä>|J™Š^Å øîô\Ò¨ q¢¦)¡~öÒ.äœê$gHa¼Éõ„Ðû`9!WѳÁýÃ!H­ULê$8øÇL ê‡aiåÄÏ9ò?Ië$«¢Tk¸'îfí3ø›ÎTjeq»‘ÂëJÛ{Æ.ΗßÄ+•=É÷¯\^¶Î Þ¸Qè7næ8«@¦JΪÈlÕØI¦*ºóaÀ‰þèƒ9ï‘Ó¨Iÿ^F´2-܃‘î\ÅöF8°yßeð»tDÝë~hb{8ýàñ]Æóâ Û‘ÜQf][‡'¢5P$2$„ä8êh‡Û/Íðo—nÙ‡jÀf5¸Ø9ç8+òrÎt¸Nôw½°w>‰N½TÒãO[?%&t/*à7,÷ e‹E):5gÚk:¨EŠ¢¶íocÖ›¿r&Œvò„")ü „Ü^'U Wå9œÛ‰R¸2‡H…¯œÐ üÈ7:ÃmqBгM졯qÉnLsræ78üa²„ãœþtt€2÷åйðgìéí o,ÿ=cO¯oå…âðZ5ŸÌ!ÑÃL(*– -&ax}‘ih?¢‰æªýÜý…‡¹üdD:Ì7bc‹(lÇÃk?° nK¬DË æÕ Átw÷íO¡X»áp0Fí‹'×ÈÊnÄ‚ÐẇxËIVì;w°*ƹøpgÊé|1™Ò|±˜ÜÊëÙÝç÷wô»³ß`yto³®‚“ȤÎÑ߆åo3¼ÉæãÿûZs½¸Æ1²õjÊñ@øgÿÁØÓbendstream -endobj -890 0 obj -1613 -endobj -891 0 obj<>>>/Annots 70 0 R>>endobj -892 0 obj<>stream -x¥XMÛ6½ï¯ä²°«•ü½zHФŠ4mãc.\™^3+‰Ž$¯×ùõ}3¤$Jv¢E€$’Èá|¼yóèoW Åø“ÐbL“9¥ùÕÛÕÕÝû1% ­6ø2_.hµ¦8Šã˜VéhcËTÓÚ”:­my¤J§ûÒÔGÊíZ¿^}Åæi»ùv<¦Ø>úT`“¢}¥KJ3“>UäÖÎüÚÑ«O¿½êoQmIívÙ‘ê­&Úé27UelQÑg•?(ÊÕ®’oæY½¦àÍl0¦ÛdÙ >þî±´ûÝÝÁ–Ùš¨¼;ܽP]š]¦J}CªX³É‚&Ë(ÝêôIŽH·ªxÔëÞ!È‚¢Áfõ¨LQÕ²öÁÔ[#S°ïVWœ>É!%ü¿¿~½Jæði>aÏrZŽÛ‡Œ>s øÉT¼îRÏYðö‚ 9%ñ2š{[Íöþyå#u5õ'­•TÕ“d®5"î‹‘¦¶#Ú©RåºÖeDoŠ#IÌõVÕD]jdÎåK^)¼(l-9A]®“k¤©2Ug†xQ¦75}+N¶…S™-€Ù£]¾4Dâ,µ`{WUº¨Ê²ã }×¥uÎùݼ¸KƨïºÃï«žð¢Ó‰V5 *Ôœ‹k7MÐÚÑ8ãóÔˆÙ½éÒ¯ìfjë½nÀéæÈÑJB9'õÖVüwwJgç9jp1^Σ{šÍ¦Q XM¯Ä?5ÀÀã¬×Ð6miô˽ijé¸^mðÀ!£vìG…ÂÓ³Êö€}EòŠƒÎÃqþ|~r~‹)i„0çûþ¥’wW -IYká"*Ù×]iŸc¥[g¼ETjóªÍƒÉ˜»¦ÞzNG1(‹[±ChË;>Û´Q©ß‡ðÁ4¥]ïS½ŽhÎáú6TwRd¤ÙyQ[Ð!¨&[À sËË}¿[8¾x±Xø9ó³j>‹!”©ü랺ÊÇL3!™ÿ®_j·0cÓ¦uCgÕõ˜N"¨.ÄAx~NSÁcß›¶Š§8@(dè+¹ÉÓô«0@ÓåRà.ÃÆ=´1O—÷½ˆ›)ÕòE܆ð@n§Ü–Ú²ÔÕÎòÜðLã[å<Í ÏI,gH<ƒÍ í\Æ>ëgI¦²g¥ŽƒZêþܦ0Ñ 2È‚Qê€lŠGøë@€×–¬¶Ì–ÙA[þ@„׶¸n`ëÚrŠ ¶dÂB g䞺Æ÷øÂöÿQsV0JÃ3áÁâ>š„Ïr<‹ÁWÔ€Ü7ôßÕˆfó©³t’@cHhžë¨Ol§ÌÖ›”ÌymHlÂîîÿ±f™x Kè ˆ°´q'íÓg;&»8öÅÊ ¢þ-yt³›á8gmçÞ5úÖËÙÄ ?„ÛÚv–1X’™à#Ç–’úÛQ8‘¢dîýbË5”’Ï[£Šß‹~ì´´Sµ"<Á½@I.'ȸµxƒÅâ—gîZWiiX<Øgh"1%ü¬_R½«!I¸;ôA±Úh†©8+êÏd‘e®VkÖ?ƒd¶É—ií>¶¬ã”Í`‡ë„6W[{\• ,öÏ9û—í «rU­ƒPÎd¦K-=Q¢ÚgDË}Ì:}íÄo)iÏ$C´¨[Ûæ4TÏîÞ2´6Hpçÿ™ûZ é/û?ðìT  9tàbƒ¢Lv"ÑZ"xÓ©–Z£C_¯ùM;~ðWŒ+/Št!î»yîÑ•»ô(¨µun -"S¸SŠ7Ìd2]gW[ðS“UC‚¨j¾oŠzä¾å«*Kë–Y)¢8'r«0 \ãòh÷¾ÏNíw|‰awÀØ-çVþÔÍžo¾–um&—.GîžNN¼@€pΔ¢UÁNÅzP‘ÑFËW—ÕUq]{E§p{DçÔ&Ýgªôw*()‘B"nø—MNÃƲÆfw:ü³oÈÎÝ·)™$¸焉º—‡FSœ™Ùø Äÿâ‘LÆØê*ˆÍ—ÑìËké°Ë³Zh¸)ŒËrµÓ©Ù˜”Yœ~â$u}‚QÑÀ°c+¾}þ,*€Ôs´†…ƒUMÞÃi~`òÜæ^oüîýÒ§)™/pµ›ßO¨Ñç7ß¾¡?JûÁÑ/6Ý縀˴b—p™çÅ·‹1~AZ ñ"ú(!®¡$ ýÒÝÁ¼âíÓÅúO¶NÆüõýóêoÑHœHendstream -endobj -893 0 obj -1657 -endobj -894 0 obj<>>>>>endobj -895 0 obj<>stream -x­•ËnÛ0E÷þŠAV«–íØiwé (Š6-¢ ]dCStÄF"]’Šá¿ïêUuvE6VHÎÜ9s‡ü=IiŽ¿”6 Z®IV“·ÙäÕÇ¥)e;¬¬¯6”å4Oæó9erzí)W^:½UùiC·¢Ú -Z$ódE¡P´NT*(çéÍyö Á}°Ùb]Y>•N‰ ¨þ‘÷Ì©_ÙY'uë6W£õ\;%ƒuÇ—¶´ç‡õ™Ê)ª½ÊQ…Jädwã -ríeíyOÝ kùMƒ.W«dA«« ~£xB¬]Ãî5¥¨‘Ù]¦ eHolúd@GÈ ­¡ƒELêƒ0¹pyËs§KE"p® -Åî÷Ú<4@Ÿ»3[pw¦M°Ç“·•ê -ys;ˆ±ÕÁÓýÔײ áé -ȉ¬)g÷ç`lr÷õÓOÚ+Wiï¡Ðs0A¬'¡¬Ð¾íGºDùH])=h<Haˆ¶ÐMÒš]©eÀW8(e®}PŠZ¼ -ô¤ES¾’µÓáH”kQÚS‡FÙ9Äö7ŽˆµÀjOtλ1Š‚hû¨Þ>uW)d,E‘“RyO{Ælö`”#ÐÀ²¤.F5RÓ‘\ž¾Ñ‘ésQl1T-€„î ’…Ú`PÊVoËR£AC>D`æAÀÊÍRËs$@#&­0–[Æ)£©øƒcõt¸½Œ&f® ©]Â<¨&ÛÐ.‰²Tì­¼*Ÿ°iÈ°ö02/Ž´ùÎM•$á Gøêãe{‰Léìæó}ê)ç|`+ùÈ¿YeϹŸ¢H¸3ØEç0óBžSi0° b$¼Ó‹¬ðÿ׬õô°ŽèË! N$3™±Q0”0NCØÓùÇ“á>D›Á·hÞ¿è÷çÍ„R7“$v¸kcú_sÍóJ´‡|ªøŒ‡îm½y´õ†£.sxcç©ÀÌŒ“½FªòŸ¦:JyÜ`Áñ‘ÓPÆ׸‡"JqÔ™”þ Ï“}RÎé>>>/Annots 77 0 R>>endobj -898 0 obj<>stream -x•WËrÛF¼ë+æà]%‚øöM~(q"ɲI—‘K`I®`a,@Iþúô샤(:‰KR‰Äcw¦§§{öûYL}üÄ4Ih0¦´8{½8ë]Î(éÓb…;ãÉ”õ£~WÒΛ¨YÓ$¢ÛZ•*×4o«J× ©’æ¢X -J¢$zx¹øfWŠ‡n¥î Ž¬Õ™DqDï˦ÖY›6J—îÉ!ű2™ðs¯åZ•%op¯š 5iîS-s)Œ<÷»·½!ûH)µ•ôE•™¾7t³ *ÄYÈt#Je -Cª¨rYȲ‘ïÞ§nnìÁp@ÉÏ:ñâö=øsüîÏÀÌ¢1Óü°µ˜¤i*¡7š/§+eÐ/ é›+lCˆÈ–ÒËo2Ž[ÿ¯öaªë-!4?CÿÞÊVúSUmîÀµn×NY[#Yº P¶ö,7™hÄ:k,–¦B=SËozIO>ü¿¶›LÑPÝ€Üb#Q° ¨¸”²$£ .äѤº\µ,±$–ºmè~¶@4‘…2THí…úàºD‰fM¥†'á7àß[U[Éçt,köÊPrªgõn Š«Ò4Øò¶^Ö7ÚX«Óuæ?Àmá¶ZÕºØÉTH4Î-ÛõÑÎò|ÀO¼³,z²Ù¡“=•ÜLkg¾F֬ܕ6(§¾…_»œ—wf¿éóGŒ F¿+õpUlñÕe -SZ UžïrÒ½€ñjD¤mƒ“ïg™ÁÊùùHìn•«ÈªBbDðþí­4¼Ô/«<×÷ Óõœþ|u•æµ@ *×öÊFæ©=êÖî•I”oY$CꇾýÊ‹ÍØ{u‡~×÷Hê¨j>kÜb7š>£"Äsœ¬…K˜Ã‡›ð"Îiá Þ0D˜-í7ï {ó³F óë]†é GvÚ;®÷SßtGfà¯öþ^ö­íòØ6¼Š†ùùÙüŽf’Ðâs«±ÁÈvG?ópk"–bœ<*Qj>a¹R8.¡¾ölÔ PøYNŸŸ :,KËc鵚j}¬Âê®Ü°wh=ž6•LÕÊ$¢ö(Ãêê7sG ¤Se«êepÊvÉ„ýÕè—²r) è°Àºƒðq>½Ëä -€‚¹à*–¬±„7¢ºÏÉêôÖÊmP)nzÛqãgÛÌ«Á‰;ûÖ,¼f¸FõºÖ»œú¢ñûpðýµ#ôç~ ûñì_úÉÆendstream -endobj -899 0 obj -1753 -endobj -900 0 obj<>>>/Annots 89 0 R>>endobj -901 0 obj<>stream -xXÛŽÛF}Ÿ¯¨##Hê#ÀÚÎÎÂv6™Y,™<´È–D›d+Ýä(úû=UݼH#g7<ÓÓ·ªÓ§ªNñ›ˆ¦ø?¢eLÉ‚ÒòæÃÓÍߟn¦“ÕŠúìƒ)%Ód² Ùj‰ß£Õl²"«iË[0‹sº°þþaFQDO[Ši±šÓS&óSzJGO{í4”U¥®µuw”WiÑdyµ£·O_oîâ°wt°y…%”Ùü?¶y¡ýŠöôQÎ)سÑ|L¦V§¹ªuFªÊÈíMSdT™š°‚/[«#6ý×Ü$ëédM‹%\§’fÉr² £‚ÙQ8³Œ09t§q¸$¯¨ÒGüpµ* -Uç¦r¢c©40+¯¶Æ–òw2ÕûÜQºWÕNßLÓZhõ~Ö+´€;‡vÀªÅª³1XÕ#/ŽþÖ‘K[?ç;ëp:e#Š~»ü†í#2[ž'+¾l%“>Äì̤M©«zò -FÙñ“óx2ÚÌæ` x¼ñÔ¹6ÓB0¿Š”¹YÔýLŒÓ[âÝ?¬)š1Ípcv h¶œÄ“hB­†ÇàÄoB¦7¿³Ù==§4Ž—ìÛ§ŠŒÍ<ø®9Œ­åšCa”pÓlé‚BHð—°l\±Å¿©©¶ù®‘JVàq™šøžuf|¸½ÅQ!+½§‡ßž`s†33O³GUnÔ­£•*9Cb)ŸOXH9Q^²ªªéÙGÑžbV9m_òT‚`p½°xs"úw^eæèèË“÷VÖ#J™”k^ò G|ÀéW`sň=¿m=Œ`þOOóÒdùöÔ™£-råfÂÈyÈp›Ê2Y±+ÌF} ; i,Hùiµ¬¡­) -säwn“ÄÀ9åóЦ¦±Aç À¨©ˆ^TÑh<¨kÒ=)G·Uïo%±(»Ék«í ¡l4¨x(TŠ·9æõ^©Subà [醖ébÉåµ~~ûƒgã”ÖLâdœ{°~ó^ [ÙNIÀðß;*u¹á' öWµÊJd 5Í¡Í$0Mm|º|µ?€ë³ª‡Óéº{J6ZÛ:×®õçìvkFA&P¬ÈÓ¼. -©ZL¹½²ñlýH f‡¥q„4‡aza8?6Þ7ÎÞ&UŽã`¸'_³v‡ç¬É|öÓUw6d׌Ôw—€e’6ÜüÞ!ïðšUÊL,]Üvi5È'á”;&lEG„»ÖÙ Þ1œG ~P‘»úuäã^§ß„èÌnr'Wë’ðHeî׎ÎR}ë¢úìÁ§"±M¥à?rBª*DÂá$Á"›%3pšÂmŸ|ºj;¨kÐŒ9„‚Z…áàà[^·,D~2¤ÿ„WO.ÿuz0ð-oîøb>õj)Ö(\ñr…h*i¾žÌà ”Ìaˆ—k‰¹3…ÒßÁÖ’VóîÐï–Þ^½.ïH:Õ$ÕóL:8Ê$13Øœßè@“«ø‹&*ô‹.x¥ðòš{…Iþ¬—‹¾¼5‡ )@ÅS¨œx1G‰/)Z.ØEµ.b¸úßÄ,tä• èxó¨}2nOœUR<&Éàäá³1Šõ`öLT¶ª¦5õÒš¶r<æÏo qP¡Xì|,¼‚w$)øš(kãµ-"Þ/×ꜵ؟¬DFÑŠ)%£§d}¡ ¹¨[ýG“[Í’I®nÑœÜVIýyÃ1fg3~£î¶á³à(íf¯bwÿ0¢:øqiªÏ”ç©òx}ØŒXcë*A´{p³+kLÛLù„Âu¨‘EN»êe³6 ÈX¬êÄð…¶%uË4?¸ÌÕ!ÓHVÃu>!6ZÞ«w}͸U ï›zoXk|1µþ!4]+ÁÅ MNñjI¡Ðm9ô¼smäýaYwæKè.ÚCáN<}žJ3…Å™ÖûÁJ û®Ùd¨-im,ÔºDE œÄÉ›ß%‡ Ý(9zšñ¢26'^Ò -òMÄŵÁ¤oZ “À|ÓÅÁº=¤Hû>á¼6ó~ÑBuöýZk5Ò¡…jØh7òàÝÒ3KÅ3‡ȃs·`Òþ*T¹h±DT,PV¤÷||ÿùÃ{ú§5_ý>aȧyf¿|¼ŒùÂè¯>Ì–üåK–%sÞ‹ øåæ¿:Š¦endstream -endobj -902 0 obj -2101 -endobj -903 0 obj<>>>/Annots 92 0 R>>endobj -904 0 obj<>stream -xWmoâFþž_1E•Ž“ó 퇊¼õÂ÷R5UµØ ìÅör^;U|ŸÙµ 8½HmPx±wwfžyæ™ñד5ñjQ¿MùÑÉåüäf~ÒôÚ¿%+ühR¯ÓÆ{wÐçï=¼%’–¼7qLù†åÛ&]Ð|‰£{8jØÛMšûõß7‰ŠÓÿ8ã¿·ó/'M:kÁÕ)ÿûûìS§ýyÐ+~ãógª}Rq ·†Æsú6èÕ¾¿w4î6¶î½8o\ ^ÙÚiï&ï†åîc³Ãp³?O^=á~4™•‡ãÓn³Ù|u÷drµß\Ù=Ñ[™L®ìþÆí9µZãNßëÒY{àµÄá|~3žÆ?MoÞMo®ir3½Íf¸:cÜlŽ’6ý•ÓHç^/Ïqë"Ç3Îq㶛›kÓy¿ƒ‡IŤ“@&”jò³$‘qîH Šå–‚D=»»;ÑLD AkmÒS"KÒKJ·Ø©ã@¥Jdž¢Ì¤X”&™ü‰}AÏÚ=k¸>_K¾¯³8¥ÌH¬²»cé§ü5Åí½ÊOÏØD™ -Ø^“ëÊ“®$Z§Åio‰m5ný<Ú³>¨ âõÇv¯oo×bÚ¼N¯……ç(‘EÔmu£ûVìðºŽeü¾,þOD Ž'’ÑÐ2„ˆ:Oî¡}xsÞE&¼ÙW« À–l;¹¥ê¢-\˜B^#³¥ý)ö›=¥ IBeR¯ -g§Óòú@÷Ür$.Óü°'²ÄÈSøÁFº‹Ü[š˜T…!m´1Ò¾Å`Óo©Bi08&[*Á :Q¸º±éš -EòlHP£Ž+¤©Ì±M× >ÌZ$Ø72ÒÒíM"H‡»7´ØQ —" S{ÜW,Hy¡uƒRL[­ØRT$¶W…þ!ö%q鬙Ä>ì1 -S"¿fˆ)(£€SɳÂrH•1ÚWvõqô§dT´A‘†z׋¦Ÿ‡¬gFÅ+èÊå±®“<µmê?JzìóZG]9[&:Â1jÞõšöù¡‚nxDSm,¡ ÉSÅ›±T«õ¤XkÔ :T»ßQ¾–&¡@ök6öE‚f…% Ô^Øž¡öK<]´§«±xV+¬)Ä¥6á&&ãy^ &BhŸG¿!Af­3¨–‘œR1ôL„¶>TiŽHɬŠDꯙ¡ð°ÀϬâH¥b¤YÇ̃ä0^éxFè.à®kÑܬ‹ݸ½ $›u¯ƒÞ}¬Þ}¯Ídš²“×V¬Eî折/³±}^Ñ»Û}Ç9ü-XW’ðÆPyf m¹Ž-Ãc ×[IÞ?Àfµb‡ ->0Bb/Ëò;…?9J]ö•)Q,"I[aŠ -vQõr¬Óø&ÓÑx~3¥ëéè#>†‡£»áåÝ Ý>Liþndû(Ï.¹Zäëñ©{tÚ$„ -2¶±ùk¯líÂ)¸»#“‚P+{! õÖ‚…Ɔ N×™¢! ¡hy"P?‰„ùPb>>>/Annots 101 0 R>>endobj -907 0 obj<>stream -xµXaoÛ6ýž_q6ÌbE’Û ÐΚ¶Ú$‹Ýv€ÝŒDÙj%Q#å8Ù¯ß;J´e#Z MQ#2)Þ»»wïŽùç ÿ†ÔP”œO.¦¾7ÑöC/ðàS8ð½>õGÃÍïZR¯`çl>°ÿøuŸ‚€¦ ŽŒ†4íºOÓ¨3.Tµ”šÒ¢’Zš*-dÒX¾—”ª–¢¢Oi«µ¡«)EY*‹ÊP¬x ­ŒÄI“÷çTj{ -™¥ÐòˆîViaODñbúåÀ§nÐóBèؽ§ZFUöHT)ÅãæUà±FÖ²½T†-2Æ÷“îíÍÑt *¡H­4°cV¹l`ÃöSfùýÚ Z -Þ -oe$Ú"¸O3¹ÀÁkZæ kÜH}ϯó÷»ƒ¤X&b•UTJ§Æ¤ª0{¶-]2¦»Çv@Ùsw-Ò{ ^Òá Gó°}‰ ^ÜKý¨ -yHk™eݯ…Z´ÐjUzlÓ’©î ¼£hârüú”‚~C?ôF;„z¡×óh²*K¥+@Ë„^ @«ü4A ·­wmfuCfVçº`Ú˜ÓÌá YP¼‚Guèby/3Uæ`•Ø"ùà‰Èï…à‡¥'Á‚ϦÁkDGƒyë"S"Þo¢4¾ÿ›¥ƒC‰ì|°„áÀµ¨4¾ùÄfŒÊåšq’X] ]Û6ÎYj*¼™P®<øS€–Ruˆ›: ¸Øn߃¡ÐI„ÊÌ) FÞ°yÊhbK§Xl`A’ µ)‘ƒSÖá# ¦IlûTØôâÚ"Ûh?çÔ ü ‡`£ ´‡“Fü}„ºŒêjAd¬š,D*ÏE[Žoµ²³£8BíÓûÖ$SVÖŸæ…ŠRQI{R·Æ°Q‰uZ-!P'S‰,à õkMÍ%*ËÔšI…TÊ‘—™eÒR­aßA2Ôd!Þ ]ÊøŒ1¿öé”k  nxbsÒù…x¥³ñ—JµPÔý@Z©êW## ì݈%ª¡bm kPh¦ÿ+•‹´x9»ß^]Ž?ÓõäåìC‘>|¦ ¤Cê—³ Í=¿+2°¿÷¹9# Lœ1kñôa4pË΄ÔÁ«º.‹DQ`b}mpÿ4;®À¥3š½½¡w(5ý'¼èû ,¥P››‰³àü !JñçZèOÒcüÿ÷|W*VüÈ\îä!ÉÄÂœÍü‡Âîû.Ü;{ -NÒlŽŸ›ë7×óù²ìZ\OnŽ¥‰tZVè2g³zÿþ{GW×ôêöòãÅ-?Ž/ßÏß]Ðëë[š¾½œÐÍíåÕôâöèÉÓ¹´¡Ìg3·êxñMQÏ÷Jâ÷º¬lålõÃùGóùáóÌÄâÏÈÊdq¿OVf`¢ ´›º²éyPí&ž(üf{¦ÉB³w$Ÿ[lߣq³t]É55gè>V[ -€NÅ}¢Õž?º©ã¨iž*I¤FÃÍ2צëa ãšLRž=ÒÂfƒå¯ ;&¿ó"U$»F:¼Ó›çy‡Å¥†üŽ3£ ¹èV~÷Ç;«¾õf×Í[.±ëÎg4å¹ï¦ÀÐÈ:÷æu - ܆µ\HSjb2Z¯§h”x ³Ú7Œ±pþMÀN ­ªŒV˜âÐL®KY4N]<Ì;\rxÚ<³Üpâ<-à†W —îîäêÄy'õ¤gÛaø¨#ºÀÚò&{Ü^tç/¼f{ÔlïÁ#7ÏÃÁЮcÎÀ‡\…}|æ48Ýê¡hëó7|ù -·´¥¸G\6²s/²*·5¾7©…9.Tê+Ùͦ-ÇŒ”ÓéÊ¡âGóh*™S]ru59 k籬¢cûf$ʽšã%¬c'%¸æÔ<¦Ø}M¤gE1Ù^m€m'GŸ–¸äÔ·SÌ$H´Ê…z|>‚„YW¸Õo©no˸Ô`³7j+ªG "7›³JÛ yKËN­‘NØØdí°+´"Éß´Âãb -ÙÜLïí9Z–‚oÒMÜwCýl·`BWHP‰é^Q¦"Ž0c*ÐÞœYë*X€•M)ÿ’]›€8Ù¿QÔWü¢ùÉøýùÍB}ÌÓ+áz_TPfe{Ž»1 C[àßu{íYí{½!ƒ@Qüuðýfendstream -endobj -908 0 obj -1839 -endobj -909 0 obj<>>>/Annots 110 0 R>>endobj -910 0 obj<>stream -x¥WMsÛ6½ûWìø¤ÌØ´(Ñ”•KÇùpë™ÄueÒC. IHHB@Ûʯï[€ h%v;ÓIb‡Âî¾÷öíêûQJcüIi6¡iNE}ôjqtv•QšÒb…'ùÅŒ%“ñxL‹bdª*j´£R®T#Ë Ic´!½¢ãË¢ÖÒÙ(Y“²d¤k ^$§Ém$•’Kˆn´“¸#œ¿ýbñ']à‰²¤­Q“†é4&ä2Ú½6¢ˆ™Ž8”|EëªmJiB4çæƒë¦‘…ÅJsâ Á ¤,Œªv$ÈhÔ&ŠB·H’c¼]qõJù~?JÓY2¥<Ë“ŒjJóirÞ]Uô‘1rÙ ‡Ø-6ÒHÎSP¡ëm%k¡š5ua†ÇÔ4Ió>:¼ÆÓ|òSÈÇYš5íñŒù¦TÊJ‚…hN«MéïOóÕûÓö`¯@·‘µ¾ãôQ…QÒÒÊèÚ£||ˆ³I’ÓJW`c€%åÓ<É)»˜%cšàPYáÍ)f^xãIrñ¾Y‚’ú(ꥀèJê¢Ð­6Î>–ä2aáŽ>«¦Ô÷–ng–°¯”Àý4 ÂZ](mq -Ý+·!)ŠM„:mVB)¦$âÄ7–-RÆÖÕ»ÛEúòÄc¶éë?ßã&]]¿{‹_Ò€‚ºÜëÖBb•ÕdÛ­ÛI³[¯T¾7H® i!Å+zµãþmåNH7Õî ºnöœòaº¨ÑǼ!pÇÈîAYÄÓ P°;ëdݧZjðÊÝn¤/¾ƒI5¤o1}Ù§xBF $Cʹù½UÐ ”ˆER‚ØÄ7SÆíÒöÎòí³x¯¨7(AWP$|‡}£ñ)“§Ð‰ÞÃßûäR+½V…¨~U§î Pëιj@­Ð²^&üˆpBT@¥EIKQ‰¦à~@o¬„ªHCc^öƒÒ®W´Ó-àô€@G°¿ƒ³—2z+ «kÉð[Ýœx Î®`ØÞžG¶^&…nV\|j:›À,ŸÃ(kʦè pÕ¹ÒÞÙ§“,I)›½§îýõY ;í"ÐÒû€÷¾G®2’M[{±v À*(;Ïñás.zOÌÎO“ÿì7÷…ž,0j€NkÃ4 ÈÏŸ‡@7:ÄÏ -À®e#¡D_K{rV…C¹Óy?ëMY:9°vLƒ„‚®kß–¢•ŽOÞ£ÞÛÒ£W^…%9ÎþN•>ÝO7׋äNT]×@ÅÔ·ÎÍ‚.1!c'V?„)¡ñ+(& '»ª&Óƒd:K½*¦ |Þ]õ¼Lg“¨†Å-œbÕA÷®x¬†9ÞWz/—d{¨{B1#Ú8·}yv¦:t«[SH„Xˤ‘îŒSÝOÙ8q° [%üFùþ­½Ç–ºhÙR|–„ž/ª¶„4¼‰3Z1zˆÃQ µl¹ªèë.ñ!„ñ^i@,1×|s¸¸~ÀZŒ.Ûð©‹•Xr@Ì-â2xÓé9wƳ¢šŽ™ á¾À¢JúÌ;Šÿö„¦âó`¹…®ª®4Þ}XÁNÂÈáV`ˆÖƒuû*±ö|ëµÈ¯a[á /*ðwPN›ÀîõÁºXC}üntvÈ“'ôüül~Ç•FÁi+Šob °BEgf§3¸vÌrôe’Ϻ‡qãàg=ûÔ¸‚PZ\âv¾È~é»Ý×Øã[$æÏÙÕÿÉΤë0q‚Ãhèaß -âÒK'08—îÕdüæ­ -½¿Ì(ô7€8 Äuæ—uDÙö †}–Ò9ï‚ÏK’Òü'INzñþó&P{ÛQû„B  ç¿!@”=KOðÂB^Ê`žG[è­äs<Èc÷Ó—QïK‘éÄ=xçÀæ÷­Þ"öÑmgð -ª5¯ê{‘yønÈnü:ÅC';“o?`|ýCm·<´„ÁšPÁ¡áZª‰MOX©JZ,O"ÂÛ×7WÔÝbÑð·öžÊߤFJ6»%6RÀ%5TßÐæ~3xÖ€òó_}8ÖÂæü ¿=*áMF£ßKáÄ’'I÷Ìo?T‹Oõï­„Û–t§°…: K¡?‹[ªe±²56Ez‹åüÝ(ÿE„­É#ÒÛ`x€®~×/éÓ‡wždN®…µAN÷ ïq̉—¤ÔÜ—¡ö‹ÎµÒ|†=*Ÿg»ÑÇË÷¯.1•õWx/½(þÜixýt6ñF÷ïßh²Y]qzÁ' {ÿ:ú1CÅSendstream -endobj -911 0 obj -1731 -endobj -912 0 obj<>>>>>endobj -913 0 obj<>stream -xWÙn7}÷W\äIA#Y›µä¥pœ817n­"}Ð 5CIŒGä„äHŠþ{Ï%9ZÆ -Ô6dÉÞåœsÿ¸èQß=÷i0¢lsñnvñavÑíL&t|±+|èÒ 7íôi8ã}¯Ëï­¤%_Á)ì^ðüåíz=š-a~4Ó,ç]še-å(W+åEQìÉ©•–9ÑV ú¨«‡´[«lM™Ð´T9zC[iÕrO~-<•"{+I¹Ù鈜¯Ã¦È|Lúµ$£åëÙ÷‹.µ{:Ë[V.¥µxVi˜‘t·)­Ò±/ÂÉÑgC|ñòv”âo‘6>þ©N©…Ä3³ÙH;CL~‹Nf•U~OÙZfOÄñçʉE!ó[ÈÑFûxW£xy;¥Þ0aÖg|OQwa‡fºv žðÊhº)”Ô‘vŸ1oÝWziì&>måJØ\éÕ9êÔb,FL·Bœ@B-âúµtk4Û1œö§¯ßf_;¥k·TÁVVT ÝNùuDÕd8SÙLÖÔ8™Q¸ä­|ýèK1ƒéB¬;Cœµ & íƒ š<™%1ƒBçT(-éAÚ‚\fU EÄ ³”e{ÜA1°ûy4N‡µøì<ûü ±˜rZYQBÉ¢@8^Ú¥@ZrH÷Ìuù?]·ûHäcó$ó¿0:à1M¥5[•'A)´#FãG%íþ™.êÚf%È&H0<'…eek¾ $]@öI£2á&$N“Ë‚´`f„£, -þ];gLêJ&æ#%€Ê­‚[‡rF•lŒoõ£Ø,D¸õMiXA.¿Í¢çr@CC`Heµ£X%“Ú òYB†ä¼,'B¢ÀQ†Dø|fK0,¬©pÕrU· ·YÄjJŸ 5žµeöâ³A´—·]šr7èä«XÀ_ -tÇyËUei¬a~/Ñý¸‘0A´jš"xó×5_hè¬â¿Ÿ‰¿zè~‡hÞÒG”7I$j ˆ­¸äf‹Ž†æç݇dXÉn°Ã/ ‹ïF /ùìÃç­·ôg´ÏWcäÄÍ"t¦—Áy´wÎU,.M×yþe÷>(gÞ‚ÞïÛ<Ü4"ø'}î÷:#F­õ€`òÜ⇟'Ö¸”ëÓ°Ìd  q.© ø¡ãPl3§£8˜¾¢ý ã³½vãHê ÚBÛà&¹—h8@£…ÆÏÖ‘´.¶CUñ —9LIV+#S˜&áBú„MÚ -«L…¹uÐRjýÂ%åÌ-T% -Žá VšÒ¡“s5'ÎØyN¯®K<Ûðû}Ñ~ÀD#¹»C¡þEÛ«^gòŠÎ*xz…á_¨C´b®~žr Ô^òí=7ù*9=Ð0Ãʵ»6;¦Ž;€Å2‘2Žvq.¶’7à‰zG2±¦@ãé:__°œ#™*ŠF®¿Ü,pFà…i©qCƒJÅoƒÎâÄ›+Q˜j;ÑÕÄ"€…¦–R CÍá4\ÿ¨–˜' -žO]±p¸=ZÛѯаQÈ"­'s½†ïÓç/÷óùc¸0ŸßTØ ´¿1Ú[Sÿ ·ÊÍRmŒÊ“Ì€ÁýVb:|N°ÅNì/~QÍ€+‘„„g¼ká BñϯZ ì3ÙGà¢`/Îá“»gB{5¼•°ˆ¤àÿ“Ù!tû†âôÉ "ÅŽµ¦|¤p"a"jÞRC¨op‹šbYòÆ»7gX;& -Z-ƒ~‘1û"Q°øöQªidÊü×Ô8¹||L´2ydT¨ –ð°Dâª"Eš4‹(M&©¿¦"­à<+Cˆ ÆóÜïÐà -:ãSpzu94Ômàè˜8ª§4ס²ÎŸ.Òî /íÑ“4Œ{£q‡ÿ¹áííøÿÇãõý»k®½ïdôÞds€`øÚñV;^ký÷Þ=ë q0e Øó¿ø¹Ê5“endstream -endobj -914 0 obj -1526 -endobj -915 0 obj<>>>/Annots 113 0 R>>endobj -916 0 obj<>stream -x­WMoÛ8½çWÌÞ –-ÙñGo ºéöÐEwc  Z¢-¶’¨%é8ù÷û†mEIEP}‘œyïÍ›ñ¿W)Mñ/¥eF³åõÕÝæjr¿¦tN›=Þ,V¸(hšL§SÚä£e2OèzóýjôUŒpJ7ä4í®éAÔ;AY2MžùY–dÉ3:¹ŸSš†ýÆÙû>«'‰…¥pÔÕ8i¨0xf¨8ÈZ6ŽJa)/EsmG'I¥n%©º5úIÛkR ñ)„[ÃûhCFVRXi?Pãã¦4NgøGûPECòYY§šYéŽm0åxC{]Uú„ØWTÔ -WÚ„þF’ÀŸ+%µÚZµ«$Ù\6G[¬2t9õ# HÇÙ"aG_öô¢Thj´£BZÕmÕÈ=ª¦Ð'Kn(á°Ç¶ÕÆ}àE%GÛHYXŽv'±W#¢Ûª:g3H¶FÔðZ:ióÇnñ$p8¹Ï;bÆËdE¡m¶XzŽ/Äñëa&'Žˆ?€Kñ„[0GzÏYDVyÐîˆÜq} *ÀJëçn…åLÆ=Þø$ÏhyÆ>ø[°ý–žùä…“{ˆÚKnC±I!÷á]”ãˆöªbK¨ÑÖ»‚„s²n%άҹpÈÖØN­Ì¹—C'b(’o7ŸîH4í…ª,)GtR ©0ºEö'_2GËtöû!t^(ªj˜¿°Vç -ñddu{è781$v“®ÁÉ?ï¤í´®BH¢²ES DÎÉìDþã$ $–ëÂW;U)÷¼ ð± -±šë‘«‘³iä³C¿ã»b»É )”ÅÏĶXôŠF5Ö0 嬵ˆ$ÁPf¦3£R[H»Ð< Œ:øÙ^³€”—YOeª -u𵡗wkd. ÙäPèá<]i$Ô^&Ÿ·½ðÒtÔ¡ÑƘjòêXà»!³~},¯9¸*3H}U£ÑM~ÛlôÖXß÷Âîç:éÔòÓ2¿ï—`~4†íZ7Õ Y]¹) Ä¢¼em(ÕH"Åí·G.µÈ0#‹§¡¼ìlПyÁc?vjàks£ZÅÔP^!ÇsY ÄóJ!ØðüâLêà[Óæï~‹ó@<J_Ћ J<4è&,ƒ•ðŽ¿o®¸yúJ)_ýý}!™Ò|>G Ô”.³dÝÝUôÀx°Â¸9Ïç7¾d.͸t®ý8™pGä( áç>Ȥ‘nÂç_¶òWØ -®‡ÚôJuËþ2¥³¨£žÎ"Šéz–Ìh¼ðå{›—îØ~{“ª? ©âš§)zï|µÄuºÆ%:ŸÏóÒ`0~¬nPñ—ä684b.­âY¬ 2ÉuóÆÏ{ÈŸXU o£d5ù–)¹”½‹2ç¾Ä{fµn@ð§Ð¡ Wáexë5w¡W¤{™Üg÷WX±À¹åÀ’>o¯ß3Ö+KŒûùþûó`ÃíèáÛ+ºü•Mƒ¸i–²™~×+Œ;oùR¶ZykzÍpÉí{'y<tÀÚ§°ð]%Ε<êFV/– QêÆ#:âW<}ž»Ø€¾\´¢khÛQ€?"<*”~ kÑmÇçÙ!0m²^øìà,ŒFÃÐ÷m4'n?=w›d<6?°Àtpä[}uÖì/|Ý !¡;Lœ,ÛÌT·ìµ°IŽ‰V¸»4âP#hhÛÑ ÂÇ` l1 q¼€ºŒ Ú½ pÂÈ Ž•KøqÇq6[k#>S¼?08úI+],þ!Á¾üpûõî–¾ý]æ…•y¶÷FɻêqX~^üú/‹ù’-ÔÍ|Úû×Õ-DÔ endstream -endobj -917 0 obj -1405 -endobj -918 0 obj<>>>>>endobj -919 0 obj<>stream -x¥W]oÛ6}ϯ¸,bù#nâî X»ëð õЇv”DÙL(R!);ú÷;—”[mÚaKEyï=<÷ò\êádJüNézF—WTÔ'¯—'o—'“l± §‹[áaB³ù«lFóÅ5î_¾Ä­“Taî„.çs\ÓÈl–-žFæ“«lÞ\]aR´A˜!ôþ‚ã›W4›Ð²¢«ë-Ë8Ž7Åù›µh‚t´ÈèW™·«•2+ºuÊ„tcs-kÿbywÂ^¦óäet9Êey¾È¦½3ÁÙ²-‚²&ÍœÓtÚÏœ]ó¼åZyŸ ¿¶.P)}áTÃd+ZÛ-‹·@@Í.zãRtÚª°¦÷¢ÎEFÑS2Ï¥?²äØM/¶có½×ÊÙ8Þÿþš -­¤ Ïìž¼té.ÈX¼^K²¸8ÚŠŽ„³­)3º±.Ž8‰‰^ÂBâ²|u£¥ïÖÊÉ"X×eýôçÔüqAÞRg[ÄIh¢Ñç°(BÇDG·o˜ T‰rž‘r²Øƒ‘²dC@º Lɬ‡µi¹¥…¼VQ„VhÝQ .L÷”¼ÔÕ©@w-Ba"²È‰¬UY¢6„¡\†­”†0²­œ_ "ÿeÔã“ßæ¾óAÖYŸ°$Õ°˜ÆJi\8aü×øg¨ÞNˆù“(c#4FöA [iyšÑp‘ÂSÿ2×"•`ªm˜= f‰ÉÞ®-àD²c1– _kPÞz΀1C¾Î3ŒW)MµuNj¹á ï¦}:ß®U±Žñ±-Z]’¶ö~à׿óILz#VòÓ ”¥üž Æ7zÅ[nJ£ÙËTY>®´Í…þ{çêÃe—i@¿¡¦‘:‘ØäúÆbéûL\èæaÏer;¢• ­è¡•-°Ú¨#¼C?sàêc#°UÛŠ;›úǘgTù³+PŸh¼n¡ŒuSŽ=ïóÄØN¥FÌÙU Îs…œÚ-'ì’Q’néÞ@¤DnÛð Â)-¹\S»‹´Û`A=n‚¤úâ{WNú¶>ð… ýš¯ñÍ—–÷6éÒ7W€íÀƒÄÖ»q® (t4ÂßíYCgÏçó° Ž¬b…}Ãú°Ž¬1"£õÝ×;æ¾wáþ"9ðHÆÿv$<_J}GIÛc?8)¼5®­†”V© RJÙ`ÛEé¥4 #…®‘”·EXyó]€Â -å6¶ƒš ýòÛÝRúÞÇšÞÎ,Ë™µÀŽB)C®Å=K -Â2m 'äªTÜ‘}F±¹ôé÷ܳYœ„F#DËe/U‹n1êY¨JAl=#jé/ˆ›E¯2‡pu±Ý$ Øj…uÜéö—åo´º•~¨¼Xò¹·õª=à5$vq“Ë~G•†¶Jkºgí@_i¬®C ¦ã“S˜Ôtß¡S;Ü*ž_ÎŒüIh!r2ôH4V(\"†!H§l©À#šh¡¥0 ZÑSÙo›¤ü(lyìÇÌpŒ=Ð¥6Ü'5D -*>¬Å݉JùÞUûª„Ò‘ëDW­Vë R-«1uQÑc{Bó´gà¢_Ï ø¿Z]ʤç,ä° 9¥ÞZn›’N9w¦­séNQ^­˜¥`qã9")ä]* Ôƒ†å±„ß³Ÿµ ôcìÓZÎúÓÄ.7¢²C1ö¹q²Ñ¢@Øx¨ N‰%‚ìË]õ´|ä“hì‡>`<óÜâ<sèŽÉuÏ•Æ÷©ÆSLLu"«€`¸ˆx¤ô+¾{Ï‘éÒñâìî9GŒ§Óv5bïUœ0ÔiƒRåHñ%~…,vŸßã›Åþdχÿô1¿žãÂÖçóiòÏ“¿L#èendstream -endobj -920 0 obj -1444 -endobj -921 0 obj<>>>>>endobj -922 0 obj<>stream -xVYoÛF~÷¯˜"Ií%RÔvá EÒZEQÄyX‘+q#’Ëì.-»Çï7»¤,+Ë{¾9¾žÄ4Â'¦YBã)eÕÉëÅÉÛÅÉ(šÏéáǬñ0¢i¥”Îg¸£)I+‚?Góî$Nðbw2NÒ‡“é8JŽ&)tLÙ‰ƒ~H„Q»(¾{´XÁÖé7¹?Ñ";›GIDoä²]¯U½¦Æ¨ÚIƒ«^–²²/_N†ïRŠãÀ>Hf`?ûPKÚŠ{ršræ |A@`$eùÔ:a-ïawSŠŒ)\!­¤LW•¨sÚ*W-dY’ÍŒjØ -á@Ÿi“31›0¢AÌÞCµ0붒5è˜ç“ù…^ùgï­T)#º"«ª¦”$ï„¿zضQàõÚR¥Öì”çÁá½bc$$ j©û Â{ë/hèªfhÅ­ /z჋“YéXŸý0\ªú°wŠsØ“ÐVR%6’l ø(àð÷’Œ·°µÒ<Á;l­ñ -TNƒ†.½U°,òV=ÁðŒ•™¶îrÁeWüKiŒ6TIkÅZö.Åì 9 ä}D|>9+ p„Ô!í^·†ì½u²z¦ech€ÿÏczžPryùã·= rÀišt, -Y³šH)†AXé[Æ rÑ_ «âCÁ‡›íyüÚÊVR-eîa¼DRœn™“ª ÀD‰8ÝûÐ!ÓÊŠÀ ä»6€Ô« g_ôò(ÄŠôœþI“ÿèɬÐT¨.‘…ê5uá”c¦´Õ2+àOÃa©3QÚºa¹MXDž{ãQÜ+‘IRÍ’ÉŸ”–™°®L&ª+a7¸‹úïè@ÜGaíq8§ƒƒ7ºª¾øtu½¸ú}ñ™>\_|ú£VwŸéZš[i.>]‹j)m.š}>`†3çtssÙ%Á'ýç›Ö9Î!x(?JX„kÏ&ã”nÎàm–C{ó´„} /iõ‰;8ŒGé+_úã¾ðµ×u@¼³?u&Kbæ’·¾¬ÂyÉnžŽÎÑÈr˜yÀð2éEtbe~LÆSîÈ;å˜ñheÑi°ðE« UÝ5k®öc‹4°ç¨/Ô¢oó NL&Úƒ+z° ¥rh½¶”"çXhîGÊF½ù]aq¡Â5ÒKt¿®=õýF·€ègAíoJ­7„Â7ŽžK¨Õ-Ϧ1Ò¶%#©þÚªlSv½:Iõ³Æ;žv¾óùç[ûZBña… EÔ<Š -n±ý€ l°BíúzçõPºlèEe¢ †£…6Ò `Véó®¦[a”F›ÙëZ!|~ Q2¡1†¥c·Y`IØ_ ’xêgÜþR0ŽèO—+¥\Ó{oùÏ!Âsί}’0¡|POטڞ²¯k#*Þ²Bf¿ »†£•ô½›G^k9€+/ëZýîùæq˜¤wˆK7ß"/ÑCŽ¶Z®áÞ¾ÞGzðÇ^î˜Ð¿XÃZÀÍ.IªÆ”«„CvhetÕÏØ×=v¡ˆüðac‰1¸Òe©·ìs‡N¼<(ƒ »ßrä3"s¾©ï´~ŸÃqÜ烽e¤=žÓýªúßy~ʦv›Œw{écÄÍ»-2žÎ"^™±î-¢×W¿¾¾¢F‘™£7:ó[ž% ®A`ûžµ5ñîÌJÎÒ¤³ï·“ÿ}o~endstream -endobj -923 0 obj -1321 -endobj -924 0 obj<>>>>>endobj -925 0 obj<>stream -x•WïoÚHýž¿b¾‘Jà¡@#õCª6×Tm”k¨î*E:-ö›Ú^g×Aº?þÞÌÚÆÜU§(€íÝùñæÍÛñÃɈ†øÑlLgSŠ³“÷‹“‹“a4ŸÓþíqeã³hJ“ùL~ãÃiZaíÞ̦ÑüÙØÂC8h?`èõå[Mh±‚ßé?y>¤E|:&Ýê²4ùšª‚ -gò2V©< äµ{ÔοZÜŸ¼¾œÐh, Æ3X:ýa+ÊÔŽr­*-V—lÇÛL·Æ<­¬£­ݪl©Èï|©3^^yÑUIÆ“/Í×é9Æ6Ëtž°Å*y'{Ò`tÙ+¶á°P±IMi´‡3ûhxËr'$ò…µ©vÈ*]ay›'kr˜©ÒØ<ª=§#uvú¡2Û´[GªÍ\¯’| µÜ5M´Ø ÑãÎ3Ú(A¸“£ä'aì‡ô–¡Ñ`ü&G”«Lÿ­R£ü(|£(:·§òîQ¥•>ÇÃÚ ØÂ4y‰ðUšY_â+ ¡1B…|%’ê±·eV/5¡J…õ@Ü樚]ÁB±Qy•igbÆ¥B -HÛû«wTÂx£œŠK,ˆˆn™.µO˜ñ–£±[ÚìŠÎ=Ýö½»W¤¶±EUQS_¨Xƒ d„ YÂõ!Ë©¥­Ê.(eѸa*"Q¨’Ø1ÅÙÆÝ©ò(™ï“.ãŸOY³ý‚Bp,%4 ¾v™ñzÉB´À“g±?‡Š°ÑñOd3XõX{§ šØùèÌ!r~c«4ÁÉÉíC·W¿}ú~CÞ¬s•2¬Ï–¼€b¾%I@¤”²¢íó‘öJ#×M#ÃÆƳY;@Œ›ÉóCwZOŽ§pú³]r¬eÁÔ°¨DÖ^˜ ä´Q89bVäsPip£±[ €Ï€ð,!é± Ùyo—PodnV¦™Ø"îÓmÅqòS¾Em*Pf¤Å‘$F;%ÜÙ +$<-ƒÀƒÚl½Í‘VÎâˆÇºZ*5ø’û…"Ùܪ‡=Ä1ûxñåË>·ÖõÜUÙ™õ¦â@ß}×s£UžaSôþö×#NÎJdM‹ö¥Ýcr˜µ -ë”38|iqž4Y°E40ÂbòÆñ¨%†ñ¾Zf¦„õXv8,ÓôÈ{ne À°X}÷ú?†VÁM £DÄööê(×Ü Rù1ˆ",“8&XVö{Œ½×8ÈE™„'»«•]xÃYÏ„G©—¢& [ÐP† V Ú€S<l7»zrxH¹âXÀOæ±ÅT¯}4Bp3?T‹Ù¿UL|»çç²å9XH*a­º’Ô”Ç ÀÿÁ“ ¯S49š Ðõxu”žJ2“c!š2ŒèRÿG£·b¥­¿PD:„½4* qH‹'%„,P4 -ô­‘åŽ|óq¶éÓOK1'\šB«%Æ0OEâ’©Éõæü¾__ýI=nÙU%^ö'Rê º°ã×—óúÝe4E#¼ MñjÅþÅ×÷˜Eì=ÇðÁÆ`óR^xß ,ÌÆ"¢ÿï…i2›@deã䌭A|?ùpuÅendstream -endobj -926 0 obj -1583 -endobj -927 0 obj<>>>>>endobj -928 0 obj<>stream -x…WmOÛHþίµ:A%pâ$„À7ZéNê˵9NB'-ö&ÙbïºÞ54?þž™µãÒ$¼Þy{žyfòå ¥1~S:›ÐtNYyðzyðûò`œ,´ÿS¯ñϘ&çi2§Ùâ ŸÓ þÔšVxwL³É$™={2Ÿ.ø\îL§¸.wà×àz÷.F×3JSZ®Ñ|qFË\ÎÇ´ÌŽV®.U •…FÅ–Œ¿xµü|0ºÓ9ßHédrŠ–ùá'Ëit¯ê‘¯œ+FE•ªÚØ kœ½$yJ¹©u\½%·"9¦ÏîÖ³Ù1¤È¾³Vx¶ùüÏKZ›óM|(ôs×ù9å«Ëñ8-·çCŒ¼Kö„cŸ'öö¯kÈo\SäTª;M¾A¹Â™o]SÇ(‘„oªÊÕÁãÈxjkóþcïM¿õA—¤òÒXãC­(m”'c}@uNªËt}Æ ZÔé0Úz0EA™³÷ºx¸9—àHu^UUÕ7UÀ!|ôãL؃°iL§‹s4ò`GÐ`t}N)pcÐOOçO@_$ó„þDe½¶á˜8 »ÖäšP5ƒ"± 3æè½Í4dï¹tZ ‘ÔŒ]ËQ¦,ŸXXTÈëÁÕõ‡¤naš Ïÿ˜Ð’šL[É…½Ì#Ë–°\KT§,Å»î¶@ŇþŠ@©Rkí™Z1Ü ºUÖ»ø`ÝÊÞµÿ`UÛ|èç•„¬Àƒµ#ë:×7:»#(Ã%ñLUäª`&’G¤}‚€ðʬAµ|@ ÔºÖ¡O¨ FJ‹ ¹¥`1a‰]^ø Ý1Ekí=m´ÊÙ[ÝûæUë>!Ús~à}‡àÊ…{Pì÷û´i^P’$ß+L¿éúYI"me¸¤\w¸ ~P}dŒWºb~:À“msðû®5;qh;n­A%˜ÂLÙõ©&8¨ÉXêžThqGFBêã!k^‰¹XÛQ@×±ÒÖù’¥£ñQNký¥ò6Ó»†Þ MEÞ­ÂCä2ƒ.^„¨0pv»}r©T¶Y±X×{Ç]ç´åF=AÚ^³ì{¥#T&Bx ñlDtÚóô`Â&AtWf.!6³k—™zµþ€¶ý”Õ¦ -"øÇÐÄ €aÀÉJÑ)}!£¼6@Âc.Í[“Õî*B’·!¡k¸Ö_UYúxัLÿŒ=?åËY"Ç~2Ä>ÄåÛôN•úñæè£Yo½)Lvwóê´Òl4^CV^²z¼Ìùã9/ì½Üƒ}¤gç<¨¼•ß„º8¹ZWT ³è£ xD&$äÒ£,[t6Î7ÂG¹;& G™´x>¨IœNŒ#,>a;&šŽþ»b\k8gbðGÆÑA˜á9×€ñó´ͲěeS,ØN©¶ï™j'¸_†UQ"Ã{ö×d:Æ|üùàJÏãTØï+‹ä,¡ê¡[+¼¢±{!Ú ®}I»Q"õšTâ–VÓà?HÅE™‹ ׿û˜Ql\XúÛgž[ Š²·Åe×vétòKìÎ2ÐûÐ-êZˆ¤ûZ?ƒÚ;‡½§“zâÅ"wË’–l‘ÍÚdR¸µg•Œ+>³Ðyd ŠÆ…}å­óçE;&5ãÉ$NüF£ƒbÛ£-¯s ZPäs7´òhÓ-xîw -ÿÛßÝ ÝÇØBayà6úIdbGmÖ÷Ø¢díØó§ ½íPaKØV˜Ý*$»ŠÁöêÍ7îCäÂ]Ž¾æ8ìÀiÁ”Û‰2º^´ßÒùY’âÃ".ß¾¾nî3+ú•Ëš-efÓ'ñõ“³ ¾XäG¿Ü1gg3,®òîlÆ°Ðþuð?ST8endstream -endobj -929 0 obj -1506 -endobj -930 0 obj<>>>>>endobj -931 0 obj<>stream -xuÍNÃ0„ïyŠ¹Q¤ÆØ©›¤ÇV€Ä ¨_ ?Û4Uc—ÄAäíY“"qY+YÚýfvö=Rü²«UíLô`")$Ò|#4tžñ?áê ‡Ð¾{Ü@i˜ƒéz-R˜ H S-r±x£âŒšÊ±iZÛÜšCJÍPœdŒ,žðGBQºš‡áÛË€ÚÙ#/Ë0`ÑSI˜ÜKTÃ;”=Ë¢µßì‚f´ÃÃ4xêàû¢â¾Àž(xKÄj%’ài®-ÿég¼e¿¶§Ê»~aø'¼Ôì¯ðù5‡J3îÆ©ÅßoŸw[¼ôîÄš¸wÕØ‘õ…o êñLÅ3öß±t¦EÎ×å…õúºÔkô0Ruùendstream -endobj -932 0 obj -276 -endobj -933 0 obj<>>>/Annots 120 0 R>>endobj -934 0 obj<>stream -x}WÛnÛF}÷W ô°iÝlËòÔIkŽÛX@â¢X‘+‰1Ée—K«òñ=3»¼˜v‚Ž(íÎåÌ™3æ4Á¿)]Îh~Aq~ô~uôau4‰–KêþØ-&t¾œF´X^âól-ÉjÚð ü3í?ûxE³ ­6°~q¹¤U"¿ã›xüëN•N[ºŠè^ǵMÝ2ý¤³êxõíˆoNþæé|Ípw|M#º)œ5I»Ôþ䂦ÓprvÉçîU¾VTÕei¬«Èí É2³O‹-™’oâ[#?l3³VUù:ŠM±¡RY•kæmOèŠMOétv!ždüÕßø›Œš¤§œùçߎð?0š£œ Dî2º’œf“óå×ú(UöÖA+ŸäjˆoLoékµSV¯+mƉި:sÇß“«´ø®’JB>ûØÀuÊI]xdÿÌ´ª4*¹AE2-$¹*Ë–A´TWü)-ð9WŒ$©"i®$&®s]¸:_Ìá"§élÍÃÓ¡p‚Xë»Ûw7Ÿþ¹ýpûþÃçhçòìu,ÆÞ¦¶(·¥µŠ·ÖÔˆ-ÑN¥YEÕcA¹I45ÈFD+äKZ$f_®“I>™ äçs æW³è<<5 àÌë‘úm×ÚšªñÔ8—=ŒÛ/Þ*òpL)Îê*¶éZ'€U8ù<Á†'ãw×÷§¿ß}YÝý …H.Ke…®w1©ÖæIŸÐ¨ç5:Ý×ÖÅäRªÕéòU4‹èÖàplò2ƒ‚Šnr,-‡úrݨ -€ð"üŽîoß7¸;¡QÛÀ(¨•SÖÕ%í™y1Å舞‘«¯ôÜÞ´>Éócc4„eÉóÈ[ŒèË.wœâ€Ø±¡^DVÇ°ƒZ›ŽÃØØ«Cÿ Ž£CmŠSÌÖŽÈzàÀÀDzPš"á~§­è;¤Gc×i‚ Á0}8[Þ2:‘çŽGcHh¯÷•oÒ`Ž…ŽWonkj"xXgÀ¥–Fä9ð0Ænz}-ºW€Š5‹ÇGW–Y³HIH2#øêÃqpÕtÅÝã Zx/Ñ÷Æ&€õ/_"‚¯ý Ù@Ô¡©æ§,ðÆ9?ˆq&¤)f…i}mÕHeT–ÑÄ—é‰yqæ—ßÇbª¬`/@Hy´zxoê=®¦Ôˆ8¨o»” Í}'.»÷ß¹¼ÿþüÕzq¹ÀK»Èàâ‚-`]üëè…ô*"endstream -endobj -935 0 obj -1797 -endobj -936 0 obj<>>>>>endobj -937 0 obj<>stream -x…VÁnÛF½ë+<9€ÌH²`9‡â¶rpÑ‚¹¬È¥¸1¹Ëî.­ðïûf–”d6AaÈ ÄÙ™7oÞÌì?‹5­ð·¦Ý†îî©hûÅûO[Z¯i_áÍýÃŽö%­òÕjEûâ¦:§Ï‘L «_µ'ý½kLab3PÐ6R¬5ÁÈ[ÕÂòÙµš -׶ÚF5ôüô3ƒB_Ô¤ý±'UÄ^5p¡Bp0ŒúÝþÛbE·ë»|ƒø7^œœ/•Æë‚£L¬)ÔÊë@Ʀ'j€©A„¢÷&K:ô‘‚jŠTsRC`h!a´æ;©pm4…ŠÆÁGQëvúTk¯ÉHÊêœÚû œ©ôîâK—K².’¢Lž³|ÌksŸo9¯'e* DÛRÎ莎}—R²d*A¸cö’rNûZˆî[!tôùªSÎ8ª$$YGSF¨š0ž…ñX#ÜÙq5&DreÔCs)yÈrúNmJl–§Ò¡  'zÍú°5EÊó¬šàH•¨utpƒàŽ…Å¢â¸ü,ÌòÓ@Ñãã&?üø•…Zõ UÎÏâ×,ɤ"ç_ß‘bÞQN2EÓ%Ìa2þ‘~É(´‡H+ ±Pöï&Ƹ°µý/ãÙÞÛYduTÆ‚8˜8þ!wŸ+ÐÒªˆÖ€ÓÊõ€&®ño -¿¸.¡‰D… u®°OÆŠ²Q:Ò!Èfl43t/9k;öÎøÞëÎyèTÊrF“ô/-ÊÂ,í·=™˜KÊH™MZ@g^ËI•:Þ¡VMâÓáÔÐ#¨¨^RGÏ¢2–˹÷EW4rk€I®}ŒºíRf;råYy\£qîŒet1W{ÄäÃØ ‚á,6^:b?b4TÞµ"12°ª1IÆ´Pã‘ÍyYpQhÁûŸÐgÀ@…¦Ñw±>ÏšKÏ1§¬¨¦q'‘ñÛ¢ƒ P š<ú«>ËY4øÆr §‘÷·ëÑ»®oÀ;w:ë”:²gÒ±@rT^F páW–”1[L¥×M“r:%Óðy“Á=Ãjìò‹‗àç|¦ûƒ0áŽ^u50oÓžg"7  ”féya¿qÊ;vÿVH«‰Ü±fa›ãÒ@÷@¥ŒGà€ÈÛ*«Ž¸à“®ûýxrâ‰Ùfå4½ g)ƒ¦0ØBFðïû.Mt·Ûä÷´}ØáyƒWéŽõ0Þ±Ö÷»œï_¸^]ݳž?>=~¤?½û†ÍH¿¹¢gXrMá ·éÔm:vók­ºˆîü€Ý=ö$ÿÀÆÛÝ6À]÷펶¿ÿp†`óendstream -endobj -938 0 obj -1153 -endobj -939 0 obj<>>>/Annots 127 0 R>>endobj -940 0 obj<>stream -x•W]oÛF|÷¯X (À%JòW°ã¸p;m¬ö¥îÑ<‰ŒIžzw´¬ßÙ;EÉöC‰¤ãîììììñ¿£„&ø“ÐÙ”f§”ÕGW‹£ñÍM'´Xâ—Ó³sZä4‰'|“EŸ ±¶RS2‰ÉȬեÝÒ/”«Z” áSAÓøåÃ⻋”Ì}¤Ñ,‰§ˆáÑ$¦ßUٔ͊DC÷ ºöÏoJ[ô¦>Âœ’¤‹0=ãç/ikI[ÕR!ž%‰þ‰@ÒÏ@ç⺗öêöë5çÕ’|@”ëFôðåÛßÉ~–€rZÒ÷=€]™¨*™ïÇ™Ð(™ùÒ®¿Þ„;¦MQfýãúó›ØÞ‡P8}ͳE©ÈžÚu =SÕ -È´!¿«œÀcÌ! HtuýùMöëŒüÉi ô%¢¸K3=Ñë<ºmHém°Ê±H¶ÔcZ–ÚX2V­ \v­Ë…¬UðL¾n÷D¦êŸ?î£@9!VÊþÔ¡IBSM®…1›œFß ˆi¤ùfžFùX³pø2¯¡Bcµ°Jÿìžr(Ô7Hˆn ·8v•¹\ Ÿ¿âlK -aC“è1âŸTSm©YQ6ÒÿÎÒØ`Ž9ˤ1 ­#4ÈjåáòŽraE*Œ|ü@Tš®º˜ˆî¡O¤¾ˆc8Ô•Za€Ý°  W†XUÛؼe#¹¡·Dk]>—•\¡JE"ÏCÑ\ŸKçG*&º]â3@”æ §i!˶"71’y“)±’ïË£WÂGg62€œd¿,ŽØל¹QÂÿûöÛQ2¿€ŠçÓI|N5M““ø¬û±zwÜ)c>Mplè Æ„ÎK i‰ -ãØäjÓCÛ•¸ŸU¯(¢íctþøaÿ”CéNa hª]j%æÒŠ²2‡31àG*_ o6Ú\>ËJ­k‰¦e*wmaƒ-uææ¬Cµ–m•Ÿ@Ÿ2-„éøšÕ-8´_5=ã£nØR‰ ”„/¸¿.«ëa¡Ö]Å$¤Pý3 -i%É(Õ@Ò iYIœR-š¬€g¹É«ª×Uº°Î'h¥pÐZµ«bqÀÚK˜2À‰k­¬ÊTuÌÇ?„‚u¼Á¼";¨éº±sù0½!.:Ãqt3L~ vÛ¨lxà|(Åq|Ã)/µÌ`<|í÷úÛ+Á=q@ïFµUάÁA5$=¢FéNº¥÷'aÜ=®–׉S1æÙD_9öøf'çÞYow{|¿8zç •RO†ªò‰uQš.mðœ]~âÅþõîòöžî/ï¾üêÓõë×5s|Œ>yÒ0)n‡ßƒ¢W€úwA/ÀëaŠWç1hírYâ¦`Ñ\ãç¨SöýDË0ºŠûÃS-_D½FEªžåŽê»âïïw‚­ÇÝ:âWÈÄ èŸrʉ‡7E*¡T-וÈÐþ¸¾"èuÁ– ϹÞ-÷·-?ä·7-­‰mžîSÅîè›^/_L±³Ü‘°ëÔ¦AàtK¼ŠÝ7€Úà¿@(r7ÓøQ4[RP½¦Ó­ecâ1x’Ûým0ªØ¥Ò‡õ×ß3y¥:w5[ce}ì2š"Œ„ ÈKÚ [‡ S¸ð`P¹±œ;`zžÄ¸>LæñŽ?;™Áñý§Îñ¡ØÉÉžËß«Í1:Á‡J!%í,–Kò"¾¤Öì—$óÒzð®ºW`|Ó Æ•nù¼· vSyiðN•ý} -©<-L6à=†ˆ L\œˆÓ9ö_MÉé,|èi8=q¼½·öÑÇÁŠÇ…ĵ§#v‚ã]€W<Ä{ƒƒ`ÉaºÁÇ>‰aAi©ø‚…¹å¦ü³ªT*ª9€-yÉàmÀ+©ãšeÈšíF÷¤»AÞaýÃßœw§¡ÙÙ߀ì-i~6Ç-¯Wy4?ï¸ûóè U?endstream -endobj -941 0 obj -1500 -endobj -942 0 obj<>>>/Annots 134 0 R>>endobj -943 0 obj<>stream -xW]oÛF|÷¯Øú%naÓ"%Kr€ ðG]¨´VuNäIbBò˜»£eýûÎÞiŠ6š¢HàYÜ]};ˆi„1ÍO)-.¿,Fѯ󗘿üñëÁl%4O£•O¦Ñ<üVÐ=?tz3¡8¦Å -á¦ó-2÷üˆéÑ|²”nDµ–d7’~\|á$ý(ˆy6Ž&û1(ôšNo’%àÙOD[¥¿®µjjzÇIž¸Ÿ\€æy%)¯¤¿Ö…ZŠâo22µ¹Â‹Š´Ù[öôæ,¤=qyO’)°.²£^>ºþpË9ûDtïYrCøÏT¢”¤VîçL• ¶’„–ôEåU^­£Ž£³$šÑtÄ|—”ÄI‡ßï`{4Ãû|ÿ©*cIFÑF)-r¸#›':³¼Æ`÷´¨° ÛÝLƒ¿ h<ã˜Ìgø -bŒV~ûŸã(ðÛ?9?øe<Š’vÆÆgÔνHF¸-¼ÒÜ’Ø_¼ÚnEµ£Zªº~‘ óÝÕr-tÆ`]ë,û;Të*~ƒZ—yä\–¤ž×üTˆž¼LÞÒÙšB+œ„÷µX"5±©@b}/—hxðXdÄ MUµÔ˜2@DÚ2jÃ&ï Ùfmo‰dŒÐu9còVh `)íVJ¦¤¹N›=®RŒ5 -*¾59t貺à\fò•àÁL¸ÀŒ¸¹_ÆÏþ·Q°¦Tp2ÛܦàDµ‡¨]¼ý…|½ª0P•”᪥ûå(a1p©H/Ÿ‚?vcè#í%ÔJ4…Ų}® Œîô[ÀXÞ¦©k¥_Ì®´—ï?Ü;6î¿Ý>ÆnzÃÅT£™”•îºÑ0Ü ´½UÍù“ Að‚ Œ…‚ÉlÜ'U:K ý)ݤ9µ±|Œ}=½" -2VÖÆÃÍœæEgm ¹²<;¡'|Kvt:pÊ{7ß,,Ê6FñKÛéJ0Ûž@¦¾Çò)•µ»•Ñu'E—ñðÞ˜\±–úVZ•Ž/ °Î D-ëB°K/wÊóáNpܬ×ujÖñ' ÄèAÉt¥ÊºÁÊ2‡t{{…ëë6Oµ2jeÉgd¢ñ®Ê¨Bâ «‹Îæh ÆÇKòÃÈ÷ýóÉ Gôy³ó'<*ÆXò)Â+x·Jzlág.ë;»j´>^Í¡QÝ£Ðt0lì˜êoRº]êd÷s~‡7+68}ªò§îfb±˜9 Ö:|*á áH<æî‚ök­”˵Ó@ò£Ãë·ÝÃ0f/ntŸ‚ý)$”:Àå«ö Ž7¤Ëþ‹ð%1,•©q.Õ/Vè`‚G‘ã[¶f‡*CyÞOoæáCFŒËŸ¨Îñ‰#;º¿¸½¼ Z}î°˜`µ &®*Æ|âß|2Kð©6;ú¯[m‚Œs|*Æ#“sŽþ~ðN‡°endstream -endobj -944 0 obj -1711 -endobj -945 0 obj<>>>/Annots 143 0 R>>endobj -946 0 obj<>stream -x}WMsÛ6½ûWìQ‘iRßîLNœt<Ó8n¬Œ{è"! I0iÙýõ} @$D7eÁ°oß¾ýà‹„bü$´žÑ|Eiyñn{ña{G1þÏ |ùýb/£kZmVQL%Í«hæW=ò©« JÚîqßj³¦mf/ˆi›NžeóJF•ª µšÚ\’.2ÙУ(w‚ŒL»Fµ¯TêLÒ/ÛoŒ!´‹Ëå™Åp§›Y”œã¹ÐèäÂ9¶ÁøoøÚ*ÛNÛo8=™sÙHù¨»"£ZwÝrv‹Ï^:C—Ɉ·ÙDtxPµ*­Ò5òG'MË<zRU¦†è~ë­“ª,?F”’Žâ•„ ö]/I7ý©ëM™z‹[t"r“pä挦¤d6g¦ìÊGñš/,Ô!b…FëAòóq oÀ}Ë8šî;¸óÆFàüþX¬J;íá°ªðY:þ@!ójZYZ»Vó“TÅ+-£}½¿û‹:•;8ð—VÛàX,=S'þAÿ-®÷DàO!ªµ‰ˆ¶¹2”²4ñW< ÈxW`QQ&Ÿe¡ëá¥]#ª4—†t †ÊKÍϦVRC|v]KGU´ãÏ2cGé8ïï1ZW‘?9[E ÖÒwŠìYT­8H>•YÔ—¤ œmî!ÐH ûg‡XÎ@IV#ÈìLp6Ñ—‡÷”梪`—Ê‘¶ðœwöâµ(DÈÛåM¦Iµ‘c–J)*ãÒjdÕ%¤¡J!’QVµhõ.\mÓ!—À‡ÉUmÌ£é“ÌÀEú{¢"MéUw”£È²‘ùSuâªÀׂoh¯‘FwM*=Va¹xF8Î9âd÷„âÛ¾Ñexøtúáö½—f<„Ѥ©î ++¶±î,dÅEe -9µ¹Mø«K_‡'}Y +ÛP§'Ñ 0;/)²N—^¶RŽÚŸ¿KYzªêÔÖ0]KT)[ÈG”QÕáTÓ8‡qW¡ñ/¾“µéí´H2—cð;k8 -—Áçœ]€òI¥6zߎ¬÷¶AI’:c¤M‡K5òNïƒ,ÂÓÿSèÁ -Ñr}d§²årÊ9ÊÄòçyãˆ^½Cðm¹ b†ÀàZ# Àhu:ã25µ^BuÌš®ÀÈôà€¶ygApRqlXyÆ^Öf¬³Tнª¸¾Â"€³QŸç%—ß³D1óöÂÚtéî*ƒ±iÍAy >ð™S kFÀvÃĤƒlYRÒ–nR÷Úý©Û†ÃtiÎbØüxwë.,ªˆÞ胜¶ 'v¨÷ÕÓbJ²M#ºAÇc,4e«;CÝrXá=Š½|ie•¡xzþö]Ûa¢ð•edÝCì—ï2\ƒ0'5ðe–û‰º.Ú·‘LF„’`¡ð -¯4Rék¥^|g;õ^^VE#Ó³Ýz.×\{Ǩ§Ú¢ÆCß}ÍÛ‰ô»«z¼Å†ñ‰“×ÇÉŒlá–Ù”JñU#Îcrßë¢ÃȲ.0 1™Ny¾VÊêY5ºâ΋¬-¢Îùe™á6>2Ü÷Ù««~„½±Ü©…Üw¨'Óigç }ùÖ@u·ƒ0óA/OrbâU¹9y˜Sí Îs*ý¡ªîåI7…kgý4ÖO²§° µ°t¸™Ÿæ±›ç<Ô¹{,áö5fÅáY°,iÃþÏ‚%&E^Šw†·ècœ‰·š…`Sðþîñ -I9TÙ·ÎÙêåÝ™]Ïg1Íð‹TÛ»w•t²Zc^Ï𚼯<Þ|zwCþ†~‡ÁÐEÆN¬„KwêÒ›$q4‹¼LY”§™rãÕéÖŽ)Vë‹õš`K“eìõçÅ¿PÜ endstream -endobj -947 0 obj -1490 -endobj -948 0 obj<>>>>>endobj -949 0 obj<>stream -x¥WMoÛF½ûW zrP[¶dGrzK‚0Ð8n­ =ä²"—âÖä.Ã%Ũ¿¾ïí’M‚"Ž“»óñæÍ›áד¹\âß\V ¹ZJRž¼[Ÿ\ܾ‘Å¥¬3¼Y®ndÊåìòO’Ó÷¹ª]Ë|>“OÖdF§ò‡Û:ëe£›Nk+ŸM]çå~ýjýÏÉ¥œ/®aâTÙT>Ýßý-­7vËSäú›ã ý_Íg ‡¸x»ñM­’&»†ÛþØbÅCw¶ÑÛZ5ÆYqY4O?LR;ï²fŒ4yíÚm.¢¤í#/¹äŠÁ#òi˜T×ÈIÉ/¹+öë¦ø¥Od~c3¸£‚Ûj«]ë7˪m˜—¶;S;[jÛxÉ\ K…ÃóÆ”z&ŸµTµöx)1¥eŸÒ©tc@†LOÏpŸÆåäØäZU¹Q“˜|k-Og7….Xô.¨ŽæµP)SVx ÇaŸ8=âü×Ã{ITQø3y(ÚíVÁ¬¼m­mLïpi[hœ`‰˜Ç½*ò£®w&AVi’œqÂŽë†ÒM\Þ¯%u¥B iíÃñªÒ -@ê«4è£È½'!ý>¥R%¹±¨Ä:7^*…ó’jŸÔfƒ¼Ô¨ ãPr¿÷.ÏD« -8g¥y8kmBtUaš½˜†àï@!$™#<€Ð*3Û´:C`ˆ²Õ¹úÉ‹‡k(ö3¦úûúÍ&¯çoðûúf…ß ü¯ákèÍ¡W®o^>»M³˜ º¢Ô!0š¼¸èÄfŒëtQÈ“uØ‘«æý“«€MM–¡C@ÆÒ¥ºˆ¯uÏjâº0ÍIá¶è¾ -Ù¢'ÊÈBÁÓ#›NrëЖÕ`÷(Ø#ª†Êe…иRªThf’¶h@‰‰kBL™Ð¡fMç$–“à³EŽ§AWïö¬Õu¨áZ΂z}´š}X‚I‡ŽŠ„»Tí"þ&µ$ûQ[±àzÚc“$®¥<ÀØÆ5 <˜Øú5ôeÓ!àÀbÆ;A$vþ¸ñBÏCÉ ú@W5P”†½ÅÔšv€ÈïÀ÷ò1S–Õ®tL¦ ¾ëôN×èfXSiÊÑH¡ƒÆþrôš g€74 xRk&ÅJr²S¡Rý½Jy†Iq¯kýµ5Ôé€Ìv¹v@‚¬ZA^Xc›@ò­ù7ҭ׺ã BêßCí‘Q˜ûà ‘™!½¶&Ð÷ÔPB}¾«µárpt€•q‚µÖâKHhˆö7†ˆÑ|dâ¦éhà$‘ÁÈ^vï_Ü&ýœ9_Ín0f1;¿,–«~ òÀwÅ‹7J;qæû«?o÷¡/¤$¹²[²†hþóç‹èà »TSM99¢¯@Vå:X“ôß/Žt®-Ò^öœDá°Ú8˜8 b)Ñä® {ÉhJ¤mU Ó¤|¦v  Ý>¯ñØvd@¼‹Îr`UÁ󠘤œŒeËuŒ´ãžç"þÊ÷w¿2fžœx$›q7`sî,&ßx#žêåÖ5’ÂNÌÉ “Á>IÌá‚„8º˜ -Ç%£w†ÚƒOãæǺDR3—¹'ì/F ôJKNæ³`ãk«±ØbrÅŽ3:àŸhšŽFxa `Ó -r}èPÈMü*Š[ê•Fù‰±ÍDÞéD! ss¶ÂxîE^€ŸŸæÜN"_NwF…ÈîÚ1ñòˆßXÙ¸³¸Lå½fS«zÿåþøÈ9ÅX ›#ä¡#=Féâ,Û“^£Âí±¾Â`¶M¨ðÅíÍñSíê2~5ýÔ§c zÏ^"ß7,S»^]3ìõœ°2ÿyòk7Õ¦endstream -endobj -950 0 obj -1670 -endobj -951 0 obj<>>>>>endobj -952 0 obj<>stream -x…WMsÓH½çWtíÉT%Æ_$áhÈn-‡„,1‡\ZÒX"͘ÉZí¯ß×3’?IJ@ÖLw¿~ïuûûÅœfø5§›-¯)­.Þm.^ÿ±¢ùœ6[|r}{C›ŒfÓÙlF›tòÙ+çɪ EŸ>|¥ŠÓBE)‡‡†¯èa#9b“Qîl³#2\)OìådG­mÊ,¼ú›áZïÕoñ¶ðÖôÕæÛÅŒ®æËéÑ'9!÷§…m mu‰›È[\Åu¼"|¦2J:‰žÙŠuÈEÒu¤öÊPis<«åœ¢óì%QטQ`Ž/}½ú¢Mf[òÊ{âQŸ†^\OW}ÂÀ¨ìÈ&{mO8®SÔ€Cθ/Á3Òž¥M.H„ÿÅ’FØEèj~Q!ó­uÕ(Ñ»÷ëÏχƒ4< èOiS ~•¢vÔ kâ²´­?äl2U+WIGc.NeÚ©4æn‰G‘{ SkjgË=G”–Mz(pÚ±«uÚ”ì°/ ƒ Ý:-¨v—Wûkx8µUN™Tecl×Y¦%dÞ]ß9»×™ ÝiÐ_ƒ˜pðp¯Ó¡œH?z<–MžsR*ZŸUyo³FH÷&êÉk`)Ý>yG4ãk‹‹9`AËzŸ'½ìhùó«Ð¤ß7ð z³œãçêö?øƒ(Ûh+oiyˆ­¬ÞÞie>Ÿ.§s À.W5}†ÔŒS/ºZˆMN´S‡—‘?$e]ÎÀ!ô\p£‚÷¨Ù©¿µ¯!ô#a‘ÚÀ7³uìA´ng EOLxΨ­öElyƒÅû€õ‹¯û »P þ8=вÕ@€OúÉÜËØÛô¦Ñ2&‚ÈÜqê{b¡CÀ•E¢ÁÃGb€¹2J”Áúáé)N=jd¬SFL&”AŠc^aÚÈ<Ó\…±²z€J`G& ‰þT…c€%@›:à1ëœÇ„>mýbµ˜^ÿ¢õ‹Ùíôölqƒ¿®Ä_LþˆáRI&î÷%üŒ á%ì’@~ê;Ij ´sðÚDFH¡œˆYV±=»°=q•0mÀ{ªT•È 2•ÚL /àf/úÇöÖëâ™c6ß?}z|˜Î½é ³Ô è 9*‹"z ¢:U6Øк<ÎR ¶@/S¤ßzEÁiÙdÂ:ñ¬Øpz{)±-Ї t?ásï7;kK\Í”âõyËAh! —µ -bÉ¡AÖ3[ƒN ÙO+ytº’5ï.,£"ß·5l4w‚m–<ëøZv)Kb!f[bßî´*3Г)±¶Û-…þEËúàЂr°øQä]ãv³}¬”Á€˜ø@¡Ÿ¸´¶(ÓTA«Ãôx!pÑcXs£4ñ¦MÂ\Œ -B¾˜†Ø™6£|8‘¡*ë9ÖÇ£$ô,|eˆWNé#vg¹ÈW‘¡PD;i0üqå‹éIvµ…M 6yfî¸Mé]GqÙFÇá*®^íxhU0·È«¡ìÓò.†Rñnì›ÂÉïdI`Á×T¦úèòã7²~¿[¾ýÉä¹í]}ŽÙ$ß(ggô´¾··ù&SýΦh&Ö‘˜€sO]Åc“Ÿ¬ƒ«›|M.ž¼YÈ1äô×Å¿¶˜Ú†endstream -endobj -953 0 obj -1691 -endobj -954 0 obj<>>>>>endobj -955 0 obj<>stream -x…XMsÛ6½ûWìääÎØ´%»¶“›ã439Øu+eÚ["A‰1H0hUýõ}»)ŠJëÉd¢ˆÀ~¾}û¨ï'3ºÄŸÝÎéê†òúäãòäâó{š]Ӳē›;|(è2»¼¼¤e~:›e×Ù<£'UkZh÷Zåøw[…|óÓò®^Ól¯žÏoqõt¹Ñ?:}FÖÑÓbqF•'E¥V¡sšÂFþ†Z§½nð¹¡Z5;úúôåO²­v*TÍšüÎ]ûŒ¾RÆØ­g÷—t>»Êæì6 Ü/­«qÉ6ä»|CÊÓÆúÐ Û•Jy0š‚:¯ÝÁ% -–VšŽ5¯º ÒÙšŠª,µC|S¯¶s¹FXŸ‘þ[Õ­ÑgHÏØVÆ6šb&[ë^ð¥„U«]o>åu€8„ í*ÄhK¢Ò¨©ã²2xèƒu©TÝØ\’'R­Œî©Ñ]ãÐ8”a‡ƒÎ£˜umgRþAL“¬%‘·3’R"††rÛøÎÀ.=}YP¡‚Z¡Ö„¦—ß)úô´à\_Ñ9Õ7kâsÔ×,=šßd Öˆ¸Å‚TÛš*5n];U׌ª Ú• -ÀÈ¡mÕ¬*ôž“p¼6%£¥—®ré#ªþ;ÚrΩrìK`˘¼IYÖÎv- B$·xìÑ0 ~ˆ,Up”äħ]U5=Û*0ô´ì‹×yöÿ¸øýù@0ðÁéÙת@æ@Âv”˜ÊsÛaÜtÓÕ2c¶éËÚOÔW1‘ìP,IÍT+§Ü.:ÀLà¹j3<ÐZ§+æÎEb Vù‰ëšOÒì;Óéµ4ìØ(Öya1Î µ¦co; -®Ký÷èeØØn½á v´Å§‰6'¾ÙgêUz2XëªZ·Mp6Ž™àœÆÆW.>ƒZ… OéB‡ü¢ñ^¨2ÃT”ñDÏ—§ OªË¼µzav¬¾w3ì$ÔÂ⩱ö¥kbTüúÆð· ¬i@oÆ#ÉÀ*7g»©Àœ`Ñ|#PÕ2¦þ°k5èñ¸s)V]œ‰¡ž %ºw­B!Šw‡VP4Lˆ‰« 4 >PRÒ0ËìÕµ-12“Bp]«u Ú·:gÆŒÁWLÅ5[ø Ó,ˆ¹†3ñ€†)˜êˆ¶QEÙ¶¼¬+´Ã®á+šbôÿã¹òbs-ÃDNñò‡HË}Uâé -Øb=Òà.rù¾¡ÛÊ0Ú˜«Uˆ“j[t†çÎÄm€$\à/°÷—ì‚Ì |ö«úâŠË«]ÄO4yhj´\Ù^o3m¹c«Ü ¬»IäÅÍ+³‹ñk@l~ÊE =Àƒ)äÓË(‚´›•]“óEŸ+ph¬V _/€œF»L˜°™Ñ¯ CQö“ ‹ž¿‚?rÏÑ1Ÿ CÜà /üßÑàö Úw“ËšgÏó=ótcãíH+fâm ð÷ ‚Mo0Ç|/:™ -!¬v BðÜh]p擈ëBäB€‘¶ S¤$Œ$Ê=îçH„qQÒƒ÷”‹+ -z—L½‹qÇs0ß& #‘“Êë,ÈW ¢Á0H%Ãf¨!rî[Ée ÷È.Ò«_–'Pº4¿¹‚’¸¾»åÏø Ú)§Âx>ŸÝKã«ŒžM·^«&ò¾ãZ„^ƒ<Êœ -e퇇]tò[× #·ôÒØ-Êëéùþ*Ý„>y {åƒS˜ì~uè O0Á¬«þ‰‰‚Î75v ÖÌP¸±Ìnz‚©D™·ÖûŠ³CE…bËÝ^c^Ö.€GÀyâ|Ð}ø£Á‰ÃlQÚ¨WÎÎœÎmÝBç2Â@ãó¨:âäbp°<ÊΈ|œ8¶€ÔLîÐÎ(G­…VŒcwP–‰”ßW[“W¢[´mÀiÀœÝN¼²¶ˆ›K Ò¹Ì [()öÄ[QCËŠÀÊ‘A+TaoY°;")±… Æâz⥃cž^Ë¢š‡(½Lù©çÄ©mÚLÕ¨µ,Q¡å!Nd?<> ¾YÓBz= ÎzÅk!䦒®ŒŽ;¾—éG7ö™áSÒMˆ% -JžïÕÔé(!^ñkÈE~çÁ›a…´è9ɺOQJÒC”w†×ÿR`ƒe‘+XË7ªY $+€ˆu : €Œ]!2¿¿YG/’yÀÞøIïn“8Æa¤:öK%?*¼BË2ŸAŽï}×*ú½Yì6v$S[UgůóF-ë^¼1RŽ˜š÷)2š°HEvJwÈ£õ[+¼°á^ගjnñ<ËCŒþ.©¬ÙÍm6Ã/ïù%pqÿøñí´ß¸¼ŸlŽ÷š$þøÖy<|~;ÇÏÅ[?k\ß^gwø5'¾âëX¿ü Õ¢ª”endstream -endobj -956 0 obj -1820 -endobj -957 0 obj<>>>/Annots 146 0 R>>endobj -958 0 obj<>stream -xWÛrÛ6}÷Wì[”[¶(Ù’ßêÄuⶹ4V&}ÈL"! 6 0)Yß³ R¢è6ÓÑ$¶E`/gÏž]þ8Ñ>#š&4¾¢´8y3?9¿›ÐhDó%ž\ͦ4ÏèbxqqAót›…W~G¹sOê’ªµ D©³•w9-M®©r”éJûÂXMÛµª¨pYëÀOr§29ápU©?leRUg)]ëô‰”ÍÈX¹ûzþxrAg£ñ0A ç3í‡4g¯ÆÂÉR¥š -õë*ËŒ]Á$Y½íÚo Ž.§oÆ. \l42Ñ*ìNIå9âA¨Vë !Ò…îùÎò_9ÇÁóóó;À'` JUü½¦‡ÁŇ-’ƒb©+zÎïyÐiíMµ;ï[`TØíç›LjΊOw€ò:×e+j<^£`™ª¢kdì¶/ðßEmô QÌÆaæÒº@¡b™ÆÂùéJ™< 9˜_ç'  ]%ãá„&³)~OðQ,#Ë®i4‰,»œ]¯Žx6 'øÐW„/txçØvK7ˆ;’åäž0WßÀ'p æ›(öJ.2ê^Kîµ…˜™Ûú8—’˜Š)À†„\=8™#Ü)oPøŒiº4¸û}ðåþöûëHÃîpD!7«u•ï(3Ë¥ö¸Ç|úúñþ/PÚ¤kZ+”ƒ¼²+MnÉÞÚ7Äâ2qðÂÆéN²  iC  -ï÷Ýs×° 8Ü_Ž„!ÝWL¿¦¾¯=ºD÷¢*BVÒ£©Éöq±W’îÁ± †DŒqÏsc5òÛ.ͪöȸÂã -Z*| ]¦”¸ˆ5‚£Pr³õòTSÀö”yá¸Í—BFv+ËÒ°+F%\tj/,ášy\¾AÄ,áÒø€º™BŸÆ,zù觭~®bRHgé] Á×Rbæ‰&)Yé]ªB*ËÜ@²5j™ØFù 8ÃûîymQÞÖZ—l1gñw/¯næ¢hzÌ·‡D‰Ë-t…fEqÄ€¤Î«KŒØ ,3T Î¨¾&T`8ØņQîÑö$ÄF-Tдֹ(º¢*[Pûõ´¶ÜiÚ!’’]6‰¶Ä\…GÅìmb ­Úu¥g2Cp~.=ãëk™,‡'Òs9¤/’>½UéYsºƒ±›DŠ>„p((+mµ‡’ ¸Ü åôàd¹y†Ö%H9wÀ:«Ñ‘JÕÖù'äþÅv }m®¶­,‚ŠÂ»KsûŒ0VÙîÆFÐ?jmá(J…Zˆˆö^ìX -3W¨ Ö ÷µFë=ÖU -q(x]ÕÞÂ!Sôùö­ˆBÂwøªå®ÊX´5Õ§Úˆz0_°õY¬¼à7·¶4÷hOË(¾ýŠX‡ùù/ÁªÖ Q[©:u¸Â§e`6lŒl° ÚûOß柚a€±ò~,êv$Óxf:¤Þ, ›kìus¥«}ËqØ~ecgØ|m­ìÊ8×´7t,Ž&<î,åØyˆöè -IÙ¹ÚÓÆÖÏ´pÏ8í!ô¶Ï÷NãF‚ôùºJôæË ù©GRÒù¯<¸\y† Ô)Ú0=æžíoáà{Î+Ìcù¥¹}†ÙÈ;ÿ™€5¬ž+v|ôAHû¢qWCsxnLð‡)Ø.ÂH#jã|éDíå½ ÓÝQ43©~NúëéË%ør8bÖƒM˜Ì€ã°÷K¯¼õ‰À<’#“yŠBÊRÙ%Zšù°' -[ì0ú²÷xš¢MâXë£Ó õ½T ¼õA” n¸$¶;d’7¼öU1¾ˆÉês+c'2 †}…Ù`1‘ú¼“Å=ù]† /O¯¼^ÕàÇ+tH¤ø)†ö_¨2ÚÏ¢°ÍCw«Û3v_¢ñÅÈÁö’äw~7k^åFWœúÕôr8ãe(žýìÝ#ºn»oBßY<~6MðŠœ þï«Ëd:y¹r9a;ÐÇ?Oþª—ö"endstream -endobj -959 0 obj -1766 -endobj -960 0 obj<>>>/Annots 149 0 R>>endobj -961 0 obj<>stream -x¥XMsÛ6¼ûW¼ž¢ÌH´(Ë–3=tœ4i3Çn¢N.¾€$$!& • ­êßw iŠuzédK&ð>w÷=毳XæøËj!W’go×gç–DzÞàÉÕõJ̣֙ù|.ët²Þ'¿ß}[ßÉN9I´.åP™ºÆÏMe Qòê‹Î~Wõ,Õe]™ô•ìuåö:­Í“žŠ³b6"GÛˆª´4Δ[Q¥­wº’Ì8\IšÚØrúzýýl.³ø"Z „ oê·OZj+…ÍÌæ(¸'¦Äµlé -}Ø©š‡6?p​0pêA¶ztýœ¸jSFf‹«hI—ßvGq;Ûä™|¤µÉÿŽ§íñÙ*ºF™pøaqµ’ð°+ŸõÆ|åTžÛƒó!}½¹}{#*+LɬUm+ú¨t~[ú#¢_Ö&UÌM -îN®;ñy}þÍ”‹O£ZÝÿúN6´‡ÔG6Än$³…24W$hM$Ò™A;ð )­ä¶Ü¢!¥Ö£òEwz¯§¦³Ù 3*MmSÖ}P!3XzÒUÔ–¤+/®=W×vÕM4òV¡À#À´)øÿ+v€)Íig¶%2aMÜÑÕ8ž5ø¸éA)¦Øçš0¢ʯ§Üg?H>¤ gr0nÇb=L6ÊTh£VÎäLJׄÖzËÚ‰þݦÙQÍ=y9{Õ ôq¬òt„ú‰$*}”fÏŠµÏ­‚LÎužïUeÁgG• ä°‚lÚ -#9Hlí~—'hùªâ‚Rf ¾$ÖÖTÕÇGt{óéý(ü»ÏïåóÝ·‘eoµóz}05ŽTö uw’*È‹z„4×ÐE2€S·´…0Êí¬à'‚¾PéΔ:òØ}åä°—–]<¨Ò«:äBÑ.û}qɱ` ž½5Úg¸8I]ãÄÀE@½ÒUÕÞsÛ Ì@?ñ&2nG'桇£ŠÁ#Ë`+³5¥ÊÅÕä8~u”ƒ†DÐM»­®1!/õ¢¾„žVH~ë™ NÚªË7°nêÇÌÃdŸ7Û­§éh ›\;ŒÅl@ᨆ4Â.&½—#–ùâö!û* 0â, -JYi!L¢ÓƒïJ·b„QQ avBjWn’JUUAeTY\£)Þ{Ø€ãh)T'1§¸ç¶ …ÃØ_EñÔïì«*SMÎù„]Ka7¥ñó½Ö ‚Ù>>>/Annots 152 0 R>>endobj -964 0 obj<>stream -x¥WÛŽÛ6}÷W Ї*ÀZ¶d¯/yKÚ¦ÈCz[?.PPe1+‰.)­c ß3¤$ËÞÝ´›&€Ö6Éá\Î93úkÑÿ#ZÇ´XQZMÞï&?í&óp³¡óÃìñeNñ|.i¹Yãób®ÈHʱwN·«ž~Å}t+°…E\0<`höaKQD»÷®6kÚen}N»4ˆ¢ð6\„QH?è:WûfDQª«ƒ*%ݽûôþÝ›ÝçÉìÃr02Wðj—»Bb§?'¥ëÑYÿ]çÞ)K#›æD¶1Bí‹&×æ(L[É•± 5…‘äÁR%NTë†É×Ïi-˜/­e*­æD™<È:SõžÚî>²)¤!mÜÁ“n©’ï}Tºµå‰’V•| U"(Qµ0JÚЇ8§-§)¢i|ë#4Z7ßùÅÈ/.b¬ wY ÚFsôg§n}¡”¼çkç+ñ€ô•RÔßjÁT]úÃT¤…KÔìCÄ+ g}%M§GÕxÔÈMö­Žqhÿç,©Ú6¢,½ySP`‰Ú¬<v@uTeyC ƒ!mÙÜôG{ÜÕÔ;â9ÌZkf¥NE9³ ‚Ë;‚î€A†H%TÝYÉtÚV²n<¨UNŸÁò(j K_]ou%K°J–V†ô±q“(­vhÌÜU]º3’_dÚ6"õ˜†¥JŒ¨‹Â鸭.Ïý*ÐSLt¬Oˆ‰î#:^µµ¨}Z„gP÷Â8o8)pß!ãìÚeþ‘±: P-e&­&ÓÖ.h𶿾ÏÁ¥½€2!+°GŒn÷õn:‹l/a:(o>*Êëƒ4liT!®9‹”½!«ý-âN¯GŒ\£ô@aèá2³º5©œõnÌ">ÿÙ¹¢®üÓe£¬|ôµÏu‹úªQôr†Pœ$pšs]–&÷dOU¢K•"áõÃÛ×¹]Ö4µÎ¼|ús¿èù»:cv¹Ú¥ÂJbqG-­.Qûm¾92ªä©#äyúÜR]¦! g‹æ¢ç# ¼lô|ße5_sÙÙÆP¼äÇÕe/gÿ}¼!a]¨,?üe]%d&›t@èˆÏ½’Ì£Ö¢g²ØìÁ¯Aå¸#vÄzTV±åFWW!0LýµO¾NáèÓéõžæ<‡”Z?€h˜€d_ä ¼æÐÁ‘y×Ý›ºiËÞºolŽÛÆÐß]·î÷ÛBdú8ÞßÇ~µÑ¥ÌïÃseø<2My¢º¢ée½WEô/NgçU/yÜÛXÝxШ ]hY˜a¸Bh(E|¦ -eæÛ¹/ιänFpjù¥é#ꦪFUÈ-pe 8˜À*t•ÃÄ2i*ár%C÷ã…A˜éú{Ö°NÙÝ‘û7ä;$Vù`%ê–=Êôß4wf1Ìú`húH¢òÐgé2¼‘º¹€•Ô^ƒí’•—Ðâ…*]ëE^{(ƒ%U¦…¶”ˆôaÒÂ_ìAÜàصåíÓÉ×»òjƒþ™¶¼·e[%ÏPvà|”F”tFT0t¶SèÞŠÃ%{ P4F—L Ta4V˜”¡á>ÿF⑇þÀ¨wö£y'oðIé^E"~ùãçI¼Øbr‰7Z*Š·Ë0ò_Jºã÷ 3cncÞ>F~Q@×áP3iS£Gª´û¥Aõ¸= ”8¿¹ëñ&ôU½6÷oØËó÷‰÷0^‘Ú=¦µgôŠÆ1žý |šÂúälºÁ"Š–á‚V[LYà^¦è7£?Ë´¡Ç3%ŸšF«52]Çîõ¢{5£´,rˆOK¿¶ŽºËõroW]¾Ÿüè&‡endstream -endobj -965 0 obj -1403 -endobj -966 0 obj<>>>/Annots 167 0 R>>endobj -967 0 obj<>stream -x¥WÛnÛF}÷WLQ‰")Q’ƒ^àÔq‘¹´Q‡¦+r%Ñ!¹ìîÒª€~|Ïì’ºÕÔ6d‘»Ü™9sæÌ𯋈BüF4i4¡´¼x9¿x5¿ƒÙŒöz…‹’è2ˆi<›â{”ÄÁ˜´¤%?‚Uœ³ûÀþá͘¢ˆæK?™Miž¹õæi¯TY¾ÌeFVQ^¥E“I²k¥ŠBmòjE²²:—«náU¡¢ø“ŒLm®ªÏæ·Û.Ù@Dƒ83ó¬×mäõBàÛÄ?ßAðã} ql-´°’2U -ØUF‘º¥¤Mn×ôôùÓ>ùI×ïÞ\½~û¼[æ`£ðû/ñ (MðS $.ቿ*èÃ1dî @óFø+À±ÈáNë¢Ò.‚Òs<Û£è9/ âéIÜ9jòÌÐR+ø⇡ݗ¥Ò]Ø“iò`÷‘ñ1MÜÅYïÃ)¶ßç=¬?ì·shà¼9Áê+"XiÕÔG!$³yhCðçBHf÷ãÿ+ÁÌ­›R‚h 0©%˜åsëpw¤»ÇÿÉØ#k xL‰»:ÀdìJa_m6îXíðÙë!…¶ò<9ç?…øŸ¸«³Æ“ÑpÆ÷ѵ~…WùWâ^PQYË¢ Ï=U[ª¤Ì +ù’ecKk§¬,*iI¤©4æó³C~'#ÔÇ1hþêl|£ãâ´²¬ Öµ*e–Ÿ©Í!ï"€ÊŸ\Ÿ|6ߣܸCYáy‰›ÅÈÚCaÒV5š>AwÕÆtêÈþœ}••y•‹’ö¼ÐY Ñ=Ì%÷(iHìcZ×:¿Ë ¹Úõ»‡|S -¼mtÞ¶«îÔJÙÇ~5邦acô°P©(†F” á2Ïu ë”zã°|¤3a—.Osä ÖªF ZšZUè*m–»t™µjŠŒò=bZp‹ÇSmW=¯í¤þn7,ô}c9S|ÄA}‰Së@óí™F WÙyžÐ§yØ«gËó$ VhKMíBj¥(£LÈjîÈ*¥Ü~wÑ‚¯î0×4hÛ>3 zåÚˆÊ:žóP´õÌ3å‚ ›ƒ5“ê¼v;H4ó‰Í‘Th]^Ý©¶4N¼9ÁUáÇ(…dh¨c ·Ÿ®¢ØPŸ ;ÏuQ+còEá³Ë1),Ý6øÂÉlma—v}l™kc¢¹ò.¡Sû»Fßåá>wÿ)yêH„aFïf¼ÿÁ÷—3òúiI¢Øˆ-¢ÆX©¦¨8û\3FÜzÝTæUL–ÞÄ×Vgmh $ýC+-ëR7aìä€8ó5Lvø´E†RÌšTrrjäÇ{Œ}ý¶ûuÌdg½—mZºz…qB?…á ÷wäÆñ·jƒø0œ{‘vMׂ}²zËÌ]AU Ú‰MLP.ˆ³†Qó3ážSUt„oÃê^%Û ‘- šSë0k±’)”w!Ò/äzÍì÷CWçÕ§Vëwww΂Ú7]þ-ÐëeŸ^»x9°ÝëJ l×@:ul>>>>>endobj -970 0 obj<>stream -x½V]oâ8}çW\u+ÁhJB(P:ÒhÕ–2[í´t§Ù•Vš—ð”ØŒí”Aûç÷ØNe Ú§)RríûuÎ=ö÷FDü#ºèÒù€Ò¼q7nãF'iûPs¼t¨ÛÅ£7¼"Š¢aÐ#Åh†µøØCg‚³ÎeÐÝšçÕ® Xë6! ö!vý@ŒpÜ¡KŠgÈg€øqæÌŠÓÖÍíäýU–sÁµQ‰‘ê]ü­Ñ¡v„$±ÐÙ§…ÊØryÀò©`ÚøþÍ´“ìÀ÷g55óCb}' S‚™?5s9„ãša“nGÔîP:Ò™L_¸,ôrsFw´H^‰$gåÊdžpAMTÔ¤D¸o6…pÜ-µÖ\L9,š­’ºØm qMÍ÷Í ÌA{6èß² 4ˆ@fÁH#"i© É>p1'#iÎ Í•,VÄÅLª<1\ -š)™“Ûõ8ºùàÓ©±hwû>€’Òüâ‘ -ØöÀ ­Â¥L“eˆÀÓ$Dᙤöü•Ç¶Ûõ -º‘oŠCX—eíB[ÚmÓß0;˜ß°ßÈ|U¾7—£äryxÑ C7‹é’ëÅáOé‚å -äÖÒg¥¸fÇ×|rð<Ê%O7t£˜¥;MÖ¢Œ¸%Â.ãb >+Dêàle&LÓÑAÈ5Mü+ P>ãx%b´åÇTš9ø'Á»Ai÷æø¢ŠÕÆr¤ÂçÜs}†vIPvN©Ìs0ºæŸ LiÅÐõ+²[F"WZ%Z¯Ý0n ÜÙjÉ­²XfŽÂ‰KÙ$iËg÷gFY(ªÈæ÷BfÒð÷–÷áóG7¦®ºj@}ùkŽ¾ f®H°õ^åÏôÍÝs!1m”qÅRÀÅ™ï\ÆfI±4Ȥ÷Öbæ¦ÔO§]•I(¹o;U)Tí}]ÞN‹Þê®óew:q‡”/kÁ¶ú\‰r8¾,Áš>ÄxGƒ£(èçÁ  1ÿáÄrlè”I”¢èTñ•qÓeý8)·ùõ¼|Ôû£€>sQüð•Túé*±RbÛâM5IJEÜ£G‹²„å/ÁX¦-¹]&„T’æÌå¸ç‰t>ýÉ•á½uâÀ2 È¢[ªœˆbII -꯬* $¯å¥“èç3KM—§M3—Ÿy¶íõÎ΢#±ÞhÃrÌÜ‚m\@;œ,á}ª8iݹã î¡Q·V]Åa!ìt7*óù²ßàe[tí‰Ü¬T®¬ŒÿìŒFlÊ”hÛr’,«ÈéPàâEbm+*„pâaŠh¥äÊŸ›;ùhö½`"eèåý†öØä_µÅÔçRsâgûkèŒg;•×ÎŽÌŒÈÜÇ®µ“ü¡so¿i•*àðwú°ÜXÚ M‡~“¶Ê]öÉOÒ®²ÙfÖÂZ^’êƒÙ¹ùÚúúŽþ±±mz彈Êßïw£'O÷×'G°tƒZÐéÉ“f+ç§v.!ê…§L c[Ë!<Ô ËÇŒNw4yŒï&OG¹ÿºúüñô×#v›Þ“/íá/ÍR‹N÷?•Ö-k ÇÃrn#܆íE×Þœ¡zOW÷×Wô¨ä7œ 4’i‘ãXt×3[x;Ø{wû¢ë®[¥–RŒ‹­Å*¶÷;M“ÂÝZ{=8u ûC»ªÿGã_!ï_Åendstream -endobj -971 0 obj -1242 -endobj -972 0 obj<>>>>>endobj -973 0 obj<>stream -x½VkoÚHýί8Ôª~†TB«Dm¤j·íncu?„®jìq˜ÆÌl´Ùÿ¾wÆ6¶n¢F*Hû¾ÎÜǹ¾êxpéëaâc ^uNÂΛ°ãÚÓ)î/ùݸð}ºŒ¦ý×Ûr†”t] G¾=mDn`îEãé´yðÜ#Û¯D‡ )øæBAœSGS€01ba<@ýañR†_;.,’ÎFôëÛ÷¯gÝ?¹Xp‘t[”´=,~÷¬ˆò‚‹ ôµ!˯yÌÔ+´™&[I§T¹“É8Ê­‘C᜛*jÒõã›ðÓñoÃYÿ—…ïëýÊ»¢bYQóÀÿß“aýä3ž?G!Ëx ç:2p/U.Ô­rÔj»;Ìç-P(ÑU¼™×¢‘³¢Ì)…•ÚžÒ¿úÞ9Áót%-–PÕ©Pá’á@r}€´qÁ)›ËH!B,󜩵‰.E~Kð¡–eDÞdº)"‘ “ò -¿d$åêUwÓ@–?¦6¤¨:à|0?Ä?{H›–ªúæìÝI[á·z†™ž1 Û8—<ËÖ¹ŒA©ÿ~‡üPƒTøßÿüâ!üþðøÁ}Zž:ª?<ù -VúÍyliLÓwݶ®|x - ‘9G45oYÖ&þuN*¶%·–{¾õ<{lmš\g2‹r®v›ˆÈô|}P•ÂKÜÊ‚±DïJ&<¥1¦ÉmF³¢„Vļ°“ŠCm;,ß0€Ò]®¡âœ¯ o ”ªŒ²ì‚®FÁÓû`XÑŒž2Cº]± -QKYf „¼©,Ðôá”ä65À‰‹® §ƒ ret.vÑoúÖ&Ø;ÂK˜¤Þ £e&Y"ZQÞ5a2¥æ¦æ‡{~Ã5Of_Lô^+Ú~¸kÑ56Ý‹œ­aÝ ï=Ò@$ò~ œ¿€ŽsPßÁÖ7_Z‚ž£Û']<›¡Û…YËæœúéžYœTĦf=˜7Gï¯&LÑô^•<'4©Ìëf½ž-ó8RŒ¢{ÝMOë•ì­_°‚êõéìøÝÉ1~ÏåWx-ãrE 8ÒÛY#´¼`BêÖħ÷°dPóB¦Ì" u+|(MíG“95Šã#mMôGç?fí¯Õendstream -endobj -974 0 obj -965 -endobj -975 0 obj<>>>>>endobj -976 0 obj<>stream -x•V]oâF}çW\mÖ[ „é>TI³Qûª*!Uƒ=ÀÛãÎØ Ôö¿÷Ü›“Mw…˜ûuî9güWg@}ü h2¤«1ÅYçnÖù0ëôÃ锎/f…7}õ¯Ã!¦ü?¼†S2’–‚o‘çð‚óÑCŸnh¶Dîñd‚°Yâôiom)LùvþîÝì¹Ó§Þ¥p ø¦ýž>$ª¤r-­¤TåÒR©ÉVøl¯+C*G¢4¥Ò9̓B”kÛ¥6›•ÑUÑ¥µ¶åÿV‘ñZÓw¤ò==ÞÝ·Ú ¢¨²&Ju,ÒÈŠl!¢…Ê#›-êÝSÏÒ|~ƒ°Æ:_Ö燃pÌ£Ÿ7ñó—7‘7M¤_ÑÄVð4+îüb²/jðw•„î…Ìt~9ûEVÆk烒Ëãïß·àCtqIºQiZ~™éð5/畯¿¢—o/„6ܾÞüfÅJ~G‘,ãHåª OÐJ³•†þ&ÇtúuAÿ¾¹ìè0z#iEÌÇœ ûtu3CjÑAx䢇/0Oœ~Ž Âëð*ã—~•®p›³F# X˜ÐÝÐQï§%« ‰}¯Pù“×õÉ ÁòtÛgšuœ!Ž´’"r˜G%K‚¯,Zåe×µf׺JZH‹T²@A¹ŒqR³;p¶‘+ç3S(Õ+ÈH‰Î„Ê)“Ù[y®lIø\ùÁw˜ -rê¦ -a!çkà0¶/Ãßà8œNÎì­FÒºZUÈ߆ùtûè19[E8b¨—±[I™H$9ÿKa<›\ï04`jt(û¡J±ÿ±“•z%Ž ‰ê¬;‘;È0d ²:ã qm -‹ -Áy©bo¯KmHs:rȪXÂj7R ŽHPef N!2ÞŽ»ŽT)Œ;—2áô‹vi‘–X@3÷{·¥,kÜ«¤&f½7Dgb#i!âMUXÒnh˨•ÊEZ3 ÷™#xàu‰†Bç§d[rOß3.¹É œ[æð üáدçeòã7m¦“ʳ¸—²SåšÉ‰Ï5œÿÄ4˜·VÆ•Qå¾Þ oê#\cM~„àìä̺ž§;8È óE©ZDM¢WfDâ' -£ #Nƒú­Žš$ Q,[4+Jiã¯ÛÏvŽvF¦WÄkr:-ªµÖOãÖ¾9¾æFÿ¨xvkMkBpiñs'Ož Ÿnïné“ÑÏìî÷:®2xÛÜóQ=ÔFK3\]ìx³5^-}¬œ–G“¬›óã>G£µ_:ÿß+.†endstream -endobj -977 0 obj -1140 -endobj -978 0 obj<>>>>>endobj -979 0 obj<>stream -xÍWÛnÛ8}ÏWÌ£ Øò%‰í,‡Ý`l±íÖZ¢m&é’T\ýýž¡.–/m¶Ø<¬I¤™93sæöíbL#üŒi6¡Ë)¥ùŇÅÅï‹‹Q2ŸÓþË­ñ^»œ%SºšÏø÷ÑM2!'i…—G4™O“«øè’fÓd¾r5ãÏZh‚W[™ëɨ–ºƒ'ÓÉU+3™4Ú ¦€·ý®áÝ ÝÐb/¦sü’ÅÇ#Z¤½ñ8¹N.“Y2NèOeŠïÃ;'凯~+SµR)}~ÿ‰RkVj]8”5ïOû++ƒÉ:{‹¤ê ÆG½¡ ép+ò$z‘/Å¡dVJKʬôdl #eFÁÒRRºf-³„ -HËU °Q>ÊO*ÐNø߃ѽ1 &×Àˆ"l'¿ÊAoýjµz™N…’¡=ú ÒçÄ[òÒ½¨TÞúÒ™XkÑ`Œ,G¥ij Þ@é>|=MêÚ°‘®Áâá²Bn3ä¢ -ÐÚîð@Rá%Ùí”Y*aˆKT“Õ¨¢©XÊX— ݸvY™Öv­ Yß@¶½EfzÖ‘  ]®ŒÐ]Þƒïúø§6ya9߇݌VaÛXKˆî¡Îeð•F,¡Ö¸yÇ÷0”¶ \”È°CÆ6TTˆ¸à•S 6y¯‰F‘iß eIV=lÚ«ü8’ˆÕûLî#‘‡wðào™ýè£68Òž_a2Ô‹¡”;jŒ’®HCádŸF®¦þ²[ÑŽDÇ ëç|9peXÅù‡ûП°Cù]1@^ŽåWÎæm k§ÎÖ-˜r(×åj¨ŸªÎÒ)½V¼¬bvžëw V‡0`º¥uÏ´uv+.û1p;¥5 òlø "ïˆ6âE"ЙzQYrf(ó4ØH”s~2› äÙsÇéÚI‘•0N¢¦Aý(Â]@º>¸ÛÍÕÆæÐV[(Aþ|«E£-êc-t`0× €Wö9ˆüD4 ×"VCŠŠEÓÂ+]¢4Ð*³®Àæ¸çóer†¬´Öv û\eÕë¦ï±²pá0¥½¤F‡'PµÄ8íâç¨Ä=¼ö¢nÛ¸Ä6Õô&NµHSô.:7y•+-bà|µC¢.žˆÖ§Æ³sÃåG°0!¨™%ŒI[ûLZ=s+R¯ãùq:<´ò!AXqËÉE—·™4ÜË´¼ Œ1ó`štîÖˆ†ŒUÌÎ6¦[°ì‹¦¯bnZ®‹ÁÕÐëTÅÁð;Uñ+“oë5¥©µ?«žÿų½Š×@üû™^4À:ë¿®ó}îçõÇçQEV[ÑQE)Ðc‡â*‘X~JTÅ=æ$–æµSbÇI†PžÉäž oÀÑWTF}náq/xÜ -ßöòÿåi<©=a_qóÇÕ¼WñvœçbÖòRüvJß®:ý°£Ônùöà-ŸÓê¬wÖ: çkñ¾³–õ±U‹,㕺xíÐŒ×C'e§æ¶7×CòZ‡Á³”X° .‹Pm0­¹ªàkY×f#&|¥tJ°kD,-o?{¸Å^â«aë,®¨j#'<¯v ¬Ä¼Wq³èÂ'‹ÂÞßf¢Ô›î©÷?®Ê.HŽ‰·s1þyÙ¯5–!§2>q°-Ø2®E™-pJ!ÄΘonCì] ¹}Ül⎳÷Guu_·G4NåáݼޓÆS^ógÅëøëûOÞÓggŸ°ZÒG›9æq{*©A%ÖÜÒ´>0ÖÅßžþ*ýšñ½Îú{Ó1ÿо\ü°Þ‘endstream -endobj -980 0 obj -1405 -endobj -981 0 obj<>>>>>endobj -982 0 obj<>stream -xµWmÚ8þί•~`¥%!,òíhïVB§ÕítÒIH+ÇqÀ½$NýÒ=úë;vH`Ýe»4HVìgÆÏOÐQ€w¿­zÝÕU³H€À F€OùƒÈBXÜÍßµg·ûðQ”[É× «]]AEa›è¦€;N¥¨–¢®a^Pç¨ ZíÌpÝŸ,‚‚O þõÑ6ÓîÃýìîXŽ‡°G3f9/4§N½ø‚¬]ÐÚ#[}TÆ €à|Ì)ëû¾QÒÏxì+Fäzkÿ€Z‹y‘xJü4Ìûùbæ°LÁÿG /-·)Gµ<”D)x;tÂIö`Wt~[BrG‰cD™·n5õJF·i‘˜NZíoññÙP5ˆ?⸅ܦ Ño¤à Ì/uXªÍí3TÜPóÙ¸ã~¸Cüy<ù¥taF©0(Ô×çþnâÁ2›¯T|³•ìàÜr×ÌÚRöÁSU²¶¤yT2»E¹çØÇt/þæå~Ù_’‡“ æ¡ëexhÃ]D'A/ÌC ë¬ÈÎN¥Ú-µ›xê“iîñxIJ*9߯ní˜=YÝÔV’çϳçü\k¡Çp/§c¢kÖž!ç`½ÙIS–Bj,•%üÉdÌ°^ƒÆî¤8¨—V=SP‘Û*×Öœ¶Œ­G¯®^2²;˜÷¢´·’aÔŸñÿ?OÕ&mK‡¥Èe‘ëý¤ÚE«ƒóíüÛéîÆ„!Vva4ªêôÅìîà î¥ø̨Æû5–êæ¦Õ ïO†xMKêk,™Òöv³Ü`«à/£-A£É‹}70Úxiü»óáiqendstream -endobj -983 0 obj -978 -endobj -984 0 obj<>>>>>endobj -985 0 obj<>stream -x­V]oÛF|ׯX Eá%êÛ}sœ0n¤¢}(`œÈ#u yÇ܇ýûÎIÉì¢b²ÍãÝÎÎÎ ùuÒß)-'4]PVÞo¿mãdµ¢Ó‡-ñϘ³I²¢Ùj‰¿çódBVRÁ;°ˆcŽ¸}t;¦+Ú8z£6y\Ó&»xgüNZ"üŽLã•Ñ¢"¢QpvT©íÈÉ,X壟îÖ×£FÔO_ìvž8“¤äíá©PÖù§F8÷Ëæó`LÃHQââ]î+S*Ãâ—È2´?ù/%ÎÏìÑþÀ³œt]ÿ\LÃÞØüÿö -£Û¥)l˜Òp²ÀxAé‰Êy.sgÛ¨RZ’(<Ɖ™Ò^é­Ò9&Õ®xC¥ôdÐ$´6¥KÊMØV’kêÆ;*Œí9Ÿ¶Eûž\Ò-ÍŒÑ<˜=4ç¼°ž&XZ‹z+ègÆE™ÑZfž+ø5¡Üµ÷ˆ¦©T&XgXq'ß\¨2Xt½0xè,᫱f´D¾XQ+ø Dßë}t{E)ðÎ|:‹àNOÓd‘ÐGU+«F™žè…`'KîæÏ–.Ú ju¨·àDU§ N#ÂJ(*)P?K5;ÚKÚ™F7XÈL-yg<:<#·;ÁýÊ×áyu$·‡£Žåªñ,T%xf˜E¶>*¾AsÒ¢E0îÎËújñ»H}c,p3 èöãghÚ}èÔfÒz¡¸`c`ÔKè]Èv¸Ô· -PÀË—DèÜʯAa;ñäm­€À#_€T Á³¢G0l†‰* ׈»\Kû¬2üÞ+BçôX…²ŒD\#¼0^WtoòPÉc uBîºKh³«øÙJ̆ùª 7lê¢ÄøÖëX€¯ï© G8w”ôÇÃÝ_¹Îu q;£Û¬·ëé7½J¬©¿'‹e·ÞÛ™—‡sNn¬oÀI GƒcŽ0ôÜì`CŸî>ÄÅZ*wÄ€µñ¸?‡Ë«Ò ”w5Z®X #— áœè s’m9£“ýN> -šëB¹ÁAº„¹–0iÓŽÞI©i{8&ÝqÙø¢\…ÊBñcLBá<¥³z/»âÄÁÍ]'}äZM -Jæ`µµqÁÓÑwÝÆþÍŒµ¡ñÀ ¤92ÇšƒÌ_å¾7Ð[Ü÷³¹iM òX™]XƉ×Q=FÙ2îÅ T=ôÏ°Þ„°ÿ‚ŒqÆCÀùWõ9!”V!Æ,cNt”n™m‡df;¿P@œÌ«-¦ -v9§ÈiºŒÚü. — ÝUC¬Õs¯×c>²V{–ú|é“ÜÞæ߶sìåÛvíÜŠ¸Òù™Œ Qk«„ÇîUf3…§O7ÄÂwHëgvCeöQˬ3ìxVðˆ“¢F°s´—%G#F—Î9±}V775Û¾3BZù¶s‚pÒ9öÔ)`‰Gž_!N˜Æœˆñ¢0xÔNÈØáý§ t”º Z}“çMG£°˜Zz–ØËÇàd6~ã1¸ê2(],ñr¶œàïÅ›Þúúþý5=ZóÏeú`²P#3#+Üý°Ý5l·]¼úØœ-g.>öb1åMÞïƒ"Ÿc-endstream -endobj -986 0 obj -1240 -endobj -987 0 obj<>>>/Annots 176 0 R>>endobj -988 0 obj<>stream -xXMsÓH½çWtqY§*–-&ÜòAj!b–=¤jk,íI#FR¼þ÷ûºG’e¡¸X‘¦?^¿~ÝÓ†øÒ|DãEéÉÕâdp{A£!-Vx3›ŸÓ"¦a0â/Qïz£òR; -G½µ[*-]ÛleÖ•Óô Ò¥¢Q0"U:]|;R4Þ½3©r;º±©2Ÿ)Míø+vâ3v؇8ðtï´Ó?*S˜RÓg­b“­ý‘ …a}d4çWzeÄÎVÁ¼É*MΟ ¸,7¦ È‡Fy¢U¡)Uß5;Þ«R+¾¿¹0¨ß]r%娿»[4]}{ùéøzeÑ0Gϯ¢Êµ+t Š-wD›iÁ­/ÙÍ„›½¿ñ-8*EîŒu,3Nû–eyÙ¨Äpk$‘P¤rµ4‰) 7‰%•¢?ôÕd±Ý–MP‰C :Jk/HD=¤ýxŠL¾rë·hÃ3Ú‚‰(iŽ*Åâ ˜UY¤ðÊDá ÕÒAУúE¹Kô‘ãØ bbלöÊÙôè”@ݤ]FÃG‰A- ‘.¨+M¡²U™˜ŒA@Ÿ@Yò‚2 5*XxΑ箤ùYµ ¹Ãð;¡Êþ8pݨ'$OPªï¬‚þ+KXS%“BY™iü ÇQ3-;šqOL†Ѩñ<„>ø§V£&Ãé‘F­.óT¡¾;Žk%-±d–QN»­ö9×0ˆ˜IÊÏ” G_îÞýóï»»‡Ååû÷Á¦L“ÃÛ–ÿÉ à9Á_³ÍÇñO¬”&ãaÖOmFã ækWu1Ÿœ -ÀÆ©™ž1~:AIv´ô£ ,‹´æ‘‡Ì/‘îgÖÖÆh†f@;l­*vC@@Ó2ãÃ〺Ïx;A¨öoyHYPÒ¯:¿‹h£d^”½$R±ƒ\¥”Û -{ñþè ÖÕäV¹aýc  ÆÎêa²(©x(ÕmÄ4¯çÌ3ÆuÇt“5¶tUQ¾(Üv=\~€»IûY,›f×ôòÙÂ\ð€2@J¯ÁLY)["Ü-A,ÓÍÔ¾Â'è^N z](Ôó' 7Ÿÿª-”/c¥šOF‰ú~áfø 2“éçCÿ}x.¡üÜ{<•T¤­ŸaÒ ò—vKí¬ïâóY7†UÕºÝÏsþ•ëÞo`F¶¸*4µ‚¯5­@ \-tŠX„|ªá ︒²áøi]so?ÆE-;¥£^à\ú¸¤HUqäg<¶p ø…U©Š6X–HZ;c„5­Ìé~³¸™xõš…¼¬¼æÀ¶vyM÷)KÅ„ ~bC?Q¬KeÜ«hÃœ–ÙÑÈéÙ±ž‘.£ ÀÜÇ-Æq¸±6kV3“ì8€aŠ\G˨¬§hà3­}ÃÔN,AìTÉÛ“mù aÎ4îš~ËÃzé¼Þ5qhk’\`—ƒÛózžÂùx*7š—üÿÀÑB~ô“9ß‘¤Œ3a(ö­O'ÿÆEò/endstream -endobj -989 0 obj -1782 -endobj -990 0 obj<>>>/Annots 221 0 R>>endobj -991 0 obj<>stream -x•XMsÚH½ûWôek‰kI 6•Úr’u’Ã:ÙØ·8‡A  D_ &Þ_¿¯{HÄ@bW µ43ýúuOw¾]øäáߧ8 QDI~ñòîâï» o0™Ðþb–<Šñ„ÂIŒÛ0Ž!M ž—XfwÁðáuH¾Ow ¬Mbº›Ë{î’^® ›–…žSYd43©^àw¥<»ûâôcTº*·Ê†×SòÃfé0Œöâ~0 èUY,ÒåڤŒìJÓ­ÊgŠ^—¹J ~iM™eÚ°¶6Ò~ÀH{w˜±HMm©¶º"LIŒV–S´)ÍW¾sK~xýŠÒšlI´.æsT1••2*רЉ®key©:Ÿ À½£Mše{“}&ò㛋Ñ4Œ(ò|ÐSèñ뤌n…vˆ¶í/JKÊZW–QÝ×ß«ŒÍfZ ˜nR€¾Ò¤pŸ—¸Ø•Âü¹þ¶VVÃ)Iù€qsÞàlãªñdµPµe¼ãÎÛN¨ˆ™•­™‡–à-[”«bO'DDNG¤vœŒ'Ó#•ZjžºO¹ƒæ|p]Y<è"ÕE¢ÿø&õ i¦uAYZ|›Ô®dJìZe;Ò\׉I+m cúoÔ[æa¢ -ÒßU^eZØ^cëÉ&émíd ûˆìÑð HBó ñö§ãÌ\`ëöƒ±Óòi™•3•}c©ï37PNø{N/U&TkâÇò’5Änxi쇸æ„í6–ÒÝÆÞº¬™0Æ„Nìi;KKÄ;_@ì&î§åƒßûðþÍû oØ9ÅõcŽÂ`þ„‡Ç Åà}¢á­º4åºúY07WoÞ]ñèÝÒýÀ‡•îº#s£©^•ëlξi6Í]váýŸ• "#WHù­Ü€÷¶‘!¬ ad4b'5Rl ãÃ<š3ý %{<Ùà9 -;*#OÜë{SNß"ѱåmÿVF/´átàL;Në£îÄVNÅ©Ó€íáŒî± Þ½/vUñˆ­m‚:áŒâ%ªU«Úžî6Ý÷ò5jËA‡ÍÛ"ß?ëøÌ‹Äg.LD8ƒÞã|ÛÆ¿]ÿ8v†ÁoŸ”h+ Wª®±ŸæHB\7PX¾­S£¹–»$Å©© ~‡R·|ä•œtý(æ -×Fߨß+?nFqOZQ¯«ª4v»C³rYø…þ>>p*úN®?Äç~í§7å)˜)É(ÚµåR,ñQ™r‘fºþ«C-ö0§4HD8µ Û& NðjWÇ)½Çßo7÷÷[ Ö<úIŽx®qü÷šVe®iŽI`Z äE7¨I©Õ‡…jÆȺà˜S¶cvqCˆÍÌÝ N›DñA@9³ç&}8Q ÞJ…ÝÖÅ`Ìåµ!Û g´Ž]ÕßdžÓÊ|œ&›G¸ -}’êºÒIº£´Ô…6(ëNk?ÜnÌ2qƒD9‘n/`Wð“¸Êè }-:œËË×ïo//%"¸oäfñS¡­¬üÕ»žÁïXAŸ-¾àn!á +þèI_8ÐÇyƒ$ŸóƒÈ{ÞꬡØÞT -4u­.¿ÅÁÞ¬¶A~ä*EÈYË § òãn¥8½—†ëÚ ¥˜ k>‹ ³t6ÜòÛÁ†š‰•þÇá Žñô€XœUÜÑê8«õÙÙMŒ;áŒÒprP6¨q=rívõOt~…Uó<•®þX·õÜž¸•“"·Á´(îÃûÓ6UI¼U¡œ Äµ"œ±Î;,Dgœ‹#êËMü°° †¶S§#G/÷´rZÿ”+f»¸ü„G‹²­)RzyΔrZádtÐ6Èy‰XÕ_‘y^[)B–;÷)°ÜŸVŠ–ö „îjŽ±Ó»?'õ¥Iæã÷|~çEú”í?Ž[傪2-¬Õq8^á8ôÎdîX¬f8æò1P> #6G¸áõ¤9 ù(%>>I°#¡áöꟗWôÁ”_PÝð]!Ys#$™‘¾Þν_þ&¢wÂ÷žŠÿ½øÇ{†Êendstream -endobj -992 0 obj -1578 -endobj -993 0 obj<>>>/Annots 228 0 R>>endobj -994 0 obj<>stream -x¥XkoãDýÞ_qUH¥Æ‰“&éò-íRXÄ>Ø Bˆ"4±'wí™à7 ¿žsçáÚ! H¨­6ñã¾Î¹çÞÙ?ÎRã'¥Å„¦sʪ³›ÕÙèîŠÒ”V¾4¿^Ð*§q2i• ¾QY}ØY™ÓN³×un¨jŒ¥µ$©Äº”yBt§kªt-)—V¥!­h«÷DVS®Én sIµÜÈW.VϾY± ç‡RþôþÛ³é<Ó|1I®©¢tr ÷­¤èÑõƒ x1Åó½ßܾÿåÝêÕÛ7ÉÖV%»{~Ó}›ƒ„øÆè. ¹0“N“ l î'óE¸k÷‡“yrÅ÷W[IFÖÈÇÃ4»®-r­D¡¨ÔZ*'Ì è®ÄúUIëøÍ ÈlJx", ñù˜bÌÇ1 ‹0CH•0Ñ®k½Gà„ %>l€ÜÏ…Êq™(+ ©,ƒVêLXo ä)+% £Ç—·€þ])…‘-¸Î磨 ÝÀàiA™OtÃn õ€h²¦‚a P¤PYÙäàÖ¾°[ÇÊ cëbݸûîÈeà×Ið"8'À‚LΘZ(åÒÐQ­Mp5×ÒÒ–ô†ù)(ÓÕ®”ȾàŸ£Õz¨u³£JìvœÌÙI©Úú½Yùò8X~5™Ô³ë1ˆSÑÕìºýI›©cÕsÓý¤Š§hê~ÀÝCø­¥(ËýшÍY0H9ã%Ÿv%3¿Ú…fóÊTÑtœLÃŽ½óµ¢Ù,yѹÇÍŠ¯\ôngŠ¼B€®ˆ}çmW’©ÖI¦ÕrS‹ -(xŠ -\¨0ƒ}Gs÷ƒZà>´w+˜x«¾¿ˆ¡Éóñ?¾çÑݯžÙ (Pc é:\ú^EŸ”ÞÃ$Gx~‹¾i°P—ä<¸ˆ¹‚Å)‚nÃ;1Â~Â"³0ˆ²Ê²&æ[@nZácðÐU£8cV’ ’ž+ŒºF¡ºÕÊÖº,e”V¡Ð'l©°Ú€Ml5ØÕò‘5…j—U×ÅŸ FÚ:2`'ëÛÍ«·Hñ—M­«£¢~ ¤àL|_9®< U™+€SG•p“‘y‘ PDõúÂ#e£ÙCìpä3FÚ«)Æ/4µµôâ©5€ñ ñƒ—ï¤Êä%@‰îÚ‡˜i -eaq„UI•¬ÖòXš !µÌr¡‚Gb×6†³ý êðŒÜìcc ì•>‚>þ(Ûà’>"ݲÍçÝË[è¶CÖBÚ++(£‹ð^>ðD: @ËаsÉÛ Wäò(œ·ïìA4Q[ ‚T7`&Æã×nòck·Œè0PáÒGŸÇÝ æ€!fÑB½æ6G5A˜¶ßPÔ-2¿€ó5^8ôÑ]\L:í v¯åþ‰vA¹¿HÐ=òH‹( ãìAðú‡AÅe<ŽàäàŽmzbp÷¶®%š±›V9·“mqìa5à é@peê§8 ‘´Ùèdn *s×8¨¥[i D¥, åc–!¶7ìTJI¯¿~ ÅÝ-–tðywرæH“Ü_œZøþ¡"a•™¾p“Š7QïØ´h/NNÜ|DŸžš'æk΢Ë3Ð¥eªZ%t£Ý:Ö" Xû•ï•Þy÷sZо -g_úÞvýŸÖØó·jæ 7åá¼Ò3ïúIÅYï¦dc± ðdt"òËF& s\måÆå83Ù«¶Ç•ox…qüÀ®gÆóäg°Mð<’Š—Yl-[3²«¿¹ë—±K`€uàCU7†O'>`9˜JHщÚÆÛö?aQ:ŸýëÚ“NÓSkOšP`Æ­Û 2Ðø×'W QT -Ôׯ4(mŠ»N;®˜D€–‡àiš2˜ÇýçTS#Pƒ&°?ØèȸdÐNÀk¬y;³x³x€{,vû~ºœ¥-õýJäNë¯Ü‚âGšßÕ/°LL(¤SÖ. u€svßk.žÿ®ŠnH°ê¡.Q> >¸HÐ…jžhƒXÞÛà\«÷4>ò¤ÖÚ~ªÓ¦6jL=2ëBწ9•á¥Ø6†9rù8R q˜…÷¦±$ç±' Ù'^†Üê7ºk-ÓÐЈ oDi\Žîâë:;¿³‰£²œâîÒ)N%)þ»ÂŸ–¯o–ô®Öef±vŽ™l8?>\Lœýßµ¾³f^-®°Û;«ó9»Bãýxöv¥XÊendstream -endobj -995 0 obj -1869 -endobj -996 0 obj<>>>/Annots 233 0 R>>endobj -997 0 obj<>stream -x¥WmoÛ6þž_qK;Ä"Ù²ÇI·I»l–vk\ Ã2 ´ÄØl%Ò¥8Þ¯ßs¤(+NÒ~Š¡HÞësÏ?ï%4À¿„Ž‡4šPZìÏö~œí â锶?å‹MŽã!§Çøs4Š'TJºÁQl &ñ´ÙI†øàv -›ßþ@NÿêšÝ@ídzL³Ìíh–öJcªgôböq¯qԜꭄµëŒ¢¼Ù…B¤K¥å?ZrçÎs¿·š¢á$CWo¶”œ`F¯/«´ïµÜ¿Ö#©«rCk•ç”+[Q…ÛZbµ„½jI‚öŸï“X­¤ÎdvHk£*ZŠ[‰-'Ù”ü™åðWV3 (!œ°I®±c—¿Bg¤ ÑÒ@|¦J™V¦ÜÄtaJ’w¢Xå,´kDF™Y­6Ð[çY£W{_‚—u_õ7WŸ$\Uö4È8á|% |¾ç§w§Gƒ#üOšƒCr{mfTúi›A³{ÚÏämŸ]>íÏ•î߈Ü6 ‹X×ÄGçlnnåa“´áƒäßSî÷(šæˆ”ÞP&mZªU¥—´„’3™æ - >$ËøÎ…•Ö¯L±ª+YÆÞù ±ÀÖ½x[½bnMŽëù†Šˆ ¬ê­¬Îß¼»òúÍMG=U†}4€rÆ >ž™B(Í°¶v$Ä…k_З¯D1„ÚT(ÑÔ,´úקš„íÀª*aûŽR‘¦¦Ö• ‚ -ê­YÃdák#5e)íÊèLé}Ðꎚk@¥…ŸRSZJQq•°£ZÞUd+¹"eÙ ¿InÏÛî#i;ñ}ŸBJ®0VÊ_×(¤è“6kMøX)‘S[1ε֪Pœ.Ô0¡Mf´¤Ú6òX¯ãÄÀe ÚûŸõ§'ÀiA“ Ñ/rºbÝÒž;ï¸/°Ú€Æ'‡ï-ûÙbîYèº7½~áœm‰ÓÉr¶PKMQ0[pêì’]ÊR¶5H¶ÍÔ£ìÚ*¥HPT|cƒþÖ¬÷É}¤H8×HSSGö^y4¨ÿæ55…¢å:œm ©eÉPÚÁÅMi -'ÿƒáþ~™M‡Ì$ãI<¼§žé~A]zŽ,B¥ù%U2S°!ß<‰KY’@ÂèàΙ0^/‡‘þEˆ'÷ß‘Ó¹EĥеÈA%®,[æ¿ã€U„¥ÕÒd®žc’Ÿku+r‡ó)A;! Eg44þ¡tfÖHÒŒ~{ýª) “ý+YÞÊ’`§XÈr©»Á¯úha½TéÒB¹Ì<ìhmÈÏÝÜ^kJœ Òæ‰=C?] -½þs(åC¢©Ë†C9·uÎH™£sB…p1êð¹B—¯3øÁ:8ÊÝû>²UÖbÐõ|°å KºÀ™ ’Ò\ºBî\¢ìŽ«…,æ²´á—Ü`9®dê -ZsQ.Ð䢔øtƒøÃRð±•BŠà”­d) #þ4µ˜qwT¯E‰Nó«WÏj4½âœ³¹ðáÒn4ã>Cg¾³¸m ‚ †ÇC7²Y4+äûºÇYçÎ…ÂãYëú­Åæ²Vñq|aVazBB€>>>>>endobj -1000 0 obj<>stream -x¥WÛnÛF}÷WL– ‹¶$GrR …#Ç€ -4MaA½¬È•´1¹«ì’Vô÷=3KÊ êdr9—3çÌ ¿œ è -ßš i4¦´8y7?¹¼Cƒkš¯pg|ƒ]%WWW4O{ƒarŒúÝkìšÊ¦in´-©tòß+”±çóÏ°sMƒA´ÓN`§7Çñ­w©Î*¯iå<}® )JÌdb†ž”7:ÐΔ±þ¤}0Î’[Ñ'c3· It5®]!‹þpœpÔ½ú |<•Ö§ú“äÙáÌb8žÐq´|ïÙÆF[ñ\íIç:-§ÊqËõç°Å /šÐ8Õb‹óœ()K*M]¨”Íh«BØ9Ÿ±ï+êFÉã)7ª$ð¨y2¹^ëìÈ[ôÝ=¨b©HeJJ¯Jó¤.=“èä‚Ts¬v-ö7*tÜzçJzvsm£¤àçTT¡¤¥&Ô[{„¶Áß_ä ¹­æðÜÎä9­”Éɬ8k$i¬ò{b;~Dñá[d&©ÁäÊ î6ÃÆUyÆ1PÐB:ÀnV+`P#®»\jT‰ÐùÎå=¸/ íÑ¥.ÓKy^JòLÞgë÷KÐiåM¹'òZgC"†ú¨`Ã:Ž?è 4}Ô{¦ê3’/TK1«~,Á[ê÷[A’gî Ó²V['¡Cµ—B¥c5•ž+Õ –¨Ç÷@¥Z€3EBŒ‹³}„Û_åÈØuËUm39„ÂÐ8Ç3ÙžôWð¯+Ä"?Ì#è?®ÂYÄð… \}¡l¥r‰=˜fÊgV&䜂kt”BÛ*Ò¸¡ ×°QaÝ}¬*ô-«Ê&Ë -I7:}”z.ÝW: -hÙB¯  º­uVw‡;icÉ)ÑŒã‘S`³qÚò)(r•¿%…~Ž»Áᤃuÿ‘ŽØ‚ÿ»àÁ,ºY«þLj þg [éÔRÄ;Þÿ® ^=3:R`‘ÕNeÄè,JjéÐYE y5 rïªØÖBµÝæûç†yÔW;¾âáéP·y-Îú÷óÌK]“1]ßLðyˆ_xÝñ:ººÁ°é Ø× Ó©@'ýèÝ2×÷…ŒÞ{ï¼ôíËû£i'“ubY¦¨±i^etöê ÿáCC.E=.\‚·tÖ¶#¦½r¿…² 8 ‡(îCGýNCí4+Ž+Žø´ÚnµÍt–н×úÝÃ[nËsÑc@*î ·1 -ö¡N¿!Š³geÝ»ŒmY€à1ã…—±y·¤2û ƒÎCØY¢V28µöª8ˆ°Ph³8_OgS̤BeP7z#Fû#¦¸ö+l ù>¡WÕM¦£C§a“\9ÎÕ°¾nÕ“Ùî"ÒÍvÕcë N[ᨠC7îg°–П¾ÁDNí6.¯CäÙbK¼ì„§7‹#7HIÒ ¼µñ5ŽK!>>>>>endobj -1003 0 obj<>stream -xW]OÛJ}çWŒªVM¥à|@àå +1012 0 obj<>/XObject<<>>>>>>endobj +1013 0 obj<>stream +x+ä2T0BCs#c3…ä\.§.}7K#…4K=3cS’¢` g`NÖvôurT(ÊÏJM.QpÉO.ÍMÍ+I,ÉÌÏÓ Éâr á +ä«endstream +endobj +1014 0 obj<>/XObject<<>>>>/Annots 58 0 R>>endobj +1015 0 obj<>stream +xÍ\Ûr#Ç }߯˜·8U5÷áä%µ—8Ù*ßbɵy•¸c‘THj×þûœt£1$ѶèU\µÅ3g Ñh4f”ÿ¾(²ÿYWfU›]-^ä“WøOÁ¾ÿ¯dmÝãßEVõ“.€»ìâ…ƒ‹¬kGœƒ‹¬hŠIã¶Z5“)„vͤ€BÄÀ¼œôŽeò~Rc\“Àq¤šiõ,zF¸ÈšÓÉ9UjˆLœƒ‹lÚBÛÄ95‹ö%Òc°Ð4êÆGz ¶¥‰n¬Ã‹¬Ì›IåØŠžkÚ^<×”|ª1%A1êS"Sàã`J„4…S•HÁ–fÙ±ÓPÎŒcÛu“Ò±jJÓNZL¦š" ™8ÕÝ8£)Æ©)a•…:FzLe+<Ù±ƒ•HJ¬*‹[yª¬€¤làT;ãŒÊ§Ê†qE.3k¤ÇP¿'Öa°mCÏ&ÖašÒŒÆª)UŽ!ÑÉ”À©îÆ9M1NM ㊢£gôêTC1±ƒmd &Öa¬†¢åZ1Öc°UÇÅa¬ +e˜ºtÎ$C§–ç`4Ô854Œ+òŽ¦é1 Íé÷Ä: ¶-è¤Ä: ¶cÂu¬ÃL +“‚õl]ÐIƪrz=ºA@rCàÔnãŒn0NÝÆeECô˜nè©Nb¦Z¦›Ä: ¡‹Ô”X‡ ’9íJø¬îsI(=Óµê ÄbõŽô˜ +s5¥¡ƒÅS¼`ÁöŒ67ÖaÎL=bUa¤E&ÕP@R8pAA#=V…Û¬N, ˆ˜*qŸt¬ÃP©dþM¬Ç`!©ñ¬Ã4‡š»±ƒmkZy ¶/GÏ• ­Û:%%¤‘“¨Lœƒ!H'AÇy M$1æ1<‘s eñ‘Ã…(_‰uì´ ë0 Åâ€ûõ,R–×Êc°-cÙu˜.d +O¬ºªYº«$N}fœƒÑ…Æ© øàB#ƒ #‹ù†Cë0œÔM¹äë0c´FBs¬Ã0Yn°±ƒÅ¶çŸ«n€_-ÝÕ’§vç`tƒqê†0.¸ÁÈà†ÈªÙ‰u˜n`2L +yÌHê¸ÜÒX‡é‰Qc=‹BÖõ,§®Ç(ë˱dÁ"ê¼dÁN§œÓÊcÔèHÑXÆz [Áh,K º¬q;ÕÔ€L]‚˜Þ¢7’syTÖ¹!ç \&)$=‹Z‹Ñ†z¬“SŒÕäj™É›ç¬EA"Øa +fæX‡179‰ÁU?•T¨‚%ÁÆVÜêë0ˉK¬ +F$0AÁ‚œàÈ"•ãH˜X‡1¶eìX‡iϘõ,Tô’U©®å”䔊,ÎQ°'±S)…c‹8˜zÖaªÌ#Pë1Ø‚Ʊƒ•²Û±ƒmâ‰UsÛ ñ`® gndQÇuYe¬­p• 74²(404±Ó-²mb~J¢p‡#P,h„X‘<9'ÎAšB½é1X©Éë0X„æÕê1µe ’XÉïgù]Õ•"?rZp½Ü)¶0»hÝê`60r’VîL‘¹íìW +H‡=­É'V¢ åAKÊ;ç L,¦HÁ¢Dƒ:"‡CUl£•# ‰ \c¤Ç&ÖX‹ §_U¬€$6pAŒ‘›XcU¬T™Q¬€$6pAŒ‘›XcU,¢•Î\¥u–Ä.ˆ1Òck¬ŠEBNS& ‰ \c¤Ç&ÖXËÝKL|«ÀÄFNÅ$Òã(6±*¶Ó“ŠÄ.ˆ1Òck¬Š•Z3j+ ‰ \c¤Ç&ÖX+g²A‚(×ceÑìX‡Á¢œè«‚+=;A‚œàȪ Ä:l‚•TS”®¢V@¹’j"×µPš7’s–2Û&Òc°Ò"K,s1¶&îXB…þ¦Ì„B"–»D¦å0F»FF9ˆG¡Ê«’@Á‰Ó¸¹ý±1ÎAn~Ü£— 8´€§‰gÊÑ(d_ùm® Ì”TcdL«•8\~Û˜Ààv4—y™„`–ÔCF9HÏWpG⇽ ½å(ÒAºªÂ“— LFÇÑÉtœ}6N<ŒK–ä7 …é+ó.a QýÓnƒD.Yò–ß&.2Cײgg”ˆC±Ì8Ô½€¿M\d(@~›v)Pö‰zuùâüËeVvùÎE© ëêìòZÞ5àòÕ—Ãû»Y¶ú½^-·³åvóçËÿ쾎Xßdç_6Ø/)ç,:+)è‹‹—_¿zÉ1X)]ɸ˜}·^ýgvµ•ëèÖ}¸þfuõ°ÀS†í|µ$Ëã_¥ääóü¯ ç_ÖfÎ{ ¬d¸íØWm°ãr6,8ãtZVý÷½,J–—Ù4•ùzù~³]aj¦“®yfÊï›#WJzû¬…Í–×·Ãýv¶&Å<èÖè+&¼„pUøÏÕ'™+çñŽíJï˜ôEˆ¾ìír³îîD +Ñ<^–×2:ŸÔÓ2H¼œm$¶KtBM€­œþР訟`$Xj!ŒŒ¥aÏW]r±Ý‹Uå¤Ê§ábþW^Âa:]ú~6¨õØÚ8x{;“qxë£Gƒ,gìÅ­]»nf’N¸Jú0úæ÷D—Å5g|óWŽRåbß!¯æw×óå €´]¶1È9åÕ|9¬çê„.:–êé{PlôZ!#TGy Ü÷Àe˜}œX,"ºAδ6_ܯÖÛa)ë'⦌{À&Äž˜‰ÇƒšŸæbôÏŒn…ÔG¹£ÚwÇëõlØÊz@ÑSÇýáP4lïeÉ¡\vaÉ]­–æ7kÛñ:/â‚ü0¿›©^pvÆœÆ-“ɔʱ+6”æ(ÏÔûž±$ésÂÏ«Éף̩^àóÑ HQEóy¯Ôj˲ŸæÛ[q£Ï\[äãûa-[2Z_'«è*öO\ µGyªÙ÷ÔÅvXoCRÁ!«±ðø…0Ò”Œln7†M +G†¶ +åH¶\¼7þqÛ‘º wìÝ€ÐĵüppjuŽßY~Ñ9Ö+­ÁêIaFÏ—³íõ„Å AÞA_è”±ìív7tŸ$7ùýnÔ¼¼CM³DFø8oà°Qö1a FI¡"9]7ô¹äÙédÚÆ4ÈÖ‹Ý­å"Wq¦åí “Ž©‹òßJ"Æ­¹]º¼EÈIvÂ7H)jÞ¬–Šã»xúz·Zÿø7*]á+» ó)òÓ12‚Ýãà‚5º¡ñ}JœÐ7óáf¹ÚÄÕ„®xgÝd˜…˜\ÃŽX +£ÄァnÀßfì¡[”7ââju/©°ÄKÛ&޾ѽǸ¸½ü^µ~Ûø` ?rÝD=Ïx[^ß®l:ð"®G¿J—Þ¡ª +S´]]­îj8-æqŠ²¯fgrm\ë0ü6íg Oî¨'oàwëù2fo_õf“Òß¼ý·,$¿ýY$-ýäõ:esEãý»×”†µQU'9™DWà#½ÉÖ3‰÷ÅW««cÀÓíÃGLÚ[ +íW¡í¼;zHðª=ÜßÕ‘RÖøµÅrXhÑ‚ÎxwÚJvÇ +µÀ·}å…𣽷ÐY‰©o'+"ZŠXzY=åN›añ^p´3¤" »€); +Ÿ£Ü7×ÐFwsZî÷ÖÞ.·ëÕõ ++­!c—ä4 +þJ©jÏ>æ±×{¹Ù<,îi‚¤þF:Š'+ã~¥8ïqVÎðòÀïi(Aw«>ö Äwûµ;õýÁ˜q‘A[öÍ[*²Á£ÁÖ„¶Ñ©õ}D~4ïâ;³>hŒäÍgdL-Öì£qæb*;hŒDé³7F ‹GO<#cšƒ3£•Á£ÆÈàgoŒÖ +ÓÒÏÞíü¾ðº>ÆCþNÅ^$£ž~@e# ž‘þàFиâÑÉò'£ú¸ÏBuF8'ÌnÖèóëÛd´ùS§þë æt÷†4C¯ïzõIjÙ'bëuã}Ç'ôÈ"‘Þ„X o©¬›qáÎWO^0’îÜY möQKZüaIì"¼¼™-¯õÄ—ÞfŒýýy‘… `Ç’½Ó78ªsÒÐ9³#jöýl³º{°“ ¾!±.Ô|)S쿶Øk½Ü?¬U&žn¯€~@Ëýü«ùòAïøã‰ô:‘p¿×èã×*Oí¿àþý•?}±Ä'ërŸ£é|~» +g°:DþS+t´¼ ù¸+C½Ãád¬7^­î>Ú»Düqo|yyôŸèÆBߦõPÕÚ©x8ˆŒ§ÃMmœÜ?_3LG;5üŸÈ/ùšp>·ã‹|ØâêÒç„ñóÁlïsÁŠß°Øñ£Æë/æ\C¿|ñ¯ÿœözKendstream +endobj +1016 0 obj<>/XObject<<>>>>/Annots 103 0 R>>endobj +1017 0 obj<>stream +xÍ\ÛrÇ}×WìC”BØûâ)¥‹«Ê’•ŽR•Ê‚$,Ë dÿ}N÷ÌtŸ@‘4uqREóà`f§{zú6KýïQžñÿj™% ¶mF±aâ²Æ‡Ël¢œY1Ap“Q5Î9”åNdAF–*yQŒLZ2PLJp™uù€#(êDC61Øj,t–0ئ”q–0ØI%Úu–°hWÖí,c°u;X2cØJ>U46hw<Á‡I» +\»‘ËóFj$cg,ªp–0Øn2d ‹8“Á̺¤[[¤%`KJ\X‚“ŒñÐv +#–°,©ƒþ íJ=PjVµhäò²‚,N2Æ´u;u6LÛLÜxk>mäòB ÍIÆ2m7`ôµìHܵZO¹¼hñ'cÚ¦°z*êªTcÐc€LKp™áˆbVý¢p1i!¦à$ãðÈ1³XBÂ`»BöÌ&f C«êe,fTÆ2[ÉYõ™ƒUŸC,a°“!–0Nf.ˆe,¾9M˜%¼Ì*øIìºIÄ,Œi0³8­º·V¾=‘ks±mº=¡bœc&ƒ­KÙYÊX¶§ëv–0Ô4nEMÆ2[H”"–0X8ÇÁXÂ`; E4–°¸´Îô"â2[%b ¶Õ­µ53Æ bóŒ Ç.oÉI(§Ÿ¹è‰Œd 5" Ag±Ïil'L,aŒèö±„e $èùXƲ7ˆ%,JnåüØÌŒEÉí`ÍAã’›WEäò¢’%ÉXì­a% Îúw–°[Ê‚e îÂ:KXTÑ Ç[©%ûXÂ`'…¨ÂYÂP¶€WÅ,fⱌÁjŒñ™UÉÕd A¢›À”œ¸¼ªp¸œd 5ª7#–0Xâ–dž°c h>–1ئÁKXÕ`ëÕðRµ¢Ûè¿q4¼$.‡›ÌIIvÅZ²€ŒÓd7qšÝ:Gb"ñ)ã,21ØRÒÊl-vH,aQ‘®V×'33«I¢e [ ùXÂr膫b,Ö¢gcƒzËVdЧWoäà=‹¬2Ž DU³v’±¨IÜ´³á‘8á–FW +ü‘‘˺aFF2Æ´ú56L›çd( +|ÚÈ!«Ç®G“"ªÂˆŒd 6l¡³„ÁN$[ð±b€%ôd€¬G 0qjqÎD%!®Ù9‚8Û²iÎ9¬ÅIÆb|¢:g‹ñ•ƒ±ŒÁÖâªh,a°ˆ;¼(Æ`‘å<–0LvÂkÖ -‘–H §¦€mhârä(zõ›Bª,‘ýš @8¸‰“êõ›Bꎕ>ÃjÄJJBÄb¤>vŽ Ö~Øv‡Ú/Aì +b6tg$c±®fÈ ˆµúX²g’;Ël%u7±„Á"5ØÌŒÅHÞá,c°H¹X¢°g¨ÍÄèÞ)„ñJ%[G¢â€ÁˆŒd,j¯@,a°8p<1cQ„¸"Ël#I±„Á"ÎblUŒ¡ˆ±\gƒE¤à±ŒÁÂ`¡D›9(qšAk +\‰‘CHÆ3#;leS#( +.DIF2‹$NÇYÂ`¡”ÁX¢~=ÿ>–°°¨ŸXÇP0ªYž™±lÝð¹ª$ɪ,Š`JJœš–s± Ä÷Zs³&“ŒÁµåĆG"^X*R(ðGF.<Ã8‚öH#ã#ãÈÙ5ä,aŒÕT–X¢?©œU7(É–µDåªL\(4œdŒ‡b,Iç‘¡aZ”|rÄÃ< +|ÚÈåÚ¡+ŒdŒiµq6(nÖ¼}¡À•¹Á«Ìœd,ê•ðD,a°e{!–°H* 1±„E½²ñΆ¡¢§´Pà Žœ,p‚áòM!㡃ˆ% :ÄC},a°ˆ.–0œ«86–±œ'ñÀ>3c°è0 XÂpX°4fƒ*rj +\‘‹¢ÉØTálPEDw–°©ÂÙ Š86Šn,c +€…;K,Z€Ø>g Cp¥8tÆJ +‘ÃÙZÒ€hBSˆÄiÎàA*‰Ö΄œèLD2[IBãC‹Ž$Á"–0ä„[ΉÕMÍÛP¬«}`›š¸Px9¢—kžY½ÁöÃ<‘˵mà¤z–\ËæèY'ª£I\Ž2¤‚°òSHÆkn‰ Ó¢k~PÚ¯…Ž ÓFN + 4’1¦…ÄC%,ºÕMs–0t‹ÐÆcƒEÊlX0†˜‡•ÆÐFv’1–¤Y±„ƒ8Ö&ñcïà,c°È a¡6–±ˆ“‹™ÄAŽnw1’°w$När¤ 5ŠÉD2Æ‚‘ã¡Î‹ ;` ‹8r“ãcƒ…ŸþmfÆ`qÞ!Ž³„ÁjŒXÂâ¤ପ×2V˜èïfß‘‘¬ÊŒ"(›*Õ½sÁi²åœCÑ€tpÓ3ª.2¦éú»íÈ`¹•\f…Sæ‚Û#Š`Z"í”ä¿ñPëï&sdr-:"ˆ áópý$S„Ón\«×i‰SסæÖ³­¿ÛÃ"ü…QeB‰mÎ9%ê}‹L/S§®×ÆéB¡Ìæõw[HdB¦eA,ö-­ˆxR‚뤼7N†–‘™•þn‹LLëäkBÄ„Ð.‚œqÁ¡¯ð˜¸g'ž¼ÄwÇÙÉ™¦Èc܃¶Uvrª—ÍøxöødúþržõgÙó~µ¯¶›¿žüº{½>Ïž¼ÄqÏež#ɵ1ÑQ!=~~1½ÚÎ×2J¢&L{ú8+Gò†ø +“Ÿ¯§ÛÅê\>‡ò'y¹×ÇúUœû4øÝbuÚÒ¥ ;Ò6i–Õ|û©_HœhœâÓb{!“À4ëb?<ž.ßOåÓ'/á3ââ‘5“RHpÆBñŸQ¥kÅUZ|þ“ùvödµÙ`ÖÙÅhÖ¯Îddú‘}»ÿåyôš[¼ä¨\i¿õ¾™.ç*?¶&ïâ‡ëù¦¿¼Þ.ú•P¢Èôõ©jµ»oÂõf~ª3 ¶µ.t4âm×4qâ¸a0³*ÍÈ;Gj3ÄKÛŽ¨]a–‡è°«V +øFØ í%BaØËÊ…=¹PÕ ºèê´Ü7óí³W?«ÝIñ=>ŸÎÂ8XhR<|ù·Š^ä*Ÿä„;âwï§×?þ||¢â¡å2îÚ(ÞÙâ2è–SG3¹u1_è EdBB²»gÁœÑ3µå#}¬÷—þB½ÇZÝý¦)J•E=ÂÀú¢'!I^¼Ñm`á~êû×W2šŒßÂœ …€AD¨÷,ìÝ« ƒø;A$š|“ï%F"Gé<#lîÂÓ‰ÿ±ÿ$Ç>xÔx¿F‰®iàήW3ñ›2`¦+õ’¸¸i,ø\Ä©Ñ°0G²íe(\J&O»WV¸+ä +rs1 Õ&Ð]÷ãNZ¸ß—¢Îp)æÅ$ú®Æn2±ƒÚè?­æëÍÅB;RèWõ÷k­Eùp#Éòí5sî'_(î¹Ù}ºXÏgÛ~2[\¤fÄî ÂYþRÕÌç6º —~/¶â@Iñ]úÙ ÝÕ†“O]®Ï=÷ËsQ$F E’ýêþÅ`¸M³+Uõ-ö!é#ínº¾|¿ÖŸ.Î~O;bݾÃGí¦ˆÄxüµ3ü²z„X0”{¯â–ë¼õT“2wb*ë±Ù]^þ2u +4è|¢›¹Ö†*Þöô‹«Ã>v¶žO·!]Å-×8µƒ–ÓÍuû¸R´ÊájºÆ֎º¨}“t`í®ïýª9hlÓm¬öE;RhX곜^]%›…Þ›dôñÄ”»]Ž÷­·&‘Qw)‰|»Fo5­ -WónÇ×WWý:”Aø“9»¶úÐZ ™›pë%£dý¦F‚÷ª¯ž“ÿHZÙíhȹìquÀ|Öýi¨wôhÅLdgêïKè¯ïÓ@%³+Ä~Ykö? Q +´†{7­U¾«{.N'Ù$gëÿ¹kýËõp!}~¨ƒùCZÆ拾ìb)´lÈ~´=žo“ RY×áÅzö~Háñ7VL¤"_ŠüðŠ¦¨AëBnšýTÓý!©nT…{ÿ]Ÿ´ûmprƒ+ä½|þrº>A ,~um—Ü/9py f$—^èÃéaù«øNÞ¢Ú9|û—ÎOOOÓ.aKS-ó&ÖGè:Ú;"ƒÃûYý¸PU *ÃCAœ t~ñã@ùôí;õÁx9°¾O¡xPQúoMìècÿÛ£m‡ +î¨=ÕüÝ·ˆ?zFð–ÿ$u'.ì‹~Xisæh?nì•|'ÞryµTëÔuK‚e­’“¾¿ÜÌ5 Â4ßÅw¹ž¢èÁС>ô&Ï»‹©®Y®²­²Pñp5æ¤$÷ßdñ*mWÆdÑŸùõK[‡¿Œä'nä8çÃÌMö¼¶š)^úLåëÛéì.f†#Õi¾^w<‰×Ò‹i"Û¾+¾—eÒe3Þ-Nà×ß­ø„$ÕðÍ‘kßÉ” ÍjܘÙu5«³ç— \¨©Ä?—ò-ߘ Rá„ÄdHÓ—:»ô^$þŽN&kðÇèz-yüôõ³§ÙÛuÿ+%Ù‹~v½ÄâM.ùÓÂq‰­oååÒÓÇ‹…ÈõÃÉ£<ú?MÇíendstream +endobj +1018 0 obj<>/XObject<<>>>>/Annots 147 0 R>>endobj +1019 0 obj<>stream +xÍ[ßsÇ ~÷_q“'w¦¤y¿É‡NG‘ëÔ™Èq-yÜWŠ:I—<åHÚÉßÀ.€#eÇULÙíŒGß}Ü]‹Åb±›ßž¤ÉÿO“:Kò*Y¬žLÆ|¡RúçÍô%©Šþ]%ùlœ°LΟ8¸JÊÉ€sp•Ì2í„Ú9¸JÒ<g®SÁåuìt2Î}[‡WI6)"åI‘—ã)T)³q‰ä ÄQ¯üCwF"„vi:WŽô˜”)Ƶg[Õ㳃…Y`]ÖcR&´õl6UIdž´É -â¤1 J&-p2KÊ9y0"4UÒc°˜ÐX‡E—©cÙô嬂ÁôÔô‘KÑa•) §9»ORÉÀ.°ž‘Cô“yÖa°õl šbÒð¤äÕž:«=BR¦‚i­¡Ç`aøÚ³ƒ­RˆëÚ:LÊã;ÖaŠ²Õ ­Ç`‘‚®­¨ +Ÿ`ÇfݘªÃ†¼Ê9HªRe¤Ç`1W›z žûë0ÄÍRDpcEÜ:•åÄâ20q7¥+WÎA^øG9,ü!r>X^IÁbË€ŒulEAñƒÕÞôã’KF ¶ Eg=ÓBÌ‘…iÎ'@bäxåç û.ÔæN¨|7BÒ“vA#= ý!6õ²¦´nŒõ,fpÀ: ™ì«={ vJÛ¹cÆ6ÀI˜±ƒÅîê{GÊiêãg`Ž8DØZ9i—ÊIBk8ÊáJJCSxoåNXÃÀa1WI®œƒ°|Fíô,ÎR›ÖtËàÞ´ó¦ÒUé1X„…Ú³ƒEž0u,ë’a¡râFºP]"ÇËÎ8Ñ)§&FzLCÒ™ÃXÑ¥’SE‘Ó%²åu™±£cDšë0¹gFvж“{Na`cE¨RN,A(FN¨Èæ)Bdf¬Ã +3#ë0†E¾îÛʰ؀ɕ°ŒÜ°‘åÓ|f¬Ãè™ôQÖcÑ–RV†Íäì†eä†,ûif¬Ã¹(h +Œu,?hk¬Ã`±qWžu"#ÃQµ­ˆœÊ #ˆÌȉYxh’²„úå¨  ±Ÿ@% c†–t˜yÖa´EL†´-k“"èÑ^-Ú2m”E¸+`,ú-±Ò”CmÊÈ5,œ?…”TZSleEh£«˜ RDæG5ÉX‡1,¶Ü³“²Ô§µe §UQ‚…HláÈ¥HKøý’HiˆbŒFvªÔ¸©ˆy«7’6U:!Òª‚Óà ¸Oƒ†2Xã\%(JÁìÚÎAN; ¾rˆËB䶵#=&Ë‘TÖÔc²\¡=‘°Sð DÂÚzL€v)Ç:L€ûŽu,˜ë0,ˆHãeæi¤| +$7á¿u6“býåF9=QªãQ_Pÿ࿵ÃÀ¤iïPŠU.±ç¿µQ`¤‘RB +¤F(ûQllƒà*Z°Æ¤yH¡»r‚ƒ­ÇB­4%ç¿UÈÀ 1¡B ~EŒ!‘k\‘rD¤ B›91° ¨zºt"“kç 8艚š¶3NáÛ„‹àØ@u¨0žƒà°c 4¡œApõ ÈqlC‚l»!žNz"‡hD§KüPfN!Ì‚d'lå ‚›¥Î ÔC¾@'ÇЧƒà¦ì»ÆËõ¶ï®v‹èepAÇ_ ˆB#$j%²}%†3…N÷ŽÖbX²ˆu\Šw~¢ g9Ol΢¢É¥Eîç'ßWíÝíœ|·tÒ³VìfØ­ó8iÉ•¬g¦ã +I£ÀïÓ<,ÚÛùûæŸô=Î&Á>ÁQ{RËëºÎ›mŒ¥8Y€ÜÝ‘plÕ”§z1çïØjë¸ö’ùúŠ‹­bèlìåY˜ýdÓôï›^ÌŠÉôQ¬SÔ$Ç(­!óÀå¾/üØ]E&NäõöïAT+Ã$¯ü ÛmïvìIT[ûê‹<*¬t¨tõp¥7Û~¾¾iÈ8q•iÜÑLud u‚ø£»üˆÌ4¦É…ä=Ønýfþ'4ÏtÕ¾î6ÛóEßÞIö€4L7# qìâX!UÌJ¾ý®jú\½Ÿ¯ KŒM2/b–á·U\K}½è¤¶‹3v঳}7}ÓÌ—³vå3”Ëé£æªÆþÅŒDõy.Ï?M‚Î1Æœ7‹]ßnÿ ®(ÍÕMhÙ¼o–D)º‡ÉÝáÑq95qF5Ø…[äóûSúM§F¢Î^j„Cä¾g]Ïq?,ºÕݲÙ2÷–]52ᨀûWÛ2»k2 ª]•6ΰ`-Aq.€,øhÛMœSËôqÃŽI…²ŸLôQh`],&yM +Tâtóøý§É˜ú_u«¹œ×càeTØpÿ#à¸LóGÛ…ËlÏ÷©àï÷]ª¼°I²¨ç]»GŸÁt¾fË¡X­¹Ô« þ„s§nWϽ•ðº,XéC»½¥ßús`bGÝáÙ’eFù,ççc… ±Î(Å[xªîÌ°‰¬&µÉý’Þ—^¾k×WÝ9nÁ ˜ÎaȘÅVò[TzbUàXÚR¿eN³0â‹ü¡ÆrþPßÝrxÔZÖ™ÄÝ,ÙÞ†H±µXq‰Ì]N^œM³ñí­¸nÖ­’à—ß ðòÃ%EÜFBŠÎ€ªô˜kHÌä¶IºŒúœðr°•¼]·×­d<¤žî§î¦[³=qŒ³”¦ûÐ4¼Ò°³bÔ°~¼[ád]% +em=¯¤wDš)¾}õò¿4ñ8Øn½Û„eŽYš¦n¤Kø0ýWù,lúŸï”å~-"Ç„Bžê CÎÉ%eð 9¤ Y¥?È#ÿR4ávÉ/LÏP‹o8kÔµ r¸ÊoÁŽ§îÃÔ$(w½o‘3°SáÆ/–/<ÝÅè Épn°M±vîÌ›\Ìû›Fœ ·7± ôv#jàU@\CÃÿCŠBþ„HΆSôïNˆ¾Bû‘z×õ¿Êô`Í{#ý”}‚fHº÷¦JLÑY»è»Mw-‡]Ük®ñ¦Yu’·RÀ¬ãYŽˆåNRÝÁ™òt¾ gÜì¡LÎñO ú.ÎÚ‡¨XjåY“ÐàïÕ|%é8RJÍ1ÏQvjR¸@¥ZÃý9ò¥'Lx­‘¡Px áïÕ· 5)$ÒÓ%ñÂ+õz‰:9Ý­ðvá®NvÛ[ܳ´ ½|À¤Mæ +ÏË=p½w$÷ŒºÌŽ¬*¯‚ßî Xùè¾ü“$ZÛVúò9€RV= Ÿ,—iÏľcNcJLx›¼·Ù¢"v°ÎÞ4›ÝRB¡ Éé|qsܱÇÅw¯§ícÔ„þ³–aP=4G}¹Þl±ÈÕÅpM¯Ô}s‡Ë¿ëöfgb¸Î=–ï}Ä:Q7dgºFÃŒÂnÛ>Òÿ1?Ù§ûsrëÞ4¿íÚ¾YÅ›Ö꘷@ÉÕ®Ñav€+þƒ%qÑlô¾o 9æ&´ d#¥}$–––’:žœêYÆ|Ä¿ƒRxÌ<Øs¤|®kã§vÕnye°ìniQ´Ïl§Æó¨¡7II\µÀŠ],qN‘ûëoM Þ*Ý!‘ŸØAŸ?-BÉŠÁsù˜N[^‡¨ ~§ôVt‹ñ‹w[Ô»¬êbõ‰½G¼-Ù8sv†õϘê&üÖ­8.Jñ«y/µ]<1‰Y²Õu¨H¦­é=Eß-—²{¢jø°Ò}Å›—{Û#›òžGõÃLøußôe6­$…x”£wî JòWqsµºÏvÏ/ùCQmD¯²‡ +í¿Ÿ/~½Ar!Gï˜F|IIØWP`pvDa`8Ñ5ƒÕñúÀ< ™`pC«šÃúÒŸ9J¬ö㡓ዾ‹y JŸhVÉ–‘!‹lÐX +{÷ Âkx냤1WJÎ8‡’ŒØ—p.ú݆3.¼I±óËÉb9—IxÏc>|_ó±Òìé²[íàª\cˆí[÷M†3ûîÞj®kŽ2z6ôð{xóõNîËÏNÙšá™’·æ=wÁÀt«ñe²ð¨u6u»09Éa6ôÝÏëÌ>z±üã;Zx©9CòHŠ#â—á\§$8øïöù/~0‡—¶á5’i\.$žSóÌùÉÙ÷'T(ú¥Yl“çÝbGù &ë9íB¨.Žjz¹wõ´m[ã_Oþóä#[znendstream +endobj +1020 0 obj<>/XObject<<>>>>/Annots 192 0 R>>endobj +1021 0 obj<>stream +xÅ\ÛrÉ }÷Wð)q,sî3yIùºqâ[$mù1EQ#‹YQÔ’”íýû »3äxW–,oRåÒáa÷h4€F÷×ÙdŠÿg“&Ÿõd¾|0=˜âù'“’O&uÙáßå¤è².&G.'UuPGp9i§%q—“.?(ˆ#¸œde~ÐÉlÓ´ÌÛ•ƒ‰/'ù´>èh,c°Y5P”1ت¨Êl·Ã†aI–¹ÉżE…!ò4?È#û2[4bEý®²„ÁV…å,a°m1œ™0X˜ªâ±„ÅSY›™1زC[Ô¢PžCøDk@$&ˆ‡N3™V¿”u ¶ôy”% ¶.EYK8¨‘Œ "M;X/‰¤ÀEŠ\WȪG“j#‹¸2»e ¶­Åm¬ +Tu5–$ +€ ”¸VÔtŽ &Åt‘ŒEÜl0”q—'q[Õ°ƒ?–1Xì2fƒ2ð' ºÂ•W&rª¯sE\q'‹¸­<Ò¦e ë4e–0ü3¯±2>V7\UË.ÄPÝp©—[×ðPb ËIJiœe ¶®c# +À÷yl +f—M…RDB%6á,aÊØ(T›cy` g c,¤€•% ‘sbƒ-ZÔÇ2Û¨1læà2eá²Rà.¹ád CÁ!à46”±˜¢ËlYÉîq–0Xì4˜ÂYÂP'Ÿff,¦ÈÄ6–1XD*–J²k•5ºy4 – ˆ%ÙÕ9‚1»:§Ù5Í©éÔ9‚°_¦^¨OWG# þdS–0XlØ‚b ¶ÉÄ~>3aXÏa–1ØZüÂÇ2 Wâç2–u+ĺö\Æ°=>g–1ØJCe¼œ”¨XfÆ`‘˜ >-4È„˜¨À3cQW×Ne ê:u¸% þÏ23–È$écƒ1*Y 3†"2FbÔ ®³„Å™<ÖYÂb ÙvÄÛJÙG,a(¤¡ÖÙàÈ(|%{‡ @$&¸œ4üKã⑈?pd#ƒEœƒªÎ ű²Î[·Ã±„¡ b Ål¥e3Uñp+¤K®jäZIÛÎÄáJ²œs!,Š(j“2‹@8` 3`ÇúX˜!aa[YSbƒÅÞÌLXŒ$…« NŠ“Ðw¨"rÒĆê,aŒ-§b'g «kC¬c°m#ã,aYw±Œe]kÙuÎÛÈ‘ÚY©Š¶Ò-©@¢,ÁX8§õ@‡úÇyDÆ„&8¨5D2MJØÙ‡2 ÌFt™Jzð±ŒCî°p§„%2I%Bc ƒÕXH,aäÞLÍÌŠ áS"°}“8=€8§û­@±ý€‹\¦Í'Ã@Ô–\ >0rö?D3’±¬Œ¤gb ƒmtQmlx(2£! þÐÈaË×°¯|Q8‚˜‰¦3’±3aQFŠ”A–è‹ æU ÊÄ´81A#%aJt7Á³à` +dÁ˜0Ó„™ÆeH{Ø,61žX©W;Kl‹<ΫIÆYUSª s±lÍ'"d°¡|SHÆbñkb ‹ÀÅÙðP$sÉ&­Î«»;@ D!Siª $c°°gÁ,ay¨K}bÆ`QÕ—Ä‘j:Éf +Ü‘ë$ú8G“–²lN†IÈ-ŠI/IÏÈE½Œd,zŠq|(c°úÕ˜œáÌæ'ʀªI²2VëQb ‹6j^IÇÛ”²¦ÎÆnÒŒÁb&(dcƒEG%É(Ïe Ç lœ‡3cp¾p‘C†é å‹Â„2ÈhPÆHÆ`µ'B,a1“˜šXÂb&];›9ˆ;¥ób¦ÀÅ\Ï8‚&®‘QÜ82ñ9Kc°¥œ%,âJ™D,aY7UÆƪ2¸š±Uÿ6U"£¢ã(éaTP#Ž +Z8§J$NevÎaÒÀ9U ŽË3iÛ§âkˆ…šþmâGêtbŒ#< +ý§Ö)‚àP,gÄ9‡ÈTçꆊ8‡àlˆSñqž·zDÿ6ñ#£ãÓ©øF‡{NÜšÉä2!AphÍáÆÐ8‡ðܧ""³IrѤ©ËŒŽÐ.–ûIcáQ8H?îY‚à4©8çPÄÐ{ª4NÅ@ HÒ>Xÿ61"2šQÅ’ÁŒ{züàñKI²“ã3dŠÛʦœŸêU5>ž?<ž\ô“ÕÙäÙêrÛ_n7;þßîmöúãäñKìÆLæy$a¢G¹LôðÙùìjÛ¯e”Ô 0íéC,Û|†›>ùçê³|‚îF“>Ú®ô;yYÇAŒ³ÅÇëu/ \®4æh¶<™É§8Šgeš‰BçðçÌT<¿Ê»8©ƒ'¤Aï׋ålý› „•uüÚóÕr¶¸ÔOQÙh±Ìzuq´|ü 9X"‡kV] “È!Zã¡h‚©â¸ö´Çýkµ¸\\~Ü“}{®ZÂFY—'ý/XùjŽCŒ©i–*¦müæØh×;yšÅ¯|÷ÿ5™HøHn °˜¬¥Úç¦Îj¹\“Í4­òûõ +n·Ô•B"r¥f—§23"`]”QÑëõj­_ÅÕ”yØw×itÂF½ >+Í¡¢õPÑ£ß6Û~¹·ÄïW‹ù¢Wé±$UÛD¥Æ…UÎñËpòdQÉîãæÐe•{⡲ÍPÙç³à¢ØuMÚ=+8¤Æ슢J[í¼¿¸’IQZÔæäó™ºVÙ|tòJ¾…«Ûïûí?t$r}rJmΦŒÆÐÌ>Þ­A›þiJÆ°!“ ²u²ÓÙJ­„s»ÛîÃâòtõ9m†Ý—Ço^è ¸ÑJ»çkßýó¦ *ã¼¾ãíPL•æ°–Bõl»[ýŲ‘W£$¼ºÜl××sá6—iÑ¢±Àÿ¶ß~^­‘‘­pœƒ^¯>âëª0ÊÕøéõjZU +÷؃@…tð=5:ê·ÛãqÒFr f¸VïG‚0ÝW³eü& +Õ©E„Ÿ7qûà0™"÷d'$Ä]u‹Dµå$"vßnÇ}ß½yòê퟽{{|øîõÁö‹ní =´¦N¹&,àAkÉçkûöXŒ&µïãoÜÑ pÕaÏòÄÃp3ËML ßi5€SùR ´ƒè!ò÷ +˜Ç¿¹€y2öëÈ­oP’<Í ¾"¯„diC¸ñpíòµ’=!ßB¡€AbvÜ+P^]hõƒ#»·3XVýhbFdð-î¡ô“ÂR]ÞW¦­d-©`*Qw ^:ãûu¿î½^lÛPâÝ¥œyØÏNÓƒWß ým¶–:‘}†3T²sp à›mŽf°Œ~NíÀ"ד©äšÛy%Ø]÷úö©´­E„ËlÇQöÓç‡óþRåÆÑ2ØBÓ9Þ…õL7¶¢ïŸ?Ó¡hßÚ¡ç²ïOûSUA±ªîí8ãnµÕ&üp_—Ãñ,”°ƒ%òŠ@«OÂ!ëfÛbÏ(ú£TLQâ·ÚFÂ?^Dß ¾®ÓíÿJkWÞÙ ;Ǽñ} Ê;y¯Äßô!W–ö ¦=kÛùéógj97W?î¼<ÕªY(áF +æ[ZiÝ_á9 QâmžŽÑci³<¹šm6Ÿ÷Óµœ-ƒ…ða“êíc0²Õ“•Yyƒrûk¬°©¨Æ:Ú®Ö)ÅóqY—ü¯á€„&Kª'R4?~3›Ÿ/.u›¡ß×ØiâÉ|ŽÄ«.&=1ÛV‹KœÁ–{ñ&¾åŸ±òIƒz|~†{ýüÉ{ñn\§ûF¾X÷sÈúJÈÍïGÝV&T(¡Ü‡ ‡!çýõújµQ5)Ü–áOAŸGáœÇzì”D¯¤vŽ†bÄ´.ªðááQ…AQ”:zÖÓ:º¾ºZ­·½î°AñbnƒŠyÔQ¿þÔ‡þÊm;ÖüXmÛN,EÑî+/ÎN^;šŸ÷K¸Ò®²æÎX»ê°¿Ð=´9_è!×Z¾CnØ°<|Ò>f:1çÅTƒ 7Šá÷‹/´q•bEæ ­‚«»Á¾ÛIn©ÏãZÞYOEŸÛs±7ò¦­÷dÌ9î ûM‡vÓ°òƒü„WcGòÓ»«þ2I‰ ?x¡¢Ô¦¼‡L¼QÅ,tSAnõ½$=^àÚ]£ýúóf …~SþÝŽ 7R*)ç·ÓAŽîš€ný±½÷Ž”W¡QFâÉrv9ûØ/ã 6dÝ~CËèFÊŒ~© ÷ÞÞÙK;ã£~~½^lCóïMY·wLÉÜøð®GNýñ‡þ.^ÀwtÛ駭ƒ—0=úo®úùbv–jQ·Ûõâäz‹èz!1Ö!f[èdxŸâ¾7jŒ—ÈþºÓ7|ñe¶¼ºÐrdP]½~þê¥?iíô9?]ƒpÏiLÕ½zŸu—™qÛ\ÜWðé + —òÛ‚aÀÁ 6j•ÎÙÏp·•nLqñúC6ÚèîÛý°+ER*ÆñjÈ Šñö¨µ¼Z¯>Å:—»¶š'k\V¤6n/íÄ>R=ëâ‰>/XObject<<>>>>/Annots 233 0 R>>endobj +1023 0 obj<>stream +xÕ[Ms7½ëWÌ-rÕŠžïSJvÖIªìRb©Ö_hrd1!9Ü!%'ûë÷u7€nPÔÚÙÚ¢¸I•¤7oÐ@£Fcüϳ,Iñ–4yRÔÉlu–NR<¡ýxÿ#=Iê²ÃÏURt“Ìer}fà*©ªIm8WI—NZøJ²ª =P‹Á¶E$¶¨é墂ùM+7ÌsHó hCÇuͤLêÀ59õ‘vx¡i>Éâ± ¶l©)¿K,7­ºM|SAÚ4°g•Ö`´m* BYŒ™!›È˜*FF°góŒ+k0¸Âà k0ض„¹ kð*É3Tl1ؼ˜t¦­Å`›rR–­ZÕZUéÃVõ<§I”3ÃÍÉ+”¡U­¯¨PÇA…îK/g ÍnA3HZR çFê¸6%ýg ÅH)B‹”Eôe BǾYNÚe û´c í×òÌÎ@ a‹@ŠP¨VXÅ@…:®iɳg iH MIZÂ\aõ B=«å $¡-üQIÚÐz]a¥c4%jà*i[ØB9ƒÐÐP„Ö%ÛB¤0P¡Žë2L[8iNSM Eh…FÊ@…:N†8!Rò¤ ¤-6”Œ” +u\–Ò:.i1ÄbÍ—†±9ÙÁÏ*ë8\à „PÄÏ6))B³Ì˜Š +uœH œ"HZt­šJ@ê¹®€þÊHBiûQR„b…S T¨ãZ +¬Ê¡Y8¥$í¡(M)ošH¦nUŽ÷PߎחrRÚ µ,¢Wëúç.i+,Øì.† Ž£ˆçZŠ,Êñ¶S´B(o}‚¸KƒÁæ5LmXƒÁ–eÌLÃ¥lÁ´5lWÑÔò(¸_ƒiÛÉÈÔµ,6貃…ºV²Å`»æ3’ †Q±÷`ªB¿ƒ­òhTƒ­Óh6,‹Y·c¶˜Ø¡Íôkð*)Ó&ê×b°X£V_‹ÁbT¶_1~&y 3>#c|ÏŠ±•58_Y1¾o+ÆVÖà`|eÅø®­3v`-ÆWVŒïÛb`9+k0Úb{€y•5Fà`§¬Å`ѲëÐÖb°5m_†5,r˜WÛ Úc¡(k0 ˜±ãÖb2~Ió¦’WgHaáëŒÈ¼LæäÎb{AjûÀr~iXƒÉö´…Ö`°Ø/;ËL¶§üÈ´5‚ž–µ˜lOŠi[‹ÉºYÜÖ`°Ø.*ÛÖ`ØK¾0¬Å`ËÖÕ~-[Wq[ƒÁÂǬFƒEfd5²˜l_G3)DlÐCLÎÈг¼X k00ED1¬Áb^L•J†y=&óR¼1¬Ád^VHÛ #à8uk1¶?ÃŒ©â™²ƒåÈmXƒÁ"üÀ¼¡_‹É´Í+Ë£¨äXÆûz΀&Ù@·Í+ÇÛ¼@ÌöQ¸Lhh1X¤'²ƒ…ãFm Æ,! ÄhC[‹i†é¼lXƒÁbEm –ù·ýr•Cåp„@Á †ç2œ!áNü&Ïe&9<.hCǵ´¡*g fÎï¥PC‹Á"ða¬,‡Yƒi©Š¡¬,œLŽ{.ò1⦜òäž…ÖX¯Ê ÁH`8e +ÎXé6•¡ë–‘éÖ³Ò²‡n••n}[>qç%ÿÍ9ù±Ã + N tþ«û¯o—¥4ûJZŒñ \ZƒDª .€ºdOñœxŠ’Ò°”³Ÿ¼É@:{b°E/g FÞ¢¤-äì'B¨PÇaëÉ  ½ÈB’P:+)B± ÒB„2P¡ŽÃÐ03BÿJCŠP¤wa…e T¨ã䬧¤Å4V:ûÖ`éjÁ4ÁÂj¯²ƒÅð[Ãò€áåÁÎüw®cð«Lóêæìå$irs‹„Ô³Jê¦Lnæ\¡ÄãÙùÍôÓ²O†Ûäõ°ÞõëÝöÅÍoûEÌñsòò L’‘œ 'è"'Aç¯ï¦›]?R+rqô±ósh7¡gøåŸ\OWŸ¦übVéŸnúñvWÓõ¬'ÇpR'c±ÝÞ÷< Ę%V=9Ò°4èåØiNA»Â PI JB¹ŒµÌÝÐ0‰«Ít\l‡5uziÌOuãt¹@œÇŸÇã¿Ú,‡Ùï<ö‚VáQ'ü©Á»ç^Ôöu+PYÏ»ÕÕC?>,ú/dA” aµçSÅ+ϺÊ<ùvØoû‡~™ó"u[Ö,8vTÅѵñ:d)Umb5ŠGj\-ç¤)¼A¾»þÎ+1°®éÚ„¢Ä þökŒ"c¥Än1¬ù1ŠuíÞ¿ 'ô^éÌûÍØϦ»ž;ÄI±ª]ôøŠ7}+ˆF}^äÀ±â¢vXú×X8ýŽGŒs^ç#°!EdE“"ýߎî[µˆßó:µmdÉ2Žïû)O*òù¢òfÜ.þÅVÄ]û &äu‚«Xï¬bÞMÿ ¡ÞÐen%¬l6JZ·âžI‰¸[d~ìz{*ÉÆüî-ün±þÌŽwz!Ûi@û 5K›åún:JpÀ>¢Þj˜»Ý5ºgˆy±5òFÁ‰v/hcÞl“µÉÆGµ%…wv@”DòîèQü FüЫµçk]¬Ó‡Å\Ì„XØø˜¼\¬™°ª>ßF«‡Ìš—Îð±ó¡ÖÏ6hð\¶¡ƒ¡nœröpb‘îi­\*ªZ}»Ç«JÕ:™55Á¹ÁÙ +'Â=c¹ UÕ:h,dóÅÌç (›…FìGD^§®‹B{Þ÷®_ ãŸôÅÀºð©ÍjºÙøÀŽ“UæÖÛ50]yeðû‘…\Þ º^¼t(s©ÛëåÂ/©äÛžD À8Ç\Iîû˾¢¢üÂewÿJ¹ÜA•«°CâÊÂgtÉî~í]é·ÏþŒ?ÿÏ`ª8iÅgûˉ—ÂvêwØä}¿½_JiƒjN¹Û¯DÜ#®‰h춶‚ú¥|gðŸª+¢µ©®\]ó±‘2[¿'jÜuí…ütõáæŠ:ÆÅ¡?ŸÅ;»(¯åØ,Z…¸|ó7—¿úrÐsèOSˆÒ\»…‘ë?¹‰KBÀŸM×4#ä¹™/ýLOð)@8­Ì†õíâó½¤Ë0`—ú“æÕõKqu?LÇ ‰@-k}ŠRߺŸÉYWZAöÀe<|¢‡£oÊÅ26 äTS¶T$Œ«Ùâf¼'øñ…33 +‚<ø¤/d™\=üžã ÞtzŒöÓ^àëƒýy\`yÖy/høfŠ>ž¯9zÚC‚³ÎÇ£×éâ5÷©öAkàî•ß´Õ|ZÅ3¨Õ׶Í'|6AÄMüEDnNl‰™}úÎòdR|‰!ü±g-¶èÏ‘ÃÖÖ.eÍÐ4îè•ìîzwðÄÕ^x:]û-D³±^¥9Ê!¦BêzØo¾Üõ¼”ÆÕƒïã¹ë [ë}(^nQ5úø‚:D!VÏÄ YU¸9ð¥Šä~+ů¨¨ñí«OÖO¿?ˆnY–ÑHàc›dv¢­±ùÀþ¨•ØäQdû,Õ3*ª‡H°¸•ày§‹¯ æãsÄæÀ¼‡h9¾¬—ƒ”­è Bë—a EñEšƒv’Hµ•ÉBÔõw&Ë­ÔÞÝ­×ÎTøÔÐ'øý8£¨…¡Nâ‚Ÿ¸P ¾Ø/‘u“½»µËÝn:»sq!ʾl_Ž‚ãý:”œ0!>M6ã2|ksÄk ¯8}ïb–¨“ÅËî—énv'W 8ˆ`×8 _ôqЩƒûw‰üÒƒï‹øÃ|±VþÍ}=„ªÓõå»W—É/ãðªÉÃì~…ÒíÔW׋ ïeÈmú²h~þ@þñ÷›³_Ïþ Eºßendstream +endobj +1024 0 obj<>/XObject<<>>>>>>endobj +1025 0 obj<>stream +x…ŽA‚0 …ïûï¨g;æ˜Gˆz3Ѹ?@ÆH$"ÁÿoN^LÓ¤é{ïk_ŠARŒÜ sˆ"MpÙA[XŸËl¤Ç„f ió+”Aí/GBh„årPC8$›¸yײÀmÚ'œ†øîR?UÓsè·¡ýFÙ.Ñ]Æ‚õš ©ê‹ójqÖéùÀ?®õ¤½·òxyÆœƒº«•ã;Òendstream +endobj +1026 0 obj<>/XObject<<>>>>/Annots 274 0 R>>endobj +1027 0 obj<>stream +xY[SÛH~çWtÍË2U ¬»ÌË.M†*&a§Ø‡y‘í6(±$¯$‡ðïç;§¥î#Öb\©2ùøtî—n™ÿøj†¾J&jUžÌ¼~C>}üñéÄ÷C/Qñ<ñfªTŸzY¶êžWqàw¥J/ê¥Bz T~ì{¡Š—yŠ’ˆ¹Ð‡´D Xª(ô|Á s$îä,Õ<´H§€ðÅà‹”Øx:lx±Šâ™‰0"µ H-L°TYB®ZN@2é[-$(1Ø õR!*1ØhNîZŃM©Ž5î†)JÆ‚ œ»=gü³œ€äPBJ-)19xÈc›…Tˇ‚­18ÄÀ9ÔsÆË ¥³ò‘%%ëÏ)Žl“»Ž˜ÜM(»–5î¢\u—s·çŒ–Ê(–”lS†+0Ø8¦Vq¬À4~u™e%‹¬#–å`ÂyÆcÆÍj€ fàØ{Ç ‡f)’áH‰)˜¬À`“ê&XÁ¢wGš ¿çRV`„ͪÓlBÍ"7¦!jÏ™Ø,' L¢ Bå% “±d›$cV`°YLîZ³SUi¢‹]›©0õyˆ©yCFÄPŒæ¨c‹¢£:ŽìœÖ„`¦ Ó~u¬q*&g jœb$œØ0"§+0™QÙ+0ÌbJVb°!mY'+1¹œQ@V³Ä`ãdä•Ä`ç´¢œ¬i¨(†3ýÞ +¸†ê9ÓA–¡Î8ÿ–”,Ò“Ž,6>‚q¬À`qæ"ŽÁ1ue%ΩU+0Ø$y%1¥) F¶²&Ma V —¦ž3y±œ€6M–ìÓÔKÒFDG8V`ÈâÖ^s¬À`qò£‰+0‚ÁMÁXVb°‘?ÒlBåÕ>tjÏ™Ø,'  Õ’}¨½dªcM¨›fä®c†fØA"+0…RGXVb +5¡;V`°é|,+p )^|VVb°èZô©c‹w¬À¸üÍ|êDËJ 6àa·,¦•ÆEn>X´ òÈwChå‰CG IÄÍîZRb°1]++0 ¦ÓÃÉÎS‹ ¾»HÒL-Öü•~³:½Z¶]“¯º_ßð\‚¦4ÏCA€'Oïò¶S_wë¼Ó晨æT]ªÅó^]ퟰéѯ—QvÅêúfA£ÐÓ3uŽè#Ò³x.Zµ¬ëï +?sµª·[½êŠºRõFýöåqñ¿^¯õZuµzÈËe®Öõj_êªËÍc?t£ºg­^uÞ´žºU]óJëªÝ7TÞ©|»ííò$Ãnjµoè9SË}§ÚºÔ]Qê–•±3Û¼y‚òoõ’´À£J«nZ8·,óN•‡xµ*k$¤Ñ+(Tp©íCèßÓƒÿ¬d©Õ¦ÞWk•s®ù;#þà/Žš'uªž»nwyqñòòâµ”¯nž.X§ý–‰%øaøFÉøåF&éµËŸ´§î·:oµj5ìí¹vˆ¶«ì¢FC®¾é¦yý—µ=~Þšöú0G•b5µBV׫@ÂQQ„Ý×îÓç¯ê“®t“oÕý~¹-Vê®@*á쟧ŸîïþüÕæ4ðÔÚd÷J ‚P{«ƒ¯e1˜*ªÕvOóRtÏœÓ?m½oVÚy‚JYTW[’º:ߨùTiDŠD6í†+Ô{Ò^<í¶^÷óMy‡´‰Q¸~Öè›3Å馰.>¦bð†É—[M±_×U‡fãîè +ßTÄ6ÉPÙSõ[ýBr[µ&Cåh‡…Fû>\ýþáêpyñ½¦íß›VýÐéš]ª?tŽ‘¥¹@F©ûÌXgDüÎß`ÒcVë_ªûb».ª'Vý¡¨ò¦8Jsø¾æ€v +då®nºSÜ"”ÃÉ…ÇÝú}Õ᥺n4Ö$»Ü–K4oµ)žö™‰M±Õo4ÌMüæ!WMÎM„¨„¯hîÞ‚"ÕÜüãf:UžÜåMy8º‰fJÞw ¾T]ÞtCq)–:«Â÷^þÆB.LlšºÄ„ëníQ>Õ ïf£‰5°ítS¡2?ô% §À B§Ó:×e]¶u>Ž&}ßV‚rá˜ÚbÚ„=ãL‚•y±53^™j¶ºÁrØê(Âì}›©±‰tUtÄbˆìbÜWÅOµÚØ'GØ™¿o'û?;\¬\Ý|y8S›Ç'|Õü'ÿø¼àÁ÷3õåá"8Sº[yžw¼7¸g}v“ñHgÿí³h[uSWÿèÔcÝ|ÿçXb¸q ¡xº#oŠü©ª[Êâ}Sc%—Ç,8za˜ôö§šV·7G*š^i×ϵñŒö/¼ëj\«Ôþ¡Í-èý% §WÚ}ƒ;Í%ýúùö¿täêš{GÝ_Nì¨Ma`z™ÝÕ«ïÐœšé•ô{¾Û‘›_1€XIz”’é…•dG)™>.XÉü(%XãçÞÔØŸé‰"ãzãçÞª™èÚ‹Yç•ÌÍÛ«|MŽ2|’Ex™Æë%÷í¿'ÿ9ù «\>”endstream +endobj +1028 0 obj<>/XObject<<>>>>/Annots 326 0 R>>endobj +1029 0 obj<>stream +xZ]sÛÈ|ׯ؇<8¦ €ŸO)Ù>ç\e霓§*•ˆ„$œIB@Ëþ÷éž%v:B¦SW¥s«¹³3=³³ÔÏ7Ɖ›§.›¹Õöl<ã7ü‘ðÇï?›¦£©›-f£±Ûºy†ÿy°qWg·.OGs!ƒÂª°‹Qêfót´€ÕÙ˜S U˜q>Z +'6S8)¤b°³¬gV1ØÅ4xÀIo]šô§õ"L—£Ü],è’ŽôÜd6š“3@N ¦ÌÆ(ŠÁNRYÁ`!_¦¬`°HäŒc#˜t +ß"«ì4ë¹¼\RµŒax6 ˆñx2e*1 OÜÌP$Ç3Ëi²LhÖP §ËÌL“¢ñˆ¤I8…XABÈ™„—¤6Ð>IR1%cî8T1cÉ ¿°‚Á.'JXÁ¬‡¾EV1%œ@%ao] tÞ%šÎæ^à„ Ë# H0œš² … ‹*š%+˜.Ï‘ÈúiáS—øi É´ “p*²‚9mÆë ›ô 3¶‹©!3,ìdI뇦s+Š…Ò Œ¡S*°~h2±’IPá©›òC#ÆP4¨X_mãÄ07³8R &Kf.Ši–ÝKXÁ`)åcsép}EV1SgõÆ*‹e‰#+ì| +5… U­>+F¥NluËŠÁ.Ù ¢eÅ[7Á’Öyƒ&Ìm°l)˜ ‘²gK¤Ç¦@ SÀ'’ŠÁ¢ ΔÌpC’±‚!º—ZV 6!}q¬b°Ùu'¬`°Hu¦¬`ȘôçU {„F¤ì+†c¦9ŽU g õJ1«ªï•½€»q2™ÐeC&¤`°è—˜6²‚Á.Øî…Œ€¼a¬b°hp9²‚Áâ 1ëûIÆ®iÇF¢ËÏåʳxzÐ0b …0YÁ`±Èa8²‚é1w1aC +4/DÆz§ÐC}£å¦’²x°Óv˜Ór;V0XÄãXÁ`qï†S‘Ìü°Š#«ØשÎ˺í0X„‡€‚eÅæ' ÚÎM‹*{Bà"¤# O‹23«‡Pì$ݸ××g¯ÞqÕºë[œ‘ñm×Ü]¯íë´±»^½€v£¿^ÿñôK¶úνpWm¹Ù¸ûük¹»sm]ío6Eó·þ§qX;|ú%l¿ÄÃh +ë/²A“ïwmqWç--^\¹Ïån]=6nW´Uý¥qe{ï®òíM~|šþ,Éà<çwÅn=`c¬Ž¦ƒ&.ómá~/šj³oËjçÊËÝþ.ܧ]ùíÕ‡r·ÿæàõf}Š«xy¹þíÛLH÷ê‰åçÅ«¢]½º¯š¶é´S9¦òIé©Ækôu´ªv·?9Evêôÿÿ™`r껦A¬îOšäIa—¦åÛäñùηoŠµ•$rÿçjE —°_¤è–ƒ5v}_¸Ë¢}ýþ·+gó¿ÉW÷Åq«½Œc¡=kôÃů¿]]_¹Ûrsš¹a]~ÒÐp;y{yå>TÕ—ýÃINüüþ–žä|Ø¥_«GwS£±Ýîw+®ôÆ廵»ÕVn]¼¸?¥D¯J†×ï7un+ÕßeXŠ8<àÀP¯E²ª‹¼-К›/î!¯qÍÀ˜S›†vÊ´tÞ6 +Lÿð-Žç½§éð´k6(èÕþᡪ[Þ‘üî€ÇÛÑ·ã¶uÁãû“çbª«µïzÇ-INðÞ>h¨··Ô÷‰wµþçº«Ú ÷†ÉcÈÿ~`ðùOÿƒÝEí‰kÃÎ]­™{[—8C5¶ÿò í’s˜¾§ÔÃî)]vr·Éë»ÂíöÝéÊb8u‚ás¾^ÓÝK´ÆÎe4ÊÜú°n +?Ÿ¤Öð–£ÕÇñ#Ên`í<)âa}x {¿5-w]U›¦h;Ú¯“çnvŸïs,‡&Øx6éÕÉs—ºPw/÷1_}Á o@‚'æO”àÄó<¾Ëzf×1QqnÁ1ÔŸÁÞlJKëú$UÕvQÚë¶\ìÅ·uµ ýf<úÆß=Óx^½ã3ßÁøü=^ào——Ÿ«®Î/^Ÿ£r«?°/º·Õj¿…§æ5Ý}Ég:~üå<Å›ÙúÅù Žchò$'ü{1Á_¬óÝ‹¿ùåúìgÿšñiendstream +endobj +1030 0 obj<>/XObject<<>>>>/Annots 378 0 R>>endobj +1031 0 obj<>stream +x­Z]oÛF}÷¯ôa‘Ö +I‘U`±pœ´ë"v²¶‚ìÛ‚¦h›­$ºÇÿ~ϹCÍ\WŠŽç~Ï;£ü~›b3KÌ47Õú$šDø ¿ÄürýóI1IL^ä“ȬM6ŸÌ°27' +®Í|>™*NÁµ‰ÓÔI‘…É$3ù,™ÇIAž„ìœd”Nb“ "©1Øél’jVa°E“"™eT)@ìñö¤”êHnÝ,K%[éŒ2p‚Ȥ8å8«/$ävwf‚¸Ð’ÉÌgŽ°fÄiLŒÚñ¤Æ`gSÆÕ-Õ,j_ ÖU™$“™Z«1Ø,ëE1  ,F“ʈ3® ªö:NAÔól´NA‹zFÔÝBÁ¦^Uj 5GÝZìUd)Š%Õ¨@„HW*H¥Ü™žÔ, +rK5 ×P˜žU,:Üñ¬Âì9#áXÁNÙÒ=+î¤B #Ød¸ã!ÝáÉâIÁflRŠUìl¥ŠU˜ÅÁ`ÏZ“¤âÑq…@“sS“:Öï¡59’æî1X9…«0™3~­Â`¥´«0œ‘¬{Vc°)ÏÏƬŸÉåAšÎQ/ÐU¶ Ï)ƒ¤ÇyRc°y>«1Ø‚U­U˜Î$ šØG“4‹–€{Va°Ø7£µ +ƒEÐ4ksžÒÐjÁ  VËMy,Ãà˜Gp*È“h7¬_„ SQ“3J«Û-á9…¾!óÏ4e… +¢àXa¬…HœcÅÞé<“¤bÀÉŒb’‡4‰‰÷¤Æ› Š“¦HÛdŒã¡0‰I +ƒEG€Zù]afâ˜tÏjÌÄ#Ö†bšÏmü‘d¬dCá1ô"Œ°Ê³ +ƒEÒçšµevrq*`Æ$’†U˜s Ù±[›+Ç6§Ãøšp œ +É +3’Ì”b‹VkVaz$ùô’†U8’#½Öú‹aTæfd9d#é1õzDÖZ»$?µ‚d©ÂXjSäY…i²¤È³Ö¨È¸q.& ÉÂ&h­Ü_Lo†½K¤Ø™ýlSM +MÕb:ÄO± +ƒ-x7ñ¬¸›ävÀã€37Q°%Q6B +²ZQ' T³[àH@NA´[ΞS' KÒs +ÂÔd¼Pc°¨¸éTj Mp¦Y…ÁJRkF5EÙÈYkÜñ~­Æ`çÜñžµ”Žµh©0YDPašœR°cíRdÄ^ …ä2Ãm.Ž™)“MŸÛjQr¥*íïÚ¼±‘¸µH}ª×*ÌP°qúµƒE-Š‹c,\Ëæ¨6jU&aŒ©1X í#Va(•+²¬1Xìr¸ãÔj yN4«0XبõjŒ +‡^-Yc°èt”Ó«1Øœ· +ÏÚ®ã +''-JMLj†ÜÜ«0XÔ¬òk†G¸­Â*Çj V^«0lFCB™¸µƒÍ’cèESdAb³Â³§zVc°£ ·Vc°È ^\<«0Xôý«0lƸ€ ºµƒÍxq±ÃǾ¿v›ÈÝÒbx„í‡,xVafAlö¬ÂÌ7¶Z«0£Ákg5+ã§gÅøxj'Õ8âÎ" ³ÂP‹ˆäËï +«0XRäY…irÎô:Öª‡¹P @¹ˆ1ì8>ùÀ$GjL“8Ó(Va°x;ÛK¢`«íVž|86ÆÈa+í!ÊÈ“ƒ/«0Xt)(u‚5&+qP¬Ç`ñ†;V Æ“;·ä{‰‘C´‡g¼£‡€Šó­9Q&Ø4sµNÆX'…9å+ÞP×rCî8ÁáÆ¢9¹ý9ù¸uv'a+Êy# +Ðuök›Àf₇äXÊsádŠ§ 8ûVņ,.xH÷X~‡tåâ8ÁaàËÑ SAp˜iÔ:¹âÊQBÏá|OK<†1Ç úx/‚¼ùpsŒGÃû°c^´d ö3î +üžz\±ö¶Hma«ÉðnÇ:qÝC¸n‡¼=÷nqòö'4éØ,îðáC^ÌÌb)Ÿ9DfQ½)&_üúòsˆîÞ¼1ïëÛÝý}³¹7Ÿ»fÓÛoÚÛU½ÞŽ—à,ÁG§Rg‹%ÄÆAÁ›¾k—»ªoÚÍaI‘”y iaÝ™Çî5Gb§A±_Ê’DâÖ,[saÊoõ¿Ž°5 +½©{ áîÑŠ®ÊGSn–˜mÝ}«»@\GfgA ¿´·³éÿa6­iwýã®?ÂâüyÛ¾+7÷õñBgA¡×å“ùÜnû›ªk÷Q^ag¸NÏ–ßÊMU/]™!m6°.Wf¹/ýâNu¥‡EÝÔÕ®kúg³ª¿Õ«@rÇ¢þ¢Mƒ–tð²íjSµëÇUÝ×ðt+™ÀV4íêç“GîãÊ2’|) Ä û'6Ѻl6oÊõmi’É÷ñªC=¢Ãñø¥m6lIåÆ\-Ì{+ÿ©éœ†ä°µ›xÍ Zo åýÚl–íÓçúœÕHæXökæÙ4[Ó?àË-:WÿOTÄlGôœqÂAú²iîìŒí}»UOu½q!pôïËÕÅÍnËhÂÕ[x{8rºTqß«=»eǨþ¸ý@J8ê˜àý'˜Jièƒkèí·e”ÓW¼\”Ý}Ý›/Û¬—Y +ÿnŸö¡7_Ûî·ãŒÃE4èòeSuí¶½ëÍu½n±Ñá6zä{ÿ¼\…š‘®ßx‚©%(ÿª\×æ§VSá_ì»êáp@_Š géó +ãF‰ùÂœíúdMUrD0—V¡ ¿”2ÕI½ÿܵ8…/Þ›³Õªµ:Ž³=|ö^×ÛݪGh«l£ÃÒ^–CXÚÅfÛ#IÖ{îÐóvs×Üï:ùÉaé/6' ‚¹û³ wç ¬ëú÷]ÓÕk¤+P´ãáÙ3(kQoeDZ0†[ó)4¿¼ dx„ùج›^‚v”qá± ¨Vh‘¡ulR8\Üè}ëò‰­3‡‰)·¦ä³.»çýyµ•W«º;"éÉ+)ÿÜÕ3µmÐ +®ër¬R.|lLÖ»²úí)tXŒå„“¾/mž>ØõC@†óüü+ oýó®F@Ã¥lÐÚ,ºÝ¶7gUz{l?Pœ¯3ÓD{¬%G…ÿÕ~\nv,­!vÖ:lËaM/ çå‡O›SØ}úÓêù‡¿L]8}û¨1T6rÇîåv ·Âóv½F¸pzÉÅS2õ¡ëÚ#îJx w†›çm_¯qY5USÛ +€’»æ¨ƒÏÖÁ!ÃF‹xtæ¡^=š +sÝ…Á¤˜åÆ© _sÆ[Âܵ›ãæßß^~8\8£cŸ ¾Ò#ö;Ñ;<ƒ:{Gßþh®êþ sÉ0HVõÒ‘p¾¦IÝ“¯ÛrÍM+÷ëÉyYPáKÙûO—gWÿ;ÿtµ¸þôqÒïÍ.þ&1tó7Û{<ÖÞ$C×?«zÛåÙ;1Œ3Š&ÏûÎ i«ç¡v¬0Ä݉^Z?Þþ„PäшoßQç×ùOGonÎ.ßqGþZá÷mµãéïF“S¾Õò×Og ^˜–oôm Åÿù)ŠïP RFõÃâä?'ÿú¤“ endstream +endobj +1032 0 obj<>/XObject<<>>>>/Annots 430 0 R>>endobj +1033 0 obj<>stream +x•Z]SÛH}çWô[²!ú–õ´E ÉR‹™âYØ4±-$‡Ìþú=綬¾bh·¨rùpt?ûöíÛ‚?NBà'4ydâÌ,Ö'Ái€ßð#äÇíדtv˜l–ásmÂ09M´2óÌ£ÓÈYÂ'S‚Qrš)Rc°qtZhVa°yxjVᵉ¢à4V¬Æ`ã©SƒMƒÓHË* ¶ˆ§^ŸN DˆRDmÃÕl2;Í5«0Ø4£fÑ$² +Ãn3É#«1#Š¯c›dSY…ÁÎ\´«ñÚÄÈ•¶Úx¡!a¼1ÊÂd‚Äg…oÀ5r¬Â6^øìXÄ»Ç`g²¾ŽU>c}áÕÈÚzDÐœÊ Z@Ÿ„Ú0ä¤Æ`QXÇ* V~¯X…Áf³©¬Âp8È'Ni 6›zeÃAŒÜ^¡ +`8 +®M‘2e#§  +BVÛHj 6̦¬Â 5Àú*Y…ÉJ;Í +ƒÅNœÈ*ÌD„ÜóNÖÖSI·ö‹ ©'»Ÿöl\0ŽUv“” àX…ÁÎr.¼c¦WÒFVc°v':Va°(0t€‘ÅF™m‚ ;¼ãQ ;ƒœ}PÖA¸›²Í8Rc°E„ÅS¬Âp(ɱŽÕ˜Ápñ«0ƒ‰bÅ*Œf€ÅÒ²ƒEt: ©âtÆJB¥ŠO¬å²\6l²k¦‚™rI+˜TIÁÆm:Va°ð^ËZ«èB<™°YÀ  ^!ˆ# jGRc«6Ó,Ìì1Ø™,“U ØfÁF,Å*  ÆÂŽš5FúCfÚ±6Ø(—:´gt*H²(g¶Åpƒp«0XédŠUlÁòW¬lèú倦n‘ØU…×@žµkË£(E‹`ÊB•u˜vÙ+á&ØS¶hxzXd; QtŸX³ +Ól6•U˜.³lœfk6OlI±‹%hµpjÑ`!8’ƒE‘dŠµjq,°‰ (¸+€j¥oXÈXx;Rc°Ò{«0ætiT¬1"•ô;Öº$%ˆÍÃEOH¤Ž.äàÒ ÂŒ:Va:ÌQE± +ÓaæY± +Óáˆy5gœ˜’8µÅ²uY$Á.DìkƒÐÀ § l¢ž‘à‘Ô,º½Õ,Ž ”á(kS°Œ­âÂ$‚Ä#Úc*fR¬Â`Ó||vð801Z˜ ¡¢È"§xdqhÆóÂ*LÅt(Y…ÁbT +ñÄø¥tø%Poá 1©ÁÁ‘´‚«¤õWòwÏbMpá³Ö_‡!›³*ºpmÁ–•6 ãƒE"«0â²+VajN¦¬Â¨5œJ°+v¨Yc°I%V¬Â`¡ ™r² +ƒE’´¬MUboSèyX;´ª ÓÈbs¤Æ`Q¨ZTc¦‚³¢’U˜©à6q¬u)²WëƒçÒÀ .Œ¤ÆP‹Ú‚ZÇ* };Va²5ë0ó0œQÖ:Œ,u*z8‡npp$5v¬ux/kt¬Â£ÃŠ‡Yž*X»‘µö>ƒc%-@vjqf#Ò‘Ô,ö62ìX…ŽìfÇ*L‡yê(Y…‘aœÊZ³8öÆRp‡Z ;H‡9ë9Rc°(í@³ +ƒÍ9Ã+Y…áæŸT±Òþ#œò‚'tI¾=ÇV µò$I™ŠU˜y`þkâÓ6bž@‘ QŒTï1c-(êXžH|ùÀ"•›­”T‚ØèȯR"”ÙˆoÚ†rtˆqÂ)Bã“|ÈeßGKÃk&®"{J„ÐKÕô2Ž'v˜8¬ Z÷ž1Ìë’ +nù.¶FQÿŠútwòñ ê"4w|›Írs·”×±¹[¼Ç¹þãî÷×oiÛ'óÞ|*?žÚf·YNŸ@Ÿ žÌÊC!õÄ^=÷ÏeoþØ•«ú±®:Sš‹f]ÖsÞlú¶Y­ªÖ4Ó?WfSõ/MûãŸoÛƒÿSƒ¡×ä¿š³lÄØ=v}Ù×°ñXo–¦î;pâÁbôÀcòuˆþdÝ?WSwÆÍÅ9B©–ÕÒ£öëPo çåÆÌËõCi*dŽK²Ûþ5;S÷S¯›.siºª7Ð_6?]œ{4¿ +Èß+o«íª^”}%IêÖÛ²ë^–X•Uå1óFpkîOÓ¼oÚzódÝ~יߺªýxU.žëMeÎ qoêÍcÓ®m% üÙog7æ¢n«äÿ<¢ê’qÞìÚmÓUokÑ+míMÖ%·Är·`¹£É¿ëæ»í¶iûji£œWíϪíŽÑy Í‹çj]"sKs[­$“Ýs½5}#KzûåãAä¡þ5¤ý‹þÊDx¬ŸvnqÍKÝ?KHo+ž&Nð v½­6RhbDz[ítýpvyWð/¿­pÚpê{yDãDÚ¿¢o;³.7åSµ®6ýÛÚ§îæ^ÝójÜöŠîŽ}æÿXµ™W­dµÛV‹º\Áï¾oë‡]vŒ h´™£ê±ðÚùü«\oWÊáò‹ùŒ­Ãó…6ʉ•cr„ƒ}ú˜üµRÎÁófÍL{|.¤¿’/×Û¶ù‰íøÐ6/›zäbjwºN +ù`c_ÿ¬«Ó<ŽºßV©«âP Ú{ØÙò7žNÕú;ÒMÛ<¬ªµi«®YíŽëp¸œx×et³\´M×™n÷€³L¯Òy¨‘ÃV;¦ÖpB1¾óê•9Ì«¾gÈi{ù}Ž³—ú˜•ó÷ +¥uÌ:s}ûﯷ׿Ý£ÿP¿½žê¿¸¾:»ü~Œr×øÒ´ ¦D6ÏŒ<œ +×e×—§¸*(ÕP:L€Çë>Ð ¾7˜iʇf׳JÊå›r¹D¡w•§§›XžæÎuŸ«Ýª¯Ùäê ²ðX.|§è@È8¹….NC›4wÝΧuRÐxméõ]r[¶u×lŽˆo¡¼Š®·«fñãä•;xå×3ôÅib÷íUçŸÞøýùVý¬V‘9èÖkmþ&x½ZšwåÊ46Îwø"—“fYm1Šb@ö\¸^¯°ßÊÄ(o5{R9õÙßfo«riºú¿GL¶øó‹w9®Ê_æ׺>b`É Cß6ò1kz ‹=—-ÚJ³ôý45þŽõ­y2+–Ç1þø›Ó}½¬Ì +W•£Vê@#’¥jË—cÜ9Ðrî1VæX=þ#î ¤—õ‘÷ôM_Uk\Òpl·GVÞàM3áºê|…7ç«Ú?×}ü2Þ›ðX0ÿÊ1ßuÌÏ®> 3¿ãÚˆ«øbÇép¼;|ñ¯|wW¼cY¾?{èú¶\Há'ø†Ù,Á«)û|wòŸ“ÿúg¡Úendstream +endobj +1034 0 obj<>/XObject<<>>>>/Annots 452 0 R>>endobj +1035 0 obj<>stream +x•—ÛnÛF†ïõsi1Ã%—§«BNšÐÀI$47¾¡)ZV*‘)IÙÍÛ÷Ÿ]Š;t½®ƒŠ?þœÙÙ™Ùÿ^( +ñOQQœRuX„Aˆ'ü£øçëûE ¥y„t < Òö´Z<ŠÂ ¢5Ì¢ ‡aŠRl( 5œ;Ñ&†ÂˆÆ©3¢C* çé$ª˜Q§†aœà? l(ðŽÆ¼Èš@8 Ó b’spqD û¶À†*Œð8ÅÄ99*Jx|CF Uk¶uª`¨I8· µH‚LÚ +>PŸ(ÑäY2TÍl%CE ‘ +g+jÁEª`du“3’ÌùW3[ɬ³ùJ†ŠFA+MQI†ŠžQI>³™gÉP£x³d¨é<æ±¾èîá±¾†D}Oª­§SOõuª­ïÉÖÖÓ©‚§úNêXßÑv¬§Sm½Oj’p7;U0ç©d¨Ø^ä ’9Å|U¶‚‘DeR<eŽå$á›L!ÂÔ™ ŸÙ‰æE7Þ ,°†Tbr£¦“Ó›¦Ã-¸Ó»F̳áë†s<6jÄW$¨1o5‰!c+*GäÉ©‚¡¦aœj® n;f XO†„ç“j=9U0<#ˆÊ©f +!‡[_#ìW ’˜p OšÉ¾Fc¸ì[bC+f|7ÃÅÏNm€5ˆFñfíDkhÎ`†È=¡C6äi8ÑêÜäCD¤ Œ#ž†8´­!î†<òUWbKÉ<&OH¨‚Ù17¾PCE.1QçY0Ô‚OR§Ú pørr±Ï¤8Õ8&Þ+´âsYcu‡ÄÏ»šn—ëÅëw)¢¤õ-ßåÓ<£õÆ\åCZWgH5Éùúûã+~·¥3ZíÛú£Ýîš~þŠùÀ+!]`iDpi<¥^Ooö»ºh86»fû"_™×קŸôµîûÁÔæéÂòû¹ZE4ÆõáêÛúêé°9SÞ°Þ-¿xú ¿“HxU6ô‘ª¶¹Ým¨âÕêuDßÊî½i›¦®j;ñPSÙSI•Íð-´Uy¸){z:²b¸ã‘w>χÓõYÓ§®Ï_Ùàñ>cŽ1 +þ¡_'öƳD*†»¿eó“Zþ“v}¬{z¸«;üõ‹÷u×ïÚæú/б¯72E/LŒö‰ٴ(ѶèG·kD²évÏš}[nè¡íþB«›ù›ÚúôžÑ/ð©íz6÷ÍJ˪ªûÞÖ™úöØU5úeSÓý®¤7®ž.ý¬ sÔ~þšù²7Ëþc3tíæX Èáü§Ö=îe^OˆåìÐRÏ}´gxî]^¿cÆé>Ô7/ Ó¨pXÝ{–ñ¼F…7¸¯õ¶¸ø—Ç­Ç×l®Å33ýµZÏÔâ}ÝÔ]¹§]sÛþºŠÀ¿ßÖ7Ç-íëûzÜeŠÀ¿”0»ºkTÝum÷"gþÓj9 euÇyG¯•Ô>l°B[^-/™²ÿüú\Õ]íqòú]>ž° +ßNaã ‹Ù³ÕòÓå’>wíw޵߶Õñ€S°<­« ¾wñëè,œÆ›³åM?te5p¬7Ò<×8b!¤üä÷õâËâ_ÆÏA«endstream +endobj +1036 0 obj<>/XObject<<>>>>/Annots 455 0 R>>endobj +1037 0 obj<>stream +x­VMoã6½ûWL·6bÚ²ìØÎ-)ºÛ=´‹n|é‘–(‹µDª$¯þø¾!åÄIÓmŠ †-~Ì›7oÞèQFSüe´œQ~EE;šŠ)žðGÆ_>Žfë…Èh1_‹µ”¯¯D>üjèŽ÷Ó"_‹9ÍWK|Ÿáß)ªâB–Ïqè……|&®ž?¿ÝŒ&Ö4›Ò¦¦«åŠ6e„‚'Åŵì‚r€E?ÙKŸŒ²iHš’6ʺ»ùùöæûÍïñžl™îG ›ò"8zTGÓkú¢dI¡VÔJCÜ)ŸÎÍ)ˆs³%0âÜæ|•Ú§·}P%t¨SP*¬ Rjlðd+꽪ú†´©,ÂÈ€½@Z«¦cä;èh{~‡‹}ªø7C˜Ò8ËA—Ö¼´7ȶN;Fý€˜ñ +îHÞ¶*ÔÚì¨Ñ{uRAR¹B}pãwi%VÖ"_€i,g«ŠÆ|µo·¥XÑŸÔZ§ž’2ŽƳá¶Ïˆï»w…ŠIs¶®•A[C"è¬6Ì2Þ#Ûw²ÝJ:¨-yÔeLø©àÜŽ.¨¡»žL‡ƒð|BX·{º7*{Y1ç•Žifb6T:»¦Û^7%SÃÕ¾ÕF:ýZ±-•\1í/©Ò¢r=8ÆÑÎÙ“mbd10xAb‚ÒWz×?'ëÅAŽSE°î(hƒëÉ׶oJ’}°LY%YFwI!ñvY&Žl§Î )ôAµ'Q-ïõ¦÷½lÈ(Uz†`¢ØZy„ +}Íå@R)‘D⬠ߦՓPò…XJ9Ë—ÆctÚzjœqÚû ’D"Bz¥èÀà;UhÀ³ ÅGl„§ŒÜ6ŠÙ`õU=gøa¶rÿ\¼Ï€Å†,ÐQAÅ2miúl +E:¼GúÒöèäX›¶Ó äÌË€Ñão@yDûz>7ì{2zº•ËÝKÐo*¯: q( þ§“èèÑEzÿ6šOa@àë¹À§ÿ¾üõ0¿ØXQ(MGWVÔwhÞhÜDݬîµí=Ý+çÙ¯à٩ɸº­ÞÕ!z)7KtàhâìM;bÓc,gÊ;NJJž¿U˜‡F¶§y!éÀï ñ  Ç~¬ÝF)‹=å‹þ’Î[(DÒÊ…×éH«4¦*ûà)Y†Ù'a7î›tËΛÎ;»æF&žÏºí¬ Ò õ1}ŸFu§9{Rªm’ÙtüŠ€2ó÷³Þ;+ž‹eçÖŽU·k(æ}±?^âaŒÓ` »:F“…YN‹“fcèɇ`@f¸Œ¦“Œ9Ük¼ĹŽâm“«Ç >ÏÓÿ7oAóÕT¬Vó4á— ðÇÍè×Ñ_Vì÷#endstream +endobj +1038 0 obj<>/XObject<<>>>>>>endobj +1039 0 obj<>stream +x•V]oÛ6}ϯ¸ëK]¬‘?ã8öÐvi MºÆÅ4Ã@I”ÄF"’Jê¿sIivÔ´À8v,ò~žsî½;˜Ò¿S:žÑ|IYs0I&4?:JV´Xãó /+©fG‹döÔƒ““o/¼^ŒßžÐô˜Ö|,WSZçû“ ­³Ñ4Y$tåå†æ§ôÆJá%ùJ’kRÊŒ.TÙZá•ÑT¨Z&/Ö_`nASXas‡³ãd ƒ£u%ŸÀˉfSË'.;R:Ø–_ÃG®MseeæÝöså¼UiË>:Ç™²”ÎÓÖ´¨€ÈÙBÃaÀùtŽ:Ày¿E[×[r&Ì„&'%Uæ!x46ç¨4äM)a²¿™W™Dp˜Ónpq#JTÚXu½;$Ï)/“E—29ÅÉ"¼ÖqOdM¦­sJQÓÀ³Ò%Õê–Ý)wë9¡“¾œ‹h›ºŸÏemRQÿÝ'T*«º2 ¤h €¥ÑõÐ’tKBo–ô |…Ï$²Ì´!D´8iï¥}‰ +sé$¡yø£,Õ¦Dµh$Û‡ÚaâYHõ zÈVÐép8¡›Ñ… @5`ã¤wõôž^‰&¤PaR¡òúãåŸWçïÿÕü2pré…ªÝÍ‹¾bþsÊßßu4v„ÒΣ>ñYO±Êjãûç$(`ŽÀÕ„¹:¼K× Ž–Ä1”E‚«@'ëd] Aýž#q-xÌ„Û´±(½‡ =SAtI›Z ª|Ömd¦ +G‘æƒ Ù04 òfļËe!Ú9¢[}5·|nâ\V„ Ó»ãÖÙqm2QP*ƵJÇ'7/†i¾…¹Æ K¥a¹‰ +'Rƒ|ÌZ«<´Dzȹ dÇrëx/œ +Æ#„…Ó0YÛH=Äħ‹ó¿þ¹:{óéãùúš1ÓéèN–çñ§ÉQ§Ç‹SZwÂg;]‰å<ñxH%|ĺ^Ïýsn³1Ö )€™ÛÄC¬÷¢V9çi +ïù –1†HFN¹bjJ+hv±ûÒ¶Ú :yù;»×ÜÍ킪ȞŽ©. +¸ï–êF“´–»'ƒP»Ã/ì³w‚?¡yl€Ípo? Œ5Ì-RL¬T +è«5è‚Îÿ¨KË®KG§˜žÖ¦`½IóàOãÃãÒíMËk4¢i‘wV>à>Eß]ïÅ– ÙðCâ…5]×wú¡´ôo£„~3ú9rÆl…ýÜPj|õEEËá¡Ù¾y‚hÁÇ“:Ãå­šƒ41ôòKÌS̾m,Äã}ÉÉ1BÃðÕövÙâíF×#”>3MpW#R¶õ„VHŸm–¹xÜ”k¸DâwZÞO£}'ƒxº%#¡5k(Ï •µµyY.Ђ~}¡ØŒbóÀ¨Äî3ïeË‚76Ê¡&H¡yI Ý“Ç RäBõ¬`Àef°±4¦E~Qà=äæßa“‹ƒ"1²‡Ç¾ú¨›ÕÌlwh‹ÔÌìb0×WS‚sää6(Á œVºz\­ÊÊcÉz}תìÿ œ€«ÒÊ+Ö®n¡€Ã;^`vÜÅ®6Õ9V]Þ°%Óž½b¾HßCy /_¿¸\ŸýBk¤V^f˜øAÇPó\ÐRAS¹³tq~ÅhÄÛχý~»'uèèÆu¯º©>]bï_Íi‰÷°ó]½zÿú}°æ V'p;Nš0¹¸r‡ý…Ãã6{Îóoö‹öËÕ{=î¯ØêÙúàƒã4ßendstream +endobj +1040 0 obj<>/XObject<<>>>>>>endobj +1041 0 obj<>stream +xWkS7ýί¸Ðu¦xýÀÃ72IZfBÁm&3™éÈ»2VØ•¶’ð¿ï¹Ò +?0%)a¥û8÷Üs¯ÿÙPß:Òјòj¯Ÿõix2ʆ4šœð{üZIó½·Ó½Þ‡ 4ãÊxrBÓ‚p¼ß§iÞùݘ;ž–¦±ôfú ‡a7îô¤Ï{NÚ{•KŸ%CŒ>/pM9*ä\iY°‘ÚXOƒ£ÓžÏëŒ.æ¤_(}»~Ì/¤&Qà<•¸‡—;ɶûÔ!üiÑÁwý žïÇÙˆŸjégʸ®s:ùÚŒ –ÒY§*U +[.in,NŸôš¢æ\É-LS´÷’„&©½]†X^w¬]²ô¢ßKùèIê?pEî¾Èr£ç›V:à ÿ`DŽœ©d’Ñ¢5|útëÚŽ"<´õµ—óVŠŠPTæA ©4~RUcDʽeæm£ +™µÿL$»ü4}F7¨QëƒD œ‹edS‹­‡Òµ`ý °¾vÐ\L¾VHërcå×7Eå;ûð‹i¶¢¬ö©˜“ðìúd×ñ0ñé“7T‰ÀJYøì”óÈy7JŸ4ë%jŠC• ­X‰%H¥ÆED”öÒ΄ç€Lí•áÚ0CËðQWË\Í—À‹+î+]©5)á^æ•pwL  r+Ó]7:æsœDÔœ›RÝnç)\ìÌPaôÏžîÐGôÀJÈuœY#Š\}è"+NðÿŒÞ‡äd-@n‚mO‘/H±¡ô„"‡m4yUÉCš5žæB•Ž ËýodDÐÉ< †ç^:Ï2ÌÎv›õÅ ļ’ÓL…)Líªîïï>¿¾¼¸üïè#—6öâ‚êŠ<—5B·§cª‚“ +q3d¹©@ˆ"Ýê¿H»Œ¦˜ŒÜ˜•h¬•¼s…˜Q®f"=)ûœrQlímS²îÙ¿ºî +r¹Uµ? Gq0°å9ž¡¹5U¬f*u'JÊV‰·a¼F`ø{®R-íBÔŽ¾q›; ð˜ôÛŸWaærüa¬) £eÉ£SPAëî=7“iÇÎ*ÎLäaÍSn¥ ŽÞ©²ŒRŽyeÙrý”×¼rtq4 ²q6ÌèÆËšŽg—`‚^ÝË3 +â!Ô… +!+£7ƒ±!ï/)ú?•X¤µ~k½ˆ9´:›ê¸k˜‚¬è©„+æ 6,-m=’¯-ø†mF×iS}(ÿ´gì"áùÂl}y2wß™æ˜~än˜¹íÝõµðiì‚Ú,ÑÐsJ>ʼñbVJzÀ8‰Ù®“/*hÆ/±Ïààbµ;ÛP( ƒu¨Ø¶¥ð¤ÏPmc aq—íR6ϳY–µ8@›ÀWäGÄ?ºÕ¢ä¡ÂÒP[µpiå]廫CݳdžKz ÆZqeÀ‚̽•fÞÍ_×#@¹ÚJs„aFFÌRÆý{a»¶s¼ÑbiKSU—Òõܽu²Mý ‘´k·Â…ÔCÑoxÿà ÀÓLGËíI;'c|ʘáóÄ îk7çßžÓ•5ß0xèɃ¤¢¹cwÓ…îÉ<ŠÎÿƒÑ|ŸŒ +0rÊy½Ÿîý±÷/Xlä¤endstream +endobj +1042 0 obj<>/XObject<<>>>>>>endobj +1043 0 obj<>stream +x­VïOãFýÎ_1=µjˆ'!?øЊ+G…t@¯I…ª¦6öÆY°wsÞ5!ÿ}ßìÚ®=µ™¬wæÍÌ{3óù(¦.~cõ¨?¤¤8êF]Ž'Ñ€ãž{ø+%-ýÁi/ŽÆoôOQï­ƒ¸?y}ãýì¨s9¡xD³%¼‡§xg–|w»4KZq4Šhê䚆g4+·”+ë”ÎÈ­$Ù•(¥%ñ(T.¹$£ikª’¬,ey<»‡uÄëíÞ(ÂzëÛp×'“¨ +ç8°Å"É•ÔŽÚ)¼Ô¯_j±á•±N‹B†£A}ÔöÚ½!R#¿› +ÈL•§”IG ‘<ð¸É,ÿ sDWKŽR£¿w¥&k +éV´²¤tbÊR&.ß"LW­#Ó¥vÜGÞáþÆ8‰{‚/ã}¾jRJ„&‘[C I••)9ƒë’6üb“GTw/—îKú(ôµÐ"ÃcHŽ¥yËVÉŠ„=ð}·¼ËæÇ ¢&!uDÉÊë½—”ËG™@R•ÊmC˜u!¶´Tð×T Î}®¤u¨3­…µS¦ˆbi€V9Ú¨<ÉØ8!.ðÖ§ËÓ¦ ´«ö~9[@¡á*×MI©t —4#äDâëÄ;G™l¼IâF!ß•Û»=À%Ò´¡°Y;Ö¶ûŽ+ÂvSÀ +ÃZF4ãúµA°¦|ÀnEÚèvHOງ(žÅÔî!¡ÔZC£ ¡Äh 1oŒÝVZ=Õõ †þnÂÝh¨ÓAÒvºéF«’¿Ðl»V‰ÈAp,öšª½4Ž¶Î÷X§,8~fÝ‚ê”á*mìË4ØcDýÝÎ(—àˆ·ÃhAŸlñ……f•ú½ç•x”`( *ý"À&Ý܃"hyÜRåÌ´@N‹¸ 1ªÐ0î+Äèí úc…–aÿdyz)¬5N^ ü‚»C _B òIktÙà˜2>µàèZUÄÄõðr“!<_.K„Ë™rÛµ<{…¨i_Ñ;ï®Ãvƒ†öu/~¦þ¤¦þøõ—¥) Ó‹Ûé qã§ғ§6ˆõºA=øòfæÏz't;íôNHº$Š¢=¹4„á›õ˜áZ¦Ò^h©²h"2ûrà?ÍçwW7·wÓùü‡W3£Æq4©‡”ÆPAõ)=£9~‚þ9ÓáùµºÂÝÝ|bXëRyXÿ+ |íâ70­É÷dß°°}ì+ã÷Ø1%rùÆ(>4)s¹(…“'[ z¢+ZTæÊÚ”î›}þ |Ï܉»Ýñ ÂC#Ö™¥ ?–ïЇ ߨ;ÞF³ö›6WP¡ë”Üç•~ w›•¡Mæ5T²FH¾c•Â®ÞqoÐtE¶Ê2Œ?/ŸC›w¡‰L@_óL×|mæ¿?™“ãÁÈšC+-°Nlô¡¦ÑØü¾D…ÊVù>/XObject<<>>>>>>endobj +1045 0 obj<>stream +x…V]sÚ8}ϯ¸“—Òp1!@:³ä£;̤”-î²É‹l pcKÔ’!üû=W²“à¦ÓÉ„/KºGçœ{¤Ÿg!õñÒx@#JŠ³~ЧÑà"Òp2ÆçþKIk÷àrt‰¯o<NúÁà­á8|{ÆåU0iO¸ŽÎ>|RR´ªÑdLQJ@ÔïS”tºÌÓC–Ê.M…8Æ +©•$™I[ah›Y:ꪤ]©ã\$Têè½,Œ¦Ìô]W”è*OIäX«Âd»•´Z­ÞG?ÎúÔ /°Ÿ(í˜Ìâ‘&“E±H)3¦’†ôÚÍ0¢ˆE/Í6ÒØ ž;=Ì]m¥b,´ÎžÜàÒâþnº¼## €xTíRa±.j1’T'U!•6ÓŠ:ºÄ°ªL$`§òá=3`·Âòàd%Ÿ,ídi0ñå9Ê£h‘Âd²t(?|º¢ ™æÞEèñ†AØ€n3±QÚdjC O¢á¯¥é XšÎlíö·{ЪŒyî×;Åv˜ƒ °jòkÀlNÞÎílú÷üËr¶ ì“=]¿ãX(üæÀ3#õ’€?h™è¤Ùíï@_)•kQå––¬«oHPœ õ¡ý쀢mf Px© R Åú sŠÊXo ÇÀÉ-Qf·Õl•Ëé ÔóÞ¤´êðÔ±}œˆJÊ´Ît¼SÒÆ™6ð;2E$Z­[uõŽ дÙÁâÆœ.è óŠ°2^¤µ,ü†³L¢ïžL‹4@Á›é3Wæ¢\t³ÕÞQ\ ®²:Ñ9Ý˽ÌOµ‡½·" \~¾fÝý`îîB(¨—‰\&Ö`Õª,Ñ$`Ó+iªÝN—ÖÐe—° Ên¾|½ëº×Åý·e—î§óÏÓyØmñ临˜Ga»•]^ Þ†¤w^!ž²¢*^‚ªšåk[þµF/ÝÔÇsÉ~CÛ×Æñ@áи.g!~iô™S %i/ð¥?t™Ù#§'—†)­#i¦Hç©, ah` —cž;v2Y‰f^ëÊg†’‰4Fø^ä˜d>™I7ÏŠÌg)L¹Õ-r‘ܺ…6¬V,‘ +HE™ÂW‘ +c0×ʳG‰n±gó¿î7 +U#¥G¢U~l•-e!2ÅnéÝ&6’‰ivÀe]öºË`›¤Âa‡åð\­W¨+,÷œÌÐ' kì„1h‹ÔeÌ«ãÂéŽuÓvaÉËøíûêBié ëâ€Âú>nž+€,äÎT)öÒÚ#@]6AÂûdÂêHa´çÍ" ö×9ù8`{º »rm¯G˜ÉIJÖj&¯1;ó—k øX!E8aì¶.‘gèPƒ#Ln>rJ%î‡vÿ­ê`GL ¾]]>¼o#[JL7}ôÐÁ `U•È! äe(³•J+²üÿϵ•)ziÔ]™!†V²bÙ9<¹êþff}RúÄŽnf ‚°LtÓ¶ì-‘¼öl§€>¡ã¾6YæÐ\rÛÍ‘é²ÊÚËÂŒ&Æ”GWïmÔZµêº:æh¬,–¾ÑØÏU!bô˜ð«#ú÷w‚a€ÈOLͺÔ}›Ïþc£ ºqjÒâ†K¿dÚKŠ7œƒŒpóˆ=ô $W&°4íÅp?Nn·ÒÂá¬pyÚ"6œ'G!Ž¡ÇŒ´7ÞØŒqSŠÂßø0PQsÖ÷ǧIÊlgé Îó€¾J$ƒ¶<®¬w㾩‡<[­Uú7Æ‹8¸iÜ}SÐòûò_2öøuqGLªÝµ"ÙzX|"#>/XObject<<>>>>>>endobj +1047 0 obj<>stream +xmVmoÓHþÞ_1Ê—+RëKÒ’ô>ð¡¥EB-GÃ!¤êN{M–Ú»fwMÈ¿ç™Ùu B¨icÏËó23_f4Å¿-çt¶ ²=šSš?Ÿs:¿Xògü÷šjùb¶¼(ã/®VG¾ú‹fç´ªkq!ÎtJ«òxV̦Åó‚Þ¸òÑØÏÏV_ðø9ÍféñÓùßYMÊkEÛ)7\«£iu Rõ?¢wýºÑd5)PÁ‘¦t:_œðxµÑ¨1(nÅ]‡·\=<ãZ­+ŠŽÖš:íkç[ü¾Þ‘¢û·W´ÿ¦}AEµñ!rº‰×¥óÕh’ÓÎÎÒ¦zUÓ¸m@˜²1ÚFNÁeâ^ÙÏš Yï"*2s¶HÐè”* ­8WDâI¥íŽZWé0ÁT”žB§KS]ý’¡”ãy ÌûŸêG“­²Ñ”z[iO¬ùί¢óU¦®#:¨½kAüaëù…ÆVh¶ µÆY†yTÕ½j× + ` Íi£¾ú0*­Z þ^—66Çϵ„]ˆºñMÛ¶ktË%uíùQQ£Ìk·<5’jI¼ èÕ½–Ê’u‘eP÷M³#´‰^#U=*sÀh¨©T@ƒ™&©$‰‚‰ªUGÙ]”Ä€„¢Ô|ÖË!‹£ï8çü¿³99Ÿ‹óª4˜¬àrV°Êº»—bFy·ì ¼€†BßuÎÇ ²Ky@øhVÐ=}3 Á°½PG†‚c€žP³9¤f¯¿ö:Œ[Vk +QYc ƒýˆR‡„w$_!°o ˜®ˆ;mb¥£`”d¯„0Òjf‘D¢!NŽ×1Q¢ófÇ`¬ ×5©¬HÏB(ÇÈðg Ý 8ÖAª±øÄ&¿OO‘JmlЛBȲ£Ü9€ø1y  K„vë…‚Ÿ„Xæ]ÒàÞªÝ/ Âqe(‡ãÂÆõMEåFc@Á¡9tv++ÇÂê@~ë t*^„Ó )03ð^ìá_†|kâ†{õƒ‚¬½uþ1cÀîû#Sr´x"¼õ:¤!軲`*°$*UMppQëà?Õ 4/«¡ª P¯ +£äÙïiv²Brß ®6Ø rSÐå0Ù­*Èäe¼¾¹ýôÿíÝíÍ ÉÇ÷7—×ùãÇ÷¯W7¼Ýä‹Ë7o—…hI¬\åhsmó4JÃTÀéÕË+1©üråÈÏ^£§ØKrʺ(è-dª>àس +fzã—ƒË.K‡Ë°Ã"ë5½5¬åw/Ó”`Ór‘’Y…èx¼ðöt¸A3=D€» °eFÅ 7å½N÷Qh×NÚw&u +w$k«Lr«ù’ž-p­_œÑó³)Nt¦÷—o¯.éw_ø°¹veÏG”(ˆ[>^8]Îq§W¿»ÓÏ—çÅrq£ž¿Ÿók7«£Ž~.{;endstream +endobj +1048 0 obj<>/XObject<<>>>>>>endobj +1049 0 obj<>stream +x•VMsÛ6½ûWìøÒd&¡>kÙ™ÉA±åD3¶äšLÓLÓD‚j`Њþ}ßdê°é¡c{Æûñöí[üu2¡1~&´˜ÒìŒòúdœŒi~q‘œÓü|ÿ§ø³’Êp0™Ïþ}ð.;]_ÐtLY _g‹sÊ +‚Ÿ1¾É_\îE㥅#ºRâA§ôMkɉz'ÈIû$íËìÏàf²ˆn^ÏæÉŽ^L“IBkí­)ÚÜ+££åœ&“ÎrºHÎØ2Û+G¥ª$åF{¡´#A•ržLI^:ï8,åBS#milMÞГ¨T!¼Œ)¥ÏRBXO¢r—«*^>ì…'¿—ðû(«#ç2¦×“YÌ5­“!,kv•¬ I©’”§R(xúHF÷V0w^6±‚M#œ“0ª*Ž‚Ó˜7þ×ì¾Ø­ØUG:û()”Jˤûnz–̘ϨÚíM[TZÞÜ„ +‚çW¤tødl&Áê ‘ íÅb[% Æ(V–m… ùÞÎjÂLàl—£Ñ8Gýƒ„rшª”W¨ V%;í¢Ja+Õ{¦ D¸_Nê‚j àHÖ€´92…NGa¤Ó?ù€Å),Šp#$¯ 7Ue\Sƒ førY´ tÀùv@ñõšÓÚÆ*Ç—€E¿¸Š[6&rfú?çm}š€ñKçÚºaÖ:3ºþm×:´›9 +ÖÄ~¯ ø§.øÅÏ„ðý'øåÅ'_Œ2ÎQÓ ._^É•Å í¸€*ªU%l¨˜1) (‹ZrpT{7tñ=^Ü©Gm¡‹Z w¸ Ί'p .í1FÌü@WïèTɸæýîœL4u]75úº9Mè3"²˜‰¢þáËî"‹íŽ|ÂãVÆQŸ õ±ß°ãÑõ˜.z)GÅøþ裎¡ùP´¶®¹ÅoAÒº1VØc[GCËF€oi/Ã#+EýƒT¼¥£üÁTD)ÿ°JW›)-ÓôãíŠ@òt½ÝðB‚Üoïéf™÷ÛkÊ>¬(]Þ¾[Rúq­J·°¿ÜÞÞ.7WiŸ@'Ñé‡í§ ]­¯h³ÍhõÛ:Íh½¡ÕòórßGéoõ +zWIÙkÀIá=@`®AYi-YKçÄøÂ<àYƒ¨³Þg‚S€‡eäy—D.’ò¬í$Z4H¹Õ%„XÀŒwU* 9Ë÷2üæ‰Öw¨g¥3U²„ÓÜXdäqßIOm“|xC·$¾E9ÄIŸ‚—§ÀÒ¸W£0\xˆ7wWË  F~ÅÎË{Ë&J:ŒX_ƒ°]mÒî @"Ïb˜ÀaMlÀ³rz”ãW¼ÂHªèy³G9m…ô1§X_™†Ú`˜2¸Ûñ‚8 Ç¼ò:`~ƒÆ²67φÞï)ÇûõŸÁ'¿9¾™`+ðûèõŒù63~Ú°M¢ÕwÛm°¸ÎBqÿ æ ¹ö*ßG&à«nõ…J_±j†‹<²¼z 'VhÏFðt€^`-woHÓN²ø}Uª‡ÖFÍ O.€T +À{ ]Ÿÿó>›_DQù/Áùbž,ÎÎ@˜Ì8±UvòËÉßžgdÛendstream +endobj +1050 0 obj<>/XObject<<>>>>>>endobj +1051 0 obj<>stream +x½WÁNãH½ó%_–‘ˆCB”0#Íf…Ä2ì­4—¶Ý&=ØÝ™n›$¿¯ªm†Ùã!‚Ý®îz¯Þ«ò¯ƒ ã3¡Å”Næ”×Çé1ÍótJ³Ó¾Oñë5•rc¶˜¦óáóåÁøëŒ&Z–ˆ5?]в Ä9>¦e~xãý‰~¸ÖS¨³4w¶¤ÒTšjµ£LSårÕè‚ŒýD–? ç‘X‡cÝäñRþ¾ùwW¶Á9R5ªÎÔ¸2Y|ò#Mfñ`£“IŠ¯Åá4=I§)-uhhú:þ1¦|üÃï­¥f¥)wu­lAÉÚØ:¿úóîòû?—ß*½«eÅí½,8»¸¾º¼YîÝn­ÙRæ¶)]•´s-ÎþÑЃnxgì7ÁaxGEOª2Àkgƒæà–Ÿð´¼¸_ÝRpe³Q ò®ÁÙ¼×ySí€HhTUé"í‚Nç1UT#[oLU‘Õ»q„'|CŠ’ÂZ#›u“ÐÆØÂmÈÅä‘z@ÁÙcwù D©uêASP;*Y9€Ë‡,]k‹„Ø7µ©”ßËëËÍÝKRXÁ|ùÉ+$æ9Àé%ë ›v \díB0ʪ;±”òiV®mˆwÒ¶ñF#4vbjƒöOÚ yyep÷ˆ2,½"B[뎬Áî+õÄE!À¿‰èu­ ‚º’·`QdaˆÜ€Ya•×*êÍj'SmV@L™Š32R/žJü,c[¯7`ûº”Õ…T÷ÈõºR[>Âàø¾­€ ªÀš‰,oœD14GÁ¥_-ŽŒïG´Ö~¥Ö²a;‡Úx •ç`:V¿êÒmfîþ®myc>lŽÊ×ôd” oÖåF5WÞƒWuzÿW¿þF¯'^OâªÞ~¯WxMd•F×ûºíJûE–Œ]@‘T‹¥\”.TO BqI…T7Ì&SùãØW’ÐÞ£ÒzaÀ÷c(ŇZdœ«‚Ö(8•àŽHžQÉ°õŽ¤Þ4ªX*ütµ7€Vô"MÉQ”_ BÛH/‰ÖÒ¢äC‚Á˜oé=ùˆ%*W¸˜h(W¤Å2–)]¬tþ8Ø{ÓÙ‹§7O¶A’d¬•¯[£ëµóʤÅ8JÙ]f©´A +HHölÜ¥ƒs'ƾÉðê^‘“€ óä¢÷ºD(ÀÿÚz…¦:+z£à~ÅP guR|öôgÿ%òœp7El|o Ö…áî'-mñ™âj÷~|ž©P@Nôk)gRbÞ~X¨Ýa¢Ó½¬åüp²Ì¸0 +ïÐX·ñ¯¯î–—7Ü$Ð@:±˜ÿ§‘Jþ³ð“‹ˆÀŠ™ˆ£1¾’½À­·ž¯ÃS{>$k$‚V(<Ñ:âú½8€8Ó\h­-áð¶¨Põ²—A'y–R¦sžÅ×EV}Ñô=^t:Uµn i’à_”¡úö5ظTh¼²G¥ki7’ „ÞÜ&Û®ÙN ´"¥³*¸Ž0C†=6sØ‹ñþƒt©°ƒglIŒ$HðÁîÉ@Y¬Dó êr- ­"oœ´½ ,„û3¦#zÔ¾ÎèTžŽù³Ó£œ"Þ‡/åi>Ù¶Îb‹ ,¶ÔÍÊä+ÉR&»È-›J¡aÄp@øº.`é8kÍ“S€rvå A$Æ@”«`Ü?ØRŽ;,`ê;S]IJköŸ8O”»p:‹ƒu?qÚ`£¤Ïtv}ÝòPöz™xÖm·Ûtïw¼Ûýæ± ÓNj*ú&€ç}¦±™ìOÍ£éœ÷»Š-YepÅ#¸MttesN€N¬ÑjU`ìšHQ´\2 ¨¶q5Ú:†bìÚxeCÅjF÷¬ý‰»é³rnÍT¡Ö¨ü-`‡&S¼à3[…iï¬+®ù|¥,¿ÈÍÂù¿p—ãEŽ÷GÁò‹£›oK˜—Ž’÷ÈHÐ|;½c c@•R¿V UÿxNߪ»¬ ‚dS™f'ŽÑéíy ‘öÑÍÞÝ%/,bn3¥ÞÃmÈU­´&\âËq!_o}.Ô¿žvoI“9:=¡ùÇi|‘¸;ûëüŒn½û íÓ—c˜…p<>ï¨`´˜âíסÙb–.æ§x—ÃÝÉŒº\ü}ð/”“Dendstream +endobj +1052 0 obj<>/XObject<<>>>>>>endobj +1053 0 obj<>stream +x…WÛNI}ç+jý‚³‚Á7l²o@È +iÃzÁZi%$Ô3Ó¶;ôt;Ý=8þû=Õ=¾d DQ$c{êrêœSåoG}êá_Ÿ&Ž©¨ŽzYÎÏ'ÙˆF¼à¿“4ŒzãlüÖƒ‹A6hp5;:û<¢~Ÿfs$_LhVôz4+º…5FAYã3zìÞÙ ÿ °”ÔÉ•)I™ Ý\Ò“5zÓ¡•p¢’x“J9W…’¦ØÐz)Q +´VZ“±„ÖvMÁ)Xûaöõ¨G§ý! +•]mí*Å3‰²tÒû G§ê»,É[k?dÍCƒ1ðÀC—H€„ˆ^UÖP!j/ÉÎ9<^„µ%éœuž”§¥xQf@¨yɯ„vR”rµ1ü7¬¬ Ô~¤>¸É;öMÙ0e4“ÀaÄeÊðtÀ2ìÞ×)"S™áë ,4ñ\¯èôŠ®nÿ|¸¹ÿ÷æžžž.¿\]>=u2úÏÖä—¶Ö%-=*c@¶˜˜Q­¶Sc^ºè†×ÖÔm|ŒJkŽcHC¨$2}7`¡ ˜§µ,F^•Â@\ÌÅ(–ªÈ¨Pð½.W[•NÚ•ÿmÀ˜ä+gÁ]èѧ\€”kfqªj…O¤ Q˜¯ˆ +h3~kgkìsÓíH4dt;oU 7‰ÃðƒêP'K¢€¹ éY#OùIò…S+†l†¾ƒ†1¾S‹eØÛ)Ä€®¸øÕ½¯¼O°ó†`ç?!X +˜B‚ô­óftyÈ{º]^ÿu{s7£ãß_Gk¼÷ òM¯ý!#»€ÓðO(}ã²ó°fí7PO¯12žÇŽ_-°wjŒ.ª¾¨ƒ­`ˆº*–Â(_ÁéØ@žhj,¬f&òûJ: +úÝÊ¢³¿;dW|`ñ2¸RÒaƒÖ`µ5¦¶a'œ«ŸÈàôu²§T4Dƒo‹7ÀŒBàl›ÍbuÙEW‰4o 7“TÉk¥‘7VmS=ÞÄqIôK ã=‹¯ÂØÞ±¦„íz“Yb±^T"|\QZš¸[·Ô®‚ÝrgmòuÝÌžö{9‡ºPwsœñ¹Ò&g´§æŽ>û|ѸŒ_Cü"ÀÂÇH<1hêìW\côÉõnaòLO·œNøéPv_8£É(›Œ/páÓ~\I7³£Žþ’Å&Fendstream +endobj +1054 0 obj<>/XObject<<>>>>>>endobj +1055 0 obj<>stream +xuWÛnÛ8}ÏW ,Öj9v\Û-ºz]ضÙÆ»‹y¡%Êb#‘*)Ùñße§IÀ±È¹œ9sfôóbJ—øÒrFW JÊ‹Ëø’«—ñœæ«%>Ïðg%eþÁÕlùøÁ»õÅäÓKšÎiÁÖb±ŠW´N –./iŒfñU¼Œi-]MËgë8>§é´=>ž-qxô­ÑTç’S–B§í©áÔˆ\¹I +%uM“É»ë?o?~û÷ã·ÉúóÍ©¹QLßMC.7M‘²=MI•5eUË”2cIP%œÛ›ú³|ÿ’ÆÓ«xÆa„›“>šî(™Ìÿ/’Ä4â'¨f»…]¥kãŸ7Z=ÐÆ<Ð^ÕyL×™?¹¸Â'~BBgÏœwÖ}Ü"õ ÐøzhQÊ×dªZ€Õz”:í‚ ÐQ¡´ŒIn_= â™ßÉd£¶NÚ´“º¬àò‡Éujdk`X«Ê˜¾˜Z¾¢ëš”£Ê8§63ä*™¨ìpŠ(ŒÞ¶ys…­åLH8¤(ÌÞ=)Ê}ÛYä}¤¿9™XY?ðWH_ PHÚÓø¸˜¡î[‰B!Æ|{âôuLþÝ?×(¼¹'Ñ–Ö‚W¥tNlüuv¤ªÉ‰ƒ£Hé(TJZÖàß=1 +ûk©ÏP3B "F$A?X+“º8“uSjœ†å†ˆ£³88›…Ê€r½¿H{²üê^Â^"P Ç4öð£ûÇF$; XDjöÞÆÑÝ™:ƒâyþöÖÉ\-Ë»g´ijJUÊ@•/²kªÊØÚ7 ò-ñÇ=v^¹ñ]?†0tÝ8‰á›ah–¢Gf’‹àGgjÛXáû¸)Pó>p*”B…zcý>OA¥z@#'ß7=tÈs†¡à„¤àyÛ–Qª;YD][‚‚rµÍC]:WR›f›“?Ü…Õ=»:FÖUÀ“°Š?"ßÐÅPsæFŸcLïs™ÜsÕ½´°ÈT–Ÿûüè¡sʹw õ¹HØC«/ÃBZ)êVo?¿Ã-@ô÷2ÔùÄá‹ÖáxöâX:߃(–Ÿq™mfdYA:å bæØêäÓq¤ÊwiÕœ5ûˆd`Ȫ [Ç;¹,*z,¾n-v¢6bNòW**íjÛ$L'w2P¤×7Qp÷xÐë8ߧшfs;9˜Ò,÷7 i–õ”#ʵ´TiG¥pNZ/…ë#`ª5~‹*'g6$BU ½›}ÛœObÄ!íŽ'É>BöfKIvc,)•WèmtMº¢ûÞ‡!>£Ã“ûw >!LÃìNQòÉ{÷ãÉ4žÑdÍ׶§\Ð7­*‰”p\®KäD¶Î2ií¼.Š ¥µ#1ç2êÕˆ\U "§IP%×øöQ«žû·¢Le:—tA éøKÎm•ö1r*\,dŸ^µjüS‘}º.¤°2`G iƒ“*[Ža1ñâóZlj¼T•²Î§Í+tCVÄ)WŽ‹A-ÀUÇVpžÏP–t–ÕƆ§ZÝ^œ’E< ‡Dú ›§EVF= -'wW7Ÿ>Þ\}¹Np¸©éBœ²¥¨2OˆÎQŒ|åªýNÜr#KýˆâÑ¥¹*¤gQø¾9Õ–iÞ=CÔ=u*ÜKÊŒDZ644’8øÊxN Þ®Åjؤ"{ðG̵qËN:©tk ›Ö['ÃdÚ§ÙåÇÀn$ù÷Ùñ)¥FTÙ2°á¾ÇŠ02Óe)«\æà-y ·µØ £2mð„'0Õi16´ÌH¾DµP•(þ7p¶0‹ÌÎ -%+Gs£Ë†˜-¢Ä›X F²,þ ÎRdKhŒ¬-D’eºæà8Ù-‘%*]Õ,©Ð6ól è3èÈâ.FB -åýoß1«/¼8€'%m¥HQ{AzMMê¿Ï½ÓNüåB^%tÛ{ Ž¯®ytÅÕêi&j 1¥`8q}úÁ#³ÌGORN xê/@“.æ[×Öë:Ïà|üì­‰<'gÈfF­\W5¥tK KÔQ0Ô4Ôcœ}{׺.Xü9ÄåX™ÂÜ)BO×Ú<@ØÐÎàV—[CÞžb6ÁîÁ -~E¶P;.@¨ -‚~”ÐŒz®Ù+ÛCiž©—¢ª½øcæ6T¥‡7eSÈÁW/¶bÓMú³x€7„¼Q$Û‘ÀUð1l,Q¨ü/t‰&µÖ®ó`cˆÒ)ÌP ÕÖŽáak¸šŒÁ(s&¸;‹ m¨f$@ë8ª*”ÛôÈC÷Äç⸦æˆJ”ÒÛ ¾khw)ÝÉÅÕ-ùk´†²Aη¯ßœÓÛ³4¸‡¿'AÎ-‡i,á+?þšØgÈáÙAR¶õQ`•jDH— "d~u@2?‚˜Ð­F¢+©1;:Pú>¹‚?F$­xhÂØ -mV˜Ò¥° ggB  ø­«_ÎÐêࡹsX”°WGT6:Øabcˆó´ieáÇ—£s¥áìßxpô¼8Ëx r6>ÞNBþ§a£ñ†/èr¶?¸òê²*ÒUÎá÷±µF‘jì<å¦S]ÊT2¹reÙŽ‚Àç?,^˼´{í&“°áAé¿´@A×ÇŸ1„ -8 <±^°tBEㄧ-ON<ì¯Àbçê ÷á¾:ÂÕ+Àl:Ø 6]ò`bçÛê -EÅÉCv‰¦`ß©8y˜JY¦ì‘ž–Ã31¢où)‡eD…^‘ÎaÒžoUXÌx5IÐœ#"¦rž‚Ñ%ÿ•dGøëkÄö¾7žÜ¿ãâèËå§Ë«»K:»¹¹ºñù‚LŽ:ç¼aÓ.ÇÃÊIÉh¹Êò„‹à§â¡0[V1Çœ·—©(º]l(á”pËvëôÿ+mJï±9Vªîöæ÷MöÌà³,ñxr v{ã¼à6gÓž¤Ð v -6¾6SB›‡}VÐ\-šÒk¦]¯9¥“5?äŒ.h^¦U¸Ü¬®-¯ŠÆS&ùÀòRßÖP`¶Kð!¿°F¿/2?±jÐú{­xqŽ&ÀJšR¹Äúðùkaöø«ÇûZÀ³V;~à=u- Ï.ÐÉ©Ô[<ßàSö‹é7{›ÜvCùÐ^ŽÅE!ö«ËJ‡=x1ì:Oª¤×8½ß³Ù¯¡]'Lpž¡ˆø«ŒN]©§Ÿ#"Íðt%¥_ü[ÍcÂôYâÏìçt½€K a`­fûÿáí ã¦6Ž{÷¦ÑÞ(áE÷0´óöøóÉ1]ý7óSÕØ烙2EvG“)nߎýûçhœì'{ ýƒ´ÊÂAÁ,Å`Ñüèþt¿ymòx[ÿwç? Cêóendstream -endobj -1004 0 obj -1802 -endobj -1005 0 obj<>>>/Annots 236 0 R>>endobj -1006 0 obj<>stream -xXMsÛ6½ûWìMJÇ¢õ-+—Œ“8§ušÆJ3í𑄘T‚´¬ß·IALÚi›Œ5¢ì.Þ¾}»ôŸ#âÿˆcšÌ)É/^¯.nWÃhHóëe4¥éõßÇø)$mxùêÝ’FSZmpp>›EsZ¥„Ã!­’þhÍ#z8ÚRæôÑd*QÒ’Ð)},ÌFeÒ¾X}…)FÞÆ`¼€…þ}•ìÈl¨ÜIRzcŠ\”ÊhÒ2‘ÖŠâH¥!•ï3™K]~×Ã'ó¤ô–>[Y´Þ`‹=ˆ|-Øñ£I4f‡©É•u.­È% þ.J‚w:ùb›ˆÊJr›nf½Ù/J§æ`éʦ@È[Œˆ~7Ù©²”}z<30¢|úñb9FóáŸ9fóhQ?eôÀ(Û!o ±-¤H]°‡‚ ½Ø㢵‡Ð .'gÃçœÆHÒ$p>cuºŒ–ájðŒÕ9‡ìçPÃçœ&Ãy4 -VÃg¬Ž'Ñ,\ ž±:YœEÅ 0X'ØŠ-Õ°u‘¹kxÁ¹jˆæY×P©>O—£CëÀyƒ>‰'¡2±Î@÷Âät¯’ÂX³)#>0p Æs”8ô^¢*~¬aú¤©bΊŒRYŠ}Ég®ÞÍk²£ÄÚ£_˜hbmª2ŒËUÌ‘naȯüé¤>=XDר9¸Çó…Kü©Žx­µ½2”€,àˆ,a«Þ ú¹¢ëë21z£¶ÑÞdÞIS}:‚¼yeKªÀxG7ÐûAO\UŒfÞemuÖX…1vÉgÙ5 -Æ¢¼Ql¼¡ÒIV¥2¥ƒ*w\Gµ£5`ñ6ìúÚ”¼á‹)mé´¡ã…·ÚqBPÒâY`üÞ$¸péÖ¢ûBáí§º˜ŠJÓNì÷*;’Ô DÇ%§…ov`ìšZâ¾Ж¬­.)1ynt$Ò¼»«öÎɃҺüÎÞˆîPOR+î'Ü]ö•ãÃ$@í`è6Bþ²’Ž›äe;WqŒÎÕËSt;8r:ØÖJsGs eÆ<ºŽsª4Z$Úñ½#ˆÅ`½8(+#ú`PÚ"³Æ "îƒRUȪqdj÷v*M¥îE.VXik…,5DD¶êürÙ‚ð\8lõ¼*9±Ì6•Hú(’GšPÜçŽNL‰"~á¢?e‚¸Ñ#º}. ‘p¨Už .§ÊjÄz7{xÑܯž;h^BC" ÀWîÙ:íñåÔîç;ž¿sÖ…Y{@óÄEæÂk; Uà •odŽAû;cXøŽÂZ“(ÀƒÇºvê{Ç}G& æ'’$éáÁnŒ ™eˆËQ´ƒ¥ËÎÞX«¸?²?tf+(»­o]Ö>yžùe³A— W'[T¸@-íÍÈuve×ê‚Þ@\@>˜¯=Sf?ž1¯YºÙû²0t“æJ³ÄøõŸ OAGE MÈN5:÷;5Û:µú ~ÅÙ ¢©i'ÌÿÝ*ï¼Êºø·…©ö †;¤2Ã;v÷ìB5Øãwú­èÈÖÏ\Å3Æ·_Ó›·¨#OßFÊHã¸4&³q\Hû¨Ê8Ö˜º8®éå¶}™QÇÄÉõëm>Ä$sb¶îJ{j*f€åäñTvMX}ø¾Õ¯WÛ‚%Göµå±™ÙSagþP©òzÈ·íwS#°‡7ú¾“äóðq¯Ï<î—•F¹ Q”;pŠûz5ŽêH†MÜvŽu2r‘ì~í´ÍÍú;t\9Vs‚𯫄w›:Í&öÓC7åÊ ¹GX–lµÝJ‹/¨š’ÑãWûÔU7¤Çò—îQ×î~ fŠ¶Œ›ubB¦ÜKÃò9ây¥"CÉ°þn ±^£š}O½’eråìùðO£dPhÈ\ -wõÜÛϽÐb+‹žËYÏ -ÔüÒë¿O•h n>>>/Annots 245 0 R>>endobj -1009 0 obj<>stream -x•XÛnÛH}÷WÔ›@¢DI–ìyYäbÏ°“ÝH™Ì~i‘M©c’Ía7­³ûï{ªHŠí]Ì ˆlñR×S§Nû‹¦øÒjFó%EÙÅ»ÍÅÍæbLq?BþøòóÅ,¼ ®iyµ ¦”Ñby…Ÿõ·”ÖüÖävAaH›„ -¯V´‰Å”6Ñð}j¢GÚëR“·ÛCžZ“ßkRe´7O:¦Ä¤šÞl¾÷—;&¾øi2Ág™¨´Î&>ˆl6Yã—Ôl'÷ë»Ûw7ëɧ›ß¾®ƒ›ßnÎ I*04¥ñl,ÛpßßLŽX}ÚÐù<éÒ›“M$²ÁW§KºW¹ÚágbK¢6S&wRyLƒµ.ñJû."=õ¤Lª¶©æPÉp¹æ´\°WÔm¾ PùÖÔ«µXIL]½’ÒftߦJOF’'’ëç©IƒþVÖ_~Ý|þ|w,ÓY¿•âþJ´‹«~Ÿá?ÒKêV_Sˆ"&¨çr: ®Îz΂U@ßöÊ“EƒK´=-(R9}¤öÿàð;°pG+Ü.þg*&g«2ÒŽ{arÔ>Sž[s,/®J“øñShLjò¥Æy7¢/·ïNÚÛ¨ÊtîÅ@@GRA‡ó`Æ®ñ„ƒ1 Li¢ƒñ{1îT¶UÃbi¶•YX‚o4þ™vÖƤ)0Âw%\$™ëR¡½÷ï€öÂÀ¸«¢=)×ó»->ÄÔ%YvósD©”‘‹â8²Ø¨]ng“ÞÚÔ¡¤\ØÊÕs¥·ÕN§”ÚjFEiQʺ)sÝðï…„†eM‡¢&œñ - nKõ0[®dH»òíñü¸F)?纟­vþ$â&`£˜ãÜq³F%sd­¥ØÆ;&hÓï¶êrìŽc²¹1Ühä²m, ÏùÐŒ+td’g:pgi ^)ÕO:Ũz\6h -ž+«þÖ5„  -L’ f©QZ)>[ξWþ¶«HÓ¹*«¨|Ï!'¶WO:xrè‰Â†^°<ö¶Ä%æ21 Ìu°­íˆwÇVûƒFˆÅiG€6P–t¤XE¾b‹ìø”üsÁ1Áb(ÁõܤÖL® Ñ­ÜZÞ&¯ô‹©\3­ƒ¾y"ëyÃô‚bÌrØÃÅxÔì°_òÝO2lP Çýàq³P¥Êèß$üÑNnÜ Ef—ÓÞ¤âÖ‘ÒPª(`ïh2ù3×~k¬£\!osYœ:gŸi²¨ˆ«¬àIèdÀÿSD´÷¢‡Càùå"°ån"(: -ÜVð A7P•ró…-ùQä4¿d¹; ¯j·d¹VëDÜ,¼î‰8Q…ŠM—›$iTä×Üüq€üœÏˆöØèP, ÌB+ŽYó68ö¨öNR‘󈦬ˆÏŸ>ÉMnt¸¹¿ùREõdáSÖ ¨ÎNèÆDH÷67ï2=ª€”Ì昫³¦¼ÊHœýÀ;Q;ÿ0@„_:¯XÉ¢¯Á(CHï?´$„¬ñuÐlÓ&·v?ŸÈø&>]º½)x%aªø}Ù,®Þ €W¢n–;’ QäM²+P CÞ&Ð"ØN`SIÍ¥RàB]&*bIÀk%3.ªlå0¦±æýÌÌÚÁ»fgì›—I3KöR´9XN€9é‡Ï“ÚºGsyY@€•X>S³0SAšÂ/¦&ˆPGX$G@6♞GWmaQ¿]X‘JMÛ‰©5ŒÆ™ŽmJƒ¥Rc‡QïñÐ36=¹måîÉ™ì¬úØBÔ¶-|:ÇÝ€—æñëö2Ƕ>žæ®pr¯©Ø† -_—°íÁðc 7.h“ÁÑ'7¶ÑX5T¨-¸è¨ -,!J¯‹Vã%–µ Ûár±¢hÒÂ¥^u‘&úH¿â: æ‹ëQ£Nù<âšI7?/Gï‰xñLßφΠ-‡÷ ¶g¬Î** ÿL†“l}ð­¥ãé`Ä0á1Fø°ô»­zeÅçÍ‘þ:Ãp?Üó9¼éÀéÀŸvûü‘N8£È_Blž€¸6®ßÞ¿{ Ýe¿c p~?9 r¤ãdŽE¸š 6þÊÙu±ZàÄ#¯DªcAüëâ¿Ycendstream -endobj -1010 0 obj -2019 -endobj -1011 0 obj<>>>/Annots 262 0 R>>endobj -1012 0 obj<>stream -xÕXMoãF½ûWT•À¢DÊÖG.mÅcÇ3³#ƒº´È–Șd3ÝM˾ìoßWݤ¾lg¼ƒ=$0`ˆb³º«ê½zúó$¤>þBE4R\œ\ÍOz7ç†4_ñWÃñˆæ õƒ~¿Oó¸s[f6yþDOª¦M–çTJ™U”•Æâ~v£ô=Ý),VšæJå†D™ÐåZ–ö”H•dSIæ4“úAꀰˆ…o3C?Ìÿ8ÁÖÝhœcóÎ;…è3+´¥.°6+ׯUiµÊé“(eŽkj7æUú!‹%¯ºL±w7iu‘’I:‹è¢ßÜkSÆ­n8"¾=“¹Œ­;é×sâô(γøž³;ýø¯Óà·½vA8¶NMAþÖ𷥑¨$×ÿKV&jcv} ó ¿íãõ”h“Ê’*­ŠÊÊäÙ±]ìxÉÛ¡±•ÊJ¿3:U L«,GLªêÁ²©ð–!ñG€&“r[œ0D¬Æ¡Ãk]Ü+&¯EÐL¢~€æ,VÖÒÔš=­ÉŠ:˜WÓkZJÔ8Cq…;*À1Š`•àaQ„Ñy6W ž÷ˆˆ.BgiwˆhÚ¼ÙlsŸUÕSÒ÷Òú±gŠeG³*Hm‘¿ -ß}sûÆÔ/s çµN ©# Ùæ…‚ HE‚ªJÄOOAŸ¦×g4E ºe‰¢;ëO÷RVnJøXƧAy°\P±¡äú ¸ZWqÿÝ¢Â|ÃfökœXf -ÖìAè $™Ô¨=W^)­á=×nÆcƤ<éžäÛpƒl¢0 -&!§1²ô'袿z‰÷QbÝ~fw™‰ýäáx}{3;˜Ž‡gvÃæÅЋ³•é®n'Á!ø_o¸ÀkDád 9ƒÁd{õRádŒuû@Ò§ªpŽ—Ýíoeöøµ6aužMA¼ ƒX½ÿä÷qÞ+m‚Ïß”DÔcü†ãsGºÁd‚¦ø«“_‘ífþÉ]NAåì˜gwWd*7’ðœµZ¹AŒÿA‘ÅZµBJH¡Hº—èu{ú IíFìÁ Ó¯HÊ[ZÃË°í4Ÿ«ÊHf™3?s÷:ÿ¢ŒEã ÈBßú!ƒØ_=«Ìy8ˆŽZïÏ\Ae],Qµ­„iÉS2¡ƒSôoòê5|¼QÙÎvoÓN5XÖ¤qãwÿ¥®=÷/wOùÚ\´6««JégòÅŽñ/ŸkÄúÅLý[-ô2Äó"š@&, ÛÅuMÁQæÉà€^7äŸ5Òs†ÕíÅMF½šÎ?¼Ãû‹¢¶~Á {†®-×ì^e‡nyÌ(j¦¥ÛœÇÜ:nî^›ÙÑ%ª<µx‡6ìŽ)–ª¶þ€]> N‹Jƒ¡$8e)Šæø¬A·U^¨?‡vAa^ø z-9ˆ*IâXîAªr) ¾[º±ï6Ù™¾u%¼°„v´¾w¿0ÌC‡ÒÙåÝÕ%}Òêþ]gÚg-ùlÝp8Âòî(rã3{ÅþÃ[GGÄžÄñÒqïÂß8ÇQÄ1ÐüŸü;ŒBendstream -endobj -1013 0 obj -1871 -endobj -1014 0 obj<>>>/Annots 267 0 R>>endobj -1015 0 obj<>stream -x¥X]sÛº}÷¯Ø>YéH´$ȹ/wœÏúÁŽo¬ÛL§îHBbÐA+ê¯ïÙiɬÛÉÌLñÀâìÙ³üãhFSü™ÑbN§TÔGï–G'ŸÎh6£åŠï^\.hYÒ4›N§´,FWv«v ]ë:×âZEü£©ÔOÚú © éÉÛÖEË1?ÞÉMr>ÒF™’”+Óm‡aáÍòûÑ”&³ÓlŽÅFU«‚âÁ=m‚/ÛB“ÂÀMÑZh¥Ul± -Ö~ù šZgtåvĿȧS<ǹn"U­nšc^nr°ƒÈÖÆUTû€ ø“OEÃhÌ/²3Žía~>í÷(áéäômvÁ;xjí¢ñŽ¶Œ6Øð…_Q£ê\ÑηGÛðŠ¼º¼GŒžŠ|¯Ù5Q×d"níD­+uÈ蘩YûÖ–ŒS®r»Ãž±QÎ’dõ€¤FNÃ!`ñ@Mg…w+Z«Ç £Õ* ‚ã7i(Gÿ¬,±ÿÂô¢V+ÌKwÞSÓn6>Ä?ܵ#U–FPCÖ9þ·1‰š|òYÒ½ ødÑû¿ßS¶°PE 4µ-ö4ÜO±ÖÅ#&1‘|ûjÄ= ÿGª{&,HÜÕêQ'Tÿ»dÐ ò0F¯Æd=2 ð­wÕ˜Ðs}D„Ñi¨ÒEd5î’ëX™ê…k«ðõ†ßC²ƒV%ý…èƒwÇ(-®cmI»Â—˜¾ßU…xu(Ê–3Wx 2 ó¨.ÎPcþ­…<áÛ?“Û”?0™¼ÓŒC\ûF“3«¸£ãëã÷ií­)¡-Çx -Â7)ÏÅ¢ ;ãvÃ¥ÚD΄6žAZ¼HrÍU+!¨¤2š×öñ“O Á7@Ñ7™FˆÕk2W¤&•!ô‹s‚x„ 4Mj}­6í &ƒÜ”œ½Ánúq9„)éÆÄÅÒ×i®€IÔÅÚ™BÙŒèFAó6Úƒ¤PíOÀÙI4Hƒ -Í›"˜œ5u°KáUƒÓ#3±™Ê9¿K€rì\bÐ0ÝóŠâÖ#S°â^ú²ŠÚñ‡ÛøZóì[c-øÇzÞqS6Ä)ä¡,·¢gˆ4×1"}¥V|Ü=)–jÆ2Õ`+¨“­ -©¸x˜>¯eü|ž]þ9¿1gu­MµŽÐ¾Â¶¥î„ÿ¢ë #éHÊrû¦9B•W"¬ p0Øb’ØGÞ‚„Ü'€B5T· þŸOÝË0zé+|h4RÂøskAÂx‘ÌÓη՚VqÒù BÔ? o\hH­sÔIÁkpüd<ŒîÀ}ƒ.óð†®SU¯VUÏšDNÇš™šöÈVœå0Ðݸ‘qTr½1&£üN>¼²Ù£$XÝæÿš½¿ºp³­¶à~‚ÿ°Yÿäv:´…{X&èUk¡©ÜªU!ž©óEËm†ãE™hV¤ë=zªA#†5ðco¼Ï¾ë¨É\i@¤nǹ/w}‚ºÌd´Äðd^jU€ +Óº­ ›­8/à˜ê}çªÙC7CWËà‘Ç⃷ҿWúmCoœÜ|äEN>õ´k's>ãn}Ô¿ ªo´ÄþVÞZ¿e}ëÒa°F×½º>ラŒSnôËÍÕõmуø€³‰~2¾mìn€R×Wqâæ.ôb/Ã-±o5¸ f…¹ÊÑKæ¿x(©ÞAõ]ð½*î7ºÀP^ôЋ|LçŒ1ý.0Y6ò\cÊwôžŽÝÄ=þÝh†‰ÀÕ¯ s5—ž‚o UðíFwúlº ¥ÍYü W‡ZNh•<†ò€Üà!¶Îp—«“ÛñF p+áé`æÚˆø×b¸‚‡G€S*ÜfѪi< àrˆ¹•qÈc¡ÒÉVV|Q…PSúLº²—s }€05i ¿FsãNÊ©äð.&¼mø{Np*¯§.{4vP1›Ä$%Dv‚Ñÿýuàat»ìž$í;Ø™8²«;rà¸áJÏ_úCoRµåígœ¶8ètX?÷¤äþæË*· D´`cHnÉÖ˜–ÁP.¦È/ãºI§xáÎXœaã`mQøÑí€E´j÷•58^¡ŽRˆXГi `e„EVÞ{°‹Ä$¥z÷õË·ûëÛÏ\Ö]ã«Búð€ŒÃ‘ë’¿óÓžÌÂ]áACÀ E3Éí`Ãý¾}òé²kY³‹E6Ã'¨siª£û«›wWtüw>½~è<™ÀÀã&éõÉBTqôóbx¶8ë Èâ”gB#ûíè?Žtônendstream -endobj -1016 0 obj -2245 -endobj -1017 0 obj<>>>>>endobj -1018 0 obj<>stream -xW]oÛ¸}ϯ˜‡nˆÕØqídw±@Ò6…M›[»·}È -Q1ITI*©ÿý=3¤lGÍbqoƒ¶±)qfÎœ3ßÆtŠŸ1Í't6£¼>ºZ½ºžÒxL«'³ó9­ -:ÍNOOi•/¼ï´'§+tAÁRØhò¦¹¯ô¨²÷¶¡F‡'먶…®H9M…ñyç=ž7 ž7ž¼Îƒ±MF´TõZ‘ïÚֺੰµ2ͯ«oG§4ŸeX?–{ýÉîæhÇçδ_«¦ ÎkG­³¥©à^iÝ,é‹i -û?²K÷Îv­—çN/¾¾ºy7°˜WF7pçicò =™ª¢µ–PK‹PÈ–ÏãH¯OfÙ”þ²Ñ ÌÐòæŠâU¹JÑá>¿—/Fb­UE®|´ß0ls*=èµ\+ ]‡çl‡ìÀo§ÛjK÷¯s^¾Ùu„çQU¦@Æ<µÊ{àÁ¨!q'¸žjoTc|-/Ç̨¢6ø*8àÏFùEÓø ªJ-!µ­õÞ¬+MwÇë.îÝ’]kŠ»_9äÜi˜;c£AöVr/ÕZyÍW56߀AÐOZ‰aL¦3¾c+|ÓeÉüzÔÀb—wpŽ1Dú üŒ„ŽWj¯«G£|Ÿ›V†å c¼†^èÚ"z ƒ×7ö‰T‡û\ Dð½3ˆµ0pÈá„JgkbXòÊÂîF-ÌàDØ$~øl@§Ï½¯€¥zƒÁ­í(Çjõ ùƒKLó ¹)· ‡q‰?Fä4"ñ{|µ§ºëÀÐAr×*€þ¬)”„#g“ò{±³¡µ¦“åÖi‰:×HP¡ýC°­h„qdkºa W¤×T©®É71ÉNn›ÒÜwÀZeØ;)!œ|ág:l X8[Yû€×UˆiÙ‚‹zÂij«l×àA„ì7>GIõš^¡IË;±z<9¸¸=а* -¤(• ”Çn œ’Ÿ¦`åƒI½L‚Ï m0æ'–yæM2‚w®—Ô¨ZÓÛ7—‹Œó? "5ÄwÊy¥¶»j‘|Î7Œ‹e!xØ‚¿zÐt:×P õ€~@YŽo÷FÄ )„ 8WþÈ+vRŽµ„ªðÒþ,ß}úÏ»O±ÕºLï8~…oFgÙŒ«è∮a/èZ -g@ÍJöNØ:°nŒÂ²’¥ð"X¯Qw¾nf'#4¼cûâöÍ/±âà®Xãe¶qÑÞí¾5Mön÷‘ ÝŽ>qn¾<€úŸÒ³Ä÷(;œAŽ( º±ÏÄÊø/Q¤+vÁŸ;ûgÇžã©÷Œ”š¥ª•Ë¹Wq3’Î-_›2‘¹´ ex¹­‡x¢ÔÐ'Ï 1¶ø¬þ¡óŽÇ‡µT©$+ÙË2  ±!tâ.Ï}"•;o‡xp¿ØÃÑ'eº‡ãïè¡,$Šsô^‡ESÚ¾÷Œ‡{|ƒjI÷BŽ6ÒS^þ ˆC&'/à -´ýä’ÑÒ4yl‡¸? -´7ý7Ž ¿¸U#VéÀ`Ý¡„×\VRw7{ãâ f¦‹¯»Vróy¹b?L±Ó3_@æÀPaP70$l÷è÷P¿Þ£ÿz’ÿ³¸w”ßÃùSŠ'ÅÑ%8„‰je»p2p²ïš¾Õyj’ý‡¦çßñ—‘‹{Ê1oóž2¾8“¦±ßTÆ Z†®òæÙä°8˜~c©ó|H¶Œw‡»Ïh»´!^Jvcô™ÆQäöí‰G ©öý@Î.\ßU`hÇ‹Û~&×Mî¶m?@²®y@€¶ -Ñç v"#d¯®ó´»æv¶âøn2›K¿ÝÇg»õª_“§#ÞÄdþæqžG™ZñD†Êä:,*ÏQùƒÿŸŒŽ&çØç*Lˆ(LXQÒÈ`ʲ¥*oa†¸"ï|Ž¬Œ¯®_§ˆÇ³Ó ã¬È†³s&le•ÕدP¼0¾=3Éw¤v`,¸ñŸOï…t³˜97¾€Û ÝòùrŒùBjÙžs$žci+ êO¨È5ËY&™ÓÁ"ì]Üã°8T¹–<7 ą錸Å%W`×Ï0³H/4†qMÃ=‹uPÖ ¯å<-`LÇ©ƒÉ^}`{= ˆìÜí[Ù·Y$ÁY¬qŽÇ¶gÈ¡ŒÊ ­´–(«s:’\%…²DŸð'Á³NˆÊ‡ªô|—¿9ò7Ÿ0i÷˜./o®.éÖÙoè.ôë7C*{€”§ñŒßÅ׎ÿ?ÕOçÓ^,ó)ߊ ÿ}ô_¥(~½endstream -endobj -1019 0 obj -1911 -endobj -1020 0 obj<>>>>>endobj -1021 0 obj<>stream -x­WÛnÛF}÷WL]•Y–dY—EaÇvb VRKiZDE°"—âÆ$Wá.­èï{f—¤$Ú}k 8’¸;—3gæ ¿õ¨‹ÿ{4êÓÅ‚ôèz~t;?êvÆcÚýÉWø‚cÝ!þÆ#þÜÇŸ\RÄ7ðfê?8~~‡#=šGÔ§áø’æ¡{Þ¥yÐú4»}<;:¿”gZ¢y,IgÉ–Œ Š\Ù-¥:”D›X1þQIB™¶´Ñù……$«ÉÊ ÎT D"ŒÎ )CÞtå¾5{õxÛpçMWŽ:‡7ºtÖ»èôrëæÃÃÕý´yYdá '·¾HêÐ ‡†(dø­0–=‹\ «t†¼iöpM…‘9%òY&5.6DÔvÑU` ¶Ñ&à2HàƒHŒ¦ ÑF¾U2tðÒP.…ed¤´1Î3‘.¥ËhòY -•Q*Œ•9g½Å2×/Âme+Ã*×Åší"ƒµÌ‘K¶"`èæ-*ú9V ‚³0ˆ˜ªR!>¸[kcÔQÅ@g‘Z “h8…Ãgø„IS€‹–ˆ’MÚärQŽ2òD¯˜¦ìFS¨ B -,\†*Šd.3KQ_ºYœ¶98€Ç´´Ò:løW¡¡ÑHço]‰u‘„¨c*Ó%"±±°º›·É\®àÔ=‘äéósoISi¯ï?̈2‘JGvW<¾Ê.Ïö€æÌ„–[ú¬²¸£² -±Ž%Ñ”ëÅ(7O„Ú¥ãS_ÊÄ€Ûn$jä¯èÛHÓ=x¸îЊëxåÛ©Â5Ø¢M£Z|Í“Ù£F•™ÒzEÙ©ÞÐRO#=guT×Ýqg 9"}Äõ¿†U‡sFÇUÃÒ¯®UŽä}„ƒ.ˆFN±¯rM.×lx£Ür%Ã7r÷u²;æLTÈ@»¦„•L:ÚŠÿ½ÆnA ê)Ôdn$&Øa4êé¦"ˆUæš‘±ÊPfà5=^ cðCXu¼8¥§Œ«Ÿjî¥.¬v}5ÿ+ñM&'ˆÙ®U©,Ç…£‚FTmƒìl®“Dæ@”Ëu€„om4rVçÂ4à®Jã@¡cÎËM‡cZ‹Œæ–¨F‘€Û!`²—qVLžÎ+?‹–þ"Ã-Q,LÃï+9´)W«Øþ¶8å³ÜZç ’Ä“5+ö©·Ô?ªáå¦\mÚ•CÇ® e¤2å&7"?2yðÁ<±AxhD t »‹œ MÛÝ8ÉFl÷¨ê ©; P•óù„­æ¯ŸxNœ^ðã;–d zÐ1þÔ¿vÆ`.ÍŽ¼|¿úhw'-UÞKpÍ=»èw†å“}ù?¿›Pòa•¸˜Œái_î±)Œ;ý½-Ǽ—¼ûÌؼð“ø ͤuâ9yÔ"e?±Ú|ÌuqU?¿»¬VŠ~jxÖŸ°"~y†óŒ¸‹ÌEfo\ÞXSÎº¸9EÝ­%ÓóÛŸØÌÞ^RG³.­×:w£e§)®*àïä/ž®<“§ó½ÒÀÂ# uDÀ«;:@ëÚó;( ‘"FC‚õ £¼D¨Š©Ó˜TQ‘ðY#¥»Ö©’‘;UºN hÐF´$d$……›æîá­URd$2¬l\©wÒÞg‘®†cÕßåxEH+nzt<Ó_ U±{9ƒwè½Þ`õÉÝiDˆ`ÖPlÞP¤—ëXÞcÃÖÿ%lƒÑ¼w&G—ì:öÇÑ¿ß8ðëendstream -endobj -1022 0 obj -1797 -endobj -1023 0 obj<>>>>>endobj -1024 0 obj<>stream -x¥WïO9ýÎ_1é•Â’„R?@9¤ê -åŽTí©©*gãM\víÔö6Ô?þÞØ»ÉfÛJÕY{~¼yófòù O=|÷é|@§#J‹ƒëÉÁ“ƒ^2Óî—]àŸöɘ†ãs¼ðK+)ÃÙõÉ°z‚—½ø¶ð¶¿`èäöŒú}šdìp4>§É<èÑ$=º7^^ҳɧƒ“Ûauìè}þ”æ4‰rq1¢cZKZŠ/’æʥ拴rN‚VÖÌrYÐz‰7è­Òs³v”æJj¿BS!”öø!Áö{tÜ?Mð~”­eê•Ñä ù¥¤÷KSH÷ÜRÀ®Ì¤_K©)7 ¥]B4ùîTQ:O÷¯'lÀÊÌXÉnŽ~f’J‡`9Ž7S¹¤•ðËä °÷h4¼ØÜ@òäö¢gú{°òq2À÷6ñ‹wôÂèL-J+8³}HÔ`„‚!ù‰!W®VÆz¾‹kd]Ú˜’BR: ÒAöÀˆ±é n+ -é¥MèQ3’8Òf ¨€S¦¾"QÇh -O-} sØ<‰†øÎÚØ'G0°–yÞ%¡’ &¡†Ž¸8Àü'1TÖ뤮7@ZéE¸²‹ztÌŽ‹k¥óV¥á¢ø«Ò{¾¡¨‹ä¸dìQÛCû,Hcì&i¥v]zZ åc’0}±§ià" %ô2 o8éƒñÌä¹Y³÷ÊÛûEnf" +všpÁ¹b–€µpÎåe¬mÀ‰ ­|<8‹¥m$þœ¦øúý~ÞL§IE>oÖvÌwG±'­æèì>+h­òœæ¥WY™çÆ‹cW¶¦M$·+g[x¨ŽšË½C 0乜·°ÛFFÓ#¿,šö©ªcAK5ŸK=}V^W¢z &[—fˆéŒãjŽƨE>2ÓpD¦O94A™¾Œm“Ee×­•3c|vùcìûõ²Ýoáÿž9ú–ç80 aÁsäN¥Ö8“a Ï}ã|›+8rh°!bB‡¯Ì"ì—†rzc˜°‡Èx±ê‚$Ž×ƒ°ÉršVÂn·Ð±(çá.ˆ¾ß‡Äfw@F ¯Ðÿ¿ˆd½ö`Ûgw'·ãêsA8Hú4ÇÉôxuw}Å4øļ¸1iY@8¶ŸŽû8ˆ*œðÉk~Tiúþ@§—Ûq>¹Kp(NârEWÙ£‡3<Â}0y>â7°xüuð/ý‡endstream -endobj -1025 0 obj -1681 -endobj -1026 0 obj<>>>>>endobj -1027 0 obj<>stream -x•W]sÛ6|÷¯¸Ñ‹œI±ÇŽóÒqœ¤õÔqÓFi¦Sv: JˆHB@Ëú÷Ý;”Âôc:öƒe¸»Ý½½ã—£S:ÁÏ)]žÑ³ Êë£Wó£§oÏéô”æ%¾¹xqIó‚Nf'''4Ï?6…vôÉ4…Ýzºz>¡÷Ζ¦Òž”Ó„ÿ6•U….¨t¶¦°ÒxÀÔÊíèÎ.m3£Û’v¶¥•zÐß~MÊ?™>:¡éé³Ù"o*£›@¥utotUѽ[ëÖ~<á ¹eÓgÑTq$ò¹3›@[ƒ#‹oSCý´{Ðn6ý_™Ò8á ¥ým:)ú”Ê檢Zå+Óhš"+Z˜@j©LãƒÔ—Û&רƖ䬪M³¤Tò„L„Tù5Õ:Uqv1;gØ’Ec·T‚8ܧâ¥ïLeè!e’LC ûHˆ8>ýÞzí&´QÞöb’k|ñqrZœÓçÖ‡A ƒc̈æ»Æ))È«z¡7ø±ïî¤FÕš²cp­šYÐëÒWk䣖ô£ñaB‹6€Våpá 2Ð9(’³ïE ZVL0¹ -è`Óg p6!ûœ âl0¢0Ý)Oª"ßn6ÖO&dO&$‰Hƒ?¡î„굟@·à$§VÊ£VHÝ·y®½/ÛªÚуªLÁ…H4e¯+áÝ4èZšNÏÑ”éÚAþ Ü=K€ƒZhœÔcp¬üÚËضƯ˜ Ÿú8ät©Fúþ;¢ºÒy ñNûñ?–˜ºèê9å±Ùs[ÃPÚ x ˆ‚| í×Án&’‚_Ù¶*¸©Õ¢L¬  {Ö%Ž*,ŒCF~ä7:7¥A©$G‘½ -«—Ïqe*8@®¦Üá»®‡F¯cf£ >å½ÓM;š ÂŽ`“K§j?’[F𰕵žVÁQ}ôCá8wšIÂÖ¼îO¾’ÃAPØ $ÑeaœH¨v#¡m²J¡¥2@%š­#” ¹h§b jBVÅÔ6²àò!Æ—ÓìÉŒzÙ{‹´H§±X§²u8äúÐâ Ñ…iÞÏîðŒ©Гjkí–‘á®?Å¢„郱Ó+f ƒÔÔ´€ª¸¦4Áp8Ôš-P£·¦œxãÞاž)°¶0¤ðö`ô1Ìr_ºè)Ì™Çèç¿‘`7ñx€ -&KH;g! ~Þn¯žªHcF‰sÒüW ?ƒµð¬ A×4 šitœRü4WîtmƒN@ÂÏ_)'…õ#ˆE4ÎFÞ¥è4û!äDÈ4YÕ„ ã|-q>6æQÀ vµñÞXŒ!ν²2rf¹âÿjú"ï™NZ˜¤‡mýo,Aip˜Ú“Ș% Ý“D´£\5À|KöFè:Û"iSÁZÁ[èÊnSà´ê|ŠŠY$A¤Çý(Ž ’!×ϲç@ÄØ7;Y¿À)Æ÷’ mÄ ³VÇ;„©õHbÍ›¦Ýà`‚meÇ㳃¾ý…Q80!ˆ㈴ÏÕFψ ˜buĪXŸÆÏøØ/s®|9 cÂL?ŠœØ£YUÖ®‘ý˯o:Ûß”2ÿáÇ7¿ýy÷ÓÍõÝŸï®o~¸½“eÝɲ›Öa…_¡H'Ëà½Ü[wØäb¬—éž¾“Ľ@$Î9è™Ñ“6f* ›2í¹ï1 ý{î†hoB2n@ÞZïકYkx%Úi!1=Øió—Y¶+t–%-e‡âý€—¾»ÁÔ«t‡oíêà$AŽïô—#-.§ƒò~óˆæŽÏ-Q>ÆoÖ1&ëéÛ‹~Õï1ùtýËýíý÷ñûô*pLÓnˆY%;L­ÕM[:ð× -ãt• ³ÏŽÃ -PáwˆÓÿ„‰w^”Wǵ É{{Ž©Ùl¿:ˆ¯zTl¢c¬•qnéoVH\‰G¼ÌóóŒp1¬yo4_Q”×ql`Wùë £ìµ²˜Ä¼žÅ/QÖxâÙšúéÙÕì‚[êÙ¾.äsFQ&Aÿ>¥Ë’W.¨‘ýú!ñý(;Þ—•) -hŒü4Õ’MöD¬göúzÎ"( ì产Y\mËïe˜$¬´¸ŒÐ¨˜£¦ÛvðçÓnÂ…ÝbÔM®ì{¬ù˜¨ÉÑ:‡½ÿt×ïÏSvX®•Éîr§ƒ>;ÐetšŽN˜P²¸ÖùâäËp:Y•¸¸®mñæÛíªƒãÏãç§o_t}uz~6;¥‹Ë«Ù fðÃõ»W׬’ÏLÒk›·WP>ɾ¸ÄãÓ˳h¡g³3¸ßmJ³l>>>>>endobj -1030 0 obj<>stream -x¥X]oÛH|÷¯h8œHŒä/Ù>܃wà l|¹µÁbµ0FäPbDr¸3C)ú÷WÝ3¤dût H49Ý]]UÝôŸg3šâÿŒætyCiuöÓâìãç+šÍh‘ó¥›Û9-2š&Óé”éyºÑé–üFSjj¯kïÈäò½±&/JMòZž;­iTšµ©åʈ2íR[¬tF¤Vf§—Ƥê ×KíµÑ:m“LJûañýlJ“Ùerøçò›/Ï$!rcûûÇD•Úõš­Tºm*r²ú϶°:Kˆš œî¤›xéâš&—wÉ Ÿþ”“*KÒ¥Ó”«¢tc*êÔj…ïNU+õw‡4WíšP•z‡;ÉZi¿×º¦K)d6 }DúdÛ 5HH{òV¥ÆšµUÕ 2צR8.m²¶jøÙZûÊÔ‰þ¡Ã¥1[âšU} m-¯c½Kâa7ÉU,ä`ZÚ¨&•¦ÚIšª¦çÛ¶c®ŒÖy\ò¼¬Q;褩™H ÑäZïÏé"w°~Q[„|Sð˜kÑ?øìÐ^þÜCŽ¨8Žº+2Ðb_€8}€P:³h¿Q€p£ÀeEžk«kTIÊâ6~œ‰É­ß©Ü Í ðKŸg`2]ϧhüÕíŸ/ðƒ§óÀü»È|Ürܾ¡þì"¹M.’넾uföŽ“ýfìÖyå t•L9Ç£~@à®3ßuEÌã>€u óHýʼnҬ®-ˆÖë£pÄôôLpZ æغD¥ICf)(°ÒT›=¹F§E^o¿±¦]ÌÞ(µQ )4iƒT>~¾>úA_гñú^Ôu¬÷ü÷r›–4›ªv}7§ ÀžChžÆí@ÑKüqM3—Ë©´[.c-B€AAYáRX„£„@B‹òR|€%»À¥Á[p”ˆ REíñ9çªu*-C¸ÂQ&'nó»dò¹kS@¢™Ï^kã_)- 5÷¯3i-šŠ(hJ/CD`9 -y_üß~9©|¿A,(sæÓkt¥ë;åÖTò›7Éþ!4ŸÀ¸ûF-ä,ÃêŒÅƒ@טjËS+“=†1ì”ø5Xº»ïœ<³ÅN„sxØmL[fL,6:ÚÜ…F×2¨Á’<…Ý?‹€ãˆyò½­C[z-×zßÅ枌Ž%tÔ e$oRCuB‘4¸ZE¯¦Bê=¼¢v+>>>>>endobj -1033 0 obj<>stream -x…W]oÛF|÷¯Xhë-Éú4Ð'NZ‘ìZ -òPƉõ¨Ó¡yÊ_ FCš'ÔŽÚí6Í㳿²ç8£n_”Oã!µ(7VRlò\jïÈÊXª™XšÒÓtN…5©Ê¤»"¿ÂÂI2iø\_y7ÿvÒ¦Vç2ê"ÐÙc.¼—Ö=FîâÓc^:ÿHK> Ëpüt^:i£›ë9{N©±$(:ÞØÍ6èùö¾Éõôïˆ}œŸ  .ñÞ ñÞÅ %¤UåãºrÜsÙ íJït£QÔ}U:1kÇõͤ}‘–ÏÞÁ†rºƒ¨ÇåÌW‡+GÚø•ÒOä 9o -Ú˜’\!c•nøk¡‘µð+Ô,|¸˜©gd…·ÌÄÂ+£;®Üý²­Ñ§·Êó#09HlÊ,Ù†ªŽçkôSäc)NäD¾Ä{(ê؆ĺ´4›¼o.‡”8mWˆkG¡«#È•Ea,˜!ul7…GœB8·66qûéFÑà:Ò¿F£2ÖF4[ Ë8Þ×tC]~-¥¦¯ã>j`ÆÐWcŸ¯pìEíªgýºáî ´º£ªo÷ƃР-lÛ˜ ^1B–”ŽË=Øšâô(Ë@>®¢& -ÓR½=ü×o3½+ÂuÆøRÌg —‡‡£v l•~æwÇB2´4O¥;§%†k%^$ÓŠ™INOùˆg*I@¤‹w»¼  «,Àî^“f¡7@ùûƒRáäT”™G¯ŸÀŽÀOä±À¿Ÿ¦x}÷Žp]+$Éœž¹[ œ@¬D1jÎ#žœòiu­Š2‹\‹\F÷7³SRéþ¬ ž†&ð'œÒZ…™’Èó(ðD¡‰Ðâ ‹d†B¸P‡–@•¶šS€Ëó(_E^d@öG‘‹zÀN#†¨¦ÛÞž{¨Óp9§õ -f^„Ìë\ålË8Fâaºö6Ñm…#ðÓ´:tÇ)2@Š€‘^XO©Kº éžyQ1Eçoãrº×_`~»½M=§T‰J§]‰Jàû -U؉륈Ÿ! ªfÔ…Ü -[%Æ `/3-}$_¿ÛD5±ª ÙRSjMŠŽ¯‹µÒÚƒÎ^vw< útâ2Ôfù¢Lét©wˆËWå|ØŸGÅC'Æý–Ѹeœ¯4èûž„IU;é©,°³ÃŽÉ6{ §ÐìßBX¨FþªÝÖü7h-¶Ô®©ÿ-³MU&Ÿ¶kŠßh×;ðŠ¸¤´}§ÿ, ˜o¼œ…”s¥¬–ÎdØP?PK‘ðŠ†„a"ê´Ü±dáû¥XVLNL=¿*—¼‚!U˜=–~¸›Îî>GþÕÓվù1¹@Ò8i“ÑÏ4cPÑbK›ÎpÁ vÇìyîsŠ[x·ÎI­•ü£Ú‚uúý&ã7±Ó9Þy°9k¡( -©õŠ=†‘´êIé Ô¢ôX èÓrC˜•¦ßi.má'³.ô7$¯ElAhHœ• ~š€ Ä““ ¥÷›(ÌÂ6ÿÉJK{\ÊNчõŸÞÍ?ÒU…ÝÖdŸ±Ã³9bI{²DYðÍVfÀ1(Xi% 2sJÅ”KÜ §’ƒÁ¦2ŽG5…‰‰…ÆK¤E«ð‘ý]z Nôy80P±5ûÔ˜ŸH—Q‡Ö¼0ñü˜1¬É£ xJ(„VX¼´–x¦“O~AaVx.—öÚçëéV¢áÓ;<ÞÄ&;pàŠy™”±LŽâMTl3©o5ð¬ÅŒI1§ …‚‹ -–‘xAFØ‚³„»”²“0{.€O; -»2ëjDð°Â¦É¢ -Þ ËþÝn-Ñn·Ã"2ôí wM"äâ•Ì_0äöâÓhë_CT=­Í®'ï¯Ù c§zcâ’Ï‚óå_µ:áæÖ°‹Gºä¬vÑ<á©z*¡/ü¤q«QóghïLú€ÄéÁˆœa  -1‚äð±½atGÇüFåÏ“ÚËendstream -endobj -1034 0 obj -1723 -endobj -1035 0 obj<>>>>>endobj -1036 0 obj<>stream -xW]OÛH}çWÜ—ª©œX <¬D®ÐŠÀ#T)/{’L±=îÌ8©÷×ï¹3vpM´ª*Ñ$ž{Ï=çÜëGã߄ΧtrFI~ô%>}=¥É„âžœ]œSœÒ8Ç'·¹$zQEªw–f1ͯî£Oñ÷£1OÏ¢SltŸJ³•†l\JR…u"ËdJÂ’T8Ê 2ª •Ê$‰"¥Ò¨Â‘ ƒ—‡§¿ÿzzx~¤6¯Øï”.H›æÎÉI4å;ÃúÅ'<áÃE{bvT -ãT¢Já¤Et£s¾òZÎ范›‡û«»å2_J3¤G£raêv]Öeˆöݽ_DòZ•ïW.>E*+rämÉ™JÒ -Á=ÌGSz¦¤¹OqH7j­ = -·ñ9z´GǪ\e¢ŸlitZ%Î h’^Ñn£’G¹“êLE¦‹5í€|§„ýòÅšrQÔTJ]¢&ˆÃâ¯4¹më@V•UÅzHVS&ÝGN°&§)ɤ0ž$B™þÉ·àBݹ™lmÌQ€_kÛÕÜøZ¹V–/H…KaeÀvÿ3§PP…sÕ{I¥MŒ ‘QN‰Lýؤ -T&Ÿ¹FŒ*J%8kÞK’?*µ.`¼Ÿ õ“n„Ìua¥'™© -,ˆ… ½Û;’ÅV]ä8ª—†È€æÁ\?Be™©$„iõÊí„‘(½Ä_ ¿‚&{·¦u!rìȲš2-R±D=3µ4bÇ -\e)!½ªÔEDw£HÜÐ#õÿcc@Õön–\i·E8àSø–‹š - @į…Þñÿл4¸1“Ñ6ÒzœùsàHŸJ±_ÕЂ½cOÎL"\—`wÏE‚ˆ$-kÒÈ—ƒÀ;ÛÙvt^:/=W—xvÉ)¾Â ;ÜûÛõåbñr7›Å‹ÅŸaQë™J•¡sOë'­Ý‡Å"|9™.,µnjÍ’éP‚¶¨¯S÷üšÁ?ÕKf;RD"¿k?R™lô/‘ˆ 5Q[éíÓ2íCiÐ=ék]Á,jÚ ¥„¾V \¦`Þf˜¢¼­-»ÿ%h³UŠ…â›»÷fÞÏEîKbeRåê> ÀUAi°óŠCºW‰Ñ,’.š…,1ø>üÜv[û¥‘okFƒë…Çt™ß^??ÝÅßšÄ \;G÷xÆ BåFQ´CùèB—*…°F±¯1W$AÓ~žÌ’ƒ)¹ÃÀ Ñ*^4·r °Q®S™…­¨ƒAz›ëx -ºæ;Ù»`^A‘¢B)}´ÎW5·2ÛByK ×ô¿Ôž£ h &WÖr¿^A]žo‰B¬ÑQAšT÷ÞqÓÆU5€TžZ©>JGÞÏvß!j¾¶„‰Ø{/Pã~ùŽÚ{æ ŽýØ÷·}¡|+ÅcÃF£×Ãdâ´©‡´6£A*ìF•è×æÕé’݆.!PønO¿×+Ñw¾5 þ~œ@7Ú)ÐÓL9ÈvǬšºb˜ûõýÄ<‹ó–L ÁÃ_Ó”½BÙ6¬{ŸÝå?ƳŠYǽFÓì!îUœ£„(ÐÂ|'â6»ªFùÛ%A•pYl|–Ï{y› =‰›‘²É°lŒ¢þÊð€›$w%<ƒàÑô÷Ù^%˜,ݾß}¾\;lAR?Ú±ø™-½Ü:ªa)tJæg7MùÁvÚá1SÄ_ÜÛ¾¨ód# µïQo'–þíðp¾ÕGæç)ƒYýA3ÿY£Ž¿t¬*ÃÔÉÔaLJƒx0ß‚³k‰‘ç¦s‘/&X¶g_˜Rq2îvh ÝŠã.–VyéÁîè—qÇ( ‰l¾,…µ;+æ²KäÖŸ¨ng×Oß㻇Yä~‚-ÛºcR~;… 5*«åíd)FåÎ_%h_ãÈ -w ñçʘwS>ŸÎÔhòh¼ƒÇ¤W`KK˜,´ã^(…UðxÏ$¦r Ô<øyŽu{ úë{Å înûh· qXÌ}o4p—ö÷Ïci¿ã5íDqøjôô.zQ4¯K{ÏkzŽ/&K§m§~ éÜ )` lš§ÄRJöà \°·,ŸáèëE3lMÎΣ }>áW;ðâËÞÉôwì›VR1„~ æ@Ãâãó)^RÓÁd]DÓˆ_îüÙa\¾Ã›'·GHÁ^âÍË9žþàÎOã ->>#X¾ÃÏ)|ìéùit—`y1æn㣎þgÂ$Íendstream -endobj -1037 0 obj -1723 -endobj -1038 0 obj<>>>>>endobj -1039 0 obj<>stream -xmRËn£0Ýóg™.â‚Í.éCê¢ÓvÊ캹5&¸clÆvZõï{¢*ªFÈ’¥{}žüË -äühJljÈ)ÛuÙ› -EnàIÝ6èzä"Ïstrµ5“ êMùôn"mñ®ÁHo -÷¿®ñàõD<¼Z†—ÎFïŒQÏ«‡«Ëç ÛЫ =½…8C’Ï/º×,Ǻ؈’¬Žø¼f1¿³ -;’óyvGžBY‹*!t£ Ù¼˜VYÌ䣖z¦¨À^¼š–µ³pCZÁÓö=Ez¡ Ü™ÚoµÝýnãYJdÁº£K¨ ¼tÓÌ–Ž[qd:–²×!ú‘@¯»Œ;@]nØLÕ6|/ùx…a©¬=UVÔHur[gµ±‡Ý–«q¯JFŽL&f;ÚLèëåÕzy¶*JÑŠR€»ôþà—8n-«9ÈMø‰'#NN~;šÒõOà’™cÐF…[5•hù'âðÛâäâ1ûÓAÁ¾endstream -endobj -1040 0 obj -383 -endobj -1041 0 obj<>>>/Annots 270 0 R>>endobj -1042 0 obj<>stream -xW]oÓH}ϯ¸Ò¾)qã|4 ¡¦ÀÂÐ%‘ºð0±'Élm;còï÷Ü™±ãº°»Z!UØž¹çž{îÍà ¦1þÅ´˜ÐôŠ’|°Ú Þlãh¹¤ó³ÇØ&ÓEtE³åÿŸNñ_#iÇ7ðfÚ?8~ùö9MÆ´ÙÁúÕbI›Ô}Ç›äâæ ÊJŠ§½ÓGª4]' K‚V"¹¯Kz­s¡Šg›¿cMf¸~q£‹Êè,ÃEUàämmdv¢µÈ·‚Úiç*Çã.Ç0šÆÑ„ÍÀiÑ­‘F>ÔʪJÒg)RUìÙÛåÛÅq¸2Yð…•ÜiäyÒ5%AµDÞîR”¥Äg4¤2“ÂJÊŽ$‹ñYTî®ÀC¢sتÄ6“tTÕ îÔ¾6ðN‚ý;è,côóïƒxƱϗ1Ïi2›GËð”ÑÚÁÇ >vAö¸Ü¾¾a\Si£¶2õKrȶõrŽP´ wi„K£wŸî6ŸŸrõåSÑ9Rš/bDã)1-Ft±ŸO×%˜D®Ò{£ë"es?þŽ¡¸"”ô\dóŠÞ‡O¹Hª8óaÆ„…=‚)™ÞëA=ÔÒV–vFçtÔæÞV¢Rº°ŽJ.MqX\ð;U¤úhéã&8Žèî ùöÕÖ›å«ì‡:ÇïΖ‡¨<Š|~Áµ.d‚ øVÏ¥§{'AÄŸ¢p÷– -$¬g’ý"—îD)¬…´ýBÕ©ôUfVjcà1"Úä¿z4²Ì”´ž˜ÈU¤wHŒÍXÀV×UëjHøBò‡ÈAz÷¶ÌD‚œ©æPmÏoiôNá<³ú*õ@¹£´«³Œ\rðÌøñ눮ñÖµY7˜Ö@Ci”‹S*Ð`hBg¸çÝêQ" !)­¯?8³¼\EN`ç>­ŽšîÁË<­“¸›qC—À†9ç½ kh‹Ê…9=½Ø æëíë3WH -Íœ•æ‘v8aéëÅŠoD\OâÖfA‚N‚Sx‘ ˪šèòÄqó«N–-»*‡ït€>€’°bкEE)Yi¬þ;óÑRC;†˜yæ®6†¶’R¤ÓK]È4êùË}»?êiž>Gádw¤ ¨~?I ¢úT;Š)/A˜â'N¶' ®ÙjÄyO&‚§#ꜰš‡À9¸]!¾ •±ÎDôÚK7£ÐË·RhÑ¢Õ!ÜÎ +µµL›Ž´4#¼îIÆ’Îè ü%Рç.ÕwkcÉ©]¾Oöµ*Ы4 ¤ ”Ï ½Û©DÁÇ ó«,1­0=Ü0ö ACÁSŽ!©¡.EÕêß Ô£¨ìý˜du3PÑ_-ó‚®NÆk ùŸ·Ìd ZÉ<þmC8ààP€M,®aW×8ï^µ*߬ àÕ°‡ˆÕ¨@) n£-œÒ³é/ûLoEömd!œ{h›o#Ç 1ÃèÜXY½`«—oÇôœ—‚j1÷jÁÒÎ㫤—Üf«ëÆ=¶&ž"!…Д/é$[Š<>á¸ha%œ8O»»òCiÍãGd¤‘l –2…5CЗRµßüÌ /…¬œÍodÌ5‘Y q81–ÈÏë†Û?ðˆ…–¸¨ŒNç&—0¡q‡®N³?J óëèb²¡–GÅŽ6·D#èfé@S ÄEÕ] âåsúÏ D<Ÿ÷¶p -Ë£Ûj‘©O®Ÿ, -Mç.Ø+_Í';ÞÄyF½]â©„·@…òºÊ7Êgä^9 f$?ÊjõþÓšY¤x¢q~s§ù¯Öáeû»¿þÏ¡Î&À+Ïù4[Ì Fìïb9 Aþ1øœÀhSendstream -endobj -1043 0 obj -1563 -endobj -1044 0 obj<>>>>>endobj -1045 0 obj<>stream -x¥WÛnÛ8|ÏW`6bùÛ)°(riP?4é"^ ä…–(›Dº"×ûõ;‡¤lUMÚE;’ÎeÎÌêëÉø7¤ÙˆÆSJË“«åÉûåÉ ™Ïéø£ZãË€F#ü˜ÌgÍÇJRÎà¢~àîþí '´Ì|:LJÌ_Ð2=Ž“q2LèƒÙQf¤%AŸMõdpÊhÊ•ÎH9‹k¥PšR£]eŠBVïÞ,¿œôo'4†È½Ñ ‘O/énI»V<å6² ðpùñêŽvB#° Â¤¢ ÚÊŠœ¡•$QãíT*œÌh#,ÿÝWr ÄÙÔCù#Îz¬‹rS‘Ï’ÐÂ…žÜFYZíñEé52ÞIwµ¸ -JI_kYíýS}]™z.ø ¿ SŽÓI'¬­K€åû"ÝÉ}—%>++ÊÑZ¢½•HŸ(¯Lé/s.ÅW¹ï %°S¡ñÛî€FaÖFw2W1¬³ - iãÈl¥&+ÓºRnOS üʸÏמç­,dÊÀ>ž.ïoîßúÑ£ ¾vsMéÆX©ßtò¾PlkJ0@ˆ*¡ËÜñ(yij]"g!ûwKi%3µ(,êá1ñL:¹¹ò- G¤ìñ “ãþPÑ ûÄfˆí¶2Ï¢H8–×ЀÎç°%J²iÓÖÇùdš¼ QBŸÁIçþ ´DéÙk2à»å3pÙì(=ݽ–Ä­6=!&¾F¢C™Ñ’ ¾˜ÊÏúÀäæº µaŽB~…æ‘×+Æ 4fÄ|þÈ]b¡;ü­–Âò8S³ÝwÆ)p(°3hÖ£HÁÿØÂYàdY»ZÅþ;‰{Úó}  FÀ„‘hp2ýr„“ÉüÇNº†²D¹Þcè -Ê„Ôo‚±]ÿÒØ>+ˆ -µì‹¨â ò kxå³dß`Õ¶`ëâÛÀAgRroî`½î¥C~P)¯Un YB2óÁ:‡z—R”L=ž1 ‘k¡ixKc—n"…Î&9À¯Y‹1‚'—ÂetòeÊn`¬¡V³~ðÛQPÇ)c¹`‡ó^ë9o PBÐıc°|ñïˆþ–lW°_!• p‚ïJ¢Fñ,T!Vª€¡5yŸ_›eýñqž‘¹ 4;¡·†Ñì©•E¹˜8DóyV© ‹‰O¥]m”ÈaΘ™nóq<‚k?·”ÑÅ,™v—îy³rc¬«éø½æ*l)X–˜¥^GR¡ho¹nSbÌsU0Ô3–iÿãåõ‡ÅÝûäaqCÊoÎëˆ vm8z¡0N?ÏØF \¦žñzS¶¼Ü/l —æ,sŒ¢¬ñ`ðBÔì/#±†Ã0+|l”xt?~éÛØXD'#:#ÖA»µc,Ø–b67 ˜‰÷NˆöoÓxˆéÍ’95MgñzsÈá˽ñ…Ÿæ)ƒû—Vß‚¿g‰•°í>ì^§›ÊhõÏÏ*ð”+¨ae6»»Ój_º´ï ØUÿ=V¼µ4ÞóË„Ql¯D¥ÐÁ¢1Ä‘AmØ—¥ÈäAº<¤¨Â†¾¬Ç»Åîñ#r‡‹å›Ùp’tü€-ØÃý Ë3µõ•éùî´P°Kxa]dÞQÁ*©M½ÞðB;äò×;É‚é‘XoL¤©´|T³òA—gé팻ÌáHu%_äËù¬Àô5¾LYûž-Á”[î@™xBþN©¶\ÅiÉüóévzõôöäòF¹‚b]¥Ò§=#Ñ>°Õò$à VÕ‹­5®ûZkT.õÁœ?¯’Ý0QþkÕÌ‹h-N‚C…¦œD* fÓJm1=NÅ“½¶ƒá}Kžß'xã:ƒµ…ƒjØQŒÃëN¶£€ý6¢‚ êæ8«ô~Ü*ÍùýÙÍ«áQn°Îù…«iäüÚÄøÚÍà.ÈÃÁÿ¹Úþí€.øýk×?÷ÇžSœá`ãáÆy4¹átš ñèiéÏ‚ô©2_@œ…R¼ÖàäÆŒà§zÃé 7÷f#¼,fÿóeq2›@)>Ð|ÌÑq,ÿóä_QЪ -endstream -endobj -1046 0 obj -1588 -endobj -1047 0 obj<>>>>>endobj -1048 0 obj<>stream -x•TMoã6¼ûW< ‡¤‹µ"9Žì=E²»Asè6Ûè¡è–ž,n%R!©¸ú÷GKŽã¶‡Â€`QïkæÍðy–QŠ_F«]çT´³»Íìóf–&ë5½>Ü/)å«›dAËõ -ÿ‹dMŽ©’ |D™ãáW÷)} M…Ò9JmÊø9¥MqYÚViC­òý@Æ~¿ù6Kiž¡!"§€Æî¬ñØKÄÕý’²LjÎ3š/rŒ‚`T -5Óï»ÆnUóÇÜs´5d«xîÛmRXSMïwŸ>&´©µGÿ?ÙÇœ‘5Í8;‡’ŠFµLO·?ßÝ~—ӄׇ¦{ê˜úÛ×'òì^ØeQÙXêœÝ6Ü’:txS‹¢è ‡»‡_žhçlßš…Zùز2‘–±é–rIÛZ þ‘°†§¨µaƒ©Sã ¿ÿ¤û‚*ëŠðÆJ»cõ3°#[Ú׺¨’¢Þèçž ">Lî8rQJƒÈÏ£Ó­r}:ìü£5ÁÙ¦[Ò$ - ²JÓ$ŸdiMªººÿ@ÙRžÒMžGq¼Ê(»Nn’,¡ŸìžJKHë]¨ œ0añò~YtÃ?¾ĶX‰z~sÞ*æ$QöáÙxô ¸}TËN-a¥Ð¾¯Ù0ÖO±RmìÖHI«JŽ`Eàã&?#~ \]x¬ -SZWŽ¤a,< -û-R¦<™à¹œÚF}?KgŠÓf÷/äPÇVt7 mxlmVÃÊËÛƒ˜Ï&‚»ü Ø:ð_á?÷úE5l‚O:PÛû¡´‰Má†.@ÒVhÄîÎô·×nTõ–‘½Wƒ€õŒäîdÍGŒ0ål>ÂÚãBÄå@‡7?öA7:Àö~0ÅvÚQ<¤æ’pïGá§Œï¬ I<ÓÁsSÅ°ˆ(΄ª(¸ ôN®•w‡S+@”ÛÃö‚;nÜÉhGœ|è~›Drj›åuþ¶Y÷d–¯¹ÚqížÜ¿ÑÏôèì7\•pfÑ·Ø„’[S†˜²æ‡´Ëÿo³åj «JÏËõR*Âæ_gLÿendstream -endobj -1049 0 obj -813 -endobj -1050 0 obj<>>>/Annots 283 0 R>>endobj -1051 0 obj<>stream -xX]sâ8}ϯ¸5/CªÀ` Ùª}Èv:½©ê™Îv˜éyàEØ´±-d‡æßï¹’… Iv>ª+éKº_çž{Äï1Mð/¦ë„¦W”ÿZ^Œïo(™Ðrƒ7W× Zf4‰&|’>ìDUKCñ,¢§ZUnéIkñ£¥_¬4ãŸDºS¥¼\þ÷bB£d†ÝƒÛ4ÕMY“*7Ú¢VºÄß$Jú|wûHwÊÈgx±‹¦q”ð°GôؘJ[wôø~FqÜ®J®yÍr§,e:m - S™´©Qkii§÷Tkj¬<Ì‚A‚?dûað:CâµÃm@ñÔ{T‘)DäùÁ!3Ž©ÞI²ÅºÖî³Õ`¾º¤ÊeDô€ø-ás8˜a¨Ýb#EÆsþã@;5´V¥Ô”xckQfÈò™}½ñ¹Ku™ÊªÆ¦2k7ïµyæ²tQ"¤—ž UâÐ<—¼ºG -mäImP.Ì™IaPÙ•j ÒÊöBá”´Cªr)c#70…„s&6:Ïõž±Øi#>ñãò‚Ñä E1ÿõõÓE<™DSš'‹hA%ÈòMû”Ócàœ'7xÛã—J–A#r¾žk¶4ØÕuõñx¿ßG‹óLT‘6Ûñérç–ïÓU£k˜à³Á*¹ºv§Ãïx>‹àG<Çø^º§ÖË–ìo|…u}Õc.JYóv '_™?ò_Unc„Í6•ŒR]Œõý{Á̦ьf‹๠Å4š´¯BÁ‹›‰C}G?ëZz ·%íPPŒ¸WFÿþòmùåti—ÒB¨²Æj} ‡m)R¥éƒn*)šÈYøÃ&¹ž1°b†·òíŸ^! M2cïÍŽãç%j‹bñœ`g~Û]¼áÃÝÇÛÏ¿½“£Z¤—h‹2÷j*D)¶Ò‘½§²­AŒLà¶6„ÃJÀàs觕æ$!'em@o ;pðFmïð›I -ÇôÉ„ó3]\»Fáß ~àä&Là0§s?rºæÃ4L"z`ûY“r–Ø]æ' øŠ¦ÉÜC=¹hŸ^¥¶[®Ý¹ËþL¯²<ÆƬôÎE§ Êím²•þ3ÞÎâÓ·½g¼½šÜÝ^𼃢ûð‚:÷öY¦æPÕäf­6™¥ÒAÚÞÊ” -/ßC÷8 1ÀÀ£–ÿqP7¹‡'Š€WŒ¼GGlôUGu{JQÈ!}þi <™uvnZ²@€Ó”îD $Öªàyªñ±ÉÅòE¼1P´–( «–Nr¼¨§@Þ - £­¼qcX y r(+²Ø‚¯Ü gÉR¯ ê¼Xâ9N{Uï{œbëµI. b)›b á¤ÉjÊÒjàô_çn½ÓE¬vuéHDб(ëÝÃüî{7Ï)×ú¹©, ^€6+iXKâH+o ø 1DõI½ ;A^µº¾+HO ¯÷šSÒ÷»=§BBºþÎõì³è’e •¬]sس–‰ €)!†G9Î`†‡éƸ[°AÂ’y>³•xH8±‚x†”^]á.båT‡¸T­u]çFžH® BŠè Hl)¥Ì8±Lcà¯L~o§Y/¼c<±•q‚ãM@nBœ½ÅîÓ'a:Ô)VH£yâ$Ä7£)Éx¸­s ]ØðÕ;¾šÅ9¸#b#«\¥y±t<|o&„Ž1$ ì i2ã8?s½'gD]ãBÕpû \® -Ù]4p ´&¿WªàLmC>>>/Annots 292 0 R>>endobj -1054 0 obj<>stream -x•XasÚHýî_Ñ•J•I•H`ÀûéXg}g{}×ÞUùË 0±¤ÑjF&üû{=#„ Nv/¡Ñôë×ݯ{üçYH}ü„4Žh0¢8;ûuqöyqÖ&:¼•k\ô)öƒ! 'c|‚ •’Vünb›æ Ë{7C -CZ¬°ûh2¦Eâî÷iwb­tiÅ2•´UvC•QùšDN&[˜mB+•Ê 2*+ÒÌ©ˆ%}hîð~¸›M)Q¥Œ­.wHå$Ò”ìF~Z|=ëS7ŒwW™Ì­°JçA}3ÁÜ\l$<ü¢•ÜR¡Un YMÆ–ÒK]YÚn„å­‰ïÝDµƒn—½è¦‰(ŒÈüͽ÷J´4”kKE©ßT""Ø#‡ÜTE&N°–r%ËR& ±E»Q;µ|8ì«ò8­ù ï‚v÷^M)“"7¤W ЖJ¾1Ë•‘%‰8ÖUn±;‘9NhUêŒ8¨<Ñ[CQAÆV½Iší)&<þ&Ë æ ®9莑 nÒy‰Fãúæž¾×⇕Aõ¤{>òÿ×ÎÝh‚ð63¯FÆ:OHY™Q o–*¼E)³§Ë]n.ó9\NèqzO™NªTÄçîËãÁKƒ\qü!Æe”+}®‡œðO_΢0 -ty9DYd4èO‚«ú*¥¹+\^•@ª–¥@HÌ£^Z¡ràsaxœÎîh®WvËIùÒq Ò”—³‹ël¬-~éõ¶ÛmPˆ$ àfïx©«I^úò ~ý¦·n]¸”J$,¦Î=0¶RëªD(NRÑ9N…ˆ_Å`ÍRî˜`ÎJëBr~¥§«.O]¶VŒŸð¼ŒÞÍ…¨=–‡áÕØÕèA Âa0hî‹œ¸PÍ]âØ—nÄâÂ%\—”È’%Å:‘\;QÀ¡ÙØ2§î§Àœ¸ [i,>zõa~/dîl1TŸènaœ*HÇ 5Më‚FéKo×lt•"Óy,q¨â­._½b=HkbQÈsÓª)ïZËÍgÿ -špN*·'JçÕq/¸†Œ¦•ð±e!ãH¡Æˆ W$• ,ºD qcY­9ÙÁœA(=fÖ)¬ÞˆÒ=¸Rߺ]14 8˜ÑU0â<ŸŒš«&χƒ>n¶Å~§+ðX¨8Ç/¨H¥€QX2€‚!èrqzÂÆÅ_;׿O|p½ÝzÝ?ÜU K—¼À9ì¹MÕ8‡“ôÇ_íq6;îëÎÐ÷ØM?€ðLîŽMà~ÛN»†áqÝóGµÀ8Ú졆¨Б ‡æI¦N®ÍFL§íÓÍ5Eƒþ}˨oS¯í û:™3suYÔDc“\Æèt¢Ü¡ª5îÀ–ãªP¹ß3CÝÝe—ßTVš—PÏÅïuŒ¥ƒ¤{éfc‡|l8¶:YQRÉbÃØ8Cæ€5Áë_§5ºú;û©·Cx®Üá£O¢ËKñ±9DàÓníóÃí€÷Fw$ÎôXÑ`Aãl…Ž…çÄ#!ä~m÷Ó©#ˆe4Q8ÂTµ¸:dÍá (Úó%å6GO¬zÞ9ò½)áž‚æå O_×ä§ÚŸâlPh-m±ÍEö‚cÄI`L ¸—.øXÊUÄíÇ'¶½l]Ä•2W)Rk# ÛÌ¢·ù¶7¬r ISˆs¾ªr@uÎn¬q(ŽmºÛ‡™“‘h˜‚O¬¶K9¯Ì&ÎßÚUä¾â9ò ZÑwb€Ñ]`P¶5Ó,ÿ|N#¦ôÄæ¶x¸sjó9îæÒº³hsŒIÅ;‡”Áß*rŒÀ}¸¬b‹ÙM‘½›I­9áh„ø«ÊÄÚùôþ×)=–š§šµÿHÀ»~yw¹óù_­†ã!„Û-Œøyèý¿Ïþ™0ˆfendstream -endobj -1055 0 obj -2114 -endobj -1056 0 obj<>>>>>endobj -1057 0 obj<>stream -xV]oâ8}çW\©¥R „ï>¶3ÛU¥Ýîì–yC™Ä€g“8µþýž›8Rf&•¢_ßsνö{'¤þBš i4¥(í<-:¿-:ƒ`>§ÓËlð1 ‡)^ãù ïp: -†d$­a; Ñp‚O¿4ããÜÿòn¦óTÆCl.½ nÿùÂ1-ÖÈh:™SZÄåî-¢n8&}ÒÙZm -£² ½‰t%h§Ü–þøüøånñ½3 ÞÖqeôW.3^¤ÈoNéŒMûÏc -Ã*Zo8ãM M*‹’"–d‹<×ÆÑZr[|s¬Ç(ÒEæH¯¾ËÈÁ–DvŠ+ƒ_µ9•æ?iîi­Œuˆœ؇Ï/dà¬ôØh+SËD’Ód‘Ç·ö<[:zªÄÿ1ñ) „7£µ»¡jyâ—»Q^å]GéKõ5Ib‘÷«ÐýXx—¯rïî€0çÑÏ*8÷Ò­ -@í-\_À\´6´¸‚2ŒP™%·Ó$œ3jU8iy?Ø®ÑÜmU´¥X¢¸˜Š\g¤‘±¡¾6 2Èm¡âÛ“'RûÖ*“13ÚJ8Ò+ÀVÎ`?¾@ìm¬lžˆÃ«Håõ8ðD Èg“Kcuv%$ u<¡:ÒkŽn%¥d¶’5Wq ›•„Š!¯Ÿgð¨·î“zhóRn77ÔÓ± f–ýÛ…e“Zv#$S+Øù^ sbZ˜Q$nyWW€Äê®»’NO+|ÙFý†kï¡‘F&eŒ0ÜÑÍnþåP-a°2Ýk„ÿ‚«æ4ùXz‘E:M%F—ÛòI­é  Ú þ“ÇúldÚÔ:G¯s h1^™Þ&<Ä[˜ ±Ò¢b]c(­$s:‹kª>l® ¯EºÂÄÏ1ÑSñ•ÙæÇÌ¢¬Qõuo©äˆ_=FUÐò67 ÜÚ.ß¹æþ¶Ngßùútºu½=þùôH_Œ.o<ŸuTð9^¢zÕ®^µíÇîhãÙS½¼¥ÍgŒ2ü»ó?i endstream -endobj -1058 0 obj -1030 -endobj -1059 0 obj<>>>/Annots 307 0 R>>endobj -1060 0 obj<>stream -x¥WM“ÚF½ó+ºv+A[µć‡=à¬×v•í8^n!‡A@ö !3Òbþ}Þ´>€µÊq²vËÐ3ݯ»_wÏüÝ h€ÿEC…ï:¯׋ÎÀŸNéôa6X`ÛhêOi<ð}4‰üŒ¤µ;)ô4ØߘQ0¦ÅêÃ)¾$,Ð"ö‚±?ñ‡>ý¦³uº)LšmèQìVâfñ¥ÓS”{ýÅf´Rúàvî…;™KcIÀ¾x©+%)ÍÈîV~ ­¤3u¤Cšo©Ô9¬tz½žûµ§±·bwiУƒ°P«"‘ wÔ FþÐ!‰õnŸª¯ïÄ®ÚýÀÅàó›Î(DŒÂ ôÇ´#„*ªŠ;gË…3t&»ˆ%+C,‘™0ˆ ê<ˆÎ²V1Â&òœ\yÜ‹3„=ñ–Ã0âpq‰oàܪññℯ’MÇHsØÈZñRæÆ«SºK¤ÒGD¬=h“Xì=J‡Y0 ˜¼oÍd¾Jµ¥ # »óÇ·‹×o~o3 M_7F{ìû8ÿüñݼÚu¡ðš¸Ï©8æ§a×¾9‘ë4“œÿû”ë2Ö[™Ñ*Í7¨ð›cÇ)äp髽¹püšÜ¨­ÝæÜåÛÔTãÓñÁ"k%åêЃŸ,JË‚xÌkÚ–‰d%þÐÁêâ<J¨wh†4çÝCŠŒÌ÷çrïë\aûΡ¶_3ôýÖ®ªŠR—õódÅ„ÜwkŽÈÕEC¿¢'¡Š&ÉÏÂoE¶‘öˆ&@e™HиTà#_ -ÜáœR¶@€«8»ã+} -ÏÜêân/5Êé6‰ï˜áî‹6›«öÌ“ÝË8]Ù®ª2±]K[ms&äÒ?D¡rëºâq¢ª ´!,UŸØŠ•Ï(|@hGpâÞãã{Òû<ÕùpËPámükOÜÒëêõº{ ^äÂä”+‹zGWg]jüXÞü¼U@Þœo}V0®…»¸¸öT±¥Š£µÎ“Æ*G/ÄÝÆùÖŽ¿$®c@ ³« d«w4šÎÚž§uåˆü¬®-:e¼åÈž—u,&]yp”û¯ ÛÈL¡p‘æR2©lO%WP˜Ø®7è¯mªfVm„¥÷ëÒ+Òäî—©ôôê X+ôÙ’òó!C—7Lûòn‡ÇwÊòá1ÄجŸ猙»kŸß)ðÊ}ª4â­€ÉöƵ_ë¦Jn'3nXçã¶zpÌ-Ï*ñ”/òj}k - ×Ge€Î|¹¥£.Èny¶ítâªÔý"¿¥ÖÕDªêQÁwJHŒàʵV̸D -UÎÍ C"Ï1÷‹\Zî4ý‡iuÓÂW‰1‚ó¯æôÉhcº×qá>>>/Annots 310 0 R>>endobj -1063 0 obj<>stream -x­W[oÛ6~ϯ8Èæ¶;Žíȃ×-[‡ÄÍfÀ¼Ðe³“D¤ìúßï;¤$+Z»õa-[EžËw9úëbL×ø?¦ù„nfçßo.~Ü\\G‹ÿ˜.°ìî.šÐt1Ç÷é4š’‘”ò¸‰mÚ?X~õ0¥ñ˜6)vŸ-æ´IüýkÚă'ïU!-‰8ÖUáðå¢;™ÐQ¹=¹½$+ò­X†%¤·eìâLX;¤•u”©?%UVšó>ý¬ò Í”ûÖ¾Ù|¼¸¦ÑøAo’AU’ÓtÒX§ s{m»¨‚%*M¥‘…#g¤$ú‡X>S!riKË·þ7»×U–p½³.uuÿ“ÑUi‡I|_fBµäïÚì.Ûhç×(âGž¥.3¿ìËø”#ú5èë"U» -µD’†Vëµßøyùä+mUì²½ *[‰,;¡J…¯ô•tñU–ˆ2â-¨ÙG8¥ JU&_ÞDõY“ÚŽb¾/hÍý2)¬¤I4‰n†~;ŸTÝÏœËhOÖÉœ”¥-–&„]KmÕ§:ýˆ6{ÜË%—Áí… [÷²Ë…ï70Âa€ø=|•»ðˆèA*ôуb`ëBÓj3òˆ ÁÕÌù_»LoEÖ;•CÊt,²:Öºž"×t»¸‰5!& EÇ«‡;£NŒþÛ[€¾ƒþñ4šG´–qe”;ùu‘ÎçwÉ3š0y›=éy⎚T^jãJ[jÅ¢Ìe¾•†Ž{YÃ6®¬EÇ}©lsJ×=УÀ€€„^ò‰2 6'ßý«‡YMi(ŨŠùö:èbá]ÒŸåÏ`íQ4Þ®½˶•“tY…(4öBE¨*d›SéÏ;ÔŒ…“â:Ñåçò^&³y}³‰’ïµäÿl˜ >ÅH$9*Ôµ¤ƒ’ÇÏÿ/±Uh&Ž& hR[C4 *›*í…žÙ1ÈeÈÉOŽä_•B™Ð0Ü*cÔië¤ñ€êB šLÎÅk©®%Ò¨°Ðë/¯ÓFíT|wŽ²hK±³y*åPJà#Õ&Šúò“‰tBehZJOW«M?!`åà°œ¬©bÌvñÛOì4³¬äp!|„‹ŒÖËœÆ×Sæš_É7_َߌ] - æ^¡ÎvóãêÝoŒÞé,{uñàoå’“/Fª <©¥™²¶’A /YXÉÚì’l¾ -[ -#A$(b*ª¬a0ZÌ,/@Ëþ5ò{{ðW·5Í!tu ÷° ^Þ ÔB8Œã„g ³W ¨¾È´VŒ–ûHÊ€–Ãï,,a'„ø¡”s³Ë`x‚M˜Å2mÕ6,5£²A§ÿ\;aÜæqX˜Ë"çI—Ò°Õ?Œ½ðó‘kóÞgÙ±w‰¹á0CoÎÜP[¶m%s3ÝôJ·5ÝÀX´5Âœ¹Ê2>ý ˆ‰­Jßq°Ø§3h,d¦à ½užW…B”lþ[éŽ]3ÅÂÓ;˜e(ôÚöK±ALØSûµÕùä+¿/Š.à‡Ï­+ô Ã8‚§Fç´ÀÒAp}‰äû½˜¸-vQ3?ZÔZ™è‚wn ž‚ÛúÈWËwÜ‘Ð`̹~pØL”‰'l¸Ñêm³ðŽ-~ !¿ SÑ7ßPðŽ"?8KR\ò  H(NÄÎyâdv 1t³Ÿ…Å\$6I{6ÑáÙ„šÔëgˆÿmO”÷—qqæ³%;Û³eùåÙòˆI¤`{›}ÇÝé¨7^®£ÙÌ<ãÛ™Oã,˜zQí奌•€q´öo‰aÙK<Ò>?½Z×ü˜a@/ä†GÌ0"ž[|>¬í^hsw˜9W¹ßñÀèåêi¹:£p<mO <vóF!ûŒ–‚að@ Üåµw¦$š¶Õï%{ù UÎûÙY¢yéL: Rý¤ÓøÒkxœk8xësèû45IÔoD_?u"îåò?Ä_“GaÝZú×›Wñ³¨`Ü•;Ö©œ/j‘À©1¾›_;c†&6UÐÛËÕëÅcùbA»>òxŽ·SžÜ×öoQ+ÍøfÝÑlvTd½|ú~IÏFó+/ý ãŠßP<~8ÈÑx6 :ó‰Ÿ|¿â}b:çÑɯ^ÜñÄ~½øÁUô„endstream -endobj -1064 0 obj -1779 -endobj -1065 0 obj<>>>/Annots 313 0 R>>endobj -1066 0 obj<>stream -xÅX]oÛÆ}÷¯¸¨XŒH}Ú@dKŽ 4Mo¢"¹¸ìÊ\I“\•KFñ¿¿gvIJ¢4)nÓ‘»3sfæÌÙýã§þú4¨?¢(½¸]\Ì=o2¡ýG¾ÆzøLÆøõ½€rI+^€gØ¥ùÀÛ/ﱩO‹ï:šŒiÛz´ˆ:"ŠŠûD¬Í‹Å§‹—÷ƒêÍÎ ™"WÙšôŠŠ6"Q!sC¦Ìs]f±ŒiùLæRÀôOŸdaè¿¿\ÙæÒȬàõ0€· ZÕFzÔõÙáEÜ1e´!aè7 -;¥‘yøâŠ>„ΟL! -¥3þåcØÉ4m…1x“ü²UyóPd1Ñ,ìÄʈe"ãð…G.”¨ -¥;ö&T[ ƒÑ¸z^ƒÂ»ÁÈ°G‰^ël¡RyÇcVȵÌé³HJI@@€É3•<ÏÙ¾qçkk‡Øàjõ#->©èé›Üîâ;‘ÝmD¶þaÀÂæ›Ò?ÖèF§r–«Ï§Qš­ŒÔJICÅFRÌïP" tšv…NÀ—Tlí ôÛ/w(ùbCõBÛmv•Ë¨Ðù³Ç5zÐM‹öÆ)⧥<ØBev÷•ÎSºüxsI°,ѾI9Ç*—Ðô{7[½“+ëmË,¿xiûÆ…u ¿s‘J­²G&]z‘ÎVag¾@ÞYƒ°tN©†}•±K¶©Ï¶oÝž_ë¦þµ7²„åj[ü -ÜNú—Ñ1ÍcÚæz+óv” 9¢·á3%ýdÈÅæÖ^‘w÷f†ÏùÇùé¼……w;]ÐJ%Ò#kÏQh„x‘†¬L÷»µÂç2AÐ(`Ì8f²¨¬o±Iƒ¹}êPn™t~ý“ Jù,ê{t…+ç*Ð -Új)]lGÅ­.a«ÆÐ ä! ‰¥ÑIYØ;(~†”‚÷êÖiÃWW)¿z¯?©Ñìÿ·ŠM— ³åzÔíßT±¼‚âš lqY1Ú¶òZAT#þ¨>WdíZ†BNŒ,ˆ‡ì>“€ø¿®ÜûQ³Ñe¶’.l²ÛJÔAÔ…lË‚?5ùcéÁÞ[¶ -ñQ|†H 7G6qòv'ÕÓ -•›¯ª¥v]TäÅQYü)uÕÔô5êÐ -œ£{ásR«…Ùy!r–>¿I‰ä*>1Êð«Jø4ªÎÒtœª‘"S1ë> ºœ êÞ=ξ"Ⱦɥm®R‘?¿†ÞÜ>ÎÎzwÎpe·v±Ú…Ö¼ Õ¿ºžp{IŶgµ$î¨ÖF).M*>é\aˆ¸J5r?ú ¡FIg¬YbÎfô^¤KÁ¼)mµ1¾Ñ¯³;^¦Ò©ÀÀ ;y5h¹úÙA{¨U½ÏÒþÝkÖùÔŽð™’ßxãê ½?>Ø|hÀ ÇÚߺӅýîÃÛ‹·ljp°ß°¬cY$–…P‰A@èö+çj]"HdœÖ1êöo„t{"”ä‘n‰±nL‰4,¦ïó×oiƒ:ÊPaK‰~ij,æS¢kžEÅFhÃúÀêt#B¯ˆ§Å¿~Æ¿ÒS÷p‡vžt -Ee(1´žÂÖ-¨‡Z´÷q"ïwµ°ó•2hÞ˜.—2zz¾t¢šÚé:×ÚW¶‚ÝNÁ©ßmÕtVm‡q°…Í9л0´¶=·­R•x“[•Aˆ•*·ÝÃFÀ¸,UüÊns¥ËW[©9IqôʶÑùú’ãhæ-¾0Á!Ëz'1Ÿ¯\C2ËÕý jCOgºpX²–eöØ´jì3NÇ çKÊm""ÑŽ v +QO‹n ‰PLjù 9³C‘îf/’TU…)jxóÞׯ÷ÿ ‰n% +|b®<®ÍN úðå–>ñ†uÀ×.:t~’ñ@z‡Ÿä‡ +X*Êܸìæ‰öDøAeOD/¬€¿Þ@Çh8«[R&¶ãu Eäq]UàV'¤{àIÛÍÔ3^ð6æñ_0Å«§Ø€|XP4„ÛÖ*iÐÏ©÷è¦Û¬O4jó?̾=Gñº9ÈC-f¶ÒÝ= ®»Ùõ¶pæ93š»†éî—%/•™Hxg‚hzd;ÜV £¯–•?ê“ã±Î“b°ë†$kç]Qœ¥-j¬!|˜î>& +7»òí‡ä>WIîE8lð†7xŸÿi¥Hr¿HGvÇXyôÈù”H·Á˨——*oóvx;¥ùÀpøⶠ1ön¤µ_…7 éïb«+¼\Íão3·o?¿{K7ÖüFôÁ$M‰ÕvÐÒáÂx9 ÛÏÙ;Ø|9—‹Uhügõq}ñ÷Åÿ®n’endstream +endobj +1056 0 obj<>/XObject<<>>>>/Annots 460 0 R>>endobj +1057 0 obj<>stream +xWïSÛFýî¿bë/qf‚°ldžÌ0-I Ã(¥™NédÎÒɾDÒ): Çÿ}ßîIÆVèŒdÝíîí{ûvõmÒ¿!-&4SœÆÁ˜æ³Óà„f' \OðWiJåÁìô·Ï<˜ÎÃ`ö܃Édú¬)x ÆpÌw§“`BáëÉ)\œ`¿Ëè~Â8–Î^cMN“ù4­­«[+/£/ƒ1…S JF±-j×ؤéÑ(ªã’œ®M¬]@ïÖ:þJµÅWšLz`«jŠ‚cá›J•¥®Ü+RE %•$¸#]ÔÕ–LÁ{{¾9*¨,³J Hqä¡¢83ØG#>^³,týŠt/ÙÄñå)rî3y4e°qI0 NŠ:õ«žò}4á|î ƒ›#P¿êu‹Êˆà†§éûzÀÏÛ«÷w¿_Ü=u!Øú¥le/û ¸¢aži¶âš¸´É²íh:§V: ð„‰Ð­èöRÖ…²KLÛ +4©AS¸¹…1[õÜJŽ]¾ €~z°/ \}Õp{²j( ‘€4t-¼!ì4+ÊL¡Ù-í¬q$mAëv2÷]Õ/,¥uÎ0åv eαYU¼¨ ™ûJ¶ÁTT¨«-û-p>I©C£=nr˜ô‚¬ç½c3#ù)MC1{FñÍùõÅ­óÓ?ë¼ü „kc ²àr—¨ ŽO;Zol‰ã빓,¸Ò‰”‰·¾#²Kõ¶Ô‰ Êw©AíÔkMÍwd—ÅÊÉIsµ;%عTe‰%=·¶äÀ%÷ÿX(ḭ”pÌ»÷¥é–J¾Ì¬ýÚ”ttMÑÅ}ôáî×ý|œ°ÝãÁ‰åÃ0Ô«ÊÂS¡waà½Ê—J4 4`yù„<Ù÷*/³¬Aö ¹¬–Š• ®nYŠ*”ƒÉßäʱª.+XÁTlϯ°rÙ4öbX¦*ìyMÑYË(—.­€T5 üIAœ妀žïé)¾Ü_hÖR3Kk¡· ÕT+e +á‡é§ÆÕ&ËÄ>J*åãt¥T#C­òË!Ù²§…§ÓZ=¢Æ‘¤½Â èz¿òþ£úøòI ËJ§ú"ʹ'cmBÏh«Ý!ŸF|X]ˆžH€ÜºLáèk ùD¨ªªnÊÿ`mر6<ô‚P¼À_B…}+¾C1‘¤!x¬}¯4Â4—}rµjέŒÛ©ÇµÝ™`þ%3«¬Ç™]|×bžYÈ öSGßË÷ÃËÊ¢…HF¬‰mXÑÁ`H›Ú+™ž_) ßMºHÝR …Ü›-ÐjLñ¨2“ìÔ(ZJÕ÷©DtÊ_³–w#EÏm×ýQŒ7‘x÷\CÇ|{Jú®x…\s"®¶Ò0wŠ«R-MfjŸ§é+,v=×™~Ô tSñÚÜ&Ü9OØ+4pm3€«¥jö¼ÛuÖ* +Û~’¿ß¼÷_í±¾ëåmªÏzñ´zôù&ú|­bˆv[7Ýø1b* ov„§W<»éBPÿ1ŽÎ/£‹; $”¹Ó”¥­úRÀÇsFR®ŒSˆË›ý‚xþ„¢0ñ8z4uCÔ, {‘Ô¿ÀmÝχ‰’Š æNÏ?tl½q¢ìrPà(«4#£UF ¼0|ˆÎ&õÊÌdCßF™sù¤©‰ –ú"Í¡¥ˆ¨—|ñ†©g0Ø×h’máqþi°¯V4ò–~{­¼­Ý2YËËdªnÌ3HnQjÉ—>&çše‘7KW¾Û$ÿ[2K³Ζ7µÑKTâ +ö=¨»Xä]DB^×uùæøx³¿’,ìVw‘3*í¬uÎcÖ~#ðc[bc)+á^´¯DŸD?y|ñª#¯(áï['SšÇþ=áþüúí9ÝVö O_ïmÜä˜Ð¼ó¨Ûp´˜àæ™q|¶˜‹ù ؆§á‚7]Dƒßß]endstream +endobj +1058 0 obj<>/XObject<<>>>>>>endobj +1059 0 obj<>stream +x­VÁnã6½ç+æèkÙ’ÛÉÍM7èMºíºØK.´D[l$R©$þû}CJŠìlÑí Xù8óÞÌþyÓ1­Z,)«.æÑœÒùu´¦t½ÂïÿI{ÿ!YÇï?ü°½˜Ý]S2§íXËÕš¶9gŽ7Ù䶵“ -"ú¤<4Â)} û/ôUéܼXÒÒ½˜æÉÒ‹rÅåö‹9M“ “/¢Ú ~ÃÄ«pÀt‘F ]DqD›ƒÔy·&¥8îÖ$«hÉk¶†T.µSû#¹BÒ“<Ò¾Õ™SF‹’*™B+[Y2ûïÄÄ‘:CR‹])=@.ëÒ+@òŽ!@„/BXÂ’°ÐS¾:È8Bç3Ӏ̺ÙÛYÂ|9Ä£MiǨ'by*¾JÐS–$_E¥´¼áÏPlštßD%mMÙrn¤4¢¨[H÷»V¯³Ÿ•n_i{ûyöé3ÒyVÑœÃLÁ¤Ê' “Ÿñ8$s‹äZ+s/Žx¯";ÁLÞcþd^h×@y&¡¤éœ +|ßd²ÎÓÎð†uf†­­$Ò@¥§1ŠÓʬm”;’©™¨“s3£÷êÀ¤yTÚC/+eUJkÁhW½FŸd˜¾?î¶ÃA©CŠ¾NHØw²m8IOEi´ÄYͳlúhÀ‰ªõ3ŠÝ@‘±À£~ ¸HÓ5¦,{ìQÈYÀŸ.–Ñ2^ÒUß@…]…×oíkM¦>/XObject<<>>>>>>endobj +1061 0 obj<>stream +xW]sÓ8}ﯸfˆ§™$eŸ +]f˜YØ.„Ù—¾(¶œˆÚRä¦ù÷{®d;Žf—¶t¿Î¹ç^ÿ¼JiŠŸ”–3º^PV]M“)ÍÓY2£ùj‰ÏðÇJ*‹Ùrž,.½Hg«—/Þ¯¯&甦´.àd±ZÒ:'8˜NiÌ +»Q^Ø#K¹r™•^Í”&-|meB·žüNReœ§p*£R>É’DY’–þ`ì#e¦ªj­2Á÷yñ(íK‘IªÒÛ7ëWS§×Hl>ß~ ‘çV:~™Ð7¥q²÷·«šýIÚ–fWG‚ýŸµ|KBç´•ZÚðÔÊJ(¸,Գ̩@"BîöÂz•Õ¥°ÈËK[ ®·!)¶º’Ú“)p“>Ý·Q’pR;ÔßšŠD—n%´ØÊpm/­ÛËÌ«'™ Ü~6(±ßÁªÑ²o9Ã#d#jØè'ŸÐ_8ßÔ§«c°·ªbtNQrÊ + €Ó­„àé œâÚj8Â|èöë=žíËcýl‘Ì£vR#åÚ!8®*œ› €ÑAh¦º„y¿Cý LZT.Û)¤C6Þd¦$UíËP²ÀBYÁ®aä!T¾öªµ¡E%_q¯vLÀø_$ˆ»¦|Bä7$&‚CRÇéÌhoMYâüæÈq *¶þp?AQq¬PÛÚÆ›K V)]Bk„Åÿ$¾;ùˆ¶ 5šHŸM8¸Ì©åF옑wu¶ 7/–˜³=áÉ4ä'¹t^¡ÑN'ÎÒN8`\r W¨q‰%ÎÐxH'_Wø|\¢Aº*ãU*Ñg^ëš°•(\Û,˜s­‡N·±yé+£P‡(ïm:6(\‹Ó5"Ï@4VÁ?«¤ßÄÇ(!RGßïîéaô9w'¼ØZQQkøá c~䜭„À£bw‘rÅ/à[Ô¦k_'·¡wƒ4…r³ô7ׯEB_qëgÑDp\U(,ópoR>W4£ËãïìN¡£º´®MY×ú¶m‹âÝùïHÁЬ´Ù#Šº¤žë¶@¡ï™ÉPÉ`¾'º|©+e‰>>•vÈÞ5be§ÿ«B々©uh <ð¾kõ<ùSéú™š>„ {@ÎHŒ8þ"¾®ê*jY“Ó m.`;¨ß<‡¾Ã²×sàÝ°,3hµ#v +5€Õ#†¥¤GÍÀ±Ø)ý+Ï­ü1\œ1KÆN–û ™\éFëjO¬aò‹³É + à¢ÆÅîâ‘!ŸU‰hÀ¡~aæQ£½±¥.˜ØHLiÎõI¨RlÊ8¯&o(…àóŠ0¾N£öcLã§A7mÞG¡‹º›°RFðOÆxÆÆ蔵—eGÑ0Rm¬€ +¸wl«Ï¸;̪pºBÃó©ÒAÑRX½md7kôx¼LV¼V!’‡ÙbÙ$ÑF^v{Hëìaä .ðÈũGŽÀ¸©K ´eíñ{ˆy„ ›í “Þ±ÇpÍXBoÿ¬E© +%óOº1øfA NúkzžK»5ý2—µë› yµ˜Ó]¬çæ×7iŸ°¾ÄL+q iºÇ(lXJ@´*‚ñb‚´"å­Ð.6*:Í<Öû‹p\H¡¥Ý»kzCã9ﶹw}™{\ºóÚ âFæu“¸w¨>LcT»Û¡*‰ÈÏZ z Ý-$‚©×Á¹Xž¢À²'ó„>…Åb8ä2«E«‹@_šÕ"6‡±9æ]'6Ã^aÏa÷ʃ ¨ÇqÏ,ðÊy[g¼±c쇮b]¾i{6Mͯè2,-o7Jw&+Æ =VÕ¥W˜¨‘•m)¹Þ*”‹,t§YP—Sô›fB÷¥X¢­,x%cÉÃçm%: šØ𿢶8/‰¡Uº0w~)SóËTÑÎA¥³Ý&tt9 ÕUäea Àq'êï PÞËšÎÇhßüEˆ¿ +Ðÿí'‘®ºÖQsøo¨^G.¾Hi¤¸^GœV¦ |A®®ùË/¢ÿíöóû[Þ§B€w&«y +S–oŽÛ ãå,èg3†½Àgçø].VQgÓ~ôÇúêï«œJ¸endstream +endobj +1062 0 obj<>/XObject<<>>>>>>endobj +1063 0 obj<>stream +xWïS7ýÎ_±ã|(LÁ?)LÚHCÊ4œÉf:òl+ÜI‡¤Ãø¿ï[éd›kÜ6…a°ï¤Ý·»oßJ{êãw@§CPVîõ»} úÝ!ŸâóVÒlïb²×»ìÓkšÌ°ãä rÂê~Ÿ&Ù>5?¯èZ”’î¤}Rþ/•Ï”=SóÚ +¯Œ¦™*d÷`òu¯OGðtC›ýÍóá {²ý¼Î-ó7É ,–•ð»ŒÐyá¥Õp÷$Ijo•t43–‚csµ_à…Ê"$aå›Æ^úŽžCŽ´rT䢢¥ÒS¥ó6ÜBäfùÑÏ­©«ÍÚ—¡¶ó²0λ­ÅœÛ+×nšW;ÓÃÖHs­t¦¨C¹þ17/ýGïðƒäüH R9åÓ&Žuºv¡ÓÒ/}XÅ)^Ûm"jgA¢˜v½ƒ‚÷°gG*k¼ÉL‘¶¬}ìXo«l+ÇÿnßEú'ó/ñô.i0ˆmt4 ,¿™!;µuò¤@¿˜!"'©”ÙB]éP‘ÇZ¡,x#<¿&Q!ŽÊ*áÑŸ"S…òÌs¡ó¨ž0êëÖÊÌ«à Ž¶K)óÔÓî1¿¹òä¦.ršJÒÆË<:®5'ÔÔ)à’Î÷J<s@®Á!ìqh¯Cš¼»í]ݦÅØ0Õ¾ -8Íj´XYë¦7±Ç¹ÖáÁêLU¢à ¹JŠ¥çdt±¢%Ún2FaWíhîD9ô’° »¬jKU$òœ>*]?“««ÊXdB>{©y)²mB®CS4)%UMé™ÎÛ:ó5‡Å+7šÔd¸ƳB!d}"9bZH6m¦^(½Ýml|G_ %féèZú‹«›»Ð“ ryžç “®KCsÞïjÝNßY­3n_V¬(Ư¥Ìƒ `Cr@ò‹TvŽt3Ú&öR<„õ%˜E÷û*Jeïò§†ÆûÄ+Z¥ÔÐkÖþ^¡¦øü'ÒuáU›Ø¿?@ 2ª ÏÅÄr‹&òçšÙ„Ý^Œ7„+)Âè +´ÏnZ¶)G»dÞÀçŽé0ŠN i%,óôÙäÄ`ÊÇêw¢Ìu€N3–`¬@ú¬—¢îrcµñ°"õܼдÊ(íIùĉ6*ãœjXRqb„^m3£„N0˜é +6~Ø0%=gÂ2' ÛQL–ôþ¹îJ·¼r’X}à âè— =šp„ß¹ÐGÉJJëaÓ«©d¿¡ {—¯ipÚèÝè8Ê˨;êÆ£Âö¤qT»†’HòÆlƒrØ›éAV^¦ç‰ái<7lö&íárÚ­ÌYYàFLM•4twPÞ„+ç8‡øÿ ÍRÓ“°ÊÔîojz¿ÏDA8”ƒ„@pïbòA>n¹:ð µéR'9cëü}WpØ<š*ð÷»ñE«dasS‚m ŠRŠHP "ƒ"Ïc“sås&«0Ö!4ìpc½©u†Ý˜,TQ°¤mô¯å8©-º`è°‹Ü”¬IŒ+6w„ÕYóªú±×á ´ÓJ4÷Š¾òì%ûg -ŸA¬"'ÙUJ *ƒ!a2…yÌÅKådòYð¤ι ô|\Ž›ÓhîëàÄ/Z>׋™>`+f;;Á€Ä÷ÀWäÈAg ë˜EÜ’ÈO¢¨9ûh:hy`œK3Ÿdç8’–Í™8&¯åz;ˆÆC˜3¹ÀcDºž)œ4†ôX ûœÛ´>Î6>`¤IæWUÙr 8[<)Ö@( ç:Ž°^߶çë f¦( j¯°Œ ‹5>Æ6óµ ¸¸âÀ…Ó÷ÖýâhØE:ñÖê M¹†¹¸é—ˆ´g|þî·«ë÷×çã÷oûý_èçp/Ðß5×.h­5cƱ`kyJGëvòMÃ#6üAjiUFãF–fe‚ËÑß|‡Õa€ûQè1Ú‘áu*ÚÿEýåæÓï>Ý|¾};˜2æ_c£Žq†õ ‹‡´ Æö û_J‚`§R5£wp‚kâÙˆo„QïÎÇçtkÍWL_8ÉÂi"Ðœ¥ G§C\óýï[rÎÖŽO»§'g¸‘ÂÒ°ÏÞOöþØû >"]endstream +endobj +1064 0 obj<>/XObject<<>>>>>>endobj +1065 0 obj<>stream +x•X]sÛ¶}÷¯Øñ“Ó‰dÉrm÷NÛ;qZÍõW-eÒ‡¼@$$"& %ûßß³ P’é™ô6¶‡÷ãìÙ³ ?ÓÇt~B“3ʪƒÑpD'“s|=½à¯'øï4-åƒÉdxÚ~5?8þ4¢_h¾„¥³ ü¬ŒF4ÏŽ¨÷çËýãÿx¼ÿüðëhò;ýFèZ;“Ѫ4ü¬ŒÚéœ/¤Ê’*]-´ód—´}óÝüÛÁˆãÑð®~àaœ±‡¶R¦¦¶Ζ%[;¦;J»²5Í´[ãÑÿo3g›76S%Ý*–®œÝøeC³i—kbêÚÛ²‹äøÓ)ÇÐÁÉg9 ä Û–@FSm +… +’¹šÞϨRYají·8âˆ6Žì¦¦øzRžDŒÇ¤v­‡4/Œ'þWÓét8L†'ì5cÐ𘂥ù‡‡ãéú€Ê¨`líiS Z„3¹áøàE¬û@S‘Ê+S£¤NëhcPÑ\#m<Õì’9Ö!;.¬¨²ëùOG>ÞÍ(WA-”×p‰´S:ð­¼·™Q ÈÆ„‚4@ Ä©òÜiï‡Éâɘ‹ŒîáxÙ:8vÔXS¦VV*g–&“¤ú8¿—(Ù Ó<–åhtü «×-M‰ j.&Üé̺ÜSn¹nÔ8»6¹î%ʇ»2rn^Fhi]£’jßÎè‹©sð 1]³\7Þ@eÔ¨/^†51€ÜÀ̵Éø™êW·R/Â&­sé²&ý¬ªñ㽈!pª)wäèM´QÌ.…|¹ïzyƦ㘴H½D:ÑWh‡Ý®†Ž’D„»(´ ¬à4eêΕÖ>µ }=ZEªç¿Ãxá¬Ê30ûë;«¤ë¶Ò`)8,ÞXzºnä µ~¥O ñ®P?ý +­‚pQéùtú{«ÑCè2¼U#°Hõ˜*âCN‡Âw Òņ'%z‰ãÛa£ý¾œ×€´ç9¥ÞsºgRàŒ'À‘dä8£]y@™7½3ïr>ÜX÷´r¶mѳtK}"•‚x,[ϦñE¨Ñ¾$ûBƒ"#oVµ´Ÿ°Ë^ ‡t%l#„@0k ŠtÀiõ>7¡®)«²Cû‘'ã‚È›Þàg*å^Pç}ûÉ((³6ÎÖWSâ/…¨Ön쀿£=9CP}³a,Û½T·tSHÊÕ@^ͽÈôD4IÇ»ÔߋƬxz +澺9žÒT@½e©ìˆì[ ô¢~£ýòTó Àˆ˜ýyùxM·÷¯·¿¾“*È4JÚNþYq_å›Ðé׻ᚆʦ°Ì žÆ{‰mó—)á tè…l#"œ©í6ŠƒO©6ÖG¨«ý<»~”ø{ïðy]½R²Ú·Üƒß[ã8‹žâ\lyV(}ôê’¶\Ì°N,4Hë°ˆw"Áór)_:y)@1”¡jkž®nRM™{¼ñGƒñÏ„ª ¼cLûË#BE +šô‹3¯¢(Ú²l}P·™‹qé$J\•â ÓI8Ò¤Ìr©yU=Pß.¾aõî=§ÁTz`9b]ªÏ õð?(¡ïgœ"b©7H¦=:Žã6ËpKxÂ2•¶ˆµ§çœï8q}Á•Bn—IŸ–û7"ÔÉ +5ÀU| &cé¡ …r*±çbl@„I²û3G {õ(y)°0åø–ăý-íõlm¿«ý@4ëEÀý6ƦŸ©jÑߘx3X«’/ñ1öÞ¯¸Ã¤*éÊ8>ÃoS.&tvþsü½Åìòöê’œ•"~´n 5\#T†tн08?±®ü£žŸÏÏ. _8}2f#×óƒ¿þF{Üëendstream +endobj +1066 0 obj<>/XObject<<>>>>>>endobj +1067 0 obj<>stream +xXmoã6þž_1p¾dÄk;A^E'qî $Þ\¬Þ¢€€‚–h›Dª¤Ç÷ëïRŠÜq·m[ì69/Ï<ÏÌ( i€‡t1¢ÓsÊʃëäàóÝ Ï(YâÍù%þ'§A0P’öOû£>%kI÷ÿü:Oæ´T…ü”üŽkg4†k'£ \;JÖÊù÷„¿׈¢ØRa2QËœ”¦‡9}S:7G³„Îú2–Fì +/ƒMçmÝ|IÓoÓÙ,IÓù¯ódòp:JÓÛ§é¿'Oó4$7ïc8"¡s~4 “!bæp2£k¡´£áOiœçV:Ç'ý£Rdk¥%iQJŽ u¶F¤•PÖ…¤?ÕbðÑ5CB•´KcK¤&ëëé×¹7û!¢Úp¢£U¥ô + (©Q¿==:ïsŽ¦5ÕÛJe-ŒæÙQ¡žå—.¨«ü³pžÚéÆT[«VëšÒ£,ýDë«KzP™5Î,k¼¶Uçl8è_²³·Ë]ÈŸƒ¨*þäDY!ã}F Ü@n±õÀî<¡ÜŽn +Ρ´ÈD=˜i)¹yü<}DЮÙ3ÓŽ4W—±›±ç!f_žwdh‘wd–{‘`Šaff¦¬šZZ&†‹Ú~˱ú“}¢ (EHÖnÉ­MSIϲªÉhð,ËÕ‹Ê¡ ”RËh¼âö¨²3V" jbV/ÁÔñM©UQ˜Í[¢gÆB•A,`ß~²ô?;ð‰¨Í]€NVÂzŃ ¢¦B +„h 3W!t–|-ÁSï°GÙÇ3ØÚçVRKëuày†2åR›Zzº(–`&B-ל /åkø•ÑñB.$`K?E‹ ì]¿c”D­ÆFÕë=¹Ýgô ´XÝ£þkËp*ʵqu<,¦mhVf¹”6´±Pc®›|­¥vœ˜oÜ÷>J6¸ûáãÓä'n¿>|ù)7%ºèÏ?8:ÝÜÿr;¡Ÿ8l–Ã.\Oþ1ý6¾O&O³qò£H&³Û?{6M¯Z£Ýh£O*«tíiÞÑŒ\SUÆÖé§XF±çtçÆÖ„Þ¶2ÇÜBìêÎ?½qÚQaîEA™{£Öùbh 7ÚFeÁK‘{±ã ¿ö“*C‘}ºÞBKÑõ±¿¦˜,6nrÙ™<¦ESóq ;ËÛhŒj±„ )ßÂÊ‚34 +4Ö-…*Ü_É>hm~^œOïpŸa=4†U@J8g2….ÂiG h½Y DE›‘™ZªÐ;ör¿áÙ%eµ£µÙ|×òÂbIÜ ³BöøéEeÀx!×âÅï aR!§eæ¾Ã[ƒéPŽ†Í™³ôÂo©æ¡o0$§cR5\-á× ÌÐ@ä9‰¨}fe?~ÊøiÒ!áGx±[× +¤DQc\­ÖìÑSl‰Ú7Ñî7š6kØ¿ã%[QSè¯3eî ·e}õÿ·Ÿ´"ÂB€)¹=Ýݼ-[Æ×I\ÒÄ{φù\0ž½Sv]Ë—Ü‹‚±Øx–ùiñŠ[ô÷Z£°Y‚~™Ýœ,댑:ܘ8¾DAΘܢPÿÁ¥vR„Õ  Ü’y¹Å[Þ,<=¥bNØ%ÓøþÛøWl¦û„ª¬ÁF"a£ÛGyåb|÷ö W<‰Ëâ€ZÐlùj`^WÁVyñ²ñѽÏÔ\YhR½|gš"Å<÷]ˆsèåhU³(TÖãÕŸÊ×°–úqNÞ€ +/£‘ß Ñ<ñŠ7•%õfMQÌ¡9´½9ûrÞ‰±9’dt²°Ñ¶¼6F Á;P±R„wõtMÆò^Âå¶ÅêYn¹Z†¿¨á4mݧ©ÛºZ–iš5XìtÍ«®5…“5^µm+M ¡K¡C¥Ò”w´R¢Ý»4ÕpíB¶ÙøJÒ"må +HY„;WøÀà@?z+G[æÒ ®ŽW7ša‚¢†5Á«òðÝ€µz»AIÐÔYM(xQ+þ,鈵‹}pq»æª @+kš +JªÍJr¬}c¾;ævõ—²¢Éã2Ø yOHo–]x§#Þ)ÍKï1ýÿUÆa£Ðœ€,2›B§b ªmðÙà@®7"Ðþ‡+ëæÆ)Þ0ù½†lÛ£løóÝeû­><¿è.Oéü +ŸîùÑ|üp=¦Gk~‡¬éÖd cí ñ½“îøÉÅ¿cÈ¿÷;†³‹³þÅù%~1s£_Ÿ$ÿ:ø/¿ä¿endstream +endobj +1068 0 obj<>/XObject<<>>>>>>endobj +1069 0 obj<>stream +x•WÛnÛ8}ÏW ’‡MD¾ÖN +ìC.î®ÄÍÆî,h‰ŽÙH¤*Jvò÷{†”|C´›&H`SäpæÌ™3£ŸGjã·CÃ.õ¥Gí Mý^;èRÿbˆÏ]üå’îA¯×}ûAç² O\ÏŽZŸÛtI³î\àCL°ßnÓ,:¥êç„°ý¢5iSˆBM…!›ÉH-^IÐR¾ÐJ$%\09¾k£Ï³\éBé'Š–"Q!óàÃìÇQ›Î;íà·l7­ÓlÉ“ĬÙ|i–HRIRÚ"…´$’„Ì‚Š¥´ +©-¼³ŸšL6­S§Ý >ö@t9tAçK¥M?<<ŽèäöËý'-‹µÉŸÙ!:ÁzÊM™ýféöæÆq Û<Y¦E*ÉáÚéo.Úùpâ a3Y™¯dþžº=¶‘™¬LD¾cÎÇ°·`M™Gòlw6‰‰DbóÕŽ-‡ÏÎw†FÆ2v„@vHé()cÙ@Ó:\þOþ¹º›'W³QóÆñäæîë툆aíafå>/XObject<<>>>>>>endobj +1071 0 obj<>stream +xXËnÛ8Ýç+.ºrG~ÄuÒf‘L4Àô1pÝdCI´ÅF"U‘Šã¿ŸsIJV&AÒÀ|Ü×9ç^ö×Ù‚æø^Ðå’.Ö”UgódNëÕ"YÑêê/ñÓHÚú…üÉè󛇳ÙÝœ>ÒÃ7­¯ðGN¸e>§‡lBñk¯´%ÛÖµiýI_Íû‡Ÿgs:_Ì“+í“ͳl°íåå%üð™ÙÝŠ‹`ì|¹æ³ûBÂ𸌋“Á1¾âõÑ )K®tÿDž7ÒZ2[ÿÉû¯²Þ$úH‹Ëhïb…¼ÀâE²Jè³ÙSÚ˜½UzGÛVgN)tN–œ¡\Ö¥9u"-%/ð…z9×`]êÜ/öµþº¨RñÚg>w™ø€¯‘J'œÌI¤æYNéˆ~(êDV(--Š¶SÖ!ˆS5ôUº›ûoÒ¢ÂâãD%2ùÃGOøÚš†$®ˆž..’%Ì Q™$w¨%)M¦–àxß“Ñì ÊÚÖ ]—ÖLIŒä\Ë‘9ª¤+LNéö…Ê +x€R°SÑápíȼOpº.\Àö\"® +QÆ{p%â„çÚ8Ò Y©¤v³PQ*àY*¥¦zÆoAƒrlF\Láç«ûÿþòùÛæaC¥1OmÍîHÍ%̧ìÚÒ-ÄifÁYS¶œ±W'¤Ë<ʸ¸ëŠ{íCÈ„•lÈæè|ÜÚ ý%Q–o3ZÚK,á_Ÿ×à(>Ç%¹Ñ’sÿïí÷Q¸ ÈaÔ%ôÀ%QðëkÓ»\s5K“‰ŒNµtSjuÉêrƒó­Eu°·{O;îǶcª¥MÑÛ°°Êµ`–<¨n̳Êá„x6@$Ë|‰´ QWâ€Js!2•–‡Q´Jÿ”Hé' Âbw!«Œ“Cj!Ò½iž@ž@RNû¸Mhm òÕ¢šÐÇ÷ãÒþð…|:F§jz·´W¨$6pÅeÅâ´öìÞ+Ç$’Cdtv;ön8£µÈž¤³” ͉iLëjåŠÖ†ã@kH¤ã°ä¾‘ȃJÇã1%¶³Øø¶mXÙ/¯ -Àòœ É ƒ{i—®–gΠŠoÜQÉ­@˜5@ø®{â<‡s®Ý½¦ °#½µgsõæííª<Ù#wòG>n Ü}ßì€WíuÎËûkòq5±â›¡`l9ûÛà]{4wÍD?ÏïiNäc&Ÿ­Ä]:@ëV@ÒpØ1§X‡q›_ÃútÖ¿ô‡·CÐÌçn\=Ù«74ò|ܾÙ`ÞOßÜN1,5C†a3wáÅ«ºþhŒ—»ãÀj‘ïN2âhvíu7Dýûâ¨2endstream -endobj -1067 0 obj -1836 -endobj -1068 0 obj<>>>/Annots 316 0 R>>endobj -1069 0 obj<>stream -xUÛŽÛ6}÷WÌ£Ä2IɺX ¾nd“M¬¢Š>Ð-Ë+‰*Eaãý÷%ßÂl·k²ˆÎåÌÌ™?>®I9˜ÇƒU< NÂõ¥2<puxa€ßÌ ”€*˜D‘ãŸDQèx½¡=\^hi¼&A¼C¯>z‰ÓNL N†õsú‘7z#ô(Á'ˆ(óÞŇÅxP{XÈLVq^Š)K$·‘èEÁ›f - /·|–$²­´¥×æé²V4šY’§.?¬ATZQ¤ mŒh+õ4jßBƒÚ)Բɿ°‚ÅÄ (š©‰ê¦d#6Áê¢×´šâx—%\i¡Þƒlïj!ëB¼O“»ºàyuÝ·T™•Ú+%Lóï?qSß{¡x‘¢ó`Û(1Àg©¾É„E„—ÎWËU´ZÏfKwù„zÄ[­¬«µÊK®Ž÷J¶õ‡%¢ÏµT¾ë¤[t^Ó»…ÕÒ{cÇ´P×´þNÔ±ÖÿÌë&áק¿°Ÿ,»}'÷%øQô©-·BM»Ë•Ë÷*¼2Ë«Í^ÅÆÛ¼oy³·<¼©¿³<=‡Aˆâmãö-0×Nè2G¶`/K±ÌƒTGLƜdzÑ"“ãSûZ™½0{7 „Ò‡¶ÑçÑüOš¨ôµ–a.CB=Ÿø‹åŒE~Ì<[•ºw½è¦#^¤YÊ.\Ê[;’E*¯# 8{;dlú½åNê9È°e‰sߘ„z{'ú¥†ƒ¿Þ˜ëⳉaÓ\á*`cèÿJ2èfB-7…à€’çð¢€ää£Ì¸J Íè=rÐÏŸ?ƒ–Ð!{áÿ. -\ÃPêøS71Ι .Zݾ0Z@l¬¥2i»´à™7€Ì¤¡­S®EŠ.εs{:TbW`±;¢Û˜ÌaŽ‹v¡;Wd€±Ó;-´ïOêoúkÃ*ƒ{£Ã¨£,Õ—Á¿¼å^endstream -endobj -1070 0 obj -860 -endobj -1071 0 obj<>>>>>endobj -1072 0 obj<>stream -xWMoÛF½ûW |± ÈŒ¤(¶“[œ´€‘SXEuQ,É¥´ ¹Ëî’Rôïûf–¤$ª@QìÝ™7oÞ¼Yýy1£)þÌè~Noï(«.Wo~|Oó)­ -üæîþV9M“é?É®?mTÝhO³w =Uµw[SêÝ.»&c)¨*U7«?$Êl£Ü¾%sĹƵYBÏ[í·FïÈÃÝxeA³Ywe~Ï^¾<’ÕÍÎùoœ€š\RTél£¬ ¥{ÚmL¶¡¬4Ú62eIe™|®4¡áD•Ê6Æâ*@ª>æ„ë”ngo#Âàn3U–¨êRÊÒà2!ZmLˆÑ2gel8Äl6ª!å5y­ò=5 ÐT˜R“²ùçÝ؆—hr¦ÙhÏ…å`îL¼„#=ØZào(w`]ƒZ²²ÍõH$HìUCYëñ¡)÷¤RàªÜ €³¬ -ß‚Ô¨cGbÙ„Š7Zm B´;PeIÜ•Žl\úälaÖ­Wq–©æ_šØ¨@©ÖvT': LîdT€à*M/,ÎäÉmÐÌzB%Id~—@Yùõc/¼ªåóŠX(d -² -á¼®lUá]EKÝ<>=¿È/¥O_Iå9Žð9Z´6ãK#Ä™›ØLèç ¹NE¿<-_:F…+³Þ€*sðæ` ¤+ƒÐÆ#8¸Üƒye¿Þƒ% &1:€yC¸Ê5Ù×LMßÑUÊò20¿7ûZC. š9GŸD²<)L[ªG9»A‹·{r,UÌœ‚ê~D¯ôå‡Õl‚律¤ÅÃ=>ÏñCQô®ÒûÁâ]làÁW` ó„†~†¶®g}ʹ;ˆ^¬ÛQÑ– ¾»ÁuÂ8–´TèÏD1Û*Íy>¹yª Žx´½“ù‡Ö]ÍT±eŒèáv†*Mp¼ˆCþzôág¯×ï^o^oÆzúŽö¿{r°›~æ*Ø\y”Hyí][ @ΨRSšfçEJ‡ºzªrWqÓK·â\®0dÞÔ0GTÊ„©­2%Û(zòÏÏ_>>-“æ{#á+‡¾ËŠ9Éð/¥1*ëêë.u•I_Î+”6XÔ—(.'C¡ -2gÄc<ª­<'Æs‡ðF˜áà÷ý¬r4$}‚]ù¼Ã±Ï‘ ì–=Œ!ÓŠŸïa½hˆa ñL¡Ž=a—Æç'à‘b¢¤¥«{×ú!#|ïÔRÆ/yÞ…Ü£°qm™ËøÝtÞ‰²Óø”ø±¤$ -[³(™ÍRFš%9ÖúrEŸE["ÐX£ç¼NˆU-¯Z‹AÔØð´QàÎYÝ g¤úl ±y‹â' n­|^ò -‡Ýì68}Gêr5éªå9ÌI‡O b -ÝË=€›4ÒP·”Ç|ÿz \Œ‚ìòÐ󾃅È- ¥-/½çýl5¿B”—'A¨uf -ÃÏ Y§½“7~…P—«/ò¬9K/ -:= Uãyd¾zǵ:±ñ m·Æ;ËKcDÚ‹•Æ3ó‘gŠ;òZæ–³fYBC¢«p²3UG×2šß m”TŒ·Q5dÿ™”uÅ5ÉEþO´òÈå1„ßÆ]]9Zc^úÁ S^ \ŽÕqeûÖÛЪ26V©?Ó—~9Èö²[çûbØHÖ­ˆ~0ÜíòÓEµÂþsÅ}\!²«x|嵄å×gŽsuGÊø5MÐ%Ö¦f(ž[¡òp…6ÅK››ÄòuéÌÈÄêâ~d£“6€‘\Â_µVX»¢ºõµÃëêÒX‡‡•fÝá>>>>>endobj -1075 0 obj<>stream -xWÁrÛ6½û+v<©=#1¦$[v.ØI'>Äucµ¹è’ ˆ˜$”¢¿ï۩Ȭ›ig$Àî¾÷ö-øí$¦ üi9£ù¥ÕÉíêäÍï7/h•ãÉÕ5>dt]\\Ð*=‹/£yD­MJ]Q«-;ol}¾úŠ} Šã°o:[bßÙ}NÎVÚ¦ÞPfµ«õ´³í3ùB×TØFç]Yîù+•vÕUB¹)5íLYR¡Ë†ö¶#ߪôìjYÙ„øѪݓ¢L'݆S¸ i¸â/j”€”‘bÖ†³¢Lù¨_5»ŠÙ³‡Cl““ñ/AâœQþ„óªWØ®ÌÓhRà¼%¿o¸MN·[ÝR­*­Ïôæ-M³Îv^«ŒƒO3š­Ï'£ø²ùG>gz+ÀNúèFzÐ;‚|ØAu¡bxj»ƒ^ZªÐz¨óY³gXTŽ^M=¾ˆ´Ð+í(0:Oe©bù @  Ru¸·neñ‹P82 -ÉB¬µÎt6&qŘ`] ²^2H\”Áövb°êG -CXäQ)÷ÌÎtÿH}6ÌÄ®µÁúÌ5:5¹ÑcwÆ©áFÍ™¬Ó!TâªD(^Ÿ3V'pnZÌâèš×K|žáæc£Ÿ__~Ñ-{ ËR¥­u°¾.AêŽÏ~Åí¿ ÉµºÔ@“|RU¢(Žn¢x¹>SeS¨X¨P‰Ýêõy¿ €W%,¸®IÂ1A®®ÅV`Jø⺦±­8ôˆáV7¥I•hƒÕömý"mJ`™j L*H-µ¸†.‚Ä]èkÉœ„,TZŒ€nÞ6XŒt‘ëÝ$Ó.mM +§Ì6Å}–kå;€Þ5,¶Ìä¹– ƒÜó‡c—Xñ^ý²Ñš³¦ÕÝ㈦§Z1åôÊEš”!„‡´¶£ÝÁ\’a‰9›ç&-Î'Txb=XíŸÈ0anƒ®Âý #Æz¸dÈu¯Í|Á‹>Ú?Š©°]òp¢Çå…ïR±WØ`ÝS:Zö¼0!&DÌü0ŽCBN ìé ®ð1º¹œ>?¬Æ:mÁ¬Oé0é™÷#5B^à¾hc¶<+E ÷¤ÿñ=*-2a›Ç/1£q‹ÄóØl:t,ßHÐÍ,$|s)Æ„OÈe€4þ&ro¸†7ºõð³ ÁÙ54$ r°t2(…"Î&‡ÜûdäõÓ#¾œáFýóéÇ×r}ñ¢°ˆâˆ> ùâOÇÜkcJ%Ûß8³WæÉÝÑÌù±0(¾ò×G¿fªNõ„/v^™šO­ÐT†/œ•Ýòw8¢gÏ¿ç›t¯žA×'Ã)ÙÜpqpû·Î½V¸bT\ͤµdZHÏô3;Ùôú ÷Ä ¡RmxžÁä=ßøN¡át˜/F¡YgaTÂLd„NzMrÕH#B}ÿ%¿$ z.‡¾_`îp»2,5Œ Ö‹¸<œÄ²;zH¹î_éâ«eãu0¯-Oï>ݾã÷À¯ìºïmÚUxsó¾iX>]ÎðÖ˜ýô­q±\àr"Ënæ¼²ûóä7!Çuendstream -endobj -1076 0 obj -1726 -endobj -1077 0 obj<>>>>>endobj -1078 0 obj<>stream -x­X[oâ8~ï¯8o¥` ·G:‘*m;³m¥}AZ™`Š§!fl§lWýñû_BЕV RpâãsýÎ%ü:Êèߌ.4<§|ytýtôõéè´yI›‹yÆÍ)]]õ4º¼Àòâ¼IFÒ¤§t6:ëŸÇìlÐ…-ðÂ.Ô0úü Œèi¡çò4óÛ§ô”wèß?“ÎÍÝõäääéçÑ)õ2¨Ûï³?ÇV׉%Ö_âË›Æã¯1£÷DIÍesÝ  ÷ƒ¼zÿísß–:¶š–ÒÁ£û?‡µú­>í?Ô~êIªóþÁ'ºrÒìÓ#î ÀõýaðŸþ7¶Ô6¦}ØCžMô/kßøħÃÍ£]6‡£O&Øììx=@®ymÒs®QY/¶Hv4½pÖàŠŒÁ•s?užðí0æ1­°JIÅÛ7´£i´²ñ3éüq{ÿRøó·eƒ^F½Á9Ê ²ù‹.­²N•Ï¤ç4¤àgK“NÖ¥A—†“ÊuYÊÜÉMßÈ­5=&zÕÃ4=r i%Í4•ÚÑJXKS£Å,ÖÙ>ÑcL›¤õ0È_Kg´ùB•Ò’.I¹nÔ‚ÄÛ£z»Þ¶6ÀlmµDÔ†5¡¥^ÊÒa)‰¢hI ºÖRŠ+Œœ«çÊÀJ§i*I•ž‘àºÖæåV¯`2K°j¹*T®œ‚ÎV¼ÈÉ T¸ V/°$ø²%:#e›Â`à^ -H»ƒ§Ð×F¯-~'%ÁT9Z«¢À‘¢NzàXPÀÙÚâZǦ.-áe;ò#‘¯*ÊûË‹Ñp“©O»^2ò*€„Êнt×·ß[2K8з€-ý¸ ø~c›¤Áž­xLµfÄU«.ÉèSª·uÜ|`˜3«‹Ъ¹dI‚áÌ@p #eK¥ò j>>>>>endobj -1081 0 obj<>stream -xíWQoâ8~çWÌc{Jz:¥=UwÛö¶¬úR ™Ä,`wãÔûõ÷í$4ju½}:é$ljí™oÆ3ßØßZõðhRHÑ®5·®æ­^w<¦ºÉÖxéQ¢ŒGÜŽº!e’V˜Šõ£AwìG‚ó°;¨‡ƒaµ(y²]5èCwÕ@ÇÙõ€‚€æ+@ŽG4íxæщˆãLCÂ¥"—1Ò<¡<‘t+óéÍÝ)±“DwŸÿíóÝ—û_ƒé/]¢y’7tÚשÉeÓòÅ.žéHÕéük«G ³æñÉNðZfú`ð|:¹ —O§µÊÇ›ÛÂУj´VüLsb%K­°ë…†C8BïT¬ábJ¹V{i–^¡†zHÍåvkÅç‰È ±Ý[‰msòJg cL±T2§-6RÅ©Z“ OÖĉRº®T9=‹hƒ‰0@ЗÙ==ë,§ ?ö]ºD*2/*J2­Ò¿¤q>ÄåKCo¬&lσõÔ•*v!ó¶ÜgÛâ¶Á£¢©w|®-bö+VY£½Óy¯­C¬/šÅR9tX³ôØnrÓU™Œdº‡žò¾? ÜD‰Œ‹-¦Š†ªÚ"O™üVH?iVÅ»½Ø8ça ›¬l|iDpCT Cb­¤àB¶ZÓP½Õzƒ¤ŸyäìºGœ<uÂsrnë©ú9Ç–n&úrK±ÈwÓŽýU+ˆÜßâ;÷kœž ^ÄùR¿á}ÒævjÛKÛÎl{Õ¦†´ã…oö‘D“§“ŸžN!ùTw/ëîÌv½ä0èÙ6‡3¬…Út¬_Yã„PÛ2Îp1û×ø`m‰&×Ý -_°pø ?X\½µ_c»í/fõ\Ú·PûjÁP1£i°M<Ÿ¤D§‘°Á‡ ßÙXSZuD‘':Ksñ^Z¶4–¾jJîpX =N˜@BÏÈðœ -¤¤é ç{ª8nÓŒÀ9mðL×ÉRg‰Ö1!C„©Î@J‡‰m¤l$¸á©KäG»t¾§f§­’C}/!g9Zm™ã\ê8¦°‚"}(µ7©y0\= §/ó42VîAŠLH\EE†švµÑA`p÷ÑØoPð6m‚¢‚ýz:<2©2Íóêqæ×…çm&³j‚­…µhöœå焆jØ•¥ ³\Ð&¡b¬Ð¶—n¢°¢*} —º£/Á6×yõ>DÑVÝÐùÊœŠº|ý`®Š@7Ž/JÿyZ>Ný7ûÌ%Ó€ên%šÃ ÀKþß‘bðaW~WDõa-ß]Åþã¤^RòÛ¤Žƒ\ÚžÒM¡– ­¶¯$Gôón¯ë sPئe‘ƒžsê7Yþ:UPþÒ¶ÄøÞáÙ×'T&*.øÔÏ% -¼Gb»Â?qøêîÀè¬$;SÔ‹b—ÃUÓŸj=1ƒu=VêX^¶Gr\IDŒò†"-.]ÁJi£$U|0ÍšŒ›ÉÞ£f¡d™>Ñ«ŒáJõŠ‹-¦Šœ%ËceE›¯ùìzìï¨ÁpØ hxáƒøaòi:¡ûL•QŽëLTðÊ^ -8":Áp„éQˆël|œwû]ž½Ü↛­Þ|à©{›¶Ó.Îù.ä¶þQVÜendstream -endobj -1082 0 obj -1265 -endobj -1083 0 obj<>>>>>endobj -1084 0 obj<>stream -x½WÛnÛF}÷W ò§°Q²%;@ رä!J[ -Š¦0VäRÚ„äªÜ¥]õë{fv)ÒtÓô4Fhr¹œË™9gÖ¿%4ÁOB‹)Íæ”–GW«£›ÕÑd|~NÝ¥ÞàaBg‹s\Oϸ&S^©5åü îaçpÁþ—o&tA«¶ç°µÊäõ„Vé1}éßrvwùáø«/N·WÝíëîöZn_¬>Mh4MÆs¸8¾mÖ•öÓÎþrzwÕ=áùF±*××r½ŽV$ÌVúüéý2éâKºø’»C|É]ˆö“»›~¨ßÉaÖE ¯»'€Ë ÈÊ•AÀŽÿ„“ìk‹Žªu·¨§êa+èú^׎Œß’"ùTîuM~«KRhÝÊV#Õø­­WÞÜcE•ÚÙÔË7§”$ÜÀ£ 6O¥ÁöUº­me~Ç~[9Zkÿ uÅ6)³¥2•Ê±—um~«*£Â¦ª¼àЊ‚R[yS5š¼%›¦M}BëÆ·0Í‚[¿5ŽÜÖ6EHT¶Ç/å59ã Gg:ÌǧíÛœ4ÒGµm8¦ï²¸N)W¦ptn‹Â>˜j‘^±{ÈÁÁÐ’a!›#ÚrÇ–ðP‘VéÎ3ÍoS©4ÕΙu(Œ­?Q^«M©+ï(x@ü “ÇQŽx”¤[X„£+R l¼v'°-.Z«•6›íÚ6õÖÚŒ¨0λ1±ª–DÜ’°„•C*—Þër‡h€7°¯têùá»A]®R(†Lj#q„N UÖsUj]Ú{ rÉk[þEäŸ |ú4pÓV¨;TÑiãQ‚PG_?¾]Þš r>–¶*ö$íÃåAΡXqŸTÔø§¥àÎu¢«È~Oã^ #ãlDÐí*KÑù´Ôþêíû[˜`GÃT­Ð":ϸú9SšBv€™ß*Neµâ-Ê!Óõ!³®Üm¿Ï’̯ Í.Ðó0­¦½YõòÍ%àGŽÁ7›3QºÑ”œÏÆt«=8¹¡f‡=,9ÌN˜h ¦ÙMà˜¢[U®º;Ý¢·™iøÚTt€–+Xåz^—jÏÅpÚ‹@ÒwÅpYyÍ j„^”´· • J¡²LZ¯ã¸Ýq-bÓ+×cpcмŽ -9] B¨it1püªeâϛ®Uá~Á©XmÝœ}Àê,jhO” 5вf·³µ§¯i¯¥åÃõë¨,z!`»«õ½±°7_Œ“m' ìT ™b™Ët®šBx ó€ÜaP¶ -¯ª=Ù"Ã6žÑü Éà €à«ú d Ë°‡þo@%×l6Bœ‰íf·©¤‰qý×P„éDpárO…fžpá±4ðÜ%CÏ+ûœË¢0'°kFTÔw¡çâ¸{öüã/A~ü,(Ä'­¹ãY“„~ì·Og>oðR×HZ+¢*O $B(¶¤Ãle‰de8¦~Biâp‹l°,Uï—7pÂÍ"ÄA¯--߯Zäè_¤û˜–MŪ:ˆ:”¿õ_¶"i´á »ƒ>¥7* ¼PϘ7¯&Õ4Âzm¹Ä’Ù´áñ)^°Ì4fgÁm½´˜þ"–=™ËAk0_­w…Iù €df[D€Á€ò†ÉÏX ܶÈð7Ja+9ú·8HW÷ŒàÒ¥£w&­­³¹‡ç¼AÓÂD›Elã6$°oàwW[oS‹ÃI(àñŠsQ è -Ä›Ôì8Ÿp&€‡ž=¡»ugãI$òÆ7¡æPÆ[q6ú&ø{&© -ô͆¾ðáE%[ƒS&ÈÙo©ÇÃ`à.mOrŸQ>ör:ððñ>´”Qã–zö”æÂÈD{êÔŽã1÷ZLñ']vüå¹yº8Å4–Ís¶€)ýÝÑ‘äTËendstream -endobj -1085 0 obj -1519 -endobj -1086 0 obj<>>>>>endobj -1087 0 obj<>stream -x­WÛŽG}߯(íKp0 l¯´ëK´ŠŒ7f¬}ˆóÐ0 Œ=Ó»gLøûœêËÀLXG–bKXà:uªúëÅø;¤éˆ^LhU\Ü%o’‹A6£ã‡Ùà Žøs<›òç¸?&#iÍ7ð3ÌÔ8þü혆CJÖ°>™M)IÝÿ(Yun×¥4Tn%=ÞÏd¥ù†ï[ai)¥¢•VëlS™ÒAWTT¶$©,~ÀQ’Ès*Äj›)ii'L™­²(3µ!­œY%˽6_ž%Ÿ/Ô¾èà¿#`àÄö>+·î´HS#­%½Æ×ÌžÕ'º_sæôWÂ!A Q,E ¤Kë aeÎËoã Ý?PtèOÓåƒÉ -aÞÅ¡q {2O}L’._iU·,?%óÞÍܧۻy0ºÔ+ÛÞMòê¡wãàÓLäzc9ÆÇL¥zoéúŠ42 ßæ ÒM4•™ˆ–+ŸD(—î$\³˜HÑa»Öy®÷\šå¢Öq÷ÏM®—"ÿ ¥_•Š \U[,û\¡–o@‹Jÿ¿>{UÓª7š€‚(,ìÛÈ¢—t£D!9¯c„¿ú«GF¯n%Xqî -Y‚"©¯ATo˜YÒL6‘}f¥=ñÛ‰Ä@çº vDs¼û¸Hhþ>¡»7´x“ -ÕP0¯wÚ(‚tÀ]ÓŠ§…B’ùºf2€*i©÷/› («ÝN›’^ÒAÚ&tKÒ;W2¡|…é¼ ßÓ¡-üF¹"U,ÓVÌ{n¦µÈrfŒ-Ñãm(W8ni´:í´µÙ@Ù•TÂdÚÒÕ@ª£jG+ƒ#d«%´–ìx}‚ l 0©,áytöN+ÀhGPÐVQ\–ØT×WÝ  XüužDáà걦!¥ËS}úýb©srjæµ.à‘™ 4¼üG*uú|=„h%‹h½ëªàÆÀ‹Y†Á¸Yðüí5 Ñ—¬üãÁ¸?khÿðª?éÓâò]¨_Ðãû¿ÿöáýLJ&í€ÂˆgHòÄü}ª O–£žð‚Ë`ÕR¶.~Ú>½i4ƒ83Y¨ÂV’Ànó|ì! Æ‚`"·˜\F®¥1 ÔÇÁœk7Îx¹Ð{y…Ý›“I¥i¡bòz,ÑInÏx -· ²Ç‚e@×,îCdzå÷/ -šÙÖèðÃS‚å;žl¤ø½ƒô_è×ïÆÔÏ‘tŽÅerŘ!=wâßO¦uÒùï«K™{`ê}­2#ÛÝ6——]71B±O0NkÂJÅ/L^Vû(cn1X¡i±éùhÀÙ„¾o×%­» u E:n"â®2–òZžY´µ%·zÅ=„zr~êÔ³œ±m/%K‚¦ ZÐȥƘCÑ4B㹧º²gåOÖMY[Amm´N)K¥à‹„ÐÆ`rïV=j(¾;Z·Äüÿ%ü,¼8†“iH“ë§ÑâöÝÝ-F³þŒG Æýªb-Å;T+Ž®ç÷¦#¼yÓÎì=ã)oMîÚõ”maãúãâcŠ -Oendstream -endobj -1088 0 obj -1553 -endobj -1089 0 obj<>>>>>endobj -1090 0 obj<>stream -x½WÛnã6}÷W ò”jÇv|KшsiýK×ö¡ÛJ¢lm$1©þûž!)EVât¢M'¶†3Ã3sÎLþêhˆïÍÇt>£(ï-ƒÞMÐ z})7x3¤ñøb0¦ÉbŽ¿'“Á„JI lñn -ãwŸÌ¦çƒÙ›'ˆ‚cݼ ÄÙí.(HÎ áƒØ>R’ÿŠU.Ò‚r¡,ég*Ô§à[oHýÇâÆ0S‘È^íöR1|.e"ËRÆßc¬4eòEfˆ<›²Ã³Û FœsDýñ ð ‰k…Ä ÅŠÌ6Õ”¨’r¬ÌV¤ -Ik‘‡‚´,_p UÑ–tÒü@°6[¹§]še´%þ0[g¢ðøÔn›âLÚ\ëÜ…6ŠB$é°T;„xè„ `wÒ6<¡gQŠ\2º"ËpÈç -¿"2$4‰÷=Yg]8O(•~EߧYäaLð h" —>?’™ŒL -Dð£(MõL¢€)'Z£ßNRKS§¸M7€©P~i†^JM]vXoU•Å€´€ßý›¸º‹Ð*¡½ªh+^fA÷Ú$Ú¦¨!2ä¬\Õ\4¶Ü¥zË7û  -|®°n#¸ŒS-ÂLvòt’”*‡§Håi±9‚<…{t’1lÁ %ŠëÆïÔ3C© wål2ŠìOX{Œþ¼Xçá REBIšIú‘Ÿ¶xÙO]çü[B%n·>"yÝ°r¢V¸XšÆL!NV¥ 8g·4Bß'P¼Épa/ò*1£é`> µG}·dÎ0ŽÜ+týpw¹ºwpÔœ‡îŒçÌ#ß%‘Dó™6Ã5÷ƒ /i3¡ÐC×NÆš>È+m¬d Ä-pÞ²®S¦C!¬éMË=Å2U9ˆøX¦¹(÷uä+U˜š³:áz.£܇¨€ûºQÖZYÐBÞÊËoMZö`ÙƧ|Í™\¿b£Ž…¥O”&Ý«•r“²–£Æçªh÷Ò,Wk²©~=uuùe´üéë'§”_V÷kÔ ^ELÊö8=^_u™}‹¬y59]µòÌi°Dƒ£†kɵŠ_–¼¹°ÄãzV"i5õÃ{cZé¨LC Ÿ -¨=±¶½ám[ŸÁâF±‰£{'øòSC÷ÿ˜ïÿïö|¬µØ©÷!® ¦…±63ÇÎY/ïè ¯ïÌ/ò¬ïuÕ¹)0‘:0Ûí =ŸÀ|¨1hfŸhÔ™)ª\[hì’§€©Ðs¶÷ÊÖhÛ&K-» ØIà'{'ð!I ù¶ï÷Ä’TV÷1bsÏÛM$–hîÌ_ihé¢×£áäöáóÕêþWZ_Þ-/)x åM'bðÛ Ý]®ƒ›Ï'Q¸d—`¾ü}ïÅùå2Y>>>>>endobj -1093 0 obj<>stream -xWMoÛF½ûWLur[‘d˶ -ô`£ ` QZX…PÀ—%¹7&wUîÒŠþ}ÞÌ’²´VŠ"ˆmQ»óñæÍ›á¿gcáߘn'tuCy}ö°8ûøyFãkZ¬ðÍÍþ(h4F´ÈÏÇÓáÝ>»&7vM^Õ™¢à(ÓJMµòA7ß`ãšÆãhãrr çË’Ïå®Ö^âiÊ·õºñThܯÕe;R–t¥ó`œ¥Mãrí=µžãŽ*rxóC¢O*/÷Ùùˆ.ÇWà ;ݨüEÊ ÊXOŠl[gº!·¢jTÍ=mK{ïø¬\ê\ÚæšžÏ3£üóÜ/äK×V•êU“±œNâ·á=ì`x¥Ú*ГàÕz  èU7;ªÜöвŒµÏùPo€9úÖ±Ê\‹Ÿvç¬Æ×^;Ç“›!WêüqE;×ÒVÙÞ®nã­RÛhÍ®ÛÀÁ£~ÕÕ€Ö•ËTEn#¨ãž¯³!à[qÈÞ¬K Aì}÷`?†>S x„äÿ–r]]ÓV«Õ ªªƒ à „LBjÈïÀ¥Èëï¹Þ„þ)#˜`Oú_ž?$XÜ&†‚O’(2*/WË5-hiìlzAðµ.Ð|qÿ„îå*\ þWUˆ«˜"Òդǥ¯ÉBZ㻩ۚz¤™í“é4‰ø°zûæZ¡ÛôQ3 |PMh7\?|ê ήtÓ bwýwA“ø;íÈ9ÒtkP ±.4Wä+ä+^A.µÖ$5‹ÕÚ¸ m0`ÎqWs«dÕhu^â9¹$ÄaIHû.iBI9L]òd"Ñ%¶°uÒ—tÙ–ZøƒPøù ( ͦäT3qg‚4š°âÔhÀÉø6³€6C’‚±„0Øg±½!àuåØèƸÂÀBÅ*V$.YŒmå[ S ~_fÎ5¸óQ9%¾Ú1d)åN *­hÐQùøþ ‹½ Ì!|®®µ-À#©KŠª¼ÞòOòŠ&n‡¢Vh”nPHšÜ[]2ªo«ãXHH¢ÛÒU`™º¡?îç€#q¹ÄC0!†Í¦%JÕ•/±‹úšàÉmíÛAº®R‰ÆZ¿RÙ8ïM†`‹¡Y·`Ó.v)æ¤KTOÈôê¸f'A—D{zǽ˜.ÀÄ•ix؈ñXˆ8>Û XîìÆîIã¬]8Ò‰© ž>J¹ûgéÓNîTzJ˜ÓmÐ<ë.F´B³ÅHª!:~àš¹¥ªF«bÇNŸöÆÒûC™J|±(4îÕ[Ñoœäã¾È1}/v Î.FN•Á&ÄRcË0ð4’ÙZVXò­K•ËJŠ[Í“D‹úzžOËÌŽ4W9Œ%= ËF„•èËoÄCKRâ¯_+àè`A’Õ¬"µ:­o‘~®Î1tbz¬OÝN6ÿº•zÞIž˜¡TXš—uãÐNRÙå&ÀòÀ•F>_Ðï² ¤á,e‹[Pô=Hq¹ë·ä~ïëræ"¢Y§[ÊZ×bý„£¼Ïçµ*ÒžAðëC&nN(a…´kLL´Uãê“Z¶€ˆÓ/V\v <ˆKWjÈXZ¸ÍËÆYY?¤_ŠÆÏ&Ð{\Äé#âX¯5äîhÖðéƒí”×OÒ@¿PZ¦f sÜ0ögl ޒކשáíh3‘ì°ZütóJó}##/¶HÈvSáùÜؼj‹½$ð‹âÉ+#•í˜ 5o7Š–ó§î:çÙh )v®ÃÃãק$ef*7lDÑ™ååÇY#ygñxg”ÄL·ðdÃöe×x5âA#Šñ+ûýøù®{±ßÜÇxAœñkÇÓý—‡{ú³qßð¾†þÈ[&-„ÊIû\Æ×·¼Eÿû-òúö,Wf3öaþëì×9ã endstream -endobj -1094 0 obj -1575 -endobj -1095 0 obj<>>>>>endobj -1096 0 obj<>stream -xUMOÛ@¼çW£eFqÇ1-Óþ‹©,å&9ÂyiieÍÎIëh§òœV’*-V¹$oh­tF‚2S¥ÛómÁ% GÊ×eFç/\›ó¬ôæbùÔ‹iŒ¢!º÷&¿å/¹­«VZúˆøÌ8ÛCIýOÃi4æ:µF÷4WR{ÚŠ²”Ú1¬Ä¿&ÏÈð÷5ºÁNe²F¹rðßWŽ„÷²(}(i*Ã7[ã<)€tÐú­ðÍíxG¬•ÎäÁfº—þæöç‚´($ã Å|ñë‡Í£á„£«hÊÞ®/c'ÿJ{I+ã·äD±{ªžh-„q ¸nï„©B@è¯<ÄÞ÷‘Ê©Ñ^¤>LйÛYsÃ5h¶øhå¬J+³zFåODVLé±UkÁ"ŒÙ -½öÐßEY{ÊÊT*Ð9‡×Ê“Ž"Ë P#º·›th]Õ1Z+Ã$}cµ¦ñažwÌuê-ö橹j²jCÖ” :V +÷ž¸í³VcZÍöÄʸÆ:"*,Ñy÷"ïF©ŽÇê5 -xyÏÛ„p’×ûrlù–êÆòß—=M’Y4§ñ|†ÏCüÂÒë:°®(Á¯eã9oþ!¯’I”ÄÝÏMMåyÇE–"»¨Ñ_†)©~‡zX. -CÜìŒ}æXÓ³øŒVÂÁȯ®¢ÇþÚX’ÿDQ"‘?H©3˜ý?^°5_[{Ôy«žå Ë¥5ÐÂEDHPÄ+ñ­À°±¦*Ù©@¢Ç*È‚m㪲4#Q §wp!ÃöÍø^ÿRç2Ó~Ò8ì[È”…Dâ<æ†;£ÏÕ@qM#È8¹úPÑœƒêXlÐ]•{8Ò…µ@¤òÅo¨°¦Í®ÒáM’n•ÁsE{U«“Ú_ káe$Áþäáı'|hÉieXx>Gg‡º32¥Wx1AXW¬",!ÂÛÿU› -ÖDAþ 8¼=ðØŸÀ¬e&½P¹ë’9Màé·Ü=o^ÇÉtñ«/â¡‹ë»›kúeÍ“D"3iUà}'3¨«uYÿÓû0žÎ£ -{Äq#úïÞËü’˜endstream -endobj -1097 0 obj -905 -endobj -1098 0 obj<>>>>>endobj -1099 0 obj<>stream -xWÑnÛ6}ÏWÜ—¡)(–Æé€=,ÁRØ’1—¼Pes¡H•¤¬ùï{.IǶ6 CÑÆ•ÉËsÏ9÷Pù~VÒ JZÎiqCuwv·:»zøLó­Z|s³¼¥UC³b6Óúü~#ú •7=‹®ÔK×Z× SKRÞÒ\ýk”שÆå¢,æ¨rŽMeA÷¶ë…SÞš¼òšÊ2¯œ/yÝj#sq/ݧ ^zZÝ£`)ýbQ­•4¡ Õfð¤ZÚÙ„“ÜN™5¯ò¨ZRaÓÓ(µŽ+ýƺa´3º, £“BëÕ$ö®Ò;»v¢ó6"0|äE'ù«`k«„¤Îú@(Ñ(Ô[¡´¨t\”öƒ)jž'Œo¥›œþ^Ÿ›åNÚÐöcq¢‹Tˆžÿ¸CsÌN‘kÌo -ÞœM<ŒÂDìA’X eðÓÛN† s£Õ›$A+.ÿÒ¾¬s5îÌDzFž6b °–åc' ‡ª!D ÖLÐKA⟬ ×Π鉿¸c•:±KBT|2 c -xkT f ì;¹ôzî‡zCÂÓ£ •ÔëGp2Õ.‰i„ú[¡U3eé‹4ÒÅãN²¤1MÒøÄÛž¼ê ¥8pÁšÀNŒï2’ï¥l -ú -Š£«öv£ïƒ -r“  -¾j…çI‚䆞/H耽ë )OPvGwÝÈ^šÆ“º€Ñ6vÓ†ž%vƒmƒEák ÅaÞÀF%ôMíAz´[ÌÃ#ˆNPæq…>L´ -ÕðšO«'=䱇Yî -&» e(Ú”çDÒhÇl~%?€fä…j½fC¶¢0úd‘œ-x†?SÜe46NNß׌<ÜBãZ÷<— “Äçl‘0¡¸ò}Á4•t;y:9kVK0'P¹šÈ$Ê ªp›Qná÷´>ŠòÛê yI×ókDÊõíŸçøËÓ¼×2Gãâó,í!`‘‘ó‚žzm뷘Ȧ¢7¦çœóó Ín•™’«‡„gÞšreÀ¤ÅXáÄHéi-c vlÆZg; `N[X§§5JÄIJP\¬™ˆ˜ýê‰0ˆ9ÊâsQÞ"613#ÆÚ9LóCdŒ™†V -“88“æ£BÄÊV :\ü uŒ¡¹_Þ¶>>>>>endobj -1102 0 obj<>stream -x•VßOãF~ç¯åå8‰˜$ä¨Ô¸ã*Ô£\K®Rµ¶×ñÛëî®IÓ¿¾ßŒm’øN¢Øëùf¾ã¿O¦4ÁÏ”–3ºXPRžÜ¬NÎ?Ïi:¥U†+‹Ë%­RšD“É„VÉ©×!˜jM!×T+§J´£ŸÞ¯žqìÃë±ñlÍqð´Ð/º˜‘­ ›l<ýLÁ5º½{_äõnŸÛ¦HÉ×Z§”Ø*iœÓU •$Ú{ -–2Sh|Ⱦtš*p_YÚªØÑÖ™t…ÛÎÈ7INÊ“ªëÂ$*[‘×î…±ûG=ƒ˜ÐxzÍèÓ©ÑQw©}>êeªîùÝ~»íÊ÷§{“8ëmè!ËL¢ÛG<½çâ ‹Ân=%…AÜÁ ¬Ó*«œÿQ¢L5±µA‹6ã{Ý–ŒøØíê<Ї«%þÎ/ùï ¿CÖÒvES iû°hÛÚ7]D³è"¢Ì÷]¦6ºçä>ÈxÆ”êÚi K§ß3Ä28}Te¬€³B_d<æŒâ­ªDª{:ms]AŽpLf@ „YG¶ÂÄW¹Á 0!LÛÙ¢ñKƒ9±Þ|G¸-ë¤~ßÇ(¢»Œv¶ÏÚk{Ùí´ñ@+¹ƒ¥tQôJ®ÀZ©vƒúj Éx1ï:ž«‘R”ô®FW^Ø‚¶zÜV*–ZÃÁó  ˆ‚[efÓ}@ÜÓ¦²[Ú®ÀRuç Œ+s¶äYvM CƒL©¥qy‚×8M±YS­ˆ(UÝš²vöE—ì7˜_î¸'Þñ¯ÃÕÜ ¦Ç´u±ՠfÜcÎeSSãHï w¿g õµL‚m €é"„ÙÃgå­Á.|P3±Î5"äC¯Ì/.~è•‹«+‰€#¯À)H,Ôj›”¸8 ÆñL±’YOŠª¦Œ¡t8×E#èF°£ÁúT–é¤mðœT´úø•båA,çžW˜$æAX‰‡*”7 ·¦m«$”j„b -{ÈçÆæHrÎ>ždG2¾wÔÅGÇ(´R¨šS'5~#ËÄŸK†úÖÉOGW$ΙuUÚ†?t,K-ÖÒ4–º‡" àyC†ïoúôðôtÚ½±!ãpAPœ½~úÆæÔÁ]ÜXìÔïL  PnЃ~8nðÅ‹*-¿ØpŠ±^› - bWF\é ƒpq[›ÁY2Iùä ð6·Pk Ú-²Bùéݬò–Fê Ù¤gâæ+ðúaÇZp`½êrAÊøbV¨+˜@±õùçËîUzºXFSZ,'í[êãõýÍ5}uö™3ã“MÞ×¢z®3no/gxYOOÿÿ;ß|q-ñþȇ'3~$TþûÉìÚëendstream -endobj -1103 0 obj -1411 -endobj -1104 0 obj<>>>>>endobj -1105 0 obj<>stream -x…W]OãF}çW\奡oB•öº»ÒJ…nE¤ªU^&ö˜ÌbÏxgÆ„ô×÷Ü;ÎiH`<÷ãÜsÎÜü8Ó_cºšÐÅŒòúävqòáË”ÆcZ”øÏl~E‹‚FÙh4¢E>\¬M ÷¬}¥šÆØGÚ8ÿh¥C¤ÍZ[ŠkM¡ÑºÀk%&<‘²YùMRy®C åñ–©M¥ü­Õ3GBÐ-U&ÆJ“.KÇÓÅ÷“/² Š¾ŽÏáÕ„zê6_Ó£×*jTªÂ¡Ÿu1&³lÊ1(¯Ð¥j«HϪjåüxv1ŸžÑªÅ³ã"^íM­mTÑ8‹:¹QôXpÞ­Ž‚!imð€;wM4µªRè³^ýŒƒ‰\pežtµåRǾTÎÆT|PHCxkè8k؆¨k`g·µÍè¦k€§A³ËKÌ¡g, áä;Wm@õ®åêUU¹°Q­k‡œ­µš¤¼©¶‚ÝçÅ †O³ñC˜Î¯ðû?˜_™¸rMc Ë\¹¼J Ø2že—Ý©z©Œó˜[çæÖð&RˆÊǶ,òÊq!MО{³úÑEÃU*ÔêÅÔmMÑ+tý§Ï@>TàT ‡3G¬V(¢Sz¸»í¡’»ºÆXBFÿÌ ‚Òƒ®LžZ/í£U™2 -,õ1ˆ®Yö²¼râí©qÞ dðµ–õ÷rˆÉwXÖ‰•Ý-µÈþ ž1áùE/=|Ãó¥[v>N/ØqNQÚ¹³ŒLB´4Â[—ße1ž‹3úâ<ŒÏâ¦kšÊàRg¥%YŽ£ß+Àmì^Þ‚#»—]+öÌDZ´šDNˆ ·9ÙßœÛ`9ÎUhÔTÐZcŸCÕCâ@/­pp ‹#+w×LÄÃ~„¸˜ŒÙ²[’’S8¥7ó‘Ué+CºwÖêÊ^ⳃ÷~R˜„±¦\û…ÏkA™YŽ2=ÇÙu6¾Â*ácÐX¤6Ün-, rÝð{ÿš²<ÿ@ú^x¯ã­¶0Ôo¿“üR+/F«`²'Z·AwXˆžw@¤Âºì{Åô¤’k úFi»¹Ý/ú@Üÿ¹øü}MÝÉeÅ—?îi3USvô+î¡„tg1yådñ»eòÙ(ÂzÕ,‡¬¾è÷Å ž‡`_©Õ“Ü•µÛðK…ØÃÊtZ¶ïð†(…9ºT¨¢»O˜ÎÒaçœ×ØYßÛ^çÝ'ñì*ãOAøsôiçáæîö†¾y÷ ¥O.o÷Ÿ˜[çéÔy:6|»íNgóì -›1¶Üñè‚ ž¿NþèÍ\¯endstream -endobj -1106 0 obj -1590 -endobj -1107 0 obj<>>>>>endobj -1108 0 obj<>stream -x½VMOãH½ó+J¹,#'N  Ý‘vfw!Òh%.»÷¤ÝÜíxòï÷UÛã™…ÃJ+ ŠèêúxõêU?¤4ÆOJó Mg”•'·Ë“Ÿ®(½ å'³¾ä4NÆã1-³Ót–,úÝmÈðžÍ‡å7˜_Pš¶æç“9ÌOïÖtp5y -&s4§ÇSe¼£­u%åi”óªî|?P¡7W¸¤,M䮎Ju _¯×8RdTµaÊ+·#m%1§Ód"w\­]U*›qBËB{ÂïŠ3U{Ž©x®öð²6µ/Ø?g·Ö†I­ŽXe98RA;{FM¡ñ ­˜p÷@ü}ÇÖë=BHøß–'€‡fÓ)>/s|NðW1­‡h^^]Å<_áy•ÐW%mÙÿ  K 8j:«­!AÉNª”ÄV­ ç´:PÎkU›pF«:nûk/ç¤|PIR=gu¥ÃÀ÷¡`ú |\4 -Þ-ŠôÎìµÝ hUÉ^pgêÛçc {Ïivijª6šøf¸u=}`?:v +‰kLzè_N/ßGœþˆ~:NèžUN•jÞ¿êlúŽ‚~Î^o¤¦à„`‰t¦Ôžó3ð¾97*°ÍÀ…@Ï÷ºA "AðAéYáœpÖ¡Áäßí\ÈÑØÂ5½*A°œT¹RTª-È|4’úù -U”:B‚KÇ^H3ÝQ(‹ٚÌÑ€Ó;KÞ•ŒVyËŒf€³¿¼æ X/jœ”†‰iª,Ôʘ¡Û È×gHí%!d-¢!×Z#éæìÁcULA¿®šcÚ®•( BëmÄ4`ŒŸ“¥k`<Šyzf ¼’‚v2䄃’UdÁRWmº T¶®¤Š3н& Ž6 pT¬,´÷{Õ&ô‡}ªEYÐ,'®>©§—ódñŽ¤L'?tšBQ0×ü§›£Ñ"uëåÿaõ«Œß¤õ /Ê8¤õƒpº„üˆüâ‹Œ*kÔ å[ÆFrZY/†âé™Hàq?€²óÄA£}!“›a,°ªöÐ V¾û½žLƧ·×GºhGñÕúH'€í*Îu& H°ŸlåV+„o¹kÇæåŠ=N·[Ç¥øðùcVb“æ©{Ñ­žqÉ -³>>>>>endobj -1111 0 obj<>stream -x…V]OãH|çW´ò² 7NBû…°ŠD€Û¡½ãtšØãØÛã›|¿þªÇö¼ì"+8óÑ]]UÝÿøÔÇŸOgŽ)È>¯>^È÷iá—ñäŒV!õ½~¿O«àp)²µ ]’¦”+KZŠDÌÏLiI¡°‚l,r<$‰L•¹%SÈ ‰RR¿ï¹m&ùOöH6Q¹GsK"݉ʸ3ÍÑêûAŸNü¡7Àý‡õ*'KëTxâèPèD×ÎVˆ‘Æã!ž£Éž|RT§tNþ¨Iipî}IÊ{¸ˆ9T”‰¢Hò ŸºÄÉ€‘h0eQ(më`±˜¢$•†žAÙ«S‡Ì£Û\’Q™ÄáAœäXjãÄP 6É¢TèDVÊX²ª“~!u¤t&ò@PP8UJ,ÎÛâ0.E˜D‘ÔKH0–é1‰<äÕîb·¶ a‰{:øõ`ì ðp¥HæbJªTé>±@„Vao ²‰RË»:Ÿ\Þ/gÿ,Ó»¦œ|+àêzúeI)&ñ›N^ DÏÈuc¸Q7ÆÈ£ƒ&0SyZQiÀ&\Rî -™ãÇ*þ¹Îk·t]¹xjâi±ëuÁ ZÔD\Å¥qig¢Âù€ðç×%ð,W/‰Ü†01·—[p9“ãÇ úÔ¹7W½}úŽ&§ÞäúŽNY¯É;òh™ª]¤‰Ì­ÏÔe"OÜbÁÔe -7´‘Ör¬\¶B+«•rÑ/n¿Îî®ï—|@:^œÓõôf1½І™!(Ô"zA'9èž5Ÿá¸'™!0z<Œ´ÊÈïo?BŠüSþöxÔ­ÿœLÉ®)0 X*w ö'cóìi-À€Ç#Úò$ÌÖiPé7\¨¢@•iHA,w°™' 2I–@voF]ïYK ØÓ³WJ°«ç$ÖËÄ3=gPØ'ôG“Þ1ŒÎX6E°>`›.²m­¿]+$Ò.ªï¨í1K61«Ù(ŠeZì“e8šÀÇ~ïuCäTýš.§ ]®û[¡R·‚ƒœfìMI‡¥³ÇaÌNi‡pà -a“Lztï¸Ï+@M‰­…ÐK RêÍžö©|’i¯n/ oÀàbØ!•õè<©®Ã¤q*¾¤wuA® -Û6•¶Ý¼r™¦Q Ð(Fï€7@£ÿ¤µ±×ÈŒl™#4Ná-±EV戺$GÍœáƒTH°ð”“[àTëÑ -YÔßY( ³|Y»}€ ©!~÷ ôv£UY@6|\Aå®å+J¶DÞ±†²!ÜÕÅÝïl)áë6‚Põ…¡´"I ¤“S!4 -XB4ÇP’ë èý(½.ÑêÑ‘œ\¹ÑæiÝ^Ž@æ7—·ËùŸ3' ¼Yξ,f7+÷Š»¢;»íŠ ˜Ã~ÿ›¾5eÀð›Æáš^!ãç‹x`¨lÅ|)#Q¦ökðT#Üæ¯Å!ý у¯¸õÍÞµü¶\ÍÞüfîºát ìòF]‡}LTÜÚ™¹ëd³oƒìB¡Ê?XÚæ0í]\µvÐöàEEj—£þÈŽŽ†½C«ý9Üð9m$ZeÄm±÷p‚š°·…òI¤Pîã¡?NF]îèz -Ñ0dºE5ð~ðu¿yå”Iðv]§k s7Ø°^AX$ƒ`†I«zªÛOç^ˆ>éF­dB­ -F^P„âƒÇø>ì-,ÁvÜO\7qPò‰>xZÌ™,F4êŠB‰Á!l¼…é…‰Gƒ-:ÜÁñê)‚Él«Â 0Ðû3F´ç—©͉¸y Ù:Ãçy¶®¨¯&Í,íÏ<óô¹›"§‹ÏSºÓê;7¹K”ÜÝÂàœÔ‹OκCëóéh<ñÎ0¥óšþ)ýqð?ìºúendstream -endobj -1112 0 obj -1441 -endobj -1113 0 obj<>>>>>endobj -1114 0 obj<>stream -x…WÛrÛ6}÷WlŸâL-šÝÒ7ÛrM£DÔq:M ’“€¦Õ¯ïYò…v§qìi‹={ÎÙõ“ˆB|E4‰)SZœ\®OÎß)Šh½ÅoÆÓ ­3 -ƒ0 iž.EÓ•N÷F”’öÂR¦ñÁêB’“Ö©rGº¤4W²tdU†×uÉoE™QÊËÈir{I[çºá_¥ºLóÚ*]Ú_Þ®¿Ÿ„4ˆÇÁOç¥u"Ïý†›ØJWW¼Çf•ã‡Ñ5M*5Úê­ ! õ^YÂQÕU&3þ ij:½%œŠŸ|§Ú©\9%m9J‚˜#7{•îI•Ñw’*ipD!ÊT½+^ér«vµA¦È -Þh}µœ/ÉȲÎ÷fd,§¾S8nƒÒP{l{*Í©¶’!àΈ‚Rä-³Þ­ë?VËë뙡½âœvÚ‘Þn}|*¥c$î#ð}'ŒÒµ%Ë™Çd±Ë‘;T ¤”ùÄP¹Øä2 >¡ºK‚Ú¨> Nxƒª?…ÇC2#¸/&hõPÍ…¸GD_dÁ r€˜fe§QàŸñ88–àËÍüÓë‹ã—‹qðEíôLÙg[|â\žGI^Ýx™ƒ t.gÒÉÔýÇÞá˽k…Lך>rQéºä€Ùóˆ£ÿÙ5 Ÿ—+¢$~¾oürߧٜ®D -ÐWêÄ Ÿï˜´;ñèñ99£p¥;e\ B¡ÈP“/¾$åda©€R!=,R¥§P¦Óš_zyø7ºÄFÖy[ûB@Ö‚2µÝ‚fóºèó¥90AXo­8Š h|]m8 ®hÏ ;A0‹åöü Q~â=¹ÍqIipo$Á…æ|l%ù4P¶dq©3>°‘²|à«ËÖ—,ùÔ;ƃñ˜âpq ¦ G'Ñ£~jDUèÓuÌ6©„SÌ-6g4Ÿ]e†Yðíô7‰ärŠƒ0HÂoo½nF†íˆS6RXíã%…´V®ûöò~þuqÍr„ç±ËÀÖ ,¢% ¢_,-#äÐ9nrKL…É°b‡ƒá0¼½Á˜Dq4Ä1œNø3¾qÁm;U½£3 OUÑ4ôãÍã\ƒþ½8 7z.3–O±ÃØéŠ'¨Jê -æÓx4œ×JÉf’SYi0ú”`Àƒ‹çê–Sö Ä"ðC#0PÏZ€iAlÓ±½g"y[èiæ(Ž›íÍŽ’=ÚÛ$K‰Ÿ6äÒê\UíTåž'CáËé½±µF0¼vÃN çÉÂÕâªòC™Dcš¯.P3K’‹ŽáÆSº¥²oKþNÝŒ9ƒ\ü@Ê“ #ãh&·˜YÝ—ôîF•™n:^ôÂýµXafû;RnS|C{°è*“)¨k^{@-»O¸‡!ú¨ÊúÞg&r†8>>>>>endobj -1117 0 obj<>stream -xMQËNÃ0¼ç+æÖT¢Æn‹Ž­©‡"–¸ôâ$NI•Ø;¨ù{6M‘åÕÊ;³;;þN8µÄJ¢h“­NnŸÖº¢ŠÌt Î8çÐEº›ýX˜&xD¢-ñQ»û;wÉžõÍ%­|ÿ÷€£!Fk?-râ |Y♃`ÚÜ hjë"ƒ&De¨kˆs}J8bÅ–4>ðnpH+ßQËÃu@hók¹ë«ÝÞ‘Oó:4µëÏÈý™ao†Üb7£¦,IŽ }k|kK3€16ÎÔ ­ )W×™¢¸¤KÀjr)»º$¤b£ƒdÐ?§Þ7ûí/?Ù"âÁ}K[šX{7v_L¬ÅDK…dB‘Èo“¤³–Sô ä€àêªé5ù@úWendstream -endobj -1118 0 obj -305 -endobj -1119 0 obj<>>>/Annots 325 0 R>>endobj -1120 0 obj<>stream -x¥W]oâF}ϯ¸â%‰6“•VU%]Ô|íB»­ÄËØÀ{†‡å¥¿½çŽmHP»«¶‰DbÏ×sÏ=çòõh@}ü(ŽhxNiyt5;º™õƒñ˜öf‰L‹AD£qŒÿG£`DFÒ‚W`Ûì>0=¼½ ¨O³v?Ç4Ëü8Þ¤'×+±vÒÐ èqÑu‘KåèÃãçÙãéì˯Œêµ½!9ËN0yÐíåGËSúÔb¯æ5>è ¥BÑ„R­ù²BhÓ0¢Ï¬éZ+%SGÚЫ·#–D³Ýà<à(OÒ:˜¦NE™ˆŸxÜ#Ò^qÀ÷üôóQtv è,Ž€FI£xŒ¿õSASF%¼Ñ`Pßã,¾Áà’JS]® é$ e7€Äir«ÜÒ×JZ—kåï”H¢…®TFxáÃÝ!ícÜ'´rný. SatlreƒêEªÿ,¤¬6¡åË„ ¬\Y¼ÝƧŽ· 4¢sdh\ ›§¢(¶]Úꊔ”4²Ž\+ä;ã5 O¯]4[IºÍ ¾TFO&Gn›ÏOŽ'W÷ô$¥9žŸú»„·iR/F|RçÑyÜ ¶òXo0¬¹0»~ -'OÄ»)IIG¶Z¯µqÿkW„Ýyîjò8%ý‚lÔçt(39?â<¼¹ºùuò/éEc¾Ãg¢¬¦¹ZKTPn¬#·AêõRâ¡MîV~,V’^K#O'»µN–ÌAI!Ôsûœ‘ßÖ…È2”+¿˜©ßä³E®ªE@“E]´â(ŒÙ–)ÖúàdÖ¥¤ruÖQ[,‚Í°ßt@Ôæ™#kðïR…€q‡ƒs;SY #5·£ ífƒ‘N¾p6Áw¦õU§ÒUëf™4‡ô¼Ì²Åïfè(í(“65y„ÚSj<þvóiGG DÇOF;êÂD3Ö Ž³ ¿‚¼¼p­j:¾®Œa}m#ðcUÌί휽»H‚­–’TU&ÒÔ¡ç*iëÜÑÂè…‹³ ÄS{ Û)qT³{+` “ßk,YiP`ó QhrP 8† - ý½­!¯‰zÍð³2‘È2‚(QJp’ƒFZ‹'í±‡)¬³Ä!s¿ö.·®Óe“°k™æ lMôyò0mâchõüö1Ó…óÇgº½>€UæJz¹ŸÂÁ°ýOb]¥RlqÕ”é*´À=UëLÀ¸VöÊÉa'Õ%ƒœü ï‡×,ä‹,Øãüy#θ¯MÚÈd-P¦1PODºøꪭŽ¢ –¬ÚêÙàZ§íÍÑ9÷¯Ý›tô#7H.ÇÆ•ç§ÝÆ•aõ]phˆ´ 6®ß<{K~m®½(f³úHrÐHx‰ûÞç©ÑV/Ý]>нP¸¸¡(ˆÒÖ”üƾW`"óÁ-}vÁ’¢Q ,"ÿÔXû¾×i¸ ñ oÉø Ê6ŠŽ^UêÖ¦hCvù  -›Ó£x„Ö¢>‘[ „ûOç·ÖÝyÔÓîñüm<ù½–áãÝ{u;“öýM®0Zz`¦®à$ ok"\0u²PôÐÖB h³+Y]’XÎUºà–b>L,†M­¿Û¾;ÈrÑfËåïWúä&˜Ikˆuî«F(ü8+gÝÆ„·}ºàŽm»>«{ :ø‰úï-›R ¿í*­23ð`&röž=ò–ÀºÛ@¿;û%ËÚ¹{Ž÷ÏГ<‘@Tz_nadpZô. «»uìvu¬Ò¢ÊPæ7QÍkÓÏ$2 ?ðþIµ\nš7Þ°žÊ£ýapAã·D9\Œ@GÿÐV‡€}Ïæ>}}˜7 Àß°p_(i†ôE²®’PÛ(dÑd„*Ë­¯}íµÜ?ñŒBxž7åùkŠÿ²òVÁÆ»®œ»Í}Ì?ú^2:qÝ¡úãšG‘Ò@endstream -endobj -1121 0 obj -1599 -endobj -1122 0 obj<>>>/Annots 328 0 R>>endobj -1123 0 obj<>stream -x­VaoÛ6ýî_qÈ'phËI'H3¤­³¦ÈÒ, ë0Ðe±£DU¤âùË~ûÞQrb;ë·!ˆ![äÝ»wïù½ÑŽéhBIÑ{÷†×gSœáÍdŠ‡”Fb4Qœô£S‰#AWµ"Ÿ+|ÊrM–I;×(G«\•ôy>Ó×>¿|RµÓ¶üú†°‚§R’Žä›ø[oD‡ÑDL‘¡Ÿ­Jÿÿ:¼>¦(jóŽOùí#Ç\Û†RK’îf1}¹™=’­9¡ƒkmLJ÷µ.=Ñû”³M(zWÛ•SõÁ€JKsY,$á+ƒ#—Û5•à䳸ÇņŠ)⧇Ÿ{ÑÉ‘8¥Éx"FT€¨10·ß Í™2€¾ç(6‘%ÑBQ¦ÿFÕ‹5°WÒ'9eµ-(0°›«^RŸrï«óá0‘µ5b¥K'š')J3üÇ(Õ¬†ŽÁSä¾0»QvŽ"ˆbÐÒ¦[ic‡.Ó¤* {Àý‘3»º0#=zØ5‹lÖr$èÆ“4ÎR(}£Ä6¨ÆŠ¶íUmFn@®AièmU+¦V—K2ØjT)‹N{Ùíâ›J<"CLi-—KPøá¶>Úú¯ÊHôož+AÞ†vo7P&ÛÆÑÉô Í9žž¢Ucü#h¶/ê““ÉkQ ú@`7´TE@F`$­5HÁï«ÒX™Ò -ˆ¸2Ê ¾ óVºîGÚ½ÖµóJj†ÁŸË¹ÒDƒB¿¸¹‹?<|ùeIÏá &=ÄòT‚X4ò½­Ö¬þ._‡ˆIu­ ±æÎ"xˆ±G/³(fW†&8*çÉùNNU²,ôÎ¥” -Șé¹l­—º”rÀÛXƒ`·ÒzH¡õîõ+m³ê±,°æÖΫ"xcÖâAÓ¿é0ê»xC~ÆÂI]kZ‰—"™¦ 7P䊅Hl™¯Õš8 ëÆ›h…¬è-³4¼¿ š6Zml&Qÿà9ÜÂèx‘«T¢3ݺ{7fÿ‘Ä8±'ØH»Õ†_;3U{ íÈ «`6Ðb FÛy·lÃä†àÖÒKzK[$„Ü—â"UOîâh—Rb)Ή>ÞÓ­„…?Á'·Øy{5Ÿ=|šÅb÷Í^Êß0 yäåòIAhÆk-(OVx -ôAæÌΫîgA„¶4ëŽÙuà&f«˜å·jt½a½HUž•ñì^^ßÚc5Ÿdâè{½»¡b¼-ÄÂþ-ÓSØæÃdâãé%<;™­!Ÿ¤6?·Êq -úÜŸÁØiœ]!*š :D -|ñâtQ%iÊc(d|éáó€d¶ñLe<ÅV¹ÆlFìçÐ{õÛª·˜Û¬GãN‹ÿ¬ÓÎDÑ—Ü$pQغ1̯~yw…CÙò”§6i -ôÒãJÀpà]‡í¶ÿñ~A[7ŠãÉç7ãêG£3N‹Óâ×Þ¿DŠÂ¤endstream -endobj -1124 0 obj -1118 -endobj -1125 0 obj<>>>/Annots 335 0 R>>endobj -1126 0 obj<>stream -xWQoÛ6~ϯ8ä¥)ÐÈ–ì8Nž¶uK[ h·Æm0 /4EÙ¬%Q#)kþ÷ûŽ”ÅéÐ"H,Y'ÞÝwßwwùç,¥)~RºÎh¶ Yý¶:›ÜÝP6¥U'‹ë%­rš&Ó)¾‘¯·¢ñÊRºLèíLJÕGúUJåÝ‹j-È™ÖJEÒäêåêÛÙ”.³9Þ¿ØkA¯¿Üów|zŠ/ùôËYšdüÇ¥ ½«½5y+½6u4Sšö¦Ù5F7ÚQ®öª4ÊI×$jÂeMªÞkkêJÕ>!ú½7±ŽZ§Ø?}½xmjÙZ ú¢¬ƒ']oèþ༪¾¾$oú¸ÓYŒì\n•ÜéúïŠÒÚÕ¦ƒGGt.MUiŽ×jÕs‡óè G{aµi]𾶢ÆqŽ$^+:¤xNÜŠÚÔ‡jx±u¤ß*$ë¼1^è2Bà·EÆê$|Ø«3®Z(¥|õéÍY¶¼JRºšgÉ”*šgË亿+éžk?ÅíìIÅW|pnd˨®U&×…æ¸#‚dŠçÁ¦­sžBfO#±ºØzßÜN&Žy“»‰W¹wÉÖWå³B2xŸt5ËPùòלŠUT ̸5¿Y&̽Gî‚dY -ÑsÖ:ºg“»g|[óJÈ­®Õ£-Ù¶fšv]jYúBêuY†xã´7ö@…±ýcp+ 4ÒçÀR+B¾Ä@»FÈØ(÷ŠPrY¶9 ûŠ¬;ÔœÏé›öãºÝ$„@‚À¯ï B†*:qpìa¯§ëÀ) ¯djD¤]¨Ð£ï­q~D!šÏæ?F{:ýÚuuß:µþ¤ÿ6mÐEÅ3¤øýº Q!öøÔ^ÑÃí­é ÀÜ,Kܲ!£=:JšÚƒ¿ŒÇI¶ºÎõ^ç­(©€˜÷VÚ¨† uÐ>Î,Ù1«£É^s!‚ïPm¶Œ]†›€þéùÙQ¥yssnCP*Wâ\®üZùN¡Á‰úêÛ Nƒ -·X$ š¥7ø[Q–rŸwG¡Ï²)Žò]’óúüé=Ýþ´nåF_®uÍÊí«û¤õŒu;›Þ$Ëè6»~TP-t;â<ýˆDÌ8™8£±æ˜I‚¨6¶BÍqÉRlj8´Ñ{°€)Tµr‹fM1}¬)É°jø:ø rCöÛïsgÌÊ0PLë©Û4Œ>4o¼Uï”jø˜ŠZ|ʸÎQÇOü†0ˆ@=׫Bऩ±ªP˜u9UÊoMÎׄ͠.BÜ/Äq–¢S¿µñô­u¤p¬‹AcìµeY2£ôæ -œâ!²Àg¼;r+½á/ÇÜZ! ÎÒˆ<W")øàèGÅyEÑ3€Ønµý +»®Käõ” d8 PGÏÀÄ‹$äÉV»0{9½xk:F~£B„/ ÃzG°-P*]øŽáÔ'BNo>|¦7¾çMm¤ß‰¾¾Ä6ðÁ „~ûcn‡ýhhøý ÍVK Î}:2Ó*Tl¬A§âŠ=Z-e ¥ ñFª£Øº™*„&0·pÐIšÜ¢"_Þ#1°%¼êðÎà0#ˆhCðd+¬©¨ŸÚOqZ˜¶=ÔzèçZÜqŸáŠó:Ʊ†ûum^5 /Ýa\òH"õ¯¨xÕqçpû3²þ:–œ.MÒ4æx –cn%ýአìøÑc³×,Â~,’ [aƒk×hž u<-ž4P™ôÔOmªEL°R_ ¼Ãæ†ñ„âÁ”W©!Z‚î†'œ—U°9`Ÿä­ŽwŒ£'´š¡ã -{HB—¾Ä’Œíkt¼Çíq‘øÔÆ Ñ—ü©=Ú*3crwÕïÙüæ0;»Ì鶉ËÂ-î9®K·Üî­A«ÀœÓ¡Nî–ý)—œ÷ì­1ýü ¡Çõd/x5I¥S篳ÿ6ìgendstream -endobj -1127 0 obj -1482 -endobj -1128 0 obj<>>>>>endobj -1129 0 obj<>stream -xTËnÛ0¼û+9))’ìÚ®Ou^È¥HÚÍ%@@S”¥T’²á¿ï’”Ûí¡0 HÔrvgvv?F bú%˜¥OÁ›Ñu6ººŸ Iöh:Ÿ!ËGq#ãÁK)ZTLÿÖØÉ…T`è˜Ö[©r˜]'p™½J2 |£ýÉ7ˆ\HŒ0FÂ~ö-L)ÀeÓ°6wŸC*‚ræÁ؇_ÝéÃá&#̱è´P¡ôþM³fÅ"©Ö‹+zUR†;=-$<*!++mU×àJ0#ˆU^)ÁT;pV×"÷„ÕVµU»v5£¦hm†ZöŠ["¹ÀkPE"rAwË[››&ã(µ´ [¯ ÓX)Öòòõ2‚«¼WJ´¦¦Ä’žt'Û\ÃH5Žbäb#jÙ5£%±àÇtn~=°BC’¶ -¶bÒb% W–¥_íÐë=¯Nºo\¨Nå -`{“‹Â“g -hYCé±D]‘²8cé©"õ¾€Bö„%}ÛqqûIè‚Ü´¦ - ÇÖu [±‚®ŒOdM"Û³£ç”þJ ð»f¾Ÿéé,²{ÈNüçºq:áIÉwDÜJÞ[Ë3Sùþ‡‰»úkÁMÉ:Cb%ó/Ù#–œ ­ñlŽGsS1ЈØ'Óy4ó›&I’¡è£?' ˆ©endstream -endobj -1130 0 obj -662 -endobj -1131 0 obj<>>>/Annots 338 0 R>>endobj -1132 0 obj<>stream -x}WaoÛ6ýž_q0,RÙ²“Ø)Plëºvöak ú…’(‹ %j$Çÿ~í:ÝÐF–-òx÷îÝ»Ó?9Íñ/§Õ‚–wT¶o6¿m.æÙzMÇ‹ßâËœÖ7٠ݬW¸].³;òšjÞ€g°r¸`õìÝ=-æ´©aünµ¦M%ÏñKyõk£ú¨=å÷}Ô½óÑt[z3lËÍ× Þ™ß¤/—y¶ÀÞ+,Í3úÐE瑱ŒÆuié åù¸t±â…›F“n•±¤ªÊë¨vžŠa _ù¤@&PPm¡~–kæü–MÍéåâÁÁÄŸV« )ª\`.šªÂØ_«©Ð°¬iï -CÑšHê䜌~±Á]SŸŒ­ÉÔ„E -T6ªÛêj<7_¦ wZw8Gö„kÂÒ¦VíqXÚÄ@±OÇ€ø—V³EZR‘‚cwásöý¸ü¢Ê±ñv(þäJÕñ§ÚÖm£mOÑ«ò‹wÝtjFŸŠ¤°GéÇ&!rl!ÌëŽ[L@!À¦:8”œËT6è'U2w¬HÔTŸe¬rœ…Do*-3ŸyÌUÔ]dýÔ?B‹,„‘ ždwsðöÿ¹½;ö7Ü^fôVsl–zœ(žq@ñ鼎²êö‰D­QbN5Yh4  ˜&Êp9s €Ö $Q -¯ë!ð:X@[@®CŸÜ3¨øèc5°‹fBŸ¤ÓKŽ¡eõ`9X«N dX‰ ‰’s:6¬ø‰Õ1-²›=›½»'¸+$ú:=™’vuPô;¦U™ù®/c-8[ŸÑçS%¯ ”LNˆr‚&øÈt&[À8b#,_Hˆëxè€Èã“iü u+¨/®˜Iš¦±dZ—¡f…L21âìW“÷÷<°æ˜7oÓ¼y8åóÉÌÞ<ŒòC7_Ól~f]©ìØ ¬)ð}›ýОmšêÿ?öL°Òÿ’½ºKÓ(Ó–JŒ0qYZÏìÝþï:t0>â•¢>ær'­ür|zÉšÆåÐ) < 1î§`Ʊx”QЄ*3‰_°#øô<ˆtû' ðm‹\¥év±¼ᇔµ<…&¿ì;Ó3ö¥29ój*OÑe”µn—Nƒ‹¤Ÿ0bª… -ŠœT¦®¡qøt9xáê>DÝbj@ýÉ 7jéX² -õ˜{É×õñ]/_ÂŽÿ“º¹[g+¼ñûS¾`#hq]ü înjÃendstream -endobj -1133 0 obj -1667 -endobj -1134 0 obj<>>>>>endobj -1135 0 obj<>stream -xW]oÛF|÷¯Øê¥23’?d¥@Ä 4iê¨øåH©‹È;õî(Yÿ¾³{¤e01RÞÇîÎÎÌžþ=™Ó æt}N *Ú“÷«“·w—4ŸÓªÂÊbyM«’fÙl6£U1mU±6Vg§«o'3:;_d—XŸ®ÖšøÓÛ;\&G§¡Í³ÂÙ*}nœ’¶ÑúÍWÃæÆÕÔènè÷ñ~(¬³‡Öuö&®)"Ú¯)uÞÕ¯Ü×*ÒZʵ¶D]Ð%K®)µï«™_dç\ÍNû`œ ä*ú¢Ú\‘²ØÌG­É먀AI•ó”«b³W¾ D…k·*šÜ4&øìU¦ÑaŒÙMBR½ÿ‰j:Íi[x­¸€ƒëIÓ §Âù’HQ0µ5•)”ÍaØÊi'\– TãÓ¨lcQP‹ -œÍèµµ.D:n'·Õ^–ƒnÕ¬‹d52A`#ÇY›z­=jS–.2ú¤•G"¤%º™ÈQìè#__Ü„\ç³78q€¶^o•ïaWôÏíÃW¢FùZÓÎ5]«r&R©¢°oW' .]-/²%].¯ñïsüõšªÄów4}™çWW ÷ žÏße—ÝÛ¨½U iï©U•™þ,Žé}%pÔšsŸÜZÝ>|ºùƒnþ|˜P«CPÈ\C·¼d(| ±¨@3¡f"Z 2PÕEçÑL63!ç(¬ðf k 9 Ó´±,eÁœtË6Ó([wlmˆg¥4ë“Þu˜ š^Ï‹§à´‰<ÕH’kLîP®I$§À9.bx3ÌÜøx*ŽÇ˜­½óB.¤ŸTÁsñû„@Àü0ŽïÜFØ¥ HºÎ -A -WB·;v®—-gœŽIÂp…NÎôX³å¤FÍa8ÍÈ^™¼–úav~>ÿé0›/—ãav•ÑMW@±šQÃð`¢0{NàåïŸmó› v:jÁÁ·;kžtà¾YHÃGSt˜ÂimÖFjŒížhƒÙ©›€NÀ@„Ê0¹®Ý"øÑlÓ5ª°á×Ù<"jô³3%&×—‘Q:¤ ®ýx*N šž‡èe@ÚÌÂ~2±Câµ=#” ÁP ü(j?WhÐFmòl Ÿï?Lzñ½<øñéy A“± Iä"áI!’ÅkbÀŽ¥Œ4FQ‘J¡ŽŠ‡• -X)8cT4àʽG‹è'H¡""ï:N{´¬kLd‡O>›‡î 5ŸÏ²ÅO^G× pnô™®Zö¿†æ‹ëlŽ_^é·Õ—›ïoè³wß0xéƒ+ðÔíŸv|î,m?»>çìôÕ‡ëåb™]ã¥Ë{æ|øëä?Oæ{¦endstream -endobj -1136 0 obj -1642 -endobj -1137 0 obj<>>>/Annots 341 0 R>>endobj -1138 0 obj<>stream -xU‘ÍnÂ0„ïyŠ9¦R1Ù9ám©z¨D‹_À² [5I·ïPSdÙòÏj¾™õwBÈxÊ Ó$s•Œˆ Öü"«Ê"Y–A™ôºh´·¨]‹ÆaïÃp'mÚúŒã—nñãâa<ΡCwpVàAí’•° d)EŽ¢*yŸóŒë+u -bXOLEqÇ}óÖ6ÍŽ@—åó5¡|*$$e¢Bª¤ Û©Æê*.‡HD\ö?Ô2nÏxÞz<ßÆP×.>öÆ{ÔÀ‹¤˜k³ßÄÐy{15Tô;®/ªdÉn(«8µ²éjö>ŸaÃΙ–‰¦kœouËýº(®å£2çvÛô/v!+QòðQqkÄGò ²ùq¢endstream -endobj -1139 0 obj -290 -endobj -1140 0 obj<>>>/Annots 388 0 R>>endobj -1141 0 obj<>stream -xÕœ[sÇ…ßõ+ö-JUa»¸ä%¥K«JǤKy…Hˆ„M Jö¿÷éžžÝÓ=Œ]®!9®Š¸Ü9g{zzn½û¿Gu5Æu5kªÉ´ºØú×ù#) ¥ªZ~úþßò›jÚ.ðÿ›ª­G »¸©Îäï„òû«êÉ7]U×ò—¡ëðÇè¯>¿^ÞWûÊþá6U×Dvºõ(«I°©f³ÑÔ×,ÝêowŸ²œ›j¾u^žnùq—Õ$ØTuÓŒ/O÷ƒüåöp\ÞÜdËi›ÑÌC¬@ ,·—=4 L»hƒÂùêpì$ÚÀeºÑ$T"ˆ³§¯Ÿ=•fœÌá]ÒÊG'ø_mž3™ŠWNºÑ^Ùub}½0¯|òMk>ˆ1Eá¹sÃzD^4ˆ³1ÉØ‘pv\Ýf &O±ºÌçâÅL°Û‘0þGÖ“mX·ñaì~|¿Z~@*0&ãQë+‘±r¼^åj° - tD ~\ 26ËmÏ xôÐ0·Ë«•† ¦=¥; ë ýyÚ;–^˜c‰;5Üä¨Vš!(©;™>5=ë“;„Ҍڞ Æ,êÜÉôÒfhF2žÝ­o.×Û«¾)I‰¦l§˜“ÑÄ.E*0æé´Ža"ãÙz»Ü¯“GÀÛÓ˜ìÞÆ Ô!½ ¨¥·y˜0}j;Ö'(¥?!5³ 4ÁL_ç2È0 ! À9E¡Ñ€+aÔ‚ƺ¬c:WpŒ„-ëÍín\niÀ´âT]| À«iÁ9 bËàQOQû“WæNΛºÅaѼ)] ÞÔ-$fzoj½7e½¶¼Ó«7•„›2A›ÞŒë0ñÞ”õu3FTpCFÀóýjy†Ò¡ 1>wž’Áñ…T`t2ÿs5ÉØÈ8lÞ÷1ŽT˜ûÔ‹‚a"ãb·ý°¾ºÛ/ë]?ø±´É .îj” DÚ‡õÍj¤¾9{èÁ¯áùS§9;¢^#ÎcPë‚š:¹ «“}鄦OÃz#ú¿ß4uŽŽ†g¹½ÜMyI#î7÷cB†zÄ/»»~åÂ" ¦­ô‡0ªG$¿éÝd€ÌkD2±"îÒ#H$³÷V|ÎÕà -xħõñ:#XDÛÆZ ˜P±„¸]î7âOX4R½ÓNä¿Ó rÚÙ¸˜êOƒÛš>9ë“Û„ÒqüŒ ‰Yºàº¦¯{ HÈpv\î<7#%‹@tæºqü$•xðmè©@Á@üÖ$žañã!©@á5,©$Ë6€g¤c‹ŠˆûpÉà=±›Âî,’$~èy¢Ž~ŸÒ²“DØ}u¬#ØmÔ˜Á¾H"˜~ÜHÏçJØýˆè–½7²ˆ‰Œ@0#¡ðFŠ'M$€8Œˆ ûÝ&G!–I “9ž‡7BÖÛÕñr$U|>;ÈP”—úïÄ ¦íDשåô‚¼QÕÐz„I`™H”½ v;2Jo°:HÃbÑ òä v;\L¬¥÷¡4„š>†¬·Û‘À~L"ôÙLë˜`·#aÚ;Iàw㙄fØý8ßÿ’[ŠE@`¶fD.7냤I)ýI§fŽc"‡iR1ðuéЯŠ&9\/÷«ÞyY&Î;•øì*bÜX‘åÇåúFÏ ,б¤V6>)ˆ$Z$‘D6*®L¦FϾYÈB§ bÜ©«ýÇÕ^§™£òŸ­7µn(¨eé—×UzA¨Ž{ÑóÐ}L\Õ©û}ÙyLŸ<õFôºŽ©ÍÉYn@//;Ntsé{ ÈLOÀн]]¸žCRñz™Ó{ð ^Ô°lª`:áêbTà®Gøö਎°@7 -q·]ÿœãK¤³LâSä¾ -7kÇ©‡Š[6u3½ð>;–úeŸÕ òY¬+}-q¼ÖôÉÇXŸ¼¶ ”~k„äfL0f¬Ã¼»(¤­,’Áe½]ü<`H¸©&MñD™|æÍya!0S9ItÏ” DLõn½m~8¤g¡ÓJ¶ ÐGÊÛ³'ÍÀ •œ®ëúÙ1¬@¤¬Žèù™X AˆUŒÉ"Æ›{‡C$Z¸Œ®x%"§‹!H´ ¬iÂÌm¹ŽÓAƒ‰Ý 5t»ï®—ý<žD› -ѹõ» /?ä] -Ó…™Øý8¿ÆÎË0™"(Xæ„jdpļØmÿÒ? -ë@AÕ#ÅÀ‘òn·ÿéŸ:8È.Øåp1u<Éi•åL <ã*]/ÌdvÅ;8rÇIäà ƒ -ϯG?Ž1]€/ÖË«íîà6Âä,*WE¶aC]2:¢¾Ûïÿ²Ñ#çV²gN”¿Ìê-Šê˺+YT/ȢȈë.X”¶Ô¢†XÌÑ[FˆA ÄÙÅî¶ßJ& š«d– v?Vãå 5"Êß?ŸêÒ¶C.SoX½ Ãv÷˜u8¿Ma€ºž`JÖ2AìϯwÞIIË"€Ôž‘±¾"<% Ø +à pòãîbw“ YHSº‡É<æÕêãêÆ&¤ÓÓvߌº^ÎýC/¨q§¨èÃÑijHCÈlÏÎ iÈ‚ñÝ~½u+ÒISÖ2Œ1%ƒceÜÜŽd€L%Æ{ˆˆÞ¼üoß–$—µ‚‡XRØXDèñîaŒÃ“42Ç”}#O°‘ð\9ùYXŒfÇ8L.1ß=·Ä‰Á)†Â©ýpè 3!ºzA¾ØH^1ú ç§É Q#å3fˆ/ŒW»‹Ÿ0ôI-4+ëKY÷†poœº¦©^qÐ\÷L †SºdCÔø^É 1NÁx½¼½åyɤ‹ÉòÉA27Öålm—›”yÔÎ!ûbfÎ&•üÛ ¶ïûüÛtaålÛÉÜ{Ý}Ù¶™¤Ù±Ž¤Ù¶1Ì/H‹â|ÉÆZ+«ˆÝ÷5¸gÆFJp&·'£=ˆwÿX$+Ù4aT8,7ï‡ÈE*00vacØ>”ý SúÆŒÃÏd&'¶[“.z Ì× ¸‘ÔÙÏÁuc&“jäbM+‡²ûñr{Üï.ï°c—Ž%Ððu,qo¨ùÝ_zKa³¥OåœèÅ‹&H÷ Œg ö1}3« Ù§@<=î6·bw§Ï6û yÛ´’Z™½H/È6HÍôq» -Á6¦ÇB ½‡õÉ4A’pÔ(Í×å1d0o ]‘É ÿD/È@Èðñe1ÐнôÐ6‰ôLAŠ v;28O á5‹°á!ûŽ`·#As Q‘“F'²àoýè­‹=u]–©uõ‚¬+/¯Ð›#bÛ¡k&ã™>Ùõév ”–5}²,ë1è5÷ã+µëÜ ˜PÊଠd×qL½Ë›DÙk™`·#£´­Õ!Ù– ɶE-&:¯ý:½ÖYWNû¬Ÿt1X·A2BPúЇM5_&¨%ÁnGFaÝLPë:‚1#Awq¿Rß]°ï6³”iŸ,¡d]¬&Ë!‰–UH2!Y‚ ‰Y0JëZ’u™˜Aw)þÖÕI­E†F/ȺӘ—,‘Öej]#$K0!Y·`”Ö5B².Œk¡ë ?…uqÌÕgr¤5®ÈºHÔˆãÙ7“ŒgúdÖÛmO(-kúdYÖÑëu,þ*íZ]H@ö`?œ5zAfE:I\áà ;\#$30!¶`”¦5B2-³ èñg0.²†ÑL/ȸ8b-G³áà?YÏÉL°Û‘Q×ɸL0f$èˆñu×½èÓ`ã¿?"Kd\=1‰![¨yWT÷Á2"ÙFy†À6˜$ú>Ͷ%‰lØÈË®v?"Rç“Eó)w7~kÑ ÷joÙqJQL6Ò ²,žõž…­ÌdÝÑ"™bÙQZÖôfY2Ö"=ÂWnY9‹–ALWðéb°l=±v˜Ú’ïQËÛ¢Nm·½þì¸Þ†'ø«´‘#Ø}O¸^~äm_R`3LÈžXüÂ#°›u‡³àƒ«#´Ï¾¤ã×ù Ùõ•}k κ3›.ì9x×7 q ¹oß7³t›Ö±Œ3 †%!I¤aäÆì~`ŸpuµGZ8½SLb ‚™²oŸD¬×g9*²ˆ™d´¸Ú ~HݹÜ}²8H''NcìB{Šˆ¼lð )=ˆ¥i~½åÄÉŠ,Žž)ˆ3ÙÒÖ…³Ì‚>k¼®uAŽ‚è—ê6%{¤^¬½'Ò~s? a”î4ckA>¸‘°F²Û‘ðôjµ½LyÚ ÷ß’¤@0Ó$ep¤GÑ {8|7 Æ©–xG‹$0Ž¼NX³ÞnGÂUåžA"t ˆga÷#âûÕawsÇï±²$ì⢗rerˆZos]XÖ"òübœÜÑÛû 2ÏBzy'ýÓé­@¬Âíݾ7ËЭ"ŸÃ¸ò²xŸ¼Zoï†\^…ÖÆŒ „Š›ôŠšlÒ~Öþ™½38 ^"é— µ^bׇ q¿¡wêl=I`qìØÕÐB3€Ý÷ˆ'ÈC|r½³]}Œ$ô”ùiÿØ¿Á6ÈÝèב’§1Ï&SG¦h°áœD°ò3DBˆd¢öÁ«»›ý+jÈ -}OøC¶©]^'’LûE þ<8 NFýP¼f˜ès›¼FâF]±>Ý„Þiz“ Ùñ3_ÈTØÛïNëúMv¾ôçÁ.H¿Ž#~Óuúä&¯‘úß8}º j—íဩÁÅuo›ÙÂ4µK‡;úwÃôçÁ$XŒùèÀç -:€™XG"§›Q^ n&—HEì'`Ôk¿ #[¯D/Fš4>ÕD€%ùÒ?Äð  F2%>3ÂêÄ‹ú»ÃŠ^—îE à3 ø 3dªHCë ÃHTË ®c¤Û‘1L I½fÆ°ÞnG}˜?“©ï’gç*a·#Ä&Ï–ÄÔ~†.ï}nÔ~úóà›] b<1Õîhb|;ï´ ÈÄ馗ŸßÆÊ£E±_&o-ât׋߬ŽÏ^¾¥M/ï…âåT"€‰·áݸÍý‚PãÏá•V'ž×?_^\¯dÕ€³“—:§5éº3†~HÖŸ‡Ó7¹ý€,COžaj³˜\­Ìòt3&®ÄV3µ¼á‰ì{©I'âÅßõúÛ·gçC» 2i7ùZ3Œë ßîÓcçîKÐ×î ëð~øן‡Vhb‚ŒÄô0ü›\6Âj¼Ýw‚à­8ˆ`ED³¹#3V‚¬xr¦É‚û±Ö-ÿás˜ú“~‹yý&ÒÆñ 5lÊÄáñ™|@±BŠöxù±z±»¸Ûà½?ý ®èñ.PWý}¦I×ò+,ÆÿóèWé"bgendstream -endobj -1142 0 obj -4385 -endobj -1143 0 obj<>>>/Annots 432 0 R>>endobj -1144 0 obj<>stream -xÍœ[sÇ…ßõ+ö!ÊC`ì —§”,Y±ª"•ÑQªRy€@„Mp”ìŸÓ3=3§{¡²n¦dWÙX====—ÅÿÔÕÿÖÕ¼©ÚYµÞ=øþìÁwO—U3­Î.ªº_Nêj6荒ój:™Nñ×õó՛ëM5\T‡›ãææxøóÙÏ~8{ B©ª–OÿüÛƒv6™V³n‰ÿîªY;éõâºz%_äûË껧]U×òըͬÇ×Ñ÷¶“vÒM*ý6ÂíªÅbÒZv¼íO^¼Jr(š\µºi|Ýâ}§ÿû0ürw+h[˜íìüáä+ÿS/ÔÑÔm?YdS‡ 5µ˜E#ƒöΠJXv“ -Á)!tÄxý¬Ø”D»ªnùRBè}_ ²jƒoýìZ/Uá3XµïÅeÂYµiqÓºiqR’ìªùRlÊz½í ?ï’›’FLÚJwd‚Þ÷„7ûáÝa{s™0¬g&M`8©€]ÜݬÛáæI¤iÑûgJpOZÝœg©v5sÿT ëWÅ0¬£^øz¤žqR5XD_ûj¤q¾¹½~˃A˜ã6Jd9C UWc!0ËŨ6Jö2,«vUÛ·“¹«Šb=£Â#mnι>¬k9÷N<ËûKwU×t2&°}Rºcf(ýˆ‚ÀzÆ«ÕîÍJ,ÜÌÑyMhq|*½3uòpA¼žâ¦íä%pÆ^¬úy;YV3ÖÇÛ#Âó<‘= -žŒ¾É€xx½½9G/OnÈB`ú™´c´ÀˆsجïöÛcög–´¬ÅŸ (²G áÖF -RJJô4œX`Äa‡&mí«Øƒ#©ÀèZ_ÅŽ)Hr„a~¥Žëáæb{y·ß¤Vb-züÕW ŒHUðä„a!0mHÓ¸BZ`„¹ö™A*0So[ÅŽ‡Ífw½9dÏc©tð0î›ÊDö´Eúx¹_‰×HízŒ¤¦‹æ䪙ò€Ü/ghCÍ(ãEé«="U3ꫵMsaŒ²2„æŒ?r’ÝcÚ œ‚Þ÷µ(ý5 t3ÞPðßßIʬCl)ZÀs^œ%`s±ªE(Õ#V¹íYÄB‚¨E(u„¸Éµ :"»Ghâîx…éÇv<(á }µövI<î°Ù¿ÝìÃX1ƒæ´#fü˜Mm¼’çC}¸ ï]ŒÇ™Æù®ê=Ñ⬾ëÏW¿d×% +ŒÄ ÷mLàa­3[À,a•Ú†Ë‹Ãɨj* -Xýn³{³Éq‹eâr7C*`!˜¯j+°€elk¡L X% \¬î0X€°€çyÄg‰¸¼L °X -:š³& -k¥÷³ñOá+¡D ðé é惣Zœ»Õ6ý¶AŽú }Íõ©ÙYSÂõ)ø™ŸøöXKHþ»jŒR°#âý«vlg)ü -9üŠAZ`D²=Œt  {ô”X`D¡ L" f2 ÛŠÄcDqqÁ·Z™IXD,0FœÊn6õ¥ß0ÂQPîÑË>ÁQ~/P7 ÎÈmó\¿äHý7í4`–Ý(äùQ£#ÿÑ ÷=n´¾ÆTsl©Hß`þó÷ÌðžûM«ÖÁZ]Õ·’Ã#Å“4<^¨q¾{Ú뺔ª]öøju{,œä˜o5ž¥·=„UŠ†®eMÄTF‘ú+/‹¨.týðú\‰îY/=OуU`ÀEÐS C±žA©8«Ð=jY³ ÅzÆùöpÜoßÜ7yq…ÕÒs±kY©€g’ž‰U`Ì-£›{ÂÙØ~u}§’¬ÄØfçæ¹ROªv«›Õey(–„<Å(ð • GâË3Éû> ƒ5‰ µŒkº<Ї‹ìú´dÝ×v Afàâƒrsq{æÄðàôfd  T† ÷m h2Íà£0"W!°øºX+6˱Û{É—ú³k–iÆýh¼pAázÚ¹q¿›”\š$b͹ŒH ÐûñdÜãX Ô<„'F¥žõh윲8ñÎù¥¬™8MÏÎÞ-§eŒŪ:Ÿ1ó´Nžô˜{-*£F(œ’¶Ä¶µ½ïë‚»™ -²°0z›ê¤ž¶-y‰€Àò©«O¢zÄa÷f²F†(vÅð¾…Ô_ðÿÍLÛR†ì3øöž»Vv58ÀˆuŠ}H„Íü¥˜‡ zÛ3^ ÇM˜4a%kñ-Y&Z¬I{ó!×’³êÜ© Ù‰(‡ÔŸít2++†MfÅ@<‚Ð$5bÕ££Î1™“Š%?Œ·¥óp%~zñìß)FAíŠHýï/7ûÝö ÓÜb-HXC°aR*àQßoeý™d€`£cžhἘT1;« ¨'øÕ8D—45‘,<‡VäHÄ|‘Ú<‰êÖkÚa!¢'61αMRAuÜשX ²˜ô|©c+ÚsþŽ9öK™b|Z:Û˜#-/IcBœŒ¹÷Pn—:Øs1šÚ œHX¡]b")Øäû2˜Œ ÿÚnÞqRtð7,šö–¢\_v7‰ßË‚©H¢zÆújusIUa©ø¾Ä_ R¶qwf™¸­¬¦Xˆr=ä6wèÜY –>ç–• -x–Ùég(8+â*ðì%×e\“±ÖÕD±žQ:#‹Äû%VäQVÈI VS:GÒžt¾]]—¡'!úˆ)„ëœo/~ã<Ÿ„0(6bௌQ²ã˜ÐE"qy9ce±€CPà" 8‚ÔÊÔ!p€qØ"¥„-9/f9±€ã¸ …®÷I‡F>ÂZsf«E”Œ"\`+Îg´â† ÕKK!â3 úÀñ g#÷«°ø—Z‹,ÕT¢ûê¼Û¯2„d€`Åã×\üÁ#hnÅc‚B=çÝqÄ|ŸwªY -_¨å¤­Š²=È楤“¼4LùØSÖûÍêXfŒ$&¤Z¦2‰ì1»Õá—d\–a¦‡>%¶¤7`R©nWûÕnƒ&C‹ŒæŸ“·Yïm°3’s¯xQ¼·Yú3óX¦²,é£@ðÞ1â½Þ›QÁ *Ñ}uÆÞ›!ÁÑ,Þ;®ÎÈ{3!x˜%(ÔWã´÷&Pt2 R¶ðÞLAmQi.m¡öŽî ÉÄwe©ÂB´€‡¬Žzz¤8pÑÂ1ƒÆ«€¦: -÷$ظ½Å˜RÊéçÏôÚVHñ¥B¬$ÅóÞau;^¨uøÜQNvðP|jí<±ÂÚ¹a)Ý ¦¾ ‹ãIwÙ`äP1­‹½þåÇÜi4'!¢gØ`2½ï1¯îno‡}Ù$¡„qÙd3ñO¡m’H—u? ÐaÜ—uð<„:OQ°§`1fòkXu¡Ï u3¦›#= ^ÊËbñ"{­)㸸Éï°îᢣrâ‘?ŠÑÑ÷ÃyÜ× Ào>/Ø„> hk„—DrâÓ„ 5’ø¶lâƒfvÆQ}Î@4ÎaNrˆ}ÂaÑ{òß³3vtd\ 3#ÙÞÉQ[Œƒ7Î욆§ø‰ÐÿpT =‡zßCKÖBá„•OdEÁpRúÏ­¦?ýWLŒÕ寶«5g,€å%‚xAŽ‡É÷J‰(i‹¶SBxsÑô¶g¼ÚÙ²¤ÃÊlÕPô¾§<ÙoñIÞa!0ìéL*à9|<”T`„WÓ-C xÆ¿b'Ž…¤×ÈO;W-àAaÓäkÜBnî€m:Å:ÝÉo|5ႼaêO}JO+kº±¹•P£0z#ô¾‡ø—„h,r !“ÈžSVáI=ª÷„õ„ëÕþ2OTÄ_’”°s`ë¡<åæμECBñ)™Q[Œð~¦ˆàMµœ¶¥zDˆ<É›îe§5zdÏSFþÐðñ¢xº—ïÑKldIú°ÛlôJ´„GççÔI»‡)¢Aè}‹xAÛZ$ëÞs4Ÿ<>CbZBêÁ)D²lJ.FÉóv[Ü™4 `–P;‚°ž‹‘„± ?EbE X‚?xA:PÂûƒ†0°–QöyY9]8C¤ðèåë¾ÊDèK&'ÎS1ÝÊï5Õá‚­%Í‚ß²ZÒYÜ, ŠÄ¨2Ã2ˆØ.#ÈéVæ #žqUÚ×ÆG0R¢>xMd8ZÀsâŒ"Bb¼Â{†Ãhy¹Zÿ‚wªB,ıÍûZsp Šc %õ -ýšqsº4¾V}Ø¢ª­éûHëã Öxøûõ¾­AêÙø¤¥—þb( l1æ-ÖO=9î+Ÿð×8‰^Ò‹pA­éŠÍy¤{ùTX ÑzLˆí1bŒZDҙѥ™ L_ 9— í›>¤–¾%[¤†•ðöøz‹—C&'ÛO_2“ûðÖiÍYW,çü |.M‚C*~I©´GþUb„Õñ®×?ßêï¯d¿g’(áSä—IF•(gö☤F^ÞUFy¾û!¿" X*B;†,ÏâmO09+©€€zi+¡Ÿq™üš­PTbe÷ÁÔ"Þöˆb’@­.«×Û^Ÿ×ı¯þe''\±KräÄ…üÅd*üà¯d=3Ìse¢ýðÕ£çß?ª^qêµz2¬ïvHÓBÊê¾úË<œ{¸ÝÊ_pRàþ‘îÓâendstream -endobj -1145 0 obj -4944 -endobj -1146 0 obj<>>>/Annots 477 0 R>>endobj -1147 0 obj<>stream -xÍœmEÇßçSŒx•“Çóhû¤Ó)‘Kqo¯³kðC°½ |ûûWwu÷¿j"Ž l6 g§ë瞪êªê‡ñ¯÷êjŠëjÖTíP­v÷¾º¸÷àñ¢j¦ÕÅëªî“ºf]uqYM'Ó)þºº±|µ]W‡×Õ£Ãþ¼ÞŸO»øùÞ7÷¤AhUÕòéÅ·÷Úa2­†nÿŸ4z±­^Ê9ãUõàqWÕµ|5z3ôø:úÞù¤›Tú]ÛUó…'ÇÛNþåú|Þ쯂¤vU=m& Û»xß1nÞ$q–€|WOfV^8À›ãf^- †¦“Îab‡Yî/sGH„yëD¡Ž:’$µ«šºÏvSS)Ö1NëãÛõ1Ø¿âkÅ^÷'·úOתDßjûÉ<ûV¸Ð‹ÿ ÉÜyPïZ€å£QG„‘QÕÏEú.¼Ç¨Š¨[ÄÂj`†RGŒóq¹¿ZgË’ ,1c@×SÈ®ÃYµëÌ.à•)þ‡ 2'œÞf—ùdæÌ©ò³¹ –æ^,ß%-’ ”Ø ’͘ïϧóËÕqóæœ@,+æ˜I¼`’6¡B˜]_ŠB>Uˆ|ïH³6éá„M²I¼(6é3Ü´Clnm’ä%Ç •£Œ/ß.÷«uÉZ$#×ÔrÚ÷å¹$P¤ñ Q))î:vgï‘Hs±/H±sïê §V•ni¤£Vü‹õr›”DÄÓ;1K é×ë}ÛËõ«›«+Uf'Ù\·ë5| >DÕ8„d€*h¡úD÷Z+J«™Ë -®—oÎëcR‰#I­ÁÊÒÛBæ)"Höj=#¯D/ÿr½º9nο§^ IBŸÁè}ٮ߮·¡ÊB¼ÿjgDxz8梂„bÀ0`„Þ÷Xvo¶ësÆHxI’à̤ö5œÔÀƒ.קUa¨4$X¬¹T°–¥xÏÂüS…0yA–G@àÇJ <âä†'‹Ô˔΀ÐðžÝ­ÕÒÙ‹BPœJØU1l…‹<Ú((N;´â<þÞ ¨¬>hžYJ÷”8Ió$ƒ¨8èmðj'AxÀt&ÀýÐûóÏÔ y Vb@jà —‡ÝrS<‘AFWŒ6ðB‹FÈ ´G¼\î^-óóÜp:x…$°§4“ßdHÔ5ÊÜO”È»9gn1 É+ó*^d¿¤,Ð-j—­áS% 4¼ªG¨1(½íß6{ZÝ!9q*Y‚2½ï)Ëâ$¢Jg €âðì"›‘D¤$3]HLøÚº% 3¼>ÙcÞmÎ×¹/$&ë;’Zm_´‡Çd9PZIù†’x -²:æ-OJ;Î$–ì0Qw %×v¨ˆm5 ',É–dà„áI ·=¨‹¤`¸ºÁ¨4ÐûžÁK{$‚¼˜»‘¨žñÓfyxwÊæ'Iñ!Il–ÓË<¥‘ßœd‹lßÔˆŽ¡T‰Þ×ç·–¹ÞZ˜„á#õV4X¸ dÉ>ÐæôF2Xd–š§c€ÞöˆŸ®s½O2!’Áz ÐÛ°ÉvCJ"âA²Øc Ø`ôçë`Ñ1b¹ ©ïÃ+¬•—Ù 3´âÊ£d9_S@%1IkSqBÑâëPf J <(W ,ÂX-©'Ä5 øÃíeÙ.y±Ô{];+õ^¼ÈyµÔ{–ÿ½—X¡83¬Pï!('R ™”™CÏ´3zÛ÷âÇýæõ¦¬üÄÌ«OT·2±6ÝÐûžòýáê°Ï#ƒåà‘3䆒x ûÝz]²{òßdcÛUm=—±nº¡\¹9QùÅr à{1Ø™’x -ôú -ÉKF”øÁåB_›àÖÁRðyÜp=ÚÈ”Á¤”ÐÙëcœW&#ŒÒÛñðÕ +ú«°Çötn/VPòûÓ¢0ÈK¥.(K¢ -q•¦ÀN= -¨±uaBÔψñY¯ÚXí´0z®!âEÑN»Ýgç<®†H€¹l@PÎñÓõ2o="]3‡«„Þ÷½Ð”†5 J -ŸÁL“xÎóãáí 7aDÆwâÇÎ s)Œ0®%̶Ⴀ2eÔ+Å]‹ ô€*¤·„akK¸X¯ÖÙ,#‘…8Ó‡ÔÀB~ä}:’•Ê>!è}߉‘A`° -Û†ÇÒ'Iäçpü%®¯K¶»—Àí ‚rJ¶Á£“‡ 22ªõ¯`ï抈Q¹e†¸ùˆñt³:N‡×Å×C8‚¢Q™ÃL"ûÞ¼Xï´`L‚À bv£ <Á{†7e›e¥^wHážôh¹Õ-”O2þœ)±rÒkˆ=á‚LÙÉÒ’K ¨gËè*R¨º¥þh!–!ž-wy¹žD |¬Ú`¬2`!×¾/q´g³Ê ³-$2†¤#–¡V×a„ý;[}ËUa‹9GHçA¯á‚¬ýŒÒ9žÖYCâþÐ3Ä#Æó-öYñ9í BŸáø•Á¤¾7oÎ×8B´Y-e»+gwÄaƽJßàqO±q¶Íɽ»}û8S`%²$òpA¦Cˆtþ/D8J:Á| -À’9b=Ä€œ7„Iú Y<Þwšk±]#Ã’ÚÀ¾=è!InXÍ0:ôÊž|N0:TÀxlà·ÛCôñEì¦~ð$ëOO2|ÃÞœ•h§ñð^Lpá‚Œm»˜Ì_Îï‘¢¢,ÆDž"Äü#Ä‹õéf›“ Aû(‚àAÜ ½ïûñh¹º.çOî°\PíZ¥6pÜP5Hš‹E© –œGU©´ÈȘ“,†ê¸1ãÉþtFvµ‰¤E¹²#`XÀã¾;<ÀH„°Xn ÚÀ3p*ùõæêæú#.>|Âý0±‰3È, þÚ„ 2È܃—cm³M”‚pü£« nÞŒŸïÔÚ©fˆ§Ð¢j©SÔQ"Æz¬S"jì÷×Uà Q͈ñbýëÍæ¸Þ¥cëpé;?ý*.“Ž<…©XÓÇCdQ/á‚ôÒŠÅÞ—' P‡ñJ ¢G¸XŸø\< ÉЕ)‘A¤¶i}¶ˆÒK–±åZÈñLr-~qwÓ0k ,Cæy±¬Ñæ#â8°Ót2]‘RŽ#Ç€©)ú°4œ ñþˆñýf·9‡ð&¥xâsðQM7ƒ©¥åÈLI7á‚\gËG馜îO¯9¨×d‚Þ÷ Ä÷Õ‹Íñ°×gªÙµ‘m(™g„}•x¡ºá£‹ÍÔŸ'zß)Ä €•¥tÁzkªIÛ˜²wgzÛxu¦Èè6¦(ÒÎù-…°™ž@Îç¸GÀ6æ{´ i¼LAI!Yã5‘Ⱦ#fSžå@ÁQg§ŽÔÀSdΘ&o$%…·¬5ØžhÏXæøÈB@Ô3q~~˜Ô`„H`0XPP‚B=¨wËcÞ£fIìÔ€à9Šö{L…Á°DùÉÝI ÓX“´˜$ÁÁÁ)'5ðœR^±Ø!®í#¥#Dò,Nb9Õ¦ž«¤nrøÀÐ<˜WHêVOêɺn¼ qèf¢%ã†òu‘‚§b#'ÓÈZGŒ§ËýMy…Š¥dÔ„œÏŒÔÀŸ -‹ÃVãI ¾”/—§Ó΀ýžÞÐ $"aQо'~ü’$œÇ\ÞþþEÎ, ËÍ°4c9©íÌȃHžÃh‹!"±¼œ¼5Ï“˜àü‡å@Á*Fk%5°ë=$^<Åè6 m`ì;X ùX¾3ÌtÚäÅPÎ㇠-9S6-¤j·˜²(†ÁÅ q™Ã¥ƒ¡q8þÂÔÀ÷…Ë5’£—µËОSQv]Ŧï -~ýaü@%±8§Ÿ3Ï¢Lß~’‚·Ä„oÚÀ3(ÝÞKX¶Ì»/xw3Wÿásñ$¬Œj·ë¢Òbí^Þ/Ís‡Pù»å›"½£:œ„B}'p¶¿ã²Ë• Šù¥ˆåŽèmO¡ÒŠd€ìÂ"Ò¾9ñ'Džn­D·–‹WÖ~x}!Ÿ€ Ÿ‹ýæ£ó(¨mÍ®Òáì2Kóä_þ~:¯wià!¨-̬˜ïúµçÀ…fæ¨8 æ%Ãð¹8O? -Þå×0‚w¨,ÎYÉÏ -€Ã®ã¤íâFÃK±Èòñ®ýv]ÕÈŠ/Bb7ÙCa‚2-âõ¡x^‘€8B Þ)§P wo>”šr†Å "Ô"¿=xúM˜ȯÝêoFÍÌv6Kr½>+c%c´x‰™t óR#ª| § @­7¤Õ9{0"êÄÁë£xoE:¥Q²ï‹±8Æ_88ý#Û¾HCó8í…·Áo{Ô3¼ƒã® Br€àe2 ÑÛ_Æ ”oüè6œ™õüpæ]†ÏÅjx ˺â/µšÊGÝ2@6Ã=ଖ8A±ÌQ²GýÕgÎáå~»ŽäÄôx¢·=¤œ<#È£>Án¥,î©bõ¶—qXîh•‘ädL\Ç@æÍX»|D ]ò™‘×Û¾¦ähÿ¢ëÍŠ-&Júƒ…áSøýA,³‡ßü²ÆÁqdD¼ì$Gî¿|øô«‡¾üçõê\}}XÝÈ’|ƨ…ß Õ—³pÖîþf³ÑÂä?÷þ¿´endstream -endobj -1148 0 obj -4511 -endobj -1149 0 obj<>>>/Annots 522 0 R>>endobj -1150 0 obj<>stream -xÍœ[“·…ßõ+ø;Ysn$'/)]"GK«h•ÒcŠâÎJŒ–KšäJv~}N Ìéå²ÊÞ•­*gç#h4 |PM¦øWMæõ¤™MV›^?øîi?©§“×W“ªëϪÉlÞN^_N¦gÓ)þºúöõòíõ0Ù^MooŽÃÍñðç×ÿ}ð÷פ@(5©äÓ«ï4³³édÖöøÿf2›ž-ôâzr!_äûw““ª’¯Fmf¾Ž¾·ªÏú³‰~Ñ6“j1=ë,;Þw„'çÏ>{ñŸÇç/^¿:ÿáìøÓ1ᘠ¼ÙYcyZÀÿ:êGÅfR7ÕYíõ¡€Ó¿Yß\n?…u ´‹³¹¥hGyñ:HÃ5¹2àÉv³\ßdÉ6“¦nü³(×AÄöÛëDa(Më{H 8ÊŸ²žÐÏJ},àôËÍÛ¥ØH-'ôíÙ¯üoÞ†<™ÕõÙ VÛVg½^¨Õ~÷´S…m£qfÆH¿_îŽÃ>=É7“nqÖZ–ÞöªÉvNšÍdÑÈp 5ÓÊèmøÇöSªi6“¾“ɽíÇmÒ“£je`0 ÇÀ+ZáájY$ &É€ÄôUXæaÁ" šâ!R‘‚5 Ìß©(pâ1-WnwB2 .t’³ŒÄõÕpË„ÀÌf¾OÙct€]ÖÅb æ ß»©€GÑ`'Qô®A=Ñ2ËÔ(â ’BœÅTœwo*à«ðòv?\ÿœ0,¦ëüHI<&Œ÷L!†ît!î+“Àž’›ö2¡X T[ôR*àQ±³Å“`öë½ZÔêcâÔ8íñœij ÙÉðDXMQÌL…pÙEÄ©NQUæ\fÅûãå~Ø?Þ®ëãžšÕ']-³P`2+P¯†ååúæ]xè~þ‹Üî¯ôο®˜mß®ŸÁµ}ã…¶/‹®Ÿã¦kÕÚ¶jˆê œB«– qïöÛÛ›Ki 4`ý[ö™kxþ–uá‚ÚfQØÛ8%Å'WùbŽáoäzÛÞ¼_æ$2!ˆÓ2½o?Þ.¯×Wë&…Q't)?Èøƒ¥d·%B*'),-¢ -X½õäâï“ ¾³®òU‚h ÉÎ&G ,uƒ±qmR ÚŽ!Iè*Œ[ Ðp|ŸG>k@è%ú±…ZÂÍpü´Ýø›{;ÅLö; }g«³M‹q,+‰.\­ÎeaáƱñ£ -„P1ë'] Š°”à^>Þ/—[²UR‰É7Ò=üâVËJŒÖJ -è±ÚÙ},PTâ úæp\×£©°=­düVĬ+¬UÒ<Á2@à[ Ñd}̘Ub³9˜Šh‚qiW+$Ãû¶QrYÅõ -©h½óßËz Ïñ]7 41l7\ívs·~@pˆõÖ8 *ØnðxŒÛ-oÞÙ1†ƒ€ÆÏ€†TÖ¹X!†+ѿѧþ1ȳ° - ¬Pa+\‡TÀ3^>yœìU2ÂllŠõŒ›a¸.C7hÙßË=Ù‰õóWÎÚf ÷ºpA¦ÐÊ rn¬ !Œy,$½`qÒ-—ÙHƒ kCÐû¾&¾f™˜Ã\LšŸ#ð”·yžaXÃÃD-ð€Ñ’ú9RMN¯<Á¯åF¡xÁÞ7(È'ªaç–‰ëet𳤾.c]O71³³¾F ûïž/Wï×79$`¹˜‚ŒSK<ìáj…DKöЬDÁ®ç´òèž²¾¹Úî7fÄZª>·Yò6ÓÅIRje–€¤±” -øÊŒñ‹€˜‰ã3­’ -xÄO¾Ìõ ™°¤£,d6?ñ OÖûa»ù9,ë9j^t¼Úiçó1Äy¬PF³EÖÙ»˜Ì²¥‡x"¡BÒÍ ô¶G £¼Û©NóËuþWð;•uÍ„í¬‹µá"YÖlÒÎ:Á Ð’PVQ#S ¦8½RBl‚ñLvç.oW’ &úc¥&­!Õ”S“m¸ ÖélŒˆ¶q©É¨@ÛÀÀºYÛÆ.nw»íþ8义…À ¯…QØTÀÖ„‹€@Ð#”jÃþã°êˆëf÷½\[_ÌÌxn$Ÿ¢‹†6\PW`°Ó³$‚Ü(Vt¸@ľ(«÷Ã&‡¼$cN!zß×c9¦ªX$=Ñùz *æ ¯†ë0%Þ¯ip…/ V®M¢{ظ›Ê"™8kË¡ÔA©ZRps83Ö3^=Í Vã†1 ÅzFÝLçiva™L“av1åzÜôú'½ƒ/’ ö·fŽá"W%A[´²pA†[KöŸc5®[í¶ -ûå2A™žUýÕúÝ-G[,†Å U‰IœQ©€gÙéÄ„k_!€õŒOëãûÔU,»k+¢T§&]ôåÇ)~ÃĹ˜TÉRY}m¸ ®„Õ‘D±ì‹*´ÚÉ ¬û$.²ŒóÝpcÜ9édä˦¯¡$°!Él"ø’`êó»ÉõüRkÛælà3Cì!qv¼›³é%VŒ Š>F•4§ìTš³dœ$÷”ؾ>adÜ»EÍ»X°‰6 ÉH©·‰Ô¦‹Â×Ìì$™ä1±eôÁ×4Ž ®s\Ž…ìV¦„Í C‘ì–‡ðI -é ñ×V¯ìƒ|}îÝX ’ÁÅ 0…y…vѦH\ Ù,o–ï† Î†á!ËÓß:UþÁuÒÈ9ÊiÂuf$g·špAf„-—"ÜÁñ¶Ôy$B{…MSƒÐûòx»‘ -Œôëâ>f´rŽ;ñ—¾Ò¦‘…Hƒ¨Af½yŽÚ2œ×n°Ùa§¿SyíÄ‚[i¬,¥{ƒÔȤA##— ?ª¦½ï Ï6»ýö#gmF%8ØÈÀ@cNB{ÐÛ=ŽàSŠœ¥!“ïa@Êö ñT-‹€)L‹PªG„a"}¯q7Nö„UàO½9—©ëÙ2(‹[c×ËÍÄfå%‰Ê„Š\†¦â’qŽ ØÇõ°³mbÃI|eð†ŠZ;‹Ä4z˜†E(Õ#’i)¢¯w–ÓõÜtžëp¡ýƒs­5Îo¹©ùä<Úb«+@š®ÁÁqÁ)!Þ/ü !%š´­áP GÑè³­¹kH)]#;£–ÓÖ'‰†IÀ1–Öb²"ùM‘æpk3ò\‡†‰$ ¸pAŠM7I!é:T²JÀ cBìЂñr¿Åk\›Ü$”þDHm1‰ìë²ÛëÛ´«€ÞüšÇ¿Å“™Ów5:?/Ìã5lWŒ—½Nr5æ3ãÄ>3J´7‚&>f‡‘Ã,Wûía\H ]ƒƒ„¢ìÓnßâtnÜK¨¾R¯¸Îhèo.¨3°!bã „fSP2OQ¥Çx ‰§º@øIñ}8ÁQÊc¼™Û†ã-¶3I…ÎD^õ榈ƒJJìÎ<\I(ÉÙŠ°˜X h‘4£%K -Ñši$Ǿ3„d‘¨ÆBbfb5{Wî× 65r^A¶@fiÖ“yÇ‹hfŒR£U@/Ç @o{ÄÅpö'1Wq5ô¾§Ð!2Ò€€~¯,!A=b\Á‘ô ë žðæÙ‹‹Ôá,+–Ãp¢\Áñ„w!À•Ö¿«n7S­¹èÍö¦¼j7Rá‚<’ìfÚ\8–nÞU@ì8Dƒ(' B!ÚwLQ®¯Ha‰Ðµâ$™ QLU$E—b}‚@Ì€0IÅ#ù¼=@IÄ&‚g3-àk2š&iÄ«2-à oÎ_ýóûWçÿ;U˜Û»3¬ÞlMÕ!ß›â¶pAöƒ]¶"ns‰ãˆýÌ€h?â¤ýh-´«™¢\_‘Â~!Ô#>c? ûÚ€Ä~Šç)ì'bW€2}M¼ý(¡ÆšÎÑê ñwÄ+!ԛݣ -o¼å 5^ŒVT-Š¨È%»“¯¾Ì±–ʃ yÀÓí~ÅSҨ¨Å6ïÌ2”j+Òy2 fz‹HTË C$ ÄÇæ9Ó襒P»t þ`å|¨•Ðcƒ¯øsC&¤%l–¼ê&³{ÌÕôf«$νêâÙŽzÛ*#¦vYòˆýfrc=âùòCa>A†–‹–ÀÅúzœ2  kOó(‰ë)Ü…¤BE°ÚGrEâ’VζÛ±o“±SÞ Y8Œ’=†láNO&s0ã,£=·’è®ÂYÂÌ…%øDwaq% $Cù„ª`¼ØŽGËI„öÇ¡ø®„Þ÷ÕX¾ÝÞæ¼,d&ÉI<«šåå -Ã1û$ÒJ?Š[·$-àIËËKd4CÌÝËË‘÷£"»"~¿¢6@«Vц¾ Ô—á]7¤/éôì(B#"Áẅؙäùíõqmv¿F%88–Ù…9 íÏá®ñ«@û«å*·á=:GòylWÙñ¨ðŠ¶L´a5/´YyÇ£ªmÔvj¿#‘ÂÞ„!)Û"°æJ–IŠÆ€…‡ZiEô¶•_Hª2¨Ht ^‚D·0Aï[Â="§ÜoVãî&I -gš (±-i}8ÜÆž­ï9ÓWMÓîU#Ø)ʇ6dog‘Âó+R¿Z/ àÜ1DRTÜ'0,½ïØáÛ-÷ëÃö&8 -¼BûÇØäsm„ð?ç;ÂçÑ‹àE—í€Û°Í¢jLáí„Õ¡M -ýùîz»úó²±x/~Ó÷Ï\»f ›ˆ™$£>Ͳð'ø`-5ÛKÖ`Ì„sƒ @²¤ý¬°¼•Ç¤a\›ÌèT`ø<¶IˆŽÍ|#mBÆ"m¢z9ߘÐ&à‡áãp]'F4*JS€Þö­½Ý³/òvæÇÂN%|³;1êh3'+ðk_rdžÕhI§>¿Î/- 4Þ ß[!@Y¹Ð/ŽwíWsµü0ΣDf•©Ó+ѶqÄ“ûq”É„~„„ê TÏ°?N‘E dÄ»àLˆLKøKþú±l×ÚÖSœ_;¼ê„7$ÃÏõ iyw©hÄ"f“Bž¾ÂçÑF°‹VLYd#á ¨ÆdÃÿòYÕÁ7ú xæñUæQ„FÆ9\¼‚@„x××`»“~ŠÞý+½™âÆœkΰôL™8ÉbŒÍ‰³¶×áÓýF_>>>/Annots 555 0 R>>endobj -1153 0 obj<>stream -xÍ›ßo7ÇßýWì£Ü)û[Ú§ÂI/m€icãò’E^ÛêYZßJ²Óÿþ¾3r‡C¨qE¬(Â,çãÙ/‡Ã!—þïY‘åøSdó2«Úlµ9{suöú]—•yvu“M7+²v^gW×Y>Ësüëêüjùõ¾Ï†›ìí°Ý÷ÛýîÕÕïgÿº:£Ü++èoŸ~:«ÚYžµu‡ÿo²6Ÿ-¤qŸ]Ò2ãmöú]ýhxÓ6øqêçí¬™eòÃm“-ªÙ¯¯§ˆŒHÛÖƒ!PëÅýz+›ŸJÄ"U[e‘åye"n(eIÈ"‚|ȵ“É&ë -D\d/c§~yíí•IU; ÏcÀ¸|¢À(šYw2áj%m;·ø°>ÜP’Îi¢™P¹¡Íë#K•Ú(±¤BèhAn4ÁIš0\”…PÌ(Ty½ÓÁZGö‡­Ìü’ª±—T¨u—Ok•kLºÖ+6¨=éê ‹kD`]SƇP• ­ÿ-Î"€<§‚M;ñ©ßîÝA²Ks¢rµÚJbÅAIV·5çÕº@°¹†Èúú]#‡&Ô«1 öíÝòaß>è”ù5+–Žˆ%-³Ý” ^ -!öLœ‘Çðñ²ôeCCD:"ÈsKˆçŽ¶ň¡øóóÇÏW¹yÁqÆ>J/™uƒ3¿Ãs0´ê<¬nÌÒ9Ÿ©Ú™Jk¦ ¡ÀTñNÏÞ]üæ4¥˜—Ï#ñYšÕ¨šÃIdk:L¬¹!¯†S­ºZà¡žÐØB«3Ya»V!mFˆ3*Aü¬ŠŠÉ‚B–Š‡È^ˆÖ‰Õrëƒ^‚Jåá;XÆû‰0ـЖHS†à:XÂjØÞ¬oÓ!”¶ Á‚ÈÑŠú–ôñòu˜ÅÚl“•Ø“šañ,äór|ðï¤Íi¨Ê²—çÖ‰ý]?1´ ص‘ßôRòèpÄ‹å6lµ 85nøÖñsIÛQ1E_¼c?L®DõnwèÃr«Í0·ÑÛ¾Ìâب<Ýõ¡ÀÔF@ ` APzøömtºÔf€`Ó`FÖw°/çJXmJ7‹ ï`)ý¸Ãañ—W^\m‹)…×±/Õ µl”Õ6 `ÇÄÖ²ø֗îk´ 5Ÿ*DáZˆ.¨&# P±RtªáñÔáµÐ6 ð…˜ PKp—180úk_8Š¼ÓÔª#CÙ|¹Æ”-* ð‘©:Ô¥ð.B"²EŠ°e7wçᑽ­׃WNÛ¸|S‰;>Uðé}ꄪjhÍ> &o IŒ:X'nû°~Ê -^´”°¢÷ð,ãa\ãšÍ”p”%8|Øs¤ƒå\kL° Š2¤|Aác¤C‚ž¶÷Ãô%S›„r¼ˆA¾ƒ= #ÝñiKÊ´‹ò,'Së§6Ã$)ècd ®…è,¨Íh®RMA| q3mçv 4 íâSŽ¨5Í::ð«æT…  - ¬ç¯úÀ¯šÓšÞT;ðó,>‹XB·\qò£loyCãË®‰7òÜø Í3´ g ñ,åbµêw!›kC`æt"ù‚ø áâ(¸¢¬gùœâ,rE:XÊn8Œ«ð¡YÒüáé¬1¾ƒÅ¬p—Çû¢Í©é86òÅw°Çõ20”ø¸mÒÁ2Þþû’r›êµ»œ«k½®I­Ýå"¹à‹X óúãQníŽXîyÂ8éµ;–‰ï%ÈÚMŸŠJ -…µ»líåXDŸJ-´Þ;úÓoD§M‚ø©ßöãòÞ±²CìáÚbO»!Ï­#ëíÍ@Ãã½goV¦˜ù;ÿf㛯ðe¼ä†Ä Û˜’¨›©#J–UÌ‘j ±6w²Àý×CØ*’”.îGy»ÀWÊÝl¦5û¥g3Œ•›¯ðë!%7”¤5É-„Hf" 'Ñsl|ˆ&'j‚À<îÇ­ -ÖÉÊâÛr¶Æ8p‚éÇq¶ã´Ås”,K¹¤Ë¡Ç ¥,>;Æ ²€º¢7Ù@>*5ÁI›0.öûåê.Z…è3Œ3ua[JK\ñlëªÁëވƇ~ÿ'ò…&u°ˆ°%Õ6 à;%ÔÆÖî¶ù¬¦-ÁÁ}8Ë´å<ŒpýY~ÇUÕª®ðK1%7T@öN/B]0䀭0G4ÀÅC‚øu¹_ݹ_¼¨þæ]ýÿ›å'm¸úËÝ-a–*nˆ4Ô´·sßo¯ûo4šåIÌû¿ EQðïðàUåW"ùoüŽ ¬&üË•5v|¸Hënœ_^|xs‘ý:¿ÓÕ–‡ÕaƒÉK{¾â±þçœËûóGÉ;¿ý¢÷òendstream -endobj -1154 0 obj -3118 -endobj -1155 0 obj<>endobj -1156 0 obj<>endobj -1157 0 obj<>endobj -1158 0 obj<>endobj -1159 0 obj<>endobj -1160 0 obj<>endobj -1161 0 obj<>endobj -1162 0 obj<>endobj -1163 0 obj<>endobj -1164 0 obj<>endobj -1165 0 obj<>endobj -1166 0 obj<>endobj -1167 0 obj<>endobj -1168 0 obj<>endobj -1169 0 obj<>endobj -1170 0 obj<>endobj -1171 0 obj<>endobj -1172 0 obj<>endobj -1173 0 obj<>endobj -1174 0 obj<>endobj -1175 0 obj<>endobj -1176 0 obj<>endobj -1177 0 obj<>endobj -1178 0 obj<>endobj -1179 0 obj<>endobj -1180 0 obj<>endobj -1181 0 obj<>endobj -1182 0 obj<>endobj -1183 0 obj<>endobj -1184 0 obj<>endobj -1185 0 obj<>endobj -1186 0 obj<>endobj -1187 0 obj<>endobj -1188 0 obj<>endobj -1189 0 obj<>endobj -1190 0 obj<>endobj -1191 0 obj<>endobj -1192 0 obj<>endobj -1193 0 obj<>endobj -1194 0 obj<>endobj -1195 0 obj<>endobj -1196 0 obj<>endobj -1197 0 obj<>endobj -1198 0 obj<>endobj -1199 0 obj<>endobj -1200 0 obj<>endobj -1201 0 obj<>endobj -1202 0 obj<>endobj -1203 0 obj<>endobj -1204 0 obj<>endobj -1205 0 obj<>endobj -1206 0 obj<>endobj -1207 0 obj<>endobj -1208 0 obj<>endobj -1209 0 obj<>endobj -1210 0 obj<>endobj -1211 0 obj<>endobj -1212 0 obj<>endobj -1213 0 obj<>endobj -1214 0 obj<>endobj -1215 0 obj<>endobj -1216 0 obj<>endobj -1217 0 obj<>endobj -1218 0 obj<>endobj -1219 0 obj<>endobj -1220 0 obj<>endobj -1221 0 obj<>endobj -1222 0 obj<>endobj -1223 0 obj<>endobj -1224 0 obj<>endobj -1225 0 obj<>endobj -1226 0 obj<>endobj -1227 0 obj<>endobj -1228 0 obj<>endobj -1229 0 obj<>endobj -1230 0 obj<>endobj -1231 0 obj<>endobj -1232 0 obj<>endobj -1233 0 obj<>endobj -1234 0 obj<>endobj -1235 0 obj<>endobj -1236 0 obj<>endobj -1237 0 obj<>endobj -1238 0 obj<>endobj -1239 0 obj<>endobj -1240 0 obj<>endobj -1241 0 obj<>endobj -1242 0 obj<>endobj -1243 0 obj<>endobj -1244 0 obj<>endobj -1245 0 obj<>endobj -1246 0 obj<>endobj -1247 0 obj<>endobj -1248 0 obj<>endobj -1249 0 obj<>endobj -1250 0 obj<>endobj -1251 0 obj<>endobj -1252 0 obj<>endobj -1253 0 obj<>endobj -1254 0 obj<>endobj -1255 0 obj<>endobj -1256 0 obj<>endobj -1257 0 obj<>endobj -1258 0 obj<>endobj -1259 0 obj<>endobj -1260 0 obj<>endobj -1261 0 obj<>endobj -1262 0 obj<>endobj -1263 0 obj<>endobj -1264 0 obj<>endobj -1265 0 obj<>endobj -1266 0 obj<>endobj -1267 0 obj<>endobj -1268 0 obj<>endobj -1269 0 obj<>endobj -1270 0 obj<>endobj -1271 0 obj<>endobj -1272 0 obj<>endobj -1273 0 obj<>endobj -1274 0 obj<>endobj -1275 0 obj<>endobj -1276 0 obj<>endobj -1277 0 obj<>endobj -1278 0 obj<>endobj -1279 0 obj<>endobj -1280 0 obj<>endobj -1281 0 obj<>endobj -1282 0 obj<>endobj -1283 0 obj<>endobj -1284 0 obj<>endobj -1285 0 obj<>endobj -1286 0 obj<>endobj -1287 0 obj<>endobj -1288 0 obj<>endobj -1289 0 obj<>endobj -1290 0 obj<>endobj -1291 0 obj<>endobj -1292 0 obj<>endobj -1293 0 obj<>endobj -1294 0 obj<>endobj -1295 0 obj<>endobj -1296 0 obj<>endobj -1297 0 obj<>endobj -1298 0 obj<>endobj -1299 0 obj<>endobj -1300 0 obj<>endobj -1301 0 obj<>endobj -1302 0 obj<>endobj -1303 0 obj<>endobj -1304 0 obj<>endobj -1305 0 obj<>endobj -1306 0 obj<>endobj -1307 0 obj<>endobj -1308 0 obj<>endobj -1309 0 obj<>endobj -1310 0 obj<>endobj -1311 0 obj<>endobj -1312 0 obj<>endobj -1313 0 obj<>endobj -1314 0 obj<>endobj -1315 0 obj<>endobj -1316 0 obj<>endobj -1317 0 obj<>endobj -1318 0 obj<>endobj -1319 0 obj<>endobj -1320 0 obj<>endobj -1321 0 obj<>endobj -1322 0 obj<>endobj -1323 0 obj<>endobj -1324 0 obj<>endobj -1325 0 obj<>endobj -1326 0 obj<>endobj -1327 0 obj<>endobj -1328 0 obj<>endobj -1329 0 obj<>endobj -1330 0 obj<>endobj -1331 0 obj<>endobj -1332 0 obj<>endobj -1333 0 obj<>endobj -1334 0 obj<>endobj -1335 0 obj<>endobj -1336 0 obj<>endobj -1337 0 obj<>endobj -1338 0 obj<>endobj -1339 0 obj<>endobj -1340 0 obj<>endobj -1341 0 obj<>endobj -1342 0 obj<>endobj -1343 0 obj<>endobj -1344 0 obj<>endobj -1345 0 obj<>endobj -1346 0 obj<>endobj -1347 0 obj<>endobj -1348 0 obj<>endobj -1349 0 obj<>endobj -1350 0 obj<>endobj -1351 0 obj<>endobj -1352 0 obj<>endobj -1353 0 obj<>endobj -1354 0 obj<>endobj -1355 0 obj<>endobj -1356 0 obj<>endobj -1357 0 obj<>endobj -1358 0 obj<>endobj -1359 0 obj<>endobj -1360 0 obj<>endobj -1361 0 obj<>endobj -1362 0 obj<>endobj -1363 0 obj<>endobj -1364 0 obj<>endobj -1365 0 obj<>endobj -1366 0 obj<>1<>6<>]>>>>endobj +˜1F`^–H>SÁGÇäŽÜF`Y#;ä?¬B¼àv¨Ž§#87 L]”Øž«+_PÅ„¾Á¤ìHÄX?¾¡=ïÒá] +ˆ=†zDn*É{íI`ÉUqg¯å¬6ðzŒT ŒjA¬Ì!wÀgþòÌhט’ñxE„ÃIË#›^Ø‚£¸@2vù2H-[õñŸÌäãd Àzö‰÷z)„nmSuL†¼ÛV'ù’BïøÌ5lR {Ùƒ€mü0Ê\(:V4^–2©ãü +ø]Õ%˜s$aYŽ¢í»›+ªEŠeˆ }ò&‹óÅB‹È_C|+d饩o#± 11² „°•1nÁ¸p-»&ˆÝ*,%?šˆ¬-Ô® t[;U¡“#ÿ04²^ì°R+¬‚FÎd¦$ÄiÁ!I:{hY¬¹¼w½?@ãIDÉû—o™è"ÊvÐud¹mY™|ØH+Kç”Ò–Yiýðƒá¦«xª©*ô£MzBxØ$šgÍŠñ<ØfÇ®oéÄçZ˜[µkÃ44-)¤âé­¸ß3äµ'-:´ËªŒÀmÊ~à@2Á!Ã)Ì/Xù_¸¦×H$ϳ Ö€Ž¾ÙtÀžxO‡\ß¼0b½‘ÒÐþâèÌío d¸ +Åæ6ö ³Âhe}ëä<Š³'µžxz»®·Å;øòA{ã1‹c«4álÓV•2rßg©ëÜ,êA‘üþSj4J#8Ý÷ß®éòX›ù«e¾ â +Q7}ØѹÝÌ@bÒFå;úw—o–Ì !#ãVrçraÂðm®ñ’†„ãtl÷]ß <6HBØCŸ +S¥˜ßò7@c™™<¹7PIø…i!X ôÜéýæÌÿ¦>ýÄ4ÈÕÈ°ÇË1stÎj €Ð9­ð¬ ÁsèÞKljvê_>~ÌG¹úñ7`- ˆ#³Þ!9Ó?œ€¯¨b†uÌ +h +Cf(TÈåI0rGR¶â,Ÿó“-ú¸3ë²ú …ÆÌ>/H¼†ýór2Ãp>+ ½–Ý?¾;'xß K8£½tÎîN>?$Ãá±ïøJ?z'vbÕé~÷> Ôç·„•²ò6ÔIîŽo¤ÙÝUtw±ÆÛüê‚Ök>/XObject<<>>>>/Annots 467 0 R>>endobj +1073 0 obj<>stream +xXQsã6~÷¯ÀôÉ;+¶ãØÎÍôas»¹vf³Û»¸³íL^h‰¶ÙH¤*Jq|¿þ>€¢ä(¹ig³ND‘|øøÏÑŒ¦ø7£Õœ®–”£i2Å +Ìøã?ÿͦódJ×óU²¤‚f‹erÓ>åô0:ÆÛ›5v…½ü‚h¾¼–“klºW׋d ¡+Þ1—‡øj±J´X¯ø þWšv£ÛÍèònA³mv°z¹^Ñ&c§´IÇ÷ôÝØÌ=¥¹Ñ¶öT¨5^“¶iu*kQ©¼?º*ó¤<ªšÜŽ¥•çÚê½¾¬´/Å!ÕÔH1©ª³T¸Lç6Œ¦4™]%sè?ŽUò”¨„¾n¾Ü?Ï?«HåÎê þ+͵ª¨Ö/5ùº2vïi‡eoŠ2×)´U–½V—ÐÏ8tpMžÑVãþ*7ÿÕÙ@}P5M} ˜J÷·TV®v©Ëe!^– ßÕ³÷¬a6[]ÃO¤qKÆR™+|Šµ0²sÙm›š¬«º·jù„yU¼ñW¥ÿltí“öØ|‰€ÂeßáÓ^xçÄ1F¬àˆn²q¿"µÕrªÖ6lO¢›a·?ÆÖÕÉÿƒÕÒ“¨÷£¥ûO và³Õ¿~ýùŸß>}Ž·B¬Ú ?OÖ-ã…}݈ ¹Öå]Ú¢q²JÖœKŒ‰ùrE¬½Çª¼ì@³”NħÎ"( ÎÚQS–¸U +D\²Xbw•*Ë8vˆ\ÕŽaëlOÔÚ·†«Ù^>3–‚XË2,×á _üë¯_¾0ú+•Â¹ˆtú275°âÑë%m±ôéó=é4¸èuRM?joÒh-:èYåf þÉkdÍ Ž-—l€µôEÙ{eÿ¿ccßñíd¾Nf74¹žƒJàþß]ó¦Ò;»c‡ˆ•¯¹­ÚÓ˜~iù€>Š@¦¿Þ*\([á%Pˆ¤JÍÈøéÛ÷Í7DÄ‘ +Cpn0Ît­Lî ¬Á·3Öêjà&Î=&„v9^ðŒÃn®‘Ìz?›”“>Ñì‚ÎvŠŽ‡Éž®’‰]»@ æ›ãW>ä0áÇ@Lq ŠCNú˜ç½Jl<3FRug¸#_üÙÙf÷o|àv>#ž¨‚w +ˆ2È™ÒÈóõ þ~¥°+«\Y2Ò"ËHáß–Q°](Åd bŽÛlJ…± ƒOÁܨ8²½PT˜GÕµ.JÎZ\—_°$YV(@^Û¯yL¬ÓÙ… W@rL´¯Õ67΀…EŸIk<_ EK¥hK]yrX4=âJL¿7iå¼ÛÕœðˆ‡°KôrtF؆°±/FŠ=ÅZY?ÜÌvõÁCÙÒS¡`*Ž82§ñÙJï hëÝ*ˆ$ø0çÄ+N— 2û僢‡¥‰£ @fˆ çY¨`¢UuWjAça¬4èÊd XÈ”\¡™L¸j¥ ‡W¯“bpkNWpDæ$ÔÌÎs]9íüyûÌ1P +^ì5µÎO"AÑÞ¹ŒL¦_ˆ".(îãÐi蔣.ú&=ĶhŽ B2—ãÚÅ‘'£ùº¥6I¿ *ׄº[}#|Û®›—VE_ÆX"§‹E|‡°æZ£=²¨L +SKFP„¿¥¹i+‘ IpÖa½K¸ã¿¼›ÒMh'óEèHØé )×Ï¡ÅÓm Ÿ‡ícck4‡Ââç2fÓPuâÿ¦ˆ¾ËŽå¥oÐ^Η\Én;¤UlU$øµm$…:Å­ÿZ8³Ûá¸Ü¹§¦ì6Æv WÜtrFå.UÃ’àOÜF*Mk´pt«SMÜ1ýÖ‡“9é™;dgÑ=ƒƒ,>°†âg!·³³k/ã1p/ïæmç4Ž7๋Eï™qMΓ +#"f<¯ÑÝ ýl@6^ô(CE–;„‚ëw5Nê©c˜Â¼0§²w:»ßKU‹:‘!L‰Ãˆ¯ÄÅ_uIŸˆJKå Õ†¶Eö_€ú]ÿÅ ú;þ+_sF{-ýsp¡^LÑd›bËVïúÜÕ@3Š\EǃI!lË6ܳIXŒ3Ù˜órtú.ÓÓ&SÿÀFlcÚË{`h…%Ð@f°¤ëŒm Ì“IîqüøA¼ÁNFt€ŠésñB°™úQÎ ŽöÐ4L€ÖÃò(PfFÏ“È®rE[ŽvD÷W=ó4w»,=4øµÇCmÀƒ>/XObject<<>>>>/Annots 472 0 R>>endobj +1075 0 obj<>stream +xÅW]oÚH}ϯ¸Ê[²R’¦ÝÔ„îBT­´R4Ø8µ=tf áßï¹3cÀNV•VÛ4à™ûqî¹ç^~œÅÔÃOLã> F”g½¨GÃËËhHÃɯûøÕ’–üGùOÌþüíl8ˆq,îp¤ á¸»œfÎP÷£ ?ðA÷æð¨7`OM7ó³‹ÏWi¾DX£ ^¤ÎiæIg]FqDFÒýŒ¾eeªv†æ$ ‰’Deײ´Y"l¦J2Ro¥þeþ ›ìÝÛìöÇ°Ù™¯3C…´k•RVnU¾•†pDšf|ÝZº–*ÏÕ.+W´ZàŠÔWÜ3S,¢D•KZf¹üÕ»êÑUíiˆ¬á‹Â?Y&z¿±°cÌNéÔÐúK¾Ö£nÜT'§L*Ù=3yã\m-œÂñóio§á>©åÓ×Ûç¯qy$ª+ðkwŠvbïòÎRÆq¹ç¬wk $5)M¥²$¨B8l§‡\ð"Ó¸oh+ò, §#š–’/8lëDQŸ]k¹É÷@r©tá+¶Ñj ×)×`Ûº­ÂÒ±rÑ*Á›÷®Ê…éœ=W‘"<©5âNT*£àluE™£Ö OÙ5ðè1#p’ßpQ³U¥}\xÀÔXŠÄâ…°„w¨–Â0_f¢XÚeyŽgð+­ŒÛ¥´P«Ê4­?<æ<2ÏE- ee]é¥ÈrD¦ÐŸÏÒ…æ°vÅiy~]*D‡ŽÁÿ„.‘çV²å¯ x¸¢ÀÆiDßÀ +€L†ìuÈ-ç¹J¾“ªP‘%|áF"µh¡²*Ì,ôRáº7;XX+‹eôQ‡¬–¦Ê-÷.–«,˜ FC<ľÅ%Q +& Dø&Žxî~©‚ºî2P±Á¢‡y»îPG —cn}0ÊÐ9Ë^¿ü¬¡RJÌ'<~V0ÎŽ›·Å¬ˆæÜÙa˜wBÍ=}Œ‘Ø3ºµ +Oß²ýœÊ°Ús37ÔÑ¥X!°°"èÜf§¶ <ÍÏtñ9 kAwMbŠCÐ÷GcjÁ=?Dý _ì{BspD_²²z!³7Ð*’/˜ +¶^.ƒùaQpI©« ãøéáúþuŸévz}÷àÞzÍ°ö¤7âéö'Q|uÄñ¿Ö;¦§gU-X±Ìd+&oÅc¿L<ÁëR¬Qü…äQs”vh"± ó¬Þän?Õ·½’¶þ¼®z· ’!S%k^3Œ´–¹éÄèV³–ážõ¾&Xyëí±æÈ…´É…/©?So˜‚&è}»¯›“åqcßw·®ÕjxÀ` cL=gƒÂ‡ÖDŸaž`Å°òfk?×+êðŠ¼À–ÜpŠµx›Éûø°Õ»ûîV²ÔÎ6¼ý>ý6ŸB« S ¯Æ¡yŽ{zc< "ú¶§ÃŒúÉõ<,c'Ôá½>•Æ3/ØÄÀ"ŒoLÛÐ<±/-¹À¨’n”»Ï2!Újµãƒ ña]9ƒpúáÏ$•Á oû&_ÝVµYÖû…ÛhU‰uñ¶ª¾àüaˆ¸M9©ó<»¿!¿œöѱ“@Ðx„¯l“®À×´3»¾¿¹¦¯Z¹õðV%n`¹5ŽƒèÖǻ㾚Ÿý~5£ñh‚olpÚ±íOó³?ÎþËnŒ”endstream +endobj +1076 0 obj<>/XObject<<>>>>>>endobj +1077 0 obj<>stream +xVÛnÛF|÷WØ}p”HE—´)àÄNúKnÍ (â¢X‘+“ ¹«p—’õ÷½P–d«—Ø°-˜Üs™33g¿ô©‡ï>bJ†”Õ'½°GƒIŽi0ásŒŸ†ÓÂ>H£çÄÉ ŒŸ;1š<=ð&=‰Þ ¨ß§täÃñˆÒœ¸×£4;O‹RQÍu!s*ÅJV+®ˆåy©K)H.H¨GV•\—âž–¬ax›7Š´´ÏT=3)´(+þêÇô Òõhâ²ñ  ßùÙ-+ÎG{ Þt‡oY=gtsù–~}Jg”l‰àT1ó»dâõ(è÷И £MÁ +â™-q!ª%@˹fe¥N|¾¯äœUü›üY³Yjô¥ÔZ6¹¢×ô? Ò½­xÖ6¥Þà¥VñæHÌ\Ö ¥Wò^ŠŽ÷1A³[ªøŠWì$¡®tÙðLÖ59Ϥ’ÊŸ}£þ¸ VŸ§Wé‡ÙûÙôXïK¦ t)YóuÁ•"2SŒÔFi^ÉÙp–“•Aaã Ú%XÛìpbˆf>vfžd  €þJŒ>Šò\*bY&[¡IpŽà9§ ™4ÏmβÂbþ‚˜¢5¯*ó×Ä6OºJÈ_ßÒ§Rär­hšF±az·JÁCJ÷è¬tÓfº{,ÜßÚ²áyhÂEï&[Íñر8 _†IØé#¦oIrй{íÂVºíIL£€ -¹*sŽÖ @N9’eZ6R…l«|§çÃ:?”¢ÝbeHÁD¾%©ï$½Y–³T2ºEÂŒç¦=ƒ”ÅÓˆ¤óxûVŸêµcü™m~@¢h‚Ì™*(È)2=D§Fe~JAMÝçn^³¡¬Èò{èJõßxI¾¢Ÿ—ë_|ÐŽÜAá?>nÀ¾?ôÁ¸ ‹Ü°ãöèD׎Itá{œ`ìÎL¥áŽXN5ë‚ rÆÒ¿ÜP™‘· x©nŒ½5!ýþÄ+xeà¼#íö صÁï˜ì‚U(ØŒ6ç«H´ÐØ©×Í_®zw÷C—ñØlƒÿsfot†@{ÙL*;,,³¹‚Än’$†ôVŠ¬jVÔ3øœÿ9ˆ½æ À‹Š?”óŠcÝ13LF.y‹þahÃV†u*¾ÕYÀ*)8æ+2 ©$µäY •1·0Ec[˜£„èŒÛA`ˆîükÏ TH;AM‡Ùn~~.‡h:K·v!¸¶ŽiŠ-¤Ì¸zaÛ0röþb m·«œéú²]Änx>š‡êGê¹óVcóbÀækö•Û`Öïým`Gîĺ(á΀¡’Æ|Ð:p8H¶sÈ4£43Û;rõy²fÞqÜ{ú”LÜïâáÈÞ½Ö>^ÆîRp!$š„Ñ7©íºöÒªy=‡¬±ö“á.”ŸÍÔ ™Xo(~„¥±ÒΦ)u¹/Ý%DíÔü_ÒŽ=ýdŽ' ã‰#ãíÅõ› ºiä¬ º”Y‹{ÃÐÄ úC\Ç £Ø¶âÌËèdQÞ›àÔ`Œ=´˜ÐØöåf` Fƒp4Cl@#™]¥'¿ü ï¯$yendstream +endobj +1078 0 obj<>/XObject<<>>>>>>endobj +1079 0 obj<>stream +x•W]oÛ6}ϯ¸@6ÌZù#n’ØCÚµO+Ð!Þ[€Œ–h‹‹DºüˆãþúKJ–¬¨[¦ICñ~œÃs量Íi†sºZÐÅ%åõÙ‡ÕÙôó;ZÌhµÁ›Ë«kZ4Ëf3¬ä“¥Øyii™ÑG£7j¬Ò[úzó…6ÆR¡œ·j¼,?_­þ>›Ñ›Å>&¹ÔÞŠª:P-´Øb‡¾Ä¢Ê…WFóf=¿J¡ß\,³.³yF·¢^ ºàXië’æófëâ*»ä­7¤C½F~fCjõDî༬ÝMäö=ÝM·¦V¹»W¯I8Ú˪âßH„žð|¸ý6¢VÈ’cý®txzMÚì)xU©ï’w6°æ)¿¯UØnź’tsˆ¾˜"T’ƒ#ç»WpœÃ‡?7´³æQ’@È€ä7ƪ˜‡•Î›#甚Šœ´*—.£¯VáàŸ)~[„œÙeFœS!såx Û‚C +YàP5â=`2NÌÑN8·7¶`.„kã»I: ˆ(Æd*}>VÑfú¹=¦ Ø›Pdå· l¤2ñ³A‚½4\Ô³¦¶Và })ü‘7'sHÏyuL܆¼ؼ4`¦ ¬ô£©1’?àƒ +÷>|Û¤ÊlU£Ö#¶×ÃM£ <Û…ìö£®P5­¼ÀgÖ \\f±”¸Ü9`¬e^ +­\(BBZæ>ê‡Ô’ÕÁÚXû%]H[PÄ&O‹szªI¥7V Ô¡­`%d‡„”#„-µ-¼C‰¥5a[’Ñ’6 +%’xª¥ÎØ4½k9íQp7éU-ô½>,”çΣt¡PHATÑ£uU}™(ýàC…y^ ©*³¡Àµ&ù$êÝ¿)¦cú8R“jš©ÈhU‚³Ö_)Ð!w³ãru´–2*£GCй©ktLFåø0×h;´'BŽ­Lyr^äŽûì3UÉ%ztl9 ”Ž¦á6¡Â.Õ4ŠX&GdƒŒ>9Ç;vsNº$GkÉ“€ÂàbÖÌ!|Õd‚ì\î|”`87s*î¨ïwûb¹fO+‘I<°éç½kÁ2UÈùÏä›y6k±Ì2d“s.£\[­v;ƒý+¢ý¥m«Cƒ¿¹2¨÷4Ý­h—8ûX€ÒûCÁ5½Ä\›˜Ñsãó8+ÚHÔvÖ“ØŽ)ìþÛ6 uÔ<œw-TõÜò%)7çEºÆô¬‹·Úzž› }.Òæ”—½ð^Õr$ü‰Ý8èž\z\;ˆ—_ûŒÕ¸å9Äз#«BGÄ9=Oøü8ESà±°¹EÉVŠ5ŽSôöðëÅ€°v¿ ùëÝ ‹xQ↲3{¯˜½Vî*‘Ç&R§{ 7(Ã÷ƒG¨ ¾u‚\êÍý@é¼ +…l†äóBü‰¦k¥§(ð)ÐMÛIô [}9po~<,¾gÕ¶pÓZ¥jåÛM±¯÷Ž—t¾»g}FK^°ÀàÝé&WjÌKÿ4b.[Œ±~6ì¹Âe76ò˜ä¢®lDÖo:PìÅs=.x)¤îÞ³…r.pY´ÌðZS¨ÍÒˆ—´`®±b‹~Kb³˜Kª·{9ö’Ö¢Ó|2Š¹<”¦Æ|¶1ÚX.©—w®Ä5üxª)—€ë{rÄ‹ÔÝ{Ž[¢DQm|ÑíñbE¡B:òR¯¹ÒŽF¼Æ¹°>#^ö¥”Ü(#¤Î¢Õa‡è>Ý ±uÄ .ã6N¹–ݽ°ºõÚ®Å\šfÔ¸©ožrÝÍ¥½cð'¸ã4ç‹uSùøNáWüA€nÀÿå y¶6{†ÕkŽ]Ð ¥†AûRáê ÑU2¿î>Ò..ÓGÚÿû†¤—|7.¯–ÙÕå5>X1ã×úÓêì³%œ’Ëendstream +endobj +1080 0 obj<>/XObject<<>>>>/Annots 475 0 R>>endobj +1081 0 obj<>stream +xÕXmoÛ6þž_qÀ0Ôb9vœ8)°)²–¡[¼o6Z¢,¶’¨’”ï×ï9R²d9)¼¶ ëx¼—çîžÓç³)]à{J‹]^S\œ]DøwzÍi~³Àß3üI)?€(ÿšò¯_<›_GSºšC  éÕEtþÉéñìÍòlòvE´L¡ÿúfAËÄŸ¾ e<²;ëdA•°v«MB‰pb%¬¤£ï–q”mࣣ‰tñÄË%áI«ttNωÚL$z{’èÚèºH~øŽ¶Êeä2I…Nê\^rAãée4ƒ3£J¿ÛbŶEVôÐ6SqFµ•ÖëzÅJtn†§±.PexP±ÑV§Žîç$ËØì*'“}Œø‚Þí™°™´-3e;½øÛ:mpL•$áˆ4GQª­™ä:ùIJQ“ʨprÒø²=Šó‹ð¹ J^éŠ}µ@™,ÉÔeÉš¼Y¯lm ¨À-UëÚ4÷uÚllTå"z ³   C‹Ï&ò‡ZûàÚbvNVJŸ³DÇu—`aïñ36Zd.–(ø}m Õ'ÊÈß‘N;LP8H‰²Î¨UÍá‰Z›oCÏæèj¨Üo¾}÷0FcÐEtã?÷Á3ä*„ªÒæqËé\¯Uù +},û**EfÒû2òs ’ö£ž£h"TêDæb7TǺ.]{íø+” 1\ÿ™’}ÃnÔœnIŒg×n®ÆTç¹Þ2zQcÞ/D_ §â:†Ž ;‘©¨s”›FËð­€»o‹v´ïj›¬Ž{÷¿„ßî¾71žäj5±2®r;_&TÖˆä§Aæ ‰±xN'êöZZÕm=\¨íy÷ u¢žÆÅ"¹ +InÊ1ì]Æä“àaÚ:°/LR´gôÑB$x¤yh{‰ýLëæ«Ü@Ž' ÈŠŠÉ§´GC ¸â1ŒTì{GD5xF{J9OHä¨v '+dìšÃ£fmDA¢Lhë¥]V[A¥°ÜàÂÎÌ6„¨$¯<ÎD¹F¯©m3h7ü¿€ÞøyR›<Aÿ-\;HøˆGÑ÷Ó +|)âO_@ýÏÚÉ×¾zÄ0#ñ'Fæ!:©Œe 0I0ô`ÌJcV¬¸P´‡Ì!!X1i•ž&öØS wLná qr8ötZ{€—òɵðÂÞÀˆÞç’W#S°ÖæÄ!y@¡ Àï™^o,4‹Å3œ0‘0;·P¿ÆsJ.¹@ÄPʱ¨ÄJå`ì;áMT~„ô•åF]2¥AuëB6³ˆïÜóœ65zçCºZÎgæxµ!r™p¡ì}õ\¤²)ù–ãù @W>òÃX#rJÁd^¦Á/Y#]¦â>iÙ]ßúÙ8‚ ´Zã–°sŸäÁGÔÞîwHµBšER(àÆyÆFwà´{ 4ÚÉ@r•rKf(z°¿?´ïAP +ñ‰7.ƒV>ÖijAC5¯h´;Ú +(ž€¯O 'ùa”ÖÐ0”ɼJkØѱá¦cÞÒû,/¶ãˆSÎÁûé¾eŸhºws $¿?¡Ñž ëj'û±@€¶ +!0RäêOÐ$£ X܆’‘‹ub¥Ê†£§k­9Öt t%G› CÙ^»+ãC¿FØßAûùÃÁÛ³¦eÎU¯'0ò³3Òf=9÷YܯâˆÁ~î‘D£XåÊf\f¾›µÀÎwHp)0ìλàì&¼K8xçàÑÉKZ;”!ç÷<!CäÃH®_‡*‡Qb+°"5C…‰)-ª*o~³’{ŸºwÂÅÞn¾)÷-›…ùª N‰dÂë÷EÜÀÁ)gb‚ÖÔ½)¸‹‚¢ûv% +Ù¸iÉé5ÞßÜ\Òõí4ì=woîè½Ñ±AÑ}/ã“ãöÀx1Ã[šdt¦ç‹y´¸¾A%@~vËj~Xžýrö¿3¿?endstream +endobj +1082 0 obj<>/XObject<<>>>>/Annots 480 0 R>>endobj +1083 0 obj<>stream +xTMÛ6½ûWÌ­^ R¬•¼)zðf›ž¶Hk¹ì…–FŠtIj]ÿû>JvVë ŠÀ° j¾Þ¼yà ­ðK¨L)+¨î«xEEYÄ)åëï)þ–© ¸†Gÿ±HŠ,ΩHs¸ô”À½8ŸmósOéê.ÎfÖùÖbßÍ­E—t›çñ™³UŠ:Ó)džŸa½ž¹uv†™_YggXËòUæà›¯Ó·ÍßW‹÷ŸrJªZðU¬Kªš‘UõrËöYÖLOËÍÃö醤&g¨–„{ÍP{i4™–Ž²a–iöGc¿‘|ÇÚËZŒ>ÞŠ¶•u|S}EÉ;JP)”Œ²P«f™ÇYLŸ7ôÑèVî;Å…’ý.®ñq +}A¥a2­:Æ(¥#,‡±Ü,Œj¡7!újÖvOK2;>ÑAôèÇy+ÇŽÜkç1,8Ç„RÔ¥ÌQê}(ÙZÓ:%£#%5SÇê‹rÊCQ’z}·ý²©~«P”_ÀmE¿Pg’‡®LÞk±S³›Èk¸ƒò´ãN>/XObject<<>>>>/Annots 487 0 R>>endobj +1085 0 obj<>stream +x­W]ÚF}çW\)%x1ß)•v“Òä!ªÚ¥ŠªÒ‡±=À$ö ±!üûž;cp’ª+••@öܹßçÜ»÷bá/¦Å˜&sJ‹Þ(á ÅüõÛÏü†f³8šSAÓI4­rzê]=Çq4»:/&QLÓÅW +šŒæí_½~Æét-jÙpºŒ–4ÝGc¾;]BGxò§WÏ8]Æ7§ëÞÝêžÆ#ZoÛ|±¤uæC›´ÿf/¥´4‹èq¥Ò;ôA¥Ö8³-é­r¥UIUÊŒV*—/ןz#Ž§PÒ:»RTZ)ÉhzE"X€íÅ‹`o8™ÂiÏ¢8¢÷ꪴTF» 9E¢jÉñI…äz/¿²Kµ­MßXz»u›—t°æ¨2éào!…vd¶ääAXá£(¡%7;•ŠœŽJžøx‹ ¯3Ê”•ii¬’Þ„O‚Ÿå^”T9i´IÚZƒ¡K¤eU‡ýÙy¹Iaq°b8IV:SÙ& ¾£ey2ö3â.Iä¹99ÚÂÿ½Úí¥­SÙØG¡r‘¨\•ç¹Âh°äà¤ØI’_ˆöˆJd”ˆ\è”Ë%Ë4¢ÔÆJR +ï‰ÄT(áÖ àÚÊJãÞö´Ý¡-Úð/¥ÏLZR—^×í=ÜëGuã9zΗN9j.²Ï¹PÈÐÞœ`?y`‡Úžô»V_¨é^iI›>çCqˆ&Í<€¸¡Ä"}u¯¢î$Ï·ÞWÎ’Z$¹¤§ÃD8ôðÛÕ“/¿0 Ôè­ÚUœ·’NªÜû²±ò»Õ¸îÌþpÈ'ÃÂeÛNÓöɸ"úE§’’Jåå¶H¸J,:ꈤBS"p†–ò©¨’3ú­l[w—”˜cr47ÝæßsòådHnëã…·šZÝ­¨õ‰ARH†½ +"Éy,ö]‘Dœšðº¹w )¢?LE ÚiQr4nÏ5ŒH®±E ‡jù¬†Ó\åsÂòyU·)ø×°"zh=ð×.ýÝÿÜ2–Ïœóò¹ÒŸ]“Æ‘ç”s‘˜\¥N=?ŒÒ%we R_[`(¿ˆâKôAÇ´»Vä+z·jSþ©Òž‡?úˆ_Õ¸7Ÿ·ø¶ýÆÉÔKP`)¤€aE µ 6¶ù¸—š:8%ýà#)ˆ,(j”ø X÷™¸ÒVÃÀRÁ&¶jÈ€ö¦º,›ÚàÓ tó²ñµ!ŽƒgŒ§U-bV x­~#+ôŽ¹Ñ³÷G¥3¦Þû»9F] 洛?ð`eùâ…YÐXê~næ\oÀ•íuq!ï›16 \ø‚Öœ‘J~ö¼j:b„qºü3 ü¯Îkª?‰2Ž4ÀJ¯ééáÃãÃwD=µ¬DÏíXó¦Â¦²­ûžƒñ½¦;ðµ±å$ºß±täÅÎ…[À“yî} –ŽÖvòžé„ìH0Ä05 V„u`Õ¦ìØ9°Ø4 +{ý"œÆ5•M°HÍ0ß4ûV„Eà û_µa¦é@qoÝ{®ÖÂd´˜ÍþOWsMCG7´òà‘Çtýà“^¯m =Ïéý­úAÉ›ö…7—„5ƒ¥kŽçŠÛ›*Ïšan9H[(Ç+PXá,i{…öñ ØUgý"{áA?‹\•ò€Ç~gt~f®FZ;ȲzûãIZ‰Ñ6À”Ë1.É/Y™Úž=Ù$ø©€“;CÚ@È×ó‡.É æ>èªc[¡´L‡øÛS® +v.¶oÄ€ÍI±Åð~MâhøÖž}„`?Î ßÇ2S$ +£Øg—vbåóÖ—š­–—­{2ap<ó߀fo(±]x¦‹i´˜/â&~jý´îýÚûþ +=endstream +endobj +1086 0 obj<>/XObject<<>>>>>>endobj +1087 0 obj<>stream +xu”AoÛ0 …ïù¼-j7¶³Ø=¶ërÛ°¡vÉE‘˜Zm,y’\Ãÿ~O¶ÓmA— €a‰äãÇÇüZd´Â7£2§bC²Y¬Òmò"]Óº*ñœã瘎ãÁÇ,Oó˃ûÝâf»¦,£Ý¹6UI;EȳZÑN.·ÚˆÓi Ϻ–BÍä‡æ`OZÒI›OÁRkµ ñ!½u/äkáØÓ`;ê… ×$Œ"„ ô(šƒH¯vÏ‹%ùjwjùóód =}"z“>/XObject<<>>>>/Annots 490 0 R>>endobj +1089 0 obj<>stream +x•WMoÛ8½ûW rrDñ×ÚéÞÒ é(Ònã¶{È…–h‹[ŠTI)^ÿû}CJ–¬$ ,Š±EÍç{o†¿FSšàß”V3š/)-F“d‚_øcÊ_?ŽfËUòžï§É’ +š]­’UóMÓã¨ÿ½ ùt‘L{Oûßñt¹¼L¦ }Wr¯Ì.Msavü%¸-n=Õž®rÙs8I‚K/ÓÚ©ê@™Úîw šNw³JwrOÊ#¢Ø.L8©¥ð’”ÄFi¶¶µ®—$¥ZIƒÜ+‹X$ŸTŽŒ¨Ô³¤c^Vâ ! $ÓyÌ3Fû¿þŒ„C¶…ÍÔöœÖ&“N^K=i뻌é>ØŠÝ‹ +¹ ¦ÂÉm­ÉX<³”Ú¢t ÑvAÚmpJœ[_Q, ¸ÚÁšó ¯”Öû6»‘xÕ:Ù*-©ë,hÉeDt¢±+²BÀÀ‰ +M…A$Õ0©{ÓœŽ-a€‰Ei¹ã™ÜŠZWô,t-© ¿N’Q<¥›ÛÑåݬAÀ˜ ¢I5ùº,­«NÏŽ†ó-bÆ” O) <ÊŒ¶¨#¿vy>·°j+²ÚËø´3úŸ¾0®\=ZN£f7T¹C€ÈF ÈG?Â:´¼À×ô'íU•‡þ8µË+*,óbSWçGbx ë™r2EûÌ¿6¼`*™q }®8f”‘ÐZ¼úíá†JQå ýÈÑÆC!MM¥-ýE]žslñ(æ³<6þ‹³(g¥ä@Æ.#š@"mtÑ"‹Í·øl{¼fªms›ê2Da¬+„Ž)‚gŸF„˜ëç\ŒX¥¾ÜÖîA,À ™ +2ƒJlÀ)%nP‘Ê–‰ûKuy×¥÷Ø(ßiÇ Ýt5AÜÁ8u°5Âc/™XŸ±]þüEá:éqôºÎ‹Þð+ÈÐì网Îçª~Yî­|ÃM ¸W*‚¸v€^éT` ‰¤k(ý¯Zz`ŽJ  Øį¨ëe.uÆ c|E´ƒBeš¢,¥p¤¢~ÂþŽoó[ Êu_êν¢ÅÃ>WiÎÇ0±Ï˜¡PQPž¼ždC^ˆ¦Ì! Ð (ÓHD¢Â ÜEÙ€–½^BÓÍh +y˜‹mmRÖ!1TýÀõ–¸A:"wð^¥ +‰q½X£<y El³÷Øîߎ¼¼Žé]Þu‚ÙGè#73Ý!E˜kªDC4…Ûß‚͸6ÿ¥ónÛˆÊô:{:ˆGâkyœ}6@t‹ËN3ŽPk€ÔšÍJæ–ìÞÄî ~&t”ñä) ¾HdäÜŒCl+ý~ZgΣYÎo¿~¿ýúôPû4þÄRÃvžÞ "ï½ÁÅm‡i44Ì–qÀÕ‡ûÏÁrYÔ>téYºó¡5ç [!Òja ¿îó!5õã¾Æåe÷IÎo¸Ì¤O*ãNW±Ú“ÊBliü7gØÔ/Š?À¹ÅËš­’­öäâãí J±U¬,ýJáýÞºŒ2eÆæùôîD±_°åFÛ— FÃZ7%4!Ò¹•Ó¶û÷Q±NW¦Þ‚ôr?ê3f±±1ÅbÙÚhüúâÓNéŽaG¬ú}j¥zÙu¿•†^ùÎn˜ƒ5rÐñ0;Ð$ÖÓZü”ôùuv[j¥& + S9Æ•/ô:p§UlêrÂ!œu^ê-=ÃúÑ(„Š»e·ø™ò¥бv°ðr®〫f àâ8°šõð¨åðX¶nG¶iÖÊM(@¯v• +ÔøëßgÂî¸ +ÇËÛ<ɵ)Øó»I cljk*¶8¾>„] çV< ¥Å†w>ž1ÜØ›niqÖ†2õ!Ɖ't+ /.M5C° ÌÃdçË&Ø ‹2ÞqøÂo § ¸Ø6ŽSm&K¤rS[Låam»=K Â6oÔ³Ð1®$¦_3r®º«Áœ/ã¸qÞü¯‹4½uy^¬Éjy…›:lÎçœÛízôçè_+Óéendstream +endobj +1090 0 obj<>/XObject<<>>>>>>endobj +1091 0 obj<>stream +x•XßSÛ8~ç¯ØÉ îLÒ@ïå(ÜpÓR®äÚ{àE±e¢b[>I&¤ý}+ÙñÐÞÝ”2’W»ß~ûí*ïMéÿ¦tzL'sŠó½£ÉÍOæ“9ÍÎNñ|ŒÿFRêfG'øøÊÂôí»ÉÙpáb±wx=£é”)™ŸÒ"!ptD‹8Z¬$ +K¢ ÛÅ+½.(Öy.Š„ÜJ8Z«,£µ6Oxr+ºùR`wB"ËôšUVš°vžäªPÖá´¡Ò¨g•ÉGùfñm'“cœź(dì$ìk¼ "ÂÉŒ`éÆ„%£µãõx%ŠG O$Á3iìJ•¤SJaÙ’.h©á” LÇ"C×÷aicÌI›ÁÙFæÚIÊuU°~?\ >$pXNh±ŒÈ³P™Xf’ý)…q|.a“‡×óÒˆîeœ©eøktÄ`ZWF¹ aÙ³¡5>9 Ÿ7·~Gò g™²ˆ)œS{µ"wœIÎ=¹PE½'u%Yåä$xñŽ¦È2§ûàdXú|2›Ð%תxôJ”A"4<+¥É•µJ¶LŸ‚‡0ªà\eZVÎÁM`´…ãíŽÑ]kkÔ7ÕoNè2Sñ»3°iiiðÉRU"—‰™~Df_°Z;8Ñõy6u<÷¬Äúóöæ¯@—J¦K/bNsM)Ž#Q¶ÌÄ”¦l"Õ&§_‚ûMlŒpd,F÷WŸ¿\}~xðäˆ>hÄRˆ\>¼ÄÜy髯µ`ó¸Á+â ¥[é.n>Ý{ËM(«¡RÆ4°ÆîüÀ–÷”]l y”Bñ®4¿ÔAµæ“ë©ö¡Ü'õbþÁ‘‰´±Q¥CYTó­Y8•nø™q®ñ+7ôdÜ+œ’0ðé·«K@‘*™%½Ja-ô)¡D8±9ðuÐAþÆ.1âwP˜A0…#gd«²Ôƽ•^ +¤Ú«i”ŠÌÖrÐ>¢ª)ä9Ç¢4t ¼¼BN8t(D›®Ç]A 7ºFE[žw¹ïeº{Ì®+h÷¥.œÑÙhÊ>t-d{Ũ4…4ÎgÆiõÇ7Ò¡¤“Õt³“B¾á‡·È&CÐ9cQÖÓV^ªŒu­‚¡Î‚‚M[›NèšMÞµÓO眜+ëÀ[bl™~øhtU‚-àY²¸ûF'ÑôŒ‘¶ÔEÂÜ)’јF¬Ù’ä ä?‰'XDç@\¹(KÈÉrSK´*|·s+#%ÉLæ@•)p~ù!4OÆlßìi_ìÕþË>-•³-oÛ(ö‡ÉàAæ|ü!èÎZ×ÍÆ4=fzé)y¨º¯³áfþhŒæ± DÎ!¡£ùÆÙ;¸Þ‘ ¹ñ¾u|õ­Þc°õ¢#N=S= +¡²üÓw;êÔY[§ +sˆ?âÕ7Â<±=½¡"ò/2UÐ;¡l¾4^y§žÛ¥-CÛ ‡åzÎ<(6akk S’èbß1O <5a€Ctà ¾…°Å’êÖÞd3ªI>Lá¼Q˜ÁvT( W‡×{)ôf5Pöê38…%¢@^*¯ú A’Ýêeidª^Z2±ÌïFqL`d ó8–ÖîøYwt€QkçäÞ‹ +£.O+.\t?z†—°ˆUèž‹~ú…gÌaáÇCW™¨ íÛšgO¡ô¨ Ê~€Ð¯tƒ‘Ï$è,Ì õOñ +‹»h, ¹†4+ïa #F»È´Hšî²“Ç…xjǧf¦ÞAuI8(†=IÑz¥À¡ˆ\ŠÂwóÂÓñáwÊHîž(Aæ_5H[?˜Aø€v%ž›yàv±ãö§ß ŠLûzT_Ãî-Ð`pŽue,:F5<áfãp5ÐOH9>ú.Sã>xÓaá„>jVépðw ¦i®ñœŒt¬”oè˜Mó}„ð +RøóFv<¡÷Ûáûî_»Y³Ý–'æpWÛ^vȆÛ`Dàk ž×m;ˆPé…µ@¾Ùò2cÖYÅ0<@„ƒf2ø½a²išÿðZ™¥cÐ(à§)趫7ó47÷íyhìZ„S¯‡p'÷Ÿ¿’ßi(hë6YscûID£›ó}¯ÓI¾ˆ˜çŽÏòXÌ‹¯sEÿÃè2ÞÎ;¸ /Q}¡k÷¨:ºÆþPt8¸%bæh i¡í&¥.;D‘mÉ[›ö£»7ˆ ‹êm +H¿’Ò¤UÛ FdxÔc‡¿qò²ØÀÊ_ xw|ìÍr­+LYµÝºÎêÑy:Ç×g'õ×ÑýùÇ‹sº3úz*½×qÅã‘p¨3vô Ù~pzŒo-þïmvv:›œÎÏpÆ«'3¶xµØûcïf…~dendstream +endobj +1092 0 obj<>/XObject<<>>>>>>endobj +1093 0 obj<>stream +x•WÁrã6 ½ç+0>yg'¶;í-Û4Óí&mãN{È…–(‹‰Ô’Rÿ}(ÚR¨äÐÙ‰Gk‘Àððÿ8™ÓþÍi½ åŠ’òäbvA«ÕŸ—×k|.ðg%eþÅb9Ÿ]Æ/>oNÎï.i>§M[«ë5mR‚‹ Ú$ÓGQn¹½®s锓ŽøA’Ò¹´ª–)UÒ–Ê9e´£ÌXºßÐv§ucµÒ;Ž„æoo~ù/Óß÷_þÜ¢Ò¤òÓæûÉÍ—³ÜOë\Ô$HË–2UHJ¬ì †;@FÔrärðZÓ)\&R½ÈÛ:¿û‰æˆ„C:[^"lX]Í®fôͤ*Û30o€S…›µ±û(×éór¶XÏVl$º/tú¾:„îTY!<%¹Ð;öË9H•« +±Ò§8*~) +³£­y=òÂÞ’B%ÏÁN‡ò*ToJ_ßâžÒ¶©k£gô›iå‹´§ì㬪Tµ¨}áBÂ'-².S”ÙÐçZ>i²SÔ0%Q8!Rº–V$•VÕ¹ÀÕ8.lªÕS„Jáž™)žªŠÃ0Ý><’¨k«€Ö3 Õg ‚}Iä¶ÏRƒ„| IL£k_v{±êŠý%óH*aE)‘ºÌ,¹Ò XRkªÊØ:NSKÖì¿{ƒ&ó 2̀ǃé›fÊŽ4bÚs²¬ü=¾îdÒ IÞ‹ZU” UD!ùä ÝùëK:¹IéÝJ­d:‰–x'véÑo@£LY(¹çŠ!mj´-÷/² ÄcGéØ|GŸ3 „¶Fk +¶Q:fŒC!B¥¡7HÿÓTÕÝ™‰B•Ö¢ïtXAaøV–Œ¸²&‘i&"$Ä`¥*å H¾"͵ŒSóôiFÖˆR +H“{o˜Ñdt±0•B«ª) 3œBá¬G8¾ó5MuÞ •é¹ì|fÔ¶Á1Ú¢æ=ôÉ‚ô?è%µ²ˆ+q€Kˆ*÷;gxoyð^76sáÞ¡¼\#4kÏÓT¢/ÑË)ù`N ð=}bRp²_JfMé!ê; 7Ä )ï*Ê ëßÕÔòžFu}øW)c¨,¸Ìé Üaù©ª¬gùœh3ˆÍM$ÔgÅ©TÎ-G¨< …I‚§¡;"ÙFå1|§‚–ðýûÍ8¦QHY!vLG©t DM¦&±E²$) +Ó:îÕ.}Ë°­Hžý÷ïL+£éïåMv¨ P–]Eä5Ð!1ee4"ŒésãºÑ$Ñu4ä¨'vrJ“vâÛnò:¡­ªñ:Ãÿƒzœ‘Áy¿µo ì®Irä%Â5¹•š…€tÃW O|˜óuÕ'ÔN‹7žd‚2„mEZŒº8¼ØT¹f=Òw}X8`€7PÖpD9< iëxh¿"I×5Ô6Ö—Tf¢)0t¥ýhà ÀzãÀ4–i i>"ñ„ö[šƒ…®å×L”V@™ø¡l ÂNrÉ4y§áþ’X3’xzBôòbÎYñ`FtöÖÑÜ;ö?Æ2>heØHÆ­1j÷¸(]Ë"~‡ÅÁcæo’îUIŒµøHåŽ&>#bOAîrµË ü§Ý`Áìoò$ñ|?ÖÅQJº±èEÔ¯  Loqx÷méÙTÉ+Ý(=,1Q/<´ó4WÕÈe_3z¿>vÝt~7XFwAÉc2dêkðÁ‚¼éúÎó’óBÑB×íã~™ ,xîc=>î[oÐ÷<Ö=ÕýÊÓõ,/Wì +|bÈLÛhK½A&Ú²¶¦ÀAôÄ`÷d1=LП»D6½ÁVtÔ$ÞBÀþ&CNûý’ÃFylÌÁ©ì¼w6X<¿»Ëä|…Ÿh×Kü`»š]sòo¾}¾¡?¬ùñ£[“4%TůèŒöìpál½À³ÿÿƒær}9[¯®ñ›——Wló×ÍÉŸ'ÿ뤈Cendstream +endobj +1094 0 obj<>/XObject<<>>>>/Annots 503 0 R>>endobj +1095 0 obj<>stream +x½XMoÜ6½ûW rñpäý”6zpФŠ4m³Ç\¸åe"‰ŠÈõzûë;3¤$.½vœ¢((æ÷Ìã{3Ãýv1ƒ)þ›A6‡E +y}1M¦ØCŸ}þúõb9Ç¿ ÍæÉjXf üßµ*øDó!]½NR›§ÉÒ7hh¾^&3X­§Ø[Ãb¾H2ߢѰ£«ôtt5O°šg¼ñb½Z¼6h£IË%­å¹4¶ÉàìdÔYµ\®U³ mt-Þ9h£UéÏ Fƒ6Ž¾NOF ŠY6Kæè-¢•úmûfsqýn ³lJÄ;]g°)æ)lòÉÇ&— `ody¥ò¯æåæ ®Xùxññ·®¯ßeVƒhÛêv'¡•]­ŒQº1ðIÔ[µh ݪ;ÙœLP ­åó®o;½o¯º« +:` +¯f taSLºëÃõ=ØNµ•#툦 8¨ª‚|'ó¯|B¾Í­,NÎ(u‡G” +׊[¡cyêVYC›j¸Ígžr®»…ëwóÞu#ó}§ì12®æëéZ&-¯!jE'jie—ÀMs>Üî„…ƒì$:àÌæ¶l¢s9»t&*Ã.@“*YZ•ndï9™\Gâ‡Xë[cdc•¨ªãü-;íÌ +ð8ã=Þ¦ów¤Ñ„ûðƒ~I¼&),^0ˆ:á«ËÞ]鈥<©—Là ¹K¶…[¢Uú€ÛX9ä°r ×J‚Ãî´¡ïp +bÓïáŽx_HËûù®,³øjlx´·Ák„;Qí‘MŽÕlßSÄÉ‘8¦ÇøyŒ(t`Ûé;UÄWšëºVmU…lDØÚ<¡wإ쎜´è€Rä~Zêët±Ïe‘ÀuHpõê€{­ UiÒ€q(Ùà,ºñŠ»rб-½ȱi†Á0¢ãïòÞzGXÐÝ^£+þ+Eã>îz]zè .ó¡’ƒ¨4ˆñû’Îu×IÓjŠZ^ežR«›só9èÅp¨÷\0 Äûˆ£¡Þož¡cYÖDÊt QÍíi@„A˜;Š ÕA]aÔ¸ÔÍeìáÿ£N‡M¯ÑgP`„á*ñŠ…gj4L—?*Ñ}$Ö¿’¨ d(¦ØÜræfz>”ít_Òc"Y°mÔ™TA™;šÿ#ìDê`p£jCqràXäb:ðm>¸d(8£rÕ]Ù׃֧Àw\ª“¹ÕÝч.*0à aõô5ö`Ø¥º\H“wjK‰n«ïd“ä}.[‹¹Ž¤€´.jTZ„Œv< !•0R”X£žZæ2f´ÀA?œY:nçeq>`i}d׃B$ð%>¾Ooç/ÃÇƮȖ1C/’ù…½ßSŽ…)Á P6l¼«‚}OB”+–±Ò(jÕ(Œ]% ¹hh¬:©qï³Ã˜AKU&Ž +ÆÒ‚+R+=|ðÔ!”i‚ó9ÍRÁÅ52VïA1‘1{õj¸v$›ö-•Äd :Œ«ùXã-÷ô’ÑT’UÂÆlzÎt»UÇï HMüfꙬ$B¡¥i.-Å)zâáõbU¾¯Dçës¬L¸Òàd|Eû;(éüRSqH 2£ú‘&ñm%?Ö¹¦Å7¨e9Sot±ü>/XObject<<>>>>>>endobj +1097 0 obj<>stream +x•OÓ0Åïý£žºÒ6ýKÓ=î²TB´EpØ‹ë¸ÙÄ.¶³U¿=ÏvÒ‡EU¥¦¶gÞüæós0£)>3Jç´X/ÓdJoÒi²¢å:Åï9¾FÐ>,,æ7ɺ¿p·L6sšÍh»G¬Õ:¥mFˆ3Ò–¸Ì *™}¾ÚþLi<_%Klíµá‚šu‰Þz&àN›ó¿w¶Ôç'›e+¥Ít(¡²"#©¬,#½'— :2ÃJᄱ”IË+ë÷äØx-“Í ÍP/k¼XFÕ«$Mè½ÂÆÔŠNÒå!˜uLeÌdôÈÊ£½,1çŒÜU®­m£”ìx”ê³t§ 61vY²ºÞû‡Çß!i'¥§‘­xNÌÒ¤Q™*Îç+TêtõõÓûït¦”ÖB¯õ±¢º„¶¹´5õÙ"™ûÌ¥`Ø8@Æ™¢Š ®Õ¾ÜáÉ„P^3*±ÂÑ‹d‘…à•‘î ¬¬Ð™¿éåövç°ñ’x…¶t,ô ˜?!mPks}¢êHx”M™”ŽÒ@FŒsa-Á€!—>)aH:´²(¨ qI<{b½Ú–_Ê?¶ÛÁJ±ú„¾*är•Â$µÚ „†@°!Z'ðÀœÇí¬—j”½ô!! +dµo–ÏاóÍÇjÑøÆz.!àø´±rž3u1[×(0+ +ÅÖÒŠâ{ºü* ûÅž4{ÙükâðÎs0Údó¦Ï > ýÉß#;"¤GþÞ~¡l…«'p„C;þ…×I¿cd– ü>Ù¬kGÍVxa­´Hoâ%ûxûñî–>ýïº×¼*ËßÚ¾¾qs`œÎñªÊFÿyµ7—“¹L—IºZã…x‹Ôÿõn;ø2øLŽS\endstream +endobj +1098 0 obj<>/XObject<<>>>>/Annots 511 0 R>>endobj +1099 0 obj<>stream +x•WËvÓHÝç+jÁ"9'–-Ûñƒ]d†™$l‹ ‹¶Ô¶š‘ÔB-Ù _?·úáWg8„œèÑõ¸uëVéûIL=ü‹iܧÁˆ’â¤õp‡ÅüëÓ'ã8ÓEo¨ ~o üUN³“x8ÂýádõùéhÅþŠŸÂõ/&Ñ„Ÿá©¿Ú>NñÆp2æ÷ð¿–´<ú80ÂRAÃ1ûµ|èÍü¤{ +=š/÷h<¡yjÃÅäô*U#kGt_«²QåŠfmUéº!UÒL GýèñlþÍZŠÇÎR.ú°u:ŽâˆÞ—M­Ó6i”.Ý›CŠcÿfŒˆðæ¹ReÉ.6ªÉ¨É¤5ÍYäRyîý€±o”¢QkI_T™ê¡»9U!ÐB&™(•) ©¢Êe!ËF¦ì¾G˜†Óµt;ë|º¿¢‡SÉÈZÝøp3›Q) +™R¥*ùpÆȵҭ¡µ¬ 21¤—>&]æOäÉQÞŠrÊ‘ÏD义üÍþ(r s¤+ÒT1D"§e[Z´D®š'Òk•ÂðâÉe-7bô^Q$oSi^³ap¯,‡‚-uM©ÌµHe Š›Ö@°¦¥Ê%0Õ[,§Ýé¤{7ïö{ n’+àg¨­tI©,D™Úº×‰/egM˜þHæ¡?Çѽ…¶·°®B€ð0À‹špõ÷Šz™¦Žô‹ú!ê庼ÿòpFÈŠ_~_X3œÎÉȆÝwö*ýpZË%Ž7Ú"Ø–õŠN)kšêu· ²0…Ldt['°­dT:ƒ»n¶ñ10ÃezˆC ØO¡x©<œˆg´'¥ …«eIŠ% C³FÔÍ[Üs¤²>§we[ü¥æñœ“l’(ŠÑLJFÇf¼#ýíìí¨´Üh TTX¼véY±ÚG¥0i*©µÑË&JtÑ=Äq 1Ñ + íQ%þ,œøð5ôÖ—÷ïÎ^3`õS0¬j Þ>ס—I"¡+Íú“Ó2`0ˆsuÃÄñ +NèÅ7™4æ%×ÿÏÌ>½Fƒ†nd lí`ý{+[IèUµ¹C£ÉjÝ®œÈµF²@/l-¹ûSш$ÏX,MJ?S®oz±ðK±ÿ‚ƒþ$Š§Ô ÀÍ3‰‚e ÖBÊ’Œ.¸|P#D“èrÙ²à‘X趡M&‚†¡ ÊP!”r€û%š5•?xùþÞªÚÊ/§cY³ãbÉ© »6 <PöêE6ÓÆŽ]§¶·`o›dYëb+^±"º¤E»:r+Á˜?˜b=¤ Ð`…H÷ÕçP}:H(0¥Ý4²f­´AÙ8í5¤ûxÚ©õšåshÎ@âg©cŠ-´ºL0VB•çÛüŽ•9ƒ˜KS®¡G)C.-<¶,*‡ ã0ŠÈ³7 n“Ât*³‹“]ÌF%˜‰5ÉÇL-#ºx:òd|ú†JÂŒ4fÊv²§Œgêø4Lˆuåm F@Ú6¶ï 7»ÂD ¬Ÿgò‰XÝ6*W?ÔDĤöc40ÄTTžë ct;£¿ßÀN£’‘ˆEÃÚÉd^‘ZÒ“n­¯T¢ì8ea ™ïP;ž»×#?4OéO½ 3i×{óÎ8[wš>£¼JÉZØ݀ɻï¦ñl®íF0†aHÑ:¯VGºîïvÿ]t}Ú¦û1žL»q·w]ÎîáçErý³kÍË!ëïR­ÚÚjî^_øüûØ{1ÃâŠÁ ÿDzíÕWZ›ˆÜ…¬_}uÇÂ6aû(ê.øÈ/³ZbRaÌñò CeÀ»ŒYáv»Ïn¾ šAˆÄ¿B«( »MyW߯°hÔk…ÞLj)û·%Ùñ•‘eÌŸ²æmi´ÿvxì¤ÄN£½ýEä ¿DcÝÝšÚà”Ë/Š¢+ÒŽÝJ…›¼T•èaÌÊÜ9ÖQÎqc +ñxÕ +»ã³Õ –оs«:Q¶–þ32ï² +³Ð%ÄŠ'ÞoåsÈäS3·Ü ?KV*—låøŽà° õ[쎑À@ß8W>ã¤mpèûy&!ªÛpÍ9xÀŸ ìê×Eàσg‘‡2ž[í[H6“Ê +Mçä­ÀdºÍ!‹|(˜Xâ{Æ%[itþ5ˆòò‰‚ò‡Ý +b̪ëìƒðn¹çì9ΗVÙ[µÚiÐî…€M§L¥ÁE÷¬1¿÷)<£ñh⾆èÝüäãÉÅŸ¿endstream +endobj +1100 0 obj<>/XObject<<>>>>/Annots 523 0 R>>endobj +1101 0 obj<>stream +xXYoÛF~÷¯¬-RwÍÑyHzØEZÄyX‘+‰6ÉUvI+úãûÍ,/)JQ9V´ÚÝ9¾ùæ ¿\„4ÂOHóˆÆ3Šó‹Q0Â7üòÛ¿\DQÑl1 f”ÓtLêEF·|šfóq0¦ÉbŽÏ~­¦õE¸ –4ÆÕ1_ŠÚ_ê-sZLöÂ0‚‚ñh„¸ÎÐêW|³¿Æîrñ½ÝÞ:§(‹Þî‚EE‹(˜³àpŠM¿Á½5vÇ#¨ïíöÖ¼» ýÝnÝé¬ÕÃ’'ÑF†óúršÀ÷E½’ÝÞ»³ ¬ógyW§KA~ÂrýBnvK<å{r÷zËœæsÚíõ–0vÁÑnóÕÝiü톮ßâ~Hwkb{F!Â? ¦³Ý%B”Ýŧã25Å󻇞¡$ Ȭ©Ü¦ŽW¹.Ê€^¿]R8aÁÃZòp xÆ$æL èµÕªL‹ }ÚÙ´(Ÿ}ö‹F¸:çãï +26Ñ–JC®ÚíŒ-¡QSµËŒJXL8“Øô ÿ­ÓL»+:˜ŠòÊ•X[¼Ç¦X§› +,Vr‚ÜVaQ¨\'­b?”ƒcbíTñ‰ÖQ ãr™ .§ݪ|¥.>–Ú*säŒØ)—qv(ÍÙ~U”t?ðn¶Ø§íSk¹Ó^9H_ècZ$fïèÃwUŽk‹«_˜§4„œµ±§xànÁhÝ?oÜ‹fàÐý¹­©²„r“¤ëCkŒ¶ðÆå«€aóxA™J9±ÉÌJe´SØÀcGªÀŽ¡˜ÃªåÌÚd™Ùs„8'žyï^l*ëôk`Ö`zRYÅÁtU¼%åèr§Êí%qä”]¥¥UÀ••×n¬4êÔ.S1Û§åöD¯Ú/@ÏFzÑÄ€*–\Zêûç?z"ŽhÉfN‚ð ª[…=¯_kÇ%»ë0Õ.Aeh€©{€´ÐM¢-\ +èVK‘;6S+i‹Má¼LïŸSŽØîÔÆËmýoœHÊ ‘(F9ì‡2ükèÚÔPOdwZÄZ«¿T©ÕÜ‚YÜy»®ßN¤éL~cYîDït‘ó Ûî¶dr$Ku0Wu‡ò›e„z¼©Ð&P‰P‘Ks‚­„ð4iP£,íj\YóWrŠ<Á‘b•®GÆ¥fÒˆæͤñ²*·†ÛØãcÚùÃelŒfS®oŒ§Hõ Y¡œ®™WÞÍ^ÿõ®qû9r‹ýTÐüÓ’¶¥ Øé!ë¬Åݼ¼4]Ma€Ê˜èûHÝß}S…ô}!ò–³3ãºu€B”,´°”Ûª{#bN@~mŠÒ¢CeŸì™Ù0Ü~N鹈`:“¡ÖØ{ª4Ùâ€U‰BɹƒÞЯm ?Q ]ŠöÆ>ú.¨‹§ÔšB(ºßj ÈÚh{‰`ƒÈu¥ƒH7kœjÅKfN´µI.ÀŽ+”ëCíAKÏ.…%éúž„aèG¯]ÁŠCk†ÑÕæG“çý|Ê`>×´Wð‚^¡_ý‰¨Ëi*@ÇK”5_fšaLù›ûÕ^gY@ïÑS0 ÕðUfc‡‘Óά•>/XObject<<>>>>/Annots 526 0 R>>endobj +1103 0 obj<>stream +x¥XïâFýÎ_Q‡"-+  LîCÄÌ@‚4Ã`“;Ýœ¢Æn 3¶›¸ía‰òÇß«n IVJnW; ¶»~¼zõª¼¿Ô:ÔÆß |êö)ˆkm¯+ü£Ã?ßÖºƒ;¯K·ß»¥˜zþ->Ý·ˆ–µêwÜíßzÊ]¢^Oö†üîã_*iS»_ÕZ“6ÝÑjÿý!~ ­Û6­‚~kþ8õÚåWþü'ÕTI¨†în[wÃúÇÕϵ65;moÕ£]ô4ÿnt:]9:[Ñ(ÚïÄO£Í¿háy:_ž Tâ×n·¿xz>8¾:=×™ÎìùÖä–:ÆÂ÷=¿Ý¡¦?ðz]Ÿ­VãÙjú2û-Æßš.Æ4/ž§Ë%..9ýÖ¤Wo2}¯Ý¿å£Ó„tÊ”2MAž¦2É¢#‰0$A‰tLIIÌij"ÀYΈãKå/9â ©ŒÒw…ÇE‚œÑ²_&rCFÅ{P>Ò[DQåàUnlåËJ¶%û^:-¸õçu>·^ãõã ýMªc˜)… +ZÑóÚ-ÿ‚H¡ =zÙË„ê3‰Kß®b™IµÝ­QÝÖaLõç#ÏÒ<(cÝ&¾N!ƒPS<Â(› .°ŒtpÂÒ¥zså4ïj‹gÊF­Ï£çyuxˆ #ýÅ1;CŒdðI%ÐYF3vh˜¢@.fG,²`ÇLC€e—8¢\Er¨%Ö s ­fÃO¶&wÔÌ°J4»§8réÑRf;´zf, ãÏè1¾X&⌔=#þ ­/%¡’+l?˜“É:p›YÒ&\e¦…‚¡jËÉeú*kÀ{tê Z¤Î©µá\™R¨K:S´—˨_jÍ^h¾˜ÎVã=.¦?àcôÃhú4ºÓäeA«ï¦v\ðŒ(zºxþ›†GO BJh c…?؉dk{Á°€ÐìÓÓ™ $ÙÚ Q¤(?.8ÙdÚE4‚ÚE@Gü*R®ñ ³UËÇ0-úÃx4Ê2ïmáï]aZU´Oõ^¦‹³_œ?ìT°C-˜p œSœÀ²WÞmý ]Ð&†ŸÉ4…Ý‚)¶nÒµ&%ÒÌbä=J«B;ÕP ’ƒ #$Tf‰£ =ZÁ^A„²UÍ^j£iÉË'Ub2ª yC¹Ì^ëH¦WWÒ·±_ú{ÔVEsà&mZE‰>|sYóJN‘ +Þ Nº~ Fˆ>‡Ž²â²H—Ž÷š†T*ÛýY•vgsX–Û$®+Ⳬ ƒïÆÕ•ã³ ðBJEû[ÁZçY!©dï6žÒ¦óŒ-²­ÉßY-–2âÍFœjË¢ÏÁìõ>ß[Ed9àÜäÁõží=æ˜>.hxþ#§ÜE»‡\%ïø"µ¼c)ß !ª–ÊXcÁ³¾íúÌ£׋Bsª˜P„XA£ñÚw府¡¼ÐWRâ¼KS´Å{%Ç°T¬SÅCdo±_ñ¦Y§ƒŒ¢æ¦RBÛTç{[ÛÖdXP ÓÇÿ »Ô¿ëyƒ.omËÑóý4×?³?ê`%4Ìmxv'šß¾'þÕE±7€§þнdöÚ ÁxUû¾ö?Ü!eƒendstream +endobj +1104 0 obj<>/XObject<<>>>>/Annots 537 0 R>>endobj +1105 0 obj<>stream +xµXaOÛHýί¡;]*c'Á Hœ´œÚÀ‘´œ”ôÃboˆ[Ûëó:î×ß›]oâä@×J-Q7ëÝy3óæ͘¿÷òñ/ ~‡º!EÙžïùŽ½õ}ü¿ƒßRÒœ7ð(üqûv//¤0èááŒ:A×ëÔ«”Æ{Í5v^ÐÜm¬3êú}¯ÛØeÝàŸ; º!Cò­Å°ÃvÁËŒoÐØk,3 +zŒ{s°¹Æ.Ünm®á‡ïg›kìvú[ºƒÀ;¦ ?À™Œz8Û¯W ¸¹ÆîQÏ;jìr ‚°,Ø Z»àƒAÀá::Æ—À{†Y˜½Í’ÑÃâz¯±Äâu´Ùcs½Ò~6Ù;¼„=šÌÁ”0äÀNbß&Q«ïu¼®GãeQ¨²"A©($åËì^–¤æT”I^ÉR¿™|ÁU= +{U»ÓÇE­ë\R¢õRRµ-„&Q&Zæ/qò_KŠå£LU‘ɼ¢H¾x,²{‚vpÞ<•KS¥H×Xâ2y†X­òT‰Ø ð©mˆ +ËsURàû¿é&J>jgõ.ÉqVÓhBÛ;¶¢U&W S¬¾®Di­‰gc=MtåÑÕœ2…‚39©\²× ›u0ࢤåÚ|4hø.sh»ÞÊ:¼?LðZTQ”&ÐkYÕžF*ËDo75kŽ»Ø·(¸{FPLVÆ…ú¡µŠQI{Ó&b«¤ZŽ&¹®Dšâ°=áÑIš«4U+"%ŸDV¤&O µÂíø.RË4f»"Ò[ÈøÄò§cG ®n¤çâÖÚS*Ôƒ¢öG*•ª~Õ2*ºѾ×,½o\`ß°´u®2‘ä§ÓÑðvt5üL×ãÓéÇ¡é»z"—À‹žE¢Djº; À°ÐÑ®…Þ89Ä^ðà»RéôâGær+óT<è“©ÿ4@Ø}ß…{뙜“4áçæúíõl¶(Ú׋ÇRGeRT‰ÊO¦öùÝs£k:¿½útqKÃOë÷ó÷ty}K“wWcº¹½M.n^¼‹…~2u»ŽßÕÙl§$~·ee*g£Î?šÍö_g&6FVÆË(’ZÏ—iúÌjFk4s[Ùô:(lö¨v"›ÆÔóhÇ,I#¹¢º4=&Âè]£²!ðö'’¨^۠ΞÑ~æb™VuËQó9úA]s#½€¢k~0É!‹In¢|x‰n[g÷^¤òù¶‘?É nßaó1ð0¶;¡aÖuÊe„nÀý¢dKâÊnm#qòIFË +âžÓu!óÚ¡‹§Y‹Ë'¡·³7°Ê=$Î’n•¢B‹f·ÚÛMò1Iå:k%žôŒäÚµf!TS’€d®Û‰ììMMŒ¨~º¹. ×üg°o®3íÑ|˜¹Ö4JgÀœXÇÂÄI ªÎìÊFõ”ž¥-Ö-û¥ž;C¾x’1Tz&ª¸µ†¶™–ÚŒÏÇ›´\a¶(AN÷Ó:Èagw7= \¬¡cWÔl¶™1sÇÿ¤Õp‡Œß<{dKÍcÞ#`¯ëåQ¤K¤™ÙV”ê¡-”úJæYÝ”Àqt9€#¼ÔϺ’YMËWz bÊ*:4'#Qìð…é% +XÇ>Fšƒ|Å<õ͵<' +”L”φ|¬!u!Ý-0Ñn&>ÎмTb`縟ñ„;φbFW0Á¢rUY-8°È7à ´ÅLj¾´lq»’äÙCŽÙœHþ¦ÑF"›rJYˆ’9fƒn¯tqn½&q̵ +Ù)0d*JUÄáeH94ÙY5ŽšñÙ¤“åJ³:Éâ@ÔB{Àj#˹à ÁþÐÈË<‘ñ>+fÄeÉŠ\C¶Áöh¤ Lò/ÇÆáÚP“Ó:î:Dœç]£~ÐÈÜÔ%܃nVò©bdld[FŒŽ. ÄWX•ãÙx™W»ü™,¤‰†ggÉ3wƒp-<ÿÕ°V,S g] éÝHßKzůG¥ÌÔ#[13β7/6,—A-¸Aˆ? ð^P~gl‡ΆèIê Ú «hÉN (ÓÙÚî@»ß1Bø]¯–½~Ï뇼£ÂR/`(“½?÷þXÞ»endstream +endobj +1106 0 obj<>/XObject<<>>>>/Annots 544 0 R>>endobj +1107 0 obj<>stream +x¥WMsÛ8 ½çW`rrgbÙ–Ûée§_i3Ó¦ÙVì¡Z¢m¶’èŠT\÷×ï)*Š’v;M˜" àááúq2£)þÍhÓ|AYy2¦Xá|z{2_^D ŸOñYR2_E«ö[AŸy?Ï—QÌÏøå¿tâ%Ž%«%¶Åø_KÚœÄñ9îH¼PÂî9oqß±ÄïxxŒMͧ³Ç÷ñƒx¶ˆCCü`6[=~ð2=™\^Ð,¡tƒø+ü‘»°§”f#„GôY”kA¢Êé¦V••5ÝèÚšgé7œNp³?=Ž—8=ºUU®†®ÓI<t{>CFÖw²6$ŒÑ™V’ =n¡ƒ²;’"Ûù²Ž(ÝI#©Òu)ŠâHV|—dw@ +¤7ôþ&=?cóSÏæf_}ü€Eº¼zÿ¿¤Í¢(x^6Æ’(Œ&ÓìQ¾-ÓU&÷–/䵞k¹w +úp#zy¤\nDSØ3ÒUqØÖ• {Ý]gT‰Rætê‘ë£v +ß~*sºæh¬,ƒ£¹–q[ÐÃEÞB¤*ÒuØ­vžQ-PMÊ’B8ý£Qµ,%pGt!!Y¡°b¢öŽx¸kdØ°mž;'~Öé}8ºPÕö”'*ç±D6} +á ~;Éaz«2Q<å=ûí°WÛ +YM%`Vû¶iÁ!õ…9­E!ª ¦ m„*Hƒ[ø®6tÔMÃG8¸z-9­ŠíÂ]J†ÞèêŒØ×É%× ³{dÊuÆlür ý>#ùNºðêF½¥Ée.‘USº @dº,Q^Ï£h¡|þÞÚa§P(™¨®7ÆãåC@}‚Y(N$dÔÛZ”>è­¬$â\,@=\ }Ÿ…>6Èê˜å`œÒñí¬Ý?ŸLTndtSg¶2ª¤<©Ô²(ø7¢x˜ë¬ášt>¢h²¢É‘A'€{°²5Ê‘«Z­‰áG™™ñ7œ¢)Ø·®•tôì‰"*³Öyã¡´ØÌF +ÛÔH¤!`âj§ß Æsî/H$§~Ñ-ëþz"ó¼=<÷B”é¢h=†1¦ñ…æe˜‰Èm5Äîðè¾ã L7Ž.¼KPàj0»–¨8eu}‚]Ʊ¼AxkAܱ.Î'«NœóZA)h/²ïb+Û–µå9^F+žÆ×x±l Û=ìºÍ½k€¬’”@À3øE„Ä•oè`q厴øÿ?O ª2:ìæõ̚ᳶ̈́qiwq] ƒ[B×õ4îœø㡹?EèÏ=HÃÀ1ŽWÑì‚ÆIâEƒ¹Gô* ÍkŸµ›Y yq¢$Ã9`jwøÿrfèZ5°à ™Lï%Ÿ³\g¡Téë¨ÓÃÈþôÓÄ—Çíì—±cF©1ýõÈûõYDW™ÚÝËx°4`‰¯©í/µßKß+î§+jtÅ‚‡Nq¨¬–fUHƒ1A‚Pœ«ëKj—˜ +(.œª¡Ñ¼H•”,Kk ^Àå FýY,†Â~¿‘‹´_~'GÙ?¹°bÍJÞ>scJ)ŽÜþ~4Š—ÓÂe€Þ¥é •2Û‰J™ÒDô“å Q¬(¬".ÎÎÒÚtsjN_>½wyc8Df¨ÜŠGÆÙqÊg§·¾ ,3³ÔVq‰Ñ‚ÜÀÃî¿­š›·m¡š;äJm8ÐßÖDgÁãFïÏÉð“èÀ¦ãoÍ[} ÷äj±ùXÚ}†aTá1Ô/…B!-<¨ÈŠéárµ‚žÔÔÊ)ÛÉì;gŒëBæ&JÒŽ}ÉzåFÔ‡v»ÿ0¨›žèsè]`OPÖát‡I‘ýj‘ðV€×kšá¢±÷füîãmú1ÚÞwF¾ZW½ +3RÛÆ1ØÇҎݨÿ”ËÀMš³vÐÌ?°Ù»¼js4[àmr5Ç[¿Ù¡k}~ñáå ¼£éohºôº?nðÉq80^Æ®Ëý÷ë]²L¢åbå›bó-oÒ“¿OþæJÄ"endstream +endobj +1108 0 obj<>/XObject<<>>>>>>endobj +1109 0 obj<>stream +xWÛrÛ6}÷WìäIžÚŒnÖ%/çîIܦµ:éƒf: IˆH‚@ÉšNÿ½gPÚyhãĶBpoçìÙÅ÷‹uñÕ£qŸ#J‹‹nÒ¥þ`’ôi8óïøg$-/^Ï.^¾R¯G³%ŸMÆ4Ëç»]š¥AV:ÒKJuQˆ2£\•’¾H““Mªœ½œ}ƒ‰4š¸'ö>Ë:óþhLáiãÀ?¼î ú0ûô-„•­Œ¨Ö*9©ÒI³©$§É­å¹ë꺾îO’Þ”®û£dÈÎg0¬JëDž §tIi®déhÞQ%-´[ÓR›ÂÎ/©2z«2iIP!Ei¹ßkiöª\ùøîŠÊ hK™p‚³AÍÌV¶@‚+Ð¥CÒ…péšßÌ•õ…Ý”zW‰O› +ÉœJQ°?K;™çü³qŠd8žk‘£3ðadFÁ)Â+m¡ly~ÅBø·¾ªV,ý2 ~c¼6‰oœÖù¨´ñ*…‚¤ÒZRø["ÉÚu²B”ˆÈã“" ~¼¨ÀF×e¸p™Ò![,BÑÆ$¶Ó>kªôÙ³>ä—ï»4e£ÎýaÀµ—"]O[W•6·Ò;™ºš¹ÏàÐ +5+)”n~óïu“ säïÖgâ?½„èÍ+ú€ö`’"Q£¢p’êÊ”)_Úì}0¢]o‡¿*~7ÀQxÎg>ÕzEûüjˆœ–*—¾Û^çÑÞY[3³JºÍ²/so=oæPýþáú÷/oZü?÷{Ɉ«2|Æä¹Åw'Ö¸‹JŽFÛ·,s RÀ„’q.±øÐQ“RïöWè:/Ô‹\–d™‚X €»[HUTx€>~Ò›NkHÀÚ¡Ø÷ÙŠuF…ª,¤ÛIY6AF•Ú +£tméH£¨ÂÙdz>ÉGÁ\ÑI‡©2Íë ,öœÑ‹Û +G[Î>C=ÌW’º»CƒþIÛ›^2yá{«±:½!eŽöƒèpϳ~ùڠ碓`žž|]ž69¨Ëå–]ë#ƪ„’ +×èb0‹çb+i2E–#“ÐI½„nY¹\ Pm†Dv*Ï[y‚ñ²Xà™c G“4)ò?5ÔÄ)6S"×+ôK¾‡æÄ‚ðØ»7¢ÿ&.2biùý^«tC¹Ö–®–ß!†¢ÝCÊ +D¾‚<£s…c ,0aDz:…ùøéóý|þà_˜ÏßÔÆ€wotéŒÎ¤Ã…ßçsŸÐ|þ®Ü*£K¦g0Ú(Þ‰Q®¼o%¡¯ÍI]D¾{KµEA8t”ê„Q ÍÖ¬ÈO_4éÿrH‹Å¢™ÅŽr ØÚ59cד"ÃYƒH(¡z‡°Í…9“i8*µ „A¸-$b0\ @¾—,œº˜¢‰˜Š)¤j¯kNú™œI-=g‘.»93nèG£Ì~ŽžO BrÃXžë]U ¤“«B¹0æð ã ` D:Lûá $±BÒ‘Ÿa‰xšø’ÍÏÐÁԜ޼œNZóÔ“àˆ4‚:$Õ7ÖÅ 8¥67?qŽ“¡Ø¡{…õÊo9ÈhitA˜%å8(þ?$}$­¤±"gâ ¤kQ® óÎN¾ +ÒŠÝHoe†á‚†ƒÂ'Ù¢mdÎI{EE`‹%>VP@>¢$(x]ň=9–:ÏÁËÜCÏT­!ÆA"lq®hkô «,YÍ­—¬ƒÏWì»ïa7¼[zÎeÚ³ +A×xö•rwŠœ/FÓƒq>\ñ;~Á+¥Ì<…ÓP(¨èÓdÒJ´‚…6ÀÒ¤ÍÆ{³,a”óõºiÚnØ Õc";&ÊNlP•l‹@Äj!Ó Eíµ/@óz(X¨Äô1æͶramâJy¬®|*Àcƒ4ùÇ›A£«†M2¹ 97êØñÛMB_yÀc Â:é Ñ¸zpN¹Nytˆ¨ ÏvÜäuööµŸ©K¡ü õS +9éÊoØlº¶ÍqÈÍ{.K°V§¼ñùuõúDNpÎ/½¦…”Ž»o(þŠfŸÉØo+~ˆÜ²¯Ú·¥t³Ì lW •+Í^þ…ÅS¥-¸¹ÿ2Ž +ñíØÏrì¦vàrl䷲Ȱæ"íq€ã|=à•zn¢­5FŽ¿r âšœù%3G–Ú8§T /ïº7Â5}2 ëqß_¦YËÿƒŒÇÃd<š„‹øpÀ&ßÍ.~»øŒ½'Aendstream +endobj +1110 0 obj<>/XObject<<>>>>/Annots 547 0 R>>endobj +1111 0 obj<>stream +x­UMo›@½ûWLoD*k¾ vo‰ÚF9¤Jk¤\|Y`±7–î.qòï;³@â89ôPYFf?fÞÌ{óügB€Ÿ²âÊv°WèÒã×õ"Ž3¶tµa)´d[Mo lé<$¸C²Îðw„_- ^\å‹å÷Âòšb§ë òÊ… /½›žÕGÞY° +Z¹×Ü +àˆ'i¬ìöp‘?` Dâbx½–Ú°JÔãÖÞƒZ6p[=èÄŒ°CÿÙ½–ƒÖÓ¨®y£šÁJÕQ„ü0fâò¤!ƒîƽì*u4ð#‡Ë»{Ú‘±¼iÜ.®VZ>"„[¹¥ÍÓ¼Ä ?`° )˜RËÞŠŠ²ù'郎E¬æúÀ´EÙHDz^f9?«ûòó ¶b¬á¦u 33tNUÃx ¸ËqF¶Þƒkû/Ë¥œn3£]ŠZé½`°KòzÏýÂ{§µáÙ‘FÞö`#òrªÒÏØ:„˜Ä„]ßEi6Ñ<·Á_±Íz~š±$vÔ\–;tûOo»â2¦,HW(GÖkÕ4êøp°¯¬TÝ;Ñô\óV¤€£fñˆ‘•Ð)UD^%z-JTeåx>Jä—µhÕ#®¥:_tjìæ«š&µØ{'ÆI=Ž3Ö½Ž†¥,¡*&…ORE½ó®wõ§èM瀮Á/º> ¹ó¶ÿ1Z£°;¤ª;O¬¿ +X¼ ÁîH3Qxà[,:°Gì+Žñ)GUEýÜò¶àè3ø!žHm…°È"˜¡ï•Æ9¯_ì +^þ>r]¹ÆŸÌ`É{^ÈFÚgÄÿ–¯’†h)¦Wª1e3xowáA©Ý 5¢Ù f+@ÃW'YFê8æ}F” a8Åç¼` +6â;AÀàJÙÕŠŽ‡¶¥zbbTr%Èw +Ô(ö‹ qœÙÕ;o…à[4§žïÉmQÚ(ý©Ü +Šç3èµ|hì4ÅëI´!Ng°Ž!J6l“·—·W—p§Õƒ(-E9´hdNÑŸoøYä„‹ÓÍàÖ™> ˆˆÔª}îËOt?É–¥kü¯Â\IBKßòÅÏÅ_!Ûò†endstream +endobj +1112 0 obj<>/XObject<<>>>>>>endobj +1113 0 obj<>stream +x¥W]o7|÷¯X0šöIrIéФ1š‡¢.¢"Ixw<‰6<“<É÷ï;KždéÛê8¶t"w‡3ËÙõÝÉ„Æø7¡ù%½šQQŸŒ³1½~-hº˜ãå%þ;IÕÉÛåÉèê ]ŽiYaÇl¾ eIX=Æ“âÅ»µh‚t´Èèw™·«•2+ºvÊ„ôÂæZÖþåò&F™ÌS”‹WÓìq^,²IFLp¶l‹ ¬I+§4™ô+/çÙŒW.×ʾùµuJé §ÞC¶¢µÝR°x + Ôìò7.姭 +kú(ê\d#¥í¹ôG;9û˜.&¯ºãíû¨•³5p|üó-ZI83ÞsxòÒm¤;'cñx-É⇣­èH8Ûš2£+ëâ'Nb¡—Ø!ùý ·¼u£¥íÓ–ÊÉ"X×eýÒËY6ejþº='o©³-ò$4qÓ×°(BÇBG×ï˜ (¬œg¤,G0R–¼P.S2ëa-Â`:niA!ŸU¡ZwT‚ Ó=h ‚—º:'è¦E*,„Š,d­ÊÕ! å2l¥4 €‘íhåäühù£îâû6÷²ÎzÀ’TÀbú+¥ñƒãw_†áýႨŸ¼G!¡é4²7HZØHËÓŒ>‹”žú‡‘¸R‚©¶aö€z¨“½][À‰dÇb.,—¾Ö ¼õ¬€Ï ù:Ïðy•dª-¨sRË +¼[öåÅv­ŠuÌkÑê’´µ·耄x|þ]LbÒ±’_^¢,å¼at5¦7»K7M•EñëóJÛ\èwaÇp ”]úTðÓ Ô4¤‰ýH®o,Ž¾WrB7w{.SØ ZÉ@qݵ²ö B„oèW\}álÕv#âÆæß„þ9êŒ*ôd®ñ 6Â"”‘nÊ‘ç{ž;ô©Þ¥PmÔnYMPKFPÜÒ­C‰Ü¶á¶)·\P»‹œÛà4=h‚‹¤[éùæûPNú¶>ˆy‚€…>ktõÕÙÞ'Gz~BµCúZïF¹2 ÏѾ¯Ï:{\ÉÃR8Ú}kë™Ý‡up´€Å¸ûæ)¶Ž‰ïCø„¿H<”øß! À#EÔ7’tŸ=®“Â[#ÐJÑà*Ñj8h•ºj¤” n[tÞA“RèyNyØ{•7?«Pnc;˜ú.?eóÞ¥o{­añÐWÙõ£·¬.Š.-nÙI–h[À/áR¥âFì“WõÒ{îÔlIB£ý¡ÑrªEäó,T¥`‚ .œµôçÜ!’c•9ܪ‹=&Á€Öq/¤ëß–ÐFèVú¡Ý~bŸç†Ö[L€O¸Å‹\ö7©Œ­i«´Fž[ö ô’Æ:á:äi:ž.˜¿ä û& oÚ¡Vqj9˜øƒ¹Am2ôE4S¸Z¢…H§l©@"g¡¥0 ‘xìïK2{.º‡òQN±Ç9à3¢Fôd€à¿â -^KTÉOô¡Ú¿¡J(™NdÕjµ°mÕ² +ðOM[à Ó×ñýòäï“ÿ%ƒËendstream +endobj +1114 0 obj<>/XObject<<>>>>>>endobj +1115 0 obj<>stream +xVmOãFþί˜êŽ†“'NLBʼn;é*UÐ&UUÖö$^b{Íîš@_þ{gví"„øeÞç™göþ „!ý†0ÁxIq0 †0ŠNè4›ò5}4Âʽ˜DÁ¤ûüóò`ðõÂ),Wdj2 a™™a™Í‚Q×ëµ,×PiYZÔô­â óiyGꄤÅêýÑ”\,Ó£Ëa+žÀ*HYÛkz^¤á·Æ +m!~¢(«\$,a34‰* +Q¦°•6“ažƒI´¬,©eÂ’|¢tʹÇÁˆ] ½® ,IŽÕé=™¢ ùZ¹{—¬dŽœƒ‘E•#à£pßN†bÛHÒö7åÚ@!×ʼn§>å!œ´GAÄn¡ùñÆÛèç0°E50âý‹Ã +]Ù¸X¡/k~øaËò»`›Ô0˜µÖ?À¡SSO]è‰p×ÚEXÔoèj£™B¿‚3E¸¨ÞPpÎt]6ô½à‚r*î!j­4hŒXc›Rø"^ßS/ÞVÄõ“»¢"¢"$QÂFÉÚ“ª5˜'c±x#¦]y¥¡OWCø8‚ÑÙÙ¯z‰K‡Êe†%ûðhá0àa¢…z`JÀ_$U€W WjŽÙ÷ð¾Æ¡DL„cjˆUU…)È”4 Œlì"“-x]B½­=@W_¢;ï…WÂ?Ñè?8L2™lš˜ÉN¥¼ä˜%M'¹$èÃ`«Dä™2vo£ŽŠHS<öJ$²šS#ù7‚8ƶ·£ãc( a6sº +ÚÏ°cîJ³¥:œBçÅ…*„,ç×ç‹åùïË[¸\̯ÿ(åã-,P? ž_/D f­`zÛQ¦dNáææ¬i‚kø«ä«ÚZn!·=*”0T®~8=Gpsʼnææݘ5Á— ¯y¸Ï«k\çe8ŒNÜØ›áw_­¯Žð.þD” æÀÊ‘/n¤üûœÓ D898%K)ÌŽÂ;lþÒšhÌbºÏÆ[îࣴ¬øöTAχף HeBãÜ°4Cž“ØR<ÒÓh ½30‰ùY†ü4H%êKKŒkr)—A1 I´‘7LÏ3JYŠ‰ôVjiFÕ–°Ð®€Ò]äJm€V;|É/~haËë…e4š:ç=¢qŸëûZ&›¼¡ ò ²]1nËñ’s„çˆÍ±çã.€Ëí%¨PñʘXÛÅêµ(¹có&éÚdà,%¢òqqV¨©^Fª’¶\ BKEóŒ¯|õžïúþ¸Y]³`ÀŸœµ“Gm UðÍEôóë¦7+¾­>mW­5ÝVº4=Îb­EÁ,˜d˜l:ü^Š(EŽŽy…Õ†+Cõâž.åßÄHGÝꥌ›}ý“3À( 8ö²'Ïe^›$¼¨äë4ÝÆð|Äæ×HÍ%0ìJ/KÚX…°TsXiU´ë„bkn›2øeÂ6,mÖJå¹Úr¾ äèaÛÞv{bÁG«EbIï¼¾/۾؟pç ²«Ð3Þ¿îØ@#½Ë¼çk5kN}á„š³1L¢c>©,Îý|WZÝabáB%î0æÊÄzýV¼?Ñ 3}Ï 3šFÁt2£ó%ÉG6óeyðÛÁÿóYèendstream +endobj +1116 0 obj<>/XObject<<>>>>>>endobj +1117 0 obj<>stream +x•WïoÚHýž¿b¾‘JàBFê‡Tm®­Ú*×PÝUŠtZì6µ½Î®‚Ô?þÞÌÚÆ8ÑU§(!˜ÝùñæÍ›áþdLgøÓ|Bç3Š³“³èŒ&óWÑ”¦‹9ÿ_§i}òvyòòê5ç´\ãÊl1¦eB8~vFËøtM#ºÑeiò UÎäe¬ +RyÞ×îA;ÿbyKSÃ[MæÑ ¶NØŠ2µ§\ë„J‹ó%[ò6Ó­9Okëho+G7*[)ò{_êŒW^Gô±$ãÉ—Îæ›tÈc›e:OØâV•|“ýÃëø<š°W\ÃGÈPÅ&5¥ÑÎìƒá+«½|$¹/¬MµëDv_é +ÇÛ 9]“#ÀL•ÆæQíi2šðvú¾2×´[GªÍ\oœ’|àuø¸kš–[äÙ‚Üùˆ¶ÊsÔ½4CTü3zÝ`? ±å*Ó¿Tj”‡—IE¶àLÞ<¨´Òxîw‹'¥»Bè*ͬ/ñ’†¸˜¡:~x€ ØÕ€² +§WšP¡Âz msTÌ®a¡Øª¼Ê´31cR¡|ÎÇ4ü3èåo•Sq‰ 3¥v +Þr0vGÛ}±Õ¹§ÛÓÁhpû‚ÐN§iD—9N cæŒâÿa'Gí´À!\cnÎÚ ¹Ô=ÿrMìPNÓ*Ö`a"Ø•°?EƒÀÄr@je«²‹H„j(Î^A +Ð#ƒ=S›MÜÞ’*{þ9<ð›qKMŽcèýXò£6ræ%gUZš"Õá`Ÿ4ðUø•~Ó*ÃQÏv[–­ ž… £†Ö…£;.e ’ ÇAŽÐà†ät¿ÇÛ¶é +8vtIIêqt}òìõ/{ºf‰i¯L+”H +Úà^ƒ~dðü9ƒ~{|Ñ£@;‹ÄÙ*µM“78Q¿?²é{š! üÎÜs¶^[£É«Är¨DZûP‘nßïÀqZ‡RøR¹R'Ã5+Tõ'ú MµAEÁÍ#ftlHŸæœJG Å8±rqm¹©ÐÝO˜ n|‰Ö¶^Zéä6Û1ÇÀ*| +å­ƒ +ðùú[«ólb1„Üi•Œs i_­2SBSZLö˜xiÚsž[éèÏw¯ÿcåàÆ]×J>/XObject<<>>>>>>endobj +1119 0 obj<>stream +xVÛnÛF}÷W N™ºX•d¿9q ´@.MTŒ+r%mLî2Ü¥þøž™%%ZQƒ:1@ï’s9sæÌ|=ÓÿÆ4ŸÐåŒÒâl”Œh6ž'Sš.æxžà·Ò´–‹Éì*Yœº/Ƨ¿˜ŸøàÍòlx7¢+Z®á{¶ÀCFð;Ñ2}EøI3>ªjèKçòa^fò26è +w/IN)3•Nƒ«rk’kúâVþõòËÙˆ.Æ#ºÌÄZîÙæ韗´66ã/ñëSŸó9eë›Ñh\4[ç»ÞMi<Ž\Lfìê/W“ߺ:ϨPš| ÜÂVj\]Å‘¯ËÒUÁãÊxZ»ªÀ>õÞôº •Æ*…,i«<ëƒÊs‘êÒ¼L&ìû<€PÒy´µ3yN©³º +8A 9‘àHu^UYV_ª€KøèÇ™Ä,¯hC×…º$ïÖaÇPs\ª3ðÄ‹¸äÎVͳ +eëµJ^Ú;î:¦h‚­½&9ôHˤT´m1¬EGÚÖò´3a) :*’6àÈL¿I:hõÍú9­LD¿P¹mçTE4H_š(« DpÌÀ¼3iå>J‘º ÝÁµþ¦Š2ת-ýOc¯~>òŒ;¦D~]G:žbîÇ8üSû@ïU¡Ÿî_}2›m ·¹Iî_„šBlÆkÈÊKVO7Ù#ó/{ú² /Qu·ó")Pètëœ‰× ñÛPå·B貄¡¸¬áà?»„„7Bw`Ò q¿Ò8ÊÜ€07Dejâü„8l¸†°øŒç@è6úû–ý1ÐpÎœàG®3¢ƒÃs¦ªÅSÉÓ¡š¤¸ÎƒAØL¡š#穪‘&XW†…På"¼êýh Íú¤v=—­¼ˆ\>Ðí:`Õ¿×x‘´©AÎVT+® l;Ÿ1íbÛ8ÄYÇÛyç—[¥{°Åø‰kž Q [iıÁøáWdÖ±€É%Ó[šêY+x–7(4¬X‡–‰ÛÅ‘ã~UXÙQ ²:2I[–':¿é4ŽÛ‡w’[)+²:çNë{ýQQ u„'é•–r'ëñÞaóèt™xügÒV0äèýnL*lrýÄé¥T?bבíàÀŒ6ô¶©„¡)¡óÝÂ"+…ÁþèÍ?Ü;È…­ÈqØ#§ýOBlõx·h÷×ñ kþâ’f“«¸A}¾y÷æµs_Xƒo]ZPUš_t\Ì'XØÿÇ>8O“ùl]oOlä—åÙïgÿàÈendstream +endobj +1120 0 obj<>/XObject<<>>>>>>endobj +1121 0 obj<>stream +xuËNÃ0E÷ùŠ»£H­‰“(v–­‰Pÿ@“4Uc—ÄAäD–%KsÎÜñ|F1 • ÍQQ,bäI!2dZñ;á;Úè`¢‡çRÁ´¬äZÂ4`<Žaê…À•4TÍ]×ÛîÞœYÉ ™ Ê.Q"gióÒŸeå¾hÅáûë„ÆÙ;]®ÛX åR7Ã5ðÕÈÑÛßœƒn¶ÓÓ2yàDzæºÀ‘(¤s¦LE2Í­ä¿ýª÷œ×T{7.bUßF•9ÿ\§P…ÐÁ=î_{¼îÌ8]=d}é{gƒ¸ûãw*á]4ÿí"S™P¹æM0“A}2Ñ{ôˆ£nendstream +endobj +1122 0 obj<>/XObject<<>>>>/Annots 554 0 R>>endobj +1123 0 obj<>stream +x…WMoÛF½ûW t‰ Ø´$K¶\ ‡¤NZ£pÜÆrˆŠbE®$Æ$—Ý]Zß7³$EÑn‹ ‚)îÎÇ›7oFŸŒi„cºžÐåÅùÉ(áþóÇç_øšÍù3§ée4©2z<¹œÍùål^Î'Ѹ~â·ãLÐlr]áêd:‹æõ¿eƒÓË9ÞMç×ø{‚ÿVÓúäýâäâã MF´X#¶«ë9- ßÄß·ªôÚÒMD:®lê÷”ég¹ÓÅ7¹9¾7Ï/§ˆv‘ o¢qDw…·&©bŸš"œœÒx\Ÿ”qòQå+E®*Kc½#¿E@&ËÌ.-6dJ¾‹o¼Ødf¥2rù*ŠM±¦RY•k„¬è¦1>¦Æ×pãO~/ˇÀl7tñqÒÞn¸:Á#‹CzK_ÝVYý£rÚ.‡‰^«*óËÓ‰ÉUZüP‰ë9O⤛ôûø=ÓÊi@¿¨ujmN¹*׆Q°T9þ+-ðw® +REÒ\IL\åºð¯'7¤Û‡ûwwŸþºÿpÿþÃçhëóìødáˆÎÇL2DÆ>וE,­Tü´±¦‚ÃD{•fŽà?äK¹I45XE´@Õ¾¤Ebv,‰Óv¥­qÍùæ¨\ q¼.[Ô3\žRŠ›ÚÅ6]éùsõƒoj8¤w·ç¿>|Y<üGŠÃHnÓùä*ãa-„R+ó¬ÏhІ÷IÙgm”kÅÄÛ*O¢V× 5g)p¯ß¦ž£µUQ0cë€9"‰hU…ò’U±¯T–íQdç40]¯ Ϥ*äXø4u¶úïJ;öaPs#éa2òì‡S càŽJ’”™¢ú(·ÍBv½36©“¥·ƒhiRI+t›Õèµ^X·ÀåßP¬¤ã;ÔZé6ºåhãp˜øuK¡O‹:²3©R¦X} +ÍÙãx©V™r¤‹Øî¡M‰ É)Õun]는Ÿ%®+T¢7Ñ$¢{ŒM^f“šx¢<ì£åFWòº=Íb‹ÞyG÷ïD½ÎÐ/¨ZÍ\Î+ë«’vÌ©åÄ쀎h$…˜ 8äw¦ÕÁˆPßA/UV†À`1¢/Û4Þr +ˆzÆ:Yk +Ò¬×:®¥w§öÝ38ŽÞ³)N1 Ýx`uêÎÖ|ŽÇi0–P2ö(Xp@Ë¡pyOÇ“þîÁwô:ÇÔø=¢†Xjà‡mz*ÌÇÁøTFO‡^Î[UlÐËè8Ærˆ¸w©ßv2º&U–Ö¨€ÊƳJʇ©f÷ðÀÌ÷ÑJ _"²‹‘ƒy–ex\í{àp=“³ü\»bv›00':¡À‹z†¸ +£¹„»­Æe+­,““@˜Nú*v÷Ä°À5©ý³ëÔ: ðp)SÜJ¶¯>dÜ`Úi¤˜«Îñðqüíó}ƒ™…!q(7·+ÛÆÞÄ&£Bo # #µd1˜œHMâ.0ǸFš¤:öðÖ(+ƒǺô¬!VÙàÌâÔØàEcŒ{{•²€°ÿOM.qVØ„ÎĘåˆëšmXa(M´’2õ¼‡.ì£îµ¶{‹rcN˜¢¨Ì9˜ó,uo½žF×Wó ü³‡ÿaqòÇÉ?Ëb¨endstream +endobj +1124 0 obj<>/XObject<<>>>>>>endobj +1125 0 obj<>stream +x…VMoã6½ûW tʉâ¯ÚΡ‡MÛ{Ð"Š{¡%ÊâF"U’Š×ÿ¾oFŽ•EàÀÉyoÞ¼êßÙ‚æø[ÐvI« eõlžÎiõð€ÿëÝÿ—øxMÅìq?»ZÓbAûG6»-ísÂöùœöÙÍ©ÔØf"™@ŠÚ ½Uµ¾oT'çsŠ¥êÖÚXjM¦¢ÎoɺˆíI(•¿lNÒ/û³9Ý-7é(7ÏÊž)«  +ÚærF‡`œÅïØ6 é7mÉÒxäß´g*ë›*¬WXÈZoâ9¥}©Ï@÷µªªóóMU&ﱫtÉØC*th#ÐQJ/ª>(ˆ“!¿\À›«¨2!’+(i¨*=®‡$¥¿¡ƒ°í›À²J”;Íj&ÑkM™³Vg)'¬³ª‚#•3²ëÀŽÓgåW¤ìñíLÑãã†8üõ;gW´ÎOðK‡¹AvÑy£Ã÷/¤Xw‚“ ’œÎY`†Iø!ýšP¨)˜X·Zdãz`¯¥¬ÔÙk¶õv‚¬ŽÊX‡­?Õî[Yj³’ƒ®5 Í\:=ňïÍFŠááB¦:uØ“±b„¤·ŽØÙŒ~ùÆFW];‰a)ˆúu¯çáS)ËȦó¿´$c +“´¯ÃvÊõ™Hfƒµí‘T®CæÍ‚jåÑ$¾;|E*ªWX &¨Lä“F}'#·LȵQ×M—YåŽ\yv×hèòN‚„]K{$ýSe-ö/1‘Ž …wµ@tJ¤„‹’½Ö]‡‹÷®õëg™¾Ò ƒ ++åS—Ý㬹ôk +4˜ÄDÈë¢C °ªCDO/Ͻ]&z‹?QlêÇ\‹ÁåÚ +²s£#®î2‡YsÌ7h•— ZxjÂ-us˜wôE]UáÞM'îÁØý\”¹=¡jìí8g>Á Å™Ð6×µÍü¹áÙ$%Â’ØUÔí÷Á˜×4L,ÑÄÎrõ:‘h¯úŒ1¹G*s#irÅäÀ¯¡2é{h̳:%±ToŽ§^ÝLà®Ö'€O0/)¶ +ÃÅ Š¸Th[¯oÅ\çwÁkL¬ˆò ºQwB!2ŒËˆl‹ jˆg,^ˆù@G¢„;zÕ”¸3ù®2õ8¹ÿ `¨Pz¥µæ'lñ.(_‘Ø÷?ÐØ…´ªËK6®L¾6_…2ž/I ƒl­¬:êw1LòeE»Ÿ@OR<±Úì܃¦W4à$eÈÎ6Çß?íú7ŠÅo»­óîÞ}ùúüø•þôî® úÝe-C*ö¼Üm—xÉo~+UÑz¸˜û©Ý™;ðöõvn7;¼¸`ë/ ~ôÇ~ö×ì?~ õendstream +endobj +1126 0 obj<>/XObject<<>>>>/Annots 561 0 R>>endobj +1127 0 obj<>stream +x•WïoÛ6ýî¿â€a€ +IJe;vR´’¦2 éV{û2ï%Ñ–IôH*Žÿû½#%ÿ`E 'É»wïÞÝ1ÿö"â'¢ÙˆÆSJÊÞ0â Eüõõ×^4™†3šD³pD%¢QxÝ<4ïfWᘢá0œ`u|9ĪâÕëYÑt^a-š\cÍ=ðÒÑ#Ö¦ãv#¯Ý.zƒûk i±¼é슩C…7Ið)+5ü„ddRëÜîè#¥ªyEøÌE …¯ïßœ¥hæ-õÇD±HBúMåU^­ITô´ ;~›Ûloaä-L(Š £Y8e 7ÆÔ¥¤ª)/’ÄþÌ+@éàs–=I{ûðeN•À~µ"o;“Áüó׿¢S7¥$´¤o'›Q2=53¤~4ö±Ý}y옻 m–'€àüýîÓÿ„KØÜ1æ°Ù­¢X$Ïõ¦¥=Q•Õ +À´ñÖ›°ùô8&Át)€ŸÛ»Oß%á4ÊÀïìd% °ñ2šB†HÎCEJ§HUŽB²™l€^Ð*×Æ’±jC ²I[*d©*Ðâu]¹‰*K<¿?Å€`Z7Z)û“_štŽ/ÃÙ%4 ¦Œ7˜mJýoàÔ×ü‹éïÿéO¡r¼nÒR4V «ôÏîð›Zñõ½í½w$s Ý©ä¥óDZð+ö¸R #¶M×2àU;*E’å•ôË,‘- + +†“DÅQœÌo)VÄÂÈå;ÊM_H ÷èG?bÀ6ØA¡Ö¨cW1ˆ¢ƒ ¥Ç…ÚRUWöHäl¢’Œ_èmtþ’r‰4m#æàœ7_W!=¬ðø˜Ú…¿ª‹Žs.ømÝÉ”I‚žXË·U²×Á{×pdÚæbpÂÜ·)>Ò‡+$MjHCpZ¥jÒÜûu°N›µ^S@{oËàjùît—ëëntM v– +J¥yaº•„Db„ÈWÈ“›e*_d¡6¥ã‰J©Ü¦ÐYšþÄ}OÕ–û"ɉ–’rtµjÓ5ª°MrסšuK(Wf‹ +8œK—€Lm$òÇPë Ћ¸dŒŽ–…„.)Ö¢J24W/Eq¡³êJÖ +m¦U½ÎNà¶@÷ÚK€ üm´²*QÅï®|éx WrKËÎÁJ“ˆCnkî̬¯S ò3¬™$yÅÊEçB|y4O&ò…‚Uœ®eù*Ê R(bõ"¤Ð>'~²¿îî¾p숶#òGìjrÊáÞK¨TËM!$¿¹¡,în!Õ·I4š»CGwÇ8gi—Ü»´´&´i|JhðÝúòÊEõºF€» F“ÚV°ïˆÇ¨{ þÄžÔ•2ÖDµ#½kªQ hѶÏrwÚ¿ûw&Fs4­ö÷C.,×PÍÎXY^8‡}ÊWƒm#Fªï+àKÉú.º%F9f²£²ã“Ú^4­ +è! íZ%ש×d{½àéQrã“in=ø¬‘î÷2G9‡¸]­–Áå[ ýPƒO56¹¿ÜÀ•´CN…¸@kÛ·[®ºÑá¾Í­n€BŒOLzGä[À÷õØÚ£§[Û1tŒºàÊ„)û{]¨XÿðåÞæèæ¸4ûÔ5LpÞY$M¡\6WŒ£8¸n‚cƒû«ÃN\¦ÜUñÇþ™˜Ì&álzå/x—îúyÑû£÷C}÷`endstream +endobj +1128 0 obj<>/XObject<<>>>>/Annots 570 0 R>>endobj +1129 0 obj<>stream +xµW]oÛ6}ϯ¸ËKÝ!Qlù3Š!ËP`I»ÅE1,{ %Úf#‰*IÅÑ¿ß¹¤äØrÖîehêD&y?Î=÷ðêëÑ€úø7 iLà %ùQ?êãþðÇ¿MGQL“Ù$êSNƒQû”ÑýÑî3VÇÃhÔìõ«ã8šÒ¤?‰f|ö|7O~uç9§x2Ú_Lpv<™ÂÎNΣqóäÏî<ãì`¼ÝË«»ÏXÙo°Ä«ÈŽ†Ã!>G³)>cü7’–~alg!îÅp„0¦áÁûzyäµóýµí#Ö¦çÑðåÜåüèìfDƒÍ—(Ád6¥yê‘ïÓ<éÝÉgGÉZ+In-éíüK·6fEg7qc¡GmWFW%½Ûßì«é7·îz”©B’*¼é¿V™^ˆìo²2qJãK ¢ä”‹š6¢ð! gŒiŒÏˆÛ8$-¹ÇHW8‹ÜwÃ-˜i¬‰\«W è²æ"C/©'ÉÜQKšËæ‹´!$Ž zQÊÍ“³°k(Úò:´ä.ÖH1Á; ì‡{²ÅÂ7·¼_Húw9äÏß  +¬¢ë×:=¡ÍZ¡<è‹bb¤U"SÆ:p‚MÐCY¦7-_šLä3H8oËr”KYes|%\'K4iª¥hÎ)ç$Z”(ÖY¨£dÑ¢ŸßßÝS*œXÀÖŸ °T õ+lvºãsY°b‘´®[ð­Li0.¨OH>´A0ð·‚”1Ëj/QI¦ I^Ÿr…à* Ímƒ‚øWF¹ú‡PsàBâ›é÷žWý®þ¶eØúg¤ÄÇ} +<ä«`MXönEQS)u™É äÂ>¢fF®„I9 _½ä®ó©¼A •!&¢úª’w v`}è¾Å©ÕÚ–1ß@b×0Ä*âÔ3_ XÂkÇfS-]JƒÎAˆp›«gD‚‡vcy–­×övœƒˆ„©@R´Ó@£§Òm¤ wn¢LRå(^‘€8L=@ñµR8(èØ{9öÆ9Íø‘ © 9t÷ +ö«p‘Ñi›êZCmÁ^Èn”KÖˆÙ‡@ƒ±ˆ.^3~@K^h“BÊ”;kÙ¢Ý!+:ϙ»|noÛ\ÁpD—,9KQe]ù’ðÜ /ˆºu,í¶*KmRºË÷î=wóßnŸžÙ;=Ã@£”x•ÔÔRÞr%Pô–3çÏ ÂL×rzíÇ•î}íU¢©MîûÇ“§µüX¸Ë¥WAÖÉÒ†`SÏw±«˜|ñ˜š 6MAx2ÚbéƒÓAŒy<`B¶6 +jÉ6á&̶  h(°|Ndé‡>”ÜÓ߇M+VÒÓÒèœG–zׂbà ‘e&Xvu‡ÞÂFIŒk×`tâ4îÖO]_鼬pÙcº½½Â˜s«£­^: +fì*¬Î$&Ÿ2« VÔ³›×uiÑçuæL$‚Nãéù<Ôz]£wM§ÿnwi4êª2®ùm*°= ª6òŠû x〈”þÖóÐ`4õ†9z …Ê4nZúT¨ç—¡ˆA¯97 ÔÁÌÏ#<Ï`ìh,ù‰2Tv{ »¯:² ‘Ov‡UŒ_ˆ0ÝOµ×8`Åñã‹i´yv¢ +)‡N8j’%ÁŸ‡Ðˆnž ‹—Ý\¡m>H`ÈÔð ,U&m¦È›Ü lMVå*¨dšuÆãvUSW–`÷þ›+^xz‡Åßßؾõx¢àä‚鮲Կ2 `¼Q­ÖxÀrÖ¼ ðbÚŸ ñÞ6æëíþâöò‚>ýtÇeqG¡qmè‚϶ÛO§1^ïÒÞ½KGxûžNf¸†qh>/XObject<<>>>>/Annots 577 0 R>>endobj +1131 0 obj<>stream +x}VMoã6½ûWÌÑù3¶S ‡d½)t³éÆ‹ôÐ -Q67©%);é¯ïR¶e)‚Ø–HÎÇ›7oø³7¦þÆ´˜ÐtNiÙ%#¼á1|û½·¸IÆ4ŸÍ“•4žŒðŸ +z±:[$×­Õé|žŒh:¹Iæ8;›La)>ñYx¡é8ÚðÁøÀK­Gœ›&‹ÖZ뱤å8¹i­µÍx¿g£ÁßhŽw³å¾'ø·’òÞݺ7¼Ÿa?­s 1_.hF´Nû¢ö;©½J…WFãÈÏZ:OÞ ¥3spô¸&'í^ZRš°œ(%Ä; ×ÚvsMÆžÝ,›C¿¬ôFt5ž&xîL]dIórÂáåS!…“ðžÃ |ÃIØqY/»¥>Ûß .ªD%íå¦PÙ°)G J㳌i!3AîÝyY†Ôjox%EÁI8µÕôýñá/ªU†”`~Ë?¼éßBd €£2Í kêÊ%´Þ)G©É$á[ì…*ĦÀƒ¦LîeaªxÓÆ +î¤#£9 \KÃkƒŽÓMíé Š‚6¼c/3NÁÊÙÉŽ3Fwa]æÈöB{±•|* A_Ê“ÖVùwŽÓïš:|à¨?:S8ŠVt¢n¦oOŸ(Ý ­á6å›H=ò¾ SˆAèÝWà€”op-¥ÐŽžE¹A=']ǯ6p⸪>âKåm f¸À ·S•û0–å»ÿ»¯™ èÝÔ”"B‘e1†Žï&"X ýc¥3µMeaàÕNìQ ®Ëeã5`‚¨¹5%ØÚ=ü´ú¨«;>Ešš„Še"lë²à!¬¸¿ ’ß±…áýu£ ý3~kµìY4úºØ÷õLÈQÆŽŠª°ƒ áW)+žT9 jb* jœÛù¬íìõ¶qKܶ°U¼b›LÊÆ_!œ?5JYî>²åïˆw"ù¢RkœÉ}²SqCERÃ8P[#3´›É[{v€^þ¿X…ðQtûÚ™c8övBŠY²nðиšÃ;>ˆDt-p–Î Ô†ùv&TdKÓ ¤˜1S±ÿŽçsv]B`+Ô€9w^?QÒuv ÁÌ•f5…CÔg›ê„QQrã‡Ò^´w+b>Á9—±É£¸ÐÌ\ÿ†Þ>‚[Y±æD[ h+=sI­&•ñ¸Ë¯=%\î"ϫh¯PP“w ¶AôÏÖ7x½åvôiB·ÐmÏ¡í(¨9ЂTÅH‘:Ä]¾y©3¨eƒ]^û3<ªIÇwɆ“j† +O!ȹErÐUl$ªªP˜2<52™t DÂOÒ}†}ô]«·fŒ§Ì‰W>Ï1â°u+QVÙhãbvãÛ‰7*·ékÔ9ÞÀ,;0CES¡®¤·ê,³•â•é".« uGâUQc…¯®'À1®G©÷ÊÍC,<ÊÍMPá‰ÝÉô4R‡÷óÓêêxgyüºþü+Ÿh+å¦P$+yÔ3þFù3“Öað l¹²àSUoÀ«Ý¹Þ/rƒä¶â¥?¼þü¡týöbl‘…`O¤óÝ''æ Àâ;­ûØÊ„ÞCž‡ t¨ïÆCãï— ã9®šË)ÍF\>/XObject<<>>>>>>endobj +1133 0 obj<>stream +x¥WMoÛF½ûW rrP[±dÙrzK‚0Ð8n­ =ä²"—âÖä.Ã%Å(¿¾ïí’M-ÚÂ6l“»óñæÍ›Ñד¹\àk.«…\^KRž\Ì.äj~5[Êòf…¿ø©µdáÅâb1»ž¾x»>yõþµ,.dÁÖõêFÖ©ÀΞ$§ïrU5º–ù|&Ÿ¬ÉŒNåW·uÖËF7ÖV>›ºÎËÝúåúÏ“ 9_,aâTÙT>ÝÝþ!­7vËSäú›¯¢¿óËålÁãpo6¾©UÒÄcK¸í-VÇnm£·µjŒ³â²è€ž>˜¤vÞeÍ(iòÚµÛ\”´}èC—\1z„ž “êI)y‘»b/0nŠ}&óËœÁ ÜV[íZ‹eÕ6ÌKÛ©-µm¼d®†¡ÂáycJ=“ÏZªZ{¼Œ]÷J7ÆcHôô ×iÛY\a‚M®åA•5‰È·¦ÑÍg7….VtŽÒhÞ +e2e…wp;€;ñxDø÷ûw’¨¢ðgr_´Û­‚QyÓ"TÛ˜$^ÿàÒ¶Ð8Áâ0‰;U"]ïL‚ßi’œAÂŒëF5›8M]©>â¬}8^UZcu•4óîiÆ3H½Ï§TIn,j°Î—JḤÚ'µÙ i†4*X;ÔÚï}£Ë3Ñߪ¾YcÎZ›YU˜f/¦!ð;p)æÈà|Ê̶Ÿbâý›ÎÕ^ ¨[ã~±ŸE2<í‚Ð4è‚ÅL@òøñè@v×Ð Ác§‹B­ëPò\5ÿйÚiIM–òàWéR]DÖÖºç)ó%ÜÄxRŒ-º©B`y«Ì:àðÈd£“Ü:´™Èl‡­z Á¾P ]±T©&| Ë$mÑ ÎÇDŽM¯C%šÎI,1%錧=Wï¥TÖê: L°®!…V³¯JÐãÐ"‘Wð–ªýQÀɤÖô…â>£`bÁÞ*pIײÙakã°ì |Žú,Hã„®–ç}ŒzjIfÐX¼SÕ€@PvÏQyih É øÓDÐ2YíJAdš¸»Nït ’¢ýÓ”¥¡°AQ‹ý6$è5³Ímè(ú–TŽI’ÜaØÐR¨Q­RÞ£RœÇÛZm 7`«]n ‰²Rh…›,®M ÜÖ|,ëeëIÞÏþ%#ήÄB:$dÈm€làt:5lçPͪf¸üp@Q(³µÖâK46ºfˆõgˆ™|dà¦éÕd ÅÝúÐh˜:“ÖâõWï“~\œ¯f7œõ`ò—ÅõJâÛAÂ˃~…uxóÿÝð}_GIre·ä áü?öÏ7³ùë#F·©¦¼ÉHäG.UZbºpÝn¡ °ŽpÖ ,‰-H?An4bÇ¢9êèa†õÏåàP÷Ay ãhò­¢œŒv…‰<‚ +@0úvÃߎ°KlFàw>¹ïGåSÚŽfÙp0ºê:s±«×] +¼Ú†EE6¡Î® àG Þ¸o”¨P@!k‹b|©Ë PDv +;«Äc&-“†»¾S,`DzÓhgÀ(€ú¶ÄÇÚ@FMk/F+Ɖ;ñ;ÚRŽWÁun@Ì€Xâ‰IP R¹²åºD*qŠ3ÿã»Û‡Ÿ1ON’ ¸K¿çÎbŠwÕ©’La[å †Å`ž¼ä¨@¶{²‹»&'c‹!& ϧq/cB‘§Ì¤pî«öpÌ°I” T?Îس`âk«1ÉâN 0uljrûÇçPAß±/ù=t´#~Xé7H‘N× +F#›É[(w lŽˆÃÊ÷ègIy.ú†ÖNòåtgTˆýîá!l 1ì°ŒOÆÖÅÕ˜eeï¤0›ZÕû//ñ?pÇpÄ€ ˱ã™#-F¹â(›#[£¶Ðë+LXÛô½ysüô´¼šñcÝ¿û4Þ“– ÷MÊl–«ålu}'ÒÕý²>ùíä/ªÌøendstream +endobj +1134 0 obj<>/XObject<<>>>>>>endobj +1135 0 obj<>stream +x…WÁrÛ6½û+vrRflY’eY=*q3ÍÁŽ+“| ˆDL @ŠU¾¾o’’iw:Iœ„"°»oß{»úu6§~ÍéfAW+J˳ÙtF×Wsü\®oðs?NÑ.|pµžMo}°X]O—o}°^¿>ða{vùiIó9mw¾ZßÐVÏf´M'ß¼rž¬¡:Wôíþó*Ešk£(á¡¡Æ+ºßò_Ž„‘”9ÛTdD©< ÏÔÚ¦áÍwFÔz¯ÞÅËÂ[Ó÷ÛŸg3º˜_!½­œlù_Ÿæ¶5´Ónò7‰:^'>R’’Ç–¶:dÂÉ:R{e¨°žÕ|n”:gé3 ++bJ?.¾k#mK^y¯Q9j§út+ Ó@Ål²×¶ñ„ã:E•5¤Œû<#í)QÚdŒCø_(èMÜjñ¬BÞ;ëÊQž·_î6ŸïŸž†ƒýƒü”¶9á·Q)*îÀèšDQØÖÙ©jåJnfÈÄ)©Jcâ–Ä(nrjMílQ ÛÒ +S£¤ *áj6…pß>ƒŒt›ë4§Ú5žßìn°pj§œ2©’c\7RjÎy·´+g÷Z2µÐ™­5Á÷:íŠÉ‘·¢ëÿCÑd™H +E›‡F5ÞYÙ0Ûž&›»§÷äHºduqÇ1÷Z ð#ñ¦0ÂiR†ãIUUt)úØQÐTT"Ñ…®`y±Gxf,âxIv‡,Lš;kôofO%¼o­“̦ºU`zÌÑÀ‘û|òKÅ×½¯zŠ0)láÓ¤“ú«f?½ý¹üôÍA{öŠ 8SPÀ|>½šÎQ›p™ªé”Ã%žúÊÅ‚}er"…:¼ÌøÔl&P]h#WG¹Ø£Cêík.'‚…Ó3Èìœð UZ7¨1tº£ücq«=(ˆ.6H] >ûº ò2wàtÓg­ŒA2Ü XÜ(GVOUØC¸níôòV×¹EXÄe öªšýJ ,4#jTš¦¶15Ê8­ªs攨a0^— ÒNG†Œ‚ + %+\%‹rr%$ó'fÊÑ_×p Žèž–ùJ‘Æ èšw*¶¥&VD¾UèW `D¹‰ /Xi +É:Áuèü.惩Ø÷¡û™°a…O"=z9òp.S9dÚ ‡,ÝéÔYowuǵpc(´Y;À‹0Ò“|G°ö¼%œ!XŠÊd(Ù³T‡´# ùQ$éQ2`”ÌrÌrJaÌô’øιqð‘l¦«~È´ÝéL  +ÔA™ «”ð^F:ã1fu~@!SÚ@çà&Ÿb¨ënòO€J˜Ròe +’B•(µµ” žŒj|ÐÍN•Þ¦Ï°€VÀº‹ç‚S¿%ôD8r2­YRÃ'lR™2Š¥f:Cxÿø: /õ$É#@²Mò˜Ã1Ïq0 x^ôô9ÑÀ!7–·ð=—LV”*q¬¯˜¡{ʧN'xÔÆ”º1> }×ìGÖ}nPö'(Ù¢>"³·:Ìýý¹.ð4Qé „óç¤vÀà?LØíÑhåXvØ}öÂ…•ãQ”‰ -8J¥*ÞÙPœT©•ªi¢ð,T¬K‘Ãÿ“7&âÝãׇÃLì¬éÈÅ€(÷»´¨ Û(¦SEè°­¸ÕPÐq†AXº<Û|·a²ÔÒ¢‘Ì#±,…Yh×9w;Ç‹a΄Eìl¡²¶À=Ð@Ánœå¸ eªuÞc >°’²¼aŠkð,2(þÁé’·ªÛ¸t~ö¡Qh췌׮1a§aƒP¡Yç¼’ålˆVÛƒV…Ý%Vb“ÜQè\tU^…{e€£ W«,&í˜ê½Ÿß·žBï°Sƒ€\œ2MÄÖS3ê),‘ñŸxÑ&aPE 9 2@1ªV$<äxõÅzÖÀÞã•H7Þ8¥/€Ó½Èä´0†üØÌ𢳔cnµMsa²0^Üqå™Ò‡ÅMÝ…'¸SH°ÓŠ¡-Á˜øâà!ñ Fo_Ûù२ƞ¼i{:±ûcø€2ÂŒÝ}üžsùiÝYî|…¯të+Z-ðÝKN7w6ì?y~ÞÚ-šÀ*áª/ú×/n3~ÿ?–®åÍrz³Zc=Ã;×+>úçöìï³amÇ…endstream +endobj +1136 0 obj<>/XObject<<>>>>>>endobj +1137 0 obj<>stream +x•XMoÛF½ûW |r›¶dÇrrsœÈÁ®[)hoÅŠ\J“\fwiUýõ}3»”(ÊAPAjw>ß¼yÔ÷“ ]áÏ„fSº¾¥¼>¹Ê®hz{ÝÐÍÝŒ?ã¯ÓTž|\œ\~~O“Z”¸r{‡áøÕ-ò³É$»É¦=©ZÓ\»W“ãß ùú—Å7\½¡É$^½˜Îpõl±Öo>'ëèi>?'ãIQ©Uè@X«ÀOZ§½nð±¡Z5[úúôå/²­v*˜fE~냮}F_©ª²ÏÞ¯èbrMÙk<€ë¥u5î؆|—¯IyZ[„ïÏaÚT¸o”×¢)¨óÚ\ +––•ñ¶zÕ•ÎÖT˜²ÔÑ}ÚÎåA}FjúU·•>Gn>À´ªl£cë^ðL‚ªÕ¶·ž’:p/þ`A;ƒmIe¥ÆnKSá;¬C€È3 à•ÍUEòT*£{jt`Ï84 4ΣŽ%m!å”ïR–øÎ.ªˆÊmã» +fééËœ +Ôe&ôã¸Êx¦èÓÓœ}EøPߦ‘ÇAG³ôÕô0î‘6Ÿ“jÛÊä±¾­³+§êšAcš ]©ØÚ˜fi8^»Ç[ðº*&¨ºô“«ÑôãHhÃǪ±'A+cIp&5Y9ÛµÀÆŸÉ'¾õ( ¾ +oàÈ¡]eš…ŠM@>=-úºuž½?Îÿx~  ‚N;šI›AR*Ïm‡ÓMWË\Ù¦¯h?E_Å^į+bZ•Y:å¶Ñ>¦¨ÎU³³Â#¬¥Ãq¢bÞŒKï×*_# r]Ó ÚQŽ}KF^K§Ž€ªÜP[uìkKÁu …¢Ž&†µíVkiKÌl n͘1ØcjÒ¸j©%kÛgãh LAaÌW|åò3(VÈïìR‡ü²ñ^ˆ1Ã(”ñ@ÏŽgC&ÕdˆØZ½0Mß;± vT¢ÂâÛÊÚ—®•Z?Pß~ÈxúßÑH&0Ê}Ù¬ xœ™¯¡ZÀÅ4¶­7-…ª‹s1”¨O‚;mªPœAÁÐ×€›ÁË@ŠOib¤U–ɪk3ZðœpÍ/²ouÎüC7Ì»5èY@XS¶ +s §á‰ª`Z`ÕB¦5Ûðæ±®Ð[¥”àcìɱTgÔ +ã?ľ¾l½ÄFñò‡HÂý:8DöUÏ]B™<9ûnnLÅ8cj®¬BœTÛ¢«xܪ +qG[{È—ø Ôý-ÄŸyAÎ~%Ÿ¡;¼+qw‰a³hðÐÐ`‰²¹Þdjê±QîÎQØÅ}WÕ6¯1õ̤ðŠ%ý +T±õ1˜=>Ì‘ ü§5„}Ð59¯K´Ø€3ãŽë€âøh°¶8µ„ÉŒ~kºû'<­»}ÎÏw?òα1‡ˆà]Æ®ð¿Á¸öŒÙ÷Q*œ°[6‰y¦±Û¶¤•aïó–ë×,¯1½¼ ¢±ÖÁÈÖ3û(^º`6F~°ÑvaŒŽD±Ç|‹9;êâ eEA§ÉÔi ;žÛògÅ1J!×YЭ +ÌŽmý&À$†Ì°‚½lFÙñy¤iÔPÙ^\CʲlI{ÑsÕ­Vj‰»ïØ|è5Ä£Œì‹ý0ñ슾ýÙ5lõÊ[ziìUóô|ÿ˜4oÒ¨ µôÁ)`ë[zG£*ñëÌ¿Qá¯[ÙåE€Èe'=[˜¨§­÷†s4„.Ëí^ÇŽ]Ö1D6r½“¾½4ŒBN Ü­Õ+'WNç¶n!P4üáqTQ­Rô¬ìÀwG.wt.µ¡V94¦«”£ÖBæÅ1:(ɱ ÈB.4´26ܪüÙÍ(O¯QsYA"sU;8(J_¡z¬ázZ¢{ÃI½ì')ú¡&ùFÙà–‡Ñ²æ™HÒ}L6=y ²HS#èàÍI­d +ÃîÂ<—ì¨ +®YB1=Š +¾z± !L•ôKDrÚÓRO?T§ñÂ>/|‰AÖåØå ^Ó+h=~MÁ‹œÁ˺óœDÙ§¨¢6«xƒ/nÑ1ËSÁX¾VÍJ h€&hKÇñ„À|ŒEGºQF¯}yÀØÕÀIïZ?Ž"•°ß îQÇàeWÖpÜŒm<ßI˸ÑùèÌbm°±±ÂlUGüÌ„2Ø·½ôbˆ1.¯Iä3b€^¢n‡dÔ‹RT¦Vx§€Žàâ^¸®œhnñuš’‡–°Tä"êU‘±\êAþÌ…Æë&–%)¤Ù`Ý‹âiÆÝš¿àឯÆÊÝ%‰6¹Åïw×øeã=³ÿüþñã=d¿qo?Ù/CI:ò½‹þøÅlŠ@Ò¶øñ 7³›lv{‡_NpöÝŒMüº8ùýä?ÒïÎóendstream +endobj +1138 0 obj<>/XObject<<>>>>/Annots 580 0 R>>endobj +1139 0 obj<>stream +xWMsÛ6½ûWìÍÎŒE[’-ɧ6‰ëÄmóÑX™ô™DB"`Ò²þ}ß.H‰¦ÝiÇÓ&1Ý}»oß.þ>Ó9~Æ4ŸÐtFiytžœÓl:Kft±˜ãïüç5­åÃÅåUrñÒ‡édœ,^øãÉ9ìóÿ¾¼;O.“+šÌ®`¾¤Ét‘ŒÛt'Æ‹óç®ß,În.h<¦åÑÎsZfbùœ–é‰ó™ö -sÈØZûµJ5•ê‡¤²ÌØ )²zKª©smk“ªÚ8KAûƒ“kçé›±+c3zÐ~GZ…Ý)©¢ :W5®ê,Píh¥_-ïÎi4ž&„p’9« ^ål?»` õ¤Rå_Ûh9 .~ìpœP鲦û©«ŒÎØÅÀÀYaVgA§7õîlh@!`öúùõJ­½+hm +À$>Ü ÕëB?([w¨‘”µ©2UGπ랥èÁ(êÐÖ{w™K›¹Œ™ä –Î?K®•)Bã¾¢ñE,àh:¿1þÄ}E)ˆÑ¼ó®©èöš^#šX¦§ hÂÕ?ù†J¢¬ ß„÷\D)R¯QcA +.kæ¶>.¹L¦æ¢²]@%€Àƒ ^Èj‘1?ÖW¿Ÿ|¹½þþ*òjLØ +…Ùäu±£Ì¬×Úã—ïëÇÛ?i››4§\!Åä•Ýhrkv¶Ò¾¥Š¤>ļ·.w%€vmQƒ*u¼>tn[ð·¿,øCB·5mKvèÞ­8.°Ì® „ɧÉöQ±Séœ +*!ÎîÀmk“ÍÃÚÚlH)~±Aî,U +•))¤8ð*nHö¡žj+×2ÏüJ6!Ô`X¿¢l9†Ù=ú5<ôj¨opÅÂe¢rxkã +fJ}! Àh§­~¬#"€Y{WŠ )-ÓC“Ôªò.ÕUUaböcébü„GÏŸ]‚·“+°±„)f*þ=Õ‡½ç]›îÞ7ð#v·Í,öÇ‹|4Eb±P?v$2‰Kš3ª[jð7h5ËmÙ„j¨• +šr]€܉u¶¢î×ÿÒ6Ú¦í¡"7B‹²ëf¨ËÚh«vÿ!"— }PôV¥9°prûC£•×5•V; +)°¶ÚC€¢pBaIåžYd¹ ç~4zléÀ¬¥#9ê­ó?Ð`Td +a{µëKnuT ¾%T +i®á€š›½ƒ¦ýw£-üDñ Ðµ2ZíXÑ2WªgíÒÎåkuõ Žô/£b{]7ÞÂL)ú|ýVúñÄ_u\T…ÃôÜš:Ç©A8úª"p^f G^fwÆB¬yˆDŸ=Šo!?šûDÙ¨‹{‰85=HÌc5Æ$…²p~a0ÔYõcePºSÉðGä9á E¯Ë95 ÂÀoêJ¨Ω JÀRÂ*0(W+…ý($°Î“,¸‡ò¤¹Ä'4º€¨3R…Ñ@ 1?ÑJ<Ö‘àCÁŸ Ë…”{/f\(vvvƒ1Ë{ÖhŠáÜŽiô×-pBŠ"ØÓÛv Èoâån¹‘1Eƒú× ’ý!“çW—[Zz4‹.¯†‡%Ñoè„î±Éð÷ŸƒUoiXïñ§ÇåŽgQ‡ø>Yõ8»ï?}[~jÅÀ±@ñÂ'Ÿ(!¾Å£™©7+teŽ%ùÛèzß­öÄÀ©eܾ±–ÕÇÚnƒ¦DéÇ×Þ’‰ýŠG”Ä}XÑà;×xúÝØæ‘Vî§Äïúnï2îÏßÐ……7¯±”óOk·'ìPS@’N |åÎÊs*¢1Ò§Œ°ÃmK]8«1ìä/íåú’Wã‘d*©kö{Ö“.Žn)¾i š' ~9ƒeß'³yÛG‹öëïÚÅÕ”fs~-ãLLígïî‘ ºî?Øîh<ÃK{1¥Ñ|"6ÿï³èb~‘Ìg‹Èå‚mý²<úãèo;endstream +endobj +1140 0 obj<>/XObject<<>>>>/Annots 583 0 R>>endobj +1141 0 obj<>stream +x¥X]oÛH|÷¯èÃ=¬H”(ÉúÀ=œl|Ž}‰yñˈ‰³&9ÚÒZýû«î!išë,°X±-s>º«ª«›þí*¦þÅ´žÓbEIq5‹ft½žE+ZnÖøyŽÿNÓ`)‰ùË×ÿ\­·QLËÙ"šSA1¾o›O9}»êÆÓåu´î?í}ÆÓÕ*ÚôŸö>ãév-zO9ÂÅ A¼!ŽZDËáƒ÷»«éí’â˜vNsµYÓ.•df´KF»ÌxRynÏžªLÓ·›»÷7¤Ò”ÆWNUÖQeC~![ÊUcaY™DU¿*t’),.|»àËnúÝ”óÏïv¿^Íh3J»tôðó:ðq¸fp†=Pj eø´b¯¨=„jÏTZÊmyÔŽJ­S)SÏš¼>)©ùªIï.•$¶.«.¤NzÖ.âÅÓÛUJo×÷Ì’Ïl§´×ÈY¥¦<"^@”Ú¤.õ¿ÃæQ¾s¾ìÈO üåþûîžxƒöæX"TNÙ_|¥‹×°"ÇOºØšDfŠS®ù¾1D lL.Éõ¢ Y*S:Ÿ1£ƒ2iåM~y|G¦¬ô‘‘!ý;ˆäSˆœ-øzGLŒ-q ˜pÖÇmè2äÄ°?¢]¦*òʤcúDª`®¾ìOnîpýI»jLÞJ®…º '„®7íuU]ìâðÓ+3 l$ÑL{M•òO¾á0i8œ¬£ML«Óð8_­)°´Eñ±î'óMoi²]¦â8ºŽæ}Õ¿ÕÆ ìþ5¯L+ʨ¡HĦd±W”Øò`Ž5Ðeý3C@´\&µs`tÔÀGÑ@q#zóá3}ÚÑÿþñúÞQ£‰Éä,ÃË,Ô„gtÇaw+åíUòDõ‰™l0˜7¦ºJ¦'UDépS + ú…3«¹ÿATRsåO C¢¢B¥¨eÚ[[QjüÓâ¹»ùüqûý—ôåþûàŠ^ÝiÏ°AÜÄDô˜{JüB=¡x*¸‚bý£Œ,vï™vŒ# +b*ÉL©ƒ^òtΆ°2gUV¼ šc$=AUνrÏÁâ>ö)*,y;í¨–‹&Ð=Ä…ÿÀDk&¾\¸1°ÎM©rò5~u¡³fã(É9ꊮ׆ïtðI!!ó#ŒŽ–5Iÿš<¾k®z10M9N÷Á&=‹Æ,àqÔþjŽÊ™“‚µœîì ûËã»1*ÿŒ€’¼†û±yÕeÂ5‚§§Ü£îSJ•.l)%Ñ3µ‡eÏž{Š!g‰îuçuGzä¢:ë=Ôq ®Õ-•N-K­ƒH1–‹† ± (É-ʧjŽ(ŒsìШ²£™Ö6w©=—¹mûúL4Ô™ê6£Mx÷Uú9t¶ÐǘKµ7¹©ZwƒÚ›P|~€äæâÇŒòYç9?Y®Lƒ#шq +BF73‰çê!yröÙ¤Àþò P5‚‹)?ŽNy}<ŠÀ­ +®q7ZH)qx]ÁQp,Œœ//åØ0]q}‚h\Hdçî¨[þ¹Bø|á¢m¶Á]+b  øš’ÏÍÞ)g€PAF¨Ë·ïÝ5¢[Ð'ã…_uú 7%é»ýqÅãŽ_U&šå*®]hUúa‰Âr&³h½œÌçœèË5 +×ìY@«Î+¤ÿ1C2ŸuÎZV9šë +äIv©~Ö¹=q»‡|“'(Øs!‡«:Ÿà déB ëÛ. ,â^ƒ[Àé&F.ÿûºz »®´¹÷ÚÕ•r¼¡I‰IßC$È€‰±ôd‚=XÚ’JÆCøF[Û ¬.¥è¾Dª¼ès³£èI‡…¸®[‹$_ì›>Õ¹cÓ\^Ö”o¬áêžÕZÏëÜGœʇ[iûBìϲ§K›eÅCÁȹmÒw| Ìxï ^-šf)Ó2U.•ÂkØæ b *E©3“däë §íކݻC}·íÞÁ¸“ ÕÃ7X2 ¡­­¦ +¥! I1 –›:s‹hS”êÐu¸wõ_‚EñQÑ— k輦”‡@wœ´+{±MyO¡Äh{eF¨ ©}Æ ·G„W +n ´¯Mξ$®ÞuôÀ&·P2m]0~¿y)@¶Fݾ—ÈÜÞÓu/>-Ãè'3–÷…"hmí0ÅÄ…÷!ŒõìCRî°™1—†çHšw‚ ñíaèC,ùð·HÐ Ï«ÿÌ*èëÃ[ŒxPÁôÎ! ÛÀæ•sÄ}h¦Ü0Ï´9K½¿æ—ww¯@Ü ûÓ1+%ì Ór7P`p89xA8eŽY¦¡¾…èÆI+pš+HŸ<Úþó3?²„å{¯0¾¦ú¤Kyg«O°žs¦Á¢¼SðÆ®*qï³±µg_11×ßd´‡Â¤åˆF¦·3Úòûg¸ ø8Œºÿ ùÇáábŽ'3~W@'µœ}ËìÈóI<Ãk>ÖüÙ~ñ”M°)†æö¿p‚kå(Á|*@uIü…c¢iK¢¦É„I|‘êû;©ý½­tÛF·ñb­6 Zmy$º¡=8û+^h0x…wvQïœÄ+ü]&ë¹0ö£Áåz­W›@ëõ–÷~Ü]ý÷êÿ¤uíendstream +endobj +1142 0 obj<>/XObject<<>>>>/Annots 600 0 R>>endobj +1143 0 obj<>stream +x¥WmoÛ6þž_q@QÔEcÉ’¿Û€t]‡~h»-Þ§e(‰²ÙH¢'Jq ìÇï9J”å·uÙRÔ MÞÝsoÏ‘^4¿€f!§çW#oDÓ韓ù Ÿ!þ—’R»Þ,În@‡7‚þøåÇ«p<ñÆŽFÞœr +7iWÝ]…¬67›A0Ç¡fµß-¼’ó)»èöjê¶ìßÝÎt +½9áÂvÑmÝÜX}A¸€°]t[ã±Õcز‹n+ -þ`âˆ]ðÖ›å•ÿ°Z¦Ýt>£ebýÑ2,×ÊÐVeÙ5E;Jd*ꬺ&U˜Jd¿ýðæ+z¹ü =„Õ3ðkSú™ŽEæ‘G¢ÙvfÝIIÕZR. ÜhIt\粨D¥tA*¥®YnDCxÖ`+ŠŠ*}dÞè\n×i•™‘½¯,b™ÑÕ*K¬©­*"U$ É/2®+e’D‘P¦¢R”J¯A¹è‚1 çˆ"ìwãƒGßë"U«¶šÃó¸0f«ªxíÅ8q¨h`Í°·-„½Éæ ‹ < ¹F`q‰Ó0*¤L$¼ÐTÖ;ÓÈÝ8ãNqr¨o@‰9‚Y­K]¯Öä@Z…¬.’ëjtC¯*iSê,YQ/ðœJN‹¹&£#.×=Ð¥ÖÕ³chñ†<¯©ß躌¥ï`øðÿцÅCºø«C'zúß7)Mu´© +^ÄÒQîØ•\<4%•ê,ÓP¹"³Ë#©‘,^? vVÐÐX8Pž~í…‘ß 7­ÃXI:¥;¤Òè ¥gþ6Ûc*:BMûÛò‚Ã0Œƒ°Ü ¢;›?º³];^6³Gp˜ßcóá$ðæ£ðkæ÷êN*Æ"sjN‘™¿œ¡z{MÂÇ€™§k™ Òƒ6ðewUÜëx×È.Hð£ÞRmdiû…Üø©¦í½GeÓPZêü´­{ý縫Á±7Óô·GvO‡˜*Xδ~@{ØÖÓ‹´\výÓU墙 CŒ"KNÔþlH/ymW¬'…åX†Éèy(¢®Üy³‰ÞöÏ_8hcÕœ£Åýq¾¼È–˜W}Îm©gÓž¨+ƒÓ0¢²§ó¤R qgø5K˜ÖÕê8þ±ˆAÔl¦_*çM;­*•K.¥Dd*™ã⡺À¡Q]1!à©ÀNI÷žD\v‰.^0³µto%î_¶ã»,—‹¢fØ]‚ÜôîÆÇÙNö æŸï\¡á#ýE«RnúY; +®F@ÊüjŽ«ì°£#…ÊìœET] ÛfñZŠDü@‚BüÆøÿÕ<îÏ`“Ggº¯71îä£,EFQŠ\"Ò(qÌîvž¶„ì´ØRcÈuUêÌæ5’kñ¨t ÆnÜûêÐíl$z“Ò]dœÉãˆ-×Ã!&ÒÄ¥ŠlMR®í7ÂÙN´—ÔýMµ\Ñ ‹òý`~ÿòð=i¡~‘®J§¼q ™e‹­0VçþF–ëD¥íýAqV'ÇCØ1^ìßV™ŽDö;ó¢«ác’qÁ>—|ãyÞwç6žA-çºBÑÞ°É}Å\ ÿˆNµ¦¯^\7”÷öÓ‡Û÷_¹íÃpÙÛ?ÂÎöDÖÖ°3¢í5i@ßÒ«CYêa_زà3CµJÐúLúÁ?\sx^à…ÖgTM´ùræ¾V *ƒ±:‡VáÓ`­þ,KÍOÀÿ W3Ee§ÒÊ/\:§9FûéúX¬ÐÖ…•á¨íd#~šm{vïwÿp—šÊøJ=î¯þ6­ ½R‚–ÌZbÝtäH)eÞÙh­$³BV$b¾è7ô¹ +ŘÙd\þk<ŠÕ¨Ïkq+*ÿù[ÿù¯¶2ö¾vr’˘Ï#f}¾ŽüwxëÚ_0Aæcš.¦ÍK­yÒýTêÏhszÛÚ±®a0ųÃYh¯ží ‹–ÒðÕƒðî,V†>Õv¨Nfo67×Äéˆ5ü°¼úùêoÕˆendstream +endobj +1144 0 obj<>/XObject<<>>>>>>endobj +1145 0 obj<>stream +x­VÛnã6}ÏWL·q±–,É×ä¥È:Iá»I±Z,úHI´MG"U’²k ßRÊEq,ZÄ SœË9gÎ诳"ü‹ažÀxyu…Ìá&‹9~Oð_sX»ƒé$ “þÁ§ôlt{q écÍæq¸€´ŒEæƒ8§á8œ„ð»ì–Ã׫ϟ®Àp½ç¬r¿Ý_/¡Pò—t‡!'!ƒd†õ¤ÅàFZz¬UYªƒÈUU1YP”Š=ð×áw]Ò§C8l9vå%m¢ÁõÝç«Õ——Ù Œ‹)YÅé(‚ # +XŽZÃQ5¾ Y¨ƒi«ª¦ùª¨„Æjf•>‘€uwÄ‹S°eØÓ-±çPk±%ßpÆ^9¼Ð‡GR[BÑÓJÙŸýé´kFÑ£Rå¬Vel” 9’Ü‚®spйà¼Ó¢Ò‘”"=µV56¢¹©•4HŠ§¸ãÊlUSñKø@šàHÞò ô±;ÉʇdxêÁåãñÚbö$â YxŵچðÕ2m¡©]¥¨<Ä©( `¼RÒQn¹± ìOáSêÝsiV–Ç!é¢,áÀ¤uÚU…X½žL•¡t˜ÍäZÔî ÖXœ+ªòˆ +Ø«Ví½bzm¢ÒýÌ)„XCa  rÛ¤4CÈ*¤^+cDVzʨ#…G»¿Cm*|J[}¯…66„Tùzž~v”u‘s3ÄàÍFÍ“H/=„ÿIÂ(o²±:¯€•vÄž™fR‰ÂÑX +‚µ5Ó K8izž Íþº‘í' pÞjãðl4¯;<‹7«L·˜²768\E“sb¦Fr|ÁøÜĺ_¬¯²%¥›Ðq”LáWˆ¢K÷yQųAþ¢ØZ­·\jHäC°úHmÐ&Œª8Š"mÒ(d¤ÂŒ¼ ¥&½¨ÑCþZqìÖ +‚æ}ÄZƒá9:iÆò`‰yÝ«ê{kݯj áû泪.ùV®Yêêqó´ vË óºGñ^ø}$o%Ë›»¯”¶Iäöå€Î³F¼,»ÐÏN~kù¿ïlÀœ|z‘tf7§.¤fEˆÿ ù9#m¶»l/TcÈ©V¸ŠpùMP;“>ÇrÏÝÀào>Êãí\Âpš¬Óïüã¹›œgzû=1g38ùà:â(/4]dÍni×·šÛh…Îø\tk­*w Uö&Ïö_ Žq‚Ôà;J18¹­Ø6¾¿È_ +Ü­´]»×¿Í ’ÚsücGñ;çKUἿb©¤Õøjtú¡%G0ï› GWË4º]´¯ñ _÷c˜]$ጠñ â^«Ï-\«¼©Ð»ÝS‹Aw!˜'ÂvUBŠB%²ÐºäÆÀ]ãT8™OÂùláÑžÅá&=ûãì_è!endstream +endobj +1146 0 obj<>/XObject<<>>>>>>endobj +1147 0 obj<>stream +x½VmoÛ6þî_qÈŒÆÅbÉoµÅ4ÉV¬yY#l–} E:b#‘IÅ5Öý÷Ý‘Râ8VÛu/)RDâñøÜ=Ïsâm«=üׇɆcH‹V/êÁha4àßü5æ­Ã¤Ÿô`’9îOñÝëA’v^Ÿ{™f¢`pÀ ©ìóä}«Ý~/šb _?VN˜…‘V4Ç|ot¹€ Ët¯`N8_*a|Æødý~€ÐŒ)s’!ºR¥Nj»× åv!e +”^ÂL@i§— Tr.ñ1—ÖYÐs˜i—A®S–S.Ž^S¼±þéšÀس—‰º¤a4 ƒç:ÏõRªkHuQàî—@=ZC(Ôhí¾ «/ªÕáA¨°`Ö.yX|T\Øú«.ÁfºÌ¹/€y舆9„­o,>ßXéÒÀãã;±pi¼-{'äø±3_p]0©ªò—û‚5KJ,)3‘YU^Jn÷àÚÿŸéB—F¤È”¡q\ÌY™;.òÜFÕöÁ8”DŒY†Û\滇T!M\+$Ù]‡AÝÝÇÕ!š:ݧšës…ûk´L~?z £q'òU RIq°Ž‡:´©‘ W)o¿Ö~w0ÚØßà­Tå‡pÒ#+‰†•òQ73©øïàL¨c%·$Z +›£yãf&[ÌždA1n†©-aá0¤ nJ¥ »–¢¢è’€¼·ržcöfçQÈBs9"ÚèYÌkÓ®¬fÏÄÊŸGžs(>Ôq€ZÛ&è6cqaµîi)¢7kj|'ø˜…ìû©L¬˜±§¹àHÌ$SQE5UÃ8¯5ç)êN£Å¨5=hRËÂè…0p¬¸-…JE§« !…G‹t rØBâÞfÌ÷¨ê͸&iÍ.<ì°á¡ß¥5±1ºrÆbf©›¾ÖìÚé«ÊóùÊs +»žø݇I\µ(8h}TQï'eõ5¹w”ÏrÕ¹z:¸ú€@õó㛳£W;—§‡; "Í4t´w.ÉÅ4aÚ´ p¬ßÉTؗдµ2_¼¥!¤Dm<÷èü"ys~vÙpü»ãä烷¯Úß5¬¼†¥PÚÙÿ^ Úxî•6øµý¦^Sÿÿ#êÖ ±EQ±áW•õ´ÃvèŠ[¼uYýbðäÍ°zó;<{†s¦L3ˆï˜·ÞMlËŽHR|üWW ATë7DáJƒêaAÒsà +¬kÎ~p#ìB+NFÂû +]…𳔕¿ØË0kgùL·¨®%Ÿñº^ükVG<ÞêÓ—úýFæ9ÎðêñÛ¨Ž¯ÇßñóçñÇ'ÓêÓãÅ|:„ñþ$\®/NàÂè÷x ƒ#–2ÅèFL„wë ÝÉ/ë¼SÝ{ Ö7-¡{˜…óÒQøh2Š&ã)ªCÇzuœ´~jý +ýdendstream +endobj +1148 0 obj<>/XObject<<>>>>>>endobj +1149 0 obj<>stream +x•VkoÚHýί8Ô*¶±!@ZE«D$RµÛv[P÷CèªÆ‡ilㇶýï{glSu7ñ˜™û8÷qîø¾å¢Oocƒ‚¤Õ·û8÷톓1ý÷è“3D­Ëy˹îã óˆ4Fú‚¤û}̃ª×ã,ÒdÏ¿´ú°Ü¾=!á̇«ùÇ‹?¼óîo ,X‰†£ß_¿ž·ÿâé’§a»AHëÃJÑmÏV…R<½E(Ö´ÖÚ,à“/Ѥ¿ b]úùy ƒæ@nÐ-ƒ…Åî)k–_ox;ƒjçž?GžÀŠà<ø¹‹àΑÅR>JG&ËŸ…Ün +(gªÈ)þÌž‰ozí\ŸÕ¥µ¼‘®–ëÚ§öÀÙž™ˆýœËRp×-› ’|—B–'xRÆB(D„â1C` "U>Y§„%L­tgÆüŽ‘—/kOÅ,ohu@Ž>Ù"R§SâÜÊÚÎi%î¹ÄbÒçnð V™`âÓžEªQZSxû·cT(sŠªY¤Š5QýÃ՞͈ïá¨iµè-Žñï®}f’•ú ¥]&å¢ÇäâxÏn­˜ñðüs‘“Iâ¾6ÈìmÎ2XktÝ'*H‚DÖ¤ó7ðÂqŽªl½øÜàôí.lãÙ9Úmb›8õ!!±®Y3ÝûŽT"«³Á$Mâû‚ç„&yÕ«ß™³¥ø’‘w·]5ðÖÑ‘!ÍÑAZš W!Wº&d*æ)y'NË‚öˆäyÍ_q‘bÑË|µ’'X‹üî6Ev‚•ê½˜QmBÕ\˜½¹œî%†*÷#¢éQH5™Â’X,u¾œæ熡¤d£J¾Nö.ˆ·O¡/9"þåP¿ÕÈ"{ÀêöÃÔg‰0#‡Ê»uÉX%Æ;õÈ;LÕ«W{é ÙaƒPJk7Üî›c]œCG›ã_Àò¢ì çzRÝJ&ŒÎNËé8»xsy?sñ… +S £!«ÛRC°jkìÑ“Êæ^ÃœIód0×SXâ]aæ×p<´Ç£ ÝÕ$:h WóÖûÖ¥yOendstream +endobj +1150 0 obj<>/XObject<<>>>>>>endobj +1151 0 obj<>stream +x¥WÛnÛF}÷W Ò°HI¶%9AP$MH´QQ0P¬È•´ÉUvI+BÛH$­¦MÇ wçræ̜ᗋ1ðwL³ ]O)+/FɈ¦·3ü¼™óÏ þI+÷âönœÜœ{q};Næý¯éýˆîh±‚é¿äû£-²Él£éÙ¯V¬åsJe¥ªRu’§V”K‘Xi¥¡?ÉÖÂÔôþ×;úûÙåâóň†ã\.r6ôâEï™´"ãGéý]ô?œLùôxœÜ&×Éÿèé,«jíÏÞÐxìƒ ‡ß®è äï#¨7Ò¼ dËeÞ½<¸êŸ©Îœ!Q…{'[{U-U•÷íQ.d©+K¢¦z£,í´ªê+™Ýè¦Èi)I, Iµ¦LW•ÌpRã° —¡ºN&œ¼Ã•®)×¥P•²\êÏ­ Ï•Ï{/QyA…ÎDA ®%>µ»Nsâë,¡tµRë7óùpªôñÕû.Lˆj2õwÊñ(©¹$] ãÓÜVzt@ÄÈõé¸Úk³E‘õZ"m“P0º•ÃѳÿÁµ3úQÁ¯hp·ªU&j¥+ZiCš­9ÄT&ím¥Ü"‡·„I;Q2è.çpOÒR%eÎÆ—}Ç¢¨kN€Ý•ÓÖr—ÐÃàÊÛB5p¹[IK‘m›%íª‚˜ŒZ« +%ñˆ¢}k®ƒNò„A+Žè{ƤÒ`N®q œ<\†‡±2¿ƒü{U>ár-uÞxªÓS=öªÞ0ã𬋣҆kÎèšér‡  +¡­b&­*%Ijuc2™VÖÂG¶ñIÇVP® ø®Í–`ú¨=Pø(mÖ²³3Z×ßys§&tˆG_)Ðü#%±ºëºÅà•Ñ%'߯È1úîÍVОCþu qð-¯âbÒ©ñ3½Sži÷ª#ï‘,xjØ~ T¦¬•YcT}…± }À8`&æ?¡Ïì´,¯&«°Ï#ØA²‡“ŸFÈ,Êò¥A»åü;ÿé`âƒPf[´J™/=‘†l­3 ƒn‹,Ó ¦óÿ7šÞÇqÐA¯;‡@=ðú-S uð#ŠÂ ‹duãùEµ±êëë&T€œ,2‘+mJQÄ´‚ÆÙ |Â`5Úõa-„Á_ºÉm¥µ˜‡Kt„,*Y£qq Âb¹ªw?” ÆL‚ÈÊ˼³!ëö Æ5ÀK)˜jeÈSÀ‰3 +$9Ó]¼ƒ}Uˆ'*".‡È¶äøó¬þm,Æàá’w,7Ofɘ1¶=°ŠrOÑ'V<Ód5¶‡«£>fµá¤Î¤RÀ÷&’zˆ{Á1ÒÝlZºN‹A¥ûfˆ’ôïóÐú  +õé^;´/Žûñ±ÙŽw®3ì¾›Z$ÁtÖnâMf'Mqðk“[Q #t* *¹U «¦ÂÚÓ`‘ˆʬେË6CÍô«& +Þ€ð¹G²3!%66h±m£K;Š4TeWˆÚíª‚Ö²’¦X˂ûgðZeqÁ8É%2t(6 Œ/UÐ/5ævÀ§ƒ[zr†Ÿ´.ôÞ¹!¾N§Eà('€ø»u8¡qÕô#rñÔkk\Ÿ£ËxÈ!Ìg.£Iqq‘1'1-¸úÛ=öQU**ŸçR9ýêAÅ[BBïO”[ +Œ¯¬ Šå¾Q¡õ– +…E”×Õ ó°tŽ§øHœ_Óôn”¸ï«O¯Þ¿~EþÌ_!otÖ”€×í$á0^Î&ø <~ÑßX\=,‹ÕÚÒ‡Æ-¨7³›d6ãóG§7láÇÅÅÏÿ=yendstream +endobj +1152 0 obj<>/XObject<<>>>>>>endobj +1153 0 obj<>stream +xµWÛnã6}÷W 6}p€XÇñ¥@€zÛðCÐíÚ/4EÙÜȤ—¤âU¿¾3ºY–“:›K‚1DÎõÌ9£ïü aÔ‡Ë!ðM'ðׇÁx„ÿ÷ñψ;Ÿÿ&€ ,b¼1ã?àé €ï²Ô­¡ø1â{*ˆòo~"—¾<5Òeþ–mîi],áY Ò‰Íuj…+”בPÐÃk_8îÇnK-h%Œ¹¶)çBDç‹ozaà1„¦g›Æ±äR(‡¾=ï¤ZJ¡ãçMœÞ:Æ(r ëQrqm3‹9ô(ý×]‹$±O„ŹNó\àÕ™íM¼_fVX+µ¢þ¾Ñ¨3€0,Õë©‹µª$a­xÔͱ€Ðñ"?Ñ+©ŠÇÕÍnàLÁR_3µBì)ÁL’Ck–mìXæÁÌÒ;H´~°ÈÏ¥ýµrWB»×xƒ²NåIÎeO4q?¯nâ‹M¤Jþ tâÔÜÇÒXw¿eÖ¾˜v¥ó&>Q©=V_]©½‰S{yjTÂ6Ägïgôýf¨A… £zëpDYBCúr­¬Î9øp˜ÐX1†3•ÏŽ•0E8U8NÅù«j6!'þF¿NÑî~ä»8‚JX`7Öý,S,A?ãŽr½DiBž¨[Aš’ LcþšNØR? +Tš p"iY’ ­² ªË# +1…ý€DÑŒ‚µSÞg[MVÓqîÏd3Dª°Øa´ÝÊÖÑ=Ìj%Ž)¥3©Vét™äÝjmkôfë,`µ¡‚µõ +‡“JÚÿ…¡wå]z#¯ïÁ\'ÌHÛ³[Á%Š, ‚b¹J #œ*F®AD\^“7]À +‹ÈR#öTMÕ®X›è¸ sÄ€[3› þÐ&qnDóØ6TŸ¥Æ#Ñû™!†Z­Ø¡¤²œH°«Ekê<Õ†áBCý.Üâ!ò4ƒ ‹„÷Ns'<µNoä¿ÅIRŸ<ZNÈî{•éÔ´Ü–¨Üà +b/͘§Ei Ö¸µ¶{ŸKÁ¦˜…‚¸³.Ÿ6„*ì$FŸ†À%'Pl¥¨µ\ÊÍV£c³óº"®Ë†Ö»Z-hgÕÕru:“¸pá®ôé·»îÙÝy$@è…bŽÉÄ&~8„ùíìSûvû;ü®·™‘«µƒ».¿;‡p2öðcróTÁ­äF©XäÅó@ žU<0ż¿’ _íX"::täöËôöŽM³G7¦¨¨˜¹ä9z±ñŠ­5­}²õ=' ,KNz5!Á¦Öÿáà6z¹™_fói¾5—Dâ…àLÖÐö|Wz›éH²äž2BI>i¿ !Sær$?W‘—›©+bpœœÝÞjÕÅÿmUmñ¹·,·K¹¢o,Á™ ØØâUí4ŠëÒœ(6R1òa9{yüÙ¹80ó¡%8ƒi¹*ξ3.7›pˆo¿ãKN® +5œOo?Oá‹Ñßw(J<%¨å¯W]èúøFuKõ„…°ŽDg±ÆO ¥9É Fo4ã›4^Äþ\tþîü&„ê7endstream +endobj +1154 0 obj<>/XObject<<>>>>>>endobj +1155 0 obj<>stream +xµWÛNãH}ç+Jbµb¤‰'! ûÆÌ,Ú±›ìå uìŽÓƒíöô…Lþ~Nµí†VÊp ÈÝ]uêTÕéò׃˜øŽi:¤Ñ„’â` h8™âs<ãÏ!~¤UX8>‰fÝçý³ÐbK“þI VZ$G‡ï_Ô‹8¹Hr©’ˆD’h_:²~µR‰’ø7|õ½5ý\-ûV&Þ(·íW¢¸Ù¨r©Ê4²úsF~õÊ*'kkôÔÜ/çóÓ`Óè\ZXŒbz‹Q#ÓÆæKF}©¾=k³ËCêj&öÄC×Ü^xxÖèžyÐn- ˆÝ]s{ááY£{æáæÒZ¥K*D)2Y #:eÙ-¡–m†X÷ëJX»Ñ&};®ÃXÕí4ùÓ¦|±ÇŸ˜ëúÔÜ®ÇØŽ©kYÞ­!p ¦î-¶^I 2é«JG+mèi–ÒhKÿ»BZU"'úúÈ—‰.8Óä4y+w»¯ß½æÄ4òÁèuÅöDŽ6zÿ­Y×ÒäÌöf¥Œu7œ¡®§F¡/ûµÜêI££?ÁCS*?Ár{s}íz ñ]¦[´{´ÕVõ>píÚ÷£§ÕÕ?S×óAo8á1àœDn5‰4EÓ‰ÎÊU)I¬nt Ýßþõ +š%“ŽŒJI¯H”¥Þª2£Tûe.©2º¨œåîk ECvÚd£fa8‰Æ¼p©7ëšv«½¡¹(–‚~e\”è²”‰cnm´ÏÖõQUyÛÊn-ÂIÞ¼R™g)Á˜Ãà!m? >ûg'O&FãÚ{G“ˆ>«B¹ ¡#s6kÿÖc­…i¥/ -LA~–Ý*DáÉ°°™KaçNšp½¨Ik]I–¨äƒ+ï½ÃZcÁþÆÏ1#"ƒ5îÚyË·¤K|ˆ;¡rÁÉ` d>«ÒƒPIƒÁ¤ÝZ'‹÷¨·”²`Ú€ÛT»³¦>‡è1’&Ò8¡Ø_¥quÂ]Dgðg}²Æ£ÆÞ À/¿'ÄÝH}@õÌ-@’A"ÃD ²:>wXÔŒÒ6χ.Ø›Ks§üÝ(÷¢Lé*÷YX8},ü:õ˜=;nšÐ"Z¬Á(~–ya² +ÍÑâ¦À¥Ì_ÎçµýÓ Ê@ÀŒÀ†Œþ¾<ÿÙ.SmêBïŸ%Mûõ¦Ñ,¦ÑI]M×óÃè{_ka½w<¬gõ‚+PæÀ`™!$<ÕXÐ_çŸB¶‚3•¼¥vØž¢sóLct_hœËd¤²$˜ ]Ñ ãrŽH6kò|É^Q³¸ ŽÊÐwUu+eIËíN蜽nÁ¥Šß%|®SöPڜ֎·‡!±† Mm´¤êrX)”0š—ˬîÎL‰¢.ê+œK_ã+´À™BDŒÞÊ´éöÇÄ·óCâÛÌ|¬›Ôq}5òGWÈwJR'-1ßNÜrç"„v€n{0´ÝBÒ¨ÁÀ½Îä«¢Ë+ŸQP8]"§¬d ŸK¦ÚBi¹‹$?¤åÙãFiD8kj/Í¢ÙɈ&£I­ÆóÓ‹§teô¨+}Ò‰çI(àå„õb~ ¨7âM2=zV&ÇÓq4Ìð≓ ü}qðçÁw¶æendstream +endobj +1156 0 obj<>/XObject<<>>>>>>endobj +1157 0 obj<>stream +xmQMÓ0¼çWÌq‘Ú§UŽÝ$­ +W¯ýšxIìâþ=Ïí"¤Šb[ÉŒçÍÌÏB âG ­±i æ¢*+4Õ†×m×òZóë §â¾/Þ~|Ñ¢?1¥éz †Wzu'DÙ–xpVM)gßôÏŒßB0,ã×u[6̸ëGÂb쓱áwˆ4¯GïÒ0òNHàN×ãA΄Gò£x_LTã +Ç) ƒ|š»Äx’‘±w:MVVguÖ›²Îšò|öî쌄½QÞwŠør|€’Ó0Ê On!Í :0áb4!œùÖc# þ&Åóý»æ;qKÀ¡¥ªÝ,͆|(ñõðéû‹é9O!M&ðÏÁ“ŒüE'uõÃÔœ‡Ô³±&Ä,ÍS*bÎÇ'k˜7›_ôÚðUˆsà¡`).Îÿ(ot/ˆ†Ûí6UsËèq·¿ßáèÝ3©ˆ÷N¥™Ã½úÍÌõ_º­¹pýß·í¶l›Žëf@ÓfÞ‡¾ø\ü±‰¼³endstream +endobj +1158 0 obj<>/XObject<<>>>>/Annots 609 0 R>>endobj +1159 0 obj<>stream +x¥WÛnÛF}×W òR°h‘ººo¾ÄÑÄqb¥éƒbE®ÄMH.»¤¬èï{f–ÔÍ1Ð$"‹Ú™³gÎ ÿí„ÔÇ¿& Æç~ÐÇ/üòÇÇ?:Ó0ˆh4SÊ) ð×?eôЉanW£it¸º÷œÓ œç{¶ðB£ÑŸÃéŸþ;M‹N4ƒ û|Âl<æ-òÄ.ãi0¤Áù0`u ƒqóÄ«ûÏXŽ±Ëï•Õ½g¬ŽÏînõrÖ9»9§¨O³PO¦4K üw¯RUÖÚQôÆ®©¶te‹…Y®õƒÊç +)D¤*R'³/>õ¢!èÞ;“+·¡k›+S°Míl–iÇ»Øa8ñ{ƒ!ìaa@÷N;ýïÊT¦ÖôQ«ÄKo2¤0lL¢ ҇ɥ^X„±±+ŠáÀ+ 0ņà´NME±Oà”ÊL«JS®¾jª8ú:UµØ*<Ä6ÇYµšgšÖ¦Nù@Éþi®*7é…îÂdº¢J»'ã ÜUù<`+REB©ÇJr"ÿ¢’ܦb0KUUkëÒEì6emlÁœÍR]áÄzmviâêȳ÷ 8%>KM²ãÄnIg7 ´`Ömc{ìŽOw ïew‹p ¥ZjɤNõ¡Ô ºôz~óáÎöè.Ù…¿7ï?ÏÞƒ `BÌilpL!èÊ]ªøëÒÙU‘øã&¡«ýd;ú¡ÏŪN­û­¢;[ëßýî]B3¦BbãU®‹šð]ñÏM¡|„w­žLEa œòjÇíûë+’¸_1’!õZ4ûîf-Óo.>¼BÜjýÁV­Jí*àÖæ†-´ÐÛ¦3 ¦>¿°øTŒœ¥tÆ:®?§=“¹îR•à²Ü‰d«RÍMfjÃô±¤âZ +“>›"±k@3£!då°6ÚU*=v‘úãI{d³$èŸÒÜ@N%®&W€mUÄá.Ll Ò-QP„ª:òß«êMæ9µÃ1ñ:‘Ù%'½p6?².¶‰D}Ètœ\fÅÃêj£xíªÎLÁ¤À¼ÖeE…F…V¬Fæ(Ýý2÷²”èV˜²³¤©zBæ„âýÊÂà-X¸ªÛ 29´†‰Æ[8 œväv°˜y +·µ§…‘œ^X-ËìLÙ%ÑäÅ%/g=«ö.}º»ýûŸÛ»‡ÙÅÛ·AZçÙáÆm5¾ …G!BUèRcmU?ÁWçP¾Ù†æ^€AƒXk–ê€. +“¥µ ¨ZáÐBÔøE9P'(äòh÷6z©ô™¶gØãÅpKUjWY"×Å! bDÐõ{Ñ =äˆxÏØzvÀ5Æèì&nT¨‡råaÇec4 ÓU&} qaž“b„¬E4‡ø$~Dö[Fží¨Ï l 3éa‚–KÅË ?ãq«éW_8•«8ÅÐAR˜»b Cµ§Í‹©´k¦YöáQ9p€qWž£Ñ._(HÀDð]ú x]+“áíc§Ìgi­œž+à)é:yCƒq§Þ„ZzµŽÉ¤åìzUêØ`ž“ o »Ì×8j#'AéTÍË®‰@– ×?+a€ˆuéç5جM–œñžG™š0'd ¾G´±þ2 +rmg7Ó½×ÀQ0Œ¸ûþÀ[êÑô{ôf:œ ƒÉxêo|<åè^Ï::ÿ,nÞendstream +endobj +1160 0 obj<>/XObject<<>>>>/Annots 656 0 R>>endobj +1161 0 obj<>stream +x•WKsÚH¾ûWôek‰+$a 6•ÚrÞ9¬í¹lÅ9 ÒJôŠ4˜xý~Ý£A€¬íT€V¿ß­ï'>ñϧ8 0¢¤8{cŠ¦3oB“iŒßþ7š–Œ)øüñéýI8 ½3Š‚ H +šŒg^ÜA9]ŸìÃÀž…ž¿Ýƒ'Þt+Føc<+(à¯Hø^Dgá4ðeÄ (({ °ÃMfgxXPÄê,Ð㦑é§ðg"PŒC:ó™Q€b¨3 Ç…cj +°Ã…3VT±PŒÎz…¡=. Å‹˜IBv¸`ƱCd$²@‹g=_ @ #ËÇ Øáü™upÂj-Ðã¦\ ]´}z\ì÷ú|z\`·2èq~lù8ƒ¾=nÌvþùìpH.'~ÆÜò›1â +/‘†DŒF½šŸŒÞÍÈi¾DDˆò”æ©ù˜æÉÀ¼Ð£×U¹ÌV›&+WdÖš®U±Pô¦*TV2Ò4UžëæÙü+ÄM`°7”Ò›§ƒ9x–YÓj® LI£•aqŠ¶UóY¡Wo^SÖ’©hS¦,ªLEg­UhƒGTêD·­jîXR[,¼öyô‘¶Yž³c¢¢x2(+CÊ]Ô†…6z¨Ô9ÛÍŽì ]kô¸‚æµ¾#…ßE…³VàOõ÷2:¿£¤º] +Å¢çp 4+ˆXgÊÒõöÔj¥Y‘ Ì°zô®j ¡¼Õe¦ËD?¿g£ºÕ´Ðº¤<+¿ÁŒmfÖB¤³Qù.”ê6i²ÚdUéu ¸l‘ì(B¬JÒ?TQ皘bôcM7pæÛÇ.ŸZÂ<(’´Ÿ«?ëÌ¥œG´|^åÕBå_:å2¼ð˜ð÷‚^©6K¨Õ ‚‰/Ã"[¡¼PvCÇ^j³È*TJéô²3õÎ ®.ß_Û丹ÒVMµ©f½8ÿtññüÐ —ŽŽ(ZƒäsçÏVS»®6yÊá銈RÛ\¿y• 9…Bõ7´hª-\?Ô# Epè.<Íõ­–šfW£‰p¡šx#@}Ýè¥n¸ ­pçضáì);kþlßÒca»Ü¸ <‹V'æn—Wº´þNãa‡})ðͳDŽÁ19ƒXÒ!ß/-B+5wµAjÕ¶(‚ÅËÍŽið}“5ºÐ¥±ÅÍ%}(ùáÄt"{Î4øGÆjS×Uc\©äÕª*Õ]6{®Ž§éÞÊÀÃHl :ÉNÝTË,×퟉(GÌÚ9ƒ¿ß.nnœ@›CI¿Ì“µˆ'“Xó{KëªÐ”"C lÄTF+Y¢®Û2#âû*·ãeÁÃ{SrÆ•y‚/i“ÝîÆÊm¼Iº^³þ²Iûþ2lÙ½mkdK8E+]êóÐ*°sÛ–cžK$Ž{ÙziÖ•D«Ñ9–)VÃéé›ËëÓSI +o;^qŸ13EòÌ(”ýaB.ï}Kœ³òÌKŠôPÀO2úboI‹Zq¨+[¬¸½‹a/Ľ­‡J¶r¿ôF›¶Éðµ|œŒòl1rž‹°>‘8=RªÊüιæ§'Ùb‚i,ÙV +ìþ–)J‹ãÀ…âg»â…M€D‚›Ž÷èAÛÙùÙõ‘]¢»‘òˆhàÆÁ\a‘JÓ‰9’~/ +euD!7ZIµß\¤ÆÑx|DÕ·çaÜî¬î£ã +·>"Þd8y$ËXN°¢q•TKª«¬4r â€[ãjø§‹=ÝÔ§_Kr™¢þ»KïpCwê¼}`òË.„ХZä:µG—Üz©6*Ë[”Ï–û'åÊÚçXX³x"¾ï\r‰Ø;7ß^¼þôÏÕüãå…·6…=Fwô.9ÉFï’îàÆÞÔ'w±ÞQÜ5ÓŽÀÇËÞtR„÷Ùû×ç½:§«¦úŠÑˆC<Ùð“ °‰C?‹ë4¤aàŒOŸ~ÆóëhMñNîhÆBßÎOþ>ù²Y Lendstream +endobj +1162 0 obj<>/XObject<<>>>>/Annots 661 0 R>>endobj +1163 0 obj<>stream +xWÛnÛF}÷W Ü•‹ºX–ä¾ÙNÓ¦ˆ“4Qчº(VäÊbBî*»KËê×÷Ì^taä¤(’8æeçrfæÌáç“õñg@“!]Œ)¯OúYwøÇ€¼ÿùd4fC÷ÇÙ”j]N³~¼ªè¿O—WÙφ“ì2^ð£½Ëš./³«½gþØô&GÓ L ñÏHZx{ƒ«É—nf'½—# h¶àXÇÓ Í +jŸfyg¶”d¥y”†êÆ:²Íj¥£B×¢TTé­, U ³ÙGCŠÞXçO%þWx¼tÈ.…‘áfßî"6FmVtî‡ãI´•Žø‡ÝÁà í˜æ’ÂŒ!ÕÂ:D;7zÀ AjSà—…6ôG© +ܦ¼*¥rä4È… çcšépl}Ú:|q›Ñ»J ++æ¶p=> +SêÆÒéÖÚ|¢öYª„’75<Wj…òª)dAëÒ-q°´T”Ö™rÞø爬å°N”•ÍŽa4g£g`ê§ÙàŠº—C@][ú ê¹@ “´¤´#½àåº^UÉ—üÿ.\½ £›ÕbµâlæHOJµEïÍ,¼àëÞŠüwU>¥§÷Ÿ+Ò5RTÕ†>7%Üy¿%Ã^0òiUq+á¯@gpsÙ•ÈåýÙ9mt÷šª8Þû<œ(ó@Ø­ˆDQôÏèðœGÎÖó,×jA+aD HB·” +•©C JŽ,ãqú"4ÿ5[¶§dݦ’$ò\7Ê¥¢]Ñ“´@Kw/F¡bƒa6Êè6™¹ù²T’f†ë:÷³ô«.{ºõ}jcFÃ~°»/DÁÏv oà‡±/>ê8ï ÆG(‡ˆm‘n¹¥p|¿±¡$¢Aw+çkĦ%™»ï瘂¥àšá”¹?C)[Àó„„ö “•Ñ«]c€§Á›ó0ðÿIé5,r€§·èΆ+ÉN +±ÿg0¿Öbò +ô4Τó¹ƒAëÖOBC-güÚ€!Ñ“u£8aØ8§’vï±Á­VÎ誒&£³GÔ*݆è6‰*­Œ|džLbPµ)ÿÄ)Э‹®c¹yõö)¾X]·ðü›‚q\Ǽû€áá^A1¥Eš:=äºôÂ$ÇBÛl†ùð°mêëËßr™=@Ôžˆkkéêik ÐL0ý"U.ÏQ‘Ä·Ûw+P˜`TR-ë9®ô¢åY¤,æ2È„JÞ9‘ÁVÚZÎõ™’Ã3RsK0ó…W:,œmÝ·°[žA©¼ñIbÜëm>ï^ÜbêµA<C¶-èNÌh\«Â{ùÀ¬¿Éè:ÎÌœÓR¯óh°Í7̯ÑdÂ8”‰.ДX@?² ¬òî.î0†± ¢§"Åç›ÏïAî}ØáÆ¡×BÝñxIðývÐèYßw06½]mØÛnëïÍ XÕ+Âi—wîÏxn7Ä (Ö¶Ù%B°¤v#Øàè^LêàYù°ƒ#׈ݮ´*xpüÊÚbã6+Ðo+_`ÒaŠžtyïhj€yÙøñ7Ò  2©*‚AùXF¥Áæº{@)h×/Ù–QÏ{#àoJi³û³ᡘú + I(\\…]r€± ÊB†Öbãy$Æsœ¾è2tK#ª¸%µÊèF{µ³-4Êú<ðÞypXÐ|ƒÁUÅÑ2ÿ7‰xúVuÑ9ÝEµ9Ý i×vG“òLÞ8lwÞ}Ü{Å‚j\zíºW@W‚±q;mJ“u¨*ßDã»*4­ŠÝâãwŒä%$ Eh¥.PW®íž³¯`X‹ ÄÚ6hlœ½Tà¸ö%ª6GMã±7?Ð0š 0IÔ•ü]é…Ì £Xò[¯hÀØÂwGEMhÏÄHfÈ_^È/JßN®˜R„±f¼Öž#Wߢ‡ïÇ"|1Ý-åÀ_lûÉòü¬ÅUŸƒp¡¡Û–úÁÀeúæ¡Çrµ>̶ƒïÂ(€S…§6óƒaKé¥XirÇùX·BŽ£¨äú€®°ÐÑ ‘ø™ËXŠ(HjÁ’Þ A¯KÕ<Ñ_/Åó|ÀÜ©ŒÖî»vf½Æšž— +¿HÙthùÐ-¨WÈÇžj@tÝ»ûivòÛÉ¿aÛ"Wendstream +endobj +1164 0 obj<>/XObject<<>>>>/Annots 666 0 R>>endobj +1165 0 obj<>stream +x¥WkoÛFüî_±uRD,J¤dIvÚqR·)š¤UE]'ò$]BÞ)<Ò²úë;{½œŠÀvÈ{ìîìììòãIJ}üKiœÑ`DyuÒOúxÿRþõî~Cçé(™PE£Q2 +%ݸ¥Av‘Œi8c[†ŸZÒüd0œðc6I85pÇüÛÆ*ŽŽÃ^·º÷\Ñ0&{«ìMšõ“ôØäÕô¤w=¤4¥é!&cš.’>MóÎt)ééô=öà¼ÛÓéÉ&ï­„µë¯ÄÓ’º©7´VeI¥² 58]‰|©´$-*‰¥fI‚NŸ’X­¤.dqFk£Ÿ4´wKîbSók¾†ß²•>uÓA’Á·Ž ÝbÅ.%~ ]6´4¸¼PµÌSoº65É{Q­J¾sß…‚žfµÚ<Ù¶,‚YýŸƒÜsÄG[ª*{qºðPv³a2d‡½Ç—÷—çýsü¤acFnc'x÷·VùéàšÎe¯w=Žø²7Sº7¥ ["îp)±¡ç3s'ÏB(YÌקï‡;” M3À¤7TH›×jÕ(¤Âåk9‰y©í©D>%¬¬ðüÂT«¶‘uâ]Ž÷ ÚÚÞƵ³+fÖ”8^n¨jAøÀ¦ÞÈæêÕÛoßÌ÷ÌScxÓ{:üÀÛ S ¥šâÿ ÕWâÅ‘lñÔŒ âQÍ„çŸ6 J37 ­þñi&a÷(ÕÔpýȨÈsÓêÆ¡ârãiðƬá±ðU‘›º–vet¡ô‚~ÓêžÂ10Ò"L©)¯¥h¸@8N-ï²\‘²…_tKÞÝx);ò‡ûRnt¸Ø&¿]£„º´YkÂËF‰r[+.°­O±*gØ”) 꺵á6gõPëõ®Ï·â²-a[ͼ€Üv&·O:uwTÉMUq¥»do—²–Ûz‹Ú…*ðH×Æ4øÖñmmRWP· +U2xP%˜º—Â5Ûýl}=8Ùq¹Ρ žØv{Ò¾{õ’͵\Ç­[äöBjY3Žò:¯MåÒøÛîŠÏó*iÌF–%Y?…rŒ“ÉÀéêO¨+w]àÊA‘ª*Y(xQn<²1;\í£¤?:gz-t+JT´£'c§¾‡ŒŠ´A|•l–¦ˆXÉ­º%ä…aùÜ=GPDò ƒ¿+]˜5°žÒ//_ìJ§7²¾“5ÁK±õ)úD„°Qh ¨ÍõRåK‡B¼RÙ#[¡,£”¸“»c<)Ô)rïÊ5ª|)ôBú×±¢ÎhcÚ:îz`ì®-9ù3ô1äJ­ÐbÛA°xÿ¸Uìî.»aÁÎ#ö=gxŽ‚Sš)®¤Ð勳SÍdm#G÷Âq Ú2¤dÚFKQ/°\Ô¯æ@~* EªD£„`Û|ydÓCfúô¾;ù[‹:ÿoî]_PŠ^:_oYämš%Ã$Kèô­î"Òîu¹9¥¬ln¼È”µšž{uvYÝŸ|P Ìà)cÁ‡ÚÜvXsXýÁ}UnŸÒZlh*Ûƒ‹Ö2—­Âô‘µ²tÒ/Ccq=é}I¯Xé´”° F¢p³põ';`5jàÒ¹$‰ÐƒÕOzŠèPnèDÈÞç¥ãŒ å‹”Ñ6hºÊ¹Òsépíå ­ÁïÖzq°íj…¢x†¸ðzëPŸ«E ­ ™CØîþ]¥C¢(<¿üÄr¸-ö 3`Ò¼a7Äî(è ö¢ªuB§Ûi“ŸZhÉèBRòì ¨¡t@Œknj ªáüÜͲèj’ãYáJ2e€ *>αzz'‹¡S#ÌÂ?+ÝÞ“Ý`*¨‚º÷ýLÉ-+ Ÿ.J3å_Ñp$ 9=¢o’$©%ÏO,(¨”•¨!˜è,V¾{xätú–z­­{–S.v^ï´Y©» ŸC]K»á•º¯éë6tÑX×Ø3ÀçEÑqÕ>/XObject<<>>>>>>endobj +1167 0 obj<>stream +x­WÛnÛF}÷WLf +‹ºØ–äha+q!ÝXQ@/+r)mLr™]ÒŠþ¾gvI™bœ4É /;3gÎ93ü|4¤~i2¢³1EÙÑ ÐùÙ4Óùt‚ŸGøk$%G׋£þÍ9 ‡´HøÙñtB‹˜ðü`@‹(xØȜʤÊJC2•Qi©ÔôI+=J•ÌK¾$(Ö™Pù)=¨<Ö[K…ÑYçmHä$¢HWxVä1ÂÚ­6ñëŧ£õ†gáqƒr#JRü¦zR©\Ëø ˜ÒÝ‹l%Hęʕ-(Õ“ÜX*”á)2ª«»Ó7Âv‚­Ë爖´¯Ì¿‹²Ÿ¤Y¾¦¬²%­$¡Zi×ÿþæ Ñ…äðÚV¥)%B¥¤®ª\˜C¯µAÕ®‘|Ò07¸8ÌÊ n6ÏÙ®Ò˜3°²Á[% ²¤û×P¢Ë¾ÌZ)Q"o¾Ó¿;\˃¾,£¾{Ýõâ™ Wjv§.+£Ê¨rÒ«sò)=4n4Ϲqœ»•Ö2 +rG:qÐ|·M‚¹$ð'G¨Èì +‡!¿Í„A•¥Ê×|L§˜}±uLD•K* ·¨ÆËÃùâ-ß&¡†Dç=Dé%)ªÕ¦­*b÷:ªpzŠwâÉ/ ‡¡3®Ál¹‘Àû…Ç»‘X³¹Çè9˜&¿Lä•H]vžšó½Q‰Š<ífhúZZÊd^y~¾€š×å"“§´ªJ¨•r?ÚÈèÑ5k¥¿ÐñÌaéÌ Ý +T§«Z=µàß:‘‡Ç4ç\@ÐHXœøu›DÜÁ— Ä›ð”C}ïŸÔ.¡ZîuCª}6œ ++úVozl`? 6öQ`ÔáÀ¬Í”=4’2öBYi¸‹£¡×ˆmº±»®¼KÙª(Òݳý¸d'Tc/[6zoØ2^¾vïßD5³{“p:ÄÏÓpÊj_ŽÆ“ÚH.iˆ‰‘À ¦áðN~Q[ùp^„Ì¢ –pgô*•k=¦wÆhãLøY:=½Ñó §ÏA©œ©©ò(­bø:¼:ÁÿðCæqc#­–]ÑIûA÷î2(wÁͽ*Ä;&Ãa å¦ÎJ…Ìc‡tc¤¼¾Ë'³Ê›‘¶ ¸f–Âm²;[‰?ÄVç'`£87b[G{Á)ã4ëŠm•¸àaáQå©s4¼V(.¯ÈöòÊÄ#ÌÏ׆®óHȪ…£a +?bàJ“`¶§»îõ>¥n-û 5üƒOä¾py¸á½hæ +=©bë¯5 +Xš2FÌV2"ƈt.χ…tkšèüÐv£Ó:ozsj `33?U(ÈÕj+ì6| i¡MU®>W’>ò3K¿ø¬©}9òs¬ÅìÆÕõ{ÃÁEÃε›¿˜ÅÇÿ"F36‚7ŠtžHžƒ¨–k¨ 3 á™îñÌ“ÛmPÞáœ{rÙÎÖEê´Ñæ´‚Yâô$UºæˆÁÉsˆĸäNÆŽQ|ñY/‡³ñ°/¬—6ŽÓ–wK—²§i£¬ƒ#)Á®çÊmn«ÒÊ”· ¸oµ¯Ø2á:D¡©˜bì€*AlAv#ÐÓeçw³W¸Ì]¿aܽùŸè4Õ[®=‚óppÞÉ:!ÌØHa”Ë’àƒµšgßxŒ‡ha4{³\>Ìß¿_,—¿û‡žIãé~¥~gjpSdn ¾ÃÐc¥­ x^&³( N¥k£«âUû™«·ìFÎ’°.ðO¨N½ÜE†¯6€q%bR±À‘oº½ÕÑšz†=N¬%ÌÛíî\ÉÅ÷ÑЫ3‰ù¤eŠ "5V¶ñL”¼Gl‘÷)ÈÖmìæh 3K¬ñÉðò´9¿ðßÖäÅ´µ}:_åÑႦzíJM–Á cr0¼¼Æ\Ã/ß´Æ•Z™;„x'Ù#I¶Š"à‘T˜nm S°Xï\LÏ\nq +n>X~# 6'®sɶ²k¬OéxÁíü¡Né.ÅÎ /yB²UZrÕØžÝI¦´>—´©½‚{ƒ4î#š +Ô´ïF{Q]0+t„Oë ¦…Ï=Õ–š¿ˆ†‡¶MÀŸqXžû·þúóÃíÇ»ÂðôŠÑx†¢ùEdEú£˜§µp9|‚ÏC&‘?íY6[u”¨J,­¥þµ‘±ÖÐ5؈~kWX#v ÷a4Vk1³ûV¹ñaþwfLëñ7Ä·öôòŒ..Ç~jÜ_ý}}ÅkÐ' Œ„¨Â²^ºõî Çø,ŸžQo2ÂwwüÈöt>9'ã)¾ôñÂdÄç¼[ýsôòß dendstream +endobj +1168 0 obj<>/XObject<<>>>>/Annots 669 0 R>>endobj +1169 0 obj<>stream +xWmO9þž_1ªZ5•`“MÒ¼ôˉpE¡©ÐIH•w×!.»ëtí%äßß3¶—lÒR•ªÇö¼<3óÌøG'¦>þÅ4ÐpLiÑéGXNfшFÓ >ð¿’´ä å_1ÿºþ§3žDSŠû}ü.(¢aXåtÓi¯±;žíï¶ÖØ…¦Yûnk]Ð`ð>zßÚm¯±;?[ÁzÛkìNãhÒ¾ÛZcw6‹âönk]Ð0~[»Þùˆâ˜Kk<Ð"sôi‘vi7R–ô(+£tiºhrD‹ù?$ÊŒìJÒ§³“SJ*Q¦+Ju&é®[j €S]²Ìdv÷.¢Nê2ßÒFlÉêw‹ï>ÇÃh…ÝTW8o¼u¥“\¤ ÎAŒ±ÁbMºR÷ª9eºª¤›‹S|‡#…~ô'ÂFš+YZZVºà‹ÊÂ!¶¿’ßµ*#>Ð;0‡–]lu!Ò•*!¿ª%‘¦ºfÙPlW°^®k++’ +ª*Ø& 1òIá<Žá¯qS£à[Ð×à}ƒ1’8Ü®öT1FĶ9ǃÅt/=F$‰{I¯Úþ‘iXüÞÐWÝ®„}khSéòþ¯p¹±vÁþ·Â•ŠÚÈŒܾœþíü^‰GUÞ“ S++àþ¯èbI[]“@´kÃW ÅGfðsdD–áð6i¥ÖÖŸkíR!íJ#?5¥•V6qCN1Ä.r]ç©2S)Ÿ°ð””¥•ðñÚèêAf.V­Œ8+Mұɣ¬@˜¼-[c}æòe¸ÐÜn;É‘)¥°êQ¢ÔÎag¥ƒ)äò·RȤB”µÈq8Ø-·0ÙÎK¸4½òЕP¾u:[&_Š ðÕp‘1v"8H¬fÛÜ IýB€€™"Y c6-©]z¤Ô(ÁÑßE4 °MB|EI2S(oªv¹ ðÕsì[Új«re·G€ãá°œwžµ5”¢ŽBZ<—öãÅÕ ¹½ ÊIùöõ[ëµã)N$À]—Tä‹´…bSçßøök +œP ¦…¾Á‡&pJ4„÷¤M{®†,÷ŒèFÃ̵ÔëüÐ-¢J®uexœœe +«0¹™:)Á…0ê=O3”Hû™¤ç +¤èäúJ=œ+ŠPÎd $ø[60 :WƒlöÒ+—†Â=F[EWšM™äîã ù‚m(×mâØ·ƒ@ƒÂ¢šÖ`lDŽ +©dUâH8“ÝpùÄ‘ìиÙýRDUñ€"roN»ñ­µŸ·XÃKR7Yò“#]7®‚ê˜î 34*‰ãÛuÎ^X—êég0Ò_.¥Ì84m39[Ž¸´w‰ÏÂ9ë ’ÀdÌ„fpÒKŸ_Ñ_Òì`4> YæŸÀñ¬ +›7B 1T#ƒŒA|ø3#÷¡gUÌâ8Ý…âˆPÐ-f=½1àJá èFôjݬ¿bVtái©ee›¤€‘øΨýgcuO]ºh×Þ.UZi£—ÖE›C^ Ÿd;G1+n|ü>’š"oš,ÞwÏWy¬'ß[6¹ ØÒ™ÊÜ´ß;ßoáxî5p<–ÅÃi4 i<Á2ëÞœ\~>/XObject<<>>>>/Annots 674 0 R>>endobj +1171 0 obj<>stream +x¥XÛrÛ8}÷Wô›4[6e],ÉyÙÊÅÞumìd"e2»¥ˆ„$ŒI@C–õ÷{ºAR“šš©Iʲ%€ÝÓ§O7ôûÅ®ñH³§g×Ñ5>á—!¿|ù×Åh8ŽF4M¢kÊh2ãwx—Òâbx3æ4œO¢ ¯ŽÇÍ;^…!Î&Ñ”&ó?‡Ÿ\ÓæâÝòbp?¡á–ö<Ïh™ˆãkZÆý¥£8תÐärÒ‰)è§åoxæ䑾-bg7fí]–jk}:º’²ÒTzMÅNÓÓ’:Ñ9}v©‰t‹.¿ ÞÔ6 ¶ØW¤_u×æagâÏŸ_]Ó•€²LúÆÆi™è„¦Øµ­Ë"˜˜6Ö­+xÃ7—?ûBÆÙŽ“ˆ–; xŒ'u)9‹ž–O0L€{`¯/M¡Ö)l ±Ûn\¦Œ Œ–rÑè¾ÌZ~I*-v®ÜîÃoÆ&þoo:¡ÅÊÒZð:ƒGL¦Dn;ç„l\òA&Mù(t. ŠÈ„‰,ǪNc®·Æù‘žõ1©ïŽ¯ž×­yYs:9Ù…Îö)¨ä#ú·;hÐàR–7&…ƒMî2y{"‰„”—–vj¿7é‘´8 ’³ÖA9'ýŒ³§ X7,mê’b—eÎF*É:y‡Õïž<k‹ìèA’ö¿hk´-¨p´)øÄÅÁ±íV|ÿ`ŽŠ¤wâ‹ß¬Vâiµ2vÓ «æ<„–ì`m¬B¡Ô¹g!2*-Ðô&EÎñI~0^Ghž*Z¥Þ!ZÅ!ã%1¹ŽQGætog’DÛ^ýàh +]A™-á»f Ue–‹Dçza›çµÈá2ÏL¬é³ŠŸiL«>#Í\ÈW?Iè'›H¡vݽ¹Š´ÂÒ7u’ ¼ìáĪLÓൃ$ˆéHŽÛ«êíôôS1ñû©ÂŽ×<*QVˆ=ÐT‰N°‹¶AòW”!a¬”÷.6Ào«Š©x³ê ‹™‡ ¿kM:@ƒÍÊÓA§iEÌŒ’—½óÞ°*©Ð›:ÅŠÉN;%Z9dõú´Ù s·3)Ž-ŠZ¡€öGr›öƒ5[jQ~ =a½rœºX—©"B;ÿ§sGo“ÌXV•°þ(’zQ&mT´8Å£‰sçݦ—ƒûZÝ[÷zZA'׈ì?ÏÁ‰«©ý`E*åTÛÜ•û”2“âŒ|•J7 ö´vB&#úÈÅâƒñæ9½ÿ€‚nk=jE¹ZÎ¥~µÊµ6Åjeu¥0vµªDë¤äôM¬¡:´T«r:ø«HC +òsYlsµ^£*¥tÄ\Åó¸šb®fÑ|ˆ¿yèƒ,¯FÓY•ÍºdÆ£¯£ßr<ð¨÷:Fʪ­Î{’± tëCŽø4‹´Šdm×°€’VË *0ÓšºÀyë—´kûeÐÎ|KE…)È÷dè Õ Kª·M£h^ƒ™Œ)H8ŠÇXWiŸ\c‡IÈê×ó7¬PòAr°¿ÉÌ ù£‡úúš2µ¢-q†`Œç›ªÑI+ÁðÜHÉ9šÌ&sC ôã1¦}ÉÛÍu•·zl®–›Á¶¬6`Ïꆖ‚~1ú …žƒû?ß. ·`[à{V +“É©¯H‰¨úÂdƈ'¹=¿Õä[êӦؿ ðe¨cD, î©Yï>Þ-Ow¿~]Dw¿Þ[’K,µxÁYªs‰)…oLç”øþ°ˆ'Ú¦±ÿvË—R=qñÅ(>”Tðy¨r•ûk‡^|ùeùéÓÇ?8w+uApìŠÂ-n|ûÍ£á-~ oq—‡£hÑ7žÿB«ÞétB±A+:í’!žá‰1C‚ŸLÙ#yWæ1j}ÍÃåY¨©2|*Œà%Þ„›OÊBʪç/éËýû^è‰‹Ë Ü”ç› Žë +Ä4$ѧ)«l­N:ÀåÙ¼à.%=cë\‚i 7ô¬J¬[mu®pC~|‡²F«b­ÇýRII·¼®sܹp%õȶ‹^@”›Ç•µµÎl2ƃÀ*w(”‰^—¡$ᘺ-"Þç($°R±AË*p€šfUzšÒ ùç¯ D[šž€/ä¶>£_ÜŽi:¹ ãüâíã»·ô9w¿aô§mì…äÃ)¾-˜éj6½ú3t™à{†Ùtn6a;wË‹Ÿ/þZ (|endstream +endobj +1172 0 obj<>/XObject<<>>>>/Annots 679 0 R>>endobj +1173 0 obj<>stream +xÝX]oÛF}÷¯¸/…œB¢>-Ù}Y8qÜ56Nº•Ú €^F䚘œa9C+Æîþ÷=w†”(º‹EÛ§],~ÜÏsν£_/¦4Á¿)­f4_R\\L¢ ®ðÇ”?~üþb¶ZE Z,®ñYÐüz~ü–Óúb~5‹®h1¿Šf¸»X.¢eóï¾Ý\Œï4Ò&eËëmoB›øò“–dRr{I;i%JdÚX§brÆä–RSQ"wu–)QY™]. KÊÒZ;AÊY™§ýbjŠ…¦ÚJom”)2úÍæËÅ„FÓ9âÛ$—logÜžl±KHè„4ÿá ÙRÆ*}¡Ã^8xŸ”Ëg™{ïù±ªÖ­eðRÀc)2iÉhoqÈîFÞ:»¿(6:õ¦’¤4‚)ɯŸ² Ûˆ6(K'Ÿ`%t&)­LAÓ^nÛK®c"SQçnû†£Nh{9E{uÖL•Ø훨12[¢­(ЭFudE{™—iS!ÝÞ ˜i'@T¶cS”*—d}#jË Â«lo|Õôü’²8¦Q®¶H¸¤4'S•ç(Fœ×‰¹S½|·PJ°(-*…ºsiEž›½ˆJ8'Щ,Ùñ7.:¦96ßñqè7€K‹?ô‚ª ûW†Ðhÿ~ó¢¯'®}ÜêødoãRUÅ™tÞsç[,Ä“‡M¯m@…–1à ¢*DÅÁÆ®ÊG"w£DæÒIŸgføNb¨AH-1…@Evæ+3ÂÖiªb%µCÓÙ\ +놌­¦-ʆ@*¤/ܘö!‹<™Ô²ìœ¬x¯ëbSÕÖÉäÎûµÑJŠÔÉjØO¹—&GêðŸ{nJ µ‰}~Œ;  ú"áÓcǹŸ×¾m(’´¶.î„ëùc<ìųÔG „@óü…ìÞT¸Ä´W ðËE05fm†"”È$â+»ÍÊ O¾!Z»ší±Û.ãÝKÉÁ"¨ jC_g–(†fƒRF/ªà”®eŸˆkƒÞ@Θ„b 'cÀž!™*ôtö‡µÐxü-ÝNKZ Hhƒ•Õ³¬þõûœŒf‹èf¹:‰ó­¦õã[’Z@å‚EëÅ".“º(åâY¨œð"È{#«Êè’öΕßLJÃ!òï–‘©²ñùÓþ=~:¢÷{"çÖzýóOž"Ë 4°ñ€dµJShKêOZ}õØý¬ô|F{Œ.;ô: Ü2Ss#¤Âz}îÜO×~¨ÐZP@䘽ÇO±6‘µ}¾G®q`>ý,‚zTqe¬I!8Äb¡VCúpC±èÑhåð.Hô$"BC £Á³ +ÿ¦tœìÞñx•«£ÕwwäÏÞO>1-À+dRÿî®e;º½Æ×Au½’wº‚ƒYˆšÝ«’gÀo{íoÖ„«Úd4ú…³ŸW5„Ê"gùÖneÞQr5|‘ X²JEÌÚ—BÙ¸6µ£‰Ùé'ô1Р  ¯f)ëåg4´È‡k¾<¸Ô:GWYϱUQ#ú¹‰EΓ‡eŸdWd1´þØzÿHÏŸ­w°Ñ[êAx‘E9[à‡ÝBŠ°*ÙoÊœcKáRŒ{ëuj|¿l•¤3TþŠ1œz8¶zðñmF@ÿù46 0GÀÜ|åÄþÂÑŸVG8iÿ`ÄÅj<Úäž5£bÿkÂA/Ðøº„\°L9Y6{Ujxk`+\ ærƒO\êUI Côó q4_Ü ›m$…}Å'^ã¯ù!ü꙾›ó¢àµ€¯våÀܪst—* A¶vÄ`z¬#j>/XObject<<>>>>/Annots 696 0 R>>endobj +1175 0 obj<>stream +x­XMsÛF½ëWt)Ñ) ü?”Ë–,ÅŽªV¶×dÖåZîa ‰‰€ˆâö·ïë€)ËI6.UIf¦§ûu÷ënüvÒ§~ú4ÐpLIqÒ‹zxÿúüëãÛ“þ¸h4žD*h0Gýæ)§ÙÉdõhÔ¿ˆ.xqrÁ‹òÄ‹ýÞ$šÐÅtŠ=¼Ú‹†Í¯ú=ì¾À™)V‡½1ï•'9;¾Äµ¸|Ì«¸¶}’³½?_LåÞáå„%É“¬NÇPvx9 +gÇ=Üždu0Æ©áh,Z G²*O¼úz~Ò}sAý>Í—ŒÉx:¡y*ôhžtÞ¹ %n½¥*Ó´4¹ö´,]!ïæ4Óåƒ.ÉXú~öy6ÿéîãû÷óï‹ÙÖWº ««ÂÙÅâ‡èªÜ«ù¯'=:ï¡ð<íü‘CÎÊeŸ\yï+U<+›’×­uYïñÊ“ò´u5¥ZG—¨õºtëÒ¨ +¸’·•äM¥#úŒ“çdµNI¥…±ÆW%nyÐTšUVyj±{„ TÖûÙª¨¹I†9s$ $¾“ |XÑ'cS·ñtù("Ú-Œ(äl`A˜© ›Zi[í~ròúæȬEg±ãʹÜïÐ~Ñ<Ó¥&`¨ÔؼG¹K€C +««Lp –PZÂä²ñpcòõ ™%Ãut³€e,°,‚?°?Cœ›ÔA¨ñ]!f±­Æ®Zt$Dˆ`yþ$6`Ü•çnÃ'ÄÎa•2¯—uN¿|ü;ìC08`YRnì½ÿ‘•E Ÿ·NùÙÁv·¤™*b%~s¿\Q‡²ªZÿØízÞ¹ru¸OX‚÷EôIS¦!Š +S–p›ÕJ⊾ã3Ý7I“Pç}ÐÊpÎAt,£…õ6ášå]>Àæ°aÜèÐ~й[ˆ‹Ã³€Ôü¾ Ñ`aPÉC5„/ñ:§Œ=ò ÎuÑí’¼;##"Ÿ`ÞžQœsª’IƒºÔˆ¨Ö…i*qÚssÛôþŠÅ­wfX"vf‰«*ºÓeÉéèMQçˆSŽÞ×7×kàm8?‚ÆÏœ÷ĆƋ›Í&ò÷f½ÞFñ.b£~ìú">Çm•‹²ªÈÏ}Øû7à|ìÃ?aÔU^e®^e„j–ÏÀM*/‚7S)`ó”ª-3–¢7×gtãRz­¬ªÂG÷Z¯ý »DÙ=s®Á8ÿ»XŽóLÑЄóu¤Ó:Ruˆñ징ãŒcªDÆfà|Úêoàê;ã“£Ì×·of`ˉ*#Õø‹IÙMÌÒww·®{‰4ñÀî7®P $±ûk¯x¦6ç\%q?J\Ñýo~Ÿä][¥øÿðì_WïÍüƒ0—(çòd7»{M~­“@xû0Þ+º6Ãï¨0Ié¼[BY(×$tÙMËU—Ýðª{>D“É„ú£P̓ñ¤!¸–¿&Ñ´ p[ +ü™ŽqK+Tofñ}©c<9ì˜ãýßÀ}_‚ìnù"”5&"E¶.b ±ãöR3g¤t *¢·¨I¡ñxF»<ù=Î?£$7É=3­0)¾ö’}OkVS¸$¡"ÙÝ¡`ÎhGê³z½v¥ß[Ù‘RöõsRþhç!bãÖä ²ù·*K³$m$b¨ówo‘÷¿”Ð*kq^ÙÉ‚§C·ÌvÔ J-wÃ7RVž·©³§èç˜"÷ZªØÕUÐïœõƒ²@‡Ýk ]šVE£¼Ä̱Ũq¸'ÈD¡ÖÞƒ2Y†³Ò°(9Hë\+w±P¥Ü±oë-®òÚz˜Wh Å—ŠæƒËk[iÔÐ3îG[‹ˆ¿ —-Úô`Â{¢_ÕªT|–UGOë„c­ÊÊ$(’èÙ´ªjNˆêð}e +´¸W½;þkLà‹OcÄ­ þ”o{Á¬ Ë88 +Wê*|›Ž_©ðÃËó Fm#²á¾fr×Ω+™'žbÕjϳ²Ï¡ÃGwˆW^ +©è¿-^áT[°bèè=Šož2X±Šó­xY¼Š°×ÃC +H>£17Ú¥4Àg %Ç„4@ǹu8Š ü×*Çù¿!œÁ_.!–+:ùß¼[Ìij¤…k¿ÁÝ[pWH¤VHä£èúŸ³]ãÇažòè³aBâŒÈaرQI¦“{È0h&ëoPëç%b^,Ô=º¸Ú´'r³Ì‹qiôò # OYKüµ+𬳜-Ìãí/å"…óðöÈí±FÜh“ +é\i¸Çúu}G-Üô‘¶‰K!½aO‹Nƒd‚¶×ã81q9”>º ºt=æ?˜¬ 4Ë[¼ú^žäÁrGNèÛÈšeµ¥ÓÛÓ‚ Oærƒ¾ÑŸÂZÄ¿ß{”3G‰ÎÞžÙú©ÏñmVX ;aeýô°^ò©çÔŸè~àÜqxa_ÌK<â2—£›L2žå8*……d¤cfcêÇ_Ž ²“ôÏ0ºk Î4˜LjÄ‘Mí±”¨ä\:° 'Ô)dÖ$*èN ×Ú!BH0ÂWÖ%_Ç>)MÌ\{ts!v"BØC¢5«Ê} ·íÛ*kÎâ@j¨SmÉÙ æe‘&Ætü~YiË7<¥^A•…ËÀ’öU‹¯b§ËðŒÝÁAÏXW<˜j•ã-Ïô0H1ëòL$ÙlÙ¨2$º•vÙùBøôõÁu,mÝg°JMò:}6ÄJµR2p=íwr‡1C¾)mJC :×°TÇ5Až;å3‡æÙ¡ƒ¿ƒ^DBÅþRDx-Xiäyeà3¾#Fèi+d­Øïì%$D¥ÁxKyÄìÉn +^ó/`ò,Ú.xˆxÆ“.xÚ4|ýá4š^ipÉ×:³«»×Wô¡t¿2ÕÜ4S¼|‘˜èããco:¤óÉ@æ—>úl$טð¡C:gf+i¤¥Yæ/‰“ñ4|i˜ŒYÎOó“œüäî:Ûendstream +endobj +1176 0 obj<>/XObject<<>>>>/Annots 701 0 R>>endobj +1177 0 obj<>stream +x•XÑrÛ¸}÷W܇ÎTéÈ´$Û’¼í´cgÔ3µãµÔfô‘ ˆ˜$”¢¿ï¹(ÓÜô¡ÙlÆ àÞsÏ9÷BßϦ4ÁSZÌèrNiu6I&ø„ÿ™ò?/ŸÏæ“dI×ËIrEM¯¯O¿•´:›]^%—t=_$3<]Ï“IüŸbºž.°âj¹ÀÏ3üo$ågw볋OW4Ò:ç³çË­3î„Öéh3zÖÖªmyÜ| ‡œŽº¥Bì% JuÕ”ÒIª¥«tMΈTÒfD¹Ñ¹B’nd­êéÜÿÚ¨F’ÓþgiŒ6´ùðaýíì|BçÓKĽÎF¼*j²²Îü‹I>Þ>S®Jié Ë2á5ŸÒôùø\^R·Ãfv=¡ðJ—W|ã|6t8ä¹”Â"”BÕ¯8Íȼ-Ë#me®ŠpN¤x´CŽ™NÛJÖŽÃFT²ªL裮­Ê¤¡FXÇ/r²F–r/jÇG÷j„q–TóÞêìØáQIkÅN&´Ær+ª­ ÞŸ7,•Åª°Â¹T´; ÜV[ ,©üÁ ÑCGe‰’ÈÌ—¨ñ§UC¶Ú&©®sÃ+3¥L™:mŽÿø9²l=dçø³«äf¾ óË›dÎÐþS=ÐN:Ä +ÿ.«xHW@Õí¿ÖZ>ÚZTŒi¥÷ÈÄ3Jü£qĈ %5%“Ytˆe‚>–š”óÔéÓí3#ì+ö^mfG#*œk~¹¸ðµH|}mvïßöå·Ç”–*}%!Ä/Á+ë¨Ržé"й>½ ¾Ž8ŽhÕ66ž=o‚t^ÿk]h+O °P8 öòpV‡ø(¡/ ®4…h,„&ßgäÝ&ä/ÍàY—m¯hQK™®ÿì¨Ñœq µí¤ÎøA»¯^(*ëÊ:uRàë·ïø'9œñG¹ˆ-êïã{³‘e@ÖÂiÚºä\!p´Ñ)ÿ’CAXŽ[ >Ä1I’à3=Ï€Néfì`3ƒF74…ÿåàä2™ÞàLpsɼžÎ’eB¿jàZ³þÑ%Á.諪3}°tóãâñþ=гY2›L±× Ê» =×e© †…êøQ:lk©jÓ¢3mÔNÕ¢¤_¿<Þ><%î‡ .عWºµ0,U§e›!Ûƒryx†÷XñØÛ²3ŒÂ–ÊÒ˜1Y ž×JÏ£ôkȤ“9èÙÈ”—ÞgŠcÓ¿-§àÏ|Ÿ5”°=Ò‹J a2~Ô×Û +62ÈðŠๅux€™õ‚Ú¼îŒn‚”Hþ©CÒ'©³}ï¼™ISYÆ ˆ×ÐÖ "xœ5S9H%kø÷dW¥ 5jÛ:±å>ÓâŒÚ©Tøòds¿Àja­¬09wŽxì¹€‚¶ˆ´Ô¨‰ÔóÑx ,¡ÛÒêññA$a *_Àý¹ B;ƒ¦‚ó°Qk¥A/ñ¦z$Ûú×CïêÅŒvL'ì×ቈPj¬ÞK38}3zZÇ'Þl4rG¯8Z'ê‰&o/Ù`TRÙ1÷äLK㈛ª Œ õÓgªõaó¡ããÉã¡€ÕãÛ û3V˜Ð’¸ÓÅúØ–Ûí°Î…*øºIĆBôÙÄfÖ-´…nKpÈ4ÃN|"N+–Ÿª¡ch?'ô4 åmíU*Jå|/ !r|à@ÇPT³Àšr1¿‰ÇȦD]PJ°ãîåË×ÕÃÓgÖuBŽbä(x­Qîq jÇdÏ\íÐÚƒq×jf±´¡(C´¬mQœ®)àu/åyXÙi¦Ò™,½Ð †´µlˆ“«ÜU‹À•gî²õÛ‚ÝÆ1ÀÔ¨Æ1aó˜ ›§:86\ôqu2Rþµ‡+¿ß{zó{´Ùžz—00èý0r¦9Æ7ï ïÒˆw”ü +±3Ûz´dùv”:([ ÊÔ +Êh‘¥Ìv#¿`ˆ•£]1<3ƒùäÊà5]óà;ÊÈÕÄl¦$é›Þtö <g*<ˆiƒÆBa»f ËÂ`keäš¿È*…0ˆcšÃ,e'²)€B2óŒCaѯy¶ç©æG^]ÖµÊ0í#ãÔH×ÃÞõ%ì;#X è3€ïRyÜ P F^dŒI•mæí%°8•=D–!&§|êXRYYî ìçj•ªº ] +㮆™g$‘<€Áê3êÐ,}oRíšš-ßb•´Ô8–»í^ãôèüцŠ m¡¢_äýÀú1‡Ý¼¯~65Ñþ,#®rßÓ0Ž¥ì•ð|% ¨ý5,íˆnZðsPÛ­p ¿¿'˜Ðà°c”}'HVF–º‰ù5œŒ™"¶HÔ'“öÕi4]¼¾žèêv˜è]¸,•þq<‡ïj×ë஀½õʵwìd¨³+ V¯ÔšC´_•“ øq*Â4È“+6Xû…ŸãÎüv€šb9)•ÇÅßÃsOÀÝ0¯¨¶Ý¦¦ª¡Á-á_¾F±‚!A\¸²ú{" å5w_Väo1a‚ûÛ4ý;·ÉþãR¥ FN ¶GÞ5àîp +’¸µI°ç;Í‘ý#|1»hÅ¡q ˆ8x<;%·@¢6ø³ºùÏý‹/9®×Ô9å4ñc2>9Ý÷ÖoXãT?ËÖг÷Kß²Ç\*8q2„yÁû-2µ~ó; ºýd‹aÞÏÿŒ†/Þ‚w;¤}NAwßÌBП–ñ®5½Â·ËKš/–É|~ÍÓýêöñî–žþ†Ø1å‡K¿'0ù|Š¯UxÉùb†oEþŸÛÀÕâ*YÌ—øjË Þí~}öÛÙ°ÉFendstream +endobj +1178 0 obj<>/XObject<<>>>>>>endobj +1179 0 obj<>stream +xXkoÛÊýî_1uQÔlÚzXEaÇö­k;”¦ôeE.ÍI®.—Œ¢ß3³\J¦Ý¦m‚8ó<ç̬;Ðþh:¤Ñ„ââè"º ËÑ?dz)~ñ¯Ò”Êù4õ¯_/ÎïÆ4Ð2e“Ù”– ÁÎÅ-ã“e¦)Î.kª3]Rbµ#EºþúâjõÅéêWûlKxù­Ñ®>¥mfâ _ëÊèïx¯Q© +M6•Ï ^ù££œßú°üvtAgƒQ4„×WfSG|õ …Ë£ˆø®œ 'јŸì‡Û²Ôq oVœ >–ËòWeBN«*ÎPj+¥þøÖ¯Vi¥“Õ*ê¸O¹ÞgäRu…eê/Ä;âм©ßäçõ{—oR;•*¢M?¥u?þÜÚOñOw÷¿DŸž~õÜØÜĆù¼FtÏj>ꟶ:À´÷ÊðN¢A‘¦>Ñó»9  G)„é’ÎÆc™Á0šEƒˆ>Ú25ÏM¥j¼/]]51vbÝÚê…D¥g±—a´cÈ*,*W03“¦ºÒL°5^ÔbEŸn>J ŠþÄnÍxYA™êL¬ƒi©š}Aè;)ý¤œC( Á|µÛH¬x”‰Éš²$°ëF`p~·CälÍx.!þÕp2éÞç&7;Áß~þpÛ±7±â}cÓÎQ¡âÌ”ªq5©8†R×îòz6DCæûœ1>*9z(Z¨bí«¹5yN*w^à‰éµðUi[ï—mÎÃa4¼àñ„ôF~”a.T¦ÞQa¡ALÍB9ž ë +ÒU¯åBÁIt1¹lûÎC‹ÿQª·ècÁŒ“éV¨Ñ4tŒ' Ö@^6äX¾~È.Oƒˆ$GÊÅšñÂâJ‰^«“à`ôxoœkdLo3 ¨2Â0ðÒ¾°·)Ý–MŠtc¥À{]Ù<Ç›À¬;¬TŽ-öÙ +<–-@°ÆÈròeqûù5N$²e¾{mµÝ5¤m¨0*A\g¥‰U+Î1Ó½ÝÎÕâ¯WŸo{¾¤a|í 8!•ÀúÎÀÍÓÃÕýcßw»ïéöóßߤ屌s|5G’ßèô]UÆkäcñp-CrlUyW" F»]ÅuÃ6Xó`зÕqxÀ> #s-é Q¢˜¯ºîiQp(؆äQßfä^‰ZX‹R •[ñ\YfK²Í2X>{VÝ|Œèkfl +…n!:xcê›5n¿BœêùlUt îÕ‰’­ éŸzš‰?4#ñËʉR€W_^ÆQ\ÃeÐךÒWX¢WÂD`dõ]?[‹Ý1ÑŠ#t6¢bb»Ì6y‚&ºX39¡¶R8µÔ±ÒÏð)w4yìü~°æYp}ÿ´-™¡nD§2È 1a)ëfP&¿rŠ6ä6fzó£Ráv,„'Z]õy?7ÆeÝ4Á+½â¶ÃEl=\ûB åéŠ%ÙÑÖøeo/üšÛñÑßÀLë$ õÑni­bQ~¥S `I:¸·„b#}¨¢¨ªH +W¹¤ãŽE–Ë€oµ½—YfiT4øð\»h5ës­$@Î:½ý®r“p™yka#|ðàßž€œ¬%ÝóË,¤”'‹CÛû F¸ +e»¬NøÛñ& hÒñê½”<îe9Vkì>©^éùõ}à¬#šÏÿÎaµ)0þ¤¥>ŠPø‚ÜZ=ˆ;uXOh™Dž]=§Ò Ð¿€wšpŒ=µÂ‘©ÆiÔÅŸO‹åËÕêDN˜=*çÅm'óîN©2ÏYý—Õ~© ¸ «@‡‡CÌ­í XíÔj‰´08Åá/Ñ©)à€G®ß'¸ãîözÁÊ â…kç´ßExíoEDå[µ;À¨£c +Õj2HÕi®­]Mö›i»›Œ°•úÝDöÓáÞOº¹†€¶ªàš|a¼jÏ{œÑùݤÚóËh6DMgÑØ»x|ZÞþÎ?~¹pÒêήÙll%d=.Û”f­·é NF4ÁÿÓ‰l[‹«‡ë+Ží¸H76nx_’Ù)ýLðËوΦCYLÿ¿ }<ÃáÌï¶Ó[¾]ýíè_Šq endstream +endobj +1180 0 obj<>/XObject<<>>>>>>endobj +1181 0 obj<>stream +x¥WkoÛFüî_± `Ä$F¢=ôCœ6­ÔMmÁ‘<Š“<…w ãßÙ;R”)·)Ú$ò»³3³«ÏgSšàoJËf Š‹³I0¡§ËI° ùj‰Ï!þW’R÷b¶^Oz1]†¿˜ONŸ_mΞ¼œÓtJ›—/VKÚ$„‹'ÚÄW2Õ¸1Q&®QåŽ2ÝÕë2U»ï*- +~±¯tªriF¤,)Cµ‘ióZ#¥Ûö»*×(§› Ź’¥5—›OgOgAˆ»/T±Ïed3i­÷˜ ].‚9¯ó§µgà+èFÚwFV?I{]¦`}®¥ÁIšâꋬøÛNºã9Èê±9ÄN¹Ž…Uº ègÝH,ñÆA„f¯K„–hi¨Ô–2ñ…Ð.„aä^TÂÊÓƒ)U2OF¤ËüÎÅÔFéñe¢’m2ÀWHQ¬vp»Ï»C›°i[©ØÊ„s‹$—C•'Ç'ª’±ÕÕÝPöå8‚òíó_^é.éÍë–#j2gL+B,Dyç³âÒ—q^'|ÿ.eFf —¤œtzo—Þ dêý^WÖÝ­bº%*MeÅ´á ¨æ~òr}àù8\yMÃ`„Á4à-‰n ‰-¹8èc‰Œ;nÀì6ìíd\.ïw¹ŽDþˆÆL*ÎÑQÀÚÁ3ÏÀTç¹n±íG.¿ +Àöò™¿xBk/Íq8÷!ç®${a3úž¶ø×ÁàØÝe2¾ñòíöüÝv[@Ðí~ø@z¬® j“ÈTÔ¹Ô2'õÞ¥O|íù?°=lD¥($XÍïŒ("áå¶Ý2ÅùÝ!®ªtënÎù €Q}QñPg¸'® ~ÐZÔV(G,rÜyé¼gц×íè:¥;];IÔά@BÄ­€ð_&]ØÈ-ÿXÔÆ~p³·Ò­uš$³—±“®¶GEˆ*ÐFŠ(—Žfa„“)Ãe°š9G{ŸßÆ9… QïÖ S;dÃ`WÕðÎc Ô…2vö‹BSNrX •-§¼µ ¢? Ãà#i)KÈmÍzüï/bèæ× ']y×$û£KÙÅÇöNÌ™àƒgM§§ñ!çu—s««°×¬ÿ¿è +ÛZ|µ\œËç‘/óà"«@2+«€Þºªg‚ݹAòÈ>/XObject<<>>>>>>endobj +1183 0 obj<>stream +xXïoÛFýî¿b /r‰±GvÇIÑ ±ã»(×+ª X‘+ic’Ëî.# èof¹”ʤÅáùArgæÍ›7oýûÉ9á×9]ÎèÙœòêäÕâäé/èüœk<™_]Ò¢ ³ìììŒùéù,»ÊfÙEF¿˜º°;O/þC÷ήM©éƒmódñ'\ô'Lgóìgœþ²Õ5)j½v´6Î*íÆ“©ÉÖG§M(l5^ÀyüjöúzAÆSî´ +º˜ò¤^°e¡§Ñ‡ \ []·£ Ç>£éù³lÆG¯µ¶Mh„7NU~Dª.ht§ÃÖÚb”Ñb«½¦Â8ëŒÆñx9G¹­ƒ®ƒ§)KZiª´Ûèÿ [I³´¹*Q¿"-ckOçáe˜¿\.w¯å²‰hùå’ë«U¥ß®¼þ½E4†ÅÔ8¨So$Ne2äÇkg+Ò*ßfô«mÁ%ÑZ#l°ŒŸ|ýÛ¦´+U~"ÛÉlÔ8í¾jÊÞùöÚ3H~kå÷FÔäm¯ko‚ÁÇ? ‚×v$ítè ǯ”©~#Jc‚*©Ô!pÓð_*o-þ¡ê=ÙµäÚ¡“ú›u!‰Ð­-„$Ü#Ä@ÛÐ"¦£:ö\ÅZ;]çÚgôvM{Û¢o}³¤ëµu¹½ùèå p–¦öŒ”Ðb—Ý^ß—`M¡Q¾«hçLÀù9¢{Ž¶à0$aÔú±x_KÖý8=lùÖÔzB|gé:[Ò½ªuIàOïwÖ‘¨^— ®ñ…§YDPµÊ0‘ütPƒäÀ5P¾@K¾âT@ପ˜nGPd8óÿó„Vm ÂÒçÚ†Ï µÝIÌÜVM‹žr¢N¯¬ Ràú‘¦ð<#Nÿóÿ׌qEɨþ¦42ÖÑ­Éõv¨{ìéŽ4=’p`ADƒÆïì†G)ß-èµešŽEê ¨á[ÈKتê½3•r{Â7øM2àúm>8õ€`”œ Fþ‚0±~!œÎžÓô9˜ÅícÍSv ÍäÐzÖGhs]ZU Å"Üô?ÕÒÅVa”¿y ”wT8ÝY°¦ìq‹hG"'y“€”±¶åÎ4¡Ñaj˜L—NüÀªäÒÔ' +uãû—™Ò8á mún:I‡ ˆ„§™£é hE+HmXa"! 7¹F5ÙluFù¬ŠTEê"Ô:bPcxÖX–}K&”qee ‰ÂýÆò3¡¦€ šÌÜý õA«‚súÒúá¼>ûªïͺË]÷ªZ±2îÍx$‰.O1e¢ÍxÑ¥GH_†G?¢2¬´r8pôä¨FN¾ç€jqdLÎKý_ŒG—KÏ¥!e âk™Òøþ tG<© +»µi°Ø°jÂòÉDD,cpZ¼.:P‡M{n N’þîc¥ác|+Ò¾nËrO_UiŠèNÑÄŽ”Dz oJ‘$>^àåþXë·5°ÙÀ­4¾Ôc)pËË×ÒNóiŒSAåûG·hŒ=?þË +òΣÊBÝá‡Úùw†§ˆŽj"`‡·eÁ¾H­`× §ú‘—H¬7O`%`— מ|£s³6¨´cä(6¯Qa;°T`[Íš—m§ÓÇ^ïï,áý÷}`ò$#-îç.4 –)ÙϤ*9v6*1#x» ëcôm#¡Û`~(G©c»¦åi×ON (R1Ä _Uزª˜ÚAVâ5jz9]>/ivP™.P¬¤u8¼óϘp±bSöb,ãž1õAÓ¤ZñÀRAòj}§Æ´gLÿ0Ò Ítï¸÷X…\SÚ÷Md="ש^Ay5¨‚%¶Òð±)p2rO¿.ApXMµ~쯫Òû}¿É ãØ€Ìð^h)v÷†õlá–|â—­ßH_ŽÖ÷ѧ­<®e°À{¿0 +ÀˆM×÷¬è:Øã¾^œ™ïTŸk£þ8íbB¦…K|;ŽJUZû€Ü_v}Lö姟ßüúùÝû›ëwŸo¯o~z{÷f¹ìVÆryÓ:\›Â¿ãÝw¹¼—Üwp| ç“ÎéÌìÓ¯ºŸœ_̲³«g4ŸÏ³9'ýáúöÕ5ÛÙ/|µymó¶ÂÙŠï®ñ°ù¥|0½œÅ"ã%ø¦´6›ÖÉ›ô¦Èµ¹Üx_òÏ&‚§¡u7lHºDÅì^\^d—ó«ˆÜÕÇz³8ùçÉ°³ìendstream +endobj +1184 0 obj<>/XObject<<>>>>>>endobj +1185 0 obj<>stream +xX]oÛF|÷¯8(ê-ɶ>Ü'§nZáÖ*Œ" +‚y/"yÌÝQŠþ}g÷H‰¢óÐN…¼Ý™Ýó·‹‘â÷HLÇâz"âüb Åõ|Ž?ofSü9Æ—Ub}ñ~qqõáFŒFb±¦g'³©X$χb_L%ö:ËÄZ‰…P…·‡¾X+”ŒSQ9eû¬ų5k©géÓH<¯„O•ˆMáñŠ£'|ªØªƒX^fz«²ƒðF¬Ô»Å׋ÁP F×ѱ/ã»århfï–Ë2œŠï(P!sµ|ק“ ‘¨LÕQèÐV|ÎŽ¢[õ­ÒV%œeDg<‰n(Χ߾kÏIZµÑe •hoìg~òê䆥•ÛëýßOO¿ÓI'Ø.ÅerÒÅæµã?‘JŒó"C8d¥ ~®ùò’QP]ˆZYü„¤ÛÒٹЄ;àIåN¿ƒÐyi¬—…¥™rÂ!#äb8mQ‚ÛzS +¬‹²†œ„'œ—Ö‹\UÔ&áœêv¹çærKI±’ñ¶*)CÊ‹IRR°ÈJ%*Y¾ë²¸ Q±B¹Bb]­×À™´*7»†ŽÌÄ2ƒö¬’ÉÀ_ª“Br°‘säå» •‡ûEÍŽ¶djEžØì ‰ zSü¨WÙë‹^¡|jLBßžÀë¡ìDôpÞÆÊÜõ Ú,QÖq…tätâ:”>ÌÇA»NI‹æ£.¤ˆÔ?;=¿þ)JéÜÞØd£=©vB´‘ZK9g ‘º´?Ƈ$—7§à +2³¸¬+ Ï*æ·"Î4:ýüíÛ·oÇ©ŠY›oP¢A¶„…€'§”è!”IŸôH™±Õ+ˆU®ÌŽ€lùáw¦ËÿÏÇû§€F·¾ø ã8VÓÔ>  Æ·bp=&Ñ# öUæ _©3×Ü1d†;™¯$¨IÔªÚ@øR;<¬ÏïôwÍB !$”sEg« R¢A,ÊʘÑ!tÔè*È€t—I•s×Bl¹)"õ]…3c¶¬ê2e-¯È‚ÒZŽˆBÈïƒUırœ&Lÿi!€ìŽœr+¢uyþµF椳š>wª™0pÿàtÇs×–£}”[¸ÓYÁ*1ßéì0JèûRn£â(êNàD¨æ ”NÚ§’]¾\¢áV¨R¿ðëì;™Aʼ?'|õa~ ãYhÅÑ8šEãJ­{I¼»E§{Âo¢!Å>Í‹⯄¦äþ­A`Ž»ÕàóŸÈ$4p£ä£êá„$;Œ–H,` 5#ÊÉž8±Ì®à¬f/\©b½Ö€Ñ§ÖT›”må¬ûJ õaàZ†b<ŽÆCÒxÍ®ylʶq&FCYmæSLD àè@¨Ä7Ì¡¿Ä/îŒAÕr™š\Æ}`/Ñ.FŸÓtòDÈ Ö©h¥b ” +@¡xVp.uáñ¼CªÀp ^ñý‰C.e¤ •¨âKaü¸šq¼¢´ÔŠÕ¤ ŽV*40@½ Ñ©ƒp>wÒÛbúó¸Øô¡OT€ò(#:Ž6N•5µbmMþ6ó°´ Þò!à|MíUSðÄgĽÜÁ³ä +E¶H86­ô\/_w'VïTÄ…w]jª,!‘ Ú^z×ëäŒy¶£,lôvݘÇw!óµ*3Ç^,Ô¾ M,õN4Ò,s¨2¬¦Ç™ˆ.Dç5=ør\Á¾ tHh8†fÁó©Êà 7uÝ´ãTˆ˜ˆ<ÌN™„næLÓ}@‰yüð ÃìpJCäé4”!hf)aUpTÖËÞj¬µ¥²¹vôA¸gÖ×U–uÂ×ùœ4EHGaŸ89Ûy:XuÞ¶ìš[§î6lïä&”B½œÑ ØGD¹3UøM%Rh§ U岨0'ÌPëîÀlKȉV(šð¥NŒQP¡\•C5«*ÀÓ O,zEÛ4¹bpzA5$P](ueq«P,ö¯8&'î ¤¿ŸßöERaÚg@Âd‹F]p`zè„—›cÉêïPtÿŽs„hïÇÈ!<f,6XÉ Hí—†çóCk·¦Æc˜¦ íG +ú4ÿBNät©WJ‚¦ÀŽ‰G| w_–™®gÁƒô2,¤†z+Ìi©íÔÜ{7ÚfŸN‹í ß +>âVP/¶p°Øž #àíT¶&Ìë›ð }ØeM{7kËʲÄæËk ùN¸ºà’;Ë»…µ‚‰²²%<œ"Æ•ÅÈ÷Ð`Ulá}E§±‘±þÐX$¤3_ÂÕàWÜb­Éij,TÆÂ6åY‡M¿áÑÐæÁVïKõ ZþèxËrë{tY²B!,Zdز(›Ø }ÜlŽ¼®ü‡Y’¢±ÍáÆÄ»@“ßȬ:ÁÏ­(…¥®µ] ¸ú_´GûÊÂ1S‚W¢K¸xôL"ùŽ E3ºWfõÒ4šàG³küŒá&šLniu~¹ÿøþž®î_©®£×1­És(¿AóÊ`:æÛH½l ²Ö›Êwz,p{¯xv¸;ñR/íïz5ý‡4¢/—7Ó›h:™á‡$Hb6¢X¿-.þºød„¨lendstream +endobj +1186 0 obj<>/XObject<<>>>>>>endobj +1187 0 obj<>stream +x}WïoÛ6ýž¿â``[ ÄŒíøg€~H›°8Yã¡æ! %:æ,‘ªHÅñ¿w¤äjZ׶\›âݽ÷îÝùëÙø;¤Ùˆ.§”äg1 É`(f4žÏð~„W©h¾bò½/†ƒ©¸ì~ñ~uvñiLÃ!­¶4‰ÅhDÓùDL¦sZ¥„Hƒ­’7fû$£á@VÏ‹õI“±^'ŠüNzZ®è‹-÷ÎK¯­!¯²ÌQ^©=iG©=˜ÌÊT›g’T”v«3¤\ÚœäÛÕßgê/ÅA߸Ì(Óf/è°S~§JDÁø'_É,;âE‰têœlÙ:¥Ž9‹à‰5[ý\•1'í\…ÓÒÑQyØoE¬ÌÞ ¿óXM.÷ÊukzB +fÿOptN0¤D!_kBdI¹ôž3¶´QÂJålö¢Ò¿D“Àh*Æ\r„wt‚Wnù'ó¤T?+çQN‰ç kRe®+‡S[[™•™/à +¥—¹JÏ;¶jð4xy3£ÒšŽ:.î~Áõ•É”sÔs*©Jíô.„í…€=äR‹h ÏB:w°eêpø¨\Öoœb9€q¦ýãòÃç?V·÷Ká_ýú-“ØC×!šË(~Ú©èéBÈ46NÝŠ£­Êåêt”RAu€Æn9 §È¬UGeMAsœ¤ŒÌ)w‚T™$ ô409Vö¯×KÀÈgWCX› +Ü9¢ù­|xžÙk„Ðh_ÿ¢Lè#cË<¨½T_+]â¦Í±“ Ø/)É”,û^½úo¡¢ÆÀIGb“¦ƒs h›çæ`‰Ò&É §•\…\¹×€nxß4ïS”º{:ɹ©‚Ñ D?å•óO¬°…àú劫7×+p~²ç–1©ô¶<6AÏ›sw×ËXÈŧEmRýÚ¥ú£…˜_ÃŽÄ\ŒÄTÐm`4¡yƒ|ßoׂc[ Ë-ÃÔ[çmAйB%z{ ^e•ô;T£ã/3½Gu€«ÌlýØpeî—¦¨1ÄÀIt+ìh)±U–6‘âí|a. C:Ì9 UþKkÁó$òŠÍþx÷¾n`o™e‡e…"_|× ‹¹«]U¶ñßQi óà Ú<ÚT ôLÐãN– ÏC4rŠýA)C_“à ‘0ƒHŤ¦q8˜`¶Lq÷¬¡ñÁz~PMtùÆ>WèÁ ¾“/ŠG¥*SG{—ú¬–†ò +µ~ËúßIÌâÉ­¬2 <ƒ¢ Œž5þü´ÄëwÁ]Ô‹Ñi0ò`))ê¹)z;aýw¸êñeÁeú‘¶õš5fd®ÄÃÍcô¶-WÔÊ‚´÷÷qéµøx×AùÿÙ=ÕÓ£/^AÍ;«Ñºi)™ìÝÖ±(&ø7¹;ácy3Ê õªº›@„ˆw¨na©¬L\XFÉÕz}ÐÆxðèpN{’©ˆ]uú?#m7/ÚV8ca8®^5Vv°Ní0êŤo Îï¬óÿ™Vëá¤f%tj¨Û)OU¡ÄgÇì[ø>L°ØöâZF ïD­‰Ã# ÐaAE…ÖZ‰äN…¡L°–Žçm£ª·µÓ(ÅuÐ +ë%,žaՌƅ/ +¥½cZ´Fì9»þFn¢HSÛI'ÈÌë\]°%b, É0]t4±°þ¡¢°†Ÿ†+1*¬oEí£±êÖnCaÉäXíU˜¡Ùê¬qÄxoÜà[èØô|†_Ö^•N“ëzQ&Hc%õ¥äk-Ð2Ýã8öô”Zå°f—Ò¸-\蔇²kª°µò"Ìü·6ƒÿ|é7L]Nš‘‚µtsw}»|úp¿\}¾ÿ•WNºj¯ +76—Hñ§h³:3üŒ +«ùÏôÈk8zñ©™^£‘ †ÐÄB âò`ÓÌà}3¹îêaŸœ7so<ó9ÿÈšŠé"¬/×wï¯y’þ²èÆ&ïda­àgûCl<ƒù%õg#üKßÔS˜ómýÀ¹5ΗU–Ú+zTÞó|F¿|¶2ç·ÁÔ%t_<žÅ ¿óÂ¥óôquöÛÙ?ü¶¯Èendstream +endobj +1188 0 obj<>/XObject<<>>>>>>endobj +1189 0 obj<>stream +xW]OÜH|çW´"EÙH¬a² N‚@î¸; Ç¡“öeÖ㠶Ǚ³ñýú«žñc8]Ä ëéîêªêö÷íãoFGs:XPRîœÅ;{_i6£8£ù<šïÏhqü)ú´8¦8¥ýhŸâdçÊ’¨kY¥êm„%mÔƒªDQ´$—k#SZ·ô»Î+úbijëŒ ‘Ë%-E¹¸*JUJ8LUIѤx)—FR¦ÍÇøÛÎtŸ¦³ƒhŽØ“Z['rmÄwö¾,º,§]šÓùQt|ཾ‰/è$<¶-fB1ââ„’ÞëR¨Š>ëÊ]Ò¼óY k+ÉÈB8äá4)‡_™4ü¿®$ÙZ&*S •Ϧ\ ×*+§á”®8ä e— G‰¨¨©Ri™Š–Wg”úø½ÊÃRm”öñîU•ê¥ë˜–Ò—ôJy÷L$MýúÉÕÇÈKΊuƒm¦ñº¦›åޜ;bïÒ9¬°ÐWár_£‡ÁãOV•ªãbÁQÑÙ]šÌµM®’ÜkmPê•ŠBƒŒ ?`÷¸}±¦RT-ÕRƒ}Üoø[‡õÐG’5¼Þ…©îز¤’B +(ÂÊŒO¾@KÛAd²-\­D^ö¶kº™û^ùÀbjr‰¡¿Ì ‡À)蔵Ï]$•6}=@F9% +õO`“ª ·2üÏÂcT™P*ÁY« W#¿7pï» +¾.d #A–žd¦©<²à^EHBVOÊèªÄQ"}¢šoÖø‘&NÑY-pÏÜBFëÙ|ËEMÛJ”xƒÇR¡E*Öèg¡ÖÖ١ĹWɳŒšZW]BŒ"q»|ë0Æ‹Õ± Kî´Ëƒõa €OáW)Zªd0l ™CïÒ b fˆj=ÎüàȘJñ07öŽžœ…Æ4 +®Ï, _ŠIÌõrrx—`{ʾ_Öœ(f_[ã^7A± øu`àoŸOV«ûËëëxµú…Þ&p}Cï—žÖ·Z»÷«Uøq0_­X6ê¡ëÑÖ,¹%ˆÇšïÓð\-àê5³%¢ŸÎuœ©Lrý"Ó7òBOÔ“ôóŴКN‹žô­n`-v ­„¾2P®P0o3LQ~mÛ"vÿÐ&MŠ…æîŽx»%7îw+’•IÓo?ƒV€«¢[(†(îR?˜‡›‡—XØ|°q¼œF>K :çÌ1àFé1G–Ÿïn/㿻 \;+x{ïþy3 {X)» +ÇÈÆhêK®€<$y*Ácè÷Õž&Øìöøö©pïð*’ú}ÅÏlÕ6P KaÐ2¿k¼ø„b*úq8eŠøÀ£×Wás²Á‡ ÔÞ£¾ÝX8úÞ—ãnlÍGÑþñ>cçÑbñ‰×sÚÙ)v\ý DÅæš4¼‹ô_pÓí+Ó£9¾vÓÉlGóˆ?1¾ö¤Kìòl8ü-u‚]ÖùïðýVc`´zˆÅ;?'uxtáKÚz|À—.â¿vþ\©9Jendstream +endobj +1190 0 obj<>/XObject<<>>>>>>endobj +1191 0 obj<>stream +xmT]Oã0|ï¯Ø·+¤M)Màò!ñp…£9¡“xq’Mkˆã`;ôúïoì´GÕ;5•{wggvìALcübJ&t>£B Æј.â$Jiš&xŸào˜ªÁ<Œî§Ç”UH™¥ e%!|<¦¬ŠÂIݠβ¡µ°ÈúèØ:.IZjÙ(éüÇFºµlÈ­™j‰5KºÂ—p!óBü”5¯Ø¾žD'ÙÛ`Lg“Y4Ü0CÖR¨\c¡óɈ×eW 2°¬¥Ûöå +ÑPÙ©6@½È¦ÔK‹Œ–×ßI6N“Uy+¬Ý”Ti£„»"˼ŒÏ£‰¼[Ü<ÿzÊ‘ûí| rûpOÏWÑ”4j»|d}‡£vвա†…»ö•4µPéÐë²£Q¶†t•(zVx‡¸UWSÞ9½F;Ê™XXYoý^I %U[³âP`j¸­e!Âp°Ù‹g·˜‹²ÇêîEò,_´y_ݵö”öë—§äIî¿!¦³.”·aoÉæ“õíQ+Œ“…l…c¨Fâˆê­VË–‹Îø©õ]õÃ×B7Î身|{ˆ ƒˆ`š`œ¹A¼1\8(ÌJ®:Ãåžá~œ×µÒ˜#Ke¿‘uÝ;éqqGOF*Í]s7û& ½Ÿno`IzpÞÑ%[iD^sß0‹b}Xñˆkh¯1,Û0ÍEñÞµÿÅ™œ]…Cë£ 2¬·õ?N;+˜ NäÂ2Y}ÐíEÙ¬Žšþ;?xéK% }ÃK¨Ú—/´jA)D…ÃíOµá•´ÎlÃF÷éîæˆg¸UÒsŠ/ãþH£¿ù5d×oä(:ïÝà(ßÎÙ>á,™à¢)‡ñ$J£ID˜Lroí‡X]¸ƒì-Ù9Ðñ}>k¡üëO-¥ÂÕb}ái2’YŠ« EÓ©_ºË?W£ªéendstream +endobj +1192 0 obj<>/XObject<<>>>>/Annots 704 0 R>>endobj +1193 0 obj<>stream +xW]oÚJ}çWŒÔ—T¤RU壹ÍCÛÜ‚”+¥}XìöÆö:Þu)ÿ¾gv×`œÜ«*JìÙ™3gΠϽ˜†ø‰i:¢³ %yo ñ„ÿÄüçÛ_½ølé|:‹†”Óh|ͧŒælOç“Y4¢ñlŠÿGø­$­Ü‹øbM^{1‹qIçÀÕ¢wz{A£!-Vˆi2Ñ"u¡àIrr½¥•Åg}Ò[²š.K +‘<Õ%Ýè\¨âíâßÞ£1ŽŸ\ëÂV:ËpP°¼¯+™íh.ò¥ ýË´u”cˆ§>†ÁÙ‰á8#º¯d%Ÿke”•ôMŠTkövz;¦8GFS¤Œ#Wr¥ÄN×” UÔÀ¸3ŠÝ(C‰Ï©Oe&…‘”‹'I!âµ°î¬À‡Dç¸ËŠe&i«ì†/\©u]Á?‰/Bt¡úÔîo®šTš¤RK™z—ÒÙW¸ZÓ‰Çc€CƒO__ÍØ,òÉãã`fç‘+úÒu‘zÃWPy༹ˆjP} »ð*ÉF6æÄQoQ˜- +™éµ.€ås-5´ªtN[]=+¬Ò…q•v)РAåA©Þú²Ž#zØÈBþÄ}‚jã¯å£ì‡Z懛û( *pxÀ…(d‚ øTÇ¥gc+AÄŸ¢(O†6 +o$n«Ü•ì¿¹t¥0>Òý²»ÒW)£« +#Z ”#Â7©îY]£2SÒxÒgI¯#Ø”;¬­®íÞSŸð†ä/‘ƒîi™‰)#Pÿ™#5TVz¥`¡L'gcÁùÔãäMWu–‘Ë ž>~Ñ%žºhƒôü­\-6§T€üh±ÑƒD ¥ËÐéMâóËÏŽ¡ÜüHš !pî!»ÕôFàeiœ8Àݘ›­6L9oöŽ.Ñù*ÕîåÁNþßOÐCßߺ:j0hæ¬GÕ¢„¡ï'W|Âד»–Å*J¬\Ö¼D—;Ž›µ²lß39¼§ ZŒ„¼k€Ö.*JÉ:è`õ(i`CÌ4sG›‹–’R¤ÓIMÈ4êùŸ)ún?jiViŸ£p’8Ð4¹›$þ‚_[±#åU"hS|ÇÉvTÁõZø ½‰€^{:¢Î +mœƒ+Ðâ§PËLD7^V…N¾V¡C‹V‡p83¬ÔÆ0mZÊÒŒðÚ–Œ%ÐëØL AÇú\ªŸ>Öæ&'v!ø.Ùçª@¯BÑ TƒxÆœ^­T¢àc‡ÙR–˜$ nTzÐ ¡à)ÇÔ—ÂîåïêQXÓG?&YÝŒ»VË5:9bW`Èÿ¹g&U+ñp6uýဃG@6± ¤Lå«KØ»G{‘o†:xÕï b4*PŠ +§ÑNèùêÇu¦—"û10PFÎ=´ŠÉ—JИatnŒ´ïøÖÓÛ!]4#{ìÕ‚•çWIï}lû!¶¨IH!4å{ÚÉ=EŽ- n Ç ‚[æ"‚²ïl/•yA¨š#[#h•\+§¬ŒÑi¯î¾ÎÉ—ž©ÙË}'c>òp÷eì+Èí%êQi‘B^0e½4fƒŠBN‰wlBpÝÑqX +ËÍ>07>CËWƒðw;;^èM¼ôÒ†9Ï}_IlÚ€ÒñwLl¤±…9d‰°:³þ`gã‘0O¹“R–ŠbçŸa­†ÊbiÁ"t]4cŸ–aÃø¬’J½²ï7^‹/Ì&¿™¸Mq·Å#t^0ttÀÚðþÔð‚çÊÄ£‰ÞÎ úÅÈ/è×ú…¢5¯y1ù“/ãé8šNføÙ˜s ½¿{¿Ö“LÒendstream +endobj +1194 0 obj<>/XObject<<>>>>>>endobj +1195 0 obj<>stream +xWÛnÛ8}ÏW °Û¶â[l§@QäÒ yhÚE¼(È -Q6‰tE*®÷ë÷ IÙŠêd‹"¨m‘s9sæÌèÇÉø7¤ÙˆÆSJË“A2 ³ù Ñd>Ãçþ*I¹09?K&ÇŒÏ&¿Þ¸\œœÞœÓpB‹N¦s|ÈZ¤o†ãdœ úd¶”iIÐ7S=Z'œ2šr¥3RÎâY)”¦ÔhW™¢Õ‡·‹ï°<¡á0Xîf°üæ‚î´m™À-·–û‹Ï—øA8Ú +  +“Š‚j++r†–’D Ú©T8™ÑZXþÝGr0ÄÞÔGø#özˆ‹rS‘÷’Э 9¹µ²´Üá‹Ò+x¼“îòöË=iQJúQËjço±õUeêMxàü6LÙNÇ°¶.–ÏCŠtM&÷Y–ø¬4ž(G+‰ô–"}¤¼2¥̾?å¼”ÀN…Æÿv 4 +³2ºã¹’°aMhaHGf#5Y™Ö•r;Z›æ—Æ­½¿vØ8ghe!SöáÍâËõ—w¾ôˆŸ]_Qº6Vꇷ¿G‚mU‰0Q%t‘;.%—˜m¶c€å,xârÿn)­dÆ¥…E<\&®IÇ7G¾ä°”=¼e2°Ý_"ê‘°\`f€Øl*ó$Š„mµ ?¢{@ÏüQBßÀ5.Ûü +´DHÙKôæÓò ù‰ÀØ@b„”®…^IâšX{°‰¯‘À vf´$tUtåk¸ç5|ó…nòmøbƒ¾@ßÈ×%ãz2Þä$q;ü…TKa¹L©Ùì:pG*ÃìûL¤àuL¡¸VÖ®E±{ÖºžÎ|®Á£Á˜0‡Ò@8X›úãɾ4“„®Ð ÷¢\ +¯ t‰NBk^!ºzUˆ’)Wø›B V–•l”Œzh˜’†º=IV*d eÝ,6| ¬q&5 ãZàwØN:D’ä5§¨ÊM!KVfÞX½ñBŠ’IÅÕãBÀr­3„â@f/B¬«¥P*Õ8¬5wO´à)Ä¡pà²k´3³¾•¬G˜Ž¦SFó–5É—n ç¬ë(¶ KÐ~Ë`ùà?Ð_’õ•óš_Ia?Ûq¸‡Å“P…Xª +±Ì;FªÑ ðDJ‚©,]X<ûÝ‹ úÅ"Z”ݵxR© ’ˆ‚¤mÓðÑñʭ쉶կí¬™}@'ú1ÀrL¹îY0·P$½ŠlA ±Ëßq4˜å{øÍ\\cõ„¹vúùâêÓíÝÇäþöš”×Àœ'ƒ”-*ò=À _‘R®@#“*P°Ç“FÙNòU?;Q66˜sgä²ÆÅ _ˆ3(VFbQàz{Ûñ X|îÛ¢ÕtuÇ#°ê‘ ÊÜNí` J£˜¦Í,äE)ÇåX£4®ýY2RÃ݇ÑtFìð°oøçýñy(£û§V?ƒ&g‰¥°íDìN§ëÊhõ÷+!J‰ñ Ø0¾š9ÚÉõTºôÔ‹À¬þ{X¼h4ªò¯yâGÚt•BYÝó<Ô -‡m°™ìº’«éÞ0˜÷‹»Û{œñ*ÉÃÁòaîwlU¢ãŽ/Ø‚e/œ'¸óB¶®Q)ážO§…‚Båê"óZ‰<¤6õjÍChïË?ï8 rFb Â0‘¦ÒòÚd;5䥓ké…Š³Ì!6uÕLç„9%sVþ 3õƒég?šöœ‰ëê³^µå2–û@ç×ËÛI– ØÅrIKô¬«Tú¸CÏHäx´ü‰¦Æf†)t´šU÷ÅÜšn¹Ð;Xs~{$»fªü×°™1Ð+Á¢ÀÃNV{VÂ`³i¥6¨;ŒÚâé‰dÛÆ°Ýc„óvÏÓÔŒ$¬aþ0{°;Þ-ì'õQŒŽ`ÔÍ“á9õŠÜ(Íø•Ë7Ä£Ü`Vóû‡ÓÚ¿üPDÛÙà:Äap¸§7:o^‡â2Â8¼RÞä5\{lìÔ÷h£ã|=-½Ç>âåþôfÅr8Å;â|LÓ¿ÿþ~¤¯•ù>acJñ²‚½©Å¶ûÍ…þl„—À¸ +ÿï—À ÜΦs,p05Ÿ²‡‹“?NþjYªendstream +endobj +1196 0 obj<>/XObject<<>>>>>>endobj +1197 0 obj<>stream +xTMoÚ@½ó+Fê!4*bÜCU…|¨š¦©‡ª‡e=ƛڻÎî8Ôÿ¾³kCí©B³Þ™yïÍ›yÄ0æO ó LÕ`!™&Q³tÎÏþZ„<¼˜¥—Qzúb±\ÜÍ Žas®$Ã:Î3ÃZ•*~lK³åÏ‘CIÊh0y8wÕ&’Fçûÿ‹›ëÖ…rP‰_èÂ>£Ë–l•#´áT‹ +auõyqõ&–o׃1Œâi4áêâ"\ú¾¼_CûŒ¶OË™µÚšM‰ˆ®Â«\ÀWÜ#-–_V°µ¦©!\ BY¡ÐdNŠnð3Ø´PVŽƒ˜¬Fæ# ¥ÑÃ@¨…eøžÊYf*Á"U"0ûÀèÎ 7V‘×Æ—;d?©Ûk°]¡dá) h´zjð@"Àg䃙/ôy°ª¶…›ĵÑdMY²Z¾ÈÅÝ{ˆg]_GÓ8âÇlÈ_FqŸÌ2KNZ—J +ò\¸¡µpnÇ5T‰»4/öM¼=†ßú˜×N8 +ô:;ÔN‘zfÍ–…ï•V9órî +ÔÈmÉo½X&Ôg5@°î•È08²Å-ßo¡a η€Q›õ |Á¸7ìk tv„à@9Û— ¾]ZbOéí?ÄÇä„ÚW×È=wÜ=ìIÒ)~Õ™ôO ±q˜HéýCø›^8áS£žE‰šÜ;PUãˆE^>–•Ø ¨¥mkb«/£ïÝNÙ¿4ónÝ GïDëÉ:äàú¨ÍŽ<Ô¹5UÈôÀ#Û7ÄO/³ã,|xÙ*ñ8»V˨û)ô‰¯ýuçzC“ÚÕÆRÎ9,sÔ1 +˜¸„k‚s¿.ÎûÌ!4gŠ~+˜†Ø°¬ŽÝ÷ÄÛ!`mk>/XObject<<>>>>/Annots 717 0 R>>endobj +1199 0 obj<>stream +x¥XÛrÛF}×Wté%T ¼ˆÔVíƒÖŠU9±b1ñ>ðe ɉ 2ˆæßçt@@”ì¥RQ šKßNŸÓã?.b㿘šÞP’_Œ£1þÂ?bþñ釋ÛE4§ùdM(§I–º(Fbëu3» h_Uå?®¯‡Cd±9KUY·»~½_û¯ß' ,F‹hÉl#ëÉÍ‚xYµ•4™*tu +çHO!_ç•)å`„Ã>Q¥Ž›_Ÿ²þÿ¹8š,£ø¶KÕ϶Òš×× +íI¦>~÷I†âc½ÉŒGî^om“4`¶A©íj“ârÚ‘;âéè+Ó]š›Âx@‚C{“ìqè…NÅRét@Aªà­Ý’VŽ›£Îsí† •ñD0ÀÌÐ@`u°¤Ò¶“—DÞÖ.Ì‚É\©töEœÜhÚë¬ÜÖ)'lЇÔj¸ç+Xž=Þ¿1æF?~ü¼úø­åÊþG§nŽô°+Tb,½³u©U-1üoXƒ{ôóŠr³CN™™¤¸}·Îæ¯éJûpÿý݇¿^íª)L‚LÐÙff±”«Bí´0YèÔƒçÌN¾F_5BÚ™‘N¼·:"-*‡îE/ƒa¶fW¿z{M¯ÓZoaòåipØ—®3-÷ v$èâäËpwɺÔEâŽeEÂÀÖ¥žþIGí/¿•?DÛ*XðÄHË4Ž–.„w;ÂçÃW:!wwùì“iȸ—í…Êõ>üt ´îq?í…@Y1à/%{U z•ÉùÏL´­m3µƒž)4ÂFkI]¯Š,c½¥'Ia±ÕÐQD'`ÄPòz¡2HˆWé‹B+ìÐŒÂê¬a%š:Ä“™¦ÚÎ)Sn×Ê Œ¢Î7P2fVWOëL·ÕÞÖ¡úõ•@쬥‘r!W@{–Qfís]zÊk,€JíxºÀ•^ÿQc0,Ìý`^œVn›ø$‚/³ˆ?U{VÀör\Š‰B:"³;´ëz` Ö56<Ìd0ç=w2R@¥©¥Ë˜½`:‡1–@аäžÏl¥n,1Ma¶Z_ á.BåL·a)¨é bˆ&xH¹o·æÍ\±|z¸o¨á“‘¨V}ZTÞqGa¸¨³Š¹ÉÂÄšbbM TCÆXÆa`–y%תÚjŸáqÐ.mƒ yLé€Ù=ELFÕTŠÚK+ÿÝãC3ÑÀ(† ¸“`Êf 7‡g‡ô>†ÉÜ '©›ö€.±WyºAyé­3¬¥Ó/ËäÕ³+Tž%2òËq. +Îà/‚ + ä-±F2ï~{¢ÊiÍ´ ÕnƳ 4|:b&Mîë²´® +´x†—àéF%Ï8]t´‹ši|ÒvÝhÄò1âáÛÏ8 :ß_¥›·ÛñÜràÐ "¶y‰§—(iëd[–5ŸÃXÁ9”'~Ë2e˜"ÉjžŠ‘í¯›ÿ†»ª®, dKÖ‚a€Æz :î½M È©,gHûyÊXÇE÷ƒ ½š4îå|zkHqð€ÌLuìÔCô¯2(8ðô˜Äæ-mÝŽÏ=° chy(²&’^{‘®>QðkQ™¼lâ!^žˆä2¼”iòäॸ „!Ÿ!˦ú°Ž§Ž¨Êú ôßüƒÂl1‹7Ëð\.Ùø÷«‹_.þßX‹­endstream +endobj +1200 0 obj<>/XObject<<>>>>/Annots 726 0 R>>endobj +1201 0 obj<>stream +x•X]sÚF}÷¯¸™1™1ܧR§nm×5xÒÎð²H l,iUíÊ„ßsw%ÄIÚ8`ÄîÞÏsϽëÎzÔÅOF!õ‡¥gÝ ‹oø­ÇoOÏÂ^ôér8 +BJ©ßWÕSB3ÞO—ƒÖã>‡x’Vgá°‹cƒË0ð±ñ þ‰ ºƒ`¸_ŒûÁ¸±ÊBƒw í]]ASØe-)…£1„û§Ú–¾“t|ê—ùYçf@½ÍWðv8ÑÞ¹ +e­v{«ì¦Ä"7"õ‹µ%-Šµ4”iKy¡_U,‚:º›NÉ”y® [YÓëÃmXSÈ•, +³~•9…v£ 5\8ˆUY””±ü‰¥ ½{§&”J‘Ò+äÊJ¾ªlM¥‘‰(Òef!}¥‹Ô…„V…NIdôIe±ÞDȘDV½JšªBFV;ÂéWY¸øun¢*íQ0fŒÁöE8Uá©#àÛµsGV剈بŽ´Q'Ælãÿ%ºŽƒÞÕÁe¬‘‘ÎbRV¦ÁŸ%’ +wÓ?Üþå xkT hâ›R- +ı™ "=¦‘$[G´ÆÓÖ“œ‹3d¬0°—o:Ãâz>Ìü}ÕÖ g@(9‰Ý@Ô0dÑ’Á:`"Z¼¯®±=¹‡Ǩ٥ŽìÃõõs¦mt8np\ðÿQ¨Uµþê^s›8 ÿ>éÜò9±oÅôçâΈ«(Ø ul×Þí T"DC ï:I»+ó:E,ó[Îaú€ŒAK•ùëÙaΈ¹â`5F)¼û!ÛÙäñy¢Ô;ðÆõæU w +ô•Å<ü\“ŸwÈz‚)ºJÏZÚ|›‰tyû‚¤ 0%¾GÂm® F³¿žèö,„à"«”ºJL€«sÝøÊŽZ±Ê`M’€S8<«2ÃmKg<1FÀÈ&»*É D¾`ªÌÏþ<ûoÜFìendstream +endobj +1202 0 obj<>/XObject<<>>>>/Annots 729 0 R>>endobj +1203 0 obj<>stream +xVÛnÛ8}÷W ‡8@,[²ãËcÒnŠ»i·ñ¾XP"m³+‰ +IÕñßï IɲmÄLòÌíœá¼ b˜à_ ‹¦sÈŠÁ$Â×xÍa¶\às‚ÿZÀ–p+}ÅôõíÓ`:§õy4ƒîfÑÊ?çð<8½0_EÓÓÊÃz0~\A¼€õ Ï—1¬¹ƒÀ:¢á»>¨r+wµ–åžY‘28H»‡??Þ½Y÷30šNÐÕ5÷'ã¾T¢¤f¥*ý±FŽ%è®È2Ëk.ÀÔU¥´…­Ò`÷øNvï³LÕ¥•~™Å½ÀÊ“.5þªôŒÐ?„¾…­ÔÆ¢åêHdt£x%dÌ!F&Û‹‚áÎ\€U`rVñksî-´È‘wœJÒ8NùF4­”½ò«wauYåýn¬Œ…ÍÆ +3’sV½éñÛ\È'ñjoÛ„PέŸEpŽ2ôa‚úG(¾ˆjÑ;ÁúB–q³e²4` +˜µZ¦µ†Îw²yØËl\`pêJ• Ðc üo㺖üúÒà±­,§‚öüÍ”Á•¿žËX|þN]¯¹4UÎŽO¬—í¼“N4„ìÙUBU^0I<‰àcµ%ãF@Q#ÉRÑTŠ÷2“ +ä0’ë×ëײmÕmæÉvu=*•Ë’Ä^†¸³[Ø 3t¦á#¦^‹—uÃ!=RXÛÍMÁ$Z·MÂéÓ3ïD4î@„Ž¥Íž»ZþmS=^ÑÝKõþ ¨n/yz]fª(6.»Ç”çh䎪†£_±ï„vG,ùöø!™NX«§ÏÏ››PÀ^¢°°ý²¼[“Rš•;̈ðC˜ãÇnv½û3¶Vb†÷šªf÷Ì: ìÔ À¨‚Ïe&  ÚÝ»— +Q±­óü$ts‹‘ÿG‡œ¶*ÏÕ¯”&°Ð–Å++ª\ܺ¬THì&ØЙFŽ(Þ dîíuåÌܲR_¨”12Íô _›‹WzæÜò'­Ð3py¾¹¹¬;ø"Æ’5©hû°0]Mµ÷^ܽ˜=ñî2ç<ÊK¼„Må4ܨÒwÂbäÕ¡dÅføŽN ÛëI§Pian[ÔF"Ôã*ÞÀ¦¬:hÉ/ãZ¸ÅìxÚ%:uÆ@r†íÏ`k¥ùáR9NÙëT%£%–4P¦½†›RõzuåSŠxª‹oú´Žž‚÷Ûv?·-+;Q_F+Yü'äÈu£U;Ñhåç¢ä™Šb9×¢‰°!´RŠi¼Õ,ÞP@Ie?˜ÌYŠ£ )²HÝÅŽò@Ú» Íc&Í<2ѯ#>Eç‡ØŠ(Ñnúâîx“Ý Lì•ÄÞf@'’Þªw4µŽÜ Š±’!0&w@í¸êÎàÎñc-"œ;qàäÃM2_„`Vãé2Z®¦8¸&þN{¾ÿëá¾jå†À*«©·¶så(žã ¼œÂh‘8ÌŸbg‹Y´˜/½+'Õ?Öƒ¿ÿREm§endstream +endobj +1204 0 obj<>/XObject<<>>>>/Annots 742 0 R>>endobj +1205 0 obj<>stream +x½WmsâF þίЄiCfÀ` :“Üär/sIÓƒo¥{ Nl¯»»>Ž_Ik›—r7mgzÉ„°Þ•ôHz$­ÿlù0À_&Cf­7À'ôáÓÇçw­Qà ˜Òg·coV-RX´Ž–LÇ^p´çä&CoÚÈñâ WíMo½!ÍÞÑ2ƒÙ”ì5{Nçí ÕXxqÐYíMGÞ‚fÏÉ|XËñâ WíMfžA³çäF#XËñâ WíMnÉ^³çû§AÀÎûŸ´òŠ$1¼0ÄCO'ôÿ´„¸õfy½þÃ|–1e(˜N`q‚° ;i$ +0R‘úfùr$Í)dé°’îM¼)¥{uVÃ`§ç9Û'ÖøxÏ'ßQ„ ‰(KrˆòSÑÿÅ”)ã8ùú ÅIjHð +¥íñçÿÞpêù3è ‰Ç˜“åV ©Iêd-#ÀüØ­<µSç¶&[{¡ÊãUçvusz¨Îb2‘C!6¨9À(Ø%i +¹²°–HÓB +‹v¶RKÞ«DêuA€Y‘:Ãশe$¸ÒP"â]b·¨>ÝÏŸ!J´ ­Ò{U™F +´ A‚×ÀŒ¨?@¯ÇÎëvú¥ÑýT…"í£Ùµè§Éº_Ûb·Âkƒôû&Uk‘þqöèÇÈ°Ô‰ÝÃártä#2õ¾°cvJGÏî%ƒ#L>v"4ÂGsi׉2‹Lâ©å|ñ~ùöݯ— £¦×VeçžæŸŸ>Ì«S' +ÛÀU§eÊ!/„FÍHÖ‹ÖÛH‚8É%¥îŸÀ*ë­ÌaäQ’oèíBî:G­¯{Ó¤Wã6çÎnCªñ“è`0kŽquè=€Ï-hHÕÏ‚Ù†¬4Ì##ñ߬k”çøFÐÛq_ê? ]Þ;˜"-m±£ø4lè\“+l¿aûßL‘Æb«Î¥uÏFk&$ÂýsD®NÚÛ|iÙ$ù,,áVäiº(ˆ¨yQU‰Ä€ 4®ôÑ»”ü[H€«0¿[áQäXwº«Ê»B*,§nÞ1Ãé‹Ò›«Ë4SÈ0‰÷ì W•Kìµ­2– ¹ê ?D™ZC©xh«êgÁc„Nâ[±ö…‡.#¸?po±øª°‰ÊaGäÃ~“c…_âߥè´aÕ¹Vq|ÝE^X¡-ØÔà{ǵʯq·òcuó=ð&EäüeÐGCÍ™âBí©bKGcÈ“Æ*G/ÀIL¾]ÆïÈdʯ¾ƒ’­ÞÁh:» ð8­k"òY]ì”á–#{\Ö—`¹”òP%Êý[†md.µHSG±*®=9TPØš¨7¨×KªfVC«ÎÏ«N™Dw?•˜ÊŽZ¿ K«ÖQ~â@È‘¡«¦}ÿa>Þ~xŒxâ*ð :hx^½£®jh†a%e2ç>t¡Ô³'®gÏ 7}s†ð NR'ˆE¼Õ%—¿2G »°W%˜-­LET~ôD~M ‘½ŽAuâ«îhÁ•a•J™J‘©ˆ'†„µ8ÏK+MÝBê¡ÿ((ãò°y´R?Ñvû…Zpš¼Ê3÷¦yb±s”Å™ Xä þ«:¿År  Gàp‰c¼äXNZJP1 q1Q2…å/DZÒ;3Dìty¤¶W¤"É_÷Bj à êÒN"ÏMËü¶yãÁGŒÁ™Qº%›)€NjxZ,˜OÏóG&ˆ¦ŠôGÊš’ +¡[÷‰¾´aŸÊ‹oVÔîXË3Ý{V7ç9üÂ>ŽvIu=ô†Þˆ&ŠtNñÌÞX™QaQ ˆ»Q¡LòµrßÃ9{™¤ÛšÝ +[©ÎÄëy\KC·:ÌÙaåcV{ð€6W;ƒÁ@Õ¹‚§eïj £ânY²³¸ò5­ÂZE¢ÿ0­ÞIüߦ#|­Á[^ÔYÌßÌáY+jp¯Â’*˜#IZ{õñÞdÈï1ÿ´þÇ“±7 ¦îågæ“®·ËÖo­¿?ÌLdendstream +endobj +1206 0 obj<>/XObject<<>>>>/Annots 745 0 R>>endobj +1207 0 obj<>stream +x½X]“Ó6}ß_qgû:‰ÉÇ’d™Ù‡íRÚÎ, %a ÓôA±åD`KA’òï{®dçÃ@‡N;»$‘¬ûuÎ=Wùx1 >þh2¤Ñ˜Òò¢Ÿôi<½N®èj:Áë!~¬¤œ°• ø×ë_ÂÖ'£A2¦’Æ×Ʉ⛂f'oKô¯’éÉ"›õù𖉟æŸ_Ó`Bó^ÇOðÜ< Vû4O;ƒ«d’ÐL¦•U~OBgäD¹·ij*íÍßã€+ â½áÎͳÎ|-ƒÀßRåÆX/´§QÚ;ò!–²\JK»µÔ”)—VÎ)½"¿–äƒ&?³GR{«¤#¥y›ïSo0J†l4SV¦ÞØ}ý×~!Ͻá Æž¹•öÜí|áS·p¶‹ò•pnglFÆ’ö‡wÂcײò’¶¢¨à„ÁQH UZêÔî7^ftÿìöÜG(F×n¤µ½I2åêËÅp<¡s'Ãâ!”/º)ŠÂìHÝY‰ TNÚË­’»çû7¹ÖÔµ7œ&ƒëcQ\'iÓdi->ÅN ),yùÉ“üX)ä Ã`“"QKÉ>g\~@Î-NÎ:ÇB;åצò”I«¶5Z56V­”˜r¨‹^¹„ž£`¥è”Î-…GÿØ@&½PŠ–Óý‹Çó¶ÿ]  ‡ð ÛƒÕsþÙjw(ÐÏw¯ÿx5ÿíå¥kÒP)^á‘dû3¦Mï×—oç/{w¦(€Ô"8¶ç<#Û‡gre?’A9WÉnX¹,2±!çŠKrå2IÎ¥„'ˆ5UÑð …`.j§Ai ÐVnÉ'5`;ºAãZƒ‰ÎâjÖðµ6z[ÏA¹Àk8æ"­y}`(‚²`OBo™ýñ xør#53¨å·Äø@—”'å` [ÀŽaè„œ4ÿϼ°~~?‹\¥Î:ÀEDÄæA›B¤2àg ýB<©±‘ÍT8d}oªq€ÍèU±-ËTV¬" ÑÁDph ÷ýëSšçŸå4ðò&ðCø!§fFk¼IMÁyÈä=$ʸ%æb Ô€ãÍÛ²ñy"úÕì¸v[ùf¼6¥ B-­°{r^ߪ twÕ&TD ¾™¬%àomk´íÐÂQ÷Ô”e¥œd6.¥ßI”<-·†–á /®‰9|™†¨Q‡{ÎE.|°Å±Ç©P.Fkçã(·¦¤µöœk71^oùÄÉ8à6¡9×·nf™Ñ|pƒî´6;~w{wÏõˆå…~yì¸Bl²ÀÕ¸pàÒÓfãu#£WQ­~øbÓg'"çcëÏô%‰4…Ît ’è=q)÷ì’,ÜAûAÑ;q3çˆeÌÝU®{”¸&òúâ?K ]ß\¦ú&t0ºeééšêf#ͦÝ,½‘”~oÂkcW—´Ã°Ðv 9ìG.NX<GsO?HÌ +þu!÷0œÏ#>哈\•®ÁohÑáƺxÔ¥·‹†æ."˜?y·èhôäfN”Ÿ6**0/r«¶ÀÌd3[<úoÙ(ÌÊè9jËsl­õ„0´.2,ƒ~Wžgqû9…Ú#zŒó-æùw5ùA¥¾·MÐìN軵Ыï—[}Q9ÿ­®M)ŸáæñyœŽÅ(ç‹g˜xÒsㆢîÖ +tÀ‹39oxópØ{ôúú¹@¸püÙõ„Qܲ²ÓsKÄϦãõØÊ7º|÷2.ÙïXÏØjíP­hñ°èTB¯ë» ýwb–Ÿ» ܉Ö/áws‹¨í5÷‹Eç fþSú3oÐâö]ë‹nôæD¦õD4M“éõß; ã ~vûâ§[ze ‹5=3iU6’<Œñ%ÆtD½É0ô¾ž¸šà+Œñ4Þ»¯‡|ÌÏó‹ß/þ['X„endstream +endobj +1208 0 obj<>/XObject<<>>>>/Annots 748 0 R>>endobj +1209 0 obj<>stream +xµXmOÛHþί!U—Jĵ÷H|I(Håè•Tíér6ö&18Þœ×nàßß3»v^LÚ½€ÆÞ™}æ™gÆüuâ‘‹o:>5Ú¬N\ÇÅþðøãÓ{¾CÍnŸ+òܦÓ)þŠéÎ<ó{ §‰{¬ðñ“JšŸ\LNÞ]†G“9[nw;4 a—&AMi´Î>Šlùvr¥Íbi­O“¥¤ÝcZ§j-Óì‰ôZÑ<’š2¬Xc+©¹¹ÎµLÑ«…JŠ­gä oFøŸ‘JÙ‹Ku¯áøˆ£æ\ &4béXwY% +DB3IIÇö¾qi)YôMR¦ŒÃDf…³¥Ha㓜˴|xºÇiÅñZ¤b%3¬ŽcJ¯fN ’ù´Öš¾¥"X‹T)­ Œ\®à]%Ž…*( ªwœ®G~àãDS¿Ý!» „Ý<¯7zN›G>ðQÈwÐ + lqÎØb+c0¾‰8—%V EÚxFIDLb¦UœgòÙé³%gë>ÿ:4®ŽƒÇÀŸâùëÀªxûÏ CŽ®ÔÊæS—x0ŠRd*}z Yy…Ûœhæ3CmHW9„E¶„ÛRózNÆmÊ”DF´ÌH$á^… +ÍÃXfàÚ™]¾õ©—*C¦ºÉ{¬ïƒ¿ÇÿU®3»´ß¨ôa›»²þ˜¡4ÅÎðM¦øÍe1nOy”9•ƒòÑ +çùõœøi•õñÝjùN— ˆ3ôÇ×™©Fÿ€ -.í"gE¡äi*“,~¢<‰ðhCPÂ¥j¥QøÌ+s'J2¹€ßT®S©áÌXf§(â­†E!V°¦4­}ºMßþ‹Öi´éÓûTåëëÑÑè~ภ±°B 6SÞ4a-J^¬²wÔý®ãõ¨^J"7’•¸Wi„îa[…æÆQˆŠ&”T™A^h³” ݉ÕLpM!“Ü®èãhÈûQTj% ÛÓZº'øb¥k¦ 4Õm³16ë0R¿ºý2¹=\ovb}ÍH~(3ÅQ¡d7ÜQ¸7D‹‘ÚÐl@uÙx†*ÉRÇ(½·Ç4dŽgjÃÇ™«â›A­gPç=4ä‹1ˆÐU™RšqÊ“ŒÀh[d›­aµÝ™¨¤ʹÈãÌvÝçáÝosp /K£m[%çw“Àk¨phÃ4ä]ãû'alõö5Q!$ø?ÂïÐå³QG>ŠÕ:–èÍZçh=“ÁÝÕdüþ–– R’Í$x¿¥Y¸£<·”l)2{äV9¡s–écçFöß|˜NßävYYŒ5ÚÍ·ö +\‰° %eº2­ÔÊI¨jÇŽi_¸:…i“”`„ +ét&ƒ‡§S†B;šÙ=3$¶–ü2p;—qÜU…`GÕ€åã ÀŒs+±›No‡Ð‰MµØa—Z’‘Æ‹!ÏPŒÓ< +Ï™3•Ÿ¯¥â$…Á¹©<¾Péâ”ϱ¹pa]©DŸ=³%ÉbUV4 +U(Ô,``H*Ž9`ÛšŠñùÅ0m¥“Òhf‘Éu,ŒÁV¡6¹‘Õ ”33üí´žm²*mÇ…Rpì¤owÀ£FædLÁ&M˜–Ùz©AÓštŽÉÔÍíÅïE–¶ý­G^Bæ,ͦš½¦ÓshlK„>Œ®/i ±ã— ÌÄZœJ‚Ê߱£õ1ì4–óA<'q¤ÆäVU£$ˆsQ¾ìqk¥£ÇRfÕìcd£PŽò T¯Ø/“>1q¹Ô™YzŸ:HC”Ü+C#°§„×µóK‚×-­Xاn§;êº^³í¶‡£ßkw:ƒfs|9ð­Æå°SÙºÞ„7˜‡|!ûä{ÍN³Ûh7Ÿ­;˜úäù®W1¯vQ´Z~Ïõ݆w1{ð>5.šÖEËkºÍñ¸²Q|:»“,»øîô<¿YYdŠ|­¦[ydñ|Ÿ%–eª +øöÉ\±ðj>·æ¿‹‚‚ì2 ݧ?>¥òëÏŠ1Žô§¶0òá°=×mWvŒ¡HÊŒ˜£î¦Qæ¦yé{ÎÌÄRÒ¶tæ8øžÎPR¦–?w€ïQT¾€¤HÍëÇÏXúî²[ˆ´×Æ¿º j÷<ß n.ô1U\wt°b¼e<êåòzÇ7Sá«ëDv:í.4Þz 6:žœüvò7ÍØ) endstream +endobj +1210 0 obj<>/XObject<<>>>>/Annots 751 0 R>>endobj +1211 0 obj<>stream +x…TKoÓ@¾çW̱âì+~äDž‰ÒÒ6öÆqj{Íz­ÿY'¡Âê•-¯æ›÷|óu@à¡0à>$å€x„Ï<Dà?Ã×(Ø:B݇ºÏýõ€qâ (ñ”ÀIä…§[ëÎG¢ohF+Ä[tí‡ø“v† ÄÉU¡3]Åy©&@^Äû!:s•æM]ÈÃ[é„×ÊÈ"…¹4V™°(ïdÓ2*r_=Pöý+Š‡>/XObject<<>>>>>>endobj +1213 0 obj<>stream +xWMSãF½ó+º¸UF؆ÅìÞ`7[Å!fS8•CH¥FÒÈš¬4£ÌHxýïóºGFì&) +0h¦?^¿~ÝúûhAs|-hµ¤ËkÊê£y2§«›ëä?Wø¼Ä·×TȃÅ|•ÜLÜmŽ.>¿§åœ6l]¯nh“ìÌñŸìôc©šV{Z¼Kè¾n¼{Ö9¥Þ킱[2–‚ªSu¶ùK¬,VÑÊùåU²„S\[$ôð¬ý³Ñ;rÅx7^¹¢Å¢¿²\!j\yüùŽ¬nwÎeìÒä:¢Zg¥²&Ô”îiWš¬¤¬2Ú¶2eIe™|®2¡eWµÊJcqaªÁæŒ$Ú9/.cŒÁgªª×±$¦ÅÀqB›Ò„h,s¶UƆ“m©ZR€Ök•ï©upX§ÂTš”Í/œGèƶ8wD&gÚR{ÎüÀýåδ—pdˆ•Cè~K¹ƒëZ¤’U]®_‰8 {ÒRÖy|h«=©q ªÜIˆ¬UákH&Î7pv4!áR«g ]àJÃRUפ‡:¡ÎfÛyÕgg~:R¢TR­-1Ô8•Qá¦YWkzdî°#fðk3„̘ç.ëjä1D»¼N®˜wïvA­6Ä,!SU0çupU'QÞÕ´ÖíÝýã<øï¿Ês @s„´èlÆ—&ÐdXfÀ2¡_ƒæ<ýv¿~ðd¨Ì¶R8æjÄ›0@® ~׃ppyæ‰ þtvÔÄñbý¡h7˜«]«á}ËÐ åV¥LÎÑcñg»o4È๨“–Û„aKõÄgße±àvOŽ‰Š†Sà<‚ŸÀ+uaÕ8ìw©ú}™ÐX§Ð5óÌÚCø^Ó ¬ÛQÑU€´¿*õ%çVè©*†#‘¤¶Nsn;&°ª‚#îX狼Áa×0,“¼¹N¡N/bï>ýò¿§ÓwOgOgS"FâFÑ ˆè8ˆÈÐKµ +,š@¤aŽn½ë =ªÔT¦ÝËsÑO®â€Uîj®f嶈x.g2oH2e¼Ô³2w{BüÓÃÏ·÷ë¤ýÖŠõÚA¢i&¼rð/™1Œ*ëÓë/õ‰IUÞ&ØKf¤Ò%½š¡ +ìeiÄÝ9ɬz —‹Û  xP¸QÇdkK!Ÿ÷ÑÄÈ»CÚ𙕺ŠÖ€”z?q_+TÃ0¸S-›ž±òâó«þfÝOÑ‘ÐRÒ½ëüèjöZ(¦¯¹‹Ü£Pº®Ê¥)ƒn{EDÖi ø5ìS>‰\¡1K 4*óqJôõ†> ±>( 1ßÂ:#Ž¨îxzZ4¡ÆئR;gõ@›  >› êõVù¼â© Ù•qúÔõfÖgËM2JŽè¿NŽ ™KÜ­²ò`Î žc[ÇC}áá2 ºÂhB“ŒÉsÅÁRî¥Ð¥Ø•Q#¦î„odKz&ŽB–5©ÉÅúIg´j:ß8lHàÅ:,GšY‡óÌH¦ dY{¸ñʼnSýMÕÍ0ŒŽûe°såõe¼bÅ¢¨¶ZûÑFq™Ð—¸LìTì÷âówV‰û‚x¹D² ^òx1² vK¥ktÜ18LÙ$Œ£_˜Rêªl½Ê¾ÂÀ.®äý:‹UP”ë´ÛNr¯ ˜(jAK $ºXy¨ô¯1¼ £ny®¢|ýà(úµ}ØäýEŠÁí±ë´˜ãq8é8Ùk†rÚ–òòÑ¿ËÄA˜ä*nÑŸo^^µ.çñÍçÿ¿Ü]­®’Õõ ^±†¿ljÿ´9úåèоendstream +endobj +1214 0 obj<>/XObject<<>>>>>>endobj +1215 0 obj<>stream +x­WÛnÛF}÷W ŒUIeY²óRøÔq][m^+r)mLrîR‚|Ï I™bâ¦(Ê8/»;3gÎœ}= +h„ÍÆt:¥0= Gt6š §49Ÿá~Œÿ…¦X>Œ'ßùp5?:ù8¡  yŒ³¦ç3šG„sF#š‡½{ë5ùµòdb2ž"«]ö³§­-ž)¶ílÙÇñ¹µ-“ˆœ7IBKMj™`»%¿ËùMN]P¦R|t´Àõtûøçí#™ìÝüËшÁép z±Itª2µÂz1°†}y<ª,¢öçÚld\ž¨JŒódcReqíU¡Ý°¶2ž'låÉ“\ÛŽÆç. »u&[QŒA„ªtâüÑsìkµ©‚Y%v©:^•ÆTÚ2óLjÑsÌŠ6*1Qó¾1Ü„÷¨S.%6 ËØÜ=\ÿD¡Í2zc3¼ÃŽÃÉçÊ2ŽÝôÄn_ÐðëÒIÒ®ˆ‡}YÕÁ¶öµñ©ã2qçQb»ÀF+í=ƒ²4Þ#×Ë +ä¼°HpÊ8{k ÙÚQ® +$Yr$1h„”âK„Pà6–fé2êøc2ä_ûhˆðã!Í׈Ò&|æpe‡8 .W¡æ¤ø­†ŒšÍ,6À{ó´èéÕDcí¼VÛD4^¼ëwÌËæW+|ÎàJpÜ×Üîõ–@^‡Ü ¶*bp2»[ +J-ó¬ÀcwQ •xb¡>ŠŽ]pME¡bòÀ} e¥¢Du}r®ãT|Ç"Ä ÇL2 3­#uS8gH°®@ªVÔ$¨Î¤ð‚efa‘ÁªW³ð#Uî™PÝwT{ÉØXô\®CÝÍâÖøµ$áØp™Æœ«ã&AˆÄ¥KIðâãpòñ‚¨ ËÎàtR•cp6œ 骩AÖ9råN¹j׫X Æ3(Šøsc¸Ð‰Rœ'•.Ëa0[ôT’¯U 0«¥ÝèÅ»zÁ*´d.•y¤¼‰,DFrƒWæ¹-®Nö +'&TB?áàüsÁ8NKC¤ +ù…6B‘òŠ¼®*XqpWN¨pm´Ù‹V£R®–‰H»°0KÐc ²Ç¬?\A±V¾%Ëœy™8Ö Žç\Ìûc›òŸó^}ˆPe—Ñüúá|¨s=l8‹i®<ÚPØR@6W¢™+äqO¶’¾PqlB$…›ˆH¿Y‘QÈ´ãóÝý qa8xÄvüÑ Vqkº×þêî·'i6î›’O»eEk¯bôZ”‡[™Kªã ú™(/Œ,oUÀ”+œ¾–ºØ1éPS]/жÕ×9fcÔþÀöÇÍÄ+|FÜÐM¡\p:c:‡BfA à3ÐÁzŽWµM£^» sѳï:Veâ¡óèÑÿ2úÆglßçü*l*ÞIüŒHãZÇ´ð5Õ@ËáE½L:'¶âmyj`©oMPB›Ôý–§QÞö~… ,wÕìHà"zG•¯6ƒê¥ ù›~Ü,¥˜eÏq:D£÷Ú^ÁØ8Ôg×áÎŽ>c–À Agýýýý¼ËBd­Ò©ŠÕ®âþ~Àhqä:ÌïÊl¸ +=RÎ+ˆÿë5êSê£Ïê—h¼¥J:¨p“5«åÊcÆ¢Çä¿g¢I¸ƒ£ˆI翪ÍÖÕÿPØ\JÖ'hpƒ‘FTPÄ|ž„Õ±Û9²i2ÊI“–€±¬j A«%CúêÆã'µ3R‰'Jœø…-¶çY´n×­6òºÑ)žN*G F* uŸg0¯L&„F¥ž S»ágˆœ‡ˆßñŒ2«gäà“alì;á:Èwùp§†!d +C””‹È¿B-ò\p¦&U5ÑU¼HÔŠûê=âL8žVÑÿ|l ²ñëŽi–ŒªõA ¤%ök¢±•K¥Þ€’Çù†$€eOöî°qIÈ0 TÓ@¿J·¡–%Öч*'#º¨;®{=ýøZôn>]Uã+èhxÎÙ<ØwüuY½ÀÝUó ÷×õ=noZ¯o¨¾w½4+©}Û¾o­ —7Ïü·ëÍóÜ©å2xõõàîm¯Þë÷kß|¥oºóò“GióøýùÍUãÃËãøpúß<:è:/ÞFHŽ©ñeï[Wýöôõ•sòñ¼þõLñ“ûü”¦³ú·å姫K‚d~á!áƆeŠñKT—‘4³1~lG½¿“Ùd8›žc`Æê‹)r;?úýèoÉ>ÔÕendstream +endobj +1216 0 obj<>/XObject<<>>>>>>endobj +1217 0 obj<>stream +x}XmOÛHþί˜o€”¸yသN'%PNÕª~Aª6ö†lq¼©wMŽÓýø{f_g M%'Ø»;3Ï<3ó¸?†4À¿!h|Jùê`úpðáj@éa§çøQÐ  ôõßýÿ¼û¼óàøáûÁ€úÃAvŽãqêno÷n…CñåvloñÝôÌÙèÛ„ש»^` þ¸ÄWüÌƼüÀ¢ð‹ºî^Rzj|Øù~<úúyvÿxÌK?\Ðpè±ëN9¸ ]e¬ªžH/hL¦™WÒz<öhÔ£ñã1庪dneAóW²Mµn¬¬yÑVÝ°¦Ov)¤BS¥-­…14¯µ(ra¬ÉèÞKÃèñ8±ù¥0ô ­D¾T•4¤+R¶œ ñã“öqû`œ<ÈhbL³’´Ð5ûA+½’•ÅOaI”¥÷-1ݵäê©©£Õ4—¤*w8u£ëç'ļFÀlÁ¨ÕºT¹² +.ñ,3ºö1Ðløí‚ãð@‚»Ê$†;¶Þ¥^ »L²¦i­7ßGJfÀ‚6 +îçº,…•Î#€ŠT"i¦·õpÇð)1­L7RXgn ¾À¦¨Ši X·ÀÓ[ˆjù° UM3i§Ÿoî©^NÛejÙfáÎè4;áÔOL´†pv’1ךÉÖ¬{$KO£.Ô•ÉCþ9p,@ëRä’a—H3™Y`—µ”‰ß-cE‚uŸ»‚µN{¾J“Û( ÆËUaòhLýÄ(œIc|®ô¦"d Ô¹(¿³,È®EmUÞ”¼s5”y7¹4N(^DeÅ36± +·*®k,d4öêÆÉë@8PÄH ðùï½äLy³uBaRšÞ6µ¾ß›^,@#³5;Ë\T¹ãˆ<|A(e„ñšÉÌt'ðfs<"£‡Ÿ„툊Ôñ¨–¹T/®È¬Ö2£\г”$±º."Û"‡ÑŽ”œ­{"FÇžá×0ïöç}Ÿ¨¹@GŽ§zF¸¥]é:qÁò9h±tô-°Ûó¢ˆá=Ø#ÜF»jlëÐA‚>ˆBàp¼‰qö?%\ô5ÐsÛßãžs6¬äðÑ*$·áCÑØ¥®•Y9tõZyè2Ê&þ„ zQ"нMc€6æ2 2,":ÈŠ¬Üh{.|Þ›ã«ÉÜæGŒìgÈì²ËÆe_С­qŽ,ëÑ–ÕB‰y jitSç2"> #ôº3<}ÛŽµ‡s}Ñì­}ðOŠdŽiN›%0ðs&TzO‡|#÷%m¦<éç ^¡€½-_=”Q D^;ò!wœÕJWýÝÌÆxÚ¹ÀU„<­µr#<’/Œ¼RëgnM ÌDLBLJ_õl¤Sx†^uƒÉÝ”;Åó7êØ—’äUR=-çº^j]Z¸½lc#º"Ê@t[qÌl}ŠgƒÁËgvÄitâݽ—>[M6õ#<Œ|¢¿PGÑ¡ 9½ÝnÙ¶¸Ï ’=ÞÎp»ÉI‘íŸ<7&˜fÃoSw½p×KwýÎ 3' ýY£íf¯Twþæ³ _Ý•ÏÚÊÝSÆ],Z;Ö¸Ø ë®| +Vx ßHÕT§´cuK‘Ø|3÷½ÎHÌMH¦rÓÖ9v¸Ry­!OEõ»lØšRq¦7$ÿ+hÓ¨çF¬Èh&„ñÊ€'1š +$§#àÞ^ +1Ÿ¼Œq®ú©ÓêÙ„•&óZåËZWê_r¯SNceôÙBqcZºŠ:ÿÑÈú5ðŽ¸{<âü@¨eAŸo»¢(Ðb‹1:WÀ®p6\L³Ž¼£¯7wþqwóåö÷áô·ÐWY÷Ñ@D]èßÐP½„HlíÊÔ0SαptwtéoÀÈF¼@L³uSA:ž²¸ò³4aÐ3‰yœjeY:ùãZ&ˆÂ­do&_Œ'ÞV€¿‘UÁð‹ è'U¥øå^GÖ"†´B‚¾\Þ¢ÃÕ–†ãs4~ಠ»xwØæÝ‹inAóTúhl ɹw +þSÕ¬FPe²â£âPö +9G18̧·Eäß¼ŽÇ}e°›9¼ùð¿Â$¨¶Ó˜—\;}» Ø0ùRM § +k TJ®– 8æ,jƒOe´¡]rÑ"Œ“¿˜Ì1 ;Hº`c¢Ð¨gÞß©§ô%Í™RáÕâWŽþÃÕyxsžžeƒó1~ó[Ìýäz:¡ÛZÇÌ9^C¡ÇÙ[Þ×Ëûg#üEq4ü%;ÉükžËžoE¡ÿðŽ“³“ììôÿ»ÕÏøÖ§‡ƒ¿þ$Œc4endstream +endobj +1218 0 obj<>/XObject<<>>>>>>endobj +1219 0 obj<>stream +xíWKÚ0¾ó+æIó ÀöÆc÷Ô®Z©$d‚Ùxì®í€¶¿¾3v‚ÙˆªÝöR©$gb23ßØão&ü¥0Ê B±ïL·7 \Áb‹ Ç(l ‰“$EÑýR­%·®©VGÃá#3–kœþ Œí-î; DiQ¹¹+¨€Ÿ¨Gœ'©¥ãý¤Aé6]ÍÂ>Oú4NÝ8sãÜ×}hY;W¼(ßf«É²ûfÙCÙjÄYçN¬-gi<¤Ø<Î,%õð„8Ѳ7êF™­æ/ƇÑ6H0ä žð¥+í§«ëŸC͸Û|5O5wPs·¤ùŠ â퀹>pmà(l œ#`[Ú|[ò=0ÍA*±Ê–J ˬ8à Ûs“©·7HSŸ\QæÖpbQUø¦„´P2¿SêAÈ;’Ì + ˜uG¥ð.îʵҥRPŒKHƒ¬4dk·Ã90¼£&Ê/¾ºV¶ì7+ŸÇíŸ÷v²ymÁ’%wOÎXËG¤Žw&|6ŒdtA~1bÔ}¬¸,8¨-ð—Ö &fAE¥ù¶ˆÙ%ŒTG?iÜùÛ©‚í`ïÏÕÚ2†¼ȲK›µìÅðµä„ó$‹R+)¾sÞìðtÖ{G>6jÏp…[NÐ¥[ŒÜq|Ÿîl1[ž1,-ÐEXÄ´LnPC!3„é,†‰K—x%3ç7>£ÐóÌ)DÁ"Ê4Fž[.ŸEC©‚=ð:¿NÜe¿ÿ=i²¾fäóSQ&*hHù ˆ'¾¡d#¬wæ¿ãæ¸]\¾óIw–êÒòÛÔýò ûãö/óyÃÆ—ù)¾Å ¦’k$¬~]DΨçwh=”b¯¬ëÊb-³· þFHtþÔw¤x‘¨‰Ù½=,JH¨ÔTôjÈËÀîˆx]ýÏNg,­k¡suNóB`Yq(öÂ*˜¾ÞAMÊ1ÔP!r¬ŠœË;5¶Á†µ™#6±Å ±¥HãTÀ5ß«Ö' +¢¬Ný\í_m· Á~ÆÃÒ‰Œá=íÍY'ùÊÆØ÷y"m²ö•ÃGÂ9e^”ÿ²$ýißûÊóMß>®ûöt8Š“qÃÑ°þš|œNà“V÷¼°0WEµGúÁÆ_IÊô¨QˆF~Cnºé»xÔZZb,Vhe°ô>/XObject<<>>>>>>endobj +1221 0 obj<>stream +xWÛnã6}÷W ò²))¶ÛIÑ ½ÈÃzÓÆhQ} %Êâ®$º$•¬ûõ=C‘¶¬¤è¢âÄ’8—3sÎŒþMhŒŸ -¦t1§¬Ó1Í.&ø¼¼ZàsŠ_#©½[Îï.i2¡U#ó«­rÂãã1­²ÓÇ]“•F7êoá”n,­¥{–²!WJÊu-TCµ°NZýlñW49U:Õà†¥gUU”éÆ©¦•ä4é,kÍ­[÷ÃêËhLÉä"Âÿ©+•%[ê¶Êá‘ÁƒÈwø#œ$«\ëÃIñé<½äc÷I…È ÝrL¿LHãsJ…P•õAºªô³j6]8>„Ù€J¢¡¥¨¥%] ÚzË–ð¥!)²ÎsÉwÕˆ,“Öªu%©2Ú|¥ÂˆM-òEøŒ’ï̩@8²­4¢–KU'íL{Ñh#Õ¦\ëÖ”Z^eõÉ'(\m’Æ•}·ÎÉz‹P6€odæø_ÄnÑõUb¼|aº(<þF£WÄÈZ?q>F×ì49*ÞŒï‰{ú2nR7{˜ˆ¢+²ÖþÂ{öÁýv¿|$4Þ“D+)ÊÚT;ß9\dÜÕ)<æ‹©ÜË2pÓÚv БûŽZËmÒ]H”Õšýh´È3ô<-¥{wÿù‘ÀDð@Ë$Ii…ÞE´- Ð̪ZU Aå])8ðÅ» +Qr¼ôaŸÕ¾Ð±;/:ÀÎï®iº¨÷Œ’ù8½bLfé,¥Gé@³ µ[ØêAÄô ŸLéœ}ìˆ#èQÔkžÍJt,ÓçU“ƒÜ´\Á.½¿] ³•Î{Bº}g@Bs‡«Þê ûèùz’÷¤n©n²Ès_æoõ–Q}L¶^§hm4„B©ù:À·²ø(VtáÞëÑ@¯?6•^‹Êþ‰™·ÝUH¾Ãj¶Ç=­ §v»ÕÆÑ[ÚIßJÇ°IúÚá…UîÝù¤të99I¯S”°œ#š{+ z‰•+—…h+ÏV˜O Œ`HJñ9lv¤«O¡ÑúÛÎàÀ)³×&Ѓ…ÕAÑ7 ˆm7 iͽív»1â†r„¸¸økðüÌ·‚´p¹£Jrÿseqiàù ½iô.Š€òãQ¨N¨H'_¨HlêO]ñjº’NŽ±?ý/ÄOO:Þ•’ž’yÅnû,µ é÷¤AÎÞ‚ªÏ ž,Ð`1ȆiÈ¢}de8w~Ge´ +LЬ?Ÿ—á„[Å“&¥š–ŸW·ÿ“dè} Zk ô£a¥Ý?x ÷"Α.¼à5#Ðg°oŒF-3äÆ]°§ªÊ$%¸#»F[®¡ä:kyúyí‘Ì%fa…–^jÌr¯€=}ñ†;‘Ö#;#·•Êxì#?5€Ô£¶Ýg$^#.|Òé…Ÿè•üddó¤À1¥[KŸTf´Õ…ƒã¢E¿ÂBÌ!tpŒ´¸Ýít¦±it@ü>/XObject<<>>>>>>endobj +1223 0 obj<>stream +xÍWËnÛFÝë+.¼©ÈŒ$[²\4â棈“Æ ²hº‘C‰ 9£ÌQõ÷=w”ÄH)²jmøÉ™û<çÜË/ƒ1ð9¦ë ]Î(«£dDÓùe2§«ù5~ŸàËH*·éàÉË+)-pe6¿¦4'(ÍÎïu#©Y‰ßJKU©$½~ÿÒý›”n_ÐË”J…‡’l½H2­ +*ÊJ’.Ü?D½d¥ù* ‰¬)Õ’„u>ÜÝ?„'ÒOƒ]Œ/“ ¼Ÿ—•U‘Ð]A[ÝâLC ݬܭ3>ûäå4D|¾)•%Û®×Ú4ô”¶Òú1¥ó3Òë¦ÔŠ„Ê¿cÁGø”~U¢–¿œ²<©z‘÷"Þ”UE…(+j4ÙF˜& '&³äŠsJWõøj6šÖÚÚr2ÙL*aJm©Ð†3uj×”Ab ÅÙ½±(]B0ƒúÛP.øÑãwzF Ä… ØÜhó™Ð.QÜ”¥Êá„n¦CòMãzÅÿÞ§T‹l…îsï€NDé†-å²52G[{>×(ã@ì›y®kxô‰X‰ëù¿eÒeϱ‡ÈC!þž_ë½Xׄ'/oh T3¼/.¯|;ÆÓd–Ðîv·¡ÄŒfüæÝï¯Þ½yÿ–MïóãbrÌ\?ÑgtæT§NÖ¹+#üà2à²=ŸCWY¡N¥åH¡$JÎ`óAhðò€kÞ0óÒׂ^ Û€ƒ.OüüxŽöíSì~ R?îye ”`Ö +zkÊZ˜m´ùðctUI3$Q5+Ý.W.E]眅:­+±µžÑ¸,íÇG=ÇüÈ£'$Pû’‘âEŽ¼ —‡ô8‘Ð(Û€NF×TéLT@®Ë<\´®5 «ËÌñ«\‡ð•øŠ¤#ì‰Á\fåZ8‚Éc-n× ÎéïhDLô€°•;ì‡xzéÆ´$hi¿Ñm•3>„BºšÍ©ó9¤V Ö‡>´ž}Žøª‰Ryž60ÓóËUXi¥²¡ÜQ†¢ÏúZ|†•¦¤±‰]˜}!¼c%ÞŒ¤úZ­j©xÆÈÃ"uîë’Ç•8@9PçEjäNhUm{ â÷äxVkT§+(±ôŠ©yµ3ìùdRr.Щ1¡–qÜü¹¬ôBT½‰µ0-GèÏlu7ê ^q˜qdêíMOÖÔ°À—¨,’‘…4xÚr™9øcäqS +ã™ôFí`…øMŽJ6ºW4r»Ã©¢Ø¸@üPUFt$}$Âljâð~1ÂþƒYOdØUñÈÁP°/hÉ÷c–WHºÂ62›úÆeĵ%l'Y‹®¢ùíÒ4¤ÒïGF~iK#ûD»—7C¿@ùFƒâÔhæ·“™ˆ:/‚q` +æÎfà+V7ÿƒšEÑå{guÄJè´h·CP@ó9X®H@hKn™Š›ÇÍ4c1³º!ûЫFªþ&1\‚}F.4榑².prHÀyÙüdÝxµ-tVÐRëœÊ\ +VÑ–M²a7‘4î+®ìW —u¬ÇuÕðƒôçÚ•;ô×é‡k Ùèo-½8„®pC¶±Æ˜ àÅCšß+6«Íüv´¹Ý +ÇZGJŸ.)Îí÷öŒg>&oM‚u܆Ù¤|—n›¡³¾hœQ&€°þæ· 8”1Ú"†dg”–ß(°-v¯0Qcöcèb„«{˜Tnè‹Ë¦Ö@BŒ'·:ôýÆåyÞ´Æ3¼7Î/ñ†xÉ +öðìõí3ìƒúÂÄ>˜µ<Á±i··^Äã×¼Hæç?²p_ÍæÉl:Á¾ÎG#üE:øcðŒcÉ—endstream +endobj +1224 0 obj<>/XObject<<>>>>>>endobj +1225 0 obj<>stream +x½WMSãF½ó+:>AÕZkËøƒT6U6  Y+Å!ä0’FX i„×ÿ>¯gFF°E.lk¦?ß{Ýüs4¤¾‡4õi4¡(?xŸ¼S:MñÚÇO))1üÑôõƒEpôùò”†C +ؚ̦Ä;ƒÑñUB;UÓZmñè­qhíc Î p".‘6kÆ˺bݾ栛‡wk^l³V×{‡Þã(Êû +&8ê&4eGÔ*’ZSmæ/º"â‹(tj®Ó‰ˆž ŠN·Ñ;*jÆÃkÏJL£u +{çx… uŠd,‹HÒýq˜ +Y"h­0•õZÕYl;» uü6a·‡¯Y­‘¿ hÇZÐvÃȪÖ5O +>Ô1«Â#o"T5~;F2ÓòšmEQ9whö¹¶-Æ¿±ÖÌ è–Õ£Ù-Ï- ÿý0€$•Dñl ßÍÖyU¡‚fÍ0<úÓô +»Ô֔ˌ²´2ñ0›_òSL'æÔÎM]½Ã¤ÎQwù=’›ªù”ש´=©º?q.ÌY›¼Ðn¿E(Ñã»ä«1ÊM:¢åå•kÌWÍÍßFƒDn=2=4Þ‰fä7Ui â¹øžæuþÂ1 Ý»i5s4Nð?ÇlD“)ÖeìðFkoKõˆq„(ªs‰åƒwoöÙoŽ÷§>þ׈?¼«žNfÞdìcËå[ƒ![»Žþ8ú³H%–endstream +endobj +1226 0 obj<>/XObject<<>>>>>>endobj +1227 0 obj<>stream +xWMoÛF½ûW t©HŒ$˲] mÓÂ*Œ¹¬È•´ ¹ËrI ú÷}3»”IJ.Ú"‰cQÜùzoÞÌþu1£)þÌèfNWKJ‹‹i2¥ÅÝ,YÐâö¿Ïñ¯Ò´ _,“åðùÃêâã§Íf´ÚÀÔòö†VÁÌtJ«ôòqC×Ð^Ùš¼*ÖŠjGW¥š”%ë´6ÎþúZUuSŽ©Þi|Ò5ÿB£²Ò]U:£BùZW#Úæn­rr¥œ4x·X'©³˜þ°úv1¥Éì*™#ŒËÑAûQBÏâxoò<ß©W¸'Ÿ›í®&•½":µÕä^uEn+*]­mmà'¸¥uåö^WΠ&ÖÕtŒnàxp(¡?¼ÆIã©T•*4¡½©w”ÂÒ˜”' +%¡Õ{G;çkO_/÷;-áÇAÜîÍ +Ý]“«èi5ðŒgR篸¨\B|Ô”»¹øfmQØ5r” +KgJ Œ¤tŒRWÆerÄ`3Bµkcþ

)¤¤tÞ›5‚AjÜ9fÛ€ÐL»ˆŽVשºÖE‰fìaö~¢mZÇm+®€ôÆTˆ0@0 <5%šÍ @™g't7Bsöƒ”£oa*Ú!ÚY»¤‘鮩¡kíB¤‡Ï­âTÀ‚e¡ë™™¥òJ«ìÀaüžwÆͺC™œ]±"TîÕd(ƒjjp¹6)›56S6=ŒÉï\“sšÒB!íÙø:EvÀß}ütG3ˆ2«óäjúivÜ%ôY}7v“b'†»Ò>™ß@þÑŒ«á›¡Ç|él`>u9xÈæÙpˆŠrâ†(š¼6%Xê ½()/ò©ãÁ¥Èx˜Ÿ®÷š„Hàú½Ì/ê{Û˜*Eã°R2¢õ;^¢èÆOÄ£‚Œ¸kgKBÊôF!pnÏNïC„zuk™ßj×FIHŽe'Âùôe%âóÜÎijÜçB*Ú»êû¶rè)Ñ.¦.bñ7x¶ƒƒ¡0ZwÂÀÅP˜'s”ÊSý7ö‹Æ:ÐOÕõ-A7Ðdjm¸3Ùß"ÉDXŒºmáƒÓ'Š +˜W®xræí-[ê¼À£6µ="è#K88;ôµe!Æx¢ÁÂ}oÏ„äÆÿ.ËÔW„UeûŒ†QY‡ +W¼ìÍèµ9@ñ¹Q¡µö Gkn?ÝIœÝš,_®2‘EÕÑk)ð0´A¿ o¹FUÿ0x§ºRñ ãeNUGmx¼Q‡#º Ø%ý*pŽGõƒ¦Â©àO§¯F5Äñ±qi¬Ã|ê›ÃöA[#ó])*kšXßú0ð>rC'°#z;ß/ÖmL©¦ të_mÚ¾.•Ìy·+È|{Žxw÷p‡¯Î>QðÁVCG&¨È•./ ËMÊ‹|6÷¿9c†|òÇ®dÑ>³o³_—°ûendstream +endobj +1230 0 obj<>/XObject<<>>>>>>endobj +1231 0 obj<>stream +xWÑnÛ6}ÏWÜ—¡)«–ã:é€=,ÁRØÒ1—¼Pes¡H•¤¬ùïw.IǶ: CÑƵÈËsÏ9÷Pù~QÒJºYÐõŠêîb^Ìi¹˜+ZÞÞàó¤6>(Ë›b9}p·¾øðð‰sZ·¨µº¹¥uC¨3Ç7õåýVôA:*W=‰®ÔK×Z× SKRÞÒ¿_ÿk”7©ÆìzY,På›Ê‚îm× §¼5yå’Ê2¯\Ü*V®·2—÷ÒípÞ१õý7 +–‚Яñ'ÕZI +ZoOª¥½H ÃàöÊlx•—ÀÕ’ +¤žF©u\é·vÐ ãÓ¬¼N(Zï©Ž0±7p•ÞÙ§°Ñàƒ$/:É‚­­f’:ë(B ±J‹JÇEi?¸¢Vá›à„ñ­t“Óßês³ÜIzÂa,Nt‘ƒJxÙÐÓwhŽÙ)rÅ +z‚½/‰‡Q˜ˆ=H@¡ ~zÛÉ°en´z•$èqÍåŸÛçM®Æ™HϨÀÓVìÖR£|ìäP5„Äš z©"Hü“•áÚ$}åg£w¬R'öIˆJ‚O$p ´ojÁ „}#—^.ýPoIxz”¡’ƒzyN¦Ú%Ñ¢·â P'´j¦,}–FºxÃIV€4¦IŸ¹Û“W¤t.XØÀ‰ñMFò½”MA_@qtÕÁnô}PDO˜ªà«Vxž%Hnèñá銄Ø»Ùâ+å Êî©ã®ÙKÓx²Q0ºÇÆnÚГÄ¡q°ía°(\c ¤8NØ£„¾©=0Hv‡y¸bÑ Ê<®Ñ‡‰V¡^óiõ¤ƒ<øp"Ë]ÁdW¤ E›òœH­ó˜Í/ä°SÃŒ¼Pm6lÈVÔæ@Ÿ,R‚³Ïðgª‘»ŒfÃÆÉé[áš‘çƒ[hœBëžç²a’øœ2Æ"W¾ ÏXƒ¦’Ž`'ïO'gÍjéæ*WÓ™DT@n3ÊM#ü~†ÖGQ8AOÓ/N%ÒoQÐ×^Ûúõ˜‘xÄ9;»æN¹à”üŠ†vJŽÜö‡‡³ˆäe¹LÊ:¦Ó£ƒS!…¢§Œ¡×!–Xií0d9Qac IQ'j”ˆ©d¡ªX Â#‡Õòe&xPOpÚÁtÚ¾·. Fù j®üŠ…IŒ„ˆÅnòg \P:bÆ(à ‹f™z¶¬¨k ÔáÚËŽ}1¢ÄÆñbر}ì¥AôÌ%W%¬aßÃÑ\6£â$Âè˜Ó½àÁ|¨µõSœ´æ)­Á†M! ®AvÜéX!dZ’- ó!¢#*Æख1²mž²øT”·ˆFÌňÑu“ƒÆüãS¢!UDÂΤ¨¢²ƒWÿƒF.–·-O ÄÆTÈUûYüD¸hP¥¼ á .o\{\?'s~<¹¿ó ”láéz:qxnâ¼î™ Àduˆ·äÎb0>5€lkGÎ6$øÀn0[o;áð*€8Á¥Î:ãn¸ãïXvl3VfÚûoÕ‰À~t=ÿ‰T‡ïv0`ųá†FÈ9RÌDqÎn°o°"zvm„žœwZ°Øf‘|ëÎ,߉Qah$ÁÈ€…FSâ3å8oäwŽÃ:Ù(vEŠÏÆbÙô.øæä.Æ8H —}…2ÍD +z× +¼džßá~î4ý1 ý´–m¤&°€Š™I£•¨_ɸ§â…T¥´ +{~â—½ä*¼‹1rä>Ñ zÆÕù+ßœ÷çÐAWä@{ìÜêUql£¦w~kµ¶ãIð¾Ej™^‡bð"z‡‡ôâ<Ö8˜‰1¼,A“‘˜CÑ‹ÜÎ \ÄB/—üžôYw°+&*ñåòäJgª™aîÝbäªý„À<°4cûFÁ}Wµ5lC={Žß‰KJû—÷Ð +Ÿ]’Qp ’#}>Ñ@ûÃÙÿ9á·Ç _^'Rÿï/ËÕm±ú¸ÀÇ—Û|É-ÿ¶¾øóâƒo'^endstream +endobj +1232 0 obj<>/XObject<<>>>>>>endobj +1233 0 obj<>stream +x•WMoÛF½ûW t‰H´¾,+‡ìÄ)‚ÖuZëŠ%¹×"¹ìîÒŠúëûfHÉ­ŠÀˆ@jgÞ¼yófõ÷Å„Æø7¡›)Í””ãhL‹é,šÓ|yƒÏSü9M™¼˜/¯£å¹Óé™w«‹«Ï×4™Ð*C’Åò†V)!ÁxL«ä²Ð/º˜’­ ›l<ýDÁ5úýê‡æ‡C£éPVé¥ÏmS¤äk­SJl•4Îé*Jí=K™)4>ä +¸²ß+K[;Ú:‚®ðµ!ù&ÉIyRu]˜Dc+òÚ½˜jM>ÇQÏ Æ4šÌ¢)§þ~itÔ½jã#P¦êâStÿí¾K?z O&qÖÛ,Ðc–™D·!¾¿çä ‹Ân=%…A\A/­Ó*©œÿ£D%¹FºÚ D›…öh +Wµ”}  xbžG³IKÙdM£YDàí]¦6zÏõ;|²G”êÚi Ó·Ìs».ŸT+䯀׃ä£0CŠw´vª +Lê¢Ó6×Zë𤭠õ¢¿™ud+¹Ê êGá ÑÙ¢@?ÏPT_ƾ–íñŽÓ"ú’ÑÎ6è^ “WÓNûG¬ä,ˆ ‹¢K³&bA+JµëeVkèÀ(tבXB8¥*(© 0]µ-ñ{­ÞW*–T}Ö™Äã„ÆŠ,[¹˜é> .iSÙ-m g`ýƺ:ÈÊœ-™É®ˆ>p‹‚)µÔ-¼ÆiŠÍšjíІRU£)kg_tÉC„ ÀÃWãd ü[͵€f‰í`a?hr TÃÝRŒJ`§{nYTG#ÑK)Òê9uAK!tHÿ¨ Uµ›ø åê…•çfðb<Â@ç¯[H®¾|%T²a’<ö)”ÞËëÑQORÓíÇ_Žöåó˜Gôï[oþ‘iù/ßØ[á@Šæo:cèzªf?I߈åû+q:ßÎhד7bºÜOUÚ†m§±lzÅZÊÁÞõ¹ƒÙ`º=o\¬›Ì§‡»½/xú~Ù]–à^x!(†‡Oßd,ñœK‰Úâ‚búZ(·†Al$àúE Ë‘ïTÜÙ]¬×¦BptÁˆ7bݱF+eŽr fFC©œÜæÊ«ÑBØ„¬6ÄëUÜquädVø Š=Â=”9í!°’dOv‡ƒ—0£lŒ(fµqý½Ä‚‡øv`Á¶'7¹æRyª9ÔÌ÷Ÿ–¾«ÊuM4Àî·ÒÝZÅÓMi@ïuÏ‘Ä? +\WA‹–]ÓuŸI`g6&ÜÇ°¦^[’P©{‹Ÿ:SØÕ]+q~²˜-ç­=ž€ø¡Æ…W^1ÿa)çݱ»[CÒ’7Ë›·„E%Ã~掊„¼¡Iñ>&ôµÊ’‹Ë‹‚•JAr +[n“ßùÀþßÚª]D·]Ü Z\_ãg B×ÖT`Ð÷…ÌÉ%v¢°UåŽô|çK0•º´ÈÙT4ê½r¦Ø wWŸ—Ýo’É?‹–3Z|·×ˆ§Û‡»[úêì3ï‚O6i\qå£ýÑÍ¿{ÒËÿ-Ÿ/–ÑâzŠ»=_sØûÕÅïÿž¶€eendstream +endobj +1234 0 obj<>/XObject<<>>>>>>endobj +1235 0 obj<>stream +xuWaoÛ6ýž_qð—9C­ÚŽ­¸ú¡Y[ Àšuˆaƒ¿Ðe±¡D•¤ìx¿~ïH)vI€ÄïÞ½{÷Žùq5£)¾ft;§›”²êjšL)]½K´XÝâ÷9~¬¤"r!L¦Àiaõ‘„ÖôðõŽQLi2»AÈ™ªB&—Ð?¦¥LÔÈéÃñ>OãKáéAT[A…@'D­Sõ.`d¡PzO#2W¦&Uºj›d¦.º7((ö¥r„o®þEZ d4ôG+Ãz‰Bd™lüÚ¶žjóö0+sÑå’ôk¤ø×XKŒ’ÐúÄ}ÂÊLª½ 3@Çñ¦cb{ ˆÏú¤.MmZËÅ!@hOÒ½1O![ôà‹§\¢ÕÜ8Cér mo^:ÚŒÏ8Ù\ÇR•g,qNmuW–3U¯ÔH[[ÑVz ”/I  ¹ +¢ÀÃ^JÔÖʃ{äžî…ë¬ -ã‡8æÓÅŠ“kõ(¡) ÍDë@„N%5ÖQå^UXSeÐÀL8Dä’º‚û®o¹½Q2áìù\Mn‘'ŒSšÐ&{<.åâ4ÝŸƒGÁæ9YªjŽ[è¼U™'Ct*†ÇJ‘¿=X]f<.›±Ð¾4í®$pž«rFr¯Lë\¢~Á»ÍuB_ +:bšd-¸?ƒd›q™Ñàó÷t”n´¹fzêpžÛX(Ø@.GtmQ _¢ã{¡k¹¨3I%£¬ wtþBSXïÃ#a¸¹‹@~„vhNX?ˆuÿù]lk/sÀ‚&bبÉÌ´:ç?Z¦¯Tà š¨qp€¤ 2Ýc”ÉÏZ}›ÐC) ªÊä2°}±Ý,üF´öŒ,ÓÈš5p²ÈО#9m<çøߦðÀ·•QÁ9ëräN9G”!5¼Næ(Ù›A!E«ÁÑITAÖ&qŠ€Þ£c'oEÕAÁ Bð^ ggÞC¬£fèÇN¼rQƒ€~!jPÜË#Ó&r,œ1„¨$†7Èh3Ɖè<ŒQo{ISÿâ ¾±È`Ô9a¾í t%·ìœ>pÇ9à MLÍÌDF e1Û¥ç<âx—ÇlÆ,¡ÏÆ®j¬§¦Ñ*¼4‚×`Þ GUÐÞႆØð}äùfØ•`§‹rD ±HäÄa ³ýüa2÷2W.)§RŠ½jý…•Œ ™3c±<0ëÈ øÛÁX-¼ªXуNšÀ 7±žgEË{>¾×"¨™z4tÐ5B ÚA#ct&w+³WÖ5rúYò.ÁÅJ-Ñn´Vcup\׿÷¯*ŠÉGP0ôµ{éïd süö;…_*ðÆhX]¨¼6À½eß—uÙŸgd0¸«èp7y5[}§î×C"îÿ\ú¾ÄêÂRá% Oï ˜VÌŽº`h ´ß]G ×°®xÜrªde` {%· f3æiŽù3øÀ穸2'©ÄcØi ›·S…€ßZØ—äå,q|”a6X•%¨Šn7°€C…?sÁ/¼”²—š¥xÑ»}ÓßÜt ,0gèý© "årÛvÑxÕ°Móþ«±žÏóªA‡vØ×Ö4¯/sgëã䫽£réݶЭ+»ÍÏèþkãâ…-Ø0úý5–/¢àÚò êp ëˆZu7èYŠ ÿê†Òù"Þe>|½û@߬ùŽÉ¤&kyÙ‡¸Lݤ?0¹ãzž_¸ž/Rüðœã2ϧ)û´¾úëê¿Üûendstream +endobj +1236 0 obj<>/XObject<<>>>>>>endobj +1237 0 obj<>stream +x½VÁnã6½ç+¾4 8ªe»vöC‚¶À²m‹¹ÐmqM‰ +IYU¿¾oH9ÑÊÙôP ÐóæÍ›7|¾Hi†Ÿ”ÖsZ¬(+/fÉŒVé*™Óòzÿçøµ’váÃry¬Þú°˜ÏÞþÎfçWÝm.~üõ#¥kÚì}uÒ&'džÍh“]"ûÇ„¾¨\’V•t6_¿¤a5_#Ù&¿Ü’&mwp2µW¦"å¨2-ÉJlµÌiÛQ.w¢Ñ~JÛÆ“ÚQgÊ•ãï¤<=]­ô^Zr2k¬òÝÓò…¬Bl):FÜéõ ·kv; ª¥ÅáRT™¤w© +|9£ªÚÓNi (¥KˆÁcµqŽ‘j霬³‡Uˆ#ªÚKß攉 §nF©;é&Sj •§RôTcéz¥÷j±L– ¼¦³„¤ÈÉŠö}ZmŤJ+N¼æÒ©=£õ|‘¨ç¥r2Ÿ’6í•^VY*Hõr>¡[k íœÏ¬0ÆI¾¶2ž\S×Æ‚L´¬0­Ä™ÉrzåVàøAº— îÝdˆ—Á + Š”C@¹¯rñÙ‹#ÇêZEº>UäL)чd™V²òŽrSýà©Hg;j¥Ö¦È|#´î}dZPò°÷c@@æq«l¬.>ƒ¸³™©ŽHªqêƨM¬ÚȬRl/XéOL'%t$¸žº–•# FÃRù{H蓧2^ÅEL¡´š@8º4¢Q` 2ÏŠMè· +Dxé<¡`ôŠ¹ñ`ë}µ¦°Œ¢üw¹¶§°ÿ¤×xËÿ#Øo¿«ØϯvvÞ{ȵ„g°kòŒa +13“A*ÅtW±mi +_§ì[ÑRXï'Óù‚‡2ƒP÷ÐR¡‚Œ0zîû}œ÷®S[™«Œ‹ý®ùÄg•ä&jýõË3Œ¤ÙñÐÐãýf£„÷æ0Ø6›Ap)J}ïlp ÌôˆQù—·‚rágà›µp>Z†4X ¸ÁÀ·B³åp\…£CL•°Ve.aa#Ô­('nTvÀ4´÷rgÈiåsƒ±éo<õ šÁ  _dÃE—ПØpœ>º^pÁ®·”è¦nˆWÊXMŸ /ÐÀ â‘ÓðL7p}fŒ·\Ï4Lö/Á—pŒÇ7?Œ:å +ÓhôNX¯²F ‹» ©kŠ4ó^pŠãdÂOX¿X~ÂÑä þ„š*‡Ç~Þ`iGC=ÚÀ¯ÍnÔì`ÔÂ×`ð<JÃŒRl‘9ì¤PŽ(;·1êådà$JÓTX\µÌÔNñ:ÝŒd;õ7@ö£Â¦*t+:ŒÆ 5=ÐV› qu.¬Â3"ÎÍw–û"¡{ lf¿®á¶1ú—S,­ß²›släQaÃ~së²d#G#x%¾x ûAÙ’Çc½ƒKl±Ê±Ų̂°ÁR˜²l nµP0VLØç¼øsÅÏ*¼ p³„-ÎkÑ!qˆí@[Þ bpaOÌuÿHLWx»^/ð´\ÆçÚãíýÝ-ýnÍWÞQ?›¬)±Qó†Q^\­çxƒ†·ÒÙt¹Âë÷§9^ 0[óÁ_6\ü>˜Ûendstream +endobj +1238 0 obj<>/XObject<<>>>>>>endobj +1239 0 obj<>stream +x…VïOã8ýÎ_1ê—e¥mhÚRÊIû…²ªD¡G‹ÐÞq:¹‰ÓdIâœí4íýõ÷ÆIøQ`O´(uì™ñ›7o柟zøóé¤OƒÙAÏëÑÈïy}ŽOðÜÇWKŠÜ‹á¸ÿÁ‹ïÝ;ñmypt9$ߧe'£ñ -C‚ƒ^–ÁáR‘ÌÅ*•´S¥ûÆb#É*ø TV$x³ÙJP•Ø˜l,©{q·˜ü=›ÍI6Q9áÃ/.¯Î¾/(MrI*â•ÏËŸ=êúÄ» gâQF0è5ëý‘7äõkeá1–2™)½£LE’¯)10î¨42d'|K…Ìñ[KÁ‹éî ‰<ä½¹²õÖÕÎÅÓq[´¨:{À‚¹G˸4îÚ™ØÁ> ½1I’Q$››$rÂÄ8Üž½À9Gý´@_÷üæªãî~tyJ>òÀ é†5 +þÈó‡-RUÑyšÈÜ>þ2yÝþ‰7bÄn1î`€I,  (”¶ÀÄh¤µ§¤Ðʪ@¥œÐó›ÛÉüênA¸{,5oÎéêìzvvݧ5g]P¨Ed‚½ÀM!a=É`n#3„F‡‘Vù½Ç#ÃÆýc~zø¼ŸÛ)™§[Ç#MóóOçã‘Ùú#Z d÷á3U( óÈ¡GJ“C=VÔ"äªLC +bYyôlYI²$úݨë3+ ¤B3Zx^¤ Ìé8u2±¥m–XúJýÞpÜùBIn¬cZ¿"_ï#Û^¸%ù•ÂEÚMµ“ü+;”%ëØ’H¢X¦Å¯‰pÜáJÁáÇwt·†ˆÒ ²¨_øZãE¾s5GÐc]_× ‚9"W‰ ,.ƒ`†Iw°øÔ2öü¢¸óçÒ–L¨UÁÈ Š|ðσÐÂf¬âà:€ƒýÓþÿC;e…Q+4Î…Ýb4ݸ‰¶‹Y³sxè{ÄîðóiĽ…¶¾·¥Á[.ÇÍ$î1Ó4:ÖÃñâlöíŒæZýäaéB%ÏYnJå“]„áº'ýÚùûãâp4öFÇý&ÀÞ˜ÏN–¿üaKñªendstream +endobj +1240 0 obj<>/XObject<<>>>>>>endobj +1241 0 obj<>stream +x…VÛrÛ6}÷WlŸìL-šÝì7_M£DÔI:u ”‘€–Õ¯ïYr&3µÇŠZ»çœ=‹¯'…øhS2¦´< ƒ’Ñe0¤át‚çFR’K|ì}q³:¹xRÑ*çMÆÓ ­2ÂFaH«ôl¾úóºqúNÙT?ICxëB¾Y}9`b²³$ þŒƒ( b~…e7…Hwou!邏©ûéÊá+Wª”´ÒôN=Iº¯ø°ì»ÓFÿ³f@o?,–”Äß­ÿ¸êýÝŒnEº•´TÿJ +¿‹Ÿ´ñƒxDƒx @QÔŒœQ2£'e\#Šâ@øG:'‡=”“¥¥RVNé +Aªò¯36ü’D•ùºÂ:DÐ~«Ò-•"“$(Sy.¬RINcÎ%üç^X¿Øêt'隱͹Æðqºq4#Ž[Kç@”ÎsÚ+·å/Duø…º]_êAŠÒ k”Àär5¶–¼j2¢²Èéœ7ÜKYÑ“0J7»V—#J …²¬¯KÐÝçx0SÎoÈJÃJáÃIô +I¨ë½¿Y_©.ká(öÛè"£ÙÝ=e†¹<û]¢´‚E$á㛀VÀù˜á" +6RXí…B¹6…´V®‚^µ³Ïó{¿E®6‘HÝÈ+ZŸß€é"BþmQ”Üê’Ra²+Æá`8 w7–Fa8Åíó"âü=¯Â{Õ&—Xµ †xuÏwŸ‡ƒÉÂŒ+J&á ™¶ÑI‚ç‘î•1óÕy-Y !-ä;¶Èí5åªàêhŒ@‡“ÏοꨊŽ/9¬Å`4siªS‡ý30SY•I£ªM¯&ÖúÐì-E¹¤ÀASUˆE*,ÊS>©†¼Ó­ªäOÄÇ\6u{]ù›m³þ‰úº,Ü;íѽ´Ñ:»êá5÷.;UûvÌh†¿úŒñn#]?ÑwZïOáÈ:X'ò°Z +v9ÿ¾ µB\¡‘ÚæˆESƒ£ÌrãÌÈ6u­Y0[N —Ú'ü#ÁH¨ó.ëÙ­v:ÕŒ¹«NÀô*òöìhOïGG›¦¤Zš\—‚-mïÃ×’¾6°I®h³ñÚòe_<\R„©“cš ’aëµÑ8ˆàÁó}lÅÉ°~›TˆŒ'Á˜]yÉ|×R×p‘½€ÓÂ@­”l UM¹–ÆrE0Ù£jÇH({µG¸ÀÎ byÃ~Ð>Ó±}fuø.ïÑzü§üÓ†’³ÏûwZ“Kë Us­éÎõV%ýtñ9¹Æ7äìµd0ê™<½_ûÇ\7Ç´áVAy\ÖšgQ{h¥îí£ížV¹À®Öõ(è¦(èá ÈãñR>¾aÅÚrÝ}}Tx•fl¨`aÑZC\sq€½ÌN±Èx8²×Çšop ™8Pt¦3í.½Ñ7åiB£IØÞ]—×ó›kZýÅ_[;ÓÀ=EWœ9:°]0˜ÄþúûS«Ž§Áx·ä(¼ä•÷«“?Nþ4™šáendstream +endobj +1242 0 obj<>/XObject<<>>>>/Annots 760 0 R>>endobj +1243 0 obj<>stream +x¥WÛnÛF}÷W ôbI‘’%9@P؆Õ/‰Ô¦ô²$WrWÙ]ZÑK¿½g–¤/jã´¨ Ë&wvgöÌ™3ã¯GõñÑ8¦ÁˆÒò¨ôñ†?"þøøóQ|6Ft6šC*i8Žƒ³æ© 9ÛS|>„Åp2æ¿ñc$­ê…h„Ç’âá8ˆ)öO¼)Æa£æGŽFÁøÙjÔ‚ˆÎÙ+¶žGðçZw“A09ôv¹8 +§ç÷i±Â…Fã -2¼I»W±uÒP4ènÓU‘KåèÝݧÅÝÉâ³ß뽧ƒ!‚]d]GM/>ØG“akÒGp­ ŒÞé¥BÑŒR­Vùºwó0¦OÂléJ+%SGÚ<{9$aIðÉ}:2p7­ãZÁr.ÊDüT{R5žcD™u/¨Ôp‘êr[H'I(»Ãõœ&·É-}­¤u¹V>¦ÙЕÊH+ïíe‚Íšº´qnû& SatìreƒêAªÿ,¤¬v¡åXÂîl\Y¼<Æ“… šËÄ#0A^ +›§¢(ö=Ú는”Â3²Ž[+dÀ¾á=`Þi»i±‘4Í ¾RF÷&G–šd-»Ç³Ëº—Ò/Ox_8M`NÇÁ„© ¯Ëx4¦zµ…Í/žFƒ:­‹«ûpvO|œ'”td«íV÷ÿŽEà[é.gwsÒÈFí¨C™Éùñæòú×ÙôsO‚èü ¢™²°æj 8‘ÜÜXGn‡ÜëµÄC»ÜmüZ"¬$½•F86·{ëd " ¤êKûœ‘߶…Èr”+¿—©Ûd´…®ªE@³UMì S¸0Rd{J¤TØêC“Y’ÊÕiGiìÒr6Ëþxà¾Óæ‹«†¿G¢Å¼væ²@ùDj®BÖÍÒÉg.°&òμ¾ç\ºjÛq‘IsÈ΋,k|5m€FiG™´©É“'xj,ìaîjo€‰%–+Ýo}Ÿ[×é±°Û­LóN¦O³Ûy×|+ ~ƒù˜IÂycǧW*s¥ ½Þ/OZž¶57Åá/ºki)öžjÊôNZàŠªm&и<žÄ’cN ¤k†qüPtI…|·¡(õ!§ÚW#íd²È$S‚ "O| Üt£Ç®ÕÂïgü£®8:œ´¦;.OzuwŒ‚¸N €jË­¦;ÆÁ7µW[〇³Ýh x†kÜä©ÑV¯½¿¸¥¡pƒY%NÛîÂùŽÍ¼ô~ÿÖ'¹O7=dåû%>ƒ²=9@3/+ í ëŽeC8»¹¸ 0q„/|ꙌòË5?wý«¶ ‡ +½Ö’®Ä&t?8ä + ¥¯1fÄ ’´ò̼¬áC]¡ ‘wh>7 U9»‘EÑ#™L̤7ëåwd©iØhíüf¹Dk³o*¬F;!m¡ƒ¹ŸWšRô³0ÕóA8íÓy;ÿ kŽÑÁWÜkYîùí±tûõPu`‰!ñ-7Ÿ/hU:bç«ÖYÖÚ†Óv®! 5 @¥ox-Š N ÞEau•ªŽÝ#1!†E•¡šn¯ã>FífLHd*|À ô“j½ÞC©ŸW›¶7soçÏø>…»ôÄÜ4Ó=k·Uj‡Œ +Zr¨²Ü~°ž$høMõOž&SÿO°ÍÚCþÏâzZ‹¢>ßæzqôáè/€ù®Ôendstream +endobj +1244 0 obj<>/XObject<<>>>>/Annots 763 0 R>>endobj +1245 0 obj<>stream +x­VÁnÛF½ë+>)€¼%YR '…È×qm"FÑÅŠ\J›.¹ wiU—~{ß,ÉZR[a˜ ¹Ã™7oÞÌè[/¢þ"ši2£$ïÄoøñåáç^4]ˆ1ÍÆ31¢œ&gs1iŸ =²=-^‹MsÜñ_)ÊÂÁd2Óル¸7¼~Mє⠱g ܤ!äˆâ¤ÍE$&‚.áÅo®²Ø‘å[ÒÎÕÊÑv£ +úô8Ó—>>«Êi[|yªJI:’¯â¯½F3`‹Ó~b´*üOüvx=¥(jŸŽç|úÄ.w¶¦Ô’¤»eLŸo–Od+öÇ8èäZÆ’Ò}¥ Oï‚?zPÎÖU¢èª²[§ª“–e¾’„G†Fnc·T—¢C4Ÿˆo7‘­À—þ°W;/¥O6”U6ö‡õ¨ÖÔ§÷åùp˜ÈʱՅõ³…þc”ª·CÇчp)6>7‡^BiÙ‹ Y5Á¶ÚF¡‹ÄÔ©J€ê°Œô¨@K5Ù¬ÉQÐ'iœ €uJl]‚(45++»2*wr5òBeÊJ13ºX“±¸d ¶y[Ø£ØvõU%Ž!„´’ë5hbnBMžlõWi$ØÜ(¤àmx½Ï~ }_o§“šýAhSAPTý†ÖÊj‹<ÓJ#U¼ßÆÊ”¶ˆÄ€3("(¯‘“û‘ž®uåü€’J6°â6œ@"þßïnîâ÷Ÿÿ\éYµðoÒSX§l zgËë±ÖÂa¦§XÁäÎÂ3Ä‹U,/ÿ ¼:ÊkçÉù¶ÂN•²$Tý‡Ò +¨@^§u[éµ.¤ œæÆÕ ¨¿°5:·=þN0\®Ìanç¼Ê»À4 E¸i0軸£=cöן¶(A±P¤l`Çå+‘Ø" }SAD(Þ€N¬w¾rYÒ¦hx=~éú¨íÁN{A7ú'],HŸ¡±¹R%:ÓMŸzìÿÀÏ€8<{`sS&Þ¶ªe–ŽJÙò¬Ð8™5Cæ¼µê8¼À4Ú³|Koèbþú­¸HÕ³F£„§)±çôážn%zñ#”v‹ïn/——±8<9 +øæ$Ï­|VЗñš;¾ÁɲG9(›™ù®êYО-Ì®euˆ BÙKåEqLÛ^ƒ¶*,é¡«Ò³~ÿk×`ZøˆÑ w™øªÞÚ3PL©U Wˆ¶×å¾ò>/XObject<<>>>>/Annots 770 0 R>>endobj +1247 0 obj<>stream +xW]oÛ6}ϯ¸èKS –#Ùqœ¿½È–Y2£ëÙ2™SMól™Ü O=ð~ºÆ»Í—7øácaa>¿J²ó…Å,¹¥Ì-a.KSìˆO£¹Yv #gæfé-îȲ|³ ‹O|ì·ÕÅôþ–²+Zˆgq³¤UÂÀyù¦­W–ÒeBï>=®>ѯR*çèAÔkAÎtV*’&W¯Vß/®h’Íqþr§½ùúÀïØzz­Ofs\Žu˜KzßxkòNzmš¸uNi:l þbk¼H;ÊÕNU¦U9é†DCøÙjvÚš¦VOè÷a‡uÔ9ÅзË7¦‘µØ@_•u¸J7zØ;¯êo¯È›Áñt]{!K%·ºy³¢r†¶éq¡£ÒÔµö/pªQýiìI„㥣°Út.ܽ¶¢1GÞ®‰€ü:g—ŠÆ4ûz<Ø9vÑ— +‘:o#@ €ºŠñûˆÈHN2³ü¯åFvŒ +á· ÚäºÐ|u„€Lñ£ýÂtMNÂsOÅl7tI¥÷íÝtê˜ùÄØMü5•;—”¾®ž ‰€cçôA–Œ5yC³lgzÿŒV¤²Ô:î&Û5aÛ­+-«ý€²^WQVµÆioìž +c‡U°Â?‘/#â +b 4Ñ +¹å^ƒ Yu9sœ}MÖí -æô]{¤ÉºÛ$7‘Æß8 µöbïø‚¨€‘\Ö§Sw’iàv‘ãÍ¥q>@rœ¡“Yi "‹‡”ëÕú9çþ6]Pbtâ‡øùüéL…ØáöŠimM'9,VRUá‘÷1„'–¤i<ÔÆQž¡›\ïtÞ‰Š +¨×qö²´OˆaCªÁfe̶ì4',áêÀ oŒIˆ}›é¹ù1F Qs* ·* ¤CAÌ2kå{…b"š}àlHØ?wu´>¦Ú”æËçtÿ™¼‘=Yë†3g ëØ;žäͳ”#sN(‡ÿã;D«6ûz*z&]Pcl z`Šd¥C) loô|1Ùu'Khš‰¶¦"òå%·3ÆsC½öåó,Ÿê'TZÓyêKƒtóVáV¦z«TËVjêð×P. JvùèðÙÕ,œtƒ\¡XŽ¸µªPh9ÕÊ—&?¦"é"ÁÙ*e·7ÆÓ÷Îy,HáX¿c. —Ž"XÁ3´ˆÊˆ<\WÁMc8O°~M­Ñ¨ÇÀÌŽ–F¡ÿŒ|ú¾OäüÈQNƒ±ª¹L‚ë¼k õž¡ÃX¼|gzÆr£‚‡/‘Í6Öb U{8]øžA;É|êíÇ/ôöÏÜ‘ÀC÷ÿö*¡”ø2&,ƒˆÏóetcE[j ¹îE90¯¡¬Ö”¦à¸ X)[Lð–}pìéÚ¨á˜@†Œ@ ç4u83^˜±C3Ü& +kê±¹=Eù<ÝÁô†ëùPøBö:7óÍcûZ.”¡SxÕBŽ÷è=\áIý+ê—êØ™C—fÙAΦ^@"çÓ4íž5P8Ÿ»FÛŠ Öí©äŽ5V¡Ç £O”¶ëÖ(¾ $rr#Kd~h€Ôˆ:Lyw'£ößc@ASs8ÈãÆè+Ð@ +Geöì15ñðÂÝzÜÅË¡( +»¨O0bŨ˜Ë‡Žü¹‹uyÈv^žÞ_ŸŒŽÃ Ä–'9ݵ±ËÞáù—ØqÇå×$9Z‰©rœ:&<ÉVK´Ð…æ‹a˜#¨ÎõÆ‚»}«‚‹ÓûtðᦣWãsyê:ÃøŽ¸PÆǸ ~ñLTfqóô~9Ü0É®1 \a¤ÇÉŸÒCõDÚðÍóþïq (§¿ûcuñ×ÅIrÿêendstream +endobj +1248 0 obj<>/XObject<<>>>>>>endobj +1249 0 obj<>stream +xTËn£@¼û+J{rÀ{}Zç±Êe•¬‚6—HÑx L;3ƒ­üýöNœd+Ëžê®ê*^&1"þÅX$˜eí$ +#Ì£4Ì.|ðß(”“‹|rþsŽ8F^úÚl¹@^€ë£¹œÊ½EP`µ³Êì•Yñý+ÚÉlWç|kˆ$¡z–?3^:â‚$ SFœæUmq¨›Ò(áŠÚ(éȼBŠ¦QÅÁXÚ‰Z×z W)4\lÝøÎRg¤â’BáqZ‡*ìkn®×W¾5÷‹gaâû9±Ý2¤Ÿc„–ÕãYˆ~Ù£´k¸-ñ•Ý‘.,õH3¦P{ÕЮå"8£Tè¡O¹\þ¹A•ñ~¦¡±Q ŸŸ›o^ÑÙ#Ašd”f˜ZM!tÁ­Ë¹€-3\£©Y*Ǧ_™ö…öØ¿¤Ž¡H÷„¾]½³ù†Øò|eÿ¦_j[»¾¤¶åcF½t^r^˜£OÍnýùq1 ëmT£„örT™º†P(H«J”Ô4tðºø†L»ø݆'®ùû÷ë_ë§ä)ù—O¬ñP)Í¢¼R‡ƒð[&´Ê°4õ ÚH­·™¬„Þòž;æçýøez”†Z¶¶«†ÓŸd~óújXû1rŸ¸v»ÂgƒÜ …oYâˆÎ¾s€ÙÛiˆáårtSœr —3ÄÙÜ¿ï…À¡gήHvÞËÂÕ¤ý¹ ÎøÀåÁ"áÓËJìë/CÜÜ>ä·XK©¬Å½O:NC·¯Øþ&Í–a6OøCÃq<óÏ®óÉïÉ_{;_Þendstream +endobj +1250 0 obj<>/XObject<<>>>>/Annots 773 0 R>>endobj +1251 0 obj<>stream +x}WaoÛ6ýž_q0ÌRÙ²'-Plëºvöak ú…–NJÔH*ŽÿýÞ‘’ã¨éX¶¥ãñîÝ»wô¿9-ð—ÓÍ’V*š‹E¶ õâ&[ÓúöŸ—x9¦JÀT.¹\>~¸Èó®òëlC å×7ÙjøfèSt´Ül²åÔÑÛíÅüý+Z.h[aïÍÍ-mËèwŠÙ¯µê;Ê_eô‘;ë‚n÷ô¶ßûÛ¯qe~“V¾\­á}[Î`šgôGœ-û"hÛ&Ó5åù`º¼A0ÝÖLÜ(mH•¥c全ŽvýIÊ^ž´'¯šú9^3ëöâlA/—€Vž)¨;\à.è ªÄ ¬¯´aÚ1<3mO¾ß5::Û'£_Œ·WÔ%gž™tE0ª•§¢VížK¸æ˜ öÚ1[Çq¿"˜˜u„eZ$PIL Ɇţö ©@ÞJ¸ˆ9{>/…¸¨´â¼é‹ZÞ%‡Bµòî<›J²­Ùtœ*î`|hÇ]3ú$à Š@¹ xI"G$_r© ¸öóÙ;Ûwd+êØ:Ô–î­éÛÀ ²Ñ¸"Þ+òwÚOª-‰+ |Fÿ0€/X߃£ÊQ#˜§úîlÑ€Ü'd0Ù¹³ÞëAp­?°Ã6æZ+xS)ýZïk„!,QÂY2q(ûAJë̈¬G€tYò=Û±›lY9 #s¼<+‘DÈ0ȇÅÑ_@2>L+ôÎRkÁ#ï{©¡¬vF&’h*<ª# ÛtYçl°…5>óÍŽZ>øîˆlDJbt\‡ê”'aGnë€&2í}ÇEÄ6DZ6Ún¤ð1ƘßP¤­ô¾wJ:ódˆ[)€çÒñˆÛ ‚R3; @JÌ’âŽ!ÇÀ#Ô\áõe&88l ú|yA× H• @ËÎHhŸÚG!ú¯QÌ)öŸÑbÛÃhé}KÆÚ;ø³ý¾Ž ÛðUåŠìD»j-ý„@È=·`Bòt<½bMROixGÚ3Ø‘¡{=ŸŸ*}šËB‘ÖsŒ’\fô[vÊn«ïüý3ù6ÉV’¬(½ç²…>`t¼ÁPÖ¨ŸŒ9;gZòOAE'¹Dû¨‡Ihíî^[¼AÆ’Ì$ÕXšÀÆÄvŠß°ÕèÆFû‘FÐÑ0(-ˆ+ZàzÀÆ>tÊ5Rùü4DÑcÑùÂ:”x„2=LKü»´=öKkÈR*k òéôs{šQ©Õ¾µ^§,NqFŠÁO´•i€ÿ{vGÒ Õ~ÓÖCOé¶0}ɨ² QhNØ¡#C2zv!\+Âï{0 +i«}•þ‰ øAB°ƒ…äã â¥ï¨0BI!˜´[ÒÜ(¶çŽägo Wâ0¢ø=Ö­2zdz=&ø3¬âW,eªö˜Ê‹´0Šb6© v q–V*¦tH.Ú0Cbs:®z/vð†fGB¶ ²õ#OEþ¢JAâdÕƒ|T½‘tà­<m>]Ä<¥zÃì¦U¤h¾ _Û–=³õèaT¢7:§QJœh@Éñ^”$θ’1[Í ½9Š¼!W›†V©ýùNß ù­hlªoùXY-Íß_G¦ÙY6oÒ£±l³So§û8ÆSÖ &“&˜gôù\;+$>*õ’Ä4ÅÁÙg@@økÖ¶­Œx¨*Þ…žwÌœ o„ýð’´†a2Úe„ÄÁ¤x<ÃίÇÐ_çÃu:Üb 7”/Æ@™œQg#GðlÞ{77¶PfÐ^£wø¾Ï~h&‹Æ¶þΚ´aáSMŽGV!,˜ÀH.±˜ÆèàŸ æäx€*­y,â!ŽÍËáé¥È”ôA«p´ñyLd8wê…D{ < *’“7Ì¡ñÜÛÉÌo4îÑm”)#п«¨ÅP§ǽÖ3´û†u©=&A%¡¼¢´q6+cì!m†ùg0!kQEJ]U-|õ\ôNzôÌg´]<+ bE +QÆ‘s“àù»}ü©±’O`ËÿÿYon³Íõ?€`šçkñþÛöâï‹ÿŠ€YVendstream +endobj +1252 0 obj<>/XObject<<>>>>>>endobj +1253 0 obj<>stream +x•WÁn7½û+¦ºTbY²eÙ)ЃƒØ€&Mµ@_¸»Ü#.©’\Ëúû¾îZ†lŠ @Â%93oÞ{Cý{4£)þÌèòŒÎT¶GÓÉ”³éäŒæW—ø÷þMµ|8»¸œ\½õav±x}âÓòèôvN³-kY\]Ò²"˜NiYŽ—+MÇ˟؃dÏ8¶Å¤ô®ÎËÃÑ1i—Â./^ {Éú†¬~Ô–~?Üo"Åón×ú.ÒÖ¤%D{óšJ]óÎ=i¥­T¤BkG]ÔGÞV:pÈ)ÌÎQ÷²?êw‘|MßU[(R›ù¤q LÊ8¯} B•ë­ +U¤Ò·•La¬I;>:@µ±:Nú g‹Éœƒ\G.ãàð¨l§9 ãÊ ç¿ó±)•>T¤(šÆ™Ú”Ê%»vrÒd%5¼d +h‘²wCr·¨¬õ1½Øí7:ÈÞ(a[µ#ç9<W§Äw®L³Ò•)GçúªU@ +)¢1ÀË…¦€ŸK¤°.B¦³éœJ|`ôF…rEÿÜÜÿ «B£éÑÛ®Õ 7S¨RII-§·iŠ2WOÎçòÙÇÉ|Bw.éà”%‚1w` 'vŸ]NÜ »Z +m4’¤ÑÝ×åÍý×ë?èæþþÏûµ:F…ø º$ºô™LÂGöá2 …Ò;§Ÿ6ºL(„¥ìAñÛ˜B¡sX"ÓÄíÞ_¨‚QÊM ÞK¨Vå[£•^•:01±3ÇWŒ9'˜sxw<”öÄ]©G¸ß·ƒBBBÒÝŤ[Š¾N¼ôpÜŸ8 ˆXŠ¥B'êàq¢-*þä aèsè¦*E+·‚ë.@ýå +œCVä&Çtì÷/Ÿž€÷Ú<æk8æ„–+QHí:ä çë½î,£!äc®V~‹ÿ!ÎÍJ´±¬¬ƒˆœí*ôýèÛÍÈ‚“>¤A:&? É¸òå¾DßWC+¿¥äùLðUWBûÀÈÔ´ñ1¤1¡o’µjÍ»P«Ý;á@ÆFWoEeIJÈÚ€Â>WbÃgZ©ÍjV¨„æBØÅ®¨  L@AIœÚ~a Ak‘ÂZë°ýŸ(ÉúËN—› A‘=ß&üì[¼·b¯TÑAÏÍb°ÙÞ*/üÆ!Oo‡Á2í}´©ŠL7.(ïz)æ~—ª*n90~ŒJèºJ+dçóiÖ‘`…–ñ•ìT=Žº…³TÞýÊCráM(ù´£QU<˜|Ú`ÃóŠIÇòpjàŽ\/@-Ç Ä#Î¥›Yè )LkË-à#U}YvÍd;r„Þ dm!§CÂô­‹@90'FݲÍX嚎­ ñã²T&âûh GðÜ^ÓûyÑÃœ6‰§Õ+·¦ +¨ ×ä@‚SÈàì?bJ”˜ ÌÜôp,ŽÇ˜­­kB.¤ŸTÉïuB `!¯óÝz¿6$iC’¾sBÒWPàÍ#*Gþ™€ÜrÆi‘$ WèäL5[NnôÞºÒ¿,éÈ{sêbB× $w®T SPÂÅ_3½[óTOÅHô°äΙ'¹%¬É”†gþÆêYãº'Zc0j2¼AX +ÿêÚ Âï}¸0“Šk~N–ˆÉß U©0ºLƒÊ#1ä‡c¹ÈaxÏ¡Mi3Áú¡ÃØ—b£}³•àÁ`pø~HDïÁ·ѳ7|»û<êÉÁ÷òLÇÒó¬‚ÜR³~E£RÔˆç+xŽW«´O£Tæ ,'$ X9¸¬YpåÞ½úûáPª„YÇ»öƒ-³BºÌcXà³Îs¿ß~Ô,03ø6ý>+–ˆSh<è”÷•A 1ËÀèG]DÇkóôËà{Q¼¾á™¦“ UÎkðå1æF]ÓI——#³ßã¥Ùkê÷67_ŽÇnÓÞ‘>Dak`™ïF+çá&ô…‡'„-ƒ+ä)ÂC É©$ NcÐÊó€_û½·ñM/¬"âm‡aÍý· Ä$N°÷Õÿ\Æ!Ç<›Oo¯ú7³~z]Ób>ËÏÐï×_>]Ó·àbäÒg_âÛ?ê8úÉpàäò ¿­ªñ»ÏÖùâj²¸8×wÍ.øôÍò诣ÿ/Ù„îendstream +endobj +1254 0 obj<>endobj +1255 0 obj<>endobj +1256 0 obj<>endobj +1257 0 obj<>endobj +1258 0 obj<>endobj +1259 0 obj<>endobj +1260 0 obj<>endobj +1261 0 obj<>endobj +1262 0 obj<>endobj +1263 0 obj<>endobj +1264 0 obj<>endobj +1265 0 obj<>endobj +1266 0 obj<>endobj +1267 0 obj<>endobj +1268 0 obj<>endobj +1269 0 obj<>endobj +1270 0 obj<>endobj +1271 0 obj<>endobj +1272 0 obj<>endobj +1273 0 obj<>endobj +1274 0 obj<>endobj +1275 0 obj<>endobj +1276 0 obj<>endobj +1277 0 obj<>endobj +1278 0 obj<>endobj +1279 0 obj<>endobj +1280 0 obj<>endobj +1281 0 obj<>endobj +1282 0 obj<>endobj +1283 0 obj<>endobj +1284 0 obj<>endobj +1285 0 obj<>endobj +1286 0 obj<>endobj +1287 0 obj<>endobj +1288 0 obj<>endobj +1289 0 obj<>endobj +1290 0 obj<>endobj +1291 0 obj<>endobj +1292 0 obj<>endobj +1293 0 obj<>endobj +1294 0 obj<>endobj +1295 0 obj<>endobj +1296 0 obj<>endobj +1297 0 obj<>endobj +1298 0 obj<>endobj +1299 0 obj<>endobj +1300 0 obj<>endobj +1301 0 obj<>endobj +1302 0 obj<>endobj +1303 0 obj<>endobj +1304 0 obj<>endobj +1305 0 obj<>endobj +1306 0 obj<>endobj +1307 0 obj<>endobj +1308 0 obj<>endobj +1309 0 obj<>endobj +1310 0 obj<>endobj +1311 0 obj<>endobj +1312 0 obj<>endobj +1313 0 obj<>endobj +1314 0 obj<>endobj +1315 0 obj<>endobj +1316 0 obj<>endobj +1317 0 obj<>endobj +1318 0 obj<>endobj +1319 0 obj<>endobj +1320 0 obj<>endobj +1321 0 obj<>endobj +1322 0 obj<>endobj +1323 0 obj<>endobj +1324 0 obj<>endobj +1325 0 obj<>endobj +1326 0 obj<>endobj +1327 0 obj<>endobj +1328 0 obj<>endobj +1329 0 obj<>endobj +1330 0 obj<>endobj +1331 0 obj<>endobj +1332 0 obj<>endobj +1333 0 obj<>endobj +1334 0 obj<>endobj +1335 0 obj<>endobj +1336 0 obj<>endobj +1337 0 obj<>endobj +1338 0 obj<>endobj +1339 0 obj<>endobj +1340 0 obj<>endobj +1341 0 obj<>endobj +1342 0 obj<>endobj +1343 0 obj<>endobj +1344 0 obj<>endobj +1345 0 obj<>endobj +1346 0 obj<>endobj +1347 0 obj<>endobj +1348 0 obj<>endobj +1349 0 obj<>endobj +1350 0 obj<>endobj +1351 0 obj<>endobj +1352 0 obj<>endobj +1353 0 obj<>endobj +1354 0 obj<>endobj +1355 0 obj<>endobj +1356 0 obj<>endobj +1357 0 obj<>endobj +1358 0 obj<>endobj +1359 0 obj<>endobj +1360 0 obj<>endobj +1361 0 obj<>endobj +1362 0 obj<>endobj +1363 0 obj<>endobj +1364 0 obj<>endobj +1365 0 obj<>endobj +1366 0 obj<>endobj +1367 0 obj<>endobj +1368 0 obj<>endobj +1369 0 obj<>endobj +1370 0 obj<>endobj +1371 0 obj<>endobj +1372 0 obj<>endobj +1373 0 obj<>endobj +1374 0 obj<>endobj +1375 0 obj<>endobj +1376 0 obj<>endobj +1377 0 obj<>endobj +1378 0 obj<>endobj +1379 0 obj<>endobj +1380 0 obj<>endobj +1381 0 obj<>endobj +1382 0 obj<>endobj +1383 0 obj<>endobj +1384 0 obj<>endobj +1385 0 obj<>endobj +1386 0 obj<>endobj +1387 0 obj<>endobj +1388 0 obj<>endobj +1389 0 obj<>endobj +1390 0 obj<>endobj +1391 0 obj<>endobj +1392 0 obj<>endobj +1393 0 obj<>endobj +1394 0 obj<>endobj +1395 0 obj<>endobj +1396 0 obj<>endobj +1397 0 obj<>endobj +1398 0 obj<>endobj +1399 0 obj<>endobj +1400 0 obj<>endobj +1401 0 obj<>endobj +1402 0 obj<>endobj +1403 0 obj<>endobj +1404 0 obj<>endobj +1405 0 obj<>endobj +1406 0 obj<>endobj +1407 0 obj<>endobj +1408 0 obj<>endobj +1409 0 obj<>endobj +1410 0 obj<>endobj +1411 0 obj<>endobj +1412 0 obj<>endobj +1413 0 obj<>endobj +1414 0 obj<>endobj +1415 0 obj<>endobj +1416 0 obj<>endobj +1417 0 obj<>endobj +1418 0 obj<>endobj +1419 0 obj<>endobj +1420 0 obj<>endobj +1421 0 obj<>endobj +1422 0 obj<>endobj +1423 0 obj<>endobj +1424 0 obj<>endobj +1425 0 obj<>endobj +1426 0 obj<>endobj +1427 0 obj<>endobj +1428 0 obj<>endobj +1429 0 obj<>endobj +1430 0 obj<>endobj +1431 0 obj<>endobj +1432 0 obj<>endobj +1433 0 obj<>endobj +1434 0 obj<>endobj +1435 0 obj<>endobj +1436 0 obj<>endobj +1437 0 obj<>endobj +1438 0 obj<>endobj +1439 0 obj<>endobj +1440 0 obj<>endobj +1441 0 obj<>endobj +1442 0 obj<>endobj +1443 0 obj<>endobj +1444 0 obj<>endobj +1445 0 obj<>endobj +1446 0 obj<>endobj +1447 0 obj<>endobj +1448 0 obj<>endobj +1449 0 obj<>endobj +1450 0 obj<>endobj +1451 0 obj<>endobj +1452 0 obj<>endobj +1453 0 obj<>endobj +1454 0 obj<>endobj +1455 0 obj<>endobj +1456 0 obj<>endobj +1457 0 obj<>endobj +1458 0 obj<>endobj +1459 0 obj<>endobj +1460 0 obj<>endobj +1461 0 obj<>endobj +1462 0 obj<>endobj +1463 0 obj<>endobj +1464 0 obj<>endobj +1465 0 obj<>endobj +1466 0 obj<>endobj +1467 0 obj<>1<>6<>7<>12<>18<>23<>33<>36<>38<>43<>50<>55<>57<>60<>73<>90<>93<>100<>109<>115<>117<>119<>]>>>>endobj xref -0 1367 +0 1468 0000000000 65535 f 0000000015 00000 n -0000000244 00000 n -0000001810 00000 n -0000001884 00000 n -0000001963 00000 n -0000002045 00000 n -0000002131 00000 n -0000002209 00000 n -0000002286 00000 n -0000002365 00000 n -0000002442 00000 n -0000002524 00000 n -0000002583 00000 n -0000002635 00000 n -0000002720 00000 n -0000002773 00000 n -0000002857 00000 n -0000002923 00000 n -0000003007 00000 n -0000003045 00000 n -0000003097 00000 n -0000003182 00000 n -0000003206 00000 n -0000003259 00000 n -0000003344 00000 n -0000003397 00000 n -0000003482 00000 n -0000003513 00000 n -0000003559 00000 n -0000003644 00000 n -0000003689 00000 n -0000003773 00000 n -0000003818 00000 n -0000003902 00000 n -0000003940 00000 n -0000003983 00000 n -0000004068 00000 n -0000004111 00000 n -0000004195 00000 n -0000004226 00000 n -0000004280 00000 n -0000004364 00000 n -0000004388 00000 n -0000004439 00000 n +0000000250 00000 n +0000001816 00000 n +0000001890 00000 n +0000001969 00000 n +0000002051 00000 n +0000002137 00000 n +0000002215 00000 n +0000002292 00000 n +0000002371 00000 n +0000002455 00000 n +0000002532 00000 n +0000002614 00000 n +0000002673 00000 n +0000002775 00000 n +0000002878 00000 n +0000002980 00000 n +0000003082 00000 n +0000003185 00000 n +0000003288 00000 n +0000003391 00000 n +0000003494 00000 n +0000003597 00000 n +0000003700 00000 n +0000003803 00000 n +0000003906 00000 n +0000004009 00000 n +0000004112 00000 n +0000004215 00000 n +0000004318 00000 n +0000004421 00000 n 0000004524 00000 n -0000004572 00000 n -0000004657 00000 n -0000004688 00000 n -0000004806 00000 n -0000004890 00000 n -0000004931 00000 n -0000005016 00000 n -0000005057 00000 n -0000005142 00000 n -0000005180 00000 n -0000005224 00000 n -0000005309 00000 n -0000005333 00000 n -0000005377 00000 n -0000005461 00000 n -0000005503 00000 n -0000005588 00000 n -0000005637 00000 n -0000005722 00000 n -0000005771 00000 n -0000005854 00000 n -0000005901 00000 n -0000005986 00000 n -0000006032 00000 n -0000006116 00000 n -0000006175 00000 n -0000006237 00000 n -0000006322 00000 n -0000006379 00000 n -0000006464 00000 n -0000006557 00000 n -0000006641 00000 n -0000006679 00000 n -0000006784 00000 n -0000006825 00000 n -0000006909 00000 n -0000006955 00000 n -0000007040 00000 n -0000007079 00000 n -0000007164 00000 n -0000007206 00000 n -0000007291 00000 n -0000007333 00000 n -0000007418 00000 n -0000007477 00000 n -0000007521 00000 n -0000007606 00000 n -0000007630 00000 n -0000007677 00000 n -0000007762 00000 n -0000007814 00000 n -0000007899 00000 n -0000007948 00000 n +0000004627 00000 n +0000004730 00000 n +0000004833 00000 n +0000004936 00000 n +0000005038 00000 n +0000005141 00000 n +0000005244 00000 n +0000005347 00000 n +0000005450 00000 n +0000005553 00000 n +0000005656 00000 n +0000005759 00000 n +0000005862 00000 n +0000005965 00000 n +0000006068 00000 n +0000006171 00000 n +0000006274 00000 n +0000006377 00000 n +0000006480 00000 n +0000006583 00000 n +0000006685 00000 n +0000006788 00000 n +0000006891 00000 n +0000006993 00000 n +0000007094 00000 n +0000007195 00000 n +0000007519 00000 n +0000007621 00000 n +0000007724 00000 n +0000007827 00000 n +0000007930 00000 n 0000008033 00000 n -0000008082 00000 n -0000008167 00000 n -0000008214 00000 n -0000008267 00000 n -0000008354 00000 n -0000008403 00000 n -0000008490 00000 n -0000008539 00000 n -0000008625 00000 n -0000008689 00000 n -0000008776 00000 n -0000008826 00000 n -0000008890 00000 n -0000008977 00000 n -0000009003 00000 n -0000009044 00000 n -0000009130 00000 n -0000009180 00000 n -0000009266 00000 n -0000009312 00000 n -0000009399 00000 n -0000009441 00000 n -0000009489 00000 n +0000008136 00000 n +0000008239 00000 n +0000008342 00000 n +0000008445 00000 n +0000008548 00000 n +0000008651 00000 n +0000008754 00000 n +0000008857 00000 n +0000008960 00000 n +0000009062 00000 n +0000009165 00000 n +0000009268 00000 n +0000009371 00000 n +0000009473 00000 n 0000009576 00000 n -0000009623 00000 n -0000009710 00000 n -0000009751 00000 n -0000009837 00000 n -0000009879 00000 n -0000009921 00000 n -0000010008 00000 n -0000010057 00000 n -0000010144 00000 n -0000010191 00000 n -0000010278 00000 n -0000010320 00000 n -0000010373 00000 n -0000010460 00000 n -0000010504 00000 n -0000010591 00000 n -0000010648 00000 n -0000010735 00000 n -0000010831 00000 n -0000010917 00000 n -0000010967 00000 n -0000011029 00000 n -0000011116 00000 n -0000011142 00000 n -0000011191 00000 n -0000011278 00000 n -0000011304 00000 n -0000011351 00000 n -0000011436 00000 n -0000011462 00000 n -0000011511 00000 n -0000011598 00000 n -0000011641 00000 n -0000011728 00000 n -0000011771 00000 n -0000011858 00000 n -0000011907 00000 n -0000011994 00000 n -0000012043 00000 n -0000012130 00000 n -0000012178 00000 n -0000012265 00000 n -0000012311 00000 n -0000012398 00000 n -0000012472 00000 n -0000012519 00000 n -0000012606 00000 n -0000012653 00000 n -0000012740 00000 n -0000012789 00000 n -0000012876 00000 n -0000012923 00000 n -0000013010 00000 n -0000013060 00000 n -0000013107 00000 n -0000013194 00000 n -0000013241 00000 n -0000013326 00000 n -0000013370 00000 n -0000013456 00000 n -0000013498 00000 n -0000013584 00000 n -0000013624 00000 n -0000013710 00000 n -0000013758 00000 n -0000013844 00000 n -0000013889 00000 n -0000013975 00000 n -0000014019 00000 n -0000014105 00000 n -0000014156 00000 n -0000014242 00000 n -0000014291 00000 n -0000014377 00000 n -0000014422 00000 n -0000014508 00000 n -0000014550 00000 n -0000014636 00000 n -0000014679 00000 n -0000014765 00000 n -0000014807 00000 n -0000014893 00000 n -0000014937 00000 n -0000015023 00000 n -0000015060 00000 n -0000015146 00000 n -0000015187 00000 n -0000015273 00000 n -0000015315 00000 n -0000015401 00000 n -0000015438 00000 n -0000015524 00000 n -0000015565 00000 n -0000015651 00000 n -0000015694 00000 n -0000015780 00000 n -0000015826 00000 n -0000015912 00000 n -0000016106 00000 n -0000016153 00000 n -0000016240 00000 n -0000016289 00000 n -0000016376 00000 n -0000016425 00000 n -0000016511 00000 n -0000016553 00000 n -0000016601 00000 n -0000016687 00000 n -0000016733 00000 n -0000016820 00000 n -0000016854 00000 n -0000016969 00000 n -0000017056 00000 n -0000017082 00000 n -0000017164 00000 n -0000017251 00000 n -0000017336 00000 n -0000017423 00000 n -0000017478 00000 n -0000017565 00000 n -0000017621 00000 n -0000017708 00000 n -0000017758 00000 n -0000017806 00000 n -0000017893 00000 n -0000017967 00000 n -0000018054 00000 n -0000018122 00000 n -0000018209 00000 n -0000018263 00000 n -0000018350 00000 n -0000018418 00000 n -0000018505 00000 n -0000018579 00000 n -0000018666 00000 n -0000018714 00000 n -0000018801 00000 n -0000018858 00000 n -0000018945 00000 n -0000019027 00000 n -0000019082 00000 n -0000019169 00000 n -0000019250 00000 n -0000019337 00000 n -0000019371 00000 n -0000019423 00000 n -0000019510 00000 n -0000019536 00000 n -0000019592 00000 n -0000019679 00000 n -0000019748 00000 n -0000019835 00000 n -0000019886 00000 n -0000019973 00000 n -0000020060 00000 n -0000020147 00000 n -0000020203 00000 n -0000020290 00000 n -0000020339 00000 n -0000020426 00000 n -0000020492 00000 n -0000020544 00000 n -0000020631 00000 n -0000020686 00000 n -0000020773 00000 n -0000020820 00000 n -0000020907 00000 n -0000020954 00000 n -0000021041 00000 n -0000021091 00000 n -0000021131 00000 n -0000021218 00000 n -0000021261 00000 n -0000021348 00000 n -0000021392 00000 n -0000021479 00000 n -0000021522 00000 n -0000021609 00000 n -0000021652 00000 n -0000021739 00000 n -0000021780 00000 n -0000021867 00000 n -0000021914 00000 n -0000022001 00000 n -0000022075 00000 n -0000022122 00000 n -0000022208 00000 n -0000022234 00000 n -0000022286 00000 n -0000022372 00000 n -0000022398 00000 n -0000022452 00000 n -0000022539 00000 n -0000022565 00000 n -0000022644 00000 n -0000022731 00000 n -0000022813 00000 n -0000022899 00000 n -0000022974 00000 n -0000023061 00000 n -0000023134 00000 n -0000023221 00000 n -0000023271 00000 n -0000023349 00000 n -0000023436 00000 n -0000023462 00000 n -0000023525 00000 n -0000023612 00000 n -0000023675 00000 n -0000023762 00000 n -0000023816 00000 n -0000023903 00000 n -0000023945 00000 n -0000023991 00000 n -0000024078 00000 n -0000024104 00000 n -0000024145 00000 n -0000024232 00000 n -0000024258 00000 n -0000024363 00000 n -0000024469 00000 n -0000024575 00000 n -0000024681 00000 n -0000024787 00000 n -0000024893 00000 n -0000024999 00000 n -0000025105 00000 n -0000025211 00000 n -0000025317 00000 n -0000025423 00000 n -0000025529 00000 n -0000025635 00000 n -0000025741 00000 n -0000025847 00000 n -0000025953 00000 n -0000026059 00000 n -0000026165 00000 n -0000026271 00000 n -0000026376 00000 n -0000026482 00000 n -0000026588 00000 n -0000026694 00000 n -0000026800 00000 n -0000026906 00000 n -0000027012 00000 n -0000027118 00000 n -0000027224 00000 n -0000027330 00000 n -0000027436 00000 n -0000027542 00000 n -0000027648 00000 n -0000027754 00000 n -0000027860 00000 n -0000027966 00000 n -0000028071 00000 n -0000028177 00000 n -0000028283 00000 n -0000028389 00000 n -0000028495 00000 n -0000028601 00000 n -0000028707 00000 n -0000028813 00000 n -0000028918 00000 n -0000029022 00000 n -0000029126 00000 n -0000029512 00000 n -0000029618 00000 n -0000029724 00000 n -0000029830 00000 n -0000029936 00000 n -0000030042 00000 n -0000030148 00000 n -0000030254 00000 n -0000030360 00000 n -0000030465 00000 n -0000030571 00000 n -0000030677 00000 n -0000030783 00000 n -0000030888 00000 n -0000030994 00000 n -0000031100 00000 n -0000031205 00000 n -0000031311 00000 n -0000031417 00000 n +0000009679 00000 n +0000009781 00000 n +0000009884 00000 n +0000009987 00000 n +0000010090 00000 n +0000010193 00000 n +0000010296 00000 n +0000010399 00000 n +0000010502 00000 n +0000010605 00000 n +0000010708 00000 n +0000010810 00000 n +0000010913 00000 n +0000011016 00000 n +0000011119 00000 n +0000011222 00000 n +0000011325 00000 n +0000011428 00000 n +0000011531 00000 n +0000011634 00000 n +0000011737 00000 n +0000011840 00000 n +0000011942 00000 n +0000012044 00000 n +0000012372 00000 n +0000012475 00000 n +0000012579 00000 n +0000012682 00000 n +0000012786 00000 n +0000012890 00000 n +0000012994 00000 n +0000013098 00000 n +0000013202 00000 n +0000013306 00000 n +0000013410 00000 n +0000013514 00000 n +0000013618 00000 n +0000013721 00000 n +0000013825 00000 n +0000013929 00000 n +0000014032 00000 n +0000014136 00000 n +0000014240 00000 n +0000014344 00000 n +0000014447 00000 n +0000014551 00000 n +0000014655 00000 n +0000014759 00000 n +0000014863 00000 n +0000014967 00000 n +0000015071 00000 n +0000015175 00000 n +0000015279 00000 n +0000015383 00000 n +0000015487 00000 n +0000015591 00000 n +0000015695 00000 n +0000015799 00000 n +0000015903 00000 n +0000016007 00000 n +0000016111 00000 n +0000016214 00000 n +0000016318 00000 n +0000016422 00000 n +0000016526 00000 n +0000016629 00000 n +0000016731 00000 n +0000016833 00000 n +0000017194 00000 n +0000017297 00000 n +0000017401 00000 n +0000017505 00000 n +0000017609 00000 n +0000017713 00000 n +0000017817 00000 n +0000017921 00000 n +0000018025 00000 n +0000018129 00000 n +0000018232 00000 n +0000018336 00000 n +0000018440 00000 n +0000018544 00000 n +0000018648 00000 n +0000018752 00000 n +0000018856 00000 n +0000018960 00000 n +0000019064 00000 n +0000019167 00000 n +0000019271 00000 n +0000019375 00000 n +0000019479 00000 n +0000019583 00000 n +0000019687 00000 n +0000019791 00000 n +0000019895 00000 n +0000019999 00000 n +0000020103 00000 n +0000020207 00000 n +0000020311 00000 n +0000020415 00000 n +0000020518 00000 n +0000020622 00000 n +0000020726 00000 n +0000020830 00000 n +0000020934 00000 n +0000021038 00000 n +0000021142 00000 n +0000021246 00000 n +0000021350 00000 n +0000021454 00000 n +0000021558 00000 n +0000021661 00000 n +0000021763 00000 n +0000022132 00000 n +0000022235 00000 n +0000022339 00000 n +0000022443 00000 n +0000022547 00000 n +0000022651 00000 n +0000022755 00000 n +0000022859 00000 n +0000022963 00000 n +0000023067 00000 n +0000023171 00000 n +0000023275 00000 n +0000023379 00000 n +0000023483 00000 n +0000023587 00000 n +0000023691 00000 n +0000023795 00000 n +0000023899 00000 n +0000024003 00000 n +0000024107 00000 n +0000024211 00000 n +0000024315 00000 n +0000024418 00000 n +0000024522 00000 n +0000024626 00000 n +0000024730 00000 n +0000024834 00000 n +0000024938 00000 n +0000025042 00000 n +0000025145 00000 n +0000025249 00000 n +0000025353 00000 n +0000025457 00000 n +0000025561 00000 n +0000025664 00000 n +0000025768 00000 n +0000025872 00000 n +0000025976 00000 n +0000026080 00000 n +0000026184 00000 n +0000026288 00000 n +0000026625 00000 n +0000026678 00000 n +0000026765 00000 n +0000026819 00000 n +0000026905 00000 n +0000026972 00000 n +0000027058 00000 n +0000027161 00000 n +0000027265 00000 n +0000027369 00000 n +0000027473 00000 n +0000027577 00000 n +0000027681 00000 n +0000027785 00000 n +0000027889 00000 n +0000027993 00000 n +0000028097 00000 n +0000028201 00000 n +0000028305 00000 n +0000028409 00000 n +0000028513 00000 n +0000028617 00000 n +0000028721 00000 n +0000028825 00000 n +0000028929 00000 n +0000029033 00000 n +0000029136 00000 n +0000029240 00000 n +0000029344 00000 n +0000029448 00000 n +0000029552 00000 n +0000029656 00000 n +0000029760 00000 n +0000029864 00000 n +0000029968 00000 n +0000030072 00000 n +0000030176 00000 n +0000030280 00000 n +0000030383 00000 n +0000030485 00000 n +0000030587 00000 n +0000030900 00000 n +0000031004 00000 n +0000031107 00000 n +0000031211 00000 n +0000031315 00000 n +0000031419 00000 n 0000031523 00000 n -0000031629 00000 n -0000031735 00000 n -0000031841 00000 n -0000031947 00000 n -0000032053 00000 n -0000032159 00000 n -0000032264 00000 n -0000032370 00000 n -0000032476 00000 n -0000032582 00000 n -0000032688 00000 n -0000032794 00000 n -0000032900 00000 n -0000033006 00000 n -0000033112 00000 n -0000033218 00000 n -0000033324 00000 n -0000033430 00000 n -0000033536 00000 n -0000033642 00000 n -0000033747 00000 n -0000033852 00000 n -0000033956 00000 n -0000034060 00000 n -0000034422 00000 n -0000034528 00000 n -0000034634 00000 n -0000034740 00000 n -0000034846 00000 n -0000034952 00000 n -0000035058 00000 n -0000035163 00000 n -0000035269 00000 n -0000035375 00000 n -0000035480 00000 n -0000035586 00000 n -0000035692 00000 n -0000035798 00000 n -0000035903 00000 n -0000036009 00000 n -0000036115 00000 n -0000036221 00000 n -0000036327 00000 n -0000036433 00000 n -0000036539 00000 n -0000036645 00000 n -0000036751 00000 n -0000036857 00000 n -0000036963 00000 n -0000037069 00000 n -0000037175 00000 n -0000037281 00000 n -0000037387 00000 n -0000037493 00000 n -0000037599 00000 n -0000037704 00000 n -0000037810 00000 n -0000037916 00000 n -0000038022 00000 n -0000038128 00000 n -0000038234 00000 n -0000038340 00000 n -0000038446 00000 n -0000038552 00000 n -0000038659 00000 n -0000038766 00000 n -0000038872 00000 n -0000038977 00000 n -0000039082 00000 n -0000039452 00000 n -0000039559 00000 n -0000039665 00000 n -0000039772 00000 n -0000039879 00000 n -0000039986 00000 n -0000040093 00000 n -0000040200 00000 n -0000040307 00000 n -0000040414 00000 n -0000040521 00000 n -0000040627 00000 n -0000040734 00000 n -0000040841 00000 n -0000040948 00000 n -0000041055 00000 n -0000041162 00000 n -0000041269 00000 n -0000041376 00000 n -0000041483 00000 n -0000041590 00000 n -0000041697 00000 n -0000041804 00000 n -0000041911 00000 n -0000042017 00000 n -0000042124 00000 n -0000042231 00000 n -0000042338 00000 n -0000042445 00000 n -0000042552 00000 n -0000042659 00000 n -0000042766 00000 n -0000042873 00000 n -0000042980 00000 n -0000043087 00000 n -0000043194 00000 n -0000043301 00000 n -0000043407 00000 n -0000043514 00000 n -0000043621 00000 n -0000043728 00000 n -0000043835 00000 n -0000043941 00000 n -0000044046 00000 n -0000044151 00000 n -0000044521 00000 n -0000044628 00000 n -0000044735 00000 n -0000044842 00000 n -0000044949 00000 n -0000045056 00000 n -0000045163 00000 n -0000045270 00000 n -0000045377 00000 n -0000045484 00000 n -0000045591 00000 n -0000045698 00000 n -0000045805 00000 n -0000045912 00000 n -0000046018 00000 n -0000046125 00000 n -0000046232 00000 n -0000046339 00000 n -0000046446 00000 n -0000046553 00000 n -0000046659 00000 n -0000046766 00000 n -0000046873 00000 n -0000046980 00000 n -0000047087 00000 n -0000047193 00000 n -0000047300 00000 n -0000047407 00000 n -0000047514 00000 n -0000047621 00000 n -0000047728 00000 n -0000047835 00000 n -0000047940 00000 n -0000048214 00000 n -0000048248 00000 n -0000048282 00000 n -0000052100 00000 n -0000052149 00000 n -0000052198 00000 n -0000052247 00000 n -0000052296 00000 n -0000052345 00000 n -0000052394 00000 n -0000052443 00000 n -0000052492 00000 n -0000052541 00000 n -0000052590 00000 n -0000052639 00000 n -0000052688 00000 n -0000052737 00000 n -0000052786 00000 n -0000052835 00000 n -0000052884 00000 n -0000052933 00000 n -0000052982 00000 n -0000053031 00000 n -0000053080 00000 n -0000053129 00000 n -0000053178 00000 n -0000053227 00000 n -0000053276 00000 n -0000053325 00000 n -0000053374 00000 n -0000053423 00000 n -0000053472 00000 n -0000053521 00000 n -0000053570 00000 n -0000053619 00000 n -0000053668 00000 n -0000053717 00000 n -0000053766 00000 n -0000053815 00000 n -0000053864 00000 n -0000053913 00000 n -0000053962 00000 n -0000054011 00000 n -0000054060 00000 n -0000054109 00000 n -0000054158 00000 n -0000054207 00000 n -0000054256 00000 n -0000054305 00000 n -0000054354 00000 n -0000054403 00000 n -0000054452 00000 n -0000054501 00000 n -0000054550 00000 n -0000054599 00000 n -0000054648 00000 n -0000054697 00000 n -0000054746 00000 n -0000054795 00000 n -0000054844 00000 n -0000054893 00000 n -0000054942 00000 n -0000054991 00000 n -0000055040 00000 n -0000055089 00000 n -0000055138 00000 n -0000055187 00000 n -0000055236 00000 n -0000055285 00000 n -0000055335 00000 n -0000055384 00000 n -0000055433 00000 n -0000055483 00000 n +0000031627 00000 n +0000031731 00000 n +0000031835 00000 n +0000031939 00000 n +0000032043 00000 n +0000032147 00000 n +0000032251 00000 n +0000032355 00000 n +0000032459 00000 n +0000032563 00000 n +0000032667 00000 n +0000032771 00000 n +0000032875 00000 n +0000032979 00000 n +0000033082 00000 n +0000033186 00000 n +0000033290 00000 n +0000033394 00000 n +0000033497 00000 n +0000033601 00000 n +0000033705 00000 n +0000033808 00000 n +0000033912 00000 n +0000034016 00000 n +0000034120 00000 n +0000034224 00000 n +0000034328 00000 n +0000034432 00000 n +0000034536 00000 n +0000034640 00000 n +0000034744 00000 n +0000034847 00000 n +0000034951 00000 n +0000035055 00000 n +0000035159 00000 n +0000035263 00000 n +0000035367 00000 n +0000035471 00000 n +0000035575 00000 n +0000035679 00000 n +0000035783 00000 n +0000035887 00000 n +0000035990 00000 n +0000036092 00000 n +0000036194 00000 n +0000036619 00000 n +0000036722 00000 n +0000036826 00000 n +0000036930 00000 n +0000037034 00000 n +0000037138 00000 n +0000037242 00000 n +0000037346 00000 n +0000037450 00000 n +0000037554 00000 n +0000037658 00000 n +0000037761 00000 n +0000037865 00000 n +0000037969 00000 n +0000038072 00000 n +0000038176 00000 n +0000038280 00000 n +0000038384 00000 n +0000038487 00000 n +0000038591 00000 n +0000038695 00000 n +0000038799 00000 n +0000038903 00000 n +0000039007 00000 n +0000039111 00000 n +0000039215 00000 n +0000039319 00000 n +0000039423 00000 n +0000039527 00000 n +0000039631 00000 n +0000039735 00000 n +0000039839 00000 n +0000039943 00000 n +0000040047 00000 n +0000040151 00000 n +0000040254 00000 n +0000040358 00000 n +0000040462 00000 n +0000040566 00000 n +0000040670 00000 n +0000040774 00000 n +0000040878 00000 n +0000040982 00000 n +0000041086 00000 n +0000041190 00000 n +0000041294 00000 n +0000041398 00000 n +0000041502 00000 n +0000041606 00000 n +0000041709 00000 n +0000041810 00000 n +0000041912 00000 n +0000042337 00000 n +0000042441 00000 n +0000042545 00000 n +0000042649 00000 n +0000042753 00000 n +0000042857 00000 n +0000042961 00000 n +0000043065 00000 n +0000043168 00000 n +0000043272 00000 n +0000043376 00000 n +0000043480 00000 n +0000043584 00000 n +0000043688 00000 n +0000043792 00000 n +0000043896 00000 n +0000044000 00000 n +0000044104 00000 n +0000044208 00000 n +0000044312 00000 n +0000044416 00000 n +0000044519 00000 n +0000044623 00000 n +0000044727 00000 n +0000044831 00000 n +0000044935 00000 n +0000045039 00000 n +0000045143 00000 n +0000045247 00000 n +0000045351 00000 n +0000045455 00000 n +0000045559 00000 n +0000045663 00000 n +0000045767 00000 n +0000045870 00000 n +0000045974 00000 n +0000046078 00000 n +0000046182 00000 n +0000046286 00000 n +0000046390 00000 n +0000046494 00000 n +0000046598 00000 n +0000046702 00000 n +0000046806 00000 n +0000046910 00000 n +0000047014 00000 n +0000047118 00000 n +0000047222 00000 n +0000047326 00000 n +0000047429 00000 n +0000047531 00000 n +0000047633 00000 n +0000048058 00000 n +0000048162 00000 n +0000048266 00000 n +0000048370 00000 n +0000048473 00000 n +0000048577 00000 n +0000048681 00000 n +0000048785 00000 n +0000048889 00000 n +0000048993 00000 n +0000049096 00000 n +0000049200 00000 n +0000049304 00000 n +0000049408 00000 n +0000049512 00000 n +0000049615 00000 n +0000049719 00000 n +0000049823 00000 n +0000049927 00000 n +0000050031 00000 n +0000050135 00000 n +0000050239 00000 n +0000050424 00000 n +0000050477 00000 n +0000050564 00000 n +0000050589 00000 n +0000050643 00000 n +0000050730 00000 n +0000050784 00000 n +0000050871 00000 n +0000050904 00000 n +0000050952 00000 n +0000051039 00000 n +0000051086 00000 n +0000051172 00000 n +0000051219 00000 n +0000051305 00000 n +0000051346 00000 n +0000051391 00000 n +0000051478 00000 n +0000051523 00000 n +0000051609 00000 n +0000051642 00000 n +0000051697 00000 n +0000051783 00000 n +0000051808 00000 n +0000051861 00000 n +0000051948 00000 n +0000051998 00000 n +0000052085 00000 n +0000052118 00000 n +0000052237 00000 n +0000052323 00000 n +0000052366 00000 n +0000052453 00000 n +0000052496 00000 n +0000052583 00000 n +0000052624 00000 n +0000052670 00000 n +0000052757 00000 n +0000052782 00000 n +0000052828 00000 n +0000052915 00000 n +0000052961 00000 n +0000053046 00000 n +0000053090 00000 n +0000053177 00000 n +0000053228 00000 n +0000053315 00000 n +0000053364 00000 n +0000053451 00000 n +0000053499 00000 n +0000053585 00000 n +0000053650 00000 n +0000053713 00000 n +0000053800 00000 n +0000053858 00000 n +0000053945 00000 n +0000054039 00000 n +0000054125 00000 n +0000054227 00000 n +0000054276 00000 n +0000054379 00000 n +0000054422 00000 n +0000054508 00000 n +0000054556 00000 n +0000054643 00000 n +0000054684 00000 n +0000054771 00000 n +0000054815 00000 n +0000054902 00000 n +0000054946 00000 n +0000055032 00000 n +0000055097 00000 n +0000055143 00000 n +0000055230 00000 n +0000055255 00000 n +0000055304 00000 n +0000055391 00000 n +0000055445 00000 n 0000055532 00000 n -0000055581 00000 n -0000055631 00000 n -0000055681 00000 n -0000055731 00000 n -0000055781 00000 n -0000055831 00000 n -0000055881 00000 n -0000055931 00000 n -0000055981 00000 n -0000056030 00000 n -0000056080 00000 n -0000056130 00000 n -0000056180 00000 n -0000056229 00000 n -0000056279 00000 n -0000056329 00000 n -0000056379 00000 n -0000056429 00000 n -0000056479 00000 n -0000056529 00000 n -0000056579 00000 n -0000056629 00000 n -0000056679 00000 n -0000056729 00000 n -0000056778 00000 n -0000056827 00000 n -0000056877 00000 n -0000056927 00000 n -0000056977 00000 n -0000057027 00000 n -0000057077 00000 n -0000057126 00000 n -0000057176 00000 n -0000057226 00000 n -0000057276 00000 n -0000057325 00000 n -0000057375 00000 n -0000057425 00000 n -0000057475 00000 n -0000057525 00000 n -0000057575 00000 n -0000057625 00000 n -0000057675 00000 n -0000057725 00000 n -0000057775 00000 n -0000057824 00000 n -0000057874 00000 n -0000057924 00000 n -0000057974 00000 n -0000058024 00000 n -0000058074 00000 n -0000058123 00000 n -0000058173 00000 n -0000058223 00000 n -0000058273 00000 n -0000058323 00000 n -0000058373 00000 n -0000058423 00000 n -0000058473 00000 n -0000058523 00000 n -0000058573 00000 n -0000058622 00000 n -0000058672 00000 n -0000058722 00000 n -0000058772 00000 n -0000058822 00000 n -0000058872 00000 n -0000058922 00000 n -0000058972 00000 n -0000059021 00000 n -0000059071 00000 n -0000059121 00000 n -0000059171 00000 n +0000055583 00000 n +0000055670 00000 n +0000055721 00000 n +0000055807 00000 n +0000055861 00000 n +0000055947 00000 n +0000056004 00000 n +0000056054 00000 n +0000056141 00000 n +0000056191 00000 n +0000056277 00000 n +0000056341 00000 n +0000056428 00000 n +0000056469 00000 n +0000056533 00000 n +0000056620 00000 n +0000056645 00000 n +0000056687 00000 n +0000056773 00000 n +0000056824 00000 n +0000056911 00000 n +0000056958 00000 n +0000057045 00000 n +0000057086 00000 n +0000057135 00000 n +0000057222 00000 n +0000057270 00000 n +0000057357 00000 n +0000057399 00000 n +0000057485 00000 n +0000057526 00000 n +0000057569 00000 n +0000057656 00000 n +0000057706 00000 n +0000057793 00000 n +0000057841 00000 n +0000057928 00000 n +0000057982 00000 n +0000058067 00000 n +0000058116 00000 n +0000058161 00000 n +0000058248 00000 n +0000058305 00000 n +0000058392 00000 n +0000058488 00000 n +0000058574 00000 n +0000058615 00000 n +0000058677 00000 n +0000058764 00000 n +0000058789 00000 n +0000058838 00000 n +0000058925 00000 n +0000058950 00000 n +0000058998 00000 n +0000059085 00000 n +0000059135 00000 n 0000059221 00000 n -0000059270 00000 n -0000059320 00000 n -0000059370 00000 n -0000059420 00000 n -0000059470 00000 n -0000059520 00000 n -0000059570 00000 n -0000059620 00000 n -0000059670 00000 n -0000059720 00000 n -0000059770 00000 n -0000059820 00000 n -0000059870 00000 n -0000059920 00000 n -0000059970 00000 n -0000060020 00000 n -0000060070 00000 n -0000060119 00000 n -0000060168 00000 n -0000060217 00000 n -0000060266 00000 n -0000060315 00000 n -0000060364 00000 n -0000060413 00000 n -0000060462 00000 n -0000060511 00000 n -0000060560 00000 n -0000060609 00000 n -0000060658 00000 n -0000060707 00000 n -0000060756 00000 n -0000060805 00000 n -0000060854 00000 n -0000060903 00000 n -0000060952 00000 n +0000059265 00000 n +0000059351 00000 n +0000059395 00000 n +0000059481 00000 n +0000059531 00000 n +0000059617 00000 n +0000059667 00000 n +0000059752 00000 n +0000059801 00000 n +0000059885 00000 n +0000059932 00000 n +0000060016 00000 n +0000060097 00000 n +0000060145 00000 n +0000060232 00000 n +0000060280 00000 n +0000060367 00000 n +0000060417 00000 n +0000060504 00000 n +0000060552 00000 n +0000060639 00000 n +0000060688 00000 n +0000060736 00000 n +0000060823 00000 n +0000060871 00000 n +0000060956 00000 n 0000061001 00000 n -0000061050 00000 n -0000061099 00000 n -0000061148 00000 n -0000061197 00000 n -0000061246 00000 n -0000061295 00000 n -0000061344 00000 n -0000061393 00000 n -0000061442 00000 n -0000061491 00000 n -0000061540 00000 n -0000061589 00000 n -0000061638 00000 n -0000061687 00000 n -0000061736 00000 n -0000061785 00000 n -0000061834 00000 n -0000061883 00000 n -0000061932 00000 n -0000061981 00000 n -0000062030 00000 n -0000062079 00000 n -0000062128 00000 n -0000062177 00000 n -0000062226 00000 n -0000062275 00000 n -0000062324 00000 n -0000062373 00000 n -0000062422 00000 n -0000062471 00000 n -0000062520 00000 n -0000062569 00000 n -0000062618 00000 n -0000062667 00000 n -0000062717 00000 n -0000062767 00000 n -0000062816 00000 n -0000062865 00000 n -0000062915 00000 n -0000062964 00000 n -0000063013 00000 n -0000063062 00000 n -0000063111 00000 n -0000063161 00000 n -0000063210 00000 n -0000063259 00000 n -0000063308 00000 n -0000063358 00000 n -0000063408 00000 n -0000063457 00000 n -0000063506 00000 n -0000063555 00000 n -0000063605 00000 n -0000063654 00000 n -0000063703 00000 n -0000064784 00000 n -0000064940 00000 n -0000065663 00000 n -0000065684 00000 n -0000065858 00000 n -0000067020 00000 n -0000067042 00000 n -0000067193 00000 n -0000068699 00000 n -0000068721 00000 n -0000068881 00000 n -0000070317 00000 n -0000070339 00000 n -0000070517 00000 n -0000071777 00000 n -0000071799 00000 n -0000071941 00000 n -0000073517 00000 n -0000073539 00000 n -0000073672 00000 n -0000075466 00000 n -0000075488 00000 n -0000075630 00000 n -0000077099 00000 n -0000077121 00000 n -0000077263 00000 n -0000078935 00000 n -0000078957 00000 n -0000079099 00000 n -0000080639 00000 n -0000080661 00000 n -0000080803 00000 n -0000082401 00000 n -0000082423 00000 n -0000082565 00000 n -0000084245 00000 n -0000084267 00000 n -0000084414 00000 n -0000084930 00000 n -0000084951 00000 n -0000085112 00000 n -0000086395 00000 n -0000086417 00000 n -0000086578 00000 n -0000088333 00000 n -0000088355 00000 n -0000088515 00000 n -0000090160 00000 n -0000090182 00000 n -0000090324 00000 n -0000092387 00000 n -0000092409 00000 n -0000092551 00000 n -0000094363 00000 n -0000094385 00000 n -0000094527 00000 n -0000096251 00000 n -0000096273 00000 n -0000096424 00000 n -0000098191 00000 n -0000098213 00000 n -0000098388 00000 n -0000100481 00000 n -0000100503 00000 n -0000100663 00000 n -0000102259 00000 n -0000102281 00000 n -0000102456 00000 n -0000103950 00000 n -0000103972 00000 n -0000104124 00000 n -0000104931 00000 n -0000104952 00000 n -0000105103 00000 n -0000106741 00000 n -0000106763 00000 n -0000106928 00000 n -0000108700 00000 n -0000108722 00000 n -0000108887 00000 n -0000109780 00000 n -0000109801 00000 n -0000109975 00000 n -0000111580 00000 n -0000111602 00000 n -0000111745 00000 n -0000112503 00000 n -0000112524 00000 n -0000112707 00000 n -0000114575 00000 n -0000114597 00000 n -0000114766 00000 n -0000116619 00000 n -0000116641 00000 n -0000116801 00000 n -0000118485 00000 n -0000118507 00000 n -0000118680 00000 n -0000120408 00000 n -0000120430 00000 n -0000120581 00000 n -0000121505 00000 n -0000121526 00000 n -0000121710 00000 n -0000123534 00000 n -0000123556 00000 n -0000123730 00000 n -0000125902 00000 n -0000125924 00000 n -0000126117 00000 n -0000128044 00000 n -0000128066 00000 n -0000128251 00000 n -0000130161 00000 n -0000130183 00000 n -0000130359 00000 n -0000132161 00000 n -0000132183 00000 n -0000132353 00000 n -0000133950 00000 n -0000133972 00000 n -0000134157 00000 n -0000135633 00000 n -0000135655 00000 n -0000135797 00000 n -0000137312 00000 n -0000137334 00000 n -0000137476 00000 n -0000138868 00000 n -0000138890 00000 n -0000139032 00000 n -0000140686 00000 n -0000140708 00000 n -0000140850 00000 n -0000142427 00000 n -0000142449 00000 n -0000142582 00000 n -0000142929 00000 n -0000142950 00000 n -0000143116 00000 n -0000144984 00000 n -0000145006 00000 n -0000145129 00000 n -0000146353 00000 n -0000146375 00000 n -0000146568 00000 n -0000148139 00000 n -0000148161 00000 n -0000148336 00000 n -0000150118 00000 n -0000150140 00000 n -0000150296 00000 n -0000151857 00000 n -0000151879 00000 n -0000152031 00000 n -0000153772 00000 n -0000153794 00000 n -0000153936 00000 n -0000155698 00000 n -0000155720 00000 n -0000155871 00000 n -0000157762 00000 n -0000157784 00000 n -0000157941 00000 n -0000159778 00000 n -0000159800 00000 n -0000159994 00000 n -0000162017 00000 n -0000162039 00000 n -0000162214 00000 n -0000163688 00000 n -0000163710 00000 n -0000163885 00000 n -0000165348 00000 n -0000165370 00000 n -0000165539 00000 n -0000166852 00000 n -0000166874 00000 n -0000167016 00000 n -0000168052 00000 n -0000168073 00000 n -0000168224 00000 n -0000169435 00000 n -0000169457 00000 n -0000169608 00000 n -0000171084 00000 n -0000171106 00000 n -0000171248 00000 n -0000172297 00000 n -0000172318 00000 n -0000172470 00000 n -0000173781 00000 n -0000173803 00000 n -0000173988 00000 n -0000175841 00000 n -0000175863 00000 n -0000176029 00000 n -0000177678 00000 n -0000177700 00000 n -0000177885 00000 n -0000179825 00000 n -0000179847 00000 n -0000180031 00000 n -0000181789 00000 n -0000181811 00000 n -0000181982 00000 n -0000183590 00000 n -0000183613 00000 n -0000183784 00000 n -0000185659 00000 n -0000185682 00000 n -0000185869 00000 n -0000187735 00000 n -0000187758 00000 n -0000187936 00000 n -0000190028 00000 n -0000190051 00000 n -0000190228 00000 n -0000192172 00000 n -0000192195 00000 n -0000192373 00000 n -0000194691 00000 n -0000194714 00000 n -0000194868 00000 n -0000196852 00000 n -0000196875 00000 n -0000197037 00000 n -0000198907 00000 n -0000198930 00000 n -0000199083 00000 n -0000200837 00000 n -0000200860 00000 n -0000200994 00000 n -0000202869 00000 n -0000202892 00000 n -0000203036 00000 n -0000205111 00000 n -0000205134 00000 n -0000205287 00000 n -0000207083 00000 n -0000207106 00000 n -0000207240 00000 n -0000209036 00000 n -0000209059 00000 n -0000209184 00000 n -0000209640 00000 n -0000209662 00000 n -0000209821 00000 n -0000211457 00000 n -0000211480 00000 n -0000211634 00000 n -0000213295 00000 n -0000213318 00000 n -0000213462 00000 n -0000214348 00000 n -0000214370 00000 n -0000214557 00000 n -0000216715 00000 n -0000216738 00000 n -0000216916 00000 n -0000219103 00000 n -0000219126 00000 n -0000219279 00000 n -0000220382 00000 n -0000220405 00000 n -0000220583 00000 n -0000222083 00000 n -0000222106 00000 n -0000222293 00000 n -0000224145 00000 n -0000224168 00000 n -0000224355 00000 n -0000226264 00000 n -0000226287 00000 n -0000226446 00000 n -0000227379 00000 n -0000227401 00000 n -0000227536 00000 n -0000229072 00000 n -0000229095 00000 n -0000229230 00000 n -0000231029 00000 n -0000231052 00000 n -0000231186 00000 n -0000232882 00000 n -0000232905 00000 n -0000233039 00000 n -0000234377 00000 n -0000234400 00000 n -0000234553 00000 n -0000236145 00000 n -0000236168 00000 n -0000236321 00000 n -0000237947 00000 n -0000237970 00000 n -0000238123 00000 n -0000239419 00000 n -0000239442 00000 n -0000239577 00000 n -0000241225 00000 n -0000241248 00000 n -0000241383 00000 n -0000242361 00000 n -0000242383 00000 n -0000242527 00000 n -0000244136 00000 n -0000244159 00000 n -0000244303 00000 n -0000245787 00000 n -0000245810 00000 n -0000245945 00000 n -0000247608 00000 n -0000247631 00000 n -0000247766 00000 n -0000249027 00000 n -0000249050 00000 n -0000249185 00000 n -0000250699 00000 n -0000250722 00000 n -0000250857 00000 n -0000252634 00000 n -0000252657 00000 n -0000252782 00000 n -0000253160 00000 n -0000253182 00000 n -0000253351 00000 n -0000255023 00000 n -0000255046 00000 n -0000255205 00000 n -0000256396 00000 n -0000256419 00000 n -0000256578 00000 n -0000258133 00000 n -0000258156 00000 n -0000258308 00000 n -0000259043 00000 n -0000259065 00000 n -0000259233 00000 n -0000260973 00000 n -0000260996 00000 n -0000261149 00000 n -0000262864 00000 n -0000262887 00000 n -0000263046 00000 n -0000263409 00000 n -0000263431 00000 n -0000263590 00000 n -0000268048 00000 n -0000268071 00000 n -0000268230 00000 n -0000273247 00000 n -0000273270 00000 n -0000273429 00000 n -0000278013 00000 n -0000278036 00000 n -0000278195 00000 n -0000283045 00000 n -0000283068 00000 n -0000283227 00000 n -0000286418 00000 n -0000286441 00000 n -0000286500 00000 n -0000286609 00000 n -0000286793 00000 n -0000286915 00000 n -0000287054 00000 n -0000287194 00000 n -0000287346 00000 n -0000287500 00000 n -0000287644 00000 n -0000287789 00000 n -0000287946 00000 n -0000288112 00000 n -0000288265 00000 n -0000288457 00000 n -0000288594 00000 n -0000288726 00000 n -0000288848 00000 n -0000288988 00000 n -0000289134 00000 n -0000289254 00000 n -0000289370 00000 n -0000289553 00000 n -0000289661 00000 n -0000289782 00000 n -0000289897 00000 n -0000290015 00000 n -0000290133 00000 n -0000290251 00000 n -0000290369 00000 n -0000290487 00000 n -0000290605 00000 n -0000290723 00000 n -0000290841 00000 n -0000290959 00000 n -0000291079 00000 n -0000291199 00000 n -0000291317 00000 n -0000291514 00000 n -0000291616 00000 n -0000291768 00000 n -0000291890 00000 n -0000292018 00000 n -0000292144 00000 n -0000292274 00000 n -0000292436 00000 n -0000292570 00000 n -0000292698 00000 n -0000292820 00000 n -0000292942 00000 n -0000293065 00000 n -0000293259 00000 n -0000293449 00000 n -0000293606 00000 n -0000293773 00000 n -0000293928 00000 n -0000294035 00000 n -0000294258 00000 n -0000294367 00000 n -0000294503 00000 n -0000294628 00000 n -0000294839 00000 n -0000294947 00000 n -0000295050 00000 n -0000295260 00000 n -0000295424 00000 n -0000295576 00000 n -0000295708 00000 n -0000295855 00000 n -0000295983 00000 n -0000296116 00000 n -0000296265 00000 n -0000296434 00000 n -0000296589 00000 n -0000296775 00000 n -0000296883 00000 n -0000297006 00000 n -0000297135 00000 n -0000297284 00000 n -0000297430 00000 n -0000297584 00000 n -0000297719 00000 n -0000297849 00000 n -0000297978 00000 n -0000298122 00000 n -0000298253 00000 n -0000298388 00000 n -0000298522 00000 n -0000298703 00000 n -0000298811 00000 n -0000298947 00000 n -0000299081 00000 n -0000299228 00000 n -0000299357 00000 n -0000299491 00000 n -0000299623 00000 n -0000299750 00000 n -0000299860 00000 n -0000300029 00000 n -0000300137 00000 n -0000300277 00000 n -0000300462 00000 n -0000300594 00000 n -0000300735 00000 n -0000300874 00000 n -0000301086 00000 n -0000301191 00000 n -0000301314 00000 n -0000301446 00000 n -0000301570 00000 n -0000301698 00000 n -0000301843 00000 n -0000301975 00000 n -0000302120 00000 n -0000302261 00000 n -0000302388 00000 n -0000302529 00000 n -0000302654 00000 n -0000302779 00000 n -0000302910 00000 n -0000303032 00000 n -0000303139 00000 n -0000303352 00000 n -0000303469 00000 n -0000303590 00000 n -0000303740 00000 n -0000303916 00000 n -0000304070 00000 n -0000304230 00000 n -0000304375 00000 n -0000304512 00000 n -0000304652 00000 n -0000304790 00000 n -0000304934 00000 n -0000305090 00000 n -0000305264 00000 n -0000305416 00000 n -0000305648 00000 n -0000305766 00000 n -0000305888 00000 n -0000306050 00000 n -0000306214 00000 n -0000306351 00000 n -0000306503 00000 n -0000306643 00000 n -0000306781 00000 n -0000307007 00000 n -0000307112 00000 n -0000307236 00000 n -0000307370 00000 n -0000307534 00000 n -0000307673 00000 n -0000307809 00000 n -0000307940 00000 n -0000308082 00000 n -0000308219 00000 n -0000308373 00000 n -0000308524 00000 n -0000308631 00000 n -0000308814 00000 n -0000308932 00000 n -0000309069 00000 n -0000309199 00000 n -0000309334 00000 n -0000309485 00000 n -0000309621 00000 n -0000309767 00000 n -0000309910 00000 n -0000310052 00000 n -0000310194 00000 n -0000310337 00000 n -0000310455 00000 n -0000310636 00000 n -0000310745 00000 n -0000310864 00000 n -0000310986 00000 n -0000311114 00000 n -0000311266 00000 n -0000311392 00000 n -0000311513 00000 n -0000311633 00000 n -0000311752 00000 n -0000311875 00000 n -0000311996 00000 n -0000312118 00000 n -0000312239 00000 n -0000312361 00000 n -0000312489 00000 n -0000312616 00000 n -0000312741 00000 n -0000312865 00000 n -0000312991 00000 n -0000313100 00000 n -0000313272 00000 n -0000313374 00000 n -0000313564 00000 n -0000313759 00000 n -0000313947 00000 n -0000314110 00000 n -0000314304 00000 n -0000314414 00000 n -0000314549 00000 n -0000314680 00000 n -0000314794 00000 n -0000314964 00000 n -0000315074 00000 n -0000315198 00000 n -0000315322 00000 n -0000315449 00000 n -0000315591 00000 n -0000315696 00000 n -0000315793 00000 n +0000061087 00000 n +0000061130 00000 n +0000061216 00000 n +0000061257 00000 n +0000061343 00000 n +0000061392 00000 n +0000061478 00000 n +0000061524 00000 n +0000061610 00000 n +0000061655 00000 n +0000061741 00000 n +0000061793 00000 n +0000061879 00000 n +0000061929 00000 n +0000062015 00000 n +0000062061 00000 n +0000062147 00000 n +0000062190 00000 n +0000062276 00000 n +0000062320 00000 n +0000062406 00000 n +0000062449 00000 n +0000062535 00000 n +0000062580 00000 n +0000062666 00000 n +0000062704 00000 n +0000062790 00000 n +0000062832 00000 n +0000062918 00000 n +0000062961 00000 n +0000063047 00000 n +0000063085 00000 n +0000063171 00000 n +0000063213 00000 n +0000063299 00000 n +0000063343 00000 n +0000063429 00000 n +0000063476 00000 n +0000063562 00000 n +0000063610 00000 n +0000063695 00000 n +0000063896 00000 n +0000063946 00000 n +0000064033 00000 n +0000064083 00000 n +0000064169 00000 n +0000064202 00000 n +0000064251 00000 n +0000064337 00000 n +0000064384 00000 n +0000064471 00000 n +0000064504 00000 n +0000064619 00000 n +0000064706 00000 n +0000064731 00000 n +0000064813 00000 n +0000064900 00000 n +0000064985 00000 n +0000065072 00000 n +0000065105 00000 n +0000065160 00000 n +0000065247 00000 n +0000065303 00000 n +0000065390 00000 n +0000065423 00000 n +0000065471 00000 n +0000065558 00000 n +0000065632 00000 n +0000065719 00000 n +0000065787 00000 n +0000065874 00000 n +0000065928 00000 n +0000066015 00000 n +0000066083 00000 n +0000066170 00000 n +0000066244 00000 n +0000066331 00000 n +0000066379 00000 n +0000066466 00000 n +0000066523 00000 n +0000066610 00000 n +0000066691 00000 n +0000066746 00000 n +0000066833 00000 n +0000066914 00000 n +0000067001 00000 n +0000067034 00000 n +0000067087 00000 n +0000067174 00000 n +0000067199 00000 n +0000067255 00000 n +0000067342 00000 n +0000067411 00000 n +0000067498 00000 n +0000067549 00000 n +0000067636 00000 n +0000067723 00000 n +0000067810 00000 n +0000067866 00000 n +0000067953 00000 n +0000068003 00000 n +0000068090 00000 n +0000068155 00000 n +0000068207 00000 n +0000068294 00000 n +0000068350 00000 n +0000068437 00000 n +0000068485 00000 n +0000068572 00000 n +0000068620 00000 n +0000068707 00000 n +0000068756 00000 n +0000068797 00000 n +0000068882 00000 n +0000068907 00000 n +0000068951 00000 n +0000069038 00000 n +0000069083 00000 n +0000069170 00000 n +0000069214 00000 n +0000069301 00000 n +0000069345 00000 n +0000069432 00000 n +0000069474 00000 n +0000069561 00000 n +0000069609 00000 n +0000069696 00000 n +0000069761 00000 n +0000069809 00000 n +0000069895 00000 n +0000069920 00000 n +0000069973 00000 n +0000070059 00000 n +0000070084 00000 n +0000070138 00000 n +0000070225 00000 n +0000070250 00000 n +0000070329 00000 n +0000070416 00000 n +0000070498 00000 n +0000070584 00000 n +0000070659 00000 n +0000070746 00000 n +0000070819 00000 n +0000070906 00000 n +0000070955 00000 n +0000071033 00000 n +0000071120 00000 n +0000071145 00000 n +0000071208 00000 n +0000071295 00000 n +0000071358 00000 n +0000071445 00000 n +0000071499 00000 n +0000071586 00000 n +0000071627 00000 n +0000071674 00000 n +0000071761 00000 n +0000071786 00000 n +0000071820 00000 n +0000071854 00000 n +0000075683 00000 n +0000075727 00000 n +0000075771 00000 n +0000075815 00000 n +0000075859 00000 n +0000075903 00000 n +0000075947 00000 n +0000075991 00000 n +0000076035 00000 n +0000076079 00000 n +0000076123 00000 n +0000076167 00000 n +0000076211 00000 n +0000076255 00000 n +0000076299 00000 n +0000076343 00000 n +0000076387 00000 n +0000076431 00000 n +0000076475 00000 n +0000076519 00000 n +0000076563 00000 n +0000076607 00000 n +0000076651 00000 n +0000076695 00000 n +0000076739 00000 n +0000076783 00000 n +0000076827 00000 n +0000076871 00000 n +0000076915 00000 n +0000076959 00000 n +0000077003 00000 n +0000077047 00000 n +0000077091 00000 n +0000077135 00000 n +0000077179 00000 n +0000077223 00000 n +0000077267 00000 n +0000077311 00000 n +0000077355 00000 n +0000077399 00000 n +0000077443 00000 n +0000077487 00000 n +0000077531 00000 n +0000077575 00000 n +0000077619 00000 n +0000077663 00000 n +0000077707 00000 n +0000077751 00000 n +0000077795 00000 n +0000077839 00000 n +0000077883 00000 n +0000077927 00000 n +0000077971 00000 n +0000078015 00000 n +0000078059 00000 n +0000078103 00000 n +0000078147 00000 n +0000078191 00000 n +0000078235 00000 n +0000078279 00000 n +0000078323 00000 n +0000078367 00000 n +0000078411 00000 n +0000078455 00000 n +0000078499 00000 n +0000078543 00000 n +0000078587 00000 n +0000078631 00000 n +0000078675 00000 n +0000078719 00000 n +0000078763 00000 n +0000078807 00000 n +0000078851 00000 n +0000078895 00000 n +0000078939 00000 n +0000078983 00000 n +0000079027 00000 n +0000079071 00000 n +0000079115 00000 n +0000079159 00000 n +0000079203 00000 n +0000079247 00000 n +0000079291 00000 n +0000079335 00000 n +0000079379 00000 n +0000079423 00000 n +0000079467 00000 n +0000079511 00000 n +0000079555 00000 n +0000079599 00000 n +0000079643 00000 n +0000079687 00000 n +0000079731 00000 n +0000079775 00000 n +0000079819 00000 n +0000079863 00000 n +0000079907 00000 n +0000079951 00000 n +0000079995 00000 n +0000080039 00000 n +0000080083 00000 n +0000080127 00000 n +0000080171 00000 n +0000080215 00000 n +0000080259 00000 n +0000080303 00000 n +0000080347 00000 n +0000080391 00000 n +0000080435 00000 n +0000080479 00000 n +0000080523 00000 n +0000080567 00000 n +0000080611 00000 n +0000080655 00000 n +0000080699 00000 n +0000080743 00000 n +0000080787 00000 n +0000080831 00000 n +0000080875 00000 n +0000080919 00000 n +0000080963 00000 n +0000081007 00000 n +0000081051 00000 n +0000081095 00000 n +0000081139 00000 n +0000081183 00000 n +0000081227 00000 n +0000081271 00000 n +0000081315 00000 n +0000081359 00000 n +0000081403 00000 n +0000081447 00000 n +0000081491 00000 n +0000081535 00000 n +0000081579 00000 n +0000081623 00000 n +0000081667 00000 n +0000081711 00000 n +0000081755 00000 n +0000081799 00000 n +0000081843 00000 n +0000081887 00000 n +0000081931 00000 n +0000081975 00000 n +0000082019 00000 n +0000082063 00000 n +0000082107 00000 n +0000082151 00000 n +0000082195 00000 n +0000082239 00000 n +0000082283 00000 n +0000082327 00000 n +0000082371 00000 n +0000082415 00000 n +0000082459 00000 n +0000082503 00000 n +0000082547 00000 n +0000082591 00000 n +0000082635 00000 n +0000082679 00000 n +0000082723 00000 n +0000082767 00000 n +0000082811 00000 n +0000082855 00000 n +0000082899 00000 n +0000082943 00000 n +0000082987 00000 n +0000083031 00000 n +0000083075 00000 n +0000083119 00000 n +0000083163 00000 n +0000083207 00000 n +0000083251 00000 n +0000083295 00000 n +0000083339 00000 n +0000083383 00000 n +0000083427 00000 n +0000083471 00000 n +0000083515 00000 n +0000083559 00000 n +0000083603 00000 n +0000083647 00000 n +0000083691 00000 n +0000083735 00000 n +0000083779 00000 n +0000083823 00000 n +0000083867 00000 n +0000083911 00000 n +0000083955 00000 n +0000083999 00000 n +0000084043 00000 n +0000084087 00000 n +0000084131 00000 n +0000084175 00000 n +0000084219 00000 n +0000084263 00000 n +0000084307 00000 n +0000084351 00000 n +0000084395 00000 n +0000084439 00000 n +0000084483 00000 n +0000084527 00000 n +0000084571 00000 n +0000084615 00000 n +0000084659 00000 n +0000084703 00000 n +0000084747 00000 n +0000084791 00000 n +0000084835 00000 n +0000084879 00000 n +0000084923 00000 n +0000084967 00000 n +0000085011 00000 n +0000085055 00000 n +0000085099 00000 n +0000085143 00000 n +0000085187 00000 n +0000085231 00000 n +0000085275 00000 n +0000085319 00000 n +0000085363 00000 n +0000085407 00000 n +0000085451 00000 n +0000085495 00000 n +0000085540 00000 n +0000085585 00000 n +0000085630 00000 n +0000085675 00000 n +0000085720 00000 n +0000085765 00000 n +0000085810 00000 n +0000085855 00000 n +0000085900 00000 n +0000085945 00000 n +0000085990 00000 n +0000087128 00000 n +0000087289 00000 n +0000087458 00000 n +0000087651 00000 n +0000091401 00000 n +0000091595 00000 n +0000096208 00000 n +0000096402 00000 n +0000100424 00000 n +0000100618 00000 n +0000105295 00000 n +0000105489 00000 n +0000108864 00000 n +0000109025 00000 n +0000109259 00000 n +0000109463 00000 n +0000111991 00000 n +0000112175 00000 n +0000115562 00000 n +0000115737 00000 n +0000118870 00000 n +0000119045 00000 n +0000121911 00000 n +0000122086 00000 n +0000123648 00000 n +0000123860 00000 n +0000125016 00000 n +0000125204 00000 n +0000126725 00000 n +0000126922 00000 n +0000128358 00000 n +0000128573 00000 n +0000129938 00000 n +0000130117 00000 n +0000131659 00000 n +0000131829 00000 n +0000133376 00000 n +0000133555 00000 n +0000134989 00000 n +0000135168 00000 n +0000136881 00000 n +0000137060 00000 n +0000138608 00000 n +0000138787 00000 n +0000140477 00000 n +0000140671 00000 n +0000142391 00000 n +0000142589 00000 n +0000143950 00000 n +0000144148 00000 n +0000145832 00000 n +0000146020 00000 n +0000147693 00000 n +0000147872 00000 n +0000149972 00000 n +0000150151 00000 n +0000151924 00000 n +0000152103 00000 n +0000153783 00000 n +0000153971 00000 n +0000155826 00000 n +0000156038 00000 n +0000158096 00000 n +0000158309 00000 n +0000159876 00000 n +0000160065 00000 n +0000161340 00000 n +0000161528 00000 n +0000163054 00000 n +0000163257 00000 n +0000164983 00000 n +0000165186 00000 n +0000166036 00000 n +0000166248 00000 n +0000167758 00000 n +0000167938 00000 n +0000168696 00000 n +0000168917 00000 n +0000170715 00000 n +0000170921 00000 n +0000172803 00000 n +0000173000 00000 n +0000174586 00000 n +0000174797 00000 n +0000176366 00000 n +0000176554 00000 n +0000177456 00000 n +0000177687 00000 n +0000179554 00000 n +0000179766 00000 n +0000181714 00000 n +0000181945 00000 n +0000183955 00000 n +0000184177 00000 n +0000185990 00000 n +0000186212 00000 n +0000187950 00000 n +0000188148 00000 n +0000190047 00000 n +0000190259 00000 n +0000191158 00000 n +0000191337 00000 n +0000192800 00000 n +0000192979 00000 n +0000194295 00000 n +0000194474 00000 n +0000196096 00000 n +0000196275 00000 n +0000197772 00000 n +0000197942 00000 n +0000198286 00000 n +0000198489 00000 n +0000200392 00000 n +0000200552 00000 n +0000201675 00000 n +0000201905 00000 n +0000203429 00000 n +0000203641 00000 n +0000205430 00000 n +0000205623 00000 n +0000207029 00000 n +0000207218 00000 n +0000208909 00000 n +0000209088 00000 n +0000210834 00000 n +0000211022 00000 n +0000212929 00000 n +0000213142 00000 n +0000215027 00000 n +0000215267 00000 n +0000217360 00000 n +0000217572 00000 n +0000219173 00000 n +0000219379 00000 n +0000220540 00000 n +0000220728 00000 n +0000221926 00000 n +0000222105 00000 n +0000223111 00000 n +0000223299 00000 n +0000224926 00000 n +0000225114 00000 n +0000226383 00000 n +0000226572 00000 n +0000227880 00000 n +0000228050 00000 n +0000228522 00000 n +0000228735 00000 n +0000230550 00000 n +0000230763 00000 n +0000232341 00000 n +0000232563 00000 n +0000234382 00000 n +0000234622 00000 n +0000236345 00000 n +0000236552 00000 n +0000238397 00000 n +0000238628 00000 n +0000240518 00000 n +0000240740 00000 n +0000242686 00000 n +0000242898 00000 n +0000244947 00000 n +0000245150 00000 n +0000247484 00000 n +0000247706 00000 n +0000249950 00000 n +0000250157 00000 n +0000252137 00000 n +0000252316 00000 n +0000253874 00000 n +0000254044 00000 n +0000256044 00000 n +0000256232 00000 n +0000258319 00000 n +0000258507 00000 n +0000260317 00000 n +0000260495 00000 n +0000262345 00000 n +0000262505 00000 n +0000263289 00000 n +0000263483 00000 n +0000265084 00000 n +0000265273 00000 n +0000266934 00000 n +0000267104 00000 n +0000267926 00000 n +0000268148 00000 n +0000270284 00000 n +0000270497 00000 n +0000272551 00000 n +0000272773 00000 n +0000273995 00000 n +0000274208 00000 n +0000275805 00000 n +0000276027 00000 n +0000277850 00000 n +0000278072 00000 n +0000279804 00000 n +0000279998 00000 n +0000280725 00000 n +0000280895 00000 n +0000282572 00000 n +0000282751 00000 n +0000284566 00000 n +0000284735 00000 n +0000286578 00000 n +0000286747 00000 n +0000287736 00000 n +0000287915 00000 n +0000289563 00000 n +0000289751 00000 n +0000291242 00000 n +0000291430 00000 n +0000292855 00000 n +0000293025 00000 n +0000294693 00000 n +0000294863 00000 n +0000295420 00000 n +0000295599 00000 n +0000297205 00000 n +0000297384 00000 n +0000299054 00000 n +0000299224 00000 n +0000300773 00000 n +0000300943 00000 n +0000302243 00000 n +0000302413 00000 n +0000304039 00000 n +0000304209 00000 n +0000305796 00000 n +0000306000 00000 n +0000307587 00000 n +0000307781 00000 n +0000308949 00000 n +0000309152 00000 n +0000310725 00000 n +0000310903 00000 n +0000311589 00000 n +0000311792 00000 n +0000313470 00000 n +0000313658 00000 n +0000315387 00000 n +0000315446 00000 n +0000315549 00000 n +0000315714 00000 n +0000315796 00000 n +0000315904 00000 n +0000316083 00000 n +0000316200 00000 n +0000316334 00000 n +0000316469 00000 n +0000316616 00000 n +0000316764 00000 n +0000316941 00000 n +0000317067 00000 n +0000317205 00000 n +0000317365 00000 n +0000317513 00000 n +0000317699 00000 n +0000317855 00000 n +0000317968 00000 n +0000318085 00000 n +0000318220 00000 n +0000318361 00000 n +0000318476 00000 n +0000318587 00000 n +0000318764 00000 n +0000318867 00000 n +0000318983 00000 n +0000319132 00000 n +0000319231 00000 n +0000319344 00000 n +0000319457 00000 n +0000319570 00000 n +0000319683 00000 n +0000319796 00000 n +0000319909 00000 n +0000320022 00000 n +0000320135 00000 n +0000320250 00000 n +0000320351 00000 n +0000320464 00000 n +0000320655 00000 n +0000320752 00000 n +0000320937 00000 n +0000321040 00000 n +0000321163 00000 n +0000321284 00000 n +0000321395 00000 n +0000321590 00000 n +0000321705 00000 n +0000321828 00000 n +0000321945 00000 n +0000322062 00000 n +0000322166 00000 n +0000322354 00000 n +0000322576 00000 n +0000322714 00000 n +0000322876 00000 n +0000323012 00000 n +0000323114 00000 n +0000323331 00000 n +0000323435 00000 n +0000323566 00000 n +0000323686 00000 n +0000323892 00000 n +0000324019 00000 n +0000324103 00000 n +0000324308 00000 n +0000324466 00000 n +0000324613 00000 n +0000324740 00000 n +0000324920 00000 n +0000325029 00000 n +0000325143 00000 n +0000325287 00000 n +0000325450 00000 n +0000325599 00000 n +0000325779 00000 n +0000325882 00000 n +0000326038 00000 n +0000326148 00000 n +0000326292 00000 n +0000326433 00000 n +0000326582 00000 n +0000326698 00000 n +0000326861 00000 n +0000326971 00000 n +0000327110 00000 n +0000327236 00000 n +0000327352 00000 n +0000327481 00000 n +0000327657 00000 n +0000327760 00000 n +0000327891 00000 n +0000328020 00000 n +0000328162 00000 n +0000328286 00000 n +0000328415 00000 n +0000328542 00000 n +0000328664 00000 n +0000328769 00000 n +0000328933 00000 n +0000329036 00000 n +0000329171 00000 n +0000329351 00000 n +0000329478 00000 n +0000329614 00000 n +0000329748 00000 n +0000329954 00000 n +0000330054 00000 n +0000330172 00000 n +0000330337 00000 n +0000330428 00000 n +0000330589 00000 n +0000330715 00000 n +0000330842 00000 n +0000330982 00000 n +0000331118 00000 n +0000331226 00000 n +0000331400 00000 n +0000331506 00000 n +0000331626 00000 n +0000331738 00000 n +0000331855 00000 n +0000331957 00000 n +0000332164 00000 n +0000332276 00000 n +0000332392 00000 n +0000332537 00000 n +0000332746 00000 n +0000332881 00000 n +0000333036 00000 n +0000333162 00000 n +0000333294 00000 n +0000333428 00000 n +0000333560 00000 n +0000333736 00000 n +0000333872 00000 n +0000334026 00000 n +0000334172 00000 n +0000334398 00000 n +0000334510 00000 n +0000334626 00000 n +0000334820 00000 n +0000334964 00000 n +0000335081 00000 n +0000335227 00000 n +0000335385 00000 n +0000335503 00000 n +0000335723 00000 n +0000335822 00000 n +0000335940 00000 n +0000336068 00000 n +0000336226 00000 n +0000336397 00000 n +0000336513 00000 n +0000336624 00000 n +0000336760 00000 n +0000336891 00000 n +0000337039 00000 n +0000337184 00000 n +0000337285 00000 n +0000337462 00000 n +0000337574 00000 n +0000337705 00000 n +0000337829 00000 n +0000337996 00000 n +0000338113 00000 n +0000338243 00000 n +0000338383 00000 n +0000338520 00000 n +0000338656 00000 n +0000338792 00000 n +0000338929 00000 n +0000339041 00000 n +0000339216 00000 n +0000339319 00000 n +0000339470 00000 n +0000339572 00000 n +0000339694 00000 n +0000339826 00000 n +0000339946 00000 n +0000340061 00000 n +0000340175 00000 n +0000340288 00000 n +0000340405 00000 n +0000340520 00000 n +0000340636 00000 n +0000340751 00000 n +0000340867 00000 n +0000340989 00000 n +0000341110 00000 n +0000341229 00000 n +0000341347 00000 n +0000341467 00000 n +0000341570 00000 n +0000341736 00000 n +0000341856 00000 n +0000342025 00000 n +0000342213 00000 n +0000342394 00000 n +0000342550 00000 n +0000342738 00000 n +0000342842 00000 n +0000342995 00000 n +0000343106 00000 n +0000343214 00000 n +0000343364 00000 n +0000343468 00000 n +0000343586 00000 n +0000343704 00000 n +0000343825 00000 n +0000343961 00000 n +0000344060 00000 n trailer -<<71cc99b012ddb9744eb11230f6ad49a0>]>> +<<1ca9696980f269e0c25de21a8ecbd4b4>]>> startxref -316009 +344676 %%EOF diff --git a/docs/docbook/stylesheets/ldp.dsl.in b/docs/docbook/stylesheets/ldp.dsl.in deleted file mode 100644 index d6e06f4b6d1..00000000000 --- a/docs/docbook/stylesheets/ldp.dsl.in +++ /dev/null @@ -1,256 +0,0 @@ - - - -]]> - - -]]> -]> - - - - - - -;; ============================== -;; customize the print stylesheet -;; ============================== - -(declare-characteristic preserve-sdata? - ;; this is necessary because right now jadetex does not understand - ;; symbolic entities, whereas things work well with numeric entities. - "UNREGISTERED::James Clark//Characteristic::preserve-sdata?" - #f) - -(define %generate-article-toc% - ;; Should a Table of Contents be produced for Articles? - #t) - -(define (toc-depth nd) - 2) - -(define %generate-article-titlepage-on-separate-page% - ;; Should the article title page be on a separate page? - #t) - -(define %section-autolabel% - ;; Are sections enumerated? - #t) - -(define %footnote-ulinks% - ;; Generate footnotes for ULinks? - #f) - -(define %bop-footnotes% - ;; Make "bottom-of-page" footnotes? - #f) - -(define %body-start-indent% - ;; Default indent of body text - 0pi) - -(define %para-indent-firstpara% - ;; First line start-indent for the first paragraph - 0pt) - -(define %para-indent% - ;; First line start-indent for paragraphs (other than the first) - 0pt) - -(define %block-start-indent% - ;; Extra start-indent for block-elements - 0pt) - -(define formal-object-float - ;; Do formal objects float? - #t) - -(define %hyphenation% - ;; Allow automatic hyphenation? - #t) - -(define %admon-graphics% - ;; Use graphics in admonitions? - #f) - - - - - - - - - - -(declare-characteristic preserve-sdata? - ;; this is necessary because right now jadetex does not understand - ;; symbolic entities, whereas things work well with numeric entities. - "UNREGISTERED::James Clark//Characteristic::preserve-sdata?" - #f) - -(define %generate-legalnotice-link% - ;; put the legal notice in a separate file - #t) - -(define %admon-graphics-path% - ;; use graphics in admonitions, set their - "../images/") - -(define %admon-graphics% - #f) - -(define %funcsynopsis-decoration% - ;; make funcsynopsis look pretty - #t) - -(define %html-ext% - ;; when producing HTML files, use this extension - ".html") - -(define %generate-book-toc% - ;; Should a Table of Contents be produced for books? - #t) - -(define %generate-article-toc% - ;; Should a Table of Contents be produced for articles? - #t) - -(define %generate-part-toc% - ;; Should a Table of Contents be produced for parts? - #t) - -(define %generate-book-titlepage% - ;; produce a title page for books - #t) - -(define %generate-article-titlepage% - ;; produce a title page for articles - #t) - -(define (chunk-skip-first-element-list) - ;; forces the Table of Contents on separate page - '()) - -(define (list-element-list) - ;; fixes bug in Table of Contents generation - '()) - -(define %root-filename% - ;; The filename of the root HTML document (e.g, "index"). - "index") - -(define %shade-verbatim% - ;; verbatim sections will be shaded if t(rue) - #t) - -(define %use-id-as-filename% - ;; Use ID attributes as name for component HTML files? - #t) - -(define %graphic-extensions% - ;; graphic extensions allowed - '("gif" "png" "jpg" "jpeg" "tif" "tiff" "eps" "epsf" )) - -(define %graphic-default-extension% - "gif") - -(define %section-autolabel% - ;; For enumerated sections (1.1, 1.1.1, 1.2, etc.) - #t) - -(define (toc-depth nd) - ;; more depth (2 levels) to toc; instead of flat hierarchy - ;; 2) - 4) - -(element emphasis - ;; make role=strong equate to bold for emphasis tag - (if (equal? (attribute-string "role") "strong") - (make element gi: "STRONG" (process-children)) - (make element gi: "EM" (process-children)))) - -(define (book-titlepage-recto-elements) - ;; elements on a book's titlepage - ;; note: added revhistory to the default list - (list (normalize "title") - (normalize "subtitle") - (normalize "graphic") - (normalize "mediaobject") - (normalize "corpauthor") - (normalize "authorgroup") - (normalize "author") - (normalize "editor") - (normalize "copyright") - (normalize "revhistory") - (normalize "abstract") - (normalize "legalnotice"))) - -(define (article-titlepage-recto-elements) - ;; elements on an article's titlepage - ;; note: added othercredit to the default list - (list (normalize "title") - (normalize "subtitle") - (normalize "authorgroup") - (normalize "author") - (normalize "othercredit") - (normalize "releaseinfo") - (normalize "copyright") - (normalize "pubdate") - (normalize "revhistory") - (normalize "abstract"))) - -(mode article-titlepage-recto-mode - - (element contrib - ;; print out with othercredit information; for translators, etc. - (make sequence - (make element gi: "SPAN" - attributes: (list (list "CLASS" (gi))) - (process-children)))) - - (element othercredit - ;; print out othercredit information; for translators, etc. - (let ((author-name (author-string)) - (author-contrib (select-elements (children (current-node)) - (normalize "contrib")))) - (make element gi: "P" - attributes: (list (list "CLASS" (gi))) - (make element gi: "B" - (literal author-name) - (literal " - ")) - (process-node-list author-contrib)))) -) - -(define (article-title nd) - (let* ((artchild (children nd)) - (artheader (select-elements artchild (normalize "artheader"))) - (artinfo (select-elements artchild (normalize "articleinfo"))) - (ahdr (if (node-list-empty? artheader) - artinfo - artheader)) - (ahtitles (select-elements (children ahdr) - (normalize "title"))) - (artitles (select-elements artchild (normalize "title"))) - (titles (if (node-list-empty? artitles) - ahtitles - artitles))) - (if (node-list-empty? titles) - "" - (node-list-first titles)))) - - - - - - - - - diff --git a/docs/manpages/findsmb.1 b/docs/manpages/findsmb.1 index a6bb66b7f1b..c10076fd5c5 100644 --- a/docs/manpages/findsmb.1 +++ b/docs/manpages/findsmb.1 @@ -1,27 +1,28 @@ -.\" This manpage has been automatically generated by docbook2man-spec -.\" from a DocBook document. docbook2man-spec can be found at: -.\" +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . -.TH "FINDSMB" "1" "28 January 2002" "" "" +.TH "FINDSMB" "1" "20 augustus 2002" "" "" .SH NAME findsmb \- list info about machines that respond to SMB name queries on a subnet .SH SYNOPSIS -.sp -\fBfindsmb\fR [ \fBsubnet broadcast address\fR ] + +\fBfindsmb\fR [ \fBsubnet broadcast address\fR ] + .SH "DESCRIPTION" .PP -This perl script is part of the Sambasuite. +This perl script is part of the Samba suite. .PP \fBfindsmb\fR is a perl script that prints out several pieces of information about machines -on a subnet that respond to SMB name query requests. -It uses \fB nmblookup(1)\fRto obtain this information. +on a subnet that respond to SMB name query requests. +It uses \fB nmblookup(1)\fR and \fBsmbclient(1)\fR to obtain this information. .SH "OPTIONS" .TP \fBsubnet broadcast address\fR Without this option, \fBfindsmb -\fRwill probe the subnet of the machine where +\fR will probe the subnet of the machine where \fBfindsmb\fR is run. This value is passed to \fBnmblookup\fR as part of the -B option @@ -40,16 +41,16 @@ Machines that are running Windows, Windows 95 or Windows 98 will not show any information about the operating system or server version. .PP -The command must be run on a system without \fBnmbd\fRrunning. +The command must be run on a system without \fBnmbd\fR running. If \fBnmbd\fR is running on the system, you will -only get the IP address and the DNS name of the machine. To -get proper responses from Windows 95 and Windows 98 machines, +only get the IP address and the DNS name of the machine. To +get proper responses from Windows 95 and Windows 98 machines, the command must be run as root. .PP For example running \fBfindsmb\fR on a machine without \fBnmbd\fR running would yield output similar to the following -.sp + .nf IP ADDR NETBIOS NAME WORKGROUP/OS/VERSION --------------------------------------------------------------------- @@ -64,7 +65,6 @@ IP ADDR NETBIOS NAME WORKGROUP/OS/VERSION 192.168.35.93 FROGSTAR-PC [MVENGR] [Windows 5.0] [Windows 2000 LAN Manager] 192.168.35.97 HERBNT1 *[HERB-NT] [Windows NT 4.0] [NT LAN Manager 4.0] -.sp .fi .SH "VERSION" .PP @@ -72,9 +72,9 @@ This man page is correct for version 2.2 of the Samba suite. .SH "SEE ALSO" .PP -\fBnmbd(8)\fR, +\fBnmbd(8)\fR , \fBsmbclient(1) -\fR +\fR , and \fBnmblookup(1)\fR .SH "AUTHOR" .PP The original Samba software and related utilities @@ -86,5 +86,5 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another excellent piece of Open Source software, available at ftp://ftp.icce.rug.nl/pub/unix/ ) and updated for the Samba 2.0 -release by Jeremy Allison. The conversion to DocBook for +release by Jeremy Allison. The conversion to DocBook for Samba 2.2 was done by Gerald Carter diff --git a/docs/manpages/smbclient.1 b/docs/manpages/smbclient.1 index 641f2d4a9f1..765c9e52734 100644 --- a/docs/manpages/smbclient.1 +++ b/docs/manpages/smbclient.1 @@ -1,21 +1,22 @@ -.\" This manpage has been automatically generated by docbook2man-spec -.\" from a DocBook document. docbook2man-spec can be found at: -.\" +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . -.TH "SMBCLIENT" "1" "08 May 2002" "" "" +.TH "SMBCLIENT" "1" "20 augustus 2002" "" "" .SH NAME smbclient \- ftp-like client to access SMB/CIFS resources on servers .SH SYNOPSIS -.sp -\fBsmbclient\fR \fBservicename\fR [ \fBpassword\fR ] [ \fB-b \fR ] [ \fB-d debuglevel\fR ] [ \fB-D Directory\fR ] [ \fB-U username\fR ] [ \fB-W workgroup\fR ] [ \fB-M \fR ] [ \fB-m maxprotocol\fR ] [ \fB-A authfile\fR ] [ \fB-N\fR ] [ \fB-l logfile\fR ] [ \fB-L \fR ] [ \fB-I destinationIP\fR ] [ \fB-E \fR ] [ \fB-c \fR ] [ \fB-i scope\fR ] [ \fB-O \fR ] [ \fB-p port\fR ] [ \fB-R \fR ] [ \fB-s \fR ] [ \fB-TIXFqgbNan\fR ] + +\fBsmbclient\fR \fBservicename\fR [ \fBpassword\fR ] [ \fB-b \fR ] [ \fB-d debuglevel\fR ] [ \fB-D Directory\fR ] [ \fB-U username\fR ] [ \fB-W workgroup\fR ] [ \fB-M \fR ] [ \fB-m maxprotocol\fR ] [ \fB-A authfile\fR ] [ \fB-N\fR ] [ \fB-l logfile\fR ] [ \fB-L \fR ] [ \fB-I destinationIP\fR ] [ \fB-E \fR ] [ \fB-c \fR ] [ \fB-i scope\fR ] [ \fB-O \fR ] [ \fB-p port\fR ] [ \fB-R \fR ] [ \fB-s \fR ] [ \fB-TIXFqgbNan\fR ] + .SH "DESCRIPTION" .PP -This tool is part of the Sambasuite. +This tool is part of the Samba suite. .PP \fBsmbclient\fR is a client that can \&'talk' to an SMB/CIFS server. It offers an interface -similar to that of the ftp program (see \fBftp(1)\fR). +similar to that of the ftp program (see \fBftp(1)\fR). Operations include things like getting files from the server to the local machine, putting files from the local machine to the server, retrieving directory information from the server @@ -26,14 +27,15 @@ and so on. servicename is the name of the service you want to use on the server. A service name takes the form \fI//server/service\fR where \fIserver -\fRis the NetBIOS name of the SMB/CIFS server +\fR is the NetBIOS name of the SMB/CIFS server offering the desired service and \fIservice\fR -is the name of the service offered. Thus to connect to +is the name of the service offered. Thus to connect to the service "printer" on the SMB/CIFS server "smbserver", you would use the servicename \fI//smbserver/printer \fR + Note that the server name required is NOT necessarily -the IP (DNS) host name of the server ! The name required is +the IP (DNS) host name of the server ! The name required is a NetBIOS server name, which may or may not be the same as the IP hostname of the machine running the server. @@ -59,7 +61,7 @@ required, simply press ENTER to provide a null password.) Note: Some servers (including OS/2 and Windows for Workgroups) insist on an uppercase password. Lowercase -or mixed case passwords may be rejected by these servers. +or mixed case passwords may be rejected by these servers. Be cautious about including passwords in scripts. .TP @@ -69,7 +71,7 @@ Specifies the location of the all important .TP \fB-O socket options\fR TCP socket options to set on the client -socket. See the socket options parameter in the \fI smb.conf (5)\fR manpage for the list of valid +socket. See the socket options parameter in the \fI smb.conf (5)\fR manpage for the list of valid options. .TP \fB-R \fR @@ -85,7 +87,7 @@ cause names to be resolved as follows : \(bu lmhosts : Lookup an IP address in the Samba lmhosts file. If the line in lmhosts has -no name type attached to the NetBIOS name (see the lmhosts(5)for details) then +no name type attached to the NetBIOS name (see the lmhosts(5) for details) then any name type matches for lookup. .TP 0.2i \(bu @@ -94,14 +96,14 @@ name to IP address resolution, using the system \fI/etc/hosts \fR, NIS, or DNS lookups. This method of name resolution is operating system dependent, for instance on IRIX or Solaris this may be controlled by the \fI/etc/nsswitch.conf\fR -file). Note that this method is only used if the NetBIOS name +file). Note that this method is only used if the NetBIOS name type being queried is the 0x20 (server) name type, otherwise it is ignored. .TP 0.2i \(bu wins : Query a name with the IP address listed in the \fIwins server\fR -parameter. If no WINS server has +parameter. If no WINS server has been specified this method will be ignored. .TP 0.2i \(bu @@ -112,17 +114,15 @@ parameter. This is the least reliable of the name resolution methods as it depends on the target host being on a locally connected subnet. .RE -.PP + If this parameter is not set then the name resolve order -defined in the \fIsmb.conf\fR file parameter +defined in the \fIsmb.conf\fR file parameter (name resolve order) will be used. -.PP -.PP + The default order is lmhosts, host, wins, bcast and without this parameter or any entry in the \fIname resolve order -\fRparameter of the \fIsmb.conf\fR file the name resolution +\fR parameter of the \fIsmb.conf\fR file the name resolution methods will be attempted in this order. -.PP .TP \fB-M NetBIOS name\fR This options allows you to send messages, using @@ -139,7 +139,7 @@ The message is also automatically truncated if the message is over 1600 bytes, as this is the limit of the protocol. One useful trick is to cat the message through -\fBsmbclient\fR. For example: \fB cat mymessage.txt | smbclient -M FRED \fR will +\fBsmbclient\fR. For example: \fB cat mymessage.txt | smbclient -M FRED \fR will send the message in the file \fImymessage.txt\fR to the machine FRED. @@ -147,7 +147,7 @@ You may also find the \fI-U\fR and \fI-I\fR options useful, as they allow you to control the FROM and TO parts of the message. -See the message command parameter in the \fI smb.conf(5)\fR for a description of how to handle incoming +See the message command parameter in the \fI smb.conf(5)\fR for a description of how to handle incoming WinPopup messages in Samba. \fBNote\fR: Copy WinPopup into the startup group @@ -197,7 +197,7 @@ data, and should only be used when investigating a problem. Levels above 3 are designed for use only by developers and generate HUGE amounts of log data, most of which is extremely cryptic. If \fIdebuglevel\fR is set to the letter 'A', then \fBall -\fRdebug messages will be printed. This setting +\fR debug messages will be printed. This setting is for developers only (and people who \fBreally\fR want to know how the code works internally). @@ -222,7 +222,7 @@ The base name is used to generate actual log file names. For example, if the name specified was "log", the debug file would be \fIlog.client\fR. -The log file generated is never removed by the client. +The log file generated is never removed by the client. .TP \fB-h\fR Print the usage message for the client. @@ -267,11 +267,11 @@ a \fBPASSWD\fR environment variable from which to read the password. A third option is to use a credentials file which -contains the plaintext of the domain name, username and password. This +contains the plaintext of the domain name, username and password. This option is mainly provided for scripts where the admin doesn't wish to pass the credentials on the command line or via environment variables. If this method is used, make certain that the permissions -on the file restrict access from unwanted users. See the +on the file restrict access from unwanted users. See the \fI-A\fR for more details. Be cautious about including passwords in scripts or in @@ -284,15 +284,14 @@ it in directly. \fB-A filename\fR This option allows you to specify a file from which to read the username, domain name, and -password used in the connection. The format of the file is +password used in the connection. The format of the file is + -.sp .nf username = password = domain = -.sp .fi If the domain parameter is missing the current workgroup name @@ -302,8 +301,8 @@ access from unwanted users. \fB-L\fR This option allows you to look at what services are available on a server. You use it as \fBsmbclient -L -host\fR and a list should appear. The \fI-I -\fRoption may be useful if your NetBIOS names don't +host\fR and a list should appear. The \fI-I +\fR option may be useful if your NetBIOS names don't match your TCP/IP DNS host names or if you are trying to reach a host on another network. .TP @@ -311,7 +310,7 @@ host on another network. This option tells \fBsmbclient\fR how to interpret filenames coming from the remote server. Usually Asian language multibyte UNIX implementations use different character sets than -SMB/CIFS servers (\fBEUC\fR instead of \fB SJIS\fR for example). Setting this parameter will let +SMB/CIFS servers (\fBEUC\fR instead of \fB SJIS\fR for example). Setting this parameter will let \fBsmbclient\fR convert between the UNIX filenames and the SMB filenames correctly. This option has not been seriously tested and may have some problems. @@ -334,7 +333,7 @@ servers. .TP \fB-T tar options\fR smbclient may be used to create \fBtar(1) -\fRcompatible backups of all the files on an SMB/CIFS +\fR compatible backups of all the files on an SMB/CIFS share. The secondary tar flags that can be given to this option are : .RS @@ -361,18 +360,18 @@ their creation dates restored properly. \fII\fR - Include files and directories. Is the default behavior when filenames are specified above. Causes tar files to be included in an extract or create (and therefore -everything else to be excluded). See example below. Filename globbing -works in one of two ways. See r below. +everything else to be excluded). See example below. Filename globbing +works in one of two ways. See r below. .TP 0.2i \(bu \fIX\fR - Exclude files and directories. Causes tar files to be excluded from an extract or create. See -example below. Filename globbing works in one of two ways now. +example below. Filename globbing works in one of two ways now. See \fIr\fR below. .TP 0.2i \(bu \fIb\fR - Blocksize. Must be followed -by a valid (greater than zero) blocksize. Causes tar file to be +by a valid (greater than zero) blocksize. Causes tar file to be written out in blocksize*TBLOCK (usually 512 byte) blocks. .TP 0.2i \(bu @@ -382,14 +381,14 @@ files that have the archive bit set. Useful only with the .TP 0.2i \(bu \fIq\fR - Quiet. Keeps tar from printing -diagnostics as it works. This is the same as tarmode quiet. +diagnostics as it works. This is the same as tarmode quiet. .TP 0.2i \(bu \fIr\fR - Regular expression include -or exclude. Uses regular expression matching for -excluding or excluding files if compiled with HAVE_REGEX_H. -However this mode can be very slow. If not compiled with -HAVE_REGEX_H, does a limited wildcard match on '*' and '?'. +or exclude. Uses regular expression matching for +excluding or excluding files if compiled with HAVE_REGEX_H. +However this mode can be very slow. If not compiled with +HAVE_REGEX_H, does a limited wildcard match on '*' and '?'. .TP 0.2i \(bu \fIN\fR - Newer than. Must be followed @@ -403,63 +402,50 @@ specified are backed up to the tar file. Useful only with the archive bit to be reset when a file is backed up. Useful with the \fIg\fR and \fIc\fR flags. .RE -.PP + \fBTar Long File Names\fR -.PP -.PP + \fBsmbclient\fR's tar option now supports long file names both on backup and restore. However, the full path -name of the file must be less than 1024 bytes. Also, when +name of the file must be less than 1024 bytes. Also, when a tar archive is created, \fBsmbclient\fR's tar option places all files in the archive with relative names, not absolute names. -.PP -.PP + \fBTar Filenames\fR -.PP -.PP + All file names can be given as DOS path names (with '\\' as the component separator) or as UNIX path names (with '/' as the component separator). -.PP -.PP + \fBExamples\fR -.PP -.PP + Restore from tar file \fIbackup.tar\fR into myshare on mypc (no password on share). -.PP -.PP + \fBsmbclient //mypc/yshare "" -N -Tx backup.tar -\fR.PP -.PP +\fR + Restore everything except \fIusers/docs\fR -.PP -.PP + \fBsmbclient //mypc/myshare "" -N -TXx backup.tar users/docs\fR -.PP -.PP -Create a tar file of the files beneath \fI users/docs\fR. -.PP -.PP + +Create a tar file of the files beneath \fI users/docs\fR. + \fBsmbclient //mypc/myshare "" -N -Tc backup.tar users/docs \fR -.PP -.PP + Create the same tar file as above, but now use a DOS path name. -.PP -.PP + \fBsmbclient //mypc/myshare "" -N -tc backup.tar users\\edocs \fR -.PP -.PP + Create a tar file of all the files and directories in the share. -.PP -.PP + \fBsmbclient //mypc/myshare "" -N -Tc backup.tar * -\fR.PP +\fR .TP \fB-D initial directory\fR Change to initial directory before starting. Probably @@ -467,7 +453,7 @@ only of any use with the tar -T option. .TP \fB-c command string\fR command string is a semicolon-separated list of -commands to be executed instead of prompting from stdin. \fI -N\fR is implied by \fI-c\fR. +commands to be executed instead of prompting from stdin. \fI -N\fR is implied by \fI-c\fR. This is particularly useful in scripts and for printing stdin to the server, e.g. \fB-c 'print -'\fR. @@ -486,14 +472,14 @@ The prompt indicates that the client is ready and waiting to carry out a user command. Each command is a single word, optionally followed by parameters specific to that command. Command and parameters are space-delimited unless these notes specifically -state otherwise. All commands are case-insensitive. Parameters to +state otherwise. All commands are case-insensitive. Parameters to commands may or may not be case sensitive, depending on the command. .PP You can specify file names which have spaces in them by quoting the name with double quotes, for example "a long file name". .PP Parameters shown in square brackets (e.g., "[parameter]") are -optional. If not given, the command will use suitable defaults. Parameters +optional. If not given, the command will use suitable defaults. Parameters shown in angle brackets (e.g., "") are required. .PP Note that all commands operating on the server are actually @@ -504,12 +490,12 @@ The commands available are given here in alphabetical order. .TP \fB? [command]\fR If \fIcommand\fR is specified, the ? command will display -a brief informative message about the specified command. If no +a brief informative message about the specified command. If no command is specified, a list of available commands will be displayed. .TP \fB! [shell command]\fR -If \fIshell command\fR is specified, the ! +If \fIshell command\fR is specified, the ! command will execute a shell locally and run the specified shell command. If no command is specified, a local shell will be run. .TP @@ -559,7 +545,7 @@ from the program. \fBget [local file name]\fR Copy the file called \fIremote file name\fR from the server to the machine running the client. If specified, name -the local copy \fIlocal file name\fR. Note that all transfers in +the local copy \fIlocal file name\fR. Note that all transfers in \fBsmbclient\fR are binary. See also the lowercase command. .TP @@ -717,7 +703,7 @@ outside the currently connected share. This is enforced by the Samba server. .TP \fBtar [IXbgNa]\fR Performs a tar operation - see the \fI-T -\fRcommand line option above. Behavior may be affected +\fR command line option above. Behavior may be affected by the tarmode command (see below). Using g (incremental) and N (newer) will affect tarmode settings. Note that using the "-" option with tar x may not work - use the command line option instead. @@ -750,18 +736,18 @@ supports the LANMAN2 protocol or above. .SH "ENVIRONMENT VARIABLES" .PP The variable \fBUSER\fR may contain the -username of the person using the client. This information is -used only if the protocol level is high enough to support +username of the person using the client. This information is +used only if the protocol level is high enough to support session-level passwords. .PP The variable \fBPASSWD\fR may contain -the password of the person using the client. This information is +the password of the person using the client. This information is used only if the protocol level is high enough to support session-level passwords. .PP The variable \fBLIBSMB_PROG\fR may contain the path, executed with system(), which the client should connect -to instead of connecting to a server. This functionality is primarily +to instead of connecting to a server. This functionality is primarily intended as a development aid, and works best when using a LMHOSTS file .SH "INSTALLATION" @@ -781,7 +767,7 @@ and writeable only by the user. .PP To test the client, you will need to know the name of a running SMB/CIFS server. It is possible to run \fBsmbd(8) -\fRas an ordinary user - running that server as a daemon +\fR as an ordinary user - running that server as a daemon on a user-accessible port (typically any port number over 1024) would provide a suitable test server. .SH "DIAGNOSTICS" @@ -808,5 +794,5 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another excellent piece of Open Source software, available at ftp://ftp.icce.rug.nl/pub/unix/ ) and updated for the Samba 2.0 -release by Jeremy Allison. The conversion to DocBook for +release by Jeremy Allison. The conversion to DocBook for Samba 2.2 was done by Gerald Carter -- cgit From f76a5431f0448efbc879aee965c643e2e362632a Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 28 Aug 2002 10:34:28 +0000 Subject: 'No news is good news' might sometimes be confusing, at least to me :-) Volker --- source/utils/net_rpc.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c index a7d2a08b380..cb5350b3ed3 100644 --- a/source/utils/net_rpc.c +++ b/source/utils/net_rpc.c @@ -243,6 +243,7 @@ static NTSTATUS rpc_join_oldstyle_internals(const DOM_SID *domain_sid, struct cl extern pstring global_myname; fstring trust_passwd; unsigned char orig_trust_passwd_hash[16]; + NTSTATUS result; fstrcpy(trust_passwd, global_myname); strlower(trust_passwd); @@ -256,7 +257,12 @@ static NTSTATUS rpc_join_oldstyle_internals(const DOM_SID *domain_sid, struct cl E_md4hash(trust_passwd, orig_trust_passwd_hash); - return trust_pw_change_and_store_it(cli, mem_ctx, orig_trust_passwd_hash); + result = trust_pw_change_and_store_it(cli, mem_ctx, orig_trust_passwd_hash); + + if (NT_STATUS_IS_OK(result)) + printf("Joined domain %s.\n",lp_workgroup()); + + return result; } /** -- cgit From 64e5287b06d0c7e84497c57bab664649f10826b6 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 10:50:29 +0000 Subject: Remove obsolete questions - Preparing for new up-to-date version of faq --- docs/faq/Samba-Server-FAQ.sgml | 85 -------------------------- docs/faq/Samba-meta-FAQ.sgml | 133 +---------------------------------------- docs/faq/sambafaq.sgml | 5 +- 3 files changed, 6 insertions(+), 217 deletions(-) diff --git a/docs/faq/Samba-Server-FAQ.sgml b/docs/faq/Samba-Server-FAQ.sgml index eddad19e253..8f57e73aa31 100644 --- a/docs/faq/Samba-Server-FAQ.sgml +++ b/docs/faq/Samba-Server-FAQ.sgml @@ -329,22 +329,6 @@ to specify a service name correctly), read on: Some clients force service names into upper case. -My client reports "cannot find domain controller", "cannot log on to the network" or similar

David.Chappell@mail.trincoll.edu
+ + + 8 May 1996 + + +Samba Internals + + +Character Handling + +This section describes character set handling in Samba, as implemented in +Samba 3.0 and above + + + +In the past Samba had very ad-hoc character set handling. Scattered +throughout the code were numerous calls which converted particular +strings to/from DOS codepages. The problem is that there was no way of +telling if a particular char* is in dos codepage or unix +codepage. This led to a nightmare of code that tried to cope with +particular cases without handlingt the general case. + + + +The new functions + + +The new system works like this: + + + + + all char* strings inside Samba are "unix" strings. These are + multi-byte strings that are in the charset defined by the "unix + charset" option in smb.conf. + + + + there is no single fixed character set for unix strings, but any + character set that is used does need the following properties: + + + + + must not contain NULLs except for termination + + + + must be 7-bit compatible with C strings, so that a constant + string or character in C will be byte-for-byte identical to the + equivalent string in the chosen character set. + + + + when you uppercase or lowercase a string it does not become + longer than the original string + + + + must be able to correctly hold all characters that your client + will throw at it + + + + + For example, UTF-8 is fine, and most multi-byte asian character sets + are fine, but UCS2 could not be used for unix strings as they + contain nulls. + + + + + when you need to put a string into a buffer that will be sent on the + wire, or you need a string in a character set format that is + compatible with the clients character set then you need to use a + pull_ or push_ function. The pull_ functions pull a string from a + wire buffer into a (multi-byte) unix string. The push_ functions + push a string out to a wire buffer. + + + + the two main pull_ and push_ functions you need to understand are + pull_string and push_string. These functions take a base pointer + that should point at the start of the SMB packet that the string is + in. The functions will check the flags field in this packet to + automatically determine if the packet is marked as a unicode packet, + and they will choose whether to use unicode for this string based on + that flag. You may also force this decision using the STR_UNICODE or + STR_ASCII flags. For use in smbd/ and libsmb/ there are wrapper + functions clistr_ and srvstr_ that call the pull_/push_ functions + with the appropriate first argument. + + + + You may also call the pull_ascii/pull_ucs2 or push_ascii/push_ucs2 + functions if you know that a particular string is ascii or + unicode. There are also a number of other convenience functions in + charcnv.c that call the pull_/push_ functions with particularly + common arguments, such as pull_ascii_pstring() + + + + + The biggest thing to remember is that internal (unix) strings in Samba + may now contain multi-byte characters. This means you cannot assume + that characters are always 1 byte long. Often this means that you will + have to convert strings to ucs2 and back again in order to do some + (seemingly) simple task. For examples of how to do this see functions + like strchr_m(). I know this is very slow, and we will eventually + speed it up but right now we want this stuff correct not fast. + + + + all lp_ functions now return unix strings. The magic "DOS" flag on + parameters is gone. + + + + all vfs functions take unix strings. Don't convert when passing to them + + + + + + + +Macros in byteorder.h + + +This section describes the macros defined in byteorder.h. These macros +are used extensively in the Samba code. + + + +CVAL(buf,pos) + + +returns the byte at offset pos within buffer buf as an unsigned character. + + + + +PVAL(buf,pos) +returns the value of CVAL(buf,pos) cast to type unsigned integer. + + + +SCVAL(buf,pos,val) +sets the byte at offset pos within buffer buf to value val. + + + +SVAL(buf,pos) + + returns the value of the unsigned short (16 bit) little-endian integer at + offset pos within buffer buf. An integer of this type is sometimes + refered to as "USHORT". + + + + +IVAL(buf,pos) +returns the value of the unsigned 32 bit little-endian integer at offset +pos within buffer buf. + + + +SVALS(buf,pos) +returns the value of the signed short (16 bit) little-endian integer at +offset pos within buffer buf. + + + +IVALS(buf,pos) +returns the value of the signed 32 bit little-endian integer at offset pos +within buffer buf. + + + +SSVAL(buf,pos,val) +sets the unsigned short (16 bit) little-endian integer at offset pos within +buffer buf to value val. + + + +SIVAL(buf,pos,val) +sets the unsigned 32 bit little-endian integer at offset pos within buffer +buf to the value val. + + + +SSVALS(buf,pos,val) +sets the short (16 bit) signed little-endian integer at offset pos within +buffer buf to the value val. + + + +SIVALS(buf,pos,val) +sets the signed 32 bit little-endian integer at offset pos withing buffer +buf to the value val. + + + +RSVAL(buf,pos) +returns the value of the unsigned short (16 bit) big-endian integer at +offset pos within buffer buf. + + + +RIVAL(buf,pos) +returns the value of the unsigned 32 bit big-endian integer at offset +pos within buffer buf. + + + +RSSVAL(buf,pos,val) +sets the value of the unsigned short (16 bit) big-endian integer at +offset pos within buffer buf to value val. +refered to as "USHORT". + + + +RSIVAL(buf,pos,val) +sets the value of the unsigned 32 bit big-endian integer at offset +pos within buffer buf to value val. + + + + + + +LAN Manager Samba API + + +This section describes the functions need to make a LAN Manager RPC call. +This information had been obtained by examining the Samba code and the LAN +Manager 2.0 API documentation. It should not be considered entirely +reliable. + + + + +call_api(int prcnt, int drcnt, int mprcnt, int mdrcnt, + char *param, char *data, char **rparam, char **rdata); + + + + +This function is defined in client.c. It uses an SMB transaction to call a +remote api. + + + +Parameters + +The parameters are as follows: + + + + prcnt: the number of bytes of parameters begin sent. + + + drcnt: the number of bytes of data begin sent. + + + mprcnt: the maximum number of bytes of parameters which should be returned + + + mdrcnt: the maximum number of bytes of data which should be returned + + + param: a pointer to the parameters to be sent. + + + data: a pointer to the data to be sent. + + + rparam: a pointer to a pointer which will be set to point to the returned + paramters. The caller of call_api() must deallocate this memory. + + + rdata: a pointer to a pointer which will be set to point to the returned + data. The caller of call_api() must deallocate this memory. + + + + +These are the parameters which you ought to send, in the order of their +appearance in the parameter block: + + + + + +An unsigned 16 bit integer API number. You should set this value with +SSVAL(). I do not know where these numbers are described. + + + +An ASCIIZ string describing the parameters to the API function as defined +in the LAN Manager documentation. The first parameter, which is the server +name, is ommited. This string is based uppon the API function as described +in the manual, not the data which is actually passed. + + + +An ASCIIZ string describing the data structure which ought to be returned. + + + +Any parameters which appear in the function call, as defined in the LAN +Manager API documentation, after the "Server" and up to and including the +"uLevel" parameters. + + + +An unsigned 16 bit integer which gives the size in bytes of the buffer we +will use to receive the returned array of data structures. Presumably this +should be the same as mdrcnt. This value should be set with SSVAL(). + + + +An ASCIIZ string describing substructures which should be returned. If no +substructures apply, this string is of zero length. + + + + + +The code in client.c always calls call_api() with no data. It is unclear +when a non-zero length data buffer would be sent. + + + + + +Return value + + +The returned parameters (pointed to by rparam), in their order of appearance +are: + + + + +An unsigned 16 bit integer which contains the API function's return code. +This value should be read with SVAL(). + + + +An adjustment which tells the amount by which pointers in the returned +data should be adjusted. This value should be read with SVAL(). Basically, +the address of the start of the returned data buffer should have the returned +pointer value added to it and then have this value subtracted from it in +order to obtain the currect offset into the returned data buffer. + + + +A count of the number of elements in the array of structures returned. +It is also possible that this may sometimes be the number of bytes returned. + + + + +When call_api() returns, rparam points to the returned parameters. The +first if these is the result code. It will be zero if the API call +suceeded. This value by be read with "SVAL(rparam,0)". + + + +The second parameter may be read as "SVAL(rparam,2)". It is a 16 bit offset +which indicates what the base address of the returned data buffer was when +it was built on the server. It should be used to correct pointer before +use. + + + +The returned data buffer contains the array of returned data structures. +Note that all pointers must be adjusted before use. The function +fix_char_ptr() in client.c can be used for this purpose. + + + +The third parameter (which may be read as "SVAL(rparam,4)") has something to +do with indicating the amount of data returned or possibly the amount of +data which can be returned if enough buffer space is allowed. + + + + + + +Code character table + +Certain data structures are described by means of ASCIIz strings containing +code characters. These are the code characters: + + + + +W a type byte little-endian unsigned integer + + +N a count of substructures which follow + + +D a four byte little-endian unsigned integer + + +B a byte (with optional count expressed as trailing ASCII digits) + + +z a four byte offset to a NULL terminated string + + +l a four byte offset to non-string user data + + +b an offset to data (with count expressed as trailing ASCII digits) + + +r pointer to returned data buffer??? + + +L length in bytes of returned data buffer??? + + +h number of bytes of information available??? + + + + + diff --git a/docs/docbook/devdoc/parsing.sgml b/docs/docbook/devdoc/parsing.sgml new file mode 100644 index 00000000000..0121935d26d --- /dev/null +++ b/docs/docbook/devdoc/parsing.sgml @@ -0,0 +1,239 @@ + + + + ChrisHertel + + November 1997 + + +The smb.conf file + + +Lexical Analysis + + +Basically, the file is processed on a line by line basis. There are +four types of lines that are recognized by the lexical analyzer +(params.c): + + + + +Blank lines - Lines containing only whitespace. + + +Comment lines - Lines beginning with either a semi-colon or a +pound sign (';' or '#'). + + +Section header lines - Lines beginning with an open square bracket ('['). + + +Parameter lines - Lines beginning with any other character. +(The default line type.) + + + + +The first two are handled exclusively by the lexical analyzer, which +ignores them. The latter two line types are scanned for + + + + + - Section names + + + - Parameter names + + + - Parameter values + + + + +These are the only tokens passed to the parameter loader +(loadparm.c). Parameter names and values are divided from one +another by an equal sign: '='. + + + +Handling of Whitespace + + +Whitespace is defined as all characters recognized by the isspace() +function (see ctype(3C)) except for the newline character ('\n') +The newline is excluded because it identifies the end of the line. + + + + +The lexical analyzer scans past white space at the beginning of a line. + + + +Section and parameter names may contain internal white space. All +whitespace within a name is compressed to a single space character. + + + +Internal whitespace within a parameter value is kept verbatim with +the exception of carriage return characters ('\r'), all of which +are removed. + + + +Leading and trailing whitespace is removed from names and values. + + + + + + + +Handling of Line Continuation + + +Long section header and parameter lines may be extended across +multiple lines by use of the backslash character ('\\'). Line +continuation is ignored for blank and comment lines. + + + +If the last (non-whitespace) character within a section header or on +a parameter line is a backslash, then the next line will be +(logically) concatonated with the current line by the lexical +analyzer. For example: + + + + param name = parameter value string \ + with line continuation. + + +Would be read as + + + param name = parameter value string with line continuation. + + + +Note that there are five spaces following the word 'string', +representing the one space between 'string' and '\\' in the top +line, plus the four preceeding the word 'with' in the second line. +(Yes, I'm counting the indentation.) + + + +Line continuation characters are ignored on blank lines and at the end +of comments. They are *only* recognized within section and parameter +lines. + + + + + +Line Continuation Quirks + +Note the following example: + + + param name = parameter value string \ + \ + with line continuation. + + + +The middle line is *not* parsed as a blank line because it is first +concatonated with the top line. The result is + + + +param name = parameter value string with line continuation. + + +The same is true for comment lines. + + + param name = parameter value string \ + ; comment \ + with a comment. + + +This becomes: + + +param name = parameter value string ; comment with a comment. + + + +On a section header line, the closing bracket (']') is considered a +terminating character, and the rest of the line is ignored. The lines + + + + [ section name ] garbage \ + param name = value + + +are read as + + + [section name] + param name = value + + + + + + +Syntax + +The syntax of the smb.conf file is as follows: + + + <file> :== { <section> } EOF + <section> :== <section header> { <parameter line> } + <section header> :== '[' NAME ']' + <parameter line> :== NAME '=' VALUE NL + + +Basically, this means that + + + + a file is made up of zero or more sections, and is terminated by + an EOF (we knew that). + + + + A section is made up of a section header followed by zero or more + parameter lines. + + + + A section header is identified by an opening bracket and + terminated by the closing bracket. The enclosed NAME identifies + the section. + + + + A parameter line is divided into a NAME and a VALUE. The *first* + equal sign on the line separates the NAME from the VALUE. The + VALUE is terminated by a newline character (NL = '\n'). + + + + + +About params.c + + +The parsing of the config file is a bit unusual if you are used to +lex, yacc, bison, etc. Both lexical analysis (scanning) and parsing +are performed by params.c. Values are loaded via callbacks to +loadparm.c. + + + + diff --git a/docs/docbook/devdoc/unix-smb.sgml b/docs/docbook/devdoc/unix-smb.sgml new file mode 100644 index 00000000000..be796988572 --- /dev/null +++ b/docs/docbook/devdoc/unix-smb.sgml @@ -0,0 +1,311 @@ + + + + AndrewTridgell + + April 1995 + + +NetBIOS in a Unix World + + +Introduction + +This is a short document that describes some of the issues that +confront a SMB implementation on unix, and how Samba copes with +them. They may help people who are looking at unix<->PC +interoperability. + + + +It was written to help out a person who was writing a paper on unix to +PC connectivity. + + + + + +Usernames + +The SMB protocol has only a loose username concept. Early SMB +protocols (such as CORE and COREPLUS) have no username concept at +all. Even in later protocols clients often attempt operations +(particularly printer operations) without first validating a username +on the server. + + + +Unix security is based around username/password pairs. A unix box +should not allow clients to do any substantive operation without some +sort of validation. + + + +The problem mostly manifests itself when the unix server is in "share +level" security mode. This is the default mode as the alternative +"user level" security mode usually forces a client to connect to the +server as the same user for each connected share, which is +inconvenient in many sites. + + + +In "share level" security the client normally gives a username in the +"session setup" protocol, but does not supply an accompanying +password. The client then connects to resources using the "tree +connect" protocol, and supplies a password. The problem is that the +user on the PC types the username and the password in different +contexts, unaware that they need to go together to give access to the +server. The username is normally the one the user typed in when they +"logged onto" the PC (this assumes Windows for Workgroups). The +password is the one they chose when connecting to the disk or printer. + + + +The user often chooses a totally different username for their login as +for the drive connection. Often they also want to access different +drives as different usernames. The unix server needs some way of +divining the correct username to combine with each password. + + + +Samba tries to avoid this problem using several methods. These succeed +in the vast majority of cases. The methods include username maps, the +service%user syntax, the saving of session setup usernames for later +validation and the derivation of the username from the service name +(either directly or via the user= option). + + + + + +File Ownership + + +The commonly used SMB protocols have no way of saying "you can't do +that because you don't own the file". They have, in fact, no concept +of file ownership at all. + + + +This brings up all sorts of interesting problems. For example, when +you copy a file to a unix drive, and the file is world writeable but +owned by another user the file will transfer correctly but will +receive the wrong date. This is because the utime() call under unix +only succeeds for the owner of the file, or root, even if the file is +world writeable. For security reasons Samba does all file operations +as the validated user, not root, so the utime() fails. This can stuff +up shared development diectories as programs like "make" will not get +file time comparisons right. + + + +There are several possible solutions to this problem, including +username mapping, and forcing a specific username for particular +shares. + + + + + +Passwords + + +Many SMB clients uppercase passwords before sending them. I have no +idea why they do this. Interestingly WfWg uppercases the password only +if the server is running a protocol greater than COREPLUS, so +obviously it isn't just the data entry routines that are to blame. + + + +Unix passwords are case sensitive. So if users use mixed case +passwords they are in trouble. + + + +Samba can try to cope with this by either using the "password level" +option which causes Samba to try the offered password with up to the +specified number of case changes, or by using the "password server" +option which allows Samba to do its validation via another machine +(typically a WinNT server). + + + +Samba supports the password encryption method used by SMB +clients. Note that the use of password encryption in Microsoft +networking leads to password hashes that are "plain text equivalent". +This means that it is *VERY* important to ensure that the Samba +smbpasswd file containing these password hashes is only readable +by the root user. See the documentation ENCRYPTION.txt for more +details. + + + + + +Locking + +The locking calls available under a DOS/Windows environment are much +richer than those available in unix. This means a unix server (like +Samba) choosing to use the standard fcntl() based unix locking calls +to implement SMB locking has to improvise a bit. + + + +One major problem is that dos locks can be in a 32 bit (unsigned) +range. Unix locking calls are 32 bits, but are signed, giving only a 31 +bit range. Unfortunately OLE2 clients use the top bit to select a +locking range used for OLE semaphores. + + + +To work around this problem Samba compresses the 32 bit range into 31 +bits by appropriate bit shifting. This seems to work but is not +ideal. In a future version a separate SMB lockd may be added to cope +with the problem. + + + +It also doesn't help that many unix lockd daemons are very buggy and +crash at the slightest provocation. They normally go mostly unused in +a unix environment because few unix programs use byte range +locking. The stress of huge numbers of lock requests from dos/windows +clients can kill the daemon on some systems. + + + +The second major problem is the "opportunistic locking" requested by +some clients. If a client requests opportunistic locking then it is +asking the server to notify it if anyone else tries to do something on +the same file, at which time the client will say if it is willing to +give up its lock. Unix has no simple way of implementing +opportunistic locking, and currently Samba has no support for it. + + + + + +Deny Modes + + +When a SMB client opens a file it asks for a particular "deny mode" to +be placed on the file. These modes (DENY_NONE, DENY_READ, DENY_WRITE, +DENY_ALL, DENY_FCB and DENY_DOS) specify what actions should be +allowed by anyone else who tries to use the file at the same time. If +DENY_READ is placed on the file, for example, then any attempt to open +the file for reading should fail. + + + +Unix has no equivalent notion. To implement this Samba uses either lock +files based on the files inode and placed in a separate lock +directory or a shared memory implementation. The lock file method +is clumsy and consumes processing and file resources, +the shared memory implementation is vastly prefered and is turned on +by default for those systems that support it. + + + + + +Trapdoor UIDs + +A SMB session can run with several uids on the one socket. This +happens when a user connects to two shares with different +usernames. To cope with this the unix server needs to switch uids +within the one process. On some unixes (such as SCO) this is not +possible. This means that on those unixes the client is restricted to +a single uid. + + + +Note that you can also get the "trapdoor uid" message for other +reasons. Please see the FAQ for details. + + + + + +Port numbers + +There is a convention that clients on sockets use high "unprivilaged" +port numbers (>1000) and connect to servers on low "privilaged" port +numbers. This is enforced in Unix as non-root users can't open a +socket for listening on port numbers less than 1000. + + + +Most PC based SMB clients (such as WfWg and WinNT) don't follow this +convention completely. The main culprit is the netbios nameserving on +udp port 137. Name query requests come from a source port of 137. This +is a problem when you combine it with the common firewalling technique +of not allowing incoming packets on low port numbers. This means that +these clients can't query a netbios nameserver on the other side of a +low port based firewall. + + + +The problem is more severe with netbios node status queries. I've +found that WfWg, Win95 and WinNT3.5 all respond to netbios node status +queries on port 137 no matter what the source port was in the +request. This works between machines that are both using port 137, but +it means it's not possible for a unix user to do a node status request +to any of these OSes unless they are running as root. The answer comes +back, but it goes to port 137 which the unix user can't listen +on. Interestingly WinNT3.1 got this right - it sends node status +responses back to the source port in the request. + + + + + +Protocol Complexity + +There are many "protocol levels" in the SMB protocol. It seems that +each time new functionality was added to a Microsoft operating system, +they added the equivalent functions in a new protocol level of the SMB +protocol to "externalise" the new capabilities. + + + +This means the protocol is very "rich", offering many ways of doing +each file operation. This means SMB servers need to be complex and +large. It also means it is very difficult to make them bug free. It is +not just Samba that suffers from this problem, other servers such as +WinNT don't support every variation of every call and it has almost +certainly been a headache for MS developers to support the myriad of +SMB calls that are available. + + + +There are about 65 "top level" operations in the SMB protocol (things +like SMBread and SMBwrite). Some of these include hundreds of +sub-functions (SMBtrans has at least 120 sub-functions, like +DosPrintQAdd and NetSessionEnum). All of them take several options +that can change the way they work. Many take dozens of possible +"information levels" that change the structures that need to be +returned. Samba supports all but 2 of the "top level" functions. It +supports only 8 (so far) of the SMBtrans sub-functions. Even NT +doesn't support them all. + + + +Samba currently supports up to the "NT LM 0.12" protocol, which is the +one preferred by Win95 and WinNT3.5. Luckily this protocol level has a +"capabilities" field which specifies which super-duper new-fangled +options the server suports. This helps to make the implementation of +this protocol level much easier. + + + +There is also a problem with the SMB specications. SMB is a X/Open +spec, but the X/Open book is far from ideal, and fails to cover many +important issues, leaving much to the imagination. Microsoft recently +renamed the SMB protocol CIFS (Common Internet File System) and have +published new specifications. These are far superior to the old +X/Open documents but there are still undocumented calls and features. +This specification is actively being worked on by a CIFS developers +mailing list hosted by Microsft. + + + + -- cgit From 31567c3762c0588886792265d7b48432c50f03ba Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:17:26 +0000 Subject: Add cifsntdomain --- docs/docbook/devdoc/cifsntdomain.sgml | 2923 +++++++++++++++++++++++++++++++++ docs/docbook/devdoc/dev-doc.sgml | 8 +- 2 files changed, 2929 insertions(+), 2 deletions(-) create mode 100644 docs/docbook/devdoc/cifsntdomain.sgml diff --git a/docs/docbook/devdoc/cifsntdomain.sgml b/docs/docbook/devdoc/cifsntdomain.sgml new file mode 100644 index 00000000000..f64e1b37d63 --- /dev/null +++ b/docs/docbook/devdoc/cifsntdomain.sgml @@ -0,0 +1,2923 @@ + + + + LukeLeighton +
lkcl@switchboard.net
+
+ + PaulAshton +
paul@argo.demon.co.uk
+
+ + DuncanStansfield +
duncans@sco.com
+
+ + 01 November 97(version 0.0.24) +
+ +NT Domain RPC's + + +Introduction + + + +This document contains information to provide an NT workstation with login +services, without the need for an NT server. It is the sgml version of http://mailhost.cb1.com/~lkcl/cifsntdomain.txt, controlled by Luke. + + + +It should be possible to select a domain instead of a workgroup (in the NT +workstation's TCP/IP settings) and after the obligatory reboot, type in a +username, password, select a domain and successfully log in. I would +appreciate any feedback on your experiences with this process, and any +comments, corrections and additions to this document. + + + +The packets described here can be easily derived from (and are probably +better understood using) Netmon.exe. You will need to use the version +of Netmon that matches your system, in order to correctly decode the +NETLOGON, lsarpc and srvsvc Transact pipes. This document is derived from +NT Service Pack 1 and its corresponding version of Netmon. It is intended +that an annotated packet trace be produced, which will likely be more +instructive than this document. + + + +Also needed, to fully implement NT Domain Login Services, is the +document describing the cryptographic part of the NT authentication. +This document is available from comp.protocols.smb; from the ntsecurity.net +digest and from the samba digest, amongst other sources. + + + +A copy is available from: + + +http://ntbugtraq.rc.on.ca/SCRIPTS/WA.EXE?A2=ind9708;L=ntbugtraq;O=A;P=2935 + +http://mailhost.cb1.com/~lkcl/crypt.html + + +A c-code implementation, provided by Linus Nordberg +of this protocol is available from: + + +http://samba.org/cgi-bin/mfs/01/digest/1997/97aug/0391.html +http://mailhost.cb1.com/~lkcl/crypt.txt + + +Also used to provide debugging information is the Check Build version of +NT workstation, and enabling full debugging in NETLOGON. This is +achieved by setting the following REG_SZ registry key to 0x1ffffff: + + +HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters + +Incorrect direct editing of the registry can cause your +machine to fail. Then again, so can incorrect implementation of this +protocol. See "Liability:" above. + + +Bear in mind that each packet over-the-wire will have its origin in an +API call. Therefore, there are likely to be structures, enumerations +and defines that are usefully documented elsewhere. + + + +This document is by no means complete or authoritative. Missing sections +include, but are not limited to: + + + + + +Mappings of RIDs to usernames (and vice-versa). + +What a User ID is and what a Group ID is. + +The exact meaning/definition of various magic constants or enumerations. + +The reply error code and use of that error code when a +workstation becomes a member of a domain (to be described later). +Failure to return this error code will make the workstation report +that it is already a member of the domain. + +the cryptographic side of the NetrServerPasswordSet command, +which would allow the workstation to change its password. This password is +used to generate the long-term session key. [It is possible to reject this +command, and keep the default workstation password]. + + + + +Sources + + +cket Traces from Netmonitor (Service Pack 1 and above) +ul Ashton and Luke Leighton's other "NT Domain" doc. +FS documentation - cifs6.txt +FS documentation - cifsrap2.txt + + + + + +Credits + + +Paul Ashton: loads of work with Net Monitor; understanding the NT authentication system; reference implementation of the NT domain support on which this document is originally based. +Duncan Stansfield: low-level analysis of MSRPC Pipes. +Linus Nordberg: producing c-code from Paul's crypto spec. +Windows Sourcer development team + + + + + + + +Notes and Structures + + +Notes + + + +In the SMB Transact pipes, some "Structures", described here, appear to be +4-byte aligned with the SMB header, at their start. Exactly which +"Structures" need aligning is not precisely known or documented. + + + +In the UDP NTLOGON Mailslots, some "Structures", described here, appear to be +2-byte aligned with the start of the mailslot, at their start. + + + +Domain SID is of the format S-revision-version-auth1-auth2...authN. +e.g S-1-5-123-456-789-123-456. the 5 could be a sub-revision. + + + +any undocumented buffer pointers must be non-zero if the string buffer it +refers to contains characters. exactly what value they should be is unknown. +0x0000 0002 seems to do the trick to indicate that the buffer exists. a +NULL buffer pointer indicates that the string buffer is of zero length. +If the buffer pointer is NULL, then it is suspected that the structure it +refers to is NOT put into (or taken out of) the SMB data stream. This is +empirically derived from, for example, the LSA SAM Logon response packet, +where if the buffer pointer is NULL, the user information is not inserted +into the data stream. Exactly what happens with an array of buffer pointers +is not known, although an educated guess can be made. + + + +an array of structures (a container) appears to have a count and a pointer. +if the count is zero, the pointer is also zero. no further data is put +into or taken out of the SMB data stream. if the count is non-zero, then +the pointer is also non-zero. immediately following the pointer is the +count again, followed by an array of container sub-structures. the count +appears a third time after the last sub-structure. + + + + + + +Enumerations + + +MSRPC Header type +command number in the msrpc packet header + + + + MSRPC_Request: + 0x00 + + + MSRPC_Response: + 0x02 + + + MSRPC_Bind: + 0x0B + + + MSRPC_BindAck: + 0x0C + + + + + +MSRPC Packet info + +The meaning of these flags is undocumented + + + + FirstFrag: + 0x01 + + + LastFrag: + 0x02 + + + NotaFrag: + 0x04 + + + RecRespond: + 0x08 + + + NoMultiplex: + 0x10 + + + NotForIdemp: + 0x20 + + + NotforBcast: + 0x40 + + + NoUuid: + 0x80 + + + + + + + + +Structures + +VOID * +sizeof VOID* is 32 bits. + + +char +sizeof char is 8 bits. + + +UTIME +UTIME is 32 bits, indicating time in seconds since 01jan1970. documented in cifs6.txt (section 3.5 page, page 30). + + +NTTIME +NTTIME is 64 bits. documented in cifs6.txt (section 3.5 page, page 30). + + + +DOM_SID (domain SID structure) + + + + + UINT32 + num of sub-authorities in domain SID + + + + UINT8 + SID revision number + + + UINT8 + num of sub-authorities in domain SID + + + UINT8[6] + 6 bytes for domain SID - Identifier Authority. + + + + UINT16[n_subauths] + domain SID sub-authorities + + + + +Note: the domain SID is documented elsewhere. + + + + + +STR (string) + +STR (string) is a char[] : a null-terminated string of ascii characters. + + + + +UNIHDR (unicode string header) + + + + + UINT16 + length of unicode string + + + + UINT16 + max length of unicode string + + + + UINT32 + 4 - undocumented. + + + + + + + +UNIHDR2 (unicode string header plus buffer pointer) + + + + + UNIHDR + unicode string header + + + + + VOID* + undocumented buffer pointer + + + + + + + +UNISTR (unicode string) + + + + + UINT16[] + null-terminated string of unicode characters. + + + + + + + +NAME (length-indicated unicode string) + + + + + UINT32 + length of unicode string + + + UINT16[] + null-terminated string of unicode characters. + + + + + + + +UNISTR2 (aligned unicode string) + + + + UINT8[] + padding to get unicode string 4-byte aligned with the start of the SMB header. + + + UINT32 + max length of unicode string + + + UINT32 + 0 - undocumented + + + UINT32 + length of unicode string + + + UINT16[] + string of uncode characters + + + + + + + +OBJ_ATTR (object attributes) + + + + UINT32 +0x18 - length (in bytes) including the length field. + + VOID* +0 - root directory (pointer) + + VOID* +0 - object name (pointer) + + UINT32 +0 - attributes (undocumented) + + VOID* +0 - security descriptior (pointer) + + UINT32 + 0 - security quality of service + + + + + + + +POL_HND (LSA policy handle) + + + + char[20] + policy handle + + + + + + +DOM_SID2 (domain SID structure, SIDS stored in unicode) + + + + UINT32 + 5 - SID type + + + UINT32 + 0 - undocumented + + + UNIHDR2 + domain SID unicode string header + + + UNISTR + domain SID unicode string + + + +Note: there is a conflict between the unicode string header and the unicode string itself as to which to use to indicate string length. this will need to be resolved. + +Note: the SID type indicates, for example, an alias; a well-known group etc. this is documented somewhere. + + + + +DOM_RID (domain RID structure) + + + + UINT32 +5 - well-known SID. 1 - user SID (see ShowACLs) + + UINT32 + 5 - undocumented + + + UINT32 + domain RID + + + UINT32 + 0 - domain index out of above reference domains + + + + + + +LOG_INFO (server, account, client structure) + +Note: logon server name starts with two '\' characters and is upper case. + +Note: account name is the logon client name from the LSA Request Challenge, with a $ on the end of it, in upper case. + + + + VOID* + undocumented buffer pointer + + + UNISTR2 + logon server unicode string + + + UNISTR2 + account name unicode string + + + UINT16 + sec_chan - security channel type + + + UNISTR2 + logon client machine unicode string + + + + + + +CLNT_SRV (server, client names structure) + +Note: logon server name starts with two '\' characters and is upper case. + + + + VOID* + undocumented buffer pointer + + + UNISTR2 + logon server unicode string + + + VOID* + undocumented buffer pointer + + + UNISTR2 + logon client machine unicode string + + + + + + +CREDS (credentials + time stamp) + + + + char[8] + credentials + + + UTIME + time stamp + + + + + + +CLNT_INFO2 (server, client structure, client credentials) + +Note: whenever this structure appears in a request, you must take a copy of the client-calculated credentials received, because they will beused in subsequent credential checks. the presumed intention is to + maintain an authenticated request/response trail. + + + + CLNT_SRV + client and server names + + + UINT8[] + ???? padding, for 4-byte alignment with SMB header. + + + VOID* + pointer to client credentials. + + + CREDS + client-calculated credentials + client time + + + + + + +CLNT_INFO (server, account, client structure, client credentials) +Note: whenever this structure appears in a request, you must take a copy of the client-calculated credentials received, because they will be used in subsequent credential checks. the presumed intention is to maintain an authenticated request/response trail. + + + + LOG_INFO + logon account info + + + CREDS + client-calculated credentials + client time + + + + + + +ID_INFO_1 (id info structure, auth level 1) + + + + VOID* + ptr_id_info_1 + + + UNIHDR + domain name unicode header + + + UINT32 + param control + + + UINT64 + logon ID + + + UNIHDR + user name unicode header + + + UNIHDR + workgroup name unicode header + + + char[16] + arc4 LM OWF Password + + + char[16] + arc4 NT OWF Password + + + UNISTR2 + domain name unicode string + + + UNISTR2 + user name unicode string + + + UNISTR2 + workstation name unicode string + + + + + + +SAM_INFO (sam logon/logoff id info structure) + +Note: presumably, the return credentials is supposedly for the server to verify that the credential chain hasn't been compromised. + + + + CLNT_INFO2 + client identification/authentication info + + + VOID* + pointer to return credentials. + + + CRED + return credentials - ignored. + + + UINT16 + logon level + + + UINT16 + switch value + + + + + + switch (switch_value) + case 1: + { + ID_INFO_1 id_info_1; + } + + + + + +GID (group id info) + + + + UINT32 +group id + + UINT32 +user attributes (only used by NT 3.1 and 3.51) + + + + + +DOM_REF (domain reference info) + + + + VOID* + undocumented buffer pointer. + + + UINT32 + num referenced domains? + + + VOID* + undocumented domain name buffer pointer. + + + UINT32 + 32 - max number of entries + + + UINT32 + 4 - num referenced domains? + + + UNIHDR2 + domain name unicode string header + + + UNIHDR2[num_ref_doms-1] + referenced domain unicode string headers + + + UNISTR + domain name unicode string + + + DOM_SID[num_ref_doms] + referenced domain SIDs + + + + + + +DOM_INFO (domain info, levels 3 and 5 are the same)) + + + + UINT8[] + ??? padding to get 4-byte alignment with start of SMB header + + + UINT16 + domain name string length * 2 + + + UINT16 + domain name string length * 2 + + + VOID* + undocumented domain name string buffer pointer + + + VOID* +undocumented domain SID string buffer pointer + + UNISTR2 +domain name (unicode string) + + DOM_SID + domain SID + + + + + + +USER_INFO (user logon info) + +Note: it would be nice to know what the 16 byte user session key is for. + + + + NTTIME + logon time + + + NTTIME + logoff time + + + NTTIME + kickoff time + + + NTTIME + password last set time + + + NTTIME + password can change time + + + NTTIME + password must change time + + + UNIHDR + username unicode string header + + + UNIHDR + user's full name unicode string header + + + UNIHDR + logon script unicode string header + + + UNIHDR + profile path unicode string header + + + UNIHDR + home directory unicode string header + + + UNIHDR + home directory drive unicode string header + + + UINT16 + logon count + + + UINT16 + bad password count + + + UINT32 + User ID + + + UINT32 + Group ID + + + UINT32 + num groups + + + VOID* + undocumented buffer pointer to groups. + + + UINT32 + user flags + + + char[16] + user session key + + + UNIHDR + logon server unicode string header + + + UNIHDR + logon domain unicode string header + + + VOID* + undocumented logon domain id pointer + + + char[40] + 40 undocumented padding bytes. future expansion? + + + UINT32 + 0 - num_other_sids? + + + VOID* + NULL - undocumented pointer to other domain SIDs. + + + UNISTR2 + username unicode string + + + UNISTR2 + user's full name unicode string + + + UNISTR2 + logon script unicode string + + + UNISTR2 + profile path unicode string + + + UNISTR2 + home directory unicode string + + + UNISTR2 + home directory drive unicode string + + + UINT32 + num groups + + + GID[num_groups] + group info + + + UNISTR2 + logon server unicode string + + + UNISTR2 + logon domain unicode string + + + DOM_SID + domain SID + + + DOM_SID[num_sids] + other domain SIDs? + + + + + + +SH_INFO_1_PTR (pointers to level 1 share info strings) + +Note: see cifsrap2.txt section5, page 10. + + +0 for shi1_type indicates a Disk. +1 for shi1_type indicates a Print Queue. +2 for shi1_type indicates a Device. +3 for shi1_type indicates an IPC pipe. +0x8000 0000 (top bit set in shi1_type) indicates a hidden share. + + + + + + VOID* + shi1_netname - pointer to net name + + + UINT32 + shi1_type - type of share. 0 - undocumented. + + + VOID* + shi1_remark - pointer to comment. + + + + + + + +SH_INFO_1_STR (level 1 share info strings) + + + + UNISTR2 + shi1_netname - unicode string of net name + + + UNISTR2 + shi1_remark - unicode string of comment. + + + + + + +SHARE_INFO_1_CTR + +share container with 0 entries: + + + + UINT32 + 0 - EntriesRead + + + UINT32 + 0 - Buffer + + + +share container with > 0 entries: + + + + UINT32 + EntriesRead + + + UINT32 + non-zero - Buffer + + + UINT32 + EntriesRead + + + SH_INFO_1_PTR[EntriesRead] + share entry pointers + + + SH_INFO_1_STR[EntriesRead] + share entry strings + + + UINT8[] + padding to get unicode string 4-byte aligned with start of the SMB header. + + + UINT32 + EntriesRead + + + UINT32 + 0 - padding + + + + + + + +SERVER_INFO_101 + +Note: see cifs6.txt section 6.4 - the fields described therein will be of assistance here. for example, the type listed below is the same as fServerType, which is described in 6.4.1. + + + + SV_TYPE_WORKSTATION + 0x00000001 All workstations + + + SV_TYPE_SERVER + 0x00000002 All servers + + + SV_TYPE_SQLSERVER + 0x00000004 Any server running with SQL server + + + SV_TYPE_DOMAIN_CTRL + 0x00000008 Primary domain controller + + + SV_TYPE_DOMAIN_BAKCTRL + 0x00000010 Backup domain controller + + + SV_TYPE_TIME_SOURCE + 0x00000020 Server running the timesource service + + + SV_TYPE_AFP + 0x00000040 Apple File Protocol servers + + + SV_TYPE_NOVELL + 0x00000080 Novell servers + + + SV_TYPE_DOMAIN_MEMBER + 0x00000100 Domain Member + + + SV_TYPE_PRINTQ_SERVER + 0x00000200 Server sharing print queue + + + SV_TYPE_DIALIN_SERVER + 0x00000400 Server running dialin service. + + + SV_TYPE_XENIX_SERVER + 0x00000800 Xenix server + + + SV_TYPE_NT + 0x00001000 NT server + + + SV_TYPE_WFW + 0x00002000 Server running Windows for + + + SV_TYPE_SERVER_NT + 0x00008000 Windows NT non DC server + + + SV_TYPE_POTENTIAL_BROWSER + 0x00010000 Server that can run the browser service + + + SV_TYPE_BACKUP_BROWSER + 0x00020000 Backup browser server + + + SV_TYPE_MASTER_BROWSER + 0x00040000 Master browser server + + + SV_TYPE_DOMAIN_MASTER + 0x00080000 Domain Master Browser server + + + SV_TYPE_LOCAL_LIST_ONLY + 0x40000000 Enumerate only entries marked "local" + + + SV_TYPE_DOMAIN_ENUM + 0x80000000 Enumerate Domains. The pszServer and pszDomain parameters must be NULL. + + + + + + + UINT32 + 500 - platform_id + + + VOID* + pointer to name + + + UINT32 + 5 - major version + + + UINT32 +4 - minor version + + UINT32 +type (SV_TYPE_... bit field) + + VOID* + pointer to comment + + + UNISTR2 + sv101_name - unicode string of server name + + + UNISTR2 + sv_101_comment - unicode string of server comment. + + + UINT8[] + padding to get unicode string 4-byte aligned with start of the SMB header. + + + + + + + + +MSRPC over Transact Named Pipe + +For details on the SMB Transact Named Pipe, see cifs6.txt + + +MSRPC Pipes + + +The MSRPC is conducted over an SMB Transact Pipe with a name of +\PIPE\. You must first obtain a 16 bit file handle, by +sending a SMBopenX with the pipe name \PIPE\srvsvc for +example. You can then perform an SMB Trans, +and must carry out an SMBclose on the file handle once you are finished. + + + +Trans Requests must be sent with two setup UINT16s, no UINT16 params (none +known about), and UINT8 data parameters sufficient to contain the MSRPC +header, and MSRPC data. The first UINT16 setup parameter must be either +0x0026 to indicate an RPC, or 0x0001 to indicate Set Named Pipe Handle +state. The second UINT16 parameter must be the file handle for the pipe, +obtained above. + + + +The Data section for an API Command of 0x0026 (RPC pipe) in the Trans +Request is the RPC Header, followed by the RPC Data. The Data section for +an API Command of 0x0001 (Set Named Pipe Handle state) is two bytes. The +only value seen for these two bytes is 0x00 0x43. + + + +MSRPC Responses are sent as response data inside standard SMB Trans +responses, with the MSRPC Header, MSRPC Data and MSRPC tail. + + + +It is suspected that the Trans Requests will need to be at least 2-byte +aligned (probably 4-byte). This is standard practice for SMBs. It is also +independent of the observed 4-byte alignments with the start of the MSRPC +header, including the 4-byte alignment between the MSRPC header and the +MSRPC data. + + + +First, an SMBtconX connection is made to the IPC$ share. The connection +must be made using encrypted passwords, not clear-text. Then, an SMBopenX +is made on the pipe. Then, a Set Named Pipe Handle State must be sent, +after which the pipe is ready to accept API commands. Lastly, and SMBclose +is sent. + + + +To be resolved: + + + +lkcl/01nov97 there appear to be two additional bytes after the null-terminated \PIPE\ name for the RPC pipe. Values seen so far are +listed below: + + + initial SMBopenX request: RPC API command 0x26 params: + "\\PIPE\\lsarpc" 0x65 0x63; 0x72 0x70; 0x44 0x65; + "\\PIPE\\srvsvc" 0x73 0x76; 0x4E 0x00; 0x5C 0x43; + + + + + +Header + +[section to be rewritten, following receipt of work by Duncan Stansfield] + +Interesting note: if you set packed data representation to 0x0100 0000 +then all 4-byte and 2-byte word ordering is turned around! + +The start of each of the NTLSA and NETLOGON named pipes begins with: + + +offsetVariable typeVariable data +00UINT85 - RPC major version +01UINT80 - RPC minor version +02UINT82 - RPC response packet +03UINT83 - (FirstFrag bit-wise or with LastFrag) +04UINT320x1000 0000 - packed data representation +08UINT16fragment length - data size (bytes) inc header and tail. +0AUINT160 - authentication length +0CUINT32call identifier. matches 12th UINT32 of incoming RPC data. +10UINT32allocation hint - data size (bytes) minus header and tail. +14UINT160 - presentation context identifier +16UINT80 - cancel count +17UINT8in replies: 0 - reserved; in requests: opnum - see #defines. +18......start of data (goes on for allocation_hint bytes) + + + +RPC_Packet for request, response, bind and bind acknowledgement + + + + UINT8 versionmaj +reply same as request (0x05) + + UINT8 versionmin +reply same as request (0x00) + + UINT8 type +one of the MSRPC_Type enums + + UINT8 flags +reply same as request (0x00 for Bind, 0x03 for Request) + + UINT32 representation +reply same as request (0x00000010) + + UINT16 fraglength +the length of the data section of the SMB trans packet + + UINT16 authlength + + + + UINT32 callid +call identifier. (e.g. 0x00149594) + + * stub USE TvPacket +the remainder of the packet depending on the "type" + + + + + +Interface identification + +the interfaces are numbered. as yet I haven't seen more than one interface used on the same pipe name srvsvc + + +abstract (0x4B324FC8, 0x01D31670, 0x475A7812, 0x88E16EBF, 0x00000003) +transfer (0x8A885D04, 0x11C91CEB, 0x0008E89F, 0x6048102B, 0x00000002) + + + + + +RPC_Iface RW + + + + UINT8 byte[16] +16 bytes of number + + UINT32 version +the interface number + + + + + + +RPC_ReqBind RW + +the remainder of the packet after the header if "type" was Bind in the response header, "type" should be BindAck + + + + UINT16 maxtsize +maximum transmission fragment size (0x1630) + + UINT16 maxrsize +max receive fragment size (0x1630) + + UINT32 assocgid +associated group id (0x0) + + UINT32 numelements +the number of elements (0x1) + + UINT16 contextid +presentation context identifier (0x0) + + UINT8 numsyntaxes +the number of syntaxes (has always been 1?)(0x1) + + UINT8[] +4-byte alignment padding, against SMB header + + * abstractint USE RPC_Iface +num and vers. of interface client is using + + * transferint USE RPC_Iface + num and vers. of interface to use for replies + + + + + + +RPC_Address RW + + + + UINT16 length +length of the string including null terminator + + * port USE string +the string above in single byte, null terminated form + + + + + +RPC_ResBind RW + +the response to place after the header in the reply packet + + + + UINT16 maxtsize +same as request + + UINT16 maxrsize +same as request + + UINT32 assocgid +zero + + * secondaddr USE RPC_Address +the address string, as described earlier + + UINT8[] +4-byte alignment padding, against SMB header + + UINT8 numresults +the number of results (0x01) + + UINT8[] +4-byte alignment padding, against SMB header + + UINT16 result +result (0x00 = accept) + + UINT16 reason +reason (0x00 = no reason specified) + + * transfersyntax USE RPC_Iface +the transfer syntax from the request + + + + + +RPC_ReqNorm RW + +the remainder of the packet after the header for every other other request + + + + UINT32 allochint +the size of the stub data in bytes + + UINT16 prescontext +presentation context identifier (0x0) + + UINT16 opnum +operation number (0x15) + + * stub USE TvPacket +a packet dependent on the pipe name (probably the interface) and the op number) + + + + + +RPC_ResNorm RW + + + + UINT32 allochint +# size of the stub data in bytes + + UINT16 prescontext +# presentation context identifier (same as request) + + UINT8 cancelcount +# cancel count? (0x0) + + UINT8 reserved +# 0 - one byte padding + + * stub USE TvPacket +# the remainder of the reply + + + + + + +Tail + +The end of each of the NTLSA and NETLOGON named pipes ends with: + + + + ...... + end of data + + + UINT32 + return code + + + + + + +RPC Bind / Bind Ack + + +RPC Binds are the process of associating an RPC pipe (e.g \PIPE\lsarpc) +with a "transfer syntax" (see RPC_Iface structure). The purpose for doing +this is unknown. + + +Note: The RPC_ResBind SMB Transact request is sent with two uint16 setup parameters. The first is 0x0026; the second is the file handle + returned by the SMBopenX Transact response. + +Note: The RPC_ResBind members maxtsize, maxrsize and assocgid are the same in the response as the same members in the RPC_ReqBind. The + RPC_ResBind member transfersyntax is the same in the response as + the + +Note: The RPC_ResBind response member secondaddr contains the name of what is presumed to be the service behind the RPC pipe. The + mapping identified so far is: + + + + + initial SMBopenX request: + RPC_ResBind response: + + + + "\\PIPE\\srvsvc" + "\\PIPE\\ntsvcs" + + + "\\PIPE\\samr" + "\\PIPE\\lsass" + + + "\\PIPE\\lsarpc" + "\\PIPE\\lsass" + + + "\\PIPE\\wkssvc" + "\\PIPE\\wksvcs" + + + "\\PIPE\\NETLOGON" + "\\PIPE\\NETLOGON" + + + +Note: The RPC_Packet fraglength member in both the Bind Request and Bind Acknowledgment must contain the length of the entire RPC data, including the RPC_Packet header. + +Request: + + +RPC_Packet +RPC_ReqBind + + +Response: + +RPC_Packet +RPC_ResBind + + + + + +NTLSA Transact Named Pipe + +The sequence of actions taken on this pipe are: + + +Establish a connection to the IPC$ share (SMBtconX). use encrypted passwords. +Open an RPC Pipe with the name "\\PIPE\\lsarpc". Store the file handle. +Using the file handle, send a Set Named Pipe Handle state to 0x4300. +Send an LSA Open Policy request. Store the Policy Handle. +Using the Policy Handle, send LSA Query Info Policy requests, etc. +Using the Policy Handle, send an LSA Close. +Close the IPC$ share. + + +Defines for this pipe, identifying the query are: + + + LSA Open Policy: + 0x2c + + + LSA Query Info Policy: + 0x07 + + + LSA Enumerate Trusted Domains: + 0x0d + + + LSA Open Secret: + 0xff + + + LSA Lookup SIDs: + 0xfe + + + LSA Lookup Names: + 0xfd + + + LSA Close: + 0x00 + + + + + + +LSA Open Policy + +Note: The policy handle can be anything you like. + + +Request + + + + VOID* + buffer pointer + + + UNISTR2 + server name - unicode string starting with two '\'s + + + OBJ_ATTR + object attributes + + + UINT32 + 1 - desired access + + + + + + +Response + + + + + POL_HND + LSA policy handle + + + + return + 0 - indicates success + + + + + + + + + +LSA Query Info Policy + +Note: The info class in response must be the same as that in the request. + + +Request + + + + POL_HND +LSA policy handle + + UINT16 +info class (also a policy handle?) + + + + + +Response + + + + VOID* + undocumented buffer pointer + + + UINT16 + info class (same as info class in request). + + + + + +switch (info class) +case 3: +case 5: +{ +DOM_INFO domain info, levels 3 and 5 (are the same). +} + +return 0 - indicates success + + + + + + + +LSA Enumerate Trusted Domains + + +Request + +no extra data + + + + +Response + + + + UINT32 + 0 - enumeration context + + + UINT32 + 0 - entries read + + + UINT32 + 0 - trust information + + + return + 0x8000 001a - "no trusted domains" success code + + + + + + + +LSA Open Secret + + +Request + +no extra data + + + + +Response + + + + UINT32 + 0 - undocumented + + + UINT32 + 0 - undocumented + + + UINT32 + 0 - undocumented + + + UINT32 + 0 - undocumented + + + UINT32 + 0 - undocumented + + + +return 0x0C00 0034 - "no such secret" success code + + + + + + +LSA Close + + +Request + + + + POL_HND + policy handle to be closed + + + + + + +Response + + + + POL_HND +0s - closed policy handle (all zeros) + + +return 0 - indicates success + + + + + +LSA Lookup SIDS + +Note: num_entries in response must be same as num_entries in request. + + +Request + + + + POL_HND + LSA policy handle + + + UINT32 + num_entries + + + VOID* + undocumented domain SID buffer pointer + + + VOID* + undocumented domain name buffer pointer + + + VOID*[num_entries] undocumented domain SID pointers to be looked up. + +DOM_SID[num_entries] domain SIDs to be looked up. + + char[16] + completely undocumented 16 bytes. + + + + + + +Response + + + + DOM_REF +domain reference response + + UINT32 +num_entries (listed above) + + VOID* +undocumented buffer pointer + + UINT32 +num_entries (listed above) + + DOM_SID2[num_entries] +domain SIDs (from Request, listed above). + + UINT32 +num_entries (listed above) + + +return 0 - indicates success + + + + + + +LSA Lookup Names + +Note: num_entries in response must be same as num_entries in request. + + +Request + + + + POL_HND + LSA policy handle + + + UINT32 + num_entries + + + UINT32 + num_entries + + + VOID* + undocumented domain SID buffer pointer + + + VOID* + undocumented domain name buffer pointer + + + NAME[num_entries] + names to be looked up. + + + char[] + undocumented bytes - falsely translated SID structure? + + + + + + +Response + + + + DOM_REF +domain reference response + + UINT32 +num_entries (listed above) + + VOID* +undocumented buffer pointer + + UINT32 +num_entries (listed above) + + DOM_RID[num_entries] +domain SIDs (from Request, listed above). + + UINT32 +num_entries (listed above) + + +return 0 - indicates success + + + + + + +NETLOGON rpc Transact Named Pipe + +The sequence of actions taken on this pipe are: + + +tablish a connection to the IPC$ share (SMBtconX). use encrypted passwords. +en an RPC Pipe with the name "\\PIPE\\NETLOGON". Store the file handle. +ing the file handle, send a Set Named Pipe Handle state to 0x4300. +eate Client Challenge. Send LSA Request Challenge. Store Server Challenge. +lculate Session Key. Send an LSA Auth 2 Challenge. Store Auth2 Challenge. +lc/Verify Client Creds. Send LSA Srv PW Set. Calc/Verify Server Creds. +lc/Verify Client Creds. Send LSA SAM Logon . Calc/Verify Server Creds. +lc/Verify Client Creds. Send LSA SAM Logoff. Calc/Verify Server Creds. +ose the IPC$ share. + + +Defines for this pipe, identifying the query are + + + + LSA Request Challenge: + 0x04 + + + LSA Server Password Set: + 0x06 + + + LSA SAM Logon: + 0x02 + + + LSA SAM Logoff: + 0x03 + + + LSA Auth 2: + 0x0f + + + LSA Logon Control: + 0x0e + + + + +LSA Request Challenge + +Note: logon server name starts with two '\' characters and is upper case. + +Note: logon client is the machine, not the user. + +Note: the initial LanManager password hash, against which the challenge is issued, is the machine name itself (lower case). there will becalls issued (LSA Server Password Set) which will change this, later. refusing these calls allows you to always deal with the same password (i.e the LM# of the machine name in lower case). + + +Request + + + + VOID* + undocumented buffer pointer + + + UNISTR2 + logon server unicode string + + + UNISTR2 + logon client unicode string + + + char[8] + client challenge + + + + + + +Response + + + + char[8] + server challenge + + + +return 0 - indicates success + + + + + + +LSA Authenticate 2 + +Note: in between request and response, calculate the client credentials, and check them against the client-calculated credentials (this process uses the previously received client credentials). + +Note: neg_flags in the response is the same as that in the request. + +Note: you must take a copy of the client-calculated credentials received here, because they will be used in subsequent authentication packets. + + +Request + + + + LOG_INFO + client identification info + + + char[8] + client-calculated credentials + + + UINT8[] +padding to 4-byte align with start of SMB header. + + UINT32 +neg_flags - negotiated flags (usual value is 0x0000 01ff) + + + + + +Response + + + + char[8] + server credentials. + + + UINT32 + neg_flags - same as neg_flags in request. + + + +return 0 - indicates success. failure value unknown. + + + + + + +LSA Server Password Set + +Note: the new password is suspected to be a DES encryption using the old password to generate the key. + +Note: in between request and response, calculate the client credentials, and check them against the client-calculated credentials (this process uses the previously received client credentials). + +Note: the server credentials are constructed from the client-calculated credentials and the client time + 1 second. + +Note: you must take a copy of the client-calculated credentials received here, because they will be used in subsequent authentication packets. + + +Request + + + + CLNT_INFO + client identification/authentication info + + + char[] + new password - undocumented. + + + + + + +Response + + + + CREDS + server credentials. server time stamp appears to be ignored. + + + +return 0 - indicates success; 0xC000 006a indicates failure + + + + +LSA SAM Logon + + +Note: valid_user is True iff the username and password hash are valid for + the requested domain. + + + +Request + + + SAM_INFO + sam_id structure + + + + + + +Response + + + + VOID* + undocumented buffer pointer + + + CREDS + server credentials. server time stamp appears to be ignored. + + + + +if (valid_user) +{ + UINT16 3 - switch value indicating USER_INFO structure. + VOID* non-zero - pointer to USER_INFO structure + USER_INFO user logon information + + UINT32 1 - Authoritative response; 0 - Non-Auth? + + return 0 - indicates success +} +else +{ + UINT16 0 - switch value. value to indicate no user presumed. + VOID* 0x0000 0000 - indicates no USER_INFO structure. + + UINT32 1 - Authoritative response; 0 - Non-Auth? + + return 0xC000 0064 - NT_STATUS_NO_SUCH_USER. +} + + + + + + + +LSA SAM Logoff + + +Note: presumably, the SAM_INFO structure is validated, and a (currently + undocumented) error code returned if the Logoff is invalid. + + + +Request + + + + SAM_INFO + sam_id structure + + + + + + +Response + + + + VOID* + undocumented buffer pointer + + + CREDS + server credentials. server time stamp appears to be ignored. + + + +return 0 - indicates success. undocumented failure indication. + + + + + + +\\MAILSLOT\NET\NTLOGON + + +Note: mailslots will contain a response mailslot, to which the response + should be sent. the target NetBIOS name is REQUEST_NAME<20>, where + REQUEST_NAME is the name of the machine that sent the request. + + + +Query for PDC + +Note: NTversion, LMNTtoken, LM20token in response are the same as those given in the request. + + +Request + + + + UINT16 + 0x0007 - Query for PDC + + + STR + machine name + + + STR + response mailslot + + + UINT8[] + padding to 2-byte align with start of mailslot. + + + UNISTR + machine name + + + UINT32 + NTversion + + + UINT16 + LMNTtoken + + + UINT16 + LM20token + + + + + + +Response + + + + UINT16 +0x000A - Respose to Query for PDC + + STR +machine name (in uppercase) + + UINT8[] + padding to 2-byte align with start of mailslot. + + + UNISTR + machine name + + + UNISTR +domain name + + UINT32 +NTversion (same as received in request) + + UINT16 +LMNTtoken (same as received in request) + + UINT16 +LM20token (same as received in request) + + + + +SAM Logon + +Note: machine name in response is preceded by two '\' characters. + +Note: NTversion, LMNTtoken, LM20token in response are the same as those given in the request. + +Note: user name in the response is presumably the same as that in the request. + + +Request + + + + UINT16 + 0x0012 - SAM Logon + + + UINT16 + request count + + + UNISTR + machine name + + + UNISTR + user name + + + STR + response mailslot + + + UINT32 + alloweable account + + + UINT32 + domain SID size + + + char[sid_size] + domain SID, of sid_size bytes. + + + UINT8[] + ???? padding to 4? 2? -byte align with start of mailslot. + + + UINT32 + NTversion + + + UINT16 + LMNTtoken + + + UINT16 + LM20token + + + + + + +Response + + + + UINT16 + 0x0013 - Response to SAM Logon + + + UNISTR + machine name + + + UNISTR + user name - workstation trust account + + + UNISTR + domain name + + + UINT32 + NTversion + + + UINT16 + LMNTtoken + + + UINT16 + LM20token + + + + + + + + +SRVSVC Transact Named Pipe + +Defines for this pipe, identifying the query are: + + + + Net Share Enum + 0x0f + + + Net Server Get Info + 0x15 + + + + + +Net Share Enum + +Note: share level and switch value in the response are presumably the same as those in the request. + +Note: cifsrap2.txt (section 5) may be of limited assistance here. + + +Request + + + + VOID* +pointer (to server name?) + + UNISTR2 + server name + + + UINT8[] + padding to get unicode string 4-byte aligned with the start of the SMB header. + + + UINT32 + share level + + + UINT32 + switch value + + + VOID* + pointer to SHARE_INFO_1_CTR + + + SHARE_INFO_1_CTR + share info with 0 entries + + + UINT32 +preferred maximum length (0xffff ffff) + + + + +Response + + + + UINT32 + share level + + + UINT32 + switch value + + + VOID* +pointer to SHARE_INFO_1_CTR + + SHARE_INFO_1_CTR +share info (only added if share info ptr is non-zero) + + +return 0 - indicates success + + + + + +Net Server Get Info + +Note: level is the same value as in the request. + + +Request + + + + UNISTR2 + server name + + + UINT32 + switch level + + + + + + +Response + + + + UINT32 + switch level + + + VOID* + pointer to SERVER_INFO_101 + + + SERVER_INFO_101 +server info (only added if server info ptr is non-zero) + + +return 0 - indicates success + + + + + + +Cryptographic side of NT Domain Authentication + + +Definitions + + + +Add(A1,A2) +Intel byte ordered addition of corresponding 4 byte words in arrays A1 and A2 + + + +E(K,D) +DES ECB encryption of 8 byte data D using 7 byte key K + + + +lmowf() +Lan man hash + + + +ntowf() +NT hash + + + +PW +md4(machine_password) == md4(lsadump $machine.acc) == +pwdump(machine$) (initially) == md4(lmowf(unicode(machine))) + + + + +ARC4(K,Lk,D,Ld) +ARC4 encryption of data D of length Ld with key K of length Lk + + + +v[m..n(,l)] +subset of v from bytes m to n, optionally padded with zeroes to length l + + + +Cred(K,D) +E(K[7..7,7],E(K[0..6],D)) computes a credential + + + +Time() +4 byte current time + + + +Cc,Cs +8 byte client and server challenges Rc,Rs: 8 byte client and server credentials + + + + + + + +Protocol + + +C->S ReqChal,Cc S->C Cs + + + +C & S compute session key Ks = E(PW[9..15],E(PW[0..6],Add(Cc,Cs))) + + + +C: Rc = Cred(Ks,Cc) C->S Authenticate,Rc S: Rs = Cred(Ks,Cs), +assert(Rc == Cred(Ks,Cc)) S->C Rs C: assert(Rs == Cred(Ks,Cs)) + + + +On joining the domain the client will optionally attempt to change its +password and the domain controller may refuse to update it depending +on registry settings. This will also occur weekly afterwards. + + + +C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S ServerPasswordSet,Rc',Tc, +arc4(Ks[0..7,16],lmowf(randompassword()) C: Rc = Cred(Ks,Rc+Tc+1) S: +assert(Rc' == Cred(Ks,Rc+Tc)), Ts = Time() S: Rs' = Cred(Ks,Rs+Tc+1) +S->C Rs',Ts C: assert(Rs' == Cred(Ks,Rs+Tc+1)) S: Rs = Rs' + + + +User: U with password P wishes to login to the domain (incidental data +such as workstation and domain omitted) + + + +C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S NetLogonSamLogon,Rc',Tc,U, +arc4(Ks[0..7,16],16,ntowf(P),16), arc4(Ks[0..7,16],16,lmowf(P),16) S: +assert(Rc' == Cred(Ks,Rc+Tc)) assert(passwords match those in SAM) S: +Ts = Time() + + + +S->C Cred(Ks,Cred(Ks,Rc+Tc+1)),userinfo(logon script,UID,SIDs,etc) C: +assert(Rs == Cred(Ks,Cred(Rc+Tc+1)) C: Rc = Cred(Ks,Rc+Tc+1) + + + + + +Comments + + +On first joining the domain the session key could be computed by +anyone listening in on the network as the machine password has a well +known value. Until the machine is rebooted it will use this session +key to encrypt NT and LM one way functions of passwords which are +password equivalents. Any user who logs in before the machine has been +rebooted a second time will have their password equivalent exposed. Of +course the new machine password is exposed at this time anyway. + + + +None of the returned user info such as logon script, profile path and +SIDs *appear* to be protected by anything other than the TCP checksum. + + + +The server time stamps appear to be ignored. + + + +The client sends a ReturnAuthenticator in the SamLogon request which I +can't find a use for. However its time is used as the timestamp +returned by the server. + + + +The password OWFs should NOT be sent over the network reversibly +encrypted. They should be sent using ARC4(Ks,md4(owf)) with the server +computing the same function using the owf values in the SAM. + + + + + + +SIDs and RIDs + + +SIDs and RIDs are well documented elsewhere. + + + +A SID is an NT Security ID (see DOM_SID structure). They are of the form: + + + +revision-NN-SubAuth1-SubAuth2-SubAuth3... +revision-0xNNNNNNNNNNNN-SubAuth1-SubAuth2-SubAuth3... + + + +currently, the SID revision is 1. +The Sub-Authorities are known as Relative IDs (RIDs). + + + +Well-known SIDs + + +Universal well-known SIDs + + + + Null SID + S-1-0-0 + + + World + S-1-1-0 + + + Local + S-1-2-0 + + + Creator Owner ID + S-1-3-0 + + + Creator Group ID + S-1-3-1 + + + Creator Owner Server ID + S-1-3-2 + + + Creator Group Server ID + S-1-3-3 + + + (Non-unique IDs) + S-1-4 + + + + + + +NT well-known SIDs + + + + NT Authority + S-1-5 + + + Dialup + S-1-5-1 + + + Network + S-1-5-2 + + + Batch + S-1-5-3 + + + Interactive + S-1-5-4 + + + Service +S-1-5-6 + + AnonymousLogon(aka null logon session) + S-1-5-7 + + + Proxy +S-1-5-8 + + ServerLogon(aka domain controller account) + S-1-5-8 + + + (Logon IDs) + S-1-5-5-X-Y + + + (NT non-unique IDs) + S-1-5-0x15-... + + + (Built-in domain) + s-1-5-0x20 + + + + + + + +Well-known RIDS + + +A RID is a sub-authority value, as part of either a SID, or in the case +of Group RIDs, part of the DOM_GID structure, in the USER_INFO_1 +structure, in the LSA SAM Logon response. + + + +Well-known RID users + + +Groupname +???? +RID +DOMAIN_USER_RID_ADMIN0x000001F4 +DOMAIN_USER_RID_GUEST0x000001F5 + + + + + +Well-known RID groups + + +Groupname +???? +RID + DOMAIN_GROUP_RID_ADMINS0x00000200 + DOMAIN_GROUP_RID_USERS0x00000201 + DOMAIN_GROUP_RID_GUESTS0x00000202 + + + + + +Well-known RID aliases + + +Groupname +???? +RID + DOMAIN_ALIAS_RID_ADMINS0x00000220 + DOMAIN_ALIAS_RID_USERS0x00000221 + DOMAIN_ALIAS_RID_GUESTS0x00000222 + DOMAIN_ALIAS_RID_POWER_USERS0x00000223 + DOMAIN_ALIAS_RID_ACCOUNT_OPS0x00000224 + DOMAIN_ALIAS_RID_SYSTEM_OPS0x00000225 + DOMAIN_ALIAS_RID_PRINT_OPS0x00000226 + DOMAIN_ALIAS_RID_BACKUP_OPS0x00000227 + DOMAIN_ALIAS_RID_REPLICATOR0x00000228 + + + + + +
diff --git a/docs/docbook/devdoc/dev-doc.sgml b/docs/docbook/devdoc/dev-doc.sgml index 76ad512add7..0e017fb6a68 100644 --- a/docs/docbook/devdoc/dev-doc.sgml +++ b/docs/docbook/devdoc/dev-doc.sgml @@ -6,11 +6,13 @@ + + ]> -SAMBA Deverlopers Guide +SAMBA Developers Guide @@ -32,7 +34,7 @@ people developing samba or those interested in doing so. than one person can maintain. The most recent version of this document can be found at http://www.samba.org/ on the "Documentation" page. Please send updates to jerry@samba.org. +url="mailto:jelmer@samba.org">jelmer@samba.org.
@@ -52,5 +54,7 @@ url="http://www.fsf.org/licenses/gpl.txt">http://www.fsf.org/licenses/gpl.txt -- cgit From 60446ad6033f6f9179ac2566f670d04ff8b662c2 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:18:59 +0000 Subject: Remove more obsolete documents --- docs/textdocs/Passwords.txt | 46 -- docs/textdocs/Tracing.txt | 93 --- docs/textdocs/UNIX-SMB.txt | 231 ------- docs/textdocs/cifsntdomain.txt | 1498 ---------------------------------------- 4 files changed, 1868 deletions(-) delete mode 100644 docs/textdocs/Passwords.txt delete mode 100644 docs/textdocs/Tracing.txt delete mode 100644 docs/textdocs/UNIX-SMB.txt delete mode 100644 docs/textdocs/cifsntdomain.txt diff --git a/docs/textdocs/Passwords.txt b/docs/textdocs/Passwords.txt deleted file mode 100644 index 25d4c816f05..00000000000 --- a/docs/textdocs/Passwords.txt +++ /dev/null @@ -1,46 +0,0 @@ -Contributor: Unknown -Date: Updated April 19th 1999. -Status: Current - -Subject: NOTE ABOUT PASSWORDS -============================================================================= - -Unix systems use a wide variety of methods for checking the validity -of a password. This is primarily controlled with the Makefile defines -mentioned in the Makefile. - -Also note that some clients (notably WfWg) uppercase the password -before sending it. The server tries the password as it receives it and -also after lowercasing it. - -The Samba server can also be configured to try different -upper/lowercase combinations. This is controlled by the [global] -parameter "password level". A level of N means to try all combinations -up to N uppercase characters in the password. A high value can chew a -fair bit of CPU time and can lower the security of your system. Do not -use this options unless you really need it - the time taken for -password checking can become so high that clients time out. - -If you do use the "password level" option then you might like to use --DUFC_CRYPT in your Makefile. On some machine this makes password -checking _much_ faster. This is also useful if you use the @group -syntax in the user= option. - -If your site uses AFS (the Andrew File System), you can use the AFS section -in the Makefile. This will first attempt to authenticate a username and -password to AFS. If that succeeds, then the associated AFS rights will be -granted. Otherwise, the password checking routine falls back to whatever -Unix password checking method you are using. Note that the AFS code is -only written and tested for AFS 3.3 and later. - - -SECURITY = SERVER or DOMAIN -=========================== - -Samba can use a remote server to do its username/password -validation. This allows you to have one central machine (for example a -NT box) control the passwords for the Unix box. - -See the section on "security =" in smb.conf(5) for details. - - diff --git a/docs/textdocs/Tracing.txt b/docs/textdocs/Tracing.txt deleted file mode 100644 index 6cc1d69258d..00000000000 --- a/docs/textdocs/Tracing.txt +++ /dev/null @@ -1,93 +0,0 @@ -Contributor: Andrew Tridgell -Date: Old -Status: Questionable - -Subject: How to trace samba system calls for debugging purposes -============================================================================= - -This file describes how to do a system call trace on Samba to work out -what its doing wrong. This is not for the faint of heart, but if you -are reading this then you are probably desperate. - -Actually its not as bad as the the above makes it sound, just don't -expect the output to be very pretty :-) - -Ok, down to business. One of the big advantages of unix systems is -that they nearly all come with a system trace utility that allows you -to monitor all system calls that a program is making. This is -extremely using for debugging and also helps when trying to work out -why something is slower than you expect. You can use system tracing -without any special compilation options. - -The system trace utility is called different things on different -systems. On Linux systems its called strace. Under SunOS 4 its called -trace. Under SVR4 style systems (including solaris) its called -truss. Under many BSD systems its called ktrace. - -The first thing you should do is read the man page for your native -system call tracer. In the discussion below I'll assume its called -strace as strace is the only portable system tracer (its available for -free for many unix types) and its also got some of the nicest -features. - -Next, try using strace on some simple commands. For example, "strace -ls" or "strace echo hello". - -You'll notice that it produces a LOT of output. It is showing you the -arguments to every system call that the program makes and the -result. Very little happens in a program without a system call so you -get lots of output. You'll also find that it produces a lot of -"preamble" stuff showing the loading of shared libraries etc. Ignore -this (unless its going wrong!) - -For example, the only line that really matters in the "strace echo -hello" output is: - -write(1, "hello\n", 6) = 6 - -all the rest is just setting up to run the program. - -Ok, now you're famialiar with strace. To use it on Samba you need to -strace the running smbd daemon. The way I tend ot use it is to first -login from my Windows PC to the Samba server, then use smbstatus to -find which process ID that client is attached to, then as root I do -"strace -p PID" to attach to that process. I normally redirect the -stderr output from this command to a file for later perusal. For -example, if I'm using a csh style shell: - - strace -f -p 3872 >& strace.out - -or with a sh style shell: - - strace -f -p 3872 > strace.out 2>&1 - -Note the "-f" option. This is only available on some systems, and -allows you to trace not just the current process, but any children it -forks. This is great for finding printing problems caused by the -"print command" being wrong. - -Once you are attached you then can do whatever it is on the client -that is causing problems and you will capture all the system calls -that smbd makes. - -So how do you interpret the results? Generally I search through the -output for strings that I know will appear when the problem -happens. For example, if I am having touble with permissions on a file -I would search for that files name in the strace output and look at -the surrounding lines. Another trick is to match up file descriptor -numbers and "follow" what happens to an open file until it is closed. - -Beyond this you will have to use your initiative. To give you an idea -of wehat you are looking for here is a piece of strace output that -shows that /dev/null is not world writeable, which causes printing to -fail with Samba: - -[pid 28268] open("/dev/null", O_RDWR) = -1 EACCES (Permission denied) -[pid 28268] open("/dev/null", O_WRONLY) = -1 EACCES (Permission denied) - -the process is trying to first open /dev/null read-write then -read-only. Both fail. This means /dev/null has incorrect permissions. - -Have fun! - -(please send updates/fixes to this file to samba@samba.org) diff --git a/docs/textdocs/UNIX-SMB.txt b/docs/textdocs/UNIX-SMB.txt deleted file mode 100644 index c3d7643cbcb..00000000000 --- a/docs/textdocs/UNIX-SMB.txt +++ /dev/null @@ -1,231 +0,0 @@ -Contributor: Andrew Tridgell -Date: April 1995 - -Subject: Discussion of NetBIOS in a Unix World -============================================================================ - -This is a short document that describes some of the issues that -confront a SMB implementation on unix, and how Samba copes with -them. They may help people who are looking at unix<->PC -interoperability. - -It was written to help out a person who was writing a paper on unix to -PC connectivity. - - -Usernames -========= - -The SMB protocol has only a loose username concept. Early SMB -protocols (such as CORE and COREPLUS) have no username concept at -all. Even in later protocols clients often attempt operations -(particularly printer operations) without first validating a username -on the server. - -Unix security is based around username/password pairs. A unix box -should not allow clients to do any substantive operation without some -sort of validation. - -The problem mostly manifests itself when the unix server is in "share -level" security mode. This is the default mode as the alternative -"user level" security mode usually forces a client to connect to the -server as the same user for each connected share, which is -inconvenient in many sites. - -In "share level" security the client normally gives a username in the -"session setup" protocol, but does not supply an accompanying -password. The client then connects to resources using the "tree -connect" protocol, and supplies a password. The problem is that the -user on the PC types the username and the password in different -contexts, unaware that they need to go together to give access to the -server. The username is normally the one the user typed in when they -"logged onto" the PC (this assumes Windows for Workgroups). The -password is the one they chose when connecting to the disk or printer. - -The user often chooses a totally different username for their login as -for the drive connection. Often they also want to access different -drives as different usernames. The unix server needs some way of -divining the correct username to combine with each password. - -Samba tries to avoid this problem using several methods. These succeed -in the vast majority of cases. The methods include username maps, the -service%user syntax, the saving of session setup usernames for later -validation and the derivation of the username from the service name -(either directly or via the user= option). - -File Ownership -============== - -The commonly used SMB protocols have no way of saying "you can't do -that because you don't own the file". They have, in fact, no concept -of file ownership at all. - -This brings up all sorts of interesting problems. For example, when -you copy a file to a unix drive, and the file is world writeable but -owned by another user the file will transfer correctly but will -receive the wrong date. This is because the utime() call under unix -only succeeds for the owner of the file, or root, even if the file is -world writeable. For security reasons Samba does all file operations -as the validated user, not root, so the utime() fails. This can stuff -up shared development diectories as programs like "make" will not get -file time comparisons right. - -There are several possible solutions to this problem, including -username mapping, and forcing a specific username for particular -shares. - -Passwords -========= - -Many SMB clients uppercase passwords before sending them. I have no -idea why they do this. Interestingly WfWg uppercases the password only -if the server is running a protocol greater than COREPLUS, so -obviously it isn't just the data entry routines that are to blame. - -Unix passwords are case sensitive. So if users use mixed case -passwords they are in trouble. - -Samba can try to cope with this by either using the "password level" -option which causes Samba to try the offered password with up to the -specified number of case changes, or by using the "password server" -option which allows Samba to do its validation via another machine -(typically a WinNT server). - -Samba supports the password encryption method used by SMB -clients. Note that the use of password encryption in Microsoft -networking leads to password hashes that are "plain text equivalent". -This means that it is *VERY* important to ensure that the Samba -smbpasswd file containing these password hashes is only readable -by the root user. See the documentation ENCRYPTION.txt for more -details. - - -Locking -======= - -The locking calls available under a DOS/Windows environment are much -richer than those available in unix. This means a unix server (like -Samba) choosing to use the standard fcntl() based unix locking calls -to implement SMB locking has to improvise a bit. - -One major problem is that dos locks can be in a 32 bit (unsigned) -range. Unix locking calls are 32 bits, but are signed, giving only a 31 -bit range. Unfortunately OLE2 clients use the top bit to select a -locking range used for OLE semaphores. - -To work around this problem Samba compresses the 32 bit range into 31 -bits by appropriate bit shifting. This seems to work but is not -ideal. In a future version a separate SMB lockd may be added to cope -with the problem. - -It also doesn't help that many unix lockd daemons are very buggy and -crash at the slightest provocation. They normally go mostly unused in -a unix environment because few unix programs use byte range -locking. The stress of huge numbers of lock requests from dos/windows -clients can kill the daemon on some systems. - -The second major problem is the "opportunistic locking" requested by -some clients. If a client requests opportunistic locking then it is -asking the server to notify it if anyone else tries to do something on -the same file, at which time the client will say if it is willing to -give up its lock. Unix has no simple way of implementing -opportunistic locking, and currently Samba has no support for it. - -Deny Modes -========== - -When a SMB client opens a file it asks for a particular "deny mode" to -be placed on the file. These modes (DENY_NONE, DENY_READ, DENY_WRITE, -DENY_ALL, DENY_FCB and DENY_DOS) specify what actions should be -allowed by anyone else who tries to use the file at the same time. If -DENY_READ is placed on the file, for example, then any attempt to open -the file for reading should fail. - -Unix has no equivalent notion. To implement this Samba uses either lock -files based on the files inode and placed in a separate lock -directory or a shared memory implementation. The lock file method -is clumsy and consumes processing and file resources, -the shared memory implementation is vastly prefered and is turned on -by default for those systems that support it. - -Trapdoor UIDs -============= - -A SMB session can run with several uids on the one socket. This -happens when a user connects to two shares with different -usernames. To cope with this the unix server needs to switch uids -within the one process. On some unixes (such as SCO) this is not -possible. This means that on those unixes the client is restricted to -a single uid. - -Note that you can also get the "trapdoor uid" message for other -reasons. Please see the FAQ for details. - -Port numbers -============ - -There is a convention that clients on sockets use high "unprivilaged" -port numbers (>1000) and connect to servers on low "privilaged" port -numbers. This is enforced in Unix as non-root users can't open a -socket for listening on port numbers less than 1000. - -Most PC based SMB clients (such as WfWg and WinNT) don't follow this -convention completely. The main culprit is the netbios nameserving on -udp port 137. Name query requests come from a source port of 137. This -is a problem when you combine it with the common firewalling technique -of not allowing incoming packets on low port numbers. This means that -these clients can't query a netbios nameserver on the other side of a -low port based firewall. - -The problem is more severe with netbios node status queries. I've -found that WfWg, Win95 and WinNT3.5 all respond to netbios node status -queries on port 137 no matter what the source port was in the -request. This works between machines that are both using port 137, but -it means it's not possible for a unix user to do a node status request -to any of these OSes unless they are running as root. The answer comes -back, but it goes to port 137 which the unix user can't listen -on. Interestingly WinNT3.1 got this right - it sends node status -responses back to the source port in the request. - - -Protocol Complexity -=================== - -There are many "protocol levels" in the SMB protocol. It seems that -each time new functionality was added to a Microsoft operating system, -they added the equivalent functions in a new protocol level of the SMB -protocol to "externalise" the new capabilities. - -This means the protocol is very "rich", offering many ways of doing -each file operation. This means SMB servers need to be complex and -large. It also means it is very difficult to make them bug free. It is -not just Samba that suffers from this problem, other servers such as -WinNT don't support every variation of every call and it has almost -certainly been a headache for MS developers to support the myriad of -SMB calls that are available. - -There are about 65 "top level" operations in the SMB protocol (things -like SMBread and SMBwrite). Some of these include hundreds of -sub-functions (SMBtrans has at least 120 sub-functions, like -DosPrintQAdd and NetSessionEnum). All of them take several options -that can change the way they work. Many take dozens of possible -"information levels" that change the structures that need to be -returned. Samba supports all but 2 of the "top level" functions. It -supports only 8 (so far) of the SMBtrans sub-functions. Even NT -doesn't support them all. - -Samba currently supports up to the "NT LM 0.12" protocol, which is the -one preferred by Win95 and WinNT3.5. Luckily this protocol level has a -"capabilities" field which specifies which super-duper new-fangled -options the server suports. This helps to make the implementation of -this protocol level much easier. - -There is also a problem with the SMB specications. SMB is a X/Open -spec, but the X/Open book is far from ideal, and fails to cover many -important issues, leaving much to the imagination. Microsoft recently -renamed the SMB protocol CIFS (Common Internet File System) and have -published new specifications. These are far superior to the old -X/Open documents but there are still undocumented calls and features. -This specification is actively being worked on by a CIFS developers -mailing list hosted by Microsft. - diff --git a/docs/textdocs/cifsntdomain.txt b/docs/textdocs/cifsntdomain.txt deleted file mode 100644 index 643b8957c9f..00000000000 --- a/docs/textdocs/cifsntdomain.txt +++ /dev/null @@ -1,1498 +0,0 @@ -NT Domain Authentication ------------------------- - -Authors: - Luke Kenneth Casson Leighton (lkcl@switchboard.net) --------- - Paul Ashton (paul@argo.demon.co.uk) - - Duncan Stansfield (duncans@sco.com) - - Copyright (C) 1997 Luke Kenneth Casson Leighton - Copyright (C) 1997 Paul Ashton - Copyright (C) 1997 Duncan Stansfield - -Version: 0.024 (01Nov97) --------- - -Distribution: Unlimited and encouraged, for the purposes of implementation -------------- and comments. Feedback welcomed by the authors. - -Liability: Absolutely none accepted implicitly or explicitly, direct ----------- or consequentially, for use, abuse, misuse, lack of use, - misunderstandings, mistakes, omissions, mis-information for - anything in or not in, related to or not related to, or - pertaining to this document, or anything else that a lawyer - can think of or not think of. - -Warning: Please bear in mind that an incorrect implementation of this --------- protocol can cause NT workstation to fail irrevocably, for - which the authors accept no liability (see above). Please - contact your vendor if you have any problems. - -Sources: - Packet Traces from Netmonitor (Service Pack 1 and above) --------- - Paul Ashton and Luke Leighton's other "NT Domain" doc. - - CIFS documentation - cifs6.txt - - CIFS documentation - cifsrap2.txt - -Original: http://mailhost.cb1.com/~lkcl/cifsntdomain.txt. ---------- (Controlled copy maintained by lkcl@switchboard.net) - -Credits: - Paul Ashton: loads of work with Net Monitor; --------- understanding the NT authentication system; - reference implementation of the NT domain support on which - this document is originally based. - - Duncan Stansfield: low-level analysis of MSRPC Pipes. - - Linus Nordberg: producing c-code from Paul's crypto spec. - - Windows Sourcer development team - - -Contents: ---------- - - 1) Introduction - - 2) Structures and notes - - 2.1) Notes - 2.3) Enumerations - 2.3) Structures - - 3) Transact Named Pipe Header/Tail - - 3.1) MSRPC Pipes - 3.2) Header - 3.3) Tail - - 4) NTLSA Transact Named Pipe - - 4.1) LSA Open Policy - 4.2) LSA Query Info Policy - 4.3) LSA Enumerate Trusted Domains - 4.4) LSA Open Secret - 4.5) LSA Close - 4.6) LSA Lookup SIDS - 4.7) LSA Lookup Names - - 5) NETLOGON rpc Transact Named Pipe - - 5.1) LSA Request Challenge - 5.2) LSA Authenticate 2 - 5.3) LSA Server Password Set - 5.4) LSA SAM Logon - 5.5) LSA SAM Logoff - - 6) \\MAILSLOT\NET\NTLOGON - - 6.1) Query for PDC - 6.2) SAM Logon - - 7) SRVSVC Transact Named Pipe - - 7.1) Net Share Enum - 7.2) Net Server Get Info - - -Appendix: ---------- - - A1) Cryptographic side of NT Domain Authentication - - A1.1) Definitions - A1.2) Protocol - A1.3) Comments - - A2) SIDs and RIDs - - A2.1) Well-known SIDs - - A2.1.1) Universal well-known SIDs - A2.1.2) NT well-known SIDs - - A2.2) Well-known RIDS - - A2.2.1) Well-known RID users - A2.2.2) Well-known RID groups - A2.2.3) Well-known RID aliases - - - -1) Introduction ---------------- - - -This document contains information to provide an NT workstation with login -services, without the need for an NT server. - -It should be possible to select a domain instead of a workgroup (in the NT -workstation's TCP/IP settings) and after the obligatory reboot, type in a -username, password, select a domain and successfully log in. I would -appreciate any feedback on your experiences with this process, and any -comments, corrections and additions to this document. - - -The packets described here can be easily derived from (and are probably -better understood using) Netmon.exe. You will need to use the version -of Netmon that matches your system, in order to correctly decode the -NETLOGON, lsarpc and srvsvc Transact pipes. This document is derived from -NT Service Pack 1 and its corresponding version of Netmon. It is intended -that an annotated packet trace be produced, which will likely be more -instructive than this document. - -Also needed, to fully implement NT Domain Login Services, is the -document describing the cryptographic part of the NT authentication. -This document is available from comp.protocols.smb; from the ntsecurity.net -digest and from the samba digest, amongst other sources. - -A copy is available from: - -http://ntbugtraq.rc.on.ca/SCRIPTS/WA.EXE?A2=ind9708&L=ntbugtraq&O=A&P=2935 -http://mailhost.cb1.com/~lkcl/crypt.html - - -A c-code implementation, provided by Linus Nordberg -of this protocol is available from: - -http://samba.org/cgi-bin/mfs/01/digest/1997/97aug/0391.html -http://mailhost.cb1.com/~lkcl/crypt.txt - - -Also used to provide debugging information is the Check Build version of -NT workstation, and enabling full debugging in NETLOGON. This is -achieved by setting the following REG_SZ registry key to 0x1ffffff: - -HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters - -- Incorrect direct editing of the registry can cause your machine to fail. - Then again, so can incorrect implementation of this protocol. - See "Liability:" above. - - -Bear in mind that each packet over-the-wire will have its origin in an -API call. Therefore, there are likely to be structures, enumerations -and defines that are usefully documented elsewhere. - - -This document is by no means complete or authoritative. Missing sections -include, but are not limited to: - -- the meaning (and use by NT) of SIDs and RIDs. - -- mappings of RIDs to usernames (and vice-versa). - -- what a User ID is and what a Group ID is. - -- the exact meaning/definition of various magic constants or enumerations. - -- the reply error code and use of that error code when a workstation - becomes a member of a domain (to be described later). Failure to - return this error code will make the workstation report that it is - already a member of the domain. - -- the cryptographic side of the NetrServerPasswordSet command, which would - allow the workstation to change its password. This password is used to - generate the long-term session key. [It is possible to reject this - command, and keep the default workstation password]. - - -2) Notes and Structures ------------------------ - - -2.1) Notes ----------- - -- In the SMB Transact pipes, some "Structures", described here, appear to be - 4-byte aligned with the SMB header, at their start. Exactly which - "Structures" need aligning is not precisely known or documented. - -- In the UDP NTLOGON Mailslots, some "Structures", described here, appear to be - 2-byte aligned with the start of the mailslot, at their start. - -- Domain SID is of the format S-revision-version-auth1-auth2...authN. - e.g S-1-5-123-456-789-123-456. the 5 could be a sub-revision. - -- any undocumented buffer pointers must be non-zero if the string buffer it - refers to contains characters. exactly what value they should be is unknown. - 0x0000 0002 seems to do the trick to indicate that the buffer exists. a - NULL buffer pointer indicates that the string buffer is of zero length. - If the buffer pointer is NULL, then it is suspected that the structure it - refers to is NOT put into (or taken out of) the SMB data stream. This is - empirically derived from, for example, the LSA SAM Logon response packet, - where if the buffer pointer is NULL, the user information is not inserted - into the data stream. Exactly what happens with an array of buffer pointers - is not known, although an educated guess can be made. - -- an array of structures (a container) appears to have a count and a pointer. - if the count is zero, the pointer is also zero. no further data is put - into or taken out of the SMB data stream. if the count is non-zero, then - the pointer is also non-zero. immediately following the pointer is the - count again, followed by an array of container sub-structures. the count - appears a third time after the last sub-structure. - - -2.2) Enumerations ------------------ - -- MSRPC Header type. command number in the msrpc packet header - - MSRPC_Request: 0x00 - MSRPC_Response: 0x02 - MSRPC_Bind: 0x0B - MSRPC_BindAck: 0x0C - -- MSRPC Packet info. the meaning of these flags is undocumented - - FirstFrag: 0x01 - LastFrag: 0x02 - NotaFrag: 0x04 - RecRespond: 0x08 - NoMultiplex: 0x10 - NotForIdemp: 0x20 - NotforBcast: 0x40 - NoUuid: 0x80 - - -2.3) Structures ---------------- - -- sizeof VOID* is 32 bits. - -- sizeof char is 8 bits. - -- UTIME is 32 bits, indicating time in seconds since 01jan1970. documented - in cifs6.txt (section 3.5 page, page 30). - -- NTTIME is 64 bits. documented in cifs6.txt (section 3.5 page, page 30). - -- DOM_SID (domain SID structure) : - - UINT32 num of sub-authorities in domain SID - UINT8 SID revision number - UINT8 num of sub-authorities in domain SID - UINT8[6] 6 bytes for domain SID - Identifier Authority. - UINT16[n_subauths] domain SID sub-authorities - - Note: the domain SID is documented elsewhere. - -- STR (string) : - - char[] null-terminated string of ascii characters. - -- UNIHDR (unicode string header) : - - UINT16 length of unicode string - UINT16 max length of unicode string - UINT32 4 - undocumented. - -- UNIHDR2 (unicode string header plus buffer pointer) : - - UNIHDR unicode string header - VOID* undocumented buffer pointer - -- UNISTR (unicode string) : - - UINT16[] null-terminated string of unicode characters. - -- NAME (length-indicated unicode string) : - - UINT32 length of unicode string - UINT16[] null-terminated string of unicode characters. - -- UNISTR2 (aligned unicode string) : - - UINT8[] padding to get unicode string 4-byte aligned - with the start of the SMB header. - UINT32 max length of unicode string - UINT32 0 - undocumented - UINT32 length of unicode string - UINT16[] string of uncode characters. - -- OBJ_ATTR (object attributes) : - - UINT32 0x18 - length (in bytes) including the length field. - VOID* 0 - root directory (pointer) - VOID* 0 - object name (pointer) - UINT32 0 - attributes (undocumented) - VOID* 0 - security descriptior (pointer) - UINT32 0 - security quality of service - -- POL_HND (LSA policy handle) : - - char[20] policy handle - -- DOM_SID2 (domain SID structure, SIDS stored in unicode) : - - UINT32 5 - SID type - UINT32 0 - undocumented - UNIHDR2 domain SID unicode string header - UNISTR domain SID unicode string - - Note: there is a conflict between the unicode string header and the - unicode string itself as to which to use to indicate string - length. this will need to be resolved. - - Note: the SID type indicates, for example, an alias; a well-known group etc. - this is documented somewhere. - -- DOM_RID (domain RID structure) : - - UINT32 5 - well-known SID. 1 - user SID (see ShowACLs) - UINT32 5 - undocumented - UINT32 domain RID - UINT32 0 - domain index out of above reference domains - - -- LOG_INFO (server, account, client structure) : - - Note: logon server name starts with two '\' characters and is upper case. - - Note: account name is the logon client name from the LSA Request Challenge, - with a $ on the end of it, in upper case. - - VOID* undocumented buffer pointer - UNISTR2 logon server unicode string - UNISTR2 account name unicode string - UINT16 sec_chan - security channel type - UNISTR2 logon client machine unicode string - -- CLNT_SRV (server, client names structure) : - - Note: logon server name starts with two '\' characters and is upper case. - - VOID* undocumented buffer pointer - UNISTR2 logon server unicode string - VOID* undocumented buffer pointer - UNISTR2 logon client machine unicode string - -- CREDS (credentials + time stamp) - - char[8] credentials - UTIME time stamp - -- CLNT_INFO2 (server, client structure, client credentials) : - - Note: whenever this structure appears in a request, you must take a copy - of the client-calculated credentials received, because they will be - used in subsequent credential checks. the presumed intention is to - maintain an authenticated request/response trail. - - CLNT_SRV client and server names - UINT8[] ???? padding, for 4-byte alignment with SMB header. - VOID* pointer to client credentials. - CREDS client-calculated credentials + client time - -- CLNT_INFO (server, account, client structure, client credentials) : - - Note: whenever this structure appears in a request, you must take a copy - of the client-calculated credentials received, because they will be - used in subsequent credential checks. the presumed intention is to - maintain an authenticated request/response trail. - - LOG_INFO logon account info - CREDS client-calculated credentials + client time - -- ID_INFO_1 (id info structure, auth level 1) : - - VOID* ptr_id_info_1 - UNIHDR domain name unicode header - UINT32 param control - UINT64 logon ID - UNIHDR user name unicode header - UNIHDR workgroup name unicode header - char[16] arc4 LM OWF Password - char[16] arc4 NT OWF Password - UNISTR2 domain name unicode string - UNISTR2 user name unicode string - UNISTR2 workstation name unicode string - -- SAM_INFO (sam logon/logoff id info structure) : - - Note: presumably, the return credentials is supposedly for the server to - verify that the credential chain hasn't been compromised. - - CLNT_INFO2 client identification/authentication info - VOID* pointer to return credentials. - CRED return credentials - ignored. - UINT16 logon level - UINT16 switch value - - switch (switch_value) - case 1: - { - ID_INFO_1 id_info_1; - } - -- GID (group id info) : - - UINT32 group id - UINT32 user attributes (only used by NT 3.1 and 3.51) - -- DOM_REF (domain reference info) : - - VOID* undocumented buffer pointer. - UINT32 num referenced domains? - VOID* undocumented domain name buffer pointer. - UINT32 32 - max number of entries - UINT32 4 - num referenced domains? - - UNIHDR2 domain name unicode string header - UNIHDR2[num_ref_doms-1] referenced domain unicode string headers - - UNISTR domain name unicode string - DOM_SID[num_ref_doms] referenced domain SIDs - -- DOM_INFO (domain info, levels 3 and 5 are the same)) : - - UINT8[] ??? padding to get 4-byte alignment with start of SMB header - UINT16 domain name string length * 2 - UINT16 domain name string length * 2 - VOID* undocumented domain name string buffer pointer - VOID* undocumented domain SID string buffer pointer - UNISTR2 domain name (unicode string) - DOM_SID domain SID - -- USER_INFO (user logon info) : - - Note: it would be nice to know what the 16 byte user session key is for. - - NTTIME logon time - NTTIME logoff time - NTTIME kickoff time - NTTIME password last set time - NTTIME password can change time - NTTIME password must change time - - UNIHDR username unicode string header - UNIHDR user's full name unicode string header - UNIHDR logon script unicode string header - UNIHDR profile path unicode string header - UNIHDR home directory unicode string header - UNIHDR home directory drive unicode string header - - UINT16 logon count - UINT16 bad password count - - UINT32 User ID - UINT32 Group ID - UINT32 num groups - VOID* undocumented buffer pointer to groups. - - UINT32 user flags - char[16] user session key - - UNIHDR logon server unicode string header - UNIHDR logon domain unicode string header - VOID* undocumented logon domain id pointer - char[40] 40 undocumented padding bytes. future expansion? - - UINT32 0 - num_other_sids? - VOID* NULL - undocumented pointer to other domain SIDs. - - UNISTR2 username unicode string - UNISTR2 user's full name unicode string - UNISTR2 logon script unicode string - UNISTR2 profile path unicode string - UNISTR2 home directory unicode string - UNISTR2 home directory drive unicode string - - UINT32 num groups - GID[num_groups] group info - - UNISTR2 logon server unicode string - UNISTR2 logon domain unicode string - - DOM_SID domain SID - DOM_SID[num_sids] other domain SIDs? - -- SH_INFO_1_PTR (pointers to level 1 share info strings): - -Note: see cifsrap2.txt section5, page 10. - - 0 for shi1_type indicates a Disk. - 1 for shi1_type indicates a Print Queue. - 2 for shi1_type indicates a Device. - 3 for shi1_type indicates an IPC pipe. - 0x8000 0000 (top bit set in shi1_type) indicates a hidden share. - - VOID* shi1_netname - pointer to net name - UINT32 shi1_type - type of share. 0 - undocumented. - VOID* shi1_remark - pointer to comment. - -- SH_INFO_1_STR (level 1 share info strings) : - - UNISTR2 shi1_netname - unicode string of net name - UNISTR2 shi1_remark - unicode string of comment. - -- SHARE_INFO_1_CTR : - - share container with 0 entries: - - UINT32 0 - EntriesRead - UINT32 0 - Buffer - - share container with > 0 entries: - - UINT32 EntriesRead - UINT32 non-zero - Buffer - UINT32 EntriesRead - - SH_INFO_1_PTR[EntriesRead] share entry pointers - SH_INFO_1_STR[EntriesRead] share entry strings - - UINT8[] padding to get unicode string 4-byte - aligned with start of the SMB header. - UINT32 EntriesRead - UINT32 0 - padding - -- SERVER_INFO_101 : - -Note: see cifs6.txt section 6.4 - the fields described therein will be - of assistance here. for example, the type listed below is the - same as fServerType, which is described in 6.4.1. - - SV_TYPE_WORKSTATION 0x00000001 All workstations - SV_TYPE_SERVER 0x00000002 All servers - SV_TYPE_SQLSERVER 0x00000004 Any server running with SQL - server - SV_TYPE_DOMAIN_CTRL 0x00000008 Primary domain controller - SV_TYPE_DOMAIN_BAKCTRL 0x00000010 Backup domain controller - SV_TYPE_TIME_SOURCE 0x00000020 Server running the timesource - service - SV_TYPE_AFP 0x00000040 Apple File Protocol servers - SV_TYPE_NOVELL 0x00000080 Novell servers - SV_TYPE_DOMAIN_MEMBER 0x00000100 Domain Member - SV_TYPE_PRINTQ_SERVER 0x00000200 Server sharing print queue - SV_TYPE_DIALIN_SERVER 0x00000400 Server running dialin service. - SV_TYPE_XENIX_SERVER 0x00000800 Xenix server - SV_TYPE_NT 0x00001000 NT server - SV_TYPE_WFW 0x00002000 Server running Windows for - - SV_TYPE_SERVER_NT 0x00008000 Windows NT non DC server - SV_TYPE_POTENTIAL_BROWSER 0x00010000 Server that can run the browser - service - SV_TYPE_BACKUP_BROWSER 0x00020000 Backup browser server - SV_TYPE_MASTER_BROWSER 0x00040000 Master browser server - SV_TYPE_DOMAIN_MASTER 0x00080000 Domain Master Browser server - SV_TYPE_LOCAL_LIST_ONLY 0x40000000 Enumerate only entries marked - "local" - SV_TYPE_DOMAIN_ENUM 0x80000000 Enumerate Domains. The pszServer - and pszDomain parameters must be - NULL. - - UINT32 500 - platform_id - VOID* pointer to name - UINT32 5 - major version - UINT32 4 - minor version - UINT32 type (SV_TYPE_... bit field) - VOID* pointer to comment - - UNISTR2 sv101_name - unicode string of server name - UNISTR2 sv_101_comment - unicode string of server comment. - - UINT8[] padding to get unicode string 4-byte - aligned with start of the SMB header. - - - -3) MSRPC over Transact Named Pipe ---------------------------------- - -For details on the SMB Transact Named Pipe, see cifs6.txt - - -3.1) MSRPC Pipes ----------------- - -The MSRPC is conducted over an SMB Transact Pipe with a name of "\PIPE\". -You must first obtain a 16 bit file handle, by sending a SMBopenX with the -pipe name "\PIPE\srvsvc" for example. You can then perform an SMB Trans, -and must carry out an SMBclose on the file handle once you are finished. - -Trans Requests must be sent with two setup UINT16s, no UINT16 params (none -known about), and UINT8 data parameters sufficient to contain the MSRPC -header, and MSRPC data. The first UINT16 setup parameter must be either -0x0026 to indicate an RPC, or 0x0001 to indicate Set Named Pipe Handle -state. The second UINT16 parameter must be the file handle for the pipe, -obtained above. - -The Data section for an API Command of 0x0026 (RPC pipe) in the Trans -Request is the RPC Header, followed by the RPC Data. The Data section for -an API Command of 0x0001 (Set Named Pipe Handle state) is two bytes. The -only value seen for these two bytes is 0x00 0x43. - - -MSRPC Responses are sent as response data inside standard SMB Trans -responses, with the MSRPC Header, MSRPC Data and MSRPC tail. - - -It is suspected that the Trans Requests will need to be at least 2-byte -aligned (probably 4-byte). This is standard practice for SMBs. It is also -independent of the observed 4-byte alignments with the start of the MSRPC -header, including the 4-byte alignment between the MSRPC header and the -MSRPC data. - - -First, an SMBtconX connection is made to the IPC$ share. The connection -must be made using encrypted passwords, not clear-text. Then, an SMBopenX -is made on the pipe. Then, a Set Named Pipe Handle State must be sent, -after which the pipe is ready to accept API commands. Lastly, and SMBclose -is sent. - - -To be resolved: - - lkcl/01nov97 there appear to be two additional bytes after the null- - terminated \PIPE\ name for the RPC pipe. Values seen so far are - listed below: - - initial SMBopenX request: RPC API command 0x26 params: - - "\\PIPE\\lsarpc" 0x65 0x63; 0x72 0x70; 0x44 0x65; - "\\PIPE\\srvsvc" 0x73 0x76; 0x4E 0x00; 0x5C 0x43; - - -3.2) Header ------------ - -[section to be rewritten, following receipt of work by Duncan Stansfield] - - -Interesting note: if you set packed data representation to 0x0100 0000 -then all 4-byte and 2-byte word ordering is turned around! - -The start of each of the NTLSA and NETLOGON named pipes begins with: - -00 UINT8 5 - RPC major version -01 UINT8 0 - RPC minor version -02 UINT8 2 - RPC response packet -03 UINT8 3 - (FirstFrag bit-wise or with LastFrag) -04 UINT32 0x1000 0000 - packed data representation -08 UINT16 fragment length - data size (bytes) inc header and tail. -0A UINT16 0 - authentication length -0C UINT32 call identifier. matches 12th UINT32 of incoming RPC data. -10 UINT32 allocation hint - data size (bytes) minus header and tail. -14 UINT16 0 - presentation context identifier -16 UINT8 0 - cancel count -17 UINT8 in replies: 0 - reserved; in requests: opnum - see #defines. -18 ...... start of data (goes on for allocation_hint bytes) - - -RPC_Packet for request, response, bind and bind acknowledgement. -{ - - UINT8 versionmaj # reply same as request (0x05) - UINT8 versionmin # reply same as request (0x00) - UINT8 type # one of the MSRPC_Type enums - UINT8 flags # reply same as request (0x00 for Bind, 0x03 for Request) - UINT32 representation # reply same as request (0x00000010) - UINT16 fraglength # the length of the data section of the SMB trans packet - UINT16 authlength - UINT32 callid # call identifier. (e.g. 0x00149594) - - * stub USE TvPacket # the remainder of the packet depending on the "type" -} - - -# the interfaces are numbered. as yet I haven't seen more than one interface -# used on the same pipe name -# srvsvc -# abstract (0x4B324FC8, 0x01D31670, 0x475A7812, 0x88E16EBF, 0x00000003) -# transfer (0x8A885D04, 0x11C91CEB, 0x0008E89F, 0x6048102B, 0x00000002) -RPC_Iface RW -{ - UINT8 byte[16] # 16 bytes of number - UINT32 version # the interface number -} - - -# the remainder of the packet after the header if "type" was Bind -# in the response header, "type" should be BindAck -RPC_ReqBind RW -{ - UINT16 maxtsize # maximum transmission fragment size (0x1630) - UINT16 maxrsize # max receive fragment size (0x1630) - UINT32 assocgid # associated group id (0x0) - UINT32 numelements # the number of elements (0x1) - UINT16 contextid # presentation context identifier (0x0) - UINT8 numsyntaxes # the number of syntaxes (has always been 1?)(0x1) - UINT8[] # 4-byte alignment padding, against SMB header - - * abstractint USE RPC_Iface # num and vers. of interface client is using - * transferint USE RPC_Iface # num and vers. of interface to use for replies -} - - -RPC_Address RW -{ - UINT16 length # length of the string including null terminator - * port USE string # the string above in single byte, null terminated form -} - - -# the response to place after the header in the reply packet -RPC_ResBind RW -{ - UINT16 maxtsize # same as request - UINT16 maxrsize # same as request - UINT32 assocgid # zero - - * secondaddr USE RPC_Address # the address string, as described earlier - - UINT8[] # 4-byte alignment padding, against SMB header - - UINT8 numresults # the number of results (0x01) - - UINT8[] # 4-byte alignment padding, against SMB header - UINT16 result # result (0x00 = accept) - UINT16 reason # reason (0x00 = no reason specified) - - * transfersyntax USE RPC_Iface # the transfer syntax from the request -} - - -# the remainder of the packet after the header for every other other -# request -RPC_ReqNorm RW -{ - UINT32 allochint # the size of the stub data in bytes - UINT16 prescontext # presentation context identifier (0x0) - UINT16 opnum # operation number (0x15) - - * stub USE TvPacket # a packet dependent on the pipe name - # (probably the interface) and the op number) -} - - -# response to a request -RPC_ResNorm RW -{ - UINT32 allochint # size of the stub data in bytes - UINT16 prescontext # presentation context identifier (same as request) - UINT8 cancelcount # cancel count? (0x0) - UINT8 reserved # 0 - one byte padding - - * stub USE TvPacket # the remainder of the reply -} - - -3.3) Tail ---------- - -The end of each of the NTLSA and NETLOGON named pipes ends with: - - ...... end of data - UINT32 return code - - - -3.4 RPC Bind / Bind Ack ------------------------ - -RPC Binds are the process of associating an RPC pipe (e.g \PIPE\lsarpc) -with a "transfer syntax" (see RPC_Iface structure). The purpose for doing -this is unknown. - -Note: The RPC_ResBind SMB Transact request is sent with two uint16 setup - parameters. The first is 0x0026; the second is the file handle - returned by the SMBopenX Transact response. - -Note: The RPC_ResBind members maxtsize, maxrsize and assocgid are the - same in the response as the same members in the RPC_ReqBind. The - RPC_ResBind member transfersyntax is the same in the response as - the - -Note: The RPC_ResBind response member secondaddr contains the name - of what is presumed to be the service behind the RPC pipe. The - mapping identified so far is: - - initial SMBopenX request: RPC_ResBind response: - - "\\PIPE\\srvsvc" "\\PIPE\\ntsvcs" - "\\PIPE\\samr" "\\PIPE\\lsass" - "\\PIPE\\lsarpc" "\\PIPE\\lsass" - "\\PIPE\\wkssvc" "\\PIPE\\wksvcs" - "\\PIPE\\NETLOGON" "\\PIPE\\NETLOGON" - -Note: The RPC_Packet fraglength member in both the Bind Request and Bind - Acknowledgment must contain the length of the entire RPC data, - including the RPC_Packet header. - -Request: - - RPC_Packet - RPC_ReqBind - -Response: - - RPC_Packet - RPC_ResBind - - - -4) NTLSA Transact Named Pipe ----------------------------- - -The sequence of actions taken on this pipe are: - -- Establish a connection to the IPC$ share (SMBtconX). use encrypted passwords. -- Open an RPC Pipe with the name "\\PIPE\\lsarpc". Store the file handle. -- Using the file handle, send a Set Named Pipe Handle state to 0x4300. -- Send an LSA Open Policy request. Store the Policy Handle. -- Using the Policy Handle, send LSA Query Info Policy requests, etc. -- Using the Policy Handle, send an LSA Close. -- Close the IPC$ share. - - -Defines for this pipe, identifying the query are: - -- LSA Open Policy: 0x2c -- LSA Query Info Policy: 0x07 -- LSA Enumerate Trusted Domains: 0x0d -- LSA Open Secret: 0xff -- LSA Lookup SIDs: 0xfe -- LSA Lookup Names: 0xfd -- LSA Close: 0x00 - - -4.1) LSA Open Policy --------------------- - -Note: The policy handle can be anything you like. - -Request: - - VOID* buffer pointer - UNISTR2 server name - unicode string starting with two '\'s - OBJ_ATTR object attributes - UINT32 1 - desired access - -Response: - - POL_HND LSA policy handle - - return 0 - indicates success - - -4.2) LSA Query Info Policy --------------------------- - -Note: The info class in response must be the same as that in the request. - -Request: - - POL_HND LSA policy handle - UINT16 info class (also a policy handle?) - -Response: - - VOID* undocumented buffer pointer - UINT16 info class (same as info class in request). - - switch (info class) - case 3: - case 5: - { - DOM_INFO domain info, levels 3 and 5 (are the same). - } - - return 0 - indicates success - - -4.3) LSA Enumerate Trusted Domains ----------------------------------- - -Request: - - no extra data - -Response: - - UINT32 0 - enumeration context - UINT32 0 - entries read - UINT32 0 - trust information - - return 0x8000 001a - "no trusted domains" success code - - -4.4) LSA Open Secret --------------------- - -Request: - - no extra data - -Response: - - UINT32 0 - undocumented - UINT32 0 - undocumented - UINT32 0 - undocumented - UINT32 0 - undocumented - UINT32 0 - undocumented - - return 0x0C00 0034 - "no such secret" success code - - -4.5) LSA Close --------------- - -Request: - - POL_HND policy handle to be closed - -Response: - - POL_HND 0s - closed policy handle (all zeros) - - return 0 - indicates success - - -4.6) LSA Lookup SIDS --------------------- - -Note: num_entries in response must be same as num_entries in request. - -Request: - - POL_HND LSA policy handle - UINT32 num_entries - VOID* undocumented domain SID buffer pointer - VOID* undocumented domain name buffer pointer - VOID*[num_entries] undocumented domain SID pointers to be looked up. - DOM_SID[num_entries] domain SIDs to be looked up. - char[16] completely undocumented 16 bytes. - -Response: - - DOM_REF domain reference response - - UINT32 num_entries (listed above) - VOID* undocumented buffer pointer - - UINT32 num_entries (listed above) - DOM_SID2[num_entries] domain SIDs (from Request, listed above). - - UINT32 num_entries (listed above) - - return 0 - indicates success - - -4.7) LSA Lookup Names ---------------------- - -Note: num_entries in response must be same as num_entries in request. - -Request: - - POL_HND LSA policy handle - UINT32 num_entries - UINT32 num_entries - VOID* undocumented domain SID buffer pointer - VOID* undocumented domain name buffer pointer - NAME[num_entries] names to be looked up. - char[] undocumented bytes - falsely translated SID structure? - -Response: - - DOM_REF domain reference response - - UINT32 num_entries (listed above) - VOID* undocumented buffer pointer - - UINT32 num_entries (listed above) - DOM_RID[num_entries] domain SIDs (from Request, listed above). - - UINT32 num_entries (listed above) - - return 0 - indicates success - - - -5) NETLOGON rpc Transact Named Pipe ------------------------------------ - -The sequence of actions taken on this pipe are: - -- Establish a connection to the IPC$ share (SMBtconX). use encrypted passwords. -- Open an RPC Pipe with the name "\\PIPE\\NETLOGON". Store the file handle. -- Using the file handle, send a Set Named Pipe Handle state to 0x4300. -- Create Client Challenge. Send LSA Request Challenge. Store Server Challenge. -- Calculate Session Key. Send an LSA Auth 2 Challenge. Store Auth2 Challenge. -- Calc/Verify Client Creds. Send LSA Srv PW Set. Calc/Verify Server Creds. -- Calc/Verify Client Creds. Send LSA SAM Logon . Calc/Verify Server Creds. -- Calc/Verify Client Creds. Send LSA SAM Logoff. Calc/Verify Server Creds. -- Close the IPC$ share. - - -Defines for this pipe, identifying the query are: - -- LSA Request Challenge: 0x04 -- LSA Server Password Set: 0x06 -- LSA SAM Logon: 0x02 -- LSA SAM Logoff: 0x03 -- LSA Auth 2: 0x0f -- LSA Logon Control: 0x0e - - -5.1) LSA Request Challenge --------------------------- - -Note: logon server name starts with two '\' characters and is upper case. - -Note: logon client is the machine, not the user. - -Note: the initial LanManager password hash, against which the challenge - is issued, is the machine name itself (lower case). there will be - calls issued (LSA Server Password Set) which will change this, later. - refusing these calls allows you to always deal with the same password - (i.e the LM# of the machine name in lower case). - -Request: - - VOID* undocumented buffer pointer - UNISTR2 logon server unicode string - UNISTR2 logon client unicode string - char[8] client challenge - -Response: - - char[8] server challenge - - return 0 - indicates success - - - -5.2) LSA Authenticate 2 ------------------------ - -Note: in between request and response, calculate the client credentials, - and check them against the client-calculated credentials (this - process uses the previously received client credentials). - -Note: neg_flags in the response is the same as that in the request. - -Note: you must take a copy of the client-calculated credentials received - here, because they will be used in subsequent authentication packets. - -Request: - - LOG_INFO client identification info - - char[8] client-calculated credentials - UINT8[] padding to 4-byte align with start of SMB header. - UINT32 neg_flags - negotiated flags (usual value is 0x0000 01ff) - -Response: - - char[8] server credentials. - UINT32 neg_flags - same as neg_flags in request. - - return 0 - indicates success. failure value unknown. - - -5.3) LSA Server Password Set ----------------------------- - -Note: the new password is suspected to be a DES encryption using the old - password to generate the key. - -Note: in between request and response, calculate the client credentials, - and check them against the client-calculated credentials (this - process uses the previously received client credentials). - -Note: the server credentials are constructed from the client-calculated - credentials and the client time + 1 second. - -Note: you must take a copy of the client-calculated credentials received - here, because they will be used in subsequent authentication packets. - -Request: - - CLNT_INFO client identification/authentication info - char[] new password - undocumented. - -Response: - - CREDS server credentials. server time stamp appears to be ignored. - - return 0 - indicates success; 0xC000 006a indicates failure - - -5.4) LSA SAM Logon ------------------- - -Note: valid_user is True iff the username and password hash are valid for - the requested domain. - -Request: - - SAM_INFO sam_id structure - -Response: - - VOID* undocumented buffer pointer - CREDS server credentials. server time stamp appears to be ignored. - - if (valid_user) - { - UINT16 3 - switch value indicating USER_INFO structure. - VOID* non-zero - pointer to USER_INFO structure - USER_INFO user logon information - - UINT32 1 - Authoritative response; 0 - Non-Auth? - - return 0 - indicates success - } - else - { - UINT16 0 - switch value. value to indicate no user presumed. - VOID* 0x0000 0000 - indicates no USER_INFO structure. - - UINT32 1 - Authoritative response; 0 - Non-Auth? - - return 0xC000 0064 - NT_STATUS_NO_SUCH_USER. - } - - -5.5) LSA SAM Logoff --------------------- - -Note: presumably, the SAM_INFO structure is validated, and a (currently - undocumented) error code returned if the Logoff is invalid. - -Request: - - SAM_INFO sam_id structure - -Response: - - VOID* undocumented buffer pointer - CREDS server credentials. server time stamp appears to be ignored. - - return 0 - indicates success. undocumented failure indication. - - -6) \\MAILSLOT\NET\NTLOGON -------------------------- - -Note: mailslots will contain a response mailslot, to which the response - should be sent. the target NetBIOS name is REQUEST_NAME<20>, where - REQUEST_NAME is the name of the machine that sent the request. - - -6.1) Query for PDC ------------------- - -Note: NTversion, LMNTtoken, LM20token in response are the same as those - given in the request. - -Request: - - UINT16 0x0007 - Query for PDC - STR machine name - STR response mailslot - UINT8[] padding to 2-byte align with start of mailslot. - UNISTR machine name - UINT32 NTversion - UINT16 LMNTtoken - UINT16 LM20token - -Response: - - UINT16 0x000A - Respose to Query for PDC - STR machine name (in uppercase) - UINT8[] padding to 2-byte align with start of mailslot. - UNISTR machine name - UNISTR domain name - UINT32 NTversion (same as received in request) - UINT16 LMNTtoken (same as received in request) - UINT16 LM20token (same as received in request) - - -6.2) SAM Logon --------------- - -Note: machine name in response is preceded by two '\' characters. - -Note: NTversion, LMNTtoken, LM20token in response are the same as those - given in the request. - -Note: user name in the response is presumably the same as that in the request. - -Request: - - UINT16 0x0012 - SAM Logon - UINT16 request count - UNISTR machine name - UNISTR user name - STR response mailslot - UINT32 alloweable account - UINT32 domain SID size - char[sid_size] domain SID, of sid_size bytes. - UINT8[] ???? padding to 4? 2? -byte align with start of mailslot. - UINT32 NTversion - UINT16 LMNTtoken - UINT16 LM20token - -Response: - - UINT16 0x0013 - Response to SAM Logon - UNISTR machine name - UNISTR user name - workstation trust account - UNISTR domain name - UINT32 NTversion - UINT16 LMNTtoken - UINT16 LM20token - - - -7) SRVSVC Transact Named Pipe ------------------------------ - - -Defines for this pipe, identifying the query are: - -- Net Share Enum : 0x0f -- Net Server Get Info : 0x15 - - -7.1) Net Share Enum ------------------- - -Note: share level and switch value in the response are presumably the - same as those in the request. - -Note: cifsrap2.txt (section 5) may be of limited assistance here. - -Request: - - VOID* pointer (to server name?) - UNISTR2 server name - - UINT8[] padding to get unicode string 4-byte aligned - with the start of the SMB header. - - UINT32 share level - UINT32 switch value - - VOID* pointer to SHARE_INFO_1_CTR - SHARE_INFO_1_CTR share info with 0 entries - - UINT32 preferred maximum length (0xffff ffff) - -Response: - - UINT32 share level - UINT32 switch value - - VOID* pointer to SHARE_INFO_1_CTR - SHARE_INFO_1_CTR share info (only added if share info ptr is non-zero) - - return 0 - indicates success - - -7.2) Net Server Get Info ------------------- - -Note: level is the same value as in the request. - -Request: - - UNISTR2 server name - UINT32 switch level - -Response: - - UINT32 switch level - VOID* pointer to SERVER_INFO_101 - - SERVER_INFO_101 server info (only added if server info ptr is non-zero) - - return 0 - indicates success - - - -Appendix --------- - -A1) Cryptographic side of NT Domain Authentication --------------------------------------------------- - - -A1.1) Definitions ------------------ - -Add(A1,A2): Intel byte ordered addition of corresponding 4 byte words -in arrays A1 and A2 - -E(K,D): DES ECB encryption of 8 byte data D using 7 byte key K - -lmowf(): Lan man hash - -ntowf(): NT hash - -PW: md4(machine_password) == md4(lsadump $machine.acc) == -pwdump(machine$) (initially) == md4(lmowf(unicode(machine))) - -ARC4(K,Lk,D,Ld): ARC4 encryption of data D of length Ld with key K of -length Lk - -v[m..n(,l)]: subset of v from bytes m to n, optionally padded with -zeroes to length l - -Cred(K,D): E(K[7..7,7],E(K[0..6],D)) computes a credential - -Time(): 4 byte current time - -Cc,Cs: 8 byte client and server challenges Rc,Rs: 8 byte client and -server credentials - - -A1.2) Protocol --------------- - -C->S ReqChal,Cc S->C Cs - -C & S compute session key Ks = E(PW[9..15],E(PW[0..6],Add(Cc,Cs))) - -C: Rc = Cred(Ks,Cc) C->S Authenticate,Rc S: Rs = Cred(Ks,Cs), -assert(Rc == Cred(Ks,Cc)) S->C Rs C: assert(Rs == Cred(Ks,Cs)) - -On joining the domain the client will optionally attempt to change its -password and the domain controller may refuse to update it depending -on registry settings. This will also occur weekly afterwards. - -C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S ServerPasswordSet,Rc',Tc, -arc4(Ks[0..7,16],lmowf(randompassword()) C: Rc = Cred(Ks,Rc+Tc+1) S: -assert(Rc' == Cred(Ks,Rc+Tc)), Ts = Time() S: Rs' = Cred(Ks,Rs+Tc+1) -S->C Rs',Ts C: assert(Rs' == Cred(Ks,Rs+Tc+1)) S: Rs = Rs' - -User: U with password P wishes to login to the domain (incidental data -such as workstation and domain omitted) - -C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S NetLogonSamLogon,Rc',Tc,U, -arc4(Ks[0..7,16],16,ntowf(P),16), arc4(Ks[0..7,16],16,lmowf(P),16) S: -assert(Rc' == Cred(Ks,Rc+Tc)) assert(passwords match those in SAM) S: -Ts = Time() - -S->C Cred(Ks,Cred(Ks,Rc+Tc+1)),userinfo(logon script,UID,SIDs,etc) C: -assert(Rs == Cred(Ks,Cred(Rc+Tc+1)) C: Rc = Cred(Ks,Rc+Tc+1) - - -A1.3) Comments --------------- - -On first joining the domain the session key could be computed by -anyone listening in on the network as the machine password has a well -known value. Until the machine is rebooted it will use this session -key to encrypt NT and LM one way functions of passwords which are -password equivalents. Any user who logs in before the machine has been -rebooted a second time will have their password equivalent exposed. Of -course the new machine password is exposed at this time anyway. - -None of the returned user info such as logon script, profile path and -SIDs *appear* to be protected by anything other than the TCP checksum. - -The server time stamps appear to be ignored. - -The client sends a ReturnAuthenticator in the SamLogon request which I -can't find a use for. However its time is used as the timestamp -returned by the server. - -The password OWFs should NOT be sent over the network reversibly -encrypted. They should be sent using ARC4(Ks,md4(owf)) with the server -computing the same function using the owf values in the SAM. - - -A2) SIDs and RIDs ------------------ - -SIDs and RIDs are well documented elsewhere. - -A SID is an NT Security ID (see DOM_SID structure). They are of the form: - - S-revision-NN-SubAuth1-SubAuth2-SubAuth3... - S-revision-0xNNNNNNNNNNNN-SubAuth1-SubAuth2-SubAuth3... - -currently, the SID revision is 1. -The Sub-Authorities are known as Relative IDs (RIDs). - - -A2.1) Well-known SIDs ---------------------- - - -A2.1.1) Universal well-known SIDs ---------------------------------- - - Null SID S-1-0-0 - World S-1-1-0 - Local S-1-2-0 - Creator Owner ID S-1-3-0 - Creator Group ID S-1-3-1 - Creator Owner Server ID S-1-3-2 - Creator Group Server ID S-1-3-3 - - (Non-unique IDs) S-1-4 - - -A2.1.2) NT well-known SIDs --------------------------- - - NT Authority S-1-5 - Dialup S-1-5-1 - - Network S-1-5-2 - Batch S-1-5-3 - Interactive S-1-5-4 - Service S-1-5-6 - AnonymousLogon S-1-5-7 (aka null logon session) - Proxy S-1-5-8 - ServerLogon S-1-5-8 (aka domain controller account) - - (Logon IDs) S-1-5-5-X-Y - - (NT non-unique IDs) S-1-5-0x15-... - - (Built-in domain) s-1-5-0x20 - - - -A2.2) Well-known RIDS ---------------------- - -A RID is a sub-authority value, as part of either a SID, or in the case -of Group RIDs, part of the DOM_GID structure, in the USER_INFO_1 -structure, in the LSA SAM Logon response. - - -A2.2.1) Well-known RID users ----------------------------- - - DOMAIN_USER_RID_ADMIN 0x0000 01F4 - DOMAIN_USER_RID_GUEST 0x0000 01F5 - - - -A2.2.2) Well-known RID groups ----------------------------- - - DOMAIN_GROUP_RID_ADMINS 0x0000 0200 - DOMAIN_GROUP_RID_USERS 0x0000 0201 - DOMAIN_GROUP_RID_GUESTS 0x0000 0202 - - - -A2.2.3) Well-known RID aliases ------------------------------- - - DOMAIN_ALIAS_RID_ADMINS 0x0000 0220 - DOMAIN_ALIAS_RID_USERS 0x0000 0221 - DOMAIN_ALIAS_RID_GUESTS 0x0000 0222 - DOMAIN_ALIAS_RID_POWER_USERS 0x0000 0223 - - DOMAIN_ALIAS_RID_ACCOUNT_OPS 0x0000 0224 - DOMAIN_ALIAS_RID_SYSTEM_OPS 0x0000 0225 - DOMAIN_ALIAS_RID_PRINT_OPS 0x0000 0226 - DOMAIN_ALIAS_RID_BACKUP_OPS 0x0000 0227 - - DOMAIN_ALIAS_RID_REPLICATOR 0x0000 0228 - - -- cgit From fc29385029bf000dc70d23154e39970ee76e4d30 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:35:33 +0000 Subject: Make debuglevel a string for use with debug classes --- source/lib/popt_common.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/lib/popt_common.c b/source/lib/popt_common.c index a3d6af4fbc1..bbc17cb704d 100644 --- a/source/lib/popt_common.c +++ b/source/lib/popt_common.c @@ -33,7 +33,7 @@ static void debug_callback(poptContext con, switch(opt->val) { case 'd': if (arg) { - DEBUGLEVEL = atoi(arg); + debug_parse_levels(arg); AllowDebugChange = False; } @@ -43,7 +43,7 @@ static void debug_callback(poptContext con, struct poptOption popt_common_debug[] = { { NULL, 0, POPT_ARG_CALLBACK, debug_callback }, - { "debuglevel", 'd', POPT_ARG_INT, NULL, 'd', "Set debug level", + { "debuglevel", 'd', POPT_ARG_STRING, NULL, 'd', "Set debug level", "DEBUGLEVEL" }, { 0 } }; -- cgit From 073106ad25fba8c8aaa57c296ce8e7cb7b3e3e97 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:36:37 +0000 Subject: Use popt for --help --- source/nsswitch/wbinfo.c | 78 +++++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 54 deletions(-) diff --git a/source/nsswitch/wbinfo.c b/source/nsswitch/wbinfo.c index 4d36acc51b3..d7d70b9e52e 100644 --- a/source/nsswitch/wbinfo.c +++ b/source/nsswitch/wbinfo.c @@ -619,32 +619,6 @@ static BOOL wbinfo_ping(void) return result == NSS_STATUS_SUCCESS; } -/* Print program usage */ - -static void usage(void) -{ - d_printf("Usage: wbinfo -ug | -n name | -sSY sid | -UG uid/gid | -tm " - "| -[aA] user%%password\n"); - d_printf("\t-u\t\t\tlists all domain users\n"); - d_printf("\t-g\t\t\tlists all domain groups\n"); - d_printf("\t-n name\t\t\tconverts name to sid\n"); - d_printf("\t-s sid\t\t\tconverts sid to name\n"); - d_printf("\t-N name\t\t\tconverts NetBIOS name to IP (WINS)\n"); - d_printf("\t-I name\t\t\tconverts IP address to NetBIOS name (WINS)\n"); - d_printf("\t-U uid\t\t\tconverts uid to sid\n"); - d_printf("\t-G gid\t\t\tconverts gid to sid\n"); - d_printf("\t-S sid\t\t\tconverts sid to uid\n"); - d_printf("\t-Y sid\t\t\tconverts sid to gid\n"); - d_printf("\t-t\t\t\tcheck shared secret\n"); - d_printf("\t-m\t\t\tlist trusted domains\n"); - d_printf("\t-r user\t\t\tget user groups\n"); - d_printf("\t-a user%%password\tauthenticate user\n"); - d_printf("\t-A user%%password\tstore user and password used by winbindd (root only)\n"); - d_printf("\t-p\t\t\t'ping' winbindd to see if it is alive\n"); - d_printf("\t--sequence\t\tshow sequence numbers of all domains\n"); - d_printf("\t--set-auth-user DOMAIN\\user%%password\tset password for restrict anonymous\n"); -} - /* Main program */ enum { @@ -664,28 +638,28 @@ int main(int argc, char **argv) int result = 1; struct poptOption long_options[] = { + POPT_AUTOHELP /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ - { "help", 'h', POPT_ARG_NONE, 0, 'h' }, - { "domain-users", 'u', POPT_ARG_NONE, 0, 'u' }, - { "domain-groups", 'g', POPT_ARG_NONE, 0, 'g' }, - { "WINS-by-name", 'N', POPT_ARG_STRING, &string_arg, 'N' }, - { "WINS-by-ip", 'I', POPT_ARG_STRING, &string_arg, 'I' }, - { "name-to-sid", 'n', POPT_ARG_STRING, &string_arg, 'n' }, - { "sid-to-name", 's', POPT_ARG_STRING, &string_arg, 's' }, - { "uid-to-sid", 'U', POPT_ARG_INT, &int_arg, 'U' }, - { "gid-to-sid", 'G', POPT_ARG_INT, &int_arg, 'G' }, - { "sid-to-uid", 'S', POPT_ARG_STRING, &string_arg, 'S' }, - { "sid-to-gid", 'Y', POPT_ARG_STRING, &string_arg, 'Y' }, - { "check-secret", 't', POPT_ARG_NONE, 0, 't' }, - { "trusted-domains", 'm', POPT_ARG_NONE, 0, 'm' }, - { "sequence", 0, POPT_ARG_NONE, 0, OPT_SEQUENCE }, - { "user-groups", 'r', POPT_ARG_STRING, &string_arg, 'r' }, - { "authenticate", 'a', POPT_ARG_STRING, &string_arg, 'a' }, - { "set-auth-user", 'A', POPT_ARG_STRING, &string_arg, OPT_SET_AUTH_USER }, - { "ping", 'p', POPT_ARG_NONE, 0, 'p' }, + { "domain-users", 'u', POPT_ARG_NONE, 0, 'u', "Lists all domain users"}, + { "domain-groups", 'g', POPT_ARG_NONE, 0, 'g', "Lists all domain groups" }, + { "WINS-by-name", 'N', POPT_ARG_STRING, &string_arg, 'N', "Converts NetBIOS name to IP (WINS)" }, + { "WINS-by-ip", 'I', POPT_ARG_STRING, &string_arg, 'I', "Converts IP address to NetBIOS name (WINS)" }, + { "name-to-sid", 'n', POPT_ARG_STRING, &string_arg, 'n', "Converts name to sid" }, + { "sid-to-name", 's', POPT_ARG_STRING, &string_arg, 's', "Converts sid to name" }, + { "uid-to-sid", 'U', POPT_ARG_INT, &int_arg, 'U', "Converts uid to sid" }, + { "gid-to-sid", 'G', POPT_ARG_INT, &int_arg, 'G', "Converts gid to sid" }, + { "sid-to-uid", 'S', POPT_ARG_STRING, &string_arg, 'S', "Converts sid to uid" }, + { "sid-to-gid", 'Y', POPT_ARG_STRING, &string_arg, 'Y', "Converts sid to gid" }, + { "check-secret", 't', POPT_ARG_NONE, 0, 't', "Check shared secret" }, + { "trusted-domains", 'm', POPT_ARG_NONE, 0, 'm', "List trusted domains" }, + { "sequence", 0, POPT_ARG_NONE, 0, OPT_SEQUENCE, "show sequence numbers of all domains" }, + { "user-groups", 'r', POPT_ARG_STRING, &string_arg, 'r', "Get user groups" }, + { "authenticate", 'a', POPT_ARG_STRING, &string_arg, 'a', "authenticate user", "user%password" }, + { "set-auth-user", 'A', POPT_ARG_STRING, &string_arg, OPT_SET_AUTH_USER, "Store user and password used by winbindd (root only)", "user%password" }, + { "ping", 'p', POPT_ARG_NONE, 0, 'p', "'ping' winbindd to see if it is alive" }, { 0, 0, 0, 0 } }; @@ -708,17 +682,17 @@ int main(int argc, char **argv) load_interfaces(); + /* Parse options */ + + pc = poptGetContext("wbinfo", argc, (const char **)argv, long_options, 0); + /* Parse command line options */ if (argc == 1) { - usage(); + poptPrintHelp(pc, stderr, 0); return 1; } - /* Parse options */ - - pc = poptGetContext("wbinfo", argc, (const char **)argv, long_options, 0); - while((opt = poptGetNextOpt(pc)) != -1) { if (got_command) { d_fprintf(stderr, "No more than one command may be specified at once.\n"); @@ -734,10 +708,6 @@ int main(int argc, char **argv) while((opt = poptGetNextOpt(pc)) != -1) { switch (opt) { - case 'h': - usage(); - result = 0; - goto done; case 'u': if (!print_domain_users()) { d_printf("Error looking up domain users\n"); @@ -859,7 +829,7 @@ int main(int argc, char **argv) break; default: d_fprintf(stderr, "Invalid option\n"); - usage(); + poptPrintHelp(pc, stderr, 0); goto done; } } -- cgit From 0428eb422b50135327daf3040067f5982f1b0b92 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:37:39 +0000 Subject: Correct popt argument info in vfstest Don't use global_ctx in samtest.c --- source/torture/samtest.c | 39 +-------------------------------------- source/torture/vfstest.c | 2 +- 2 files changed, 2 insertions(+), 39 deletions(-) diff --git a/source/torture/samtest.c b/source/torture/samtest.c index a6d1a288b21..56b87dc257d 100644 --- a/source/torture/samtest.c +++ b/source/torture/samtest.c @@ -189,6 +189,7 @@ static NTSTATUS do_cmd(struct sam_context *sam, struct cmd_set *cmd_entry, char { char *p = cmd, **argv = NULL; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; + TALLOC_CTX *mem_ctx; pstring buf; int argc = 0, i; @@ -327,18 +328,6 @@ BOOL reload_services(BOOL test) return True; } -/* Print usage information */ -static void usage(void) -{ - printf("Usage: samtest [options]\n"); - - printf("\t-c or --command \"command string\" execute semicolon separated cmds\n"); - printf("\t-d or --debug debuglevel set the debuglevel\n"); - printf("\t-l or --logfile logfile logfile to use instead of stdout\n"); - printf("\t-h or --help Print this help message.\n"); - printf("\n"); -} - /* Main function */ int main(int argc, char *argv[]) @@ -382,32 +371,6 @@ int main(int argc, char *argv[]) lp_set_logfile(logfile); interactive = False; break; - - case 'd': - DEBUGLEVEL = opt_debuglevel; - break; - - /* - case 'U': { - char *lp; - - pstrcpy(username,opt_username); - - if ((lp=strchr_m(username,'%'))) { - *lp = 0; - pstrcpy(password,lp+1); - got_pass = 1; - memset(strchr_m(opt_username,'%') + 1, 'X', - strlen(password)); - } - break; - } - */ - - case 'h': - default: - usage(); - exit(1); } } diff --git a/source/torture/vfstest.c b/source/torture/vfstest.c index 824e8108bfd..9f8062a02e2 100644 --- a/source/torture/vfstest.c +++ b/source/torture/vfstest.c @@ -493,7 +493,7 @@ int main(int argc, char *argv[]) POPT_AUTOHELP {"file", 'f', POPT_ARG_STRING, &filename, 0, }, {"command", 'c', POPT_ARG_STRING, &cmdstr, 0, "Execute specified list of commands" }, - {"logfile", 'l', POPT_ARG_STRING, &opt_logfile, 'l', 0, "Write output to specified logfile" }, + {"logfile", 'l', POPT_ARG_STRING, &opt_logfile, 'l', "Write output to specified logfile" }, { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_debug }, { 0, 0, 0, 0} }; -- cgit From 0ea4bcb6b772a0d95d20f7c1a2a0c08a0ba9e466 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:38:43 +0000 Subject: Move samr_make_sam_obj_sd to lib/util_seaccess.c. samtest now compiles and links successfully! --- source/lib/util_seaccess.c | 41 +++++++++++++++++++++++++++++++++++++++++ source/rpc_server/srv_samr_nt.c | 40 ---------------------------------------- 2 files changed, 41 insertions(+), 40 deletions(-) diff --git a/source/lib/util_seaccess.c b/source/lib/util_seaccess.c index 5aef69e5541..87711ff5ad9 100644 --- a/source/lib/util_seaccess.c +++ b/source/lib/util_seaccess.c @@ -21,6 +21,8 @@ #include "includes.h" +extern DOM_SID global_sid_Builtin; + /********************************************************************************** Check if this ACE has a SID in common with the token. **********************************************************************************/ @@ -442,3 +444,42 @@ SEC_DESC_BUF *se_create_child_secdesc(TALLOC_CTX *ctx, SEC_DESC *parent_ctr, return sdb; } + +/******************************************************************* + samr_make_sam_obj_sd + ********************************************************************/ + +NTSTATUS samr_make_sam_obj_sd(TALLOC_CTX *ctx, SEC_DESC **psd, size_t *sd_size) +{ + extern DOM_SID global_sid_World; + DOM_SID adm_sid; + DOM_SID act_sid; + + SEC_ACE ace[3]; + SEC_ACCESS mask; + + SEC_ACL *psa = NULL; + + sid_copy(&adm_sid, &global_sid_Builtin); + sid_append_rid(&adm_sid, BUILTIN_ALIAS_RID_ADMINS); + + sid_copy(&act_sid, &global_sid_Builtin); + sid_append_rid(&act_sid, BUILTIN_ALIAS_RID_ACCOUNT_OPS); + + /*basic access for every one*/ + init_sec_access(&mask, SAMR_EXECUTE | SAMR_READ); + init_sec_ace(&ace[0], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); + + /*full access for builtin aliases Administrators and Account Operators*/ + init_sec_access(&mask, SAMR_ALL_ACCESS); + init_sec_ace(&ace[1], &adm_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); + init_sec_ace(&ace[2], &act_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); + + if ((psa = make_sec_acl(ctx, NT4_ACL_REVISION, 3, ace)) == NULL) + return NT_STATUS_NO_MEMORY; + + if ((*psd = make_sec_desc(ctx, SEC_DESC_REVISION, NULL, NULL, NULL, psa, sd_size)) == NULL) + return NT_STATUS_NO_MEMORY; + + return NT_STATUS_OK; +} diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c index 82b83403eba..0d6808d08c6 100644 --- a/source/rpc_server/srv_samr_nt.c +++ b/source/rpc_server/srv_samr_nt.c @@ -405,46 +405,6 @@ NTSTATUS _samr_get_usrdom_pwinfo(pipes_struct *p, SAMR_Q_GET_USRDOM_PWINFO *q_u, return r_u->status; } - -/******************************************************************* - samr_make_sam_obj_sd - ********************************************************************/ - -NTSTATUS samr_make_sam_obj_sd(TALLOC_CTX *ctx, SEC_DESC **psd, size_t *sd_size) -{ - extern DOM_SID global_sid_World; - DOM_SID adm_sid; - DOM_SID act_sid; - - SEC_ACE ace[3]; - SEC_ACCESS mask; - - SEC_ACL *psa = NULL; - - sid_copy(&adm_sid, &global_sid_Builtin); - sid_append_rid(&adm_sid, BUILTIN_ALIAS_RID_ADMINS); - - sid_copy(&act_sid, &global_sid_Builtin); - sid_append_rid(&act_sid, BUILTIN_ALIAS_RID_ACCOUNT_OPS); - - /*basic access for every one*/ - init_sec_access(&mask, SAMR_EXECUTE | SAMR_READ); - init_sec_ace(&ace[0], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); - - /*full access for builtin aliases Administrators and Account Operators*/ - init_sec_access(&mask, SAMR_ALL_ACCESS); - init_sec_ace(&ace[1], &adm_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); - init_sec_ace(&ace[2], &act_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); - - if ((psa = make_sec_acl(ctx, NT4_ACL_REVISION, 3, ace)) == NULL) - return NT_STATUS_NO_MEMORY; - - if ((*psd = make_sec_desc(ctx, SEC_DESC_REVISION, NULL, NULL, NULL, psa, sd_size)) == NULL) - return NT_STATUS_NO_MEMORY; - - return NT_STATUS_OK; -} - /******************************************************************* samr_make_dom_obj_sd ********************************************************************/ -- cgit From 3b4cf8f67c2970e7b099ae2382bdd802b79d1dd2 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:39:00 +0000 Subject: SAM_CONTEXT is const --- examples/sam/sam_skel.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/examples/sam/sam_skel.c b/examples/sam/sam_skel.c index 5de8ca00d18..9b684270a02 100644 --- a/examples/sam/sam_skel.c +++ b/examples/sam/sam_skel.c @@ -189,11 +189,7 @@ NTSTATUS sam_skel_get_groups_of_account(const struct sam_methods *sam_method, co return NT_STATUS_NOT_IMPLEMENTED; } - - - - -NTSTATUS sam_init(SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const char *location) +NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const char *location) { NTSTATUS nt_status; -- cgit From b91fd5a77c493d0c90b45de6a70fb84bbef3f9f1 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 17:08:13 +0000 Subject: Adding makefile for sam_skel module --- examples/sam/Makefile.in | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 examples/sam/Makefile.in diff --git a/examples/sam/Makefile.in b/examples/sam/Makefile.in new file mode 100644 index 00000000000..d5df346a8c4 --- /dev/null +++ b/examples/sam/Makefile.in @@ -0,0 +1,28 @@ +CC = @CC@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LDSHFLAGS = -shared +srcdir = @builddir@ +FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) + +SAM_OBJS = sam_skel.so + +# Default target + +default: $(SAM_OBJS) + +# Pattern rules + +%.so: %.o + $(CC) $(LDSHFLAGS) $(LDFLAGS) -o $@ $< + +%.o: %.c + $(CC) $(FLAGS) -c $< + +# Misc targets + +clean: + rm -rf .libs + rm -f core *~ *% *.bak \ + $(SAM_OBJ) $(SAM_OBJS) -- cgit From 0d562b81bfd176111a1046560c39b03d986f90ec Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 29 Aug 2002 17:36:44 +0000 Subject: We don't need the RTLD_GLOBAL. --- source/auth/auth_builtin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/auth/auth_builtin.c b/source/auth/auth_builtin.c index bba1ad98bdc..d54a8660b35 100644 --- a/source/auth/auth_builtin.c +++ b/source/auth/auth_builtin.c @@ -189,7 +189,7 @@ NTSTATUS auth_init_plugin(struct auth_context *auth_context, const char *param, trim_string(plugin_name, " ", " "); DEBUG(5, ("Trying to load auth plugin %s\n", plugin_name)); - dl_handle = sys_dlopen(plugin_name, RTLD_NOW | RTLD_GLOBAL ); + dl_handle = sys_dlopen(plugin_name, RTLD_NOW ); if (!dl_handle) { DEBUG(0, ("Failed to load auth plugin %s using sys_dlopen (%s)\n", plugin_name, sys_dlerror())); return NT_STATUS_UNSUCCESSFUL; -- cgit From f1710a46d0b51fbefc2a1b5230b76aa9ecbbcdab Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 20:14:34 +0000 Subject: Split up documents at chapter level, not at sect1 level --- docs/docbook/Makefile.in | 5 +-- docs/docbook/projdoc/samba-doc.sgml | 6 +-- docs/docbook/samba.dsl | 85 +++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 docs/docbook/samba.dsl diff --git a/docs/docbook/Makefile.in b/docs/docbook/Makefile.in index f1fb97d1e2e..26cdc9a1bcf 100644 --- a/docs/docbook/Makefile.in +++ b/docs/docbook/Makefile.in @@ -59,7 +59,8 @@ manpages: $(MANPAGES) pdf: ../Samba-HOWTO-Collection.pdf ps: ../Samba-HOWTO-Collection.ps txt: ../Samba-HOWTO-Collection.txt -html: $(HTMLDIR)/samba-doc.html $(MANPAGES_HTML) +html: $(MANPAGES_HTML) + $(DOCBOOK2HTML) -d samba.dsl -o $(HTMLDIR) $< html-single: ../Samba-HOWTO-Collection.html ../Samba-Developers-Guide.html ../Samba-HOWTO-Collection.txt: $(SGMLDIR)/samba-doc.sgml @@ -81,8 +82,6 @@ html-single: ../Samba-HOWTO-Collection.html ../Samba-Developers-Guide.html $(DOCBOOK2HTML) -u -o .. $< mv ../dev-doc.html $@ -$(HTMLDIR)/samba-doc.html: $(SGMLDIR)/samba-doc.sgml - $(DOCBOOK2HTML) -o $(HTMLDIR) $< $(HTMLDIR)/%.html: $(MANSGMLDIR)/%.sgml $(DOCBOOK2HTML) -o $(HTMLDIR) $< diff --git a/docs/docbook/projdoc/samba-doc.sgml b/docs/docbook/projdoc/samba-doc.sgml index a50389b7f01..75c5c379d32 100644 --- a/docs/docbook/projdoc/samba-doc.sgml +++ b/docs/docbook/projdoc/samba-doc.sgml @@ -18,9 +18,9 @@ - - - + + + ]> diff --git a/docs/docbook/samba.dsl b/docs/docbook/samba.dsl new file mode 100644 index 00000000000..75239c0f206 --- /dev/null +++ b/docs/docbook/samba.dsl @@ -0,0 +1,85 @@ + + + + + + ]]> + + + ]]> +]> + + + + + +;; =================================================================== +;; Generic Parameters +;; (Generic currently means: both print and html) +(define (chunk-element-list) + (list (normalize "preface") + (normalize "chapter") + (normalize "appendix") + (normalize "article") + (normalize "glossary") + (normalize "bibliography") + (normalize "index") + (normalize "colophon") + (normalize "setindex") + (normalize "reference") + (normalize "refentry") + (normalize "part") +; (normalize "sect1") + (normalize "section") + (normalize "book") ;; just in case nothing else matches... + (normalize "set") ;; sets are definitely chunks... + )) + +(define %chapter-autolabel% #t) +(define %section-autolabel% #t) +(define (toc-depth nd) 3) + +(define %root-filename% "index") ;; name for the root html file +(define %html-ext% ".html") ;; default extension for html output files +(define %html-prefix% "") ;; prefix for all filenames generated (except root) +(define %use-id-as-filename% #t) ;; if #t uses ID value, if present, as filename + ;; otherwise a code is used to indicate level + ;; of chunk, and general element number + ;; (nth element in the document) + +; === HTML settings === +(define %html-pubid% "-//W3C//DTD HTML 4.01 Transitional//EN") ;; Nearly true :-( +(define %html40% #t) + +; === Media objects === +(define preferred-mediaobject-extensions ;; this magic allows to use different graphical + (list "png" "jpg" "jpeg")) ;; formats for printing and putting online +(define acceptable-mediaobject-extensions + (list "bmp" "gif" "eps" "epsf" "avi" "mpg" "mpeg" "qt")) +(define preferred-mediaobject-notations + (list "PNG" "JPG" "JPEG")) +(define acceptable-mediaobject-notations + (list "EPS" "BMP" "GIF" "linespecific")) +; === Rendering === +(define %admon-graphics% #t) ;; use symbols for Caution|Important|Note|Tip|Warning + +; === Books only === +(define %generate-book-titlepage% #t) +(define %generate-book-toc% #t) +(define ($generate-chapter-toc$) #f) ;; never generate a chapter TOC in books + +; === Articles only === +(define %generate-article-titlepage% #t) +(define %generate-article-toc% #t) ;; make TOC + + + + + + + -- cgit From 4fc06a9e2274546807beb411e9bcf47931f8b4f6 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 20:43:08 +0000 Subject: Several small fixes --- docs/docbook/Makefile.in | 11 +++++++---- docs/docbook/manpages/smb.conf.5.sgml | 2 +- docs/docbook/samba.dsl | 7 ++----- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/docbook/Makefile.in b/docs/docbook/Makefile.in index 26cdc9a1bcf..b225eb97809 100644 --- a/docs/docbook/Makefile.in +++ b/docs/docbook/Makefile.in @@ -51,16 +51,18 @@ all: @echo "ps - Build PostScript version of HOWTO Collection" @echo "pdf - Build PDF version of HOWTO Collection" @echo -n "html-single - Build single file HTML version of HOWTO Collection" - @echo "and developers guide" - @echo "html - Build HTML version of HOWTO Collection and manpages" + @echo " and developers guide" + @echo "html - Build HTML version of HOWTO Collection" + @echo "htmlman - Build html version of manpages" @echo "txt - Build plain text version of HOWTO Collection" manpages: $(MANPAGES) pdf: ../Samba-HOWTO-Collection.pdf ps: ../Samba-HOWTO-Collection.ps txt: ../Samba-HOWTO-Collection.txt -html: $(MANPAGES_HTML) - $(DOCBOOK2HTML) -d samba.dsl -o $(HTMLDIR) $< +htmlman: $(MANPAGES_HTML) +html: + $(DOCBOOK2HTML) -d samba.dsl -o $(HTMLDIR) projdoc/samba-doc.sgml html-single: ../Samba-HOWTO-Collection.html ../Samba-Developers-Guide.html ../Samba-HOWTO-Collection.txt: $(SGMLDIR)/samba-doc.sgml @@ -85,6 +87,7 @@ html-single: ../Samba-HOWTO-Collection.html ../Samba-Developers-Guide.html $(HTMLDIR)/%.html: $(MANSGMLDIR)/%.sgml $(DOCBOOK2HTML) -o $(HTMLDIR) $< + mv $(HTMLDIR)/index.html $@ $(MANDIR)/%: $(MANSGMLDIR)/%.sgml $(DOCBOOK2MAN) -o $(MANDIR) $< diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index 251341dbb1a..053c6c1c718 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -3467,7 +3467,7 @@ - Default : ldap filter = (&(uid=%u)(objectclass=sambaAccount)) + Default : ldap filter = (&(uid=%u)(objectclass=sambaAccount))
diff --git a/docs/docbook/samba.dsl b/docs/docbook/samba.dsl index 75239c0f206..80197dfa77b 100644 --- a/docs/docbook/samba.dsl +++ b/docs/docbook/samba.dsl @@ -44,13 +44,10 @@ (define %section-autolabel% #t) (define (toc-depth nd) 3) -(define %root-filename% "index") ;; name for the root html file +(define %root-filename% "Samba-HOWTO") ;; name for the root html file (define %html-ext% ".html") ;; default extension for html output files (define %html-prefix% "") ;; prefix for all filenames generated (except root) -(define %use-id-as-filename% #t) ;; if #t uses ID value, if present, as filename - ;; otherwise a code is used to indicate level - ;; of chunk, and general element number - ;; (nth element in the document) +(define %use-id-as-filename% #t) ; === HTML settings === (define %html-pubid% "-//W3C//DTD HTML 4.01 Transitional//EN") ;; Nearly true :-( -- cgit From e95d8e2c9ee5cf22b628f3e0d99fb74bcc632ea0 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 29 Aug 2002 23:16:45 +0000 Subject: fix connecting to a BDC when the PDC is down but in WINS and no bcast can be used to find a BDC --- source/nsswitch/winbindd_cm.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/nsswitch/winbindd_cm.c b/source/nsswitch/winbindd_cm.c index ddab850cf08..8c11bd33729 100644 --- a/source/nsswitch/winbindd_cm.c +++ b/source/nsswitch/winbindd_cm.c @@ -145,6 +145,13 @@ static BOOL cm_rpc_find_dc(const char *domain, struct in_addr *dc_ip, fstring sr /* Lookup domain controller name. Try the real PDC first to avoid SAM sync delays */ + if (get_dc_list(True, domain, &ip_list, &count) && + name_status_find(domain, 0x1c, 0x20, ip_list[0], srv_name)) { + *dc_ip = ip_list[0]; + SAFE_FREE(ip_list); + return True; + } + if (!get_dc_list(True, domain, &ip_list, &count)) { if (!get_dc_list(False, domain, &ip_list, &count)) { DEBUG(3, ("Could not look up dc's for domain %s\n", domain)); -- cgit From f757223ebe88148b83e1a32b87c014c15c0a68dd Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 29 Aug 2002 23:23:42 +0000 Subject: fix connecting to a BDC when the PDC is down but in WINS and no bcast can be used to find a BDC 2nd try .... --- source/nsswitch/winbindd_cm.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/source/nsswitch/winbindd_cm.c b/source/nsswitch/winbindd_cm.c index 8c11bd33729..997d5b665f4 100644 --- a/source/nsswitch/winbindd_cm.c +++ b/source/nsswitch/winbindd_cm.c @@ -152,11 +152,9 @@ static BOOL cm_rpc_find_dc(const char *domain, struct in_addr *dc_ip, fstring sr return True; } - if (!get_dc_list(True, domain, &ip_list, &count)) { - if (!get_dc_list(False, domain, &ip_list, &count)) { - DEBUG(3, ("Could not look up dc's for domain %s\n", domain)); - return False; - } + if (!get_dc_list(False, domain, &ip_list, &count)) { + DEBUG(3, ("Could not look up dc's for domain %s\n", domain)); + return False; } /* Pick a nice close server */ -- cgit From 8af86f68354f7c803bb66886560b358d6e48681d Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 30 Aug 2002 01:35:56 +0000 Subject: Abstract out the functionality of gtdbtool into a dictionary browser class. This should provide a nice framework for browsing any kind of data presented as a python dictionary: - windows registry - printer data - tdb files --- source/python/gtkdictbrowser.py | 188 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100755 source/python/gtkdictbrowser.py diff --git a/source/python/gtkdictbrowser.py b/source/python/gtkdictbrowser.py new file mode 100755 index 00000000000..1609dff9b4d --- /dev/null +++ b/source/python/gtkdictbrowser.py @@ -0,0 +1,188 @@ +#!/usr/bin/python +# +# Browse a Python dictionary in a two pane graphical interface written +# in GTK. +# +# The GtkDictBrowser class is supposed to be generic enough to allow +# applications to override enough methods and produce a +# domain-specific browser provided the information is presented as a +# Python dictionary. +# +# Possible applications: +# +# - Windows registry browser +# - SPOOLSS printerdata browser +# - tdb file browser +# + +from gtk import * +import string, re + +class GtkDictBrowser: + + def __init__(self, dict): + self.dict = dict + + # This variable stores a list of (regexp, function) used to + # convert the raw value data to a displayable string. + + self.get_value_text_fns = [] + self.get_key_text = lambda x: x + + # We can filter the list of keys displayed using a regex + + self.filter_regex = "" + + # Create and configure user interface widgets. A string argument is + # used to set the window title. + + def build_ui(self, title): + win = GtkWindow() + win.set_title(title) + + win.connect("destroy", mainquit) + + hpaned = GtkHPaned() + win.add(hpaned) + hpaned.set_border_width(5) + hpaned.show() + + vbox = GtkVBox() + hpaned.add1(vbox) + vbox.show() + + scrolled_win = GtkScrolledWindow() + scrolled_win.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC) + vbox.pack_start(scrolled_win) + scrolled_win.show() + + hbox = GtkHBox() + vbox.pack_end(hbox, expand = 0, padding = 5) + hbox.show() + + label = GtkLabel("Filter:") + hbox.pack_start(label, expand = 0, padding = 5) + label.show() + + self.entry = GtkEntry() + hbox.pack_end(self.entry, padding = 5) + self.entry.show() + + self.entry.connect("activate", self.filter_activated) + + self.list = GtkList() + self.list.set_selection_mode(SELECTION_MULTIPLE) + self.list.set_selection_mode(SELECTION_BROWSE) + scrolled_win.add_with_viewport(self.list) + self.list.show() + + self.list.connect("select_child", self.key_selected) + + scrolled_win = GtkScrolledWindow() + scrolled_win.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC) + hpaned.add2(scrolled_win) + scrolled_win.set_usize(500,400) + scrolled_win.show() + + self.text = GtkText() + self.text.set_editable(FALSE) + scrolled_win.add_with_viewport(self.text) + self.text.show() + + self.text.connect("event", self.event_handler) + + self.menu = GtkMenu() + self.menu.show() + + self.font = load_font("fixed") + + self.update_keylist() + + win.show() + + # Add a key to the left hand side of the user interface + + def add_key(self, key): + display_key = self.get_key_text(key) + list_item = GtkListItem(display_key) + list_item.set_data("raw_key", key) # Store raw key in item data + self.list.add(list_item) + list_item.show() + + # Event handler registered by build_ui() + + def event_handler(self, event, menu): + return FALSE + + # Set the text to appear in the right hand side of the user interface + + def set_value_text(self, text): + self.text.delete_text(0, self.text.get_length()) + + # The text widget has trouble inserting text containing NULL + # characters. + + text = string.replace(text, "\x00", ".") + + self.text.insert(self.font, None, None, text) + + # This function is called when a key is selected in the left hand side + # of the user interface. + + def key_selected(self, list, list_item): + key = list_item.children()[0].get() + + # Look for a match in the value display function list + + text = self.dict[list_item.get_data("raw_key")] + + for entry in self.get_value_text_fns: + if re.match(entry[0], key): + text = entry[1](text) + break + + self.set_value_text(text) + + # Refresh the key list by removing all items and re-inserting them. + # Items are only inserted if they pass through the filter regexp. + + def update_keylist(self): + self.list.remove_items(self.list.children()) + self.set_value_text("") + for k in self.dict.keys(): + if re.match(self.filter_regex, k): + self.add_key(k) + + # Invoked when the user hits return in the filter text entry widget. + + def filter_activated(self, entry): + self.filter_regex = entry.get_text() + self.update_keylist() + + # Register a key display function + + def register_get_key_text_fn(self, fn): + self.get_key_text = fn + + # Register a value display function + + def register_get_value_text_fn(self, regexp, fn): + self.get_value_text_fns.append((regexp, fn)) + +# For testing purposes, create a fixed dictionary to browse with + +if __name__ == "__main__": + + dict = {"chicken": "ham", "spam": "fun"} + + db = GtkDictBrowser(dict) + + db.build_ui("GtkDictBrowser") + + # Override Python's handling of ctrl-c so we can break out of the + # gui from the command line. + + import signal + signal.signal(signal.SIGINT, signal.SIG_DFL) + + mainloop() -- cgit From 0a2f6049c0b49810abf1c3e909d712f53c7fc8c1 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 30 Aug 2002 02:43:51 +0000 Subject: Forgot to check in some of the libsmb stuff. --- source/python/py_samba.c | 64 ++++++++++++++++++++++++++++++++++++++++++ source/python/samba-head.patch | 22 +++++++-------- source/python/setup.py.in | 10 +++++++ 3 files changed, 85 insertions(+), 11 deletions(-) create mode 100644 source/python/py_samba.c diff --git a/source/python/py_samba.c b/source/python/py_samba.c new file mode 100644 index 00000000000..7c945697877 --- /dev/null +++ b/source/python/py_samba.c @@ -0,0 +1,64 @@ +/* + Python wrappers for DCERPC/SMB client routines. + + Copyright (C) Tim Potter, 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "Python.h" +#include "python/py_common.h" + +/* + * Module initialisation + */ + +static PyObject *lsa_open_policy(PyObject *self, PyObject *args, + PyObject *kw) +{ + return NULL; +} + +static PyMethodDef samba_methods[] = { + { NULL } +}; + +static PyMethodDef cheepy_methods[] = { + { "open_policy", (PyCFunction)lsa_open_policy, METH_VARARGS|METH_KEYWORDS, + "Foo"}, + { NULL } +}; + +void initsamba(void) +{ + PyObject *module, *new_module, *dict; + + /* Initialise module */ + + module = Py_InitModule("samba", samba_methods); + dict = PyModule_GetDict(module); + + new_module = PyModule_N("cheepy"); + + + + PyDict_SetItemString(dict, "cheepy", new_module); + + + + /* Do samba initialisation */ + + py_samba_init(); +} diff --git a/source/python/samba-head.patch b/source/python/samba-head.patch index a739346a5bb..ced7da551e3 100644 --- a/source/python/samba-head.patch +++ b/source/python/samba-head.patch @@ -1,11 +1,11 @@ Index: Makefile.in =================================================================== RCS file: /data/cvs/samba/source/Makefile.in,v -retrieving revision 1.500 -diff -u -r1.500 Makefile.in ---- Makefile.in 2002/07/28 06:04:32 1.500 -+++ Makefile.in 2002/07/29 03:48:03 -@@ -838,6 +838,45 @@ +retrieving revision 1.502 +diff -u -r1.502 Makefile.in +--- Makefile.in 2002/08/02 07:20:56 1.502 ++++ Makefile.in 2002/08/06 00:51:48 +@@ -839,6 +839,45 @@ -$(INSTALLCMD) -d ${prefix}/include -$(INSTALLCMD) include/libsmbclient.h ${prefix}/include @@ -54,16 +54,16 @@ diff -u -r1.500 Makefile.in Index: configure.in =================================================================== RCS file: /data/cvs/samba/source/configure.in,v -retrieving revision 1.324 -diff -u -r1.324 configure.in ---- configure.in 2002/07/27 01:37:32 1.324 -+++ configure.in 2002/07/29 03:48:04 +retrieving revision 1.326 +diff -u -r1.326 configure.in +--- configure.in 2002/07/30 09:59:52 1.326 ++++ configure.in 2002/08/06 00:51:51 @@ -2797,7 +2797,7 @@ builddir=`pwd` AC_SUBST(builddir) --AC_OUTPUT(include/stamp-h Makefile script/findsmb) -+AC_OUTPUT(include/stamp-h Makefile script/findsmb python/setup.py) +-AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile) ++AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile python/setup.py) ################################################# # Print very concise instructions on building/use diff --git a/source/python/setup.py.in b/source/python/setup.py.in index 9b6dc1a650c..58963012458 100755 --- a/source/python/setup.py.in +++ b/source/python/setup.py.in @@ -160,5 +160,15 @@ setup( library_dirs = ["/usr/kerberos/lib"], extra_objects = obj_list), + # Moving to merge all individual extensions in to one big + # extension. This is to avoid the fact that each extension is 3MB + # in size due to the lack of proper depedency management in Samba. + + Extension(name = "samba", + sources = [samba_srcdir + "python/py_samba.c", + samba_srcdir + "python/py_common.c"], + libraries = lib_list, + library_dirs = ["/usr/kerberos/lib"], + extra_objects = obj_list), ], ) -- cgit From 46c49248e3f2ab307218b476b9a659bf54c3031e Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 30 Aug 2002 06:27:17 +0000 Subject: paranoid server security defaults to yes --- docs/docbook/manpages/smb.conf.5.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index 053c6c1c718..da6e996f171 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -5293,7 +5293,7 @@ to the logs and exit. - Default: paranoid server security = no + Default: paranoid server security = yes -- cgit From f736b83da65339a225876e50c836b209b2857074 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 30 Aug 2002 06:44:07 +0000 Subject: Remove obsolete documents --- docs/textdocs/outdated/NTDOMAIN.txt | 51 ------- docs/textdocs/outdated/PRINTER_DRIVER.txt | 240 ------------------------------ docs/textdocs/outdated/PROJECTS | 88 ----------- 3 files changed, 379 deletions(-) delete mode 100644 docs/textdocs/outdated/NTDOMAIN.txt delete mode 100644 docs/textdocs/outdated/PRINTER_DRIVER.txt delete mode 100644 docs/textdocs/outdated/PROJECTS diff --git a/docs/textdocs/outdated/NTDOMAIN.txt b/docs/textdocs/outdated/NTDOMAIN.txt deleted file mode 100644 index 8408acb979a..00000000000 --- a/docs/textdocs/outdated/NTDOMAIN.txt +++ /dev/null @@ -1,51 +0,0 @@ -!== -!== NTDOMAIN.txt for Samba release 2.0.4 18 May 1999 -!== -Contributor: Luke Kenneth Casson Leighton (samba-bugs@samba.org) - Copyright (C) 1997 Luke Kenneth Casson Leighton -Created: October 20, 1997 -Updated: February 25, 1999 (Jerry Carter) - -Subject: NT Domain Logons -=========================================================================== - -As of 1.9.18alpha1, Samba supports logins for NT 3.51 and 4.0 Workstations, -without the need, use or intervention of NT Server. This document describes -how to set this up. Over the continued development of the 1.9.18alpha -series, this process (and therefore this document) should become simpler. - -One useful thing to do is to get this version of Samba up and running -with Win95 profiles, as you would for the current stable version of -Samba (currently at 1.9.17p4), and is fully documented. You will need -to set up encrypted passwords. Even if you don't have any Win95 machines, -using your Samba Server to store the profile for one of your NT Workstation -users is a good test that you have 1.9.18alpha1 correctly configured *prior* -to attempting NT Domain Logons. - -The support is still experimental, so should be used at your own risk. - -NT is not as robust as you might have been led to believe: during the -development of the Domain Logon Support, one person reported having to -reinstall NT from scratch: their workstation had become totally unuseable. - -[further reports on ntsec@iss.net by independent administrators showing - similar symptoms lead us to believe that the SAM database file may be - corruptible. this _is_ recoverable (or, at least the machine is accessible), - by deleting the SAM file, under which circumstances all user account details - are lost, but at least the Administrator can log in with a blank password. - this is *not* possible except if the NT system is installed in a FAT - partition.] - -This *has* been reported to the NTBUGTRAQ@LISTSERV.NTBUGTRAQ.COM digest. - -========================================================================== -Please note that Samba 2.0 does not **officially** support domain logons -for Windows NT clients. Of course, domain logon support for Windows 9x -clients is complete and official. These are two different issues. - -Samba's capability to act as a Primary Domain Controller for Windows NT -domains is not advertised as it is not completed yet. For more information -regarding how to obtain the latest development (HEAD branch) source code -and what features are available, please refer to the NT Domain FAQ on-line -at the Samba web site under the documentation page. - diff --git a/docs/textdocs/outdated/PRINTER_DRIVER.txt b/docs/textdocs/outdated/PRINTER_DRIVER.txt deleted file mode 100644 index 5bf82e0cfe4..00000000000 --- a/docs/textdocs/outdated/PRINTER_DRIVER.txt +++ /dev/null @@ -1,240 +0,0 @@ -!== -!== PRINTER_DRIVER.txt for Samba release 2.0.4 18 May 1999 -!== -========================================================================== - Supporting the famous PRINTER$ share - - Jean-Francois.Micouleau@utc.fr, 10/26/97 - modified by herb@sgi.com 1/2/98 - -=========================================================================== - -Disclaimer: - - This ONLY works with Windows 95 - It does NOT work with Windows NT 4 - - -Goal: - - When you click on a samba shared printer, you can now install the driver - automatically onto the Windows 95 machine, as you would from an NT server. - -How To: - - It's a three step config. - - First, create a new directory, where you will put the driver files, and - make a share in smb.conf pointing to it. - - Example: - - [printer$] - path=/usr/local/samba/printer - public=yes - writable=no - browseable=yes - - Second, you have to build the list of drivers required for a specific - printer. This is the most complicated thing to do. Get the files - 'msprint.inf' and 'msprint2.inf' from Windows 95, the easiest way is to - grab them from a working Windows 95 computer. They are usually located - in 'c:\windows\inf'. Look in them for the printer you have. Run the new - program 'make_printerdef' with the file name and the printer name as - parameters. If you have drivers for an unsupported or updated printer, - first install these drivers on an Windows 95 system. There will be a - file created in your inf directory named 'oem?.inf' (where the ? is some - number). Use this file instead of msprint.inf. - - Example: (from the /usr/local/samba/lib directory) - - make_printerdef msprint.inf "Apple LaserWriter" >> printers.def - - The program will print out a list of required files to stderr. - Copy all the files listed into the directory you created in step 1. - If you have "preserve case = yes" make sure your files names match - EXACTLY the names listed. - - Third, you need to add 2 new parameters in smb.conf. One is in the - [global] section, called 'printer driver file' pointing to the printer - description file you just created, and the other in each printer share, - called 'printer driver location' pointing to where the client will get - the drivers. Don't forget to set correctly the printer driver parameter - to the Windows printer name. - - Example: - - [global] - printer driver file=/usr/local/samba/lib/printers.def - - [lp] - comment = My old printer laser - browseable = yes - printable = yes - public = yes - writable = no - create mode = 0700 - printer driver=Apple LaserWriter - printer driver location=\\%h\PRINTER$ - - %h will expand to the computer name, and PRINTER$ is the name of the - share created in step one. - - -If it doesn't work for you, don't send flame ! It worked for me. In case of -trouble don't hesitate to send me a mail with your smb.conf file and -printers.def - - -******* added by herb@sgi.com - -For those of you who like to know the details, and in case I have guessed -wrong on some of the fields - The following is the format of the entries -in the printers.def file: (entries are 1 single line - they are split here -for readability) - -:::: -:: - -The and the can be empty. -If no or are specified in the inf file, -these will default to the section name for the printer. - -The following is an excerpt from the MSPRINT2.INF file on a WIN95 machine. -I have deleted all but the entries relating to installing a driver for the -"QMS ColorScript 100 Model 30" printer. Using this "file" I'll try to -explain how the printers.def file is created. - -make_printerdef is run with the first argument being the name of this -file (MSPRINT2.INF in this case) and the second argument being the -name of the printer ("QMS ColorScript 100 Model 30" in this case). - -The printer name is first found in the "Model section" to obtain the -name of the "Installer Section" (this is the name after the equal sign). -We ignore the alternate name. - -The "Installer Section" contains entries for "CopyFiles" and "DataSection". -The "CopyFiles" line gives a list of all the required files for this -printer. If the name begins with an @ it is the name of a file (after -you strip off the @), otherwise it is the name of a "Copy Section" which -in turn is a list of files required. This printer has one file listed -"QCS30503.SPD" and two sections "COLOR_QMS_100_30" and "PSCRIPT". The -"COLOR_QMS_100_30" section is listed in the "[DestinationDirs]" as -having a value of 23. This means that all files listed in this section -should go into the "color" subdirectory. The list of files to copy for -this printer is thus: - -QCS30503.SPD,color\QMS10030.ICM,PSCRIPT.DRV,PSCRIPT.HLP,PSCRIPT.INI, -TESTPS.TXT,APPLE380.SPD,FONTS.MFM,ICONLIB.DLL,PSMON.DLL - -From the "Data Section" we obtain values for "DriverFile", "HelpFile", -and "LanguageMonitor". The % around the value for "LanguageMonitor" -indicates that it is a string that can be localized so its actual value -is obtained from the "[Strings]" section. The "Data Section" could also -have contained an entry for "DefaultDataType". - -Using the information we have obtained we can now construct the entry -for the printers.def file. - - -> QMS ColorScript 100 Model 30 (name given - on the command line) - -> PSCRIPT.DRV (given in Data Section) - -> QCS30503.SPD (defaults to Install Section name) - -> PSCRIPT.HLP (given in Data Section) - -> PostScript Language Monitor (given in Data Section) - -> RAW (default if not specified) - - -So.... the enty (actually one line but split here for readability) would -be: - -QMS ColorScript 100 Model 30:PSCRIPT.DRV:QCS30503.SPD: -PSCRIPT.HLP:PostScript Language Monitor:RAW: -QCS30503.SPD,color\QMS10030.ICM,PSCRIPT.DRV,PSCRIPT.HLP,PSCRIPT.INI, -TESTPS.TXT,APPLE380.SPD,FONTS.MFM,ICONLIB.DLL,PSMON.DLL - ----------------------- Info from MSPRINT2.INF ------------------------ -; -; The Manufacturer section lists all of the manufacturers that we will -; display in the Dialog box - -[Manufacturer] -"QMS" - - -; -; Model sections. Each section here corresponds with an entry listed in the -; [Manufacturer] section, above. The models will be displayed in the order -; that they appear in the INF file. -; -; Each model lists a variation of its own name as a compatible ID. This -; is done primarily as an optimization during upgrade. -; -[QMS] -"QMS ColorScript 100 Model 30" = QCS30503.SPD,QMS_ColorScript_100_Model_30 - - -; -; Installer Sections -; -; These sections control file installation, and reference all files that -; need to be copied. The section name will be assumed to be the driver -; file, unless there is an explicit DriverFile section listed. -; -[QCS30503.SPD] -CopyFiles=@QCS30503.SPD,COLOR_QMS_100_30,PSCRIPT -DataSection=PSCRIPT_DATA - -; Copy Sections -; -; Lists of files that are actually copied. These sections are referenced -; from the installer sections, above. Only create a section if it contains -; two or more files (if we only copy a single file, identify it in the -; installer section, using the @filename notation) or if it's a color -; profile (since the DestinationDirs can only handle sections, and not -; individual files). -; -[COLOR_QMS_100_30] -QMS10030.ICM - -[PSCRIPT] -PSCRIPT.DRV -PSCRIPT.HLP -PSCRIPT.INI -TESTPS.TXT -APPLE380.SPD -FONTS.MFM -ICONLIB.DLL -PSMON.DLL - - -; -; Data Sections -; -; These sections contain data that is shared between devices. -; -[PSCRIPT_DATA] -DriverFile=PSCRIPT.DRV -HelpFile=PSCRIPT.HLP -LanguageMonitor=%PS_MONITOR% - - -; -; Color profiles go to the colors directory. All other files go to the -; system directory -; - -[DestinationDirs] -DefaultDestDir=11 -COLOR_QMS_100_30=23 -COLOR_TEKTRONIX_200I=23 -COLOR_TEKTRONIX_III_PXI=23 - - -; -; Localizable Strings -; -[Strings] -MS="Microsoft" -PS_MONITOR="PostScript Language Monitor,PSMON.DLL" - diff --git a/docs/textdocs/outdated/PROJECTS b/docs/textdocs/outdated/PROJECTS deleted file mode 100644 index 3008bea430d..00000000000 --- a/docs/textdocs/outdated/PROJECTS +++ /dev/null @@ -1,88 +0,0 @@ - Samba Projects Directory - ======================== - - ->>>>> NOTE: THIS FILE IS NOW VERY OUT OF DATE <<<<< - - -This is a list of who's working on what in Samba. It's not guaranteed -to be uptodate or accurate but I hope it will help us getting -coordinated. - -If you are working on something to do with Samba and you aren't here -then please let me know! Also, if you are listed below and you have -any corrections or updates then please let me know. - -Email contact: -samba-bugs@samba.org - -======================================================================== -Documentation and FAQ - -Docs and FAQ files for the Samba suite of software. - -Contact samba-bugs@samba.org with the diffs. These are urgently -required. - -The FAQ is being added to on an ad hoc basis, see the web pages for info. - -Mark Preston was working on a set of formatted docs for Samba. Is this -still happening? Contact mpreston@sghms.ac.uk - -Status last updated 2nd October 1996 -======================================================================== - -======================================================================== -Netbeui support - -This aimed to produce patches so that Samba can be used with clients -that do not have TCP/IP. It will try to remain as portable as possible. -Contact Brian.Onn@Canada.Sun.COM (Brian Onn) Unfortunately it died, and -although a lot of people have expressed interest nobody has come forward -to do it. The Novell port (see Samba web pages) includes NetBEUI -functionality in a proprietrary library which should still be helpful as -we have the interfaces. Alan Cox (a.cox@li.org) has the information -required to write the state machine if someone is going to do the work. - -Status last updated 2nd October 1996 -======================================================================== - -======================================================================== -Smbfs - -A mountable smb filesystem for Linux using the userfs userspace filesystem - -Contact lendecke@namu01.gwdg.de (Volker Lendecke) - -This works really well, and is measurably more efficient than commercial -client software. It is now part of the Linux kernel. Long filename support -is in use. - -Status last updated June 1997 -======================================================================== - -======================================================================== -Admin Tool - -Aims to produce a nice smb.conf editor and other useful tools for -administering a Samba system. - -Contact: Steve Brown (steve@unicorn.dungeon.com) - -In the design phase. - -Status last updated 4th September 1994 -======================================================================== - - -======================================================================== -Lanman Client. - -Contact: john@amanda.xs4all.nl (John Stewart) - -Aims to produce a reliable LANMAN Client implementation for LINUX, -and possibly other variations of UNIX. Project ably started by -Tor Lillqvist; tml@hemuli.tte.vtt.fi - -Status last updated 17th January 1995 -======================================================================== -- cgit From 5185f495d055cee609872db9e59edbe3220dc5bd Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 30 Aug 2002 06:55:27 +0000 Subject: removed a debug line --- source/rpc_parse/parse_net.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/rpc_parse/parse_net.c b/source/rpc_parse/parse_net.c index 149d5a02d92..f1d813c3f07 100644 --- a/source/rpc_parse/parse_net.c +++ b/source/rpc_parse/parse_net.c @@ -2760,8 +2760,6 @@ BOOL net_io_r_sam_sync(char *desc, uint8 sess_key[16], if (!prs_uint32("sync_context", ps, depth, &r_s->sync_context)) return False; - d_printf("Got sync context %u\n", r_s->sync_context); - if (!prs_uint32("ptr_deltas", ps, depth, &r_s->ptr_deltas)) return False; if (r_s->ptr_deltas != 0) -- cgit From 4aa7dfb7e7f4ad33b8768d20ec2eb9cb3fde6385 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 30 Aug 2002 06:56:12 +0000 Subject: ensure that we unlock in case we hit a tdb error --- source/tdb/tdb.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/tdb/tdb.c b/source/tdb/tdb.c index ed75a55e3e9..40e7dcd42c7 100644 --- a/source/tdb/tdb.c +++ b/source/tdb/tdb.c @@ -517,17 +517,20 @@ int tdb_printfreelist(TDB_CONTEXT *tdb) /* read in the freelist top */ if (ofs_read(tdb, offset, &rec_ptr) == -1) { + tdb_unlock(tdb, -1, F_WRLCK); return 0; } printf("freelist top=[0x%08x]\n", rec_ptr ); while (rec_ptr) { if (tdb_read(tdb, rec_ptr, (char *)&rec, sizeof(rec), DOCONV()) == -1) { + tdb_unlock(tdb, -1, F_WRLCK); return -1; } if (rec.magic != TDB_FREE_MAGIC) { printf("bad magic 0x%08x in free list\n", rec.magic); + tdb_unlock(tdb, -1, F_WRLCK); return -1; } -- cgit From b04e91f660d3b26d23044075d4a7e707eb41462d Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 30 Aug 2002 06:59:57 +0000 Subject: convert the LDAP/SASL code to use GSS-SPNEGO if possible we now do this: - look for suported SASL mechanisms on the LDAP server - choose GSS-SPNEGO if possible - within GSS-SPNEGO choose KRB5 if we can do a kinit - otherwise use NTLMSSP This change also means that we no longer rely on having a gssapi library to do ADS. todo: - add TLS/SSL support over LDAP - change to using LDAP/SSL for password change in ADS --- source/include/includes.h | 6 +- source/libads/ldap.c | 7 +- source/libads/sasl.c | 248 ++++++++++++++++++++++++++++++++++++++++----- source/libsmb/cliconnect.c | 13 ++- source/libsmb/clikrb5.c | 8 +- source/libsmb/clispnego.c | 4 +- source/utils/net_ads.c | 4 + 7 files changed, 243 insertions(+), 47 deletions(-) diff --git a/source/include/includes.h b/source/include/includes.h index f1c8c50df43..544487f273d 100644 --- a/source/include/includes.h +++ b/source/include/includes.h @@ -410,18 +410,14 @@ #if HAVE_GSSAPI_GSSAPI_H #include -#else -#undef HAVE_KRB5 #endif #if HAVE_GSSAPI_GSSAPI_GENERIC_H #include -#else -#undef HAVE_KRB5 #endif /* we support ADS if we have krb5 and ldap libs */ -#if defined(HAVE_KRB5) && defined(HAVE_LDAP) && defined(HAVE_GSSAPI) +#if defined(HAVE_KRB5) && defined(HAVE_LDAP) #define HAVE_ADS #endif diff --git a/source/libads/ldap.c b/source/libads/ldap.c index f0c4ad9040c..2cfbedc6d4e 100644 --- a/source/libads/ldap.c +++ b/source/libads/ldap.c @@ -226,7 +226,7 @@ ADS_STATUS ads_connect(ADS_STRUCT *ads) /* try via DNS */ if (ads_try_dns(ads)) { goto got_connection; - } + } /* try via netbios lookups */ if (!lp_disable_netbios() && ads_try_netbios(ads)) { @@ -274,11 +274,6 @@ got_connection: } #endif - if (ads->auth.password) { - if ((code = ads_kinit_password(ads))) - return ADS_ERROR_KRB5(code); - } - if (ads->auth.no_bind) { return ADS_SUCCESS; } diff --git a/source/libads/sasl.c b/source/libads/sasl.c index 81dedb0a81e..12a5722319f 100644 --- a/source/libads/sasl.c +++ b/source/libads/sasl.c @@ -22,37 +22,192 @@ #ifdef HAVE_ADS -#if USE_CYRUS_SASL -/* - this is a minimal interact function, just enough for SASL to talk - GSSAPI/kerberos to W2K - Error handling is a bit of a problem. I can't see how to get Cyrus-sasl - to give sensible errors +/* + perform a LDAP/SASL/SPNEGO/NTLMSSP bind (just how many layers can + we fit on one socket??) */ -static int sasl_interact(LDAP *ld,unsigned flags,void *defaults,void *in) +static ADS_STATUS ads_sasl_spnego_ntlmssp_bind(ADS_STRUCT *ads) { - sasl_interact_t *interact = in; + const char *mechs[] = {OID_NTLMSSP, NULL}; + DATA_BLOB msg1; + DATA_BLOB blob, chal1, chal2, auth; + uint8 challenge[8]; + uint8 nthash[24], lmhash[24], sess_key[16]; + uint32 neg_flags; + struct berval cred, *scred; + ADS_STATUS status; + extern pstring global_myname; + int rc; + + neg_flags = NTLMSSP_NEGOTIATE_UNICODE | + NTLMSSP_NEGOTIATE_128 | + NTLMSSP_NEGOTIATE_NTLM; + + memset(sess_key, 0, 16); - while (interact->id != SASL_CB_LIST_END) { - interact->result = strdup(""); - interact->len = strlen(interact->result); - interact++; + /* generate the ntlmssp negotiate packet */ + msrpc_gen(&blob, "CddB", + "NTLMSSP", + NTLMSSP_NEGOTIATE, + neg_flags, + sess_key, 16); + + /* and wrap it in a SPNEGO wrapper */ + msg1 = gen_negTokenTarg(mechs, blob); + data_blob_free(&blob); + + cred.bv_val = msg1.data; + cred.bv_len = msg1.length; + + rc = ldap_sasl_bind_s(ads->ld, NULL, "GSS-SPNEGO", &cred, NULL, NULL, &scred); + if (rc != LDAP_SASL_BIND_IN_PROGRESS) { + status = ADS_ERROR(rc); + goto failed; } - - return LDAP_SUCCESS; + + blob = data_blob(scred->bv_val, scred->bv_len); + + /* the server gives us back two challenges */ + if (!spnego_parse_challenge(blob, &chal1, &chal2)) { + DEBUG(3,("Failed to parse challenges\n")); + status = ADS_ERROR(LDAP_OPERATIONS_ERROR); + goto failed; + } + + data_blob_free(&blob); + + /* encrypt the password with the challenge */ + memcpy(challenge, chal1.data + 24, 8); + SMBencrypt(ads->auth.password, challenge,lmhash); + SMBNTencrypt(ads->auth.password, challenge,nthash); + + data_blob_free(&chal1); + data_blob_free(&chal2); + + /* this generates the actual auth packet */ + msrpc_gen(&blob, "CdBBUUUBd", + "NTLMSSP", + NTLMSSP_AUTH, + lmhash, 24, + nthash, 24, + lp_workgroup(), + ads->auth.user_name, + global_myname, + sess_key, 16, + neg_flags); + + /* wrap it in SPNEGO */ + auth = spnego_gen_auth(blob); + + data_blob_free(&blob); + + /* now send the auth packet and we should be done */ + cred.bv_val = auth.data; + cred.bv_len = auth.length; + + rc = ldap_sasl_bind_s(ads->ld, NULL, "GSS-SPNEGO", &cred, NULL, NULL, &scred); + + return ADS_ERROR(rc); + +failed: + return status; +} + +/* + perform a LDAP/SASL/SPNEGO/KRB5 bind +*/ +static ADS_STATUS ads_sasl_spnego_krb5_bind(ADS_STRUCT *ads, const char *principal) +{ + DATA_BLOB blob; + struct berval cred, *scred; + int rc; + + blob = spnego_gen_negTokenTarg(principal); + + if (!blob.data) { + return ADS_ERROR(LDAP_OPERATIONS_ERROR); + } + + /* now send the auth packet and we should be done */ + cred.bv_val = blob.data; + cred.bv_len = blob.length; + + rc = ldap_sasl_bind_s(ads->ld, NULL, "GSS-SPNEGO", &cred, NULL, NULL, &scred); + + data_blob_free(&blob); + + return ADS_ERROR(rc); } + +/* + this performs a SASL/SPNEGO bind +*/ +static ADS_STATUS ads_sasl_spnego_bind(ADS_STRUCT *ads) +{ + struct berval *scred; + int rc, i; + ADS_STATUS status; + DATA_BLOB blob; + char *principal; + char *OIDs[ASN1_MAX_OIDS]; + BOOL got_kerberos_mechanism = False; + + rc = ldap_sasl_bind_s(ads->ld, NULL, "GSS-SPNEGO", NULL, NULL, NULL, &scred); + + if (rc != LDAP_SASL_BIND_IN_PROGRESS) { + status = ADS_ERROR(rc); + goto failed; + } + + blob = data_blob(scred->bv_val, scred->bv_len); + +#if 0 + file_save("sasl_spnego.dat", blob.data, blob.length); #endif + /* the server sent us the first part of the SPNEGO exchange in the negprot + reply */ + if (!spnego_parse_negTokenInit(blob, OIDs, &principal)) { + data_blob_free(&blob); + status = ADS_ERROR(LDAP_OPERATIONS_ERROR); + goto failed; + } + data_blob_free(&blob); + + /* make sure the server understands kerberos */ + for (i=0;OIDs[i];i++) { + DEBUG(3,("got OID=%s\n", OIDs[i])); + if (strcmp(OIDs[i], OID_KERBEROS5_OLD) == 0 || + strcmp(OIDs[i], OID_KERBEROS5) == 0) { + got_kerberos_mechanism = True; + } + free(OIDs[i]); + } + DEBUG(3,("got principal=%s\n", principal)); + if (got_kerberos_mechanism && ads_kinit_password(ads) == 0) { + return ads_sasl_spnego_krb5_bind(ads, principal); + } + + /* lets do NTLMSSP ... this has the big advantage that we don't need + to sync clocks, and we don't rely on special versions of the krb5 + library for HMAC_MD4 encryption */ + return ads_sasl_spnego_ntlmssp_bind(ads); + +failed: + return status; +} + +#ifdef HAVE_GSSAPI #define MAX_GSS_PASSES 3 /* this performs a SASL/gssapi bind we avoid using cyrus-sasl to make Samba more robust. cyrus-sasl is very dependent on correctly configured DNS whereas this routine is much less fragile - see RFC2078 for details + see RFC2078 and RFC2222 for details */ -ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads) +static ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads) { int minor_status; gss_name_t serv_name; @@ -68,6 +223,7 @@ ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads) uint8 *p; uint32 max_msg_size; char *sname; + unsigned sec_layer; ADS_STATUS status; krb5_principal principal; krb5_context ctx; @@ -159,22 +315,25 @@ ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads) p = (uint8 *)output_token.value; + file_save("sasl_gssapi.dat", output_token.value, output_token.length); + max_msg_size = (p[1]<<16) | (p[2]<<8) | p[3]; + sec_layer = *p; gss_release_buffer(&minor_status, &output_token); output_token.value = malloc(strlen(ads->config.bind_path) + 8); p = output_token.value; - *p++ = 1; /* no sign or seal */ + *p++ = 1; /* no sign & seal selection */ /* choose the same size as the server gave us */ *p++ = max_msg_size>>16; *p++ = max_msg_size>>8; *p++ = max_msg_size; snprintf(p, strlen(ads->config.bind_path)+4, "dn:%s", ads->config.bind_path); - p += strlen(ads->config.bind_path); + p += strlen(p); - output_token.length = strlen(ads->config.bind_path) + 8; + output_token.length = PTR_DIFF(p, output_token.value); gss_rc = gss_wrap(&minor_status, context_handle,0,GSS_C_QOP_DEFAULT, &output_token, &conf_state, @@ -198,18 +357,51 @@ ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads) failed: return status; } +#endif + +/* mapping between SASL mechanisms and functions */ +static struct { + const char *name; + ADS_STATUS (*fn)(ADS_STRUCT *); +} sasl_mechanisms[] = { + {"GSS-SPNEGO", ads_sasl_spnego_bind}, +#ifdef HAVE_GSSAPI + {"GSSAPI", ads_sasl_gssapi_bind}, /* doesn't work with .NET RC1. No idea why */ +#endif + {NULL, NULL} +}; ADS_STATUS ads_sasl_bind(ADS_STRUCT *ads) { -#if USE_CYRUS_SASL - int rc; - rc = ldap_sasl_interactive_bind_s(ads->ld, NULL, NULL, NULL, NULL, - LDAP_SASL_QUIET, - sasl_interact, NULL); - return ADS_ERROR(rc); -#else - return ads_sasl_gssapi_bind(ads); -#endif + const char *attrs[] = {"supportedSASLMechanisms", NULL}; + char **values; + ADS_STATUS status; + int i, j; + void *res; + + /* get a list of supported SASL mechanisms */ + status = ads_do_search(ads, "", LDAP_SCOPE_BASE, "(objectclass=*)", attrs, &res); + if (!ADS_ERR_OK(status)) return status; + + values = ldap_get_values(ads->ld, res, "supportedSASLMechanisms"); + + /* try our supported mechanisms in order */ + for (i=0;sasl_mechanisms[i].name;i++) { + /* see if the server supports it */ + for (j=0;values && values[j];j++) { + if (strcmp(values[j], sasl_mechanisms[i].name) == 0) { + DEBUG(4,("Found SASL mechanism %s\n", values[j])); + status = sasl_mechanisms[i].fn(ads); + ldap_value_free(values); + ldap_msgfree(res); + return status; + } + } + } + + ldap_value_free(values); + ldap_msgfree(res); + return ADS_ERROR(LDAP_AUTH_METHOD_NOT_SUPPORTED); } #endif diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index 0d033c9b596..e9b2b7b32ef 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -446,7 +446,7 @@ static BOOL cli_session_setup_kerberos(struct cli_state *cli, char *principal, c DEBUG(2,("Doing kerberos session setup\n")); /* generate the encapsulated kerberos5 ticket */ - negTokenTarg = spnego_gen_negTokenTarg(cli, principal); + negTokenTarg = spnego_gen_negTokenTarg(principal); if (!negTokenTarg.data) return False; @@ -572,14 +572,14 @@ static BOOL cli_session_setup_spnego(struct cli_state *cli, char *user, { char *principal; char *OIDs[ASN1_MAX_OIDS]; - uint8 guid[16]; int i; BOOL got_kerberos_mechanism = False; + DATA_BLOB blob; DEBUG(2,("Doing spnego session setup (blob length=%d)\n", cli->secblob.length)); /* the server might not even do spnego */ - if (cli->secblob.length == 16) { + if (cli->secblob.length <= 16) { DEBUG(3,("server didn't supply a full spnego negprot\n")); goto ntlmssp; } @@ -588,11 +588,16 @@ static BOOL cli_session_setup_spnego(struct cli_state *cli, char *user, file_save("negprot.dat", cli->secblob.data, cli->secblob.length); #endif + /* there is 16 bytes of GUID before the real spnego packet starts */ + blob = data_blob(cli->secblob.data+16, cli->secblob.length-16); + /* the server sent us the first part of the SPNEGO exchange in the negprot reply */ - if (!spnego_parse_negTokenInit(cli->secblob, guid, OIDs, &principal)) { + if (!spnego_parse_negTokenInit(blob, OIDs, &principal)) { + data_blob_free(&blob); return False; } + data_blob_free(&blob); /* make sure the server understands kerberos */ for (i=0;OIDs[i];i++) { diff --git a/source/libsmb/clikrb5.c b/source/libsmb/clikrb5.c index 685c4a25e04..955a93285c7 100644 --- a/source/libsmb/clikrb5.c +++ b/source/libsmb/clikrb5.c @@ -20,6 +20,10 @@ #include "includes.h" +#ifndef ENCTYPE_ARCFOUR_HMAC +#define ENCTYPE_ARCFOUR_HMAC 0x0017 +#endif + #ifdef HAVE_KRB5 /* we can't use krb5_mk_req because w2k wants the service to be in a particular format @@ -94,7 +98,9 @@ DATA_BLOB krb5_get_ticket(char *principal) krb5_context context; krb5_auth_context auth_context = NULL; DATA_BLOB ret; - krb5_enctype enc_types[] = {ENCTYPE_DES_CBC_MD5, ENCTYPE_NULL}; + krb5_enctype enc_types[] = {ENCTYPE_ARCFOUR_HMAC, + ENCTYPE_DES_CBC_MD5, + ENCTYPE_NULL}; retval = krb5_init_context(&context); if (retval) { diff --git a/source/libsmb/clispnego.c b/source/libsmb/clispnego.c index bc4d0ca348a..1eeae8b1717 100644 --- a/source/libsmb/clispnego.c +++ b/source/libsmb/clispnego.c @@ -79,7 +79,6 @@ DATA_BLOB spnego_gen_negTokenInit(uint8 guid[16], OIDs (the mechanisms) and a principal name string */ BOOL spnego_parse_negTokenInit(DATA_BLOB blob, - uint8 guid[16], char *OIDs[ASN1_MAX_OIDS], char **principal) { @@ -89,7 +88,6 @@ BOOL spnego_parse_negTokenInit(DATA_BLOB blob, asn1_load(&data, blob); - asn1_read(&data, guid, 16); asn1_start_tag(&data,ASN1_APPLICATION(0)); asn1_check_OID(&data,OID_SPNEGO); asn1_start_tag(&data,ASN1_CONTEXT(0)); @@ -279,7 +277,7 @@ BOOL spnego_parse_krb5_wrap(DATA_BLOB blob, DATA_BLOB *ticket) generate a SPNEGO negTokenTarg packet, ready for a EXTENDED_SECURITY kerberos session setup */ -DATA_BLOB spnego_gen_negTokenTarg(struct cli_state *cli, char *principal) +DATA_BLOB spnego_gen_negTokenTarg(const char *principal) { DATA_BLOB tkt, tkt_wrapped, targ; const char *krb_mechs[] = {OID_KERBEROS5_OLD, OID_NTLMSSP, NULL}; diff --git a/source/utils/net_ads.c b/source/utils/net_ads.c index 16450c5b299..eb1c3fe0592 100644 --- a/source/utils/net_ads.c +++ b/source/utils/net_ads.c @@ -653,6 +653,10 @@ int net_ads_join(int argc, const char **argv) return -1; } + if (ads_kinit_password(ads)) { + return -1; + } + rc = ads_set_machine_password(ads, global_myname, password); if (!ADS_ERR_OK(rc)) { d_printf("ads_set_machine_password: %s\n", ads_errstr(rc)); -- cgit From 70cf2f1e2f0187c546a0193824ab85a416c5236c Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 30 Aug 2002 08:24:26 +0000 Subject: Removed some misleading comment. Volker --- source/rpc_server/srv_samr_nt.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c index 0d6808d08c6..ee4335cb0ab 100644 --- a/source/rpc_server/srv_samr_nt.c +++ b/source/rpc_server/srv_samr_nt.c @@ -1017,8 +1017,6 @@ static NTSTATUS get_group_domain_entries(TALLOC_CTX *ctx, DOMAIN_GRP **d_grp, DO /******************************************************************* samr_reply_enum_dom_groups - Only reply with one group - domain admins. This must be fixed for - a real PDC. JRA. ********************************************************************/ NTSTATUS _samr_enum_dom_groups(pipes_struct *p, SAMR_Q_ENUM_DOM_GROUPS *q_u, SAMR_R_ENUM_DOM_GROUPS *r_u) -- cgit From 4d38caca40f98d0584fefb9d66424a3db5b5789e Mon Sep 17 00:00:00 2001 From: Jean-François Micouleau Date: Fri, 30 Aug 2002 10:46:59 +0000 Subject: added cli_net_auth_3 client code. changed cli_nt_setup_creds() to call cli_net_auth_2 or cli_net_auth_3 based on a switch. pass also the negociation flags all the way. all the places calling cli_nt_setup_creds() are still using cli_net_aut2(), it's just for future use and for rpcclient. in the future we will be able to call auth_2 or auth_3 as we want. J.F. --- source/auth/auth_domain.c | 3 +- source/libsmb/trust_passwd.c | 4 +- source/nsswitch/winbindd_cm.c | 6 +-- source/rpc_client/cli_netlogon.c | 109 ++++++++++++++++++++++++++++++++++----- source/rpcclient/cmd_netlogon.c | 15 +++--- source/rpcclient/samsync.c | 3 +- source/utils/net_rpc_join.c | 3 +- source/utils/net_rpc_samsync.c | 4 +- 8 files changed, 119 insertions(+), 28 deletions(-) diff --git a/source/auth/auth_domain.c b/source/auth/auth_domain.c index d48cec5b293..f7a268de1fd 100644 --- a/source/auth/auth_domain.c +++ b/source/auth/auth_domain.c @@ -131,6 +131,7 @@ static NTSTATUS connect_to_domain_password_server(struct cli_state **cli, struct in_addr dest_ip; fstring remote_machine; NTSTATUS result; + uint32 neg_flags = 0x000001ff; if (lp_security() == SEC_ADS) { result = ads_resolve_dc(remote_machine, &dest_ip); @@ -206,7 +207,7 @@ machine %s. Error was : %s.\n", remote_machine, cli_errstr(*cli))); return NT_STATUS_NO_MEMORY; } - result = cli_nt_setup_creds(*cli, sec_chan, trust_passwd); + result = cli_nt_setup_creds(*cli, sec_chan, trust_passwd, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { DEBUG(0,("connect_to_domain_password_server: unable to setup the PDC credentials to machine \ diff --git a/source/libsmb/trust_passwd.c b/source/libsmb/trust_passwd.c index d500cb3ab78..4d7acd19888 100644 --- a/source/libsmb/trust_passwd.c +++ b/source/libsmb/trust_passwd.c @@ -35,7 +35,9 @@ static NTSTATUS just_change_the_password(struct cli_state *cli, TALLOC_CTX *mem_ unsigned char new_trust_passwd_hash[16]) { NTSTATUS result; - result = cli_nt_setup_creds(cli, get_sec_chan(), orig_trust_passwd_hash); + uint32 neg_flags = 0x000001ff; + + result = cli_nt_setup_creds(cli, get_sec_chan(), orig_trust_passwd_hash, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { DEBUG(1,("just_change_the_password: unable to setup creds (%s)!\n", diff --git a/source/nsswitch/winbindd_cm.c b/source/nsswitch/winbindd_cm.c index 997d5b665f4..9ac392a6ba0 100644 --- a/source/nsswitch/winbindd_cm.c +++ b/source/nsswitch/winbindd_cm.c @@ -864,6 +864,7 @@ NTSTATUS cm_get_netlogon_cli(char *domain, unsigned char *trust_passwd, { NTSTATUS result = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND; struct winbindd_cm_conn *conn; + uint32 neg_flags = 0x000001ff; if (!cli) { return NT_STATUS_INVALID_PARAMETER; @@ -875,7 +876,7 @@ NTSTATUS cm_get_netlogon_cli(char *domain, unsigned char *trust_passwd, return result; } - result = cli_nt_setup_creds(conn->cli, get_sec_chan(), trust_passwd); + result = cli_nt_setup_creds(conn->cli, get_sec_chan(), trust_passwd, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { DEBUG(0, ("error connecting to domain password server: %s\n", @@ -888,8 +889,7 @@ NTSTATUS cm_get_netlogon_cli(char *domain, unsigned char *trust_passwd, } /* Try again */ - result = cli_nt_setup_creds( - conn->cli, get_sec_chan(),trust_passwd); + result = cli_nt_setup_creds( conn->cli, get_sec_chan(),trust_passwd, &neg_flags, 2); } if (!NT_STATUS_IS_OK(result)) { diff --git a/source/rpc_client/cli_netlogon.c b/source/rpc_client/cli_netlogon.c index 58ba32eb2e6..eaee3c26e7c 100644 --- a/source/rpc_client/cli_netlogon.c +++ b/source/rpc_client/cli_netlogon.c @@ -152,6 +152,83 @@ password ?).\n", cli->desthost )); return result; } +/**************************************************************************** +LSA Authenticate 3 + +Send the client credential, receive back a server credential. +Ensure that the server credential returned matches the session key +encrypt of the server challenge originally received. JRA. +****************************************************************************/ + +NTSTATUS cli_net_auth3(struct cli_state *cli, + uint16 sec_chan, + uint32 *neg_flags, DOM_CHAL *srv_chal) +{ + prs_struct qbuf, rbuf; + NET_Q_AUTH_3 q; + NET_R_AUTH_3 r; + NTSTATUS result = NT_STATUS_UNSUCCESSFUL; + extern pstring global_myname; + + prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); + prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + + /* create and send a MSRPC command with api NET_AUTH2 */ + + DEBUG(4,("cli_net_auth3: srv:%s acct:%s sc:%x mc: %s chal %s neg: %x\n", + cli->srv_name_slash, cli->mach_acct, sec_chan, global_myname, + credstr(cli->clnt_cred.challenge.data), *neg_flags)); + + /* store the parameters */ + init_q_auth_3(&q, cli->srv_name_slash, cli->mach_acct, + sec_chan, global_myname, &cli->clnt_cred.challenge, + *neg_flags); + + /* turn parameters into data stream */ + + if (!net_io_q_auth_3("", &q, &qbuf, 0) || + !rpc_api_pipe_req(cli, NET_AUTH3, &qbuf, &rbuf)) { + goto done; + } + + /* Unmarshall response */ + + if (!net_io_r_auth_3("", &r, &rbuf, 0)) { + goto done; + } + + result = r.status; + *neg_flags = r.srv_flgs.neg_flags; + + if (NT_STATUS_IS_OK(result)) { + UTIME zerotime; + + /* + * Check the returned value using the initial + * server received challenge. + */ + + zerotime.time = 0; + if (cred_assert( &r.srv_chal, cli->sess_key, srv_chal, + zerotime) == 0) { + + /* + * Server replied with bad credential. Fail. + */ + DEBUG(0,("cli_net_auth3: server %s replied with bad credential (bad machine \ +password ?).\n", cli->desthost )); + result = NT_STATUS_ACCESS_DENIED; + goto done; + } + } + + done: + prs_mem_free(&qbuf); + prs_mem_free(&rbuf); + + return result; +} + /* Return the secure channel type depending on the server role. */ uint16 get_sec_chan(void) @@ -174,7 +251,7 @@ uint16 get_sec_chan(void) NTSTATUS cli_nt_setup_creds(struct cli_state *cli, uint16 sec_chan, - const unsigned char mach_pwd[16]) + const unsigned char mach_pwd[16], uint32 *neg_flags, int level) { DOM_CHAL clnt_chal; DOM_CHAL srv_chal; @@ -200,24 +277,30 @@ NTSTATUS cli_nt_setup_creds(struct cli_state *cli, cli->sess_key); memset((char *)cli->sess_key+8, '\0', 8); - /******************* Authenticate 2 ********************/ + /******************* Authenticate 2/3 ********************/ - /* calculate auth-2 credentials */ + /* calculate auth-2/3 credentials */ zerotime.time = 0; - cred_create(cli->sess_key, &clnt_chal, zerotime, - &cli->clnt_cred.challenge); + cred_create(cli->sess_key, &clnt_chal, zerotime, &cli->clnt_cred.challenge); /* - * Send client auth-2 challenge. - * Receive an auth-2 challenge response and check it. + * Send client auth-2/3 challenge. + * Receive an auth-2/3 challenge response and check it. */ - - result = cli_net_auth2(cli, sec_chan, 0x000001ff, &srv_chal); + switch (level) { + case 2: + result = cli_net_auth2(cli, sec_chan, *neg_flags, &srv_chal); + break; + case 3: + result = cli_net_auth3(cli, sec_chan, neg_flags, &srv_chal); + break; + default: + DEBUG(1,("cli_nt_setup_creds: unsupported auth level: %d\n", level)); + break; + } - if (!NT_STATUS_IS_OK(result)) { - DEBUG(1,("cli_nt_setup_creds: auth2 challenge failed %s\n", - nt_errstr(result))); - } + if (!NT_STATUS_IS_OK(result)) + DEBUG(1,("cli_nt_setup_creds: auth%d challenge failed %s\n", level, nt_errstr(result))); return result; } diff --git a/source/rpcclient/cmd_netlogon.c b/source/rpcclient/cmd_netlogon.c index ffff1dab048..0f61eaaae84 100644 --- a/source/rpcclient/cmd_netlogon.c +++ b/source/rpcclient/cmd_netlogon.c @@ -151,6 +151,7 @@ static NTSTATUS cmd_netlogon_sam_sync(struct cli_state *cli, SAM_DELTA_HDR *hdr_deltas; SAM_DELTA_CTR *deltas; DOM_CRED ret_creds; + uint32 neg_flags = 0x000001ff; if (argc > 2) { fprintf(stderr, "Usage: %s [database_id]\n", argv[0]); @@ -173,7 +174,7 @@ static NTSTATUS cmd_netlogon_sam_sync(struct cli_state *cli, goto done; } - result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd); + result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { fprintf(stderr, "Error initialising session creds\n"); @@ -211,6 +212,7 @@ static NTSTATUS cmd_netlogon_sam_deltas(struct cli_state *cli, SAM_DELTA_HDR *hdr_deltas; SAM_DELTA_CTR *deltas; UINT64_S seqnum; + uint32 neg_flags = 0x000001ff; if (argc != 3) { fprintf(stderr, "Usage: %s database_id seqnum\n", argv[0]); @@ -236,7 +238,7 @@ static NTSTATUS cmd_netlogon_sam_deltas(struct cli_state *cli, goto done; } - result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd); + result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { fprintf(stderr, "Error initialising session creds\n"); @@ -270,6 +272,7 @@ static NTSTATUS cmd_netlogon_sam_logon(struct cli_state *cli, NTSTATUS result = NT_STATUS_UNSUCCESSFUL; int logon_type = NET_LOGON_TYPE; char *username, *password; + uint32 neg_flags = 0x000001ff; /* Check arguments */ @@ -292,13 +295,12 @@ static NTSTATUS cmd_netlogon_sam_logon(struct cli_state *cli, return result; } - if (!secrets_fetch_trust_account_password(lp_workgroup(), trust_passwd, - NULL)) { + if (!secrets_fetch_trust_account_password(lp_workgroup(), trust_passwd, NULL)) { fprintf(stderr, "could not fetch trust account password\n"); goto done; } - result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd); + result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { fprintf(stderr, "Error initialising session creds\n"); @@ -307,8 +309,7 @@ static NTSTATUS cmd_netlogon_sam_logon(struct cli_state *cli, /* Perform the sam logon */ - result = cli_netlogon_sam_logon(cli, mem_ctx, username, password, - logon_type); + result = cli_netlogon_sam_logon(cli, mem_ctx, username, password, logon_type); if (!NT_STATUS_IS_OK(result)) goto done; diff --git a/source/rpcclient/samsync.c b/source/rpcclient/samsync.c index 710614469ef..7124f9416ad 100644 --- a/source/rpcclient/samsync.c +++ b/source/rpcclient/samsync.c @@ -362,6 +362,7 @@ static NTSTATUS sam_sync(struct cli_state *cli, unsigned char trust_passwd[16], uint32 num_deltas_0, num_deltas_2; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; struct pdb_context *in; + uint32 neg_flags = 0x000001ff; DOM_CRED ret_creds; @@ -384,7 +385,7 @@ static NTSTATUS sam_sync(struct cli_state *cli, unsigned char trust_passwd[16], /* Request a challenge */ - if (!NT_STATUS_IS_OK(cli_nt_setup_creds(cli, SEC_CHAN_BDC, trust_passwd))) { + if (!NT_STATUS_IS_OK(cli_nt_setup_creds(cli, SEC_CHAN_BDC, trust_passwd, &neg_flags, 2))) { DEBUG(0, ("Error initialising session creds\n")); goto done; } diff --git a/source/utils/net_rpc_join.c b/source/utils/net_rpc_join.c index c8be93c39cc..b08095f1ccb 100644 --- a/source/utils/net_rpc_join.c +++ b/source/utils/net_rpc_join.c @@ -49,6 +49,7 @@ int net_rpc_join_ok(const char *domain) int retval = 1; uint32 channel; NTSTATUS result; + uint32 neg_flags = 0x000001ff; /* Connect to remote machine */ if (!(cli = net_make_ipc_connection(NET_FLAGS_ANONYMOUS | NET_FLAGS_PDC))) { @@ -75,7 +76,7 @@ int net_rpc_join_ok(const char *domain) CHECK_RPC_ERR(cli_nt_setup_creds(cli, channel, - stored_md4_trust_password), + stored_md4_trust_password, &neg_flags, 2), "error in domain join verification"); retval = 0; /* Success! */ diff --git a/source/utils/net_rpc_samsync.c b/source/utils/net_rpc_samsync.c index a41eae40d11..4ddb931adb7 100644 --- a/source/utils/net_rpc_samsync.c +++ b/source/utils/net_rpc_samsync.c @@ -143,6 +143,8 @@ int rpc_samdump(int argc, const char **argv) struct cli_state *cli = NULL; uchar trust_password[16]; DOM_CRED ret_creds; + uint32 neg_flags = 0x000001ff; + ZERO_STRUCT(ret_creds); @@ -161,7 +163,7 @@ int rpc_samdump(int argc, const char **argv) goto fail; } - result = cli_nt_setup_creds(cli, SEC_CHAN_BDC, trust_password); + result = cli_nt_setup_creds(cli, SEC_CHAN_BDC, trust_password, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { d_printf("Failed to setup BDC creds\n"); goto fail; -- cgit From cb13d334a53f27713665570d85607d57eb407f9f Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 30 Aug 2002 10:47:34 +0000 Subject: merge of phant0m key fix from APP_HEAD --- source/printing/nt_printing.c | 159 +++++++++++++++++++++++++++++++++++-- source/rpc_parse/parse_reg.c | 8 +- source/rpc_server/srv_spoolss_nt.c | 91 ++++++++------------- 3 files changed, 190 insertions(+), 68 deletions(-) diff --git a/source/printing/nt_printing.c b/source/printing/nt_printing.c index 1761064584b..a5b4c5106aa 100644 --- a/source/printing/nt_printing.c +++ b/source/printing/nt_printing.c @@ -3208,16 +3208,17 @@ static BOOL set_driver_init_2( NT_PRINTER_INFO_LEVEL_2 *info_ptr ) * the initialization save. Change it to reflect the new printer. */ + if ( info.devmode ) { ZERO_STRUCT(info.devmode->devicename); fstrcpy(info.devmode->devicename, info_ptr->printername); - + } /* * NT/2k does not change out the entire DeviceMode of a printer * when changing the driver. Only the driverextra, private, & * driverversion fields. --jerry (Thu Mar 14 08:58:43 CST 2002) * - * Later e4xamination revealed that Windows NT/2k does reset the + * Later examination revealed that Windows NT/2k does reset the * the printer's device mode, bit **only** when you change a * property of the device mode such as the page orientation. * --jerry @@ -3229,9 +3230,8 @@ static BOOL set_driver_init_2( NT_PRINTER_INFO_LEVEL_2 *info_ptr ) free_nt_devicemode(&info_ptr->devmode); info_ptr->devmode = info.devmode; - - DEBUG(10,("set_driver_init_2: Set printer [%s] init DEVMODE for driver [%s]\n", - info_ptr->printername, info_ptr->drivername)); + DEBUG(10,("set_driver_init_2: Set printer [%s] init %s DEVMODE for driver [%s]\n", + info_ptr->printername, info_ptr->devmode?"VALID":"NULL", info_ptr->drivername)); /* Add the printer data 'values' to the new printer */ @@ -3366,17 +3366,162 @@ uint32 update_driver_init(NT_PRINTER_INFO_LEVEL printer, uint32 level) { case 2: { - result=update_driver_init_2(printer.info_2); + result = update_driver_init_2(printer.info_2); break; } default: - result=1; + result = 1; break; } return result; } +/**************************************************************************** + Convert the printer data value, a REG_BINARY array, into an initialization + DEVMODE. Note: the array must be parsed as if it was a DEVMODE in an rpc... + got to keep the endians happy :). +****************************************************************************/ + +static BOOL convert_driver_init( TALLOC_CTX *ctx, NT_DEVICEMODE *nt_devmode, uint8 *data, uint32 data_len ) +{ + BOOL result = False; + prs_struct ps; + DEVICEMODE devmode; + + ZERO_STRUCT(devmode); + + prs_init(&ps, 0, ctx, UNMARSHALL); + ps.data_p = (char *)data; + ps.buffer_size = data_len; + + if (spoolss_io_devmode("phantom DEVMODE", &ps, 0, &devmode)) + result = convert_devicemode("", &devmode, &nt_devmode); + else + DEBUG(10,("convert_driver_init: error parsing DEVMODE\n")); + + return result; +} + +/**************************************************************************** + Set the DRIVER_INIT info in the tdb. Requires Win32 client code that: + + 1. Use the driver's config DLL to this UNC printername and: + a. Call DrvPrintEvent with PRINTER_EVENT_INITIALIZE + b. Call DrvConvertDevMode with CDM_DRIVER_DEFAULT to get default DEVMODE + 2. Call SetPrinterData with the 'magic' key and the DEVMODE as data. + + The last step triggers saving the "driver initialization" information for + this printer into the tdb. Later, new printers that use this driver will + have this initialization information bound to them. This simulates the + driver initialization, as if it had run on the Samba server (as it would + have done on NT). + + The Win32 client side code requirement sucks! But until we can run arbitrary + Win32 printer driver code on any Unix that Samba runs on, we are stuck with it. + + It would have been easier to use SetPrinter because all the UNMARSHALLING of + the DEVMODE is done there, but 2K/XP clients do not set the DEVMODE... think + about it and you will realize why. JRR 010720 +****************************************************************************/ + +static WERROR save_driver_init_2(NT_PRINTER_INFO_LEVEL *printer, uint8 *data, uint32 data_len ) +{ + WERROR status = WERR_OK; + TALLOC_CTX *ctx = NULL; + NT_DEVICEMODE *nt_devmode = NULL; + NT_DEVICEMODE *tmp_devmode = printer->info_2->devmode; + + /* + * When the DEVMODE is already set on the printer, don't try to unpack it. + */ + DEBUG(8,("save_driver_init_2: Enter...\n")); + + if ( !printer->info_2->devmode && data_len ) + { + /* + * Set devmode on printer info, so entire printer initialization can be + * saved to tdb. + */ + + if ((ctx = talloc_init()) == NULL) + return WERR_NOMEM; + + if ((nt_devmode = (NT_DEVICEMODE*)malloc(sizeof(NT_DEVICEMODE))) == NULL) { + status = WERR_NOMEM; + goto done; + } + + ZERO_STRUCTP(nt_devmode); + + /* + * The DEVMODE is held in the 'data' component of the param in raw binary. + * Convert it to to a devmode structure + */ + if ( !convert_driver_init( ctx, nt_devmode, data, data_len )) { + DEBUG(10,("save_driver_init_2: error converting DEVMODE\n")); + status = WERR_INVALID_PARAM; + goto done; + } + + printer->info_2->devmode = nt_devmode; + } + + /* + * Pack up and add (or update) the DEVMODE and any current printer data to + * a 'driver init' element in the tdb + * + */ + + if ( update_driver_init(*printer, 2) != 0 ) { + DEBUG(10,("save_driver_init_2: error updating DEVMODE\n")); + status = WERR_NOMEM; + goto done; + } + + /* + * If driver initialization info was successfully saved, set the current + * printer to match it. This allows initialization of the current printer + * as well as the driver. + */ + status = mod_a_printer(*printer, 2); + if (!W_ERROR_IS_OK(status)) { + DEBUG(10,("save_driver_init_2: error setting DEVMODE on printer [%s]\n", + printer->info_2->printername)); + } + + done: + talloc_destroy(ctx); + free_nt_devicemode( &nt_devmode ); + + printer->info_2->devmode = tmp_devmode; + + return status; +} + +/**************************************************************************** + Update the driver init info (DEVMODE and specifics) for a printer +****************************************************************************/ + +WERROR save_driver_init(NT_PRINTER_INFO_LEVEL *printer, uint32 level, uint8 *data, uint32 data_len) +{ + WERROR status = WERR_OK; + + switch (level) + { + case 2: + { + status = save_driver_init_2( printer, data, data_len ); + break; + } + default: + status = WERR_UNKNOWN_LEVEL; + break; + } + + return status; +} + /**************************************************************************** Get a NT_PRINTER_INFO_LEVEL struct. It returns malloced memory. ****************************************************************************/ diff --git a/source/rpc_parse/parse_reg.c b/source/rpc_parse/parse_reg.c index 365ad2dc70b..1387aaf6ea7 100644 --- a/source/rpc_parse/parse_reg.c +++ b/source/rpc_parse/parse_reg.c @@ -39,6 +39,7 @@ static uint32 reg_init_buffer2( BUFFER2 *buf2, REGISTRY_VALUE *val ) char *string; char *list = NULL; char *list2 = NULL; + int len = 0; if ( !buf2 || !val ) return 0; @@ -48,10 +49,13 @@ static uint32 reg_init_buffer2( BUFFER2 *buf2, REGISTRY_VALUE *val ) switch (val->type ) { case REG_SZ: - string = (char*)val->data_p; + string = (char*)regval_data_p( val ); DEBUG(10,("reg_init_buffer2: REG_SZ string => [%s]\n", string)); - init_unistr2( &unistr, (char*)val->data_p, strlen((char*)val->data_p)+1 ); + if ( string ) + len = strlen(string)+1; + + init_unistr2( &unistr, (char*)val->data_p, len ); init_buffer2( buf2, (char*)unistr.buffer, unistr.uni_str_len*2 ); real_size = unistr.uni_str_len*2; break; diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index de87954feae..d1f92aef13b 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -5335,22 +5335,6 @@ static WERROR update_printer(pipes_struct *p, POLICY_HND *handle, uint32 level, goto done; } -#if 0 /* JERRY */ - - /* - * Another one of those historical misunderstandings... - * This is reminisent of a similar call we had in _spoolss_setprinterdata() - * I'm leaving it here as a reminder. --jerry - */ - - if (nt_printer_info_level_equal(printer, old_printer)) { - DEBUG(3, ("update_printer: printer info has not changed\n")); - result = WERR_OK; - goto done; - } - -#endif - /* Check calling user has permission to update printer description */ if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) { @@ -5369,49 +5353,22 @@ static WERROR update_printer(pipes_struct *p, POLICY_HND *handle, uint32 level, } /* - * Set the DRIVER_INIT info in the tdb; trigger on magic value for the - * DEVMODE.displayfrequency, which is not used for printer drivers. This - * requires Win32 client code (see other notes elsewhere in the code). + * When a *new* driver is bound to a printer, the drivername is used to + * lookup previously saved driver initialization info, which is then + * bound to the printer, simulating what happens in the Windows arch. */ - if (printer->info_2->devmode && - printer->info_2->devmode->displayfrequency == MAGIC_DISPLAY_FREQUENCY) - { - - DEBUG(10,("update_printer: Save printer driver init data\n")); - printer->info_2->devmode->displayfrequency = 0; - - if (update_driver_init(*printer, 2)!=0) { - DEBUG(10,("update_printer: error updating printer driver init DEVMODE\n")); - result = WERR_ACCESS_DENIED; - goto done; - } - - /* we need to reset all driver init data for all printers - bound to this driver */ - - srv_spoolss_reset_printerdata( printer->info_2->drivername ); - - } - else + if (!strequal(printer->info_2->drivername, old_printer->info_2->drivername)) { - /* - * When a *new* driver is bound to a printer, the drivername is used to - * lookup previously saved driver initialization info, which is then - * bound to the printer, simulating what happens in the Windows arch. - */ - if (!strequal(printer->info_2->drivername, old_printer->info_2->drivername)) + if (!set_driver_init(printer, 2)) { - if (!set_driver_init(printer, 2)) - { - DEBUG(5,("update_printer: Error restoring driver initialization data for driver [%s]!\n", - printer->info_2->drivername)); - } - - DEBUG(10,("update_printer: changing driver [%s]! Sending event!\n", + DEBUG(5,("update_printer: Error restoring driver initialization data for driver [%s]!\n", printer->info_2->drivername)); - - notify_printer_driver(snum, printer->info_2->drivername); } + + DEBUG(10,("update_printer: changing driver [%s]! Sending event!\n", + printer->info_2->drivername)); + + notify_printer_driver(snum, printer->info_2->drivername); } /* Update printer info */ @@ -6614,8 +6571,11 @@ static WERROR spoolss_addprinterex_level_2( pipes_struct *p, const UNISTR2 *uni_ */ if (!devmode) + { set_driver_init(printer, 2); - else { + } + else + { /* A valid devmode was included, convert and link it */ DEBUGADD(10, ("spoolss_addprinterex_level_2: devmode included, converting\n")); @@ -6625,8 +6585,6 @@ static WERROR spoolss_addprinterex_level_2( pipes_struct *p, const UNISTR2 *uni_ return WERR_NOMEM; } - set_driver_init(printer, 2); - /* write the ASCII on disk */ err = mod_a_printer(*printer, 2); if (!W_ERROR_IS_OK(err)) { @@ -6925,7 +6883,7 @@ WERROR _spoolss_enumprinterdata(pipes_struct *p, SPOOL_Q_ENUMPRINTERDATA *q_u, S uint32 idx = q_u->index; uint32 in_value_len = q_u->valuesize; uint32 in_data_len = q_u->datasize; - uint32 *out_max_value_len= &r_u->valuesize; + uint32 *out_max_value_len = &r_u->valuesize; uint16 **out_value = &r_u->value; uint32 *out_value_len = &r_u->realvaluesize; uint32 *out_type = &r_u->type; @@ -7145,10 +7103,25 @@ WERROR _spoolss_setprinterdata( pipes_struct *p, SPOOL_Q_SETPRINTERDATA *q_u, SP unistr2_to_ascii( valuename, value, sizeof(valuename)-1 ); - /* save the registry data */ + /* + * When client side code sets a magic printer data key, detect it and save + * the current printer data and the magic key's data (its the DEVMODE) for + * future printer/driver initializations. + */ + if ( (type == REG_BINARY) && strequal( valuename, PHANTOM_DEVMODE_KEY)) + { + /* Set devmode and printer initialization info */ + status = save_driver_init( printer, 2, data, real_len ); + srv_spoolss_reset_printerdata( printer->info_2->drivername ); + } + else + { status = set_printer_dataex( printer, SPOOL_PRINTERDATA_KEY, valuename, type, data, real_len ); + if ( W_ERROR_IS_OK(status) ) + status = mod_a_printer(*printer, 2); + } done: free_a_printer(&printer, 2); -- cgit From fd140aadd7c76facb4efa80655e633600f9760b6 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 30 Aug 2002 11:03:44 +0000 Subject: break out REGISTRY_VALUE & REGVAL_CR objects into separate file for cleaning linking.... --- source/Makefile.in | 5 +- source/registry/reg_frontend.c | 347 -------------------------------------- source/registry/reg_objects.c | 372 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 375 insertions(+), 349 deletions(-) create mode 100644 source/registry/reg_objects.c diff --git a/source/Makefile.in b/source/Makefile.in index c132fe8221d..25040789a47 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -181,8 +181,9 @@ LIBMSRPC_SERVER_OBJ = libsmb/trust_passwd.o LIBMSRPC_PICOBJ = $(LIBMSRPC_OBJ:.o=.po) +REGOBJS_OBJ = registry/reg_objects.c REGISTRY_OBJ = registry/reg_frontend.o registry/reg_cachehook.o registry/reg_printing.o \ - registry/reg_db.o + registry/reg_db.o $(REGOBJS_OBJ) RPC_SERVER_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o \ rpc_server/srv_lsa_hnd.o rpc_server/srv_netlog.o rpc_server/srv_netlog_nt.o \ @@ -493,7 +494,7 @@ WINBINDD_OBJ = \ $(LIBNMB_OBJ) $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \ $(LIBSMB_OBJ) $(LIBMSRPC_OBJ) $(RPC_PARSE_OBJ) \ $(PROFILE_OBJ) $(UNIGRP_OBJ) \ - $(SECRETS_OBJ) $(LIBADS_OBJ) + $(SECRETS_OBJ) $(LIBADS_OBJ) $(REGOBJS_OBJ) WBINFO_OBJ = nsswitch/wbinfo.o libsmb/smbencrypt.o libsmb/smbdes.o diff --git a/source/registry/reg_frontend.c b/source/registry/reg_frontend.c index 05bcd989b44..a9dfb52f011 100644 --- a/source/registry/reg_frontend.c +++ b/source/registry/reg_frontend.c @@ -37,353 +37,6 @@ REGISTRY_HOOK reg_hooks[] = { }; -/* - * Utility functions for REGSUBKEY_CTR - */ - -/*********************************************************************** - Init the talloc context held by a REGSUBKEY_CTR structure - **********************************************************************/ - -void regsubkey_ctr_init( REGSUBKEY_CTR *ctr ) -{ - if ( !ctr->ctx ) - ctr->ctx = talloc_init(); -} - -/*********************************************************************** - Add a new key to the array - **********************************************************************/ - -int regsubkey_ctr_addkey( REGSUBKEY_CTR *ctr, char *keyname ) -{ - uint32 len; - char **pp; - - if ( keyname ) - { - len = strlen( keyname ); - - /* allocate a space for the char* in the array */ - - if ( ctr->subkeys == 0 ) - ctr->subkeys = talloc( ctr->ctx, sizeof(char*) ); - else { - pp = talloc_realloc( ctr->ctx, ctr->subkeys, sizeof(char*)*(ctr->num_subkeys+1) ); - if ( pp ) - ctr->subkeys = pp; - } - - /* allocate the string and save it in the array */ - - ctr->subkeys[ctr->num_subkeys] = talloc( ctr->ctx, len+1 ); - strncpy( ctr->subkeys[ctr->num_subkeys], keyname, len+1 ); - ctr->num_subkeys++; - } - - return ctr->num_subkeys; -} - -/*********************************************************************** - How many keys does the container hold ? - **********************************************************************/ - -int regsubkey_ctr_numkeys( REGSUBKEY_CTR *ctr ) -{ - return ctr->num_subkeys; -} - -/*********************************************************************** - Retreive a specific key string - **********************************************************************/ - -char* regsubkey_ctr_specific_key( REGSUBKEY_CTR *ctr, uint32 key_index ) -{ - if ( ! (key_index < ctr->num_subkeys) ) - return NULL; - - return ctr->subkeys[key_index]; -} - -/*********************************************************************** - free memory held by a REGSUBKEY_CTR structure - **********************************************************************/ - -void regsubkey_ctr_destroy( REGSUBKEY_CTR *ctr ) -{ - if ( ctr ) { - talloc_destroy( ctr->ctx ); - ZERO_STRUCTP( ctr ); - } -} - - -/* - * Utility functions for REGVAL_CTR - */ - -/*********************************************************************** - Init the talloc context held by a REGSUBKEY_CTR structure - **********************************************************************/ - -void regval_ctr_init( REGVAL_CTR *ctr ) -{ - if ( !ctr->ctx ) - ctr->ctx = talloc_init(); -} - -/*********************************************************************** - How many keys does the container hold ? - **********************************************************************/ - -int regval_ctr_numvals( REGVAL_CTR *ctr ) -{ - return ctr->num_values; -} - -/*********************************************************************** - allocate memory for and duplicate a REGISTRY_VALUE. - This is malloc'd memory so the caller should free it when done - **********************************************************************/ - -REGISTRY_VALUE* dup_registry_value( REGISTRY_VALUE *val ) -{ - REGISTRY_VALUE *copy = NULL; - - if ( !val ) - return NULL; - - if ( !(copy = malloc( sizeof(REGISTRY_VALUE) )) ) { - DEBUG(0,("dup_registry_value: malloc() failed!\n")); - return NULL; - } - - /* copy all the non-pointer initial data */ - - memcpy( copy, val, sizeof(REGISTRY_VALUE) ); - if ( val->data_p ) - { - if ( !(copy->data_p = memdup( val->data_p, val->size )) ) { - DEBUG(0,("dup_registry_value: memdup() failed for [%d] bytes!\n", - val->size)); - SAFE_FREE( copy ); - } - } - - return copy; -} - -/********************************************************************** - free the memory allocated to a REGISTRY_VALUE - *********************************************************************/ - -void free_registry_value( REGISTRY_VALUE *val ) -{ - if ( !val ) - return; - - SAFE_FREE( val->data_p ); - SAFE_FREE( val ); - - return; -} - -/********************************************************************** - *********************************************************************/ - -uint8* regval_data_p( REGISTRY_VALUE *val ) -{ - return val->data_p; -} - -/********************************************************************** - *********************************************************************/ - -int regval_size( REGISTRY_VALUE *val ) -{ - return val->size; -} - -/********************************************************************** - *********************************************************************/ - -char* regval_name( REGISTRY_VALUE *val ) -{ - return val->valuename; -} - -/********************************************************************** - *********************************************************************/ - -uint32 regval_type( REGISTRY_VALUE *val ) -{ - return val->type; -} - -/*********************************************************************** - Retreive a pointer to a specific value. Caller shoud dup the structure - since this memory may go away with a regval_ctr_destroy() - **********************************************************************/ - -REGISTRY_VALUE* regval_ctr_specific_value( REGVAL_CTR *ctr, uint32 idx ) -{ - if ( !(idx < ctr->num_values) ) - return NULL; - - return ctr->values[idx]; -} - -/*********************************************************************** - Retrive the TALLOC_CTX associated with a REGISTRY_VALUE - **********************************************************************/ - -TALLOC_CTX* regval_ctr_getctx( REGVAL_CTR *val ) -{ - if ( !val ) - return NULL; - - return val->ctx; -} - -/*********************************************************************** - Add a new registry value to the array - **********************************************************************/ - -int regval_ctr_addvalue( REGVAL_CTR *ctr, char *name, uint16 type, - char *data_p, size_t size ) -{ - REGISTRY_VALUE **ppreg; - - if ( name ) - { - /* allocate a slot in the array of pointers */ - - if ( ctr->num_values == 0 ) - ctr->values = talloc( ctr->ctx, sizeof(REGISTRY_VALUE*) ); - else { - ppreg = talloc_realloc( ctr->ctx, ctr->values, sizeof(REGISTRY_VALUE*)*(ctr->num_values+1) ); - if ( ppreg ) - ctr->values = ppreg; - } - - /* allocate a new value and store the pointer in the arrya */ - - ctr->values[ctr->num_values] = talloc( ctr->ctx, sizeof(REGISTRY_VALUE) ); - - /* init the value */ - - fstrcpy( ctr->values[ctr->num_values]->valuename, name ); - ctr->values[ctr->num_values]->type = type; - ctr->values[ctr->num_values]->data_p = talloc_memdup( ctr->ctx, data_p, size ); - ctr->values[ctr->num_values]->size = size; - ctr->num_values++; - } - - return ctr->num_values; -} - -/*********************************************************************** - Add a new registry value to the array - **********************************************************************/ - -int regval_ctr_copyvalue( REGVAL_CTR *ctr, REGISTRY_VALUE *val ) -{ - REGISTRY_VALUE **ppreg; - - if ( val ) - { - /* allocate a slot in the array of pointers */ - - if ( ctr->num_values == 0 ) - ctr->values = talloc( ctr->ctx, sizeof(REGISTRY_VALUE*) ); - else { - ppreg = talloc_realloc( ctr->ctx, ctr->values, sizeof(REGISTRY_VALUE*)*(ctr->num_values+1) ); - if ( ppreg ) - ctr->values = ppreg; - } - - /* allocate a new value and store the pointer in the arrya */ - - ctr->values[ctr->num_values] = talloc( ctr->ctx, sizeof(REGISTRY_VALUE) ); - - /* init the value */ - - fstrcpy( ctr->values[ctr->num_values]->valuename, val->valuename ); - ctr->values[ctr->num_values]->type = val->type; - ctr->values[ctr->num_values]->data_p = talloc_memdup( ctr->ctx, val->data_p, val->size ); - ctr->values[ctr->num_values]->size = val->size; - ctr->num_values++; - } - - return ctr->num_values; -} - -/*********************************************************************** - Delete a single value from the registry container. - No need to free memory since it is talloc'd. - **********************************************************************/ - -int regval_ctr_delvalue( REGVAL_CTR *ctr, char *name ) -{ - int i; - - /* search for the value */ - - for ( i=0; inum_values; i++ ) { - if ( strcmp( ctr->values[i]->valuename, name ) == 0) - break; - } - - /* just return if we don't find it */ - - if ( i == ctr->num_values ) - return ctr->num_values; - - /* just shift everything down one */ - - for ( /* use previous i */; i<(ctr->num_values-1); i++ ) - memcpy( ctr->values[i], ctr->values[i+1], sizeof(REGISTRY_VALUE) ); - - /* paranoia */ - - ZERO_STRUCTP( ctr->values[i] ); - - ctr->num_values--; - - return ctr->num_values; -} - -/*********************************************************************** - Delete a single value from the registry container. - No need to free memory since it is talloc'd. - **********************************************************************/ - -REGISTRY_VALUE* regval_ctr_getvalue( REGVAL_CTR *ctr, char *name ) -{ - int i; - - /* search for the value */ - - for ( i=0; inum_values; i++ ) { - if ( strequal( ctr->values[i]->valuename, name ) ) - return ctr->values[i]; - } - - return NULL; -} - -/*********************************************************************** - free memory held by a REGVAL_CTR structure - **********************************************************************/ - -void regval_ctr_destroy( REGVAL_CTR *ctr ) -{ - if ( ctr ) { - talloc_destroy( ctr->ctx ); - ZERO_STRUCTP( ctr ); - } -} - /*********************************************************************** Open the registry database and initialize the REGISTRY_HOOK cache ***********************************************************************/ diff --git a/source/registry/reg_objects.c b/source/registry/reg_objects.c new file mode 100644 index 00000000000..be15e49a2f7 --- /dev/null +++ b/source/registry/reg_objects.c @@ -0,0 +1,372 @@ +/* + * Unix SMB/CIFS implementation. + * RPC Pipe client / server routines + * Copyright (C) Gerald Carter 2002. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* Implementation of registry frontend view functions. */ + +#include "includes.h" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_RPC_SRV + + +/*********************************************************************** + Init the talloc context held by a REGSUBKEY_CTR structure + **********************************************************************/ + +void regsubkey_ctr_init( REGSUBKEY_CTR *ctr ) +{ + if ( !ctr->ctx ) + ctr->ctx = talloc_init(); +} + +/*********************************************************************** + Add a new key to the array + **********************************************************************/ + +int regsubkey_ctr_addkey( REGSUBKEY_CTR *ctr, char *keyname ) +{ + uint32 len; + char **pp; + + if ( keyname ) + { + len = strlen( keyname ); + + /* allocate a space for the char* in the array */ + + if ( ctr->subkeys == 0 ) + ctr->subkeys = talloc( ctr->ctx, sizeof(char*) ); + else { + pp = talloc_realloc( ctr->ctx, ctr->subkeys, sizeof(char*)*(ctr->num_subkeys+1) ); + if ( pp ) + ctr->subkeys = pp; + } + + /* allocate the string and save it in the array */ + + ctr->subkeys[ctr->num_subkeys] = talloc( ctr->ctx, len+1 ); + strncpy( ctr->subkeys[ctr->num_subkeys], keyname, len+1 ); + ctr->num_subkeys++; + } + + return ctr->num_subkeys; +} + +/*********************************************************************** + How many keys does the container hold ? + **********************************************************************/ + +int regsubkey_ctr_numkeys( REGSUBKEY_CTR *ctr ) +{ + return ctr->num_subkeys; +} + +/*********************************************************************** + Retreive a specific key string + **********************************************************************/ + +char* regsubkey_ctr_specific_key( REGSUBKEY_CTR *ctr, uint32 key_index ) +{ + if ( ! (key_index < ctr->num_subkeys) ) + return NULL; + + return ctr->subkeys[key_index]; +} + +/*********************************************************************** + free memory held by a REGSUBKEY_CTR structure + **********************************************************************/ + +void regsubkey_ctr_destroy( REGSUBKEY_CTR *ctr ) +{ + if ( ctr ) { + talloc_destroy( ctr->ctx ); + ZERO_STRUCTP( ctr ); + } +} + + +/* + * Utility functions for REGVAL_CTR + */ + +/*********************************************************************** + Init the talloc context held by a REGSUBKEY_CTR structure + **********************************************************************/ + +void regval_ctr_init( REGVAL_CTR *ctr ) +{ + if ( !ctr->ctx ) + ctr->ctx = talloc_init(); +} + +/*********************************************************************** + How many keys does the container hold ? + **********************************************************************/ + +int regval_ctr_numvals( REGVAL_CTR *ctr ) +{ + return ctr->num_values; +} + +/*********************************************************************** + allocate memory for and duplicate a REGISTRY_VALUE. + This is malloc'd memory so the caller should free it when done + **********************************************************************/ + +REGISTRY_VALUE* dup_registry_value( REGISTRY_VALUE *val ) +{ + REGISTRY_VALUE *copy = NULL; + + if ( !val ) + return NULL; + + if ( !(copy = malloc( sizeof(REGISTRY_VALUE) )) ) { + DEBUG(0,("dup_registry_value: malloc() failed!\n")); + return NULL; + } + + /* copy all the non-pointer initial data */ + + memcpy( copy, val, sizeof(REGISTRY_VALUE) ); + if ( val->data_p ) + { + if ( !(copy->data_p = memdup( val->data_p, val->size )) ) { + DEBUG(0,("dup_registry_value: memdup() failed for [%d] bytes!\n", + val->size)); + SAFE_FREE( copy ); + } + } + + return copy; +} + +/********************************************************************** + free the memory allocated to a REGISTRY_VALUE + *********************************************************************/ + +void free_registry_value( REGISTRY_VALUE *val ) +{ + if ( !val ) + return; + + SAFE_FREE( val->data_p ); + SAFE_FREE( val ); + + return; +} + +/********************************************************************** + *********************************************************************/ + +uint8* regval_data_p( REGISTRY_VALUE *val ) +{ + return val->data_p; +} + +/********************************************************************** + *********************************************************************/ + +int regval_size( REGISTRY_VALUE *val ) +{ + return val->size; +} + +/********************************************************************** + *********************************************************************/ + +char* regval_name( REGISTRY_VALUE *val ) +{ + return val->valuename; +} + +/********************************************************************** + *********************************************************************/ + +uint32 regval_type( REGISTRY_VALUE *val ) +{ + return val->type; +} + +/*********************************************************************** + Retreive a pointer to a specific value. Caller shoud dup the structure + since this memory may go away with a regval_ctr_destroy() + **********************************************************************/ + +REGISTRY_VALUE* regval_ctr_specific_value( REGVAL_CTR *ctr, uint32 idx ) +{ + if ( !(idx < ctr->num_values) ) + return NULL; + + return ctr->values[idx]; +} + +/*********************************************************************** + Retrive the TALLOC_CTX associated with a REGISTRY_VALUE + **********************************************************************/ + +TALLOC_CTX* regval_ctr_getctx( REGVAL_CTR *val ) +{ + if ( !val ) + return NULL; + + return val->ctx; +} + +/*********************************************************************** + Add a new registry value to the array + **********************************************************************/ + +int regval_ctr_addvalue( REGVAL_CTR *ctr, char *name, uint16 type, + char *data_p, size_t size ) +{ + REGISTRY_VALUE **ppreg; + + if ( name ) + { + /* allocate a slot in the array of pointers */ + + if ( ctr->num_values == 0 ) + ctr->values = talloc( ctr->ctx, sizeof(REGISTRY_VALUE*) ); + else { + ppreg = talloc_realloc( ctr->ctx, ctr->values, sizeof(REGISTRY_VALUE*)*(ctr->num_values+1) ); + if ( ppreg ) + ctr->values = ppreg; + } + + /* allocate a new value and store the pointer in the arrya */ + + ctr->values[ctr->num_values] = talloc( ctr->ctx, sizeof(REGISTRY_VALUE) ); + + /* init the value */ + + fstrcpy( ctr->values[ctr->num_values]->valuename, name ); + ctr->values[ctr->num_values]->type = type; + ctr->values[ctr->num_values]->data_p = talloc_memdup( ctr->ctx, data_p, size ); + ctr->values[ctr->num_values]->size = size; + ctr->num_values++; + } + + return ctr->num_values; +} + +/*********************************************************************** + Add a new registry value to the array + **********************************************************************/ + +int regval_ctr_copyvalue( REGVAL_CTR *ctr, REGISTRY_VALUE *val ) +{ + REGISTRY_VALUE **ppreg; + + if ( val ) + { + /* allocate a slot in the array of pointers */ + + if ( ctr->num_values == 0 ) + ctr->values = talloc( ctr->ctx, sizeof(REGISTRY_VALUE*) ); + else { + ppreg = talloc_realloc( ctr->ctx, ctr->values, sizeof(REGISTRY_VALUE*)*(ctr->num_values+1) ); + if ( ppreg ) + ctr->values = ppreg; + } + + /* allocate a new value and store the pointer in the arrya */ + + ctr->values[ctr->num_values] = talloc( ctr->ctx, sizeof(REGISTRY_VALUE) ); + + /* init the value */ + + fstrcpy( ctr->values[ctr->num_values]->valuename, val->valuename ); + ctr->values[ctr->num_values]->type = val->type; + ctr->values[ctr->num_values]->data_p = talloc_memdup( ctr->ctx, val->data_p, val->size ); + ctr->values[ctr->num_values]->size = val->size; + ctr->num_values++; + } + + return ctr->num_values; +} + +/*********************************************************************** + Delete a single value from the registry container. + No need to free memory since it is talloc'd. + **********************************************************************/ + +int regval_ctr_delvalue( REGVAL_CTR *ctr, char *name ) +{ + int i; + + /* search for the value */ + + for ( i=0; inum_values; i++ ) { + if ( strcmp( ctr->values[i]->valuename, name ) == 0) + break; + } + + /* just return if we don't find it */ + + if ( i == ctr->num_values ) + return ctr->num_values; + + /* just shift everything down one */ + + for ( /* use previous i */; i<(ctr->num_values-1); i++ ) + memcpy( ctr->values[i], ctr->values[i+1], sizeof(REGISTRY_VALUE) ); + + /* paranoia */ + + ZERO_STRUCTP( ctr->values[i] ); + + ctr->num_values--; + + return ctr->num_values; +} + +/*********************************************************************** + Delete a single value from the registry container. + No need to free memory since it is talloc'd. + **********************************************************************/ + +REGISTRY_VALUE* regval_ctr_getvalue( REGVAL_CTR *ctr, char *name ) +{ + int i; + + /* search for the value */ + + for ( i=0; inum_values; i++ ) { + if ( strequal( ctr->values[i]->valuename, name ) ) + return ctr->values[i]; + } + + return NULL; +} + +/*********************************************************************** + free memory held by a REGVAL_CTR structure + **********************************************************************/ + +void regval_ctr_destroy( REGVAL_CTR *ctr ) +{ + if ( ctr ) { + talloc_destroy( ctr->ctx ); + ZERO_STRUCTP( ctr ); + } +} + + -- cgit From 8eab2e79412c771ef57d39e7d61816b705350e0f Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 30 Aug 2002 11:38:39 +0000 Subject: fix broken dependencies.... --- source/Makefile.in | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/source/Makefile.in b/source/Makefile.in index 25040789a47..2aa254bce79 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -181,9 +181,9 @@ LIBMSRPC_SERVER_OBJ = libsmb/trust_passwd.o LIBMSRPC_PICOBJ = $(LIBMSRPC_OBJ:.o=.po) -REGOBJS_OBJ = registry/reg_objects.c +REGOBJS_OBJ = registry/reg_objects.o REGISTRY_OBJ = registry/reg_frontend.o registry/reg_cachehook.o registry/reg_printing.o \ - registry/reg_db.o $(REGOBJS_OBJ) + registry/reg_db.o RPC_SERVER_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o \ rpc_server/srv_lsa_hnd.o rpc_server/srv_netlog.o rpc_server/srv_netlog_nt.o \ @@ -192,7 +192,7 @@ RPC_SERVER_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o \ rpc_server/srv_srvsvc.o rpc_server/srv_srvsvc_nt.o \ rpc_server/srv_util.o rpc_server/srv_wkssvc.o rpc_server/srv_wkssvc_nt.o \ rpc_server/srv_pipe.o rpc_server/srv_dfs.o rpc_server/srv_dfs_nt.o \ - rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o $(REGISTRY_OBJ) + rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o # this includes only the low level parse code, not stuff # that requires knowledge of security contexts @@ -203,7 +203,8 @@ RPC_PARSE_OBJ = rpc_parse/parse_lsa.o rpc_parse/parse_net.o \ rpc_parse/parse_reg.o rpc_parse/parse_rpc.o \ rpc_parse/parse_samr.o rpc_parse/parse_srv.o \ rpc_parse/parse_wks.o \ - rpc_parse/parse_spoolss.o rpc_parse/parse_dfs.o + rpc_parse/parse_spoolss.o rpc_parse/parse_dfs.o \ + $(REGOBJS_OBJ) RPC_CLIENT_OBJ = rpc_client/cli_pipe.o @@ -270,7 +271,7 @@ SMBD_OBJ_BASE = $(SMBD_OBJ_SRV) $(MSDFS_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_ $(NOTIFY_OBJ) $(GROUPDB_OBJ) $(AUTH_OBJ) \ $(LIBMSRPC_OBJ) $(LIBMSRPC_SERVER_OBJ) \ $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) \ - $(LIB_SMBD_OBJ) + $(LIB_SMBD_OBJ) $(REGISTRY_OBJ) PRINTING_OBJ = printing/pcap.o printing/print_svid.o \ @@ -494,7 +495,7 @@ WINBINDD_OBJ = \ $(LIBNMB_OBJ) $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \ $(LIBSMB_OBJ) $(LIBMSRPC_OBJ) $(RPC_PARSE_OBJ) \ $(PROFILE_OBJ) $(UNIGRP_OBJ) \ - $(SECRETS_OBJ) $(LIBADS_OBJ) $(REGOBJS_OBJ) + $(SECRETS_OBJ) $(LIBADS_OBJ) WBINFO_OBJ = nsswitch/wbinfo.o libsmb/smbencrypt.o libsmb/smbdes.o -- cgit From 3cf419bdfbd3c56f31fb0794b206ab4bd2ac7120 Mon Sep 17 00:00:00 2001 From: Jean-François Micouleau Date: Fri, 30 Aug 2002 11:57:06 +0000 Subject: allow rpcclient's samlogon command to use cli_net_3(). J.F. --- source/rpcclient/cmd_netlogon.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/source/rpcclient/cmd_netlogon.c b/source/rpcclient/cmd_netlogon.c index 0f61eaaae84..98ba92e5a3f 100644 --- a/source/rpcclient/cmd_netlogon.c +++ b/source/rpcclient/cmd_netlogon.c @@ -273,12 +273,14 @@ static NTSTATUS cmd_netlogon_sam_logon(struct cli_state *cli, int logon_type = NET_LOGON_TYPE; char *username, *password; uint32 neg_flags = 0x000001ff; + int auth_level = 2; /* Check arguments */ - if (argc < 3 || argc > 4) { + if (argc < 3 || argc > 6) { fprintf(stderr, "Usage: samlogon " - "[logon_type]\n"); + "[logon_type] [neg flags] [auth level (2 or 3)]\n" + "neg flags being 0x000001ff or 0x6007ffff\n"); return NT_STATUS_OK; } @@ -288,6 +290,12 @@ static NTSTATUS cmd_netlogon_sam_logon(struct cli_state *cli, if (argc == 4) sscanf(argv[3], "%i", &logon_type); + if (argc == 5) + sscanf(argv[4], "%i", &neg_flags); + + if (argc == 6) + sscanf(argv[5], "%i", &auth_level); + /* Authenticate ourselves with the domain controller */ if (!secrets_init()) { @@ -300,7 +308,7 @@ static NTSTATUS cmd_netlogon_sam_logon(struct cli_state *cli, goto done; } - result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd, &neg_flags, 2); + result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd, &neg_flags, auth_level); if (!NT_STATUS_IS_OK(result)) { fprintf(stderr, "Error initialising session creds\n"); -- cgit From 4f00844da05b37cf9755def40a63c11e7f82153e Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 30 Aug 2002 12:46:54 +0000 Subject: fix proto --- source/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Makefile.in b/source/Makefile.in index 2aa254bce79..499a0985776 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -455,7 +455,7 @@ PROTO_OBJ = $(SMBD_OBJ_MAIN) \ $(PRINTING_OBJ) $(PRINTBACKEND_OBJ) $(OPLOCK_OBJ) $(NOTIFY_OBJ) \ $(QUOTAOBJS) $(PASSDB_OBJ) $(GROUPDB_OBJ) $(MSDFS_OBJ) \ $(READLINE_OBJ) $(PROFILE_OBJ) $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) \ - $(LIB_SMBD_OBJ) $(SAM_OBJ) + $(LIB_SMBD_OBJ) $(SAM_OBJ) $(REGISTRY_OBJ) NSS_OBJ_0 = nsswitch/wins.o $(PARAM_OBJ) $(UBIQX_OBJ) $(LIBSMB_OBJ) \ $(LIB_OBJ) $(NSSWINS_OBJ) -- cgit From 29a8f2121114cafca07797cadaeb26c9d0055b24 Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Fri, 30 Aug 2002 14:05:22 +0000 Subject: based on function prototype, the args were switched - this gave an error on the IRIX compiler. could whoever put the FIXME message take a look and see if it is still broken. --- source/lib/time.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/lib/time.c b/source/lib/time.c index f37380df70c..ef12dc15f34 100644 --- a/source/lib/time.c +++ b/source/lib/time.c @@ -43,7 +43,7 @@ int extra_time_offset = 0; void get_nttime_max(NTTIME *t) { /* FIXME: This is incorrect */ - unix_to_nt_time(get_time_t_max(),t); + unix_to_nt_time(t, get_time_t_max()); } /******************************************************************* -- cgit From ec37633548ed329c05b93499f75883d987b78f1e Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 30 Aug 2002 14:48:33 +0000 Subject: fix up print portion of registry. Merge from APP_HEAD. --- source/printing/nt_printing.c | 4 +-- source/registry/reg_printing.c | 69 +++++++++++++++++++++++------------ source/rpc_parse/parse_reg.c | 74 ++------------------------------------ source/rpc_server/srv_spoolss_nt.c | 2 +- 4 files changed, 51 insertions(+), 98 deletions(-) diff --git a/source/printing/nt_printing.c b/source/printing/nt_printing.c index a5b4c5106aa..bf90089448e 100644 --- a/source/printing/nt_printing.c +++ b/source/printing/nt_printing.c @@ -2638,8 +2638,8 @@ WERROR add_printer_data( NT_PRINTER_INFO_LEVEL_2 *p2, char *key, char *value, regval_ctr_addvalue( &p2->data.keys[key_index].values, value, type, data, real_len ); - DEBUG(8,("add_printer_data: Added key => [%s], value => [%s], size => [%d]\n", - key, value, real_len )); + DEBUG(8,("add_printer_data: Added key => [%s], value => [%s], type=> [%d], size => [%d]\n", + key, value, type, real_len )); return result; } diff --git a/source/registry/reg_printing.c b/source/registry/reg_printing.c index 2bc9d056e49..a58a91a0a89 100644 --- a/source/registry/reg_printing.c +++ b/source/registry/reg_printing.c @@ -240,6 +240,7 @@ static int print_subpath_values_environments( char *key, REGVAL_CTR *val ) int buffer_size = 0; int i, length; char *filename; + UNISTR2 data;; DEBUG(8,("print_subpath_values_environments: Enter key => [%s]\n", key ? key : "NULL")); @@ -287,15 +288,23 @@ static int print_subpath_values_environments( char *key, REGVAL_CTR *val ) info3 = driver_ctr.info_3; filename = dos_basename( info3->driverpath ); - regval_ctr_addvalue( val, "Driver", REG_SZ, filename, strlen(filename)+1 ); + init_unistr2( &data, filename, strlen(filename)+1 ); + regval_ctr_addvalue( val, "Driver", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + filename = dos_basename( info3->configfile ); - regval_ctr_addvalue( val, "Configuration File", REG_SZ, filename, strlen(filename)+1 ); + init_unistr2( &data, filename, strlen(filename)+1 ); + regval_ctr_addvalue( val, "Configuration File", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + filename = dos_basename( info3->datafile ); - regval_ctr_addvalue( val, "Data File", REG_SZ, filename, strlen(filename)+1 ); + init_unistr2( &data, filename, strlen(filename)+1 ); + regval_ctr_addvalue( val, "Data File", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + filename = dos_basename( info3->helpfile ); - regval_ctr_addvalue( val, "Help File", REG_SZ, filename, strlen(filename)+1 ); - - regval_ctr_addvalue( val, "Data Type", REG_SZ, info3->defaultdatatype, strlen(info3->defaultdatatype)+1 ); + init_unistr2( &data, filename, strlen(filename)+1 ); + regval_ctr_addvalue( val, "Help File", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + + init_unistr2( &data, info3->defaultdatatype, strlen(info3->defaultdatatype)+1 ); + regval_ctr_addvalue( val, "Data Type", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); regval_ctr_addvalue( val, "Version", REG_DWORD, (char*)&info3->cversion, sizeof(info3->cversion) ); @@ -313,19 +322,20 @@ static int print_subpath_values_environments( char *key, REGVAL_CTR *val ) length = strlen(filename); - buffer2 = Realloc( buffer, buffer_size + length + 1 ); + buffer2 = Realloc( buffer, buffer_size + (length + 1)*sizeof(uint16) ); if ( !buffer2 ) break; buffer = buffer2; + + init_unistr2( &data, filename, length+1 ); + memcpy( buffer+buffer_size, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); - memcpy( buffer+buffer_size, filename, length+1 ); - - buffer_size += length + 1; + buffer_size += (length + 1)*sizeof(uint16); } /* terminated by double NULL. Add the final one here */ - buffer2 = Realloc( buffer, buffer_size + 1 ); + buffer2 = Realloc( buffer, buffer_size + 2 ); if ( !buffer2 ) { SAFE_FREE( buffer ); buffer_size = 0; @@ -333,12 +343,14 @@ static int print_subpath_values_environments( char *key, REGVAL_CTR *val ) else { buffer = buffer2; buffer[buffer_size++] = '\0'; + buffer[buffer_size++] = '\0'; } } regval_ctr_addvalue( val, "Dependent Files", REG_MULTI_SZ, buffer, buffer_size ); free_a_printer_driver( driver_ctr, 3 ); + SAFE_FREE( key2 ); SAFE_FREE( buffer ); @@ -522,9 +534,10 @@ static int print_subpath_values_printers( char *key, REGVAL_CTR *val ) fstring printername; NT_PRINTER_DATA *p_data; int i, key_index; + UNISTR2 data; /* - * There are tw cases to deal with here + * Theres are tw cases to deal with here * (1) enumeration of printer_info_2 values * (2) enumeration of the PrinterDriverData subney */ @@ -559,17 +572,27 @@ static int print_subpath_values_printers( char *key, REGVAL_CTR *val ) regval_ctr_addvalue( val, "UntilTime", REG_DWORD, (char*)&info2->untiltime, sizeof(info2->untiltime) ); regval_ctr_addvalue( val, "cjobs", REG_DWORD, (char*)&info2->cjobs, sizeof(info2->cjobs) ); regval_ctr_addvalue( val, "AveragePPM", REG_DWORD, (char*)&info2->averageppm, sizeof(info2->averageppm) ); - - regval_ctr_addvalue( val, "Name", REG_SZ, info2->printername, sizeof(info2->printername)+1 ); - regval_ctr_addvalue( val, "Location", REG_SZ, info2->location, sizeof(info2->location)+1 ); - regval_ctr_addvalue( val, "Comment", REG_SZ, info2->comment, sizeof(info2->comment)+1 ); - regval_ctr_addvalue( val, "Parameters", REG_SZ, info2->parameters, sizeof(info2->parameters)+1 ); - regval_ctr_addvalue( val, "Port", REG_SZ, info2->portname, sizeof(info2->portname)+1 ); - regval_ctr_addvalue( val, "Server", REG_SZ, info2->servername, sizeof(info2->servername)+1 ); - regval_ctr_addvalue( val, "Share", REG_SZ, info2->sharename, sizeof(info2->sharename)+1 ); - regval_ctr_addvalue( val, "Driver", REG_SZ, info2->drivername, sizeof(info2->drivername)+1 ); - regval_ctr_addvalue( val, "Separator File", REG_SZ, info2->sepfile, sizeof(info2->sepfile)+1 ); - regval_ctr_addvalue( val, "Print Processor", REG_SZ, "winprint", sizeof("winprint")+1 ); + + init_unistr2( &data, info2->printername, strlen(info2->printername)+1 ); + regval_ctr_addvalue( val, "Name", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->location, strlen(info2->location)+1 ); + regval_ctr_addvalue( val, "Location", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->comment, strlen(info2->comment)+1 ); + regval_ctr_addvalue( val, "Comment", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->parameters, strlen(info2->parameters)+1 ); + regval_ctr_addvalue( val, "Parameters", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->portname, strlen(info2->portname)+1 ); + regval_ctr_addvalue( val, "Port", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->servername, strlen(info2->servername)+1 ); + regval_ctr_addvalue( val, "Server", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->sharename, strlen(info2->sharename)+1 ); + regval_ctr_addvalue( val, "Share", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->drivername, strlen(info2->drivername)+1 ); + regval_ctr_addvalue( val, "Driver", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->sepfile, strlen(info2->sepfile)+1 ); + regval_ctr_addvalue( val, "Separator File", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, "winprint", strlen("winprint")+1 ); + regval_ctr_addvalue( val, "Print Processor", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); /* use a prs_struct for converting the devmode and security diff --git a/source/rpc_parse/parse_reg.c b/source/rpc_parse/parse_reg.c index 1387aaf6ea7..f3018cfb373 100644 --- a/source/rpc_parse/parse_reg.c +++ b/source/rpc_parse/parse_reg.c @@ -34,83 +34,13 @@ static uint32 reg_init_buffer2( BUFFER2 *buf2, REGISTRY_VALUE *val ) { - UNISTR2 unistr; uint32 real_size = 0; - char *string; - char *list = NULL; - char *list2 = NULL; - int len = 0; if ( !buf2 || !val ) return 0; - real_size = val->size; - - switch (val->type ) - { - case REG_SZ: - string = (char*)regval_data_p( val ); - DEBUG(10,("reg_init_buffer2: REG_SZ string => [%s]\n", string)); - - if ( string ) - len = strlen(string)+1; - - init_unistr2( &unistr, (char*)val->data_p, len ); - init_buffer2( buf2, (char*)unistr.buffer, unistr.uni_str_len*2 ); - real_size = unistr.uni_str_len*2; - break; - - case REG_MULTI_SZ: - string = (char*)val->data_p; - real_size = 0; - while ( string && *string ) - { - DEBUG(10,("reg_init_buffer2: REG_MULTI_SZ string => [%s], size => [%d]\n", string, real_size )); - - init_unistr2( &unistr, string, strlen(string)+1 ); - - list2 = Realloc( list, real_size + unistr.uni_str_len*2 ); - if ( !list2 ) - break; - list = list2; - - memcpy( list+real_size, unistr.buffer, unistr.uni_str_len*2 ); - - real_size += unistr.uni_str_len*2; - - string += strlen(string)+1; - } - - list2 = Realloc( list, real_size + 2 ); - if ( !list2 ) - break; - list = list2; - list[real_size++] = 0x0; - list[real_size++] = 0x0; - - init_buffer2( buf2, (char*)list, real_size ); - - DEBUG(10,("reg_init_buffer2: REG_MULTI_SZ size => [%d]\n", real_size )); - - break; - - case REG_BINARY: - DEBUG(10,("reg_init_buffer2: REG_BINARY size => [%d]\n", val->size )); - - init_buffer2( buf2, val->data_p, val->size ); - break; - - case REG_DWORD: - DEBUG(10,("reg_init_buffer2: REG_DWORD value => [%d]\n", *(uint32*)val->data_p)); - init_buffer2( buf2, val->data_p, val->size ); - break; - - default: - DEBUG(0,("reg_init_buffer2: Unsupported registry data type [%d]\n", val->type)); - break; - } - - SAFE_FREE( list ); + real_size = regval_size(val); + init_buffer2( buf2, (char*)regval_data_p(val), real_size ); return real_size; } diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index d1f92aef13b..c4105f9780f 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -7911,7 +7911,7 @@ done: WERROR _spoolss_setprinterdataex(pipes_struct *p, SPOOL_Q_SETPRINTERDATAEX *q_u, SPOOL_R_SETPRINTERDATAEX *r_u) { - POLICY_HND *handle = &q_u->handle; + POLICY_HND *handle = &q_u->handle; uint32 type = q_u->type; uint8 *data = q_u->data; uint32 real_len = q_u->real_len; -- cgit From 4eeef6ef530acf1cc4e08e24af902c15af57ece7 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 30 Aug 2002 17:22:33 +0000 Subject: Added attribute specific OPEN tests (for SYSTEM and HIDDEN). Jeremy. --- source/torture/torture.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/source/torture/torture.c b/source/torture/torture.c index e7a8eb04b60..89d62b44a60 100644 --- a/source/torture/torture.c +++ b/source/torture/torture.c @@ -3417,6 +3417,50 @@ static BOOL run_opentest(int dummy) cli_unlink(&cli1, fname); + /* Test 8 - attributes test test... */ + fnum1 = cli_nt_create_full(&cli1, fname,FILE_WRITE_DATA, FILE_ATTRIBUTE_HIDDEN, + FILE_SHARE_NONE, FILE_OVERWRITE_IF, 0); + + if (fnum1 == -1) { + printf("test 8 open 1 of %s failed (%s)\n", fname, cli_errstr(&cli1)); + return False; + } + + if (!cli_close(&cli1, fnum1)) { + printf("test 8 close 1 of %s failed (%s)\n", fname, cli_errstr(&cli1)); + return False; + } + + /* FILE_SUPERSEDE && FILE_OVERWRITE_IF have the same effect here. */ + fnum1 = cli_nt_create_full(&cli1, fname,FILE_READ_DATA, FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL, + FILE_SHARE_NONE, FILE_OVERWRITE_IF, 0); + + if (fnum1 == -1) { + printf("test 8 open 2 of %s failed (%s)\n", fname, cli_errstr(&cli1)); + return False; + } + + if (!cli_close(&cli1, fnum1)) { + printf("test 8 close 2 of %s failed (%s)\n", fname, cli_errstr(&cli1)); + return False; + } + + /* This open should fail with ACCESS_DENIED for FILE_SUPERSEDE, FILE_OVERWRITE and FILE_OVERWRITE_IF. */ + fnum1 = cli_nt_create_full(&cli1, fname,FILE_READ_DATA, FILE_ATTRIBUTE_NORMAL, + FILE_SHARE_NONE, FILE_OVERWRITE, 0); + + if (fnum1 != -1) { + printf("test 8 open 3 of %s succeeded - should have failed with (NT_STATUS_ACCESS_DENIED)\n", fname); + correct = False; + cli_close(&cli1, fnum1); + } else { + printf("test 8 open 3 of %s gave %s (correct error should be %s)\n", fname, cli_errstr(&cli1), "ACCESS_DENIED"); + } + + printf("Attribute open test #8 passed.\n"); + + cli_unlink(&cli1, fname); + if (!torture_close_connection(&cli1)) { correct = False; } -- cgit From 0a92c4db1fed6eff577a67e9c4fd54bd4fe4afac Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 30 Aug 2002 18:01:26 +0000 Subject: Put PRINTER_DRIVER back in --- docs/textdocs/outdated/PRINTER_DRIVER.txt | 240 ++++++++++++++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 docs/textdocs/outdated/PRINTER_DRIVER.txt diff --git a/docs/textdocs/outdated/PRINTER_DRIVER.txt b/docs/textdocs/outdated/PRINTER_DRIVER.txt new file mode 100644 index 00000000000..5bf82e0cfe4 --- /dev/null +++ b/docs/textdocs/outdated/PRINTER_DRIVER.txt @@ -0,0 +1,240 @@ +!== +!== PRINTER_DRIVER.txt for Samba release 2.0.4 18 May 1999 +!== +========================================================================== + Supporting the famous PRINTER$ share + + Jean-Francois.Micouleau@utc.fr, 10/26/97 + modified by herb@sgi.com 1/2/98 + +=========================================================================== + +Disclaimer: + + This ONLY works with Windows 95 + It does NOT work with Windows NT 4 + + +Goal: + + When you click on a samba shared printer, you can now install the driver + automatically onto the Windows 95 machine, as you would from an NT server. + +How To: + + It's a three step config. + + First, create a new directory, where you will put the driver files, and + make a share in smb.conf pointing to it. + + Example: + + [printer$] + path=/usr/local/samba/printer + public=yes + writable=no + browseable=yes + + Second, you have to build the list of drivers required for a specific + printer. This is the most complicated thing to do. Get the files + 'msprint.inf' and 'msprint2.inf' from Windows 95, the easiest way is to + grab them from a working Windows 95 computer. They are usually located + in 'c:\windows\inf'. Look in them for the printer you have. Run the new + program 'make_printerdef' with the file name and the printer name as + parameters. If you have drivers for an unsupported or updated printer, + first install these drivers on an Windows 95 system. There will be a + file created in your inf directory named 'oem?.inf' (where the ? is some + number). Use this file instead of msprint.inf. + + Example: (from the /usr/local/samba/lib directory) + + make_printerdef msprint.inf "Apple LaserWriter" >> printers.def + + The program will print out a list of required files to stderr. + Copy all the files listed into the directory you created in step 1. + If you have "preserve case = yes" make sure your files names match + EXACTLY the names listed. + + Third, you need to add 2 new parameters in smb.conf. One is in the + [global] section, called 'printer driver file' pointing to the printer + description file you just created, and the other in each printer share, + called 'printer driver location' pointing to where the client will get + the drivers. Don't forget to set correctly the printer driver parameter + to the Windows printer name. + + Example: + + [global] + printer driver file=/usr/local/samba/lib/printers.def + + [lp] + comment = My old printer laser + browseable = yes + printable = yes + public = yes + writable = no + create mode = 0700 + printer driver=Apple LaserWriter + printer driver location=\\%h\PRINTER$ + + %h will expand to the computer name, and PRINTER$ is the name of the + share created in step one. + + +If it doesn't work for you, don't send flame ! It worked for me. In case of +trouble don't hesitate to send me a mail with your smb.conf file and +printers.def + + +******* added by herb@sgi.com + +For those of you who like to know the details, and in case I have guessed +wrong on some of the fields - The following is the format of the entries +in the printers.def file: (entries are 1 single line - they are split here +for readability) + +:::: +:: + +The and the can be empty. +If no or are specified in the inf file, +these will default to the section name for the printer. + +The following is an excerpt from the MSPRINT2.INF file on a WIN95 machine. +I have deleted all but the entries relating to installing a driver for the +"QMS ColorScript 100 Model 30" printer. Using this "file" I'll try to +explain how the printers.def file is created. + +make_printerdef is run with the first argument being the name of this +file (MSPRINT2.INF in this case) and the second argument being the +name of the printer ("QMS ColorScript 100 Model 30" in this case). + +The printer name is first found in the "Model section" to obtain the +name of the "Installer Section" (this is the name after the equal sign). +We ignore the alternate name. + +The "Installer Section" contains entries for "CopyFiles" and "DataSection". +The "CopyFiles" line gives a list of all the required files for this +printer. If the name begins with an @ it is the name of a file (after +you strip off the @), otherwise it is the name of a "Copy Section" which +in turn is a list of files required. This printer has one file listed +"QCS30503.SPD" and two sections "COLOR_QMS_100_30" and "PSCRIPT". The +"COLOR_QMS_100_30" section is listed in the "[DestinationDirs]" as +having a value of 23. This means that all files listed in this section +should go into the "color" subdirectory. The list of files to copy for +this printer is thus: + +QCS30503.SPD,color\QMS10030.ICM,PSCRIPT.DRV,PSCRIPT.HLP,PSCRIPT.INI, +TESTPS.TXT,APPLE380.SPD,FONTS.MFM,ICONLIB.DLL,PSMON.DLL + +From the "Data Section" we obtain values for "DriverFile", "HelpFile", +and "LanguageMonitor". The % around the value for "LanguageMonitor" +indicates that it is a string that can be localized so its actual value +is obtained from the "[Strings]" section. The "Data Section" could also +have contained an entry for "DefaultDataType". + +Using the information we have obtained we can now construct the entry +for the printers.def file. + + -> QMS ColorScript 100 Model 30 (name given + on the command line) + -> PSCRIPT.DRV (given in Data Section) + -> QCS30503.SPD (defaults to Install Section name) + -> PSCRIPT.HLP (given in Data Section) + -> PostScript Language Monitor (given in Data Section) + -> RAW (default if not specified) + + +So.... the enty (actually one line but split here for readability) would +be: + +QMS ColorScript 100 Model 30:PSCRIPT.DRV:QCS30503.SPD: +PSCRIPT.HLP:PostScript Language Monitor:RAW: +QCS30503.SPD,color\QMS10030.ICM,PSCRIPT.DRV,PSCRIPT.HLP,PSCRIPT.INI, +TESTPS.TXT,APPLE380.SPD,FONTS.MFM,ICONLIB.DLL,PSMON.DLL + +---------------------- Info from MSPRINT2.INF ------------------------ +; +; The Manufacturer section lists all of the manufacturers that we will +; display in the Dialog box + +[Manufacturer] +"QMS" + + +; +; Model sections. Each section here corresponds with an entry listed in the +; [Manufacturer] section, above. The models will be displayed in the order +; that they appear in the INF file. +; +; Each model lists a variation of its own name as a compatible ID. This +; is done primarily as an optimization during upgrade. +; +[QMS] +"QMS ColorScript 100 Model 30" = QCS30503.SPD,QMS_ColorScript_100_Model_30 + + +; +; Installer Sections +; +; These sections control file installation, and reference all files that +; need to be copied. The section name will be assumed to be the driver +; file, unless there is an explicit DriverFile section listed. +; +[QCS30503.SPD] +CopyFiles=@QCS30503.SPD,COLOR_QMS_100_30,PSCRIPT +DataSection=PSCRIPT_DATA + +; Copy Sections +; +; Lists of files that are actually copied. These sections are referenced +; from the installer sections, above. Only create a section if it contains +; two or more files (if we only copy a single file, identify it in the +; installer section, using the @filename notation) or if it's a color +; profile (since the DestinationDirs can only handle sections, and not +; individual files). +; +[COLOR_QMS_100_30] +QMS10030.ICM + +[PSCRIPT] +PSCRIPT.DRV +PSCRIPT.HLP +PSCRIPT.INI +TESTPS.TXT +APPLE380.SPD +FONTS.MFM +ICONLIB.DLL +PSMON.DLL + + +; +; Data Sections +; +; These sections contain data that is shared between devices. +; +[PSCRIPT_DATA] +DriverFile=PSCRIPT.DRV +HelpFile=PSCRIPT.HLP +LanguageMonitor=%PS_MONITOR% + + +; +; Color profiles go to the colors directory. All other files go to the +; system directory +; + +[DestinationDirs] +DefaultDestDir=11 +COLOR_QMS_100_30=23 +COLOR_TEKTRONIX_200I=23 +COLOR_TEKTRONIX_III_PXI=23 + + +; +; Localizable Strings +; +[Strings] +MS="Microsoft" +PS_MONITOR="PostScript Language Monitor,PSMON.DLL" + -- cgit From 4e836c4ce2b51e42ab4f29c6c916fe6a73a58654 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 30 Aug 2002 18:56:00 +0000 Subject: Better error reporting on OPEN test. Jeremy. --- source/torture/torture.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/torture/torture.c b/source/torture/torture.c index 89d62b44a60..977591bc534 100644 --- a/source/torture/torture.c +++ b/source/torture/torture.c @@ -844,7 +844,7 @@ static BOOL run_locktest1(int dummy) printf("error: This server appears not to support timed lock requests\n"); } printf("server slept for %u seconds for a %u second timeout\n", - t2-t1, lock_timeout); + (unsigned int)(t2-t1), lock_timeout); if (!cli_close(&cli1, fnum2)) { printf("close1 failed (%s)\n", cli_errstr(&cli1)); @@ -3454,7 +3454,9 @@ static BOOL run_opentest(int dummy) correct = False; cli_close(&cli1, fnum1); } else { - printf("test 8 open 3 of %s gave %s (correct error should be %s)\n", fname, cli_errstr(&cli1), "ACCESS_DENIED"); + if (check_error(__LINE__, &cli1, ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED)) { + printf("correct error code NT_STATUS_ACCESS_DENIED/ERRDOS:ERRnoaccess returned\n"); + } } printf("Attribute open test #8 passed.\n"); -- cgit From cf9bb66aa9c3217cb8394058c65c84ffc6ae269a Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Fri, 30 Aug 2002 18:56:46 +0000 Subject: off by one in writing to malloced array. this fixes smbd crash I saw at the CIFS conference - finally got purify working --- source/auth/auth_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/auth/auth_util.c b/source/auth/auth_util.c index 118126a2756..5ae942fac70 100644 --- a/source/auth/auth_util.c +++ b/source/auth/auth_util.c @@ -980,8 +980,8 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx, /* and create (by appending rids) the 'domain' sids */ for (i = 0; i < info3->num_groups2; i++) { - sid_copy(&all_group_SIDs[i+n_lgroupSIDs+1], &(info3->dom_sid.sid)); - if (!sid_append_rid(&all_group_SIDs[i+n_lgroupSIDs+1], info3->gids[i].g_rid)) { + sid_copy(&all_group_SIDs[i+n_lgroupSIDs], &(info3->dom_sid.sid)); + if (!sid_append_rid(&all_group_SIDs[i+n_lgroupSIDs], info3->gids[i].g_rid)) { nt_status = NT_STATUS_INVALID_PARAMETER; DEBUG(3,("create_nt_token_info3: could not append additional group rid 0x%x\n", info3->gids[i].g_rid)); -- cgit From bd1e3df9ffa0717f26696a222e5ec6a0198b3352 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 30 Aug 2002 18:57:23 +0000 Subject: Correctly fail opens with mismatching SYSTEM or HIDDEN attributes if we are mapping system or hidden. Jeremy. --- source/smbd/open.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/source/smbd/open.c b/source/smbd/open.c index 8c6e8ed805c..47e859d04b3 100644 --- a/source/smbd/open.c +++ b/source/smbd/open.c @@ -679,6 +679,31 @@ static void kernel_flock(files_struct *fsp, int deny_mode) } +static BOOL open_match_attributes(connection_struct *conn, char *path, mode_t existing_mode, mode_t new_mode) +{ + uint32 old_dos_mode, new_dos_mode; + SMB_STRUCT_STAT sbuf; + + ZERO_STRUCT(sbuf); + + sbuf.st_mode = existing_mode; + old_dos_mode = dos_mode(conn, path, &sbuf); + + sbuf.st_mode = new_mode; + new_dos_mode = dos_mode(conn, path, &sbuf); + + /* If we're mapping SYSTEM and HIDDEN ensure they match. */ + if (lp_map_system(SNUM(conn))) { + if ((old_dos_mode & FILE_ATTRIBUTE_SYSTEM) != (new_dos_mode & FILE_ATTRIBUTE_SYSTEM)) + return False; + } + if (lp_map_hidden(SNUM(conn))) { + if ((old_dos_mode & FILE_ATTRIBUTE_HIDDEN) != (new_dos_mode & FILE_ATTRIBUTE_HIDDEN)) + return False; + } + return True; +} + /**************************************************************************** Open a file with a share mode. On output from this open we are guarenteeing that @@ -773,6 +798,17 @@ files_struct *open_file_shared1(connection_struct *conn,char *fname, SMB_STRUCT_ if (CAN_WRITE(conn) && (GET_FILE_OPEN_DISPOSITION(ofun) == FILE_EXISTS_TRUNCATE)) flags2 |= O_TRUNC; + /* We only care about matching attributes on file exists and truncate. */ + if (file_existed && (GET_FILE_OPEN_DISPOSITION(ofun) == FILE_EXISTS_TRUNCATE)) { + if (!open_match_attributes(conn, fname, psbuf->st_mode, mode)) { + DEBUG(5,("open_file_shared: attributes missmatch for file %s (0%o, 0%o)\n", + fname, psbuf->st_mode, mode )); + file_free(fsp); + errno = EACCES; + return NULL; + } + } + if (GET_FILE_OPEN_DISPOSITION(ofun) == FILE_EXISTS_FAIL) flags2 |= O_EXCL; -- cgit From e9392c4a2e1e1ce44fcd1a1105477c17a3410f14 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 30 Aug 2002 19:06:07 +0000 Subject: Correct error message. Jeremy. --- source/torture/torture.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/torture/torture.c b/source/torture/torture.c index 977591bc534..047b4c7a240 100644 --- a/source/torture/torture.c +++ b/source/torture/torture.c @@ -3459,7 +3459,7 @@ static BOOL run_opentest(int dummy) } } - printf("Attribute open test #8 passed.\n"); + printf("Attribute open test #8 %s.\n", correct ? "passed" : "failed"); cli_unlink(&cli1, fname); -- cgit From 18b9cbd857177a911ef95c9322bdf0709161cd84 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 30 Aug 2002 19:29:59 +0000 Subject: Fix bug with stat mode open being done on read-only open with truncate. Jeremy. --- source/smbd/open.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/source/smbd/open.c b/source/smbd/open.c index 47e859d04b3..8cc73a681d1 100644 --- a/source/smbd/open.c +++ b/source/smbd/open.c @@ -139,18 +139,20 @@ static BOOL open_file(files_struct *fsp,connection_struct *conn, * as we always opened files read-write in that release. JRA. */ - if ((accmode == O_RDONLY) && ((flags & O_TRUNC) == O_TRUNC)) + if ((accmode == O_RDONLY) && ((flags & O_TRUNC) == O_TRUNC)) { + DEBUG(10,("open_file: truncate requested on read-only open for file %s\n",fname )); local_flags = (flags & ~O_ACCMODE)|O_RDWR; + } - /* - * We can't actually truncate here as the file may be locked. - * open_file_shared will take care of the truncate later. JRA. - */ + if ((desired_access & (FILE_READ_DATA|FILE_WRITE_DATA|FILE_APPEND_DATA|FILE_EXECUTE)) || + (local_flags & O_CREAT) || ((local_flags & O_TRUNC) == O_TRUNC) ) { - local_flags &= ~O_TRUNC; + /* + * We can't actually truncate here as the file may be locked. + * open_file_shared will take care of the truncate later. JRA. + */ - if ((desired_access & (FILE_READ_DATA|FILE_WRITE_DATA|FILE_APPEND_DATA|FILE_EXECUTE)) || - (local_flags & O_CREAT)) { + local_flags &= ~O_TRUNC; /* actually do the open */ fsp->fd = fd_open(conn, fname, local_flags, mode); -- cgit From 004090edffef6cc04c286b9924b8c47ea3260ef2 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 30 Aug 2002 23:56:37 +0000 Subject: Add a fix for 'query_disp_info level 2', which should return all machines in the DC's SAM. We were only returning workstations, not PDCs or BDCs. Win2k's 'Computer Manager' tool uses this to list all computers in the domain (as opposed to using NetBIOS). Andrew Bartlett --- source/rpc_server/srv_samr_nt.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c index ee4335cb0ab..927acb24b8a 100644 --- a/source/rpc_server/srv_samr_nt.c +++ b/source/rpc_server/srv_samr_nt.c @@ -198,7 +198,7 @@ static void samr_clear_sam_passwd(SAM_ACCOUNT *sam_pass) } -static NTSTATUS load_sampwd_entries(struct samr_info *info, uint16 acb_mask) +static NTSTATUS load_sampwd_entries(struct samr_info *info, uint16 acb_mask, BOOL all_machines) { SAM_ACCOUNT *pwd = NULL; DISP_USER_INFO *pwd_array = NULL; @@ -221,10 +221,19 @@ static NTSTATUS load_sampwd_entries(struct samr_info *info, uint16 acb_mask) for (; (NT_STATUS_IS_OK(nt_status = pdb_init_sam_talloc(mem_ctx, &pwd))) && pdb_getsampwent(pwd) == True; pwd=NULL) { - if (acb_mask != 0 && !(pdb_get_acct_ctrl(pwd) & acb_mask)) { - pdb_free_sam(&pwd); - DEBUG(5,(" acb_mask %x reject\n", acb_mask)); - continue; + if (all_machines) { + if (!((pdb_get_acct_ctrl(pwd) & ACB_WSTRUST) + || (pdb_get_acct_ctrl(pwd) & ACB_SVRTRUST))) { + DEBUG(5,("load_sampwd_entries: '%s' is not a machine account - ACB: %x - skipping\n", pdb_get_username(pwd), acb_mask)); + pdb_free_sam(&pwd); + continue; + } + } else { + if (acb_mask != 0 && !(pdb_get_acct_ctrl(pwd) & acb_mask)) { + pdb_free_sam(&pwd); + DEBUG(5,(" acb_mask %x reject\n", acb_mask)); + continue; + } } /* Realloc some memory for the array of ptr to the SAM_ACCOUNT structs */ @@ -746,7 +755,7 @@ NTSTATUS _samr_enum_dom_users(pipes_struct *p, SAMR_Q_ENUM_DOM_USERS *q_u, DEBUG(5,("_samr_enum_dom_users: %d\n", __LINE__)); become_root(); - r_u->status=load_sampwd_entries(info, q_u->acb_mask); + r_u->status=load_sampwd_entries(info, q_u->acb_mask, False); unbecome_root(); if (!NT_STATUS_IS_OK(r_u->status)) @@ -1100,7 +1109,6 @@ NTSTATUS _samr_query_dispinfo(pipes_struct *p, SAMR_Q_QUERY_DISPINFO *q_u, { struct samr_info *info = NULL; uint32 struct_size=0x20; /* W2K always reply that, client doesn't care */ - uint16 acb_mask; uint32 max_entries=q_u->max_entries; uint32 enum_context=q_u->start_idx; @@ -1151,20 +1159,14 @@ NTSTATUS _samr_query_dispinfo(pipes_struct *p, SAMR_Q_QUERY_DISPINFO *q_u, * JFM, 12/20/2001 */ - /* Get what we need from the password database */ - - if (q_u->switch_level==2) - acb_mask = ACB_WSTRUST; - else - acb_mask = ACB_NORMAL; - /* Get what we need from the password database */ switch (q_u->switch_level) { case 0x1: case 0x2: case 0x4: become_root(); - r_u->status=load_sampwd_entries(info, acb_mask); + /* Level 2 is for all machines, otherwise only 'normal' users */ + r_u->status=load_sampwd_entries(info, ACB_NORMAL, q_u->switch_level==2); unbecome_root(); if (!NT_STATUS_IS_OK(r_u->status)) { DEBUG(5, ("_samr_query_dispinfo: load_sampwd_entries failed\n")); @@ -2083,7 +2085,7 @@ NTSTATUS _samr_query_dom_info(pipes_struct *p, SAMR_Q_QUERY_DOMAIN_INFO *q_u, SA break; case 0x02: become_root(); - r_u->status=load_sampwd_entries(info, ACB_NORMAL); + r_u->status=load_sampwd_entries(info, ACB_NORMAL, False); unbecome_root(); if (!NT_STATUS_IS_OK(r_u->status)) { DEBUG(5, ("_samr_query_dispinfo: load_sampwd_entries failed\n")); @@ -4247,10 +4249,10 @@ NTSTATUS _samr_unknown_2e(pipes_struct *p, SAMR_Q_UNKNOWN_2E *q_u, SAMR_R_UNKNOW break; case 0x02: become_root(); - r_u->status=load_sampwd_entries(info, ACB_NORMAL); + r_u->status=load_sampwd_entries(info, ACB_NORMAL, False); unbecome_root(); if (!NT_STATUS_IS_OK(r_u->status)) { - DEBUG(5, ("_samr_query_dispinfo: load_sampwd_entries failed\n")); + DEBUG(5, ("_samr_unknown_2e: load_sampwd_entries failed\n")); return r_u->status; } num_users=info->disp_info.num_user_account; @@ -4258,7 +4260,7 @@ NTSTATUS _samr_unknown_2e(pipes_struct *p, SAMR_Q_UNKNOWN_2E *q_u, SAMR_R_UNKNOW r_u->status=load_group_domain_entries(info, get_global_sam_sid()); if (NT_STATUS_IS_ERR(r_u->status)) { - DEBUG(5, ("_samr_query_dispinfo: load_group_domain_entries failed\n")); + DEBUG(5, ("_samr_unknown_2e: load_group_domain_entries failed\n")); return r_u->status; } num_groups=info->disp_info.num_group_account; -- cgit From 52db44b5c01e16923393b0ec9a8d0f530be7bb2d Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 31 Aug 2002 06:38:27 +0000 Subject: Avoid writing unitialised bytes to the wire (and consequent valgrind warnings) by zeroing them out if they don't have meaning. Andrew Bartlett --- source/rpc_parse/parse_reg.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/rpc_parse/parse_reg.c b/source/rpc_parse/parse_reg.c index f3018cfb373..2698e824407 100644 --- a/source/rpc_parse/parse_reg.c +++ b/source/rpc_parse/parse_reg.c @@ -1701,7 +1701,11 @@ BOOL reg_io_q_open_entry(char *desc, REG_Q_OPEN_ENTRY *r_q, prs_struct *ps, int void init_reg_r_open_entry(REG_R_OPEN_ENTRY *r_r, POLICY_HND *pol, NTSTATUS status) { - memcpy(&r_r->pol, pol, sizeof(r_r->pol)); + if (NT_STATUS_IS_OK(status)) { + memcpy(&r_r->pol, pol, sizeof(r_r->pol)); + } else { + ZERO_STRUCT(r_r->pol); + } r_r->status = status; } -- cgit From 9deada345c5f89f338530c4de62835cc1eeb3d0e Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 31 Aug 2002 06:59:00 +0000 Subject: Add a bit of 'const' and move a lot of our 'repeditive' DEBUG() statements to 'DEBUGADD', so we don't repeat headers. (Makes them much easier to read). (Based on patch by kai) Andrew Bartlett --- source/lib/util.c | 83 ++++++++++++++++++++++------------------------ source/lib/util_seaccess.c | 19 ++++++----- source/libsmb/clispnego.c | 34 ++++++++++--------- source/smbd/sesssetup.c | 2 -- 4 files changed, 67 insertions(+), 71 deletions(-) diff --git a/source/lib/util.c b/source/lib/util.c index 377457a7143..51b92568b4d 100644 --- a/source/lib/util.c +++ b/source/lib/util.c @@ -260,8 +260,8 @@ void show_msg(char *buf) int i; int bcc=0; - if (DEBUGLEVEL < 5) return; - + if (!DEBUGLVL(5)) return; + DEBUG(5,("size=%d\nsmb_com=0x%x\nsmb_rcls=%d\nsmb_reh=%d\nsmb_err=%d\nsmb_flg=%d\nsmb_flg2=%d\n", smb_len(buf), (int)CVAL(buf,smb_com), @@ -270,31 +270,26 @@ void show_msg(char *buf) (int)SVAL(buf,smb_err), (int)CVAL(buf,smb_flg), (int)SVAL(buf,smb_flg2))); - DEBUG(5,("smb_tid=%d\nsmb_pid=%d\nsmb_uid=%d\nsmb_mid=%d\nsmt_wct=%d\n", + DEBUGADD(5,("smb_tid=%d\nsmb_pid=%d\nsmb_uid=%d\nsmb_mid=%d\n", (int)SVAL(buf,smb_tid), (int)SVAL(buf,smb_pid), (int)SVAL(buf,smb_uid), - (int)SVAL(buf,smb_mid), - (int)CVAL(buf,smb_wct))); + (int)SVAL(buf,smb_mid))); + DEBUGADD(5,("smt_wct=%d\n",(int)CVAL(buf,smb_wct))); for (i=0;i<(int)CVAL(buf,smb_wct);i++) - { - DEBUG(5,("smb_vwv[%d]=%d (0x%X)\n",i, + DEBUGADD(5,("smb_vwv[%2d]=%5d (0x%X)\n",i, SVAL(buf,smb_vwv+2*i),SVAL(buf,smb_vwv+2*i))); - } - + bcc = (int)SVAL(buf,smb_vwv+2*(CVAL(buf,smb_wct))); - DEBUG(5,("smb_bcc=%d\n",bcc)); + DEBUGADD(5,("smb_bcc=%d\n",bcc)); if (DEBUGLEVEL < 10) return; - if (DEBUGLEVEL < 50) - { - bcc = MIN(bcc, 512); - } + if (DEBUGLEVEL < 50) bcc = MIN(bcc, 512); - dump_data(10, smb_buf(buf), bcc); + dump_data(10, smb_buf(buf), bcc); } /******************************************************************* @@ -1574,35 +1569,35 @@ void print_asc(int level, const unsigned char *buf,int len) void dump_data(int level, const char *buf1,int len) { - const unsigned char *buf = (const unsigned char *)buf1; - int i=0; - if (len<=0) return; - - DEBUG(level,("[%03X] ",i)); - for (i=0;i8) DEBUG(level,(" ")); - while (n--) DEBUG(level,(" ")); - - n = MIN(8,i%16); - print_asc(level,&buf[i-(i%16)],n); DEBUG(level,(" ")); - n = (i%16) - n; - if (n>0) print_asc(level,&buf[i-n],n); - DEBUG(level,("\n")); - } + const unsigned char *buf = (const unsigned char *)buf1; + int i=0; + if (len<=0) return; + + if (!DEBUGLVL(level)) return; + + DEBUGADD(level,("[%03X] ",i)); + for (i=0;i8) DEBUGADD(level,(" ")); + while (n--) DEBUGADD(level,(" ")); + n = MIN(8,i%16); + print_asc(level,&buf[i-(i%16)],n); DEBUGADD(level,( " " )); + n = (i%16) - n; + if (n>0) print_asc(level,&buf[i-n],n); + DEBUGADD(level,("\n")); + } } char *tab_depth(int depth) diff --git a/source/lib/util_seaccess.c b/source/lib/util_seaccess.c index 87711ff5ad9..b137023e55c 100644 --- a/source/lib/util_seaccess.c +++ b/source/lib/util_seaccess.c @@ -44,7 +44,7 @@ static BOOL token_sid_in_ace(const NT_USER_TOKEN *token, const SEC_ACE *ace) bits not yet granted. Zero means permission allowed (no more needed bits). **********************************************************************************/ -static uint32 check_ace(SEC_ACE *ace, NT_USER_TOKEN *token, uint32 acc_desired, +static uint32 check_ace(SEC_ACE *ace, const NT_USER_TOKEN *token, uint32 acc_desired, NTSTATUS *status) { uint32 mask = ace->info.mask; @@ -104,7 +104,7 @@ static uint32 check_ace(SEC_ACE *ace, NT_USER_TOKEN *token, uint32 acc_desired, include other bits requested. **********************************************************************************/ -static BOOL get_max_access( SEC_ACL *the_acl, NT_USER_TOKEN *token, uint32 *granted, +static BOOL get_max_access( SEC_ACL *the_acl, const NT_USER_TOKEN *token, uint32 *granted, uint32 desired, NTSTATUS *status) { @@ -264,12 +264,13 @@ BOOL se_access_check(SEC_DESC *sd, const NT_USER_TOKEN *token, } /* The user sid is the first in the token */ - - DEBUG(3, ("se_access_check: user sid is %s\n", sid_to_string(sid_str, &token->user_sids[PRIMARY_USER_SID_INDEX]) )); - - for (i = 1; i < token->num_sids; i++) { - DEBUG(3, ("se_access_check: also %s\n", - sid_to_string(sid_str, &token->user_sids[i]))); + if (DEBUGLVL(3)) { + DEBUG(3, ("se_access_check: user sid is %s\n", sid_to_string(sid_str, &token->user_sids[PRIMARY_USER_SID_INDEX]) )); + + for (i = 1; i < token->num_sids; i++) { + DEBUGADD(3, ("se_access_check: also %s\n", + sid_to_string(sid_str, &token->user_sids[i]))); + } } /* Is the token the owner of the SID ? */ @@ -299,7 +300,7 @@ BOOL se_access_check(SEC_DESC *sd, const NT_USER_TOKEN *token, for ( i = 0 ; i < the_acl->num_aces && tmp_acc_desired != 0; i++) { SEC_ACE *ace = &the_acl->ace[i]; - DEBUG(10,("se_access_check: ACE %u: type %d, flags = 0x%02x, SID = %s mask = %x, current desired = %x\n", + DEBUGADD(10,("se_access_check: ACE %u: type %d, flags = 0x%02x, SID = %s mask = %x, current desired = %x\n", (unsigned int)i, ace->type, ace->flags, sid_to_string(sid_str, &ace->trustee), (unsigned int) ace->info.mask, diff --git a/source/libsmb/clispnego.c b/source/libsmb/clispnego.c index 1eeae8b1717..fc25436d10b 100644 --- a/source/libsmb/clispnego.c +++ b/source/libsmb/clispnego.c @@ -686,37 +686,39 @@ BOOL msrpc_parse(DATA_BLOB *blob, void debug_ntlmssp_flags(uint32 neg_flags) { + DEBUG(3,("Got NTLMSSP neg_flags=0x%08x\n", neg_flags)); + if (neg_flags & NTLMSSP_NEGOTIATE_UNICODE) - DEBUG(4, (" NTLMSSP_NEGOTIATE_UNICODE\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_UNICODE\n")); if (neg_flags & NTLMSSP_NEGOTIATE_OEM) - DEBUG(4, (" NTLMSSP_NEGOTIATE_OEM\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_OEM\n")); if (neg_flags & NTLMSSP_REQUEST_TARGET) - DEBUG(4, (" NTLMSSP_REQUEST_TARGET\n")); + DEBUGADD(4, (" NTLMSSP_REQUEST_TARGET\n")); if (neg_flags & NTLMSSP_NEGOTIATE_SIGN) - DEBUG(4, (" NTLMSSP_NEGOTIATE_SIGN\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_SIGN\n")); if (neg_flags & NTLMSSP_NEGOTIATE_SEAL) - DEBUG(4, (" NTLMSSP_NEGOTIATE_SEAL\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_SEAL\n")); if (neg_flags & NTLMSSP_NEGOTIATE_LM_KEY) - DEBUG(4, (" NTLMSSP_NEGOTIATE_LM_KEY\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_LM_KEY\n")); if (neg_flags & NTLMSSP_NEGOTIATE_NETWARE) - DEBUG(4, (" NTLMSSP_NEGOTIATE_NETWARE\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_NETWARE\n")); if (neg_flags & NTLMSSP_NEGOTIATE_NTLM) - DEBUG(4, (" NTLMSSP_NEGOTIATE_NTLM\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_NTLM\n")); if (neg_flags & NTLMSSP_NEGOTIATE_DOMAIN_SUPPLIED) - DEBUG(4, (" NTLMSSP_NEGOTIATE_DOMAIN_SUPPLIED\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_DOMAIN_SUPPLIED\n")); if (neg_flags & NTLMSSP_NEGOTIATE_WORKSTATION_SUPPLIED) - DEBUG(4, (" NTLMSSP_NEGOTIATE_WORKSTATION_SUPPLIED\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_WORKSTATION_SUPPLIED\n")); if (neg_flags & NTLMSSP_NEGOTIATE_THIS_IS_LOCAL_CALL) - DEBUG(4, (" NTLMSSP_NEGOTIATE_THIS_IS_LOCAL_CALL\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_THIS_IS_LOCAL_CALL\n")); if (neg_flags & NTLMSSP_NEGOTIATE_ALWAYS_SIGN) - DEBUG(4, (" NTLMSSP_NEGOTIATE_ALWAYS_SIGN\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_ALWAYS_SIGN\n")); if (neg_flags & NTLMSSP_NEGOTIATE_NTLM2) - DEBUG(4, (" NTLMSSP_NEGOTIATE_NTLM2\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_NTLM2\n")); if (neg_flags & NTLMSSP_CHAL_TARGET_INFO) - DEBUG(4, (" NTLMSSP_CHAL_TARGET_INFO\n")); + DEBUGADD(4, (" NTLMSSP_CHAL_TARGET_INFO\n")); if (neg_flags & NTLMSSP_NEGOTIATE_128) - DEBUG(4, (" NTLMSSP_NEGOTIATE_128\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_128\n")); if (neg_flags & NTLMSSP_NEGOTIATE_KEY_EXCH) - DEBUG(4, (" NTLMSSP_NEGOTIATE_KEY_EXCH\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_KEY_EXCH\n")); } diff --git a/source/smbd/sesssetup.c b/source/smbd/sesssetup.c index a49982dcfe8..c37c655fd16 100644 --- a/source/smbd/sesssetup.c +++ b/source/smbd/sesssetup.c @@ -294,8 +294,6 @@ static int reply_spnego_negotiate(connection_struct *conn, return ERROR_NT(NT_STATUS_LOGON_FAILURE); } - DEBUG(3,("Got neg_flags=0x%08x\n", neg_flags)); - debug_ntlmssp_flags(neg_flags); if (ntlmssp_auth_context) { -- cgit From e3af3adac1a01842bc5242e68393196497a1d71c Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 31 Aug 2002 08:51:38 +0000 Subject: Add a dash of static. --- source/libsmb/clierror.c | 4 ++-- source/libsmb/nterr.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/libsmb/clierror.c b/source/libsmb/clierror.c index 591c04db22d..e1507c6048e 100644 --- a/source/libsmb/clierror.c +++ b/source/libsmb/clierror.c @@ -156,7 +156,7 @@ void cli_dos_error(struct cli_state *cli, uint8 *eclass, uint32 *ecode) /* Return a UNIX errno from a dos error class, error number tuple */ -int cli_errno_from_dos(uint8 eclass, uint32 num) +static int cli_errno_from_dos(uint8 eclass, uint32 num) { if (eclass == ERRDOS) { switch (num) { @@ -205,7 +205,7 @@ static struct { {NT_STATUS(0), 0} }; -int cli_errno_from_nt(NTSTATUS status) +static int cli_errno_from_nt(NTSTATUS status) { int i; DEBUG(10,("cli_errno_from_nt: 32 bit codes: code=%08x\n", NT_STATUS_V(status))); diff --git a/source/libsmb/nterr.c b/source/libsmb/nterr.c index e2da6318e1d..02fd53fc056 100644 --- a/source/libsmb/nterr.c +++ b/source/libsmb/nterr.c @@ -28,7 +28,7 @@ typedef const struct NTSTATUS nt_errcode; } nt_err_code_struct; -nt_err_code_struct nt_errs[] = +static nt_err_code_struct nt_errs[] = { { "NT_STATUS_OK", NT_STATUS_OK }, { "NT_STATUS_UNSUCCESSFUL", NT_STATUS_UNSUCCESSFUL }, -- cgit From d5c10e7dc76216db793319f9beb99dd12441e76b Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Sat, 31 Aug 2002 16:17:36 +0000 Subject: Convert M_DEBUG(0 to M_DEBUG(10 for non-error cases ... --- source/smbd/mangle_hash2.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/smbd/mangle_hash2.c b/source/smbd/mangle_hash2.c index 6b53cc72aa4..a0a3d51139d 100644 --- a/source/smbd/mangle_hash2.c +++ b/source/smbd/mangle_hash2.c @@ -200,7 +200,7 @@ static BOOL is_mangled_component(const char *name) { int len, i; - M_DEBUG(0,("is_mangled_component %s ?\n", name)); + M_DEBUG(10,("is_mangled_component %s ?\n", name)); /* check the length */ len = strlen(name); @@ -234,7 +234,7 @@ static BOOL is_mangled_component(const char *name) } } - M_DEBUG(0,("is_mangled %s -> yes\n", name)); + M_DEBUG(10,("is_mangled %s -> yes\n", name)); return True; } @@ -257,7 +257,7 @@ static BOOL is_mangled(const char *name) const char *p; const char *s; - M_DEBUG(0,("is_mangled %s ?\n", name)); + M_DEBUG(10,("is_mangled %s ?\n", name)); for (s=name; (p=strchr(s, '/')); s=p+1) { char *component = strndup(s, PTR_DIFF(p, s)); @@ -367,7 +367,7 @@ static BOOL check_cache(char *name) /* make sure that this is a mangled name from this cache */ if (!is_mangled(name)) { - M_DEBUG(0,("check_cache: %s -> not mangled\n", name)); + M_DEBUG(10,("check_cache: %s -> not mangled\n", name)); return False; } @@ -382,7 +382,7 @@ static BOOL check_cache(char *name) /* now look in the prefix cache for that hash */ prefix = cache_lookup(hash); if (!prefix) { - M_DEBUG(0,("check_cache: %s -> %08X -> not found\n", name, hash)); + M_DEBUG(10,("check_cache: %s -> %08X -> not found\n", name, hash)); return False; } @@ -395,10 +395,10 @@ static BOOL check_cache(char *name) } if (extension[0]) { - M_DEBUG(0,("check_cache: %s -> %s.%s\n", name, prefix, extension)); + M_DEBUG(10,("check_cache: %s -> %s.%s\n", name, prefix, extension)); slprintf(name, sizeof(fstring), "%s.%s", prefix, extension); } else { - M_DEBUG(0,("check_cache: %s -> %s\n", name, prefix)); + M_DEBUG(10,("check_cache: %s -> %s\n", name, prefix)); fstrcpy(name, prefix); } @@ -573,7 +573,7 @@ static void name_map(char *name, BOOL need83, BOOL cache83) cache_insert(name, prefix_len, hash); } - M_DEBUG(0,("name_map: %s -> %08X -> %s (cache=%d)\n", + M_DEBUG(10,("name_map: %s -> %08X -> %s (cache=%d)\n", name, hash, new_name, cache83)); /* and overwrite the old name */ -- cgit From 26bee60a419593a5afe4e48614f7f3fc414596a5 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sun, 1 Sep 2002 07:52:54 +0000 Subject: Fix segfault in net command --- source/utils/net_rpc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c index cb5350b3ed3..25ed337c1fa 100644 --- a/source/utils/net_rpc.c +++ b/source/utils/net_rpc.c @@ -2141,7 +2141,7 @@ BOOL net_rpc_check(unsigned flags) /* flags (i.e. server type) may depend on command */ if (!net_find_server(flags, &server_ip, &server_name)) - goto done; + return False; ZERO_STRUCT(cli); if (cli_initialise(&cli) == False) -- cgit From 58f912da47d18a6a548c50dc9d4298c6bec7ea0d Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sun, 1 Sep 2002 10:24:34 +0000 Subject: wrong way to handle things, bug found by kai --- source/lib/debug.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/source/lib/debug.c b/source/lib/debug.c index 65cac144ccc..e20f3298606 100644 --- a/source/lib/debug.c +++ b/source/lib/debug.c @@ -372,8 +372,7 @@ static void debug_dump_status(int level) parse the debug levels from smbcontrol. Example debug level parameter: printdrivers:7 ****************************************************************************/ -BOOL debug_parse_params(char **params, int *debuglevel_class, - BOOL *debuglevel_class_isset) +static BOOL debug_parse_params(char **params) { int i, ndx; char *class_name; @@ -386,8 +385,8 @@ BOOL debug_parse_params(char **params, int *debuglevel_class, * v.s. "all:10", this is the traditional way to set DEBUGLEVEL */ if (isdigit((int)params[0][0])) { - debuglevel_class[DBGC_ALL] = atoi(params[0]); - debuglevel_class_isset[DBGC_ALL] = True; + DEBUGLEVEL_CLASS[DBGC_ALL] = atoi(params[0]); + DEBUGLEVEL_CLASS_ISSET[DBGC_ALL] = True; i = 1; /* start processing at the next params */ } else @@ -398,8 +397,8 @@ BOOL debug_parse_params(char **params, int *debuglevel_class, if ((class_name=strtok(params[i],":")) && (class_level=strtok(NULL, "\0")) && ((ndx = debug_lookup_classname(class_name)) != -1)) { - debuglevel_class[ndx] = atoi(class_level); - debuglevel_class_isset[ndx] = True; + DEBUGLEVEL_CLASS[ndx] = atoi(class_level); + DEBUGLEVEL_CLASS_ISSET[ndx] = True; } else { DEBUG(0,("debug_parse_params: unrecognized debug class name or format [%s]\n", params[i])); return False; @@ -426,8 +425,7 @@ BOOL debug_parse_levels(const char *params_str) params = str_list_make(params_str, NULL); - if (debug_parse_params(params, DEBUGLEVEL_CLASS, - DEBUGLEVEL_CLASS_ISSET)) + if (debug_parse_params(params)) { debug_dump_status(5); str_list_free(¶ms); -- cgit From 62a60782533851b3380aa0db300fa16dfe6ca72e Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 2 Sep 2002 07:37:35 +0000 Subject: Implemented some more client side spoolss functions: - getprinterdataex(), setprinterdataex(), enumprinterdataex() Pass data type down to setprinterdata() fn instead of hardcoding REG_SZ --- source/rpc_client/cli_spoolss.c | 163 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 162 insertions(+), 1 deletion(-) diff --git a/source/rpc_client/cli_spoolss.c b/source/rpc_client/cli_spoolss.c index 7369e5008ad..cff1f1d0a90 100644 --- a/source/rpc_client/cli_spoolss.c +++ b/source/rpc_client/cli_spoolss.c @@ -1933,6 +1933,68 @@ WERROR cli_spoolss_getprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, return result; } +WERROR cli_spoolss_getprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, + uint32 offered, uint32 *needed, + POLICY_HND *hnd, char *keyname, + char *valuename, uint32 *data_type, + char **data, uint32 *data_size) +{ + prs_struct qbuf, rbuf; + SPOOL_Q_GETPRINTERDATAEX q; + SPOOL_R_GETPRINTERDATAEX r; + WERROR result = W_ERROR(ERRgeneral); + + ZERO_STRUCT(q); + ZERO_STRUCT(r); + + /* Initialise parse structures */ + + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); + + /* Initialise input parameters */ + + make_spoolss_q_getprinterdataex(&q, hnd, keyname, valuename, offered); + + /* Marshall data and send request */ + + if (!spoolss_io_q_getprinterdataex("", &q, &qbuf, 0) || + !rpc_api_pipe_req(cli, SPOOLSS_GETPRINTERDATAEX, &qbuf, &rbuf)) + goto done; + + /* Unmarshall response */ + + if (!spoolss_io_r_getprinterdataex("", &r, &rbuf, 0)) + goto done; + + result = r.status; + + if (needed) + *needed = r.needed; + + if (!W_ERROR_IS_OK(r.status)) + goto done; + + /* Return output parameters */ + + if (data_type) + *data_type = r.type; + + if (data) { + *data = (char *)talloc(mem_ctx, r.needed); + memcpy(*data, r.data, r.needed); + } + + if (data_size) + *data_size = r.needed; + + done: + prs_mem_free(&qbuf); + prs_mem_free(&rbuf); + + return result; +} + /* Set printer data */ WERROR cli_spoolss_setprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, @@ -1955,7 +2017,7 @@ WERROR cli_spoolss_setprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Initialise input parameters */ - make_spoolss_q_setprinterdata(&q, hnd, value, data, data_size); + make_spoolss_q_setprinterdata(&q, hnd, value, data_type, data, data_size); /* Marshall data and send request */ @@ -1980,6 +2042,51 @@ WERROR cli_spoolss_setprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, return result; } +WERROR cli_spoolss_setprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, + POLICY_HND *hnd, char * key, char *value, + uint32 data_type, char *data, + uint32 data_size) +{ + prs_struct qbuf, rbuf; + SPOOL_Q_SETPRINTERDATAEX q; + SPOOL_R_SETPRINTERDATAEX r; + WERROR result = W_ERROR(ERRgeneral); + + ZERO_STRUCT(q); + ZERO_STRUCT(r); + + /* Initialise parse structures */ + + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); + + /* Initialise input parameters */ + + make_spoolss_q_setprinterdataex(&q, hnd, key, value, data_type, data, data_size); + + /* Marshall data and send request */ + + if (!spoolss_io_q_setprinterdataex("", &q, &qbuf, 0) || + !rpc_api_pipe_req(cli, SPOOLSS_SETPRINTERDATAEX, &qbuf, &rbuf)) + goto done; + + /* Unmarshall response */ + + if (!spoolss_io_r_setprinterdataex("", &r, &rbuf, 0)) + goto done; + + result = r.status; + + if (!W_ERROR_IS_OK(r.status)) + goto done; + + done: + prs_mem_free(&qbuf); + prs_mem_free(&rbuf); + + return result; +} + /* Enum printer data */ WERROR cli_spoolss_enumprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, @@ -2055,6 +2162,60 @@ WERROR cli_spoolss_enumprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, return result; } +WERROR cli_spoolss_enumprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, + uint32 offered, uint32 *needed, + POLICY_HND *hnd, char *key, + uint32 *returned, PRINTER_ENUM_VALUES **values) +{ + prs_struct qbuf, rbuf; + SPOOL_Q_ENUMPRINTERDATAEX q; + SPOOL_R_ENUMPRINTERDATAEX r; + WERROR result = W_ERROR(ERRgeneral); + + ZERO_STRUCT(q); + ZERO_STRUCT(r); + + /* Initialise parse structures */ + + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); + + /* Initialise input parameters */ + + make_spoolss_q_enumprinterdataex(&q, hnd, key, offered); + + /* Marshall data and send request */ + + if (!spoolss_io_q_enumprinterdataex("", &q, &qbuf, 0) || + !rpc_api_pipe_req(cli, SPOOLSS_ENUMPRINTERDATAEX, &qbuf, &rbuf)) + goto done; + + /* Unmarshall response */ + + if (!spoolss_io_r_enumprinterdataex("", &r, &rbuf, 0)) + goto done; + + result = r.status; + + if (needed) + *needed = r.needed; + + if (!W_ERROR_IS_OK(r.status)) + goto done; + + /* Return data */ + + *returned = r.returned; + + /* TODO: figure out a nice way to return data */ + + done: + prs_mem_free(&qbuf); + prs_mem_free(&rbuf); + + return result; +} + /* Write data to printer */ WERROR cli_spoolss_writeprinter(struct cli_state *cli, TALLOC_CTX *mem_ctx, -- cgit From 6a1953f2431cc848abf210bdecd7080738991296 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 2 Sep 2002 07:41:12 +0000 Subject: Implemented some more client side spoolss functions: - getprinterdataex(), setprinterdataex(), enumprinterdataex() Pass data type down to setprinterdata() fn instead of hardcoding REG_SZ. Did some trickyness to get enumprinterdataex replies unmarshalled properly. The code seems to have been written to require the number of entries returned before unpacking said entries. Skip to the end of the response and read the number of entries then jump back and process the printer data. --- source/rpc_parse/parse_spoolss.c | 103 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 96 insertions(+), 7 deletions(-) diff --git a/source/rpc_parse/parse_spoolss.c b/source/rpc_parse/parse_spoolss.c index b8762b35e2c..db3ea5046a9 100644 --- a/source/rpc_parse/parse_spoolss.c +++ b/source/rpc_parse/parse_spoolss.c @@ -1211,6 +1211,26 @@ BOOL make_spoolss_q_getprinterdata(SPOOL_Q_GETPRINTERDATA *q_u, return True; } +/******************************************************************* + * make a structure. + ********************************************************************/ + +BOOL make_spoolss_q_getprinterdataex(SPOOL_Q_GETPRINTERDATAEX *q_u, + const POLICY_HND *handle, + char *keyname, char *valuename, uint32 size) +{ + if (q_u == NULL) return False; + + DEBUG(5,("make_spoolss_q_getprinterdataex\n")); + + q_u->handle = *handle; + init_unistr2(&q_u->valuename, valuename, strlen(valuename) + 1); + init_unistr2(&q_u->keyname, keyname, strlen(keyname) + 1); + q_u->size = size; + + return True; +} + /******************************************************************* * read a structure. * called from spoolss_q_getprinterdata (srv_spoolss.c) @@ -1344,7 +1364,7 @@ BOOL spoolss_io_r_getprinterdata(char *desc, SPOOL_R_GETPRINTERDATA *r_u, prs_st if (UNMARSHALLING(ps) && r_u->size) { r_u->data = prs_alloc_mem(ps, r_u->size); - if(r_u->data) + if(!r_u->data) return False; } @@ -6065,13 +6085,27 @@ BOOL make_spoolss_q_enumprinterdata(SPOOL_Q_ENUMPRINTERDATA *q_u, return True; } +/******************************************************************* +********************************************************************/ + +BOOL make_spoolss_q_enumprinterdataex(SPOOL_Q_ENUMPRINTERDATAEX *q_u, + const POLICY_HND *hnd, char *key, + uint32 size) +{ + memcpy(&q_u->handle, hnd, sizeof(q_u->handle)); + init_unistr2(&q_u->key, key, strlen(key)+1); + q_u->size = size; + + return True; +} + /******************************************************************* ********************************************************************/ BOOL make_spoolss_q_setprinterdata(SPOOL_Q_SETPRINTERDATA *q_u, const POLICY_HND *hnd, - char* value, char* data, uint32 data_size) + char* value, uint32 data_type, char* data, uint32 data_size) { memcpy(&q_u->handle, hnd, sizeof(q_u->handle)); - q_u->type = REG_SZ; + q_u->type = data_type; init_unistr2(&q_u->value, value, strlen(value)+1); q_u->max_len = q_u->real_len = data_size; @@ -6079,6 +6113,24 @@ BOOL make_spoolss_q_setprinterdata(SPOOL_Q_SETPRINTERDATA *q_u, const POLICY_HND return True; } + +/******************************************************************* +********************************************************************/ +BOOL make_spoolss_q_setprinterdataex(SPOOL_Q_SETPRINTERDATAEX *q_u, const POLICY_HND *hnd, + char *key, char* value, uint32 data_type, char* data, + uint32 data_size) +{ + memcpy(&q_u->handle, hnd, sizeof(q_u->handle)); + q_u->type = data_type; + init_unistr2(&q_u->value, value, strlen(value)+1); + init_unistr2(&q_u->key, key, strlen(key)+1); + + q_u->max_len = q_u->real_len = data_size; + q_u->data = data; + + return True; +} + /******************************************************************* ********************************************************************/ @@ -6863,6 +6915,12 @@ BOOL spoolss_io_r_getprinterdataex(char *desc, SPOOL_R_GETPRINTERDATAEX *r_u, pr if (!prs_uint32("size", ps, depth, &r_u->size)) return False; + if (UNMARSHALLING(ps) && r_u->size) { + r_u->data = prs_alloc_mem(ps, r_u->size); + if(!r_u->data) + return False; + } + if (!prs_uint8s(False,"data", ps, depth, r_u->data, r_u->size)) return False; @@ -7083,9 +7141,6 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, prs_debug(ps, depth, desc, "spoolss_io_printer_enum_values_ctr"); depth++; - if (!prs_uint32("size", ps, depth, &ctr->size)) - return False; - /* * offset data begins at 20 bytes per structure * size_of_array. * Don't forget the uint32 at the beginning @@ -7095,6 +7150,13 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, /* first loop to write basic enum_value information */ + if (UNMARSHALLING(ps)) { + ctr->values = (PRINTER_ENUM_VALUES *)prs_alloc_mem( + ps, ctr->size_of_array * sizeof(PRINTER_ENUM_VALUES)); + if (!ctr->values) + return False; + } + for (i=0; isize_of_array; i++) { valuename_offset = current_offset; @@ -7131,6 +7193,13 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, if (!prs_unistr("valuename", ps, depth, &ctr->values[i].valuename)) return False; + if (UNMARSHALLING(ps)) { + ctr->values[i].data = (uint8 *)prs_alloc_mem( + ps, ctr->values[i].data_len); + if (!ctr->values[i].data) + return False; + } + if (!prs_uint8s(False, "data", ps, depth, ctr->values[i].data, ctr->values[i].data_len)) return False; @@ -7148,15 +7217,21 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, BOOL spoolss_io_r_enumprinterdataex(char *desc, SPOOL_R_ENUMPRINTERDATAEX *r_u, prs_struct *ps, int depth) { + int data_offset, end_offset; prs_debug(ps, depth, desc, "spoolss_io_r_enumprinterdataex"); depth++; if(!prs_align(ps)) return False; - if (!spoolss_io_printer_enum_values_ctr("", ps, &r_u->ctr, depth )) + if (!prs_uint32("size", ps, depth, &r_u->ctr.size)) return False; + data_offset = prs_offset(ps); + + if (!prs_set_offset(ps, data_offset + r_u->ctr.size)) + return False; + if(!prs_align(ps)) return False; @@ -7169,6 +7244,20 @@ BOOL spoolss_io_r_enumprinterdataex(char *desc, SPOOL_R_ENUMPRINTERDATAEX *r_u, if(!prs_werror("status", ps, depth, &r_u->status)) return False; + r_u->ctr.size_of_array = r_u->returned; + + end_offset = prs_offset(ps); + + if (!prs_set_offset(ps, data_offset)) + return False; + + if (r_u->ctr.size) + if (!spoolss_io_printer_enum_values_ctr("", ps, &r_u->ctr, depth )) + return False; + + if (!prs_set_offset(ps, end_offset)) + return False; + return True; } -- cgit From 63e59b0b737a1cd4ccc588b27e86be8262296052 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 2 Sep 2002 07:42:39 +0000 Subject: Fix transposed args in open_pipe_creds() function. --- source/python/py_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/python/py_common.c b/source/python/py_common.c index a65206e0223..6247bf63717 100644 --- a/source/python/py_common.c +++ b/source/python/py_common.c @@ -211,7 +211,7 @@ struct cli_state *open_pipe_creds(char *server, PyObject *creds, /* Extract credentials from the python dictionary */ - if (!py_parse_creds(creds, &username, &password, &domain, errstr)) + if (!py_parse_creds(creds, &username, &domain, &password, errstr)) return NULL; /* Now try to connect */ -- cgit From ac84b220aa2910abec309f2dc048adb84f609786 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 2 Sep 2002 07:44:00 +0000 Subject: Added methods for getprinterdataex, setprinterdataex and enumprinterdataex. --- source/python/py_spoolss.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source/python/py_spoolss.c b/source/python/py_spoolss.c index 95be77de55b..4451cd87b2a 100644 --- a/source/python/py_spoolss.c +++ b/source/python/py_spoolss.c @@ -281,6 +281,18 @@ Set the form given by the dictionary argument."}, METH_VARARGS | METH_KEYWORDS, "Delete printer data." }, + { "getprinterdataex", (PyCFunction)spoolss_hnd_getprinterdataex, + METH_VARARGS | METH_KEYWORDS, + "Get printer data." }, + + { "setprinterdataex", (PyCFunction)spoolss_hnd_setprinterdataex, + METH_VARARGS | METH_KEYWORDS, + "Set printer data." }, + + { "enumprinterdataex", (PyCFunction)spoolss_hnd_enumprinterdataex, + METH_VARARGS | METH_KEYWORDS, + "Enumerate printer data." }, + { "deleteprinterdataex", (PyCFunction)spoolss_hnd_deleteprinterdataex, METH_VARARGS | METH_KEYWORDS, "Delete printer data." }, -- cgit From 88a97d2174eee884de52e848d30bc2c459bf28bb Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 2 Sep 2002 07:44:48 +0000 Subject: make proto --- source/python/py_spoolss_proto.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/python/py_spoolss_proto.h b/source/python/py_spoolss_proto.h index 5b68ef815af..b5c6a3239ed 100644 --- a/source/python/py_spoolss_proto.h +++ b/source/python/py_spoolss_proto.h @@ -91,6 +91,9 @@ PyObject *spoolss_hnd_getprinterdata(PyObject *self, PyObject *args, PyObject *k PyObject *spoolss_hnd_setprinterdata(PyObject *self, PyObject *args, PyObject *kw); PyObject *spoolss_hnd_enumprinterdata(PyObject *self, PyObject *args, PyObject *kw); PyObject *spoolss_hnd_deleteprinterdata(PyObject *self, PyObject *args, PyObject *kw); +PyObject *spoolss_hnd_getprinterdataex(PyObject *self, PyObject *args, PyObject *kw); +PyObject *spoolss_hnd_setprinterdataex(PyObject *self, PyObject *args, PyObject *kw); +PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject *kw); PyObject *spoolss_hnd_deleteprinterdataex(PyObject *self, PyObject *args, PyObject *kw); /* The following definitions come from python/py_spoolss_printers.c */ -- cgit From fb0f4f7bfe81923adfe71549973da2be57f0e71f Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 2 Sep 2002 07:47:42 +0000 Subject: Add a 'key' field to printer data dictionary. Implemented getprinterdataex, setprinterdataex and enumprinterdataex (doesn't quite work yet). --- source/python/py_spoolss_printerdata.c | 152 +++++++++++++++++++++++++++++---- 1 file changed, 134 insertions(+), 18 deletions(-) diff --git a/source/python/py_spoolss_printerdata.c b/source/python/py_spoolss_printerdata.c index e1e43fa7366..ff8b9356799 100644 --- a/source/python/py_spoolss_printerdata.c +++ b/source/python/py_spoolss_printerdata.c @@ -20,14 +20,15 @@ #include "python/py_spoolss.h" -static BOOL py_from_printerdata(PyObject **dict, char *value, +static BOOL py_from_printerdata(PyObject **dict, char *key, char *value, uint32 data_type, char *data, uint32 data_size) { *dict = PyDict_New(); - PyDict_SetItemString(*dict, "type", Py_BuildValue("i", data_type)); + PyDict_SetItemString(*dict, "key", Py_BuildValue("s", key ? key : "")); PyDict_SetItemString(*dict, "value", Py_BuildValue("s", value)); + PyDict_SetItemString(*dict, "type", Py_BuildValue("i", data_type)); PyDict_SetItemString(*dict, "data", Py_BuildValue("s#", data, data_size)); @@ -35,25 +36,26 @@ static BOOL py_from_printerdata(PyObject **dict, char *value, return True; } -static BOOL py_to_printerdata(char **value, uint32 *data_type, +static BOOL py_to_printerdata(char **key, char **value, uint32 *data_type, char **data, uint32 *data_size, PyObject *dict) { PyObject *obj; - if ((obj = PyDict_GetItemString(dict, "type"))) { + if ((obj = PyDict_GetItemString(dict, "key"))) { - if (!PyInt_Check(obj)) { + if (!PyString_Check(obj)) { PyErr_SetString(spoolss_error, - "type not an integer"); + "key not a string"); return False; } - *data_type = PyInt_AsLong(obj); - } else { - PyErr_SetString(spoolss_error, "no type present"); - return False; - } + *key = PyString_AsString(obj); + + if (!key[0]) + *key = NULL; + } else + *key = NULL; if ((obj = PyDict_GetItemString(dict, "value"))) { @@ -69,6 +71,20 @@ static BOOL py_to_printerdata(char **value, uint32 *data_type, return False; } + if ((obj = PyDict_GetItemString(dict, "type"))) { + + if (!PyInt_Check(obj)) { + PyErr_SetString(spoolss_error, + "type not an integer"); + return False; + } + + *data_type = PyInt_AsLong(obj); + } else { + PyErr_SetString(spoolss_error, "no type present"); + return False; + } + if ((obj = PyDict_GetItemString(dict, "data"))) { if (!PyString_Check(obj)) { @@ -118,7 +134,7 @@ PyObject *spoolss_hnd_getprinterdata(PyObject *self, PyObject *args, PyObject *k return NULL; } - py_from_printerdata(&result, value, data_type, data, needed); + py_from_printerdata(&result, NULL, value, data_type, data, needed); return result; } @@ -128,7 +144,7 @@ PyObject *spoolss_hnd_setprinterdata(PyObject *self, PyObject *args, PyObject *k spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { "data", NULL }; PyObject *py_data; - char *value, *data; + char *key, *value, *data; uint32 data_size, data_type; WERROR werror; @@ -136,7 +152,7 @@ PyObject *spoolss_hnd_setprinterdata(PyObject *self, PyObject *args, PyObject *k args, kw, "O!", kwlist, &PyDict_Type, &py_data)) return NULL; - if (!py_to_printerdata(&value, &data_type, &data, &data_size, py_data)) + if (!py_to_printerdata(&key, &value, &data_type, &data, &data_size, py_data)) return NULL; /* Call rpc function */ @@ -189,8 +205,8 @@ PyObject *spoolss_hnd_enumprinterdata(PyObject *self, PyObject *args, PyObject * value_needed, data_needed, NULL, NULL, &value, &data_type, &data, &data_size); - if (py_from_printerdata(&obj, value, data_type, data, - data_size)) + if (py_from_printerdata( + &obj, NULL, value, data_type, data, data_size)) PyDict_SetItemString(result, value, obj); ndx++; @@ -225,10 +241,110 @@ PyObject *spoolss_hnd_deleteprinterdata(PyObject *self, PyObject *args, PyObject return Py_None; } -PyObject *spoolss_hnd_deleteprinterdataex(PyObject *self, PyObject *args, PyObject *kw) +PyObject *spoolss_hnd_getprinterdataex(PyObject *self, PyObject *args, PyObject *kw) +{ + spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; + static char *kwlist[] = { "key", "value", NULL }; + char *key, *value; + WERROR werror; + uint32 needed, data_type, data_size; + char *data; + PyObject *result; + + /* Parse parameters */ + + if (!PyArg_ParseTupleAndKeywords(args, kw, "ss", kwlist, &key, &value)) + return NULL; + + /* Call rpc function */ + + werror = cli_spoolss_getprinterdataex( + hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key, + value, &data_type, &data, &data_size); + + if (W_ERROR_V(werror) == ERRmoredata) + werror = cli_spoolss_getprinterdataex( + hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key, + value, &data_type, &data, &data_size); + + if (!W_ERROR_IS_OK(werror)) { + PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); + return NULL; + } + + py_from_printerdata(&result, key, value, data_type, data, needed); + + return result; +} + +PyObject *spoolss_hnd_setprinterdataex(PyObject *self, PyObject *args, PyObject *kw) { - /* Not supported by Samba server */ + spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; + static char *kwlist[] = { "data", NULL }; + PyObject *py_data; + char *key, *value, *data; + uint32 data_size, data_type; + WERROR werror; + + if (!PyArg_ParseTupleAndKeywords( + args, kw, "O!", kwlist, &PyDict_Type, &py_data)) + return NULL; + + if (!py_to_printerdata(&key, &value, &data_type, &data, &data_size, py_data)) + return NULL; + /* Call rpc function */ + + werror = cli_spoolss_setprinterdataex( + hnd->cli, hnd->mem_ctx, &hnd->pol, key, value, data_type, + data, data_size); + + if (!W_ERROR_IS_OK(werror)) { + PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject *kw) +{ + spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; + static char *kwlist[] = { NULL }; + uint32 needed; + char *key, *value, *data; + WERROR werror; + PyObject *result; + + if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &key)) + return NULL; + + /* Get max buffer sizes for value and data */ + + werror = cli_spoolss_enumprinterdataex( + hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key); + + if (W_ERROR_V(werror) == ERRmoredata) + werror = cli_spoolss_enumprinterdataex( + hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key); + + if (!W_ERROR_IS_OK(werror)) { + PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); + return NULL; + } + + /* Iterate over all printerdata */ + + result = PyDict_New(); + + + + return result; +} + +PyObject *spoolss_hnd_deleteprinterdataex(PyObject *self, PyObject *args, PyObject *kw) +{ PyErr_SetString(spoolss_error, "Not implemented"); return NULL; } -- cgit From f435bf0095694a283db47e33c9eb1b5b6df13d03 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 2 Sep 2002 09:02:40 +0000 Subject: small typo, kai is german :-) --- source/include/sam.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/include/sam.h b/source/include/sam.h index a2d980c2e3e..1fca8ec4f6c 100644 --- a/source/include/sam.h +++ b/source/include/sam.h @@ -107,7 +107,7 @@ typedef struct sam_group_handle { char *name; char *comment; DOM_SID sid; - int32 flags; /* specifies if the group is a lokal group or a global group */ + int32 flags; /* specifies if the group is a local group or a global group */ uint32 num_members; PRIVILEGE_SET privileges; } private; -- cgit From 8fb4534212e49d2f64f45cbeb481b9f4a69f3158 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 2 Sep 2002 10:58:03 +0000 Subject: Fix typo - Thanks Kai --- source/lib/debug.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/lib/debug.c b/source/lib/debug.c index e20f3298606..c8a4721bce2 100644 --- a/source/lib/debug.c +++ b/source/lib/debug.c @@ -153,7 +153,7 @@ static const char *default_classname_table[] = { "rpc_srv", /* DBGC_RPC_SRV */ "rpc_cli", /* DBGC_RPC_CLI */ "passdb", /* DBGC_PASSDB */ - "sam" /* DBGC_SAM */ + "sam", /* DBGC_SAM */ "auth", /* DBGC_AUTH */ "winbind", /* DBGC_WINBIND */ NULL -- cgit From f673eac06ab4af97a4d28427f7444696402ae680 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 2 Sep 2002 13:47:51 +0000 Subject: usrmgr expects unicode as ProductType. This looks a bit like a hack ;-) Volker --- source/rpc_server/srv_reg_nt.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/source/rpc_server/srv_reg_nt.c b/source/rpc_server/srv_reg_nt.c index cd9596d2a72..f96de7e5339 100644 --- a/source/rpc_server/srv_reg_nt.c +++ b/source/rpc_server/srv_reg_nt.c @@ -342,6 +342,9 @@ NTSTATUS _reg_info(pipes_struct *p, REG_Q_INFO *q_u, REG_R_INFO *r_u) { NTSTATUS status = NT_STATUS_NO_SUCH_FILE; fstring name; + char *value_ascii = ""; + fstring value; + int value_length; REGISTRY_KEY *regkey = find_regkey_index_by_hnd( p, &q_u->pol ); REGISTRY_VALUE *val = NULL; REGISTRY_VALUE emptyval; @@ -380,15 +383,20 @@ NTSTATUS _reg_info(pipes_struct *p, REG_Q_INFO *q_u, REG_R_INFO *r_u) switch (lp_server_role()) { case ROLE_DOMAIN_PDC: case ROLE_DOMAIN_BDC: - regval_ctr_addvalue( ®vals, REGSTR_PRODUCTTYPE, REG_SZ, REG_PT_LANMANNT, strlen(REG_PT_LANMANNT)+1 ); + value_ascii = REG_PT_LANMANNT; break; case ROLE_STANDALONE: - regval_ctr_addvalue( ®vals, REGSTR_PRODUCTTYPE, REG_SZ, REG_PT_SERVERNT, strlen(REG_PT_SERVERNT)+1 ); + value_ascii = REG_PT_SERVERNT; break; case ROLE_DOMAIN_MEMBER: - regval_ctr_addvalue( ®vals, REGSTR_PRODUCTTYPE, REG_SZ, REG_PT_WINNT, strlen(REG_PT_WINNT)+1 ); + value_ascii = REG_PT_WINNT; break; } + value_length = push_ucs2(value, value, value_ascii, + sizeof(value), + STR_TERMINATE|STR_NOALIGN); + regval_ctr_addvalue(®vals, REGSTR_PRODUCTTYPE, REG_SZ, + value, value_length); val = dup_registry_value( regval_ctr_specific_value( ®vals, 0 ) ); -- cgit From 1f629aa54ea3733c356c21f9f707b7f6075f6429 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 00:26:19 +0000 Subject: Return data from enumprinterdataex by deep copying on passed in tdb context. --- source/rpc_client/cli_spoolss.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/source/rpc_client/cli_spoolss.c b/source/rpc_client/cli_spoolss.c index cff1f1d0a90..d2492dc53b6 100644 --- a/source/rpc_client/cli_spoolss.c +++ b/source/rpc_client/cli_spoolss.c @@ -2171,6 +2171,7 @@ WERROR cli_spoolss_enumprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, SPOOL_Q_ENUMPRINTERDATAEX q; SPOOL_R_ENUMPRINTERDATAEX r; WERROR result = W_ERROR(ERRgeneral); + int i; ZERO_STRUCT(q); ZERO_STRUCT(r); @@ -2207,7 +2208,22 @@ WERROR cli_spoolss_enumprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, *returned = r.returned; - /* TODO: figure out a nice way to return data */ + /* Again, we have to deep copy the results on the passed in + tdb context as they will disappear after the prs_free at + the end of this function. */ + + *values = talloc(mem_ctx, sizeof(PRINTER_ENUM_VALUES) * r.returned); + + for (i = 0; i < r.returned; i++) { + PRINTER_ENUM_VALUES *v = &r.ctr.values[i]; + + (*values)[i].valuename.buffer = talloc(mem_ctx, v->value_len * 2); + unistrcpy((*values)[i].valuename.buffer, v->valuename.buffer); + (*values)[i].type = v->type; + (*values)[i].data = talloc(mem_ctx, v->data_len); + memcpy((*values)[i].data, v->data, v->data_len); + (*values)[i].data_len = v->data_len; + } done: prs_mem_free(&qbuf); -- cgit From 348b6778d8b9e42f27da51652c7198cc42048059 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 00:40:06 +0000 Subject: Return dictionary of printerdata in enumprinterdataex. --- source/python/py_spoolss_printerdata.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/source/python/py_spoolss_printerdata.c b/source/python/py_spoolss_printerdata.c index ff8b9356799..7f2c0bfe880 100644 --- a/source/python/py_spoolss_printerdata.c +++ b/source/python/py_spoolss_printerdata.c @@ -312,10 +312,11 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject { spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { NULL }; - uint32 needed; - char *key, *value, *data; + uint32 needed, returned, i; + char *key; WERROR werror; PyObject *result; + PRINTER_ENUM_VALUES *values; if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &key)) return NULL; @@ -323,11 +324,13 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject /* Get max buffer sizes for value and data */ werror = cli_spoolss_enumprinterdataex( - hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key); + hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key, + &returned, &values); if (W_ERROR_V(werror) == ERRmoredata) werror = cli_spoolss_enumprinterdataex( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key); + hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key, + &returned, &values); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); @@ -338,8 +341,18 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject result = PyDict_New(); - + for (i = 0; i < returned; i++) { + PyObject *item; + fstring value = ""; + rpcstr_pull(value, values[i].valuename.buffer, sizeof(value), -1, STR_TERMINATE); + item = PyDict_New(); + py_from_printerdata(&item, key, value, values[i].type, values[i].data, + values[i].data_len); + + PyDict_SetItemString(result, value, item); + } + return result; } -- cgit From a89fe79e222b36eda123ccdbca96badb7714776e Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 01:10:21 +0000 Subject: Implement deleteprinterdataex --- source/python/py_spoolss_printerdata.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/source/python/py_spoolss_printerdata.c b/source/python/py_spoolss_printerdata.c index 7f2c0bfe880..0c62baab725 100644 --- a/source/python/py_spoolss_printerdata.c +++ b/source/python/py_spoolss_printerdata.c @@ -358,6 +358,26 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject PyObject *spoolss_hnd_deleteprinterdataex(PyObject *self, PyObject *args, PyObject *kw) { - PyErr_SetString(spoolss_error, "Not implemented"); - return NULL; + spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; + static char *kwlist[] = { "key", "value", NULL }; + char *key, *value; + WERROR werror; + + /* Parse parameters */ + + if (!PyArg_ParseTupleAndKeywords(args, kw, "ss", kwlist, &key, &value)) + return NULL; + + /* Call rpc function */ + + werror = cli_spoolss_deleteprinterdataex( + hnd->cli, hnd->mem_ctx, &hnd->pol, key, value); + + if (!W_ERROR_IS_OK(werror)) { + PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; } -- cgit From 519d1589a9358d8c2de01bd23159e3d552554131 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 01:30:26 +0000 Subject: Ignore *.pyc files. --- source/python/.cvsignore | 1 + 1 file changed, 1 insertion(+) diff --git a/source/python/.cvsignore b/source/python/.cvsignore index 659ddbfdf95..8ce381cd39f 100644 --- a/source/python/.cvsignore +++ b/source/python/.cvsignore @@ -1 +1,2 @@ setup.py +*.pyc \ No newline at end of file -- cgit From 6f78c4181449a995b9d5b2955981a20e4fdcc829 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 01:32:05 +0000 Subject: Rewrote to use gtkdictbrowser. --- source/python/gtdbtool | 263 ++----------------------------------------------- 1 file changed, 10 insertions(+), 253 deletions(-) diff --git a/source/python/gtdbtool b/source/python/gtdbtool index 792cdeecc0b..d5c76fa318f 100755 --- a/source/python/gtdbtool +++ b/source/python/gtdbtool @@ -1,242 +1,10 @@ #!/usr/bin/env python -from gtk import * import sys +from gtkdictbrowser import GtkDictBrowser +import gtk import tdb import string -import re - -# -# The gdbtool user interface. The design here is to keep all the gtk stuff -# separate from the tdb stuff so all the user interface magic is stored -# here. -# - -class gtdbtool: - - # Initialise the user interface. A dictionary argument is passed - # in which is the dictionary to display keys and values on the left - # hand and right hand side of the user interface respectively.""" - - def __init__(self, dict): - self.dict = dict - self.value_display_fns = [] - self.filter_regex = "" - - # Create and configure user interface widgets. A string argument is - # used to set the window title. - - def build_ui(self, title): - win = GtkWindow() - win.set_title(title) - - win.connect("destroy", mainquit) - - hpaned = GtkHPaned() - win.add(hpaned) - hpaned.set_border_width(5) - hpaned.show() - - vbox = GtkVBox() - hpaned.add1(vbox) - vbox.show() - - scrolled_win = GtkScrolledWindow() - scrolled_win.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC) - vbox.pack_start(scrolled_win) - scrolled_win.show() - - hbox = GtkHBox() - vbox.pack_end(hbox, expand = 0, padding = 5) - hbox.show() - - label = GtkLabel("Filter:") - hbox.pack_start(label, expand = 0, padding = 5) - label.show() - - self.entry = GtkEntry() - hbox.pack_end(self.entry, padding = 5) - self.entry.show() - - self.entry.connect("activate", self.filter_activated) - - self.list = GtkList() - self.list.set_selection_mode(SELECTION_MULTIPLE) - self.list.set_selection_mode(SELECTION_BROWSE) - scrolled_win.add_with_viewport(self.list) - self.list.show() - - self.list.connect("select_child", self.key_selected) - - scrolled_win = GtkScrolledWindow() - scrolled_win.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC) - hpaned.add2(scrolled_win) - scrolled_win.set_usize(500,400) - scrolled_win.show() - - self.text = GtkText() - self.text.set_editable(FALSE) - scrolled_win.add_with_viewport(self.text) - self.text.show() - - self.text.connect("event", self.event_handler) - - self.menu = GtkMenu() - self.menu.show() - - self.font = load_font("fixed") - - self.update_keylist() - - win.show() - - # Add a key to the left hand side of the user interface - - def add_key(self, key): - display_key = self.display_key(key) - list_item = GtkListItem(display_key) - list_item.set_data("raw_key", key) # Store raw key in item data - self.list.add(list_item) - list_item.show() - - # Event handler registered by build_ui() - - def event_handler(self, event, menu): - return FALSE - - # Set the text to appear in the right hand side of the user interface - - def set_value_text(self, text): - self.text.delete_text(0, self.text.get_length()) - - # The text widget has trouble inserting text containing NULL - # characters. - - text = string.replace(text, "\x00", ".") - - self.text.insert(self.font, None, None, text) - - # This function is called when a key is selected in the left hand side - # of the user interface. - - def key_selected(self, list, list_item): - key = list_item.children()[0].get() - - # Look for a match in the value display function list - - text = t[list_item.get_data("raw_key")] - - for entry in self.value_display_fns: - if re.match(entry[0], key): - text = entry[1](text) - break - - self.set_value_text(text) - - # Refresh the key list by removing all items and re-inserting them. - # Items are only inserted if they pass through the filter regexp. - - def update_keylist(self): - self.list.remove_items(self.list.children()) - self.set_value_text("") - for k in self.dict.keys(): - if re.match(self.filter_regex, k): - self.add_key(k) - - # Invoked when the user hits return in the filter text entry widget. - - def filter_activated(self, entry): - self.filter_regex = entry.get_text() - self.update_keylist() - - # - # Public methods - # - - # Set a function that translates between how keys look in the user - # interface (displayed keys) versus how they are represented in the tdb - # (raw keys). - - def set_display_key_fn(self, fn): - self.display_key = fn - - # Register a value display function for a key. The first argument is a - # regex that matches key values, and the second argument is a function - # to call to convert the raw value data to a string to display in the - # right hand side of the UI. - - def register_display_value_fn(self, key_regexp, fn): - self.value_display_fns.append((key_regexp, fn)) - - def display_value_hex(self, value): - return "foo" - -def convert_to_hex(data): - """Return a hex dump of a string as a string. - - The output produced is in the standard 16 characters per line hex + - ascii format: - - 00000000: 40 00 00 00 00 00 00 00 40 00 00 00 01 00 04 80 @....... @....... - 00000010: 01 01 00 00 00 00 00 01 00 00 00 00 ........ .... - """ - - pos = 0 # Position in data - line = 0 # Line of data - - hex = "" # Hex display - ascii = "" # ASCII display - - result = "" - - while pos < len(data): - - # Start with header - - if pos % 16 == 0: - hex = "%08x: " % (line * 16) - ascii = "" - - # Add character - - hex = hex + "%02x " % (ord(data[pos])) - - if ord(data[pos]) < 32 or ord(data[pos]) > 176: - ascii = ascii + '.' - else: - ascii = ascii + data[pos] - - pos = pos + 1 - - # Add separator if half way - - if pos % 16 == 8: - hex = hex + " " - ascii = ascii + " " - - # End of line - - if pos % 16 == 0: - result = result + "%s %s\n" % (hex, ascii) - line = line + 1 - - # Leftover bits - - if pos % 16 != 0: - - # Pad hex string - - for i in range(0, (16 - (pos % 16))): - hex = hex + " " - - # Half way separator - - if (pos % 16) < 8: - hex = hex + " " - - result = result + "%s %s\n" % (hex, ascii) - - return result # Open handle on tdb @@ -250,33 +18,22 @@ except tdb.error, t: print "gtdbtool: error opening %s: %s" % (sys.argv[1], t) sys.exit(1) -# Create user interface +# Create interface -w = gtdbtool(t) - -# Set up a key display function. A lot of keys have \x00 appended to the -# end which mucks up gtk. +db = GtkDictBrowser(t) def display_key_x00(key): + """Remove \x00 from all keys as they mucks up GTK.""" return string.replace(key, "\x00", "") -w.set_display_key_fn(display_key_x00) - -def display_value_hex(value): - return value; - -w.register_display_value_fn("DRIVERS/", convert_to_hex) -w.register_display_value_fn("SECDESC/", convert_to_hex) -w.register_display_value_fn("PRINTERS/", convert_to_hex) - -# Show user interface +db.register_get_key_text_fn(display_key_x00) -w.build_ui("gtdbtool: %s" % sys.argv[1]) +db.build_ui('gtdbtool') -# Override Python's handling of ctrl-c so we can break out of the gui -# from the command line. +# Override Python's handling of ctrl-c so we can break out of the +# gui from the command line. import signal signal.signal(signal.SIGINT, signal.SIG_DFL) -mainloop() +gtk.mainloop() -- cgit From a3e52367c961070ce80ac3d4bba763ad9ec1007c Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 01:48:24 +0000 Subject: A printerdata browser I whipped up in about 5 minutes. (-: Usage: gprinterdata //win2kdc1/fooprinter --- source/python/gprinterdata | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 source/python/gprinterdata diff --git a/source/python/gprinterdata b/source/python/gprinterdata new file mode 100755 index 00000000000..cd04e6f5a13 --- /dev/null +++ b/source/python/gprinterdata @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +import sys +from gtkdictbrowser import GtkDictBrowser +import gtk +import spoolss +import string + +class printerdata: + def __init__(self, host): + host = string.replace(host, "/", "\\") + self.hnd = spoolss.openprinter(host) + + def keys(self): + return self.hnd.enumprinterdata().keys() + + def __getitem__(self, key): + return self.hnd.getprinterdata(key)['data'] + +# Initialise printerdata dictionary + +if len(sys.argv) != 2: + print "Usage: gprinterdata " + print "where is a UNC printer name." + sys.exit(1) + +try: + t = printerdata(sys.argv[1]) +except: + print "gprinterdata: error opening %s" % sys.argv[1] + sys.exit(1) + +# Create interface + +db = GtkDictBrowser(t) +db.build_ui('gprinterdata') + +# Override Python's handling of ctrl-c so we can break out of the +# gui from the command line. + +import signal +signal.signal(signal.SIGINT, signal.SIG_DFL) + +gtk.mainloop() -- cgit From 7a6b6a8b4871065e3178223a7da5fafd8792b0bc Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 01:55:21 +0000 Subject: Added utility function to convert python strings to hex dump + ascii. --- source/python/gtkdictbrowser.py | 73 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/source/python/gtkdictbrowser.py b/source/python/gtkdictbrowser.py index 1609dff9b4d..6d6cdb3c8ae 100755 --- a/source/python/gtkdictbrowser.py +++ b/source/python/gtkdictbrowser.py @@ -169,6 +169,79 @@ class GtkDictBrowser: def register_get_value_text_fn(self, regexp, fn): self.get_value_text_fns.append((regexp, fn)) +# +# A utility function to convert a string to the standard hex + ascii format. +# To display all values in hex do: +# register_get_value_text_fn("", gtkdictbrowser.hex_string) +# + +def hex_string(data): + """Return a hex dump of a string as a string. + + The output produced is in the standard 16 characters per line hex + + ascii format: + + 00000000: 40 00 00 00 00 00 00 00 40 00 00 00 01 00 04 80 @....... @....... + 00000010: 01 01 00 00 00 00 00 01 00 00 00 00 ........ .... + """ + + pos = 0 # Position in data + line = 0 # Line of data + + hex = "" # Hex display + ascii = "" # ASCII display + + result = "" + + while pos < len(data): + + # Start with header + + if pos % 16 == 0: + hex = "%08x: " % (line * 16) + ascii = "" + + # Add character + + hex = hex + "%02x " % (ord(data[pos])) + + if ord(data[pos]) < 32 or ord(data[pos]) > 176: + ascii = ascii + '.' + else: + ascii = ascii + data[pos] + + pos = pos + 1 + + # Add separator if half way + + if pos % 16 == 8: + hex = hex + " " + ascii = ascii + " " + + # End of line + + if pos % 16 == 0: + result = result + "%s %s\n" % (hex, ascii) + line = line + 1 + + # Leftover bits + + if pos % 16 != 0: + + # Pad hex string + + for i in range(0, (16 - (pos % 16))): + hex = hex + " " + + # Half way separator + + if (pos % 16) < 8: + hex = hex + " " + + result = result + "%s %s\n" % (hex, ascii) + + return result + # For testing purposes, create a fixed dictionary to browse with if __name__ == "__main__": -- cgit From cdd64e0860bf05b115e0d107f6cb2b9e1f6d0e9b Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 01:56:05 +0000 Subject: Display printerdata values in hex. --- source/python/gprinterdata | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/python/gprinterdata b/source/python/gprinterdata index cd04e6f5a13..52c6e42719b 100755 --- a/source/python/gprinterdata +++ b/source/python/gprinterdata @@ -1,7 +1,7 @@ #!/usr/bin/env python import sys -from gtkdictbrowser import GtkDictBrowser +from gtkdictbrowser import GtkDictBrowser, hex_string import gtk import spoolss import string @@ -33,6 +33,7 @@ except: # Create interface db = GtkDictBrowser(t) +db.register_get_value_text_fn("", hex_string) db.build_ui('gprinterdata') # Override Python's handling of ctrl-c so we can break out of the -- cgit From f7641c8fd1079c2ef444d4bca5b97b1285733d10 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 03:18:19 +0000 Subject: Change JOB_INFO_CTR to return a pointer to an array rather than array of pointers. Implemented client function for deleteprinterdataex. --- source/rpc_client/cli_spoolss.c | 51 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/source/rpc_client/cli_spoolss.c b/source/rpc_client/cli_spoolss.c index d2492dc53b6..bdd74070268 100644 --- a/source/rpc_client/cli_spoolss.c +++ b/source/rpc_client/cli_spoolss.c @@ -1552,11 +1552,11 @@ WERROR cli_spoolss_enumjobs(struct cli_state *cli, TALLOC_CTX *mem_ctx, switch(level) { case 1: decode_jobs_1(mem_ctx, r.buffer, r.returned, - ctr->job.job_info_1); + &ctr->job.job_info_1); break; case 2: decode_jobs_2(mem_ctx, r.buffer, r.returned, - ctr->job.job_info_2); + &ctr->job.job_info_2); break; default: DEBUG(3, ("unsupported info level %d", level)); @@ -1665,10 +1665,10 @@ WERROR cli_spoolss_getjob(struct cli_state *cli, TALLOC_CTX *mem_ctx, switch(level) { case 1: - decode_jobs_1(mem_ctx, r.buffer, 1, ctr->job.job_info_1); + decode_jobs_1(mem_ctx, r.buffer, 1, &ctr->job.job_info_1); break; case 2: - decode_jobs_2(mem_ctx, r.buffer, 1, ctr->job.job_info_2); + decode_jobs_2(mem_ctx, r.buffer, 1, &ctr->job.job_info_2); break; default: DEBUG(3, ("unsupported info level %d", level)); @@ -2326,4 +2326,47 @@ WERROR cli_spoolss_deleteprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, return result; } +WERROR cli_spoolss_deleteprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, + POLICY_HND *hnd, char *key, char *value) +{ + prs_struct qbuf, rbuf; + SPOOL_Q_DELETEPRINTERDATAEX q; + SPOOL_R_DELETEPRINTERDATAEX r; + WERROR result = W_ERROR(ERRgeneral); + + ZERO_STRUCT(q); + ZERO_STRUCT(r); + + /* Initialise parse structures */ + + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); + + /* Initialise input parameters */ + + make_spoolss_q_deleteprinterdataex(&q, hnd, key, value); + + /* Marshall data and send request */ + + if (!spoolss_io_q_deleteprinterdataex("", &q, &qbuf, 0) || + !rpc_api_pipe_req(cli, SPOOLSS_DELETEPRINTERDATAEX, &qbuf, &rbuf)) + goto done; + + /* Unmarshall response */ + + if (!spoolss_io_r_deleteprinterdataex("", &r, &rbuf, 0)) + goto done; + + result = r.status; + + if (!W_ERROR_IS_OK(r.status)) + goto done; + + done: + prs_mem_free(&qbuf); + prs_mem_free(&rbuf); + + return result; +} + /** @} **/ -- cgit From e9b71b354d923b2cd0f028dd197e7ca81339ec3a Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 03:20:21 +0000 Subject: Change JOB_INFO_CTR to return a pointer to an array rather than array of pointers. --- source/include/rpc_spoolss.h | 4 ++-- source/rpcclient/cmd_spoolss.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/include/rpc_spoolss.h b/source/include/rpc_spoolss.h index b7acf44c5de..456825a5f5c 100755 --- a/source/include/rpc_spoolss.h +++ b/source/include/rpc_spoolss.h @@ -1240,8 +1240,8 @@ typedef struct job_info_ctr_info { union { - JOB_INFO_1 **job_info_1; - JOB_INFO_2 **job_info_2; + JOB_INFO_1 *job_info_1; + JOB_INFO_2 *job_info_2; void *info; } job; diff --git a/source/rpcclient/cmd_spoolss.c b/source/rpcclient/cmd_spoolss.c index 2ab90365a71..bd399196eba 100644 --- a/source/rpcclient/cmd_spoolss.c +++ b/source/rpcclient/cmd_spoolss.c @@ -1785,10 +1785,10 @@ static NTSTATUS cmd_spoolss_enum_jobs(struct cli_state *cli, for (i = 0; i < num_jobs; i++) { switch(level) { case 1: - display_job_info_1(ctr.job.job_info_1[i]); + display_job_info_1(&ctr.job.job_info_1[i]); break; case 2: - display_job_info_2(ctr.job.job_info_2[i]); + display_job_info_2(&ctr.job.job_info_2[i]); break; default: d_printf("unknown info level %d\n", level); -- cgit From 6d792c683df3a4f97e1a04a57bf4890aab35aecd Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 03:21:53 +0000 Subject: Implemented client function for deleteprinterdataex. --- source/rpc_parse/parse_spoolss.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/rpc_parse/parse_spoolss.c b/source/rpc_parse/parse_spoolss.c index db3ea5046a9..29902d395ef 100644 --- a/source/rpc_parse/parse_spoolss.c +++ b/source/rpc_parse/parse_spoolss.c @@ -7606,6 +7606,21 @@ BOOL make_spoolss_q_deleteprinterdata(SPOOL_Q_DELETEPRINTERDATA *q_u, return True; } +/******************************************************************* + * init a structure. + ********************************************************************/ + +BOOL make_spoolss_q_deleteprinterdataex(SPOOL_Q_DELETEPRINTERDATAEX *q_u, + POLICY_HND *handle, char *key, + char *value) +{ + memcpy(&q_u->handle, handle, sizeof(POLICY_HND)); + init_unistr2(&q_u->valuename, value, strlen(value) + 1); + init_unistr2(&q_u->keyname, key, strlen(key) + 1); + + return True; +} + /******************************************************************* * init a structure. ********************************************************************/ -- cgit From aaa7a681ce4ee52edb23c73a53aeabb07fd5b7d8 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 3 Sep 2002 03:48:28 +0000 Subject: The session key in NTLMSSP AUTH blobs is actually an empty string. Also, the negotiate blob has two ASCI strings encoded in the same way that the UNICODE strings are, they are just in ASCII. The PARSER and Generator will have to deal with that. --- source/libsmb/cliconnect.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index e9b2b7b32ef..c441cf28a8c 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -540,7 +540,7 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, workgroup, user, cli->calling.name, - sess_key, 16, + sess_key, 0, neg_flags); /* wrap it in SPNEGO */ -- cgit From 7f8fd5f270af74dcb3fd18af74233f7db4d8f9a7 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 3 Sep 2002 03:53:50 +0000 Subject: Add type A to the small MSRPC generator ... --- source/libsmb/clispnego.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/libsmb/clispnego.c b/source/libsmb/clispnego.c index fc25436d10b..8376398e3fa 100644 --- a/source/libsmb/clispnego.c +++ b/source/libsmb/clispnego.c @@ -471,6 +471,7 @@ DATA_BLOB spnego_gen_auth_response(void) U = unicode string (input is unix string) a = address (1 byte type, 1 byte length, unicode string, all inline) + A = ASCII string (pointer + length) Actually same as B B = data blob (pointer + length) b = data blob in header (pointer + length) d = word (4 bytes) @@ -500,6 +501,7 @@ BOOL msrpc_gen(DATA_BLOB *blob, s = va_arg(ap, char *); data_size += (str_charnum(s) * 2) + 4; break; + case 'A': case 'B': b = va_arg(ap, uint8 *); head_size += 8; -- cgit From b28267f52c0a5c175b067d7c2d10eca83c20e640 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 3 Sep 2002 04:10:58 +0000 Subject: Make sure that an NTLMSSP negotiate blob has the correct stuff in it! --- source/libsmb/cliconnect.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index c441cf28a8c..7ef9b2ab824 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -486,11 +486,12 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, memset(sess_key, 0, 16); /* generate the ntlmssp negotiate packet */ - msrpc_gen(&blob, "CddB", + msrpc_gen(&blob, "CddAA", "NTLMSSP", NTLMSSP_NEGOTIATE, neg_flags, - sess_key, 16); + workgroup, strlen(workgroup), + cli->calling.name, strlen(cli->calling.name)); /* and wrap it in a SPNEGO wrapper */ msg1 = gen_negTokenTarg(mechs, blob); -- cgit From 82c9bf2a6f03c801e701636aff726090483cea25 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 04:56:39 +0000 Subject: Fix setprinterdata rpcclient command to use new cli_spoolss_setprinterdata function. Also fixed crash bug - I don't think anyone uses this command anymore... --- source/rpcclient/cmd_spoolss.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/source/rpcclient/cmd_spoolss.c b/source/rpcclient/cmd_spoolss.c index bd399196eba..15648e4d1b5 100644 --- a/source/rpcclient/cmd_spoolss.c +++ b/source/rpcclient/cmd_spoolss.c @@ -1620,7 +1620,8 @@ static NTSTATUS cmd_spoolss_setprinterdata(struct cli_state *cli, POLICY_HND pol; BOOL opened_hnd = False; PRINTER_INFO_CTR ctr; - PRINTER_INFO_0 *info = NULL; + PRINTER_INFO_0 info; + REGISTRY_VALUE value; /* parse the command arguements */ if (argc != 4) { @@ -1642,6 +1643,8 @@ static NTSTATUS cmd_spoolss_setprinterdata(struct cli_state *cli, opened_hnd = True; + ctr.printers_0 = &info; + result = cli_spoolss_getprinter(cli, mem_ctx, 0, &needed, &pol, 0, &ctr); @@ -1652,13 +1655,16 @@ static NTSTATUS cmd_spoolss_setprinterdata(struct cli_state *cli, goto done; printf("%s\n", timestring(True)); - printf("\tchange_id (before set)\t:[0x%x]\n", info->change_id); + printf("\tchange_id (before set)\t:[0x%x]\n", info.change_id); /* Set the printer data */ - result = cli_spoolss_setprinterdata( - cli, mem_ctx, &pol, argv[2], REG_SZ, argv[3], - strlen(argv[3]) + 1); + fstrcpy(value.valuename, argv[2]); + value.type = REG_SZ; + value.size = strlen(argv[3]) + 1; + value.data_p = talloc_memdup(mem_ctx, argv[3], value.size); + + result = cli_spoolss_setprinterdata(cli, mem_ctx, &pol, &value); if (!W_ERROR_IS_OK(result)) { printf ("Unable to set [%s=%s]!\n", argv[2], argv[3]); @@ -1675,7 +1681,7 @@ static NTSTATUS cmd_spoolss_setprinterdata(struct cli_state *cli, goto done; printf("%s\n", timestring(True)); - printf("\tchange_id (after set)\t:[0x%x]\n", info->change_id); + printf("\tchange_id (after set)\t:[0x%x]\n", info.change_id); done: /* cleanup */ -- cgit From 9db5be03617740e705bce51784fdb80784779acb Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 04:58:36 +0000 Subject: Fixed enumjobs command to use new JOB_INFO_CTR structure. --- source/python/py_spoolss_jobs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/python/py_spoolss_jobs.c b/source/python/py_spoolss_jobs.c index cc5d42e0eef..59754bd36dd 100644 --- a/source/python/py_spoolss_jobs.c +++ b/source/python/py_spoolss_jobs.c @@ -150,10 +150,10 @@ PyObject *spoolss_hnd_getjob(PyObject *self, PyObject *args, PyObject *kw) switch(level) { case 1: - py_from_JOB_INFO_1(&result, ctr.job.job_info_1); + py_from_JOB_INFO_1(&result, &ctr.job.job_info_1[0]); break; case 2: - py_from_JOB_INFO_2(&result, ctr.job.job_info_2); + py_from_JOB_INFO_2(&result, &ctr.job.job_info_2[0]); break; } -- cgit From 100aa8c893464d65f1b2225dab9dc5b58bbcff91 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 05:00:17 +0000 Subject: Convert to new REGISTRY_VALUE cli_spoolss routines. --- source/python/py_spoolss_printerdata.c | 112 ++++++++++++++++++--------------- 1 file changed, 61 insertions(+), 51 deletions(-) diff --git a/source/python/py_spoolss_printerdata.c b/source/python/py_spoolss_printerdata.c index 0c62baab725..ffff2b3a67a 100644 --- a/source/python/py_spoolss_printerdata.c +++ b/source/python/py_spoolss_printerdata.c @@ -21,7 +21,7 @@ #include "python/py_spoolss.h" static BOOL py_from_printerdata(PyObject **dict, char *key, char *value, - uint32 data_type, char *data, + uint16 data_type, uint8 *data, uint32 data_size) { *dict = PyDict_New(); @@ -36,8 +36,8 @@ static BOOL py_from_printerdata(PyObject **dict, char *key, char *value, return True; } -static BOOL py_to_printerdata(char **key, char **value, uint32 *data_type, - char **data, uint32 *data_size, +static BOOL py_to_printerdata(char **key, char **value, uint16 *data_type, + uint8 **data, uint32 *data_size, PyObject *dict) { PyObject *obj; @@ -50,10 +50,12 @@ static BOOL py_to_printerdata(char **key, char **value, uint32 *data_type, return False; } - *key = PyString_AsString(obj); + if (key) { + *key = PyString_AsString(obj); - if (!key[0]) - *key = NULL; + if (!key[0]) + *key = NULL; + } } else *key = NULL; @@ -107,34 +109,36 @@ PyObject *spoolss_hnd_getprinterdata(PyObject *self, PyObject *args, PyObject *k { spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { "value", NULL }; - char *value; + char *valuename; WERROR werror; - uint32 needed, data_type, data_size; - char *data; + uint32 needed; PyObject *result; + REGISTRY_VALUE value; /* Parse parameters */ - if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &value)) + if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &valuename)) return NULL; /* Call rpc function */ werror = cli_spoolss_getprinterdata( - hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, value, - &data_type, &data, &data_size); + hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, valuename, + &value); if (W_ERROR_V(werror) == ERRmoredata) werror = cli_spoolss_getprinterdata( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, value, - &data_type, &data, &data_size); + hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, + valuename, &value); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); return NULL; } - py_from_printerdata(&result, NULL, value, data_type, data, needed); + py_from_printerdata( + &result, NULL, valuename, value.type, value.data_p, + value.size); return result; } @@ -144,22 +148,25 @@ PyObject *spoolss_hnd_setprinterdata(PyObject *self, PyObject *args, PyObject *k spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { "data", NULL }; PyObject *py_data; - char *key, *value, *data; - uint32 data_size, data_type; + char *valuename; WERROR werror; + REGISTRY_VALUE value; if (!PyArg_ParseTupleAndKeywords( args, kw, "O!", kwlist, &PyDict_Type, &py_data)) return NULL; - if (!py_to_printerdata(&key, &value, &data_type, &data, &data_size, py_data)) + if (!py_to_printerdata( + NULL, &valuename, &value.type, &value.data_p, + &value.size, py_data)) return NULL; + fstrcpy(value.valuename, valuename); + /* Call rpc function */ werror = cli_spoolss_setprinterdata( - hnd->cli, hnd->mem_ctx, &hnd->pol, value, data_type, - data, data_size); + hnd->cli, hnd->mem_ctx, &hnd->pol, &value); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); @@ -174,10 +181,10 @@ PyObject *spoolss_hnd_enumprinterdata(PyObject *self, PyObject *args, PyObject * { spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { NULL }; - uint32 data_needed, value_needed, ndx = 0, data_size, data_type; - char *value, *data; + uint32 data_needed, value_needed, ndx = 0; WERROR werror; PyObject *result; + REGISTRY_VALUE value; if (!PyArg_ParseTupleAndKeywords(args, kw, "", kwlist)) return NULL; @@ -186,7 +193,7 @@ PyObject *spoolss_hnd_enumprinterdata(PyObject *self, PyObject *args, PyObject * werror = cli_spoolss_enumprinterdata( hnd->cli, hnd->mem_ctx, &hnd->pol, ndx, 0, 0, - &value_needed, &data_needed, NULL, NULL, NULL, NULL); + &value_needed, &data_needed, NULL); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); @@ -202,12 +209,12 @@ PyObject *spoolss_hnd_enumprinterdata(PyObject *self, PyObject *args, PyObject * werror = cli_spoolss_enumprinterdata( hnd->cli, hnd->mem_ctx, &hnd->pol, ndx, - value_needed, data_needed, NULL, NULL, - &value, &data_type, &data, &data_size); + value_needed, data_needed, NULL, NULL, &value); if (py_from_printerdata( - &obj, NULL, value, data_type, data, data_size)) - PyDict_SetItemString(result, value, obj); + &obj, NULL, value.valuename, value.type, + value.data_p, value.size)) + PyDict_SetItemString(result, value.valuename, obj); ndx++; } @@ -245,34 +252,35 @@ PyObject *spoolss_hnd_getprinterdataex(PyObject *self, PyObject *args, PyObject { spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { "key", "value", NULL }; - char *key, *value; + char *key, *valuename; WERROR werror; - uint32 needed, data_type, data_size; - char *data; + uint32 needed; PyObject *result; + REGISTRY_VALUE value; /* Parse parameters */ - if (!PyArg_ParseTupleAndKeywords(args, kw, "ss", kwlist, &key, &value)) + if (!PyArg_ParseTupleAndKeywords(args, kw, "ss", kwlist, &key, &valuename)) return NULL; /* Call rpc function */ werror = cli_spoolss_getprinterdataex( hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key, - value, &data_type, &data, &data_size); + valuename, &value); if (W_ERROR_V(werror) == ERRmoredata) werror = cli_spoolss_getprinterdataex( hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key, - value, &data_type, &data, &data_size); + valuename, &value); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); return NULL; } - py_from_printerdata(&result, key, value, data_type, data, needed); + py_from_printerdata( + &result, key, valuename, value.type, value.data_p, value.size); return result; } @@ -282,22 +290,24 @@ PyObject *spoolss_hnd_setprinterdataex(PyObject *self, PyObject *args, PyObject spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { "data", NULL }; PyObject *py_data; - char *key, *value, *data; - uint32 data_size, data_type; + char *keyname, *valuename; WERROR werror; + REGISTRY_VALUE value; if (!PyArg_ParseTupleAndKeywords( args, kw, "O!", kwlist, &PyDict_Type, &py_data)) return NULL; - if (!py_to_printerdata(&key, &value, &data_type, &data, &data_size, py_data)) + if (!py_to_printerdata( + &keyname, &valuename, &value.type, &value.data_p, &value.size, py_data)) return NULL; + fstrcpy(value.valuename, valuename); + /* Call rpc function */ werror = cli_spoolss_setprinterdataex( - hnd->cli, hnd->mem_ctx, &hnd->pol, key, value, data_type, - data, data_size); + hnd->cli, hnd->mem_ctx, &hnd->pol, keyname, &value); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); @@ -312,11 +322,11 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject { spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { NULL }; - uint32 needed, returned, i; + uint32 needed, i; char *key; WERROR werror; PyObject *result; - PRINTER_ENUM_VALUES *values; + REGVAL_CTR ctr; if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &key)) return NULL; @@ -324,13 +334,12 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject /* Get max buffer sizes for value and data */ werror = cli_spoolss_enumprinterdataex( - hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key, - &returned, &values); + hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key, &ctr); if (W_ERROR_V(werror) == ERRmoredata) werror = cli_spoolss_enumprinterdataex( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key, - &returned, &values); + hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key, + &ctr); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); @@ -341,16 +350,17 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject result = PyDict_New(); - for (i = 0; i < returned; i++) { + for (i = 0; i < regval_ctr_numvals(&ctr); i++) { + REGISTRY_VALUE *value; PyObject *item; - fstring value = ""; - rpcstr_pull(value, values[i].valuename.buffer, sizeof(value), -1, STR_TERMINATE); item = PyDict_New(); - py_from_printerdata(&item, key, value, values[i].type, values[i].data, - values[i].data_len); + value = regval_ctr_specific_value(&ctr, i); - PyDict_SetItemString(result, value, item); + if (py_from_printerdata( + &item, key, value->valuename, value->type, + value->data_p, value->size)) + PyDict_SetItemString(result, value->valuename, item); } return result; -- cgit From f0c6303bebe0f494d70ac5371d7f6727413fe482 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 05:35:47 +0000 Subject: Conver cli_spoolss routines to use REGISTRY_VALUE and REGVAL_CTR code. Nice one jerry! (Hey I thought I checked this in already?) --- source/rpc_client/cli_spoolss.c | 101 ++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 67 deletions(-) diff --git a/source/rpc_client/cli_spoolss.c b/source/rpc_client/cli_spoolss.c index bdd74070268..b568f386043 100644 --- a/source/rpc_client/cli_spoolss.c +++ b/source/rpc_client/cli_spoolss.c @@ -1874,8 +1874,7 @@ WERROR cli_spoolss_enddocprinter(struct cli_state *cli, TALLOC_CTX *mem_ctx, WERROR cli_spoolss_getprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, uint32 offered, uint32 *needed, POLICY_HND *hnd, char *valuename, - uint32 *data_type, char **data, - uint32 *data_size) + REGISTRY_VALUE *value) { prs_struct qbuf, rbuf; SPOOL_Q_GETPRINTERDATA q; @@ -1915,16 +1914,9 @@ WERROR cli_spoolss_getprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Return output parameters */ - if (data_type) - *data_type = r.type; - - if (data) { - *data = (char *)talloc(mem_ctx, r.needed); - memcpy(*data, r.data, r.needed); - } - - if (data_size) - *data_size = r.needed; + value->data_p = talloc_memdup(mem_ctx, r.data, r.needed); + value->type = r.type; + value->size = r.size; done: prs_mem_free(&qbuf); @@ -1936,8 +1928,7 @@ WERROR cli_spoolss_getprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, WERROR cli_spoolss_getprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, uint32 offered, uint32 *needed, POLICY_HND *hnd, char *keyname, - char *valuename, uint32 *data_type, - char **data, uint32 *data_size) + char *valuename, REGISTRY_VALUE *value) { prs_struct qbuf, rbuf; SPOOL_Q_GETPRINTERDATAEX q; @@ -1977,16 +1968,9 @@ WERROR cli_spoolss_getprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Return output parameters */ - if (data_type) - *data_type = r.type; - - if (data) { - *data = (char *)talloc(mem_ctx, r.needed); - memcpy(*data, r.data, r.needed); - } - - if (data_size) - *data_size = r.needed; + value->data_p = talloc_memdup(mem_ctx, r.data, r.needed); + value->type = r.type; + value->size = r.needed; done: prs_mem_free(&qbuf); @@ -1998,9 +1982,7 @@ WERROR cli_spoolss_getprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Set printer data */ WERROR cli_spoolss_setprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, - POLICY_HND *hnd, char *value, - uint32 data_type, char *data, - uint32 data_size) + POLICY_HND *hnd, REGISTRY_VALUE *value) { prs_struct qbuf, rbuf; SPOOL_Q_SETPRINTERDATA q; @@ -2017,7 +1999,8 @@ WERROR cli_spoolss_setprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Initialise input parameters */ - make_spoolss_q_setprinterdata(&q, hnd, value, data_type, data, data_size); + make_spoolss_q_setprinterdata( + &q, hnd, value->valuename, value->type, value->data_p, value->size); /* Marshall data and send request */ @@ -2043,9 +2026,8 @@ WERROR cli_spoolss_setprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, } WERROR cli_spoolss_setprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, - POLICY_HND *hnd, char * key, char *value, - uint32 data_type, char *data, - uint32 data_size) + POLICY_HND *hnd, char *keyname, + REGISTRY_VALUE *value) { prs_struct qbuf, rbuf; SPOOL_Q_SETPRINTERDATAEX q; @@ -2062,7 +2044,9 @@ WERROR cli_spoolss_setprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Initialise input parameters */ - make_spoolss_q_setprinterdataex(&q, hnd, key, value, data_type, data, data_size); + make_spoolss_q_setprinterdataex( + &q, hnd, keyname, value->valuename, value->type, value->data_p, + value->size); /* Marshall data and send request */ @@ -2093,8 +2077,7 @@ WERROR cli_spoolss_enumprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, POLICY_HND *hnd, uint32 ndx, uint32 value_offered, uint32 data_offered, uint32 *value_needed, uint32 *data_needed, - char **value, uint32 *data_type, char **data, - uint32 *data_size) + REGISTRY_VALUE *value) { prs_struct qbuf, rbuf; SPOOL_Q_ENUMPRINTERDATA q; @@ -2130,31 +2113,21 @@ WERROR cli_spoolss_enumprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, goto done; /* Return data */ - + if (value_needed) *value_needed = r.realvaluesize; if (data_needed) *data_needed = r.realdatasize; - if (data_type) - *data_type = r.type; - if (value) { - fstring the_value; - - rpcstr_pull(the_value, r.value, sizeof(the_value), -1, + rpcstr_pull(value->valuename, r.value, sizeof(value->valuename), -1, STR_TERMINATE); - - *value = talloc_strdup(mem_ctx, the_value); + value->data_p = talloc_memdup(mem_ctx, r.data, r.realdatasize); + value->type = r.type; + value->size = r.realdatasize; } - if (data) - *data = talloc_memdup(mem_ctx, r.data, r.realdatasize); - - if (data_size) - *data_size = r.realdatasize; - done: prs_mem_free(&qbuf); prs_mem_free(&rbuf); @@ -2164,8 +2137,8 @@ WERROR cli_spoolss_enumprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, WERROR cli_spoolss_enumprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, uint32 offered, uint32 *needed, - POLICY_HND *hnd, char *key, - uint32 *returned, PRINTER_ENUM_VALUES **values) + POLICY_HND *hnd, char *keyname, + REGVAL_CTR *ctr) { prs_struct qbuf, rbuf; SPOOL_Q_ENUMPRINTERDATAEX q; @@ -2183,7 +2156,7 @@ WERROR cli_spoolss_enumprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Initialise input parameters */ - make_spoolss_q_enumprinterdataex(&q, hnd, key, offered); + make_spoolss_q_enumprinterdataex(&q, hnd, keyname, offered); /* Marshall data and send request */ @@ -2206,23 +2179,16 @@ WERROR cli_spoolss_enumprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Return data */ - *returned = r.returned; - - /* Again, we have to deep copy the results on the passed in - tdb context as they will disappear after the prs_free at - the end of this function. */ - - *values = talloc(mem_ctx, sizeof(PRINTER_ENUM_VALUES) * r.returned); + ZERO_STRUCTP(ctr); + regval_ctr_init(ctr); for (i = 0; i < r.returned; i++) { PRINTER_ENUM_VALUES *v = &r.ctr.values[i]; + fstring name; - (*values)[i].valuename.buffer = talloc(mem_ctx, v->value_len * 2); - unistrcpy((*values)[i].valuename.buffer, v->valuename.buffer); - (*values)[i].type = v->type; - (*values)[i].data = talloc(mem_ctx, v->data_len); - memcpy((*values)[i].data, v->data, v->data_len); - (*values)[i].data_len = v->data_len; + rpcstr_pull(name, v->valuename.buffer, sizeof(name), -1, + STR_TERMINATE); + regval_ctr_addvalue(ctr, name, v->type, v->data, v->data_len); } done: @@ -2327,7 +2293,8 @@ WERROR cli_spoolss_deleteprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, } WERROR cli_spoolss_deleteprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, - POLICY_HND *hnd, char *key, char *value) + POLICY_HND *hnd, char *keyname, + char *valuename) { prs_struct qbuf, rbuf; SPOOL_Q_DELETEPRINTERDATAEX q; @@ -2344,7 +2311,7 @@ WERROR cli_spoolss_deleteprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ct /* Initialise input parameters */ - make_spoolss_q_deleteprinterdataex(&q, hnd, key, value); + make_spoolss_q_deleteprinterdataex(&q, hnd, keyname, valuename); /* Marshall data and send request */ -- cgit From 5784835db95baf62362d35d3beab5d534cc776e9 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 3 Sep 2002 06:34:40 +0000 Subject: Parse the NTLMSSP Challenge in cliconnect.c. This gets us closer ... Should have the challenge now. Need to check that it works. --- source/libsmb/cliconnect.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index 7ef9b2ab824..cb3b4373dc5 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -473,11 +473,12 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, char *pass, char *workgroup) { const char *mechs[] = {OID_NTLMSSP, NULL}; - DATA_BLOB msg1; + DATA_BLOB msg1, struct_blob; DATA_BLOB blob, chal1, chal2, auth; uint8 challenge[8]; uint8 nthash[24], lmhash[24], sess_key[16]; - uint32 neg_flags; + uint32 neg_flags, chal_flags, ntlmssp_command, unkn1, unkn2; + pstring server_domain; /* FIX THIS, SHOULD be UCS2-LE */ neg_flags = NTLMSSP_NEGOTIATE_UNICODE | NTLMSSP_NEGOTIATE_128 | @@ -518,6 +519,31 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, data_blob_free(&blob); + /* + * Ok, chal1 and chal2 are actually two identical copies of + * the NTLMSSP Challenge BLOB, and they contain, encoded in them + * the challenge to use. + */ + + if (!msrpc_parse(&chal1, "CdUdbddB", + "NTLMSSP", + &ntlmssp_command, + &server_domain, + &chal_flags, + challenge, 8, + &unkn1, &unkn2, + struct_blob.data, &struct_blob.length)) { + DEBUG(0, ("Failed to parse the NTLMSSP Challenge\n")); + return False; + } + + if (ntlmssp_command != NTLMSSP_CHALLENGE) { + DEBUG(0, ("NTLMSSP Response != NTLMSSP_CHALLENGE. Got %0X\n", + ntlmssp_command)); + return False; + } + + /* encrypt the password with the challenge */ memcpy(challenge, chal1.data + 24, 8); SMBencrypt(pass, challenge,lmhash); -- cgit From 53e4975337be2cab3ee89f2f62e5659855365b73 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 3 Sep 2002 17:36:00 +0000 Subject: Fix the client side NTLMSSP. It now works between smbclient and smbd! However, it does not work with Win2K over 445 with raw NTLMSSP! --- source/libsmb/cliconnect.c | 9 ++++++--- source/libsmb/clispnego.c | 47 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index cb3b4373dc5..428167ebfa7 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -486,16 +486,19 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, memset(sess_key, 0, 16); + DEBUG(10, ("sending NTLMSSP_NEGOTIATE\n")); + /* generate the ntlmssp negotiate packet */ msrpc_gen(&blob, "CddAA", "NTLMSSP", NTLMSSP_NEGOTIATE, neg_flags, workgroup, strlen(workgroup), - cli->calling.name, strlen(cli->calling.name)); - + cli->calling.name, strlen(cli->calling.name) + 1); + DEBUG(10, ("neg_flags: %0X, workgroup: %s, calling name %s\n", + neg_flags, workgroup, cli->calling.name)); /* and wrap it in a SPNEGO wrapper */ - msg1 = gen_negTokenTarg(mechs, blob); + msg1 = gen_negTokenInit(OID_NTLMSSP, blob); data_blob_free(&blob); /* now send that blob on its way */ diff --git a/source/libsmb/clispnego.c b/source/libsmb/clispnego.c index 8376398e3fa..8aab0fdda91 100644 --- a/source/libsmb/clispnego.c +++ b/source/libsmb/clispnego.c @@ -73,6 +73,50 @@ DATA_BLOB spnego_gen_negTokenInit(uint8 guid[16], return ret; } +/* + Generate a negTokenInit as used by the client side ... It has a mechType + (OID), and a mechToken (a security blob) ... + + Really, we need to break out the NTLMSSP stuff as well, because it could be + raw in the packets! +*/ +DATA_BLOB gen_negTokenInit(const char *OID, DATA_BLOB blob) +{ + ASN1_DATA data; + DATA_BLOB ret; + + memset(&data, 0, sizeof(data)); + + asn1_push_tag(&data, ASN1_APPLICATION(0)); + asn1_write_OID(&data,OID_SPNEGO); + asn1_push_tag(&data, ASN1_CONTEXT(0)); + asn1_push_tag(&data, ASN1_SEQUENCE(0)); + + asn1_push_tag(&data, ASN1_CONTEXT(0)); + asn1_push_tag(&data, ASN1_SEQUENCE(0)); + asn1_write_OID(&data, OID); + asn1_pop_tag(&data); + asn1_pop_tag(&data); + + asn1_push_tag(&data, ASN1_CONTEXT(2)); + asn1_write_OctetString(&data,blob.data,blob.length); + asn1_pop_tag(&data); + + asn1_pop_tag(&data); + asn1_pop_tag(&data); + + asn1_pop_tag(&data); + + if (data.has_error) { + DEBUG(1,("Failed to build negTokenInit at offset %d\n", (int)data.ofs)); + asn1_free(&data); + } + + ret = data_blob(data.data, data.length); + asn1_free(&data); + + return ret; +} /* parse a negTokenInit packet giving a GUID, a list of supported @@ -553,7 +597,8 @@ BOOL msrpc_gen(DATA_BLOB *blob, } data_ofs += n*2; break; - + + case 'A': case 'B': b = va_arg(ap, uint8 *); n = va_arg(ap, int); -- cgit From 3b71529c694b5b1093d99b7ef80835e72b1f8436 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 3 Sep 2002 19:18:12 +0000 Subject: Formatting tidyup and additon of cli_close_connection() before bugfix. Jeremy. --- source/libsmb/cliconnect.c | 115 ++++++++++++++++++--------------------------- source/libsmb/clientgen.c | 104 +++++++++++++++++++++------------------- 2 files changed, 101 insertions(+), 118 deletions(-) diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index 428167ebfa7..9ff48549980 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -50,14 +50,12 @@ static BOOL cli_session_setup_lanman2(struct cli_state *cli, char *user, fstring pword; char *p; - if (passlen > sizeof(pword)-1) { + if (passlen > sizeof(pword)-1) return False; - } /* if in share level security then don't send a password now */ - if (!(cli->sec_mode & NEGOTIATE_SECURITY_USER_LEVEL)) { + if (!(cli->sec_mode & NEGOTIATE_SECURITY_USER_LEVEL)) passlen = 0; - } if (passlen > 0 && (cli->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE) && passlen != 24) { /* Encrypted mode needed, and non encrypted password supplied. */ @@ -99,9 +97,8 @@ static BOOL cli_session_setup_lanman2(struct cli_state *cli, char *user, show_msg(cli->inbuf); - if (cli_is_error(cli)) { + if (cli_is_error(cli)) return False; - } /* use the returned vuid from now on */ cli->vuid = SVAL(cli->inbuf,smb_uid); @@ -118,17 +115,14 @@ static uint32 cli_session_setup_capabilities(struct cli_state *cli) { uint32 capabilities = CAP_NT_SMBS; - if (!cli->force_dos_errors) { + if (!cli->force_dos_errors) capabilities |= CAP_STATUS32; - } - if (cli->use_level_II_oplocks) { + if (cli->use_level_II_oplocks) capabilities |= CAP_LEVEL_II_OPLOCKS; - } - if (cli->capabilities & CAP_UNICODE) { + if (cli->capabilities & CAP_UNICODE) capabilities |= CAP_UNICODE; - } return capabilities; } @@ -167,9 +161,8 @@ static BOOL cli_session_setup_guest(struct cli_state *cli) show_msg(cli->inbuf); - if (cli_is_error(cli)) { + if (cli_is_error(cli)) return False; - } cli->vuid = SVAL(cli->inbuf,smb_uid); @@ -223,9 +216,8 @@ static BOOL cli_session_setup_plaintext(struct cli_state *cli, char *user, show_msg(cli->inbuf); - if (cli_is_error(cli)) { + if (cli_is_error(cli)) return False; - } cli->vuid = SVAL(cli->inbuf,smb_uid); p = smb_buf(cli->inbuf); @@ -259,20 +251,19 @@ static void set_signing_on_cli (struct cli_state *cli, char* pass, uint8 respons static void set_temp_signing_on_cli(struct cli_state *cli) { - if (cli->sign_info.negotiated_smb_signing) { + if (cli->sign_info.negotiated_smb_signing) cli->sign_info.temp_smb_signing = True; - } } -/** +/**************************************************************************** do a NT1 NTLM/LM encrypted session setup @param cli client state to create do session setup on @param user username @param pass *either* cleartext password (passlen !=24) or LM response. @param ntpass NT response, implies ntpasslen >=24, implies pass is not clear @param workgroup The user's domain. -*/ +****************************************************************************/ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, char *pass, int passlen, @@ -285,9 +276,8 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, char *p; BOOL have_plaintext = False; - if (passlen > sizeof(pword) || ntpasslen > sizeof(ntpword)) { + if (passlen > sizeof(pword) || ntpasslen > sizeof(ntpword)) return False; - } if (passlen != 24) { /* non encrypted password supplied. Ignore ntpass. */ @@ -303,11 +293,10 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, security=server, can't do signing becouse we don't have oringial key */ memcpy(pword, pass, 24); - if (ntpasslen == 24) { + if (ntpasslen == 24) memcpy(ntpword, ntpass, 24); - } else { + else ZERO_STRUCT(ntpword); - } } /* send a session setup command */ @@ -334,19 +323,16 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, p += clistr_push(cli, p, "Samba", -1, STR_TERMINATE); cli_setup_bcc(cli, p); - if (!cli_send_smb(cli)) { + if (!cli_send_smb(cli)) return False; - } - if (!cli_receive_smb(cli)) { + if (!cli_receive_smb(cli)) return False; - } show_msg(cli->inbuf); - if (cli_is_error(cli)) { + if (cli_is_error(cli)) return False; - } /* use the returned vuid from now on */ cli->vuid = SVAL(cli->inbuf,smb_uid); @@ -433,7 +419,6 @@ static DATA_BLOB cli_session_setup_blob(struct cli_state *cli, DATA_BLOB blob) return blob2; } - #ifdef HAVE_KRB5 /**************************************************************************** Do a spnego/kerberos encrypted session setup. @@ -472,7 +457,6 @@ static BOOL cli_session_setup_kerberos(struct cli_state *cli, char *principal, c static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, char *pass, char *workgroup) { - const char *mechs[] = {OID_NTLMSSP, NULL}; DATA_BLOB msg1, struct_blob; DATA_BLOB blob, chal1, chal2, auth; uint8 challenge[8]; @@ -506,9 +490,8 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, data_blob_free(&msg1); - if (!NT_STATUS_EQUAL(cli_nt_error(cli), NT_STATUS_MORE_PROCESSING_REQUIRED)) { + if (!NT_STATUS_EQUAL(cli_nt_error(cli), NT_STATUS_MORE_PROCESSING_REQUIRED)) return False; - } #if 0 file_save("chal.dat", blob.data, blob.length); @@ -541,9 +524,9 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, } if (ntlmssp_command != NTLMSSP_CHALLENGE) { - DEBUG(0, ("NTLMSSP Response != NTLMSSP_CHALLENGE. Got %0X\n", - ntlmssp_command)); - return False; + DEBUG(0, ("NTLMSSP Response != NTLMSSP_CHALLENGE. Got %0X\n", + ntlmssp_command)); + return False; } @@ -584,9 +567,8 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, data_blob_free(&auth); data_blob_free(&blob); - if (cli_is_error(cli)) { + if (cli_is_error(cli)) return False; - } set_signing_on_cli(cli, pass, nthash); @@ -687,38 +669,38 @@ BOOL cli_session_setup(struct cli_state *cli, flow a bit easier to understand (tridge) */ /* if its an older server then we have to use the older request format */ - if (cli->protocol < PROTOCOL_NT1) { + + if (cli->protocol < PROTOCOL_NT1) return cli_session_setup_lanman2(cli, user, pass, passlen, workgroup); - } /* if no user is supplied then we have to do an anonymous connection. passwords are ignored */ - if (!user || !*user) { + + if (!user || !*user) return cli_session_setup_guest(cli); - } /* if the server is share level then send a plaintext null password at this point. The password is sent in the tree connect */ - if ((cli->sec_mode & NEGOTIATE_SECURITY_USER_LEVEL) == 0) { + + if ((cli->sec_mode & NEGOTIATE_SECURITY_USER_LEVEL) == 0) return cli_session_setup_plaintext(cli, user, "", workgroup); - } /* if the server doesn't support encryption then we have to use plaintext. The second password is ignored */ - if ((cli->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE) == 0) { + + if ((cli->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE) == 0) return cli_session_setup_plaintext(cli, user, pass, workgroup); - } /* Indidicate signing */ - /* if the server supports extended security then use SPNEGO */ - if (cli->capabilities & CAP_EXTENDED_SECURITY) { + + if (cli->capabilities & CAP_EXTENDED_SECURITY) return cli_session_setup_spnego(cli, user, pass, workgroup); - } /* otherwise do a NT1 style session setup */ + return cli_session_setup_nt1(cli, user, pass, passlen, ntpass, ntpasslen, workgroup); @@ -808,15 +790,13 @@ BOOL cli_send_tconX(struct cli_state *cli, if (!cli_receive_smb(cli)) return False; - if (cli_is_error(cli)) { + if (cli_is_error(cli)) return False; - } clistr_pull(cli, cli->dev, smb_buf(cli->inbuf), sizeof(fstring), -1, STR_TERMINATE|STR_ASCII); - if (strcasecmp(share,"IPC$")==0) { + if (strcasecmp(share,"IPC$")==0) fstrcpy(cli->dev, "IPC"); - } if (cli->protocol >= PROTOCOL_NT1 && smb_buflen(cli->inbuf) == 3) { @@ -856,9 +836,8 @@ void cli_negprot_send(struct cli_state *cli) char *p; int numprots; - if (cli->protocol < PROTOCOL_NT1) { + if (cli->protocol < PROTOCOL_NT1) cli->use_spnego = False; - } memset(cli->outbuf,'\0',smb_size); @@ -897,9 +876,8 @@ BOOL cli_negprot(struct cli_state *cli) return False; } - if (cli->protocol < PROTOCOL_NT1) { + if (cli->protocol < PROTOCOL_NT1) cli->use_spnego = False; - } memset(cli->outbuf,'\0',smb_size); @@ -986,9 +964,8 @@ BOOL cli_negprot(struct cli_state *cli) cli->max_xmit = MIN(cli->max_xmit, CLI_BUFFER_SIZE); /* a way to force ascii SMB */ - if (getenv("CLI_FORCE_ASCII")) { + if (getenv("CLI_FORCE_ASCII")) cli->capabilities &= ~CAP_UNICODE; - } return True; } @@ -1018,7 +995,8 @@ BOOL cli_session_request(struct cli_state *cli, len += name_len(p); /* 445 doesn't have session request */ - if (cli->port == 445) return True; + if (cli->port == 445) + return True; if (cli->sign_info.use_smb_signing) { DEBUG(0, ("Cannot send session resquest again, particularly after setting up SMB Signing\n")); @@ -1132,7 +1110,8 @@ BOOL cli_connect(struct cli_state *cli, const char *host, struct in_addr *ip) cli->fd = open_socket_out(SOCK_STREAM, &cli->dest_ip, port, cli->timeout); } - if (cli->fd != -1) cli->port = port; + if (cli->fd != -1) + cli->port = port; } if (cli->fd == -1) { DEBUG(1,("Error connecting to %s (%s)\n", @@ -1207,11 +1186,10 @@ NTSTATUS cli_full_connection(struct cli_state **output_cli, return NT_STATUS_UNSUCCESSFUL; } - if (dest_ip) { + if (dest_ip) ip = *dest_ip; - } else { + else ZERO_STRUCT(ip); - } again: @@ -1239,11 +1217,10 @@ again: return NT_STATUS_UNSUCCESSFUL; } - if (flags & CLI_FULL_CONNECTION_DONT_SPNEGO) { + if (flags & CLI_FULL_CONNECTION_DONT_SPNEGO) cli->use_spnego = False; - } else if (flags & CLI_FULL_CONNECTION_USE_KERBEROS) { + else if (flags & CLI_FULL_CONNECTION_USE_KERBEROS) cli->use_kerberos = True; - } if (!cli_negprot(cli)) { DEBUG(1,("failed negprot\n")); diff --git a/source/libsmb/clientgen.c b/source/libsmb/clientgen.c index 560d391320f..facf361a6b4 100644 --- a/source/libsmb/clientgen.c +++ b/source/libsmb/clientgen.c @@ -32,49 +32,48 @@ int cli_set_port(struct cli_state *cli, int port) } /**************************************************************************** - read an smb from a fd ignoring all keepalive packets. Note that the buffer - *MUST* be of size BUFFER_SIZE+SAFETY_MARGIN. - The timeout is in milliseconds - - This is exactly the same as receive_smb except that it never returns - a session keepalive packet (just as receive_smb used to do). - receive_smb was changed to return keepalives as the oplock processing means this call - should never go into a blocking read. + Read an smb from a fd ignoring all keepalive packets. Note that the buffer + *MUST* be of size BUFFER_SIZE+SAFETY_MARGIN. + The timeout is in milliseconds + + This is exactly the same as receive_smb except that it never returns + a session keepalive packet (just as receive_smb used to do). + receive_smb was changed to return keepalives as the oplock processing means this call + should never go into a blocking read. ****************************************************************************/ static BOOL client_receive_smb(int fd,char *buffer, unsigned int timeout) { - BOOL ret; - - for(;;) - { - ret = receive_smb(fd, buffer, timeout); - - if (!ret) - { - DEBUG(10,("client_receive_smb failed\n")); - show_msg(buffer); - return ret; - } - - /* Ignore session keepalive packets. */ - if(CVAL(buffer,0) != SMBkeepalive) - break; - } - show_msg(buffer); - return ret; -} + BOOL ret; + + for(;;) { + ret = receive_smb(fd, buffer, timeout); + + if (!ret) { + DEBUG(10,("client_receive_smb failed\n")); + show_msg(buffer); + return ret; + } + /* Ignore session keepalive packets. */ + if(CVAL(buffer,0) != SMBkeepalive) + break; + } + show_msg(buffer); + return ret; +} /**************************************************************************** -recv an smb + Recv an smb. ****************************************************************************/ + BOOL cli_receive_smb(struct cli_state *cli) { BOOL ret; /* fd == -1 causes segfaults -- Tom (tom@ninja.nl) */ - if (cli->fd == -1) return False; + if (cli->fd == -1) + return False; again: ret = client_receive_smb(cli->fd,cli->inbuf,cli->timeout); @@ -151,15 +150,12 @@ void cli_setup_packet(struct cli_state *cli) uint16 flags2; SCVAL(cli->outbuf,smb_flg,0x8); flags2 = FLAGS2_LONG_PATH_COMPONENTS; - if (cli->capabilities & CAP_UNICODE) { + if (cli->capabilities & CAP_UNICODE) flags2 |= FLAGS2_UNICODE_STRINGS; - } - if (cli->capabilities & CAP_STATUS32) { + if (cli->capabilities & CAP_STATUS32) flags2 |= FLAGS2_32_BIT_ERROR_CODES; - } - if (cli->use_spnego) { + if (cli->use_spnego) flags2 |= FLAGS2_EXTENDED_SECURITY; - } if (cli->sign_info.use_smb_signing || cli->sign_info.temp_smb_signing) flags2 |= FLAGS2_SMB_SECURITY_SIGNATURES; @@ -168,18 +164,18 @@ void cli_setup_packet(struct cli_state *cli) } /**************************************************************************** -setup the bcc length of the packet from a pointer to the end of the data + Setup the bcc length of the packet from a pointer to the end of the data. ****************************************************************************/ + void cli_setup_bcc(struct cli_state *cli, void *p) { set_message_bcc(cli->outbuf, PTR_DIFF(p, smb_buf(cli->outbuf))); } - - /**************************************************************************** -initialise credentials of a client structure + Initialise credentials of a client structure. ****************************************************************************/ + void cli_init_creds(struct cli_state *cli, const struct ntuser_creds *usr) { /* copy_nt_creds(&cli->usr, usr); */ @@ -194,10 +190,10 @@ void cli_init_creds(struct cli_state *cli, const struct ntuser_creds *usr) cli->ntlmssp_flags,cli->ntlmssp_cli_flgs)); } - /**************************************************************************** -initialise a client structure + Initialise a client structure. ****************************************************************************/ + struct cli_state *cli_initialise(struct cli_state *cli) { BOOL alloced_cli = False; @@ -280,11 +276,11 @@ struct cli_state *cli_initialise(struct cli_state *cli) } /**************************************************************************** -shutdown a client structure + Close a client connection and free the memory without destroying cli itself. ****************************************************************************/ -void cli_shutdown(struct cli_state *cli) + +void cli_close_connection(struct cli_state *cli) { - BOOL allocated; SAFE_FREE(cli->outbuf); SAFE_FREE(cli->inbuf); @@ -295,25 +291,35 @@ void cli_shutdown(struct cli_state *cli) if (cli->fd != -1) close(cli->fd); - allocated = cli->allocated; +} + +/**************************************************************************** + Shutdown a client structure. +****************************************************************************/ + +void cli_shutdown(struct cli_state *cli) +{ + BOOL allocated = cli->allocated; + cli_close_connection(cli); ZERO_STRUCTP(cli); if (allocated) { free(cli); } } - /**************************************************************************** -set socket options on a open connection + Set socket options on a open connection. ****************************************************************************/ + void cli_sockopt(struct cli_state *cli, char *options) { set_socket_options(cli->fd, options); } /**************************************************************************** -set the PID to use for smb messages. Return the old pid. + Set the PID to use for smb messages. Return the old pid. ****************************************************************************/ + uint16 cli_setpid(struct cli_state *cli, uint16 pid) { uint16 ret = cli->pid; -- cgit From e33e9defa657aa54594bb0c27f9be2f7b12aab1b Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 3 Sep 2002 19:19:20 +0000 Subject: Fix crashbug discovered by "Kim R. Pedersen" where cli struct was being deallocated in a called function. Jeremy. --- source/libsmb/cliconnect.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index 9ff48549980..885463bd345 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -1307,7 +1307,13 @@ with error %s.\n", desthost, cli_errstr(cli) )); return False; } - cli_shutdown(cli); + /* + * We need to close the connection here but can't call cli_shutdown as + * will free an allocated cli struct. cli_close_connection was invented + * for this purpose. JRA. Based on work by "Kim R. Pedersen" . + */ + + cli_close_connection(cli); if (!cli_initialise(cli) || !cli_connect(cli, desthost, pdest_ip) || -- cgit From 53f411df10f1e152d8d596cd24a2f66af9eb6e51 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 3 Sep 2002 20:10:25 +0000 Subject: Ensure we open UNIX fifo's non-blocking like we used to do. Jeremy. --- source/smbd/open.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/smbd/open.c b/source/smbd/open.c index 8cc73a681d1..a95793a0505 100644 --- a/source/smbd/open.c +++ b/source/smbd/open.c @@ -154,6 +154,17 @@ static BOOL open_file(files_struct *fsp,connection_struct *conn, local_flags &= ~O_TRUNC; +#if defined(O_NONBLOCK) && defined(S_ISFIFO) + /* + * We would block on opening a FIFO with no one else on the + * other end. Do what we used to do and add O_NONBLOCK to the + * open flags. JRA. + */ + + if (VALID_STAT(*psbuf) && S_ISFIFO(psbuf->st_mode)) + local_flags |= O_NONBLOCK; +#endif + /* actually do the open */ fsp->fd = fd_open(conn, fname, local_flags, mode); -- cgit From ce152b33c8b08905ea863d47a620c90ca47c8566 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 3 Sep 2002 21:35:26 +0000 Subject: Fix the struct_blob. --- source/libsmb/cliconnect.c | 13 ++++++++----- source/libsmb/clispnego.c | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index 885463bd345..1f3635d6d72 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -458,7 +458,7 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, char *pass, char *workgroup) { DATA_BLOB msg1, struct_blob; - DATA_BLOB blob, chal1, chal2, auth; + DATA_BLOB blob, chal1, chal2, auth, challenge_blob; uint8 challenge[8]; uint8 nthash[24], lmhash[24], sess_key[16]; uint32 neg_flags, chal_flags, ntlmssp_command, unkn1, unkn2; @@ -516,9 +516,9 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, &ntlmssp_command, &server_domain, &chal_flags, - challenge, 8, + &challenge_blob, 8, &unkn1, &unkn2, - struct_blob.data, &struct_blob.length)) { + &struct_blob)) { DEBUG(0, ("Failed to parse the NTLMSSP Challenge\n")); return False; } @@ -529,11 +529,14 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, return False; } + DEBUG(10, ("Challenge:\n")); + dump_data(10, challenge_blob.data, 8); - /* encrypt the password with the challenge */ - memcpy(challenge, chal1.data + 24, 8); + /* encrypt the password with the challenge which is in the blob */ + memcpy(challenge, challenge_blob.data, 8); SMBencrypt(pass, challenge,lmhash); SMBNTencrypt(pass, challenge,nthash); + data_blob_free(&challenge_blob); #if 0 file_save("nthash.dat", nthash, 24); diff --git a/source/libsmb/clispnego.c b/source/libsmb/clispnego.c index 8aab0fdda91..04ec6ed39ec 100644 --- a/source/libsmb/clispnego.c +++ b/source/libsmb/clispnego.c @@ -518,6 +518,7 @@ DATA_BLOB spnego_gen_auth_response(void) A = ASCII string (pointer + length) Actually same as B B = data blob (pointer + length) b = data blob in header (pointer + length) + D d = word (4 bytes) C = constant ascii string */ -- cgit From 04874134ed83847988bad5fcad3463395dc283fb Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 4 Sep 2002 01:14:24 +0000 Subject: DeletePrinterDriver[Ex]() fixes from APP_HEAD --- source/printing/nt_printing.c | 272 +++++++++++++++++-------------------- source/rpc_server/srv_spoolss_nt.c | 137 +++++++++++++++---- 2 files changed, 238 insertions(+), 171 deletions(-) diff --git a/source/printing/nt_printing.c b/source/printing/nt_printing.c index bf90089448e..2a96f9a83e0 100644 --- a/source/printing/nt_printing.c +++ b/source/printing/nt_printing.c @@ -1745,7 +1745,7 @@ static WERROR get_a_printer_driver_3(NT_PRINTER_DRIVER_INFO_LEVEL_3 **info_ptr, dbuf = tdb_fetch(tdb_drivers, kbuf); if (!dbuf.dptr) - return WERR_ACCESS_DENIED; + return WERR_UNKNOWN_PRINTER_DRIVER; len += tdb_unpack(dbuf.dptr, dbuf.dsize, "dffffffff", &driver.cversion, @@ -1864,7 +1864,7 @@ static uint32 dump_a_printer_driver(NT_PRINTER_DRIVER_INFO_LEVEL driver, uint32 NT_PRINTER_DRIVER_INFO_LEVEL_3 *info3; int i; - DEBUG(106,("Dumping printer driver at level [%d]\n", level)); + DEBUG(20,("Dumping printer driver at level [%d]\n", level)); switch (level) { @@ -3724,13 +3724,13 @@ uint32 free_a_printer_driver(NT_PRINTER_DRIVER_INFO_LEVEL driver, uint32 level) to a printer ****************************************************************************/ -BOOL printer_driver_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i ) +BOOL printer_driver_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info_3 ) { int snum; int n_services = lp_numservices(); NT_PRINTER_INFO_LEVEL *printer = NULL; - if ( !i ) + if ( !info_3 ) return False; DEBUG(5,("printer_driver_in_use: Beginning search through ntprinters.tdb...\n")); @@ -3745,7 +3745,7 @@ BOOL printer_driver_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i ) if ( !W_ERROR_IS_OK(get_a_printer(&printer, 2, lp_servicename(snum))) ) continue; - if ( !StrCaseCmp(i->name, printer->info_2->drivername) ) { + if ( !StrCaseCmp(info_3->name, printer->info_2->drivername) ) { free_a_printer( &printer, 2 ); return True; } @@ -3767,7 +3767,7 @@ BOOL printer_driver_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i ) static BOOL drv_file_in_use( char* file, NT_PRINTER_DRIVER_INFO_LEVEL_3 *info ) { - char *s; + int i = 0; if ( !info ) return False; @@ -3783,16 +3783,18 @@ static BOOL drv_file_in_use( char* file, NT_PRINTER_DRIVER_INFO_LEVEL_3 *info ) if ( strequal(file, info->helpfile) ) return True; - - s = (char*) info->dependentfiles; - if ( s ) { - while ( *s ) - { - if ( strequal(file, s) ) - return True; - s += strlen(s) + 1; - } + /* see of there are any dependent files to examine */ + + if ( !info->dependentfiles ) + return False; + + while ( *info->dependentfiles[i] ) + { + if ( strequal(file, info->dependentfiles[i]) ) + return True; + + i++; } return False; @@ -3804,27 +3806,20 @@ static BOOL drv_file_in_use( char* file, NT_PRINTER_DRIVER_INFO_LEVEL_3 *info ) input parameter from the list *********************************************************************/ -static void trim_dependent_file( char* s ) +static void trim_dependent_file( fstring files[], int idx ) { - char *p; - - /* set p to the next character string in the list */ - - p = s + strlen( s ) + 1; - - /* check to see that we have another string to copy back */ - if ( *p == '\0' ) + /* bump everything down a slot */ + + while( *files[idx+1] ) { - /* loop over s copying characters from p to s */ - while ( *p!='\0' && *(p+1)!='\0' ) - *s++ = *p++; + fstrcpy( files[idx], files[idx+1] ); + idx++; } - /* add the two trailing NULL's */ - - *s = '\0'; - *(s+1) = '\0'; + *files[idx] = '\0'; + + return; } /********************************************************************** @@ -3834,8 +3829,8 @@ static void trim_dependent_file( char* s ) static BOOL trim_overlap_drv_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *src, NT_PRINTER_DRIVER_INFO_LEVEL_3 *drv ) { - BOOL in_use = False; - char *s; + BOOL in_use = False; + int i = 0; if ( !src || !drv ) return False; @@ -3844,33 +3839,43 @@ static BOOL trim_overlap_drv_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *src, if ( drv_file_in_use(src->driverpath, drv) ) { in_use = True; + DEBUG(10,("Removing driverfile [%s] from list\n", src->driverpath)); fstrcpy( src->driverpath, "" ); } if ( drv_file_in_use(src->datafile, drv) ) { in_use = True; + DEBUG(10,("Removing datafile [%s] from list\n", src->datafile)); fstrcpy( src->datafile, "" ); } if ( drv_file_in_use(src->configfile, drv) ) { in_use = True; + DEBUG(10,("Removing configfile [%s] from list\n", src->configfile)); fstrcpy( src->configfile, "" ); } - s = (char*)src->dependentfiles; - - if ( s ) { - while ( *s ) - { - if ( drv_file_in_use(s, drv) ) { - in_use = True; - trim_dependent_file( s ); - } - else - s += strlen(s) + 1; - } + if ( drv_file_in_use(src->helpfile, drv) ) { + in_use = True; + DEBUG(10,("Removing helpfile [%s] from list\n", src->helpfile)); + fstrcpy( src->helpfile, "" ); } + + /* are there any dependentfiles to examine? */ + + if ( !src->dependentfiles ) + return in_use; + while ( *src->dependentfiles[i] ) + { + if ( drv_file_in_use(src->dependentfiles[i], drv) ) { + in_use = True; + DEBUG(10,("Removing [%s] from dependent file list\n", src->dependentfiles[i])); + trim_dependent_file( src->dependentfiles, i ); + } + else + i++; + } return in_use; } @@ -3894,59 +3899,62 @@ BOOL printer_driver_files_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info ) fstring *list = NULL; NT_PRINTER_DRIVER_INFO_LEVEL driver; + if ( !info ) + return False; + + version = info->cversion; + /* loop over all driver versions */ DEBUG(5,("printer_driver_files_in_use: Beginning search through ntdrivers.tdb...\n")); - for ( version=0; versionenvironment, version); + list = NULL; + ndrivers = get_ntdrivers(&list, info->environment, version); - DEBUGADD(4,("we have:[%d] drivers in environment [%s] and version [%d]\n", - ndrivers, info->environment, version)); + DEBUGADD(4,("we have:[%d] drivers in environment [%s] and version [%d]\n", + ndrivers, info->environment, version)); - if (ndrivers == -1) - continue; - - /* check each driver for overlap in files */ + /* check each driver for overlap in files */ - for (i=0; ienvironment, version)) ) - { - SAFE_FREE(list); - return True; - } + if ( !W_ERROR_IS_OK(get_a_printer_driver(&driver, 3, list[i], + info->environment, version)) ) + { + SAFE_FREE(list); + return True; + } - /* check if d2 uses any files from d1 */ - /* only if this is a different driver than the one being deleted */ + /* check if d2 uses any files from d1 */ + /* only if this is a different driver than the one being deleted */ - if ( !strequal(info->name, driver.info_3->name) - || (info->cversion != driver.info_3->cversion) ) - { - if ( trim_overlap_drv_files(info, driver.info_3) ) { - free_a_printer_driver(driver, 3); - SAFE_FREE( list ); - return True; - } + if ( !strequal(info->name, driver.info_3->name) ) + { + if ( trim_overlap_drv_files(info, driver.info_3) ) { + free_a_printer_driver(driver, 3); + SAFE_FREE( list ); + return True; } + } - free_a_printer_driver(driver, 3); - } - - SAFE_FREE(list); - } + free_a_printer_driver(driver, 3); + } + + SAFE_FREE(list); DEBUG(5,("printer_driver_files_in_use: Completed search through ntdrivers.tdb...\n")); + driver.info_3 = info; + + if ( DEBUGLEVEL >= 20 ) + dump_a_printer_driver( driver, 3 ); + return False; } @@ -3956,17 +3964,18 @@ BOOL printer_driver_files_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info ) this. ****************************************************************************/ -static BOOL delete_driver_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, struct current_user *user ) +static BOOL delete_driver_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info_3, struct current_user *user ) { + int i = 0; char *s; connection_struct *conn; DATA_BLOB null_pw; NTSTATUS nt_status; - if ( !i ) + if ( !info_3 ) return False; - DEBUG(6,("delete_driver_files: deleting driver [%s] - version [%d]\n", i->name, i->cversion)); + DEBUG(6,("delete_driver_files: deleting driver [%s] - version [%d]\n", info_3->name, info_3->cversion)); /* * Connect to the print$ share under the same account as the @@ -3994,49 +4003,55 @@ static BOOL delete_driver_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, struct curre /* now delete the files; must strip the '\print$' string from fron of path */ - if ( *i->driverpath ) { - if ( (s = strchr( &i->driverpath[1], '\\' )) != NULL ) { + if ( *info_3->driverpath ) { + if ( (s = strchr( &info_3->driverpath[1], '\\' )) != NULL ) { DEBUG(10,("deleting driverfile [%s]\n", s)); unlink_internals(conn, 0, s); } } - if ( *i->configfile ) { - if ( (s = strchr( &i->configfile[1], '\\' )) != NULL ) { + if ( *info_3->configfile ) { + if ( (s = strchr( &info_3->configfile[1], '\\' )) != NULL ) { DEBUG(10,("deleting configfile [%s]\n", s)); unlink_internals(conn, 0, s); } } - if ( *i->datafile ) { - if ( (s = strchr( &i->datafile[1], '\\' )) != NULL ) { + if ( *info_3->datafile ) { + if ( (s = strchr( &info_3->datafile[1], '\\' )) != NULL ) { DEBUG(10,("deleting datafile [%s]\n", s)); unlink_internals(conn, 0, s); } } - if ( *i->helpfile ) { - if ( (s = strchr( &i->helpfile[1], '\\' )) != NULL ) { + if ( *info_3->helpfile ) { + if ( (s = strchr( &info_3->helpfile[1], '\\' )) != NULL ) { DEBUG(10,("deleting helpfile [%s]\n", s)); unlink_internals(conn, 0, s); } } - s = (char*)i->dependentfiles; + /* check if we are done removing files */ - while ( s && *s ) { - char *file; + if ( info_3->dependentfiles ) + { + while ( *info_3->dependentfiles[i] ) { + char *file; - if ( (file = strchr( s+1, '\\' )) != NULL ) - { - DEBUG(10,("deleting dependent file [%s]\n", file)); - unlink_internals(conn, 0, file ); - file += strlen( file ) + 1; + /* bypass the "\print$" portion of the path */ + + if ( (file = strchr( info_3->dependentfiles[i]+1, '\\' )) != NULL ) + { + DEBUG(10,("deleting dependent file [%s]\n", file)); + unlink_internals(conn, 0, file ); + } + + i++; } - - s = file; } + unbecome_user(); + return True; } @@ -4045,7 +4060,7 @@ static BOOL delete_driver_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, struct curre previously looked up. ***************************************************************************/ -static WERROR delete_printer_driver_internal( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, struct current_user *user, +WERROR delete_printer_driver( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info_3, struct current_user *user, uint32 version, BOOL delete_files ) { pstring key; @@ -4055,14 +4070,14 @@ static WERROR delete_printer_driver_internal( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, /* delete the tdb data first */ - get_short_archi(arch, i->environment); + get_short_archi(arch, info_3->environment); slprintf(key, sizeof(key)-1, "%s%s/%d/%s", DRIVERS_PREFIX, - arch, version, i->name); + arch, version, info_3->name); DEBUG(5,("delete_printer_driver: key = [%s] delete_files = %s\n", key, delete_files ? "TRUE" : "FALSE" )); - ctr.info_3 = i; + ctr.info_3 = info_3; dump_a_printer_driver( ctr, 3 ); kbuf.dptr=key; @@ -4072,7 +4087,7 @@ static WERROR delete_printer_driver_internal( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, dbuf = tdb_fetch( tdb_drivers, kbuf ); if ( !dbuf.dptr ) { - DEBUG(8,("delete_printer_driver_internal: Driver unknown [%s]\n", key)); + DEBUG(8,("delete_printer_driver: Driver unknown [%s]\n", key)); return WERR_UNKNOWN_PRINTER_DRIVER; } @@ -4081,7 +4096,7 @@ static WERROR delete_printer_driver_internal( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, /* ok... the driver exists so the delete should return success */ if (tdb_delete(tdb_drivers, kbuf) == -1) { - DEBUG (0,("delete_printer_driver_internal: fail to delete %s!\n", key)); + DEBUG (0,("delete_printer_driver: fail to delete %s!\n", key)); return WERR_ACCESS_DENIED; } @@ -4092,51 +4107,14 @@ static WERROR delete_printer_driver_internal( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, */ if ( delete_files ) - delete_driver_files( i, user ); - - - DEBUG(5,("delete_printer_driver_internal: driver delete successful [%s]\n", key)); - - return WERR_OK; -} - -/**************************************************************************** - Remove a printer driver from the TDB. This assumes that the the driver was - previously looked up. - ***************************************************************************/ - -WERROR delete_printer_driver( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, struct current_user *user, - uint32 version, BOOL delete_files ) -{ - WERROR err; - - /* - * see if we should delete all versions of this driver - * (DRIVER_ANY_VERSION uis only set for "Windows NT x86") - */ - - if ( version == DRIVER_ANY_VERSION ) - { - /* Windows NT 4.0 */ - - err = delete_printer_driver_internal(i, user, 2, delete_files ); - if ( !W_ERROR_IS_OK(err) && (W_ERROR_V(err) != ERRunknownprinterdriver ) ) - return err; + delete_driver_files( info_3, user ); - /* Windows 2000/XP */ - err = delete_printer_driver_internal(i, user, 3, delete_files ); - if ( !W_ERROR_IS_OK(err) && (W_ERROR_V(err) != ERRunknownprinterdriver ) ) - return err; + DEBUG(5,("delete_printer_driver: driver delete successful [%s]\n", key)); return WERR_OK; } - /* just delete what they asked for */ - - return delete_printer_driver_internal(i, user, version, delete_files ); -} - /**************************************************************************** Store a security desc for a printer. ****************************************************************************/ diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index c4105f9780f..37f8071e694 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -1593,8 +1593,11 @@ WERROR _spoolss_deleteprinterdriver(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIVER fstring driver; fstring arch; NT_PRINTER_DRIVER_INFO_LEVEL info; + NT_PRINTER_DRIVER_INFO_LEVEL info_win2k; int version; struct current_user user; + WERROR status; + WERROR status_win2k = WERR_ACCESS_DENIED; get_current_user(&user, p); @@ -1602,25 +1605,58 @@ WERROR _spoolss_deleteprinterdriver(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIVER unistr2_to_ascii(arch, &q_u->arch, sizeof(arch)-1 ); /* check that we have a valid driver name first */ - if ((version=get_version_id(arch)) == -1) { - /* this is what NT returns */ + + if ((version=get_version_id(arch)) == -1) return WERR_INVALID_ENVIRONMENT; + + ZERO_STRUCT(info); + ZERO_STRUCT(info_win2k); + + if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) + { + /* try for Win2k driver if "Windows NT x86" */ + + if ( version == 2 ) { + version = 3; + if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) { + status = WERR_UNKNOWN_PRINTER_DRIVER; + goto done; + } + } } - /* if they said "Windows NT x86", then try for version 2 & 3 */ + if (printer_driver_in_use(info.info_3)) { + status = WERR_PRINTER_DRIVER_IN_USE; + goto done; + } if ( version == 2 ) - version = DRIVER_ANY_VERSION; + { + if (W_ERROR_IS_OK(get_a_printer_driver(&info_win2k, 3, driver, arch, 3))) + { + /* if we get to here, we now have 2 driver info structures to remove */ + /* remove the Win2k driver first*/ - ZERO_STRUCT(info); + status_win2k = delete_printer_driver(info_win2k.info_3, &user, 3, False ); + free_a_printer_driver( info_win2k, 3 ); + + /* this should not have failed---if it did, report to client */ + if ( !W_ERROR_IS_OK(status_win2k) ) + goto done; + } + } - if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) - return WERR_UNKNOWN_PRINTER_DRIVER; + status = delete_printer_driver(info.info_3, &user, version, False); + + /* if at least one of the deletes succeeded return OK */ - if (printer_driver_in_use(info.info_3)) - return WERR_PRINTER_DRIVER_IN_USE; + if ( W_ERROR_IS_OK(status) || W_ERROR_IS_OK(status_win2k) ) + status = WERR_OK; + +done: + free_a_printer_driver( info, 3 ); - return delete_printer_driver(info.info_3, &user, DRIVER_ANY_VERSION, False); + return status; } /******************************************************************** @@ -1632,10 +1668,13 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV fstring driver; fstring arch; NT_PRINTER_DRIVER_INFO_LEVEL info; + NT_PRINTER_DRIVER_INFO_LEVEL info_win2k; int version; uint32 flags = q_u->delete_flags; BOOL delete_files; struct current_user user; + WERROR status; + WERROR status_win2k = WERR_ACCESS_DENIED; get_current_user(&user, p); @@ -1650,17 +1689,35 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV if ( flags & DPD_DELETE_SPECIFIC_VERSION ) version = q_u->version; - else if ( version == 2 ) - /* if they said "Windows NT x86", then try for version 2 & 3 */ - version = DRIVER_ANY_VERSION; ZERO_STRUCT(info); + ZERO_STRUCT(info_win2k); + + status = get_a_printer_driver(&info, 3, driver, arch, version); - if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) - return WERR_UNKNOWN_PRINTER_DRIVER; + if ( !W_ERROR_IS_OK(status) ) + { + /* if the client asked for a specific version, then we've failed */ - if ( printer_driver_in_use(info.info_3) ) - return WERR_PRINTER_DRIVER_IN_USE; + if ( flags & DPD_DELETE_SPECIFIC_VERSION ) + goto done; + + /* try for Win2k driver if "Windows NT x86" */ + + if ( version == 2 ) + { + version = 3; + if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) { + status = WERR_UNKNOWN_PRINTER_DRIVER; + goto done; + } + } + } + + if ( printer_driver_in_use(info.info_3) ) { + status = WERR_PRINTER_DRIVER_IN_USE; + goto done; + } /* * we have a couple of cases to consider. @@ -1676,16 +1733,48 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV delete_files = flags & (DPD_DELETE_ALL_FILES|DPD_DELETE_UNUSED_FILES); - if ( delete_files ) - { - /* fail if any files are in use and DPD_DELETE_ALL_FILES is set */ + /* fail if any files are in use and DPD_DELETE_ALL_FILES is set */ + + if ( delete_files && printer_driver_files_in_use(info.info_3) & (flags&DPD_DELETE_ALL_FILES) ) { + /* no idea of the correct error here */ + status = WERR_ACCESS_DENIED; + goto done; + } + + + /* also check for W32X86/3 if necessary; maybe we already have? */ + + if ( (version == 2) && ((flags&DPD_DELETE_SPECIFIC_VERSION) != DPD_DELETE_SPECIFIC_VERSION) ) { + if (W_ERROR_IS_OK(get_a_printer_driver(&info_win2k, 3, driver, arch, 3))) + { + + if ( delete_files && printer_driver_files_in_use(info_win2k.info_3) & (flags&DPD_DELETE_ALL_FILES) ) { + /* no idea of the correct error here */ + status = WERR_ACCESS_DENIED; + goto done; + } - if ( printer_driver_files_in_use(info.info_3) & (flags&DPD_DELETE_ALL_FILES) ) - /* no idea of the correct error here */ - return WERR_ACCESS_DENIED; + /* if we get to here, we now have 2 driver info structures to remove */ + /* remove the Win2k driver first*/ + + status_win2k = delete_printer_driver(info.info_3, &user, 3, delete_files); + free_a_printer_driver( info_win2k, 3 ); + + /* this should not have failed---if it did, report to client */ + + if ( !W_ERROR_IS_OK(status_win2k) ) + goto done; + } } - return delete_printer_driver(info.info_3, &user, version, delete_files); + status = delete_printer_driver(info.info_3, &user, version, delete_files); + + if ( W_ERROR_IS_OK(status) || W_ERROR_IS_OK(status_win2k) ) + status = WERR_OK; +done: + free_a_printer_driver( info, 3 ); + + return status; } -- cgit From a7616b2b942eaf3be4e16fb9d38cdb42d8b95a94 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 4 Sep 2002 01:15:01 +0000 Subject: remove inet_aton() --- source/rpcclient/rpcclient.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/rpcclient/rpcclient.c b/source/rpcclient/rpcclient.c index 5f15c575774..5f1f7a9f9a8 100644 --- a/source/rpcclient/rpcclient.c +++ b/source/rpcclient/rpcclient.c @@ -667,7 +667,7 @@ static NTSTATUS process_cmd(struct cli_state *cli, char *cmd) break; } case 'I': - if (!inet_aton(opt_ipaddr, &server_ip)) { + if ( (server_ip.s_addr=inet_addr(opt_ipaddr)) == INADDR_NONE ) { fprintf(stderr, "%s not a valid IP address\n", opt_ipaddr); return 1; -- cgit From ea26b3e8efcb83e16f7eb5add031a8df99046a69 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 4 Sep 2002 02:57:16 +0000 Subject: Quietened some debugs. --- source/nsswitch/winbindd_rpc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/nsswitch/winbindd_rpc.c b/source/nsswitch/winbindd_rpc.c index 5ec34f663d8..58d90929407 100644 --- a/source/nsswitch/winbindd_rpc.c +++ b/source/nsswitch/winbindd_rpc.c @@ -419,7 +419,7 @@ static NTSTATUS lookup_groupmem(struct winbindd_domain *domain, uint32 des_access = SEC_RIGHTS_MAXIMUM_ALLOWED; BOOL got_dom_pol = False, got_group_pol = False; - DEBUG(3,("rpc: lookup_groupmem rid=%u\n", group_rid)); + DEBUG(10,("rpc: lookup_groupmem %s rid=%u\n", domain->name, group_rid)); *num_names = 0; @@ -523,7 +523,7 @@ static NTSTATUS sequence_number(struct winbindd_domain *domain, uint32 *seq) BOOL got_dom_pol = False; uint32 des_access = SEC_RIGHTS_MAXIMUM_ALLOWED; - DEBUG(3,("rpc: sequence_number\n")); + DEBUG(10,("rpc: fetch sequence_number for %s\n", domain->name)); *seq = DOM_SEQUENCE_NONE; -- cgit From 47b8ec632e20aa86c34f6a0a82d886fcc76f3000 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 4 Sep 2002 04:30:41 +0000 Subject: Fix typo in comment. --- source/rpc_parse/parse_spoolss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/rpc_parse/parse_spoolss.c b/source/rpc_parse/parse_spoolss.c index 29902d395ef..55c387cdc51 100644 --- a/source/rpc_parse/parse_spoolss.c +++ b/source/rpc_parse/parse_spoolss.c @@ -659,7 +659,7 @@ BOOL spoolss_io_devmode(char *desc, prs_struct *ps, int depth, DEVICEMODE *devmo { "panningheight", NULL } }; - /* assign at run time to keep non-gcc vompilers happy */ + /* assign at run time to keep non-gcc compilers happy */ opt_fields[0].field = &devmode->icmmethod; opt_fields[1].field = &devmode->icmintent; -- cgit From 474cc910c73e5567313bac438c7324a80e2e90d8 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 4 Sep 2002 08:08:03 +0000 Subject: Set default ACB attributes on 'unixsam' accounts. This means that machine accounts added first to /etc/passwd will be honered correctly. Also, users 'upgraded' to smbpasswd will have the right flags. Andrew Bartlett --- source/passdb/passdb.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/passdb/passdb.c b/source/passdb/passdb.c index 7a8c40346fa..05450c9f2f2 100644 --- a/source/passdb/passdb.c +++ b/source/passdb/passdb.c @@ -251,6 +251,15 @@ NTSTATUS pdb_fill_sam_pw(SAM_ACCOUNT *sam_account, const struct passwd *pwd) pwd->pw_name, global_myname, pwd->pw_uid, pwd->pw_gid), False); + if (!pdb_set_acct_ctrl(sam_account, ACB_NORMAL)) { + DEBUG(1, ("Failed to set 'normal account' flags for user %s.\n", pwd->pw_name)); + return NT_STATUS_UNSUCCESSFUL; + } + } else { + if (!pdb_set_acct_ctrl(sam_account, ACB_WSTRUST)) { + DEBUG(1, ("Failed to set 'trusted workstation account' flags for user %s.\n", pwd->pw_name)); + return NT_STATUS_UNSUCCESSFUL; + } } return NT_STATUS_OK; } -- cgit From 13dc9e37d2422c45ac5005dce26b349f88dbe505 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 4 Sep 2002 10:58:42 +0000 Subject: don't use ENCTYPE_ARCFOUR_HMAC unless the kerberos lib supports it --- source/libsmb/clikrb5.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/source/libsmb/clikrb5.c b/source/libsmb/clikrb5.c index 955a93285c7..1fc400edb0e 100644 --- a/source/libsmb/clikrb5.c +++ b/source/libsmb/clikrb5.c @@ -20,10 +20,6 @@ #include "includes.h" -#ifndef ENCTYPE_ARCFOUR_HMAC -#define ENCTYPE_ARCFOUR_HMAC 0x0017 -#endif - #ifdef HAVE_KRB5 /* we can't use krb5_mk_req because w2k wants the service to be in a particular format @@ -98,7 +94,10 @@ DATA_BLOB krb5_get_ticket(char *principal) krb5_context context; krb5_auth_context auth_context = NULL; DATA_BLOB ret; - krb5_enctype enc_types[] = {ENCTYPE_ARCFOUR_HMAC, + krb5_enctype enc_types[] = { +#ifdef ENCTYPE_ARCFOUR_HMAC + ENCTYPE_ARCFOUR_HMAC, +#endif ENCTYPE_DES_CBC_MD5, ENCTYPE_NULL}; -- cgit From aca333719695b278843c59e1c6eb07d6655fd59c Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 4 Sep 2002 19:13:06 +0000 Subject: Add bcast_msg_flags to connection struct. Allows sender to filter when sending broadcast messages. Also initial cut-down of printing notify messages (not yet finished). Jeremy. --- source/include/local.h | 4 ---- source/include/messages.h | 8 ++++++++ source/include/smb.h | 1 + source/lib/messages.c | 25 ++++++++++++++++++++++--- source/printing/printing.c | 30 ++++++++++++++++++------------ source/smbd/connection.c | 13 +++++++------ source/smbd/reply.c | 2 +- source/smbd/server.c | 2 +- source/smbd/service.c | 2 +- 9 files changed, 59 insertions(+), 28 deletions(-) diff --git a/source/include/local.h b/source/include/local.h index 15231e92ee2..5096e13fc39 100644 --- a/source/include/local.h +++ b/source/include/local.h @@ -67,10 +67,6 @@ #define MAX_OPEN_FILES 10000 #endif -/* the max number of simultanous connections to the server by all clients */ -/* zero means no limit. */ -#define MAXSTATUS 0 - #define WORDMAX 0xFFFF /* the maximum password length before we declare a likely attack */ diff --git a/source/include/messages.h b/source/include/messages.h index 58e606b40fa..0e995039ff5 100644 --- a/source/include/messages.h +++ b/source/include/messages.h @@ -59,4 +59,12 @@ #define MSG_SMB_SAM_SYNC 3003 #define MSG_SMB_SAM_REPL 3004 +/* Flags to classify messages - used in message_send_all() */ +/* Sender will filter by flag. */ + +#define FLAG_MSG_GENERAL 0x0001 +#define FLAG_MSG_SMBD 0x0002 +#define FLAG_MSG_NMBD 0x0004 +#define FLAG_MSG_PRINTING 0x0008 + #endif diff --git a/source/include/smb.h b/source/include/smb.h index f2eb37096cd..909c1a57ecd 100644 --- a/source/include/smb.h +++ b/source/include/smb.h @@ -718,6 +718,7 @@ struct connections_data { char addr[24]; char machine[FSTRING_LEN]; time_t start; + uint32 bcast_msg_flags; }; diff --git a/source/lib/messages.c b/source/lib/messages.c index e6d2de4a58b..21470dff5c8 100644 --- a/source/lib/messages.c +++ b/source/lib/messages.c @@ -382,10 +382,11 @@ void message_deregister(int msg_type) struct msg_all { int msg_type; + uint32 msg_flag; const void *buf; size_t len; BOOL duplicates; - int n_sent; + int n_sent; }; /**************************************************************************** @@ -405,13 +406,20 @@ static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void if (crec.cnum != -1) return 0; - /* if the msg send fails because the pid was not found (i.e. smbd died), + /* Don't send if the receiver hasn't registered an interest. */ + + if(!(crec.bcast_msg_flags & msg_all->msg_flag)) + return 0; + + /* If the msg send fails because the pid was not found (i.e. smbd died), * the msg has already been deleted from the messages.tdb.*/ + if (!message_send_pid(crec.pid, msg_all->msg_type, msg_all->buf, msg_all->len, msg_all->duplicates)) { - /* if the pid was not found delete the entry from connections.tdb */ + /* If the pid was not found delete the entry from connections.tdb */ + if (errno == ESRCH) { DEBUG(2,("pid %u doesn't exist - deleting connections %d [%s]\n", (unsigned int)crec.pid, crec.cnum, crec.name)); @@ -442,6 +450,17 @@ BOOL message_send_all(TDB_CONTEXT *conn_tdb, int msg_type, struct msg_all msg_all; msg_all.msg_type = msg_type; + if (msg_type < 1000) + msg_all.msg_flag = FLAG_MSG_GENERAL; + else if (msg_type > 1000 && msg_type < 2000) + msg_all.msg_flag = FLAG_MSG_NMBD; + else if (msg_type > 2000 && msg_type < 3000) + msg_all.msg_flag = FLAG_MSG_PRINTING; + else if (msg_type > 3000 && msg_type < 4000) + msg_all.msg_flag = FLAG_MSG_SMBD; + else + return False; + msg_all.buf = buf; msg_all.len = len; msg_all.duplicates = duplicates_allowed; diff --git a/source/printing/printing.c b/source/printing/printing.c index f3ee1a0d63f..0dacfe820cf 100644 --- a/source/printing/printing.c +++ b/source/printing/printing.c @@ -460,7 +460,7 @@ static void pjob_store_notify(int snum, uint32 jobid, struct printjob *old_data, Store a job structure back to the database. ****************************************************************************/ -static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob) +static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob, BOOL donotify) { TDB_DATA old_data, new_data; BOOL ret; @@ -483,7 +483,7 @@ static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob) /* Send notify updates for what has changed */ - if (ret && (old_data.dsize == 0 || old_data.dsize == sizeof(*pjob))) { + if (donotify && ret && (old_data.dsize == 0 || old_data.dsize == sizeof(*pjob))) { pjob_store_notify( snum, jobid, (struct printjob *)old_data.dptr, (struct printjob *)new_data.dptr); @@ -581,7 +581,7 @@ static void print_unix_job(int snum, print_queue_struct *q) fstrcpy(pj.user, q->fs_user); fstrcpy(pj.queuename, lp_const_servicename(snum)); - pjob_store(snum, jobid, &pj); + pjob_store(snum, jobid, &pj, True); } @@ -868,7 +868,7 @@ static void print_queue_update(int snum) pjob->sysjob = queue[i].job; pjob->status = queue[i].status; - pjob_store(snum, jobid, pjob); + pjob_store(snum, jobid, pjob, True); } /* now delete any queued entries that don't appear in the @@ -977,7 +977,7 @@ BOOL print_job_set_name(int snum, uint32 jobid, char *name) return False; fstrcpy(pjob->jobname, name); - return pjob_store(snum, jobid, pjob); + return pjob_store(snum, jobid, pjob, True); } /**************************************************************************** @@ -1009,7 +1009,7 @@ static BOOL print_job_delete1(int snum, uint32 jobid) /* Set the tdb entry to be deleting. */ pjob->status = LPQ_DELETING; - pjob_store(snum, jobid, pjob); + pjob_store(snum, jobid, pjob, True); if (pjob->spooled && pjob->sysjob != -1) result = (*(current_printif->job_delete))(snum, pjob); @@ -1172,7 +1172,7 @@ int print_job_write(int snum, uint32 jobid, const char *buf, int size) return_code = write(pjob->fd, buf, size); if (return_code>0) { pjob->size += size; - pjob_store(snum, jobid, pjob); + pjob_store(snum, jobid, pjob, True); } return return_code; } @@ -1265,6 +1265,7 @@ int print_queue_length(int snum, print_status_struct *pstatus) return len; } +#if 0 /* JRATEST */ /**************************************************************************** Determine the number of jobs in all queues. This is very expensive. Don't call ! JRA. @@ -1298,6 +1299,7 @@ static int get_total_jobs(void) } return total_jobs; } +#endif /* JRATEST */ /*************************************************************************** Start spooling a job - return the jobid. @@ -1362,6 +1364,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) return (uint32)-1; } +#if 0 /* JRATEST */ /* Insure the maximum print jobs in the system is not violated */ if (lp_totalprintjobs() && get_total_jobs() > lp_totalprintjobs()) { DEBUG(3, ("print_job_start: number of jobs (%d) larger than max printjobs per system (%d).\n", @@ -1370,6 +1373,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) errno = ENOSPC; return (uint32)-1; } +#endif /* JRATEST */ /* create the database entry */ ZERO_STRUCT(pjob); @@ -1407,7 +1411,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) if (!print_job_exists(snum, jobid)) break; } - if (jobid == next_jobid || !pjob_store(snum, jobid, &pjob)) { + if (jobid == next_jobid || !pjob_store(snum, jobid, &pjob, False)) { DEBUG(3, ("print_job_start: either jobid (%d)==next_jobid(%d) or pjob_store failed.\n", jobid, next_jobid )); jobid = -1; @@ -1420,6 +1424,9 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) goto fail; } + /* We've finished with the INFO/nextjob lock. */ + tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); + /* we have a job entry - now create the spool file */ slprintf(pjob.filename, sizeof(pjob.filename)-1, "%s/%s%.8u.XXXXXX", path, PRINT_SPOOL_PREFIX, (unsigned int)jobid); @@ -1438,9 +1445,8 @@ to open spool file %s.\n", pjob.filename)); goto fail; } - pjob_store(snum, jobid, &pjob); + pjob_store(snum, jobid, &pjob, False); - tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); release_print_db(pdb); /* @@ -1481,7 +1487,7 @@ void print_job_endpage(int snum, uint32 jobid) return; pjob->page_count++; - pjob_store(snum, jobid, pjob); + pjob_store(snum, jobid, pjob, True); } /**************************************************************************** @@ -1539,7 +1545,7 @@ BOOL print_job_end(int snum, uint32 jobid, BOOL normal_close) pjob->spooled = True; pjob->status = LPQ_QUEUED; - pjob_store(snum, jobid, pjob); + pjob_store(snum, jobid, pjob, True); /* make sure the database is up to date */ if (print_cache_expired(snum)) diff --git a/source/smbd/connection.c b/source/smbd/connection.c index 5609c2963d8..bc897a95cb3 100644 --- a/source/smbd/connection.c +++ b/source/smbd/connection.c @@ -28,10 +28,9 @@ static TDB_CONTEXT *tdb; TDB_CONTEXT *conn_tdb_ctx(void) { - if (!tdb) { + if (!tdb) tdb = tdb_open_log(lock_path("connections.tdb"), 0, TDB_CLEAR_IF_FIRST|TDB_DEFAULT, O_RDWR | O_CREAT, 0644); - } return tdb; } @@ -45,7 +44,8 @@ BOOL yield_connection(connection_struct *conn,char *name) struct connections_key key; TDB_DATA kbuf; - if (!tdb) return False; + if (!tdb) + return False; DEBUG(3,("Yielding connection to %s\n",name)); @@ -111,16 +111,16 @@ static int count_fn( TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *u Claim an entry in the connections database. ****************************************************************************/ -BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOOL Clear) +BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOOL Clear, uint32 msg_flags) { struct connections_key key; struct connections_data crec; TDB_DATA kbuf, dbuf; - if (!tdb) { + if (!tdb) tdb = tdb_open_log(lock_path("connections.tdb"), 0, TDB_CLEAR_IF_FIRST|TDB_DEFAULT, O_RDWR | O_CREAT, 0644); - } + if (!tdb) return False; @@ -176,6 +176,7 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO lp_servicename(SNUM(conn)),sizeof(crec.name)-1); } crec.start = time(NULL); + crec.bcast_msg_flags = msg_flags; StrnCpy(crec.machine,get_remote_machine_name(),sizeof(crec.machine)-1); StrnCpy(crec.addr,conn?conn->client_address:client_addr(),sizeof(crec.addr)-1); diff --git a/source/smbd/reply.c b/source/smbd/reply.c index 010f0e47d31..263626dcc16 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -113,7 +113,7 @@ int reply_special(char *inbuf,char *outbuf) reload_services(True); reopen_logs(); - claim_connection(NULL,"",MAXSTATUS,True); + claim_connection(NULL,"",0,True,FLAG_MSG_GENERAL|FLAG_MSG_SMBD|FLAG_MSG_PRINTING); already_got_session = True; break; diff --git a/source/smbd/server.c b/source/smbd/server.c index c748a87da29..8082c22cff8 100644 --- a/source/smbd/server.c +++ b/source/smbd/server.c @@ -858,7 +858,7 @@ static void usage(char *pname) register_dmalloc_msgs(); /* Setup the main smbd so that we can get messages. */ - claim_connection(NULL,"",0,True); + claim_connection(NULL,"",0,True,FLAG_MSG_GENERAL|FLAG_MSG_SMBD); /* DO NOT ENABLE THIS TILL YOU COPE WITH KILLING THESE TASKS AND INETD diff --git a/source/smbd/service.c b/source/smbd/service.c index d475451e6be..a8a590da804 100644 --- a/source/smbd/service.c +++ b/source/smbd/service.c @@ -578,7 +578,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser, if (!claim_connection(conn, lp_servicename(SNUM(conn)), lp_max_connections(SNUM(conn)), - False)) { + False,0)) { DEBUG(1,("too many connections - rejected\n")); conn_free(conn); *status = NT_STATUS_INSUFFICIENT_RESOURCES; -- cgit From 8595c6ce4d74539089b600b3b0ff858a04b793ff Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 4 Sep 2002 21:59:38 +0000 Subject: Merge of (apparently working :-) new printing notify code. Jeremy. --- source/printing/notify.c | 110 +++++++++++++++++++++++++++++++------ source/rpc_server/srv_spoolss_nt.c | 59 ++++++++++++++++++-- source/smbd/connection.c | 71 +++++++++++++++++++----- source/smbd/process.c | 10 +++- 4 files changed, 213 insertions(+), 37 deletions(-) diff --git a/source/printing/notify.c b/source/printing/notify.c index 925d49a21d6..4bde6a94f69 100644 --- a/source/printing/notify.c +++ b/source/printing/notify.c @@ -22,21 +22,96 @@ #include "printing.h" -/* - * Print notification routines - */ +static TALLOC_CTX *send_ctx; + +static struct notify_queue { + struct notify_queue *next, *prev; + void *buf; + size_t buflen; +} *notify_queue_head = NULL; + +/******************************************************************* + Used to decide if we need a short select timeout. +*******************************************************************/ + +BOOL print_notify_messages_pending(void) +{ + return (notify_queue_head != NULL); +} + +/******************************************************************* + Actually send the batched messages. +*******************************************************************/ + +void print_notify_send_messages(void) +{ + TDB_CONTEXT *tdb; + char *buf; + struct notify_queue *pq; + size_t msg_count = 0, offset = 0; + + if (!print_notify_messages_pending()) + return; + + if (!send_ctx) + return; + + tdb = conn_tdb_ctx(); + + if (!tdb) { + DEBUG(3, ("Failed to open connections database in send_spoolss_notify2_msg\n")); + return; + } + + /* Count the space needed to send the messages. */ + for (pq = notify_queue_head; pq; pq = pq->next, msg_count++) + offset += (pq->buflen + 4); + + offset += 4; /* For count. */ + + buf = talloc(send_ctx, offset); + if (!buf) { + DEBUG(0,("print_notify_send_messages: Out of memory\n")); + talloc_destroy_pool(send_ctx); + return; + } + + offset = 0; + SIVAL(buf,offset,msg_count); + offset += 4; + for (pq = notify_queue_head; pq; pq = pq->next) { + SIVAL(buf,offset,pq->buflen); + offset += 4; + memcpy(buf + offset, pq->buf, pq->buflen); + offset += pq->buflen; + } + + message_send_all(tdb, MSG_PRINTER_NOTIFY2, buf, offset, False, NULL); + talloc_destroy_pool(send_ctx); + notify_queue_head = NULL; +} + +/******************************************************************* + Batch up print notify messages. +*******************************************************************/ static void send_spoolss_notify2_msg(struct spoolss_notify_msg *msg) { char *buf = NULL; - int buflen = 0, len; - TDB_CONTEXT *tdb; + size_t buflen = 0, len; + struct notify_queue *pnqueue; /* Let's not waste any time with this */ if (lp_disable_spoolss()) return; + if (!send_ctx) + send_ctx = talloc_init_named("print notify queue"); + + if (!send_ctx) + goto fail; + /* Flatten data into a message */ again: @@ -59,24 +134,27 @@ again: msg->len, msg->notify.data); if (buflen != len) { - buf = Realloc(buf, len); + buf = talloc_realloc(send_ctx, buf, len); + if (!buf) + goto fail; buflen = len; goto again; } - /* Send message */ + /* Store the message on the pending queue. */ - tdb = conn_tdb_ctx(); + pnqueue = talloc(send_ctx, sizeof(*pnqueue)); + if (!pnqueue) + goto fail; - if (!tdb) { - DEBUG(3, ("Failed to open connections database in send_spoolss_notify2_msg\n")); - goto done; - } - - message_send_all(tdb, MSG_PRINTER_NOTIFY2, buf, buflen, False, NULL); + pnqueue->buf = buf; + pnqueue->buflen = buflen; + DLIST_ADD(notify_queue_head, pnqueue); + return; + + fail: -done: - SAFE_FREE(buf); + DEBUG(0,("send_spoolss_notify2_msg: Out of memory.\n")); } static void send_notify_field_values(const char *printer_name, uint32 type, diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index 37f8071e694..a20fa615fdb 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -220,6 +220,9 @@ static void free_printer_entry(void *ptr) Printer->notify.option=NULL; Printer->notify.client_connected=False; + /* Tell the connections db we're not interested in printer notify messages. */ + register_message_flags(False, FLAG_MSG_PRINTING); + /* Remove from the internal list. */ DLIST_REMOVE(printers_list, Printer); @@ -728,8 +731,7 @@ static struct notify2_message_table job_notify_table[] = { back registered **********************************************************************/ -static void process_notify2_message(struct spoolss_notify_msg *msg, - TALLOC_CTX *mem_ctx) +static void process_notify2_message(struct spoolss_notify_msg *msg, TALLOC_CTX *mem_ctx) { Printer_entry *p; @@ -837,8 +839,7 @@ done: Receive a notify2 message ********************************************************************/ -static void receive_notify2_message(int msg_type, pid_t src, void *buf, - size_t len) +static void receive_notify2_message(void *buf, size_t len) { struct spoolss_notify_msg msg; int offset = 0; @@ -882,6 +883,49 @@ static void receive_notify2_message(int msg_type, pid_t src, void *buf, talloc_destroy(mem_ctx); } +/******************************************************************** + Receive a notify2 message list + ********************************************************************/ + +static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, size_t len) +{ + size_t msg_count, i; + char *buf = (char *)msg; + char *msg_ptr; + + if (len < 4) + goto bad_msg; + + msg_count = IVAL(buf, 0); + msg_ptr = buf + 4; + + if (msg_count == 0) + goto bad_msg; + + for (i = 0; i < msg_count; i++) { + size_t msg_len; + + if (msg_ptr + 4 - buf > len) + goto bad_msg; + + msg_len = IVAL(msg_ptr,0); + msg_ptr += 4; + + if (msg_ptr + msg_len - buf > len) + goto bad_msg; + receive_notify2_message(msg_ptr, msg_len); + msg_ptr += msg_len; + } + + DEBUG(10,("receive_notify2_message_list: processed %u messages\n", + (unsigned int)msg_count )); + return; + + bad_msg: + + DEBUG(0,("receive_notify2_message_list: bad message format !\n")); +} + /******************************************************************** Send a message to ourself about new driver being installed so we can upgrade the information for each printer bound to this @@ -2133,7 +2177,7 @@ static BOOL srv_spoolss_replyopenprinter(char *printer, uint32 localprinter, uin if(!spoolss_connect_to_client(¬ify_cli, unix_printer)) return False; - message_register(MSG_PRINTER_NOTIFY2, receive_notify2_message); + message_register(MSG_PRINTER_NOTIFY2, receive_notify2_message_list); } smb_connections++; @@ -2196,6 +2240,8 @@ WERROR _spoolss_rffpcnex(pipes_struct *p, SPOOL_Q_RFFPCNEX *q_u, SPOOL_R_RFFPCNE &Printer->notify.client_hnd)) return WERR_SERVER_UNAVAILABLE; + /* Tell the connections db we're interested in printer notify messages. */ + register_message_flags(True, FLAG_MSG_PRINTING); Printer->notify.client_connected=True; return WERR_OK; @@ -5544,6 +5590,9 @@ WERROR _spoolss_fcpn(pipes_struct *p, SPOOL_Q_FCPN *q_u, SPOOL_R_FCPN *r_u) free_spool_notify_option(&Printer->notify.option); Printer->notify.client_connected=False; + /* Tell the connections db we're not interested in printer notify messages. */ + register_message_flags(False, FLAG_MSG_PRINTING); + return WERR_OK; } diff --git a/source/smbd/connection.c b/source/smbd/connection.c index bc897a95cb3..ad394a01ca0 100644 --- a/source/smbd/connection.c +++ b/source/smbd/connection.c @@ -35,6 +35,17 @@ TDB_CONTEXT *conn_tdb_ctx(void) return tdb; } +static void make_conn_key(connection_struct *conn,char *name, TDB_DATA *pkbuf, struct connections_key *pkey) +{ + ZERO_STRUCTP(pkey); + pkey->pid = sys_getpid(); + pkey->cnum = conn?conn->cnum:-1; + fstrcpy(pkey->name, name); + + pkbuf->dptr = (char *)pkey; + pkbuf->dsize = sizeof(*pkey); +} + /**************************************************************************** Delete a connection record. ****************************************************************************/ @@ -49,13 +60,7 @@ BOOL yield_connection(connection_struct *conn,char *name) DEBUG(3,("Yielding connection to %s\n",name)); - ZERO_STRUCT(key); - key.pid = sys_getpid(); - key.cnum = conn?conn->cnum:-1; - fstrcpy(key.name, name); - - kbuf.dptr = (char *)&key; - kbuf.dsize = sizeof(key); + make_conn_key(conn, name, &kbuf, &key); if (tdb_delete(tdb, kbuf) != 0) { int dbg_lvl = (!conn && (tdb_error(tdb) == TDB_ERR_NOEXIST)) ? 3 : 0; @@ -88,7 +93,7 @@ static int count_fn( TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *u memcpy(&crec, dbuf.dptr, sizeof(crec)); - if (crec.cnum == -1) + if (crec.cnum == -1) return 0; /* If the pid was not found delete the entry from connections.tdb */ @@ -156,13 +161,7 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO DEBUG(5,("claiming %s %d\n",name,max_connections)); - ZERO_STRUCT(key); - key.pid = sys_getpid(); - key.cnum = conn?conn->cnum:-1; - fstrcpy(key.name, name); - - kbuf.dptr = (char *)&key; - kbuf.dsize = sizeof(key); + make_conn_key(conn, name, &kbuf, &key); /* fill in the crec */ ZERO_STRUCT(crec); @@ -192,3 +191,45 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO return True; } + +BOOL register_message_flags(BOOL doreg, uint32 msg_flags) +{ + struct connections_key key; + struct connections_data *pcrec; + TDB_DATA kbuf, dbuf; + + if (!tdb) + return False; + + DEBUG(10,("register_message_flags: %s flags 0x%x\n", + doreg ? "adding" : "removing", + (unsigned int)msg_flags )); + + make_conn_key(NULL, "", &kbuf, &key); + + dbuf = tdb_fetch(tdb, kbuf); + if (!dbuf.dptr) { + DEBUG(0,("register_message_flags: tdb_fetch failed\n")); + return False; + } + + pcrec = (struct connections_data *)dbuf.dptr; + pcrec->bcast_msg_flags = msg_flags; + if (doreg) + pcrec->bcast_msg_flags |= msg_flags; + else + pcrec->bcast_msg_flags &= ~msg_flags; + + if (tdb_store(tdb, kbuf, dbuf, TDB_REPLACE) != 0) { + DEBUG(0,("register_message_flags: tdb_store failed with error %s.\n", + tdb_errorstr(tdb) )); + SAFE_FREE(dbuf.dptr); + return False; + } + + DEBUG(10,("register_message_flags: new flags 0x%x\n", + (unsigned int)pcrec->bcast_msg_flags )); + + SAFE_FREE(dbuf.dptr); + return True; +} diff --git a/source/smbd/process.c b/source/smbd/process.c index 2c35eadb18a..c796797fad1 100644 --- a/source/smbd/process.c +++ b/source/smbd/process.c @@ -1030,7 +1030,11 @@ static int setup_select_timeout(void) select_timeout *= 1000; t = change_notify_timeout(); - if (t != -1) select_timeout = MIN(select_timeout, t*1000); + if (t != -1) + select_timeout = MIN(select_timeout, t*1000); + + if (print_notify_messages_pending()) + select_timeout = MIN(select_timeout, 1000); return select_timeout; } @@ -1190,6 +1194,10 @@ machine %s in domain %s.\n", global_myname, global_myworkgroup )); force_check_log_size(); check_log_size(); + /* Send any queued printer notify message to interested smbd's. */ + + print_notify_send_messages(); + /* * Modify the select timeout depending upon * what we have remaining in our queues. -- cgit From 65047aee7fefefaecded9772184a54c046ab1784 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 4 Sep 2002 22:02:53 +0000 Subject: Only cache the user list on the SAMR handle for a particular acb_mask/all_machines flag combination. The avoids a bug where we were listing users in the 'trusting domains' dialog in usrmgr. We might also need to invalidate the cache for some other SAMR actions. Andrew Bartlett --- source/rpc_server/srv_samr_nt.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c index 927acb24b8a..e2336aca557 100644 --- a/source/rpc_server/srv_samr_nt.c +++ b/source/rpc_server/srv_samr_nt.c @@ -57,6 +57,8 @@ struct samr_info { DOM_SID sid; uint32 status; /* some sort of flag. best to record it. comes from opnum 0x39 */ uint32 acc_granted; + uint16 acb_mask; + BOOL all_machines; DISP_INFO disp_info; TALLOC_CTX *mem_ctx; @@ -150,26 +152,36 @@ static struct samr_info *get_samr_info_by_sid(DOM_SID *psid) return info; } + /******************************************************************* Function to free the per handle data. ********************************************************************/ -static void free_samr_db(struct samr_info *info) +static void free_samr_users(struct samr_info *info) { int i; - /* Groups are talloced */ - if (info->disp_info.user_dbloaded){ for (i=0; idisp_info.num_user_account; i++) { /* Not really a free, actually a 'clear' */ pdb_free_sam(&info->disp_info.disp_user_info[i].sam); } } - info->disp_info.user_dbloaded=False; + info->disp_info.num_user_account=0; +} + + +/******************************************************************* + Function to free the per handle data. + ********************************************************************/ +static void free_samr_db(struct samr_info *info) +{ + /* Groups are talloced */ + + free_samr_users(info); + info->disp_info.group_dbloaded=False; info->disp_info.num_group_account=0; - info->disp_info.num_user_account=0; } @@ -208,11 +220,15 @@ static NTSTATUS load_sampwd_entries(struct samr_info *info, uint16 acb_mask, BOO DEBUG(10,("load_sampwd_entries\n")); /* if the snapshoot is already loaded, return */ - if (info->disp_info.user_dbloaded==True) { + if ((info->disp_info.user_dbloaded==True) + && (info->acb_mask == acb_mask) + && (info->all_machines == all_machines)) { DEBUG(10,("load_sampwd_entries: already in memory\n")); return NT_STATUS_OK; } + free_samr_users(info); + if (!pdb_setsampwent(False)) { DEBUG(0, ("load_sampwd_entries: Unable to open passdb.\n")); return NT_STATUS_ACCESS_DENIED; @@ -261,6 +277,8 @@ static NTSTATUS load_sampwd_entries(struct samr_info *info, uint16 acb_mask, BOO /* the snapshoot is in memory, we're ready to enumerate fast */ + info->acb_mask = acb_mask; + info->all_machines = all_machines; info->disp_info.user_dbloaded=True; DEBUG(12,("load_sampwd_entries: done\n")); -- cgit From 8828e2ea3c668aab6cda1b4be9a7e4ce1c23ca81 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 4 Sep 2002 23:40:49 +0000 Subject: Added better error code on out of space. Removed total jobs check - not applicable any more. Jeremy. --- source/include/doserr.h | 13 ++++++---- source/printing/printing.c | 49 +------------------------------------- source/rpc_server/srv_spoolss_nt.c | 7 ++++++ 3 files changed, 16 insertions(+), 53 deletions(-) diff --git a/source/include/doserr.h b/source/include/doserr.h index 135d799596c..93936463e68 100644 --- a/source/include/doserr.h +++ b/source/include/doserr.h @@ -148,17 +148,20 @@ /* these are win32 error codes. There are only a few places where these matter for Samba, primarily in the NT printing code */ #define WERR_OK W_ERROR(0) +#define WERR_BADFUNC W_ERROR(1) #define WERR_BADFILE W_ERROR(2) #define WERR_ACCESS_DENIED W_ERROR(5) #define WERR_BADFID W_ERROR(6) -#define WERR_BADFUNC W_ERROR(1) -#define WERR_INSUFFICIENT_BUFFER W_ERROR(122) +#define WERR_NOMEM W_ERROR(8) +#define WERR_GENERAL_FAILURE W_ERROR(31) +#define WERR_NOT_SUPPORTED W_ERROR(50) +#define WERR_PRINTQ_FULL W_ERROR(61) +#define WERR_NO_SPOOL_SPACE W_ERROR(62) #define WERR_NO_SUCH_SHARE W_ERROR(67) #define WERR_ALREADY_EXISTS W_ERROR(80) -#define WERR_INVALID_PARAM W_ERROR(87) -#define WERR_NOT_SUPPORTED W_ERROR(50) #define WERR_BAD_PASSWORD W_ERROR(86) -#define WERR_NOMEM W_ERROR(8) +#define WERR_INVALID_PARAM W_ERROR(87) +#define WERR_INSUFFICIENT_BUFFER W_ERROR(122) #define WERR_INVALID_NAME W_ERROR(123) #define WERR_UNKNOWN_LEVEL W_ERROR(124) #define WERR_OBJECT_PATH_INVALID W_ERROR(161) diff --git a/source/printing/printing.c b/source/printing/printing.c index 0dacfe820cf..c6a210d0188 100644 --- a/source/printing/printing.c +++ b/source/printing/printing.c @@ -1265,42 +1265,6 @@ int print_queue_length(int snum, print_status_struct *pstatus) return len; } -#if 0 /* JRATEST */ -/**************************************************************************** - Determine the number of jobs in all queues. This is very expensive. Don't - call ! JRA. -****************************************************************************/ - -static int get_total_jobs(void) -{ - int total_jobs = 0; - int snum; - int services = lp_numservices(); - - for (snum = 0; snum < services; snum++) { - struct tdb_print_db *pdb; - int jobs; - - if (!lp_print_ok(snum)) - continue; - - pdb = get_print_db_byname(lp_const_servicename(snum)); - if (!pdb) - continue; - - /* make sure the database is up to date */ - if (print_cache_expired(snum)) - print_queue_update(snum); - - jobs = tdb_fetch_int32(pdb->tdb, "INFO/total_jobs"); - if (jobs > 0) - total_jobs += jobs; - release_print_db(pdb); - } - return total_jobs; -} -#endif /* JRATEST */ - /*************************************************************************** Start spooling a job - return the jobid. ***************************************************************************/ @@ -1364,17 +1328,6 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) return (uint32)-1; } -#if 0 /* JRATEST */ - /* Insure the maximum print jobs in the system is not violated */ - if (lp_totalprintjobs() && get_total_jobs() > lp_totalprintjobs()) { - DEBUG(3, ("print_job_start: number of jobs (%d) larger than max printjobs per system (%d).\n", - njobs, lp_totalprintjobs() )); - release_print_db(pdb); - errno = ENOSPC; - return (uint32)-1; - } -#endif /* JRATEST */ - /* create the database entry */ ZERO_STRUCT(pjob); pjob.pid = local_pid; @@ -1445,7 +1398,7 @@ to open spool file %s.\n", pjob.filename)); goto fail; } - pjob_store(snum, jobid, &pjob, False); + pjob_store(snum, jobid, &pjob, True); release_print_db(pdb); diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index a20fa615fdb..02360574759 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -5159,6 +5159,13 @@ WERROR _spoolss_writeprinter(pipes_struct *p, SPOOL_Q_WRITEPRINTER *q_u, SPOOL_R return WERR_BADFID; (*buffer_written) = print_job_write(snum, Printer->jobid, (char *)buffer, buffer_size); + if (*buffer_written == -1) { + r_u->buffer_written = 0; + if (errno == ENOSPC) + return WERR_NO_SPOOL_SPACE; + else + return WERR_ACCESS_DENIED; + } r_u->buffer_written = q_u->buffer_size2; -- cgit From 561204905b78323fd0a03cc7ec5c9dbb2295bd5b Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 5 Sep 2002 02:00:14 +0000 Subject: The new popt_common_debug code obviates the need to muck around with AllowDebugChange, saving the debuglevel across lp_load() calls etc. --- source/rpcclient/rpcclient.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/source/rpcclient/rpcclient.c b/source/rpcclient/rpcclient.c index 5f1f7a9f9a8..880fdc599a8 100644 --- a/source/rpcclient/rpcclient.c +++ b/source/rpcclient/rpcclient.c @@ -581,7 +581,6 @@ static NTSTATUS process_cmd(struct cli_state *cli, char *cmd) static int got_pass = 0; BOOL interactive = True; int opt; - int olddebug; static char *cmdstr = ""; const char *server; struct cli_state *cli; @@ -598,7 +597,6 @@ static NTSTATUS process_cmd(struct cli_state *cli, char *cmd) struct cmd_set **cmd_set; struct in_addr server_ip; NTSTATUS nt_status; - extern BOOL AllowDebugChange; /* make sure the vars that get altered (4th field) are in a fixed location or certain compilers complain */ @@ -619,9 +617,6 @@ static NTSTATUS process_cmd(struct cli_state *cli, char *cmd) setlinebuf(stdout); - DEBUGLEVEL = 1; - AllowDebugChange = False; - /* Parse options */ pc = poptGetContext("rpcclient", argc, (const char **) argv, @@ -697,12 +692,9 @@ static NTSTATUS process_cmd(struct cli_state *cli, char *cmd) reopen_logs(); /* Load smb.conf file */ - /* FIXME! How to get this DEBUGLEVEL to last over lp_load()? */ - olddebug = DEBUGLEVEL; - if (!lp_load(dyn_CONFIGFILE,True,False,False)) { + + if (!lp_load(dyn_CONFIGFILE,True,False,False)) fprintf(stderr, "Can't load %s\n", dyn_CONFIGFILE); - } - DEBUGLEVEL = olddebug; load_interfaces(); -- cgit From a4351a3923fd87e1c54119d997b673fcac34601b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 5 Sep 2002 03:06:26 +0000 Subject: initial mem_ctx to NULL patch from metze --- source/torture/samtest.c | 2 +- source/torture/vfstest.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/torture/samtest.c b/source/torture/samtest.c index 56b87dc257d..490cc2cdf3d 100644 --- a/source/torture/samtest.c +++ b/source/torture/samtest.c @@ -189,7 +189,7 @@ static NTSTATUS do_cmd(struct sam_context *sam, struct cmd_set *cmd_entry, char { char *p = cmd, **argv = NULL; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; - TALLOC_CTX *mem_ctx; + TALLOC_CTX *mem_ctx = NULL; pstring buf; int argc = 0, i; diff --git a/source/torture/vfstest.c b/source/torture/vfstest.c index 9f8062a02e2..c68d2b04d2c 100644 --- a/source/torture/vfstest.c +++ b/source/torture/vfstest.c @@ -264,7 +264,7 @@ static NTSTATUS do_cmd(struct vfs_state *vfs, struct cmd_set *cmd_entry, char *c char *p = cmd, **argv = NULL; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; pstring buf; - TALLOC_CTX *mem_ctx; + TALLOC_CTX *mem_ctx = NULL; int argc = 0, i; /* Count number of arguments first time through the loop then -- cgit From 87c156704f5d8913cf7bf3134ec5ba6403d36cca Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 5 Sep 2002 04:22:16 +0000 Subject: Roussed on Jeremy for not putting in enough debugs in the new print notify stuff. (-: --- source/printing/notify.c | 6 ++++++ source/rpc_server/srv_spoolss_nt.c | 2 ++ 2 files changed, 8 insertions(+) diff --git a/source/printing/notify.c b/source/printing/notify.c index 4bde6a94f69..728ef47d8ab 100644 --- a/source/printing/notify.c +++ b/source/printing/notify.c @@ -86,6 +86,9 @@ void print_notify_send_messages(void) offset += pq->buflen; } + DEBUG(5, ("print_notify_send_messages: sending %d print notify message%s\n", + msg_count, msg_count != 1 ? "s" : "")); + message_send_all(tdb, MSG_PRINTER_NOTIFY2, buf, offset, False, NULL); talloc_destroy_pool(send_ctx); notify_queue_head = NULL; @@ -149,6 +152,9 @@ again: pnqueue->buf = buf; pnqueue->buflen = buflen; + + DEBUG(5, ("send_spoolss_notify2_msg: appending message 0x%02x/0x%02x to notify_queue_head\n", msg->type, msg->field)); + DLIST_ADD(notify_queue_head, pnqueue); return; diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index 02360574759..3a2bde2d05f 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -899,6 +899,8 @@ static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, siz msg_count = IVAL(buf, 0); msg_ptr = buf + 4; + DEBUG(5, ("receive_notify2_message_list: got %d messages in list\n", msg_count)); + if (msg_count == 0) goto bad_msg; -- cgit From 88653130bc1e380b7d8dc6c62492f3bbc6f1c707 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 5 Sep 2002 04:25:21 +0000 Subject: A netshareenum reply always contains an enum_hnd. win2k returns zero total entries on an error whereas nt4 must send uninitialised data so we didn't catch this one before. --- source/rpc_parse/parse_srv.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/source/rpc_parse/parse_srv.c b/source/rpc_parse/parse_srv.c index 531267c308c..672db36a288 100644 --- a/source/rpc_parse/parse_srv.c +++ b/source/rpc_parse/parse_srv.c @@ -1119,10 +1119,8 @@ BOOL srv_io_r_net_share_enum(char *desc, SRV_R_NET_SHARE_ENUM *r_n, prs_struct * if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries)) return False; - if(r_n->total_entries != 0) { - if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth)) - return False; - } + if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth)) + return False; if(!prs_werror("status", ps, depth, &r_n->status)) return False; -- cgit From d7dde74aae64e9e142b80b7e3ba1bd69cec149b0 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 5 Sep 2002 04:33:07 +0000 Subject: Send any queued up print notify messages in exit_server() so they don't get lost if the client exits before timeout_processing() has a chance to run. --- source/smbd/server.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/smbd/server.c b/source/smbd/server.c index 8082c22cff8..39d5e3bcd3f 100644 --- a/source/smbd/server.c +++ b/source/smbd/server.c @@ -540,6 +540,8 @@ void exit_server(char *reason) invalidate_all_vuids(); + print_notify_send_messages(); + /* delete our entry in the connections database. */ yield_connection(NULL,""); -- cgit From f00102ba77d752bdf714fa83ac7fdc679e8d7f17 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 5 Sep 2002 04:33:52 +0000 Subject: We shouldn't add printing flag here. Jeremy. --- source/smbd/reply.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/smbd/reply.c b/source/smbd/reply.c index 263626dcc16..01e7df282cf 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -113,7 +113,7 @@ int reply_special(char *inbuf,char *outbuf) reload_services(True); reopen_logs(); - claim_connection(NULL,"",0,True,FLAG_MSG_GENERAL|FLAG_MSG_SMBD|FLAG_MSG_PRINTING); + claim_connection(NULL,"",0,True,FLAG_MSG_GENERAL|FLAG_MSG_SMBD); already_got_session = True; break; -- cgit From 78585de5811d10bcca156e296c7dd51eabe5d626 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 5 Sep 2002 05:26:29 +0000 Subject: Remove donotify as notifies are cheap now. Jeremy. --- source/printing/printing.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/source/printing/printing.c b/source/printing/printing.c index c6a210d0188..df971a78c5a 100644 --- a/source/printing/printing.c +++ b/source/printing/printing.c @@ -460,7 +460,7 @@ static void pjob_store_notify(int snum, uint32 jobid, struct printjob *old_data, Store a job structure back to the database. ****************************************************************************/ -static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob, BOOL donotify) +static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob) { TDB_DATA old_data, new_data; BOOL ret; @@ -483,7 +483,7 @@ static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob, BOOL donot /* Send notify updates for what has changed */ - if (donotify && ret && (old_data.dsize == 0 || old_data.dsize == sizeof(*pjob))) { + if (ret && (old_data.dsize == 0 || old_data.dsize == sizeof(*pjob))) { pjob_store_notify( snum, jobid, (struct printjob *)old_data.dptr, (struct printjob *)new_data.dptr); @@ -581,7 +581,7 @@ static void print_unix_job(int snum, print_queue_struct *q) fstrcpy(pj.user, q->fs_user); fstrcpy(pj.queuename, lp_const_servicename(snum)); - pjob_store(snum, jobid, &pj, True); + pjob_store(snum, jobid, &pj); } @@ -868,7 +868,7 @@ static void print_queue_update(int snum) pjob->sysjob = queue[i].job; pjob->status = queue[i].status; - pjob_store(snum, jobid, pjob, True); + pjob_store(snum, jobid, pjob); } /* now delete any queued entries that don't appear in the @@ -977,7 +977,7 @@ BOOL print_job_set_name(int snum, uint32 jobid, char *name) return False; fstrcpy(pjob->jobname, name); - return pjob_store(snum, jobid, pjob, True); + return pjob_store(snum, jobid, pjob); } /**************************************************************************** @@ -1009,7 +1009,7 @@ static BOOL print_job_delete1(int snum, uint32 jobid) /* Set the tdb entry to be deleting. */ pjob->status = LPQ_DELETING; - pjob_store(snum, jobid, pjob, True); + pjob_store(snum, jobid, pjob); if (pjob->spooled && pjob->sysjob != -1) result = (*(current_printif->job_delete))(snum, pjob); @@ -1172,7 +1172,7 @@ int print_job_write(int snum, uint32 jobid, const char *buf, int size) return_code = write(pjob->fd, buf, size); if (return_code>0) { pjob->size += size; - pjob_store(snum, jobid, pjob, True); + pjob_store(snum, jobid, pjob); } return return_code; } @@ -1364,7 +1364,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) if (!print_job_exists(snum, jobid)) break; } - if (jobid == next_jobid || !pjob_store(snum, jobid, &pjob, False)) { + if (jobid == next_jobid || !pjob_store(snum, jobid, &pjob)) { DEBUG(3, ("print_job_start: either jobid (%d)==next_jobid(%d) or pjob_store failed.\n", jobid, next_jobid )); jobid = -1; @@ -1398,7 +1398,7 @@ to open spool file %s.\n", pjob.filename)); goto fail; } - pjob_store(snum, jobid, &pjob, True); + pjob_store(snum, jobid, &pjob); release_print_db(pdb); @@ -1440,7 +1440,7 @@ void print_job_endpage(int snum, uint32 jobid) return; pjob->page_count++; - pjob_store(snum, jobid, pjob, True); + pjob_store(snum, jobid, pjob); } /**************************************************************************** @@ -1498,7 +1498,7 @@ BOOL print_job_end(int snum, uint32 jobid, BOOL normal_close) pjob->spooled = True; pjob->status = LPQ_QUEUED; - pjob_store(snum, jobid, pjob, True); + pjob_store(snum, jobid, pjob); /* make sure the database is up to date */ if (print_cache_expired(snum)) -- cgit From d41ff1f1a6cfad71ef35698d45e9fb97d9100898 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 5 Sep 2002 06:49:08 +0000 Subject: Delivery notify messages over the back channel in *reverse* order in which they are sent in the message. This is because a DLIST_ADD is used by the message sender which results in the first (post!) message being at the end of the list. Notify messages must be delivered in the order the events occur in otherwise the port monitor gets confused. --- source/rpc_server/srv_spoolss_nt.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index 3a2bde2d05f..aa63284322c 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -889,9 +889,9 @@ static void receive_notify2_message(void *buf, size_t len) static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, size_t len) { - size_t msg_count, i; + size_t msg_count, *msg_len_array, i; char *buf = (char *)msg; - char *msg_ptr; + char *msg_ptr, **msg_ptr_array; if (len < 4) goto bad_msg; @@ -904,6 +904,24 @@ static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, siz if (msg_count == 0) goto bad_msg; + /* Process notifies in *reverse* order in which they are sent + in the message. This is because a DLIST_ADD is used by the + message sender which results in the first (post!) message + being at the end of the list. Notify messages must be + delivered in the order the events occur in otherwise the + port monitor gets confused. */ + + if (!(msg_len_array = (size_t *)malloc(sizeof(size_t) * msg_count))) { + DEBUG(0, ("receive_notify2_message_list: out of memory\n")); + return; + } + + if (!(msg_ptr_array = (char **)malloc(sizeof(char *) * msg_count))) { + SAFE_FREE(msg_len_array); + DEBUG(0, ("receive_notify2_message_list: out of memory\n")); + return; + } + for (i = 0; i < msg_count; i++) { size_t msg_len; @@ -915,10 +933,19 @@ static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, siz if (msg_ptr + msg_len - buf > len) goto bad_msg; - receive_notify2_message(msg_ptr, msg_len); + + msg_len_array[i] = msg_len; + msg_ptr_array[i] = msg_ptr; + msg_ptr += msg_len; } + for(i = msg_count; i > 0; i--) + receive_notify2_message(msg_ptr_array[i - 1], msg_len_array[i - 1]); + + SAFE_FREE(msg_len_array); + SAFE_FREE(msg_ptr_array); + DEBUG(10,("receive_notify2_message_list: processed %u messages\n", (unsigned int)msg_count )); return; -- cgit From 99017e887e4189ac7f6e3b7df08f028dc155191e Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 5 Sep 2002 11:40:06 +0000 Subject: Fixed a little, long standing bug: smbclient -M should resolve name#03, not name#20. Volker --- source/client/client.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/source/client/client.c b/source/client/client.c index d5a1f557e74..7afd8f25bc3 100644 --- a/source/client/client.c +++ b/source/client/client.c @@ -2618,16 +2618,21 @@ static int do_message_op(void) { struct in_addr ip; struct nmb_name called, calling; - - zero_ip(&ip); + fstring server_name; + char name_type_hex[10]; make_nmb_name(&calling, global_myname, 0x0); make_nmb_name(&called , desthost, name_type); + safe_strcpy(server_name, desthost, sizeof(server_name)); + snprintf(name_type_hex, sizeof(name_type_hex), "#%X", name_type); + safe_strcat(server_name, name_type_hex, sizeof(server_name)); + zero_ip(&ip); if (have_ip) ip = dest_ip; - if (!(cli=cli_initialise(NULL)) || (cli_set_port(cli, port) != port) || !cli_connect(cli, desthost, &ip)) { + if (!(cli=cli_initialise(NULL)) || (cli_set_port(cli, port) != port) || + !cli_connect(cli, server_name, &ip)) { d_printf("Connection to %s failed\n", desthost); return 1; } -- cgit From 047d6a05fb60172a2607bb7d7d03dda5403c61fa Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 5 Sep 2002 12:55:56 +0000 Subject: Revert the "reverse" change to rpc_server/srv_spoolss_nt.c, simply add then entries to the end of the list in printing/notify.c using DLIST_ADD_END. Jeremy. --- source/printing/notify.c | 8 ++++++-- source/rpc_server/srv_spoolss_nt.c | 33 +++------------------------------ 2 files changed, 9 insertions(+), 32 deletions(-) diff --git a/source/printing/notify.c b/source/printing/notify.c index 728ef47d8ab..003718ed724 100644 --- a/source/printing/notify.c +++ b/source/printing/notify.c @@ -102,7 +102,7 @@ static void send_spoolss_notify2_msg(struct spoolss_notify_msg *msg) { char *buf = NULL; size_t buflen = 0, len; - struct notify_queue *pnqueue; + struct notify_queue *pnqueue, *tmp_ptr; /* Let's not waste any time with this */ @@ -155,7 +155,11 @@ again: DEBUG(5, ("send_spoolss_notify2_msg: appending message 0x%02x/0x%02x to notify_queue_head\n", msg->type, msg->field)); - DLIST_ADD(notify_queue_head, pnqueue); + /* Note we add to the end of the list to ensure + * the messages are sent in the order they were received. JRA. + */ + DLIST_ADD_END(notify_queue_head, pnqueue, tmp_ptr); + return; fail: diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index aa63284322c..3a2bde2d05f 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -889,9 +889,9 @@ static void receive_notify2_message(void *buf, size_t len) static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, size_t len) { - size_t msg_count, *msg_len_array, i; + size_t msg_count, i; char *buf = (char *)msg; - char *msg_ptr, **msg_ptr_array; + char *msg_ptr; if (len < 4) goto bad_msg; @@ -904,24 +904,6 @@ static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, siz if (msg_count == 0) goto bad_msg; - /* Process notifies in *reverse* order in which they are sent - in the message. This is because a DLIST_ADD is used by the - message sender which results in the first (post!) message - being at the end of the list. Notify messages must be - delivered in the order the events occur in otherwise the - port monitor gets confused. */ - - if (!(msg_len_array = (size_t *)malloc(sizeof(size_t) * msg_count))) { - DEBUG(0, ("receive_notify2_message_list: out of memory\n")); - return; - } - - if (!(msg_ptr_array = (char **)malloc(sizeof(char *) * msg_count))) { - SAFE_FREE(msg_len_array); - DEBUG(0, ("receive_notify2_message_list: out of memory\n")); - return; - } - for (i = 0; i < msg_count; i++) { size_t msg_len; @@ -933,19 +915,10 @@ static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, siz if (msg_ptr + msg_len - buf > len) goto bad_msg; - - msg_len_array[i] = msg_len; - msg_ptr_array[i] = msg_ptr; - + receive_notify2_message(msg_ptr, msg_len); msg_ptr += msg_len; } - for(i = msg_count; i > 0; i--) - receive_notify2_message(msg_ptr_array[i - 1], msg_len_array[i - 1]); - - SAFE_FREE(msg_len_array); - SAFE_FREE(msg_ptr_array); - DEBUG(10,("receive_notify2_message_list: processed %u messages\n", (unsigned int)msg_count )); return; -- cgit From ed184ed1905b49956528b6835f48a69ba3c1a045 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 5 Sep 2002 15:47:22 +0000 Subject: Move the fancy NT_STATUS macros to a new file, so we can include them earlier in includes.h Andrew Bartlett --- source/include/includes.h | 1 + source/include/nt_status.h | 62 ++++++++++++++++++++++++++++++++++++++++++++++ source/include/smb.h | 38 ---------------------------- 3 files changed, 63 insertions(+), 38 deletions(-) create mode 100644 source/include/nt_status.h diff --git a/source/include/includes.h b/source/include/includes.h index 544487f273d..b07b0c36492 100644 --- a/source/include/includes.h +++ b/source/include/includes.h @@ -702,6 +702,7 @@ extern int errno; #include "../tdb/spinlock.h" #include "../tdb/tdbutil.h" #include "talloc.h" +#include "nt_status.h" #include "ads.h" #include "interfaces.h" #include "hash.h" diff --git a/source/include/nt_status.h b/source/include/nt_status.h new file mode 100644 index 00000000000..1c80c5ecdea --- /dev/null +++ b/source/include/nt_status.h @@ -0,0 +1,62 @@ +/* + Unix SMB/CIFS implementation. + SMB parameters and setup, plus a whole lot more. + + Copyright (C) Andrew Tridgell 2001 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef _NT_STATUS_H +#define _NT_STATUS_H + +/* The Splint code analysis tool doesn't like immediate structures. */ + +#ifdef _SPLINT_ /* http://www.splint.org */ +#undef HAVE_IMMEDIATE_STRUCTURES +#endif + +/* the following rather strange looking definitions of NTSTATUS and WERROR + and there in order to catch common coding errors where different error types + are mixed up. This is especially important as we slowly convert Samba + from using BOOL for internal functions +*/ + +#if defined(HAVE_IMMEDIATE_STRUCTURES) +typedef struct {uint32 v;} NTSTATUS; +#define NT_STATUS(x) ((NTSTATUS) { x }) +#define NT_STATUS_V(x) ((x).v) +#else +typedef uint32 NTSTATUS; +#define NT_STATUS(x) (x) +#define NT_STATUS_V(x) (x) +#endif + +#if defined(HAVE_IMMEDIATE_STRUCTURES) +typedef struct {uint32 v;} WERROR; +#define W_ERROR(x) ((WERROR) { x }) +#define W_ERROR_V(x) ((x).v) +#else +typedef uint32 WERROR; +#define W_ERROR(x) (x) +#define W_ERROR_V(x) (x) +#endif + +#define NT_STATUS_IS_OK(x) (NT_STATUS_V(x) == 0) +#define NT_STATUS_IS_ERR(x) ((NT_STATUS_V(x) & 0xc0000000) == 0xc0000000) +#define NT_STATUS_EQUAL(x,y) (NT_STATUS_V(x) == NT_STATUS_V(y)) +#define W_ERROR_IS_OK(x) (W_ERROR_V(x) == 0) + +#endif diff --git a/source/include/smb.h b/source/include/smb.h index 909c1a57ecd..2ee2f0cb724 100644 --- a/source/include/smb.h +++ b/source/include/smb.h @@ -193,44 +193,6 @@ typedef struct nttime_info } NTTIME; -/* The Splint code analysis tool doesn't like immediate structures. */ - -#ifdef _SPLINT_ /* http://www.splint.org */ -#undef HAVE_IMMEDIATE_STRUCTURES -#endif - -/* the following rather strange looking definitions of NTSTATUS and WERROR - and there in order to catch common coding errors where different error types - are mixed up. This is especially important as we slowly convert Samba - from using BOOL for internal functions -*/ - -#if defined(HAVE_IMMEDIATE_STRUCTURES) -typedef struct {uint32 v;} NTSTATUS; -#define NT_STATUS(x) ((NTSTATUS) { x }) -#define NT_STATUS_V(x) ((x).v) -#else -typedef uint32 NTSTATUS; -#define NT_STATUS(x) (x) -#define NT_STATUS_V(x) (x) -#endif - -#if defined(HAVE_IMMEDIATE_STRUCTURES) -typedef struct {uint32 v;} WERROR; -#define W_ERROR(x) ((WERROR) { x }) -#define W_ERROR_V(x) ((x).v) -#else -typedef uint32 WERROR; -#define W_ERROR(x) (x) -#define W_ERROR_V(x) (x) -#endif - -#define NT_STATUS_IS_OK(x) (NT_STATUS_V(x) == 0) -#define NT_STATUS_IS_ERR(x) ((NT_STATUS_V(x) & 0xc0000000) == 0xc0000000) -#define NT_STATUS_EQUAL(x,y) (NT_STATUS_V(x) == NT_STATUS_V(y)) -#define W_ERROR_IS_OK(x) (W_ERROR_V(x) == 0) - - /* Allowable account control bits */ #define ACB_DISABLED 0x0001 /* 1 = User account disabled */ #define ACB_HOMDIRREQ 0x0002 /* 1 = Home directory required */ -- cgit From 0379a32d825e036c7f0dcabef46547cd678a2a1d Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 6 Sep 2002 01:12:52 +0000 Subject: cli_spoolss_enumprinterdrivers: Return WERR_UNKNOWN_LEVEL if we can't decode the returned buffer. --- source/rpc_client/cli_spoolss.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/rpc_client/cli_spoolss.c b/source/rpc_client/cli_spoolss.c index b568f386043..caa2f2901bc 100644 --- a/source/rpc_client/cli_spoolss.c +++ b/source/rpc_client/cli_spoolss.c @@ -848,6 +848,10 @@ WERROR cli_spoolss_enumprinterdrivers (struct cli_state *cli, case 3: decode_printer_driver_3(mem_ctx, r.buffer, r.returned, &ctr->info3); break; + default: + DEBUG(10, ("cli_spoolss_enumprinterdrivers: unknown info level %d\n", + level)); + return WERR_UNKNOWN_LEVEL; } } -- cgit From 2d227bdce26674affad87ad6d118e77604fb210a Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 6 Sep 2002 06:13:16 +0000 Subject: Display debug data we are marshalling/unmarshalling a UNISTR in a similar format to UNISTR2. --- source/rpc_parse/parse_prs.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/rpc_parse/parse_prs.c b/source/rpc_parse/parse_prs.c index 4de6b88e9cc..843be331877 100644 --- a/source/rpc_parse/parse_prs.c +++ b/source/rpc_parse/parse_prs.c @@ -1061,7 +1061,9 @@ BOOL prs_unistr(char *name, prs_struct *ps, int depth, UNISTR *str) len++; - dump_data(5+depth, (char *)start, len * 2); + DEBUG(5,("%s%04x %s: ", tab_depth(depth), ps->data_offset, name)); + print_asc(5, (unsigned char*)start, 2*len); + DEBUG(5, ("\n")); } else { /* unmarshalling */ @@ -1114,6 +1116,10 @@ BOOL prs_unistr(char *name, prs_struct *ps, int depth, UNISTR *str) /* NULL terminate the UNISTR */ str->buffer[len++] = '\0'; } + + DEBUG(5,("%s%04x %s: ", tab_depth(depth), ps->data_offset, name)); + print_asc(5, (unsigned char*)str->buffer, 2*len); + DEBUG(5, ("\n")); } /* set the offset in the prs_struct; 'len' points to the -- cgit From b5068bb9fe28cfdd7a00dbc50196eb60e3a46af1 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 6 Sep 2002 06:59:40 +0000 Subject: level keys are inserted by conv routines. --- source/python/py_spoolss_drivers.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/source/python/py_spoolss_drivers.c b/source/python/py_spoolss_drivers.c index b5357a78ad3..2e8fac4a4e1 100644 --- a/source/python/py_spoolss_drivers.c +++ b/source/python/py_spoolss_drivers.c @@ -98,9 +98,6 @@ PyObject *spoolss_enumprinterdrivers(PyObject *self, PyObject *args, py_from_DRIVER_INFO_1(&value, &ctr.info1[i]); - PyDict_SetItemString( - value, "level", PyInt_FromLong(1)); - PyDict_SetItemString(result, name, value); } @@ -117,9 +114,6 @@ PyObject *spoolss_enumprinterdrivers(PyObject *self, PyObject *args, py_from_DRIVER_INFO_2(&value, &ctr.info2[i]); - PyDict_SetItemString( - value, "level", PyInt_FromLong(2)); - PyDict_SetItemString(result, name, value); } @@ -136,9 +130,6 @@ PyObject *spoolss_enumprinterdrivers(PyObject *self, PyObject *args, py_from_DRIVER_INFO_3(&value, &ctr.info3[i]); - PyDict_SetItemString( - value, "level", PyInt_FromLong(3)); - PyDict_SetItemString(result, name, value); } @@ -155,9 +146,6 @@ PyObject *spoolss_enumprinterdrivers(PyObject *self, PyObject *args, py_from_DRIVER_INFO_6(&value, &ctr.info6[i]); - PyDict_SetItemString( - value, "level", PyInt_FromLong(6)); - PyList_SetItem(result, i, value); } @@ -302,8 +290,6 @@ PyObject *spoolss_getprinterdriverdir(PyObject *self, PyObject *args, switch (level) { case 1: py_from_DRIVER_DIRECTORY_1(&result, ctr.info1); - PyDict_SetItemString( - result, "level", PyInt_FromLong(1)); break; default: PyErr_SetString(spoolss_error, "unknown info level"); -- cgit From aae48211ff4f22e0c2e2fe57c370f465df4332bc Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 6 Sep 2002 07:01:40 +0000 Subject: Decode list of dependent files in printer driver info3 and info6. It's a null terminated list of null terminated unicode strings. What a mess! --- source/python/py_spoolss_drivers_conv.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/source/python/py_spoolss_drivers_conv.c b/source/python/py_spoolss_drivers_conv.c index dbf33905ae5..5d181f9cd90 100644 --- a/source/python/py_spoolss_drivers_conv.c +++ b/source/python/py_spoolss_drivers_conv.c @@ -46,7 +46,6 @@ struct pyconv py_DRIVER_INFO_3[] = { { "data_file", PY_UNISTR, offsetof(DRIVER_INFO_3, datafile) }, { "config_file", PY_UNISTR, offsetof(DRIVER_INFO_3, configfile) }, { "help_file", PY_UNISTR, offsetof(DRIVER_INFO_3, helpfile) }, - /* dependentfiles */ { "monitor_name", PY_UNISTR, offsetof(DRIVER_INFO_3, monitorname) }, { "default_datatype", PY_UNISTR, offsetof(DRIVER_INFO_3, defaultdatatype) }, { NULL } @@ -80,6 +79,30 @@ struct pyconv py_DRIVER_DIRECTORY_1[] = { { NULL } }; +/* Convert a NULL terminated list of NULL terminated unicode strings + to a list of (char *) strings */ + +static PyObject *from_dependentfiles(uint16 *dependentfiles) +{ + PyObject *list; + int offset = 0; + + list = PyList_New(0); + + while (*(dependentfiles + offset) != 0) { + fstring name; + int len; + + len = rpcstr_pull(name, dependentfiles + offset, + sizeof(fstring), -1, STR_TERMINATE); + + offset += len / 2; + PyList_Append(list, PyString_FromString(name)); + } + + return list; +} + BOOL py_from_DRIVER_INFO_1(PyObject **dict, DRIVER_INFO_1 *info) { *dict = from_struct(info, py_DRIVER_INFO_1); @@ -108,6 +131,10 @@ BOOL py_from_DRIVER_INFO_3(PyObject **dict, DRIVER_INFO_3 *info) { *dict = from_struct(info, py_DRIVER_INFO_3); PyDict_SetItemString(*dict, "level", PyInt_FromLong(3)); + PyDict_SetItemString( + *dict, "dependent_files", + from_dependentfiles(info->dependentfiles)); + return True; } @@ -127,6 +154,9 @@ BOOL py_from_DRIVER_INFO_6(PyObject **dict, DRIVER_INFO_6 *info) { *dict = from_struct(info, py_DRIVER_INFO_6); PyDict_SetItemString(*dict, "level", PyInt_FromLong(6)); + PyDict_SetItemString( + *dict, "dependent_files", + from_dependentfiles (info->dependentfiles)); return True; } -- cgit From c211d2deca1019d3ef9bd08f5a01e76ede2d0191 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 6 Sep 2002 07:34:57 +0000 Subject: Move printerdata dictionary object into it's own file. --- source/python/gprinterdata | 15 +++------------ source/python/printerdata.py | 23 +++++++++++++++++++++++ source/python/samba/printerdata.py | 23 +++++++++++++++++++++++ 3 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 source/python/printerdata.py create mode 100644 source/python/samba/printerdata.py diff --git a/source/python/gprinterdata b/source/python/gprinterdata index 52c6e42719b..f1992db5a56 100755 --- a/source/python/gprinterdata +++ b/source/python/gprinterdata @@ -5,18 +5,8 @@ from gtkdictbrowser import GtkDictBrowser, hex_string import gtk import spoolss import string +import printerdata -class printerdata: - def __init__(self, host): - host = string.replace(host, "/", "\\") - self.hnd = spoolss.openprinter(host) - - def keys(self): - return self.hnd.enumprinterdata().keys() - - def __getitem__(self, key): - return self.hnd.getprinterdata(key)['data'] - # Initialise printerdata dictionary if len(sys.argv) != 2: @@ -25,7 +15,8 @@ if len(sys.argv) != 2: sys.exit(1) try: - t = printerdata(sys.argv[1]) + host = string.replace(sys.argv[1], "/", "\\") + t = printerdata.printerdata(host) except: print "gprinterdata: error opening %s" % sys.argv[1] sys.exit(1) diff --git a/source/python/printerdata.py b/source/python/printerdata.py new file mode 100644 index 00000000000..55b5fdf6ae7 --- /dev/null +++ b/source/python/printerdata.py @@ -0,0 +1,23 @@ +# +# A python module that maps printerdata to a dictionary. We define +# two classes. The printerdata class maps to Get/Set/Enum/DeletePrinterData +# and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx +# + +import spoolss + +class printerdata: + def __init__(self, host, creds = {}): + self.hnd = spoolss.openprinter(host, creds = creds) + + def keys(self): + return self.hnd.enumprinterdata().keys() + + def __getitem__(self, key): + return self.hnd.getprinterdata(key)['data'] + + def __setitem__(self, key, value): + # Store as REG_BINARY for now + self.hnd.setprinterdata({"key": "", "value": key, "type": 3, + "data": value}) + diff --git a/source/python/samba/printerdata.py b/source/python/samba/printerdata.py new file mode 100644 index 00000000000..55b5fdf6ae7 --- /dev/null +++ b/source/python/samba/printerdata.py @@ -0,0 +1,23 @@ +# +# A python module that maps printerdata to a dictionary. We define +# two classes. The printerdata class maps to Get/Set/Enum/DeletePrinterData +# and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx +# + +import spoolss + +class printerdata: + def __init__(self, host, creds = {}): + self.hnd = spoolss.openprinter(host, creds = creds) + + def keys(self): + return self.hnd.enumprinterdata().keys() + + def __getitem__(self, key): + return self.hnd.getprinterdata(key)['data'] + + def __setitem__(self, key, value): + # Store as REG_BINARY for now + self.hnd.setprinterdata({"key": "", "value": key, "type": 3, + "data": value}) + -- cgit From c201a61a52ffbaf1b1b70e25e0ef2b29a89f921c Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 6 Sep 2002 07:44:21 +0000 Subject: Initial version of printerdata_ex browsing. --- source/python/gprinterdata | 13 ++++++++----- source/python/printerdata.py | 15 +++++++++++++++ source/python/samba/printerdata.py | 15 +++++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/source/python/gprinterdata b/source/python/gprinterdata index f1992db5a56..59c5f3c3151 100755 --- a/source/python/gprinterdata +++ b/source/python/gprinterdata @@ -9,16 +9,19 @@ import printerdata # Initialise printerdata dictionary -if len(sys.argv) != 2: - print "Usage: gprinterdata " +if len(sys.argv) < 2 or len(sys.argv) > 3: + print "Usage: gprinterdata [--ex] " print "where is a UNC printer name." sys.exit(1) try: - host = string.replace(sys.argv[1], "/", "\\") - t = printerdata.printerdata(host) + host = string.replace(sys.argv[len(sys.argv) - 1], "/", "\\") + if sys.argv[1] == "--ex": + t = printerdata.printerdata_ex(host) + else: + t = printerdata.printerdata(host) except: - print "gprinterdata: error opening %s" % sys.argv[1] + print "gprinterdata: error opening %s" % sys.argv[len(sys.argv) - 1] sys.exit(1) # Create interface diff --git a/source/python/printerdata.py b/source/python/printerdata.py index 55b5fdf6ae7..3384de4f30b 100644 --- a/source/python/printerdata.py +++ b/source/python/printerdata.py @@ -21,3 +21,18 @@ class printerdata: self.hnd.setprinterdata({"key": "", "value": key, "type": 3, "data": value}) +class printerdata_ex: + def __init__(self, host, creds = {}): + self.hnd = spoolss.openprinter(host, creds = creds) + + def keys(self): + return self.hnd.enumprinterdataex("PrinterDriverData").keys() + + def __getitem__(self, key): + return self.hnd.getprinterdataex("PrinterDriverData", key)['data'] + + def __setitem__(self, key, value): + # Store as REG_BINARY for now + self.hnd.setprinterdataex({"key": "PrinterDriverData", "value": key, "type": 3, + "data": value}) + diff --git a/source/python/samba/printerdata.py b/source/python/samba/printerdata.py index 55b5fdf6ae7..3384de4f30b 100644 --- a/source/python/samba/printerdata.py +++ b/source/python/samba/printerdata.py @@ -21,3 +21,18 @@ class printerdata: self.hnd.setprinterdata({"key": "", "value": key, "type": 3, "data": value}) +class printerdata_ex: + def __init__(self, host, creds = {}): + self.hnd = spoolss.openprinter(host, creds = creds) + + def keys(self): + return self.hnd.enumprinterdataex("PrinterDriverData").keys() + + def __getitem__(self, key): + return self.hnd.getprinterdataex("PrinterDriverData", key)['data'] + + def __setitem__(self, key, value): + # Store as REG_BINARY for now + self.hnd.setprinterdataex({"key": "PrinterDriverData", "value": key, "type": 3, + "data": value}) + -- cgit From d3b29b0b2d2ffd5c050900ff8cae441b91f95526 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 10:00:24 +0000 Subject: Detect and use syslog.h or sys/syslog.h corretly. Fixes lack of prototype for syslog() since Paul Green's POSIX patch. --- source/configure | 1487 +++++++++++++++++++++++--------------------- source/configure.in | 1 + source/include/config.h.in | 8 +- source/include/includes.h | 6 +- 4 files changed, 775 insertions(+), 727 deletions(-) diff --git a/source/configure b/source/configure index bc494a16636..e6120f63477 100755 --- a/source/configure +++ b/source/configure @@ -1118,7 +1118,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -for ac_prog in mawk gawk nawk awk +for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -2498,6 +2498,46 @@ else fi done +for ac_hdr in sys/syslog.h syslog.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2506: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2516: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + # # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT. @@ -2506,14 +2546,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2517: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2557: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2535,17 +2575,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2539: checking for $ac_hdr" >&5 +echo "configure:2579: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2549: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2575,17 +2615,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2579: checking for $ac_hdr" >&5 +echo "configure:2619: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2615,17 +2655,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2619: checking for $ac_hdr" >&5 +echo "configure:2659: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2669: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2655,17 +2695,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2659: checking for $ac_hdr" >&5 +echo "configure:2699: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2669: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2695,17 +2735,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2699: checking for $ac_hdr" >&5 +echo "configure:2739: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2737,17 +2777,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2741: checking for $ac_hdr" >&5 +echo "configure:2781: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2779,17 +2819,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2783: checking for $ac_hdr" >&5 +echo "configure:2823: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2821,17 +2861,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2825: checking for $ac_hdr" >&5 +echo "configure:2865: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2875: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2859,7 +2899,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2863: checking size of int" >&5 +echo "configure:2903: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2867,19 +2907,18 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(int)); - exit(0); + return(0); } EOF -if { (eval echo configure:2883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2899,7 +2938,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2903: checking size of long" >&5 +echo "configure:2942: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2907,19 +2946,18 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(long)); - exit(0); + return(0); } EOF -if { (eval echo configure:2923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2939,7 +2977,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2943: checking size of short" >&5 +echo "configure:2981: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2947,19 +2985,18 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(short)); - exit(0); + return(0); } EOF -if { (eval echo configure:2963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -2980,12 +3017,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:2984: checking for working const" >&5 +echo "configure:3021: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3075: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3055,21 +3092,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3059: checking for inline" >&5 +echo "configure:3096: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3110: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3095,14 +3132,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3099: checking whether byte ordering is bigendian" >&5 +echo "configure:3136: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3113,11 +3150,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3154: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3128,7 +3165,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3169: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3148,7 +3185,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3202: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3185,14 +3222,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3189: checking whether char is unsigned" >&5 +echo "configure:3226: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3249,12 +3286,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3253: checking return type of signal handlers" >&5 +echo "configure:3290: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3271,7 +3308,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3275: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3312: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3290,12 +3327,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3294: checking for uid_t in sys/types.h" >&5 +echo "configure:3331: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3324,12 +3361,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3328: checking for mode_t" >&5 +echo "configure:3365: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3357,12 +3394,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3361: checking for off_t" >&5 +echo "configure:3398: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3390,12 +3427,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3394: checking for size_t" >&5 +echo "configure:3431: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3423,12 +3460,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3427: checking for pid_t" >&5 +echo "configure:3464: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3456,12 +3493,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3460: checking for st_rdev in struct stat" >&5 +echo "configure:3497: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3469,7 +3506,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3473: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3510: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3490,12 +3527,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3494: checking for d_off in dirent" >&5 +echo "configure:3531: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3505,7 +3542,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3509: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3546: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3526,12 +3563,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3530: checking for ino_t" >&5 +echo "configure:3567: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3559,12 +3596,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3563: checking for loff_t" >&5 +echo "configure:3600: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3592,12 +3629,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3596: checking for offset_t" >&5 +echo "configure:3633: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3625,12 +3662,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3629: checking for ssize_t" >&5 +echo "configure:3666: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3658,12 +3695,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3662: checking for wchar_t" >&5 +echo "configure:3699: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3705,7 +3742,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3709: checking for $ac_word" >&5 +echo "configure:3746: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3754,12 +3791,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3758: checking for $ac_func" >&5 +echo "configure:3795: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3808,7 +3845,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3812: checking for dlopen in -ldl" >&5 +echo "configure:3849: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3816,7 +3853,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3857,13 +3894,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3861: checking for immediate structures" >&5 +echo "configure:3898: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3881,7 +3918,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3885: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3904,13 +3941,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3908: checking for unix domain sockets" >&5 +echo "configure:3945: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3925,7 +3962,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3929: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3966: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3947,13 +3984,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3951: checking for socklen_t type" >&5 +echo "configure:3988: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3966,7 +4003,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:3970: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4007: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -3987,13 +4024,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:3991: checking for sig_atomic_t type" >&5 +echo "configure:4028: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4006,7 +4043,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4029,20 +4066,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4033: checking for errno declaration" >&5 +echo "configure:4070: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4046: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4064,20 +4101,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4068: checking for setresuid declaration" >&5 +echo "configure:4105: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4099,20 +4136,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4103: checking for setresgid declaration" >&5 +echo "configure:4140: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4116: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4153: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4134,20 +4171,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4138: checking for asprintf declaration" >&5 +echo "configure:4175: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4151: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4169,20 +4206,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4173: checking for vasprintf declaration" >&5 +echo "configure:4210: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4186: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4204,20 +4241,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4208: checking for vsnprintf declaration" >&5 +echo "configure:4245: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4221: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4258: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4239,20 +4276,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4243: checking for snprintf declaration" >&5 +echo "configure:4280: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4256: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4293: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4276,7 +4313,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4280: checking for real setresuid" >&5 +echo "configure:4317: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4285,12 +4322,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4315,7 +4352,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4319: checking for real setresgid" >&5 +echo "configure:4356: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4324,13 +4361,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4353,7 +4390,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4357: checking for 8-bit clean memcmp" >&5 +echo "configure:4394: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4361,7 +4398,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4394,12 +4431,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4398: checking for $ac_func" >&5 +echo "configure:4435: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4448,7 +4485,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4452: checking for crypt in -lcrypt" >&5 +echo "configure:4489: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4456,7 +4493,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4500,7 +4537,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4504: checking whether to use readline" >&5 +echo "configure:4541: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4512,17 +4549,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4516: checking for $ac_hdr" >&5 +echo "configure:4553: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4526: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4563: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4552,17 +4589,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4556: checking for $ac_hdr" >&5 +echo "configure:4593: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4566: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4603: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4593,17 +4630,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4597: checking for $ac_hdr" >&5 +echo "configure:4634: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4644: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4626,7 +4663,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4630: checking for tgetent in -l${termlib}" >&5 +echo "configure:4667: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4634,7 +4671,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4667,7 +4704,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4671: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4708: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4675,7 +4712,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4737,17 +4774,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4741: checking for $ac_hdr" >&5 +echo "configure:4778: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4788: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4777,17 +4814,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4781: checking for $ac_hdr" >&5 +echo "configure:4818: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4828: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4818,17 +4855,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4822: checking for $ac_hdr" >&5 +echo "configure:4859: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4869: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4851,7 +4888,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4855: checking for tgetent in -l${termlib}" >&5 +echo "configure:4892: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4859,7 +4896,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4892,7 +4929,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4896: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4933: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4900,7 +4937,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4961,7 +4998,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:4965: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5002: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4969,7 +5006,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5013,12 +5050,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5017: checking for $ac_func" >&5 +echo "configure:5054: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5069,7 +5106,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5073: checking for printf in -lnsl_s" >&5 +echo "configure:5110: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5077,7 +5114,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5119,7 +5156,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5123: checking for printf in -lnsl" >&5 +echo "configure:5160: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5127,7 +5164,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5169,7 +5206,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5173: checking for connect in -lsocket" >&5 +echo "configure:5210: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5177,7 +5214,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5219,7 +5256,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5223: checking for connect in -linet" >&5 +echo "configure:5260: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5227,7 +5264,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5282,12 +5319,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5286: checking for $ac_func" >&5 +echo "configure:5323: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5336,7 +5373,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5340: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5377: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5344,7 +5381,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5385,12 +5422,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5389: checking for $ac_func" >&5 +echo "configure:5426: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5446,12 +5483,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5450: checking for $ac_func" >&5 +echo "configure:5487: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5501,12 +5538,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5505: checking for $ac_func" >&5 +echo "configure:5542: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5556,12 +5593,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5560: checking for $ac_func" >&5 +echo "configure:5597: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5625: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5611,12 +5648,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5615: checking for $ac_func" >&5 +echo "configure:5652: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5666,12 +5703,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5670: checking for $ac_func" >&5 +echo "configure:5707: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5721,12 +5758,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5725: checking for $ac_func" >&5 +echo "configure:5762: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5776,12 +5813,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5780: checking for $ac_func" >&5 +echo "configure:5817: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5845: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5831,12 +5868,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5835: checking for $ac_func" >&5 +echo "configure:5872: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5900: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5886,12 +5923,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5890: checking for $ac_func" >&5 +echo "configure:5927: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5941,12 +5978,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5945: checking for $ac_func" >&5 +echo "configure:5982: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6010: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5997,12 +6034,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6001: checking for $ac_func" >&5 +echo "configure:6038: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6054,12 +6091,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6058: checking for $ac_func" >&5 +echo "configure:6095: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6110,12 +6147,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6114: checking for $ac_func" >&5 +echo "configure:6151: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6165,12 +6202,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6169: checking for $ac_func" >&5 +echo "configure:6206: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6220,12 +6257,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6224: checking for $ac_func" >&5 +echo "configure:6261: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6275,12 +6312,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6279: checking for $ac_func" >&5 +echo "configure:6316: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6344: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6330,12 +6367,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6334: checking for $ac_func" >&5 +echo "configure:6371: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6385,12 +6422,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6389: checking for $ac_func" >&5 +echo "configure:6426: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6440,12 +6477,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6444: checking for $ac_func" >&5 +echo "configure:6481: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6495,12 +6532,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6499: checking for $ac_func" >&5 +echo "configure:6536: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6550,12 +6587,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6554: checking for $ac_func" >&5 +echo "configure:6591: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6619: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6605,12 +6642,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6609: checking for $ac_func" >&5 +echo "configure:6646: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6660,12 +6697,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6664: checking for $ac_func" >&5 +echo "configure:6701: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6715,12 +6752,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6719: checking for $ac_func" >&5 +echo "configure:6756: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6784: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6770,12 +6807,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6774: checking for $ac_func" >&5 +echo "configure:6811: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6825,12 +6862,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6829: checking for $ac_func" >&5 +echo "configure:6866: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6894: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6884,9 +6921,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6888: checking for stat64 in " >&5 +echo "configure:6925: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6917,9 +6954,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6921: checking for lstat64 in " >&5 +echo "configure:6958: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6950,9 +6987,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6954: checking for fstat64 in " >&5 +echo "configure:6991: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -6984,7 +7021,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:6988: checking for dn_expand in -lresolv" >&5 +echo "configure:7025: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6992,7 +7029,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7041,12 +7078,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7045: checking for $ac_func" >&5 +echo "configure:7082: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7094,7 +7131,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7098: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7135: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7102,7 +7139,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7154: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7143,12 +7180,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7147: checking for $ac_func" >&5 +echo "configure:7184: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7212: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7202,12 +7239,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7206: checking for $ac_func" >&5 +echo "configure:7243: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7255,7 +7292,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7259: checking for putprpwnam in -lsec" >&5 +echo "configure:7296: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7263,7 +7300,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7304,12 +7341,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7308: checking for $ac_func" >&5 +echo "configure:7345: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7364,12 +7401,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7368: checking for $ac_func" >&5 +echo "configure:7405: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7417,7 +7454,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7421: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7458: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7425,7 +7462,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7466,12 +7503,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7470: checking for $ac_func" >&5 +echo "configure:7507: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7525,12 +7562,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7529: checking for $ac_func" >&5 +echo "configure:7566: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7578,7 +7615,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7582: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7619: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7586,7 +7623,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7627,12 +7664,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7631: checking for $ac_func" >&5 +echo "configure:7668: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7688,12 +7725,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7692: checking for $ac_func" >&5 +echo "configure:7729: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7757: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7741,7 +7778,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7745: checking for getspnam in -lgen" >&5 +echo "configure:7782: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7749,7 +7786,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7801: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7790,12 +7827,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7794: checking for $ac_func" >&5 +echo "configure:7831: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7850,12 +7887,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7854: checking for $ac_func" >&5 +echo "configure:7891: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7903,7 +7940,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7907: checking for getspnam in -lsecurity" >&5 +echo "configure:7944: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7911,7 +7948,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7952,12 +7989,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7956: checking for $ac_func" >&5 +echo "configure:7993: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8011,12 +8048,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8015: checking for $ac_func" >&5 +echo "configure:8052: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8064,7 +8101,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8068: checking for getspnam in -lsec" >&5 +echo "configure:8105: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8072,7 +8109,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8113,12 +8150,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8117: checking for $ac_func" >&5 +echo "configure:8154: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8173,12 +8210,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8177: checking for $ac_func" >&5 +echo "configure:8214: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8226,7 +8263,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8230: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8267: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8234,7 +8271,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8275,12 +8312,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8279: checking for $ac_func" >&5 +echo "configure:8316: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8344: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8334,12 +8371,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8338: checking for $ac_func" >&5 +echo "configure:8375: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8387,7 +8424,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8391: checking for bigcrypt in -lsec" >&5 +echo "configure:8428: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8395,7 +8432,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8436,12 +8473,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8440: checking for $ac_func" >&5 +echo "configure:8477: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8496,12 +8533,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8500: checking for $ac_func" >&5 +echo "configure:8537: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8549,7 +8586,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8553: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8590: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8557,7 +8594,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8598,12 +8635,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8602: checking for $ac_func" >&5 +echo "configure:8639: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8657,12 +8694,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8661: checking for $ac_func" >&5 +echo "configure:8698: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8710,7 +8747,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8714: checking for getprpwnam in -lsec" >&5 +echo "configure:8751: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8718,7 +8755,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8759,12 +8796,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8763: checking for $ac_func" >&5 +echo "configure:8800: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8831,7 +8868,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8835: checking ability to build shared libraries" >&5 +echo "configure:8872: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -8991,7 +9028,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:8995: checking for $ac_word" >&5 +echo "configure:9032: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9048,17 +9085,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9052: checking linker flags for shared libraries" >&5 +echo "configure:9089: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9055: checking compiler flags for position-independent code" >&5 +echo "configure:9092: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9062: checking whether building shared libraries actually works" >&5 +echo "configure:9099: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9089,7 +9126,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9093: checking for long long" >&5 +echo "configure:9130: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9098,12 +9135,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9130,20 +9167,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9134: checking for LL suffix on long long integers" >&5 +echo "configure:9171: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9147: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9184: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9165,7 +9202,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9169: checking for 64 bit off_t" >&5 +echo "configure:9206: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9174,13 +9211,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9203,7 +9240,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9207: checking for off64_t" >&5 +echo "configure:9244: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9212,7 +9249,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9245,7 +9282,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9249: checking for 64 bit ino_t" >&5 +echo "configure:9286: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9254,13 +9291,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9283,7 +9320,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9287: checking for ino64_t" >&5 +echo "configure:9324: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9292,7 +9329,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9325,7 +9362,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9329: checking for dev64_t" >&5 +echo "configure:9366: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9334,7 +9371,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9367,13 +9404,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9371: checking for struct dirent64" >&5 +echo "configure:9408: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9426: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9406,7 +9443,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9410: checking for major macro" >&5 +echo "configure:9447: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9415,7 +9452,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9447,7 +9484,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9451: checking for minor macro" >&5 +echo "configure:9488: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9456,7 +9493,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9488,7 +9525,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9492: checking for unsigned char" >&5 +echo "configure:9529: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9497,12 +9534,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9525,13 +9562,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9529: checking for sin_len in sock" >&5 +echo "configure:9566: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9540,7 +9577,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9544: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9581: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9561,13 +9598,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9565: checking whether seekdir returns void" >&5 +echo "configure:9602: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9576,7 +9613,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9580: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9617: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9597,20 +9634,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9601: checking for __FILE__ macro" >&5 +echo "configure:9638: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9614: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9631,20 +9668,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9635: checking for __FUNCTION__ macro" >&5 +echo "configure:9672: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9648: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9685: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9665,7 +9702,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9669: checking if gettimeofday takes tz argument" >&5 +echo "configure:9706: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9674,14 +9711,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9704,13 +9741,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9708: checking for __va_copy" >&5 +echo "configure:9745: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9718,7 +9755,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9759: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9739,7 +9776,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9743: checking for C99 vsnprintf" >&5 +echo "configure:9780: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9748,7 +9785,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9775,7 +9812,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9798,7 +9835,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9802: checking for broken readdir" >&5 +echo "configure:9839: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9807,7 +9844,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9815,7 +9852,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9838,13 +9875,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9842: checking for utimbuf" >&5 +echo "configure:9879: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9852,7 +9889,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9856: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9876,12 +9913,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9880: checking for $ac_func" >&5 +echo "configure:9917: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9930,13 +9967,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9934: checking for ut_name in utmp" >&5 +echo "configure:9971: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9944,7 +9981,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9948: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9985: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -9965,13 +10002,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:9969: checking for ut_user in utmp" >&5 +echo "configure:10006: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9979,7 +10016,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9983: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10020: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10000,13 +10037,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10004: checking for ut_id in utmp" >&5 +echo "configure:10041: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10014,7 +10051,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10018: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10035,13 +10072,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10039: checking for ut_host in utmp" >&5 +echo "configure:10076: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10049,7 +10086,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10053: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10070,13 +10107,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10074: checking for ut_time in utmp" >&5 +echo "configure:10111: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10084,7 +10121,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10105,13 +10142,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10109: checking for ut_tv in utmp" >&5 +echo "configure:10146: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10119,7 +10156,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10123: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10140,13 +10177,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10144: checking for ut_type in utmp" >&5 +echo "configure:10181: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10154,7 +10191,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10175,13 +10212,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10179: checking for ut_pid in utmp" >&5 +echo "configure:10216: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10189,7 +10226,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10230: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10210,13 +10247,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10214: checking for ut_exit in utmp" >&5 +echo "configure:10251: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10224,7 +10261,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10245,13 +10282,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10249: checking for ut_addr in utmp" >&5 +echo "configure:10286: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10259,7 +10296,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10263: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10281,13 +10318,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10285: checking whether pututline returns pointer" >&5 +echo "configure:10322: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10295,7 +10332,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10299: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10336: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10317,13 +10354,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10321: checking for ut_syslen in utmpx" >&5 +echo "configure:10358: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10331,7 +10368,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10335: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10372: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10355,7 +10392,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10359: checking whether to use libiconv" >&5 +echo "configure:10396: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10368,7 +10405,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10372: checking for iconv_open in -liconv" >&5 +echo "configure:10409: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10376,7 +10413,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10430,7 +10467,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10434: checking for working iconv" >&5 +echo "configure:10471: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10439,7 +10476,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10450,7 +10487,7 @@ main() { } EOF -if { (eval echo configure:10454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10474,7 +10511,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10478: checking for Linux kernel oplocks" >&5 +echo "configure:10515: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10483,7 +10520,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10497,7 +10534,7 @@ main() { } EOF -if { (eval echo configure:10501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10520,7 +10557,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10524: checking for kernel change notify support" >&5 +echo "configure:10561: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10529,7 +10566,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10543,7 +10580,7 @@ main() { } EOF -if { (eval echo configure:10547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10584: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10566,7 +10603,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10570: checking for kernel share modes" >&5 +echo "configure:10607: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10575,7 +10612,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10591,7 +10628,7 @@ main() { } EOF -if { (eval echo configure:10595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10632: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10617,13 +10654,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10621: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10658: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10631,7 +10668,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10672: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10652,7 +10689,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10656: checking for irix specific capabilities" >&5 +echo "configure:10693: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10661,7 +10698,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10676,7 +10713,7 @@ main() { } EOF -if { (eval echo configure:10680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10704,13 +10741,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10708: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10745: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10720,7 +10757,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10724: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10741,13 +10778,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10745: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10782: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10757,7 +10794,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10798: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10778,13 +10815,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10782: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10819: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10794,7 +10831,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10798: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10835: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10815,13 +10852,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10819: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10856: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10831,7 +10868,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10835: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10853,13 +10890,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10857: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10894: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10873,7 +10910,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10877: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10914: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10894,16 +10931,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10898: checking for test routines" >&5 +echo "configure:10935: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10917,7 +10954,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10921: checking for ftruncate extend" >&5 +echo "configure:10958: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10926,11 +10963,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10971: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10953,7 +10990,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:10957: checking for AF_LOCAL socket support" >&5 +echo "configure:10994: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10962,11 +10999,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -10990,7 +11027,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:10994: checking for broken getgroups" >&5 +echo "configure:11031: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10999,11 +11036,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11026,7 +11063,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11030: checking whether getpass should be replaced" >&5 +echo "configure:11067: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11034,7 +11071,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11070,7 +11107,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11074: checking for broken inet_ntoa" >&5 +echo "configure:11111: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11079,7 +11116,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11093,7 +11130,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11116,7 +11153,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11120: checking for secure mkstemp" >&5 +echo "configure:11157: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11125,7 +11162,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11142,7 +11179,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11146: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11165,7 +11202,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11169: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11206: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11174,12 +11211,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11202,7 +11239,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11206: checking for root" >&5 +echo "configure:11243: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11211,11 +11248,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11243,7 +11280,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11247: checking for iface AIX" >&5 +echo "configure:11284: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11252,7 +11289,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11284,7 +11321,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11288: checking for iface ifconf" >&5 +echo "configure:11325: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11293,7 +11330,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11326,7 +11363,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11330: checking for iface ifreq" >&5 +echo "configure:11367: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11335,7 +11372,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11372,7 +11409,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11376: checking for setresuid" >&5 +echo "configure:11413: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11381,7 +11418,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11430: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11415,7 +11452,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11419: checking for setreuid" >&5 +echo "configure:11456: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11424,7 +11461,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11457,7 +11494,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11461: checking for seteuid" >&5 +echo "configure:11498: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11466,7 +11503,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11499,7 +11536,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11503: checking for setuidx" >&5 +echo "configure:11540: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11508,7 +11545,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11557: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11541,7 +11578,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11545: checking for working mmap" >&5 +echo "configure:11582: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11550,11 +11587,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11577,7 +11614,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11581: checking for ftruncate needs root" >&5 +echo "configure:11618: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11586,11 +11623,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11613,7 +11650,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11617: checking for fcntl locking" >&5 +echo "configure:11654: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11622,11 +11659,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11649,7 +11686,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11653: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11690: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11658,11 +11695,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11687,7 +11724,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11691: checking for 64 bit fcntl locking" >&5 +echo "configure:11728: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11696,7 +11733,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11745,13 +11782,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11749: checking for st_blocks in struct stat" >&5 +echo "configure:11786: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11760,7 +11797,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11764: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11801: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11781,13 +11818,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11785: checking for st_blksize in struct stat" >&5 +echo "configure:11822: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11796,7 +11833,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11800: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11837: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11819,13 +11856,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11823: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11860: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11862,13 +11899,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11866: checking for broken nisplus include files" >&5 +echo "configure:11903: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11878,7 +11915,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11882: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11902,7 +11939,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11906: checking whether to use smbwrapper" >&5 +echo "configure:11943: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11949,7 +11986,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11953: checking whether to use AFS clear-text auth" >&5 +echo "configure:11990: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -11975,7 +12012,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11979: checking whether to use DFS clear-text auth" >&5 +echo "configure:12016: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12001,7 +12038,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12005: checking for /usr/kerberos" >&5 +echo "configure:12042: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12014,7 +12051,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12018: checking for kerberos 5 install path" >&5 +echo "configure:12055: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12043,17 +12080,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12047: checking for $ac_hdr" >&5 +echo "configure:12084: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12057: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12094: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12086,17 +12123,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12090: checking for $ac_hdr" >&5 +echo "configure:12127: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12100: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12137: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12126,7 +12163,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12130: checking for _et_list in -lcom_err" >&5 +echo "configure:12167: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12134,7 +12171,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12166,7 +12203,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12170: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12207: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12174,7 +12211,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12210,7 +12247,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12214: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12251: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12218,7 +12255,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12257,7 +12294,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12261: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12298: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12265,7 +12302,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12305,7 +12342,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12309: checking for ber_scanf in -llber" >&5 +echo "configure:12346: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12313,7 +12350,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12349,7 +12386,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12353: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12390: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12357,7 +12394,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12399,12 +12436,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12403: checking for $ac_func" >&5 +echo "configure:12440: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12452,13 +12489,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12456: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12493: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12467,7 +12504,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12471: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12508: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12489,7 +12526,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12493: checking whether to use AUTOMOUNT" >&5 +echo "configure:12530: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12514,7 +12551,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12518: checking whether to use SMBMOUNT" >&5 +echo "configure:12555: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12551,7 +12588,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12555: checking whether to use PAM" >&5 +echo "configure:12592: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12577,7 +12614,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12581: checking for pam_get_data in -lpam" >&5 +echo "configure:12618: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12585,7 +12622,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12623,7 +12660,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12627: checking whether to use pam_smbpass" >&5 +echo "configure:12664: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12661,12 +12698,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12665: checking for $ac_func" >&5 +echo "configure:12702: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12715,7 +12752,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12719: checking for crypt in -lcrypt" >&5 +echo "configure:12756: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12723,7 +12760,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12769,7 +12806,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12773: checking for a crypt that needs truncated salt" >&5 +echo "configure:12810: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12778,11 +12815,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12808,7 +12845,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12812: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12849: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12840,7 +12877,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12844: checking whether to use TDB SAM database" >&5 +echo "configure:12881: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12865,7 +12902,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12869: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12906: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12896,7 +12933,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12900: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12937: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12921,7 +12958,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12925: checking whether to use syslog logging" >&5 +echo "configure:12962: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12946,7 +12983,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12950: checking whether to use profiling" >&5 +echo "configure:12987: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -12974,7 +13011,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:12978: checking whether to support disk-quotas" >&5 +echo "configure:13015: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -12985,13 +13022,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:12989: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13026: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13003,7 +13040,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13007: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13044: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13052,7 +13089,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13056: checking whether to support utmp accounting" >&5 +echo "configure:13093: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13077,7 +13114,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13081: checking chosen man pages' language(s)" >&5 +echo "configure:13118: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13108,7 +13145,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13112: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13149: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13136,14 +13173,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13140: checking how to get filesystem space usage" >&5 +echo "configure:13177: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13147: checking statvfs64 function (SVR4)" >&5 +echo "configure:13184: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13151,7 +13188,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13198,12 +13235,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13202: checking statvfs function (SVR4)" >&5 +echo "configure:13239: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13211,7 +13248,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13236,7 +13273,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13240: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13277: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13244,7 +13281,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13257,7 +13294,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13284,7 +13321,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13288: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13325: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13292,7 +13329,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13338,7 +13375,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13342: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13379: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13346,7 +13383,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13356,7 +13393,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13383,7 +13420,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13387: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13424: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13391,7 +13428,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13407,7 +13444,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13434,7 +13471,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13438: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13475: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13442,7 +13479,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13462,7 +13499,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13495,9 +13532,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13499: checking if large file support can be enabled" >&5 +echo "configure:13536: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13551: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13575,7 +13612,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13579: checking whether to support ACLs" >&5 +echo "configure:13616: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13628,7 +13665,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13632: checking for acl_get_file in -lacl" >&5 +echo "configure:13669: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13636,7 +13673,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13675,13 +13712,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13679: checking for ACL support" >&5 +echo "configure:13716: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13689,7 +13726,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13709,13 +13746,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13713: checking for acl_get_perm_np" >&5 +echo "configure:13750: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13723,7 +13760,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13770,7 +13807,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13774: checking whether to build winbind" >&5 +echo "configure:13811: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -13866,20 +13903,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:13870: checking whether struct passwd has pw_comment" >&5 +echo "configure:13907: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:13883: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13920: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -13904,20 +13941,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:13908: checking whether struct passwd has pw_age" >&5 +echo "configure:13945: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:13921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13958: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -13956,7 +13993,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:13960: checking for poptGetContext in -lpopt" >&5 +echo "configure:13997: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13964,7 +14001,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13999,7 +14036,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14003: checking whether to use included popt" >&5 +echo "configure:14040: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14022,16 +14059,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14026: checking configure summary" >&5 +echo "configure:14063: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14072: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source/configure.in b/source/configure.in index e4bc6982578..168a6f47468 100644 --- a/source/configure.in +++ b/source/configure.in @@ -432,6 +432,7 @@ AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h) AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h) AC_CHECK_HEADERS(security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn.h) +AC_CHECK_HEADERS(sys/syslog.h syslog.h) # # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT. diff --git a/source/include/config.h.in b/source/include/config.h.in index 70c0ae2f3c7..7945e49c79c 100644 --- a/source/include/config.h.in +++ b/source/include/config.h.in @@ -1,4 +1,4 @@ -/* include/config.h.in. Generated automatically from configure.in by autoheader 2.13. */ +/* include/config.h.in. Generated automatically from configure.in by autoheader. */ /* Define if on AIX 3. System headers sometimes define this. @@ -1090,6 +1090,9 @@ /* Define if you have the header file. */ #undef HAVE_SYS_SYSCALL_H +/* Define if you have the header file. */ +#undef HAVE_SYS_SYSLOG_H + /* Define if you have the header file. */ #undef HAVE_SYS_TERMIO_H @@ -1108,6 +1111,9 @@ /* Define if you have the header file. */ #undef HAVE_SYSCALL_H +/* Define if you have the header file. */ +#undef HAVE_SYSLOG_H + /* Define if you have the header file. */ #undef HAVE_TERMIO_H diff --git a/source/include/includes.h b/source/include/includes.h index b07b0c36492..945ec2cbd70 100644 --- a/source/include/includes.h +++ b/source/include/includes.h @@ -217,8 +217,12 @@ #include #include -#ifdef WITH_SYSLOG +#ifdef HAVE_SYSLOG_H #include +#else +#ifdef HAVE_SYS_SYSLOG_H +#include +#endif #endif #include -- cgit From 06b8a6fef466e006724bc49165fe936cf8fcfbfa Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 10:38:26 +0000 Subject: One less user of Get_Pwnam_modify()... Andrew Bartlett --- source/smbd/password.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/smbd/password.c b/source/smbd/password.c index f3a09e8c643..ed3b14102b8 100644 --- a/source/smbd/password.c +++ b/source/smbd/password.c @@ -224,9 +224,11 @@ add a name to the session users list void add_session_user(const char *user) { fstring suser; - StrnCpy(suser,user,sizeof(suser)-1); + struct passwd *passwd; - if (!Get_Pwnam_Modify(suser)) return; + if (!passwd = Get_Pwnam(user)) return; + + StrnCpy(suser,passwd->pw_name,sizeof(suser)-1); if (suser && *suser && !in_list(suser,session_users,False)) { -- cgit From ad3c8da13b9d510f78fd56364cd0987de88a9b9f Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 10:39:34 +0000 Subject: Add some DEBUG()s to some libads failure modes. --- source/libads/ldap.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/libads/ldap.c b/source/libads/ldap.c index 2cfbedc6d4e..428fc02065d 100644 --- a/source/libads/ldap.c +++ b/source/libads/ldap.c @@ -608,14 +608,17 @@ ADS_STATUS ads_do_search(ADS_STRUCT *ads, const char *bind_path, int scope, char *utf8_exp, *utf8_path, **search_attrs = NULL; TALLOC_CTX *ctx; - if (!(ctx = talloc_init())) + if (!(ctx = talloc_init())) { + DEBUG(1,("ads_do_search: talloc_init() failed!")); return ADS_ERROR(LDAP_NO_MEMORY); + } /* 0 means the conversion worked but the result was empty so we only fail if it's negative. In any case, it always at least nulls out the dest */ if ((push_utf8_talloc(ctx, &utf8_exp, exp) < 0) || (push_utf8_talloc(ctx, &utf8_path, bind_path) < 0)) { + DEBUG(1,("ads_do_search: push_utf8_talloc() failed!")); rc = LDAP_NO_MEMORY; goto done; } @@ -627,6 +630,7 @@ ADS_STATUS ads_do_search(ADS_STRUCT *ads, const char *bind_path, int scope, /* if (!(search_attrs = ads_push_strvals(ctx, attrs))) */ if (!(str_list_copy(&search_attrs, attrs))) { + DEBUG(1,("ads_do_search: str_list_copy() failed!")); rc = LDAP_NO_MEMORY; goto done; } -- cgit From 9a6f932da1c85a331a8427f055b5fa798dbda89b Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 10:43:52 +0000 Subject: Oops... --- source/smbd/password.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/smbd/password.c b/source/smbd/password.c index ed3b14102b8..f2956237dd2 100644 --- a/source/smbd/password.c +++ b/source/smbd/password.c @@ -226,7 +226,7 @@ void add_session_user(const char *user) fstring suser; struct passwd *passwd; - if (!passwd = Get_Pwnam(user)) return; + if (!(passwd = Get_Pwnam(user))) return; StrnCpy(suser,passwd->pw_name,sizeof(suser)-1); -- cgit From 5b9a7ab901bc311f3ad08462a8a68d133c34a8b4 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 11:46:59 +0000 Subject: Patch from "Stefan (metze) Metzmacher" to extend the ADS_STATUS system to include NTSTATUS, and to provide a better general infrustructure for his sam_ads work. I've also added some extra failure mode DEBUG()s to parts of the code. NOTE: The ADS_ERR_OK() macro is rather sensitive to braketing issues - without the final set of brakets, the test is essentially inverted - causing some intersting 'error = success' messages... Andrew Bartlett --- source/Makefile.in | 2 +- source/include/ads.h | 124 ++++++++++++++++++++++++++++++++++------- source/libads/ads_status.c | 48 +++++++++++++--- source/libads/ldap.c | 2 + source/nsswitch/winbindd_ads.c | 8 +-- source/smbd/sesssetup.c | 3 + source/utils/net_ads.c | 2 +- 7 files changed, 154 insertions(+), 35 deletions(-) diff --git a/source/Makefile.in b/source/Makefile.in index 499a0985776..531ca74474b 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -153,7 +153,7 @@ PARAM_OBJ = param/loadparm.o param/params.o dynconfig.o LIBADS_OBJ = libads/ldap.o libads/ldap_printer.o libads/sasl.o \ libads/krb5_setpw.o libads/kerberos.o libads/ldap_user.o \ libads/ads_struct.o libads/ads_status.o \ - libads/disp_sec.o + libads/disp_sec.o libads/ads_utils.o LIBADS_SERVER_OBJ = libads/util.o libads/kerberos_verify.o diff --git a/source/include/ads.h b/source/include/ads.h index 7504a369b4b..6106eb6b409 100644 --- a/source/include/ads.h +++ b/source/include/ads.h @@ -92,11 +92,14 @@ typedef struct { /* there are 4 possible types of errors the ads subsystem can produce */ enum ads_error_type {ADS_ERROR_KRB5, ADS_ERROR_GSS, - ADS_ERROR_LDAP, ADS_ERROR_SYSTEM}; + ADS_ERROR_LDAP, ADS_ERROR_SYSTEM, ADS_ERROR_NT}; typedef struct { enum ads_error_type error_type; - int rc; + union err_state{ + int rc; + NTSTATUS nt_status; + } err; /* For error_type = ADS_ERROR_GSS minor_status describe GSS API error */ /* Where rc represents major_status of GSS API error */ int minor_status; @@ -109,12 +112,14 @@ typedef void **ADS_MODLIST; #endif /* macros to simplify error returning */ -#define ADS_ERROR(rc) ads_build_error(ADS_ERROR_LDAP, rc, 0) +#define ADS_ERROR(rc) ADS_ERROR_LDAP(rc) +#define ADS_ERROR_LDAP(rc) ads_build_error(ADS_ERROR_LDAP, rc, 0) #define ADS_ERROR_SYSTEM(rc) ads_build_error(ADS_ERROR_SYSTEM, rc?rc:EINVAL, 0) #define ADS_ERROR_KRB5(rc) ads_build_error(ADS_ERROR_KRB5, rc, 0) #define ADS_ERROR_GSS(rc, minor) ads_build_error(ADS_ERROR_GSS, rc, minor) +#define ADS_ERROR_NT(rc) ads_build_nt_error(ADS_ERROR_NT,rc) -#define ADS_ERR_OK(status) ((status).rc == 0) +#define ADS_ERR_OK(status) ((status.error_type == ADS_ERROR_NT) ? NT_STATUS_IS_OK(status.err.nt_status):(status.err.rc == 0)) #define ADS_SUCCESS ADS_ERROR(0) /* time between reconnect attempts */ @@ -128,23 +133,100 @@ typedef void **ADS_MODLIST; #define ADS_NO_REFERRALS_OID "1.2.840.113556.1.4.1339" #define ADS_SERVER_SORT_OID "1.2.840.113556.1.4.473" -#define UF_DONT_EXPIRE_PASSWD 0x10000 -#define UF_MNS_LOGON_ACCOUNT 0x20000 -#define UF_SMARTCARD_REQUIRED 0x40000 -#define UF_TRUSTED_FOR_DELEGATION 0x80000 -#define UF_NOT_DELEGATED 0x100000 -#define UF_USE_DES_KEY_ONLY 0x200000 -#define UF_DONT_REQUIRE_PREAUTH 0x400000 - -#define UF_TEMP_DUPLICATE_ACCOUNT 0x0100 -#define UF_NORMAL_ACCOUNT 0x0200 -#define UF_INTERDOMAIN_TRUST_ACCOUNT 0x0800 -#define UF_WORKSTATION_TRUST_ACCOUNT 0x1000 -#define UF_SERVER_TRUST_ACCOUNT 0x2000 - -/* account types */ -#define ATYPE_GROUP 0x10000000 -#define ATYPE_USER 0x30000000 +/* UserFlags for userAccountControl */ +#define UF_SCRIPT 0x00000001 +#define UF_ACCOUNTDISABLE 0x00000002 +#define UF_UNUSED_1 0x00000004 +#define UF_HOMEDIR_REQUIRED 0x00000008 + +#define UF_LOCKOUT 0x00000010 +#define UF_PASSWD_NOTREQD 0x00000020 +#define UF_PASSWD_CANT_CHANGE 0x00000040 +#define UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED 0x00000080 + +#define UF_TEMP_DUPLICATE_ACCOUNT 0x00000100 +#define UF_NORMAL_ACCOUNT 0x00000200 +#define UF_UNUSED_2 0x00000400 +#define UF_INTERDOMAIN_TRUST_ACCOUNT 0x00000800 + +#define UF_WORKSTATION_TRUST_ACCOUNT 0x00001000 +#define UF_SERVER_TRUST_ACCOUNT 0x00002000 +#define UF_UNUSED_3 0x00004000 +#define UF_UNUSED_4 0x00008000 + +#define UF_DONT_EXPIRE_PASSWD 0x00010000 +#define UF_MNS_LOGON_ACCOUNT 0x00020000 +#define UF_SMARTCARD_REQUIRED 0x00040000 +#define UF_TRUSTED_FOR_DELEGATION 0x00080000 + +#define UF_NOT_DELEGATED 0x00100000 +#define UF_USE_DES_KEY_ONLY 0x00200000 +#define UF_DONT_REQUIRE_PREAUTH 0x00400000 +#define UF_UNUSED_5 0x00800000 + +#define UF_UNUSED_6 0x01000000 +#define UF_UNUSED_7 0x02000000 +#define UF_UNUSED_8 0x04000000 +#define UF_UNUSED_9 0x08000000 + +#define UF_UNUSED_10 0x10000000 +#define UF_UNUSED_11 0x20000000 +#define UF_UNUSED_12 0x40000000 +#define UF_UNUSED_13 0x80000000 + +#define UF_MACHINE_ACCOUNT_MASK (\ + UF_INTERDOMAIN_TRUST_ACCOUNT |\ + UF_WORKSTATION_TRUST_ACCOUNT |\ + UF_SERVER_TRUST_ACCOUNT \ + ) + +#define UF_ACCOUNT_TYPE_MASK (\ + UF_TEMP_DUPLICATE_ACCOUNT |\ + UF_NORMAL_ACCOUNT |\ + UF_INTERDOMAIN_TRUST_ACCOUNT |\ + UF_WORKSTATION_TRUST_ACCOUNT |\ + UF_SERVER_TRUST_ACCOUNT \ + ) + +#define UF_SETTABLE_BITS (\ + UF_SCRIPT |\ + UF_ACCOUNTDISABLE |\ + UF_HOMEDIR_REQUIRED |\ + UF_LOCKOUT |\ + UF_PASSWD_NOTREQD |\ + UF_PASSWD_CANT_CHANGE |\ + UF_ACCOUNT_TYPE_MASK | \ + UF_DONT_EXPIRE_PASSWD | \ + UF_MNS_LOGON_ACCOUNT |\ + UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED |\ + UF_SMARTCARD_REQUIRED |\ + UF_TRUSTED_FOR_DELEGATION |\ + UF_NOT_DELEGATED |\ + UF_USE_DES_KEY_ONLY |\ + UF_DONT_REQUIRE_PREAUTH \ + ) + +/* sAMAccountType */ +#define ATYPE_NORMAL_ACCOUNT 0x30000000 /* 805306368 */ +#define ATYPE_WORKSTATION_TRUST 0x30000001 /* 805306369 */ +#define ATYPE_INTERDOMAIN_TRUST 0x30000002 /* 805306370 */ +#define ATYPE_SECURITY_GLOBAL_GROUP 0x10000000 /* 268435456 */ +#define ATYPE_DISTRIBUTION_GLOBAL_GROUP 0x10000001 /* 268435457 */ +#define ATYPE_DISTRIBUTION_UNIVERSAL_GROUP AT_DISTRIBUTION_GLOBAL_GROUP +#define ATYPE_SECURITY_LOCAL_GROUP 0x20000000 /* 536870912 */ +#define ATYPE_DISTRIBUTION_LOCAL_GROUP 0x20000001 /* 536870913 */ + +#define ATYPE_ACCOUNT ATYPE_NORMAL_ACCOUNT /* 0x30000000 805306368 */ +#define ATYPE_GLOBAL_GROUP ATYPE_SECURITY_GLOBAL_GROUP /* 0x10000000 268435456 */ +#define ATYPE_LOCAL_GROUP ATYPE_SECURITY_LOCAL_GROUP /* 0x20000000 536870912 */ + +/* groupType */ +#define GTYPE_SECURITY_BUILTIN_LOCAL_GROUP 0x80000005 /* -2147483643 */ +#define GTYPE_SECURITY_DOMAIN_LOCAL_GROUP 0x80000004 /* -2147483644 */ +#define GTYPE_SECURITY_GLOBAL_GROUP 0x80000002 /* -2147483646 */ +#define GTYPE_DISTRIBUTION_GLOBAL_GROUP 0x00000002 /* 2 */ +#define GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP 0x00000004 /* 4 */ +#define GTYPE_DISTRIBUTION_UNIVERSAL_GROUP 0x00000008 /* 8 */ /* Mailslot or cldap getdcname response flags */ #define ADS_PDC 0x00000001 /* DC is PDC */ diff --git a/source/libads/ads_status.c b/source/libads/ads_status.c index 2d1830435fe..d85f9c9b58a 100644 --- a/source/libads/ads_status.c +++ b/source/libads/ads_status.c @@ -30,19 +30,49 @@ ADS_STATUS ads_build_error(enum ads_error_type etype, int rc, int minor_status) { ADS_STATUS ret; - ret.error_type = etype; - ret.rc = rc; + + if (etype == ADS_ERROR_NT) { + DEBUG(0,("don't use ads_build_error with ADS_ERROR_NT!\n")); + ret.err.rc = -1; + ret.error_type = ADS_ERROR_SYSTEM; + ret.minor_status = 0; + return ret; + } + + ret.err.rc = rc; + ret.error_type = etype; ret.minor_status = minor_status; return ret; } +ADS_STATUS ads_build_nt_error(enum ads_error_type etype, + NTSTATUS nt_status) +{ + ADS_STATUS ret; + + if (etype != ADS_ERROR_NT) { + DEBUG(0,("don't use ads_build_nt_error without ADS_ERROR_NT!\n")); + ret.err.rc = -1; + ret.error_type = ADS_ERROR_SYSTEM; + ret.minor_status = 0; + return ret; + } + ret.err.nt_status = nt_status; + ret.error_type = etype; + ret.minor_status = 0; + return ret; +} + /* do a rough conversion between ads error codes and NT status codes we'll need to fill this in more */ -NTSTATUS ads_ntstatus(ADS_STATUS rc) +NTSTATUS ads_ntstatus(ADS_STATUS status) { - if (ADS_ERR_OK(rc)) return NT_STATUS_OK; + if (status.error_type == ADS_ERROR_NT){ + return status.err.nt_status; + } + if (ADS_ERR_OK(status)) return NT_STATUS_OK; return NT_STATUS_UNSUCCESSFUL; } @@ -59,14 +89,14 @@ const char *ads_errstr(ADS_STATUS status) switch (status.error_type) { case ADS_ERROR_SYSTEM: - return strerror(status.rc); + return strerror(status.err.rc); #ifdef HAVE_LDAP case ADS_ERROR_LDAP: - return ldap_err2string(status.rc); + return ldap_err2string(status.err.rc); #endif #ifdef HAVE_KRB5 case ADS_ERROR_KRB5: - return error_message(status.rc); + return error_message(status.err.rc); #endif #ifdef HAVE_GSSAPI case ADS_ERROR_GSS: @@ -76,7 +106,7 @@ const char *ads_errstr(ADS_STATUS status) gss_buffer_desc msg1, msg2; msg1.value = NULL; msg2.value = NULL; - gss_display_status(&minor, status.rc, GSS_C_GSS_CODE, + gss_display_status(&minor, status.err.rc, GSS_C_GSS_CODE, GSS_C_NULL_OID, &msg_ctx, &msg1); gss_display_status(&minor, status.minor_status, GSS_C_MECH_CODE, GSS_C_NULL_OID, &msg_ctx, &msg2); @@ -86,6 +116,8 @@ const char *ads_errstr(ADS_STATUS status) return ret; } #endif + case ADS_ERROR_NT: + return nt_errstr(ads_ntstatus(status)); default: return "Unknown ADS error type!? (not compiled in?)"; } diff --git a/source/libads/ldap.c b/source/libads/ldap.c index 428fc02065d..2f70d3a2854 100644 --- a/source/libads/ldap.c +++ b/source/libads/ldap.c @@ -1648,6 +1648,7 @@ ADS_STATUS ads_server_info(ADS_STRUCT *ads) if (!p) { ldap_value_free(values); ldap_msgfree(res); + DEBUG(1, ("ads_server_info: returned ldap server name did not contain a ':' so was deemed invalid\n")); return ADS_ERROR(LDAP_DECODING_ERROR); } @@ -1659,6 +1660,7 @@ ADS_STATUS ads_server_info(ADS_STRUCT *ads) ldap_value_free(values); ldap_msgfree(res); SAFE_FREE(ads->config.ldap_server_name); + DEBUG(1, ("ads_server_info: returned ldap server name did not contain '$@' so was deemed invalid\n")); return ADS_ERROR(LDAP_DECODING_ERROR); } diff --git a/source/nsswitch/winbindd_ads.c b/source/nsswitch/winbindd_ads.c index b0b70178a45..4f91ed0f20c 100644 --- a/source/nsswitch/winbindd_ads.c +++ b/source/nsswitch/winbindd_ads.c @@ -143,7 +143,7 @@ static ADS_STRUCT *ads_cached_connection(struct winbindd_domain *domain) /* if we get ECONNREFUSED then it might be a NT4 server, fall back to MSRPC */ if (status.error_type == ADS_ERROR_SYSTEM && - status.rc == ECONNREFUSED) { + status.err.rc == ECONNREFUSED) { DEBUG(1,("Trying MSRPC methods\n")); domain->methods = &msrpc_methods; } @@ -170,9 +170,9 @@ static void sid_from_rid(struct winbindd_domain *domain, uint32 rid, DOM_SID *si static enum SID_NAME_USE ads_atype_map(uint32 atype) { switch (atype & 0xF0000000) { - case ATYPE_GROUP: + case ATYPE_GLOBAL_GROUP: return SID_NAME_DOM_GRP; - case ATYPE_USER: + case ATYPE_ACCOUNT: return SID_NAME_USER; default: DEBUG(1,("hmm, need to map account type 0x%x\n", atype)); @@ -339,7 +339,7 @@ static NTSTATUS enum_dom_groups(struct winbindd_domain *domain, if (!ads_pull_uint32(ads, msg, "sAMAccountType", &account_type) || - !(account_type & ATYPE_GROUP)) continue; + !(account_type & ATYPE_GLOBAL_GROUP)) continue; name = pull_username(ads, mem_ctx, msg); gecos = ads_pull_string(ads, mem_ctx, msg, "name"); diff --git a/source/smbd/sesssetup.c b/source/smbd/sesssetup.c index c37c655fd16..0253422596f 100644 --- a/source/smbd/sesssetup.c +++ b/source/smbd/sesssetup.c @@ -313,6 +313,9 @@ static int reply_spnego_negotiate(connection_struct *conn, NTLMSSP_NEGOTIATE_128 | NTLMSSP_NEGOTIATE_NTLM | NTLMSSP_CHAL_TARGET_INFO; + + if (neg_flags & NTLMSSP_NEGOTIATE_NTLM2) + chal_flags |= NTLMSSP_NEGOTIATE_NTLM2; { DATA_BLOB domain_blob, struct_blob; diff --git a/source/utils/net_ads.c b/source/utils/net_ads.c index eb1c3fe0592..8c85bd82f98 100644 --- a/source/utils/net_ads.c +++ b/source/utils/net_ads.c @@ -635,7 +635,7 @@ int net_ads_join(int argc, const char **argv) rc = ads_search_dn(ads, &res, dn, NULL); ads_msgfree(ads, res); - if (rc.error_type == ADS_ERROR_LDAP && rc.rc == LDAP_NO_SUCH_OBJECT) { + if (rc.error_type == ADS_ERROR_LDAP && rc.err.rc == LDAP_NO_SUCH_OBJECT) { d_printf("ads_join_realm: organizational unit %s does not exist (dn:%s)\n", org_unit, dn); return -1; -- cgit From d200770796d871b3994a06fab45624068fdc5682 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 11:49:16 +0000 Subject: Revert accidental commit - I'll need to do a fair bit more testing before I commit changes to NTLMSSP flags. --- source/smbd/sesssetup.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/smbd/sesssetup.c b/source/smbd/sesssetup.c index 0253422596f..c37c655fd16 100644 --- a/source/smbd/sesssetup.c +++ b/source/smbd/sesssetup.c @@ -313,9 +313,6 @@ static int reply_spnego_negotiate(connection_struct *conn, NTLMSSP_NEGOTIATE_128 | NTLMSSP_NEGOTIATE_NTLM | NTLMSSP_CHAL_TARGET_INFO; - - if (neg_flags & NTLMSSP_NEGOTIATE_NTLM2) - chal_flags |= NTLMSSP_NEGOTIATE_NTLM2; { DATA_BLOB domain_blob, struct_blob; -- cgit From 601b56e04fddd9ddfb9be5b0a625d6d279df7f4c Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 11:58:18 +0000 Subject: patch from metze: add a 'vfs' debug class --- source/include/debug.h | 2 +- source/lib/debug.c | 1 + source/smbd/vfs-wrap.c | 4 ++++ source/smbd/vfs.c | 4 ++++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/source/include/debug.h b/source/include/debug.h index a9261437012..4b0b4b1ac47 100644 --- a/source/include/debug.h +++ b/source/include/debug.h @@ -92,7 +92,7 @@ extern int DEBUGLEVEL; #define DBGC_SAM 9 #define DBGC_AUTH 10 #define DBGC_WINBIND 11 - +#define DBGC_VFS 12 /* So you can define DBGC_CLASS before including debug.h */ #ifndef DBGC_CLASS diff --git a/source/lib/debug.c b/source/lib/debug.c index c8a4721bce2..f4f3ee2f9f9 100644 --- a/source/lib/debug.c +++ b/source/lib/debug.c @@ -156,6 +156,7 @@ static const char *default_classname_table[] = { "sam", /* DBGC_SAM */ "auth", /* DBGC_AUTH */ "winbind", /* DBGC_WINBIND */ + "vfs", /* DBGC_VFS */ NULL }; diff --git a/source/smbd/vfs-wrap.c b/source/smbd/vfs-wrap.c index 394086dc075..6878a42b485 100644 --- a/source/smbd/vfs-wrap.c +++ b/source/smbd/vfs-wrap.c @@ -20,6 +20,10 @@ #include "includes.h" +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_VFS + + /* Check for NULL pointer parameters in vfswrap_* functions */ /* We don't want to have NULL function pointers lying around. Someone diff --git a/source/smbd/vfs.c b/source/smbd/vfs.c index 686499288d7..6869c618612 100644 --- a/source/smbd/vfs.c +++ b/source/smbd/vfs.c @@ -24,6 +24,10 @@ #include "includes.h" +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_VFS + + /* Some structures to help us initialise the vfs operations table */ struct vfs_syminfo { -- cgit From e13bc432628a6131be082caedc75cd8a3d206e5a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 12:57:12 +0000 Subject: This commit includes part of the patch from metze posted to the list, and a few of my own changes. In particular: I've added a SAM_ASSERT macro. This expands to either SMB_ASSERT() (which should help us track down bugs) or a return of NT_STATUS_CHECK_FAIL. Metze's changes are mostly to bring the code into line with current discussions on things like adding users/groups, flags etc. I've adjusted a fair bit of the 'const' in the SAM stuff. Const is currently used only for pointers, not for local variables or non-pointer paramters. The benifits and reasons for extending this further need discussion on samba-technical. Also, some of the 'context' paramters should not be const, to allow backend modules to do fancy caching etc in them. Andrew Bartlett --- source/include/sam.h | 76 ++++++++++------- source/sam/api.c | 27 ++++-- source/sam/get_set_account.c | 192 ++++++++++++++++++------------------------- source/sam/get_set_domain.c | 62 +++++++------- source/sam/get_set_group.c | 69 ++++++---------- source/sam/interface.c | 58 ++++++------- 6 files changed, 225 insertions(+), 259 deletions(-) diff --git a/source/include/sam.h b/source/include/sam.h index 1fca8ec4f6c..53d56a2a807 100644 --- a/source/include/sam.h +++ b/source/include/sam.h @@ -25,7 +25,18 @@ #ifndef _SAM_H #define _SAM_H -#define SAM_INTERFACE_VERSION 1 +/* We want to track down bugs early */ +#if 1 +#define SAM_ASSERT(x) SMB_ASSERT(x) +#else +#define SAM_ASSERT(x) while (0) { \ + if (!(x)) return NT_STATUS_FAIL_CHECK;\ + } +#endif + + +/* let it be 0 until we have a stable interface --metze */ +#define SAM_INTERFACE_VERSION 0 /* use this inside a passdb module */ #define SAM_MODULE_VERSIONING_MAGIC \ @@ -104,12 +115,11 @@ typedef struct sam_group_handle { struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ void (*free_fn)(struct sam_group_handle **); struct sam_group_data { - char *name; - char *comment; + char *group_name; + char *group_desc; DOM_SID sid; - int32 flags; /* specifies if the group is a local group or a global group */ + uint16 group_ctrl; /* specifies if the group is a local group or a global group */ uint32 num_members; - PRIVILEGE_SET privileges; } private; } SAM_GROUP_HANDLE; @@ -117,7 +127,6 @@ typedef struct sam_group_handle { typedef struct sam_group_member { DOM_SID sid; BOOL group; /* specifies if it is a group or a account */ - } SAM_GROUP_MEMBER; typedef struct sam_account_enum { @@ -125,15 +134,23 @@ typedef struct sam_account_enum { char *account_name; char *full_name; char *account_desc; - uint16 acc_ctrl; + uint16 acct_ctrl; } SAM_ACCOUNT_ENUM; typedef struct sam_group_enum { DOM_SID sid; - char *groupname; - char *comment; + char *group_name; + char *group_desc; + uint16 group_ctrl; } SAM_GROUP_ENUM; + +/* bits for group_ctrl: to spezify if the group is global group or alias */ +#define GCB_LOCAL_GROUP 0x0001 +#define GCB_ALIAS_GROUP GCB_LOCAL_GROUP +#define GCB_GLOBAL_GROUP 0x0002 + + typedef struct sam_context { struct sam_methods *methods; @@ -155,36 +172,35 @@ typedef struct sam_context NTSTATUS (*sam_enum_domains) (const struct sam_context *, const NT_USER_TOKEN *access_token, int32 *domain_count, DOM_SID **domains, char **domain_names); NTSTATUS (*sam_lookup_domain) (const struct sam_context *, const NT_USER_TOKEN * access_token, const char *domain, DOM_SID **domainsid); - NTSTATUS (*sam_get_domain_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain); + NTSTATUS (*sam_get_domain_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain); /* Account API */ - NTSTATUS (*sam_create_account) (const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_create_account) (const struct sam_context *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); NTSTATUS (*sam_add_account) (const struct sam_context *, const DOM_SID *domainsid, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_update_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_delete_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account); - NTSTATUS (*sam_enum_accounts) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domain, int32 *account_count, SAM_ACCOUNT_ENUM **accounts); + NTSTATUS (*sam_enum_accounts) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domain, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts); - NTSTATUS (*sam_get_account_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account); - NTSTATUS (*sam_get_account_by_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_get_account_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_get_account_by_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account); /* Group API */ - + NTSTATUS (*sam_create_group) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group); NTSTATUS (*sam_add_group) (const struct sam_context *, const DOM_SID *domainsid, const SAM_GROUP_HANDLE *group); NTSTATUS (*sam_update_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group); NTSTATUS (*sam_delete_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group); - NTSTATUS (*sam_enum_groups) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups); - NTSTATUS (*sam_get_group_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); - NTSTATUS (*sam_get_group_by_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_enum_groups) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups); + NTSTATUS (*sam_get_group_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_get_group_by_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group); NTSTATUS (*sam_add_member_to_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); NTSTATUS (*sam_delete_member_from_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); NTSTATUS (*sam_enum_groupmembers) (const struct sam_context *, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members); - NTSTATUS (*sam_get_groups_of_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups); - + NTSTATUS (*sam_get_groups_of_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups); void (*free_fn)(struct sam_context **); } SAM_CONTEXT; @@ -208,34 +224,34 @@ typedef struct sam_methods /* Domain API */ NTSTATUS (*sam_update_domain) (const struct sam_methods *, const SAM_DOMAIN_HANDLE *domain); - NTSTATUS (*sam_get_domain_handle) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_DOMAIN_HANDLE **domain); + NTSTATUS (*sam_get_domain_handle) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, SAM_DOMAIN_HANDLE **domain); /* Account API */ - NTSTATUS (*sam_create_account) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_create_account) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); NTSTATUS (*sam_add_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_update_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_delete_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); - NTSTATUS (*sam_enum_accounts) (const struct sam_methods *, const NT_USER_TOKEN *access_token, int32 *account_count, SAM_ACCOUNT_ENUM **accounts); + NTSTATUS (*sam_enum_accounts) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts); - NTSTATUS (*sam_get_account_by_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account); - NTSTATUS (*sam_get_account_by_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_get_account_by_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_get_account_by_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account); /* Group API */ - NTSTATUS (*sam_create_group) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const uint32 type, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_create_group) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group); NTSTATUS (*sam_add_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group); NTSTATUS (*sam_update_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group); NTSTATUS (*sam_delete_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group); - NTSTATUS (*sam_enum_groups) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups); - NTSTATUS (*sam_get_group_by_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); - NTSTATUS (*sam_get_group_by_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_enum_groups) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups); + NTSTATUS (*sam_get_group_by_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_get_group_by_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group); NTSTATUS (*sam_add_member_to_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); NTSTATUS (*sam_delete_member_from_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); NTSTATUS (*sam_enum_groupmembers) (const struct sam_methods *, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members); - NTSTATUS (*sam_get_groups_of_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups); + NTSTATUS (*sam_get_groups_of_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups); void (*free_private_data)(void **); } SAM_METHODS; diff --git a/source/sam/api.c b/source/sam/api.c index a941dcb0b93..5d850becce3 100644 --- a/source/sam/api.c +++ b/source/sam/api.c @@ -120,7 +120,7 @@ NTSTATUS sam_get_domain_by_sid(const NT_USER_TOKEN *access_token, const uint32 a /* Account API */ -NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -128,7 +128,7 @@ NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 acce return NT_STATUS_UNSUCCESSFUL; } - return sam_context->sam_create_account(sam_context, access_token, access_desired, domainsid, account); + return sam_context->sam_create_account(sam_context, access_token, access_desired, domainsid, account_name, acct_ctrl, account); } NTSTATUS sam_add_account(const DOM_SID *domainsid, const SAM_ACCOUNT_HANDLE *account) @@ -164,7 +164,7 @@ NTSTATUS sam_delete_account(const SAM_ACCOUNT_HANDLE *account) return sam_context->sam_delete_account(sam_context, account); } -NTSTATUS sam_enum_accounts(const NT_USER_TOKEN *access_token, const DOM_SID *domain, int32 *account_count, SAM_ACCOUNT_ENUM **accounts) +NTSTATUS sam_enum_accounts(const NT_USER_TOKEN *access_token, const DOM_SID *domain, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -172,7 +172,7 @@ NTSTATUS sam_enum_accounts(const NT_USER_TOKEN *access_token, const DOM_SID *dom return NT_STATUS_UNSUCCESSFUL; } - return sam_context->sam_enum_accounts(sam_context, access_token, domain, account_count, accounts); + return sam_context->sam_enum_accounts(sam_context, access_token, domain, acct_ctrl, account_count, accounts); } NTSTATUS sam_get_account_by_sid(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) @@ -199,6 +199,17 @@ NTSTATUS sam_get_account_by_name(const NT_USER_TOKEN *access_token, const uint32 /* Group API */ +NTSTATUS sam_create_group(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) +{ + SAM_CONTEXT *sam_context = sam_get_static_context(False); + + if (!sam_context) { + return NT_STATUS_UNSUCCESSFUL; + } + + return sam_context->sam_create_group(sam_context, access_token, access_desired, domainsid, group_name, group_ctrl, group); +} + NTSTATUS sam_add_group(const DOM_SID *domainsid, const SAM_GROUP_HANDLE *group) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -232,7 +243,7 @@ NTSTATUS sam_delete_group(const SAM_GROUP_HANDLE *group) return sam_context->sam_delete_group(sam_context, group); } -NTSTATUS sam_enum_groups(const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_enum_groups(const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -240,7 +251,7 @@ NTSTATUS sam_enum_groups(const NT_USER_TOKEN *access_token, const DOM_SID *domai return NT_STATUS_UNSUCCESSFUL; } - return sam_context->sam_enum_groups(sam_context, access_token, domainsid, type, groups_count, groups); + return sam_context->sam_enum_groups(sam_context, access_token, domainsid, group_ctrl, groups_count, groups); } NTSTATUS sam_get_group_by_sid(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) @@ -298,7 +309,7 @@ NTSTATUS sam_enum_groupmembers(const SAM_GROUP_HANDLE *group, uint32 *members_co return sam_context->sam_enum_groupmembers(sam_context, group, members_count, members); } -NTSTATUS sam_get_groups_of_account(const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_get_groups_of_sid(const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -306,6 +317,6 @@ NTSTATUS sam_get_groups_of_account(const SAM_ACCOUNT_HANDLE *account, const uint return NT_STATUS_UNSUCCESSFUL; } - return sam_context->sam_get_groups_of_account(sam_context, account, type, group_count, groups); + return sam_context->sam_get_groups_of_sid(sam_context, access_token, sids, group_ctrl, group_count, groups); } diff --git a/source/sam/get_set_account.c b/source/sam/get_set_account.c index b0104fa1c32..7bbfe39e145 100644 --- a/source/sam/get_set_account.c +++ b/source/sam/get_set_account.c @@ -25,11 +25,11 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_SAM -NTSTATUS sam_get_account_domain_sid(const SAM_ACCOUNT_HANDLE *sampass, DOM_SID **sid) +NTSTATUS sam_get_account_domain_sid(const SAM_ACCOUNT_HANDLE *sampass, const DOM_SID **sid) { NTSTATUS status; SAM_DOMAIN_HANDLE *domain; - if (!sampass || !sid) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(!sampass || !sid); if (!NT_STATUS_IS_OK(status = sam_get_account_domain(sampass, &domain))){ DEBUG(0, ("sam_get_account_domain_sid: Can't get domain for account\n")); @@ -39,11 +39,11 @@ NTSTATUS sam_get_account_domain_sid(const SAM_ACCOUNT_HANDLE *sampass, DOM_SID * return sam_get_domain_sid(domain, sid); } -NTSTATUS sam_get_account_domain_name(const SAM_ACCOUNT_HANDLE *sampass, char **domain_name) +NTSTATUS sam_get_account_domain_name(const SAM_ACCOUNT_HANDLE *sampass, const char **domain_name) { NTSTATUS status; SAM_DOMAIN_HANDLE *domain; - if (!sampass || !domain_name) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && domain_name); if (!NT_STATUS_IS_OK(status = sam_get_account_domain(sampass, &domain))){ DEBUG(0, ("sam_get_account_domain_name: Can't get domain for account\n")); @@ -55,7 +55,7 @@ NTSTATUS sam_get_account_domain_name(const SAM_ACCOUNT_HANDLE *sampass, char **d NTSTATUS sam_get_account_acct_ctrl(const SAM_ACCOUNT_HANDLE *sampass, uint16 *acct_ctrl) { - if(!sampass || !acct_ctrl) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && acct_ctrl); *acct_ctrl = sampass->private.acct_ctrl; @@ -64,7 +64,7 @@ NTSTATUS sam_get_account_acct_ctrl(const SAM_ACCOUNT_HANDLE *sampass, uint16 *ac NTSTATUS sam_get_account_logon_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *logon_time) { - if(!sampass || !logon_time) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && logon_time) ; *logon_time = sampass->private.logon_time; @@ -73,7 +73,7 @@ NTSTATUS sam_get_account_logon_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *l NTSTATUS sam_get_account_logoff_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *logoff_time) { - if(!sampass || !logoff_time) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && logoff_time) ; *logoff_time = sampass->private.logoff_time; @@ -82,7 +82,7 @@ NTSTATUS sam_get_account_logoff_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME * NTSTATUS sam_get_account_kickoff_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *kickoff_time) { - if (!sampass || !kickoff_time) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && kickoff_time); *kickoff_time = sampass->private.kickoff_time; @@ -91,7 +91,7 @@ NTSTATUS sam_get_account_kickoff_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME NTSTATUS sam_get_account_pass_last_set_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *pass_last_set_time) { - if (!sampass || !pass_last_set_time) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && pass_last_set_time); *pass_last_set_time = sampass->private.pass_last_set_time; @@ -100,7 +100,7 @@ NTSTATUS sam_get_account_pass_last_set_time(const SAM_ACCOUNT_HANDLE *sampass, N NTSTATUS sam_get_account_pass_can_change_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *pass_can_change_time) { - if (!sampass || !pass_can_change_time) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && pass_can_change_time); *pass_can_change_time = sampass->private.pass_can_change_time; @@ -109,7 +109,7 @@ NTSTATUS sam_get_account_pass_can_change_time(const SAM_ACCOUNT_HANDLE *sampass, NTSTATUS sam_get_account_pass_must_change_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *pass_must_change_time) { - if (!sampass || !pass_must_change_time) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && pass_must_change_time); *pass_must_change_time = sampass->private.pass_must_change_time; @@ -118,7 +118,7 @@ NTSTATUS sam_get_account_pass_must_change_time(const SAM_ACCOUNT_HANDLE *sampass NTSTATUS sam_get_account_logon_divs(const SAM_ACCOUNT_HANDLE *sampass, uint16 *logon_divs) { - if (!sampass || !logon_divs) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && logon_divs); *logon_divs = sampass->private.logon_divs; @@ -127,16 +127,16 @@ NTSTATUS sam_get_account_logon_divs(const SAM_ACCOUNT_HANDLE *sampass, uint16 *l NTSTATUS sam_get_account_hours_len(const SAM_ACCOUNT_HANDLE *sampass, uint32 *hours_len) { - if (!sampass || !hours_len) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && hours_len); *hours_len = sampass->private.hours_len; return NT_STATUS_OK; } -NTSTATUS sam_get_account_hours(const SAM_ACCOUNT_HANDLE *sampass, uint8 **hours) +NTSTATUS sam_get_account_hours(const SAM_ACCOUNT_HANDLE *sampass, const uint8 **hours) { - if (!sampass || !hours) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && hours); *hours = sampass->private.hours; @@ -145,7 +145,7 @@ NTSTATUS sam_get_account_hours(const SAM_ACCOUNT_HANDLE *sampass, uint8 **hours) NTSTATUS sam_get_account_nt_pwd(const SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB *nt_pwd) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); SMB_ASSERT((!sampass->private.nt_pw.data) || sampass->private.nt_pw.length == NT_HASH_LEN); @@ -157,7 +157,7 @@ NTSTATUS sam_get_account_nt_pwd(const SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB *nt NTSTATUS sam_get_account_lm_pwd(const SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB *lm_pwd) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); SMB_ASSERT((!sampass->private.lm_pw.data) || sampass->private.lm_pw.length == LM_HASH_LEN); @@ -176,25 +176,25 @@ NTSTATUS sam_get_account_lm_pwd(const SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB *lm NTSTATUS sam_get_account_plaintext_pwd(const SAM_ACCOUNT_HANDLE *sampass, char **plain_pwd) { - if (!sampass || !plain_pwd) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && plain_pwd); *plain_pwd = sampass->private.plaintext_pw; return NT_STATUS_OK; } -NTSTATUS sam_get_account_sid(const SAM_ACCOUNT_HANDLE *sampass, DOM_SID **sid) +NTSTATUS sam_get_account_sid(const SAM_ACCOUNT_HANDLE *sampass, const DOM_SID **sid) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *sid = &(sampass->private.account_sid); return NT_STATUS_OK; } -NTSTATUS sam_get_account_pgroup(const SAM_ACCOUNT_HANDLE *sampass, DOM_SID **sid) +NTSTATUS sam_get_account_pgroup(const SAM_ACCOUNT_HANDLE *sampass, const DOM_SID **sid) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *sid = &(sampass->private.group_sid); @@ -209,7 +209,7 @@ NTSTATUS sam_get_account_pgroup(const SAM_ACCOUNT_HANDLE *sampass, DOM_SID **sid NTSTATUS sam_get_account_init_flag(const SAM_ACCOUNT_HANDLE *sampass, uint32 *initflag) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *initflag = sampass->private.init_flag; @@ -218,7 +218,7 @@ NTSTATUS sam_get_account_init_flag(const SAM_ACCOUNT_HANDLE *sampass, uint32 *in NTSTATUS sam_get_account_name(const SAM_ACCOUNT_HANDLE *sampass, char **account_name) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *account_name = sampass->private.account_name; @@ -227,7 +227,7 @@ NTSTATUS sam_get_account_name(const SAM_ACCOUNT_HANDLE *sampass, char **account_ NTSTATUS sam_get_account_domain(const SAM_ACCOUNT_HANDLE *sampass, SAM_DOMAIN_HANDLE **domain) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *domain = sampass->private.domain; @@ -236,7 +236,7 @@ NTSTATUS sam_get_account_domain(const SAM_ACCOUNT_HANDLE *sampass, SAM_DOMAIN_HA NTSTATUS sam_get_account_fullname(const SAM_ACCOUNT_HANDLE *sampass, char **fullname) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *fullname = sampass->private.full_name; @@ -245,7 +245,7 @@ NTSTATUS sam_get_account_fullname(const SAM_ACCOUNT_HANDLE *sampass, char **full NTSTATUS sam_get_account_homedir(const SAM_ACCOUNT_HANDLE *sampass, char **homedir) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *homedir = sampass->private.home_dir; @@ -254,7 +254,7 @@ NTSTATUS sam_get_account_homedir(const SAM_ACCOUNT_HANDLE *sampass, char **homed NTSTATUS sam_get_account_unix_home_dir(const SAM_ACCOUNT_HANDLE *sampass, char **uhomedir) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *uhomedir = sampass->private.unix_home_dir; @@ -263,7 +263,7 @@ NTSTATUS sam_get_account_unix_home_dir(const SAM_ACCOUNT_HANDLE *sampass, char * NTSTATUS sam_get_account_dir_drive(const SAM_ACCOUNT_HANDLE *sampass, char **dirdrive) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *dirdrive = sampass->private.dir_drive; @@ -272,7 +272,7 @@ NTSTATUS sam_get_account_dir_drive(const SAM_ACCOUNT_HANDLE *sampass, char **dir NTSTATUS sam_get_account_logon_script(const SAM_ACCOUNT_HANDLE *sampass, char **logon_script) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *logon_script = sampass->private.logon_script; @@ -281,7 +281,7 @@ NTSTATUS sam_get_account_logon_script(const SAM_ACCOUNT_HANDLE *sampass, char ** NTSTATUS sam_get_account_profile_path(const SAM_ACCOUNT_HANDLE *sampass, char **profile_path) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *profile_path = sampass->private.profile_path; @@ -290,7 +290,7 @@ NTSTATUS sam_get_account_profile_path(const SAM_ACCOUNT_HANDLE *sampass, char ** NTSTATUS sam_get_account_description(const SAM_ACCOUNT_HANDLE *sampass, char **description) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *description = sampass->private.acct_desc; @@ -299,7 +299,7 @@ NTSTATUS sam_get_account_description(const SAM_ACCOUNT_HANDLE *sampass, char **d NTSTATUS sam_get_account_workstations(const SAM_ACCOUNT_HANDLE *sampass, char **workstations) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *workstations = sampass->private.workstations; @@ -308,7 +308,7 @@ NTSTATUS sam_get_account_workstations(const SAM_ACCOUNT_HANDLE *sampass, char ** NTSTATUS sam_get_account_unknown_str(const SAM_ACCOUNT_HANDLE *sampass, char **unknown_str) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *unknown_str = sampass->private.unknown_str; @@ -317,7 +317,7 @@ NTSTATUS sam_get_account_unknown_str(const SAM_ACCOUNT_HANDLE *sampass, char **u NTSTATUS sam_get_account_munged_dial(const SAM_ACCOUNT_HANDLE *sampass, char **munged_dial) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *munged_dial = sampass->private.munged_dial; @@ -326,7 +326,7 @@ NTSTATUS sam_get_account_munged_dial(const SAM_ACCOUNT_HANDLE *sampass, char **m NTSTATUS sam_get_account_unknown_1(const SAM_ACCOUNT_HANDLE *sampass, uint32 *unknown1) { - if (!sampass || !unknown1) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && unknown1); *unknown1 = sampass->private.unknown_1; @@ -335,7 +335,7 @@ NTSTATUS sam_get_account_unknown_1(const SAM_ACCOUNT_HANDLE *sampass, uint32 *un NTSTATUS sam_get_account_unknown_2(const SAM_ACCOUNT_HANDLE *sampass, uint32 *unknown2) { - if (!sampass || !unknown2) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && unknown2); *unknown2 = sampass->private.unknown_2; @@ -344,7 +344,7 @@ NTSTATUS sam_get_account_unknown_2(const SAM_ACCOUNT_HANDLE *sampass, uint32 *un NTSTATUS sam_get_account_unknown_3(const SAM_ACCOUNT_HANDLE *sampass, uint32 *unknown3) { - if (!sampass || !unknown3) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && unknown3); *unknown3 = sampass->private.unknown_3; @@ -357,8 +357,7 @@ NTSTATUS sam_get_account_unknown_3(const SAM_ACCOUNT_HANDLE *sampass, uint32 *un NTSTATUS sam_set_account_acct_ctrl(SAM_ACCOUNT_HANDLE *sampass, uint16 flags) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.acct_ctrl = flags; @@ -367,8 +366,7 @@ NTSTATUS sam_set_account_acct_ctrl(SAM_ACCOUNT_HANDLE *sampass, uint16 flags) NTSTATUS sam_set_account_logon_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.logon_time = mytime; @@ -380,8 +378,7 @@ NTSTATUS sam_set_account_logon_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, NTSTATUS sam_set_account_logoff_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.logoff_time = mytime; @@ -393,8 +390,7 @@ NTSTATUS sam_set_account_logoff_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, NTSTATUS sam_set_account_kickoff_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.kickoff_time = mytime; @@ -406,8 +402,7 @@ NTSTATUS sam_set_account_kickoff_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime NTSTATUS sam_set_account_pass_can_change_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.pass_can_change_time = mytime; @@ -419,8 +414,7 @@ NTSTATUS sam_set_account_pass_can_change_time(SAM_ACCOUNT_HANDLE *sampass, NTTIM NTSTATUS sam_set_account_pass_must_change_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.pass_must_change_time = mytime; @@ -432,8 +426,7 @@ NTSTATUS sam_set_account_pass_must_change_time(SAM_ACCOUNT_HANDLE *sampass, NTTI NTSTATUS sam_set_account_pass_last_set_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.pass_last_set_time = mytime; @@ -442,8 +435,7 @@ NTSTATUS sam_set_account_pass_last_set_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME NTSTATUS sam_set_account_hours_len(SAM_ACCOUNT_HANDLE *sampass, uint32 len) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.hours_len = len; return NT_STATUS_OK; @@ -451,8 +443,7 @@ NTSTATUS sam_set_account_hours_len(SAM_ACCOUNT_HANDLE *sampass, uint32 len) NTSTATUS sam_set_account_logon_divs(SAM_ACCOUNT_HANDLE *sampass, uint16 hours) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.logon_divs = hours; return NT_STATUS_OK; @@ -467,18 +458,16 @@ NTSTATUS sam_set_account_logon_divs(SAM_ACCOUNT_HANDLE *sampass, uint16 hours) NTSTATUS sam_set_account_init_flag(SAM_ACCOUNT_HANDLE *sampass, uint32 flag) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.init_flag |= flag; return NT_STATUS_OK; } -NTSTATUS sam_set_account_sid(SAM_ACCOUNT_HANDLE *sampass, DOM_SID *u_sid) +NTSTATUS sam_set_account_sid(SAM_ACCOUNT_HANDLE *sampass, const DOM_SID *u_sid) { - if (!sampass || !u_sid) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && u_sid); sid_copy(&sampass->private.account_sid, u_sid); @@ -488,11 +477,10 @@ NTSTATUS sam_set_account_sid(SAM_ACCOUNT_HANDLE *sampass, DOM_SID *u_sid) return NT_STATUS_OK; } -NTSTATUS sam_set_account_sid_from_string(SAM_ACCOUNT_HANDLE *sampass, fstring u_sid) +NTSTATUS sam_set_account_sid_from_string(SAM_ACCOUNT_HANDLE *sampass, const char *u_sid) { DOM_SID new_sid; - if (!sampass || !u_sid) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && u_sid); DEBUG(10, ("sam_set_account_sid_from_string: setting account sid %s\n", u_sid)); @@ -510,10 +498,9 @@ NTSTATUS sam_set_account_sid_from_string(SAM_ACCOUNT_HANDLE *sampass, fstring u_ return NT_STATUS_OK; } -NTSTATUS sam_set_account_pgroup_sid(SAM_ACCOUNT_HANDLE *sampass, DOM_SID *g_sid) +NTSTATUS sam_set_account_pgroup_sid(SAM_ACCOUNT_HANDLE *sampass, const DOM_SID *g_sid) { - if (!sampass || !g_sid) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && g_sid); sid_copy(&sampass->private.group_sid, g_sid); @@ -523,11 +510,10 @@ NTSTATUS sam_set_account_pgroup_sid(SAM_ACCOUNT_HANDLE *sampass, DOM_SID *g_sid) return NT_STATUS_OK; } -NTSTATUS sam_set_account_pgroup_string(SAM_ACCOUNT_HANDLE *sampass, fstring g_sid) +NTSTATUS sam_set_account_pgroup_string(SAM_ACCOUNT_HANDLE *sampass, const char *g_sid) { DOM_SID new_sid; - if (!sampass || !g_sid) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && g_sid); DEBUG(10, ("sam_set_group_sid_from_string: setting group sid %s\n", g_sid)); @@ -550,8 +536,7 @@ NTSTATUS sam_set_account_pgroup_string(SAM_ACCOUNT_HANDLE *sampass, fstring g_si NTSTATUS sam_set_account_domain(SAM_ACCOUNT_HANDLE *sampass, SAM_DOMAIN_HANDLE *domain) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.domain = domain; @@ -564,8 +549,7 @@ NTSTATUS sam_set_account_domain(SAM_ACCOUNT_HANDLE *sampass, SAM_DOMAIN_HANDLE * NTSTATUS sam_set_account_name(SAM_ACCOUNT_HANDLE *sampass, const char *account_name) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_account_name: setting nt account_name %s, was %s\n", account_name, sampass->private.account_name)); @@ -580,8 +564,7 @@ NTSTATUS sam_set_account_name(SAM_ACCOUNT_HANDLE *sampass, const char *account_n NTSTATUS sam_set_account_fullname(SAM_ACCOUNT_HANDLE *sampass, const char *full_name) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_account_fullname: setting full name %s, was %s\n", full_name, sampass->private.full_name)); @@ -596,8 +579,7 @@ NTSTATUS sam_set_account_fullname(SAM_ACCOUNT_HANDLE *sampass, const char *full_ NTSTATUS sam_set_account_logon_script(SAM_ACCOUNT_HANDLE *sampass, const char *logon_script, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_logon_script: from %s to %s\n", logon_script, sampass->private.logon_script)); @@ -614,8 +596,7 @@ NTSTATUS sam_set_account_logon_script(SAM_ACCOUNT_HANDLE *sampass, const char *l NTSTATUS sam_set_account_profile_path(SAM_ACCOUNT_HANDLE *sampass, const char *profile_path, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_profile_path: setting profile path %s, was %s\n", profile_path, sampass->private.profile_path)); @@ -635,8 +616,7 @@ NTSTATUS sam_set_account_profile_path(SAM_ACCOUNT_HANDLE *sampass, const char *p NTSTATUS sam_set_account_dir_drive(SAM_ACCOUNT_HANDLE *sampass, const char *dir_drive, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_dir_drive: setting dir drive %s, was %s\n", dir_drive, sampass->private.dir_drive)); @@ -657,7 +637,7 @@ NTSTATUS sam_set_account_dir_drive(SAM_ACCOUNT_HANDLE *sampass, const char *dir_ NTSTATUS sam_set_account_homedir(SAM_ACCOUNT_HANDLE *sampass, const char *home_dir, BOOL store) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_homedir: setting home dir %s, was %s\n", home_dir, sampass->private.home_dir)); @@ -678,8 +658,7 @@ NTSTATUS sam_set_account_homedir(SAM_ACCOUNT_HANDLE *sampass, const char *home_d NTSTATUS sam_set_account_unix_homedir(SAM_ACCOUNT_HANDLE *sampass, const char *unix_home_dir) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_unix_homedir: setting home dir %s, was %s\n", unix_home_dir, sampass->private.unix_home_dir)); @@ -695,8 +674,7 @@ NTSTATUS sam_set_account_unix_homedir(SAM_ACCOUNT_HANDLE *sampass, const char *u NTSTATUS sam_set_account_acct_desc(SAM_ACCOUNT_HANDLE *sampass, const char *acct_desc) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.acct_desc = talloc_strdup(sampass->mem_ctx, acct_desc); @@ -709,8 +687,7 @@ NTSTATUS sam_set_account_acct_desc(SAM_ACCOUNT_HANDLE *sampass, const char *acct NTSTATUS sam_set_account_workstations(SAM_ACCOUNT_HANDLE *sampass, const char *workstations) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_workstations: setting workstations %s, was %s\n", workstations, sampass->private.workstations)); @@ -726,8 +703,7 @@ NTSTATUS sam_set_account_workstations(SAM_ACCOUNT_HANDLE *sampass, const char *w NTSTATUS sam_set_account_unknown_str(SAM_ACCOUNT_HANDLE *sampass, const char *unknown_str) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.unknown_str = talloc_strdup(sampass->mem_ctx, unknown_str); @@ -740,8 +716,7 @@ NTSTATUS sam_set_account_unknown_str(SAM_ACCOUNT_HANDLE *sampass, const char *un NTSTATUS sam_set_account_munged_dial(SAM_ACCOUNT_HANDLE *sampass, const char *munged_dial) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.munged_dial = talloc_strdup(sampass->mem_ctx, munged_dial); return NT_STATUS_OK; @@ -751,10 +726,9 @@ NTSTATUS sam_set_account_munged_dial(SAM_ACCOUNT_HANDLE *sampass, const char *mu Set the account's NT hash. ********************************************************************/ -NTSTATUS sam_set_account_nt_pwd(SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB data) +NTSTATUS sam_set_account_nt_pwd(SAM_ACCOUNT_HANDLE *sampass, const DATA_BLOB data) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.nt_pw = data; @@ -765,10 +739,9 @@ NTSTATUS sam_set_account_nt_pwd(SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB data) Set the account's LM hash. ********************************************************************/ -NTSTATUS sam_set_account_lm_pwd(SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB data) +NTSTATUS sam_set_account_lm_pwd(SAM_ACCOUNT_HANDLE *sampass, const DATA_BLOB data) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.lm_pw = data; @@ -782,8 +755,7 @@ NTSTATUS sam_set_account_lm_pwd(SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB data) NTSTATUS sam_set_account_plaintext_pwd(SAM_ACCOUNT_HANDLE *sampass, const char *plain_pwd) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.plaintext_pw = talloc_strdup(sampass->mem_ctx, plain_pwd); @@ -792,8 +764,7 @@ NTSTATUS sam_set_account_plaintext_pwd(SAM_ACCOUNT_HANDLE *sampass, const char * NTSTATUS sam_set_account_unknown_1(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.unknown_1 = unkn; @@ -802,8 +773,7 @@ NTSTATUS sam_set_account_unknown_1(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) NTSTATUS sam_set_account_unknown_2(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.unknown_2 = unkn; @@ -812,8 +782,7 @@ NTSTATUS sam_set_account_unknown_2(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) NTSTATUS sam_set_account_unknown_3(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.unknown_3 = unkn; return NT_STATUS_OK; @@ -821,8 +790,7 @@ NTSTATUS sam_set_account_unknown_3(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) NTSTATUS sam_set_account_hours(SAM_ACCOUNT_HANDLE *sampass, const uint8 *hours) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); if (!hours) { memset ((char *)sampass->private.hours, 0, MAX_HOURS_LEN); @@ -846,8 +814,7 @@ NTSTATUS sam_set_account_pass_changed_now(SAM_ACCOUNT_HANDLE *sampass) uint32 expire; NTTIME temptime; - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); unix_to_nt_time(&temptime, time(NULL)); if (!NT_STATUS_IS_OK(sam_set_account_pass_last_set_time(sampass, temptime))) @@ -881,8 +848,7 @@ NTSTATUS sam_set_account_passwd(SAM_ACCOUNT_HANDLE *sampass, const char *plainte uchar new_lanman_p16[16]; uchar new_nt_p16[16]; - if (!sampass || !plaintext) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && plaintext); nt_lm_owf_gen(plaintext, new_nt_p16, new_lanman_p16); diff --git a/source/sam/get_set_domain.c b/source/sam/get_set_domain.c index 8ca876524ac..c70a4a3f097 100644 --- a/source/sam/get_set_domain.c +++ b/source/sam/get_set_domain.c @@ -25,9 +25,9 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_SAM -NTSTATUS sam_get_domain_sid(SAM_DOMAIN_HANDLE *domain, DOM_SID **sid) +NTSTATUS sam_get_domain_sid(SAM_DOMAIN_HANDLE *domain, const DOM_SID **sid) { - if (!domain || !sid) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&sid); *sid = &(domain->private.sid); @@ -36,7 +36,7 @@ NTSTATUS sam_get_domain_sid(SAM_DOMAIN_HANDLE *domain, DOM_SID **sid) NTSTATUS sam_get_domain_num_accounts(SAM_DOMAIN_HANDLE *domain, uint32 *num_accounts) { - if (!domain || !num_accounts) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&num_accounts); *num_accounts = domain->private.num_accounts; @@ -45,7 +45,7 @@ NTSTATUS sam_get_domain_num_accounts(SAM_DOMAIN_HANDLE *domain, uint32 *num_acco NTSTATUS sam_get_domain_num_groups(SAM_DOMAIN_HANDLE *domain, uint32 *num_groups) { - if (!domain || !num_groups) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&num_groups); *num_groups = domain->private.num_groups; @@ -54,25 +54,25 @@ NTSTATUS sam_get_domain_num_groups(SAM_DOMAIN_HANDLE *domain, uint32 *num_groups NTSTATUS sam_get_domain_num_aliases(SAM_DOMAIN_HANDLE *domain, uint32 *num_aliases) { - if (!domain || !num_aliases) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&num_aliases); *num_aliases = domain->private.num_aliases; return NT_STATUS_OK; } -NTSTATUS sam_get_domain_name(SAM_DOMAIN_HANDLE *domain, char **domain_name) +NTSTATUS sam_get_domain_name(SAM_DOMAIN_HANDLE *domain, const char **domain_name) { - if (!domain || !domain_name) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&domain_name); *domain_name = domain->private.name; return NT_STATUS_OK; } -NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, char **server_name) +NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, const char **server_name) { - if (!domain || !server_name) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&server_name); *server_name = domain->private.servername; @@ -81,7 +81,7 @@ NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, char **server_name) NTSTATUS sam_get_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwordage) { - if (!domain || !max_passwordage) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&max_passwordage); *max_passwordage = domain->private.max_passwordage; @@ -90,7 +90,7 @@ NTSTATUS sam_get_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwo NTSTATUS sam_get_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwordage) { - if (!domain || !min_passwordage) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&min_passwordage); *min_passwordage = domain->private.min_passwordage; @@ -99,7 +99,7 @@ NTSTATUS sam_get_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwo NTSTATUS sam_get_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME *lockout_duration) { - if (!domain || !lockout_duration) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&lockout_duration); *lockout_duration = domain->private.lockout_duration; @@ -108,7 +108,7 @@ NTSTATUS sam_get_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME *lock NTSTATUS sam_get_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME *reset_lockout_count) { - if (!domain || !reset_lockout_count) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&reset_lockout_count); *reset_lockout_count = domain->private.reset_count; @@ -117,7 +117,7 @@ NTSTATUS sam_get_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME *reset_loc NTSTATUS sam_get_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 *min_passwordlength) { - if (!domain || !min_passwordlength) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&min_passwordlength); *min_passwordlength = domain->private.min_passwordlength; @@ -126,7 +126,7 @@ NTSTATUS sam_get_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 *min_pas NTSTATUS sam_get_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 *password_history) { - if (!domain || !password_history) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&password_history); *password_history = domain->private.password_history; @@ -135,7 +135,7 @@ NTSTATUS sam_get_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 *password_ NTSTATUS sam_get_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 *lockout_count) { - if (!domain || !lockout_count) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&lockout_count); *lockout_count = domain->private.lockout_count; @@ -144,7 +144,7 @@ NTSTATUS sam_get_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 *lockout NTSTATUS sam_get_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL *force_logoff) { - if (!domain || !force_logoff) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&force_logoff); *force_logoff = domain->private.force_logoff; @@ -154,7 +154,7 @@ NTSTATUS sam_get_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL *force_logo NTSTATUS sam_get_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL *login_pwdchange) { - if (!domain || !login_pwdchange) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain && login_pwdchange); *login_pwdchange = domain->private.login_pwdchange; @@ -163,9 +163,9 @@ NTSTATUS sam_get_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL *login_p /* Set */ -NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, char *domain_name) +NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, const char *domain_name) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.name = talloc_strdup(domain->mem_ctx, domain_name); @@ -175,7 +175,7 @@ NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, char *domain_name) NTSTATUS sam_set_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME max_passwordage) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.max_passwordage = max_passwordage; @@ -184,7 +184,7 @@ NTSTATUS sam_set_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME max_passwor NTSTATUS sam_set_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME min_passwordage) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.min_passwordage = min_passwordage; @@ -193,7 +193,7 @@ NTSTATUS sam_set_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME min_passwor NTSTATUS sam_set_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME lockout_duration) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.lockout_duration = lockout_duration; @@ -201,7 +201,7 @@ NTSTATUS sam_set_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME locko } NTSTATUS sam_set_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME reset_lockout_count) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.reset_count = reset_lockout_count; @@ -210,7 +210,7 @@ NTSTATUS sam_set_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME reset_lock NTSTATUS sam_set_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 min_passwordlength) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.min_passwordlength = min_passwordlength; @@ -219,7 +219,7 @@ NTSTATUS sam_set_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 min_pass NTSTATUS sam_set_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 password_history) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.password_history = password_history; @@ -228,7 +228,7 @@ NTSTATUS sam_set_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 password_h NTSTATUS sam_set_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 lockout_count) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.lockout_count = lockout_count; @@ -237,7 +237,7 @@ NTSTATUS sam_set_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 lockout_ NTSTATUS sam_set_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL force_logoff) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.force_logoff = force_logoff; @@ -246,16 +246,16 @@ NTSTATUS sam_set_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL force_logof NTSTATUS sam_set_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL login_pwdchange) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.login_pwdchange = login_pwdchange; return NT_STATUS_OK; } -NTSTATUS sam_set_domain_server(SAM_DOMAIN_HANDLE *domain, char *server_name) +NTSTATUS sam_set_domain_server(SAM_DOMAIN_HANDLE *domain, const char *server_name) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.servername = talloc_strdup(domain->mem_ctx, server_name); diff --git a/source/sam/get_set_group.c b/source/sam/get_set_group.c index dac5ffca9fd..11ea9258a70 100644 --- a/source/sam/get_set_group.c +++ b/source/sam/get_set_group.c @@ -27,97 +27,80 @@ /* sam group get functions */ -NTSTATUS sam_get_group_sid(const SAM_GROUP_HANDLE *group, DOM_SID **sid) +NTSTATUS sam_get_group_sid(const SAM_GROUP_HANDLE *group, const DOM_SID **sid) { - if (!group || !sid) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group && sid); *sid = &(group->private.sid); return NT_STATUS_OK; } -NTSTATUS sam_get_group_typ(const SAM_GROUP_HANDLE *group, uint32 *typ) +NTSTATUS sam_get_group_ctrl(const SAM_GROUP_HANDLE *group, uint32 *group_ctrl) { - if (!group || !typ) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group && group_ctrl); - *typ = group->private.flags; + *group_ctrl = group->private.group_ctrl; return NT_STATUS_OK; } -NTSTATUS sam_get_group_name(const SAM_GROUP_HANDLE *group, char **group_name) +NTSTATUS sam_get_group_name(const SAM_GROUP_HANDLE *group, const char **group_name) { - if (!group) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group); - *group_name = group->private.name; + *group_name = group->private.group_name; return NT_STATUS_OK; } -NTSTATUS sam_get_group_comment(const SAM_GROUP_HANDLE *group, char **comment) +NTSTATUS sam_get_group_comment(const SAM_GROUP_HANDLE *group, const char **group_desc) { - if (!group) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group); - *comment = group->private.comment; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_group_priv_set(const SAM_GROUP_HANDLE *group, PRIVILEGE_SET *priv_set) -{ - if (!group) return NT_STATUS_UNSUCCESSFUL; - - *priv_set = group->private.privileges; + *group_desc = group->private.group_desc; return NT_STATUS_OK; } /* sam group set functions */ -NTSTATUS sam_set_group_sid(SAM_GROUP_HANDLE *group, DOM_SID *sid) +NTSTATUS sam_set_group_sid(SAM_GROUP_HANDLE *group, const DOM_SID *sid) { - if (!group) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group); - if (!sid) ZERO_STRUCT(group->private.sid); - else sid_copy(&(group->private.sid), sid); + if (!sid) + ZERO_STRUCT(group->private.sid); + else + sid_copy(&(group->private.sid), sid); return NT_STATUS_OK; } -NTSTATUS sam_set_group_typ(SAM_GROUP_HANDLE *group, uint32 typ) +NTSTATUS sam_set_group_group_ctrl(SAM_GROUP_HANDLE *group, uint32 group_ctrl) { - if (!group) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group); - group->private.flags = typ; + group->private.group_ctrl = group_ctrl; return NT_STATUS_OK; } -NTSTATUS sam_set_group_name(SAM_GROUP_HANDLE *group, char *group_name) +NTSTATUS sam_set_group_name(SAM_GROUP_HANDLE *group, const char *group_name) { - if (!group) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group); - group->private.name = talloc_strdup(group->mem_ctx, group_name); + group->private.group_name = talloc_strdup(group->mem_ctx, group_name); return NT_STATUS_OK; } -NTSTATUS sam_set_group_comment(SAM_GROUP_HANDLE *group, char *comment) +NTSTATUS sam_set_group_description(SAM_GROUP_HANDLE *group, const char *group_desc) { - if (!group) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group); - group->private.comment = talloc_strdup(group->mem_ctx, comment); + group->private.group_desc = talloc_strdup(group->mem_ctx, group_desc); return NT_STATUS_OK; } - -NTSTATUS sam_set_group_priv_set(SAM_GROUP_HANDLE *group, PRIVILEGE_SET *priv_set) -{ - if (!group) return NT_STATUS_UNSUCCESSFUL; - - if (!priv_set) ZERO_STRUCT(group->private.privileges); - else memcpy(&(group->private.privileges), priv_set, sizeof(PRIVILEGE_SET)); - - return NT_STATUS_OK; -} diff --git a/source/sam/interface.c b/source/sam/interface.c index ef2a4d5f8ad..9ba273e6f3e 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -48,11 +48,8 @@ NTSTATUS sam_get_methods_by_sid(const SAM_CONTEXT *context, SAM_METHODS **sam_me DEBUG(5,("sam_get_methods_by_sid: %d\n", __LINE__)); - if ((!context) || (!context->methods)) - { - DEBUG(2,("sam_get_methods_by_sid: invalid sam_context specified!\n")); - return NT_STATUS_INVALID_PARAMETER; - } + /* invalid sam_context specified */ + SAM_ASSERT(context && context->methods) tmp_methods = context->methods; @@ -77,11 +74,8 @@ NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_m DEBUG(5,("sam_get_methods_by_name: %d\n", __LINE__)); - if ((!context) || (!context->methods)) - { - DEBUG(2,("sam_get_methods_by_sid: invalid sam_context specified!\n")); - return NT_STATUS_INVALID_PARAMETER; - } + /* invalid sam_context specified */ + SAM_ASSERT(context && context->methods) tmp_methods = context->methods; @@ -229,10 +223,8 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE DEBUG(5,("context_sam_enum_domains: %d\n", __LINE__)); - if ((!context)|| (!context->methods)) { - DEBUG(2,("context_sam_enum_domains: invalid sam_context specified!\n")); - return NT_STATUS_INVALID_PARAMETER; - } + /* invalid sam_context specified */ + SAM_ASSERT(context && context->methods) if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { DEBUG(4,("samr_make_sam_obj_sd failed\n")); @@ -298,10 +290,8 @@ NTSTATUS context_sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOK DEBUG(5,("context_sam_lookup_domain: %d\n", __LINE__)); - if ((!context)|| (!context->methods)) { - DEBUG(2,("context_sam_lookup_domain: invalid sam_context specified!\n")); - return NT_STATUS_INVALID_PARAMETER; - } + /* invalid sam_context specified */ + SAM_ASSERT(context && context->methods) if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { DEBUG(4,("samr_make_sam_obj_sd failed\n")); @@ -354,7 +344,7 @@ NTSTATUS context_sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER return NT_STATUS_OK; } -NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, DOM_SID *domainsid, SAM_ACCOUNT_HANDLE **account) +NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -371,7 +361,7 @@ NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TO return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, account))) { + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, account_name, acct_ctrl, account))) { DEBUG(4,("context_sam_create_account in backend %s failed\n", tmp_methods->backendname)); return nt_status; @@ -383,7 +373,7 @@ NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TO NTSTATUS context_sam_add_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) { DOM_SID domainsid; - DOM_SID *accountsid; + const DOM_SID *accountsid; SAM_METHODS *tmp_methods; uint32 rid; NTSTATUS nt_status; @@ -422,7 +412,7 @@ NTSTATUS context_sam_update_account(const SAM_CONTEXT *context, const SAM_ACCOUN { DOM_SID domainsid; SAM_METHODS *tmp_methods; - DOM_SID *accountsid; + const DOM_SID *accountsid; uint32 rid; NTSTATUS nt_status; @@ -460,7 +450,7 @@ NTSTATUS context_sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUN { DOM_SID domainsid; SAM_METHODS *tmp_methods; - DOM_SID *accountsid; + const DOM_SID *accountsid; uint32 rid; NTSTATUS nt_status; @@ -494,7 +484,7 @@ NTSTATUS context_sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUN return NT_STATUS_OK; } -NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, int32 *account_count, SAM_ACCOUNT_ENUM **accounts) +NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 acct_ctrl, int32 *account_count, SAM_ACCOUNT_ENUM **accounts) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -511,7 +501,7 @@ NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOK return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_accounts(tmp_methods, access_token, account_count, accounts))) { + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_accounts(tmp_methods, access_token, acct_ctrl, account_count, accounts))) { DEBUG(4,("context_sam_enum_accounts for domain %s in backend %s failed\n", tmp_methods->domain->private.name, tmp_methods->backendname)); return nt_status; @@ -582,14 +572,14 @@ NTSTATUS context_sam_get_account_by_name(const SAM_CONTEXT *context, const NT_US return NT_STATUS_OK; } -NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const uint32 type, DOM_SID *sid, SAM_GROUP_HANDLE **group) +NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; DEBUG(5,("context_sam_create_group: %d\n", __LINE__)); - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { DEBUG(4,("sam_get_methods_by_sid failed\n")); return nt_status; } @@ -599,7 +589,7 @@ NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKE return NT_STATUS_UNSUCCESSFUL; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_group(tmp_methods, access_token, access_desired, type, group))) { + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_group(tmp_methods, access_token, access_desired, group_name, group_ctrl, group))) { DEBUG(4,("context_sam_create_group in backend %s failed\n", tmp_methods->backendname)); return nt_status; @@ -611,7 +601,7 @@ NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKE NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { DOM_SID domainsid; - DOM_SID *groupsid; + const DOM_SID *groupsid; SAM_METHODS *tmp_methods; uint32 rid; NTSTATUS nt_status; @@ -649,7 +639,7 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL NTSTATUS context_sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { DOM_SID domainsid; - DOM_SID *groupsid; + const DOM_SID *groupsid; struct sam_methods *tmp_methods; uint32 rid; NTSTATUS nt_status; @@ -688,7 +678,7 @@ NTSTATUS context_sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HA { DOM_SID domainsid; SAM_METHODS *tmp_methods; - DOM_SID *groupsid; + const DOM_SID *groupsid; uint32 rid; NTSTATUS nt_status; @@ -722,7 +712,7 @@ NTSTATUS context_sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HA return NT_STATUS_OK; } -NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups) +NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -739,7 +729,7 @@ NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groups(tmp_methods, access_token, type, groups_count, groups))) { + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groups(tmp_methods, access_token, group_ctrl, groups_count, groups))) { DEBUG(4,("context_sam_enum_groups for domain %s in backend %s failed\n", tmp_methods->domain->private.name, tmp_methods->backendname)); return nt_status; @@ -823,7 +813,7 @@ NTSTATUS context_sam_enum_groupmembers(const SAM_CONTEXT *context, const SAM_GRO return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS context_sam_get_groups_of_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups) +NTSTATUS context_sam_get_groups_of_sid(const SAM_CONTEXT *context, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) { return NT_STATUS_NOT_IMPLEMENTED; } -- cgit From f91fcb166107e45ffb3de95a3da65c79992341eb Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 13:00:37 +0000 Subject: Updates to sam_skel from metze, add sam/group.c and add a DEBUG() to the SAM_ASSERT if we are not going to crash. --- examples/sam/sam_skel.c | 50 ++++++------- source/include/sam.h | 7 +- source/sam/group.c | 193 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 223 insertions(+), 27 deletions(-) create mode 100644 source/sam/group.c diff --git a/examples/sam/sam_skel.c b/examples/sam/sam_skel.c index 9b684270a02..5dae5a58434 100644 --- a/examples/sam/sam_skel.c +++ b/examples/sam/sam_skel.c @@ -32,26 +32,26 @@ SAM_MODULE_VERSIONING_MAGIC /* General API */ -NTSTATUS sam_skel_get_sec_desc(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) +NTSTATUS sam_skel_get_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_set_sec_desc(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) +NTSTATUS sam_skel_set_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_lookup_sid(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type) +NTSTATUS sam_skel_lookup_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_lookup_name(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type) +NTSTATUS sam_skel_lookup_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -60,13 +60,13 @@ NTSTATUS sam_skel_lookup_name(const struct sam_methods *sam_method, const NT_USE /* Domain API */ -NTSTATUS sam_skel_update_domain(const struct sam_methods *sam_method, const SAM_DOMAIN_HANDLE *domain) +NTSTATUS sam_skel_update_domain(const SAM_METHODS *sam_method, const SAM_DOMAIN_HANDLE *domain) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_domain_handle(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_DOMAIN_HANDLE **domain) +NTSTATUS sam_skel_get_domain_handle(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, SAM_DOMAIN_HANDLE **domain) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -75,44 +75,44 @@ NTSTATUS sam_skel_get_domain_handle(const struct sam_methods *sam_method, const /* Account API */ -NTSTATUS sam_skel_create_account(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_skel_create_account(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *group_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_add_account(const struct sam_methods *sam_method, const SAM_ACCOUNT_HANDLE *account) +NTSTATUS sam_skel_add_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_update_account(const struct sam_methods *sam_method, const SAM_ACCOUNT_HANDLE *account) +NTSTATUS sam_skel_update_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_delete_account(const struct sam_methods *sam_method, const SAM_ACCOUNT_HANDLE *account) +NTSTATUS sam_skel_delete_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_enum_accounts(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, int32 *account_count, SAM_ACCOUNT_ENUM **accounts) +NTSTATUS sam_skel_enum_accounts(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_account_by_sid(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_skel_get_account_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_account_by_name(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_skel_get_account_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -121,69 +121,69 @@ NTSTATUS sam_skel_get_account_by_name(const struct sam_methods *sam_method, cons /* Group API */ -NTSTATUS sam_skel_create_group(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const uint32 type, SAM_GROUP_HANDLE **group) +NTSTATUS sam_skel_create_group(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_add_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_skel_add_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_update_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_skel_update_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_delete_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_skel_delete_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_enum_groups(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_skel_enum_groups(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_group_by_sid(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) +NTSTATUS sam_skel_get_group_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_group_by_name(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group) +NTSTATUS sam_skel_get_group_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_add_member_to_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +NTSTATUS sam_skel_add_member_to_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_delete_member_from_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +NTSTATUS sam_skel_delete_member_from_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_enum_groupmembers(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) +NTSTATUS sam_skel_enum_groupmembers(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_groups_of_account(const struct sam_methods *sam_method, const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_skel_get_groups_of_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -238,7 +238,7 @@ NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, cons (*sam_method)->sam_delete_member_from_group = sam_skel_delete_member_from_group; (*sam_method)->sam_enum_groupmembers = sam_skel_enum_groupmembers; - (*sam_method)->sam_get_groups_of_account = sam_skel_get_groups_of_account; + (*sam_method)->sam_get_groups_of_sid = sam_skel_get_groups_of_sid; (*sam_method)->free_private_data = NULL; diff --git a/source/include/sam.h b/source/include/sam.h index 53d56a2a807..afa7e55c659 100644 --- a/source/include/sam.h +++ b/source/include/sam.h @@ -30,8 +30,11 @@ #define SAM_ASSERT(x) SMB_ASSERT(x) #else #define SAM_ASSERT(x) while (0) { \ - if (!(x)) return NT_STATUS_FAIL_CHECK;\ - } + if (!(x)) { + DEBUG(0, ("SAM_ASSERT failed!\n")) + return NT_STATUS_FAIL_CHECK;\ + } \ + } #endif diff --git a/source/sam/group.c b/source/sam/group.c new file mode 100644 index 00000000000..7e4bcc1425c --- /dev/null +++ b/source/sam/group.c @@ -0,0 +1,193 @@ +/* + Unix SMB/CIFS implementation. + SAM_GROUP_HANDLE /SAM_GROUP_ENUM helpers + + Copyright (C) Stefan (metze) Metzmacher 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_SAM + +/************************************************************ + Fill the SAM_GROUP_HANDLE with default values. + ***********************************************************/ + +static void sam_fill_default_group(SAM_GROUP_HANDLE *group) +{ + ZERO_STRUCT(group->private); /* Don't touch the talloc context */ + +} + +static void destroy_sam_group_handle_talloc(SAM_GROUP_HANDLE **group) +{ + if (*group) { + + talloc_destroy((*group)->mem_ctx); + *group = NULL; + } +} + + +/********************************************************************** + Alloc memory and initialises a SAM_GROUP_HANDLE on supplied mem_ctx. +***********************************************************************/ + +NTSTATUS sam_init_group_talloc(TALLOC_CTX *mem_ctx, SAM_GROUP_HANDLE **group) +{ + SMB_ASSERT(*group != NULL); + + if (!mem_ctx) { + DEBUG(0,("sam_init_group_talloc: mem_ctx was NULL!\n")); + return NT_STATUS_UNSUCCESSFUL; + } + + *group=(SAM_GROUP_HANDLE *)talloc(mem_ctx, sizeof(SAM_GROUP_HANDLE)); + + if (*group==NULL) { + DEBUG(0,("sam_init_group_talloc: error while allocating memory\n")); + return NT_STATUS_NO_MEMORY; + } + + (*group)->mem_ctx = mem_ctx; + + (*group)->free_fn = NULL; + + sam_fill_default_group(*group); + + return NT_STATUS_OK; +} + + +/************************************************************* + Alloc memory and initialises a struct SAM_GROUP_HANDLE. + ************************************************************/ + +NTSTATUS sam_init_group(SAM_GROUP_HANDLE **group) +{ + TALLOC_CTX *mem_ctx; + NTSTATUS nt_status; + + mem_ctx = talloc_init_named("sam internal SAM_GROUP_HANDLE allocation"); + + if (!mem_ctx) { + DEBUG(0,("sam_init_group: error while doing talloc_init()\n")); + return NT_STATUS_NO_MEMORY; + } + + if (!NT_STATUS_IS_OK(nt_status = sam_init_group_talloc(mem_ctx, group))) { + talloc_destroy(mem_ctx); + return nt_status; + } + + (*group)->free_fn = destroy_sam_group_handle_talloc; + + return NT_STATUS_OK; +} + + +/************************************************************ + Reset the SAM_GROUP_HANDLE. + ***********************************************************/ + +NTSTATUS sam_reset_group(SAM_GROUP_HANDLE *group) +{ + SMB_ASSERT(group != NULL); + + sam_fill_default_group(group); + + return NT_STATUS_OK; +} + + +/************************************************************ + Free the SAM_GROUP_HANDLE and the member pointers. + ***********************************************************/ + +NTSTATUS sam_free_group(SAM_ACCOUNT_HANDLE **group) +{ + SMB_ASSERT(*group != NULL); + + if ((*group)->free_fn) { + (*group)->free_fn(group); + } + + return NT_STATUS_OK; +} + + +/********************************************************** + Encode the group control bits into a string. + length = length of string to encode into (including terminating + null). length *MUST BE MORE THAN 2* ! + **********************************************************/ + +char *sam_encode_acct_ctrl(uint16 group_ctrl, size_t length) +{ + static fstring group_str; + size_t i = 0; + + group_str[i++] = '['; + + if (group_ctrl & GCB_LOCAL_GROUP ) group_str[i++] = 'L'; + if (group_ctrl & GCB_GLOBAL_GROUP ) group_str[i++] = 'G'; + + for ( ; i < length - 2 ; i++ ) + group_str[i] = ' '; + + i = length - 2; + group_str[i++] = ']'; + group_str[i++] = '\0'; + + return group_str; +} + +/********************************************************** + Decode the group control bits from a string. + **********************************************************/ + +uint16 sam_decode_group_ctrl(const char *p) +{ + uint16 group_ctrl = 0; + BOOL finished = False; + + /* + * Check if the account type bits have been encoded after the + * NT password (in the form [NDHTUWSLXI]). + */ + + if (*p != '[') + return 0; + + for (p++; *p && !finished; p++) { + switch (*p) { + case 'L': { group_ctrl |= GCB_LOCAL_GROUP; break; /* 'L'ocal Aliases Group. */ } + case 'G': { group_ctrl |= GCB_GLOBAL_GROUP; break; /* 'G'lobal Domain Group. */ } + + case ' ': { break; } + case ':': + case '\n': + case '\0': + case ']': + default: { finished = True; } + } + } + + return group_ctrl; +} + -- cgit From 6953db6a98432cfbb946dd2d3cbe64e7dee0b71d Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 13:05:04 +0000 Subject: Make it possible to actually build these modules - process the Makefile.in at the end of configure. --- source/configure | 4 ++-- source/configure.in | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/configure b/source/configure index e6120f63477..e7ce3ee4df4 100755 --- a/source/configure +++ b/source/configure @@ -14188,7 +14188,7 @@ done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" -trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then diff --git a/source/configure.in b/source/configure.in index 168a6f47468..32c2fe114b7 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2828,7 +2828,7 @@ AC_SUBST(builddir) # I added make files that are outside /source directory. # I know this is not a good solution, will work out a better # solution soon. --simo -AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile) +AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) ################################################# # Print very concise instructions on building/use -- cgit From 5f59abb410110c22b6fffd7502443b5259d12e5a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 13:17:55 +0000 Subject: Get our consts back in line with current norms - only for pointer protection. Debate about extending this policy welcomed on samba-technical. Andrew Bartlett --- source/sam/interface.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/sam/interface.c b/source/sam/interface.c index 9ba273e6f3e..efc1f10f291 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -318,7 +318,7 @@ NTSTATUS context_sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOK } -NTSTATUS context_sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain) +NTSTATUS context_sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -344,7 +344,7 @@ NTSTATUS context_sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER return NT_STATUS_OK; } -NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) +NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -511,7 +511,7 @@ NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOK } -NTSTATUS context_sam_get_account_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) +NTSTATUS context_sam_get_account_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) { SAM_METHODS *tmp_methods; uint32 rid; @@ -546,7 +546,7 @@ NTSTATUS context_sam_get_account_by_sid(const SAM_CONTEXT *context, const NT_USE return NT_STATUS_OK; } -NTSTATUS context_sam_get_account_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account) +NTSTATUS context_sam_get_account_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -572,7 +572,7 @@ NTSTATUS context_sam_get_account_by_name(const SAM_CONTEXT *context, const NT_US return NT_STATUS_OK; } -NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) +NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -738,7 +738,7 @@ NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN return NT_STATUS_OK; } -NTSTATUS context_sam_get_group_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) +NTSTATUS context_sam_get_group_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) { SAM_METHODS *tmp_methods; uint32 rid; @@ -773,7 +773,7 @@ NTSTATUS context_sam_get_group_by_sid(const SAM_CONTEXT *context, const NT_USER_ return NT_STATUS_OK; } -NTSTATUS context_sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group) +NTSTATUS context_sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; -- cgit From 4d642e1fa4ed454a421a9f219a8cdecddb57fd31 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 13:21:54 +0000 Subject: Fix some missing ; on the end of our SAM_ASSERT()... --- source/sam/interface.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/sam/interface.c b/source/sam/interface.c index efc1f10f291..cd2f2361f3f 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -49,7 +49,7 @@ NTSTATUS sam_get_methods_by_sid(const SAM_CONTEXT *context, SAM_METHODS **sam_me DEBUG(5,("sam_get_methods_by_sid: %d\n", __LINE__)); /* invalid sam_context specified */ - SAM_ASSERT(context && context->methods) + SAM_ASSERT(context && context->methods); tmp_methods = context->methods; @@ -75,7 +75,7 @@ NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_m DEBUG(5,("sam_get_methods_by_name: %d\n", __LINE__)); /* invalid sam_context specified */ - SAM_ASSERT(context && context->methods) + SAM_ASSERT(context && context->methods); tmp_methods = context->methods; @@ -224,7 +224,7 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE DEBUG(5,("context_sam_enum_domains: %d\n", __LINE__)); /* invalid sam_context specified */ - SAM_ASSERT(context && context->methods) + SAM_ASSERT(context && context->methods); if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { DEBUG(4,("samr_make_sam_obj_sd failed\n")); @@ -291,7 +291,7 @@ NTSTATUS context_sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOK DEBUG(5,("context_sam_lookup_domain: %d\n", __LINE__)); /* invalid sam_context specified */ - SAM_ASSERT(context && context->methods) + SAM_ASSERT(context && context->methods); if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { DEBUG(4,("samr_make_sam_obj_sd failed\n")); -- cgit From d1e1fc3e4bf72717b3593685f0ea5750d676952a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 13:37:11 +0000 Subject: This is the 'easy' parts of the trusted domains patch n+3 patch from Rafal Szczesniak It includes a conversion of make_user_info*() to NTSTATUS and some minor changes to other files. It also picks up on a nasty segfault that can occour in some security=domain cases. Andrew Bartlett --- source/Makefile.in | 3 +- source/auth/auth_domain.c | 2 +- source/auth/auth_util.c | 122 +++++++++++++++++++++++------------------ source/rpc_server/srv_lsa_nt.c | 2 + source/smbd/sesssetup.c | 24 ++++---- source/utils/net_rpc.c | 8 +++ 6 files changed, 93 insertions(+), 68 deletions(-) diff --git a/source/Makefile.in b/source/Makefile.in index 531ca74474b..796d994b13e 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -242,7 +242,8 @@ UNIGRP_OBJ = libsmb/netlogon_unigrp.o AUTH_OBJ = auth/auth.o auth/auth_sam.o auth/auth_server.o auth/auth_domain.o \ auth/auth_rhosts.o auth/auth_unix.o auth/auth_util.o auth/auth_winbind.o \ - auth/auth_builtin.o auth/auth_compat.o $(PLAINTEXT_AUTH_OBJ) $(UNIGRP_OBJ) + auth/auth_builtin.o auth/auth_compat.o \ + $(PLAINTEXT_AUTH_OBJ) $(UNIGRP_OBJ) MANGLE_OBJ = smbd/mangle.o smbd/mangle_hash.o smbd/mangle_map.o smbd/mangle_hash2.o diff --git a/source/auth/auth_domain.c b/source/auth/auth_domain.c index f7a268de1fd..e8f11bb3d5a 100644 --- a/source/auth/auth_domain.c +++ b/source/auth/auth_domain.c @@ -251,7 +251,7 @@ static NTSTATUS attempt_connect_to_dc(struct cli_state **cli, } /*********************************************************************** - We have been asked to dynamcially determine the IP addresses of + We have been asked to dynamically determine the IP addresses of the PDC and BDC's for DOMAIN, and query them in turn. ************************************************************************/ static NTSTATUS find_connect_pdc(struct cli_state **cli, diff --git a/source/auth/auth_util.c b/source/auth/auth_util.c index 5ae942fac70..78dc0d4ee44 100644 --- a/source/auth/auth_util.c +++ b/source/auth/auth_util.c @@ -4,6 +4,7 @@ Copyright (C) Andrew Tridgell 1992-1998 Copyright (C) Andrew Bartlett 2001 Copyright (C) Jeremy Allison 2000-2001 + Copyright (C) Rafal Szczesniak 2002 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -56,7 +57,7 @@ static int smb_create_user(const char *unix_user, const char *homedir) Add and Delete UNIX users on demand, based on NTSTATUS codes. ****************************************************************************/ -void smb_user_control(const auth_usersupplied_info *user_info, auth_serversupplied_info *server_info, NTSTATUS nt_status) +void smb_user_control(const auth_usersupplied_info *user_info, auth_serversupplied_info *server_info, NTSTATUS nt_status) { struct passwd *pwd=NULL; @@ -81,15 +82,15 @@ void smb_user_control(const auth_usersupplied_info *user_info, auth_serversuppli Create an auth_usersupplied_data structure ****************************************************************************/ -static BOOL make_user_info(auth_usersupplied_info **user_info, - const char *smb_name, - const char *internal_username, - const char *client_domain, - const char *domain, - const char *wksta_name, - DATA_BLOB lm_pwd, DATA_BLOB nt_pwd, - DATA_BLOB plaintext, - uint32 auth_flags, BOOL encrypted) +static NTSTATUS make_user_info(auth_usersupplied_info **user_info, + const char *smb_name, + const char *internal_username, + const char *client_domain, + const char *domain, + const char *wksta_name, + DATA_BLOB lm_pwd, DATA_BLOB nt_pwd, + DATA_BLOB plaintext, + uint32 auth_flags, BOOL encrypted) { DEBUG(5,("attempting to make a user_info for %s (%s)\n", internal_username, smb_name)); @@ -97,7 +98,7 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, *user_info = malloc(sizeof(**user_info)); if (!user_info) { DEBUG(0,("malloc failed for user_info (size %d)\n", sizeof(*user_info))); - return False; + return NT_STATUS_NO_MEMORY; } ZERO_STRUCTP(*user_info); @@ -109,7 +110,7 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, (*user_info)->smb_name.len = strlen(smb_name); } else { free_user_info(user_info); - return False; + return NT_STATUS_NO_MEMORY; } (*user_info)->internal_username.str = strdup(internal_username); @@ -117,7 +118,7 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, (*user_info)->internal_username.len = strlen(internal_username); } else { free_user_info(user_info); - return False; + return NT_STATUS_NO_MEMORY; } (*user_info)->domain.str = strdup(domain); @@ -125,7 +126,7 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, (*user_info)->domain.len = strlen(domain); } else { free_user_info(user_info); - return False; + return NT_STATUS_NO_MEMORY; } (*user_info)->client_domain.str = strdup(client_domain); @@ -133,7 +134,7 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, (*user_info)->client_domain.len = strlen(client_domain); } else { free_user_info(user_info); - return False; + return NT_STATUS_NO_MEMORY; } (*user_info)->wksta_name.str = strdup(wksta_name); @@ -141,7 +142,7 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, (*user_info)->wksta_name.len = strlen(wksta_name); } else { free_user_info(user_info); - return False; + return NT_STATUS_NO_MEMORY; } DEBUG(5,("making blobs for %s's user_info struct\n", internal_username)); @@ -155,26 +156,26 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, DEBUG(10,("made an %sencrypted user_info for %s (%s)\n", encrypted ? "":"un" , internal_username, smb_name)); - return True; + return NT_STATUS_OK; } /**************************************************************************** Create an auth_usersupplied_data structure after appropriate mapping. ****************************************************************************/ -BOOL make_user_info_map(auth_usersupplied_info **user_info, - const char *smb_name, - const char *client_domain, - const char *wksta_name, - DATA_BLOB lm_pwd, DATA_BLOB nt_pwd, - DATA_BLOB plaintext, - uint32 ntlmssp_flags, BOOL encrypted) +NTSTATUS make_user_info_map(auth_usersupplied_info **user_info, + const char *smb_name, + const char *client_domain, + const char *wksta_name, + DATA_BLOB lm_pwd, DATA_BLOB nt_pwd, + DATA_BLOB plaintext, + uint32 ntlmssp_flags, BOOL encrypted) { const char *domain; fstring internal_username; fstrcpy(internal_username, smb_name); map_username(internal_username); - + DEBUG(5, ("make_user_info_map: Mapping user [%s]\\[%s] from workstation [%s]\n", client_domain, smb_name, wksta_name)); @@ -203,7 +204,7 @@ BOOL make_user_info_map(auth_usersupplied_info **user_info, client_domain, lp_winbind_separator(), smb_name) < 0) { DEBUG(0, ("make_user_info_map: asprintf() failed!\n")); - return False; + return NT_STATUS_NO_MEMORY; } DEBUG(5, ("make_user_info_map: testing for user %s\n", user)); @@ -245,6 +246,7 @@ BOOL make_user_info_netlogon_network(auth_usersupplied_info **user_info, const uchar *nt_network_pwd, int nt_pwd_len) { BOOL ret; + NTSTATUS nt_status; DATA_BLOB lm_blob = data_blob(lm_network_pwd, lm_pwd_len); DATA_BLOB nt_blob = data_blob(nt_network_pwd, nt_pwd_len); DATA_BLOB plaintext_blob = data_blob(NULL, 0); @@ -258,12 +260,14 @@ BOOL make_user_info_netlogon_network(auth_usersupplied_info **user_info, auth_flags |= AUTH_FLAG_NTLMv2_RESP; } - ret = make_user_info_map(user_info, - smb_name, client_domain, - wksta_name, - lm_blob, nt_blob, - plaintext_blob, - auth_flags, True); + nt_status = make_user_info_map(user_info, + smb_name, client_domain, + wksta_name, + lm_blob, nt_blob, + plaintext_blob, + auth_flags, True); + + ret = NT_STATUS_IS_OK(nt_status) ? True : False; data_blob_free(&lm_blob); data_blob_free(&nt_blob); @@ -329,6 +333,7 @@ BOOL make_user_info_netlogon_interactive(auth_usersupplied_info **user_info, { BOOL ret; + NTSTATUS nt_status; DATA_BLOB local_lm_blob = data_blob(local_lm_response, sizeof(local_lm_response)); DATA_BLOB local_nt_blob = data_blob(local_nt_response, sizeof(local_nt_response)); DATA_BLOB plaintext_blob = data_blob(NULL, 0); @@ -338,14 +343,15 @@ BOOL make_user_info_netlogon_interactive(auth_usersupplied_info **user_info, if (nt_interactive_pwd) auth_flags |= AUTH_FLAG_NTLM_RESP; - ret = make_user_info_map(user_info, - smb_name, client_domain, - wksta_name, - local_lm_blob, - local_nt_blob, - plaintext_blob, - auth_flags, True); + nt_status = make_user_info_map(user_info, + smb_name, client_domain, + wksta_name, + local_lm_blob, + local_nt_blob, + plaintext_blob, + auth_flags, True); + ret = NT_STATUS_IS_OK(nt_status) ? True : False; data_blob_free(&local_lm_blob); data_blob_free(&local_nt_blob); return ret; @@ -366,7 +372,7 @@ BOOL make_user_info_for_reply(auth_usersupplied_info **user_info, DATA_BLOB local_lm_blob; DATA_BLOB local_nt_blob; - BOOL ret = False; + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; uint32 auth_flags = AUTH_FLAG_NONE; /* @@ -397,25 +403,25 @@ BOOL make_user_info_for_reply(auth_usersupplied_info **user_info, } ret = make_user_info_map(user_info, smb_name, - client_domain, - get_remote_machine_name(), - local_lm_blob, - local_nt_blob, - plaintext_password, - auth_flags, False); + client_domain, + get_remote_machine_name(), + local_lm_blob, + local_nt_blob, + plaintext_password, + auth_flags, False); data_blob_free(&local_lm_blob); - return ret; + return NT_STATUS_IS_OK(ret) ? True : False; } /**************************************************************************** Create an auth_usersupplied_data structure ****************************************************************************/ -BOOL make_user_info_for_reply_enc(auth_usersupplied_info **user_info, - const char *smb_name, - const char *client_domain, - DATA_BLOB lm_resp, DATA_BLOB nt_resp) +NTSTATUS make_user_info_for_reply_enc(auth_usersupplied_info **user_info, + const char *smb_name, + const char *client_domain, + DATA_BLOB lm_resp, DATA_BLOB nt_resp) { uint32 auth_flags = AUTH_FLAG_NONE; @@ -450,14 +456,17 @@ BOOL make_user_info_guest(auth_usersupplied_info **user_info) DATA_BLOB nt_blob = data_blob(NULL, 0); DATA_BLOB plaintext_blob = data_blob(NULL, 0); uint32 auth_flags = AUTH_FLAG_NONE; + NTSTATUS nt_status; - return make_user_info(user_info, + nt_status = make_user_info(user_info, "","", "","", "", nt_blob, lm_blob, plaintext_blob, auth_flags, True); + + return NT_STATUS_IS_OK(nt_status) ? True : False; } /**************************************************************************** @@ -633,7 +642,14 @@ static NTSTATUS get_user_groups_from_local_sam(const DOM_SID *user_sid, return NT_STATUS_OK; } - usr = getpwuid_alloc(uid); + /* + * This is _essential_ to prevent occasional segfaults when + * winbind can't find uid -> username mapping + */ + if (!(usr = getpwuid_alloc(uid))) { + DEBUG(0, ("Couldn't find passdb structure for UID = %d ! Aborting.\n", uid)); + return NT_STATUS_NO_SUCH_USER; + }; n_unix_groups = groups_max(); if ((*unix_groups = malloc( sizeof(gid_t) * groups_max() ) ) == NULL) { diff --git a/source/rpc_server/srv_lsa_nt.c b/source/rpc_server/srv_lsa_nt.c index f28441886a5..e187e1556ef 100644 --- a/source/rpc_server/srv_lsa_nt.c +++ b/source/rpc_server/srv_lsa_nt.c @@ -473,6 +473,8 @@ NTSTATUS _lsa_enum_trust_dom(pipes_struct *p, LSA_Q_ENUM_TRUST_DOM *q_u, LSA_R_E /* * preferred length is set to 5 as a "our" preferred length * nt sets this parameter to 2 + * update (20.08.2002): it's not preferred length, but preferred size! + * it needs further investigation how to optimally choose this value */ uint32 max_num_domains = q_u->preferred_len < 5 ? q_u->preferred_len : 10; TRUSTDOM **trust_doms; diff --git a/source/smbd/sesssetup.c b/source/smbd/sesssetup.c index c37c655fd16..3dc9fe9208c 100644 --- a/source/smbd/sesssetup.c +++ b/source/smbd/sesssetup.c @@ -439,14 +439,14 @@ static int reply_spnego_auth(connection_struct *conn, char *inbuf, char *outbuf, auth_flags |= AUTH_FLAG_NTLM_RESP; } else if (nthash.length > 24) { auth_flags |= AUTH_FLAG_NTLMv2_RESP; - } + }; + + nt_status = make_user_info_map(&user_info, user, workgroup, machine, + lmhash, nthash, plaintext_password, + auth_flags, True); - if (!make_user_info_map(&user_info, - user, workgroup, - machine, - lmhash, nthash, - plaintext_password, - auth_flags, True)) { + /* it looks a bit weird, but this function returns int type... */ + if (!NT_STATUS_IS_OK(nt_status)) { return ERROR_NT(NT_STATUS_NO_MEMORY); } @@ -621,7 +621,7 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf, NTSTATUS nt_status; BOOL doencrypt = global_encrypted_passwords_negotiated; - + START_PROFILE(SMBsesssetupX); ZERO_STRUCT(lm_resp); @@ -776,11 +776,9 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf, nt_status = check_guest_password(&server_info); } else if (doencrypt) { - if (!make_user_info_for_reply_enc(&user_info, - user, domain, - lm_resp, nt_resp)) { - nt_status = NT_STATUS_NO_MEMORY; - } else { + nt_status = make_user_info_for_reply_enc(&user_info, user, domain, + lm_resp, nt_resp); + if (NT_STATUS_IS_OK(nt_status)) { nt_status = negprot_global_auth_context->check_ntlm_password(negprot_global_auth_context, user_info, &server_info); diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c index 25ed337c1fa..4067ce344d3 100644 --- a/source/utils/net_rpc.c +++ b/source/utils/net_rpc.c @@ -1972,6 +1972,12 @@ static int rpc_trustdom_list(int argc, const char **argv) d_printf("%s%s%s\n", trusted_dom_names[i], padding, ascii_sid); }; + + /* + * in case of no trusted domains say something rather + * than just display blank line + */ + if (!num_domains) d_printf("none\n"); } while (NT_STATUS_EQUAL(nt_status, STATUS_MORE_ENTRIES)); @@ -2076,6 +2082,8 @@ static int rpc_trustdom_list(int argc, const char **argv) }; }; + if (!num_domains) d_printf("none\n"); + } while (NT_STATUS_EQUAL(nt_status, STATUS_MORE_ENTRIES)); /* close opened samr and domain policy handles */ -- cgit From d383c309d4a259fb28d7541777a8b3b53cca23bf Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Fri, 6 Sep 2002 13:37:40 +0000 Subject: move everything to flat VFS/ directory --- examples/VFS/Makefile.in | 2 +- examples/VFS/README.netatalk | 18 ++ examples/VFS/netatalk.c | 430 ++++++++++++++++++++++++++++++++++++++ examples/VFS/netatalk/Makefile.in | 28 --- examples/VFS/netatalk/README | 18 -- examples/VFS/netatalk/netatalk.c | 430 -------------------------------------- 6 files changed, 449 insertions(+), 477 deletions(-) create mode 100644 examples/VFS/README.netatalk create mode 100644 examples/VFS/netatalk.c delete mode 100644 examples/VFS/netatalk/Makefile.in delete mode 100644 examples/VFS/netatalk/README delete mode 100644 examples/VFS/netatalk/netatalk.c diff --git a/examples/VFS/Makefile.in b/examples/VFS/Makefile.in index 6ae4f49434d..2ffd23b8538 100644 --- a/examples/VFS/Makefile.in +++ b/examples/VFS/Makefile.in @@ -6,7 +6,7 @@ LDSHFLAGS = -shared srcdir = @builddir@ FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) -VFS_OBJS = audit.so recycle.so +VFS_OBJS = audit.so recycle.so netatalk.so # Default target diff --git a/examples/VFS/README.netatalk b/examples/VFS/README.netatalk new file mode 100644 index 00000000000..70f6eea316d --- /dev/null +++ b/examples/VFS/README.netatalk @@ -0,0 +1,18 @@ +There is the new netatalk module both for HEAD. +This one has some difference from previous module: + +-- it doesn't care about creating of .AppleDouble forks, just keeps ones in +sync; + +-- if share in smb.conf doesn't contain .AppleDouble item in hide or veto +list, it will be added automatically. + +To my way of thinking, module became more lightweight and speedy. + +How to compile: + +you should place proper netatalk.c into examples/VFS/ then run 'configure' +from source/ and then run 'make' from examples/VFS/. + +add string 'vfs object = /netatlk.so' to smb.conf. It may +be defined either as global or as share-specific parameter. diff --git a/examples/VFS/netatalk.c b/examples/VFS/netatalk.c new file mode 100644 index 00000000000..353be36e6f0 --- /dev/null +++ b/examples/VFS/netatalk.c @@ -0,0 +1,430 @@ +/* + * AppleTalk VFS module for Samba-3.x + * + * Copyright (C) Alexei Kotovich, 2002 + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "config.h" +#include +#include +#ifdef HAVE_UTIME_H +#include +#endif +#ifdef HAVE_DIRENT_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#include +#include +#include +#include + +#define APPLEDOUBLE ".AppleDouble" +#define ADOUBLEMODE 0777 + +/* atalk functions */ + +static int atalk_build_paths(TALLOC_CTX *ctx, const char *path, + const char *fname, char **adbl_path, char **orig_path, + SMB_STRUCT_STAT *adbl_info, SMB_STRUCT_STAT *orig_info); + +static int atalk_unlink_file(const char *path); + +static struct vfs_ops default_vfs_ops; /* For passthrough operation */ +static struct smb_vfs_handle_struct *atalk_handle; + +static int atalk_get_path_ptr(char *path) +{ + int i = 0; + int ptr = 0; + + for (i = 0; path[i]; i ++) { + if (path[i] == '/') + ptr = i; + /* get out some 'spam';) from win32's file name */ + else if (path[i] == ':') { + path[i] = '\0'; + break; + } + } + + return ptr; +} + +static int atalk_build_paths(TALLOC_CTX *ctx, const char *path, const char *fname, + char **adbl_path, char **orig_path, + SMB_STRUCT_STAT *adbl_info, SMB_STRUCT_STAT *orig_info) +{ + int ptr0 = 0; + int ptr1 = 0; + char *dname = 0; + char *name = 0; + + if (!ctx || !path || !fname || !adbl_path || !orig_path || + !adbl_info || !orig_info) + return -1; +#if 0 + DEBUG(3, ("ATALK: PATH: %s[%s]\n", path, fname)); +#endif + if (strstr(path, APPLEDOUBLE) || strstr(fname, APPLEDOUBLE)) { + DEBUG(3, ("ATALK: path %s[%s] already contains %s\n", path, fname, APPLEDOUBLE)); + return -1; + } + + if (fname[0] == '.') ptr0 ++; + if (fname[1] == '/') ptr0 ++; + + *orig_path = talloc_asprintf(ctx, "%s/%s", path, &fname[ptr0]); + + /* get pointer to last '/' */ + ptr1 = atalk_get_path_ptr(*orig_path); + + sys_lstat(*orig_path, orig_info); + + if (S_ISDIR(orig_info->st_mode)) { + *adbl_path = talloc_asprintf(ctx, "%s/%s/%s/", + path, &fname[ptr0], APPLEDOUBLE); + } else { + dname = talloc_strdup(ctx, *orig_path); + dname[ptr1] = '\0'; + name = *orig_path; + *adbl_path = talloc_asprintf(ctx, "%s/%s/%s", + dname, APPLEDOUBLE, &name[ptr1 + 1]); + } +#if 0 + DEBUG(3, ("ATALK: DEBUG:\n%s\n%s\n", *orig_path, *adbl_path)); +#endif + sys_lstat(*adbl_path, adbl_info); + return 0; +} + +static int atalk_unlink_file(const char *path) +{ + int ret = 0; + + become_root(); + ret = unlink(path); + unbecome_root(); + + return ret; +} + +static void atalk_add_to_list(name_compare_entry **list) +{ + int i, count = 0; + name_compare_entry *new_list = 0; + name_compare_entry *cur_list = 0; + + cur_list = *list; + + if (cur_list) { + for (i = 0, count = 0; cur_list[i].name; i ++, count ++) { + if (strstr(cur_list[i].name, APPLEDOUBLE)) + return; + } + } + + if (!(new_list = calloc(1, + (count == 0 ? 1 : count + 1) * sizeof(name_compare_entry)))) + return; + + for (i = 0; i < count; i ++) { + new_list[i].name = strdup(cur_list[i].name); + new_list[i].is_wild = cur_list[i].is_wild; + } + + new_list[i].name = strdup(APPLEDOUBLE); + new_list[i].is_wild = False; + + free_namearray(*list); + + *list = new_list; + new_list = 0; + cur_list = 0; +} + +static void atalk_rrmdir(TALLOC_CTX *ctx, char *path) +{ + int n; + char *dpath; + struct dirent **namelist; + + if (!path) return; + + n = scandir(path, &namelist, 0, alphasort); + if (n < 0) { + return; + } else { + while (n --) { + if (strcmp(namelist[n]->d_name, ".") == 0 || + strcmp(namelist[n]->d_name, "..") == 0) + continue; + if (!(dpath = talloc_asprintf(ctx, "%s/%s", + path, namelist[n]->d_name))) + continue; + atalk_unlink_file(dpath); + free(namelist[n]); + } + } +} + +/* Disk operations */ + +/* Directory operations */ + +DIR *atalk_opendir(struct connection_struct *conn, const char *fname) +{ + DIR *ret = 0; + + ret = default_vfs_ops.opendir(conn, fname); + + /* + * when we try to perform delete operation upon file which has fork + * in ./.AppleDouble and this directory wasn't hidden by Samba, + * MS Windows explorer causes the error: "Cannot find the specified file" + * There is some workaround to avoid this situation, i.e. if + * connection has not .AppleDouble entry in either veto or hide + * list then it would be nice to add one. + */ + + atalk_add_to_list(&conn->hide_list); + atalk_add_to_list(&conn->veto_list); + + return ret; +} + +static int atalk_rmdir(struct connection_struct *conn, const char *path) +{ + BOOL add = False; + TALLOC_CTX *ctx = 0; + char *dpath; + + if (!conn || !conn->origpath || !path) goto exit_rmdir; + + /* due to there is no way to change bDeleteVetoFiles variable + * from this module, gotta use talloc stuff.. + */ + + strstr(path, APPLEDOUBLE) ? (add = False) : (add = True); + + if (!(ctx = talloc_init_named("remove_directory"))) + goto exit_rmdir; + + if (!(dpath = talloc_asprintf(ctx, "%s/%s%s", + conn->origpath, path, add ? "/"APPLEDOUBLE : ""))) + goto exit_rmdir; + + atalk_rrmdir(ctx, dpath); + +exit_rmdir: + talloc_destroy(ctx); + return default_vfs_ops.rmdir(conn, path); +} + +/* File operations */ + +static int atalk_rename(struct connection_struct *conn, const char *old, const char *new) +{ + int ret = 0; + char *adbl_path = 0; + char *orig_path = 0; + SMB_STRUCT_STAT adbl_info; + SMB_STRUCT_STAT orig_info; + TALLOC_CTX *ctx; + + ret = default_vfs_ops.rename(conn, old, new); + + if (!conn || !old) return ret; + + if (!(ctx = talloc_init_named("rename_file"))) + return ret; + + if (atalk_build_paths(ctx, conn->origpath, old, &adbl_path, &orig_path, + &adbl_info, &orig_info) != 0) + return ret; + + if (S_ISDIR(orig_info.st_mode) || S_ISREG(orig_info.st_mode)) { + DEBUG(3, ("ATALK: %s has passed..\n", adbl_path)); + goto exit_rename; + } + + atalk_unlink_file(adbl_path); + +exit_rename: + talloc_destroy(ctx); + return ret; +} + +static int atalk_unlink(struct connection_struct *conn, const char *path) +{ + int ret = 0, i; + char *adbl_path = 0; + char *orig_path = 0; + SMB_STRUCT_STAT adbl_info; + SMB_STRUCT_STAT orig_info; + TALLOC_CTX *ctx; + + ret = default_vfs_ops.unlink(conn, path); + + if (!conn || !path) return ret; + + /* no .AppleDouble sync if veto or hide list is empty, + * otherwise "Cannot find the specified file" error will be caused + */ + + if (!conn->veto_list) return ret; + if (!conn->hide_list) return ret; + + for (i = 0; conn->veto_list[i].name; i ++) { + if (strstr(conn->veto_list[i].name, APPLEDOUBLE)) + break; + } + + if (!conn->veto_list[i].name) { + for (i = 0; conn->hide_list[i].name; i ++) { + if (strstr(conn->hide_list[i].name, APPLEDOUBLE)) + break; + else { + DEBUG(3, ("ATALK: %s is not hidden, skipped..\n", + APPLEDOUBLE)); + return ret; + } + } + } + + if (!(ctx = talloc_init_named("unlink_file"))) + return ret; + + if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, + &adbl_info, &orig_info) != 0) + return ret; + + if (S_ISDIR(orig_info.st_mode) || S_ISREG(orig_info.st_mode)) { + DEBUG(3, ("ATALK: %s has passed..\n", adbl_path)); + goto exit_unlink; + } + + atalk_unlink_file(adbl_path); + +exit_unlink: + talloc_destroy(ctx); + return ret; +} + +static int atalk_chmod(struct connection_struct *conn, const char *path, mode_t mode) +{ + int ret = 0; + char *adbl_path = 0; + char *orig_path = 0; + SMB_STRUCT_STAT adbl_info; + SMB_STRUCT_STAT orig_info; + TALLOC_CTX *ctx; + + ret = default_vfs_ops.chmod(conn, path, mode); + + if (!conn || !path) return ret; + + if (!(ctx = talloc_init_named("chmod_file"))) + return ret; + + if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, + &adbl_info, &orig_info) != 0) + return ret; + + if (!S_ISDIR(orig_info.st_mode) && !S_ISREG(orig_info.st_mode)) { + DEBUG(3, ("ATALK: %s has passed..\n", orig_path)); + goto exit_chmod; + } + + chmod(adbl_path, ADOUBLEMODE); + +exit_chmod: + talloc_destroy(ctx); + return ret; +} + +static int atalk_chown(struct connection_struct *conn, const char *path, uid_t uid, gid_t gid) +{ + int ret = 0; + char *adbl_path = 0; + char *orig_path = 0; + SMB_STRUCT_STAT adbl_info; + SMB_STRUCT_STAT orig_info; + TALLOC_CTX *ctx; + + ret = default_vfs_ops.chown(conn, path, uid, gid); + + if (!conn || !path) return ret; + + if (!(ctx = talloc_init_named("chown_file"))) + return ret; + + if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, + &adbl_info, &orig_info) != 0) + return ret; + + if (!S_ISDIR(orig_info.st_mode) && !S_ISREG(orig_info.st_mode)) { + DEBUG(3, ("ATALK: %s has passed..\n", orig_path)); + goto exit_chown; + } + + chown(adbl_path, uid, gid); + +exit_chown: + talloc_destroy(ctx); + return ret; +} + +static vfs_op_tuple atalk_ops[] = { + + /* Directory operations */ + + {atalk_opendir, SMB_VFS_OP_OPENDIR, SMB_VFS_LAYER_TRANSPARENT}, + {atalk_rmdir, SMB_VFS_OP_RMDIR, SMB_VFS_LAYER_TRANSPARENT}, + + /* File operations */ + + {atalk_rename, SMB_VFS_OP_RENAME, SMB_VFS_LAYER_TRANSPARENT}, + {atalk_unlink, SMB_VFS_OP_UNLINK, SMB_VFS_LAYER_TRANSPARENT}, + {atalk_chmod, SMB_VFS_OP_CHMOD, SMB_VFS_LAYER_TRANSPARENT}, + {atalk_chown, SMB_VFS_OP_CHOWN, SMB_VFS_LAYER_TRANSPARENT}, + + /* Finish VFS operations definition */ + + {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} +}; + +/* VFS initialisation function. Return vfs_op_tuple array back to SAMBA. */ +vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, + struct smb_vfs_handle_struct *vfs_handle) +{ + *vfs_version = SMB_VFS_INTERFACE_VERSION; + memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); + + atalk_handle = vfs_handle; + + DEBUG(3, ("ATALK: vfs module loaded\n")); + return atalk_ops; +} + +/* VFS finalization function. */ +void vfs_done(connection_struct *conn) +{ + DEBUG(3, ("ATALK: vfs module unloaded\n")); +} diff --git a/examples/VFS/netatalk/Makefile.in b/examples/VFS/netatalk/Makefile.in deleted file mode 100644 index a9a5d69b51e..00000000000 --- a/examples/VFS/netatalk/Makefile.in +++ /dev/null @@ -1,28 +0,0 @@ -CC = @CC@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -LDSHFLAGS = -shared -srcdir = @builddir@ -FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) - -VFS_OBJS = netatalk.so - -# Default target - -default: $(VFS_OBJS) - -# Pattern rules - -%.so: %.o - $(CC) $(LDSHFLAGS) $(LDFLAGS) -o $@ $< - -%.o: %.c - $(CC) $(FLAGS) -c $< - -# Misc targets - -clean: - rm -rf .libs - rm -f core *~ *% *.bak \ - $(VFS_OBJ) $(VFS_OBJS) diff --git a/examples/VFS/netatalk/README b/examples/VFS/netatalk/README deleted file mode 100644 index 70f6eea316d..00000000000 --- a/examples/VFS/netatalk/README +++ /dev/null @@ -1,18 +0,0 @@ -There is the new netatalk module both for HEAD. -This one has some difference from previous module: - --- it doesn't care about creating of .AppleDouble forks, just keeps ones in -sync; - --- if share in smb.conf doesn't contain .AppleDouble item in hide or veto -list, it will be added automatically. - -To my way of thinking, module became more lightweight and speedy. - -How to compile: - -you should place proper netatalk.c into examples/VFS/ then run 'configure' -from source/ and then run 'make' from examples/VFS/. - -add string 'vfs object = /netatlk.so' to smb.conf. It may -be defined either as global or as share-specific parameter. diff --git a/examples/VFS/netatalk/netatalk.c b/examples/VFS/netatalk/netatalk.c deleted file mode 100644 index 353be36e6f0..00000000000 --- a/examples/VFS/netatalk/netatalk.c +++ /dev/null @@ -1,430 +0,0 @@ -/* - * AppleTalk VFS module for Samba-3.x - * - * Copyright (C) Alexei Kotovich, 2002 - * - * This program 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 this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "config.h" -#include -#include -#ifdef HAVE_UTIME_H -#include -#endif -#ifdef HAVE_DIRENT_H -#include -#endif -#ifdef HAVE_FCNTL_H -#include -#endif -#include -#include -#include -#include - -#define APPLEDOUBLE ".AppleDouble" -#define ADOUBLEMODE 0777 - -/* atalk functions */ - -static int atalk_build_paths(TALLOC_CTX *ctx, const char *path, - const char *fname, char **adbl_path, char **orig_path, - SMB_STRUCT_STAT *adbl_info, SMB_STRUCT_STAT *orig_info); - -static int atalk_unlink_file(const char *path); - -static struct vfs_ops default_vfs_ops; /* For passthrough operation */ -static struct smb_vfs_handle_struct *atalk_handle; - -static int atalk_get_path_ptr(char *path) -{ - int i = 0; - int ptr = 0; - - for (i = 0; path[i]; i ++) { - if (path[i] == '/') - ptr = i; - /* get out some 'spam';) from win32's file name */ - else if (path[i] == ':') { - path[i] = '\0'; - break; - } - } - - return ptr; -} - -static int atalk_build_paths(TALLOC_CTX *ctx, const char *path, const char *fname, - char **adbl_path, char **orig_path, - SMB_STRUCT_STAT *adbl_info, SMB_STRUCT_STAT *orig_info) -{ - int ptr0 = 0; - int ptr1 = 0; - char *dname = 0; - char *name = 0; - - if (!ctx || !path || !fname || !adbl_path || !orig_path || - !adbl_info || !orig_info) - return -1; -#if 0 - DEBUG(3, ("ATALK: PATH: %s[%s]\n", path, fname)); -#endif - if (strstr(path, APPLEDOUBLE) || strstr(fname, APPLEDOUBLE)) { - DEBUG(3, ("ATALK: path %s[%s] already contains %s\n", path, fname, APPLEDOUBLE)); - return -1; - } - - if (fname[0] == '.') ptr0 ++; - if (fname[1] == '/') ptr0 ++; - - *orig_path = talloc_asprintf(ctx, "%s/%s", path, &fname[ptr0]); - - /* get pointer to last '/' */ - ptr1 = atalk_get_path_ptr(*orig_path); - - sys_lstat(*orig_path, orig_info); - - if (S_ISDIR(orig_info->st_mode)) { - *adbl_path = talloc_asprintf(ctx, "%s/%s/%s/", - path, &fname[ptr0], APPLEDOUBLE); - } else { - dname = talloc_strdup(ctx, *orig_path); - dname[ptr1] = '\0'; - name = *orig_path; - *adbl_path = talloc_asprintf(ctx, "%s/%s/%s", - dname, APPLEDOUBLE, &name[ptr1 + 1]); - } -#if 0 - DEBUG(3, ("ATALK: DEBUG:\n%s\n%s\n", *orig_path, *adbl_path)); -#endif - sys_lstat(*adbl_path, adbl_info); - return 0; -} - -static int atalk_unlink_file(const char *path) -{ - int ret = 0; - - become_root(); - ret = unlink(path); - unbecome_root(); - - return ret; -} - -static void atalk_add_to_list(name_compare_entry **list) -{ - int i, count = 0; - name_compare_entry *new_list = 0; - name_compare_entry *cur_list = 0; - - cur_list = *list; - - if (cur_list) { - for (i = 0, count = 0; cur_list[i].name; i ++, count ++) { - if (strstr(cur_list[i].name, APPLEDOUBLE)) - return; - } - } - - if (!(new_list = calloc(1, - (count == 0 ? 1 : count + 1) * sizeof(name_compare_entry)))) - return; - - for (i = 0; i < count; i ++) { - new_list[i].name = strdup(cur_list[i].name); - new_list[i].is_wild = cur_list[i].is_wild; - } - - new_list[i].name = strdup(APPLEDOUBLE); - new_list[i].is_wild = False; - - free_namearray(*list); - - *list = new_list; - new_list = 0; - cur_list = 0; -} - -static void atalk_rrmdir(TALLOC_CTX *ctx, char *path) -{ - int n; - char *dpath; - struct dirent **namelist; - - if (!path) return; - - n = scandir(path, &namelist, 0, alphasort); - if (n < 0) { - return; - } else { - while (n --) { - if (strcmp(namelist[n]->d_name, ".") == 0 || - strcmp(namelist[n]->d_name, "..") == 0) - continue; - if (!(dpath = talloc_asprintf(ctx, "%s/%s", - path, namelist[n]->d_name))) - continue; - atalk_unlink_file(dpath); - free(namelist[n]); - } - } -} - -/* Disk operations */ - -/* Directory operations */ - -DIR *atalk_opendir(struct connection_struct *conn, const char *fname) -{ - DIR *ret = 0; - - ret = default_vfs_ops.opendir(conn, fname); - - /* - * when we try to perform delete operation upon file which has fork - * in ./.AppleDouble and this directory wasn't hidden by Samba, - * MS Windows explorer causes the error: "Cannot find the specified file" - * There is some workaround to avoid this situation, i.e. if - * connection has not .AppleDouble entry in either veto or hide - * list then it would be nice to add one. - */ - - atalk_add_to_list(&conn->hide_list); - atalk_add_to_list(&conn->veto_list); - - return ret; -} - -static int atalk_rmdir(struct connection_struct *conn, const char *path) -{ - BOOL add = False; - TALLOC_CTX *ctx = 0; - char *dpath; - - if (!conn || !conn->origpath || !path) goto exit_rmdir; - - /* due to there is no way to change bDeleteVetoFiles variable - * from this module, gotta use talloc stuff.. - */ - - strstr(path, APPLEDOUBLE) ? (add = False) : (add = True); - - if (!(ctx = talloc_init_named("remove_directory"))) - goto exit_rmdir; - - if (!(dpath = talloc_asprintf(ctx, "%s/%s%s", - conn->origpath, path, add ? "/"APPLEDOUBLE : ""))) - goto exit_rmdir; - - atalk_rrmdir(ctx, dpath); - -exit_rmdir: - talloc_destroy(ctx); - return default_vfs_ops.rmdir(conn, path); -} - -/* File operations */ - -static int atalk_rename(struct connection_struct *conn, const char *old, const char *new) -{ - int ret = 0; - char *adbl_path = 0; - char *orig_path = 0; - SMB_STRUCT_STAT adbl_info; - SMB_STRUCT_STAT orig_info; - TALLOC_CTX *ctx; - - ret = default_vfs_ops.rename(conn, old, new); - - if (!conn || !old) return ret; - - if (!(ctx = talloc_init_named("rename_file"))) - return ret; - - if (atalk_build_paths(ctx, conn->origpath, old, &adbl_path, &orig_path, - &adbl_info, &orig_info) != 0) - return ret; - - if (S_ISDIR(orig_info.st_mode) || S_ISREG(orig_info.st_mode)) { - DEBUG(3, ("ATALK: %s has passed..\n", adbl_path)); - goto exit_rename; - } - - atalk_unlink_file(adbl_path); - -exit_rename: - talloc_destroy(ctx); - return ret; -} - -static int atalk_unlink(struct connection_struct *conn, const char *path) -{ - int ret = 0, i; - char *adbl_path = 0; - char *orig_path = 0; - SMB_STRUCT_STAT adbl_info; - SMB_STRUCT_STAT orig_info; - TALLOC_CTX *ctx; - - ret = default_vfs_ops.unlink(conn, path); - - if (!conn || !path) return ret; - - /* no .AppleDouble sync if veto or hide list is empty, - * otherwise "Cannot find the specified file" error will be caused - */ - - if (!conn->veto_list) return ret; - if (!conn->hide_list) return ret; - - for (i = 0; conn->veto_list[i].name; i ++) { - if (strstr(conn->veto_list[i].name, APPLEDOUBLE)) - break; - } - - if (!conn->veto_list[i].name) { - for (i = 0; conn->hide_list[i].name; i ++) { - if (strstr(conn->hide_list[i].name, APPLEDOUBLE)) - break; - else { - DEBUG(3, ("ATALK: %s is not hidden, skipped..\n", - APPLEDOUBLE)); - return ret; - } - } - } - - if (!(ctx = talloc_init_named("unlink_file"))) - return ret; - - if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, - &adbl_info, &orig_info) != 0) - return ret; - - if (S_ISDIR(orig_info.st_mode) || S_ISREG(orig_info.st_mode)) { - DEBUG(3, ("ATALK: %s has passed..\n", adbl_path)); - goto exit_unlink; - } - - atalk_unlink_file(adbl_path); - -exit_unlink: - talloc_destroy(ctx); - return ret; -} - -static int atalk_chmod(struct connection_struct *conn, const char *path, mode_t mode) -{ - int ret = 0; - char *adbl_path = 0; - char *orig_path = 0; - SMB_STRUCT_STAT adbl_info; - SMB_STRUCT_STAT orig_info; - TALLOC_CTX *ctx; - - ret = default_vfs_ops.chmod(conn, path, mode); - - if (!conn || !path) return ret; - - if (!(ctx = talloc_init_named("chmod_file"))) - return ret; - - if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, - &adbl_info, &orig_info) != 0) - return ret; - - if (!S_ISDIR(orig_info.st_mode) && !S_ISREG(orig_info.st_mode)) { - DEBUG(3, ("ATALK: %s has passed..\n", orig_path)); - goto exit_chmod; - } - - chmod(adbl_path, ADOUBLEMODE); - -exit_chmod: - talloc_destroy(ctx); - return ret; -} - -static int atalk_chown(struct connection_struct *conn, const char *path, uid_t uid, gid_t gid) -{ - int ret = 0; - char *adbl_path = 0; - char *orig_path = 0; - SMB_STRUCT_STAT adbl_info; - SMB_STRUCT_STAT orig_info; - TALLOC_CTX *ctx; - - ret = default_vfs_ops.chown(conn, path, uid, gid); - - if (!conn || !path) return ret; - - if (!(ctx = talloc_init_named("chown_file"))) - return ret; - - if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, - &adbl_info, &orig_info) != 0) - return ret; - - if (!S_ISDIR(orig_info.st_mode) && !S_ISREG(orig_info.st_mode)) { - DEBUG(3, ("ATALK: %s has passed..\n", orig_path)); - goto exit_chown; - } - - chown(adbl_path, uid, gid); - -exit_chown: - talloc_destroy(ctx); - return ret; -} - -static vfs_op_tuple atalk_ops[] = { - - /* Directory operations */ - - {atalk_opendir, SMB_VFS_OP_OPENDIR, SMB_VFS_LAYER_TRANSPARENT}, - {atalk_rmdir, SMB_VFS_OP_RMDIR, SMB_VFS_LAYER_TRANSPARENT}, - - /* File operations */ - - {atalk_rename, SMB_VFS_OP_RENAME, SMB_VFS_LAYER_TRANSPARENT}, - {atalk_unlink, SMB_VFS_OP_UNLINK, SMB_VFS_LAYER_TRANSPARENT}, - {atalk_chmod, SMB_VFS_OP_CHMOD, SMB_VFS_LAYER_TRANSPARENT}, - {atalk_chown, SMB_VFS_OP_CHOWN, SMB_VFS_LAYER_TRANSPARENT}, - - /* Finish VFS operations definition */ - - {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} -}; - -/* VFS initialisation function. Return vfs_op_tuple array back to SAMBA. */ -vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, - struct smb_vfs_handle_struct *vfs_handle) -{ - *vfs_version = SMB_VFS_INTERFACE_VERSION; - memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); - - atalk_handle = vfs_handle; - - DEBUG(3, ("ATALK: vfs module loaded\n")); - return atalk_ops; -} - -/* VFS finalization function. */ -void vfs_done(connection_struct *conn) -{ - DEBUG(3, ("ATALK: vfs module unloaded\n")); -} -- cgit From 830f9910bb77562aa2dbef2f479c01493928692d Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Fri, 6 Sep 2002 13:39:46 +0000 Subject: the current block module is completely broken, jelmer will commit a new one later. simo --- examples/VFS/block/Makefile.in | 28 --- examples/VFS/block/block.c | 439 ------------------------------------ examples/VFS/block/samba-block.conf | 6 - examples/VFS/block/smb.conf | 6 - 4 files changed, 479 deletions(-) delete mode 100644 examples/VFS/block/Makefile.in delete mode 100644 examples/VFS/block/block.c delete mode 100644 examples/VFS/block/samba-block.conf delete mode 100644 examples/VFS/block/smb.conf diff --git a/examples/VFS/block/Makefile.in b/examples/VFS/block/Makefile.in deleted file mode 100644 index 3deb17c5967..00000000000 --- a/examples/VFS/block/Makefile.in +++ /dev/null @@ -1,28 +0,0 @@ -CC = @CC@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -LDSHFLAGS = -shared -srcdir = @builddir@ -FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) - -VFS_OBJS = block.so - -# Default target - -default: $(VFS_OBJS) - -# Pattern rules - -%.so: %.o - $(CC) $(LDSHFLAGS) $(LDFLAGS) -o $@ $< - -%.o: %.c - $(CC) $(FLAGS) -c $< - -# Misc targets - -clean: - rm -rf .libs - rm -f core *~ *% *.bak \ - $(VFS_OBJ) $(VFS_OBJS) diff --git a/examples/VFS/block/block.c b/examples/VFS/block/block.c deleted file mode 100644 index eb388a97ea4..00000000000 --- a/examples/VFS/block/block.c +++ /dev/null @@ -1,439 +0,0 @@ -/* - * - * Block access from links to dev mount points specified in PARAMCONF file - * - * Copyright (C) Ronald Kuetemeier, 2001 - * Copyright (C) Alexander Bokovoy, 2002 - * - * This program 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 this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "config.h" -#include -#include -#include -#include -#include -#include -#include -#include - - -#ifdef HAVE_UTIME_H -#include -#endif -#ifdef HAVE_DIRENT_H -#include -#endif -#include -#ifdef HAVE_FCNTL_H -#include -#endif - - -#include -#include - - - -static DIR *block_opendir(connection_struct *conn, char *fname); -static int block_connect(connection_struct *conn, const char *service, const char *user); -static void block_disconnect(connection_struct *conn); - -static struct smb_vfs_handle_struct *block_handle; - -/* VFS operations */ - - -static struct vfs_ops default_vfs_ops; /* For passthrough operation */ - -static vfs_op_tuple block_vfs_ops[] = { - - /* Disk operations */ - - {block_connect, SMB_VFS_OP_CONNECT, SMB_VFS_LAYER_TRANSPARENT}, - {block_disconnect, SMB_VFS_OP_DISCONNECT, SMB_VFS_LAYER_TRANSPARENT}, - - /* Directory operations */ - - {block_opendir, SMB_VFS_OP_OPENDIR, SMB_VFS_LAYER_TRANSPARENT}, - - {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} -}; - - -#ifndef PARAMCONF -#define PARAMCONF "/etc/samba-block.conf" -#endif - -extern BOOL pm_process(char *FileName, BOOL (*sfunc)(char *), BOOL(*pfunc)(char * , char *)); - -/* functions */ - -static BOOL enter_pblock_mount(char *dir); -static BOOL get_section(char *sect); -static BOOL get_parameter_value(char *param, char *value); -static BOOL load_param(void); -static BOOL search(struct stat *stat_buf); -static BOOL dir_search(char *linkstr, char *dir); -static BOOL enter_pblock_dir(char *dir); - - - -typedef struct block_dir -{ - dev_t st_dev; - int str_len; - char *dir_name; - struct block_dir *next; -} block_dir; - - -static char *params[] = {"mount_point","dir_name"}; -enum { MOUNT_POINT , DIR_NAME }; - -static struct block_dir *pblock_mountp = NULL; -static struct block_dir *pblock_dir = NULL; - - - -/* - * Load the conf file into a table - */ - -static BOOL load_param(void) -{ - - if ((pm_process(PARAMCONF,&get_section,&get_parameter_value)) == TRUE) - { - return TRUE; - - } - return FALSE; -} - - - -/* - * Enter the key and data into the list - * - */ - -static BOOL enter_pblock_mount(char *dir) -{ - struct stat stat_buf; - static struct block_dir *tmp_pblock; - - - if((stat(dir,&stat_buf)) != 0) - { - return FALSE; - } - - if(pblock_mountp == NULL) - { - pblock_mountp = calloc(1, sizeof(block_dir)); - if( pblock_mountp == NULL) - { - return FALSE; - } - tmp_pblock = pblock_mountp; - tmp_pblock->next = NULL; - - }else - { - tmp_pblock->next = calloc(1, sizeof(block_dir)); - if(tmp_pblock->next == NULL) - { - return FALSE; - } - tmp_pblock = tmp_pblock->next; - tmp_pblock->next = NULL; - - } - - - tmp_pblock->st_dev = stat_buf.st_dev; - tmp_pblock->dir_name = strdup(dir); - - - return TRUE; - -} - - -/* - * Enter the key and data into the list - * - */ - -static BOOL enter_pblock_dir(char *dir) -{ - static struct block_dir *tmp_pblock; - - - if(pblock_dir == NULL) - { - pblock_dir = calloc(1, sizeof(block_dir)); - if( pblock_dir == NULL) - { - return FALSE; - } - tmp_pblock = pblock_dir; - tmp_pblock->next = NULL; - - }else - { - tmp_pblock->next = calloc(1, sizeof(block_dir)); - if(tmp_pblock->next == NULL) - { - return FALSE; - } - tmp_pblock = tmp_pblock->next; - tmp_pblock->next = NULL; - - } - - - tmp_pblock->dir_name = strdup(dir); - tmp_pblock->str_len = strlen(dir); - - - return TRUE; - -} - - - - -/* - * Function callback for config section names - */ - -static BOOL get_section(char *sect) -{ - return TRUE; -} - - - -/* - * Function callback for config parameter value pairs - * - */ - -static BOOL get_parameter_value(char *param, char *value) -{ - int i = 0, maxargs = sizeof(params) / sizeof(char *); - - - for( i= 0; i < maxargs; i++) - { - if (strcmp(param,params[i]) == 0) - { - switch(i) - { - case MOUNT_POINT : - enter_pblock_mount(value); - break; - case DIR_NAME : - enter_pblock_dir(value); - break; - default : - break; - } - } - } - - return TRUE; - -} - - - - -/* VFS initialisation function. Return initialised vfs_op_tuple array - back to SAMBA. */ - -vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, - struct smb_vfs_handle_struct *vfs_handle) -{ - *vfs_version = SMB_VFS_INTERFACE_VERSION; - - memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); - - block_handle = vfs_handle; - - return block_vfs_ops; -} - - -/* VFS finalization function. */ -void vfs_done(connection_struct *conn) -{ -} - - -/* - * VFS connect and param file loading - */ - -static int block_connect(connection_struct *conn, const char *service, const char *user) -{ - if((load_param()) == FALSE) - { - - return -1; - - } - - DEBUG(0,("%s connecting \n",conn->user)); - - return (default_vfs_ops.connect(conn, service,user)); -} - -/* - * Free allocated structures and disconnect - * - */ - - -static void block_disconnect(struct connection_struct *conn) -{ - - struct block_dir *tmp_pblock = (pblock_mountp == NULL ? pblock_dir : pblock_mountp); - struct block_dir *free_pblock = NULL; - - while(tmp_pblock != NULL) - { - free(tmp_pblock->dir_name); - free_pblock = tmp_pblock; - tmp_pblock = tmp_pblock->next; - free(free_pblock); - - if(tmp_pblock == NULL && pblock_dir != NULL) - { - tmp_pblock = (pblock_mountp == NULL ? pblock_dir : NULL); - pblock_dir = NULL; - - } - - } - - - - default_vfs_ops.disconnect(conn); -} - -/* - * VFS opendir - */ - -static DIR *block_opendir(struct connection_struct *conn, char *fname) -{ - - char *dir_name = NULL; - struct stat stat_buf; - size_t len; - - len = strlen(conn->origpath) + 1 + strcspn(fname, "/"); - asprintf(&dir_name, "%s/%s", conn->origpath, fname); - dir_name[len] = '\0'; - - if((lstat(dir_name,&stat_buf)) == 0) - { - if((S_ISLNK(stat_buf.st_mode)) == 1) - { - stat(dir_name,&stat_buf); - if((search(&stat_buf) || dir_search(dir_name, fname) ) == TRUE) - { - DEBUG(0,("%s used link to blocked dir: %s \n", conn->user, dir_name)); - errno = EACCES; - return NULL; - } - } - } - - return (default_vfs_ops.opendir(conn, fname)); -} - - -/* - * Find mount point to block in list - */ - -static BOOL search(struct stat *stat_buf) -{ - struct block_dir *tmp_pblock = pblock_mountp; - - while(tmp_pblock != NULL) - { - - if(tmp_pblock->st_dev == stat_buf->st_dev) - { - return TRUE; - } - tmp_pblock = tmp_pblock->next; - } - - return FALSE; - -} - -/* - * Find dir in list to block id the starting point is link from a share - */ - -static BOOL dir_search(char *linkstr, char *dir) -{ - char buf[PATH_MAX +1], *ext_path; - int len = 0; - struct block_dir *tmp_pblock = pblock_dir; - - if((len = readlink(linkstr, buf, sizeof(buf))) == -1) - { - return TRUE; - - }else - { - buf[len] = '\0'; - } - - - if((ext_path = strchr(dir, '/')) != NULL) - { - pstrcat(buf, &ext_path[1]); - len = strlen(buf); - } - - while(tmp_pblock != NULL) - { - if(len < tmp_pblock->str_len) - { - tmp_pblock = tmp_pblock->next; - continue; - } - - if((strstr(buf, tmp_pblock->dir_name)) != NULL) - { - return TRUE; - } - tmp_pblock = tmp_pblock->next; - } - - - return FALSE; - -} diff --git a/examples/VFS/block/samba-block.conf b/examples/VFS/block/samba-block.conf deleted file mode 100644 index 7a137980b73..00000000000 --- a/examples/VFS/block/samba-block.conf +++ /dev/null @@ -1,6 +0,0 @@ -[ blocked ] -mount_point = / -mount_point = /boot -mount_point = /proc -dir_name = /usr/local/src/samba -dir_name = /usr/bin diff --git a/examples/VFS/block/smb.conf b/examples/VFS/block/smb.conf deleted file mode 100644 index 931196f4025..00000000000 --- a/examples/VFS/block/smb.conf +++ /dev/null @@ -1,6 +0,0 @@ -[homes] - comment = Home Directories - vfs object = /usr/local/samba/lib/block.so - browseable = yes - writable = yes - -- cgit From 7c2a667640b01a0f19ddc3515c5ca7ac43d26e25 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 13:46:36 +0000 Subject: Seems I missed commiting this when I added the rest of metze's ADS patch. Oh well, here it is... Andrew Bartlett --- source/libads/ads_utils.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 source/libads/ads_utils.c diff --git a/source/libads/ads_utils.c b/source/libads/ads_utils.c new file mode 100644 index 00000000000..1789193d7ee --- /dev/null +++ b/source/libads/ads_utils.c @@ -0,0 +1,75 @@ +/* + Unix SMB/CIFS implementation. + ads (active directory) utility library + + Copyright (C) Stefan (metze) Metzmacher 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" + +#ifdef HAVE_ADS + + +/* +translated the ACB_CTRL Flags to UserFlags (userAccountControl) +*/ +uint32 ads_acb2uf(uint16 acb) +{ + uint32 uf = 0x00000000; + + if (acb & ACB_DISABLED) uf |= UF_ACCOUNTDISABLE; + if (acb & ACB_HOMDIRREQ) uf |= UF_HOMEDIR_REQUIRED; + if (acb & ACB_PWNOTREQ) uf |= UF_PASSWD_NOTREQD; + if (acb & ACB_TEMPDUP) uf |= UF_TEMP_DUPLICATE_ACCOUNT; + if (acb & ACB_NORMAL) uf |= UF_NORMAL_ACCOUNT; + if (acb & ACB_MNS) uf |= UF_MNS_LOGON_ACCOUNT; + if (acb & ACB_DOMTRUST) uf |= UF_INTERDOMAIN_TRUST_ACCOUNT; + if (acb & ACB_WSTRUST) uf |= UF_WORKSTATION_TRUST_ACCOUNT; + if (acb & ACB_SVRTRUST) uf |= UF_SERVER_TRUST_ACCOUNT; + if (acb & ACB_PWNOEXP) uf |= UF_DONT_EXPIRE_PASSWD; + if (acb & ACB_AUTOLOCK) uf |= UF_LOCKOUT; + + return uf; +} + +/* translated the UserFlags (userAccountControl) to ACB_CTRL Flags */ +uint16 ads_uf2acb(uint32 uf) +{ + uint16 acb = 0x0000; + + if (uf & UF_ACCOUNTDISABLE) acb |= ACB_DISABLED; + if (uf & UF_HOMEDIR_REQUIRED) acb |= ACB_HOMDIRREQ; + if (uf & UF_PASSWD_NOTREQD) acb |= ACB_PWNOTREQ; + if (uf & UF_MNS_LOGON_ACCOUNT) acb |= ACB_MNS; + if (uf & UF_DONT_EXPIRE_PASSWD) acb |= ACB_PWNOEXP; + if (uf & UF_LOCKOUT) acb |= ACB_AUTOLOCK; + + switch (uf & UF_ACCOUNT_TYPE_MASK) + { + case UF_TEMP_DUPLICATE_ACCOUNT: acb |= ACB_TEMPDUP;break; + case UF_NORMAL_ACCOUNT: acb |= ACB_NORMAL;break; + case UF_INTERDOMAIN_TRUST_ACCOUNT: acb |= ACB_DOMTRUST;break; + case UF_WORKSTATION_TRUST_ACCOUNT: acb |= ACB_WSTRUST;break; + case UF_SERVER_TRUST_ACCOUNT: acb |= ACB_SVRTRUST;break; + /*Fix Me: what should we do here? */ + default: acb |= ACB_NORMAL;break; + } + + return acb; +} + +#endif -- cgit From 55ee289f587f107fa03c5f889491fdaab101df2d Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 23:10:28 +0000 Subject: As per the 'OK' at CIFS2002, only use the readline headers (and this crasy #ifdef mess...) in readline.c, we don't need or use them in the rest of Samba. (This OK was of course conditional on 'if you break it, you better fix it...') Andrew Bartlett --- source/include/includes.h | 18 ------------------ source/lib/readline.c | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/source/include/includes.h b/source/include/includes.h index 945ec2cbd70..dacac356e3d 100644 --- a/source/include/includes.h +++ b/source/include/includes.h @@ -902,24 +902,6 @@ struct functable { #define ULTRIX_AUTH 1 #endif -#ifdef HAVE_LIBREADLINE -# ifdef HAVE_READLINE_READLINE_H -# include -# ifdef HAVE_READLINE_HISTORY_H -# include -# endif -# else -# ifdef HAVE_READLINE_H -# include -# ifdef HAVE_HISTORY_H -# include -# endif -# else -# undef HAVE_LIBREADLINE -# endif -# endif -#endif - #ifndef HAVE_STRDUP char *strdup(const char *s); #endif diff --git a/source/lib/readline.c b/source/lib/readline.c index d80c571dd3b..58c4ecf482d 100644 --- a/source/lib/readline.c +++ b/source/lib/readline.c @@ -21,6 +21,24 @@ #include "includes.h" +#ifdef HAVE_LIBREADLINE +# ifdef HAVE_READLINE_READLINE_H +# include +# ifdef HAVE_READLINE_HISTORY_H +# include +# endif +# else +# ifdef HAVE_READLINE_H +# include +# ifdef HAVE_HISTORY_H +# include +# endif +# else +# undef HAVE_LIBREADLINE +# endif +# endif +#endif + #ifdef HAVE_NEW_LIBREADLINE # define RL_COMPLETION_CAST (rl_completion_func_t *) #else -- cgit From e9f4bc77f84eeece82dea25f9c693cfb1d0a8464 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sat, 7 Sep 2002 04:05:42 +0000 Subject: recycle.c: merged in modifications made my differnt people, cleaned up things, yet some work todo the code works but there are still some cases to be handled properly Makefile.in: this one seem much simpler and effective than the previous hack with file inclusion it should also be more portable we still need to find a solution to support multiple platforms or go back to libtool --- examples/VFS/Makefile.in | 10 +- examples/VFS/recycle.c | 582 ++++++++++++++++++++++++++++++++++++----------- 2 files changed, 454 insertions(+), 138 deletions(-) diff --git a/examples/VFS/Makefile.in b/examples/VFS/Makefile.in index 2ffd23b8538..46e1a90263b 100644 --- a/examples/VFS/Makefile.in +++ b/examples/VFS/Makefile.in @@ -6,11 +6,8 @@ LDSHFLAGS = -shared srcdir = @builddir@ FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) -VFS_OBJS = audit.so recycle.so netatalk.so - -# Default target - -default: $(VFS_OBJS) +# Auto target +default: $(patsubst %.c,%.so,$(wildcard *.c)) # Pattern rules @@ -24,5 +21,4 @@ default: $(VFS_OBJS) clean: rm -rf .libs - rm -f core *~ *% *.bak \ - $(VFS_OBJ) $(VFS_OBJS) + rm -f core *~ *% *.bak *.o *.so diff --git a/examples/VFS/recycle.c b/examples/VFS/recycle.c index 0a261c20df4..bcf5f898cc3 100644 --- a/examples/VFS/recycle.c +++ b/examples/VFS/recycle.c @@ -1,227 +1,547 @@ -/* - * Auditing VFS module for samba. Log selected file operations to syslog - * facility. +/* + * Recycle bin VFS module for Samba. * * Copyright (C) 2001, Brandon Stone, Amherst College, . * Copyright (C) 2002, Jeremy Allison - modified to make a VFS module. * Copyright (C) 2002, Alexander Bokovoy - cascaded VFS adoption, + * Copyright (C) 2002, Juergen Hasch - added some options. + * Copyright (C) 2002, Simo Sorce * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include "config.h" -#include -#include -#ifdef HAVE_UTIME_H -#include -#endif -#ifdef HAVE_DIRENT_H -#include -#endif -#include -#ifdef HAVE_FCNTL_H -#include -#endif -#include -#include -#include -#include - -/* VFS operations */ +#include "includes.h" + +#define ALLOC_CHECK(ptr, label) do { if ((ptr) == NULL) { DEBUG(0, ("recycle.bin: out of memory!\n")); errno = ENOMEM; goto label; } } while(0) + +static int vfs_recycle_debug_level = DBGC_VFS; + +#undef DBGC_CLASS +#define DBGC_CLASS vfs_recycle_debug_level +static const char *delimiter = "|"; /* delimiter for options */ + +/* One per connection */ + +typedef struct recycle_bin_struct +{ + TALLOC_CTX *ctx; + char *repository; /* name of the recycle bin directory */ + BOOL keep_directories; /* keep directory structure of deleted file in recycle bin */ + BOOL versions; /* create versions of deleted files with identical name */ + BOOL touch; /* touch access date of deleted file */ + char *exclude; /* which files to exclude */ + char *exclude_dir; /* which directories to exclude */ + char *noversions; /* which files to exclude from versioning */ + SMB_OFF_T maxsize; /* maximum file size to be saved */ +} recycle_bin_struct; + +static BOOL checkparam(char *haystack,char *needle); + +/* VFS operations */ static struct vfs_ops default_vfs_ops; /* For passthrough operation */ -static struct smb_vfs_handle_struct *recycle_handle; -static int recycle_unlink(connection_struct *, const char *); + static int recycle_connect(struct connection_struct *conn, const char *service, const char *user); static void recycle_disconnect(struct connection_struct *conn); +static int recycle_unlink(connection_struct *, const char *); + +#define VFS_OP(x) ((void *) x) static vfs_op_tuple recycle_ops[] = { /* Disk operations */ - - {recycle_connect, SMB_VFS_OP_CONNECT, SMB_VFS_LAYER_OPAQUE}, - {recycle_disconnect, SMB_VFS_OP_DISCONNECT, SMB_VFS_LAYER_OPAQUE}, + {VFS_OP(recycle_connect), SMB_VFS_OP_CONNECT, SMB_VFS_LAYER_TRANSPARENT}, + {VFS_OP(recycle_disconnect), SMB_VFS_OP_DISCONNECT, SMB_VFS_LAYER_TRANSPARENT}, /* File operations */ - - {recycle_unlink, SMB_VFS_OP_UNLINK, SMB_VFS_LAYER_OPAQUE}, + {VFS_OP(recycle_unlink), SMB_VFS_OP_UNLINK, SMB_VFS_LAYER_TRANSPARENT}, - {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} + {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} }; -/* VFS initialisation function. Return initialised vfs_op_tuple array back to SAMBA. */ - -vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, - struct smb_vfs_handle_struct *vfs_handle) +/** + * VFS initialisation function. + * + * @retval initialised vfs_op_tuple array + **/ +vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops) { + DEBUG(10, ("Initializing VFS module recycle\n")); *vfs_version = SMB_VFS_INTERFACE_VERSION; memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); - - DEBUG(5,("vfs_init: for recycle!\n")); - - /* Remember vfs_id for storing private information at connect */ - recycle_handle = vfs_handle; + vfs_recycle_debug_level = debug_add_class("recycle.bin"); + if (vfs_recycle_debug_level == -1) { + vfs_recycle_debug_level = DBGC_VFS; + DEBUG(0, ("vfs_recycle: Couldn't register custom debugging class!\n")); + } else { + DEBUG(0, ("vfs_recycle: Debug class number of 'vfs_recycle': %d\n", vfs_recycle_debug_level)); + } return recycle_ops; } -/* VFS finalization function. */ +/** + * VFS finalization function. + * + **/ void vfs_done(connection_struct *conn) { - DEBUG(5,("vfs_done_recycle: called for connection %p\n",conn)); + DEBUG(10,("Called for connection %d\n", SNUM(conn))); } static int recycle_connect(struct connection_struct *conn, const char *service, const char *user) { - fstring recycle_bin; + TALLOC_CTX *ctx = NULL; + recycle_bin_struct *recbin; + char *servicename; + char *tmp_str; - DEBUG(4,("recycle_connect: called for service %s as user %s\n", service, user)); + DEBUG(10, ("Called for service %s (%d) as user %s\n", service, SNUM(conn), user)); - fstrcpy(recycle_bin, (const char *)lp_parm_string(lp_servicename(SNUM(conn)),"vfs","recycle bin")); - if (!*recycle_bin) { - DEBUG(0,("recycle_connect: No options listed (vfs:recycle bin).\n" )); - return 0; /* No options. */ + if (!(ctx = talloc_init_named("recycle bin"))) { + DEBUG(0, ("Failed to allocate memory in VFS module recycle_bin\n")); + return 0; } - - standard_sub_conn(conn,recycle_bin,sizeof(fstring)); + recbin = talloc(ctx,sizeof(recycle_bin_struct)); + if ( recbin == NULL) { + DEBUG(0, ("Failed to allocate memory in VFS module recycle_bin\n")); + return -1; + } + recbin->ctx = ctx; + + /* Set defaults */ + recbin->repository = talloc_strdup(ctx, ".recycle"); + ALLOC_CHECK(recbin->repository, error); + recbin->keep_directories = False; + recbin->versions = False; + recbin->touch = False; + recbin->exclude = ""; + recbin->exclude_dir = ""; + recbin->noversions = ""; + recbin->maxsize = 0; + + /* parse configuration options */ + servicename = talloc_strdup(recbin->ctx, lp_servicename(SNUM(conn))); + DEBUG(10, ("servicename = %s\n",servicename)); + if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "repository")) != NULL) { + recbin->repository = talloc_sub_conn(ctx, conn, tmp_str); + ALLOC_CHECK(recbin->repository, error); + trim_string(recbin->repository, "/", "/"); + DEBUG(5, ("recycle.bin: repository = %s\n", recbin->repository)); + } + if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "mode")) != NULL) { + if (checkparam(tmp_str, "KEEP_DIRECTORIES") == True) + recbin->keep_directories = True; + if (checkparam(tmp_str, "VERSIONS") == True) + recbin->versions = True; + if (checkparam(tmp_str, "TOUCH") == True) + recbin->touch = True; + DEBUG(5, ("recycle.bin: mode = %s\n", tmp_str)); + } + if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "maxsize")) != NULL) { + recbin->maxsize = strtoul(tmp_str, NULL, 10); + if (recbin->maxsize == 0) { + recbin->maxsize = -1; + DEBUG(5, ("recycle.bin: maxsize = -infinite-\n")); + } else { + DEBUG(5, ("recycle.bin: maxsize = %ld\n", (long int)recbin->maxsize)); + } + } + if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "exclude")) != NULL) { + recbin->exclude = talloc_strdup(ctx, tmp_str); + ALLOC_CHECK(recbin->exclude, error); + DEBUG(5, ("recycle.bin: exclude = %s\n", recbin->exclude)); + } + if ((tmp_str = lp_parm_string(servicename,"recycle.bin", "exclude_dir")) != NULL) { + recbin->exclude_dir = talloc_strdup(ctx, tmp_str); + ALLOC_CHECK(recbin->exclude_dir, error); + DEBUG(5, ("recycle.bin: exclude_dir = %s\n", recbin->exclude_dir)); + } + if ((tmp_str = lp_parm_string(servicename,"recycle.bin", "noversions")) != NULL) { + recbin->noversions = talloc_strdup(ctx, tmp_str); + ALLOC_CHECK(recbin->noversions, error); + DEBUG(5, ("recycle.bin: noversions = %s\n", recbin->noversions)); + } - DEBUG(3,("recycle_connect: recycle name is %s\n", recycle_bin )); + conn->vfs_private = (void *)recbin; + return default_vfs_ops.connect(conn, service, user); - recycle_handle->data = (void *)strdup(recycle_bin); - return 0; +error: + talloc_destroy(ctx); + return -1; } static void recycle_disconnect(struct connection_struct *conn) { - SAFE_FREE(recycle_handle->data); + DEBUG(10, ("Disconnecting VFS module recycle bin\n")); + if (conn->vfs_private) { + talloc_destroy(((recycle_bin_struct *)conn->vfs_private)->ctx); + conn->vfs_private = NULL; + } + default_vfs_ops.disconnect(conn); } -static BOOL recycle_XXX_exist(connection_struct *conn, const char *dname, BOOL isdir) +static BOOL recycle_directory_exist(connection_struct *conn, const char *dname) { SMB_STRUCT_STAT st; - if (default_vfs_ops.stat(conn,dname,&st) != 0) - return(False); + if (default_vfs_ops.stat(conn, dname, &st) == 0) { + if (S_ISDIR(st.st_mode)) { + return True; + } + } - if (isdir) - return S_ISDIR(st.st_mode) ? True : False; - else - return S_ISREG(st.st_mode) ? True : False; -} - -static BOOL recycle_directory_exist(connection_struct *conn, const char *dname) -{ - return recycle_XXX_exist(conn, dname, True); + return False; } static BOOL recycle_file_exist(connection_struct *conn, const char *fname) { - return recycle_XXX_exist(conn, fname, False); + SMB_STRUCT_STAT st; + + if (default_vfs_ops.stat(conn, fname, &st) == 0) { + if (S_ISREG(st.st_mode)) { + return True; + } + } + + return False; } +/** + * Return file size + * @param conn connection + * @param fname file name + * @return size in bytes + **/ static SMB_OFF_T recycle_get_file_size(connection_struct *conn, const char *fname) { SMB_STRUCT_STAT st; + if (default_vfs_ops.stat(conn, fname, &st) != 0) { + DEBUG(0,("recycle.bin: stat for %s returned %s\n", fname, strerror(errno))); + return (SMB_OFF_T)0; + } + return(st.st_size); +} - if (default_vfs_ops.stat(conn,fname,&st) != 0) - return (SMB_OFF_T)-1; +/** + * Create directory tree + * @param conn connection + * @param dname Directory tree to be created + * @return Returns True for success + **/ +static BOOL recycle_create_dir(connection_struct *conn, const char *dname) +{ + int len; + mode_t mode; + char *new_dir = NULL; + char *tmp_str = NULL; + char *token; + char *tok_str; + BOOL ret = False; + + mode = S_IREAD | S_IWRITE | S_IEXEC; + + tmp_str = strdup(dname); + ALLOC_CHECK(tmp_str, done); + tok_str = tmp_str; + + len = strlen(dname); + new_dir = (char *)malloc(len + 1); + ALLOC_CHECK(new_dir, done); + *new_dir = '\0'; + + /* Create directory tree if neccessary */ + for(token = strtok(tok_str, "/"); token; token = strtok(NULL, "/")) { + safe_strcat(new_dir, token, len); + if (recycle_directory_exist(conn, new_dir)) + DEBUG(10, ("recycle.bin: dir %s already exists\n", new_dir)); + else { + DEBUG(5, ("recycle.bin: creating new dir %s\n", new_dir)); + if (default_vfs_ops.mkdir(conn, new_dir, mode) != 0) { + DEBUG(1,("recycle.bin: mkdir failed for %s with error: %s\n", new_dir, strerror(errno))); + ret = False; + goto done; + } + } + safe_strcat(new_dir, "/", len); + } - return(st.st_size); + ret = True; +done: + SAFE_FREE(tmp_str); + SAFE_FREE(new_dir); + return ret; } -/******************************************************************** - Check if file should be recycled -*********************************************************************/ +/** + * Check if needle is contained exactly in haystack + * @param haystack list of parameters separated by delimimiter character + * @param needle string to be matched exactly to haystack + * @return True if found + **/ +static BOOL checkparam(char *haystack, char *needle) +{ + char *token; + char *tok_str; + char *tmp_str; + BOOL ret = False; + + if (haystack == NULL || strlen(haystack) == 0 || needle == NULL || strlen(needle) == 0) { + return False; + } + + tmp_str = strdup(haystack); + ALLOC_CHECK(tmp_str, done); + token = tok_str = tmp_str; + + for(token = strtok(tok_str, delimiter); token; token = strtok(NULL, delimiter)) { + if(strcmp(token, needle) == 0) { + ret = True; + goto done; + } + } +done: + SAFE_FREE(tmp_str); + return ret; +} + +/** + * Check if needle is contained in haystack, * and ? patterns are resolved + * @param haystack list of parameters separated by delimimiter character + * @param needle string to be matched exectly to haystack including pattern matching + * @return True if found + **/ +static BOOL matchparam(char *haystack, char *needle) +{ + char *token; + char *tok_str; + char *tmp_str; + BOOL ret = False; + + if (haystack == NULL || strlen(haystack) == 0 || needle == NULL || strlen(needle) == 0) { + return False; + } + + tmp_str = strdup(haystack); + ALLOC_CHECK(tmp_str, done); + token = tok_str = tmp_str; + + for(token = strtok(tok_str, delimiter); token; token = strtok(NULL, delimiter)) { + if (!unix_wild_match(token, needle)) { + ret = True; + goto done; + } + } +done: + SAFE_FREE(tmp_str); + return ret; +} + +/** + * Touch access date + **/ +static void recycle_touch(connection_struct *conn, const char *fname) +{ + SMB_STRUCT_STAT st; + struct utimbuf tb; + time_t currtime; + + if (default_vfs_ops.stat(conn, fname, &st) != 0) { + DEBUG(0,("recycle.bin: stat for %s returned %s\n", fname, strerror(errno))); + return; + } + currtime = time(&currtime); + tb.actime = currtime; + tb.modtime = st.st_mtime; + + if (default_vfs_ops.utime(conn, fname, &tb) == -1 ) + DEBUG(0, ("recycle.bin: touching %s failed, reason = %s\n", fname, strerror(errno))); + } +/** + * Check if file should be recycled + **/ static int recycle_unlink(connection_struct *conn, const char *inname) { - fstring recycle_bin; - pstring fname; - char *base, *ext; - pstring bin; - int i=1, len, addlen; - int dir_mask=0770; - SMB_BIG_UINT dfree,dsize,bsize; + recycle_bin_struct *recbin; + char *file_name = NULL; + char *path_name = NULL; + char *temp_name = NULL; + char *final_name = NULL; + char *base; + int i; + SMB_BIG_UINT dfree, dsize, bsize; + SMB_OFF_T file_size, space_avail; + BOOL exist; + int rc; + + file_name = strdup(inname); + ALLOC_CHECK(file_name, done); + + if (conn->vfs_private) + recbin = (recycle_bin_struct *)conn->vfs_private; + else { + DEBUG(0, ("Recycle bin not initialized!\n")); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; + } - *recycle_bin = '\0'; - pstrcpy(fname, inname); + if(!recbin->repository || *(recbin->repository) == '\0') { + DEBUG(3, ("Recycle path not set, purging %s...\n", file_name)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; + } - if (recycle_handle->data) - fstrcpy(recycle_bin, (const char *)recycle_handle->data); + /* we don't recycle the recycle bin... */ + if (strncmp(file_name, recbin->repository, strlen(recbin->repository)) == 0) { + DEBUG(3, ("File is within recycling bin, unlinking ...\n")); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; + } - if(!*recycle_bin) { - DEBUG(1, ("recycle bin: share parameter not set, purging %s...\n", fname)); - return default_vfs_ops.unlink(conn,fname); + file_size = recycle_get_file_size(conn, file_name); + /* it is wrong to purge filenames only because they are empty imho + * --- simo + * + if(fsize == 0) { + DEBUG(3, ("File %s is empty, purging...\n", file_name)); + rc = default_vfs_ops.unlink(conn,file_name); + goto done; + } + */ + + /* FIXME: this is wrong, we should check the hole size of the recycle bin is + * not greater then maxsize, not the size of the single file, also it is better + * to remove older files + */ + if(recbin->maxsize > 0 && file_size > recbin->maxsize) { + DEBUG(3, ("File %s exceeds maximum recycle size, purging... \n", file_name)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; } - if(recycle_get_file_size(conn, fname) == 0) { - DEBUG(3, ("recycle bin: file %s is empty, purging...\n", fname)); - return default_vfs_ops.unlink(conn,fname); + /* FIXME: this is wrong: moving files with rename does not change the disk space + * allocation + * + space_avail = default_vfs_ops.disk_free(conn, ".", True, &bsize, &dfree, &dsize) * 1024L; + DEBUG(5, ("space_avail = %Lu, file_size = %Lu\n", space_avail, file_size)); + if(space_avail < file_size) { + DEBUG(3, ("Not enough diskspace, purging file %s\n", file_name)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; + } + */ + + /* extract filename and path */ + path_name = (char *)malloc(PATH_MAX); + ALLOC_CHECK(path_name, done); + *path_name = '\0'; + safe_strcpy(path_name, file_name, PATH_MAX); + base = strrchr(path_name, '/'); + if (base == NULL) { + base = file_name; + safe_strcpy(path_name, "/", PATH_MAX); + } + else { + *base = '\0'; + base++; } - base = strrchr(fname, '/'); - pstrcpy(bin, recycle_bin); - pstrcat(bin, "/"); + DEBUG(10, ("recycle.bin: fname = %s\n", file_name)); /* original filename with path */ + DEBUG(10, ("recycle.bin: fpath = %s\n", path_name)); /* original path */ + DEBUG(10, ("recycle.bin: base = %s\n", base)); /* filename without path */ - if(base == NULL) { - ext = strrchr(fname, '.'); - pstrcat(bin, fname); - } else { - ext = strrchr(base, '.'); - pstrcat(bin, base+1); + if (matchparam(recbin->exclude, base)) { + DEBUG(3, ("recycle.bin: file %s is excluded \n", base)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; } - DEBUG(4, ("recycle bin: base %s, ext %s, fname %s, bin %s\n", base, ext, fname, bin)); - if(strcmp(fname,bin) == 0) { - DEBUG(3, ("recycle bin: file %s exists, purging...\n", fname)); - return default_vfs_ops.unlink(conn,fname); + /* FIXME: this check will fail if we have more than one level of directories, + * we shoud check for every level 1, 1/2, 1/2/3, 1/2/3/4 .... + * ---simo + */ + if (checkparam(recbin->exclude_dir, path_name)) { + DEBUG(3, ("recycle.bin: directory %s is excluded \n", path_name)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; } - len = strlen(bin); - if ( ext != NULL) - len = len - strlen(ext); + temp_name = (char *)malloc(PATH_MAX); + ALLOC_CHECK(temp_name, done); + safe_strcpy(temp_name, recbin->repository, PATH_MAX); - addlen = sizeof(pstring)-len-1; - while(recycle_file_exist(conn,bin)) { - slprintf(bin+len, addlen, " (Copy #%d)", i++); - pstrcat(bin, ext); + /* see if we need to recreate the original directory structure in the recycle bin */ + if (recbin->keep_directories == True) { + safe_strcat(temp_name, "/", PATH_MAX); + safe_strcat(temp_name, path_name, PATH_MAX); } - DEBUG(3, ("recycle bin: moving source=%s to dest=%s\n", fname, bin)); - default_vfs_ops.disk_free(conn,".",True,&bsize,&dfree,&dsize); - if((unsigned int)dfree > 0) { - int ret; - if(!recycle_directory_exist(conn,recycle_bin)) { - DEBUG(3, ("recycle bin: directory %s nonexistant, creating...\n", recycle_bin)); - if (default_vfs_ops.mkdir(conn,recycle_bin,dir_mask) == -1) { - DEBUG(0, ("recycle bin: unable to create directory %s. Error was %s\n", - recycle_bin, strerror(errno) )); - } + exist = recycle_directory_exist(conn, temp_name); + if (exist) { + DEBUG(10, ("recycle.bin: Directory already exists\n")); + } else { + DEBUG(10, ("recycle.bin: Creating directory %s\n", temp_name)); + if (recycle_create_dir(conn, temp_name) == False) { + DEBUG(3, ("Could not create directory, purging %s...\n", file_name)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; } - DEBUG(3, ("recycle bin: move %s -> %s\n", fname, bin)); + } - ret = default_vfs_ops.rename(conn, fname, bin); - if (ret == -1) { - DEBUG(1, ("recycle bin: move error %d (%s)\n", errno, strerror(errno) )); - DEBUG(0, ("recycle bin: move failed, purging...\n")); - return default_vfs_ops.unlink(conn,fname); + safe_strcat(temp_name, "/", PATH_MAX); + safe_strcat(temp_name, base, PATH_MAX); + DEBUG(10, ("recycle.bin: recycled file name%s\n", temp_name)); /* new filename with path */ + + /* check if we should delete file from recycle bin */ + if (recycle_file_exist(conn, temp_name)) { + if (recbin->versions == False || matchparam(recbin->noversions, base) == True) { + DEBUG(3, ("recycle.bin: Removing old file %s from recycle bin\n", temp_name)); + if (default_vfs_ops.unlink(conn, temp_name) != 0) { + DEBUG(1, ("recycle.bin: Error deleting old file: %s\n", strerror(errno))); + } } - return ret; - } else { - DEBUG(1, ("recycle bin: move failed, purging...\n")); - return default_vfs_ops.unlink(conn,fname); } + + /* rename file we move to recycle bin */ + i = 1; + final_name = (char *)malloc(PATH_MAX); + ALLOC_CHECK(final_name, done); + final_name = safe_strcpy(final_name, temp_name, PATH_MAX); + while (recycle_file_exist(conn, final_name)) { + snprintf(final_name, PATH_MAX, "Copy #%d of ", i++); + safe_strcat(final_name, temp_name, PATH_MAX); + } + + DEBUG(10, ("recycle.bin: Moving %s to %s\n", file_name, final_name)); + rc = default_vfs_ops.rename(conn, file_name, final_name); + if (rc != 0) { + DEBUG(3, ("recycle.bin: Move error %d (%s), purging file %s (%s)\n", errno, strerror(errno), file_name, final_name)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; + } + + /* touch access date of moved file */ + if (recbin->touch == True ) + recycle_touch(conn, final_name); + +done: + SAFE_FREE(file_name); + SAFE_FREE(path_name); + SAFE_FREE(temp_name); + SAFE_FREE(final_name); + return rc; } -- cgit From 29b4b9a2b5a0347d227b1a30e3f34bf40afa6de4 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sat, 7 Sep 2002 04:08:03 +0000 Subject: configure.in: reflect the new example/VFS/ directory organization lib/substitue.c: added helper functions needed by recycle bin --- source/configure.in | 2 +- source/lib/substitute.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/source/configure.in b/source/configure.in index 32c2fe114b7..b1f1c8aec7e 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2828,7 +2828,7 @@ AC_SUBST(builddir) # I added make files that are outside /source directory. # I know this is not a good solution, will work out a better # solution soon. --simo -AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) +AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) ################################################# # Print very concise instructions on building/use diff --git a/source/lib/substitute.c b/source/lib/substitute.c index 026df0f67f1..767ca0c071a 100644 --- a/source/lib/substitute.c +++ b/source/lib/substitute.c @@ -675,6 +675,19 @@ void standard_sub_conn(connection_struct *conn, char *str, size_t len) conn->gid, current_user_info.smb_name, str, len); } +char *talloc_sub_conn(TALLOC_CTX *mem_ctx, connection_struct *conn, char *str) +{ + return talloc_sub_advanced(mem_ctx, SNUM(conn), conn->user, + conn->connectpath, conn->gid, + current_user_info.smb_name, str); +} + +char *alloc_sub_conn(connection_struct *conn, char *str) +{ + return alloc_sub_advanced(SNUM(conn), conn->user, conn->connectpath, + conn->gid, current_user_info.smb_name, str); +} + /**************************************************************************** Like standard_sub but by snum. ****************************************************************************/ -- cgit From 442eb39657b98f67cd229ed3110b63aae8bf4e3c Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 7 Sep 2002 05:41:23 +0000 Subject: Winbind client-side cleanups. The global winbind file descriptor can cause havoc in some situations - particulary when it becomes 0, 1 or 2. This patch (based on some very nice work by Hannes Schmidt ) starts to recitfy the problem by ensuring that the close-on-exec flag is set, and that we move above 3 in the file descriptor table. I've also decided that the PAM module can close it's pipe handle on every request - this isn't performance-critical code. The next step is to do the same for nss_winbind. (But things like getent() might get in our way there). This also cleans up some function prototypes, puts them in just one place. Andrew Bartlett --- source/include/includes.h | 2 + source/include/smb.h | 2 - source/nsswitch/pam_winbind.c | 21 ++++++----- source/nsswitch/pam_winbind.h | 3 +- source/nsswitch/wb_common.c | 73 ++++++++++++++++++++++++++++++++++-- source/nsswitch/wbinfo.c | 12 ++---- source/nsswitch/winbind_nss.c | 14 +------ source/nsswitch/winbind_nss_config.h | 8 ++++ 8 files changed, 96 insertions(+), 39 deletions(-) diff --git a/source/include/includes.h b/source/include/includes.h index dacac356e3d..eaa0d25239c 100644 --- a/source/include/includes.h +++ b/source/include/includes.h @@ -762,6 +762,8 @@ extern int errno; #include "mangle.h" +#include "nsswitch/winbind_client.h" + /* * Type for wide character dirent structure. * Only d_name is defined by POSIX. diff --git a/source/include/smb.h b/source/include/smb.h index 2ee2f0cb724..a1b3faa3436 100644 --- a/source/include/smb.h +++ b/source/include/smb.h @@ -1623,8 +1623,6 @@ struct unix_error_map { #define SAFE_NETBIOS_CHARS ". -_" -#include "nsswitch/winbindd_nss.h" - /* generic iconv conversion structure */ typedef struct { size_t (*direct)(void *cd, char **inbuf, size_t *inbytesleft, diff --git a/source/nsswitch/pam_winbind.c b/source/nsswitch/pam_winbind.c index 29ceca4e79e..f95caefb4cd 100644 --- a/source/nsswitch/pam_winbind.c +++ b/source/nsswitch/pam_winbind.c @@ -11,11 +11,6 @@ #include "pam_winbind.h" -/* prototypes from common.c */ -void init_request(struct winbindd_request *req,int rq_type); -int write_sock(void *buffer, int count); -int read_reply(struct winbindd_response *response); - /* data tokens */ #define MAX_PASSWD_TRIES 3 @@ -99,24 +94,30 @@ static int _make_remark(pam_handle_t * pamh, int type, const char *text) return retval; } -static int winbind_request(enum winbindd_cmd req_type, - struct winbindd_request *request, - struct winbindd_response *response) +static int pam_winbind_request(enum winbindd_cmd req_type, + struct winbindd_request *request, + struct winbindd_response *response) { + /* Fill in request and send down pipe */ init_request(request, req_type); if (write_sock(request, sizeof(*request)) == -1) { _pam_log(LOG_ERR, "write to socket failed!"); + close_sock(); return PAM_SERVICE_ERR; } /* Wait for reply */ if (read_reply(response) == -1) { _pam_log(LOG_ERR, "read from socket failed!"); + close_sock(); return PAM_SERVICE_ERR; } + /* We are done with the socket - close it and avoid mischeif */ + close_sock(); + /* Copy reply data from socket */ if (response->result != WINBINDD_OK) { if (response->data.auth.pam_error != PAM_SUCCESS) { @@ -148,7 +149,7 @@ static int winbind_auth_request(const char *user, const char *pass, int ctrl) strncpy(request.data.auth.pass, pass, sizeof(request.data.auth.pass)-1); - retval = winbind_request(WINBINDD_PAM_AUTH, &request, &response); + retval = pam_winbind_request(WINBINDD_PAM_AUTH, &request, &response); switch (retval) { case PAM_AUTH_ERR: @@ -217,7 +218,7 @@ static int winbind_chauthtok_request(const char *user, const char *oldpass, request.data.chauthtok.newpass[0] = '\0'; } - return winbind_request(WINBINDD_PAM_CHAUTHTOK, &request, &response); + return pam_winbind_request(WINBINDD_PAM_CHAUTHTOK, &request, &response); } /* diff --git a/source/nsswitch/pam_winbind.h b/source/nsswitch/pam_winbind.h index 9897249e164..fae635d8067 100644 --- a/source/nsswitch/pam_winbind.h +++ b/source/nsswitch/pam_winbind.h @@ -90,5 +90,4 @@ do { \ #define on(x, y) (x & y) #define off(x, y) (!(x & y)) -#include "winbind_nss_config.h" -#include "winbindd_nss.h" +#include "winbind_client.h" diff --git a/source/nsswitch/wb_common.c b/source/nsswitch/wb_common.c index 9bc9faafb50..0d1be4d5d1f 100644 --- a/source/nsswitch/wb_common.c +++ b/source/nsswitch/wb_common.c @@ -5,6 +5,8 @@ Copyright (C) Tim Potter 2000 Copyright (C) Andrew Tridgell 2000 + Copyright (C) Andrew Bartlett 2002 + This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -75,7 +77,7 @@ void init_response(struct winbindd_response *response) /* Close established socket */ -static void close_sock(void) +void close_sock(void) { if (winbindd_fd != -1) { close(winbindd_fd); @@ -83,6 +85,64 @@ static void close_sock(void) } } +/* Make sure socket handle isn't stdin, stdout or stderr */ +#define RECURSION_LIMIT 3 + +static int make_nonstd_fd_internals(int fd, int limit /* Recursion limiter */) +{ + int new_fd; + if (fd >= 0 && fd <= 2) { +#ifdef F_DUPFD + if ((new_fd = fcntl(fd, F_DUPFD, 3)) == -1) { + return -1; + } + /* Parinoia */ + if (new_fd < 3) { + return -1; + } + close(fd); + return new_fd; +#else + if (limit <= 0) + return -1; + + new_fd = dup(fd); + if (new_fd == -1) + return -1; + + /* use the program stack to hold our list of FDs to close */ + new_fd = make_nonstd_fd_internals(new_fd, limit - 1); + close(fd); + return new_fd; +#endif + } + return fd; +} + +static int make_safe_fd(int fd) +{ + int result, flags; + int new_fd = make_nonstd_fd_internals(fd, RECURSION_LIMIT); + if (new_fd == -1) { + close(fd); + return -1; + } + /* Socket should be closed on exec() */ + +#ifdef FD_CLOEXEC + result = flags = fcntl(new_fd, F_GETFD, 0); + if (flags >= 0) { + flags |= FD_CLOEXEC; + result = fcntl( new_fd, F_SETFD, flags ); + } + if (result < 0) { + close(new_fd); + return -1; + } +#endif + return new_fd; +} + /* Connect to winbindd socket */ int winbind_open_pipe_sock(void) @@ -91,6 +151,7 @@ int winbind_open_pipe_sock(void) static pid_t our_pid; struct stat st; pstring path; + int fd; if (our_pid != getpid()) { close_sock(); @@ -144,9 +205,13 @@ int winbind_open_pipe_sock(void) /* Connect to socket */ - if ((winbindd_fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { + if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { return -1; } + + if ((winbindd_fd = make_safe_fd( fd)) == -1) { + return winbindd_fd; + } if (connect(winbindd_fd, (struct sockaddr *)&sunaddr, sizeof(sunaddr)) == -1) { @@ -366,8 +431,8 @@ NSS_STATUS winbindd_get_response(struct winbindd_response *response) /* Handle simple types of requests */ NSS_STATUS winbindd_request(int req_type, - struct winbindd_request *request, - struct winbindd_response *response) + struct winbindd_request *request, + struct winbindd_response *response) { NSS_STATUS status; diff --git a/source/nsswitch/wbinfo.c b/source/nsswitch/wbinfo.c index d7d70b9e52e..a0fdd033d79 100644 --- a/source/nsswitch/wbinfo.c +++ b/source/nsswitch/wbinfo.c @@ -28,11 +28,7 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_WINBIND -/* Prototypes from common.h */ - -NSS_STATUS winbindd_request(int req_type, - struct winbindd_request *request, - struct winbindd_response *response); +extern int winbindd_fd; static char winbind_separator(void) { @@ -608,13 +604,13 @@ static BOOL wbinfo_set_auth_user(char *username) static BOOL wbinfo_ping(void) { NSS_STATUS result; - + result = winbindd_request(WINBINDD_PING, NULL, NULL); /* Display response */ - d_printf("'ping' to winbindd %s\n", - (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed"); + d_printf("'ping' to winbindd %s on fd %d\n", + (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed", winbindd_fd); return result == NSS_STATUS_SUCCESS; } diff --git a/source/nsswitch/winbind_nss.c b/source/nsswitch/winbind_nss.c index 594b5fbadb2..0b4c0ce1d08 100644 --- a/source/nsswitch/winbind_nss.c +++ b/source/nsswitch/winbind_nss.c @@ -21,8 +21,7 @@ Boston, MA 02111-1307, USA. */ -#include "winbind_nss_config.h" -#include "winbindd_nss.h" +#include "winbind_client.h" #ifdef HAVE_NS_API_H #undef VOLATILE @@ -37,17 +36,6 @@ extern int winbindd_fd; -void init_request(struct winbindd_request *req,int rq_type); -NSS_STATUS winbindd_send_request(int req_type, - struct winbindd_request *request); -NSS_STATUS winbindd_get_response(struct winbindd_response *response); -NSS_STATUS winbindd_request(int req_type, - struct winbindd_request *request, - struct winbindd_response *response); -int winbind_open_pipe_sock(void); -int write_sock(void *buffer, int count); -int read_reply(struct winbindd_response *response); -void free_response(struct winbindd_response *response); #ifdef HAVE_NS_API_H /* IRIX version */ diff --git a/source/nsswitch/winbind_nss_config.h b/source/nsswitch/winbind_nss_config.h index 00cd5c12e47..d9a9b8aaaef 100644 --- a/source/nsswitch/winbind_nss_config.h +++ b/source/nsswitch/winbind_nss_config.h @@ -62,6 +62,14 @@ #include #endif +#ifdef HAVE_FCNTL_H +#include +#else +#ifdef HAVE_SYS_FCNTL_H +#include +#endif +#endif + #include #include #include -- cgit From b440418f13b840860be42690bf475c1ee3cb3647 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 7 Sep 2002 06:04:28 +0000 Subject: Don't leak file desciptors in this (impossible?) error case. --- source/nsswitch/wb_common.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/nsswitch/wb_common.c b/source/nsswitch/wb_common.c index 0d1be4d5d1f..88bda4eabe3 100644 --- a/source/nsswitch/wb_common.c +++ b/source/nsswitch/wb_common.c @@ -98,6 +98,7 @@ static int make_nonstd_fd_internals(int fd, int limit /* Recursion limiter */) } /* Parinoia */ if (new_fd < 3) { + close(new_fd); return -1; } close(fd); -- cgit From 3ec3861445e7da1347c3b5ba180b33441f59640c Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 7 Sep 2002 09:25:36 +0000 Subject: This is the 'main' inclue for for winbind clients - all clients should include only this file, and not any others. It includes the function prototypes. (Forgot to commit with earlier patch) Andrew Bartlett --- source/nsswitch/winbind_client.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 source/nsswitch/winbind_client.h diff --git a/source/nsswitch/winbind_client.h b/source/nsswitch/winbind_client.h new file mode 100644 index 00000000000..4de2d57cc7d --- /dev/null +++ b/source/nsswitch/winbind_client.h @@ -0,0 +1,16 @@ +#include "winbind_nss_config.h" +#include "winbindd_nss.h" + +void init_request(struct winbindd_request *req,int rq_type); +NSS_STATUS winbindd_send_request(int req_type, + struct winbindd_request *request); +NSS_STATUS winbindd_get_response(struct winbindd_response *response); +NSS_STATUS winbindd_request(int req_type, + struct winbindd_request *request, + struct winbindd_response *response); +int winbind_open_pipe_sock(void); +int write_sock(void *buffer, int count); +int read_reply(struct winbindd_response *response); +void close_sock(void); +void free_response(struct winbindd_response *response); + -- cgit From 6a53a9cb7c56927423dea125c65d66605fae566f Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Sat, 7 Sep 2002 17:08:59 +0000 Subject: merge of printer change notify fix from APP_HEAD --- source/rpc_server/srv_spoolss_nt.c | 48 +++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index 3a2bde2d05f..795a420a23d 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -170,6 +170,41 @@ static void free_spool_notify_option(SPOOL_NOTIFY_OPTION **pp) SAFE_FREE(*pp); } +/**************************************************************************** + wrapper function to maintain a reference count to the number of + open change notification handles we have +****************************************************************************/ + +static BOOL spooler_message_flags( BOOL doreg ) +{ + static uint32 ref_count = 0; + BOOL result = True; + + /* + * check for boundary counditions .... + * if ref_count == 0 and we want to register OR + * if ref_count == 1 and we want to deregister, THEN + * OK. + */ + + if ( ((ref_count == 0) && doreg) || ((ref_count == 1) && !doreg) ) + result = register_message_flags( doreg, FLAG_MSG_PRINTING ); + + /* increment/decrement reference count */ + + if ( doreg ) + ref_count++; + else { + /* minimum is always 0 */ + if ( ref_count ) + ref_count--; + } + + DEBUG(10,("spooler_message_flags: ref_count == %d\n", ref_count)); + + return result; +} + /*************************************************************************** Disconnect from the client ****************************************************************************/ @@ -198,6 +233,11 @@ static void srv_spoolss_replycloseprinter(POLICY_HND *handle) message_deregister(MSG_PRINTER_NOTIFY2); } + /* Tell the connections db we're not interested in printer notify messages. */ + /* reference count is handled by spooler_message_flags() */ + + spooler_message_flags( False ); + smb_connections--; } @@ -220,9 +260,6 @@ static void free_printer_entry(void *ptr) Printer->notify.option=NULL; Printer->notify.client_connected=False; - /* Tell the connections db we're not interested in printer notify messages. */ - register_message_flags(False, FLAG_MSG_PRINTING); - /* Remove from the internal list. */ DLIST_REMOVE(printers_list, Printer); @@ -2242,8 +2279,6 @@ WERROR _spoolss_rffpcnex(pipes_struct *p, SPOOL_Q_RFFPCNEX *q_u, SPOOL_R_RFFPCNE &Printer->notify.client_hnd)) return WERR_SERVER_UNAVAILABLE; - /* Tell the connections db we're interested in printer notify messages. */ - register_message_flags(True, FLAG_MSG_PRINTING); Printer->notify.client_connected=True; return WERR_OK; @@ -5599,9 +5634,6 @@ WERROR _spoolss_fcpn(pipes_struct *p, SPOOL_Q_FCPN *q_u, SPOOL_R_FCPN *r_u) free_spool_notify_option(&Printer->notify.option); Printer->notify.client_connected=False; - /* Tell the connections db we're not interested in printer notify messages. */ - register_message_flags(False, FLAG_MSG_PRINTING); - return WERR_OK; } -- cgit From 67543ea43d6c76f10f6757ae35a29044ce0020c5 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 7 Sep 2002 19:06:37 +0000 Subject: "disable charset" -> "display charset". oops --- docs/docbook/manpages/smb.conf.5.sgml | 2 +- docs/htmldocs/smb.conf.5.html | 3699 +++++++++++++++++++++++---------- docs/manpages/smb.conf.5 | 224 +- 3 files changed, 2684 insertions(+), 1241 deletions(-) diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index da6e996f171..89ffa0934a3 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -628,7 +628,7 @@ dfree command disable netbios disable spoolss - disable charset + display charset dns proxy domain admin group domain guest group diff --git a/docs/htmldocs/smb.conf.5.html b/docs/htmldocs/smb.conf.5.html index 6f0e88c4d35..5d1cc21da71 100644 --- a/docs/htmldocs/smb.conf.5.html +++ b/docs/htmldocs/smb.conf.5.html @@ -1,10 +1,12 @@ + smb.confsmb.conf

If you decide to use a path =If you decide to use a path = line in your [homes] section then you may find it useful to use the %S macro. For example :

		
 		

An important point is that if guest access is specified in the [homes] section, all home directories will be - visible to all clients without a passwordwithout a password. In the very unlikely event that this is actually desirable, it - would be wise to also specify read only - access.

Note that the browseableNote that the browseable flag for auto home directories will be inherited from the global browseable flag, not the [homes] browseable flag. This is useful as - it means setting browseable = nobrowseable = no in the [homes] section will hide the [homes] share but make any auto home directories visible.

All aliases given for a printer in the printcap file are legitimate printer names as far as the server is concerned. If your printing subsystem doesn't work like that, you will have to set up a pseudo-printcap. This is a file consisting of one or more lines like this:

		
 		

Each alias should be an acceptable printer name for your printing subsystem. In the [global] section, specify @@ -470,24 +461,44 @@ NAME="AEN102" >parameters define the specific attributes of sections.

Some parameters are specific to the [global] section - (e.g., securitysecurity). Some parameters are usable - in all sections (e.g., create modecreate mode). All others are permissible only in normal sections. For the purposes of the following descriptions the [homes] and [printers] - sections will be considered normal. The letter GG in parentheses indicates that a parameter is specific to the - [global] section. The letter SS indicates that a parameter can be specified in a service specific - section. Note that all SS parameters can also be specified in the [global] section - in which case they will define the default behavior for all services.

Note that this paramater is not available when Samba listens +>Note that this parameter is not available when Samba listens on port 445, as clients no longer send this information

the name of your NIS home directory server. This is obtained from your NIS auto.map entry. If you have - not compiled Samba with the --with-automount--with-automount option then this value will be the same as %L.

controls if names that have characters that aren't of the "default" case are mangled. For example, if this is yes then a name like "Mail" would be mangled. - Default nono.

controls whether filenames are case sensitive. If they aren't then Samba must do a filename search and match on passed - names. Default nono.

controls what the default case is for new - filenames. Default lowerlower.

controls if new files are created with the case that the client passes, or if they are forced to be the - "default" case. Default yesyes.

yesyes.

  • add group script

  • add printer commandaddprinter command

  • add user to group script

  • delete group script

  • ads server

  • delete printer commanddeleteprinter command

  • delete user from group script

  • disable netbios

  • display charset

  • dos charset

  • hide unwriteable files

  • hostname lookups

  • name cache timeout

  • ntlm auth

  • paranoid server security

  • realm

  • smb ports

  • unicode

  • unix charset

  • wtmp directory

  • wins partners

  • COMPLETE LIST OF SERVICE PARAMETERS

  • block size

  • mangling method

  • vfs path

  • EXPLANATION OF EACH PARAMETER

    abort shutdown script (G)
  • This parameter only exists in the HEAD cvs branchThis parameter only exists in the HEAD cvs branch This a full path name to a script called by that should stop a shutdown procedure issued by the

    This command will be run as user.

    Default: NoneDefault: None.

    Example: add printer command (G)addprinter command (G)

    With the introduction of MS-RPC based printing @@ -4440,7 +4747,7 @@ CLASS="COMMAND" >The add printer commandaddprinter command is automatically invoked with the following parameter (in @@ -4514,7 +4821,7 @@ CLASS="PARAMETER" >Once the add printer commandaddprinter command has been executed, will return an ACCESS_DENIED error to the client.

    See also delete printer command deleteprinter command, ,

    Default: noneDefault: none

    Example:

    This parameter is only used for add file shares. To add printer shares, see the add printer +>addprinter command

    See also , .

    Default: noneDefault: none

    Example:

    Default: add machine script = <empty string> +>add machine script = <empty string>

    ads server (G)

    If this option is specified, samba does + not try to figure out what ads server to use itself, but + uses the specified ads server. Either one DNS name or IP + address can be used.

    Default: ads server =

    Example: ads server = 192.168.1.2

    add user script (G)

    This is the full pathname to a script that will - be run AS ROOTAS ROOT by smbd to create the required UNIX users - ON DEMANDON DEMAND when a user accesses the Samba server.

    In order to use this option, smbd - must NOTNOT be set to smbd will - call the specified script AS ROOTAS ROOT, expanding any

    See also , ,

    Default: add user script = <empty string> +>add user script = <empty string>

    This is the full pathname to a script that will - be run AS ROOTAS ROOT by smbd(8) when a new group is requested. It will expand any smbd(8) when a new group is requested. It will expand any %g to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. -

    Default: no admin usersDefault: no admin users

    Example: admin users = jason

    add user to group script (G)

    Full path to the script that will be called when + a user is added to a group using the Windows NT domain administration + tools. It will be run by smbd(8) + AS ROOT. Any %g will be + replaced with the group name and any %u will + be replaced with the user name. +

    Default: add user to group script =

    Example: admin users = jasonadd user to group script = /usr/sbin/adduser %u %g

    Synonym for

    This option only takes effect when the

    This is a synonym for the smbd will use when authenticating a user. This option defaults to sensible values based on

    Default: auth methods = <empty string>auth methods = <empty string>

    Example: available = no, then ALL, then ALL attempts to connect to the service will fail. Such failures are logged.

    nmbd to bind to ports 137 and 138 on the interfaces listed in the interfaces parameter. smbd(8) to bind only to the interface list given in the interfaces parameter. This restricts the networks that bind interfaces only is set then - unless the network address 127.0.0.1127.0.0.1 is added to the smbpasswd - by default connects to the localhost - 127.0.0.1localhost - 127.0.0.1 address as an SMB client to issue the password change request. If bind interfaces only is set then unless the - network address 127.0.0.1127.0.0.1 is added to the nmbd at the address - 127.0.0.1127.0.0.1 to determine if they are running. - Not adding 127.0.0.1127.0.0.1 will cause smbd
    block size (S)

    This parameter controls the behavior of + smbd(8) when reporting disk free + sizes. By default, this reports a disk block size of 1024 bytes. +

    Changing this parameter may have some effect on the + efficiency of client writes, this is not yet confirmed. This + parameter was added to allow advanced administrators to change + it (usually to a higher value) and test the effect it has on + client write performance without re-compiling the code. As this + is an experimental option it may be removed in a future release. +

    Changing this option does not change the disk free reporting + size, just the block size unit reported to the client.

    Default: block size = 1024

    Example: block size = 65536

    browsable (S)

    See the

    See the discussion in the section NAME MANGLING.

    Synonym for case sensitive.

    See also , .

    Default: noneDefault: none

    Example:

    If you want to set the string that is displayed next to the machine name then see the parameter.

    Default: No comment stringDefault: No comment string

    Example:

    Default: no valueDefault: no value

    Example:

    A synonym for this parameter is notnot set here will be removed from the modes set on a file when it is created.

    Following this Samba will bit-wise 'OR' the UNIX mode created from this parameter with the value of the

    This parameter does not affect directory modes. See the parameter for details.

    See also the parameter for forcing particular mode bits to be set on created files. See also the parameter for masking mode bits on created directories. See also the Note that this parameter does not apply to permissions set by Windows NT/2000 ACL editors. If the administrator wishes to enforce a mask on access control lists also, they need to set the

    This is a synonym for csc policy (S)

    This stands for This stands for client-side caching - policy, and specifies how clients capable of offline caching will cache the files in the share. The valid values are: manual, documents, programs, disable.

    Note that the parameter

    Note that the parameter

    Samba 2.2 debug log messages are timestamped by default. If you are running at a high

    Note that the parameter

    Synonym for

    A synonym for

    See the section on NAME MANGLING. Also note the

    This parameter is only applicable to printable services. When smbd is serving Printer Drivers to Windows NT/2k/XP clients, each printer on the Samba @@ -6185,8 +6672,12 @@ NAME="DEFAULTSERVICE" >

    This parameter specifies the name of a service which will be connected to if the service actually requested cannot - be found. Note that the square brackets are NOTNOT given in the parameter value (see example below).

    Typically the default service would be a ,

    Example:

    [global]
    @@ -6242,16 +6727,39 @@ CLASS="PROGRAMLISTING"
     [pub]
     	path = /%S
     		

    delete group script (G)

    This is the full pathname to a script that will + be run AS ROOT by smbd(8) when a group is requested to be deleted. It will expand any %g to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. +

    delete printer command (G)
    deleteprinter command (G)

    With the introduction of MS-RPC based printer @@ -6276,7 +6784,7 @@ CLASS="FILENAME" >The delete printer commanddeleteprinter command is automatically called with only one parameter: Once the delete printer commanddeleteprinter command has been executed, will return an ACCESS_DENIED error to the client.

    See also add printer command addprinter command, ,

    Default: noneDefault: none

    Example:

    This parameter is only used to remove file shares. To delete printer shares, see the delete printer +>deleteprinter command

    See also , .

    Default: noneDefault: none

    Example:

    Default: delete user script = <empty string> +>delete user script = <empty string>

    delete user from group script (G)

    Full path to the script that will be called when + a user is removed from a group using the Windows NT domain administration + tools. It will be run by smbd(8) + AS ROOT. Any %g will be + replaced with the group name and any %u will + be replaced with the user name. +

    Default: delete user from group script =

    Example: delete user from group script = /usr/sbin/deluser %u %g

    delete veto files (S)
    This option is used when Samba is attempting to delete a directory that contains one or more vetoed directories (see the

    See also the

    Synonym for

    Note: Your script should NOTNote: Your script should NOT be setuid or setgid and should be owned by (and writeable only by) root!

    Default: Default: By default internal routines for determining the disk capacity and remaining space will be used. -

    Example:

    Where the script dfree (which must be made executable) could be:

     
     		#!/bin/sh
     		df $1 | tail -1 | awk '{print $2" "$4}'
     		

    or perhaps (on Sys V based systems):

     
     		#!/bin/sh
     		/usr/bin/df -k $1 | tail -1 | awk '{print $3" "$5}'
     		

    Note that you may have to replace the command names @@ -6701,7 +7252,7 @@ NAME="DIRECTORY" >

    Synonym for notnot set here will be removed from the modes set on a directory when it is created.

    Following this Samba will bit-wise 'OR' the UNIX mode created from this parameter with the value of the Note that this parameter does not apply to permissions set by Windows NT/2000 ACL editors. If the administrator wishes to enforce a mask on access control lists also, they need to set the .

    See the

    See also the parameter for masking mode bits on created files, and the parameter.

    Also refer to the

    Synonym for

    NoteNote that users who can access the Samba server through other means can easily bypass this restriction, so it is primarily useful for standalone "appliance" systems. @@ -6865,7 +7424,7 @@ CLASS="CONSTANT" >.

    See also the , ,

    disable netbios (G)

    Enabling this parameter will disable netbios support + in Samba. Netbios is the only available form of browsing in + all windows versions except for 2000 and XP.

    Note that clients that only support netbios won't be able to + see your samba server when netbios support is disabled. +

    Default: disable netbios = no

    Example: disable netbios = yes

    disable spoolss (G)

    Enabling this parameter will disables Samba's support +>Enabling this parameter will disable Samba's support for the SPOOLSS set of MS-RPC's and will yield identical behavior as Samba 2.0.x. Windows NT/2000 clients will downgrade to using Lanman style printing commands. Windows 9x/ME will be uneffected by @@ -6918,13 +7502,17 @@ NAME="DISABLESPOOLSS" Wizard or by using the NT printer properties dialog window. It will also disable the capability of Windows NT/2000 clients to download print drivers from the Samba host upon demand. - Be very careful about enabling this parameter.Be very careful about enabling this parameter.

    See also use client driver

    display charset (G)

    Specifies the charset that samba will use + to print messages to stdout and stderr and SWAT will use. + Should generally be the same as the unix charset. +

    Default: display charset = ASCII

    Example: display charset = UTF8

    dns proxy (G)

    See also the parameter

    See also ,

    Default: no domain administratorsDefault: no domain administrators

    Example:

    See also ,

    Default: no domain guestsDefault: no domain guests

    Example: true, the Samba server will serve Windows 95/98 Domain logons for the to claim a special domain specific NetBIOS name that identifies it as a domain master browser for its given

    If domain logons = yes. Experimentation is the best policy :-)

    Default: Default: none (i.e., all directories are OK - to descend)

    Example:

    dos charset (G)

    DOS SMB clients assume the server has + the same charset as they do. This option specifies which + charset Samba should talk to DOS clients. +

    The default depends on which charsets you have instaled. + Samba tries to use charset 850 but falls back to ASCII in + case it is not available. Run testparm(1) + to check the default on your system. +

    dos filemode (S)
    program for information on how to set up and maintain this file), or set the security = [server|domain|ads] parameter which causes

    Default: no enumports commandDefault: no enumports command

    Example:

    This is a synonym for

    It is generally much better to use the real

    This parameter specifies a set of UNIX mode bit - permissions that will alwaysalways be set on a file created by Samba. This is done by bitwise 'OR'ing these bits onto the mode bits of a file that is being created or having its @@ -7653,7 +8308,7 @@ CLASS="PARAMETER" parameter is applied.

    See also the parameter for details on masking mode bits on files.

    See also the

    This parameter specifies a set of UNIX mode bit - permissions that will alwaysalways be set on a directory created by Samba. This is done by bitwise 'OR'ing these bits onto the mode bits of a directory that is being created. The default for this @@ -7712,7 +8371,7 @@ CLASS="PARAMETER" applied.

    See also the parameter

    See also the force directory - security mode (S)force directory security mode (S)

    This parameter controls what UNIX permission bits @@ -7768,8 +8426,12 @@ NAME="FORCEDIRECTORYSECURITYMODE" allows a user to modify all the user/group/world permissions on a directory without restrictions.

    NoteNote that users who can access the Samba server through other means can easily bypass this restriction, so it is primarily useful for standalone "appliance" systems. @@ -7777,7 +8439,7 @@ NAME="FORCEDIRECTORYSECURITYMODE" it set as 0000.

    See also the , ,

    If the .

    See also .

    Default: no forced groupDefault: no forced group

    Example:

    NoteNote that users who can access the Samba server through other means can easily bypass this restriction, so it is primarily useful for standalone "appliance" systems. @@ -7919,7 +8589,7 @@ NAME="FORCESECURITYMODE" this set to 0000.

    See also the , ,

    See also

    Default: no forced userDefault: no forced user

    Example:

    Synonym for

    This is a username which will be used for access to services which are specified as lp(1).

    Default: This paramater does not accept % marcos, becouse + many parts of the system require this value to be + constant for correct operation

    Default: specified at compile time, usually - "nobody"

    Example: for a service, then no password is required to connect to the service. Privileges will be those of the .

    See the section below on for a service, then only guest connections to the service are permitted. This parameter will have no effect if is not set for the service.

    See the section below on

    See also , and .

    Default: no file are hiddenDefault: no file are hidden

    Example: hide unreadable (S)hide unreadable (G)

    This parameter prevents clients from seeing the @@ -8331,13 +9017,30 @@ CLASS="COMMAND" >

    hide unwriteable files (G)

    This parameter prevents clients from seeing + the existance of files that cannot be written to. Defaults to off. + Note that unwriteable directories are shown as usual. +

    Default: hide unwriteable = no

    homedir map (G)

    If

    NOTE :NOTE :A working NIS client is required on the system for this option to work.

    See also ,

    Default: homedir map = <empty string>homedir map = <empty string>

    Example:

    See also the

    hostname lookups (G)

    Specifies whether samba should use (expensive) + hostname lookups or use the ip addresses instead. An example place + where hostname lookups are currently used is when checking + the hosts deny and hosts allow. +

    Default: hostname lookups = yes

    Example: hostname lookups = no

    hosts allow (S)

    Note that the localhost address 127.0.0.1 will always be allowed access unless specifically denied by a

    You can also specify hosts by network/netmask pairs and by netgroup names if your system supports netgroups. The - EXCEPTEXCEPT keyword can also be used to limit a wildcard list. The following examples may provide some help:

    for a way of testing your host access to see if it does what you expect.

    Default: Default: none (i.e., all hosts permitted access) -

    Example: hosts allow - - hosts listed here are NOTNOT permitted access to services unless the specific services have their own lists to override this one. Where the lists conflict, the list takes precedence.

    Default: Default: none (i.e., no hosts specifically excluded) -

    Example:

    This is not be confused with may be useful for NT clients which will not supply passwords to Samba.

    NOTE :NOTE : The use of option be only used if you really know what you are doing, or perhaps on a home network where you trust - your spouse and kids. And only if you reallyreally trust them :-).

    Default: no host equivalencesDefault: no host equivalences

    Example: .

    Default: no file includedDefault: no file included

    Example:

    The permissions on new files and directories are normally governed by , , and New files inherit their read/write bits from the parent directory. Their execute bits continue to be determined by , and as usual.

    Note that the setuid bit is neverNote that the setuid bit is never set via inheritance (the code explicitly prohibits this).

    See also , , and

    See also .

    Default: Default: all active interfaces except 127.0.0.1 - that are broadcast capable

    This is a list of users that should not be allowed - to login to this service. This is really a paranoidparanoid check to absolutely ensure an improper setting does not breach your security.

    +&group+&group means check the UNIX group database, followed by the NIS netgroup database, and @@ -8975,7 +9755,7 @@ CLASS="PARAMETER" This is useful in the [homes] section.

    See also .

    Default: no invalid usersDefault: no invalid users

    Example:

    Keepalives should, in general, not be needed if the socket being used has the SO_KEEPALIVE attribute set on it (see

    For UNIXes that support kernel based has oplocked. This allows complete data consistency between - SMB/CIFS, NFS and local file access (and is a veryvery cool feature :-).

    See also the and

    Default : noneDefault : none

    Default : ldap filter = (&(uid=%u)(objectclass=sambaAccount))ldap filter = (&(uid=%u)(objectclass=sambaAccount))

    This option is used to define whether or not Samba should use SSL when connecting to the ldap server - This is NOTNOT related to Samba's previous SSL support which was enabled by specifying the ldap suffix (G)

    Default : noneDefault : none

    It specifies where users are added to the tree.

    Default : noneDefault : none

    Default : noneDefault : none

    For more discussions on level2 oplocks see the CIFS spec.

    Currently, if yes). Note also, the

    See also the and .

    See also

    If Samba is set to produce Lanman announce broadcasts needed by OS/2 clients (see the

    See also A boolean variable that controls whether all printers in the printcap will be loaded for browsing by default. See the printers section for more details.

    true doesn't - mean that Samba will becomebecome the local master browser on a subnet, just that nmbd will participate will participate in elections for local master browser.

    Setting this value to nmbd - nevernever to become a local master browser.

    Default:

    Synonym for This option specifies the directory where lock files will be placed. The lock files are used to implement the The time in microseconds that smbd should pause before attempting to gain a failed lock. See , real locking will be performed by the server.

    This option mayThis option may be useful for read-only - filesystems which maymay not need locking (such as CDROM drives), although setting this parameter of

    This parameter specifies the local path to which the home directory will be connected (see

    Note that in prior versions of Samba, the Thereafter, the directories and any of the contents can, if required, be made read-only. It is not advisable that the NTuser.dat file be made read-only - rename it to NTuser.man to - achieve the desired effect (a MANMANdatory profile).

    The script must be a relative path to the [netlogon] service. If the [netlogon] service specifies a This option is only useful if Samba is set up as a logon server.

    Default: no logon script definedDefault: no logon script defined

    Example:

    See also the A value of 0 will disable caching completely.

    See also the

    See also the parameter.

    Default: Default: depends on the setting of printing

    Example: This command should be a program or script which takes a printer name and job number to resume the print job. See also the

    See also the

    See also the parameter.

    Default: Default: depends on the setting of printing

    Example 1:

    If a Samba server is a member of a Windows NT Domain (see the security = domain) parameter) then periodically a running , and the security = domain) parameter.

    This parameter specifies the name of a file which will contain output created by a magic script (see the

    Default: magic output = <magic script name>.out +>magic output = <magic script name>.out

    If the script generates output, output will be sent to the file specified by the Note that some shells are unable to interpret scripts containing CR/LF instead of CR as the end-of-line marker. Magic scripts must be executable - as isas is on the host, which for some hosts and some shells will require filtering at the DOS end.

    Magic scripts are EXPERIMENTALMagic scripts are EXPERIMENTAL and - should NOTNOT be relied upon.

    Default: None. Magic scripts disabled.Default: None. Magic scripts disabled.

    Example:

    See the section on NAME MANGLING

    off the ends of filenames on some CDROMs (only visible under some UNIXes). To do this use a map of (*;1 *;).

    Default: no mangled mapDefault: no mangled map

    Example:

    See the section on NAME MANGLING for details on how to control the mangling process.

    Note that the character to use may be specified using the

    mangling method (G)

    controls the algorithm used for the generating + the mangled names. Can take two different values, "hash" and + "hash2". "hash" is the default and is the algorithm that has been + used in Samba for many years. "hash2" is a newer and considered + a better algorithm (generates less collisions) in the names. + However, many Win32 applications store the mangled names and so + changing to the new algorithm must not be done + lightly as these applications may break unless reinstalled. + New installations of Samba may set the default to hash2.

    Default: mangling method = hash

    Example: mangling method = hash2

    mangled stack (G)

    This controls what character is used as - the magicmagic character in name mangling. The default is a '~' but this may interfere with some software. Use this option to set @@ -10842,7 +11737,7 @@ CLASS="PARAMETER" > parameter to be set such that owner execute bit is not masked out (i.e. it must include 100). See the parameter to be set such that the world execute bit is not masked out (i.e. it must include 001). See the parameter to be set such that the group execute bit is not masked out (i.e. it must include 010). See the parameter

    This parameter is only useful in security modes other than - Means user logins with an invalid password are treated as a guest login and mapped into the guest account. Note that this can cause problems as it means that any user incorrectly typing @@ -11003,8 +11898,12 @@ HREF="#GUESTACCOUNT" will not know the reason they cannot access files they think they should - there will have been no message given to them that they got their password wrong. Helpdesk services will - hatehate you if you set the modes other than share. This is because in these modes the name of the resource being - requested is notnot sent to the server until after the server has successfully authenticated the client so the server cannot make authentication decisions at the correct time (connection @@ -11066,7 +11969,7 @@ CLASS="PARAMETER" >

    Record lock files are used to implement this feature. The lock files will be stored in the directory specified by the will remote "Out of Space" to the client. See all LANMAN1: First modern: First modern version of the protocol. Long filename support.

    See also nmbd(8) when acting as a WINS server (

    See also the xedit, then - removes it afterwards. NOTE THAT IT IS VERY IMPORTANT - THAT THIS COMMAND RETURN IMMEDIATELY. That's why I have the '&' on the end. If it doesn't return immediately then your PCs may freeze when sending messages (they should recover @@ -11546,7 +12457,7 @@ CLASS="PARAMETER" >message command = /bin/mail -s 'message from %f on - %m' root < %s; rm %s

    If you don't have a message command then the message @@ -11562,8 +12473,12 @@ CLASS="COMMAND" >message command = rm %s

    Default: no message commandDefault: no message command

    Example:

    Synonym for

    See also , and

    See also the The value of the parameter (a string) is the lowest SMB protocol dialect than Samba will support. Please refer to the

    If you are viewing this parameter as a security measure, you should also refer to the nmbd(8) when acting as a WINS server (.

    See also

    name cache timeout (G)

    Specifies the number of seconds it takes before + entries in samba's hostname resolve cache time out. If + the timeout is set to 0. the caching is disabled. +

    Default: name cache timeout = 660

    Example: name cache timeout = 0

    name resolve order (G)
    wins : Query a name with the IP address listed in the bcast : Do a broadcast on each of the known local interfaces listed in the

    See also .

    Default: empty string (no additional names)Default: empty string (no additional names)

    Example:

    See also .

    Default: machine DNS nameDefault: machine DNS name

    Example:

    Default: non unix account range = <empty string> +>non unix account range = <empty string>

    list and is only really useful in shave level security.

    See also the

    A synonym for

    DO NOT CHANGE THIS PARAMETER UNLESS YOU HAVE READ - AND UNDERSTOOD THE SAMBA OPLOCK CODE.

    Default: oplock contention limit (S)

    This is a veryThis is a very advanced to behave in a similar way to Windows NT.

    DO NOT CHANGE THIS PARAMETER UNLESS YOU HAVE READ - AND UNDERSTOOD THE SAMBA OPLOCK CODE.

    Default:

    Oplocks may be selectively turned off on certain files with a share. See the parameter for details.

    See also the and

    ntlm auth (G)

    This parameter determines whether or not smbd will + attempt to authenticate users using the NTLM password hash. + If disabled, only the lanman password hashes will be used. +

    Please note that at least this option or lanman auth should be enabled in order to be able to log in. +

    Default : ntlm auth = yes

    os level (G)
    in the local broadcast area.

    Note :Note :By default, Samba will win a local master browsing election over all Microsoft operating systems except a Windows NT 4.0/2000 Domain Controller. This @@ -12459,8 +13447,8 @@ NAME="OS2DRIVERMAP" path to a file containing a mapping of Windows NT printer driver names to OS/2 printer driver names. The format is:

    <nt driver name> = <os2 driver - name>.<device name>

    <nt driver name> = <os2 driver + name>.<device name>

    For example, a valid entry using the HP LaserJet 5 printer driver would appear as

    Default: os2 driver map = <empty string> +>os2 driver map = <empty string>

    . It should be possible to enable this without changing your
    paranoid server security (G)

    Some version of NT 4.x allow non-guest + users with a bad passowrd. When this option is enabled, samba will not + use a broken NT 4.x server as password server, but instead complain + to the logs and exit. +

    Default: paranoid server security = yes

    passdb backend (G)

    This paramater is in two parts, the backend's name, and a 'location' +>This parameter is in two parts, the backend's name, and a 'location' string that has meaning only to that particular backed. These are separated by a : character.

    See also - The TDB based password storage backend. Takes a path to the TDB as an optional argument (defaults to passdb.tdb in the - The TDB based password storage backend, with non unix account support. Takes a path to the TDB as an optional argument (defaults to passdb.tdb in the directory.

    See also )

    See also

    nisplussam - The NIS+ based passdb backend. Takes name NIS domain as an optional argument. Only works with sun NIS+ servers.

  • plugin - Allows Samba to load an arbitary passdb backend from the .so specified as a compulsary argument. @@ -12745,8 +13758,12 @@ NAME="PASSWDCHAT" >passwd chat (G)

    This string controls the "chat"This string controls the "chat" conversation that takes places between smbd(8) uses to determine what to send to the

    Note that this parameter only is only used if the yes. This - sequence is then called AS ROOTAS ROOT when the SMB password in the smbpasswd file is being changed, without access to the old password cleartext. This means that root must be able to reset the user's password without knowing the text of the previous password. In the presence of NIS/YP, this means that the passwd program must be executed on the NIS master. @@ -12831,7 +13852,7 @@ CLASS="CONSTANT" if the expect string is a full stop then no string is expected.

    If the

    See also , , and

    This boolean specifies if the passwd chat script - parameter is run in debugdebug mode. In this mode the strings passed to and received from the passwd chat are printed in the smbd(8) log with a and should be turned off after this has been done. This option has no effect if the

    See also , ,

    Also note that many passwd programs insist in Also note that many passwd programs insist in reasonable - passwords, such as a minimum length, or the inclusion of mixed case chars and digits. This can pose a problem as some clients (such as Windows for Workgroups) uppercase the password before sending it.

    NoteNote that if the true then this program is called AS ROOT then this program is called AS ROOT before the SMB password in the unix password sync parameter - is set this parameter MUST USE ABSOLUTE PATHSMUST USE ABSOLUTE PATHS - for ALLALL programs called, and must be examined for security implications. Note that by default .

    See also

    The name of the password server is looked up using the parameter

    NOTE:NOTE: Using a password server means your UNIX box (running Samba) is only as secure as your - password server. DO NOT CHOOSE A PASSWORD SERVER THAT - YOU DON'T COMPLETELY TRUST.

    Never point a Samba server at itself for password @@ -13245,7 +14298,7 @@ CLASS="PARAMETER" Primary or Backup Domain controllers to authenticate against by doing a query for the name WORKGROUP<1C>WORKGROUP<1C> and then contacting each server returned in the list of IP addresses from the name resolution source.

    See also the

    Default: password server = <empty string>password server = <empty string>

    Note that this path will be based on if one was specified.

    Default: noneDefault: none

    Example:

    See also .

    Default: none (no command executed)Default: none (no command executed)

    Example: postexec = echo \"%u disconnected from %S - from %m (%I)\" >> /tmp/log

    Of course, this could get annoying after a while :-)

    See also and .

    Default: none (no command executed)Default: none (no command executed)

    Example: preexec = echo \"%u connected to %S from %m - (%I)\" >> /tmp/log

    This boolean option controls whether a non-zero return code from

    See also

    Synonym for

    Note that if you just want all printers in your printcap file loaded then the option is easier.

    Default: no preloaded servicesDefault: no preloaded services

    Example: This controls if new filenames are created with the case that the client passes, or if they are forced to be the

    See the section on NAME MANGLING for a fuller discussion.

    %z - the size of the spooled print job (in bytes)

    The print command MUSTThe print command MUST contain at least one occurrence of nobody account. If this happens then create an alternative guest account that can print and set the

    print command = echo Printing %s >> +>print command = echo Printing %s >> /tmp/print.log; lpr -P %p %s; rm %s

    You may have to vary this command considerably depending on how you normally print files on your system. The default for the parameter varies depending on the setting of the

    For printing = CUPS : If SAMBA is compiled against libcups, then printcap = cups uses the CUPS API to @@ -13893,7 +14966,7 @@ NAME="PRINTOK" >

    Synonym for Note that a printable service will ALWAYS allow writing to the service path (user privileges permitting) via the spooling of print data. The

    Synonym for /etc/printcap). See the discussion of the [printers] section above for reasons why you might want to do this.

    . This should be supplemented by an addtional setting printing = cups in the [global] section.

    A minimal printcap file would look something like this:

    		print1|My Printer 1
    @@ -14027,17 +15094,18 @@ CLASS="PROGRAMLISTING"
     		print4|My Printer 4
     		print5|My Printer 5
     		

    where the '|' separates aliases of a printer. The fact that the second alias has a space in it gives a hint to Samba that it's a comment.

    NOTENOTE: Under AIX the default printcap name is

    Default: printer admin = <empty string>printer admin = <empty string>

    printer driver (S)

    Note :Note :This is a deprecated parameter and will be removed in the next major release following version 2.2. Please see the instructions in @@ -14116,7 +15188,7 @@ TARGET="_top" sensitive) that describes the appropriate printer driver for your system. If you don't know the exact string to use then you should first try with no

    See also printer driver file (G)

    Note :Note :This is a deprecated parameter and will be removed in the next major release following version 2.2. Please see the instructions in @@ -14195,7 +15271,7 @@ CLASS="FILENAME" >.

    See also .

    Default: None (set in compile).Default: None (set in compile).

    Example: printer driver location (S)

    Note :Note :This is a deprecated parameter and will be removed in the next major release following version 2.2. Please see the instructions in @@ -14257,7 +15341,7 @@ CLASS="FILENAME" >.

    See also

    Default: Default: none (but may be lp - on many systems)

    Example:

    Synonym for This option can be set on a per printer basis

    See also the discussion in the [printers] section.

    Synonym for

    Synonym for

    Default: Default: depends on the setting of printing

    Example:

    Default: Default: depends on the setting of printing

    This is a list of users that are given read-only access to a service. If the connecting user is in this list then they will not be given write access, no matter what the option is set to. The list can include group names using the syntax described in the parameter.

    See also the parameter and the

    Default: read list = <empty string>read list = <empty string>

    Example:

    Note that this is an inverted synonym for

    In general this parameter should be viewed as a system tuning tool and left severely alone. See also

    realm (G)

    This option specifies the kerberos realm to use. The realm is + used as the ADS equivalent of the NT4domain. It + is usually set to the DNS name of the kerberos server. +

    Default: realm =

    Example: realm = mysambabox.mycompany.com

    remote announce (G)

    Default: remote announce = <empty string> +>remote announce = <empty string>

    Default: remote browse sync = <empty string> +>remote browse sync = <empty string>

    Synonym for

    Synonym for root directory - option, includingincluding some files needed for complete operation of the server. To maintain full operability of the server you will need to mirror some system files @@ -15027,7 +16152,7 @@ CLASS="PARAMETER" (such as CDROMs) after a connection is closed.

    See also

    Default: root postexec = <empty string> +>root postexec = <empty string>

    See also and

    Default: root preexec = <empty string> +>root preexec = <empty string>

    parameter except that the command is run as root.

    See also and security = user, see the It is possible to use smbd in a hybrid mode in a hybrid mode where it is offers both user and share level security under different SECURITY = SHARE -

    When clients connect to a share level security server they @@ -15252,8 +16385,12 @@ CLASS="COMMAND" >Note that smbd ALWAYS ALWAYS uses a valid UNIX user to act on behalf of the client, even in

  • If the parameter is set, then all the other stages are missed and only the

    Is a username is sent with the share connection request, then this username (after mapping - see

  • If the client did a previous If the client did a previous logon - request (the SessionSetup SMB call) then the username sent in this SMB will be added as a potential username.

  • Any users on the , then this guest user will be used, otherwise access is denied.

    Note that it can be veryNote that it can be very confusing in share-level security as to which UNIX username will eventually be used in granting access.

    See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION.

    SECURITY = USER -

    This is the default security setting in Samba 2.2. With user-level security a client must first "log-on" with a valid username and password (which can be mapped using the parameter). Encrypted passwords (see the parameter) can also be used in this security mode. Parameters such as and

    NoteNote that the name of the resource being - requested is notnot sent to the server until after the server has successfully authenticated the client. This is why guest shares don't work in user level security without allowing the server to automatically map unknown users into the . See the parameter for details on doing this.

    See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION.

    SECURITY = SERVER -

    In this mode Samba will try to validate the username/password @@ -15492,8 +16653,12 @@ CLASS="FILENAME" > for details on how to set this up.

    NoteNote that from the client's point of view

    NoteNote that the name of the resource being - requested is notnot sent to the server until after the server has successfully authenticated the client. This is why guest shares don't work in user level security without allowing the server to automatically map unknown users into the . See the parameter for details on doing this.

    See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION.

    See also the parameter and the SECURITY = DOMAIN -

    This mode will only work correctly if smbpasswd(8) has been used to add this machine into a Windows NT Domain. It expects the

    NoteNote that a valid UNIX user must still exist as well as the account on the Domain Controller to allow Samba to have a valid UNIX account to map file access to.

    NoteNote that from the client's point of view . It only affects how the server deals with the authentication, it does not in any way affect what the client sees.

    NoteNote that the name of the resource being - requested is notnot sent to the server until after the server has successfully authenticated the client. This is why guest shares don't work in user level security without allowing the server to automatically map unknown users into the . See the parameter for details on doing this.

    BUG:BUG: There is currently a bug in the implementation of

    See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION.

    See also the parameter and the

    NoteNote that users who can access the Samba server through other means can easily bypass this restriction, so it is primarily useful for standalone @@ -15717,7 +16918,7 @@ CLASS="CONSTANT" >.

    See also the , , This option gives full share compatibility and enabled by default.

    You should NEVERYou should NEVER turn this parameter off as many Windows applications will break if you do so.

    . This option can be use with preserve case = yes

    See the section on NAME MANGLING.

    parameter will always cause the OpenPrinterEx() on the server - to fail. Thus the APW icon will never be displayed. Note : Note :This does not prevent the same user from having administrative privilege on an individual printer.

    See also , , shutdown script (G)

    This parameter only exists in the HEAD cvs branchThis parameter only exists in the HEAD cvs branch This a full path name to a script called by %r will be substituted with the - switch -r-r. It means reboot after shutdown for NT.

    %f will be substituted with the - switch -f-f. It means force the shutdown even if applications do not respond for NT.

    Default: NoneDefault: None.

    Example:

    Shutdown script example: -
    		#!/bin/bash
     		
    @@ -16086,15 +17305,12 @@ CLASS="PROGRAMLISTING"
     
     		/sbin/shutdown $3 $4 +$time $1 &
     		
    Shutdown does not return so we need to launch it in background.

    See also

    smb ports (G)

    Specifies which ports the server should listen on + for SMB traffic. +

    Default: smb ports = 445 139

    socket address (G)
  • Those marked with a '*'Those marked with a '*' take an integer argument. The others can optionally take a 1 or 0 argument to enable or disable the option, by default they will be enabled if you @@ -16305,8 +17541,12 @@ CLASS="COMMAND" >SAMBA_NETBIOS_NAME = myhostname

    Default: No default valueDefault: No default value

    Examples:

    This variable controls controls whether samba will try to use Simple and Protected NEGOciation (as specified by rfc2478) with WindowsXP and Windows2000sp2 clients to agree upon an authentication mechanism. As of samba 3.0alpha it must be set to "no" for these clients to join a samba domain controller. It can be set to "yes" to allow samba to participate in an AD domain controlled by a Windows2000 domain controller.

    Default: use spnego = yesDefault: use spnego = yes

    See also the

    See also the

    Synonym for

    unicode (G)

    Specifies whether Samba should try + to use unicode on the wire by default. +

    Default: unicode = yes

    unix charset (G)

    Specifies the charset the unix machine + Samba runs on uses. Samba needs to know this in order to be able to + convert text to the charsets other SMB clients use. +

    Default: unix charset = ASCII

    unix extensions(G)
    passwd programparameter is called AS ROOTparameter is called AS ROOT - to allow the new UNIX password to be set without access to the old UNIX password (as the SMB password change code has no access to the old password cleartext, only the new).

    See also , .

    In order for this parameter to work correctly the If this parameter is enabled for a printer, then any attempt to open the printer with the PRINTER_ACCESS_ADMINISTER right is mapped to PRINTER_ACCESS_USE instead. Thus allowing the OpenPrinterEx() - call to succeed. This parameter MUST not be able enabled on a print share which has valid print driver installed on the Samba - server.

    See also disable spoolss

    NOTE:NOTE: The use of

    Synonym for

    Synonym for

    To restrict a service to a particular set of users you can use the

    See the section NOTE ABOUT USERNAME/PASSWORD VALIDATION for more information on how @@ -17149,7 +18438,7 @@ HREF="#AEN236" >Default: The guest account if a guest service, - else <empty string>.

    Examples:

    		!sys = mary fred
     		guest = *
     		

    Note that the remapping is applied to all occurrences @@ -17320,7 +18600,7 @@ CLASS="CONSTANT" >fred. The only exception to this is the username passed to the

    Default: no username mapDefault: no username map

    Example:

    See also the . It specifies a directory pathname that is used to store the utmp or utmpx files (depending on the UNIX system) that record user connections to a Samba server. See also the /var/run/utmp on Linux).

    Default: no utmp directoryDefault: no utmp directory

    Example: utmp directory = /var/run/utmp

    wtmp directory(G)

    This parameter is only available if Samba has + been configured and compiled with the option --with-utmp. It specifies a directory pathname that is + used to store the wtmp or wtmpx files (depending on the UNIX system) that + record user connections to a Samba server. The difference with + the utmp directory is the fact that user info is kept after a user + has logged out. + + See also the utmp parameter. By default this is + not set, meaning the system will use whatever utmp file the + native system is set to use (usually + /var/run/wtmp on Linux).

    Default: no wtmp directory

    Example: wtmp directory = /var/log/wtmp

    . This is useful in the [homes] section.

    See also

    Default: Default: No valid users list (anyone can login) -

    Example:

    Each entry must be a unix path, not a DOS path and - must notnot include the unix directory separator '/'.

    failfail unless you also set the

    See also and .

    Default: Default: No files or directories are vetoed. -

    Examples:
    Examples:
    ; Veto any files containing the word Security, 
     ; any ending in .tmp, and any directory containing the
    @@ -17565,9 +18914,6 @@ veto files = /*Security*/*.tmp/*root*/
     ; Veto the Apple specific files that a NetAtalk server
     ; creates.
     veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/

    This parameter is only valid when the parameter.

    Default: Default: No files are vetoed for oplock - grants

    You might want to do this on files that you know will @@ -17624,6 +18974,31 @@ CLASS="COMMAND" >

    vfs path (S)

    This parameter specifies the directory + to look in for vfs modules. The name of every vfs object + will be prepended by this directory +

    Default: vfs path =

    Example: vfs path = /usr/lib/samba/vfs

    vfs object (S)

    Default : no valueDefault : no value

    .

    Default : no valueDefault : no value

    Default: the name of the shareDefault: the name of the share

    system call will not return any data.

    Warning:Warning: Turning off user enumeration may cause some programs to behave oddly. For example, the finger program relies on having access to the @@ -17810,8 +19201,12 @@ CLASS="COMMAND" > system call will not return any data.

    Warning:Warning: Turning off group enumeration may cause some programs to behave oddly.

    Default: winbind gid = <empty string> +>winbind gid = <empty string>

    Default: winbind uid = <empty string> +>winbind uid = <empty string>

    Default: winbind use default domain = <falseg> +>winbind use default domain = <falseg>

    You should point this at your WINS server if you have a multi-subnetted network.

    NOTENOTE. You need to set up Samba to point to a WINS server if you have multiple subnets and wish cross-subnet browsing to work correctly.

    in the docs/ directory of your Samba source distribution.

    Default: not enabledDefault: not enabled

    Example: nmbd to be your WINS server. - Note that you should NEVERNEVER set this to trueThis controls what workgroup your server will appear to be in when queried by clients. Note that this parameter also controls the Domain name used with the security = domain setting.

    Default: set at compile time to WORKGROUPDefault: set at compile time to WORKGROUP

    Example:

    Synonym for

    If this integer parameter is set to non-zero value, Samba will create an in-memory cache for each oplocked file - (it does notnot do this for non-oplocked files). All writes that the client does not request to be flushed directly to disk will be stored in this cache if possible. @@ -18203,7 +19618,7 @@ NAME="WRITELIST" >This is a list of users that are given read-write access to a service. If the connecting user is in this list then they will be given write access, no matter what the

    See also the

    Default: write list = <empty string> +>write list = <empty string>

    wins partners (G)

    A space separated list of partners' IP addresses for + WINS replication. WINS partners are always defined as push/pull + partners as defining only one way WINS replication is unreliable. + WINS replication is currently experimental and unreliable between + samba servers. +

    Default: wins partners =

    Example: wins partners = 192.168.0.1 172.16.1.2

    write ok (S)

    Synonym for

    An inverted synonym is printable = yes) - will ALWAYSALWAYS allow writing to the directory (user privileges permitting), but only via spooling operations.

    WARNINGS

    VERSION

    SEE ALSO

    AUTHOR

    .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . -.TH "SMB.CONF" "5" "22 augustus 2002" "" "" +.TH "SMB.CONF" "5" "07 September 2002" "" "" .SH NAME smb.conf \- The configuration file for the Samba suite .SH "SYNOPSIS" @@ -13,7 +13,7 @@ file for the Samba suite. \fIsmb.conf\fR contains runtime configuration information for the Samba programs. The \fIsmb.conf\fR file is designed to be configured and administered by the \fBswat(8)\fR -program. The complete description of the file format and + program. The complete description of the file format and possible parameters held within are here for reference purposes. .SH "FILE FORMAT" .PP @@ -376,7 +376,7 @@ machine. Only some are recognized, and those may not be WinNT and Win2k. Anything else will be known as "UNKNOWN". If it gets it wrong then sending a level 3 log to samba@samba.org -should allow it to be fixed. + should allow it to be fixed. .TP \fB%I\fR The IP address of the client machine. @@ -598,7 +598,7 @@ each parameter for details. Note that some are synonyms. \fIdisable spoolss\fR .TP 0.2i \(bu -\fIdisable charset\fR +\fIdisplay charset\fR .TP 0.2i \(bu \fIdns proxy\fR @@ -1433,7 +1433,7 @@ each parameter for details. Note that some are synonyms. \fBabort shutdown script (G)\fR \fBThis parameter only exists in the HEAD cvs branch\fR This a full path name to a script called by -\fBsmbd(8)\fRthat +\fBsmbd(8)\fR that should stop a shutdown procedure issued by the \fIshutdown script\fR. This command will be run as user. @@ -1457,7 +1457,7 @@ will perform the necessary operations for adding the printer to the print system and to add the appropriate service definition to the \fIsmb.conf\fR file in order that it can be shared by \fBsmbd(8)\fR -. + The \fIaddprinter command\fR is automatically invoked with the following parameter (in @@ -1548,7 +1548,7 @@ Example: \fBadd share command = /usr/local/bin/addshare\fR .TP \fBadd machine script (G)\fR This is the full pathname to a script that will -be run by smbd(8)when a machine is added +be run by smbd(8) when a machine is added to it's domain using the administrator username and password method. This option is only required when using sam back-ends tied to the @@ -1574,16 +1574,16 @@ Example: \fBads server = 192.168.1.2\fR \fBadd user script (G)\fR This is the full pathname to a script that will be run \fBAS ROOT\fR by smbd(8) -under special circumstances described below. + under special circumstances described below. Normally, a Samba server requires that UNIX users are created for all users accessing files on this server. For sites that use Windows NT account databases as their primary user database creating these users and keeping the user list in sync with the -Windows NT PDC is an onerous task. This option allows smbdto create the required UNIX users +Windows NT PDC is an onerous task. This option allows smbd to create the required UNIX users \fBON DEMAND\fR when a user accesses the Samba server. -In order to use this option, smbd +In order to use this option, smbd must \fBNOT\fR be set to \fIsecurity = share\fR and \fIadd user script\fR must be set to a full pathname for a script that will create a UNIX @@ -1591,7 +1591,7 @@ user given one argument of \fI%u\fR, which expands into the UNIX user name to create. When the Windows user attempts to access the Samba server, -at login (session setup in the SMB protocol) time, smbdcontacts the \fIpassword server\fR and +at login (session setup in the SMB protocol) time, smbd contacts the \fIpassword server\fR and attempts to authenticate the given user with the given password. If the authentication succeeds then \fBsmbd\fR attempts to find a UNIX user in the UNIX password database to map the @@ -1617,7 +1617,7 @@ Example: \fBadd user script = /usr/local/samba/bin/add_user .TP \fBadd group script (G)\fR This is the full pathname to a script that will -be run \fBAS ROOT\fR by smbd(8)when a new group is requested. It will expand any \fI%g\fR to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. +be run \fBAS ROOT\fR by smbd(8) when a new group is requested. It will expand any \fI%g\fR to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. .TP \fBadmin users (S)\fR This is a list of users who will be granted @@ -1635,7 +1635,7 @@ Example: \fBadmin users = jason\fR \fBadd user to group script (G)\fR Full path to the script that will be called when a user is added to a group using the Windows NT domain administration -tools. It will be run by smbd(8) +tools. It will be run by smbd(8) \fBAS ROOT\fR. Any \fI%g\fR will be replaced with the group name and any \fI%u\fR will be replaced with the user name. @@ -1670,7 +1670,7 @@ Example: \fBalgorithmic rid base = 100000\fR This option only takes effect when the \fIsecurity\fR option is set to server or domain. If it is set to no, then attempts to connect to a resource from -a domain or workgroup other than the one which smbdis running +a domain or workgroup other than the one which smbd is running in will fail, even if that domain is trusted by the remote server doing the authentication. @@ -1687,7 +1687,7 @@ Default: \fBallow trusted domains = yes\fR .TP \fBannounce as (G)\fR This specifies what type of server -\fBnmbd\fR +\fBnmbd\fR will announce itself as, to a network neighborhood browse list. By default this is set to Windows NT. The valid options are : "NT Server" (which can also be written as "NT"), @@ -1738,8 +1738,8 @@ Default: \fBavailable = yes\fR \fBbind interfaces only (G)\fR This global parameter allows the Samba admin to limit what interfaces on a machine will serve SMB requests. If -affects file service smbd(8)and -name service nmbd(8)in slightly +affects file service smbd(8) and +name service nmbd(8) in slightly different ways. For name service it causes \fBnmbd\fR to bind @@ -1768,8 +1768,8 @@ interfaces as it will not cope with non-permanent interfaces. If \fIbind interfaces only\fR is set then unless the network address \fB127.0.0.1\fR is added -to the \fIinterfaces\fR parameter list \fBsmbpasswd(8)\fR -and \fBswat(8)\fRmay +to the \fIinterfaces\fR parameter list \fBsmbpasswd(8)\fR +and \fBswat(8)\fR may not work as expected due to the reasons covered below. To change a users SMB password, the \fBsmbpasswd\fR @@ -1780,7 +1780,7 @@ network address \fB127.0.0.1\fR is added to the \fIinterfaces\fR parameter list then \fB smbpasswd\fR will fail to connect in it's default mode. \fBsmbpasswd\fR can be forced to use the primary IP interface of the local host by using its \fI-r remote machine\fR -parameter, with \fIremote machine\fR set + parameter, with \fIremote machine\fR set to the IP name of the primary interface of the local host. The \fBswat\fR status page tries to connect with @@ -1793,7 +1793,7 @@ and \fBnmbd\fR. Default: \fBbind interfaces only = no\fR .TP \fBblocking locks (S)\fR -This parameter controls the behavior of smbd(8)when given a request by a client +This parameter controls the behavior of smbd(8) when given a request by a client to obtain a byte range lock on a region of an open file, and the request has a time limit associated with it. @@ -1811,7 +1811,7 @@ Default: \fBblocking locks = yes\fR .TP \fBblock size (S)\fR This parameter controls the behavior of -smbd(8)when reporting disk free +smbd(8) when reporting disk free sizes. By default, this reports a disk block size of 1024 bytes. Changing this parameter may have some effect on the @@ -1832,7 +1832,7 @@ Example: \fBblock size = 65536\fR See the \fI browseable\fR. .TP \fBbrowse list (G)\fR -This controls whether \fBsmbd(8)\fRwill serve a browse list to +This controls whether \fBsmbd(8)\fR will serve a browse list to a client doing a \fBNetServerEnum\fR call. Normally set to true. You should never need to change this. @@ -1858,7 +1858,7 @@ sensitive. This SMB allows a client to tell a server to "watch" a particular directory for any changes and only reply to the SMB request when a change has occurred. Such constant scanning of -a directory is expensive under UNIX, hence an \fBsmbd(8)\fRdaemon only performs such a scan +a directory is expensive under UNIX, hence an \fBsmbd(8)\fR daemon only performs such a scan on each requested directory once every \fIchange notify timeout\fR seconds. @@ -2051,7 +2051,7 @@ Default: \fBdebug hires timestamp = no\fR .TP \fBdebug pid (G)\fR When using only one log file for more then one -forked smbd-process there may be hard to follow which process +forked smbdprocess there may be hard to follow which process outputs which message. This boolean parameter is adds the process-id to the timestamp message headers in the logfile when turned on. @@ -2114,7 +2114,7 @@ do this all the time, setting \fBdefault devmode = yes\fR will instruct smbd to generate a default one. For more information on Windows NT/2k printing and Device Modes, -see the MSDN documentation. +see the MSDN documentation . Default: \fBdefault devmode = no\fR .TP @@ -2153,7 +2153,7 @@ Example: .TP \fBdelete group script (G)\fR This is the full pathname to a script that will -be run \fBAS ROOT\fR by smbd(8)when a group is requested to be deleted. It will expand any \fI%g\fR to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. +be run \fBAS ROOT\fR by smbd(8) when a group is requested to be deleted. It will expand any \fI%g\fR to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. .TP \fBdeleteprinter command (G)\fR With the introduction of MS-RPC based printer @@ -2248,7 +2248,7 @@ Example: \fBdelete user script = /usr/local/samba/bin/del_user \fBdelete user from group script (G)\fR Full path to the script that will be called when a user is removed from a group using the Windows NT domain administration -tools. It will be run by smbd(8) +tools. It will be run by smbd(8) \fBAS ROOT\fR. Any \fI%g\fR will be replaced with the group name and any \fI%u\fR will be replaced with the user name. @@ -2455,7 +2455,7 @@ Default: \fBdisplay charset = ASCII\fR Example: \fBdisplay charset = UTF8\fR .TP \fBdns proxy (G)\fR -Specifies that nmbd(8) +Specifies that nmbd(8) when acting as a WINS server and finding that a NetBIOS name has not been registered, should treat the NetBIOS name word-for-word as a DNS name and do a lookup with the DNS server for that name on behalf of @@ -2518,13 +2518,13 @@ directory shipped with the source code. Default: \fBdomain logons = no\fR .TP \fBdomain master (G)\fR -Tell \fB nmbd(8)\fRto enable WAN-wide browse list +Tell \fB nmbd(8)\fR to enable WAN-wide browse list collation. Setting this option causes \fBnmbd\fR to claim a special domain specific NetBIOS name that identifies it as a domain master browser for its given \fIworkgroup\fR. Local master browsers in the same \fIworkgroup\fR on broadcast-isolated subnets will give this \fBnmbd\fR their local browse lists, -and then ask \fBsmbd(8)\fR +and then ask \fBsmbd(8)\fR for a complete copy of the browse list for the whole wide area network. Browser clients will then contact their local master browser, and will receive the domain-wide browse list, instead of just the list @@ -2572,7 +2572,7 @@ charset Samba should talk to DOS clients. The default depends on which charsets you have instaled. Samba tries to use charset 850 but falls back to ASCII in case it is not available. Run testparm(1) -to check the default on your system. + to check the default on your system. .TP \fBdos filemode (S)\fR The default behavior in Samba is to provide @@ -2594,7 +2594,7 @@ granularity on time resolution is two seconds. Setting this parameter for a share causes Samba to round the reported time down to the nearest two second boundary when a query call that requires one second resolution is made to \fBsmbd(8)\fR -. + This option is mainly used as a compatibility option for Visual C++ when used against Samba shares. If oplocks are enabled on a @@ -2615,7 +2615,7 @@ file they can change the timestamp on it. Under POSIX semantics, only the owner of the file or root may change the timestamp. By default, Samba runs with POSIX semantics and refuses to change the timestamp on a file if the user \fBsmbd\fR is acting -on behalf of is not the file owner. Setting this option to true allows DOS semantics and smbdwill change the file +on behalf of is not the file owner. Setting this option to true allows DOS semantics and smbd will change the file timestamp as DOS requires. Default: \fBdos filetimes = no\fR @@ -2629,9 +2629,9 @@ Samba see the file ENCRYPTION.txt in the Samba documentation directory \fIdocs/\fR shipped with the source code. In order for encrypted passwords to work correctly -\fBsmbd(8)\fRmust either +\fBsmbd(8)\fR must either have access to a local \fIsmbpasswd(5) -\fRprogram for information on how to set up +\fR program for information on how to set up and maintain this file), or set the security = [server|domain|ads] parameter which causes \fBsmbd\fR to authenticate against another server. @@ -2720,7 +2720,7 @@ that it is the only one accessing the file and it will aggressively cache file data. With some oplock types the client may even cache file open/close operations. This can give enormous performance benefits. -When you set \fBfake oplocks = yes\fR, \fBsmbd(8)\fRwill +When you set \fBfake oplocks = yes\fR, \fBsmbd(8)\fR will always grant oplock requests no matter how many clients are using the file. @@ -2739,7 +2739,7 @@ Default: \fBfake oplocks = no\fR .TP \fBfollow symlinks (S)\fR This parameter allows the Samba administrator -to stop \fBsmbd(8)\fR +to stop \fBsmbd(8)\fR from following symbolic links in a particular share. Setting this parameter to no prevents any file or directory that is a symbolic link from being followed (the user will get an @@ -2921,7 +2921,7 @@ Example: \fBforce user = auser\fR This parameter allows the administrator to configure the string that specifies the type of filesystem a share is using that is reported by \fBsmbd(8) -\fRwhen a client queries the filesystem type +\fR when a client queries the filesystem type for a share. The default type is NTFS for compatibility with Windows NT but this can be changed to other strings such as Samba or FAT @@ -3022,7 +3022,7 @@ Example: \fBhide files = The above example is based on files that the Macintosh SMB client (DAVE) available from -Thursbycreates for internal use, and also still hides +Thursby creates for internal use, and also still hides all files beginning with a dot. .TP \fBhide local users(G)\fR @@ -3046,7 +3046,7 @@ Default: \fBhide unwriteable = no\fR .TP \fBhomedir map (G)\fR If\fInis homedir -\fR is true, and \fBsmbd(8)\fRis also acting +\fR is true, and \fBsmbd(8)\fR is also acting as a Win95/98 \fIlogon server\fR then this parameter specifies the NIS (or YP) map from which the server for the user's home directory should be extracted. At present, only the Sun @@ -3078,7 +3078,7 @@ to browse Dfs trees hosted on the server. See also the \fI msdfs root\fR share level parameter. For more information on setting up a Dfs tree on Samba, -refer to msdfs_setup.html. +refer to msdfs_setup.html Default: \fBhost msdfs = no\fR .TP @@ -3141,7 +3141,7 @@ deny access from one particular host Note that access still requires suitable user-level passwords. See \fBtestparm(1)\fR -for a way of testing your host access to see if it does + for a way of testing your host access to see if it does what you expect. Default: \fBnone (i.e., all hosts permitted access) @@ -3345,7 +3345,7 @@ allows the use of them to be turned on or off. Kernel oplocks support allows Samba \fIoplocks \fR to be broken whenever a local UNIX process or NFS operation accesses a file that \fBsmbd(8)\fR -has oplocked. This allows complete data consistency between + has oplocked. This allows complete data consistency between SMB/CIFS, NFS and local file access (and is a \fBvery\fR cool feature :-). @@ -3360,7 +3360,7 @@ and \fIlevel2 oplocks Default: \fBkernel oplocks = yes\fR .TP \fBlanman auth (G)\fR -This parameter determines whether or not smbdwill +This parameter determines whether or not smbd will attempt to authenticate users using the LANMAN password hash. If disabled, only clients which support NT password hashes (e.g. Windows NT/2000 clients, smbclient, etc... but not Windows 95/98 or the MS DOS @@ -3385,7 +3385,7 @@ Name (DN) name used by Samba to contact the ldap server when retreiving user account information. The \fIldap admin dn\fR is used in conjunction with the admin dn password stored in the \fIprivate/secrets.tdb\fR file. See the -\fBsmbpasswd(8)\fRman +\fBsmbpasswd(8)\fR man page for more information on how to accmplish this. Default : \fBnone\fR @@ -3396,7 +3396,7 @@ The default is to match the login name with the uid attribute for all entries matching the sambaAccount objectclass. Note that this filter should only return one entry. -Default : \fBldap filter = (%u)(objectclass=sambaAccount))\fR +Default : \fBldap filter = (&(uid=%u)(objectclass=sambaAccount))\fR .TP \fBldap ssl (G)\fR This option is used to define whether or not Samba should @@ -3467,7 +3467,7 @@ parameters. Default: \fBlevel2 oplocks = yes\fR .TP \fBlm announce (G)\fR -This parameter determines if \fBnmbd(8)\fRwill produce Lanman announce +This parameter determines if \fBnmbd(8)\fR will produce Lanman announce broadcasts that are needed by OS/2 clients in order for them to see the Samba server in their browse list. This parameter can have three values, true, false, or @@ -3512,7 +3512,7 @@ more details. Default: \fBload printers = yes\fR .TP \fBlocal master (G)\fR -This option allows \fB nmbd(8)\fRto try and become a local master browser +This option allows \fB nmbd(8)\fR to try and become a local master browser on a subnet. If set to false then \fB nmbd\fR will not attempt to become a local master browser on a subnet and will also lose in all browsing elections. By default this value is set to true. Setting this value to true doesn't @@ -3898,14 +3898,14 @@ Example 2: \fBlprm command = /usr/bin/cancel %p-%j \fBmachine password timeout (G)\fR If a Samba server is a member of a Windows NT Domain (see the security = domain) -parameter) then periodically a running smbd(8)process will try and change the MACHINE ACCOUNT +parameter) then periodically a running smbd(8) process will try and change the MACHINE ACCOUNT PASSWORD stored in the TDB called \fIprivate/secrets.tdb \fR. This parameter specifies how often this password will be changed, in seconds. The default is one week (expressed in seconds), the same as a Windows NT Domain member server. See also \fBsmbpasswd(8) -\fR, and the security = domain) parameter. +\fR and the security = domain) parameter. Default: \fBmachine password timeout = 604800\fR .TP @@ -4053,7 +4053,7 @@ Example: \fBmangling method = hash2\fR .TP \fBmangled stack (G)\fR This parameter controls the number of mangled names -that should be cached in the Samba server smbd(8). +that should be cached in the Samba server smbd(8) This stack is a list of recently mangled base names (extensions are only maintained if they are longer than 3 characters @@ -4121,7 +4121,7 @@ This parameter is only useful in security modes other than \fIsecurity = share and domain. This parameter can take three different values, which tell -smbd(8)what to do with user +smbd(8) what to do with user login requests that don't match a valid UNIX user in some way. The three settings are : @@ -4225,7 +4225,7 @@ Default: \fBmax mux = 50\fR .TP \fBmax open files (G)\fR This parameter limits the maximum number of -open files that one smbd(8)file +open files that one smbd(8) file serving process may have open for a client at any one time. The default for this parameter is set very high (10,000) as Samba uses only one bit per unopened file. @@ -4239,7 +4239,7 @@ Default: \fBmax open files = 10000\fR \fBmax print jobs (S)\fR This parameter limits the maximum number of jobs allowable in a Samba printer queue at any given moment. -If this number is exceeded, \fB smbd(8)\fRwill remote "Out of Space" to the client. +If this number is exceeded, \fB smbd(8)\fR will remote "Out of Space" to the client. See all \fItotal print jobs\fR. @@ -4292,7 +4292,7 @@ processes concurrently running on a system and is intended as a stopgap to prevent degrading service to clients in the event that the server has insufficient resources to handle more than this number of connections. Remember that under normal operating -conditions, each user will have an smbdassociated with him or her +conditions, each user will have an smbd associated with him or her to handle connections to all shares from a given host. Default: \fBmax smbd processes = 0\fR ## no limit @@ -4310,7 +4310,7 @@ Default: \fBmax ttl = 259200\fR .TP \fBmax wins ttl (G)\fR This option tells nmbd(8) -when acting as a WINS server ( \fIwins support = yes\fR) what the maximum + when acting as a WINS server ( \fIwins support = yes\fR) what the maximum \&'time to live' of NetBIOS names that \fBnmbd\fR will grant will be (in seconds). You should never need to change this parameter. The default is 6 days (518400 seconds). @@ -4457,7 +4457,7 @@ Dfs links are specified in the share directory by symbolic links of the form \fImsdfs:serverA\\shareA,serverB\\shareB \fR and so on. For more information on setting up a Dfs tree on Samba, refer to msdfs_setup.html -. + See also \fIhost msdfs \fR @@ -4486,7 +4486,7 @@ cause names to be resolved as follows : \(bu lmhosts : Lookup an IP address in the Samba lmhosts file. If the line in lmhosts has -no name type attached to the NetBIOS name (see the lmhosts(5)for details) then +no name type attached to the NetBIOS name (see the lmhosts(5) for details) then any name type matches for lookup. .TP 0.2i \(bu @@ -4523,7 +4523,7 @@ first, followed by a broadcast attempt, followed by a normal system hostname lookup. .TP \fBnetbios aliases (G)\fR -This is a list of NetBIOS names that nmbd(8)will advertise as additional +This is a list of NetBIOS names that nmbd(8) will advertise as additional names by which the Samba server is known. This allows one machine to appear in browse lists under multiple names. If a machine is acting as a browse server or logon server none @@ -4605,7 +4605,7 @@ Example: \fBnon unix account range = 10000-20000\fR .TP \fBnt acl support (S)\fR This boolean parameter controls whether -smbd(8)will attempt to map +smbd(8) will attempt to map UNIX permissions into Windows NT access control lists. This parameter was formally a global parameter in releases prior to 2.2.2. @@ -4614,7 +4614,7 @@ Default: \fBnt acl support = yes\fR .TP \fBnt pipe support (G)\fR This boolean parameter controls whether -smbd(8)will allow Windows NT +smbd(8) will allow Windows NT clients to connect to the NT SMB specific IPC$ pipes. This is a developer debugging option and can be left alone. @@ -4622,7 +4622,7 @@ alone. Default: \fBnt pipe support = yes\fR .TP \fBnt status support (G)\fR -This boolean parameter controls whether smbd(8)will negotiate NT specific status +This boolean parameter controls whether smbd(8) will negotiate NT specific status support with Windows NT/2k/XP clients. This is a developer debugging option and should be left alone. If this option is set to no then Samba offers @@ -4637,7 +4637,7 @@ Default: \fBnt status support = yes\fR Allow or disallow client access to accounts that have null passwords. -See also smbpasswd (5). +See also smbpasswd (5) Default: \fBnull passwords = no\fR .TP @@ -4694,11 +4694,11 @@ Default: \fBoplock break wait time = 0\fR .TP \fBoplock contention limit (S)\fR This is a \fBvery\fR advanced -smbd(8)tuning option to +smbd(8) tuning option to improve the efficiency of the granting of oplocks under multiple client contention for the same file. -In brief it specifies a number, which causes smbdnot to +In brief it specifies a number, which causes smbd not to grant an oplock even when requested if the approximate number of clients contending for an oplock on the same file goes over this limit. This causes \fBsmbd\fR to behave in a similar @@ -4733,7 +4733,7 @@ oplocks\fR and \fI level2 oplocks\fR parameters. Default: \fBoplocks = yes\fR .TP \fBntlm auth (G)\fR -This parameter determines whether or not smbdwill +This parameter determines whether or not smbd will attempt to authenticate users using the NTLM password hash. If disabled, only the lanman password hashes will be used. @@ -4744,7 +4744,7 @@ Default : \fBntlm auth = yes\fR \fBos level (G)\fR This integer value controls what level Samba advertises itself as for browse elections. The value of this -parameter determines whether nmbd(8) +parameter determines whether nmbd(8) has a chance of becoming a local master browser for the \fI WORKGROUP\fR in the local broadcast area. \fBNote :\fRBy default, Samba will win @@ -4773,9 +4773,9 @@ LaserJet 5L\fR. The need for the file is due to the printer driver namespace problem described in the Samba -Printing HOWTO. For more details on OS/2 clients, please +Printing HOWTO For more details on OS/2 clients, please refer to the OS2-Client-HOWTO -containing in the Samba documentation. + containing in the Samba documentation. Default: \fBos2 driver map = \fR @@ -4794,7 +4794,7 @@ Default: \fBpam password change = no\fR .TP \fBpanic action (G)\fR This is a Samba developer option that allows a -system command to be called when either smbd(8) +system command to be called when either smbd(8) crashes. This is usually used to draw attention to the fact that a problem occurred. @@ -4808,7 +4808,7 @@ users with a bad passowrd. When this option is enabled, samba will not use a broken NT 4.x server as password server, but instead complain to the logs and exit. -Default: \fBparanoid server security = no\fR +Default: \fBparanoid server security = yes\fR .TP \fBpassdb backend (G)\fR This option allows the administrator to chose which backends to retrieve and store passwords with. This allows (for example) both @@ -4893,9 +4893,9 @@ Example: \fBpassdb backend = plugin:/usr/local/samba/lib/my_passdb.so:my_plugin_ .TP \fBpasswd chat (G)\fR This string controls the \fB"chat"\fR -conversation that takes places between smbdand the local password changing +conversation that takes places between smbd and the local password changing program to change the user's password. The string describes a -sequence of response-receive pairs that smbd(8)uses to determine what to send to the +sequence of response-receive pairs that smbd(8) uses to determine what to send to the \fIpasswd program\fR and what to expect back. If the expected output is not received then the password is not changed. @@ -4944,7 +4944,7 @@ changed*"\fR This boolean specifies if the passwd chat script parameter is run in \fBdebug\fR mode. In this mode the strings passed to and received from the passwd chat are printed -in the smbd(8)log with a +in the smbd(8) log with a \fIdebug level\fR of 100. This is a dangerous option as it will allow plaintext passwords to be seen in the \fBsmbd\fR log. It is available to help @@ -4977,7 +4977,7 @@ it. password sync\fR parameter is set to true then this program is called \fBAS ROOT\fR before the SMB password in the smbpasswd(5) -file is changed. If this UNIX password change fails, then + file is changed. If this UNIX password change fails, then \fBsmbd\fR will fail to change the SMB password also (this is by design). @@ -5221,7 +5221,7 @@ return code from \fIpreexec Default: \fBpreexec close = no\fR .TP \fBpreferred master (G)\fR -This boolean parameter controls if nmbd(8)is a preferred master browser +This boolean parameter controls if nmbd(8) is a preferred master browser for its workgroup. If this is set to true, on startup, \fBnmbd\fR @@ -5432,7 +5432,7 @@ Example: \fBprinter admin = admin, @staff\fR parameter and will be removed in the next major release following version 2.2. Please see the instructions in the Samba 2.2. Printing -HOWTOfor more information +HOWTO for more information on the new method of loading printer drivers onto a Samba server. This option allows you to control the string @@ -5458,7 +5458,7 @@ Example: \fBprinter driver = HP LaserJet 4L\fR parameter and will be removed in the next major release following version 2.2. Please see the instructions in the Samba 2.2. Printing -HOWTOfor more information +HOWTO for more information on the new method of loading printer drivers onto a Samba server. This parameter tells Samba where the printer driver @@ -5486,7 +5486,7 @@ Example: \fBprinter driver file = parameter and will be removed in the next major release following version 2.2. Please see the instructions in the Samba 2.2. Printing -HOWTOfor more information +HOWTO for more information on the new method of loading printer drivers onto a Samba server. This parameter tells clients of a particular printer @@ -5541,7 +5541,7 @@ QNX, SOFTQ, and CUPS. To see what the defaults are for the other print -commands when using the various options use the testparm(1)program. +commands when using the various options use the testparm(1) program. This option can be set on a per printer basis @@ -5613,7 +5613,7 @@ Example: \fBqueuepause command = enable %p \fR .TP \fBread bmpx (G)\fR -This boolean parameter controls whether smbd(8)will support the "Read +This boolean parameter controls whether smbd(8) will support the "Read Block Multiplex" SMB. This is now rarely used and defaults to no. You should never need to set this parameter. @@ -5688,7 +5688,7 @@ Default: \fBrealm = \fR Example: \fBrealm = mysambabox.mycompany.com\fR .TP \fBremote announce (G)\fR -This option allows you to setup nmbd(8)to periodically announce itself +This option allows you to setup nmbd(8) to periodically announce itself to arbitrary IP addresses with an arbitrary workgroup name. This is useful if you want your Samba server to appear @@ -5718,7 +5718,7 @@ Default: \fBremote announce = \fR .TP \fBremote browse sync (G)\fR -This option allows you to setup nmbd(8)to periodically request +This option allows you to setup nmbd(8) to periodically request synchronization of browse lists with the master browser of a Samba server that is on a remote segment. This option will allow you to gain browse lists for multiple workgroups across routed networks. This @@ -5843,7 +5843,7 @@ Samba and is one of the most important settings in the \fI smb.conf\fR file. The option sets the "security mode bit" in replies to protocol negotiations with smbd(8) -to turn share level security on or off. Clients decide + to turn share level security on or off. Clients decide based on this bit whether (and how) to transfer user and password information to the server. @@ -6008,7 +6008,7 @@ parameter. \fBSECURITY = DOMAIN \fR -This mode will only work correctly if smbpasswd(8)has been used to add this +This mode will only work correctly if smbpasswd(8) has been used to add this machine into a Windows NT Domain. It expects the \fIencrypted passwords\fR parameter to be set to true. In this mode Samba will try to validate the username/password by passing @@ -6176,7 +6176,7 @@ Default :\fBshow add printer wizard = yes\fR \fBshutdown script (G)\fR \fBThis parameter only exists in the HEAD cvs branch\fR This a full path name to a script called by -\fBsmbd(8)\fRthat +\fBsmbd(8)\fR that should start a shutdown procedure. This command will be run as the user connected to the @@ -6267,7 +6267,7 @@ You may find that on some systems Samba will say "Unknown socket option" when you supply an option. This means you either incorrectly typed it or you need to add an include file to includes.h for your OS. If the latter is the case please -send the patch to samba@samba.org. +send the patch to samba@samba.org . Any of the supported socket options may be combined in any way you like, as long as your OS allows it. @@ -6365,7 +6365,7 @@ This variable controls controls whether samba will try to use Simple and Protect Default: \fBuse spnego = yes\fR .TP \fBstat cache (G)\fR -This parameter determines if smbd(8)will use a cache in order to +This parameter determines if smbd(8) will use a cache in order to speed up case insensitive name mappings. You should never need to change this parameter. @@ -6431,7 +6431,7 @@ the process to be suspended until the kernel has ensured that all outstanding data in kernel disk buffers has been safely stored onto stable storage. This is very slow and should only be done rarely. Setting this parameter to no (the -default) means that smbdignores the Windows applications requests for +default) means that smbd ignores the Windows applications requests for a sync call. There is only a possibility of losing data if the operating system itself that Samba is running on crashes, so there is little danger in this default setting. In addition, this fixes many @@ -6490,7 +6490,7 @@ Default: \fBsyslog only = no\fR .TP \fBtemplate homedir (G)\fR When filling out the user information for a Windows NT -user, the winbindd(8)daemon +user, the winbindd(8) daemon uses this parameter to fill in the home directory for that user. If the string \fI%D\fR is present it is substituted with the user's Windows NT domain name. If the string \fI%U @@ -6501,7 +6501,7 @@ Default: \fBtemplate homedir = /home/%D/%U\fR .TP \fBtemplate shell (G)\fR When filling out the user information for a Windows NT -user, the winbindd(8)daemon +user, the winbindd(8) daemon uses this parameter to fill in the login shell for that user. Default: \fBtemplate shell = /bin/false\fR @@ -6518,7 +6518,7 @@ Example: \fBtime offset = 60\fR .TP \fBtime server (G)\fR This parameter determines if -nmbd(8)advertises itself as a time server to Windows +nmbd(8) advertises itself as a time server to Windows clients. Default: \fBtime server = no\fR @@ -6530,7 +6530,7 @@ Synonym for \fI debug timestamp\fR. This parameter accepts an integer value which defines a limit on the maximum number of print jobs that will be accepted system wide at any given time. If a print job is submitted -by a client which will exceed this number, then smbdwill return an +by a client which will exceed this number, then smbd will return an error indicating that no space is available on the server. The default value of 0 means that no such limit exists. This parameter can be used to prevent a server from exceeding its capacity and is @@ -7016,7 +7016,7 @@ Default: \fBwide links = yes\fR .TP \fBwinbind cache time (G)\fR This parameter specifies the number of seconds the -winbindd(8)daemon will cache +winbindd(8) daemon will cache user and group information before querying a Windows NT server again. @@ -7024,7 +7024,7 @@ Default: \fBwinbind cache type = 15\fR .TP \fBwinbind enum users (G)\fR On large installations using -winbindd(8)it may be +winbindd(8) it may be necessary to suppress the enumeration of users through the \fB setpwent()\fR, \fBgetpwent()\fR and @@ -7043,7 +7043,7 @@ Default: \fBwinbind enum users = yes \fR .TP \fBwinbind enum groups (G)\fR On large installations using -winbindd(8)it may be +winbindd(8) it may be necessary to suppress the enumeration of groups through the \fB setgrent()\fR, \fBgetgrent()\fR and @@ -7059,7 +7059,7 @@ Default: \fBwinbind enum groups = yes \fR .TP \fBwinbind gid (G)\fR The winbind gid parameter specifies the range of group -ids that are allocated by the winbindd(8)daemon. This range of group ids should have no +ids that are allocated by the winbindd(8) daemon. This range of group ids should have no existing local or NIS groups within it as strange conflicts can occur otherwise. @@ -7085,7 +7085,7 @@ Example: \fBwinbind separator = +\fR .TP \fBwinbind uid (G)\fR The winbind gid parameter specifies the range of group -ids that are allocated by the winbindd(8)daemon. This range of ids should have no +ids that are allocated by the winbindd(8) daemon. This range of ids should have no existing local or NIS users within it as strange conflicts can occur otherwise. @@ -7155,7 +7155,7 @@ program \fBnsupdate\fR is provided in the examples directory of the Samba source code. .TP \fBwins proxy (G)\fR -This is a boolean that controls if nmbd(8)will respond to broadcast name +This is a boolean that controls if nmbd(8) will respond to broadcast name queries on behalf of other hosts. You may need to set this to yes for some older clients. @@ -7163,7 +7163,7 @@ Default: \fBwins proxy = no\fR .TP \fBwins server (G)\fR This specifies the IP address (or DNS name: IP -address for preference) of the WINS server that nmbd(8)should register with. If you have a WINS server on +address for preference) of the WINS server that nmbd(8) should register with. If you have a WINS server on your network then you should set this to the WINS server's IP. You should point this at your WINS server if you have a @@ -7182,7 +7182,7 @@ Example: \fBwins server = 192.9.200.1\fR .TP \fBwins support (G)\fR This boolean controls if the -nmbd(8)process in Samba will act as a WINS server. You should +nmbd(8) process in Samba will act as a WINS server. You should not set this to true unless you have a multi-subnetted network and you wish a particular \fBnmbd\fR to be your WINS server. Note that you should \fBNEVER\fR set this to true @@ -7290,7 +7290,7 @@ problem - but be aware of the possibility. .PP On a similar note, many clients - especially DOS clients - limit service names to eight characters. smbd(8) -has no such limitation, but attempts to connect from such + has no such limitation, but attempts to connect from such clients will fail if they truncate the service names. For this reason you should probably keep your service names down to eight characters in length. @@ -7306,14 +7306,14 @@ This man page is correct for version 2.2 of the Samba suite. .SH "SEE ALSO" .PP -samba(7), -\fBsmbpasswd(8)\fR, -\fBswat(8)\fR, -\fBsmbd(8)\fR, -\fBnmbd(8)\fR, -\fBsmbclient(1)\fR, -\fBnmblookup(1)\fR, -\fBtestparm(1)\fR, +samba(7) +\fBsmbpasswd(8)\fR +\fBswat(8)\fR +\fBsmbd(8)\fR +\fBnmbd(8)\fR +\fBsmbclient(1)\fR +\fBnmblookup(1)\fR +\fBtestparm(1)\fR \fBtestprns(1)\fR .SH "AUTHOR" .PP @@ -7325,6 +7325,6 @@ to the way the Linux kernel is developed. The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another excellent piece of Open Source software, available at -ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 +ftp://ftp.icce.rug.nl/pub/unix/ ) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for Samba 2.2 was done by Gerald Carter -- cgit From db883ae1e659496696c17f2901634cada5e4aa13 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sun, 8 Sep 2002 00:36:22 +0000 Subject: forgot to commit configure with configure.in --- source/configure | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/configure b/source/configure index e7ce3ee4df4..970d527d723 100755 --- a/source/configure +++ b/source/configure @@ -14188,7 +14188,7 @@ done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" -trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then -- cgit From d904d50d3945f5f6a80b59850a82f3e37863c125 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sun, 8 Sep 2002 03:55:37 +0000 Subject: change parametric option name to vfs_recycle_bin it is more sane and do not pollute standard options namespace too much changed also the mode options to be indipendente boolean values, make it easier to understand how to configure them eg: vfs_recycle_bin:keeptree=yes vfs_recycle_bin:versions=yes --- examples/VFS/recycle.c | 71 +++++++++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/examples/VFS/recycle.c b/examples/VFS/recycle.c index bcf5f898cc3..a56619af311 100644 --- a/examples/VFS/recycle.c +++ b/examples/VFS/recycle.c @@ -39,7 +39,7 @@ typedef struct recycle_bin_struct { TALLOC_CTX *ctx; char *repository; /* name of the recycle bin directory */ - BOOL keep_directories; /* keep directory structure of deleted file in recycle bin */ + BOOL keep_dir_tree; /* keep directory structure of deleted file in recycle bin */ BOOL versions; /* create versions of deleted files with identical name */ BOOL touch; /* touch access date of deleted file */ char *exclude; /* which files to exclude */ @@ -48,8 +48,6 @@ typedef struct recycle_bin_struct SMB_OFF_T maxsize; /* maximum file size to be saved */ } recycle_bin_struct; -static BOOL checkparam(char *haystack,char *needle); - /* VFS operations */ static struct vfs_ops default_vfs_ops; /* For passthrough operation */ @@ -71,6 +69,16 @@ static vfs_op_tuple recycle_ops[] = { {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} }; +static BOOL check_bool_param(const char *value) +{ + if (strwicmp(value, "yes") == 0 || + strwicmp(value, "true") == 0 || + strwicmp(value, "1") == 0) + return True; + + return False; +} + /** * VFS initialisation function. * @@ -81,7 +89,7 @@ vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops) DEBUG(10, ("Initializing VFS module recycle\n")); *vfs_version = SMB_VFS_INTERFACE_VERSION; memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); - vfs_recycle_debug_level = debug_add_class("recycle.bin"); + vfs_recycle_debug_level = debug_add_class("vfs_recycle_bin"); if (vfs_recycle_debug_level == -1) { vfs_recycle_debug_level = DBGC_VFS; DEBUG(0, ("vfs_recycle: Couldn't register custom debugging class!\n")); @@ -125,7 +133,7 @@ static int recycle_connect(struct connection_struct *conn, const char *service, /* Set defaults */ recbin->repository = talloc_strdup(ctx, ".recycle"); ALLOC_CHECK(recbin->repository, error); - recbin->keep_directories = False; + recbin->keep_dir_tree = False; recbin->versions = False; recbin->touch = False; recbin->exclude = ""; @@ -136,22 +144,28 @@ static int recycle_connect(struct connection_struct *conn, const char *service, /* parse configuration options */ servicename = talloc_strdup(recbin->ctx, lp_servicename(SNUM(conn))); DEBUG(10, ("servicename = %s\n",servicename)); - if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "repository")) != NULL) { + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "repository")) != NULL) { recbin->repository = talloc_sub_conn(ctx, conn, tmp_str); ALLOC_CHECK(recbin->repository, error); trim_string(recbin->repository, "/", "/"); DEBUG(5, ("recycle.bin: repository = %s\n", recbin->repository)); } - if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "mode")) != NULL) { - if (checkparam(tmp_str, "KEEP_DIRECTORIES") == True) - recbin->keep_directories = True; - if (checkparam(tmp_str, "VERSIONS") == True) + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "keeptree")) != NULL) { + if (check_bool_param(tmp_str) == True) + recbin->keep_dir_tree = True; + DEBUG(5, ("recycle.bin: keeptree = %s\n", tmp_str)); + } + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "versions")) != NULL) { + if (check_bool_param(tmp_str) == True) recbin->versions = True; - if (checkparam(tmp_str, "TOUCH") == True) + DEBUG(5, ("recycle.bin: versions = %s\n", tmp_str)); + } + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "touch")) != NULL) { + if (check_bool_param(tmp_str) == True) recbin->touch = True; - DEBUG(5, ("recycle.bin: mode = %s\n", tmp_str)); + DEBUG(5, ("recycle.bin: touch = %s\n", tmp_str)); } - if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "maxsize")) != NULL) { + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "maxsize")) != NULL) { recbin->maxsize = strtoul(tmp_str, NULL, 10); if (recbin->maxsize == 0) { recbin->maxsize = -1; @@ -160,17 +174,17 @@ static int recycle_connect(struct connection_struct *conn, const char *service, DEBUG(5, ("recycle.bin: maxsize = %ld\n", (long int)recbin->maxsize)); } } - if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "exclude")) != NULL) { + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "exclude")) != NULL) { recbin->exclude = talloc_strdup(ctx, tmp_str); ALLOC_CHECK(recbin->exclude, error); DEBUG(5, ("recycle.bin: exclude = %s\n", recbin->exclude)); } - if ((tmp_str = lp_parm_string(servicename,"recycle.bin", "exclude_dir")) != NULL) { + if ((tmp_str = lp_parm_string(servicename,"vfs_recycle_bin", "exclude_dir")) != NULL) { recbin->exclude_dir = talloc_strdup(ctx, tmp_str); ALLOC_CHECK(recbin->exclude_dir, error); DEBUG(5, ("recycle.bin: exclude_dir = %s\n", recbin->exclude_dir)); } - if ((tmp_str = lp_parm_string(servicename,"recycle.bin", "noversions")) != NULL) { + if ((tmp_str = lp_parm_string(servicename,"vfs_recycle_bin", "noversions")) != NULL) { recbin->noversions = talloc_strdup(ctx, tmp_str); ALLOC_CHECK(recbin->noversions, error); DEBUG(5, ("recycle.bin: noversions = %s\n", recbin->noversions)); @@ -292,7 +306,7 @@ done: * @param needle string to be matched exactly to haystack * @return True if found **/ -static BOOL checkparam(char *haystack, char *needle) +static BOOL checkparam(const char *haystack, const char *needle) { char *token; char *tok_str; @@ -324,7 +338,7 @@ done: * @param needle string to be matched exectly to haystack including pattern matching * @return True if found **/ -static BOOL matchparam(char *haystack, char *needle) +static BOOL matchparam(const char *haystack, const char *needle) { char *token; char *tok_str; @@ -386,7 +400,7 @@ static int recycle_unlink(connection_struct *conn, const char *inname) SMB_BIG_UINT dfree, dsize, bsize; SMB_OFF_T file_size, space_avail; BOOL exist; - int rc; + int rc = -1; file_name = strdup(inname); ALLOC_CHECK(file_name, done); @@ -485,7 +499,7 @@ static int recycle_unlink(connection_struct *conn, const char *inname) safe_strcpy(temp_name, recbin->repository, PATH_MAX); /* see if we need to recreate the original directory structure in the recycle bin */ - if (recbin->keep_directories == True) { + if (recbin->keep_dir_tree == True) { safe_strcat(temp_name, "/", PATH_MAX); safe_strcat(temp_name, path_name, PATH_MAX); } @@ -502,15 +516,16 @@ static int recycle_unlink(connection_struct *conn, const char *inname) } } - safe_strcat(temp_name, "/", PATH_MAX); - safe_strcat(temp_name, base, PATH_MAX); + final_name = (char *)malloc(PATH_MAX); + ALLOC_CHECK(final_name, done); + snprintf(final_name, PATH_MAX, "%s/%s", temp_name, base); DEBUG(10, ("recycle.bin: recycled file name%s\n", temp_name)); /* new filename with path */ /* check if we should delete file from recycle bin */ - if (recycle_file_exist(conn, temp_name)) { + if (recycle_file_exist(conn, final_name)) { if (recbin->versions == False || matchparam(recbin->noversions, base) == True) { - DEBUG(3, ("recycle.bin: Removing old file %s from recycle bin\n", temp_name)); - if (default_vfs_ops.unlink(conn, temp_name) != 0) { + DEBUG(3, ("recycle.bin: Removing old file %s from recycle bin\n", final_name)); + if (default_vfs_ops.unlink(conn, final_name) != 0) { DEBUG(1, ("recycle.bin: Error deleting old file: %s\n", strerror(errno))); } } @@ -518,12 +533,8 @@ static int recycle_unlink(connection_struct *conn, const char *inname) /* rename file we move to recycle bin */ i = 1; - final_name = (char *)malloc(PATH_MAX); - ALLOC_CHECK(final_name, done); - final_name = safe_strcpy(final_name, temp_name, PATH_MAX); while (recycle_file_exist(conn, final_name)) { - snprintf(final_name, PATH_MAX, "Copy #%d of ", i++); - safe_strcat(final_name, temp_name, PATH_MAX); + snprintf(final_name, PATH_MAX, "%s/Copy #%d of %s", temp_name, i++, base); } DEBUG(10, ("recycle.bin: Moving %s to %s\n", file_name, final_name)); -- cgit From 56cb03bfc68727384df46bde6df03950f7cdfcf9 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 8 Sep 2002 14:58:23 +0000 Subject: Patch from Stefan (metze) Metzmacher with more updates for the SAM subsystem --- source/Makefile.in | 2 +- source/sam/interface.c | 557 +++++++++++++++++++++++++++++++++--------------- source/sam/sam_plugin.c | 20 +- 3 files changed, 398 insertions(+), 181 deletions(-) diff --git a/source/Makefile.in b/source/Makefile.in index 796d994b13e..e22387c4de5 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -224,7 +224,7 @@ SAM_STATIC_MODULES = sam/sam_plugin.o SAM_OBJ = sam/account.o sam/get_set_account.o sam/get_set_group.o \ sam/get_set_domain.o sam/interface.o sam/api.o $(SAM_STATIC_MODULES) -SAMTEST_OBJ = torture/samtest.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o +SAMTEST_OBJ = torture/samtest.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o passdb/machine_sid.o passdb/secrets.o GROUPDB_OBJ = groupdb/mapping.o diff --git a/source/sam/interface.c b/source/sam/interface.c index cd2f2361f3f..a10b34200d4 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -26,6 +26,8 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_SAM +extern DOM_SID global_sid_Builtin; + /** List of various built-in sam modules */ const struct sam_init_function_entry builtin_sam_init_functions[] = { @@ -33,8 +35,6 @@ const struct sam_init_function_entry builtin_sam_init_functions[] = { { NULL, NULL} }; -/* FIXME: wrapper functions : context_* */ - /****************************************************************** context_sam_* functions are used to link the external SAM interface with the internal backends. These functions lookup the appropriate @@ -53,8 +53,7 @@ NTSTATUS sam_get_methods_by_sid(const SAM_CONTEXT *context, SAM_METHODS **sam_me tmp_methods = context->methods; - while (tmp_methods) - { + while (tmp_methods) { if (sid_equal(domainsid, &(tmp_methods->domain->private.sid))) { (*sam_method) = tmp_methods; @@ -79,8 +78,7 @@ NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_m tmp_methods = context->methods; - while (tmp_methods) - { + while (tmp_methods) { if (strcmp(domainname, tmp_methods->domain->private.name)) { (*sam_method) = tmp_methods; @@ -112,7 +110,7 @@ NTSTATUS context_sam_get_sec_desc(const SAM_CONTEXT *context, const NT_USER_TOKE } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_sec_desc(tmp_methods, access_token, sid, sd))) { - DEBUG(4,("context_sam_get_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); + DEBUG(4,("sam_get_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); return nt_status; } @@ -125,7 +123,7 @@ NTSTATUS context_sam_set_sec_desc(const SAM_CONTEXT *context, const NT_USER_TOKE NTSTATUS nt_status; DEBUG(5,("context_sam_set_sec_desc: %d\n", __LINE__)); - + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { DEBUG(4,("sam_get_methods_by_sid failed\n")); return nt_status; @@ -137,7 +135,7 @@ NTSTATUS context_sam_set_sec_desc(const SAM_CONTEXT *context, const NT_USER_TOKE } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_set_sec_desc(tmp_methods, access_token, sid, sd))) { - DEBUG(4,("context_sam_set_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); + DEBUG(4,("sam_set_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); return nt_status; } @@ -163,7 +161,7 @@ NTSTATUS context_sam_lookup_name(const SAM_CONTEXT *context, const NT_USER_TOKEN } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_name(tmp_methods, access_token, name, sid, type))) { - DEBUG(4,("context_sam_lookup_name for %s\\%s in backend %s failed\n", + DEBUG(4,("sam_lookup_name for %s\\%s in backend %s failed\n", tmp_methods->domain->private.name, name, tmp_methods->backendname)); return nt_status; } @@ -197,7 +195,7 @@ NTSTATUS context_sam_lookup_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_sid(tmp_methods, access_token, sid, name, type))) { - DEBUG(4,("context_sam_lookup_name for %s in backend %s failed\n", + DEBUG(4,("sam_lookup_name for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); return nt_status; } @@ -208,13 +206,34 @@ NTSTATUS context_sam_lookup_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN NTSTATUS context_sam_update_domain(const SAM_CONTEXT *context, const SAM_DOMAIN_HANDLE *domain) { - return NT_STATUS_NOT_IMPLEMENTED; + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_update_domain: %d\n", __LINE__)); + + /* invalid domain specified */ + SAM_ASSERT(domain && domain->current_sam_methods); + + tmp_methods = domain->current_sam_methods; + + if (!tmp_methods->sam_update_domain) { + DEBUG(3, ("context_sam_update_domain: sam_methods of the domain did not specify sam_update_domain\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_update_domain(tmp_methods, domain))){ + DEBUG(4,("sam_update_domain in backend %s failed\n", + tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; } NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, int32 *domain_count, DOM_SID **domains, char ***domain_names) { SAM_METHODS *tmp_methods; - NTSTATUS nt_status; + NTSTATUS nt_status; SEC_DESC *sd; size_t sd_size; @@ -238,8 +257,7 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE tmp_methods= context->methods; - while (tmp_methods) - { + while (tmp_methods) { (*domain_count)++; tmp_methods= tmp_methods->next; } @@ -259,9 +277,7 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE return NT_STATUS_NO_MEMORY; } - while (tmp_methods) - { - + while (tmp_methods) { DEBUGADD(7,(" [%d] %s: %s\n", i, tmp_methods->domain->private.name, sid_string_static(&tmp_methods->domain->private.sid))); sid_copy(domains[i],&tmp_methods->domain->private.sid); if(asprintf(&(*domain_names[i]),"%s",tmp_methods->domain->private.name) < 0) { @@ -273,7 +289,6 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE i++; tmp_methods= tmp_methods->next; - } return NT_STATUS_OK; @@ -305,8 +320,7 @@ NTSTATUS context_sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOK tmp_methods= context->methods; - while (tmp_methods) - { + while (tmp_methods) { if (strcmp(domain, tmp_methods->domain->private.name) == 0) { sid_copy((*domainsid), &tmp_methods->domain->private.sid); return NT_STATUS_OK; @@ -336,7 +350,7 @@ NTSTATUS context_sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_domain_handle(tmp_methods, access_token, access_desired, domain))) { - DEBUG(4,("context_sam_get_domain_by_sid for %s in backend %s failed\n", + DEBUG(4,("sam_get_domain_handle for %s in backend %s failed\n", sid_string_static(domainsid), tmp_methods->backendname)); return nt_status; } @@ -362,7 +376,7 @@ NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TO } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, account_name, acct_ctrl, account))) { - DEBUG(4,("context_sam_create_account in backend %s failed\n", + DEBUG(4,("sam_create_account in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -377,6 +391,8 @@ NTSTATUS context_sam_add_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_H SAM_METHODS *tmp_methods; uint32 rid; NTSTATUS nt_status; + + DEBUG(5,("context_sam_add_account: %d\n", __LINE__)); if (!NT_STATUS_IS_OK(nt_status = sam_get_account_sid(account, &accountsid))) { DEBUG(0,("Can't get account SID\n")); @@ -400,7 +416,7 @@ NTSTATUS context_sam_add_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_H } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_add_account(tmp_methods, account))){ - DEBUG(4,("context_sam_add_account in backend %s failed\n", + DEBUG(4,("sam_add_account in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -410,35 +426,23 @@ NTSTATUS context_sam_add_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_H NTSTATUS context_sam_update_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) { - DOM_SID domainsid; - SAM_METHODS *tmp_methods; - const DOM_SID *accountsid; - uint32 rid; - NTSTATUS nt_status; - - if (!NT_STATUS_IS_OK(nt_status = sam_get_account_sid(account, &accountsid))) { - DEBUG(0,("Can't get account SID\n")); - return nt_status; - } - - sid_copy(&domainsid, accountsid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("context_sam_get_account_by_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + DEBUG(5,("context_sam_update_account: %d\n", __LINE__)); + + /* invalid account specified */ + SAM_ASSERT(account && account->current_sam_methods); + + tmp_methods = account->current_sam_methods; + if (!tmp_methods->sam_update_account) { DEBUG(3, ("context_sam_update_account: sam_methods of the domain did not specify sam_update_account\n")); return NT_STATUS_NOT_IMPLEMENTED; } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_update_account(tmp_methods, account))){ - DEBUG(4,("context_sam_update_account in backend %s failed\n", + DEBUG(4,("sam_update_account in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -448,27 +452,15 @@ NTSTATUS context_sam_update_account(const SAM_CONTEXT *context, const SAM_ACCOUN NTSTATUS context_sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) { - DOM_SID domainsid; - SAM_METHODS *tmp_methods; - const DOM_SID *accountsid; - uint32 rid; - NTSTATUS nt_status; - - if (!NT_STATUS_IS_OK(nt_status = sam_get_account_sid(account, &accountsid))) { - DEBUG(0,("Can't get account SID\n")); - return nt_status; - } - - sid_copy(&domainsid, accountsid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("context_sam_get_account_by_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_delete_account: %d\n", __LINE__)); + + /* invalid account specified */ + SAM_ASSERT(account && account->current_sam_methods); + + tmp_methods = account->current_sam_methods; if (!tmp_methods->sam_delete_account) { DEBUG(3, ("context_sam_delete_account: sam_methods of the domain did not specify sam_delete_account\n")); @@ -476,7 +468,7 @@ NTSTATUS context_sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUN } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_delete_account(tmp_methods, account))){ - DEBUG(4,("context_sam_delete_account in backend %s failed\n", + DEBUG(4,("sam_delete_account in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -502,7 +494,7 @@ NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOK } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_accounts(tmp_methods, access_token, acct_ctrl, account_count, accounts))) { - DEBUG(4,("context_sam_enum_accounts for domain %s in backend %s failed\n", + DEBUG(4,("sam_enum_accounts for domain %s in backend %s failed\n", tmp_methods->domain->private.name, tmp_methods->backendname)); return nt_status; } @@ -538,7 +530,7 @@ NTSTATUS context_sam_get_account_by_sid(const SAM_CONTEXT *context, const NT_USE } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_account_by_sid(tmp_methods, access_token, access_desired, accountsid, account))) { - DEBUG(4,("context_sam_get_account_by_sid for %s in backend %s failed\n", + DEBUG(4,("sam_get_account_by_sid for %s in backend %s failed\n", sid_string_static(accountsid), tmp_methods->backendname)); return nt_status; } @@ -564,7 +556,7 @@ NTSTATUS context_sam_get_account_by_name(const SAM_CONTEXT *context, const NT_US } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_account_by_name(tmp_methods, access_token, access_desired, name, account))) { - DEBUG(4,("context_sam_get_account_by_name for %s\\%s in backend %s failed\n", + DEBUG(4,("sam_get_account_by_name for %s\\%s in backend %s failed\n", domain, name, tmp_methods->backendname)); return nt_status; } @@ -590,7 +582,7 @@ NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKE } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_group(tmp_methods, access_token, access_desired, group_name, group_ctrl, group))) { - DEBUG(4,("context_sam_create_group in backend %s failed\n", + DEBUG(4,("sam_create_group in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -605,6 +597,8 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL SAM_METHODS *tmp_methods; uint32 rid; NTSTATUS nt_status; + + DEBUG(5,("context_sam_add_group: %d\n", __LINE__)); if (!NT_STATUS_IS_OK(nt_status = sam_get_group_sid(group, &groupsid))) { DEBUG(0,("Can't get group SID\n")); @@ -628,7 +622,7 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_add_group(tmp_methods, group))){ - DEBUG(4,("context_sam_add_group in backend %s failed\n", + DEBUG(4,("sam_add_group in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -638,35 +632,23 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL NTSTATUS context_sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { - DOM_SID domainsid; - const DOM_SID *groupsid; - struct sam_methods *tmp_methods; - uint32 rid; - NTSTATUS nt_status; - - if (!NT_STATUS_IS_OK(nt_status = sam_get_group_sid(group, &groupsid))) { - DEBUG(0,("Can't get group SID\n")); - return nt_status; - } - - sid_copy(&domainsid, groupsid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_update_group: %d\n", __LINE__)); + + /* invalid group specified */ + SAM_ASSERT(group && group->current_sam_methods); + + tmp_methods = group->current_sam_methods; + if (!tmp_methods->sam_update_group) { DEBUG(3, ("context_sam_update_group: sam_methods of the domain did not specify sam_update_group\n")); return NT_STATUS_NOT_IMPLEMENTED; } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_update_group(tmp_methods, group))){ - DEBUG(4,("context_sam_update_group in backend %s failed\n", + DEBUG(4,("sam_update_group in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -676,27 +658,15 @@ NTSTATUS context_sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HA NTSTATUS context_sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { - DOM_SID domainsid; - SAM_METHODS *tmp_methods; - const DOM_SID *groupsid; - uint32 rid; - NTSTATUS nt_status; - - if (!NT_STATUS_IS_OK(nt_status = sam_get_group_sid(group, &groupsid))) { - DEBUG(0,("Can't get group SID\n")); - return nt_status; - } - - sid_copy(&domainsid, groupsid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_delete_group: %d\n", __LINE__)); + + /* invalid group specified */ + SAM_ASSERT(group && group->current_sam_methods); + + tmp_methods = group->current_sam_methods; if (!tmp_methods->sam_delete_group) { DEBUG(3, ("context_sam_delete_group: sam_methods of the domain did not specify sam_delete_group\n")); @@ -704,7 +674,7 @@ NTSTATUS context_sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HA } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_delete_group(tmp_methods, group))){ - DEBUG(4,("context_sam_delete_group in backend %s failed\n", + DEBUG(4,("sam_delete_group in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -730,7 +700,7 @@ NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groups(tmp_methods, access_token, group_ctrl, groups_count, groups))) { - DEBUG(4,("context_sam_enum_groups for domain %s in backend %s failed\n", + DEBUG(4,("sam_enum_groups for domain %s in backend %s failed\n", tmp_methods->domain->private.name, tmp_methods->backendname)); return nt_status; } @@ -765,7 +735,7 @@ NTSTATUS context_sam_get_group_by_sid(const SAM_CONTEXT *context, const NT_USER_ } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_group_by_sid(tmp_methods, access_token, access_desired, groupsid, group))) { - DEBUG(4,("context_sam_get_group_by_sid for %s in backend %s failed\n", + DEBUG(4,("sam_get_group_by_sid for %s in backend %s failed\n", sid_string_static(groupsid), tmp_methods->backendname)); return nt_status; } @@ -791,7 +761,7 @@ NTSTATUS context_sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_group_by_name(tmp_methods, access_token, access_desired, name, group))) { - DEBUG(4,("context_sam_get_group_by_name for %s\\%s in backend %s failed\n", + DEBUG(4,("sam_get_group_by_name for %s\\%s in backend %s failed\n", domain, name, tmp_methods->backendname)); return nt_status; } @@ -801,21 +771,120 @@ NTSTATUS context_sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER NTSTATUS context_sam_add_member_to_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { - return NT_STATUS_NOT_IMPLEMENTED; + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + + /* invalid group or member specified */ + SAM_ASSERT(group && group->current_sam_methods && member); + + tmp_methods = group->current_sam_methods; + + if (!tmp_methods->sam_add_member_to_group) { + DEBUG(3, ("context_sam_add_member_to_group: sam_methods of the domain did not specify sam_add_member_to_group\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_add_member_to_group(tmp_methods, group, member))) { + DEBUG(4,("sam_add_member_to_group in backend %s failed\n", tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; + } + NTSTATUS context_sam_delete_member_from_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { - return NT_STATUS_NOT_IMPLEMENTED; + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + /* invalid group or member specified */ + SAM_ASSERT(group && group->current_sam_methods &&member); + + tmp_methods = group->current_sam_methods; + + if (!tmp_methods->sam_delete_member_from_group) { + DEBUG(3, ("context_sam_delete_member_from_group: sam_methods of the domain did not specify sam_delete_member_from_group\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_delete_member_from_group(tmp_methods, group, member))) { + DEBUG(4,("sam_delete_member_from_group in backend %s failed\n", tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; } NTSTATUS context_sam_enum_groupmembers(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) { - return NT_STATUS_NOT_IMPLEMENTED; + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + /* invalid group specified */ + SAM_ASSERT(group && group->current_sam_methods); + + tmp_methods = group->current_sam_methods; + + if (!tmp_methods->sam_enum_groupmembers) { + DEBUG(3, ("context_sam_enum_groupmembers: sam_methods of the domain did not specify sam_enum_group_members\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groupmembers(tmp_methods, group, members_count, members))) { + DEBUG(4,("sam_enum_groupmembers in backend %s failed\n", tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; } -NTSTATUS context_sam_get_groups_of_sid(const SAM_CONTEXT *context, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) +NTSTATUS context_sam_get_groups_of_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) { - return NT_STATUS_NOT_IMPLEMENTED; + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + uint32 tmp_group_count; + SAM_GROUP_ENUM *tmp_groups; + + DEBUG(5,("context_sam_get_groups_of_sid: %d\n", __LINE__)); + + /* invalid sam_context specified */ + SAM_ASSERT(context && context->methods); + + *group_count = 0; + + *groups = NULL; + + tmp_methods= context->methods; + + while (tmp_methods) { + DEBUG(5,("getting groups from domain \n")); + if (!tmp_methods->sam_get_groups_of_sid) { + DEBUG(3, ("context_sam_get_groups_of_sid: sam_methods of domain did not specify sam_get_groups_of_sid\n")); + SAFE_FREE(*groups); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_groups_of_sid(tmp_methods, access_token, sids, group_ctrl, &tmp_group_count, &tmp_groups))) { + DEBUG(4,("sam_get_groups_of_sid in backend %s failed\n", tmp_methods->backendname)); + SAFE_FREE(*groups); + return nt_status; + } + + *groups = Realloc(*groups, ((*group_count) + tmp_group_count) * sizeof(SAM_GROUP_ENUM)); + + memcpy(&(*groups)[*group_count], tmp_groups, tmp_group_count); + + SAFE_FREE(tmp_groups); + + *group_count += tmp_group_count; + + tmp_methods = tmp_methods->next; + } + + return NT_STATUS_OK; } @@ -828,7 +897,7 @@ void free_sam_context(SAM_CONTEXT **context) { SAM_METHODS *sam_selected = (*context)->methods; - while (sam_selected){ + while (sam_selected) { if (sam_selected->free_private_data) { sam_selected->free_private_data(&(sam_selected->private_data)); } @@ -842,71 +911,217 @@ void free_sam_context(SAM_CONTEXT **context) /****************************************************************** Make a sam_methods from scratch *******************************************************************/ - -NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **selected) + +static NTSTATUS make_backend_entry(SAM_BACKEND_ENTRY *backend_entry, char *sam_backend_string) { - int i = 0; - SAM_METHODS *curmethods, *tmpmethods; - NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; + char *tmp = NULL; + char *tmp_string = sam_backend_string; + + DEBUG(5,("make_backend_entry: %d\n", __LINE__)); + + SAM_ASSERT(sam_backend_string && backend_entry); + + backend_entry->module_name = sam_backend_string; + + DEBUG(5,("makeing backend_entry for %s\n", backend_entry->module_name)); + + if ((tmp = strchr(tmp_string, '|')) != NULL) { + DEBUGADD(20,("a domain name has been specified\n")); + *tmp = 0; + backend_entry->domain_name = tmp + 1; + tmp_string = tmp + 1; + } + + if ((tmp = strchr(tmp_string, ':')) != NULL) { + DEBUG(20,("options for the backend have been specified\n")); + *tmp = 0; + backend_entry->module_params = tmp + 1; + tmp_string = tmp + 1; + } + + if (backend_entry->domain_name == NULL) { + DEBUG(10,("make_backend_entry: no domain was specified for sam module %s. Useing default domain %s\n", + backend_entry->module_name, lp_workgroup())); + backend_entry->domain_name = lp_workgroup(); + } + + if ((backend_entry->domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID))) == NULL) { + DEBUG(0,("make_backend_entry: failed to malloc domain_sid\n")); + return NT_STATUS_NO_MEMORY; + } + + DEBUG(10,("looking up sid for domain %s\n", backend_entry->domain_name)); + + if (!secrets_fetch_domain_sid(backend_entry->domain_name, backend_entry->domain_sid)) { + DEBUG(2,("make_backend_entry: There is no SID stored for domain %s. Creating a new one.\n", + backend_entry->domain_name)); + /* FIXME */ + ZERO_STRUCTP(backend_entry->domain_sid); + } + + DEBUG(5,("make_backend_entry: module name: %s, module parameters: %s, domain name: %s, domain sid: %s\n", + backend_entry->module_name, backend_entry->module_params, backend_entry->domain_name, sid_string_static(backend_entry->domain_sid))); + + return NT_STATUS_OK; +} - if (!NT_STATUS_IS_OK(nt_status = make_sam_context(context))) { - return nt_status; - } - while (selected[i]){ - /* Try to initialise sam */ - DEBUG(5,("Trying to load: %s\n", selected[i])); - if (!NT_STATUS_IS_OK(nt_status = make_sam_methods_name(&curmethods, *context, selected[i]))) { - DEBUG(1, ("Loading %s failed!\n", selected[i])); - free_sam_context(context); - return nt_status; +static NTSTATUS check_correct_backend_entries(SAM_BACKEND_ENTRY **backend_entries, int *nBackends) +{ + BOOL has_builtin = False; + BOOL has_workgroup = False; + DOM_SID *global_sam_sid = get_global_sam_sid(); /* lp_workgroup doesn't play nicely with multiple domains */ + int increase_by = 0; + int i, j; + + DEBUG(5,("check_correct_backend_entries: %d\n", __LINE__)); + + for (i = 0; i < *nBackends; i++) { + if (sid_equal((*backend_entries)[i].domain_sid, &global_sid_Builtin)) { + DEBUG(20,("check_correct_backend_entries: smb.conf specified BUILTIN domain\n")); + has_builtin = True; } - curmethods->parent = *context; - DLIST_ADD_END((*context)->methods, curmethods, tmpmethods); - i++; - } - return NT_STATUS_OK; + if (sid_equal((*backend_entries)[i].domain_sid, global_sam_sid)) { + DEBUG(20,("check_correct_backend_entries: smb.conf specified main domain\n")); + has_workgroup = True; + } + for (j = i + 1; j < *nBackends; j++) { + if (sid_equal((*backend_entries)[i].domain_sid, (*backend_entries)[j].domain_sid)) { + DEBUG(2,("two backend modules claim the same domain %s", + sid_string_static((*backend_entries)[j].domain_sid))); + return NT_STATUS_INVALID_PARAMETER; + } + } + } + + if (!has_workgroup) increase_by++; + if (!has_builtin) increase_by++; + + if (increase_by > 0) { + *nBackends += increase_by; + + (*backend_entries) = (SAM_BACKEND_ENTRY *)realloc((*backend_entries), sizeof(SAM_BACKEND_ENTRY) * (*nBackends)); + if (!has_workgroup) { + /* should be replaced by the default sam module */ + DEBUG(4,("There was no backend specified for domain %s useing plugin\n", + lp_workgroup())); + (*backend_entries)[i].module_name = "plugin"; + (*backend_entries)[i].module_params = NULL; + (*backend_entries)[i].domain_name = lp_workgroup(); + (*backend_entries)[i].domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); + sid_copy((*backend_entries)[i].domain_sid, global_sam_sid); + i++; + } + if (!has_builtin) { + /* should be replaced by the default sam module */ + DEBUG(4,("There was no backend specified for domain BUILTIN useing plugin\n")); + (*backend_entries)[i].module_name = "plugin"; + (*backend_entries)[i].module_params = NULL; + (*backend_entries)[i].domain_name = "BUILTIN"; + (*backend_entries)[i].domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); + sid_copy((*backend_entries)[i].domain_sid, &global_sid_Builtin); + i++; + } + } + + return NT_STATUS_OK; } -NTSTATUS make_sam_methods_name(SAM_METHODS **methods, SAM_CONTEXT *context, const char *selected) +static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS **methods, SAM_BACKEND_ENTRY *backend_entry) { - char *module_name = smb_xstrdup(selected); - char *module_location = NULL, *p; NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; int i; + + DEBUG(5,("make_sam_methods_backend_entry: %d\n", __LINE__)); - p = strchr(module_name, ':'); - - if (p) { - *p = 0; - module_location = p+1; - trim_string(module_location, " ", " "); - } - - trim_string(module_name, " ", " "); - DEBUG(5,("Attempting to find an sam backend to match %s (%s)\n", selected, module_name)); - for (i = 0; builtin_sam_init_functions[i].name; i++) + DEBUG(5,("Attempting to find sam backend %s\n", backend_entry->module_name)); + for (i = 0; builtin_sam_init_functions[i].module_name; i++) { - if (strequal(builtin_sam_init_functions[i].name, module_name)) + if (strequal(builtin_sam_init_functions[i].module_name, backend_entry->module_name)) { - DEBUG(5,("Found sam backend %s (at pos %d)\n", module_name, i)); - nt_status = builtin_sam_init_functions[i].init(context, methods, module_location); + DEBUG(5,("Found sam backend %s (at pos %d)\n", backend_entry->module_name, i)); + DEBUGADD(5,("initialising it with options=%s for domain %s\n", backend_entry->module_params, sid_string_static(backend_entry->domain_sid))); + nt_status = builtin_sam_init_functions[i].init(context, methods, backend_entry->domain_sid, backend_entry->module_params); if (NT_STATUS_IS_OK(nt_status)) { - DEBUG(5,("sam backend %s has a valid init\n", selected)); + DEBUG(5,("sam backend %s has a valid init\n", backend_entry->module_name)); } else { - DEBUG(0,("sam backend %s did not correctly init (error was %s)\n", selected, nt_errstr(nt_status))); + DEBUG(2,("sam backend %s did not correctly init (error was %s)\n", + backend_entry->module_name, nt_errstr(nt_status))); } - SAFE_FREE(module_name); return nt_status; break; /* unreached */ } } + + DEBUG(2,("could not find backend %s\n", backend_entry->module_name)); - /* No such backend found */ - SAFE_FREE(module_name); return NT_STATUS_INVALID_PARAMETER; } + +NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **sam_backends_param) +{ + int i = 0, j = 0; + SAM_METHODS *curmethods, *tmpmethods; + int nBackends = 0; + SAM_BACKEND_ENTRY *backends = NULL; + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; + + DEBUG(5,("make_sam_context_from_conf: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = make_sam_context(context))) { + DEBUG(4,("make_sam_context failed\n")); + return nt_status; + } + + while (sam_backends_param[nBackends]) + nBackends++; + + DEBUG(6,("There are %d domains listed with there backends\n", nBackends)); + + if ((backends = (SAM_BACKEND_ENTRY *)malloc(sizeof(SAM_BACKEND_ENTRY)*nBackends)) == NULL) { + DEBUG(0,("make_sam_context_list: failed to allocate backends\n")); + return NT_STATUS_NO_MEMORY; + } + ZERO_STRUCTP(backends); + + for (i = 0; i < nBackends; i++) { + DEBUG(8,("processing %s\n",sam_backends_param[i])); + if (!NT_STATUS_IS_OK(nt_status = make_backend_entry(&backends[i], sam_backends_param[i]))) { + DEBUG(4,("make_backend_entry failed\n")); + for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); + SAFE_FREE(backends); + free_sam_context(context); + return nt_status; + } + } + + if (!NT_STATUS_IS_OK(nt_status = check_correct_backend_entries(&backends, &nBackends))) { + DEBUG(4,("check_correct_backend_entries failed\n")); + for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); + SAFE_FREE(backends); + free_sam_context(context); + return nt_status; + } + + for (i = 0; i < nBackends; i++) { + if (!NT_STATUS_IS_OK(nt_status = make_sam_methods_backend_entry(*context, &curmethods, &backends[i]))) { + DEBUG(4,("make_sam_methods_backend_entry failed\n")); + for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); + SAFE_FREE(backends); + free_sam_context(context); + return nt_status; + } + curmethods->parent = *context; + DLIST_ADD_END((*context)->methods, curmethods, tmpmethods); + } + + for (i = 0; i < nBackends; i++) SAFE_FREE(backends[i].domain_sid); + + SAFE_FREE(backends); + return NT_STATUS_OK; +} + /****************************************************************** Make a sam_context from scratch. *******************************************************************/ @@ -952,12 +1167,14 @@ struct sam_context *sam_get_static_context(BOOL reload) if ((sam_context) && (reload)) { sam_context->free_fn(&sam_context); if (!NT_STATUS_IS_OK(make_sam_context_list(&sam_context, lp_sam_backend()))) { + DEBUG(4,("make_sam_context_list failed\n")); return NULL; } } if (!sam_context) { if (!NT_STATUS_IS_OK(make_sam_context_list(&sam_context, lp_sam_backend()))) { + DEBUG(4,("make_sam_context_list failed\n")); return NULL; } } @@ -977,7 +1194,7 @@ BOOL initialize_sam(BOOL reload) } -NTSTATUS make_sam_methods(TALLOC_CTX *mem_ctx, SAM_METHODS **methods) +NTSTATUS make_sam_methods(TALLOC_CTX *mem_ctx, SAM_METHODS **methods) { *methods = talloc(mem_ctx, sizeof(SAM_METHODS)); diff --git a/source/sam/sam_plugin.c b/source/sam/sam_plugin.c index c32acf3d3cb..9d2ee937efa 100644 --- a/source/sam/sam_plugin.c +++ b/source/sam/sam_plugin.c @@ -25,25 +25,25 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_SAM -NTSTATUS sam_init_plugin(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const char *location) +NTSTATUS sam_init_plugin(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const DOM_SID *domain, const char *module_params) { - void * dl_handle; - char *plugin_location, *plugin_name, *p; + void *dl_handle; + char *plugin_params, *plugin_name, *p; sam_init_function plugin_init; int (*plugin_version)(void); - if (location == NULL) { + if (module_params == NULL) { DEBUG(0, ("The plugin module needs an argument!\n")); return NT_STATUS_UNSUCCESSFUL; } - plugin_name = smb_xstrdup(location); + plugin_name = smb_xstrdup(module_params); p = strchr(plugin_name, ':'); if (p) { *p = 0; - plugin_location = p+1; - trim_string(plugin_location, " ", " "); - } else plugin_location = NULL; + plugin_params = p+1; + trim_string(plugin_params, " ", " "); + } else plugin_params = NULL; trim_string(plugin_name, " ", " "); DEBUG(5, ("Trying to load sam plugin %s\n", plugin_name)); @@ -74,6 +74,6 @@ NTSTATUS sam_init_plugin(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_metho return NT_STATUS_UNSUCCESSFUL; } - DEBUG(5, ("Starting sam plugin %s with location %s\n", plugin_name, plugin_location)); - return plugin_init(sam_context, sam_method, plugin_location); + DEBUG(5, ("Starting sam plugin %s with parameters %s for domain %s\n", plugin_name, plugin_params, sid_string_static(domain))); + return plugin_init(sam_context, sam_method, domain, plugin_params); } -- cgit From 771878a2d94009b6eccef5f98d4e782cd85c291e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 8 Sep 2002 15:25:22 +0000 Subject: Patch from Kai Krüger for the new SAM system MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/include/sam.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/source/include/sam.h b/source/include/sam.h index afa7e55c659..c8df95676e8 100644 --- a/source/include/sam.h +++ b/source/include/sam.h @@ -259,13 +259,20 @@ typedef struct sam_methods void (*free_private_data)(void **); } SAM_METHODS; -typedef NTSTATUS (*sam_init_function)(const SAM_CONTEXT *, SAM_METHODS **, const char *); +typedef NTSTATUS (*sam_init_function)(const SAM_CONTEXT *, SAM_METHODS **, const DOM_SID *domain, const char *); struct sam_init_function_entry { - char *name; + char *module_name; /* Function to create a member of the sam_methods list */ sam_init_function init; }; +typedef struct sam_backend_entry { + char *module_name; + char *module_params; + char *domain_name; + DOM_SID *domain_sid; +} SAM_BACKEND_ENTRY; + #endif /* _SAM_H */ -- cgit From 31feae9e8f0c9831284cfa85f9b771113549ed2f Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sun, 8 Sep 2002 23:57:40 +0000 Subject: Update patch. --- source/python/samba-head.patch | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/source/python/samba-head.patch b/source/python/samba-head.patch index ced7da551e3..c48dd8a30a9 100644 --- a/source/python/samba-head.patch +++ b/source/python/samba-head.patch @@ -1,11 +1,11 @@ Index: Makefile.in =================================================================== RCS file: /data/cvs/samba/source/Makefile.in,v -retrieving revision 1.502 -diff -u -r1.502 Makefile.in ---- Makefile.in 2002/08/02 07:20:56 1.502 -+++ Makefile.in 2002/08/06 00:51:48 -@@ -839,6 +839,45 @@ +retrieving revision 1.530 +diff -u -r1.530 Makefile.in +--- Makefile.in 8 Sep 2002 14:58:22 -0000 1.530 ++++ Makefile.in 8 Sep 2002 23:56:36 -0000 +@@ -846,6 +846,45 @@ -$(INSTALLCMD) -d ${prefix}/include -$(INSTALLCMD) include/libsmbclient.h ${prefix}/include @@ -54,16 +54,16 @@ diff -u -r1.502 Makefile.in Index: configure.in =================================================================== RCS file: /data/cvs/samba/source/configure.in,v -retrieving revision 1.326 -diff -u -r1.326 configure.in ---- configure.in 2002/07/30 09:59:52 1.326 -+++ configure.in 2002/08/06 00:51:51 -@@ -2797,7 +2797,7 @@ - builddir=`pwd` - AC_SUBST(builddir) - --AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile) -+AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile python/setup.py) +retrieving revision 1.336 +diff -u -r1.336 configure.in +--- configure.in 7 Sep 2002 04:08:02 -0000 1.336 ++++ configure.in 8 Sep 2002 23:56:37 -0000 +@@ -2828,7 +2828,7 @@ + # I added make files that are outside /source directory. + # I know this is not a good solution, will work out a better + # solution soon. --simo +-AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) ++AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile python/setup.py) ################################################# # Print very concise instructions on building/use -- cgit From fff081d3440373071d8859b7a7d71cf6489126a4 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 01:06:20 +0000 Subject: Check no extra fields are present when parsing credentials. --- source/python/py_common.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/source/python/py_common.c b/source/python/py_common.c index 6247bf63717..e21858e0722 100644 --- a/source/python/py_common.c +++ b/source/python/py_common.c @@ -144,6 +144,8 @@ BOOL py_parse_creds(PyObject *creds, char **username, char **domain, if (creds && PyDict_Size(creds) > 0) { PyObject *username_obj, *password_obj, *domain_obj; + PyObject *key, *value; + int i; /* Check for presence of required fields */ @@ -166,8 +168,6 @@ BOOL py_parse_creds(PyObject *creds, char **username, char **domain, return False; } - /* Look for any other fields */ - /* Check type of required fields */ if (!PyString_Check(username_obj)) { @@ -185,6 +185,21 @@ BOOL py_parse_creds(PyObject *creds, char **username, char **domain, return False; } + /* Look for any extra fields */ + + i = 0; + + while (PyDict_Next(creds, &i, &key, &value)) { + if (strcmp(PyString_AsString(key), "domain") != 0 && + strcmp(PyString_AsString(key), "username") != 0 && + strcmp(PyString_AsString(key), "password") != 0) { + asprintf(errstr, + "creds contain extra field '%s'", + PyString_AsString(key)); + return False; + } + } + /* Assign values */ *username = PyString_AsString(username_obj); -- cgit From 95831c8266119284264f7f42b08fb4d8e21e9deb Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 01:09:23 +0000 Subject: Remove todo comment. --- source/python/py_spoolss_drivers_conv.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source/python/py_spoolss_drivers_conv.c b/source/python/py_spoolss_drivers_conv.c index 5d181f9cd90..41ff38327e2 100644 --- a/source/python/py_spoolss_drivers_conv.c +++ b/source/python/py_spoolss_drivers_conv.c @@ -59,7 +59,6 @@ struct pyconv py_DRIVER_INFO_6[] = { { "data_file", PY_UNISTR, offsetof(DRIVER_INFO_6, datafile) }, { "config_file", PY_UNISTR, offsetof(DRIVER_INFO_6, configfile) }, { "help_file", PY_UNISTR, offsetof(DRIVER_INFO_6, helpfile) }, - /* dependentfiles */ { "monitor_name", PY_UNISTR, offsetof(DRIVER_INFO_6, monitorname) }, { "default_datatype", PY_UNISTR, offsetof(DRIVER_INFO_6, defaultdatatype) }, /* driver_date */ -- cgit From 1338f623c2a1e539ee9ee5fedbaf16baf3eb171e Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 01:13:27 +0000 Subject: Return WERR_UNKNOWN_LEVEL for getprinterdriver level 6 as we don't know how to decode a printer driver into a DRIVER_INFO_6 structure. --- source/rpc_client/cli_spoolss.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/rpc_client/cli_spoolss.c b/source/rpc_client/cli_spoolss.c index caa2f2901bc..448dc7ece5f 100644 --- a/source/rpc_client/cli_spoolss.c +++ b/source/rpc_client/cli_spoolss.c @@ -767,6 +767,9 @@ WERROR cli_spoolss_getprinterdriver(struct cli_state *cli, case 3: decode_printer_driver_3(mem_ctx, r.buffer, 1, &ctr->info3); break; + default: + DEBUG(10, ("cli_spoolss_getprinterdriver: unknown info level %d", level)); + return WERR_UNKNOWN_LEVEL; } done: -- cgit From d30da51956accfc4ea4662cece00d4df223421cd Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 03:22:39 +0000 Subject: Return WERR_UNKNOWN_LEVEL for unknown info levels. --- source/rpc_client/cli_spoolss.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/source/rpc_client/cli_spoolss.c b/source/rpc_client/cli_spoolss.c index 448dc7ece5f..ca24d95e336 100644 --- a/source/rpc_client/cli_spoolss.c +++ b/source/rpc_client/cli_spoolss.c @@ -661,7 +661,8 @@ WERROR cli_spoolss_setprinter(struct cli_state *cli, TALLOC_CTX *mem_ctx, prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); - make_spoolss_q_setprinter(mem_ctx, &q, pol, level, ctr, command); + if (!make_spoolss_q_setprinter(mem_ctx, &q, pol, level, ctr, command)) + goto done; /* Marshall data and send request */ @@ -1335,8 +1336,16 @@ WERROR cli_spoolss_getform(struct cli_state *cli, TALLOC_CTX *mem_ctx, if (needed) *needed = r.needed; - if (W_ERROR_IS_OK(result)) - smb_io_form_1("", r.buffer, form, 0); + if (W_ERROR_IS_OK(result)) { + switch(level) { + case 1: + smb_io_form_1("", r.buffer, form, 0); + break; + default: + DEBUG(10, ("cli_spoolss_getform: unknown info level %d", level)); + return WERR_UNKNOWN_LEVEL; + } + } done: prs_mem_free(&qbuf); -- cgit From 4132d9680a0b6ed829663399bba209a49ca41d56 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 04:38:12 +0000 Subject: Formatting tidyup. --- source/python/py_spoolss_drivers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/python/py_spoolss_drivers.c b/source/python/py_spoolss_drivers.c index 2e8fac4a4e1..0c242d91811 100644 --- a/source/python/py_spoolss_drivers.c +++ b/source/python/py_spoolss_drivers.c @@ -214,7 +214,7 @@ PyObject *spoolss_hnd_getprinterdriver(PyObject *self, PyObject *args, py_from_DRIVER_INFO_3(&result, ctr.info3); break; case 6: - py_from_DRIVER_INFO_6(&result, ctr.info6); + py_from_DRIVER_INFO_6(&result, ctr.info6); break; default: PyErr_SetString(spoolss_error, "unsupported info level"); -- cgit From 69bb58b92e92113b3ce2c72a3bfa46ed3056c261 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 04:42:01 +0000 Subject: Pass level keyword down to cli_spoolss_getform() --- source/python/py_spoolss_forms.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/python/py_spoolss_forms.c b/source/python/py_spoolss_forms.c index c216e00afe4..ef9ed94533a 100644 --- a/source/python/py_spoolss_forms.c +++ b/source/python/py_spoolss_forms.c @@ -102,7 +102,7 @@ PyObject *spoolss_hnd_getform(PyObject *self, PyObject *args, PyObject *kw) /* Call rpc function */ werror = cli_spoolss_getform(hnd->cli, hnd->mem_ctx, 0, &needed, - &hnd->pol, form_name, 1, &form); + &hnd->pol, form_name, level, &form); if (W_ERROR_V(werror) == ERRinsufficientbuffer) werror = cli_spoolss_getform( -- cgit From fc5e186821abc429ea8314d0785b76cbe1ec5f74 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 04:43:38 +0000 Subject: Fix crash bugs in getprinter info level code (yay unit tests). Let the cli_spoolss function return invalid info level error rather than checking for it ourselves. --- source/python/py_spoolss_printers.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/source/python/py_spoolss_printers.c b/source/python/py_spoolss_printers.c index 2a6d056bbf2..a300eada864 100644 --- a/source/python/py_spoolss_printers.c +++ b/source/python/py_spoolss_printers.c @@ -135,11 +135,6 @@ PyObject *spoolss_hnd_getprinter(PyObject *self, PyObject *args, PyObject *kw) if (!PyArg_ParseTupleAndKeywords(args, kw, "|i", kwlist, &level)) return NULL; - if (level < 0 || level > 3) { - PyErr_SetString(spoolss_error, "Invalid info level"); - return NULL; - } - ZERO_STRUCT(ctr); /* Call rpc function */ @@ -224,7 +219,7 @@ PyObject *spoolss_hnd_setprinter(PyObject *self, PyObject *args, PyObject *kw) case 1: ctr.printers_1 = &pinfo.printers_1; - if (!py_to_PRINTER_INFO_1(&pinfo.printers_1, info)){ + if (!py_to_PRINTER_INFO_1(ctr.printers_1, info)){ PyErr_SetString(spoolss_error, "error converting printer to info 1"); return NULL; @@ -234,7 +229,7 @@ PyObject *spoolss_hnd_setprinter(PyObject *self, PyObject *args, PyObject *kw) case 2: ctr.printers_2 = &pinfo.printers_2; - if (!py_to_PRINTER_INFO_2(&pinfo.printers_2, info, + if (!py_to_PRINTER_INFO_2(ctr.printers_2, info, hnd->mem_ctx)){ PyErr_SetString(spoolss_error, "error converting printer to info 2"); @@ -245,7 +240,7 @@ PyObject *spoolss_hnd_setprinter(PyObject *self, PyObject *args, PyObject *kw) case 3: ctr.printers_3 = &pinfo.printers_3; - if (!py_to_PRINTER_INFO_3(&pinfo.printers_3, info, + if (!py_to_PRINTER_INFO_3(ctr.printers_3, info, hnd->mem_ctx)) { PyErr_SetString(spoolss_error, "error converting to printer info 3"); -- cgit From c651720633e3affb192eef9e676fad37a0ad4fae Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 05:22:13 +0000 Subject: Add little meta note --- source/python/README | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/python/README b/source/python/README index f7510463768..6d42897bad1 100644 --- a/source/python/README +++ b/source/python/README @@ -1,3 +1,9 @@ +This directory contains Python bindings to allow you to access various +aspects of Samba. At the moment their status is "experimental" and +they are not built by default. + + +---- Quick Install Guide -- Lines prepended with a $ indicate shell commands. -- cgit From 452769f595c87ba14bde96cebf06e442e79402f3 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 05:46:59 +0000 Subject: Merge tpot's patch to add targets to build Python stuff. It's not built by default. --- source/Makefile.in | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/source/Makefile.in b/source/Makefile.in index e22387c4de5..2038036a92e 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -846,6 +846,45 @@ installclientlib: -$(INSTALLCMD) -d ${prefix}/include -$(INSTALLCMD) include/libsmbclient.h ${prefix}/include +# Python extensions + +PYTHON_OBJS = $(LIB_OBJ) $(LIBSMB_OBJ) $(RPC_PARSE_OBJ) $(UBIQX_OBJ) \ + $(PARAM_OBJ) $(LIBMSRPC_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ) $(SECRETS_OBJ) + +PY_SPOOLSS_PROTO_OBJ = python/py_spoolss.o \ + python/py_spoolss_printers.o python/py_spoolss_printers_conv.o\ + python/py_spoolss_forms.o python/py_spoolss_forms_conv.o \ + python/py_spoolss_ports.o python/py_spoolss_ports_conv.o \ + python/py_spoolss_drivers.o python/py_spoolss_drivers_conv.o \ + python/py_spoolss_jobs.o python/py_spoolss_jobs_conv.o \ + python/py_spoolss_printerdata.o + +PY_LSA_PROTO_OBJ = python/py_lsa.o + +PY_COMMON_PROTO_OBJ = python/py_common.c python/py_ntsec.c + +python_proto: python_spoolss_proto python_lsa_proto python_common_proto + +python_spoolss_proto: + @cd $(srcdir) && $(SHELL) script/mkproto.sh $(AWK) \ + -h _PY_SPOOLSS_PROTO_H python/py_spoolss_proto.h \ + $(PY_SPOOLSS_PROTO_OBJ) + +python_lsa_proto: + @cd $(srcdir) && $(SHELL) script/mkproto.sh $(AWK) \ + -h _PY_LSA_PROTO_H python/py_lsa_proto.h \ + $(PY_LSA_PROTO_OBJ) + +python_common_proto: + @cd $(srcdir) && $(SHELL) script/mkproto.sh $(AWK) \ + -h _PY_COMMON_PROTO_H python/py_common_proto.h \ + $(PY_COMMON_PROTO_OBJ) + +python_ext: $(PYTHON_OBJS) + @echo python python/setup.py build + @PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS)" \ + python python/setup.py build + # revert to the previously installed version revert: @$(SHELL) $(srcdir)/script/revert.sh $(SBINDIR) $(SPROGS) -- cgit From 87396c559b60780e6f0613170f78ce863f0b71fd Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 05:54:11 +0000 Subject: Merge tpot's Python patch. ./configure now writes to the Python makefile-equivalent (setup.py). Remember to do "cvs update -d" to get the new directory. --- source/configure | 1395 ++++++++++++++++++++++++++------------------------- source/configure.in | 2 +- 2 files changed, 700 insertions(+), 697 deletions(-) diff --git a/source/configure b/source/configure index 970d527d723..fca94740066 100755 --- a/source/configure +++ b/source/configure @@ -1118,7 +1118,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -for ac_prog in gawk mawk nawk awk +for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -2910,15 +2910,16 @@ else #line 2911 "configure" #include "confdefs.h" #include -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); - return(0); + exit(0); } EOF -if { (eval echo configure:2922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2938,7 +2939,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2942: checking size of long" >&5 +echo "configure:2943: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2946,18 +2947,19 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); - return(0); + exit(0); } EOF -if { (eval echo configure:2961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2977,7 +2979,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2981: checking size of short" >&5 +echo "configure:2983: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2985,18 +2987,19 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(short)); - return(0); + exit(0); } EOF -if { (eval echo configure:3000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3017,12 +3020,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3021: checking for working const" >&5 +echo "configure:3024: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3078: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3092,21 +3095,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3096: checking for inline" >&5 +echo "configure:3099: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3113: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3132,14 +3135,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3136: checking whether byte ordering is bigendian" >&5 +echo "configure:3139: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3150,11 +3153,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3154: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3165,7 +3168,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3169: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3172: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3185,7 +3188,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3222,14 +3225,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3226: checking whether char is unsigned" >&5 +echo "configure:3229: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3286,12 +3289,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3290: checking return type of signal handlers" >&5 +echo "configure:3293: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3308,7 +3311,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3312: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3315: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3327,12 +3330,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3331: checking for uid_t in sys/types.h" >&5 +echo "configure:3334: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3361,12 +3364,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3365: checking for mode_t" >&5 +echo "configure:3368: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3394,12 +3397,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3398: checking for off_t" >&5 +echo "configure:3401: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3427,12 +3430,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3431: checking for size_t" >&5 +echo "configure:3434: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3460,12 +3463,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3464: checking for pid_t" >&5 +echo "configure:3467: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3493,12 +3496,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3497: checking for st_rdev in struct stat" >&5 +echo "configure:3500: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3506,7 +3509,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3510: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3527,12 +3530,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3531: checking for d_off in dirent" >&5 +echo "configure:3534: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3542,7 +3545,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3546: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3549: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3563,12 +3566,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3567: checking for ino_t" >&5 +echo "configure:3570: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3596,12 +3599,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3600: checking for loff_t" >&5 +echo "configure:3603: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3629,12 +3632,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3633: checking for offset_t" >&5 +echo "configure:3636: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3662,12 +3665,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3666: checking for ssize_t" >&5 +echo "configure:3669: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3695,12 +3698,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3699: checking for wchar_t" >&5 +echo "configure:3702: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3742,7 +3745,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3746: checking for $ac_word" >&5 +echo "configure:3749: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3791,12 +3794,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3795: checking for $ac_func" >&5 +echo "configure:3798: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3845,7 +3848,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3849: checking for dlopen in -ldl" >&5 +echo "configure:3852: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3853,7 +3856,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3871: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3894,13 +3897,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3898: checking for immediate structures" >&5 +echo "configure:3901: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3918,7 +3921,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3925: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3941,13 +3944,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3945: checking for unix domain sockets" >&5 +echo "configure:3948: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3962,7 +3965,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3966: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3984,13 +3987,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3988: checking for socklen_t type" >&5 +echo "configure:3991: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4003,7 +4006,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4007: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4024,13 +4027,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4028: checking for sig_atomic_t type" >&5 +echo "configure:4031: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4043,7 +4046,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4050: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4066,20 +4069,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4070: checking for errno declaration" >&5 +echo "configure:4073: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4086: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4101,20 +4104,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4105: checking for setresuid declaration" >&5 +echo "configure:4108: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4121: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4136,20 +4139,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4140: checking for setresgid declaration" >&5 +echo "configure:4143: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4153: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4156: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4171,20 +4174,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4175: checking for asprintf declaration" >&5 +echo "configure:4178: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4206,20 +4209,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4210: checking for vasprintf declaration" >&5 +echo "configure:4213: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4226: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4241,20 +4244,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4245: checking for vsnprintf declaration" >&5 +echo "configure:4248: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4258: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4261: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4276,20 +4279,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4280: checking for snprintf declaration" >&5 +echo "configure:4283: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4293: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4296: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4313,7 +4316,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4317: checking for real setresuid" >&5 +echo "configure:4320: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4322,12 +4325,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4352,7 +4355,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4356: checking for real setresgid" >&5 +echo "configure:4359: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4361,13 +4364,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4390,7 +4393,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4394: checking for 8-bit clean memcmp" >&5 +echo "configure:4397: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4398,7 +4401,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4431,12 +4434,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4435: checking for $ac_func" >&5 +echo "configure:4438: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4485,7 +4488,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4489: checking for crypt in -lcrypt" >&5 +echo "configure:4492: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4493,7 +4496,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4537,7 +4540,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4541: checking whether to use readline" >&5 +echo "configure:4544: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4549,17 +4552,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4553: checking for $ac_hdr" >&5 +echo "configure:4556: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4563: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4566: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4589,17 +4592,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4593: checking for $ac_hdr" >&5 +echo "configure:4596: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4603: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4606: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4630,17 +4633,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4634: checking for $ac_hdr" >&5 +echo "configure:4637: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4644: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4647: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4663,7 +4666,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4667: checking for tgetent in -l${termlib}" >&5 +echo "configure:4670: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4671,7 +4674,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4704,7 +4707,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4708: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4711: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4712,7 +4715,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4774,17 +4777,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4778: checking for $ac_hdr" >&5 +echo "configure:4781: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4788: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4814,17 +4817,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4818: checking for $ac_hdr" >&5 +echo "configure:4821: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4828: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4831: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4855,17 +4858,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4859: checking for $ac_hdr" >&5 +echo "configure:4862: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4869: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4872: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4888,7 +4891,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4892: checking for tgetent in -l${termlib}" >&5 +echo "configure:4895: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4896,7 +4899,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4929,7 +4932,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4933: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4936: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4937,7 +4940,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4998,7 +5001,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5002: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5005: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5006,7 +5009,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5050,12 +5053,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5054: checking for $ac_func" >&5 +echo "configure:5057: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5106,7 +5109,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5110: checking for printf in -lnsl_s" >&5 +echo "configure:5113: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5114,7 +5117,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5156,7 +5159,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5160: checking for printf in -lnsl" >&5 +echo "configure:5163: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5164,7 +5167,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5206,7 +5209,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5210: checking for connect in -lsocket" >&5 +echo "configure:5213: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5214,7 +5217,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5256,7 +5259,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5260: checking for connect in -linet" >&5 +echo "configure:5263: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5264,7 +5267,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5319,12 +5322,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5323: checking for $ac_func" >&5 +echo "configure:5326: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5373,7 +5376,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5377: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5380: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5381,7 +5384,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5422,12 +5425,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5426: checking for $ac_func" >&5 +echo "configure:5429: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5483,12 +5486,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5487: checking for $ac_func" >&5 +echo "configure:5490: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5538,12 +5541,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5542: checking for $ac_func" >&5 +echo "configure:5545: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5593,12 +5596,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5597: checking for $ac_func" >&5 +echo "configure:5600: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5648,12 +5651,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5652: checking for $ac_func" >&5 +echo "configure:5655: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5703,12 +5706,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5707: checking for $ac_func" >&5 +echo "configure:5710: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5758,12 +5761,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5762: checking for $ac_func" >&5 +echo "configure:5765: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5813,12 +5816,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5817: checking for $ac_func" >&5 +echo "configure:5820: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5868,12 +5871,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5872: checking for $ac_func" >&5 +echo "configure:5875: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5923,12 +5926,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5927: checking for $ac_func" >&5 +echo "configure:5930: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5978,12 +5981,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5982: checking for $ac_func" >&5 +echo "configure:5985: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6034,12 +6037,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6038: checking for $ac_func" >&5 +echo "configure:6041: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6091,12 +6094,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6095: checking for $ac_func" >&5 +echo "configure:6098: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6147,12 +6150,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6151: checking for $ac_func" >&5 +echo "configure:6154: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6202,12 +6205,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6206: checking for $ac_func" >&5 +echo "configure:6209: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6257,12 +6260,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6261: checking for $ac_func" >&5 +echo "configure:6264: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6292: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6312,12 +6315,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6316: checking for $ac_func" >&5 +echo "configure:6319: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6367,12 +6370,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6371: checking for $ac_func" >&5 +echo "configure:6374: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6422,12 +6425,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6426: checking for $ac_func" >&5 +echo "configure:6429: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6477,12 +6480,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6481: checking for $ac_func" >&5 +echo "configure:6484: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6532,12 +6535,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6536: checking for $ac_func" >&5 +echo "configure:6539: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6587,12 +6590,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6591: checking for $ac_func" >&5 +echo "configure:6594: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6642,12 +6645,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6646: checking for $ac_func" >&5 +echo "configure:6649: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6697,12 +6700,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6701: checking for $ac_func" >&5 +echo "configure:6704: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6752,12 +6755,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6756: checking for $ac_func" >&5 +echo "configure:6759: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6787: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6807,12 +6810,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6811: checking for $ac_func" >&5 +echo "configure:6814: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6842: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6862,12 +6865,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6866: checking for $ac_func" >&5 +echo "configure:6869: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6921,9 +6924,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6925: checking for stat64 in " >&5 +echo "configure:6928: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6954,9 +6957,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6958: checking for lstat64 in " >&5 +echo "configure:6961: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6987,9 +6990,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6991: checking for fstat64 in " >&5 +echo "configure:6994: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7021,7 +7024,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7025: checking for dn_expand in -lresolv" >&5 +echo "configure:7028: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7029,7 +7032,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7078,12 +7081,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7082: checking for $ac_func" >&5 +echo "configure:7085: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7113: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7131,7 +7134,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7135: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7138: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7139,7 +7142,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7180,12 +7183,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7184: checking for $ac_func" >&5 +echo "configure:7187: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7239,12 +7242,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7243: checking for $ac_func" >&5 +echo "configure:7246: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7292,7 +7295,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7296: checking for putprpwnam in -lsec" >&5 +echo "configure:7299: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7300,7 +7303,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7341,12 +7344,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7345: checking for $ac_func" >&5 +echo "configure:7348: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7401,12 +7404,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7405: checking for $ac_func" >&5 +echo "configure:7408: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7454,7 +7457,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7458: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7461: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7462,7 +7465,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7503,12 +7506,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7507: checking for $ac_func" >&5 +echo "configure:7510: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7562,12 +7565,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7566: checking for $ac_func" >&5 +echo "configure:7569: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7597: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7615,7 +7618,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7619: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7622: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7623,7 +7626,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7664,12 +7667,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7668: checking for $ac_func" >&5 +echo "configure:7671: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7725,12 +7728,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7729: checking for $ac_func" >&5 +echo "configure:7732: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7778,7 +7781,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7782: checking for getspnam in -lgen" >&5 +echo "configure:7785: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7786,7 +7789,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7827,12 +7830,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7831: checking for $ac_func" >&5 +echo "configure:7834: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7887,12 +7890,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7891: checking for $ac_func" >&5 +echo "configure:7894: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7940,7 +7943,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7944: checking for getspnam in -lsecurity" >&5 +echo "configure:7947: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7948,7 +7951,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7966: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7989,12 +7992,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7993: checking for $ac_func" >&5 +echo "configure:7996: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8048,12 +8051,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8052: checking for $ac_func" >&5 +echo "configure:8055: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8101,7 +8104,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8105: checking for getspnam in -lsec" >&5 +echo "configure:8108: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8109,7 +8112,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8150,12 +8153,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8154: checking for $ac_func" >&5 +echo "configure:8157: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8210,12 +8213,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8214: checking for $ac_func" >&5 +echo "configure:8217: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8263,7 +8266,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8267: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8270: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8271,7 +8274,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8312,12 +8315,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8316: checking for $ac_func" >&5 +echo "configure:8319: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8371,12 +8374,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8375: checking for $ac_func" >&5 +echo "configure:8378: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8424,7 +8427,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8428: checking for bigcrypt in -lsec" >&5 +echo "configure:8431: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8432,7 +8435,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8473,12 +8476,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8477: checking for $ac_func" >&5 +echo "configure:8480: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8533,12 +8536,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8537: checking for $ac_func" >&5 +echo "configure:8540: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8586,7 +8589,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8590: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8593: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8594,7 +8597,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8635,12 +8638,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8639: checking for $ac_func" >&5 +echo "configure:8642: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8694,12 +8697,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8698: checking for $ac_func" >&5 +echo "configure:8701: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8747,7 +8750,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8751: checking for getprpwnam in -lsec" >&5 +echo "configure:8754: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8755,7 +8758,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8796,12 +8799,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8800: checking for $ac_func" >&5 +echo "configure:8803: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8868,7 +8871,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8872: checking ability to build shared libraries" >&5 +echo "configure:8875: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9028,7 +9031,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9032: checking for $ac_word" >&5 +echo "configure:9035: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9085,17 +9088,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9089: checking linker flags for shared libraries" >&5 +echo "configure:9092: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9092: checking compiler flags for position-independent code" >&5 +echo "configure:9095: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9099: checking whether building shared libraries actually works" >&5 +echo "configure:9102: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9126,7 +9129,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9130: checking for long long" >&5 +echo "configure:9133: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9135,12 +9138,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9167,20 +9170,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9171: checking for LL suffix on long long integers" >&5 +echo "configure:9174: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9184: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9187: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9202,7 +9205,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9206: checking for 64 bit off_t" >&5 +echo "configure:9209: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9211,13 +9214,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9240,7 +9243,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9244: checking for off64_t" >&5 +echo "configure:9247: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9249,7 +9252,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9282,7 +9285,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9286: checking for 64 bit ino_t" >&5 +echo "configure:9289: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9291,13 +9294,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9320,7 +9323,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9324: checking for ino64_t" >&5 +echo "configure:9327: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9329,7 +9332,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9362,7 +9365,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9366: checking for dev64_t" >&5 +echo "configure:9369: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9371,7 +9374,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9404,13 +9407,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9408: checking for struct dirent64" >&5 +echo "configure:9411: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9429: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9443,7 +9446,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9447: checking for major macro" >&5 +echo "configure:9450: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9452,7 +9455,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9484,7 +9487,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9488: checking for minor macro" >&5 +echo "configure:9491: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9493,7 +9496,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9525,7 +9528,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9529: checking for unsigned char" >&5 +echo "configure:9532: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9534,12 +9537,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9562,13 +9565,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9566: checking for sin_len in sock" >&5 +echo "configure:9569: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9577,7 +9580,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9581: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9584: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9598,13 +9601,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9602: checking whether seekdir returns void" >&5 +echo "configure:9605: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9613,7 +9616,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9617: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9620: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9634,20 +9637,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9638: checking for __FILE__ macro" >&5 +echo "configure:9641: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9668,20 +9671,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9672: checking for __FUNCTION__ macro" >&5 +echo "configure:9675: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9685: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9688: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9702,7 +9705,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9706: checking if gettimeofday takes tz argument" >&5 +echo "configure:9709: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9711,14 +9714,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9741,13 +9744,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9745: checking for __va_copy" >&5 +echo "configure:9748: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9755,7 +9758,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9759: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9776,7 +9779,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9780: checking for C99 vsnprintf" >&5 +echo "configure:9783: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9785,7 +9788,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9812,7 +9815,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9835,7 +9838,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9839: checking for broken readdir" >&5 +echo "configure:9842: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9844,7 +9847,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9852,7 +9855,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9875,13 +9878,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9879: checking for utimbuf" >&5 +echo "configure:9882: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9889,7 +9892,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9896: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9913,12 +9916,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9917: checking for $ac_func" >&5 +echo "configure:9920: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9967,13 +9970,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9971: checking for ut_name in utmp" >&5 +echo "configure:9974: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9981,7 +9984,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9985: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9988: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10002,13 +10005,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10006: checking for ut_user in utmp" >&5 +echo "configure:10009: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10016,7 +10019,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10020: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10023: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10037,13 +10040,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10041: checking for ut_id in utmp" >&5 +echo "configure:10044: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10051,7 +10054,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10058: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10072,13 +10075,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10076: checking for ut_host in utmp" >&5 +echo "configure:10079: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10086,7 +10089,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10093: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10107,13 +10110,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10111: checking for ut_time in utmp" >&5 +echo "configure:10114: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10121,7 +10124,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10128: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10142,13 +10145,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10146: checking for ut_tv in utmp" >&5 +echo "configure:10149: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10156,7 +10159,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10177,13 +10180,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10181: checking for ut_type in utmp" >&5 +echo "configure:10184: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10191,7 +10194,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10212,13 +10215,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10216: checking for ut_pid in utmp" >&5 +echo "configure:10219: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10226,7 +10229,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10230: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10233: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10247,13 +10250,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10251: checking for ut_exit in utmp" >&5 +echo "configure:10254: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10261,7 +10264,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10268: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10282,13 +10285,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10286: checking for ut_addr in utmp" >&5 +echo "configure:10289: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10296,7 +10299,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10303: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10318,13 +10321,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10322: checking whether pututline returns pointer" >&5 +echo "configure:10325: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10332,7 +10335,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10336: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10339: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10354,13 +10357,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10358: checking for ut_syslen in utmpx" >&5 +echo "configure:10361: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10368,7 +10371,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10372: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10375: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10392,7 +10395,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10396: checking whether to use libiconv" >&5 +echo "configure:10399: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10405,7 +10408,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10409: checking for iconv_open in -liconv" >&5 +echo "configure:10412: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10413,7 +10416,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10467,7 +10470,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10471: checking for working iconv" >&5 +echo "configure:10474: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10476,7 +10479,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10487,7 +10490,7 @@ main() { } EOF -if { (eval echo configure:10491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10511,7 +10514,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10515: checking for Linux kernel oplocks" >&5 +echo "configure:10518: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10520,7 +10523,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10534,7 +10537,7 @@ main() { } EOF -if { (eval echo configure:10538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10557,7 +10560,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10561: checking for kernel change notify support" >&5 +echo "configure:10564: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10566,7 +10569,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10580,7 +10583,7 @@ main() { } EOF -if { (eval echo configure:10584: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10603,7 +10606,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10607: checking for kernel share modes" >&5 +echo "configure:10610: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10612,7 +10615,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10628,7 +10631,7 @@ main() { } EOF -if { (eval echo configure:10632: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10654,13 +10657,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10658: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10661: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10668,7 +10671,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10672: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10675: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10689,7 +10692,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10693: checking for irix specific capabilities" >&5 +echo "configure:10696: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10698,7 +10701,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10713,7 +10716,7 @@ main() { } EOF -if { (eval echo configure:10717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10741,13 +10744,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10745: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10748: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10757,7 +10760,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10764: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10778,13 +10781,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10782: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10785: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10794,7 +10797,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10798: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10801: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10815,13 +10818,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10819: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10822: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10831,7 +10834,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10835: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10838: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10852,13 +10855,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10856: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10859: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10868,7 +10871,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10875: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10890,13 +10893,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10894: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10897: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10910,7 +10913,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10914: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10917: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10931,16 +10934,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10935: checking for test routines" >&5 +echo "configure:10938: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10954,7 +10957,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10958: checking for ftruncate extend" >&5 +echo "configure:10961: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10963,11 +10966,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10990,7 +10993,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:10994: checking for AF_LOCAL socket support" >&5 +echo "configure:10997: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10999,11 +11002,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11010: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11027,7 +11030,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11031: checking for broken getgroups" >&5 +echo "configure:11034: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11036,11 +11039,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11063,7 +11066,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11067: checking whether getpass should be replaced" >&5 +echo "configure:11070: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11071,7 +11074,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11091: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11107,7 +11110,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11111: checking for broken inet_ntoa" >&5 +echo "configure:11114: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11116,7 +11119,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11130,7 +11133,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11153,7 +11156,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11157: checking for secure mkstemp" >&5 +echo "configure:11160: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11162,7 +11165,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11179,7 +11182,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11202,7 +11205,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11206: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11209: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11211,12 +11214,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11239,7 +11242,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11243: checking for root" >&5 +echo "configure:11246: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11248,11 +11251,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11280,7 +11283,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11284: checking for iface AIX" >&5 +echo "configure:11287: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11289,7 +11292,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11321,7 +11324,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11325: checking for iface ifconf" >&5 +echo "configure:11328: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11330,7 +11333,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11363,7 +11366,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11367: checking for iface ifreq" >&5 +echo "configure:11370: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11372,7 +11375,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11387: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11409,7 +11412,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11413: checking for setresuid" >&5 +echo "configure:11416: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11418,7 +11421,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11452,7 +11455,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11456: checking for setreuid" >&5 +echo "configure:11459: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11461,7 +11464,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11494,7 +11497,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11498: checking for seteuid" >&5 +echo "configure:11501: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11503,7 +11506,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11536,7 +11539,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11540: checking for setuidx" >&5 +echo "configure:11543: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11545,7 +11548,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11578,7 +11581,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11582: checking for working mmap" >&5 +echo "configure:11585: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11587,11 +11590,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11598: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11614,7 +11617,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11618: checking for ftruncate needs root" >&5 +echo "configure:11621: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11623,11 +11626,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11634: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11650,7 +11653,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11654: checking for fcntl locking" >&5 +echo "configure:11657: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11659,11 +11662,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11686,7 +11689,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11690: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11693: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11695,11 +11698,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11724,7 +11727,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11728: checking for 64 bit fcntl locking" >&5 +echo "configure:11731: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11733,7 +11736,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11782,13 +11785,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11786: checking for st_blocks in struct stat" >&5 +echo "configure:11789: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11797,7 +11800,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11801: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11804: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11818,13 +11821,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11822: checking for st_blksize in struct stat" >&5 +echo "configure:11825: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11833,7 +11836,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11837: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11856,13 +11859,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11860: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11863: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11883: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11899,13 +11902,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11903: checking for broken nisplus include files" >&5 +echo "configure:11906: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11915,7 +11918,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11939,7 +11942,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11943: checking whether to use smbwrapper" >&5 +echo "configure:11946: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11986,7 +11989,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11990: checking whether to use AFS clear-text auth" >&5 +echo "configure:11993: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12012,7 +12015,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12016: checking whether to use DFS clear-text auth" >&5 +echo "configure:12019: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12038,7 +12041,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12042: checking for /usr/kerberos" >&5 +echo "configure:12045: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12051,7 +12054,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12055: checking for kerberos 5 install path" >&5 +echo "configure:12058: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12080,17 +12083,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12084: checking for $ac_hdr" >&5 +echo "configure:12087: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12094: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12097: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12123,17 +12126,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12127: checking for $ac_hdr" >&5 +echo "configure:12130: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12137: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12140: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12163,7 +12166,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12167: checking for _et_list in -lcom_err" >&5 +echo "configure:12170: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12171,7 +12174,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12203,7 +12206,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12207: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12210: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12211,7 +12214,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12247,7 +12250,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12251: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12254: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12255,7 +12258,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12294,7 +12297,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12298: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12301: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12302,7 +12305,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12342,7 +12345,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12346: checking for ber_scanf in -llber" >&5 +echo "configure:12349: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12350,7 +12353,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12368: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12386,7 +12389,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12390: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12393: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12394,7 +12397,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12436,12 +12439,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12440: checking for $ac_func" >&5 +echo "configure:12443: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12489,13 +12492,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12493: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12496: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12504,7 +12507,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12508: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12511: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12526,7 +12529,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12530: checking whether to use AUTOMOUNT" >&5 +echo "configure:12533: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12551,7 +12554,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12555: checking whether to use SMBMOUNT" >&5 +echo "configure:12558: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12588,7 +12591,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12592: checking whether to use PAM" >&5 +echo "configure:12595: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12614,7 +12617,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12618: checking for pam_get_data in -lpam" >&5 +echo "configure:12621: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12622,7 +12625,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12660,7 +12663,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12664: checking whether to use pam_smbpass" >&5 +echo "configure:12667: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12698,12 +12701,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12702: checking for $ac_func" >&5 +echo "configure:12705: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12752,7 +12755,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12756: checking for crypt in -lcrypt" >&5 +echo "configure:12759: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12760,7 +12763,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12778: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12806,7 +12809,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12810: checking for a crypt that needs truncated salt" >&5 +echo "configure:12813: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12815,11 +12818,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12845,7 +12848,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12849: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12852: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12877,7 +12880,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12881: checking whether to use TDB SAM database" >&5 +echo "configure:12884: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12902,7 +12905,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12906: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12909: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12933,7 +12936,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12937: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12940: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12958,7 +12961,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12962: checking whether to use syslog logging" >&5 +echo "configure:12965: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12983,7 +12986,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12987: checking whether to use profiling" >&5 +echo "configure:12990: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13011,7 +13014,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13015: checking whether to support disk-quotas" >&5 +echo "configure:13018: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13022,13 +13025,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13026: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13029: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13040,7 +13043,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13044: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13089,7 +13092,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13093: checking whether to support utmp accounting" >&5 +echo "configure:13096: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13114,7 +13117,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13118: checking chosen man pages' language(s)" >&5 +echo "configure:13121: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13145,7 +13148,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13149: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13152: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13173,14 +13176,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13177: checking how to get filesystem space usage" >&5 +echo "configure:13180: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13184: checking statvfs64 function (SVR4)" >&5 +echo "configure:13187: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13188,7 +13191,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13209: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13235,12 +13238,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13239: checking statvfs function (SVR4)" >&5 +echo "configure:13242: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13248,7 +13251,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13273,7 +13276,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13277: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13280: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13281,7 +13284,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13294,7 +13297,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13321,7 +13324,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13325: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13328: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13329,7 +13332,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13375,7 +13378,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13379: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13382: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13383,7 +13386,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13393,7 +13396,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13420,7 +13423,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13424: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13427: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13428,7 +13431,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13444,7 +13447,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13471,7 +13474,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13475: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13478: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13479,7 +13482,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13499,7 +13502,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13532,9 +13535,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13536: checking if large file support can be enabled" >&5 +echo "configure:13539: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13554: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13612,7 +13615,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13616: checking whether to support ACLs" >&5 +echo "configure:13619: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13665,7 +13668,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13669: checking for acl_get_file in -lacl" >&5 +echo "configure:13672: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13673,7 +13676,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13712,13 +13715,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13716: checking for ACL support" >&5 +echo "configure:13719: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13726,7 +13729,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13746,13 +13749,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13750: checking for acl_get_perm_np" >&5 +echo "configure:13753: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13760,7 +13763,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13807,7 +13810,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13811: checking whether to build winbind" >&5 +echo "configure:13814: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -13903,20 +13906,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:13907: checking whether struct passwd has pw_comment" >&5 +echo "configure:13910: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:13920: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -13941,20 +13944,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:13945: checking whether struct passwd has pw_age" >&5 +echo "configure:13948: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:13958: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13961: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -13993,7 +13996,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:13997: checking for poptGetContext in -lpopt" >&5 +echo "configure:14000: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14001,7 +14004,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14036,7 +14039,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14040: checking whether to use included popt" >&5 +echo "configure:14043: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14059,16 +14062,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14063: checking configure summary" >&5 +echo "configure:14066: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -14188,7 +14191,7 @@ done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" -trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile python/setup.py include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then diff --git a/source/configure.in b/source/configure.in index b1f1c8aec7e..baeebd66540 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2828,7 +2828,7 @@ AC_SUBST(builddir) # I added make files that are outside /source directory. # I know this is not a good solution, will work out a better # solution soon. --simo -AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) +AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile python/setup.py) ################################################# # Print very concise instructions on building/use -- cgit From 2ea647bbfaba5a4ee7cb232ae1a21acbd2a9b5c6 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 06:05:39 +0000 Subject: Add --with-python=PYTHONNAME configure option, so that the libraries get linked for the appropriate version. --- source/Makefile.in | 6 +- source/configure | 1637 ++++++++++++++++++++++++++------------------------- source/configure.in | 13 + 3 files changed, 844 insertions(+), 812 deletions(-) diff --git a/source/Makefile.in b/source/Makefile.in index 2038036a92e..18df73a6da3 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -18,6 +18,7 @@ LDFLAGS=@LDFLAGS@ LDSHFLAGS=@LDSHFLAGS@ @LDFLAGS@ @CFLAGS@ AWK=@AWK@ DYNEXP=@DYNEXP@ +PYTHON=@PYTHON@ TERMLDFLAGS=@TERMLDFLAGS@ TERMLIBS=@TERMLIBS@ @@ -881,9 +882,8 @@ python_common_proto: $(PY_COMMON_PROTO_OBJ) python_ext: $(PYTHON_OBJS) - @echo python python/setup.py build - @PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS)" \ - python python/setup.py build + PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS)" \ + $(PYTHON) python/setup.py build # revert to the previously installed version revert: diff --git a/source/configure b/source/configure index fca94740066..fc2ed311bd7 100755 --- a/source/configure +++ b/source/configure @@ -84,6 +84,8 @@ ac_help="$ac_help --with-winbind Build winbind (default, if supported by OS)" ac_help="$ac_help --with-included-popt use bundled popt library, not from system" +ac_help="$ac_help + --with-python=PYTHONNAME build Python libraries" # Initialize some variables set by options. # The variables have the same names as the options, with @@ -816,7 +818,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:820: checking for $ac_word" >&5 +echo "configure:822: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -846,7 +848,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:850: checking for $ac_word" >&5 +echo "configure:852: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -897,7 +899,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:901: checking for $ac_word" >&5 +echo "configure:903: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -929,7 +931,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:933: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:935: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -940,12 +942,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 944 "configure" +#line 946 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -971,12 +973,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:975: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:977: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:980: checking whether we are using GNU C" >&5 +echo "configure:982: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -985,7 +987,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:989: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1004,7 +1006,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1008: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1010: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1066,7 +1068,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1070: checking for a BSD compatible install" >&5 +echo "configure:1072: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1123,7 +1125,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1127: checking for $ac_word" >&5 +echo "configure:1129: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1155,7 +1157,7 @@ done LD=ld echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1159: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1161: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1171,7 +1173,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1175: checking for POSIXized ISC" >&5 +echo "configure:1177: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1194,10 +1196,10 @@ fi if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:1198: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:1200: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:1201: checking whether cc understands -c and -o together" >&5 +echo "configure:1203: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -1209,16 +1211,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:1213: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1214: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:1215: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1216: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1222: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:1223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1224: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -1252,20 +1254,20 @@ fi echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6 -echo "configure:1256: checking that the C compiler understands volatile" >&5 +echo "configure:1258: checking that the C compiler understands volatile" >&5 if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { volatile int i = 0 ; return 0; } EOF -if { (eval echo configure:1269: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1271: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_volatile=yes else @@ -1314,7 +1316,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1318: checking host system type" >&5 +echo "configure:1320: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1335,7 +1337,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1339: checking target system type" >&5 +echo "configure:1341: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1353,7 +1355,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1357: checking build system type" >&5 +echo "configure:1359: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1387,7 +1389,7 @@ esac echo $ac_n "checking config.cache system type""... $ac_c" 1>&6 -echo "configure:1391: checking config.cache system type" >&5 +echo "configure:1393: checking config.cache system type" >&5 if { test x"${ac_cv_host_system_type+set}" = x"set" && test x"$ac_cv_host_system_type" != x"$host"; } || { test x"${ac_cv_build_system_type+set}" = x"set" && @@ -1415,7 +1417,7 @@ case "$host_os" in *hpux*) echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6 -echo "configure:1419: checking whether ${CC-cc} accepts -Ae" >&5 +echo "configure:1421: checking whether ${CC-cc} accepts -Ae" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1576,14 +1578,14 @@ EOF *sysv4*) if test $host = mips-sni-sysv4 ; then echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1580: checking for LFS support" >&5 +echo "configure:1582: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then SINIX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1595,7 +1597,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1599: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then SINIX_LFS_SUPPORT=yes else @@ -1626,14 +1628,14 @@ EOF # *linux*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1630: checking for LFS support" >&5 +echo "configure:1632: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then LINUX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1671,7 +1673,7 @@ main() { } EOF -if { (eval echo configure:1675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then LINUX_LFS_SUPPORT=yes else @@ -1704,14 +1706,14 @@ EOF *hurd*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1708: checking for LFS support" >&5 +echo "configure:1710: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then GLIBC_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1723,7 +1725,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then GLIBC_LFS_SUPPORT=yes else @@ -1753,21 +1755,21 @@ EOF esac echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1757: checking for inline" >&5 +echo "configure:1759: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1773: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -1793,7 +1795,7 @@ EOF esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1797: checking how to run the C preprocessor" >&5 +echo "configure:1799: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1808,13 +1810,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1818: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1820: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1825,13 +1827,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1842,13 +1844,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1854: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1873,12 +1875,12 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1877: checking for ANSI C header files" >&5 +echo "configure:1879: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1886,7 +1888,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1890: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1892: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1903,7 +1905,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1921,7 +1923,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1942,7 +1944,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1953,7 +1955,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1981,12 +1983,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1985: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1987: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -1994,7 +1996,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:1998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2000: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2019,7 +2021,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2023: checking for opendir in -ldir" >&5 +echo "configure:2025: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2027,7 +2029,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2060,7 +2062,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2064: checking for opendir in -lx" >&5 +echo "configure:2066: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2068,7 +2070,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2102,12 +2104,12 @@ fi fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2106: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2108: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2116,7 +2118,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2137,12 +2139,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2141: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2143: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2158,7 +2160,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2182,17 +2184,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2186: checking for $ac_hdr" >&5 +echo "configure:2188: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2196: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2198: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2222,17 +2224,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2226: checking for $ac_hdr" >&5 +echo "configure:2228: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2236: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2238: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2262,17 +2264,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2266: checking for $ac_hdr" >&5 +echo "configure:2268: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2276: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2278: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2302,17 +2304,17 @@ for ac_hdr in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2306: checking for $ac_hdr" >&5 +echo "configure:2308: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2316: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2318: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2342,17 +2344,17 @@ for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h std do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2346: checking for $ac_hdr" >&5 +echo "configure:2348: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2356: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2358: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2382,17 +2384,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2386: checking for $ac_hdr" >&5 +echo "configure:2388: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2396: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2398: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2422,17 +2424,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2426: checking for $ac_hdr" >&5 +echo "configure:2428: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2436: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2438: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2462,17 +2464,17 @@ for ac_hdr in security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2466: checking for $ac_hdr" >&5 +echo "configure:2468: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2476: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2478: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2502,17 +2504,17 @@ for ac_hdr in sys/syslog.h syslog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2506: checking for $ac_hdr" >&5 +echo "configure:2508: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2516: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2518: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2546,14 +2548,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2557: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2559: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2575,17 +2577,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2579: checking for $ac_hdr" >&5 +echo "configure:2581: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2591: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2615,17 +2617,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2619: checking for $ac_hdr" >&5 +echo "configure:2621: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2631: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2655,17 +2657,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2659: checking for $ac_hdr" >&5 +echo "configure:2661: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2669: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2671: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2695,17 +2697,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2699: checking for $ac_hdr" >&5 +echo "configure:2701: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2711: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2735,17 +2737,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2739: checking for $ac_hdr" >&5 +echo "configure:2741: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2777,17 +2779,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2781: checking for $ac_hdr" >&5 +echo "configure:2783: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2819,17 +2821,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2823: checking for $ac_hdr" >&5 +echo "configure:2825: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2861,17 +2863,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2865: checking for $ac_hdr" >&5 +echo "configure:2867: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2875: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2877: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2899,7 +2901,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2903: checking size of int" >&5 +echo "configure:2905: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2907,7 +2909,7 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < #include @@ -2919,7 +2921,7 @@ main() exit(0); } EOF -if { (eval echo configure:2923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2939,7 +2941,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2943: checking size of long" >&5 +echo "configure:2945: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2947,7 +2949,7 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < #include @@ -2959,7 +2961,7 @@ main() exit(0); } EOF -if { (eval echo configure:2963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2979,7 +2981,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2983: checking size of short" >&5 +echo "configure:2985: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2987,7 +2989,7 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < #include @@ -2999,7 +3001,7 @@ main() exit(0); } EOF -if { (eval echo configure:3003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3020,12 +3022,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3024: checking for working const" >&5 +echo "configure:3026: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3080: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3095,21 +3097,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3099: checking for inline" >&5 +echo "configure:3101: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3115: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3135,14 +3137,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3139: checking whether byte ordering is bigendian" >&5 +echo "configure:3141: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3153,11 +3155,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3159: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3168,7 +3170,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3172: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3174: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3188,7 +3190,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3225,14 +3227,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3229: checking whether char is unsigned" >&5 +echo "configure:3231: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3289,12 +3291,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3293: checking return type of signal handlers" >&5 +echo "configure:3295: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3311,7 +3313,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3315: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3317: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3330,12 +3332,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3334: checking for uid_t in sys/types.h" >&5 +echo "configure:3336: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3364,12 +3366,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3368: checking for mode_t" >&5 +echo "configure:3370: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3397,12 +3399,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3401: checking for off_t" >&5 +echo "configure:3403: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3430,12 +3432,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3434: checking for size_t" >&5 +echo "configure:3436: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3463,12 +3465,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3467: checking for pid_t" >&5 +echo "configure:3469: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3496,12 +3498,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3500: checking for st_rdev in struct stat" >&5 +echo "configure:3502: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3509,7 +3511,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3530,12 +3532,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3534: checking for d_off in dirent" >&5 +echo "configure:3536: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3545,7 +3547,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3549: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3551: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3566,12 +3568,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3570: checking for ino_t" >&5 +echo "configure:3572: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3599,12 +3601,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3603: checking for loff_t" >&5 +echo "configure:3605: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3632,12 +3634,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3636: checking for offset_t" >&5 +echo "configure:3638: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3665,12 +3667,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3669: checking for ssize_t" >&5 +echo "configure:3671: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3698,12 +3700,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3702: checking for wchar_t" >&5 +echo "configure:3704: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3745,7 +3747,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3749: checking for $ac_word" >&5 +echo "configure:3751: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3794,12 +3796,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3798: checking for $ac_func" >&5 +echo "configure:3800: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3848,7 +3850,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3852: checking for dlopen in -ldl" >&5 +echo "configure:3854: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3856,7 +3858,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3873: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3897,13 +3899,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3901: checking for immediate structures" >&5 +echo "configure:3903: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3921,7 +3923,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3925: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3944,13 +3946,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3948: checking for unix domain sockets" >&5 +echo "configure:3950: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3965,7 +3967,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3971: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3987,13 +3989,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3991: checking for socklen_t type" >&5 +echo "configure:3993: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4006,7 +4008,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4012: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4027,13 +4029,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4031: checking for sig_atomic_t type" >&5 +echo "configure:4033: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4046,7 +4048,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4050: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4052: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4069,20 +4071,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4073: checking for errno declaration" >&5 +echo "configure:4075: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4086: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4104,20 +4106,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4108: checking for setresuid declaration" >&5 +echo "configure:4110: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4121: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4123: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4139,20 +4141,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4143: checking for setresgid declaration" >&5 +echo "configure:4145: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4156: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4174,20 +4176,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4178: checking for asprintf declaration" >&5 +echo "configure:4180: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4209,20 +4211,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4213: checking for vasprintf declaration" >&5 +echo "configure:4215: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4226: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4244,20 +4246,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4248: checking for vsnprintf declaration" >&5 +echo "configure:4250: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4261: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4263: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4279,20 +4281,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4283: checking for snprintf declaration" >&5 +echo "configure:4285: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4296: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4298: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4316,7 +4318,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4320: checking for real setresuid" >&5 +echo "configure:4322: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4325,12 +4327,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4355,7 +4357,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4359: checking for real setresgid" >&5 +echo "configure:4361: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4364,13 +4366,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4393,7 +4395,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4397: checking for 8-bit clean memcmp" >&5 +echo "configure:4399: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4401,7 +4403,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4434,12 +4436,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4438: checking for $ac_func" >&5 +echo "configure:4440: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4488,7 +4490,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4492: checking for crypt in -lcrypt" >&5 +echo "configure:4494: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4496,7 +4498,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4540,7 +4542,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4544: checking whether to use readline" >&5 +echo "configure:4546: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4552,17 +4554,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4556: checking for $ac_hdr" >&5 +echo "configure:4558: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4566: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4568: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4592,17 +4594,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4596: checking for $ac_hdr" >&5 +echo "configure:4598: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4606: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4608: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4633,17 +4635,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4637: checking for $ac_hdr" >&5 +echo "configure:4639: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4647: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4649: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4666,7 +4668,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4670: checking for tgetent in -l${termlib}" >&5 +echo "configure:4672: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4674,7 +4676,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4707,7 +4709,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4711: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4713: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4715,7 +4717,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4777,17 +4779,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4781: checking for $ac_hdr" >&5 +echo "configure:4783: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4817,17 +4819,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4821: checking for $ac_hdr" >&5 +echo "configure:4823: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4831: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4858,17 +4860,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4862: checking for $ac_hdr" >&5 +echo "configure:4864: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4872: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4891,7 +4893,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4895: checking for tgetent in -l${termlib}" >&5 +echo "configure:4897: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4899,7 +4901,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4916: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4932,7 +4934,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4936: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4938: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4940,7 +4942,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5001,7 +5003,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5005: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5007: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5009,7 +5011,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5053,12 +5055,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5057: checking for $ac_func" >&5 +echo "configure:5059: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5109,7 +5111,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5113: checking for printf in -lnsl_s" >&5 +echo "configure:5115: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5117,7 +5119,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5159,7 +5161,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5163: checking for printf in -lnsl" >&5 +echo "configure:5165: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5167,7 +5169,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5209,7 +5211,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5213: checking for connect in -lsocket" >&5 +echo "configure:5215: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5217,7 +5219,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5259,7 +5261,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5263: checking for connect in -linet" >&5 +echo "configure:5265: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5267,7 +5269,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5322,12 +5324,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5326: checking for $ac_func" >&5 +echo "configure:5328: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5376,7 +5378,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5380: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5382: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5384,7 +5386,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5425,12 +5427,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5429: checking for $ac_func" >&5 +echo "configure:5431: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5486,12 +5488,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5490: checking for $ac_func" >&5 +echo "configure:5492: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5541,12 +5543,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5545: checking for $ac_func" >&5 +echo "configure:5547: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5596,12 +5598,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5600: checking for $ac_func" >&5 +echo "configure:5602: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5651,12 +5653,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5655: checking for $ac_func" >&5 +echo "configure:5657: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5706,12 +5708,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5710: checking for $ac_func" >&5 +echo "configure:5712: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5761,12 +5763,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5765: checking for $ac_func" >&5 +echo "configure:5767: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5795: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5816,12 +5818,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5820: checking for $ac_func" >&5 +echo "configure:5822: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5871,12 +5873,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5875: checking for $ac_func" >&5 +echo "configure:5877: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5905: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5926,12 +5928,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5930: checking for $ac_func" >&5 +echo "configure:5932: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5981,12 +5983,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5985: checking for $ac_func" >&5 +echo "configure:5987: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6015: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6037,12 +6039,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6041: checking for $ac_func" >&5 +echo "configure:6043: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6094,12 +6096,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6098: checking for $ac_func" >&5 +echo "configure:6100: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6150,12 +6152,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6154: checking for $ac_func" >&5 +echo "configure:6156: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6205,12 +6207,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6209: checking for $ac_func" >&5 +echo "configure:6211: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6260,12 +6262,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6264: checking for $ac_func" >&5 +echo "configure:6266: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6315,12 +6317,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6319: checking for $ac_func" >&5 +echo "configure:6321: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6370,12 +6372,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6374: checking for $ac_func" >&5 +echo "configure:6376: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6425,12 +6427,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6429: checking for $ac_func" >&5 +echo "configure:6431: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6480,12 +6482,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6484: checking for $ac_func" >&5 +echo "configure:6486: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6535,12 +6537,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6539: checking for $ac_func" >&5 +echo "configure:6541: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6590,12 +6592,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6594: checking for $ac_func" >&5 +echo "configure:6596: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6624: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6645,12 +6647,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6649: checking for $ac_func" >&5 +echo "configure:6651: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6700,12 +6702,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6704: checking for $ac_func" >&5 +echo "configure:6706: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6755,12 +6757,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6759: checking for $ac_func" >&5 +echo "configure:6761: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6810,12 +6812,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6814: checking for $ac_func" >&5 +echo "configure:6816: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6865,12 +6867,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6869: checking for $ac_func" >&5 +echo "configure:6871: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6924,9 +6926,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6928: checking for stat64 in " >&5 +echo "configure:6930: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6957,9 +6959,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6961: checking for lstat64 in " >&5 +echo "configure:6963: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6990,9 +6992,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6994: checking for fstat64 in " >&5 +echo "configure:6996: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7010: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7024,7 +7026,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7028: checking for dn_expand in -lresolv" >&5 +echo "configure:7030: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7032,7 +7034,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7049: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7081,12 +7083,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7085: checking for $ac_func" >&5 +echo "configure:7087: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7115: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7134,7 +7136,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7138: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7140: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7142,7 +7144,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7183,12 +7185,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7187: checking for $ac_func" >&5 +echo "configure:7189: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7242,12 +7244,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7246: checking for $ac_func" >&5 +echo "configure:7248: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7276: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7295,7 +7297,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7299: checking for putprpwnam in -lsec" >&5 +echo "configure:7301: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7303,7 +7305,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7344,12 +7346,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7348: checking for $ac_func" >&5 +echo "configure:7350: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7404,12 +7406,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7408: checking for $ac_func" >&5 +echo "configure:7410: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7457,7 +7459,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7461: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7463: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7465,7 +7467,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7506,12 +7508,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7510: checking for $ac_func" >&5 +echo "configure:7512: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7540: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7565,12 +7567,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7569: checking for $ac_func" >&5 +echo "configure:7571: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7599: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7618,7 +7620,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7622: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7624: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7626,7 +7628,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7667,12 +7669,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7671: checking for $ac_func" >&5 +echo "configure:7673: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7701: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7728,12 +7730,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7732: checking for $ac_func" >&5 +echo "configure:7734: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7781,7 +7783,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7785: checking for getspnam in -lgen" >&5 +echo "configure:7787: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7789,7 +7791,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7830,12 +7832,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7834: checking for $ac_func" >&5 +echo "configure:7836: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7890,12 +7892,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7894: checking for $ac_func" >&5 +echo "configure:7896: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7924: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7943,7 +7945,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7947: checking for getspnam in -lsecurity" >&5 +echo "configure:7949: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7951,7 +7953,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7992,12 +7994,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7996: checking for $ac_func" >&5 +echo "configure:7998: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8051,12 +8053,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8055: checking for $ac_func" >&5 +echo "configure:8057: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8104,7 +8106,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8108: checking for getspnam in -lsec" >&5 +echo "configure:8110: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8112,7 +8114,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8153,12 +8155,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8157: checking for $ac_func" >&5 +echo "configure:8159: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8213,12 +8215,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8217: checking for $ac_func" >&5 +echo "configure:8219: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8266,7 +8268,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8270: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8272: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8274,7 +8276,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8315,12 +8317,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8319: checking for $ac_func" >&5 +echo "configure:8321: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8374,12 +8376,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8378: checking for $ac_func" >&5 +echo "configure:8380: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8427,7 +8429,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8431: checking for bigcrypt in -lsec" >&5 +echo "configure:8433: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8435,7 +8437,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8476,12 +8478,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8480: checking for $ac_func" >&5 +echo "configure:8482: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8536,12 +8538,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8540: checking for $ac_func" >&5 +echo "configure:8542: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8589,7 +8591,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8593: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8595: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8597,7 +8599,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8614: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8638,12 +8640,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8642: checking for $ac_func" >&5 +echo "configure:8644: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8697,12 +8699,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8701: checking for $ac_func" >&5 +echo "configure:8703: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8750,7 +8752,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8754: checking for getprpwnam in -lsec" >&5 +echo "configure:8756: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8758,7 +8760,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8799,12 +8801,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8803: checking for $ac_func" >&5 +echo "configure:8805: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8833: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8871,7 +8873,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8875: checking ability to build shared libraries" >&5 +echo "configure:8877: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9031,7 +9033,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9035: checking for $ac_word" >&5 +echo "configure:9037: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9088,17 +9090,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9092: checking linker flags for shared libraries" >&5 +echo "configure:9094: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9095: checking compiler flags for position-independent code" >&5 +echo "configure:9097: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9102: checking whether building shared libraries actually works" >&5 +echo "configure:9104: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9129,7 +9131,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9133: checking for long long" >&5 +echo "configure:9135: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9138,12 +9140,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9170,20 +9172,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9174: checking for LL suffix on long long integers" >&5 +echo "configure:9176: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9187: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9189: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9205,7 +9207,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9209: checking for 64 bit off_t" >&5 +echo "configure:9211: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9214,13 +9216,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9243,7 +9245,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9247: checking for off64_t" >&5 +echo "configure:9249: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9252,7 +9254,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9285,7 +9287,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9289: checking for 64 bit ino_t" >&5 +echo "configure:9291: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9294,13 +9296,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9323,7 +9325,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9327: checking for ino64_t" >&5 +echo "configure:9329: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9332,7 +9334,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9365,7 +9367,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9369: checking for dev64_t" >&5 +echo "configure:9371: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9374,7 +9376,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9407,13 +9409,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9411: checking for struct dirent64" >&5 +echo "configure:9413: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9431: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9446,7 +9448,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9450: checking for major macro" >&5 +echo "configure:9452: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9455,7 +9457,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9487,7 +9489,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9491: checking for minor macro" >&5 +echo "configure:9493: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9496,7 +9498,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9528,7 +9530,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9532: checking for unsigned char" >&5 +echo "configure:9534: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9537,12 +9539,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9565,13 +9567,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9569: checking for sin_len in sock" >&5 +echo "configure:9571: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9580,7 +9582,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9584: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9586: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9601,13 +9603,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9605: checking whether seekdir returns void" >&5 +echo "configure:9607: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9616,7 +9618,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9620: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9622: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9637,20 +9639,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9641: checking for __FILE__ macro" >&5 +echo "configure:9643: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9656: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9671,20 +9673,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9675: checking for __FUNCTION__ macro" >&5 +echo "configure:9677: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9688: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9690: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9705,7 +9707,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9709: checking if gettimeofday takes tz argument" >&5 +echo "configure:9711: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9714,14 +9716,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9744,13 +9746,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9748: checking for __va_copy" >&5 +echo "configure:9750: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9758,7 +9760,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9779,7 +9781,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9783: checking for C99 vsnprintf" >&5 +echo "configure:9785: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9788,7 +9790,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9815,7 +9817,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9838,7 +9840,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9842: checking for broken readdir" >&5 +echo "configure:9844: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9847,7 +9849,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9855,7 +9857,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9861: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9878,13 +9880,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9882: checking for utimbuf" >&5 +echo "configure:9884: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9892,7 +9894,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9896: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9898: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9916,12 +9918,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9920: checking for $ac_func" >&5 +echo "configure:9922: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9970,13 +9972,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9974: checking for ut_name in utmp" >&5 +echo "configure:9976: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9984,7 +9986,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9988: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9990: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10005,13 +10007,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10009: checking for ut_user in utmp" >&5 +echo "configure:10011: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10019,7 +10021,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10023: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10025: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10040,13 +10042,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10044: checking for ut_id in utmp" >&5 +echo "configure:10046: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10054,7 +10056,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10058: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10060: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10075,13 +10077,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10079: checking for ut_host in utmp" >&5 +echo "configure:10081: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10089,7 +10091,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10093: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10095: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10110,13 +10112,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10114: checking for ut_time in utmp" >&5 +echo "configure:10116: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10124,7 +10126,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10128: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10130: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10145,13 +10147,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10149: checking for ut_tv in utmp" >&5 +echo "configure:10151: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10159,7 +10161,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10165: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10180,13 +10182,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10184: checking for ut_type in utmp" >&5 +echo "configure:10186: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10194,7 +10196,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10200: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10215,13 +10217,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10219: checking for ut_pid in utmp" >&5 +echo "configure:10221: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10229,7 +10231,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10233: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10235: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10250,13 +10252,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10254: checking for ut_exit in utmp" >&5 +echo "configure:10256: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10264,7 +10266,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10268: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10270: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10285,13 +10287,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10289: checking for ut_addr in utmp" >&5 +echo "configure:10291: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10299,7 +10301,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10303: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10305: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10321,13 +10323,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10325: checking whether pututline returns pointer" >&5 +echo "configure:10327: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10335,7 +10337,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10339: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10341: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10357,13 +10359,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10361: checking for ut_syslen in utmpx" >&5 +echo "configure:10363: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10371,7 +10373,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10375: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10377: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10395,7 +10397,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10399: checking whether to use libiconv" >&5 +echo "configure:10401: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10408,7 +10410,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10412: checking for iconv_open in -liconv" >&5 +echo "configure:10414: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10416,7 +10418,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10470,7 +10472,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10474: checking for working iconv" >&5 +echo "configure:10476: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10479,7 +10481,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10490,7 +10492,7 @@ main() { } EOF -if { (eval echo configure:10494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10514,7 +10516,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10518: checking for Linux kernel oplocks" >&5 +echo "configure:10520: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10523,7 +10525,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10537,7 +10539,7 @@ main() { } EOF -if { (eval echo configure:10541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10560,7 +10562,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10564: checking for kernel change notify support" >&5 +echo "configure:10566: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10569,7 +10571,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10583,7 +10585,7 @@ main() { } EOF -if { (eval echo configure:10587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10606,7 +10608,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10610: checking for kernel share modes" >&5 +echo "configure:10612: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10615,7 +10617,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10631,7 +10633,7 @@ main() { } EOF -if { (eval echo configure:10635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10657,13 +10659,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10661: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10663: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10671,7 +10673,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10675: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10677: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10692,7 +10694,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10696: checking for irix specific capabilities" >&5 +echo "configure:10698: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10701,7 +10703,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10716,7 +10718,7 @@ main() { } EOF -if { (eval echo configure:10720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10744,13 +10746,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10748: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10750: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10760,7 +10762,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10764: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10766: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10781,13 +10783,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10785: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10787: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10797,7 +10799,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10801: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10803: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10818,13 +10820,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10822: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10824: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10834,7 +10836,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10838: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10855,13 +10857,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10859: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10861: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10871,7 +10873,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10875: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10877: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10893,13 +10895,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10897: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10899: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10913,7 +10915,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10917: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10934,16 +10936,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10938: checking for test routines" >&5 +echo "configure:10940: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10957,7 +10959,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10961: checking for ftruncate extend" >&5 +echo "configure:10963: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10966,11 +10968,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10993,7 +10995,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:10997: checking for AF_LOCAL socket support" >&5 +echo "configure:10999: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11002,11 +11004,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11030,7 +11032,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11034: checking for broken getgroups" >&5 +echo "configure:11036: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11039,11 +11041,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11049: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11066,7 +11068,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11070: checking whether getpass should be replaced" >&5 +echo "configure:11072: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11074,7 +11076,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11093: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11110,7 +11112,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11114: checking for broken inet_ntoa" >&5 +echo "configure:11116: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11119,7 +11121,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11133,7 +11135,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11156,7 +11158,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11160: checking for secure mkstemp" >&5 +echo "configure:11162: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11165,7 +11167,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11182,7 +11184,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11205,7 +11207,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11209: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11211: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11214,12 +11216,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11242,7 +11244,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11246: checking for root" >&5 +echo "configure:11248: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11251,11 +11253,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11283,7 +11285,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11287: checking for iface AIX" >&5 +echo "configure:11289: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11292,7 +11294,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11324,7 +11326,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11328: checking for iface ifconf" >&5 +echo "configure:11330: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11333,7 +11335,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11366,7 +11368,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11370: checking for iface ifreq" >&5 +echo "configure:11372: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11375,7 +11377,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11412,7 +11414,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11416: checking for setresuid" >&5 +echo "configure:11418: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11421,7 +11423,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11455,7 +11457,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11459: checking for setreuid" >&5 +echo "configure:11461: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11464,7 +11466,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11497,7 +11499,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11501: checking for seteuid" >&5 +echo "configure:11503: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11506,7 +11508,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11539,7 +11541,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11543: checking for setuidx" >&5 +echo "configure:11545: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11548,7 +11550,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11581,7 +11583,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11585: checking for working mmap" >&5 +echo "configure:11587: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11590,11 +11592,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11600: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11617,7 +11619,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11621: checking for ftruncate needs root" >&5 +echo "configure:11623: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11626,11 +11628,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11653,7 +11655,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11657: checking for fcntl locking" >&5 +echo "configure:11659: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11662,11 +11664,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11689,7 +11691,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11693: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11695: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11698,11 +11700,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11727,7 +11729,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11731: checking for 64 bit fcntl locking" >&5 +echo "configure:11733: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11736,7 +11738,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11785,13 +11787,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11789: checking for st_blocks in struct stat" >&5 +echo "configure:11791: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11800,7 +11802,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11804: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11821,13 +11823,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11825: checking for st_blksize in struct stat" >&5 +echo "configure:11827: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11836,7 +11838,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11859,13 +11861,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11863: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11865: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11885: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11902,13 +11904,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11906: checking for broken nisplus include files" >&5 +echo "configure:11908: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11918,7 +11920,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11924: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11942,7 +11944,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11946: checking whether to use smbwrapper" >&5 +echo "configure:11948: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11989,7 +11991,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11993: checking whether to use AFS clear-text auth" >&5 +echo "configure:11995: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12015,7 +12017,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12019: checking whether to use DFS clear-text auth" >&5 +echo "configure:12021: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12041,7 +12043,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12045: checking for /usr/kerberos" >&5 +echo "configure:12047: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12054,7 +12056,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12058: checking for kerberos 5 install path" >&5 +echo "configure:12060: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12083,17 +12085,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12087: checking for $ac_hdr" >&5 +echo "configure:12089: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12097: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12099: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12126,17 +12128,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12130: checking for $ac_hdr" >&5 +echo "configure:12132: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12140: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12142: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12166,7 +12168,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12170: checking for _et_list in -lcom_err" >&5 +echo "configure:12172: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12174,7 +12176,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12206,7 +12208,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12210: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12212: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12214,7 +12216,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12250,7 +12252,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12254: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12256: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12258,7 +12260,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12297,7 +12299,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12301: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12303: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12305,7 +12307,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12345,7 +12347,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12349: checking for ber_scanf in -llber" >&5 +echo "configure:12351: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12353,7 +12355,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12389,7 +12391,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12393: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12395: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12397,7 +12399,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12414: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12439,12 +12441,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12443: checking for $ac_func" >&5 +echo "configure:12445: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12492,13 +12494,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12496: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12498: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12507,7 +12509,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12511: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12529,7 +12531,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12533: checking whether to use AUTOMOUNT" >&5 +echo "configure:12535: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12554,7 +12556,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12558: checking whether to use SMBMOUNT" >&5 +echo "configure:12560: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12591,7 +12593,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12595: checking whether to use PAM" >&5 +echo "configure:12597: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12617,7 +12619,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12621: checking for pam_get_data in -lpam" >&5 +echo "configure:12623: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12625,7 +12627,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12642: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12663,7 +12665,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12667: checking whether to use pam_smbpass" >&5 +echo "configure:12669: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12701,12 +12703,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12705: checking for $ac_func" >&5 +echo "configure:12707: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12755,7 +12757,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12759: checking for crypt in -lcrypt" >&5 +echo "configure:12761: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12763,7 +12765,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12780: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12809,7 +12811,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12813: checking for a crypt that needs truncated salt" >&5 +echo "configure:12815: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12818,11 +12820,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12848,7 +12850,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12852: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12854: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12880,7 +12882,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12884: checking whether to use TDB SAM database" >&5 +echo "configure:12886: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12905,7 +12907,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12909: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12911: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12936,7 +12938,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12940: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12942: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12961,7 +12963,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12965: checking whether to use syslog logging" >&5 +echo "configure:12967: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12986,7 +12988,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12990: checking whether to use profiling" >&5 +echo "configure:12992: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13014,7 +13016,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13018: checking whether to support disk-quotas" >&5 +echo "configure:13020: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13025,13 +13027,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13029: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13031: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13043,7 +13045,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13049: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13092,7 +13094,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13096: checking whether to support utmp accounting" >&5 +echo "configure:13098: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13117,7 +13119,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13121: checking chosen man pages' language(s)" >&5 +echo "configure:13123: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13148,7 +13150,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13152: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13154: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13176,14 +13178,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13180: checking how to get filesystem space usage" >&5 +echo "configure:13182: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13187: checking statvfs64 function (SVR4)" >&5 +echo "configure:13189: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13191,7 +13193,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13238,12 +13240,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13242: checking statvfs function (SVR4)" >&5 +echo "configure:13244: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13251,7 +13253,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13276,7 +13278,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13280: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13282: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13284,7 +13286,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13297,7 +13299,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13324,7 +13326,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13328: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13330: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13332,7 +13334,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13378,7 +13380,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13382: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13384: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13386,7 +13388,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13396,7 +13398,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13423,7 +13425,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13427: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13429: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13431,7 +13433,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13447,7 +13449,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13474,7 +13476,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13478: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13480: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13482,7 +13484,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13502,7 +13504,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13535,9 +13537,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13539: checking if large file support can be enabled" >&5 +echo "configure:13541: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13556: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13615,7 +13617,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13619: checking whether to support ACLs" >&5 +echo "configure:13621: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13668,7 +13670,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13672: checking for acl_get_file in -lacl" >&5 +echo "configure:13674: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13676,7 +13678,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13715,13 +13717,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13719: checking for ACL support" >&5 +echo "configure:13721: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13729,7 +13731,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13749,13 +13751,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13753: checking for acl_get_perm_np" >&5 +echo "configure:13755: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13763,7 +13765,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13810,7 +13812,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13814: checking whether to build winbind" >&5 +echo "configure:13816: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -13906,20 +13908,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:13910: checking whether struct passwd has pw_comment" >&5 +echo "configure:13912: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:13923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13925: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -13944,20 +13946,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:13948: checking whether struct passwd has pw_age" >&5 +echo "configure:13950: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:13961: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13963: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -13996,7 +13998,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14000: checking for poptGetContext in -lpopt" >&5 +echo "configure:14002: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14004,7 +14006,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14039,7 +14041,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14043: checking whether to use included popt" >&5 +echo "configure:14045: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14051,6 +14053,22 @@ fi +################################################# +# Check if the user wants Python + +# At the moment, you can use this to set which Python binary to link +# against. (Libraries built for Python2.2 can't be used by 2.1, +# though they can coexist in different directories.) In the future +# this might make the Python stuff be built by default. + +# Check whether --with-python or --without-python was given. +if test "${with_python+set}" = set; then + withval="$with_python" + PYTHON=${withval-python} +fi + + + ################################################# # do extra things if we are running insure @@ -14062,16 +14080,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14066: checking configure summary" >&5 +echo "configure:14084: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -14284,6 +14302,7 @@ s%@WINBIND_NSS_EXTRA_OBJS@%$WINBIND_NSS_EXTRA_OBJS%g s%@WINBIND_NSS_EXTRA_LIBS@%$WINBIND_NSS_EXTRA_LIBS%g s%@BUILD_POPT@%$BUILD_POPT%g s%@FLAGS1@%$FLAGS1%g +s%@PYTHON@%$PYTHON%g s%@builddir@%$builddir%g CEOF diff --git a/source/configure.in b/source/configure.in index baeebd66540..3a75b32aafa 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2806,6 +2806,19 @@ fi AC_SUBST(BUILD_POPT) AC_SUBST(FLAGS1) +################################################# +# Check if the user wants Python + +# At the moment, you can use this to set which Python binary to link +# against. (Libraries built for Python2.2 can't be used by 2.1, +# though they can coexist in different directories.) In the future +# this might make the Python stuff be built by default. + +AC_ARG_WITH(python, +[ --with-python=PYTHONNAME build Python libraries], +[ PYTHON=${withval-python} ]) +AC_SUBST(PYTHON) + ################################################# # do extra things if we are running insure -- cgit From 5b2fa5260e22c0d8bc9fb0973a6247ad99d2ed4b Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 06:23:43 +0000 Subject: This patch has now been applied and no longer needs to exist separately --- source/python/samba-head.patch | 69 ------------------------------------------ 1 file changed, 69 deletions(-) delete mode 100644 source/python/samba-head.patch diff --git a/source/python/samba-head.patch b/source/python/samba-head.patch deleted file mode 100644 index c48dd8a30a9..00000000000 --- a/source/python/samba-head.patch +++ /dev/null @@ -1,69 +0,0 @@ -Index: Makefile.in -=================================================================== -RCS file: /data/cvs/samba/source/Makefile.in,v -retrieving revision 1.530 -diff -u -r1.530 Makefile.in ---- Makefile.in 8 Sep 2002 14:58:22 -0000 1.530 -+++ Makefile.in 8 Sep 2002 23:56:36 -0000 -@@ -846,6 +846,45 @@ - -$(INSTALLCMD) -d ${prefix}/include - -$(INSTALLCMD) include/libsmbclient.h ${prefix}/include - -+# Python extensions -+ -+PYTHON_OBJS = $(LIB_OBJ) $(LIBSMB_OBJ) $(RPC_PARSE_OBJ) $(UBIQX_OBJ) \ -+ $(PARAM_OBJ) $(LIBMSRPC_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ) $(SECRETS_OBJ) -+ -+PY_SPOOLSS_PROTO_OBJ = python/py_spoolss.o \ -+ python/py_spoolss_printers.o python/py_spoolss_printers_conv.o\ -+ python/py_spoolss_forms.o python/py_spoolss_forms_conv.o \ -+ python/py_spoolss_ports.o python/py_spoolss_ports_conv.o \ -+ python/py_spoolss_drivers.o python/py_spoolss_drivers_conv.o \ -+ python/py_spoolss_jobs.o python/py_spoolss_jobs_conv.o \ -+ python/py_spoolss_printerdata.o -+ -+PY_LSA_PROTO_OBJ = python/py_lsa.o -+ -+PY_COMMON_PROTO_OBJ = python/py_common.c python/py_ntsec.c -+ -+python_proto: python_spoolss_proto python_lsa_proto python_common_proto -+ -+python_spoolss_proto: -+ @cd $(srcdir) && $(SHELL) script/mkproto.sh $(AWK) \ -+ -h _PY_SPOOLSS_PROTO_H python/py_spoolss_proto.h \ -+ $(PY_SPOOLSS_PROTO_OBJ) -+ -+python_lsa_proto: -+ @cd $(srcdir) && $(SHELL) script/mkproto.sh $(AWK) \ -+ -h _PY_LSA_PROTO_H python/py_lsa_proto.h \ -+ $(PY_LSA_PROTO_OBJ) -+ -+python_common_proto: -+ @cd $(srcdir) && $(SHELL) script/mkproto.sh $(AWK) \ -+ -h _PY_COMMON_PROTO_H python/py_common_proto.h \ -+ $(PY_COMMON_PROTO_OBJ) -+ -+python_ext: $(PYTHON_OBJS) -+ @echo python python/setup.py build -+ @PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS)" \ -+ python python/setup.py build -+ - # revert to the previously installed version - revert: - @$(SHELL) $(srcdir)/script/revert.sh $(SBINDIR) $(SPROGS) -Index: configure.in -=================================================================== -RCS file: /data/cvs/samba/source/configure.in,v -retrieving revision 1.336 -diff -u -r1.336 configure.in ---- configure.in 7 Sep 2002 04:08:02 -0000 1.336 -+++ configure.in 8 Sep 2002 23:56:37 -0000 -@@ -2828,7 +2828,7 @@ - # I added make files that are outside /source directory. - # I know this is not a good solution, will work out a better - # solution soon. --simo --AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) -+AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile python/setup.py) - - ################################################# - # Print very concise instructions on building/use -- cgit From a0e58fd2cef5891e874a08f71d5d7a3f10ec6454 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 06:26:41 +0000 Subject: Update documentation for newly merged modules --- source/python/README | 44 +++++++++----------------------------------- 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/source/python/README b/source/python/README index 6d42897bad1..04f794215ab 100644 --- a/source/python/README +++ b/source/python/README @@ -2,44 +2,18 @@ This directory contains Python bindings to allow you to access various aspects of Samba. At the moment their status is "experimental" and they are not built by default. +In order to be able to compile samba-python you need to have python +and the python-dev packages installed. ----- -Quick Install Guide --- -Lines prepended with a $ indicate shell commands. +Python libraries are always built for a particular version of Python +(2.2, 2.1, etc), and libraries built for one version will not be seen +by another. By default Samba's libraries are built for whatever is +installed as "python" on your $PATH, but you can override this using +the --with-python option. For example -1. Requirements + $ ./configure --with-python=python2.2 -In order to be able to compile samba-python you need to have -python and the python-dev packages installed. - -2. Checking out the CVS HEAD branch of Samba and Samba-Python - -In your shell, type: - -$ cvs -d :pserver:cvs@pserver.samba.org:/cvsroot login - -When asked for a password, type 'cvs'. - -Now, type: - -$ cvs -d :pserver:cvs@pserver.samba.org:/cvsroot co samba - -This might probably take a while. When everything is downloaded, -check out the samba-python tree: - -$ cvs -d :pserver:cvs@pserver.samba.org:/cvsroot co samba-python - -Now that you have both cvs modules, move the directory 'samba-python' to -inside the samba source tree, using: - -$ mv samba-python samba/source/python - -Now, go to the samba/source directory and apply the samba-head.patch patch: - -$ cd samba/source && patch -p0 < location/to/samba-python/samba-head.patch - -You can now configure samba as usual and create the python extension: +To build: $ autoconf $ ./configure -- cgit From 1f7ed8bb863fdacd0b9f3bc2e1e5d72ec7051feb Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 06:30:48 +0000 Subject: Import my code to do reasonably fast tdbpack/unpack from Python --- source/python/py_tdbpack.c | 662 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 662 insertions(+) create mode 100644 source/python/py_tdbpack.c diff --git a/source/python/py_tdbpack.c b/source/python/py_tdbpack.c new file mode 100644 index 00000000000..e5044943be3 --- /dev/null +++ b/source/python/py_tdbpack.c @@ -0,0 +1,662 @@ +/* -*- c-file-style: "python"; indent-tabs-mode: nil; -*- + + Python wrapper for Samba tdb pack/unpack functions + Copyright (C) Martin Pool 2002 + + + NOTE PYTHON STYLE GUIDE + http://www.python.org/peps/pep-0007.html + + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + + +#include "Python.h" + +static int pytdbpack_calc_reqd_len(char *format_str, + PyObject *val_seq); + +static PyObject *pytdbpack_unpack_item(char, + char **pbuf, + int *plen); +static int +pytdbpack_calc_item_len(char format_ch, + PyObject *val_obj); + +static PyObject *pytdbpack_pack_data(const char *format_str, + PyObject *val_seq, + unsigned char *buf); + + + +static const char * pytdbpack_docstring = +"Convert between Python values and Samba binary encodings. + +This module is conceptually similar to the standard 'struct' module, but it +uses both a different binary format and a different description string. + +Samba's encoding is based on that used inside DCE-RPC and SMB: a +little-endian, unpadded, non-self-describing binary format. It is intended +that these functions be as similar as possible to the routines in Samba's +tdb/tdbutil module, with appropriate adjustments for Python datatypes. + +Python strings are used to specify the format of data to be packed or +unpacked. + +Strings in TDBs are typically stored in DOS codepages. The caller of this +module must make appropriate translations if necessary, typically to and from +Unicode objects. + +tdbpack format strings: + + 'f': NULL-terminated string in DOS codepage + + 'P': same as 'f' + + 'd': 4 byte little-endian number + + 'w': 2 byte little-endian number + + 'P': \"Pointer\" value -- in the subset of DCERPC used by Samba, this is + really just an \"exists\" or \"does not exist\" flag. The boolean + value of the Python object is used. + + 'B': 4-byte LE length, followed by that many bytes of binary data. + Corresponds to a Python byte string of the appropriate length. + + '$': Special flag indicating that the preceding format code should be + repeated while data remains. This is only supported for unpacking. + + Every code corresponds to a single Python object, except 'B' which + corresponds to two values (length and contents), and '$', which produces + however many make sense. +"; + + +static char const pytdbpack_pack_doc[] = +"pack(format, values) -> buffer +Pack Python objects into Samba binary format according to format string. + +arguments: + format -- string of tdbpack format characters + values -- sequence of value objects corresponding 1:1 to format characters + +returns: + buffer -- string containing packed data + +raises: + IndexError -- if there are not the same number of format codes as of + values + ValueError -- if any of the format characters is illegal + TypeError -- if the format is not a string, or values is not a sequence, + or any of the values is of the wrong type for the corresponding + format character +"; + + +static char const pytdbpack_unpack_doc[] = +"unpack(format, buffer) -> (values, rest) +Unpack Samba binary data according to format string. + +arguments: + format -- string of tdbpack characters + buffer -- string of packed binary data + +returns: + 2-tuple of: + values -- sequence of values corresponding 1:1 to format characters + rest -- string containing data that was not decoded, or '' if the + whole string was consumed + +raises: + IndexError -- if there is insufficient data in the buffer for the + format (or if the data is corrupt and contains a variable-length + field extending past the end) + ValueError -- if any of the format characters is illegal + +notes: + Because unconsumed data is returned, you can feed it back in to the + unpacker to extract further fields. Alternatively, if you wish to modify + some fields near the start of the data, you may be able to save time by + only unpacking and repacking the necessary part. +"; + + + +/* + Game plan is to first of all walk through the arguments and calculate the + total length that will be required. We allocate a Python string of that + size, then walk through again and fill it in. + + We just borrow references to all the passed arguments, since none of them + need to be permanently stored. We transfer ownership to the returned + object. + */ +static PyObject * +pytdbpack_pack(PyObject *self, + PyObject *args) +{ + char *format_str; + PyObject *val_seq, *fast_seq, *buf_str; + int reqd_len; + char *packed_buf; + + /* TODO: Test passing wrong types or too many arguments */ + if (!PyArg_ParseTuple(args, "sO", &format_str, &val_seq)) + return NULL; + + /* Convert into a list or tuple (if not already one), so that we can + * index more easily. */ + fast_seq = PySequence_Fast(val_seq, + __FUNCTION__ ": argument 2 must be sequence"); + if (!fast_seq) + return NULL; + + reqd_len = pytdbpack_calc_reqd_len(format_str, fast_seq); + if (reqd_len == -1) /* exception was thrown */ + return NULL; + + /* Allocate space. + + This design causes an unnecessary copying of the data when Python + constructs an object, and that might possibly be avoided by using a + Buffer object of some kind instead. I'm not doing that for now + though. */ + packed_buf = malloc(reqd_len); + if (!packed_buf) { + PyErr_Format(PyExc_MemoryError, + "%s: couldn't allocate %d bytes for packed buffer", + __FUNCTION__, reqd_len); + return NULL; + } + + if (!pytdbpack_pack_data(format_str, fast_seq, packed_buf)) { + free(packed_buf); + return NULL; + } + + buf_str = PyString_FromStringAndSize(packed_buf, reqd_len); + free(packed_buf); /* get rid of tmp buf */ + + return buf_str; +} + + + +static PyObject * +pytdbpack_unpack(PyObject *self, + PyObject *args) +{ + char *format_str, *packed_str, *ppacked; + PyObject *val_list = NULL, *ret_tuple = NULL; + PyObject *rest_string = NULL; + int format_len, packed_len; + int i; + char last_format = '#'; + + /* get arguments */ + if (!PyArg_ParseTuple(args, "ss#", &format_str, &packed_str, &packed_len)) + return NULL; + + format_len = strlen(format_str); + + /* allocate list to hold results */ + val_list = PyList_New(format_len); + if (!val_list) + goto failed; + ret_tuple = PyTuple_New(2); + if (!ret_tuple) + goto failed; + + /* For every object, unpack. */ + for (ppacked = packed_str, i = 0; i < format_len; i++) { + PyObject *val_obj; + char format; + + format = format_str[i]; + if (format == '$') { + if (i == 0) { + PyErr_Format(PyExc_ValueError, + "%s: '$' may not be first character in format", + __FUNCTION__); + goto failed; + } + else { + format = last_format; /* repeat */ + } + } + + val_obj = pytdbpack_unpack_item(format, + &ppacked, + &packed_len); + if (!val_obj) + goto failed; + + PyList_SET_ITEM(val_list, i, val_obj); + last_format = format; + } + + /* put leftovers in box for lunch tomorrow */ + rest_string = PyString_FromStringAndSize(ppacked, packed_len); + if (!rest_string) + goto failed; + + /* return (values, rest) tuple; give up references to them */ + PyTuple_SET_ITEM(ret_tuple, 0, val_list); + val_list = NULL; + PyTuple_SET_ITEM(ret_tuple, 1, rest_string); + val_list = NULL; + return ret_tuple; + + failed: + /* handle failure: deallocate anything */ + Py_XDECREF(val_list); + Py_XDECREF(ret_tuple); + Py_XDECREF(rest_string); + return NULL; +} + + +/* + Internal routine that calculates how many bytes will be required to + encode the values in the format. + + Also checks that the value list is the right size for the format list. + + Returns number of bytes (may be 0), or -1 if there's something wrong, in + which case a Python exception has been raised. + + Arguments: + + val_seq: a Fast Sequence (list or tuple), being all the values +*/ +static int +pytdbpack_calc_reqd_len(char *format_str, + PyObject *val_seq) +{ + int len = 0; + char *p; + int val_i; + int val_len; + + val_len = PySequence_Fast_GET_SIZE(val_seq); + + for (p = format_str, val_i = 0; *p; p++, val_i++) { + char ch = *p; + PyObject *val_obj; + int item_len; + + if (val_i >= val_len) { + PyErr_Format(PyExc_IndexError, + "samba.tdbpack.pack: value list is too short for format string"); + return -1; + } + + /* borrow a reference to the item */ + val_obj = PySequence_Fast_GET_ITEM(val_seq, val_i); + if (!val_obj) + return -1; + + item_len = pytdbpack_calc_item_len(ch, val_obj); + if (item_len == -1) + return -1; + else + len += item_len; + } + + if (val_i != val_len) { + PyErr_Format(PyExc_IndexError, + "%s: value list is wrong length for format string", + __FUNCTION__); + return -1; + } + + return len; +} + + +/* + Calculate the number of bytes required to pack a single value. +*/ +static int +pytdbpack_calc_item_len(char ch, + PyObject *val_obj) +{ + if (ch == 'd' || ch == 'w') { + if (!PyInt_Check(val_obj)) { + PyErr_Format(PyExc_TypeError, + "tdbpack: format '%c' requires an Int", + ch); + return -1; + } + if (ch == 'w') + return 2; + else + return 4; + } else if (ch == 'p') { + return 4; + } + else if (ch == 'f' || ch == 'P' || ch == 'B') { + /* nul-terminated 8-bit string */ + if (!PyString_Check(val_obj)) { + PyErr_Format(PyExc_TypeError, + "tdbpack: format '%c' requires a String", + ch); + return -1; + } + + if (ch == 'B') { + /* byte buffer; just use Python string's length, plus + a preceding word */ + return 4 + PyString_GET_SIZE(val_obj); + } + else { + /* one nul character */ + return 1 + PyString_GET_SIZE(val_obj); + } + } + else { + PyErr_Format(PyExc_ValueError, + __FUNCTION__ ": format character '%c' is not supported", + ch); + + return -1; + } +} + + +/* + XXX: glib and Samba have quicker macro for doing the endianness conversions, + but I don't know of one in plain libc, and it's probably not a big deal. I + realize this is kind of dumb because we'll almost always be on x86, but + being safe is important. +*/ +static void pack_int32(unsigned long val_long, unsigned char **pbuf) +{ + (*pbuf)[0] = val_long & 0xff; + (*pbuf)[1] = (val_long >> 8) & 0xff; + (*pbuf)[2] = (val_long >> 16) & 0xff; + (*pbuf)[3] = (val_long >> 24) & 0xff; + (*pbuf) += 4; +} + + +static void pack_bytes(long len, const char *from, + unsigned char **pbuf) +{ + memcpy(*pbuf, from, len); + (*pbuf) += len; +} + + +static void +unpack_err_too_short(void) +{ + PyErr_Format(PyExc_IndexError, + __FUNCTION__ ": data too short for unpack format"); +} + + +static PyObject * +unpack_int32(char **pbuf, int *plen) +{ + long v; + unsigned char *b; + + if (*plen < 4) { + unpack_err_too_short(); + return NULL; + } + + b = *pbuf; + v = b[0] | b[1]<<8 | b[2]<<16 | b[3]<<24; + + (*pbuf) += 4; + (*plen) -= 4; + + return PyInt_FromLong(v); +} + + +static PyObject *unpack_int16(char **pbuf, int *plen) +{ + long v; + unsigned char *b; + + if (*plen < 2) { + unpack_err_too_short(); + return NULL; + } + + b = *pbuf; + v = b[0] | b[1]<<8; + + (*pbuf) += 2; + (*plen) -= 2; + + return PyInt_FromLong(v); +} + + +static PyObject * +unpack_string(char **pbuf, int *plen) +{ + int len; + char *nul_ptr, *start; + + start = *pbuf; + + nul_ptr = memchr(start, '\0', *plen); + if (!nul_ptr) { + unpack_err_too_short(); + return NULL; + } + + len = nul_ptr - start; + + *pbuf += len + 1; /* skip \0 */ + *plen -= len + 1; + + return PyString_FromStringAndSize(start, len); +} + + +static PyObject * +unpack_buffer(char **pbuf, int *plen) +{ + /* first get 32-bit len */ + long slen; + unsigned char *b; + unsigned char *start; + + if (*plen < 4) { + unpack_err_too_short(); + return NULL; + } + + b = *pbuf; + slen = b[0] | b[1]<<8 | b[2]<<16 | b[3]<<24; + + if (slen < 0) { /* surely you jest */ + PyErr_Format(PyExc_ValueError, + __FUNCTION__ ": buffer seems to have negative length"); + return NULL; + } + + (*pbuf) += 4; + (*plen) -= 4; + start = *pbuf; + + if (*plen < slen) { + PyErr_Format(PyExc_IndexError, + __FUNCTION__ ": not enough data to unpack buffer: " + "need %d bytes, have %d", + (int) slen, *plen); + return NULL; + } + + (*pbuf) += slen; + (*plen) -= slen; + + return PyString_FromStringAndSize(start, slen); +} + + +/* Unpack a single field from packed data, according to format character CH. + Remaining data is at *PBUF, of *PLEN. + + *PBUF is advanced, and *PLEN reduced to reflect the amount of data that has + been consumed. + + Returns a reference to the unpacked Python object, or NULL for failure. +*/ +static PyObject *pytdbpack_unpack_item(char ch, + char **pbuf, + int *plen) +{ + if (ch == 'w') { /* 16-bit int */ + return unpack_int16(pbuf, plen); + } + else if (ch == 'd' || ch == 'p') { /* 32-bit int */ + /* pointers can just come through as integers */ + return unpack_int32(pbuf, plen); + } + else if (ch == 'f' || ch == 'P') { /* nul-term string */ + return unpack_string(pbuf, plen); + } + else if (ch == 'B') { /* length, buffer */ + return unpack_buffer(pbuf, plen); + } + else { + PyErr_Format(PyExc_ValueError, + __FUNCTION__ ": format character '%c' is not supported", + ch); + + return NULL; + } +} + + + +/* + Pack a single item VAL_OBJ, encoded using format CH, into a buffer at *PBUF, + and advance the pointer. Buffer length has been pre-calculated so we are + sure that there is enough space. + +*/ +static PyObject * +pytdbpack_pack_item(char ch, + PyObject *val_obj, + unsigned char **pbuf) +{ + if (ch == 'w') { + unsigned long val_long = PyInt_AsLong(val_obj); + (*pbuf)[0] = val_long & 0xff; + (*pbuf)[1] = (val_long >> 8) & 0xff; + (*pbuf) += 2; + } + else if (ch == 'd') { + /* 4-byte LE number */ + pack_int32(PyInt_AsLong(val_obj), pbuf); + } + else if (ch == 'p') { + /* "Pointer" value -- in the subset of DCERPC used by Samba, + this is really just an "exists" or "does not exist" + flag. */ + pack_int32(PyObject_IsTrue(val_obj), pbuf); + } + else if (ch == 'f' || ch == 'P') { + int size; + char *sval; + + size = PyString_GET_SIZE(val_obj); + sval = PyString_AS_STRING(val_obj); + pack_bytes(size+1, sval, pbuf); /* include nul */ + } + else if (ch == 'B') { + int size; + char *sval; + + size = PyString_GET_SIZE(val_obj); + pack_int32(size, pbuf); + sval = PyString_AS_STRING(val_obj); + pack_bytes(size, sval, pbuf); /* do not include nul */ + } + else { + /* this ought to be caught while calculating the length, but + just in case. */ + PyErr_Format(PyExc_ValueError, + "%s: format character '%c' is not supported", + __FUNCTION__, ch); + + return NULL; + } + + return Py_None; +} + + +/* + Pack data according to FORMAT_STR from the elements of VAL_SEQ into + PACKED_BUF. + + The string has already been checked out, so we know that VAL_SEQ is large + enough to hold the packed data, and that there are enough value items. + (However, their types may not have been thoroughly checked yet.) + + In addition, val_seq is a Python Fast sequence. + + Returns NULL for error (with exception set), or None. +*/ +PyObject * +pytdbpack_pack_data(const char *format_str, + PyObject *val_seq, + unsigned char *packed_buf) +{ + int i; + + for (i = 0; format_str[i]; i++) { + char ch = format_str[i]; + PyObject *val_obj; + + /* borrow a reference to the item */ + val_obj = PySequence_Fast_GET_ITEM(val_seq, i); + if (!val_obj) + return NULL; + + if (!pytdbpack_pack_item(ch, val_obj, &packed_buf)) + return NULL; + } + + return Py_None; +} + + + + + +static PyMethodDef pytdbpack_methods[] = { + { "pack", pytdbpack_pack, METH_VARARGS, (char *) pytdbpack_pack_doc }, + { "unpack", pytdbpack_unpack, METH_VARARGS, (char *) pytdbpack_unpack_doc }, +}; + +DL_EXPORT(void) +inittdbpack(void) +{ + Py_InitModule3("tdbpack", pytdbpack_methods, + (char *) pytdbpack_docstring); +} -- cgit From c45364ae82e06364cbb11545d1262032e12a21b1 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 9 Sep 2002 06:44:29 +0000 Subject: Actually, I think Jerrys patch was incorrect as it didn't ever add the printing msg flag, only remove it. Also, we already refcount the printer backchannel connection to add the connection tdb flag just before after we register/deregister the notification message handler. Jerry please check ! Jeremy. --- source/rpc_server/srv_spoolss_nt.c | 48 +++++++------------------------------- 1 file changed, 8 insertions(+), 40 deletions(-) diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index 795a420a23d..a464f073fdd 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -4,7 +4,7 @@ * Copyright (C) Andrew Tridgell 1992-2000, * Copyright (C) Luke Kenneth Casson Leighton 1996-2000, * Copyright (C) Jean François Micouleau 1998-2000, - * Copyright (C) Jeremy Allison 2001, + * Copyright (C) Jeremy Allison 2001-2002, * Copyright (C) Gerald Carter 2000-2002, * Copyright (C) Tim Potter 2001-2002. * @@ -170,41 +170,6 @@ static void free_spool_notify_option(SPOOL_NOTIFY_OPTION **pp) SAFE_FREE(*pp); } -/**************************************************************************** - wrapper function to maintain a reference count to the number of - open change notification handles we have -****************************************************************************/ - -static BOOL spooler_message_flags( BOOL doreg ) -{ - static uint32 ref_count = 0; - BOOL result = True; - - /* - * check for boundary counditions .... - * if ref_count == 0 and we want to register OR - * if ref_count == 1 and we want to deregister, THEN - * OK. - */ - - if ( ((ref_count == 0) && doreg) || ((ref_count == 1) && !doreg) ) - result = register_message_flags( doreg, FLAG_MSG_PRINTING ); - - /* increment/decrement reference count */ - - if ( doreg ) - ref_count++; - else { - /* minimum is always 0 */ - if ( ref_count ) - ref_count--; - } - - DEBUG(10,("spooler_message_flags: ref_count == %d\n", ref_count)); - - return result; -} - /*************************************************************************** Disconnect from the client ****************************************************************************/ @@ -231,12 +196,12 @@ static void srv_spoolss_replycloseprinter(POLICY_HND *handle) cli_ulogoff(¬ify_cli); cli_shutdown(¬ify_cli); message_deregister(MSG_PRINTER_NOTIFY2); - } - /* Tell the connections db we're not interested in printer notify messages. */ - /* reference count is handled by spooler_message_flags() */ + /* Tell the connections db we're no longer interested in + * printer notify messages. */ - spooler_message_flags( False ); + register_message_flags( False, FLAG_MSG_PRINTING ); + } smb_connections--; } @@ -2217,6 +2182,9 @@ static BOOL srv_spoolss_replyopenprinter(char *printer, uint32 localprinter, uin return False; message_register(MSG_PRINTER_NOTIFY2, receive_notify2_message_list); + /* Tell the connections db we're now interested in printer + * notify messages. */ + register_message_flags( True, FLAG_MSG_PRINTING ); } smb_connections++; -- cgit From 8bebe9ee2b6bd56c297acc6b01cb0856aad1c4f3 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 07:49:25 +0000 Subject: Python's setup.py does not need to be munged by configure.in -- it is sufficient to just pass the relevant variables to Python from the Makefile. Therefore, remove setup.py.in. --- source/Makefile.in | 1 + source/configure | 4 +- source/configure.in | 2 +- source/python/.cvsignore | 1 - source/python/setup.py | 168 ++++++++++++++++++++++++++++++++++++++++++++ source/python/setup.py.in | 174 ---------------------------------------------- 6 files changed, 172 insertions(+), 178 deletions(-) create mode 100755 source/python/setup.py delete mode 100755 source/python/setup.py.in diff --git a/source/Makefile.in b/source/Makefile.in index 18df73a6da3..b8c337f14a7 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -883,6 +883,7 @@ python_common_proto: python_ext: $(PYTHON_OBJS) PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS)" \ + LIBS="$(LIBS)" \ $(PYTHON) python/setup.py build # revert to the previously installed version diff --git a/source/configure b/source/configure index fc2ed311bd7..f2b63b75d7f 100755 --- a/source/configure +++ b/source/configure @@ -14209,7 +14209,7 @@ done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" -trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile python/setup.py include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then diff --git a/source/configure.in b/source/configure.in index 3a75b32aafa..fd08142bbdc 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2841,7 +2841,7 @@ AC_SUBST(builddir) # I added make files that are outside /source directory. # I know this is not a good solution, will work out a better # solution soon. --simo -AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile python/setup.py) +AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) ################################################# # Print very concise instructions on building/use diff --git a/source/python/.cvsignore b/source/python/.cvsignore index 8ce381cd39f..7e99e367f84 100644 --- a/source/python/.cvsignore +++ b/source/python/.cvsignore @@ -1,2 +1 @@ -setup.py *.pyc \ No newline at end of file diff --git a/source/python/setup.py b/source/python/setup.py new file mode 100755 index 00000000000..b39ef448c1a --- /dev/null +++ b/source/python/setup.py @@ -0,0 +1,168 @@ +# -*- mode: python -*- +# +# Unix SMB/CIFS implementation. +# Module packaging setup for Samba python extensions +# +# Copyright (C) Tim Potter, 2002 +# +# This program 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 this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +from distutils.core import setup +from distutils.extension import Extension + +import sys, string, os + +# The Makefile passes in environment variable $PYTHON_OBJ as being the +# list of Samba objects. This kind of goes against the distutils.cmd +# method of adding setup commands and will also confuse people who are +# familiar with the python Distutils module. + +samba_objs = os.environ.get("PYTHON_OBJS", "") + +samba_cflags = os.environ.get("PYTHON_CFLAGS", "") + +samba_srcdir = os.environ.get("SRCDIR", "") + +# These variables are filled in by configure + +samba_libs = os.environ.get("LIBS", "") + +# Convert libs and objs from space separated strings to lists of strings +# for distutils to digest. Split "-l" prefix off library list. + +obj_list = string.split(samba_objs) + +lib_list = [] + +for lib in string.split(samba_libs): + lib_list.append(string.replace(lib, "-l", "")) + +flags_list = string.split(samba_cflags) + +# Invoke distutils.setup + +setup( + + # Overview information + + name = "Samba Python Extensions", + version = "0.1", + author = "Tim Potter", + author_email = "tpot@samba.org", + license = "GPL", + + # Build info + + include_dirs = [samba_srcdir + '.', samba_srcdir + "include", + samba_srcdir + "ubiqx", samba_srcdir + "smbwrapper", + samba_srcdir + "popt", "/usr/kerberos/include", + "/usr/local/include"], + + # Module list + + ext_modules = [ + + # SPOOLSS pipe module + + Extension(name = "spoolss", + sources = [samba_srcdir + "python/py_spoolss.c", + samba_srcdir + "python/py_common.c", + samba_srcdir + "python/py_conv.c", + samba_srcdir + "python/py_ntsec.c", + samba_srcdir + "python/py_spoolss_forms.c", + samba_srcdir + "python/py_spoolss_forms_conv.c", + samba_srcdir + "python/py_spoolss_drivers.c", + samba_srcdir + "python/py_spoolss_drivers_conv.c", + samba_srcdir + "python/py_spoolss_printers.c", + samba_srcdir + "python/py_spoolss_printers_conv.c", + samba_srcdir + "python/py_spoolss_printerdata.c", + samba_srcdir + "python/py_spoolss_ports.c", + samba_srcdir + "python/py_spoolss_ports_conv.c", + samba_srcdir + "python/py_spoolss_jobs.c", + samba_srcdir + "python/py_spoolss_jobs_conv.c", + ], + libraries = lib_list, + library_dirs = ["/usr/kerberos/lib"], + extra_objects = obj_list), + + # LSA pipe module + + Extension(name = "lsa", + sources = [samba_srcdir + "python/py_lsa.c", + samba_srcdir + "python/py_common.c", + samba_srcdir + "python/py_ntsec.c"], + libraries = lib_list, + library_dirs = ["/usr/kerberos/lib"], + extra_objects = obj_list), + + # SAMR pipe module + + Extension(name = "samr", + sources = [samba_srcdir + "python/py_samr.c", + samba_srcdir + "python/py_samr_conv.c", + samba_srcdir + "python/py_common.c"], + libraries = lib_list, + library_dirs = ["/usr/kerberos/lib"], + extra_objects = obj_list), + + # winbind client module + + Extension(name = "winbind", + sources = [samba_srcdir + "python/py_winbind.c", + samba_srcdir + "python/py_common.c"], + libraries = lib_list, + library_dirs = ["/usr/kerberos/lib"], + extra_objects = obj_list, + extra_compile_args = flags_list), + + # WINREG pipe module + + Extension(name = "winreg", + sources = [samba_srcdir + "python/py_winreg.c", + samba_srcdir + "python/py_common.c"], + libraries = lib_list, + library_dirs = ["/usr/kerberos/lib"], + extra_objects = obj_list), + + # tdb module + + Extension(name = "tdb", + sources = [samba_srcdir + "python/py_tdb.c"], + libraries = lib_list, + library_dirs = ["/usr/kerberos/lib"], + extra_objects = obj_list), + + # libsmb module + + Extension(name = "smb", + sources = [samba_srcdir + "python/py_smb.c", + samba_srcdir + "python/py_common.c"], + libraries = lib_list, + library_dirs = ["/usr/kerberos/lib"], + extra_objects = obj_list), + + # Moving to merge all individual extensions in to one big + # extension. This is to avoid the fact that each extension is 3MB + # in size due to the lack of proper depedency management in Samba. + + Extension(name = "samba", + sources = [samba_srcdir + "python/py_samba.c", + samba_srcdir + "python/py_common.c"], + libraries = lib_list, + library_dirs = ["/usr/kerberos/lib"], + extra_objects = obj_list), + ], +) diff --git a/source/python/setup.py.in b/source/python/setup.py.in deleted file mode 100755 index 58963012458..00000000000 --- a/source/python/setup.py.in +++ /dev/null @@ -1,174 +0,0 @@ -# -*- mode: python -*- -# -# Unix SMB/CIFS implementation. -# Module packaging setup for Samba python extensions -# -# Copyright (C) Tim Potter, 2002 -# -# This program 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 this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# - -from distutils.core import setup -from distutils.extension import Extension - -import sys, string, os - -# The Makefile passes in environment variable $PYTHON_OBJ as being the -# list of Samba objects. This kind of goes against the distutils.cmd -# method of adding setup commands and will also confuse people who are -# familiar with the python Distutils module. - -samba_objs = "" -if os.environ.has_key("PYTHON_OBJS"): - samba_objs = os.environ.get("PYTHON_OBJS") - -samba_cflags = "" -if os.environ.has_key("PYTHON_CFLAGS"): - samba_cflags = os.environ.get("PYTHON_CFLAGS") - -samba_srcdir = "" -if os.environ.has_key("SRCDIR"): - samba_srcdir = os.environ.get("SRCDIR") - -# These variables are filled in by configure - -samba_libs = "@LIBS@" - -# Convert libs and objs from space separated strings to lists of strings -# for distutils to digest. Split "-l" prefix off library list. - -obj_list = string.split(samba_objs) - -lib_list = [] - -for lib in string.split(samba_libs): - lib_list.append(string.replace(lib, "-l", "")) - -flags_list = string.split(samba_cflags) - -# Invoke distutils.setup - -setup( - - # Overview information - - name = "Samba Python Extensions", - version = "0.1", - author = "Tim Potter", - author_email = "tpot@samba.org", - license = "GPL", - - # Build info - - include_dirs = [samba_srcdir + '.', samba_srcdir + "include", - samba_srcdir + "ubiqx", samba_srcdir + "smbwrapper", - samba_srcdir + "popt", "/usr/kerberos/include", - "/usr/local/include"], - - # Module list - - ext_modules = [ - - # SPOOLSS pipe module - - Extension(name = "spoolss", - sources = [samba_srcdir + "python/py_spoolss.c", - samba_srcdir + "python/py_common.c", - samba_srcdir + "python/py_conv.c", - samba_srcdir + "python/py_ntsec.c", - samba_srcdir + "python/py_spoolss_forms.c", - samba_srcdir + "python/py_spoolss_forms_conv.c", - samba_srcdir + "python/py_spoolss_drivers.c", - samba_srcdir + "python/py_spoolss_drivers_conv.c", - samba_srcdir + "python/py_spoolss_printers.c", - samba_srcdir + "python/py_spoolss_printers_conv.c", - samba_srcdir + "python/py_spoolss_printerdata.c", - samba_srcdir + "python/py_spoolss_ports.c", - samba_srcdir + "python/py_spoolss_ports_conv.c", - samba_srcdir + "python/py_spoolss_jobs.c", - samba_srcdir + "python/py_spoolss_jobs_conv.c", - ], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - - # LSA pipe module - - Extension(name = "lsa", - sources = [samba_srcdir + "python/py_lsa.c", - samba_srcdir + "python/py_common.c", - samba_srcdir + "python/py_ntsec.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - - # SAMR pipe module - - Extension(name = "samr", - sources = [samba_srcdir + "python/py_samr.c", - samba_srcdir + "python/py_samr_conv.c", - samba_srcdir + "python/py_common.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - - # winbind client module - - Extension(name = "winbind", - sources = [samba_srcdir + "python/py_winbind.c", - samba_srcdir + "python/py_common.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list, - extra_compile_args = flags_list), - - # WINREG pipe module - - Extension(name = "winreg", - sources = [samba_srcdir + "python/py_winreg.c", - samba_srcdir + "python/py_common.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - - # tdb module - - Extension(name = "tdb", - sources = [samba_srcdir + "python/py_tdb.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - - # libsmb module - - Extension(name = "smb", - sources = [samba_srcdir + "python/py_smb.c", - samba_srcdir + "python/py_common.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - - # Moving to merge all individual extensions in to one big - # extension. This is to avoid the fact that each extension is 3MB - # in size due to the lack of proper depedency management in Samba. - - Extension(name = "samba", - sources = [samba_srcdir + "python/py_samba.c", - samba_srcdir + "python/py_common.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - ], -) -- cgit From fc5e8b8f672d461809f113fe14435841608b046f Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 08:06:17 +0000 Subject: Build py_tdbpack as well. --- source/python/setup.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/python/setup.py b/source/python/setup.py index b39ef448c1a..38bc841d989 100755 --- a/source/python/setup.py +++ b/source/python/setup.py @@ -164,5 +164,10 @@ setup( libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], extra_objects = obj_list), + + # tdbpack/unpack extensions. Does not actually link to any Samba + # code, although it implements a compatible data format. + Extension(name = "tdbpack", + sources = [os.path.join(samba_srcdir, "python", "py_tdbpack.c")]), ], ) -- cgit From 0d3276355e0511d6aff110a3943199629b3c00fd Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 08:34:35 +0000 Subject: Put all Python modules into the 'samba' subpackage. Now you need to write import samba.tdbutil samba.tdbutil.pack('f', ['hello']) You need 'cvs update -d' to get the new subdirectory for this to build properly. --- source/python/samba/__init__.py | 7 +++++++ source/python/setup.py | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 source/python/samba/__init__.py diff --git a/source/python/samba/__init__.py b/source/python/samba/__init__.py new file mode 100644 index 00000000000..c818ca3e044 --- /dev/null +++ b/source/python/samba/__init__.py @@ -0,0 +1,7 @@ +"""samba + +Various Python modules for interfacing to Samba. + +Try using help() to examine their documentation. +""" + diff --git a/source/python/setup.py b/source/python/setup.py index 38bc841d989..a5d7879371a 100755 --- a/source/python/setup.py +++ b/source/python/setup.py @@ -4,6 +4,7 @@ # Module packaging setup for Samba python extensions # # Copyright (C) Tim Potter, 2002 +# Copyright (C) Martin Pool, 2002 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -70,9 +71,16 @@ setup( samba_srcdir + "ubiqx", samba_srcdir + "smbwrapper", samba_srcdir + "popt", "/usr/kerberos/include", "/usr/local/include"], + + # Get the "samba" directory of Python source. At the moment this + # just contains the __init__ file that makes it work as a + # subpackage. This is needed even though everything else is an + # extension module. + package_dir = {"samba": os.path.join(samba_srcdir, "python", "samba")}, + packages = ["samba"], # Module list - + ext_package = "samba", ext_modules = [ # SPOOLSS pipe module -- cgit From 29d7ee7e0d6eea53a596973d157d377fbaaab3d1 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 08:51:55 +0000 Subject: Add python_install target. Not called by default. Delegates most of the work to setup.py --- source/Makefile.in | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/Makefile.in b/source/Makefile.in index b8c337f14a7..3578b93020a 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -886,6 +886,11 @@ python_ext: $(PYTHON_OBJS) LIBS="$(LIBS)" \ $(PYTHON) python/setup.py build +python_install: $(PYTHON_OBJS) + PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS)" \ + LIBS="$(LIBS)" \ + $(PYTHON) python/setup.py install + # revert to the previously installed version revert: @$(SHELL) $(srcdir)/script/revert.sh $(SBINDIR) $(SPROGS) -- cgit From 05e2aba52f9b027bbab7c65cc02fd5c83d3c61aa Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 9 Sep 2002 19:02:53 +0000 Subject: Merged Volkers (correct) fix from 2.2 for crash on unable to connect. Jeremy. --- source/libsmb/clientgen.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/source/libsmb/clientgen.c b/source/libsmb/clientgen.c index facf361a6b4..6b6a2acd3b8 100644 --- a/source/libsmb/clientgen.c +++ b/source/libsmb/clientgen.c @@ -212,9 +212,8 @@ struct cli_state *cli_initialise(struct cli_state *cli) alloced_cli = True; } - if (cli->initialised) { - cli_shutdown(cli); - } + if (cli->initialised) + cli_close_connection(cli); ZERO_STRUCTP(cli); @@ -286,11 +285,14 @@ void cli_close_connection(struct cli_state *cli) data_blob_free(&cli->secblob); - if (cli->mem_ctx) + if (cli->mem_ctx) { talloc_destroy(cli->mem_ctx); + cli->mem_ctx = NULL; + } if (cli->fd != -1) close(cli->fd); + cli->fd = -1; } /**************************************************************************** -- cgit From 43a39e85b67c026a5edd93bcd58b76ae67315975 Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Mon, 9 Sep 2002 21:01:53 +0000 Subject: lowercase global_myname in %L substitution --- source/lib/substitute.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/source/lib/substitute.c b/source/lib/substitute.c index 767ca0c071a..2550d00d14c 100644 --- a/source/lib/substitute.c +++ b/source/lib/substitute.c @@ -297,8 +297,13 @@ void standard_sub_basic(const char *smb_name, char *str,size_t len) case 'L' : if (local_machine_name && *local_machine_name) string_sub(p,"%L", local_machine_name,l); - else - string_sub(p,"%L", global_myname,l); + else { + pstring temp_name; + + pstrcpy(temp_name, global_myname); + strlower(temp_name); + string_sub(p,"%L", temp_name,l); + } break; case 'M' : string_sub(p,"%M", client_name(),l); -- cgit From b3fe55838d23001f634f6a75f08330718353d3ad Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 9 Sep 2002 21:06:06 +0000 Subject: Patch from Steve French to fix difference in responses to smbclient //server/share ls / on Samba and Windows 2000. Jeremy. --- source/smbd/trans2.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/smbd/trans2.c b/source/smbd/trans2.c index 8def7c0250c..d21d6d2cda4 100644 --- a/source/smbd/trans2.c +++ b/source/smbd/trans2.c @@ -906,7 +906,11 @@ close_if_end = %d requires_resume_key = %d level = %d, max_data_bytes = %d\n", p = strrchr_m(directory,'/'); if(p == NULL) { - pstrcpy(mask,directory); + /* Windows and OS/2 systems treat search on the root '\' as if it were '\*' */ + if((directory[0] == '.') && (directory[1] == '\0')) + pstrcpy(mask,"*"); + else + pstrcpy(mask,directory); pstrcpy(directory,"./"); } else { pstrcpy(mask,p+1); -- cgit From db0f742e0ea619e69457f15cdb3740ae7c85cebd Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 9 Sep 2002 21:38:42 +0000 Subject: Use SAM debug class in skeleton - patch from metze Shouldn't we use dynamic debug classes here? --- examples/sam/sam_skel.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/sam/sam_skel.c b/examples/sam/sam_skel.c index 5dae5a58434..a3b8f13391d 100644 --- a/examples/sam/sam_skel.c +++ b/examples/sam/sam_skel.c @@ -21,7 +21,7 @@ #include "includes.h" -static int sam_skel_debug_level = DBGC_ALL; +static int sam_skel_debug_level = DBGC_SAM; #undef DBGC_CLASS #define DBGC_CLASS sam_skel_debug_level @@ -189,7 +189,7 @@ NTSTATUS sam_skel_get_groups_of_sid(const SAM_METHODS *sam_method, const NT_USER return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const char *location) +NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const DOM_SID *domain, const char *module_params) { NTSTATUS nt_status; @@ -245,13 +245,14 @@ NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, cons sam_skel_debug_level = debug_add_class("sam_skel"); if (sam_skel_debug_level == -1) { - sam_skel_debug_level = DBGC_ALL; + sam_skel_debug_level = DBGC_SAM; DEBUG(0, ("sam_skel: Couldn't register custom debugging class!\n")); - } else DEBUG(0, ("sam_skel: Debug class number of 'sam_skel': %d\n", sam_skel_debug_level)); + } else DEBUG(2, ("sam_skel: Debug class number of 'sam_skel': %d\n", sam_skel_debug_level)); - DEBUG(0, ("Initializing sam_skel\n")); - if (location) - DEBUG(10, ("Location: %s\n", location)); + if(module_params) + DEBUG(0, ("Starting 'sam_skel' with parameters '%s' for domain %s\n", module_params, sid_string_static(domain))); + else + DEBUG(0, ("Starting 'sam_skel' for domain %s without paramters\n", sid_string_static(domain))); return NT_STATUS_OK; } -- cgit From af2168c0344d49041b1fe78cd5219ac50308deb3 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 9 Sep 2002 21:48:23 +0000 Subject: Merged Steve French's fix for OS/2 EA return error being removed. Jeremy. --- source/include/trans2.h | 21 ++++++++++++--------- source/smbd/trans2.c | 4 +++- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/source/include/trans2.h b/source/include/trans2.h index fb265fdb1a8..3468d3b9950 100644 --- a/source/include/trans2.h +++ b/source/include/trans2.h @@ -193,16 +193,19 @@ Byte offset Type name description } FSINFO; *************************************************************/ -#define SMB_INFO_STANDARD 1 -#define SMB_INFO_QUERY_EA_SIZE 2 -#define SMB_INFO_QUERY_EAS_FROM_LIST 3 -#define SMB_INFO_QUERY_ALL_EAS 4 +#define SMB_INFO_STANDARD 1 /* FILESTATUS3 struct */ +#define SMB_INFO_SET_EA 2 /* EAOP2 struct, only valid on set not query */ +#define SMB_INFO_QUERY_EA_SIZE 2 /* FILESTATUS4 struct, only valid on query not set */ +#define SMB_INFO_QUERY_EAS_FROM_LIST 3 /* only valid on query not set */ +#define SMB_INFO_QUERY_ALL_EAS 4 /* only valid on query not set */ #define SMB_INFO_IS_NAME_VALID 6 -#define SMB_QUERY_FS_LABEL_INFO 0x101 -#define SMB_QUERY_FS_VOLUME_INFO 0x102 -#define SMB_QUERY_FS_SIZE_INFO 0x103 -#define SMB_QUERY_FS_DEVICE_INFO 0x104 -#define SMB_QUERY_FS_ATTRIBUTE_INFO 0x105 +#define SMB_INFO_STANDARD_LONG 11 /* similar to level 1, ie struct FileStatus3 */ +#define SMB_QUERY_EA_SIZE_LONG 12 /* similar to level 2, ie struct FileStatus4 */ +#define SMB_QUERY_FS_LABEL_INFO 0x101 +#define SMB_QUERY_FS_VOLUME_INFO 0x102 +#define SMB_QUERY_FS_SIZE_INFO 0x103 +#define SMB_QUERY_FS_DEVICE_INFO 0x104 +#define SMB_QUERY_FS_ATTRIBUTE_INFO 0x105 #define l2_vol_fdateCreation 0 diff --git a/source/smbd/trans2.c b/source/smbd/trans2.c index d21d6d2cda4..de65cda2d09 100644 --- a/source/smbd/trans2.c +++ b/source/smbd/trans2.c @@ -2349,7 +2349,6 @@ static int call_trans2setfilepathinfo(connection_struct *conn, switch (info_level) { case SMB_INFO_STANDARD: - case SMB_INFO_QUERY_EA_SIZE: { if (total_data < l1_cbFile+4) return(ERROR_DOS(ERRDOS,ERRinvalidparam)); @@ -2366,6 +2365,9 @@ static int call_trans2setfilepathinfo(connection_struct *conn, break; } + case SMB_INFO_SET_EA: + return(ERROR_DOS(ERRDOS,ERReasnotsupported)); + /* XXXX um, i don't think this is right. it's also not in the cifs6.txt spec. */ -- cgit From 3c9d24d7c3bad2beb641880a97f0eda5cd3e4ec7 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 10 Sep 2002 01:58:51 +0000 Subject: Added final Steve French patch for "required" attributes with old dir listings. Added regression test in smbtorture (in HEAD) also. Jeremy. --- source/libsmb/clilist.c | 48 +++++++++++------------ source/smbd/dir.c | 21 ++++++++-- source/smbd/reply.c | 8 +++- source/torture/torture.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 147 insertions(+), 30 deletions(-) diff --git a/source/libsmb/clilist.c b/source/libsmb/clilist.c index 17a759f9e39..3eacc25380a 100644 --- a/source/libsmb/clilist.c +++ b/source/libsmb/clilist.c @@ -22,13 +22,13 @@ #include "includes.h" - /**************************************************************************** -interpret a long filename structure - this is mostly guesses at the moment -The length of the structure is returned -The structure of a long filename depends on the info level. 260 is used -by NT and 2 is used by OS/2 + Interpret a long filename structure - this is mostly guesses at the moment. + The length of the structure is returned + The structure of a long filename depends on the info level. 260 is used + by NT and 2 is used by OS/2 ****************************************************************************/ + static int interpret_long_filename(struct cli_state *cli, int level,char *p,file_info *finfo) { @@ -41,8 +41,7 @@ static int interpret_long_filename(struct cli_state *cli, memcpy(finfo,&def_finfo,sizeof(*finfo)); - switch (level) - { + switch (level) { case 1: /* OS/2 understands this */ /* these dates are converted to GMT by make_unix_date */ @@ -126,16 +125,16 @@ static int interpret_long_filename(struct cli_state *cli, namelen, 0); return SVAL(base, 0); } - } + } DEBUG(1,("Unknown long filename format %d\n",level)); return(SVAL(p,0)); } - /**************************************************************************** - do a directory listing, calling fn on each file found - ****************************************************************************/ + Do a directory listing, calling fn on each file found. +****************************************************************************/ + int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute, void (*fn)(file_info *, const char *, void *), void *state) { @@ -307,12 +306,11 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute, return(total_received); } - - /**************************************************************************** -interpret a short filename structure -The length of the structure is returned + Interpret a short filename structure. + The length of the structure is returned. ****************************************************************************/ + static int interpret_short_filename(struct cli_state *cli, char *p,file_info *finfo) { extern file_info def_finfo; @@ -334,10 +332,11 @@ static int interpret_short_filename(struct cli_state *cli, char *p,file_info *fi /**************************************************************************** - do a directory listing, calling fn on each file found - this uses the old SMBsearch interface. It is needed for testing Samba, - but should otherwise not be used - ****************************************************************************/ + Do a directory listing, calling fn on each file found. + this uses the old SMBsearch interface. It is needed for testing Samba, + but should otherwise not be used. +****************************************************************************/ + int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute, void (*fn)(file_info *, const char *, void *), void *state) { @@ -453,16 +452,15 @@ int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute, return(num_received); } - /**************************************************************************** - do a directory listing, calling fn on each file found - this auto-switches between old and new style - ****************************************************************************/ + Do a directory listing, calling fn on each file found. + This auto-switches between old and new style. +****************************************************************************/ + int cli_list(struct cli_state *cli,const char *Mask,uint16 attribute, void (*fn)(file_info *, const char *, void *), void *state) { - if (cli->protocol <= PROTOCOL_LANMAN1) { + if (cli->protocol <= PROTOCOL_LANMAN1) return cli_list_old(cli, Mask, attribute, fn, state); - } return cli_list_new(cli, Mask, attribute, fn, state); } diff --git a/source/smbd/dir.c b/source/smbd/dir.c index bdcb4b0461b..396ecd98c49 100644 --- a/source/smbd/dir.c +++ b/source/smbd/dir.c @@ -553,9 +553,24 @@ void *dptr_fetch_lanman2(int dptr_num) BOOL dir_check_ftype(connection_struct *conn,int mode,SMB_STRUCT_STAT *st,int dirtype) { - if (((mode & ~dirtype) & (aHIDDEN | aSYSTEM | aDIR)) != 0) - return False; - return True; + int mask; + + /* Check the "may have" search bits. */ + if (((mode & ~dirtype) & (aHIDDEN | aSYSTEM | aDIR)) != 0) + return False; + + /* Check the "must have" bits, which are the may have bits shifted eight */ + /* If must have bit is set, the file/dir can not be returned in search unless the matching + file attribute is set */ + mask = ((dirtype >> 8) & (aDIR|aARCH|aRONLY|aHIDDEN|aSYSTEM)); /* & 0x37 */ + if(mask) { + if((mask & (mode & (aDIR|aARCH|aRONLY|aHIDDEN|aSYSTEM))) == mask) /* check if matching attribute present */ + return True; + else + return False; + } + + return True; } static BOOL mangle_mask_match(connection_struct *conn, char *filename, char *mask) diff --git a/source/smbd/reply.c b/source/smbd/reply.c index 01e7df282cf..2b361fd43a7 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -673,12 +673,16 @@ int reply_search(connection_struct *conn, char *inbuf,char *outbuf, int dum_size if (strlen(directory) == 0) pstrcpy(directory,"./"); memset((char *)status,'\0',21); - SCVAL(status,0,dirtype); + SCVAL(status,0,(dirtype & 0x1F)); } else { + int status_dirtype; memcpy(status,p,21); - dirtype = CVAL(status,0) & 0x1F; + status_dirtype = CVAL(status,0) & 0x1F; + if (status_dirtype != (dirtype & 0x1F)) + dirtype = status_dirtype; + conn->dirptr = dptr_fetch(status+12,&dptr_num); if (!conn->dirptr) goto SearchEmpty; diff --git a/source/torture/torture.c b/source/torture/torture.c index 047b4c7a240..fb62b13657f 100644 --- a/source/torture/torture.c +++ b/source/torture/torture.c @@ -3533,6 +3533,105 @@ static BOOL run_dirtest(int dummy) return correct; } +static void del_fn(file_info *finfo, const char *mask, void *state) +{ + struct cli_state *pcli = (struct cli_state *)state; + fstring fname; + slprintf(fname, sizeof(fname), "\\LISTDIR\\%s", finfo->name); + + if (strcmp(finfo->name, ".") == 0 || strcmp(finfo->name, "..") == 0) + return; + + if (finfo->mode & aDIR) { + if (!cli_rmdir(pcli, fname)) + printf("del_fn: failed to rmdir %s\n,", fname ); + } else { + if (!cli_unlink(pcli, fname)) + printf("del_fn: failed to unlink %s\n,", fname ); + } +} + +static BOOL run_dirtest1(int dummy) +{ + int i; + static struct cli_state cli; + int fnum, num_seen; + BOOL correct = True; + + printf("starting directory test\n"); + + if (!torture_open_connection(&cli)) { + return False; + } + + cli_sockopt(&cli, sockops); + + cli_list(&cli, "\\LISTDIR\\*", 0, del_fn, &cli); + cli_list(&cli, "\\LISTDIR\\*", aDIR, del_fn, &cli); + cli_rmdir(&cli, "\\LISTDIR"); + cli_mkdir(&cli, "\\LISTDIR"); + + /* Create 1000 files and 1000 directories. */ + for (i=0;i<1000;i++) { + fstring fname; + slprintf(fname, sizeof(fname), "\\LISTDIR\\f%d", i); + fnum = cli_nt_create_full(&cli, fname, GENERIC_ALL_ACCESS, FILE_ATTRIBUTE_ARCHIVE, + FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OVERWRITE_IF, 0); + if (fnum == -1) { + fprintf(stderr,"Failed to open %s\n", fname); + return False; + } + cli_close(&cli, fnum); + } + for (i=0;i<1000;i++) { + fstring fname; + slprintf(fname, sizeof(fname), "\\LISTDIR\\d%d", i); + if (!cli_mkdir(&cli, fname)) { + fprintf(stderr,"Failed to open %s\n", fname); + return False; + } + } + + /* Now ensure that doing an old list sees both files and directories. */ + num_seen = cli_list_old(&cli, "\\LISTDIR\\*", aDIR, list_fn, NULL); + printf("num_seen = %d\n", num_seen ); + /* We should see 100 files + 1000 directories + . and .. */ + if (num_seen != 2002) + correct = False; + + /* Ensure if we have the "must have" bits we only see the + * relevent entries. + */ + num_seen = cli_list_old(&cli, "\\LISTDIR\\*", (aDIR<<8)|aDIR, list_fn, NULL); + printf("num_seen = %d\n", num_seen ); + if (num_seen != 1002) + correct = False; + + num_seen = cli_list_old(&cli, "\\LISTDIR\\*", (aARCH<<8)|aDIR, list_fn, NULL); + printf("num_seen = %d\n", num_seen ); + if (num_seen != 1000) + correct = False; + + /* Delete everything. */ + cli_list(&cli, "\\LISTDIR\\*", 0, del_fn, &cli); + cli_list(&cli, "\\LISTDIR\\*", aDIR, del_fn, &cli); + cli_rmdir(&cli, "\\LISTDIR"); + +#if 0 + printf("Matched %d\n", cli_list(&cli, "a*.*", 0, list_fn, NULL)); + printf("Matched %d\n", cli_list(&cli, "b*.*", 0, list_fn, NULL)); + printf("Matched %d\n", cli_list(&cli, "xyzabc", 0, list_fn, NULL)); +#endif + + if (!torture_close_connection(&cli)) { + correct = False; + } + + printf("finished dirtest1\n"); + + return correct; +} + static BOOL run_error_map_extract(int dummy) { static struct cli_state c_dos; @@ -3761,6 +3860,7 @@ static struct { {"OPLOCK2", run_oplock2, 0}, {"OPLOCK3", run_oplock3, 0}, {"DIR", run_dirtest, 0}, + {"DIR1", run_dirtest1, 0}, {"DENY1", torture_denytest1, 0}, {"DENY2", torture_denytest2, 0}, {"TCON", run_tcon_test, 0}, -- cgit From b5227f0a645fdf2358fcb880f22e4662efdfe8e3 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Tue, 10 Sep 2002 02:38:15 +0000 Subject: change notify merge from APP_HEAD --- source/include/nt_printing.h | 16 +- source/rpc_client/cli_spoolss_notify.c | 3 + source/rpc_server/srv_spoolss_nt.c | 340 +++++++++++++++++++++++++-------- 3 files changed, 282 insertions(+), 77 deletions(-) diff --git a/source/include/nt_printing.h b/source/include/nt_printing.h index 26d6e7e5f29..57767fc3c6b 100644 --- a/source/include/nt_printing.h +++ b/source/include/nt_printing.h @@ -351,7 +351,7 @@ typedef struct _form #define SPOOLSS_NOTIFY_MSG_UNIX_JOBID 0x0001 /* Job id is unix */ -struct spoolss_notify_msg { +typedef struct spoolss_notify_msg { fstring printer; /* Name of printer notified */ uint32 type; /* Printer or job notify */ uint32 field; /* Notify field changed */ @@ -362,6 +362,18 @@ struct spoolss_notify_msg { uint32 value[2]; char *data; } notify; -}; +} SPOOLSS_NOTIFY_MSG; + +typedef struct { + fstring printername; + uint32 num_msgs; + SPOOLSS_NOTIFY_MSG *msgs; +} SPOOLSS_NOTIFY_MSG_GROUP; + +typedef struct { + TALLOC_CTX *ctx; + uint32 num_groups; + SPOOLSS_NOTIFY_MSG_GROUP *msg_groups; +} SPOOLSS_NOTIFY_MSG_CTR; #endif /* NT_PRINTING_H_ */ diff --git a/source/rpc_client/cli_spoolss_notify.c b/source/rpc_client/cli_spoolss_notify.c index f03046558ee..d07ace8e0cd 100644 --- a/source/rpc_client/cli_spoolss_notify.c +++ b/source/rpc_client/cli_spoolss_notify.c @@ -222,6 +222,9 @@ done: return result; } +/********************************************************************* + *********************************************************************/ + WERROR cli_spoolss_rffpcnex(struct cli_state *cli, TALLOC_CTX *mem_ctx, POLICY_HND *pol, uint32 flags, uint32 options, char *localmachine, uint32 printerlocal, diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index a464f073fdd..ff9ac2ce506 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -728,25 +728,177 @@ static struct notify2_message_table job_notify_table[] = { /* 0x17 */ { "JOB_NOTIFY_BYTES_PRINTED", NULL }, }; + +/*********************************************************************** + Allocate talloc context for container object + **********************************************************************/ + +static void notify_msg_ctr_init( SPOOLSS_NOTIFY_MSG_CTR *ctr ) +{ + if ( !ctr ) + return; + + ctr->ctx = talloc_init(); + + return; +} + +/*********************************************************************** + release all allocated memory and zero out structure + **********************************************************************/ + +static void notify_msg_ctr_destroy( SPOOLSS_NOTIFY_MSG_CTR *ctr ) +{ + if ( !ctr ) + return; + + if ( ctr->ctx ) + talloc_destroy(ctr->ctx); + + ZERO_STRUCTP(ctr); + + return; +} + +/*********************************************************************** + **********************************************************************/ + +static TALLOC_CTX* notify_ctr_getctx( SPOOLSS_NOTIFY_MSG_CTR *ctr ) +{ + if ( !ctr ) + return NULL; + + return ctr->ctx; +} + +/*********************************************************************** + **********************************************************************/ + +static SPOOLSS_NOTIFY_MSG_GROUP* notify_ctr_getgroup( SPOOLSS_NOTIFY_MSG_CTR *ctr, uint32 index ) +{ + if ( !ctr || !ctr->msg_groups ) + return NULL; + + if ( index >= ctr->num_groups ) + return NULL; + + return &ctr->msg_groups[index]; + +} + +/*********************************************************************** + How many groups of change messages do we have ? + **********************************************************************/ + +static int notify_msg_ctr_numgroups( SPOOLSS_NOTIFY_MSG_CTR *ctr ) +{ + if ( !ctr ) + return 0; + + return ctr->num_groups; +} + +/*********************************************************************** + Add a SPOOLSS_NOTIFY_MSG_CTR to the correct group + **********************************************************************/ + +static int notify_msg_ctr_addmsg( SPOOLSS_NOTIFY_MSG_CTR *ctr, SPOOLSS_NOTIFY_MSG *msg ) +{ + SPOOLSS_NOTIFY_MSG_GROUP *groups = NULL; + SPOOLSS_NOTIFY_MSG_GROUP *msg_grp = NULL; + SPOOLSS_NOTIFY_MSG *msg_list = NULL; + int i, new_slot; + + if ( !ctr || !msg ) + return 0; + + /* loop over all groups looking for a matching printer name */ + + for ( i=0; inum_groups; i++ ) { + if ( strcmp(ctr->msg_groups[i].printername, msg->printer) == 0 ) + break; + } + + /* add a new group? */ + + if ( i == ctr->num_groups ) + { + ctr->num_groups++; + + if ( !(groups = talloc_realloc( ctr->ctx, ctr->msg_groups, sizeof(SPOOLSS_NOTIFY_MSG_GROUP)*ctr->num_groups)) ) { + DEBUG(0,("notify_msg_ctr_addmsg: talloc_realloc() failed!\n")); + return 0; + } + ctr->msg_groups = groups; + + /* clear the new entry and set the printer name */ + + ZERO_STRUCT( ctr->msg_groups[ctr->num_groups-1] ); + fstrcpy( ctr->msg_groups[ctr->num_groups-1].printername, msg->printer ); + } + + /* add the change messages; 'i' is the correct index now regardless */ + + msg_grp = &ctr->msg_groups[i]; + + msg_grp->num_msgs++; + + if ( !(msg_list = talloc_realloc( ctr->ctx, msg_grp->msgs, sizeof(SPOOLSS_NOTIFY_MSG)*msg_grp->num_msgs )) ) { + DEBUG(0,("notify_msg_ctr_addmsg: talloc_realloc() failed for new message [%d]!\n", msg_grp->num_msgs)); + return 0; + } + msg_grp->msgs = msg_list; + + new_slot = msg_grp->num_msgs-1; + memcpy( &msg_grp->msgs[new_slot], msg, sizeof(SPOOLSS_NOTIFY_MSG) ); + + /* need to allocate own copy of data */ + + if ( msg->len != 0 ) + msg_grp->msgs[new_slot].notify.data = talloc_memdup( ctr->ctx, msg->notify.data, msg->len ); + + return ctr->num_groups; +} + /*********************************************************************** Send a change notication message on all handles which have a call back registered **********************************************************************/ -static void process_notify2_message(struct spoolss_notify_msg *msg, TALLOC_CTX *mem_ctx) +static void send_notify2_changes( SPOOLSS_NOTIFY_MSG_CTR *ctr, uint32 index ) { - Printer_entry *p; - - DEBUG(8,("process_notify2_message: Enter...[%s]\n", msg->printer)); + Printer_entry *p; + TALLOC_CTX *mem_ctx = notify_ctr_getctx( ctr ); + SPOOLSS_NOTIFY_MSG_GROUP *msg_group = notify_ctr_getgroup( ctr, index ); + SPOOLSS_NOTIFY_MSG *messages; + + + if ( !msg_group ) { + DEBUG(5,("send_notify2_changes() called with no msg group!\n")); + return; + } + + messages = msg_group->msgs; - for (p = printers_list; p; p = p->next) { + if ( !messages ) { + DEBUG(5,("send_notify2_changes() called with no messages!\n")); + return; + } + + DEBUG(8,("send_notify2_changes: Enter...[%s]\n", msg_group->printername)); + + /* loop over all printers */ + + for (p = printers_list; p; p = p->next) + { SPOOL_NOTIFY_INFO_DATA *data; - uint32 data_len = 1; - uint32 id; + uint32 data_len = 0; + uint32 id; + int i; /* Is there notification on this handle? */ - if (!p->notify.client_connected) + if ( !p->notify.client_connected ) continue; DEBUG(10,("Client connected! [%s]\n", p->dev.handlename)); @@ -755,25 +907,31 @@ static void process_notify2_message(struct spoolss_notify_msg *msg, TALLOC_CTX * notifications. */ if ( ( p->printer_type == PRINTER_HANDLE_IS_PRINTER ) && - ( !strequal(msg->printer, p->dev.handlename) ) ) + ( !strequal(msg_group->printername, p->dev.handlename) ) ) continue; DEBUG(10,("Our printer\n")); + /* allocate the max entries possible */ + + data = talloc( mem_ctx, msg_group->num_msgs*sizeof(SPOOL_NOTIFY_INFO_DATA) ); + ZERO_STRUCTP(data); + + /* build the array of change notifications */ + + for ( i=0; inum_msgs; i++ ) + { + SPOOLSS_NOTIFY_MSG *msg = &messages[i]; + /* Are we monitoring this event? */ if (!is_monitoring_event(p, msg->type, msg->field)) continue; + DEBUG(10,("process_notify2_message: Sending message type [%x] field [%x] for printer [%s]\n", msg->type, msg->field, p->dev.handlename)); - /* OK - send the event to the client */ - - data = talloc(mem_ctx, sizeof(SPOOL_NOTIFY_INFO_DATA)); - - ZERO_STRUCTP(data); - /* * if the is a printer notification handle and not a job notification * type, then set the id to 0. Other wise just use what was specified @@ -795,8 +953,8 @@ static void process_notify2_message(struct spoolss_notify_msg *msg, TALLOC_CTX * /* Convert unix jobid to smb jobid */ - if (msg->flags & SPOOLSS_NOTIFY_MSG_UNIX_JOBID) { - + if (msg->flags & SPOOLSS_NOTIFY_MSG_UNIX_JOBID) + { id = sysjob_to_jobid(msg->id); if (id == -1) { @@ -805,22 +963,20 @@ static void process_notify2_message(struct spoolss_notify_msg *msg, TALLOC_CTX * } } - construct_info_data(data, msg->type, msg->field, id); + construct_info_data( &data[data_len], msg->type, msg->field, id ); switch(msg->type) { case PRINTER_NOTIFY_TYPE: if ( !printer_notify_table[msg->field].fn ) goto done; - - printer_notify_table[msg->field].fn(msg, data, mem_ctx); + printer_notify_table[msg->field].fn(msg, &data[data_len], mem_ctx); break; case JOB_NOTIFY_TYPE: if ( !job_notify_table[msg->field].fn ) goto done; - - job_notify_table[msg->field].fn(msg, data, mem_ctx); + job_notify_table[msg->field].fn(msg, &data[data_len], mem_ctx); break; @@ -829,60 +985,51 @@ static void process_notify2_message(struct spoolss_notify_msg *msg, TALLOC_CTX * goto done; } + data_len++; + } + cli_spoolss_rrpcn( ¬ify_cli, mem_ctx, &p->notify.client_hnd, data_len, data, p->notify.change, 0 ); } + done: - DEBUG(8,("process_notify2_message: Exit...\n")); + DEBUG(8,("send_notify2_changes: Exit...\n")); return; } -/******************************************************************** - Receive a notify2 message - ********************************************************************/ +/*********************************************************************** + **********************************************************************/ -static void receive_notify2_message(void *buf, size_t len) +static BOOL notify2_unpack_msg( SPOOLSS_NOTIFY_MSG *msg, void *buf, size_t len ) { - struct spoolss_notify_msg msg; + int offset = 0; - TALLOC_CTX *mem_ctx = talloc_init(); /* Unpack message */ - ZERO_STRUCT(msg); - offset += tdb_unpack((char *)buf + offset, len - offset, "f", - msg.printer); + msg->printer); offset += tdb_unpack((char *)buf + offset, len - offset, "ddddd", - &msg.type, &msg.field, &msg.id, &msg.len, &msg.flags); + &msg->type, &msg->field, &msg->id, &msg->len, &msg->flags); - if (msg.len == 0) + if (msg->len == 0) tdb_unpack((char *)buf + offset, len - offset, "dd", - &msg.notify.value[0], &msg.notify.value[1]); + &msg->notify.value[0], &msg->notify.value[1]); else tdb_unpack((char *)buf + offset, len - offset, "B", - &msg.len, &msg.notify.data); + &msg->len, &msg->notify.data); - DEBUG(3, ("got NOTIFY2 message, type %d, field 0x%02x, flags 0x%04x\n", - msg.type, msg.field, msg.flags)); + DEBUG(3, ("notify2_unpack_msg: got NOTIFY2 message, type %d, field 0x%02x, flags 0x%04x\n", + msg->type, msg->field, msg->flags)); - if (msg.len == 0) - DEBUG(3, ("value1 = %d, value2 = %d\n", msg.notify.value[0], - msg.notify.value[1])); + if (msg->len == 0) + DEBUG(3, ("notify2_unpack_msg: value1 = %d, value2 = %d\n", msg->notify.value[0], + msg->notify.value[1])); else - dump_data(3, msg.notify.data, msg.len); - - /* Process message */ - - process_notify2_message(&msg, mem_ctx); - - /* Free message */ + dump_data(3, msg->notify.data, msg->len); - if (msg.len > 0) - free(msg.notify.data); - - talloc_destroy(mem_ctx); + return True; } /******************************************************************** @@ -891,43 +1038,86 @@ static void receive_notify2_message(void *buf, size_t len) static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, size_t len) { - size_t msg_count, i; - char *buf = (char *)msg; - char *msg_ptr; - - if (len < 4) - goto bad_msg; + size_t msg_count, i; + char *buf = (char *)msg; + char *msg_ptr; + size_t msg_len; + SPOOLSS_NOTIFY_MSG notify; + SPOOLSS_NOTIFY_MSG_CTR messages; + int num_groups; + if (len < 4) { + DEBUG(0,("receive_notify2_message_list: bad message format (len < 4)!\n")); + return; + } + msg_count = IVAL(buf, 0); msg_ptr = buf + 4; DEBUG(5, ("receive_notify2_message_list: got %d messages in list\n", msg_count)); - if (msg_count == 0) - goto bad_msg; - - for (i = 0; i < msg_count; i++) { - size_t msg_len; + if (msg_count == 0) { + DEBUG(0,("receive_notify2_message_list: bad message format (msg_count == 0) !\n")); + return; + } - if (msg_ptr + 4 - buf > len) - goto bad_msg; + /* initialize the container */ + + ZERO_STRUCT( messages ); + notify_msg_ctr_init( &messages ); + + /* + * build message groups for each printer identified + * in a change_notify msg. Remember that a PCN message + * includes the handle returned for the srv_spoolss_replyopenprinter() + * call. Therefore messages are grouped according to printer handle. + */ + + for ( i=0; i len) { + DEBUG(0,("receive_notify2_message_list: bad message format (len > buf_size) !\n")); + return; + } msg_len = IVAL(msg_ptr,0); msg_ptr += 4; - if (msg_ptr + msg_len - buf > len) - goto bad_msg; - receive_notify2_message(msg_ptr, msg_len); + if (msg_ptr + msg_len - buf > len) { + DEBUG(0,("receive_notify2_message_list: bad message format (bad len) !\n")); + return; + } + + /* unpack messages */ + + ZERO_STRUCT( notify ); + notify2_unpack_msg( ¬ify, msg_ptr, msg_len ); msg_ptr += msg_len; + + /* add to correct list in container */ + + notify_msg_ctr_addmsg( &messages, ¬ify ); + + /* free memory that might have been allocated by notify2_unpack_msg() */ + + if ( notify.len != 0 ) + SAFE_FREE( notify.notify.data ); } - - DEBUG(10,("receive_notify2_message_list: processed %u messages\n", - (unsigned int)msg_count )); + + /* process each group of messages */ + + num_groups = notify_msg_ctr_numgroups( &messages ); + for ( i=0; i Date: Tue, 10 Sep 2002 06:41:27 +0000 Subject: Updated examples for new top level module layout. Fixed some bugs also. --- source/python/examples/spoolss/changeid.py | 7 ++++++- source/python/examples/spoolss/enumprinters.py | 23 +++++++++++++++++------ source/python/examples/spoolss/psec.py | 3 ++- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/source/python/examples/spoolss/changeid.py b/source/python/examples/spoolss/changeid.py index b2345094edc..85fe0efe8a4 100755 --- a/source/python/examples/spoolss/changeid.py +++ b/source/python/examples/spoolss/changeid.py @@ -2,8 +2,13 @@ # # Display the changeid for a list of printers given on the command line # +# Sample usage: +# +# changeid.py '\\win2kdc1\magpie' +# -import sys, spoolss +import sys +from samba import spoolss if len(sys.argv) == 1: print "Usage: changeid.py " diff --git a/source/python/examples/spoolss/enumprinters.py b/source/python/examples/spoolss/enumprinters.py index bf08b95bb95..478c46bc24c 100755 --- a/source/python/examples/spoolss/enumprinters.py +++ b/source/python/examples/spoolss/enumprinters.py @@ -1,20 +1,28 @@ #!/usr/bin/env python # -# Display information on all printers on a print server +# Display information on all printers on a print server. Defaults to +# printer info level 1. +# +# Example: enumprinters.py win2kdc1 # -import sys, spoolss +import sys +from samba import spoolss -if len(sys.argv) != 2: - print "Usage: changeid.py " +if len(sys.argv) < 2 or len(sys.argv) > 3: + print "Usage: enumprinters.py [infolevel]" sys.exit(1) printserver = sys.argv[1] +level = 1 +if len(sys.argv) == 3: + level = int(sys.argv[2]) + # Get list of printers try: - printer_list = spoolss.enumprinters(printserver) + printer_list = spoolss.enumprinters("\\\\%s" % printserver) except: print "error enumerating printers on %s" % printserver sys.exit(1) @@ -22,4 +30,7 @@ except: # Display basic info for printer in printer_list: - print "%s: %s" % (printer["printer_name"], printer["comment"]) + h = spoolss.openprinter("\\\\%s\\%s" % (printserver, printer)) + info = h.getprinter(level = level) + print "Printer info %d for %s: %s" % (level, printer, info) + print diff --git a/source/python/examples/spoolss/psec.py b/source/python/examples/spoolss/psec.py index f3fdb7bccd6..498a0ef1744 100755 --- a/source/python/examples/spoolss/psec.py +++ b/source/python/examples/spoolss/psec.py @@ -3,7 +3,8 @@ # Get or set the security descriptor on a printer # -import sys, spoolss, re, string +import sys, re, string +from samba import spoolss if len(sys.argv) != 3: print "Usage: psec.py getsec|setsec printername" -- cgit From e8f9fbd32b73f60db3683d23a979dc09e7204258 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Tue, 10 Sep 2002 08:36:55 +0000 Subject: Check in examples for tdb packer --- source/python/examples/tdbpack/tdbtimetrial.py | 12 ++ source/python/examples/tdbpack/test_tdbpack.py | 195 +++++++++++++++++++++++++ 2 files changed, 207 insertions(+) create mode 100755 source/python/examples/tdbpack/tdbtimetrial.py create mode 100755 source/python/examples/tdbpack/test_tdbpack.py diff --git a/source/python/examples/tdbpack/tdbtimetrial.py b/source/python/examples/tdbpack/tdbtimetrial.py new file mode 100755 index 00000000000..be6404899d8 --- /dev/null +++ b/source/python/examples/tdbpack/tdbtimetrial.py @@ -0,0 +1,12 @@ +#! /usr/bin/python2.2 + +def run_trial(): + # import tdbutil + from samba.tdbpack import pack + + for i in xrange(500000): + pack("ddffd", (10, 2, "mbp", "martin", 0)) + #s = "\n\0\0\0" + "\x02\0\0\0" + "mbp\0" + "martin\0" + "\0\0\0\0" + +if __name__ == '__main__': + run_trial() diff --git a/source/python/examples/tdbpack/test_tdbpack.py b/source/python/examples/tdbpack/test_tdbpack.py new file mode 100755 index 00000000000..36fed881e33 --- /dev/null +++ b/source/python/examples/tdbpack/test_tdbpack.py @@ -0,0 +1,195 @@ +#! /usr/bin/env python2.2 + +__doc__ = """test case for samba.tdbkpack functions + +tdbpack provides a means of pickling values into binary formats +compatible with that used by the samba tdbpack()/tdbunpack() +functions. + +Numbers are always stored in little-endian format; strings are stored +in either DOS or Unix codepage as appropriate. + +The format for any particular element is encoded as a short ASCII +string, with one character per field.""" + +# Copyright (C) 2002 Hewlett-Packard. + +__author__ = 'Martin Pool ' + +import unittest +# import tdbutil +import samba.tdbpack + +packer = samba.tdbpack.pack +unpacker = samba.tdbpack.unpack + + +class PackTests(unittest.TestCase): + symm_cases = [('B', ['hello' * 51], '\xff\0\0\0' + 'hello' * 51), + ('w', [42], '\x2a\0'), + ('www', [42, 2, 69], '\x2a\0\x02\0\x45\0'), + ('wd', [42, 256], '\x2a\0\0\x01\0\0'), + ('w', [0], '\0\0'), + ('w', [255], '\xff\0'), + ('w', [256], '\0\x01'), + ('w', [0xdead], '\xad\xde'), + ('w', [0xffff], '\xff\xff'), + ('p', [0], '\0\0\0\0'), + ('p', [1], '\x01\0\0\0'), + ('d', [0x01020304], '\x04\x03\x02\x01'), + ('d', [0x7fffffff], '\xff\xff\xff\x7f'), + ('d', [0x80000000], '\x00\x00\x00\x80'), + ('d', [-1], '\xff\xff\xff\xff'), + ('d', [-255], '\x01\xff\xff\xff'), + ('d', [-256], '\x00\xff\xff\xff'), + ('ddd', [1, 10, 50], '\x01\0\0\0\x0a\0\0\0\x32\0\0\0'), + ('ff', ['hello', 'world'], 'hello\0world\0'), + ('fP', ['hello', 'world'], 'hello\0world\0'), + ('PP', ['hello', 'world'], 'hello\0world\0'), + ('B', [''], '\0\0\0\0'), + ('B', ['hello'], '\x05\0\0\0hello'), + ('BB', ['hello\0world', 'now'], + '\x0b\0\0\0hello\0world\x03\0\0\0now'), + ('pd', [1, 10], '\x01\0\0\0\x0a\0\0\0'), + ('BBB', ['hello', '', 'world'], + '\x05\0\0\0hello\0\0\0\0\x05\0\0\0world'), + + # strings are sequences in Python, there's no getting away + # from it + ('ffff', 'evil', 'e\0v\0i\0l\0'), + ('BBBB', 'evil', + '\x01\0\0\0e' + '\x01\0\0\0v' + '\x01\0\0\0i' + '\x01\0\0\0l'), + + ('', [], ''), + + # exercise some long strings + ('PP', ['hello' * 255, 'world' * 255], + 'hello' * 255 + '\0' + 'world' * 255 + '\0'), + ('PP', ['hello' * 40000, 'world' * 50000], + 'hello' * 40000 + '\0' + 'world' * 50000 + '\0'), + ('B', ['hello' * 51], '\xff\0\0\0' + 'hello' * 51), + ('BB', ['hello' * 40000, 'world' * 50000], + '\x40\x0d\x03\0' + 'hello' * 40000 + '\x90\xd0\x03\x00' + 'world' * 50000), + ] + + def test_symmetric(self): + """Cookbook of symmetric pack/unpack tests + """ + for format, values, expected in self.symm_cases: + self.assertEquals(packer(format, values), expected) + out, rest = unpacker(format, expected) + self.assertEquals(rest, '') + self.assertEquals(list(values), list(out)) + + + def test_pack(self): + """Cookbook of expected pack values + + These can't be used for the symmetric test because the unpacked value is + not "canonical". + """ + cases = [('w', (42,), '\x2a\0'), + ('p', [None], '\0\0\0\0'), + ('p', ['true'], '\x01\0\0\0'), + + ('w', {1: 'fruit'}, '\x01\0'), + # passing a dictionary is dodgy, but it gets coerced to keys + # as if you called list() + ] + + for format, values, expected in cases: + self.assertEquals(packer(format, values), expected) + + def test_unpack_extra(self): + # Test leftover data + for format, values, packed in self.symm_cases: + out, rest = unpacker(format, packed + 'hello sailor!') + self.assertEquals(rest, 'hello sailor!') + self.assertEquals(list(values), list(out)) + + + def test_unpack(self): + """Cookbook of tricky unpack tests""" + cases = [ + ] + for format, values, expected in cases: + out, rest = unpacker(format, expected) + self.assertEquals(rest, '') + self.assertEquals(list(values), list(out)) + + + def test_pack_failures(self): + """Expected errors for incorrect packing""" + cases = [('w', [], IndexError), + ('w', (), IndexError), + ('w', {}, IndexError), + ('ww', [2], IndexError), + ('w', 2, TypeError), + ('', [1, 2, 3], IndexError), + ('w', None, TypeError), + ('wwwwwwwwwwww', [], IndexError), + ('w', [2, 3], IndexError), + ('w', [0x60A15EC5L], TypeError), + ('w', [None], TypeError), + ('w', xrange(10000), IndexError), + ('d', [], IndexError), + ('d', [0L], TypeError), + ('p', [], IndexError), + ('f', [2], TypeError), + ('P', [None], TypeError), + ('P', (), IndexError), + ('f', [packer], TypeError), + ('fw', ['hello'], IndexError), + ('f', [u'hello'], TypeError), + ('B', [2], TypeError), + (None, [2, 3, 4], TypeError), + (ord('f'), [20], TypeError), + (['w', 'w'], [2, 2], TypeError), + ('Q', [2], ValueError), + ('fQ', ['2', 3], ValueError), + ('fQ', ['2'], IndexError), + (2, [2], TypeError), + ({}, {}, TypeError)] + for format, values, throwable_class in cases: + def do_pack(): + packer(format, values) + self.assertRaises(throwable_class, do_pack) + + + def test_unpack_failures(self): + """Expected errors for incorrect unpacking""" + cases = [('$', '', ValueError), + ('Q', '', ValueError), + ('Q$', '', ValueError), + ('f', '', IndexError), + ('d', '', IndexError), + ('d', '2', IndexError), + ('d', '22', IndexError), + ('d', '222', IndexError), + ('w', '', IndexError), + ('w', '2', IndexError), + ('f', 'hello', IndexError), + ('f', '', IndexError), + ('p', '\x01\0', IndexError), + ('B', '\xff\0\0\0hello', IndexError), + ('B', '\xff\0', IndexError), + ('B', '\x01\0\0\0', IndexError), + ('B', '\x05\0\0\0hell', IndexError), + ('B', '\xff\xff\xff\xff', ValueError), + ('B', 'foobar', IndexError), + ('BB', '\x01\0\0\0a\x01', IndexError), + ] + + for format, values, throwable_class in cases: + def do_unpack(): + unpacker(format, values) + self.assertRaises(throwable_class, do_unpack) + + + +if __name__ == '__main__': + unittest.main() + -- cgit From a9112a1e4b24ccd94be4d0d055ddc9d1bdfef1be Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 10 Sep 2002 17:24:17 +0000 Subject: Patch from Andy Levine andyl@epicrealm.com who discovered that W2K DMB's return empty NetServerEnum2 on port 445, but not on port 139. Jeremy. --- source/nmbd/nmbd_synclists.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/nmbd/nmbd_synclists.c b/source/nmbd/nmbd_synclists.c index bf03d4d1cf2..24adf4e69f2 100644 --- a/source/nmbd/nmbd_synclists.c +++ b/source/nmbd/nmbd_synclists.c @@ -70,7 +70,11 @@ static void sync_child(char *name, int nm_type, uint32 local_type = local ? SV_TYPE_LOCAL_LIST_ONLY : 0; struct nmb_name called, calling; - if (!cli_initialise(&cli) || !cli_connect(&cli, name, &ip)) { + /* W2K DMB's return empty browse lists on port 445. Use 139. + * Patch from Andy Levine andyl@epicrealm.com. + */ + + if (!cli_initialise(&cli) || !cli_set_port(&cli, 139) || !cli_connect(&cli, name, &ip)) { return; } -- cgit From 97ede49e1271fa00c6ffdf9e6e3c2330ea935461 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Tue, 10 Sep 2002 21:37:53 +0000 Subject: AbortPrinter() fix merged from APP_HEAD. --- source/printing/printing.c | 34 +++++++++++++++++++++++++++++++--- source/rpc_server/srv_spoolss_nt.c | 24 +++++++++++++++++++++--- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/source/printing/printing.c b/source/printing/printing.c index df971a78c5a..035d4d383af 100644 --- a/source/printing/printing.c +++ b/source/printing/printing.c @@ -1048,8 +1048,11 @@ static BOOL is_owner(struct current_user *user, int snum, uint32 jobid) BOOL print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR *errcode) { - BOOL owner; + BOOL owner, deleted; + char *fname; + *errcode = WERR_OK; + owner = is_owner(user, snum, jobid); /* Check access against security descriptor or whether the user @@ -1062,15 +1065,40 @@ BOOL print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR return False; } - if (!print_job_delete1(snum, jobid)) + /* + * get the spooled filename of the print job + * if this works, then the file has not been spooled + * to the underlying print system. Just delete the + * spool file & return. + */ + + if ( (fname = print_job_fname( snum, jobid )) != NULL ) + { + /* remove the spool file */ + DEBUG(10,("print_job_delete: Removing spool file [%s]\n", fname )); + if ( unlink( fname ) == -1 ) { + *errcode = map_werror_from_unix(errno); + return False; + } + + return True; + } + + if (!print_job_delete1(snum, jobid)) { + *errcode = WERR_ACCESS_DENIED; return False; + } /* force update the database and say the delete failed if the job still exists */ print_queue_update(snum); + + deleted = !print_job_exists(snum, jobid); + if ( !deleted ) + *errcode = WERR_ACCESS_DENIED; - return !print_job_exists(snum, jobid); + return deleted; } /**************************************************************************** diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index ff9ac2ce506..07c22b063a9 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -5417,13 +5417,31 @@ static WERROR control_printer(POLICY_HND *handle, uint32 command, /******************************************************************** * api_spoolss_abortprinter + * From MSDN: "Deletes printer's spool file if printer is configured + * for spooling" ********************************************************************/ WERROR _spoolss_abortprinter(pipes_struct *p, SPOOL_Q_ABORTPRINTER *q_u, SPOOL_R_ABORTPRINTER *r_u) { - POLICY_HND *handle = &q_u->handle; - - return control_printer(handle, PRINTER_CONTROL_PURGE, p); + POLICY_HND *handle = &q_u->handle; + Printer_entry *Printer = find_printer_index_by_hnd(p, handle); + int snum; + struct current_user user; + WERROR errcode = WERR_OK; + + if (!Printer) { + DEBUG(2,("_spoolss_abortprinter: Invalid handle (%s:%u:%u)\n",OUR_HANDLE(handle))); + return WERR_BADFID; + } + + if (!get_printer_snum(p, handle, &snum)) + return WERR_BADFID; + + get_current_user( &user, p ); + + print_job_delete( &user, snum, Printer->jobid, &errcode ); + + return errcode; } /******************************************************************** -- cgit From 8021bbbd0c5fad6db45a4c862848ea667cad0b79 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Tue, 10 Sep 2002 21:41:25 +0000 Subject: removed warning about shadowed globals --- source/rpc_server/srv_spoolss_nt.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index 07c22b063a9..8b5dcd3b6cf 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -774,15 +774,15 @@ static TALLOC_CTX* notify_ctr_getctx( SPOOLSS_NOTIFY_MSG_CTR *ctr ) /*********************************************************************** **********************************************************************/ -static SPOOLSS_NOTIFY_MSG_GROUP* notify_ctr_getgroup( SPOOLSS_NOTIFY_MSG_CTR *ctr, uint32 index ) +static SPOOLSS_NOTIFY_MSG_GROUP* notify_ctr_getgroup( SPOOLSS_NOTIFY_MSG_CTR *ctr, uint32 idx ) { if ( !ctr || !ctr->msg_groups ) return NULL; - if ( index >= ctr->num_groups ) + if ( idx >= ctr->num_groups ) return NULL; - return &ctr->msg_groups[index]; + return &ctr->msg_groups[idx]; } @@ -865,11 +865,11 @@ static int notify_msg_ctr_addmsg( SPOOLSS_NOTIFY_MSG_CTR *ctr, SPOOLSS_NOTIFY_MS back registered **********************************************************************/ -static void send_notify2_changes( SPOOLSS_NOTIFY_MSG_CTR *ctr, uint32 index ) +static void send_notify2_changes( SPOOLSS_NOTIFY_MSG_CTR *ctr, uint32 idx ) { Printer_entry *p; TALLOC_CTX *mem_ctx = notify_ctr_getctx( ctr ); - SPOOLSS_NOTIFY_MSG_GROUP *msg_group = notify_ctr_getgroup( ctr, index ); + SPOOLSS_NOTIFY_MSG_GROUP *msg_group = notify_ctr_getgroup( ctr, idx ); SPOOLSS_NOTIFY_MSG *messages; -- cgit From 6f0561acadd139e37f86e30a2bbf10f428178eaf Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Tue, 10 Sep 2002 21:48:07 +0000 Subject: removing compiler warnings about shadowed globals --- source/utils/smbpasswd.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/source/utils/smbpasswd.c b/source/utils/smbpasswd.c index 98993676c98..75a4319cb96 100644 --- a/source/utils/smbpasswd.c +++ b/source/utils/smbpasswd.c @@ -217,23 +217,23 @@ static int process_options(int argc, char **argv, int local_flags) *************************************************************/ static char *stdin_new_passwd(void) { - static fstring new_passwd; + static fstring new_pw; size_t len; - ZERO_ARRAY(new_passwd); + ZERO_ARRAY(new_pw); /* * if no error is reported from fgets() and string at least contains * the newline that ends the password, then replace the newline with * a null terminator. */ - if ( fgets(new_passwd, sizeof(new_passwd), stdin) != NULL) { - if ((len = strlen(new_passwd)) > 0) { - if(new_passwd[len-1] == '\n') - new_passwd[len - 1] = 0; + if ( fgets(new_pw, sizeof(new_pw), stdin) != NULL) { + if ((len = strlen(new_pw)) > 0) { + if(new_pw[len-1] == '\n') + new_pw[len - 1] = 0; } } - return(new_passwd); + return(new_pw); } @@ -259,20 +259,20 @@ static char *get_pass( char *prompt, BOOL stdin_get) static char *prompt_for_new_password(BOOL stdin_get) { char *p; - fstring new_passwd; + fstring new_pw; - ZERO_ARRAY(new_passwd); + ZERO_ARRAY(new_pw); p = get_pass("New SMB password:", stdin_get); - fstrcpy(new_passwd, p); + fstrcpy(new_pw, p); SAFE_FREE(p); p = get_pass("Retype new SMB password:", stdin_get); - if (strcmp(p, new_passwd)) { + if (strcmp(p, new_pw)) { fprintf(stderr, "Mismatch - password unchanged.\n"); - ZERO_ARRAY(new_passwd); + ZERO_ARRAY(new_pw); SAFE_FREE(p); return NULL; } @@ -285,27 +285,27 @@ static char *prompt_for_new_password(BOOL stdin_get) Change a password either locally or remotely. *************************************************************/ -static BOOL password_change(const char *remote_machine, char *user_name, - char *old_passwd, char *new_passwd, int local_flags) +static BOOL password_change(const char *remote_mach, char *username, + char *old_passwd, char *new_pw, int local_flags) { BOOL ret; pstring err_str; pstring msg_str; - if (remote_machine != NULL) { + if (remote_mach != NULL) { if (local_flags & (LOCAL_ADD_USER|LOCAL_DELETE_USER|LOCAL_DISABLE_USER|LOCAL_ENABLE_USER| LOCAL_TRUST_ACCOUNT|LOCAL_SET_NO_PASSWORD)) { /* these things can't be done remotely yet */ return False; } - ret = remote_password_change(remote_machine, user_name, - old_passwd, new_passwd, err_str, sizeof(err_str)); + ret = remote_password_change(remote_mach, username, + old_passwd, new_pw, err_str, sizeof(err_str)); if(*err_str) fprintf(stderr, err_str); return ret; } - ret = local_password_change(user_name, local_flags, new_passwd, + ret = local_password_change(username, local_flags, new_pw, err_str, sizeof(err_str), msg_str, sizeof(msg_str)); if(*msg_str) -- cgit From c93b40f43d5f5027f26c9b6bb906011a9075db2d Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 11 Sep 2002 00:50:13 +0000 Subject: Fix missing braces around push lock call. Jeremy. --- source/locking/locking.c | 2 +- source/smbd/reply.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/source/locking/locking.c b/source/locking/locking.c index d42d041b790..3eb7ca47832 100644 --- a/source/locking/locking.c +++ b/source/locking/locking.c @@ -142,7 +142,7 @@ static NTSTATUS do_lock(files_struct *fsp,connection_struct *conn, uint16 lock_p } /**************************************************************************** - Utility function called by locking requests. This is *DISGISTING*. It also + Utility function called by locking requests. This is *DISGUSTING*. It also appears to be "What Windows Does" (tm). Andrew, ever wonder why Windows 2000 is so slow on the locking tests...... ? This is the reason. Much though I hate it, we need this. JRA. diff --git a/source/smbd/reply.c b/source/smbd/reply.c index 2b361fd43a7..36f7c3a8837 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -1609,9 +1609,10 @@ int reply_lockread(connection_struct *conn, char *inbuf,char *outbuf, int length * this smb into a queued request and push it * onto the blocking lock queue. */ - if(push_blocking_lock_request(inbuf, length, -1, 0)) + if(push_blocking_lock_request(inbuf, length, -1, 0)) { END_PROFILE(SMBlockread); - return -1; + return -1; + } } END_PROFILE(SMBlockread); return ERROR_NT(status); -- cgit From 237e36124cedf0485deaff81f34688fa862c3317 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 11 Sep 2002 01:05:22 +0000 Subject: Ensure we've failed a lock with a lock denied message before automatically pushing it onto the blocking queue. Jeremy. --- source/include/smb_macros.h | 15 +++++++++------ source/smbd/reply.c | 6 +++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/source/include/smb_macros.h b/source/include/smb_macros.h index ccf151fab2b..71d4bac7952 100644 --- a/source/include/smb_macros.h +++ b/source/include/smb_macros.h @@ -80,17 +80,20 @@ #define FNUM_OK(fsp,c) (OPEN_FSP(fsp) && (c)==(fsp)->conn) #define CHECK_FSP(fsp,conn) if (!FNUM_OK(fsp,conn)) \ - return(ERROR_DOS(ERRDOS,ERRbadfid)); \ - else if((fsp)->fd == -1) \ - return(ERROR_DOS(ERRDOS,ERRbadaccess)) + return(ERROR_DOS(ERRDOS,ERRbadfid)); \ + else if((fsp)->fd == -1) \ + return(ERROR_DOS(ERRDOS,ERRbadaccess)) #define CHECK_READ(fsp) if (!(fsp)->can_read) \ - return(ERROR_DOS(ERRDOS,ERRbadaccess)) + return(ERROR_DOS(ERRDOS,ERRbadaccess)) #define CHECK_WRITE(fsp) if (!(fsp)->can_write) \ - return(ERROR_DOS(ERRDOS,ERRbadaccess)) + return(ERROR_DOS(ERRDOS,ERRbadaccess)) #define CHECK_ERROR(fsp) if (HAS_CACHED_ERROR(fsp)) \ - return(CACHED_ERROR(fsp)) + return(CACHED_ERROR(fsp)) + +#define ERROR_WAS_LOCK_DENIED(status) (NT_STATUS_EQUAL((status), NT_STATUS_LOCK_NOT_GRANTED) || \ + NT_STATUS_EQUAL((status), NT_STATUS_FILE_LOCK_CONFLICT) ) /* translates a connection number into a service number */ #define SNUM(conn) ((conn)?(conn)->service:-1) diff --git a/source/smbd/reply.c b/source/smbd/reply.c index 36f7c3a8837..3fc9cf21fd1 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -1603,7 +1603,7 @@ int reply_lockread(connection_struct *conn, char *inbuf,char *outbuf, int length (SMB_BIG_UINT)numtoread, (SMB_BIG_UINT)startpos, WRITE_LOCK); if (NT_STATUS_V(status)) { - if (lp_blocking_locks(SNUM(conn))) { + if (lp_blocking_locks(SNUM(conn)) && ERROR_WAS_LOCK_DENIED(status)) { /* * A blocking lock was requested. Package up * this smb into a queued request and push it @@ -2425,7 +2425,7 @@ int reply_lock(connection_struct *conn, status = do_lock_spin(fsp, conn, SVAL(inbuf,smb_pid), count, offset, WRITE_LOCK); if (NT_STATUS_V(status)) { - if (lp_blocking_locks(SNUM(conn))) { + if (lp_blocking_locks(SNUM(conn)) && ERROR_WAS_LOCK_DENIED(status)) { /* * A blocking lock was requested. Package up * this smb into a queued request and push it @@ -3860,7 +3860,7 @@ no oplock granted on this file (%s).\n", fsp->fnum, fsp->fsp_name)); status = do_lock_spin(fsp,conn,lock_pid, count,offset, ((locktype & 1) ? READ_LOCK : WRITE_LOCK)); if (NT_STATUS_V(status)) { - if ((lock_timeout != 0) && lp_blocking_locks(SNUM(conn))) { + if ((lock_timeout != 0) && lp_blocking_locks(SNUM(conn)) && ERROR_WAS_LOCK_DENIED(status)) { /* * A blocking lock was requested. Package up * this smb into a queued request and push it -- cgit From 06f6e7110029d5d60c4f34123f470bfb4c96364a Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 01:20:49 +0000 Subject: Change 'import spoolss' to 'from samba import spoolss'. --- source/python/gtdbtool | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/python/gtdbtool b/source/python/gtdbtool index d5c76fa318f..129f4fe0e2e 100755 --- a/source/python/gtdbtool +++ b/source/python/gtdbtool @@ -3,7 +3,7 @@ import sys from gtkdictbrowser import GtkDictBrowser import gtk -import tdb +from samba import tdb import string # Open handle on tdb -- cgit From 640f061ab2c0fa772c0b181a5492aaf94b21fd3e Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 11 Sep 2002 01:44:32 +0000 Subject: Formatting tidyups before I look at implementing the sendfile in READX. Jeremy. --- source/smbd/reply.c | 379 +++++++++++++++++++++++++--------------------------- 1 file changed, 185 insertions(+), 194 deletions(-) diff --git a/source/smbd/reply.c b/source/smbd/reply.c index 3fc9cf21fd1..c3a4c5a8603 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -23,7 +23,6 @@ makes to handle specific protocols */ - #include "includes.h" /* look in server.c for some explanation of these variables */ @@ -40,9 +39,8 @@ unsigned int smb_echo_count = 0; extern BOOL global_encrypted_passwords_negotiated; - /**************************************************************************** - reply to an special message + Reply to an special message. ****************************************************************************/ int reply_special(char *inbuf,char *outbuf) @@ -141,7 +139,6 @@ int reply_special(char *inbuf,char *outbuf) return(outsize); } - /**************************************************************************** Reply to a tcon. ****************************************************************************/ @@ -307,10 +304,10 @@ int reply_tcon_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt return chain_reply(inbuf,outbuf,length,bufsize); } - /**************************************************************************** - reply to an unknown type + Reply to an unknown type. ****************************************************************************/ + int reply_unknown(char *inbuf,char *outbuf) { int type; @@ -322,10 +319,10 @@ int reply_unknown(char *inbuf,char *outbuf) return(ERROR_DOS(ERRSRV,ERRunknownsmb)); } - /**************************************************************************** - reply to an ioctl + Reply to an ioctl. ****************************************************************************/ + int reply_ioctl(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { @@ -339,8 +336,7 @@ int reply_ioctl(connection_struct *conn, DEBUG(4, ("Received IOCTL (code 0x%x)\n", ioctl_code)); - switch (ioctl_code) - { + switch (ioctl_code) { case IOCTL_QUERY_JOB_INFO: replysize = 32; break; @@ -355,16 +351,15 @@ int reply_ioctl(connection_struct *conn, SSVAL(outbuf,smb_vwv6,52); /* Offset to data */ p = smb_buf(outbuf) + 1; /* Allow for alignment */ - switch (ioctl_code) - { - case IOCTL_QUERY_JOB_INFO: - { - uint16 rap_jobid = pjobid_to_rap(SNUM(fsp->conn), fsp->print_jobid); - SSVAL(p,0,rap_jobid); /* Job number */ - srvstr_push(outbuf, p+2, global_myname, 15, STR_TERMINATE|STR_ASCII); - srvstr_push(outbuf, p+18, lp_servicename(SNUM(conn)), 13, STR_TERMINATE|STR_ASCII); - break; - } + switch (ioctl_code) { + case IOCTL_QUERY_JOB_INFO: + { + uint16 rap_jobid = pjobid_to_rap(SNUM(fsp->conn), fsp->print_jobid); + SSVAL(p,0,rap_jobid); /* Job number */ + srvstr_push(outbuf, p+2, global_myname, 15, STR_TERMINATE|STR_ASCII); + srvstr_push(outbuf, p+18, lp_servicename(SNUM(conn)), 13, STR_TERMINATE|STR_ASCII); + break; + } } END_PROFILE(SMBioctl); @@ -372,56 +367,56 @@ int reply_ioctl(connection_struct *conn, } /**************************************************************************** - reply to a chkpth + Reply to a chkpth. ****************************************************************************/ + int reply_chkpth(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { - int outsize = 0; - int mode; - pstring name; - BOOL ok = False; - BOOL bad_path = False; - SMB_STRUCT_STAT sbuf; - START_PROFILE(SMBchkpth); + int outsize = 0; + int mode; + pstring name; + BOOL ok = False; + BOOL bad_path = False; + SMB_STRUCT_STAT sbuf; + START_PROFILE(SMBchkpth); - srvstr_pull_buf(inbuf, name, smb_buf(inbuf) + 1, sizeof(name), STR_TERMINATE); + srvstr_pull_buf(inbuf, name, smb_buf(inbuf) + 1, sizeof(name), STR_TERMINATE); - RESOLVE_DFSPATH(name, conn, inbuf, outbuf); + RESOLVE_DFSPATH(name, conn, inbuf, outbuf); - unix_convert(name,conn,0,&bad_path,&sbuf); + unix_convert(name,conn,0,&bad_path,&sbuf); - mode = SVAL(inbuf,smb_vwv0); + mode = SVAL(inbuf,smb_vwv0); - if (check_name(name,conn)) { - if (VALID_STAT(sbuf) || vfs_stat(conn,name,&sbuf) == 0) - ok = S_ISDIR(sbuf.st_mode); - } + if (check_name(name,conn)) { + if (VALID_STAT(sbuf) || vfs_stat(conn,name,&sbuf) == 0) + ok = S_ISDIR(sbuf.st_mode); + } - if (!ok) { - /* We special case this - as when a Windows machine - is parsing a path is steps through the components - one at a time - if a component fails it expects - ERRbadpath, not ERRbadfile. - */ - if(errno == ENOENT) { - return ERROR_NT(NT_STATUS_OBJECT_PATH_NOT_FOUND); - } + if (!ok) { + /* We special case this - as when a Windows machine + is parsing a path is steps through the components + one at a time - if a component fails it expects + ERRbadpath, not ERRbadfile. + */ + if(errno == ENOENT) + return ERROR_NT(NT_STATUS_OBJECT_PATH_NOT_FOUND); - return(UNIXERROR(ERRDOS,ERRbadpath)); - } + return(UNIXERROR(ERRDOS,ERRbadpath)); + } - outsize = set_message(outbuf,0,0,True); + outsize = set_message(outbuf,0,0,True); - DEBUG(3,("chkpth %s mode=%d\n", name, mode)); + DEBUG(3,("chkpth %s mode=%d\n", name, mode)); - END_PROFILE(SMBchkpth); - return(outsize); + END_PROFILE(SMBchkpth); + return(outsize); } - /**************************************************************************** - reply to a getatr + Reply to a getatr. ****************************************************************************/ + int reply_getatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { pstring fname; @@ -494,10 +489,10 @@ int reply_getatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size return(outsize); } - /**************************************************************************** - reply to a setatr + Reply to a setatr. ****************************************************************************/ + int reply_setatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { pstring fname; @@ -543,10 +538,10 @@ int reply_setatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size return(outsize); } - /**************************************************************************** - reply to a dskattr + Reply to a dskattr. ****************************************************************************/ + int reply_dskattr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { int outsize = 0; @@ -591,11 +586,11 @@ int reply_dskattr(connection_struct *conn, char *inbuf,char *outbuf, int dum_siz return(outsize); } - /**************************************************************************** - reply to a search - Can be called from SMBsearch, SMBffirst or SMBfunique. + Reply to a search. + Can be called from SMBsearch, SMBffirst or SMBfunique. ****************************************************************************/ + int reply_search(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { pstring mask; @@ -800,10 +795,10 @@ int reply_search(connection_struct *conn, char *inbuf,char *outbuf, int dum_size return(outsize); } - /**************************************************************************** - reply to a fclose (stop directory search) + Reply to a fclose (stop directory search). ****************************************************************************/ + int reply_fclose(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { int outsize = 0; @@ -842,9 +837,8 @@ int reply_fclose(connection_struct *conn, char *inbuf,char *outbuf, int dum_size return(outsize); } - /**************************************************************************** - reply to an open + Reply to an open. ****************************************************************************/ int reply_open(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) @@ -914,10 +908,10 @@ int reply_open(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, return(outsize); } - /**************************************************************************** - reply to an open and X + Reply to an open and X. ****************************************************************************/ + int reply_open_and_X(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize) { pstring fname; @@ -1023,10 +1017,10 @@ int reply_open_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt return chain_reply(inbuf,outbuf,length,bufsize); } - /**************************************************************************** - reply to a SMBulogoffX + Reply to a SMBulogoffX. ****************************************************************************/ + int reply_ulogoffX(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize) { uint16 vuid = SVAL(inbuf,smb_uid); @@ -1053,10 +1047,10 @@ int reply_ulogoffX(connection_struct *conn, char *inbuf,char *outbuf,int length, return chain_reply(inbuf,outbuf,length,bufsize); } - /**************************************************************************** - reply to a mknew or a create + Reply to a mknew or a create. ****************************************************************************/ + int reply_mknew(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { pstring fname; @@ -1126,10 +1120,10 @@ int reply_mknew(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, return(outsize); } - /**************************************************************************** - reply to a create temporary file + Reply to a create temporary file. ****************************************************************************/ + int reply_ctemp(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { pstring fname; @@ -1567,8 +1561,9 @@ int reply_readbraw(connection_struct *conn, char *inbuf, char *outbuf, int dum_s } /**************************************************************************** - reply to a lockread (core+ protocol) + Reply to a lockread (core+ protocol). ****************************************************************************/ + int reply_lockread(connection_struct *conn, char *inbuf,char *outbuf, int length, int dum_buffsiz) { ssize_t nread = -1; @@ -1637,132 +1632,130 @@ int reply_lockread(connection_struct *conn, char *inbuf,char *outbuf, int length return(outsize); } - /**************************************************************************** - reply to a read + Reply to a read. ****************************************************************************/ int reply_read(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize) { - size_t numtoread; - ssize_t nread = 0; - char *data; - SMB_OFF_T startpos; - int outsize = 0; - files_struct *fsp = file_fsp(inbuf,smb_vwv0); - START_PROFILE(SMBread); - - CHECK_FSP(fsp,conn); - CHECK_READ(fsp); + size_t numtoread; + ssize_t nread = 0; + char *data; + SMB_OFF_T startpos; + int outsize = 0; + files_struct *fsp = file_fsp(inbuf,smb_vwv0); + START_PROFILE(SMBread); - numtoread = SVAL(inbuf,smb_vwv1); - startpos = IVAL(inbuf,smb_vwv2); + CHECK_FSP(fsp,conn); + CHECK_READ(fsp); + numtoread = SVAL(inbuf,smb_vwv1); + startpos = IVAL(inbuf,smb_vwv2); - outsize = set_message(outbuf,5,3,True); - numtoread = MIN(BUFFER_SIZE-outsize,numtoread); - data = smb_buf(outbuf) + 3; + outsize = set_message(outbuf,5,3,True); + numtoread = MIN(BUFFER_SIZE-outsize,numtoread); + data = smb_buf(outbuf) + 3; - if (is_locked(fsp,conn,(SMB_BIG_UINT)numtoread,(SMB_BIG_UINT)startpos, READ_LOCK,False)) { - END_PROFILE(SMBread); - return ERROR_DOS(ERRDOS,ERRlock); - } + if (is_locked(fsp,conn,(SMB_BIG_UINT)numtoread,(SMB_BIG_UINT)startpos, READ_LOCK,False)) { + END_PROFILE(SMBread); + return ERROR_DOS(ERRDOS,ERRlock); + } - if (numtoread > 0) - nread = read_file(fsp,data,startpos,numtoread); + if (numtoread > 0) + nread = read_file(fsp,data,startpos,numtoread); - if (nread < 0) { - END_PROFILE(SMBread); - return(UNIXERROR(ERRDOS,ERRnoaccess)); - } + if (nread < 0) { + END_PROFILE(SMBread); + return(UNIXERROR(ERRDOS,ERRnoaccess)); + } - outsize += nread; - SSVAL(outbuf,smb_vwv0,nread); - SSVAL(outbuf,smb_vwv5,nread+3); - SCVAL(smb_buf(outbuf),0,1); - SSVAL(smb_buf(outbuf),1,nread); + outsize += nread; + SSVAL(outbuf,smb_vwv0,nread); + SSVAL(outbuf,smb_vwv5,nread+3); + SCVAL(smb_buf(outbuf),0,1); + SSVAL(smb_buf(outbuf),1,nread); - DEBUG( 3, ( "read fnum=%d num=%d nread=%d\n", - fsp->fnum, (int)numtoread, (int)nread ) ); + DEBUG( 3, ( "read fnum=%d num=%d nread=%d\n", + fsp->fnum, (int)numtoread, (int)nread ) ); - END_PROFILE(SMBread); - return(outsize); + END_PROFILE(SMBread); + return(outsize); } - /**************************************************************************** - reply to a read and X + Reply to a read and X. ****************************************************************************/ + int reply_read_and_X(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize) { - files_struct *fsp = file_fsp(inbuf,smb_vwv2); - SMB_OFF_T startpos = IVAL(inbuf,smb_vwv3); - size_t smb_maxcnt = SVAL(inbuf,smb_vwv5); - size_t smb_mincnt = SVAL(inbuf,smb_vwv6); - ssize_t nread = -1; - char *data; - START_PROFILE(SMBreadX); + files_struct *fsp = file_fsp(inbuf,smb_vwv2); + SMB_OFF_T startpos = IVAL(inbuf,smb_vwv3); + size_t smb_maxcnt = SVAL(inbuf,smb_vwv5); + size_t smb_mincnt = SVAL(inbuf,smb_vwv6); + ssize_t nread = -1; + char *data; + START_PROFILE(SMBreadX); - /* If it's an IPC, pass off the pipe handler. */ - if (IS_IPC(conn)) { - END_PROFILE(SMBreadX); - return reply_pipe_read_and_X(inbuf,outbuf,length,bufsize); - } + /* If it's an IPC, pass off the pipe handler. */ + if (IS_IPC(conn)) { + END_PROFILE(SMBreadX); + return reply_pipe_read_and_X(inbuf,outbuf,length,bufsize); + } - CHECK_FSP(fsp,conn); - CHECK_READ(fsp); + CHECK_FSP(fsp,conn); + CHECK_READ(fsp); - set_message(outbuf,12,0,True); - data = smb_buf(outbuf); + set_message(outbuf,12,0,True); + data = smb_buf(outbuf); - if(CVAL(inbuf,smb_wct) == 12) { + if(CVAL(inbuf,smb_wct) == 12) { #ifdef LARGE_SMB_OFF_T - /* - * This is a large offset (64 bit) read. - */ - startpos |= (((SMB_OFF_T)IVAL(inbuf,smb_vwv10)) << 32); + /* + * This is a large offset (64 bit) read. + */ + startpos |= (((SMB_OFF_T)IVAL(inbuf,smb_vwv10)) << 32); #else /* !LARGE_SMB_OFF_T */ - /* - * Ensure we haven't been sent a >32 bit offset. - */ + /* + * Ensure we haven't been sent a >32 bit offset. + */ - if(IVAL(inbuf,smb_vwv10) != 0) { - DEBUG(0,("reply_read_and_X - large offset (%x << 32) used and we don't support \ + if(IVAL(inbuf,smb_vwv10) != 0) { + DEBUG(0,("reply_read_and_X - large offset (%x << 32) used and we don't support \ 64 bit offsets.\n", (unsigned int)IVAL(inbuf,smb_vwv10) )); - END_PROFILE(SMBreadX); - return ERROR_DOS(ERRDOS,ERRbadaccess); - } + END_PROFILE(SMBreadX); + return ERROR_DOS(ERRDOS,ERRbadaccess); + } #endif /* LARGE_SMB_OFF_T */ - } + } - if (is_locked(fsp,conn,(SMB_BIG_UINT)smb_maxcnt,(SMB_BIG_UINT)startpos, READ_LOCK,False)) { - END_PROFILE(SMBreadX); - return ERROR_DOS(ERRDOS,ERRlock); - } - nread = read_file(fsp,data,startpos,smb_maxcnt); + if (is_locked(fsp,conn,(SMB_BIG_UINT)smb_maxcnt,(SMB_BIG_UINT)startpos, READ_LOCK,False)) { + END_PROFILE(SMBreadX); + return ERROR_DOS(ERRDOS,ERRlock); + } + nread = read_file(fsp,data,startpos,smb_maxcnt); - if (nread < 0) { - END_PROFILE(SMBreadX); - return(UNIXERROR(ERRDOS,ERRnoaccess)); - } + if (nread < 0) { + END_PROFILE(SMBreadX); + return(UNIXERROR(ERRDOS,ERRnoaccess)); + } - SSVAL(outbuf,smb_vwv5,nread); - SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); - SSVAL(smb_buf(outbuf),-2,nread); + SSVAL(outbuf,smb_vwv5,nread); + SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); + SSVAL(smb_buf(outbuf),-2,nread); - DEBUG( 3, ( "readX fnum=%d min=%d max=%d nread=%d\n", - fsp->fnum, (int)smb_mincnt, (int)smb_maxcnt, (int)nread ) ); + DEBUG( 3, ( "readX fnum=%d min=%d max=%d nread=%d\n", + fsp->fnum, (int)smb_mincnt, (int)smb_maxcnt, (int)nread ) ); - END_PROFILE(SMBreadX); - return chain_reply(inbuf,outbuf,length,bufsize); + END_PROFILE(SMBreadX); + return chain_reply(inbuf,outbuf,length,bufsize); } /**************************************************************************** - reply to a writebraw (core+ or LANMAN1.0 protocol) + Reply to a writebraw (core+ or LANMAN1.0 protocol). ****************************************************************************/ int reply_writebraw(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize) @@ -1893,7 +1886,7 @@ int reply_writebraw(connection_struct *conn, char *inbuf,char *outbuf, int size, } /**************************************************************************** - reply to a writeunlock (core+) + Reply to a writeunlock (core+). ****************************************************************************/ int reply_writeunlock(connection_struct *conn, char *inbuf,char *outbuf, @@ -1955,7 +1948,6 @@ int reply_writeunlock(connection_struct *conn, char *inbuf,char *outbuf, return outsize; } - /**************************************************************************** Reply to a write. ****************************************************************************/ @@ -2034,10 +2026,10 @@ int reply_write(connection_struct *conn, char *inbuf,char *outbuf,int size,int d return(outsize); } - /**************************************************************************** - reply to a write and X + Reply to a write and X. ****************************************************************************/ + int reply_write_and_X(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize) { files_struct *fsp = file_fsp(inbuf,smb_vwv2); @@ -2134,9 +2126,8 @@ int reply_write_and_X(connection_struct *conn, char *inbuf,char *outbuf,int leng return chain_reply(inbuf,outbuf,length,bufsize); } - /**************************************************************************** - reply to a lseek + Reply to a lseek. ****************************************************************************/ int reply_lseek(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize) @@ -2217,7 +2208,7 @@ int reply_lseek(connection_struct *conn, char *inbuf,char *outbuf, int size, int } /**************************************************************************** - reply to a flush + Reply to a flush. ****************************************************************************/ int reply_flush(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize) @@ -2239,10 +2230,10 @@ int reply_flush(connection_struct *conn, char *inbuf,char *outbuf, int size, int return(outsize); } - /**************************************************************************** - reply to a exit + Reply to a exit. ****************************************************************************/ + int reply_exit(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { @@ -2256,10 +2247,10 @@ int reply_exit(connection_struct *conn, return(outsize); } - /**************************************************************************** Reply to a close - has to deal with closing a directory opened by NT SMB's. ****************************************************************************/ + int reply_close(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize) { @@ -2341,9 +2332,8 @@ int reply_close(connection_struct *conn, char *inbuf,char *outbuf, int size, return(outsize); } - /**************************************************************************** - reply to a writeclose (Core+ protocol) + Reply to a writeclose (Core+ protocol). ****************************************************************************/ int reply_writeclose(connection_struct *conn, @@ -2400,10 +2390,10 @@ int reply_writeclose(connection_struct *conn, return(outsize); } - /**************************************************************************** - reply to a lock + Reply to a lock. ****************************************************************************/ + int reply_lock(connection_struct *conn, char *inbuf,char *outbuf, int length, int dum_buffsize) { @@ -2444,10 +2434,10 @@ int reply_lock(connection_struct *conn, return(outsize); } - /**************************************************************************** - reply to a unlock + Reply to a unlock. ****************************************************************************/ + int reply_unlock(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize) { @@ -2475,10 +2465,10 @@ int reply_unlock(connection_struct *conn, char *inbuf,char *outbuf, int size, return(outsize); } - /**************************************************************************** - reply to a tdis + Reply to a tdis. ****************************************************************************/ + int reply_tdis(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { @@ -2502,11 +2492,10 @@ int reply_tdis(connection_struct *conn, return outsize; } - - /**************************************************************************** - reply to a echo + Reply to a echo. ****************************************************************************/ + int reply_echo(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { @@ -2544,10 +2533,10 @@ int reply_echo(connection_struct *conn, return -1; } - /**************************************************************************** - reply to a printopen + Reply to a printopen. ****************************************************************************/ + int reply_printopen(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { @@ -2578,9 +2567,8 @@ int reply_printopen(connection_struct *conn, return(outsize); } - /**************************************************************************** - reply to a printclose + Reply to a printclose. ****************************************************************************/ int reply_printclose(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) @@ -2612,10 +2600,10 @@ int reply_printclose(connection_struct *conn, return(outsize); } - /**************************************************************************** - reply to a printqueue + Reply to a printqueue. ****************************************************************************/ + int reply_printqueue(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { @@ -2683,10 +2671,10 @@ int reply_printqueue(connection_struct *conn, return(outsize); } - /**************************************************************************** - reply to a printwrite + Reply to a printwrite. ****************************************************************************/ + int reply_printwrite(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { int numtowrite; @@ -2717,11 +2705,11 @@ int reply_printwrite(connection_struct *conn, char *inbuf,char *outbuf, int dum_ return(outsize); } - /**************************************************************************** The guts of the mkdir command, split out so it may be called by the NT SMB code. ****************************************************************************/ + NTSTATUS mkdir_internal(connection_struct *conn, pstring directory) { BOOL bad_path = False; @@ -2944,10 +2932,10 @@ int reply_rmdir(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, return(outsize); } - /******************************************************************* -resolve wildcards in a filename rename + Resolve wildcards in a filename rename. ********************************************************************/ + static BOOL resolve_wildcards(char *name1,char *name2) { fstring root1,root2; @@ -3383,8 +3371,9 @@ static BOOL copy_file(char *src,char *dest1,connection_struct *conn, int ofun, } /**************************************************************************** - reply to a file copy. - ****************************************************************************/ + Reply to a file copy. +****************************************************************************/ + int reply_copy(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { int outsize = 0; @@ -3547,8 +3536,9 @@ int reply_copy(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, } /**************************************************************************** - reply to a setdir + Reply to a setdir. ****************************************************************************/ + int reply_setdir(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { int snum; @@ -3642,6 +3632,7 @@ SMB_BIG_UINT get_lock_count( char *data, int data_offset, BOOL large_file_format /**************************************************************************** Pathetically try and map a 64 bit lock offset into 31 bits. I hate Windows :-). ****************************************************************************/ + static uint32 map_lock_offset(uint32 high, uint32 low) { unsigned int i; @@ -3721,7 +3712,7 @@ SMB_BIG_UINT get_lock_offset( char *data, int data_offset, BOOL large_file_forma } /**************************************************************************** - reply to a lockingX request + Reply to a lockingX request. ****************************************************************************/ int reply_lockingX(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize) -- cgit From 9d639cd4156e6b8fcb84e20e0b8adaa3fc5dc5ba Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 02:26:47 +0000 Subject: Ignore *.pyc --- source/python/samba/.cvsignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 source/python/samba/.cvsignore diff --git a/source/python/samba/.cvsignore b/source/python/samba/.cvsignore new file mode 100644 index 00000000000..0d20b6487c6 --- /dev/null +++ b/source/python/samba/.cvsignore @@ -0,0 +1 @@ +*.pyc -- cgit From 77bde1fa33cc387accda8f38bf654377310f5dbe Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 03:53:41 +0000 Subject: Bugfix merge: >Initialise user_rid value in WINBIND_USERINFO structure returned by >the rpc version of query_user(). This fixes a caching bug found by >Gavrie Philipson from disksite. --- source/nsswitch/winbindd_rpc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/nsswitch/winbindd_rpc.c b/source/nsswitch/winbindd_rpc.c index 58d90929407..047280e21e4 100644 --- a/source/nsswitch/winbindd_rpc.c +++ b/source/nsswitch/winbindd_rpc.c @@ -315,6 +315,7 @@ static NTSTATUS query_user(struct winbindd_domain *domain, cli_samr_close(hnd->cli, mem_ctx, &user_pol); got_user_pol = False; + user_info->user_rid = user_rid; user_info->group_rid = ctr->info.id21->group_rid; user_info->acct_name = unistr2_tdup(mem_ctx, &ctr->info.id21->uni_user_name); -- cgit From e63afabf98350353fac79ffc2ae2ddf88d61260f Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 03:57:19 +0000 Subject: Put pid number in invalid request size debug. --- source/nsswitch/winbindd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/nsswitch/winbindd.c b/source/nsswitch/winbindd.c index a3ffd1424b3..58b0f5943c1 100644 --- a/source/nsswitch/winbindd.c +++ b/source/nsswitch/winbindd.c @@ -628,8 +628,8 @@ static void process_loop(int accept_sock) if (state->read_buf_len >= sizeof(uint32) && *(uint32 *) &state->request != sizeof(state->request)) { - DEBUG(0,("process_loop: Invalid request size (%d) sent, should be (%d)\n", - *(uint32 *) &state->request, sizeof(state->request))); + DEBUG(0,("process_loop: Invalid request size from pid %d: %d bytes sent, should be %d\n", + state->request.pid, *(uint32 *) &state->request, sizeof(state->request))); remove_client(state); break; -- cgit From d36fd6651726ffee059f4b39211da66b5b6d7ec1 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 04:50:18 +0000 Subject: Fix imports for printerdata browser. --- source/python/gprinterdata | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/python/gprinterdata b/source/python/gprinterdata index 59c5f3c3151..cd062076c0b 100755 --- a/source/python/gprinterdata +++ b/source/python/gprinterdata @@ -3,7 +3,7 @@ import sys from gtkdictbrowser import GtkDictBrowser, hex_string import gtk -import spoolss +from samba import spoolss import string import printerdata -- cgit From d6d0f121d95b79d4acc68354b35fb0fb3e42e1c0 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 04:53:16 +0000 Subject: Fix some dodgy stuff that accidentally was committed. --- source/python/py_samba.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/source/python/py_samba.c b/source/python/py_samba.c index 7c945697877..c0ade12f65d 100644 --- a/source/python/py_samba.c +++ b/source/python/py_samba.c @@ -50,14 +50,6 @@ void initsamba(void) module = Py_InitModule("samba", samba_methods); dict = PyModule_GetDict(module); - new_module = PyModule_N("cheepy"); - - - - PyDict_SetItemString(dict, "cheepy", new_module); - - - /* Do samba initialisation */ py_samba_init(); -- cgit From a938863914cbfec247586c92fd06203fec7febde Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 04:54:20 +0000 Subject: Added char *, uid_t and gid_t types to generic conversion routines. --- source/python/py_conv.c | 25 +++++++++++++++++++++++++ source/python/py_conv.h | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/source/python/py_conv.c b/source/python/py_conv.c index 39b20ace861..20302c83e87 100644 --- a/source/python/py_conv.c +++ b/source/python/py_conv.c @@ -68,7 +68,32 @@ PyObject *from_struct(void *s, struct pyconv *conv) break; } + case PY_STRING: { + char *str = (char *)s + conv[i].offset; + + item = PyString_FromString(str); + PyDict_SetItemString(obj, conv[i].name, item); + + break; + } + case PY_UID: { + uid_t *uid = (uid_t *)((char *)s + conv[i].offset); + + item = PyInt_FromLong(*uid); + PyDict_SetItemString(obj, conv[i].name, item); + + break; + } + case PY_GID: { + gid_t *gid = (gid_t *)((char *)s + conv[i].offset); + + item = PyInt_FromLong(*gid); + PyDict_SetItemString(obj, conv[i].name, item); + + break; + } default: + break; } } diff --git a/source/python/py_conv.h b/source/python/py_conv.h index ed06b9a852a..24f5a66287b 100644 --- a/source/python/py_conv.h +++ b/source/python/py_conv.h @@ -21,7 +21,7 @@ #ifndef _PY_CONV_H #define _PY_CONV_H -enum pyconv_types { PY_UNISTR, PY_UINT32, PY_UINT16 }; +enum pyconv_types { PY_UNISTR, PY_UINT32, PY_UINT16, PY_STRING, PY_UID, PY_GID }; struct pyconv { char *name; /* Name of member */ -- cgit From 19adbf1faed3d076207ec55e398f15f87d48c9f7 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 04:55:45 +0000 Subject: Implemented getpw{nam,uid} functions. --- source/python/py_winbind.c | 65 +++++++++++++++++++++++++++++++++++++++++ source/python/py_winbind_conv.c | 42 ++++++++++++++++++++++++++ source/python/setup.py | 2 ++ 3 files changed, 109 insertions(+) create mode 100644 source/python/py_winbind_conv.c diff --git a/source/python/py_winbind.c b/source/python/py_winbind.c index 49c7f8e924f..ef6bc062334 100644 --- a/source/python/py_winbind.c +++ b/source/python/py_winbind.c @@ -445,12 +445,77 @@ static PyObject *py_auth_crap(PyObject *self, PyObject *args) return PyInt_FromLong(response.data.auth.nt_status); } +/* Get user info from name */ + +static PyObject *py_getpwnam(PyObject *self, PyObject *args) +{ + struct winbindd_request request; + struct winbindd_response response; + char *username; + PyObject *result; + + if (!PyArg_ParseTuple(args, "s", &username)) + return NULL; + + ZERO_STRUCT(request); + ZERO_STRUCT(response); + + fstrcpy(request.data.username, username); + + if (winbindd_request(WINBINDD_GETPWNAM, &request, &response) + != NSS_STATUS_SUCCESS) { + PyErr_SetString(winbind_error, "lookup failed"); + return NULL; + } + + if (!py_from_winbind_passwd(&result, &response)) { + result = Py_None; + Py_INCREF(result); + } + + return result; +} + +/* Get user info from uid */ + +static PyObject *py_getpwuid(PyObject *self, PyObject *args) +{ + struct winbindd_request request; + struct winbindd_response response; + uid_t uid; + PyObject *result; + + if (!PyArg_ParseTuple(args, "i", &uid)) + return NULL; + + ZERO_STRUCT(request); + ZERO_STRUCT(response); + + request.data.uid = uid; + + if (winbindd_request(WINBINDD_GETPWUID, &request, &response) + != NSS_STATUS_SUCCESS) { + PyErr_SetString(winbind_error, "lookup failed"); + return NULL; + } + + if (!py_from_winbind_passwd(&result, &response)) { + result = Py_None; + Py_INCREF(result); + } + + return result; +} + /* * Method dispatch table */ static PyMethodDef winbind_methods[] = { + { "getpwnam", py_getpwnam, METH_VARARGS, "getpwnam(3)" }, + { "getpwuid", py_getpwuid, METH_VARARGS, "getpwuid(3)" }, + /* Name <-> SID conversion */ { "name_to_sid", py_name_to_sid, METH_VARARGS, diff --git a/source/python/py_winbind_conv.c b/source/python/py_winbind_conv.c new file mode 100644 index 00000000000..c3e416171e7 --- /dev/null +++ b/source/python/py_winbind_conv.c @@ -0,0 +1,42 @@ +/* + Python wrappers for DCERPC/SMB client routines. + + Copyright (C) Tim Potter, 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "Python.h" +#include "python/py_conv.h" + +/* Convert a struct passwd to a dictionary */ + +static struct pyconv py_passwd[] = { + { "pw_name", PY_STRING, offsetof(struct winbindd_response, data.pw.pw_name) }, + { "pw_passwd", PY_STRING, offsetof(struct winbindd_response, data.pw.pw_passwd) }, + { "pw_uid", PY_UID, offsetof(struct winbindd_response, data.pw.pw_uid) }, + { "pw_guid", PY_GID, offsetof(struct winbindd_response, data.pw.pw_gid) }, + { "pw_gecos", PY_STRING, offsetof(struct winbindd_response, data.pw.pw_gecos) }, + { "pw_dir", PY_STRING, offsetof(struct winbindd_response, data.pw.pw_dir) }, + { "pw_shell", PY_STRING, offsetof(struct winbindd_response, data.pw.pw_shell) }, + { NULL} +}; + +BOOL py_from_winbind_passwd(PyObject **dict, struct winbindd_response *response) +{ + *dict = from_struct(response, py_passwd); + return True; +} diff --git a/source/python/setup.py b/source/python/setup.py index a5d7879371a..d3c420834a9 100755 --- a/source/python/setup.py +++ b/source/python/setup.py @@ -130,6 +130,8 @@ setup( Extension(name = "winbind", sources = [samba_srcdir + "python/py_winbind.c", + samba_srcdir + "python/py_winbind_conv.c", + samba_srcdir + "python/py_conv.c", samba_srcdir + "python/py_common.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], -- cgit From 05a202c287f5daeb1ccbaf9479aa93e7928e93db Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 11 Sep 2002 14:07:21 +0000 Subject: added gencache implementation from mimir - thanks! --- source/Makefile.in | 5 +- source/lib/gencache.c | 319 +++++++++++++++++++++++++++++++++++++++++++++ source/utils/net.c | 1 + source/utils/net_cache.c | 328 +++++++++++++++++++++++++++++++++++++++++++++++ source/utils/net_help.c | 1 + 5 files changed, 652 insertions(+), 2 deletions(-) create mode 100644 source/lib/gencache.c create mode 100644 source/utils/net_cache.c diff --git a/source/Makefile.in b/source/Makefile.in index 3578b93020a..0a28937fc90 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -140,7 +140,7 @@ LIB_OBJ = lib/charcnv.o lib/debug.o lib/fault.o \ lib/md5.o lib/hmacmd5.o lib/iconv.o lib/smbpasswd.o \ nsswitch/wb_client.o nsswitch/wb_common.o \ lib/pam_errors.o intl/lang_tdb.o lib/account_pol.o \ - lib/adt_tree.o lib/popt_common.o $(TDB_OBJ) + lib/adt_tree.o lib/popt_common.o lib/gencache.o $(TDB_OBJ) LIB_SMBD_OBJ = lib/system_smbd.o lib/util_smbd.o @@ -383,7 +383,8 @@ CLIENT_OBJ = $(CLIENT_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \ NET_OBJ1 = utils/net.o utils/net_ads.o utils/net_ads_cldap.o utils/net_help.o \ utils/net_rap.o utils/net_rpc.o utils/net_rpc_samsync.o \ - utils/net_rpc_join.o utils/net_time.o utils/net_lookup.o + utils/net_rpc_join.o utils/net_time.o utils/net_lookup.o \ + utils/net_cache.o NET_OBJ = $(NET_OBJ1) $(SECRETS_OBJ) $(LIBSMB_OBJ) \ $(RPC_PARSE_OBJ) $(PASSDB_GET_SET_OBJ) \ diff --git a/source/lib/gencache.c b/source/lib/gencache.c new file mode 100644 index 00000000000..9e2009ad4a6 --- /dev/null +++ b/source/lib/gencache.c @@ -0,0 +1,319 @@ +/* + Unix SMB/CIFS implementation. + + Generic, persistent and shared between processes cache mechanism for use + by various parts of the Samba code + + Copyright (C) Rafal Szczesniak 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_TDB + +#define TIMEOUT_LEN 12 +#define CACHE_DATA_FMT "%12u/%s" + +static TDB_CONTEXT *cache; + +/** + * @file gencache.c + * @brief Generic, persistent and shared between processes cache mechanism + * for use by various parts of the Samba code + * + **/ + + +/** + * Cache initialisation function. Opens cache tdb file or creates + * it if does not exist. + * + * @return true on successful initialisation of the cache or + * false on failure + **/ + +BOOL gencache_init(void) +{ + char* cache_fname = NULL; + + /* skip file open if it's already opened */ + if (cache) return True; + + asprintf(&cache_fname, "%s/%s", lp_lockdir(), "gencache.tdb"); + if (cache_fname) + DEBUG(5, ("Opening cache file at %s\n", cache_fname)); + else { + DEBUG(0, ("Filename allocation failed.\n")); + return False; + } + + cache = tdb_open_log(cache_fname, 0, TDB_DEFAULT, + O_RDWR|O_CREAT, 0644); + + SAFE_FREE(cache_fname); + if (!cache) { + DEBUG(0, ("Attempt to open the cache file has failed.\n")); + return False; + } + return True; +} + + +/** + * Cache shutdown function. Closes opened cache tdb file. + * + * @return true on successful closing the cache or + * false on failure during cache shutdown + **/ + +BOOL gencache_shutdown(void) +{ + /* tdb_close routine returns 0 on successful close */ + if (!cache) return False; + DEBUG(5, ("Closing cache file\n")); + return tdb_close(cache) ? False : True; +} + + +/** + * Add one entry to the cache file. + * (it part of tridge's proposed API) + * + * @param key string that represents a key of this entry + * @param value text representation value being cached + * @param timeout time when the value is expired + * + * @return true when entry is successfuly stored or + * false on the attempt's failure + **/ + +BOOL gencache_add(const char *keystr, const char *value, time_t timeout) +{ + int ret; + TDB_DATA keybuf, databuf; + char* valstr = NULL; + + /* fail completely if get null pointers passed */ + SMB_ASSERT(keystr && value); + + if (!gencache_init()) return False; + + asprintf(&valstr, CACHE_DATA_FMT, (int)timeout, value); + keybuf.dptr = strdup(keystr); + keybuf.dsize = strlen(keystr); + databuf.dptr = strdup(valstr); + databuf.dsize = strlen(valstr); + DEBUG(10, ("Adding cache entry with key = %s; value = %s and timeout \ + = %s (%d seconds %s)\n", keybuf.dptr, value, ctime(&timeout), + (int)(timeout - time(NULL)), timeout > time(NULL) ? "ahead" : "in the past")); + + ret = tdb_store(cache, keybuf, databuf, TDB_INSERT); + SAFE_FREE(valstr); + SAFE_FREE(keybuf.dptr); + SAFE_FREE(databuf.dptr); + + return ret == 0 ? True : False; +} + + +/** + * Set existing entry to the cache file. + * (it part of tridge's proposed API) + * + * @param key string that represents a key of this entry + * @param value text representation value being cached + * @param timeout time when the value is expired + * + * @return true when entry is successfuly set or + * false on the attempt's failure + **/ + +BOOL gencache_set(const char *keystr, const char *valstr, time_t timeout) +{ + int ret = -1; + TDB_DATA keybuf, databuf; + char *old_valstr, *datastr; + time_t old_timeout; + + /* fail completely if get null pointers passed */ + SMB_ASSERT(keystr && valstr); + + if (!gencache_init()) return False; + + /* + * Check whether entry exists in the cache + * Don't verify gencache_get exit code, since the entry may be expired + */ + gencache_get(keystr, &old_valstr, &old_timeout); + + if (!(old_valstr && old_timeout)) return False; + + DEBUG(10, ("Setting cache entry with key = %s; old value = %s and old timeout \ + = %s\n", keystr, old_valstr, ctime(&old_timeout))); + + asprintf(&datastr, CACHE_DATA_FMT, (int)timeout, valstr); + keybuf.dptr = strdup(keystr); + keybuf.dsize = strlen(keystr); + databuf.dptr = strdup(datastr); + databuf.dsize = strlen(datastr); + DEBUGADD(10, ("New value = %s, new timeout = %s (%d seconds %s)", valstr, + ctime(&timeout), (int)(timeout - time(NULL)), + timeout > time(NULL) ? "ahead" : "in the past")); + + + ret = tdb_store(cache, keybuf, databuf, TDB_REPLACE); + + SAFE_FREE(datastr); + SAFE_FREE(old_valstr); + SAFE_FREE(keybuf.dptr); + SAFE_FREE(databuf.dptr); + + return ret == 0 ? True : False; +} + + +/** + * Delete one entry from the cache file. + * (it part of tridge's proposed API) + * + * @param key string that represents a key of this entry + * + * @return true upon successful deletion or + * false in case of failure + **/ + +BOOL gencache_del(const char *keystr) +{ + int ret; + TDB_DATA keybuf; + + /* fail completely if get null pointers passed */ + SMB_ASSERT(keystr); + + if (!gencache_init()) return False; + + keybuf.dptr = strdup(keystr); + keybuf.dsize = strlen(keystr); + DEBUG(10, ("Deleting cache entry (key = %s)\n", keystr)); + ret = tdb_delete(cache, keybuf); + + SAFE_FREE(keybuf.dptr); + return ret == 0 ? True : False; +} + + +/** + * Get existing entry from the cache file. + * (it part of tridge's proposed API) + * + * @param key string that represents a key of this entry + * @param value buffer that is allocated and filled with the entry value + * buffer's disposing is done outside + * @param timeout pointer to a time_t that is filled with entry's + * timeout + * + * @return true when entry is successfuly fetched or + * false on the failure + **/ + +BOOL gencache_get(const char *keystr, char **valstr, time_t *timeout) +{ + TDB_DATA keybuf, databuf; + + /* fail completely if get null pointers passed */ + SMB_ASSERT(keystr && valstr && timeout); + + if (!gencache_init()) return False; + + keybuf.dptr = strdup(keystr); + keybuf.dsize = strlen(keystr); + databuf = tdb_fetch(cache, keybuf); + + if (databuf.dptr) { + char* entry_buf = strndup(databuf.dptr, databuf.dsize); + *valstr = (char*)malloc(sizeof(char) * (databuf.dsize - TIMEOUT_LEN)); + + sscanf(entry_buf, CACHE_DATA_FMT, (int*)timeout, *valstr); + SAFE_FREE(entry_buf); + + DEBUG(10, ("Returning %s cache entry: key = %s, value = %s, timeout = %s\n", + *timeout > time(NULL) ? "valid" : "expired", keystr, *valstr, + ctime(timeout))); + return *timeout > time(NULL); + } else { + *valstr = NULL; + timeout = NULL; + DEBUG(10, ("Cache entry with key = %s couldn't be found\n", keystr)); + return False; + } +} + + +/** + * Iterate through all entries which key matches to specified pattern + * + * @param fn pointer to the function that will be supplied with each single + * matching cache entry (key, value and timeout) as an arguments + * @param keystr_pattern pattern the existing entries' keys are matched to + * + **/ + +void gencache_iterate(void (*fn)(const char* key, const char *value, time_t timeout), + const char* keystr_pattern) +{ + TDB_LIST_NODE *node, *first_node; + TDB_DATA databuf; + char *keystr = NULL, *valstr = NULL, *entry = NULL; + time_t timeout = 0; + + /* fail completely if get null pointers passed */ + SMB_ASSERT(fn && keystr_pattern); + + if (!gencache_init()) return; + + DEBUG(5, ("Searching cache keys with pattern %s", keystr_pattern)); + node = tdb_search_keys(cache, keystr_pattern); + first_node = node; + + while (node) { + /* ensure null termination of the key string */ + node->node_key.dptr[node->node_key.dsize] = '\0'; + keystr = node->node_key.dptr; + + /* + * We don't use gencache_get function, because we need to iterate through + * all of the entries. Validity verification is up to fn routine. + */ + databuf = tdb_fetch(cache, node->node_key); + entry = strndup(databuf.dptr, databuf.dsize); + valstr = (char*)malloc(sizeof(char) * (databuf.dsize - TIMEOUT_LEN)); + sscanf(entry, CACHE_DATA_FMT, (int*)(&timeout), valstr); + + DEBUG(10, ("Calling function with arguments (key = %s, value = %s, timeout = %s)\n", + keystr, valstr, ctime(&timeout))); + fn(keystr, valstr, timeout); + + SAFE_FREE(valstr); + SAFE_FREE(entry); + node = node->next; + } + + tdb_search_list_free(first_node); +} + + diff --git a/source/utils/net.c b/source/utils/net.c index a3aa7adcae5..e3cfc24b697 100644 --- a/source/utils/net.c +++ b/source/utils/net.c @@ -352,6 +352,7 @@ static struct functable net_func[] = { {"TIME", net_time}, {"LOOKUP", net_lookup}, {"JOIN", net_join}, + {"CACHE", net_cache}, {"HELP", net_help}, {NULL, NULL} diff --git a/source/utils/net_cache.c b/source/utils/net_cache.c new file mode 100644 index 00000000000..359c06d1aa3 --- /dev/null +++ b/source/utils/net_cache.c @@ -0,0 +1,328 @@ +/* + Samba Unix/Linux SMB client library + Distributed SMB/CIFS Server Management Utility + Copyright (C) Rafal Szczesniak 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + + +#include "includes.h" +#include "net.h" + +/** + * @file net_cache.c + * @brief This is part of the net tool which is basically command + * line wrapper for gencache.c functions (mainly for testing) + * + **/ + + +/* + * These routines are used via gencache_iterate() to display the cache's contents + * (print_cache_entry) and to flush it (delete_cache_entry). + * Both of them are defined by first arg of gencache_iterate() routine. + */ +static void print_cache_entry(const char* keystr, const char* datastr, const time_t timeout) +{ + char* timeout_str = ctime(&timeout); + timeout_str[strlen(timeout_str) - 1] = '\0'; + d_printf("Key: %s\t\t Value: %s\t\t Timeout: %s %s\n", keystr, datastr, + timeout_str, timeout > time(NULL) ? "": "(expired)"); +} + +static void delete_cache_entry(const char* keystr, const char* datastr, const time_t timeout) +{ + if (!gencache_del(keystr)) + d_printf("Couldn't delete entry! key = %s", keystr); +} + + +/** + * Parse text representation of timeout value + * + * @param timeout_str string containing text representation of the timeout + * @return numeric timeout of time_t type + **/ +static time_t parse_timeout(const char* timeout_str) +{ + char sign = '\0', *number = NULL, unit = '\0'; + int len, number_begin, number_end; + time_t timeout; + + /* sign detection */ + if (timeout_str[0] == '!' || timeout_str[0] == '+') { + sign = timeout_str[0]; + number_begin = 1; + } else { + number_begin = 0; + } + + /* unit detection */ + len = strlen(timeout_str); + switch (timeout_str[len - 1]) { + case 's': + case 'm': + case 'h': + case 'd': + case 'w': unit = timeout_str[len - 1]; + } + + /* number detection */ + len = (sign) ? strlen(&timeout_str[number_begin]) : len; + number_end = (unit) ? len - 1 : len; + number = strndup(&timeout_str[number_begin], number_end); + + /* calculate actual timeout value */ + timeout = (time_t)atoi(number); + + switch (unit) { + case 'm': timeout *= 60; break; + case 'h': timeout *= 60*60; break; + case 'd': timeout *= 60*60*24; break; + case 'w': timeout *= 60*60*24*7; break; /* that's fair enough, I think :) */ + } + + switch (sign) { + case '!': timeout = time(NULL) - timeout; break; + case '+': + default: timeout += time(NULL); break; + } + + if (number) SAFE_FREE(number); + return timeout; +} + + +/** + * Add an entry to the cache + * + * @param argv key, value and timeout are passed in command line + * @return 0 on success, otherwise failure + **/ +static int net_cache_add(int argc, const char **argv) +{ + const char *keystr, *datastr, *timeout_str; + time_t timeout; + + if (argc < 3) { + d_printf("\nUsage: net cache add \n"); + return -1; + } + + keystr = argv[0]; + datastr = argv[1]; + timeout_str = argv[2]; + + /* parse timeout given in command line */ + timeout = parse_timeout(timeout_str); + if (!timeout) { + d_printf("Invalid timeout argument.\n"); + return -1; + } + + if (gencache_add(keystr, datastr, timeout)) { + d_printf("New cache entry stored successfully.\n"); + gencache_shutdown(); + return 0; + } + + d_printf("Entry couldn't be added. Perhaps there's already such a key.\n"); + gencache_shutdown(); + return -1; +} + + +/** + * Set new value of an existing entry in the cache + * + * @param argv key being searched and new value and timeout to set in the entry + * @return 0 on success, otherwise failure + **/ +static int net_cache_set(int argc, const char **argv) +{ + const char *keystr, *datastr, *timeout_str; + time_t timeout; + + if (argc < 3) { + d_printf("\nUsage: net cache set \n"); + return -1; + } + + keystr = argv[0]; + datastr = argv[1]; + timeout_str = argv[2]; + + /* parse timeout given in command line */ + timeout = parse_timeout(timeout_str); + if (!timeout) { + d_printf("Invalid timeout argument.\n"); + return -1; + } + + if (gencache_set(keystr, datastr, timeout)) { + d_printf("Cache entry set successfully.\n"); + gencache_shutdown(); + return 0; + } + + d_printf("Entry couldn't be set. Perhaps there's no such a key.\n"); + gencache_shutdown(); + return -1; +} + + +/** + * Delete an entry in the cache + * + * @param argv key to delete an entry of + * @return 0 on success, otherwise failure + **/ +static int net_cache_del(int argc, const char **argv) +{ + const char *keystr = argv[0]; + + if (argc < 1) { + d_printf("\nUsage: net cache add \n"); + return -1; + } + + if(gencache_del(keystr)) { + d_printf("Entry deleted.\n"); + return 0; + } + + d_printf("Couldn't delete specified entry\n"); + return -1; +} + + +/** + * Get and display an entry from the cache + * + * @param argv key to search an entry of + * @return 0 on success, otherwise failure + **/ +static int net_cache_get(int argc, const char **argv) +{ + const char* keystr = argv[0]; + char* valuestr; + time_t timeout; + + if (argc < 1) { + d_printf("\nUsage: net cache get \n"); + return -1; + } + + if (gencache_get(keystr, &valuestr, &timeout)) { + print_cache_entry(keystr, valuestr, timeout); + return 0; + } + + d_printf("Failed to find entry\n"); + return -1; +} + + +/** + * Search an entry/entries in the cache + * + * @param argv key pattern to match the entries to + * @return 0 on success, otherwise failure + **/ +static int net_cache_search(int argc, const char **argv) +{ + const char* pattern; + + if (argc < 1) { + d_printf("Usage: net cache search \n"); + return -1; + } + + pattern = argv[0]; + gencache_iterate(print_cache_entry, pattern); + return 0; +} + + +/** + * List the contents of the cache + * + * @param argv ignored in this functionailty + * @return always returns 0 + **/ +static int net_cache_list(int argc, const char **argv) +{ + const char* pattern = "*"; + gencache_iterate(print_cache_entry, pattern); + gencache_shutdown(); + return 0; +} + + +/** + * Flush the whole cache + * + * @param argv ignored in this functionality + * @return always returns 0 + **/ +static int net_cache_flush(int argc, const char **argv) +{ + const char* pattern = "*"; + gencache_iterate(delete_cache_entry, pattern); + gencache_shutdown(); + return 0; +} + + +/** + * Short help + * + * @param argv ignored in this functionality + * @return always returns -1 + **/ +static int net_cache_usage(int argc, const char **argv) +{ + d_printf(" net cache add \t add add new cache entry\n"); + d_printf(" net cache set \t set new value for existing cache entry\n"); + d_printf(" net cache del \t delete existing cache entry by key\n"); + d_printf(" net cache flush \t delete all entries existing in the cache\n"); + d_printf(" net cache get \t get cache entry by key\n"); + d_printf(" net cache search \t search for entries in the cache, by given pattern\n"); + d_printf(" net cache list \t list all cache entries (just like search for \"*\")\n"); + return -1; +} + + +/** + * Entry point to 'net cache' subfunctionality + * + * @param argv arguments passed to further called functions + * @return whatever further functions return + **/ +int net_cache(int argc, const char **argv) +{ + struct functable func[] = { + {"add", net_cache_add}, + {"set", net_cache_set}, + {"del", net_cache_del}, + {"get", net_cache_get}, + {"search", net_cache_search}, + {"list", net_cache_list}, + {"flush", net_cache_flush}, + {NULL, NULL} + }; + + return net_run_function(argc, argv, func, net_cache_usage); +} diff --git a/source/utils/net_help.c b/source/utils/net_help.c index ab3eac4b434..16309c53345 100644 --- a/source/utils/net_help.c +++ b/source/utils/net_help.c @@ -135,6 +135,7 @@ static int net_usage(int argc, const char **argv) " net user\t\tto manage users\n"\ " net group\t\tto manage groups\n"\ " net join\t\tto join a domain\n"\ + " net cache\t\tto operate on cache tdb file\n"\ "\n"\ " net ads \tto run ADS commands\n"\ " net rap \tto run RAP (pre-RPC) commands\n"\ -- cgit From f0c741594f0dad2da16b1d5692dd56a48b4157f1 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 11 Sep 2002 15:18:53 +0000 Subject: Merge the cli_shutdown change from 2_2. All except one call to attempt_netbios_... assumed that cli_shutdown was _not_ called on error anyway... Volker --- source/libsmb/cliconnect.c | 2 -- source/rpc_server/srv_spoolss_nt.c | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index 1f3635d6d72..6c5c5e0b0e7 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -1306,7 +1306,6 @@ BOOL attempt_netbios_session_request(struct cli_state *cli, char *srchost, char DEBUG(0,("attempt_netbios_session_request: %s rejected the session for name *SMBSERVER \ with error %s.\n", desthost, cli_errstr(cli) )); - cli_shutdown(cli); return False; } @@ -1323,7 +1322,6 @@ with error %s.\n", desthost, cli_errstr(cli) )); !cli_session_request(cli, &calling, &smbservername)) { DEBUG(0,("attempt_netbios_session_request: %s rejected the session for \ name *SMBSERVER with error %s\n", desthost, cli_errstr(cli) )); - cli_shutdown(cli); return False; } } diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index 8b5dcd3b6cf..5231e9e681c 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -2296,6 +2296,7 @@ static BOOL spoolss_connect_to_client(struct cli_state *the_cli, char *remote_ma if (!attempt_netbios_session_request(the_cli, global_myname, remote_machine, &the_cli->dest_ip)) { DEBUG(0,("connect_to_client: machine %s rejected the NetBIOS session request.\n", remote_machine)); + cli_shutdown(the_cli); return False; } -- cgit From 7841753a03f7fdbd2f7f22e1b184dc1891118283 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 11 Sep 2002 17:35:12 +0000 Subject: DelPrinterDrvEx() fix from APP_HEAD --- source/rpc_server/srv_spoolss_nt.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index 5231e9e681c..ae5f1325086 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -1935,20 +1935,21 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV if ( !W_ERROR_IS_OK(status) ) { - /* if the client asked for a specific version, then we've failed */ + /* + * if the client asked for a specific version, + * or this is something other than Windows NT x86, + * then we've failed + */ - if ( flags & DPD_DELETE_SPECIFIC_VERSION ) + if ( (flags&DPD_DELETE_SPECIFIC_VERSION) || (version !=2) ) goto done; /* try for Win2k driver if "Windows NT x86" */ - if ( version == 2 ) - { - version = 3; - if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) { - status = WERR_UNKNOWN_PRINTER_DRIVER; - goto done; - } + version = 3; + if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) { + status = WERR_UNKNOWN_PRINTER_DRIVER; + goto done; } } @@ -1988,6 +1989,7 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV if ( delete_files && printer_driver_files_in_use(info_win2k.info_3) & (flags&DPD_DELETE_ALL_FILES) ) { /* no idea of the correct error here */ + free_a_printer_driver( info_win2k, 3 ); status = WERR_ACCESS_DENIED; goto done; } @@ -1995,7 +1997,7 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV /* if we get to here, we now have 2 driver info structures to remove */ /* remove the Win2k driver first*/ - status_win2k = delete_printer_driver(info.info_3, &user, 3, delete_files); + status_win2k = delete_printer_driver(info_win2k.info_3, &user, 3, delete_files); free_a_printer_driver( info_win2k, 3 ); /* this should not have failed---if it did, report to client */ -- cgit From 3524a4a348686ae5144a744696606123e4a66622 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 11 Sep 2002 19:29:02 +0000 Subject: merge from APP_HEAD for GetJob() --- source/rpc_server/srv_spoolss_nt.c | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index ae5f1325086..bcba89c2cc1 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -8027,8 +8027,6 @@ static WERROR getjob_level_1(print_queue_struct *queue, int count, int snum, uin fill_job_info_1(info_1, &(queue[i-1]), i, snum); - SAFE_FREE(queue); - *needed += spoolss_size_job_info_1(info_1); if (!alloc_buffer_size(buffer, *needed)) { @@ -8067,12 +8065,14 @@ static WERROR getjob_level_2(print_queue_struct *queue, int count, int snum, uin goto done; } - for (i=0; ioffered; uint32 *needed = &r_u->needed; + WERROR wstatus = WERR_OK; int snum; int count; - print_queue_struct *queue=NULL; + print_queue_struct *queue = NULL; print_status_struct prt_status; /* that's an [in out] buffer */ @@ -8139,7 +8140,7 @@ WERROR _spoolss_getjob( pipes_struct *p, SPOOL_Q_GETJOB *q_u, SPOOL_R_GETJOB *r_ DEBUG(5,("spoolss_getjob\n")); - *needed=0; + *needed = 0; if (!get_printer_snum(p, handle, &snum)) return WERR_BADFID; @@ -8149,15 +8150,22 @@ WERROR _spoolss_getjob( pipes_struct *p, SPOOL_Q_GETJOB *q_u, SPOOL_R_GETJOB *r_ DEBUGADD(4,("count:[%d], prt_status:[%d], [%s]\n", count, prt_status.status, prt_status.message)); - switch (level) { + switch ( level ) { case 1: - return getjob_level_1(queue, count, snum, jobid, buffer, offered, needed); + wstatus = getjob_level_1(queue, count, snum, jobid, + buffer, offered, needed); + break; case 2: - return getjob_level_2(queue, count, snum, jobid, buffer, offered, needed); + wstatus = getjob_level_2(queue, count, snum, jobid, + buffer, offered, needed); + break; default: - SAFE_FREE(queue); - return WERR_UNKNOWN_LEVEL; + wstatus = WERR_UNKNOWN_LEVEL; + break; } + + SAFE_FREE(queue); + return wstatus; } /******************************************************************** -- cgit From d9fa865e5ce8ba0b7539f9a218fc7dd132eb3d38 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 12 Sep 2002 01:25:50 +0000 Subject: Spelling fix. --- source/nsswitch/winbindd_pam.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/nsswitch/winbindd_pam.c b/source/nsswitch/winbindd_pam.c index a8b508a49c6..5d754d7ca55 100644 --- a/source/nsswitch/winbindd_pam.c +++ b/source/nsswitch/winbindd_pam.c @@ -147,7 +147,7 @@ done: fstrcpy(state->response.data.auth.error_string, nt_errstr(result)); state->response.data.auth.pam_error = nt_status_to_pam(result); - DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, ("Plain-text authenticaion for user %s returned %s (PAM: %d)\n", + DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, ("Plain-text authentication for user %s returned %s (PAM: %d)\n", state->request.data.auth.user, state->response.data.auth.nt_status_string, state->response.data.auth.pam_error)); @@ -292,7 +292,7 @@ done: state->response.data.auth.pam_error = nt_status_to_pam(result); DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, - ("NTLM CRAP authenticaion for user [%s]\\[%s] returned %s (PAM: %d)\n", + ("NTLM CRAP authentication for user [%s]\\[%s] returned %s (PAM: %d)\n", domain, user, state->response.data.auth.nt_status_string, -- cgit From f75d61b03a3377f3a791b56fc307dc7e56e4707a Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 12 Sep 2002 01:44:53 +0000 Subject: Merge of cut&paste fix from appliance. --- source/nsswitch/winbindd_pam.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/nsswitch/winbindd_pam.c b/source/nsswitch/winbindd_pam.c index 5d754d7ca55..3e7a8ad9713 100644 --- a/source/nsswitch/winbindd_pam.c +++ b/source/nsswitch/winbindd_pam.c @@ -183,7 +183,7 @@ enum winbindd_result winbindd_pam_auth_crap(struct winbindd_cli_state *state) /* Ensure null termination */ state->request.data.auth_crap.domain[sizeof(state->request.data.auth_crap.domain)-1]='\0'; - if (!(mem_ctx = talloc_init_named("winbind pam auth crap for (utf8) %s", state->request.data.auth.user))) { + if (!(mem_ctx = talloc_init_named("winbind pam auth crap for (utf8) %s", state->request.data.auth_crap.user))) { DEBUG(0, ("winbindd_pam_auth_crap: could not talloc_init()!\n")); result = NT_STATUS_NO_MEMORY; goto done; -- cgit From fd772ca7b16cd86e0d50c7ed8d537c202976a6d2 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 12 Sep 2002 02:12:52 +0000 Subject: First cut at portable sendfile code. Only used in readX at the moment and doesn't actually call sendfile. Needs to be vectored through the VFS and tested on all supported platforms (Solaris/HPUX/FreeBSD/Linux). Linux doesn't actually work (2.4.19 kernel) at the moment because it doesn't have a 64-bit clean sendfile. Jeremy. --- source/Makefile.in | 2 +- source/include/smbprofile.h | 3 + source/lib/sendfile.c | 158 ++++++++++++++++++++++++++++++++++++++++++++ source/smbd/reply.c | 103 ++++++++++++++++++++++++----- source/smbd/vfs-wrap.c | 12 ++++ 5 files changed, 261 insertions(+), 17 deletions(-) create mode 100644 source/lib/sendfile.c diff --git a/source/Makefile.in b/source/Makefile.in index 0a28937fc90..87ee4ef540d 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -126,7 +126,7 @@ TDB_OBJ = $(TDBBASE_OBJ) tdb/tdbutil.o LIB_OBJ = lib/charcnv.o lib/debug.o lib/fault.o \ lib/getsmbpass.o lib/interface.o lib/md4.o \ lib/interfaces.o lib/pidfile.o lib/replace.o \ - lib/signal.o lib/system.o lib/time.o \ + lib/signal.o lib/system.o lib/sendfile.o lib/time.o \ lib/ufc.o lib/genrand.o lib/username.o \ lib/util_getent.o lib/util_pw.o lib/access.o lib/smbrun.o \ lib/bitmap.o lib/crc32.o lib/snprintf.o lib/dprintf.o \ diff --git a/source/include/smbprofile.h b/source/include/smbprofile.h index 82017cee854..870fef71e3e 100644 --- a/source/include/smbprofile.h +++ b/source/include/smbprofile.h @@ -65,6 +65,9 @@ struct profile_stats { unsigned syscall_write_bytes; /* bytes written with write syscall */ unsigned syscall_lseek_count; unsigned syscall_lseek_time; + unsigned syscall_sendfile_count; + unsigned syscall_sendfile_time; + unsigned syscall_sendfile_bytes; /* bytes read with sendfile syscall */ unsigned syscall_rename_count; unsigned syscall_rename_time; unsigned syscall_fsync_count; diff --git a/source/lib/sendfile.c b/source/lib/sendfile.c new file mode 100644 index 00000000000..33282e704a5 --- /dev/null +++ b/source/lib/sendfile.c @@ -0,0 +1,158 @@ +/* + Unix SMB/Netbios implementation. + Version 2.2.x / 3.0.x + sendfile implementations. + Copyright (C) Jeremy Allison 2002. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* + * This file handles the OS dependent sendfile implementations. + * The API is such that it returns -1 on error, else returns the + * number of bytes written. + */ + +#include "includes.h" + +#if defined(LINUX_SENDFILE_API) + +#include + +#ifndef MSG_MORE +#define MSG_MORE 0x8000 +#endif + +ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +{ + size_t total=0; + ssize_t ret; + + /* + * Send the header first. + * Use MSG_MORE to cork the TCP output until sendfile is called. + */ + + while (total < header->length) { + ret = sys_send(outfd, header->data + total,header->length - total, MSG_MORE); + if (ret == -1) + return -1; + total += ret; + } + + total = count; + while (total) { + ssize_t nwritten; + do { +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) + nwritten = sendfile64(outfd, infd, &offset, total); +#else + nwritten = sendfile(outfd, infd, &offset, total); +#endif + } while (nwritten == -1 && errno == EINTR); + if (nwritten == -1) + return -1; + if (nwritten == 0) + return -1; /* I think we're at EOF here... */ + total -= nwritten; + } + return count + header->length; +} + +#elif defined(SOLARIS_SENDFILE_API) + +ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +{ +} + +#elif defined(HPUX_SENDFILE_API) + +#include +#include + +ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +{ + size_t total=0; + struct iovec hdtrl[2]; + + /* Set up the header/trailer iovec. */ + hdtrl[0].iov_base = header->data; + hdtrl[0].iov_len = header->length; + hdtrl[1].iov_base = NULL; + hdtrl[1].iov_base = 0; + + total = count; + while (total) { + ssize_t nwritten; + do { +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) + nwritten = sendfile64(outfd, infd, &offset, total, &hdtrl, 0); +#else + nwritten = sendfile(outfd, infd, &offset, total, &hdtrl, 0); +#endif + } while (nwritten == -1 && errno == EINTR); + if (nwritten == -1) + return -1; + total -= nwritten; + } + return count + header->length; +} + +#elif defined(FREEBSD_SENDFILE_API) + +#include +#include +#include + +ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +{ + size_t total=0; + struct sf_hdtr hdr; + struct iovec hdtrl; + + hdr->headers = &hdtrl; + hdr->hdr_cnt = 1; + hdr->trailers = NULL; + hdr->trl_cnt = 0; + + /* Set up the header iovec. */ + hdtrl.iov_base = header->data; + hdtrl.iov_len = header->length; + + total = count; + while (total) { + ssize_t nwritten; + do { +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) + nwritten = sendfile64(outfd, infd, &offset, total, &hdr, NULL, 0); +#else + nwritten = sendfile(outfd, infd, &offset, total, &hdr, NULL, 0); +#endif + } while (nwritten == -1 && errno == EINTR); + if (nwritten == -1) + return -1; + total -= nwritten; + } + return count + header->length; +} + +#else /* No sendfile implementation. Return error. */ + +ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +{ + /* No sendfile syscall. */ + errno = ENOSYS; + return -1; +} +#endif diff --git a/source/smbd/reply.c b/source/smbd/reply.c index c3a4c5a8603..02aa53807c6 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -1682,6 +1682,85 @@ int reply_read(connection_struct *conn, char *inbuf,char *outbuf, int size, int return(outsize); } +/**************************************************************************** + Reply to a read and X - possibly using sendfile. +****************************************************************************/ + +int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length, + files_struct *fsp, SMB_OFF_T startpos, size_t smb_maxcnt) +{ + ssize_t nread = -1; + char *data = smb_buf(outbuf); + +#if defined(WITH_SENDFILE) && defined(HAVE_SENDFILE) + /* + * We can only use sendfile on a non-chained packet and on a file + * that is exclusively oplocked. + */ + + if ((CVAL(inbuf,smb_vwv0) == 0xFF) && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) { + SMB_STRUCT_STAT sbuf; + DATA_BLOB header; + + if(vfs_fstat(fsp,fsp->fd, &sbuf) == -1) + return(UNIXERROR(ERRDOS,ERRnoaccess)); + + if (startpos > sbuf.st_size) + goto normal_read; + + if (smb_maxcnt > (sbuf.st_size - startpos)) + smb_maxcnt = (sbuf.st_size - startpos); + + if (smb_maxcnt == 0) + goto normal_read; + + /* + * Set up the packet header before send. We + * assume here the sendfile will work (get the + * correct amount of data). + */ + + SSVAL(outbuf,smb_vwv5,smb_maxcnt); + SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); + SSVAL(smb_buf(outbuf),-2,smb_maxcnt); + CVAL(outbuf,smb_vwv0) = 0xFF; + set_message(outbuf,12,smb_maxcnt,False); + header.data = outbuf; + header.length = data - outbuf; + header.free = NULL; + + if ( conn->vfs_ops.sendfile( smbd_server_fd(), fsp, fsp->fd, &header, startpos, smb_maxcnt) == -1) { + DEBUG(0,("send_file_readX: sendfile failed for file %s (%s). Terminating\n", + fsp->fsp_name, strerror(errno) )); + exit_server("send_file_readX sendfile failed"); + } + + DEBUG( 3, ( "send_file_readX: sendfile fnum=%d max=%d nread=%d\n", + fsp->fnum, (int)smb_maxcnt, (int)nread ) ); + return -1; + } + + normal_read: + +#endif + + nread = read_file(fsp,data,startpos,smb_maxcnt); + + if (nread < 0) { + END_PROFILE(SMBreadX); + return(UNIXERROR(ERRDOS,ERRnoaccess)); + } + + SSVAL(outbuf,smb_vwv5,nread); + SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); + SSVAL(smb_buf(outbuf),-2,nread); + + DEBUG( 3, ( "send_file_readX fnum=%d max=%d nread=%d\n", + fsp->fnum, (int)smb_maxcnt, (int)nread ) ); + + return nread; +} + /**************************************************************************** Reply to a read and X. ****************************************************************************/ @@ -1690,10 +1769,12 @@ int reply_read_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt { files_struct *fsp = file_fsp(inbuf,smb_vwv2); SMB_OFF_T startpos = IVAL(inbuf,smb_vwv3); + ssize_t nread = -1; size_t smb_maxcnt = SVAL(inbuf,smb_vwv5); +#if 0 size_t smb_mincnt = SVAL(inbuf,smb_vwv6); - ssize_t nread = -1; - char *data; +#endif + START_PROFILE(SMBreadX); /* If it's an IPC, pass off the pipe handler. */ @@ -1706,7 +1787,6 @@ int reply_read_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt CHECK_READ(fsp); set_message(outbuf,12,0,True); - data = smb_buf(outbuf); if(CVAL(inbuf,smb_wct) == 12) { #ifdef LARGE_SMB_OFF_T @@ -1736,22 +1816,13 @@ int reply_read_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt END_PROFILE(SMBreadX); return ERROR_DOS(ERRDOS,ERRlock); } - nread = read_file(fsp,data,startpos,smb_maxcnt); - if (nread < 0) { - END_PROFILE(SMBreadX); - return(UNIXERROR(ERRDOS,ERRnoaccess)); - } - - SSVAL(outbuf,smb_vwv5,nread); - SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); - SSVAL(smb_buf(outbuf),-2,nread); - - DEBUG( 3, ( "readX fnum=%d min=%d max=%d nread=%d\n", - fsp->fnum, (int)smb_mincnt, (int)smb_maxcnt, (int)nread ) ); + nread = send_file_readX(conn, inbuf, outbuf, length, fsp, startpos, smb_maxcnt); + if (nread != -1) + nread = chain_reply(inbuf,outbuf,length,bufsize); END_PROFILE(SMBreadX); - return chain_reply(inbuf,outbuf,length,bufsize); + return nread; } /**************************************************************************** diff --git a/source/smbd/vfs-wrap.c b/source/smbd/vfs-wrap.c index 6878a42b485..b44b778e09d 100644 --- a/source/smbd/vfs-wrap.c +++ b/source/smbd/vfs-wrap.c @@ -192,6 +192,18 @@ SMB_OFF_T vfswrap_lseek(files_struct *fsp, int filedes, SMB_OFF_T offset, int wh return result; } +#if 0 /* JRATEST */ +ssize_t vfswrap_sendfile(int outfd, struct files_struct *fsp, int infd, DATA_BLOB *hdr, SMB_OFF_T offset, size_t n) +{ + ssize_t result; + + START_PROFILE_BYTES(syscall_sendfile, n); + result = sys_sendfile(outfd, fsp, infd, hdr, offset, n); + END_PROFILE(syscall_sendfile); + return result; +} +#endif + int vfswrap_rename(connection_struct *conn, const char *old, const char *new) { int result; -- cgit From 26d486aa740e283f546efc1f2ca40af3452a4f52 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 12 Sep 2002 04:30:23 +0000 Subject: Merge of winbind auth cleanups from appliance. --- source/nsswitch/wbinfo.c | 32 +++++++++++++++++++++----------- source/nsswitch/winbindd_nss.h | 1 + source/nsswitch/winbindd_pam.c | 31 ++++++++++++------------------- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/source/nsswitch/wbinfo.c b/source/nsswitch/wbinfo.c index a0fdd033d79..7a1aee44cd9 100644 --- a/source/nsswitch/wbinfo.c +++ b/source/nsswitch/wbinfo.c @@ -422,6 +422,7 @@ static BOOL wbinfo_auth(char *username) struct winbindd_request request; struct winbindd_response response; NSS_STATUS result; + fstring name_user, name_domain; char *p; /* Send off request */ @@ -433,11 +434,16 @@ static BOOL wbinfo_auth(char *username) if (p) { *p = 0; - fstrcpy(request.data.auth.user, username); fstrcpy(request.data.auth.pass, p + 1); - *p = '%'; - } else - fstrcpy(request.data.auth.user, username); + } + + parse_wbinfo_domain_user(username, name_domain, name_user); + + if (p) + *p = '%'; + + fstrcpy(request.data.auth.user, name_user); + fstrcpy(request.data.auth.domain, name_domain); result = winbindd_request(WINBINDD_PAM_AUTH, &request, &response); @@ -446,9 +452,10 @@ static BOOL wbinfo_auth(char *username) d_printf("plaintext password authentication %s\n", (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed"); - d_printf("error code was %s (0x%x)\n", - response.data.auth.nt_status_string, - response.data.auth.nt_status); + if (response.data.auth.nt_status) + d_printf("error code was %s (0x%x)\n", + response.data.auth.nt_status_string, + response.data.auth.nt_status); return result == NSS_STATUS_SUCCESS; } @@ -479,8 +486,10 @@ static BOOL wbinfo_auth_crap(char *username) parse_wbinfo_domain_user(username, name_domain, name_user); - fstrcpy(request.data.auth_crap.user, name_user); + if (p) + *p = '%'; + fstrcpy(request.data.auth_crap.user, name_user); fstrcpy(request.data.auth_crap.domain, name_domain); generate_random_buffer(request.data.auth_crap.chal, 8, False); @@ -500,9 +509,10 @@ static BOOL wbinfo_auth_crap(char *username) d_printf("challenge/response password authentication %s\n", (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed"); - d_printf("error code was %s (0x%x)\n", - response.data.auth.nt_status_string, - response.data.auth.nt_status); + if (response.data.auth.nt_status) + d_printf("error code was %s (0x%x)\n", + response.data.auth.nt_status_string, + response.data.auth.nt_status); return result == NSS_STATUS_SUCCESS; } diff --git a/source/nsswitch/winbindd_nss.h b/source/nsswitch/winbindd_nss.h index 9eea94e7c0d..21081cb09c7 100644 --- a/source/nsswitch/winbindd_nss.h +++ b/source/nsswitch/winbindd_nss.h @@ -128,6 +128,7 @@ struct winbindd_request { gid_t gid; /* getgrgid, gid_to_sid */ struct { fstring user; + fstring domain; fstring pass; } auth; /* pam_winbind auth module */ struct { diff --git a/source/nsswitch/winbindd_pam.c b/source/nsswitch/winbindd_pam.c index 3e7a8ad9713..c3ab6615f61 100644 --- a/source/nsswitch/winbindd_pam.c +++ b/source/nsswitch/winbindd_pam.c @@ -57,7 +57,6 @@ static NTSTATUS append_info3_as_ndr(TALLOC_CTX *mem_ctx, enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) { NTSTATUS result; - fstring name_domain, name_user; unsigned char trust_passwd[16]; time_t last_change_time; uint32 smb_uid_low; @@ -76,8 +75,8 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) /* Ensure null termination */ state->request.data.auth.pass[sizeof(state->request.data.auth.pass)-1]='\0'; - DEBUG(3, ("[%5d]: pam auth %s\n", state->pid, - state->request.data.auth.user)); + DEBUG(3, ("[%5d]: pam auth domain: %s user: %s\n", state->pid, + state->request.data.auth.domain, state->request.data.auth.user)); if (!(mem_ctx = talloc_init_named("winbind pam auth for %s", state->request.data.auth.user))) { DEBUG(0, ("winbindd_pam_auth: could not talloc_init()!\n")); @@ -87,13 +86,6 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) /* Parse domain and username */ - if (!parse_domain_user(state->request.data.auth.user, name_domain, - name_user)) { - DEBUG(5,("no domain separator (%s) in username (%s) - failing auth\n", lp_winbind_separator(), state->request.data.auth.user)); - result = NT_STATUS_INVALID_PARAMETER; - goto done; - } - { unsigned char local_lm_response[24]; unsigned char local_nt_response[24]; @@ -133,11 +125,10 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) goto done; } - result = cli_netlogon_sam_network_logon(cli, mem_ctx, - name_user, name_domain, - global_myname, chal, - lm_resp, nt_resp, - &info3); + result = cli_netlogon_sam_network_logon( + cli, mem_ctx, state->request.data.auth.user, + state->request.data.auth.domain, + global_myname, chal, lm_resp, nt_resp, &info3); uni_group_cache_store_netlogon(mem_ctx, &info3); done: @@ -147,10 +138,12 @@ done: fstrcpy(state->response.data.auth.error_string, nt_errstr(result)); state->response.data.auth.pam_error = nt_status_to_pam(result); - DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, ("Plain-text authentication for user %s returned %s (PAM: %d)\n", - state->request.data.auth.user, - state->response.data.auth.nt_status_string, - state->response.data.auth.pam_error)); + DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, + ("Plain-text authentication for user %s/%s returned %s (PAM: %d)\n", + state->request.data.auth.domain, + state->request.data.auth.user, + state->response.data.auth.nt_status_string, + state->response.data.auth.pam_error)); if (mem_ctx) talloc_destroy(mem_ctx); -- cgit From d87c1f507d38444e627bce59b6c765d9c9479ac6 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 12 Sep 2002 05:39:55 +0000 Subject: Merge undone cleanups. --- source/nsswitch/wbinfo.c | 18 +++++------------- source/nsswitch/winbindd_nss.h | 4 +++- source/nsswitch/winbindd_pam.c | 31 +++++++++++++++++++------------ 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/source/nsswitch/wbinfo.c b/source/nsswitch/wbinfo.c index 7a1aee44cd9..875df231dca 100644 --- a/source/nsswitch/wbinfo.c +++ b/source/nsswitch/wbinfo.c @@ -422,7 +422,6 @@ static BOOL wbinfo_auth(char *username) struct winbindd_request request; struct winbindd_response response; NSS_STATUS result; - fstring name_user, name_domain; char *p; /* Send off request */ @@ -434,16 +433,11 @@ static BOOL wbinfo_auth(char *username) if (p) { *p = 0; + fstrcpy(request.data.auth.user, username); fstrcpy(request.data.auth.pass, p + 1); - } - - parse_wbinfo_domain_user(username, name_domain, name_user); - - if (p) - *p = '%'; - - fstrcpy(request.data.auth.user, name_user); - fstrcpy(request.data.auth.domain, name_domain); + *p = '%'; + } else + fstrcpy(request.data.auth.user, username); result = winbindd_request(WINBINDD_PAM_AUTH, &request, &response); @@ -486,10 +480,8 @@ static BOOL wbinfo_auth_crap(char *username) parse_wbinfo_domain_user(username, name_domain, name_user); - if (p) - *p = '%'; - fstrcpy(request.data.auth_crap.user, name_user); + fstrcpy(request.data.auth_crap.domain, name_domain); generate_random_buffer(request.data.auth_crap.chal, 8, False); diff --git a/source/nsswitch/winbindd_nss.h b/source/nsswitch/winbindd_nss.h index 21081cb09c7..368bf10cea5 100644 --- a/source/nsswitch/winbindd_nss.h +++ b/source/nsswitch/winbindd_nss.h @@ -127,8 +127,10 @@ struct winbindd_request { uid_t uid; /* getpwuid, uid_to_sid */ gid_t gid; /* getgrgid, gid_to_sid */ struct { + /* We deliberatedly don't split into domain/user to + avoid having the client know what the separator + character is. */ fstring user; - fstring domain; fstring pass; } auth; /* pam_winbind auth module */ struct { diff --git a/source/nsswitch/winbindd_pam.c b/source/nsswitch/winbindd_pam.c index c3ab6615f61..3e7a8ad9713 100644 --- a/source/nsswitch/winbindd_pam.c +++ b/source/nsswitch/winbindd_pam.c @@ -57,6 +57,7 @@ static NTSTATUS append_info3_as_ndr(TALLOC_CTX *mem_ctx, enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) { NTSTATUS result; + fstring name_domain, name_user; unsigned char trust_passwd[16]; time_t last_change_time; uint32 smb_uid_low; @@ -75,8 +76,8 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) /* Ensure null termination */ state->request.data.auth.pass[sizeof(state->request.data.auth.pass)-1]='\0'; - DEBUG(3, ("[%5d]: pam auth domain: %s user: %s\n", state->pid, - state->request.data.auth.domain, state->request.data.auth.user)); + DEBUG(3, ("[%5d]: pam auth %s\n", state->pid, + state->request.data.auth.user)); if (!(mem_ctx = talloc_init_named("winbind pam auth for %s", state->request.data.auth.user))) { DEBUG(0, ("winbindd_pam_auth: could not talloc_init()!\n")); @@ -86,6 +87,13 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) /* Parse domain and username */ + if (!parse_domain_user(state->request.data.auth.user, name_domain, + name_user)) { + DEBUG(5,("no domain separator (%s) in username (%s) - failing auth\n", lp_winbind_separator(), state->request.data.auth.user)); + result = NT_STATUS_INVALID_PARAMETER; + goto done; + } + { unsigned char local_lm_response[24]; unsigned char local_nt_response[24]; @@ -125,10 +133,11 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) goto done; } - result = cli_netlogon_sam_network_logon( - cli, mem_ctx, state->request.data.auth.user, - state->request.data.auth.domain, - global_myname, chal, lm_resp, nt_resp, &info3); + result = cli_netlogon_sam_network_logon(cli, mem_ctx, + name_user, name_domain, + global_myname, chal, + lm_resp, nt_resp, + &info3); uni_group_cache_store_netlogon(mem_ctx, &info3); done: @@ -138,12 +147,10 @@ done: fstrcpy(state->response.data.auth.error_string, nt_errstr(result)); state->response.data.auth.pam_error = nt_status_to_pam(result); - DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, - ("Plain-text authentication for user %s/%s returned %s (PAM: %d)\n", - state->request.data.auth.domain, - state->request.data.auth.user, - state->response.data.auth.nt_status_string, - state->response.data.auth.pam_error)); + DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, ("Plain-text authentication for user %s returned %s (PAM: %d)\n", + state->request.data.auth.user, + state->response.data.auth.nt_status_string, + state->response.data.auth.pam_error)); if (mem_ctx) talloc_destroy(mem_ctx); -- cgit From 2b33a500a8ad13acdd7e4f593aba65229dc8dd96 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 12 Sep 2002 06:24:41 +0000 Subject: Fixup sendfile to match HPUX semantics with signal interrups. This was fiddly.... :-(. Jeremy. --- source/lib/sendfile.c | 64 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 12 deletions(-) diff --git a/source/lib/sendfile.c b/source/lib/sendfile.c index 33282e704a5..11bf38ebeed 100644 --- a/source/lib/sendfile.c +++ b/source/lib/sendfile.c @@ -38,17 +38,21 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off { size_t total=0; ssize_t ret; + ssize_t hdr_len = 0; /* * Send the header first. * Use MSG_MORE to cork the TCP output until sendfile is called. */ - while (total < header->length) { - ret = sys_send(outfd, header->data + total,header->length - total, MSG_MORE); - if (ret == -1) - return -1; - total += ret; + if (header) { + hdr_len = header->length; + while (total < hd_len) { + ret = sys_send(outfd, header->data + total,hdr_len - total, MSG_MORE); + if (ret == -1) + return -1; + total += ret; + } } total = count; @@ -67,7 +71,7 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off return -1; /* I think we're at EOF here... */ total -= nwritten; } - return count + header->length; + return count + hdr_len; } #elif defined(SOLARIS_SENDFILE_API) @@ -85,16 +89,30 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off { size_t total=0; struct iovec hdtrl[2]; - - /* Set up the header/trailer iovec. */ - hdtrl[0].iov_base = header->data; - hdtrl[0].iov_len = header->length; + size_t hdr_len = 0; + + if (header) { + /* Set up the header/trailer iovec. */ + hdtrl[0].iov_base = header->data; + hdtrl[0].iov_len = hdr_len = header->length; + } else { + hdtrl[0].iov_base = NULL; + hdtrl[0].iov_len = hdr_len = 0; + } hdtrl[1].iov_base = NULL; hdtrl[1].iov_base = 0; total = count; - while (total) { + while (total + hdtrl[0].iov_len) { ssize_t nwritten; + + /* + * HPUX guarantees that if any data was written before + * a signal interrupt then sendfile returns the number of + * bytes written (which may be less than requested) not -1. + * nwritten includes the header data sent. + */ + do { #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) nwritten = sendfile64(outfd, infd, &offset, total, &hdtrl, 0); @@ -104,9 +122,31 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off } while (nwritten == -1 && errno == EINTR); if (nwritten == -1) return -1; + if (nwritten == 0) + return -1; /* I think we're at EOF here... */ + + /* + * If this was a short (signal interrupted) write we may need + * to subtract it from the header data, or null out the header + * data altogether if we wrote more than hdtrl[0].iov_len bytes. + * We change nwritten to be the number of file bytes written. + */ + + if (hdtrl[0].iov_base && hdtrl[0].iov_len) { + if (nwritten >= hdtrl[0].iov_len) { + nwritten -= hdtrl[0].iov_len; + hdtrl[0].iov_base = NULL; + hdtrl[0].iov_len = 0; + } else { + nwritten = 0; + hdtrl[0].iov_base += nwritten; + hdtrl[0].iov_len -= nwritten; + } + } total -= nwritten; + offset += nwritten; } - return count + header->length; + return count + hdr_len; } #elif defined(FREEBSD_SENDFILE_API) -- cgit From d7024e8cb94a20cba789deb2c5b70221f6cca4fd Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 12 Sep 2002 06:26:06 +0000 Subject: HPUX takes offset, not pointer to offset. Jeremy. --- source/lib/sendfile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/lib/sendfile.c b/source/lib/sendfile.c index 11bf38ebeed..23d1154718c 100644 --- a/source/lib/sendfile.c +++ b/source/lib/sendfile.c @@ -115,9 +115,9 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off do { #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) - nwritten = sendfile64(outfd, infd, &offset, total, &hdtrl, 0); + nwritten = sendfile64(outfd, infd, offset, total, &hdtrl[0], 0); #else - nwritten = sendfile(outfd, infd, &offset, total, &hdtrl, 0); + nwritten = sendfile(outfd, infd, offset, total, &hdtrl[0], 0); #endif } while (nwritten == -1 && errno == EINTR); if (nwritten == -1) -- cgit From 2d080d7579c0a59bcb03608600c6b28243bbe353 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 12 Sep 2002 06:28:13 +0000 Subject: Changed profile version number to 7 - added sendfile statistics. Jeremy. --- source/include/smbprofile.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/include/smbprofile.h b/source/include/smbprofile.h index 870fef71e3e..e501de8c0e2 100644 --- a/source/include/smbprofile.h +++ b/source/include/smbprofile.h @@ -34,7 +34,7 @@ enum flush_reason_enum { SEEK_FLUSH, READ_FLUSH, WRITE_FLUSH, READRAW_FLUSH, #define PROF_SHMEM_KEY ((key_t)0x07021999) #define PROF_SHM_MAGIC 0x6349985 -#define PROF_SHM_VERSION 6 +#define PROF_SHM_VERSION 7 /* time values in the following structure are in microseconds */ -- cgit From 9dad88e1d4d09f61da87dab2633c6e989a9dd77f Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 12 Sep 2002 18:18:35 +0000 Subject: Fixed up FreeBSD sendfile code - only Solaris left then I can add the configure tests... Jeremy. --- source/lib/sendfile.c | 77 +++++++++++++++++++++++++++++++++++--------------- source/smbd/vfs-wrap.c | 2 +- 2 files changed, 56 insertions(+), 23 deletions(-) diff --git a/source/lib/sendfile.c b/source/lib/sendfile.c index 23d1154718c..6e093c31ffb 100644 --- a/source/lib/sendfile.c +++ b/source/lib/sendfile.c @@ -34,7 +34,7 @@ #define MSG_MORE 0x8000 #endif -ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) { size_t total=0; ssize_t ret; @@ -48,7 +48,7 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off if (header) { hdr_len = header->length; while (total < hd_len) { - ret = sys_send(outfd, header->data + total,hdr_len - total, MSG_MORE); + ret = sys_send(tofd, header->data + total,hdr_len - total, MSG_MORE); if (ret == -1) return -1; total += ret; @@ -60,9 +60,9 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off ssize_t nwritten; do { #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) - nwritten = sendfile64(outfd, infd, &offset, total); + nwritten = sendfile64(tofd, fromfd, &offset, total); #else - nwritten = sendfile(outfd, infd, &offset, total); + nwritten = sendfile(tofd, fromfd, &offset, total); #endif } while (nwritten == -1 && errno == EINTR); if (nwritten == -1) @@ -76,7 +76,7 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off #elif defined(SOLARIS_SENDFILE_API) -ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) { } @@ -85,7 +85,7 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off #include #include -ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) { size_t total=0; struct iovec hdtrl[2]; @@ -115,9 +115,9 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off do { #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) - nwritten = sendfile64(outfd, infd, offset, total, &hdtrl[0], 0); + nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0); #else - nwritten = sendfile(outfd, infd, offset, total, &hdtrl[0], 0); + nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0); #endif } while (nwritten == -1 && errno == EINTR); if (nwritten == -1) @@ -155,11 +155,12 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off #include #include -ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) { size_t total=0; struct sf_hdtr hdr; struct iovec hdtrl; + size_t hdr_len = 0; hdr->headers = &hdtrl; hdr->hdr_cnt = 1; @@ -167,29 +168,61 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off hdr->trl_cnt = 0; /* Set up the header iovec. */ - hdtrl.iov_base = header->data; - hdtrl.iov_len = header->length; + if (header) { + hdtrl.iov_base = header->data; + hdtrl.iov_len = hdr_len = header->length; + } else { + hdtrl.iov_base = NULL; + hdtrl.iov_len = 0; + } total = count; - while (total) { - ssize_t nwritten; + while (total + hdtrl.iov_len) { + SMB_OFF_T nwritten; + int ret; + + /* + * FreeBSD sendfile returns 0 on success, -1 on error. + * Remember, the tofd and fromfd are reversed..... :-). + * nwritten includes the header data sent. + */ + do { -#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) - nwritten = sendfile64(outfd, infd, &offset, total, &hdr, NULL, 0); -#else - nwritten = sendfile(outfd, infd, &offset, total, &hdr, NULL, 0); -#endif - } while (nwritten == -1 && errno == EINTR); - if (nwritten == -1) + ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); + } while (ret == -1 && errno == EINTR); + if (ret == -1) return -1; + + if (nwritten == 0) + return -1; /* I think we're at EOF here... */ + + /* + * If this was a short (signal interrupted) write we may need + * to subtract it from the header data, or null out the header + * data altogether if we wrote more than hdtrl.iov_len bytes. + * We change nwritten to be the number of file bytes written. + */ + + if (hdtrl[0].iov_base && hdtrl.iov_len) { + if (nwritten >= hdtrl.iov_len) { + nwritten -= hdtrl.iov_len; + hdtrl.iov_base = NULL; + hdtrl.iov_len = 0; + } else { + nwritten = 0; + hdtrl.iov_base += nwritten; + hdtrl.iov_len -= nwritten; + } + } total -= nwritten; + offset += nwritten; } - return count + header->length; + return count + hdr_len; } #else /* No sendfile implementation. Return error. */ -ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) { /* No sendfile syscall. */ errno = ENOSYS; diff --git a/source/smbd/vfs-wrap.c b/source/smbd/vfs-wrap.c index b44b778e09d..27bb1f42f34 100644 --- a/source/smbd/vfs-wrap.c +++ b/source/smbd/vfs-wrap.c @@ -193,7 +193,7 @@ SMB_OFF_T vfswrap_lseek(files_struct *fsp, int filedes, SMB_OFF_T offset, int wh } #if 0 /* JRATEST */ -ssize_t vfswrap_sendfile(int outfd, struct files_struct *fsp, int infd, DATA_BLOB *hdr, SMB_OFF_T offset, size_t n) +ssize_t vfswrap_sendfile(int tofd, struct files_struct *fsp, int fromfd, DATA_BLOB *hdr, SMB_OFF_T offset, size_t n) { ssize_t result; -- cgit From d153d692a0f8499e1d6dac791a4d119cd9c15e45 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 13 Sep 2002 08:17:02 +0000 Subject: Updated some comments in the NET_USER_INFO_3 structure for the other_sids field. --- source/include/rpc_netlogon.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/include/rpc_netlogon.h b/source/include/rpc_netlogon.h index 5ee8120c68c..500f5fef8ac 100644 --- a/source/include/rpc_netlogon.h +++ b/source/include/rpc_netlogon.h @@ -164,8 +164,8 @@ typedef struct net_user_info_3 uint32 buffer_dom_id; /* undocumented logon domain id pointer */ uint8 padding[40]; /* unused padding bytes. expansion room */ - uint32 num_other_sids; /* 0 - num_sids */ - uint32 buffer_other_sids; /* NULL - undocumented pointer to SIDs. */ + uint32 num_other_sids; /* number of foreign/trusted domain sids */ + uint32 buffer_other_sids; UNISTR2 uni_user_name; /* username unicode string */ UNISTR2 uni_full_name; /* user's full name unicode string */ @@ -184,7 +184,7 @@ typedef struct net_user_info_3 uint32 num_other_groups; /* other groups */ DOM_GID *other_gids; /* group info */ - DOM_SID2 *other_sids; /* undocumented - domain SIDs */ + DOM_SID2 *other_sids; /* foreign/trusted domain SIDs */ } NET_USER_INFO_3; -- cgit From eda0e7589f2591edc29e6c1eef44aa21628977be Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Fri, 13 Sep 2002 08:53:53 +0000 Subject: wrong alignment size calculation spot by Florian Weimer --- source/rpc_parse/parse_spoolss.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/rpc_parse/parse_spoolss.c b/source/rpc_parse/parse_spoolss.c index 55c387cdc51..36b00ff55db 100644 --- a/source/rpc_parse/parse_spoolss.c +++ b/source/rpc_parse/parse_spoolss.c @@ -3366,7 +3366,9 @@ uint32 spoolss_size_printer_info_2(PRINTER_INFO_2 *info) * it is easier to maintain the calculation here and * not place the burden on the caller to remember. --jerry */ - size += size % 4; + if ((size % 4) != 0) { + size += 4 - (size % 4); + } return size; } -- cgit From 872dfd87cda585c33c3823b06580cb301567a9b9 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Sat, 14 Sep 2002 00:34:46 +0000 Subject: Added fix for broken Linux (no sendfile64). When offset + count > 2GB then return ENOSYS and let the upper layer handle it. Jeremy --- source/lib/sendfile.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ source/smbd/reply.c | 7 +++++++ 2 files changed, 64 insertions(+) diff --git a/source/lib/sendfile.c b/source/lib/sendfile.c index 6e093c31ffb..2707495d5b3 100644 --- a/source/lib/sendfile.c +++ b/source/lib/sendfile.c @@ -74,6 +74,63 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of return count + hdr_len; } +#elif defined(LINUX_BROKEN_SENDFILE_API) + +#include + +#ifndef MSG_MORE +#define MSG_MORE 0x8000 +#endif + +ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +{ + size_t total=0; + ssize_t ret; + ssize_t hdr_len = 0; + + /* + * Fix for broken Linux 2.4 systems with no working sendfile64(). + * If the offset+count > 2 GB then pretend we don't have the + * system call sendfile at all. The upper later catches this + * and uses a normal read. JRA. + */ + + if ((sizeof(SMB_OFF_T) >= 8) && (offset + count > (SMB_OFF_T)0x7FFFFFFF)) { + errno = ENOSYS; + return -1; + } + + /* + * Send the header first. + * Use MSG_MORE to cork the TCP output until sendfile is called. + */ + + if (header) { + hdr_len = header->length; + while (total < hd_len) { + ret = sys_send(tofd, header->data + total,hdr_len - total, MSG_MORE); + if (ret == -1) + return -1; + total += ret; + } + } + + total = count; + while (total) { + ssize_t nwritten; + do { + nwritten = sendfile(tofd, fromfd, &offset, total); + } while (nwritten == -1 && errno == EINTR); + if (nwritten == -1) + return -1; + if (nwritten == 0) + return -1; /* I think we're at EOF here... */ + total -= nwritten; + } + return count + hdr_len; +} + + #elif defined(SOLARIS_SENDFILE_API) ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) diff --git a/source/smbd/reply.c b/source/smbd/reply.c index 02aa53807c6..878e21f4c27 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -1730,6 +1730,13 @@ int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length header.free = NULL; if ( conn->vfs_ops.sendfile( smbd_server_fd(), fsp, fsp->fd, &header, startpos, smb_maxcnt) == -1) { + /* + * Special hack for broken Linux with no 64 bit clean sendfile. If we + * return ENOSYS then pretend we just got a normal read. + */ + if (errno == ENOSYS) + goto normal_read; + DEBUG(0,("send_file_readX: sendfile failed for file %s (%s). Terminating\n", fsp->fsp_name, strerror(errno) )); exit_server("send_file_readX sendfile failed"); -- cgit From 7e2f9769c9a7ee5d11267a8a8864371fc0aa8f50 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Sat, 14 Sep 2002 01:38:55 +0000 Subject: Use HAVE_SENDFILE64, not SENDFILE64. Jeremy. --- source/lib/sendfile.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/lib/sendfile.c b/source/lib/sendfile.c index 2707495d5b3..4613cfb864b 100644 --- a/source/lib/sendfile.c +++ b/source/lib/sendfile.c @@ -59,7 +59,7 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of while (total) { ssize_t nwritten; do { -#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(HAVE_SENDFILE64) nwritten = sendfile64(tofd, fromfd, &offset, total); #else nwritten = sendfile(tofd, fromfd, &offset, total); @@ -133,8 +133,11 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of #elif defined(SOLARIS_SENDFILE_API) +/* Hmmm. Can't find Solaris sendfile API docs.... Where is it ? */ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) { + errno = ENOSYS; + return -1; } #elif defined(HPUX_SENDFILE_API) @@ -171,7 +174,7 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of */ do { -#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(HAVE_SENDFILE64) nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0); #else nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0); -- cgit From 898f30fffb4e613e4a7efa0463c54fbc3b1f3cca Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 15 Sep 2002 13:23:56 +0000 Subject: Add reference to CUPS documentation about how to use unix -> windows clients using samba --- docs/docbook/projdoc/UNIX_INSTALL.sgml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/docbook/projdoc/UNIX_INSTALL.sgml b/docs/docbook/projdoc/UNIX_INSTALL.sgml index aab193c4519..c307636d5fa 100644 --- a/docs/docbook/projdoc/UNIX_INSTALL.sgml +++ b/docs/docbook/projdoc/UNIX_INSTALL.sgml @@ -359,13 +359,16 @@ Printing from UNIX to a Client PC To use a printer that is available via a smb-based - server from a unix host you will need to compile the + server from a unix host with LPR you will need to compile the smbclient program. You then need to install the script "smbprint". Read the instruction in smbprint for more details. There is also a SYSV style script that does much the same thing called smbprint.sysv. It contains instructions. + + See the CUPS manual for information about setting up + printing from a unix host with CUPS to a smb-based server. -- cgit From 1e14815f4cd9e8a9ca5c0d41de902f9c0dd6410c Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 15 Sep 2002 13:26:16 +0000 Subject: Add document on tracing system calls --- docs/docbook/devdoc/Tracing.sgml | 129 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 docs/docbook/devdoc/Tracing.sgml diff --git a/docs/docbook/devdoc/Tracing.sgml b/docs/docbook/devdoc/Tracing.sgml new file mode 100644 index 00000000000..3a0e4ba1a97 --- /dev/null +++ b/docs/docbook/devdoc/Tracing.sgml @@ -0,0 +1,129 @@ + + + + AndrewTridgell + + Samba Team + + + + +Tracing samba system calls + + +This file describes how to do a system call trace on Samba to work out +what its doing wrong. This is not for the faint of heart, but if you +are reading this then you are probably desperate. + + + +Actually its not as bad as the the above makes it sound, just don't +expect the output to be very pretty :-) + + + +Ok, down to business. One of the big advantages of unix systems is +that they nearly all come with a system trace utility that allows you +to monitor all system calls that a program is making. This is +extremely using for debugging and also helps when trying to work out +why something is slower than you expect. You can use system tracing +without any special compilation options. + + + +The system trace utility is called different things on different +systems. On Linux systems its called strace. Under SunOS 4 its called +trace. Under SVR4 style systems (including solaris) its called +truss. Under many BSD systems its called ktrace. + + + +The first thing you should do is read the man page for your native +system call tracer. In the discussion below I'll assume its called +strace as strace is the only portable system tracer (its available for +free for many unix types) and its also got some of the nicest +features. + + + +Next, try using strace on some simple commands. For example, strace +ls or strace echo hello. + + + +You'll notice that it produces a LOT of output. It is showing you the +arguments to every system call that the program makes and the +result. Very little happens in a program without a system call so you +get lots of output. You'll also find that it produces a lot of +"preamble" stuff showing the loading of shared libraries etc. Ignore +this (unless its going wrong!) + + + +For example, the only line that really matters in the strace echo +hello output is: + + + +write(1, "hello\n", 6) = 6 + + +all the rest is just setting up to run the program. + + +Ok, now you're familiar with strace. To use it on Samba you need to +strace the running smbd daemon. The way I tend ot use it is to first +login from my Windows PC to the Samba server, then use smbstatus to +find which process ID that client is attached to, then as root I do +strace -p PID to attach to that process. I normally redirect the +stderr output from this command to a file for later perusal. For +example, if I'm using a csh style shell: + + +strace -f -p 3872 >& strace.out + +or with a sh style shell: + +strace -f -p 3872 > strace.out 2>&1 + + +Note the "-f" option. This is only available on some systems, and +allows you to trace not just the current process, but any children it +forks. This is great for finding printing problems caused by the +"print command" being wrong. + + + +Once you are attached you then can do whatever it is on the client +that is causing problems and you will capture all the system calls +that smbd makes. + + + +So how do you interpret the results? Generally I search through the +output for strings that I know will appear when the problem +happens. For example, if I am having touble with permissions on a file +I would search for that files name in the strace output and look at +the surrounding lines. Another trick is to match up file descriptor +numbers and "follow" what happens to an open file until it is closed. + + + +Beyond this you will have to use your initiative. To give you an idea +of what you are looking for here is a piece of strace output that +shows that /dev/null is not world writeable, which +causes printing to fail with Samba: + + + +[pid 28268] open("/dev/null", O_RDWR) = -1 EACCES (Permission denied) +[pid 28268] open("/dev/null", O_WRONLY) = -1 EACCES (Permission denied) + + + +The process is trying to first open /dev/null read-write +then read-only. Both fail. This means /dev/null has +incorrect permissions. + + + -- cgit From bd7245dc6fcff805fcb69f6bd1f4852dadf5aa84 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 15 Sep 2002 16:35:44 +0000 Subject: Make current_sam_methods a const - Patch by Kai Krüger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/include/sam.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/include/sam.h b/source/include/sam.h index c8df95676e8..875efbe0de7 100644 --- a/source/include/sam.h +++ b/source/include/sam.h @@ -51,7 +51,7 @@ int sam_version(void)\ typedef struct sam_domain_handle { TALLOC_CTX *mem_ctx; uint32 access_granted; - struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ + const struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ void (*free_fn)(struct sam_domain_handle **); struct domain_data { DOM_SID sid; /*SID of the domain. Should not be changed */ @@ -75,7 +75,7 @@ typedef struct sam_domain_handle { typedef struct sam_account_handle { TALLOC_CTX *mem_ctx; uint32 access_granted; - struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ + const struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ void (*free_fn)(struct sam_account_handle **); struct sam_account_data { uint32 init_flag; @@ -115,7 +115,7 @@ typedef struct sam_account_handle { typedef struct sam_group_handle { TALLOC_CTX *mem_ctx; uint32 access_granted; - struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ + const struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ void (*free_fn)(struct sam_group_handle **); struct sam_group_data { char *group_name; -- cgit From dc3c14fc2b661a62a1876149e96af6de07a2c4a6 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 15 Sep 2002 17:49:53 +0000 Subject: Put unixsocket calls between #ifdef HAVE_UNIXSOCKET's - required for Stratus VOS (Double checked) --- source/lib/util_sock.c | 5 +++++ source/nsswitch/wb_common.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/source/lib/util_sock.c b/source/lib/util_sock.c index 56ef4a6ab1c..fc2abf976f4 100644 --- a/source/lib/util_sock.c +++ b/source/lib/util_sock.c @@ -976,6 +976,7 @@ int create_pipe_sock(const char *socket_dir, const char *socket_name, mode_t dir_perms) { +#ifdef HAVE_UNIXSOCKET struct sockaddr_un sunaddr; struct stat st; int sock; @@ -1064,6 +1065,10 @@ int create_pipe_sock(const char *socket_dir, /* Success! */ return sock; +#else + DEBUG(0, ("create_pipe_sock: No Unix sockets on this system\n")); + return -1; +#endif /* HAVE_UNIXSOCKET */ } /******************************************************************* diff --git a/source/nsswitch/wb_common.c b/source/nsswitch/wb_common.c index 88bda4eabe3..51792f63fe2 100644 --- a/source/nsswitch/wb_common.c +++ b/source/nsswitch/wb_common.c @@ -148,6 +148,7 @@ static int make_safe_fd(int fd) int winbind_open_pipe_sock(void) { +#ifdef HAVE_UNIXSOCKET struct sockaddr_un sunaddr; static pid_t our_pid; struct stat st; @@ -221,6 +222,9 @@ int winbind_open_pipe_sock(void) } return winbindd_fd; +#else + return -1; +#endif /* HAVE_UNIXSOCKET */ } /* Write data to winbindd socket */ -- cgit From 7decd4b3a9e6900ab35f7bf5b266361f308aa58d Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sun, 15 Sep 2002 23:40:55 +0000 Subject: Merge of 'other_sids' patch from appliance. --- source/auth/auth_util.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/source/auth/auth_util.c b/source/auth/auth_util.c index 78dc0d4ee44..ca90fc6f721 100644 --- a/source/auth/auth_util.c +++ b/source/auth/auth_util.c @@ -983,7 +983,9 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx, (*server_info)->n_groups = n_lgroupSIDs; /* Create a 'combined' list of all SIDs we might want in the SD */ - all_group_SIDs = malloc(sizeof(DOM_SID) * (n_lgroupSIDs+info3->num_groups2)); + all_group_SIDs = malloc(sizeof(DOM_SID) * + (n_lgroupSIDs + info3->num_groups2 + + info3->num_other_sids)); if (!all_group_SIDs) { DEBUG(0, ("create_nt_token_info3: malloc() failed for DOM_SID list!\n")); SAFE_FREE(lgroupSIDs); @@ -1006,12 +1008,25 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx, } } + /* Copy 'other' sids. We need to do sid filtering here to + prevent possible elevation of privileges. See: + + http://www.microsoft.com/windows2000/techinfo/administration/security/sidfilter.asp + */ + + for (i = 0; i < info3->num_other_sids; i++) + sid_copy(&all_group_SIDs[ + n_lgroupSIDs + info3->num_groups2 + i], + &info3->other_sids[i].sid); + /* Where are the 'global' sids... */ /* can the user be guest? if yes, where is it stored? */ - if (!NT_STATUS_IS_OK(nt_status = create_nt_user_token(&user_sid, &group_sid, - n_lgroupSIDs+info3->num_groups2, all_group_SIDs, - False, &token))) { + if (!NT_STATUS_IS_OK( + nt_status = create_nt_user_token( + &user_sid, &group_sid, + n_lgroupSIDs + info3->num_groups2 + info3->num_other_sids, + all_group_SIDs, False, &token))) { DEBUG(4,("create_nt_user_token failed\n")); SAFE_FREE(all_group_SIDs); return nt_status; -- cgit From 2011a38f3bd1e51aa1ca0219a9e46da12426cbc3 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sun, 15 Sep 2002 23:42:59 +0000 Subject: Don't display debugs of the nt user token twice. --- source/auth/auth_util.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source/auth/auth_util.c b/source/auth/auth_util.c index ca90fc6f721..c2d92a985ff 100644 --- a/source/auth/auth_util.c +++ b/source/auth/auth_util.c @@ -766,8 +766,6 @@ NTSTATUS make_server_info_sam(auth_serversupplied_info **server_info, (*server_info)->ptok = token; - debug_nt_user_token(DBGC_AUTH, 5, token); - DEBUG(5,("make_server_info_sam: made server info for user %s\n", pdb_get_username((*server_info)->sam_account))); @@ -1036,8 +1034,6 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx, SAFE_FREE(all_group_SIDs); - debug_nt_user_token(DBGC_AUTH, 5, token); - return NT_STATUS_OK; } -- cgit From 0250e2c52c7d7aa25308b6c20b8e2a51184cb598 Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Mon, 16 Sep 2002 07:48:39 +0000 Subject: Changed Major/Minor version info reported to Server Manager to 4.9. Added new SWAT Flags for Advanced and Developer modes. --- source/include/smb.h | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/source/include/smb.h b/source/include/smb.h index a1b3faa3436..59bfb6b4495 100644 --- a/source/include/smb.h +++ b/source/include/smb.h @@ -3,7 +3,7 @@ SMB parameters and setup, plus a whole lot more. Copyright (C) Andrew Tridgell 1992-2000 - Copyright (C) John H Terpstra 1996-2000 + Copyright (C) John H Terpstra 1996-2002 Copyright (C) Luke Kenneth Casson Leighton 1996-2000 Copyright (C) Paul Ashton 1998-2000 Copyright (C) Simo Sorce 2001-2002 @@ -753,12 +753,16 @@ struct bitmap { int n; }; -#define FLAG_BASIC 0x01 /* fundamental options */ -#define FLAG_SHARE 0x02 /* file sharing options */ -#define FLAG_PRINT 0x04 /* printing options */ -#define FLAG_GLOBAL 0x08 /* local options that should be globally settable in SWAT */ -#define FLAG_DEPRECATED 0x10 /* options that should no longer be used */ -#define FLAG_HIDE 0x20 /* options that should be hidden in SWAT */ +#define FLAG_BASIC 0x0001 /* fundamental options */ +#define FLAG_SHARE 0x0002 /* file sharing options */ +#define FLAG_PRINT 0x0004 /* printing options */ +#define FLAG_GLOBAL 0x0008 /* local options that should be globally settable in SWAT */ +#define FLAG_WIZARD 0x0010 /* Parameters that the wizard will operate on */ +#define FLAG_ADVANCED 0x0020 /* Parameters that the wizard will operate on */ +#define FLAG_DEVELOPER 0x0040 /* Parameters that the wizard will operate on */ +#define FLAG_DEPRECATED 0x1000 /* options that should no longer be used */ +#define FLAG_HIDE 0x2000 /* options that should be hidden in SWAT */ +#define FLAG_DOS_STRING 0x4000 /* convert from UNIX to DOS codepage when reading this string. */ #ifndef LOCKING_VERSION #define LOCKING_VERSION 4 @@ -1266,7 +1270,7 @@ char *strdup(char *s); */ #define DEFAULT_MAJOR_VERSION 0x04 -#define DEFAULT_MINOR_VERSION 0x05 +#define DEFAULT_MINOR_VERSION 0x09 /* Browser Election Values */ #define BROWSER_ELECTION_VERSION 0x010f -- cgit From 8a1c136494de47bae74627b07edea6f72eab37cf Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Mon, 16 Sep 2002 07:49:42 +0000 Subject: Applied new display mode FLAGS for SWAT. --- source/param/loadparm.c | 348 +++++++++++++++++++++++++----------------------- 1 file changed, 178 insertions(+), 170 deletions(-) diff --git a/source/param/loadparm.c b/source/param/loadparm.c index 3ac6fb70f11..6ec96083f2b 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -665,66 +665,75 @@ static struct enum_list enum_map_to_guest[] = { {-1, NULL} }; -/* note that we do not initialise the defaults union - it is not allowed in ANSI C */ +/* Note: We do not initialise the defaults union - it is not allowed in ANSI C + * + * Note: We have a flag called FLAG_DEVELOPER but is not used at this time, it + * is implied in current control logic. This may change at some later time. A + * flag value of 0 means - show as development option only. + * + * The FLAG_HIDE is explicit. Paramters set this way do NOT appear in any edit + * screen in SWAT. This is used to exclude parameters as well as to squash all + * parameters that have been duplicated by pseudonyms. + */ static struct parm_struct parm_table[] = { {"Base Options", P_SEP, P_SEPARATOR}, - {"dos charset", P_STRING, P_GLOBAL, &Globals.dos_charset, NULL, NULL, 0}, - {"unix charset", P_STRING, P_GLOBAL, &Globals.unix_charset, NULL, NULL, 0}, - {"display charset", P_STRING, P_GLOBAL, &Globals.display_charset, NULL, NULL, 0}, - {"comment", P_STRING, P_LOCAL, &sDefault.comment, NULL, NULL, FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, - {"path", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, - {"directory", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, 0}, - {"workgroup", P_USTRING, P_GLOBAL, &Globals.szWorkGroup, NULL, NULL, FLAG_BASIC}, - {"realm", P_USTRING, P_GLOBAL, &Globals.szRealm, NULL, NULL, FLAG_BASIC}, - {"ADS server", P_STRING, P_GLOBAL, &Globals.szADSserver, NULL, NULL, FLAG_BASIC}, - {"netbios name", P_UGSTRING, P_GLOBAL, global_myname, handle_netbios_name, NULL, FLAG_BASIC}, - {"netbios aliases", P_LIST, P_GLOBAL, &Globals.szNetbiosAliases, NULL, NULL, 0}, - {"netbios scope", P_UGSTRING, P_GLOBAL, global_scope, NULL, NULL, 0}, - {"server string", P_STRING, P_GLOBAL, &Globals.szServerString, NULL, NULL, FLAG_BASIC }, - {"interfaces", P_LIST, P_GLOBAL, &Globals.szInterfaces, NULL, NULL, FLAG_BASIC}, - {"bind interfaces only", P_BOOL, P_GLOBAL, &Globals.bBindInterfacesOnly, NULL, NULL, 0}, + {"dos charset", P_STRING, P_GLOBAL, &Globals.dos_charset, NULL, NULL, FLAG_ADVANCED}, + {"unix charset", P_STRING, P_GLOBAL, &Globals.unix_charset, NULL, NULL, FLAG_ADVANCED}, + {"display charset", P_STRING, P_GLOBAL, &Globals.display_charset, NULL, NULL, FLAG_ADVANCED}, + {"comment", P_STRING, P_LOCAL, &sDefault.comment, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"path", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"directory", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_HIDE}, + {"workgroup", P_USTRING, P_GLOBAL, &Globals.szWorkGroup, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"realm", P_USTRING, P_GLOBAL, &Globals.szRealm, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"ADS server", P_STRING, P_GLOBAL, &Globals.szADSserver, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"netbios name", P_UGSTRING, P_GLOBAL, global_myname, handle_netbios_name, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"netbios aliases", P_LIST, P_GLOBAL, &Globals.szNetbiosAliases, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, + {"netbios scope", P_UGSTRING, P_GLOBAL, global_scope, NULL, NULL, FLAG_ADVANCED}, + {"server string", P_STRING, P_GLOBAL, &Globals.szServerString, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED }, + {"interfaces", P_LIST, P_GLOBAL, &Globals.szInterfaces, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"bind interfaces only", P_BOOL, P_GLOBAL, &Globals.bBindInterfacesOnly, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, {"Security Options", P_SEP, P_SEPARATOR}, - {"security", P_ENUM, P_GLOBAL, &Globals.security, NULL, enum_security, FLAG_BASIC}, - {"auth methods", P_LIST, P_GLOBAL, &Globals.AuthMethods, NULL, NULL, FLAG_BASIC}, - {"encrypt passwords", P_BOOL, P_GLOBAL, &Globals.bEncryptPasswords, NULL, NULL, FLAG_BASIC}, - {"update encrypted", P_BOOL, P_GLOBAL, &Globals.bUpdateEncrypt, NULL, NULL, FLAG_BASIC}, - {"allow trusted domains", P_BOOL, P_GLOBAL, &Globals.bAllowTrustedDomains, NULL, NULL, 0}, - {"hosts equiv", P_STRING, P_GLOBAL, &Globals.szHostsEquiv, NULL, NULL, 0}, - {"min passwd length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, 0}, - {"min password length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, 0}, - {"map to guest", P_ENUM, P_GLOBAL, &Globals.map_to_guest, NULL, enum_map_to_guest, 0}, - {"null passwords", P_BOOL, P_GLOBAL, &Globals.bNullPasswords, NULL, NULL, 0}, - {"obey pam restrictions", P_BOOL, P_GLOBAL, &Globals.bObeyPamRestrictions, NULL, NULL, 0}, - {"password server", P_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL, NULL, 0}, - {"smb passwd file", P_STRING, P_GLOBAL, &Globals.szSMBPasswdFile, NULL, NULL, 0}, - {"private dir", P_STRING, P_GLOBAL, &Globals.szPrivateDir, NULL, NULL, 0}, - {"passdb backend", P_LIST, P_GLOBAL, &Globals.szPassdbBackend, NULL, NULL, 0}, - {"sam backend", P_LIST, P_GLOBAL, &Globals.szSamBackend, NULL, NULL, 0}, - {"non unix account range", P_STRING, P_GLOBAL, &Globals.szNonUnixAccountRange, handle_non_unix_account_range, NULL, 0}, - {"algorithmic rid base", P_INTEGER, P_GLOBAL, &Globals.bAlgorithmicRidBase, NULL, NULL, 0}, - {"root directory", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, 0}, - {"root dir", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, 0}, - {"root", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, 0}, - {"guest account", P_STRING, P_GLOBAL, &Globals.szGuestaccount, NULL, NULL, FLAG_BASIC}, + {"security", P_ENUM, P_GLOBAL, &Globals.security, NULL, enum_security, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"auth methods", P_LIST, P_GLOBAL, &Globals.AuthMethods, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"encrypt passwords", P_BOOL, P_GLOBAL, &Globals.bEncryptPasswords, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"update encrypted", P_BOOL, P_GLOBAL, &Globals.bUpdateEncrypt, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, + {"allow trusted domains", P_BOOL, P_GLOBAL, &Globals.bAllowTrustedDomains, NULL, NULL, FLAG_ADVANCED}, + {"hosts equiv", P_STRING, P_GLOBAL, &Globals.szHostsEquiv, NULL, NULL, FLAG_ADVANCED}, + {"min passwd length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, FLAG_ADVANCED}, + {"min password length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, FLAG_ADVANCED}, + {"map to guest", P_ENUM, P_GLOBAL, &Globals.map_to_guest, NULL, enum_map_to_guest, FLAG_ADVANCED}, + {"null passwords", P_BOOL, P_GLOBAL, &Globals.bNullPasswords, NULL, NULL, FLAG_ADVANCED}, + {"obey pam restrictions", P_BOOL, P_GLOBAL, &Globals.bObeyPamRestrictions, NULL, NULL, FLAG_ADVANCED}, + {"password server", P_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, + {"smb passwd file", P_STRING, P_GLOBAL, &Globals.szSMBPasswdFile, NULL, NULL, FLAG_ADVANCED}, + {"private dir", P_STRING, P_GLOBAL, &Globals.szPrivateDir, NULL, NULL, FLAG_ADVANCED}, + {"passdb backend", P_LIST, P_GLOBAL, &Globals.szPassdbBackend, NULL, NULL, FLAG_ADVANCED}, + {"sam backend", P_LIST, P_GLOBAL, &Globals.szSamBackend, NULL, NULL, FLAG_ADVANCED}, + {"non unix account range", P_STRING, P_GLOBAL, &Globals.szNonUnixAccountRange, handle_non_unix_account_range, NULL, FLAG_ADVANCED}, + {"algorithmic rid base", P_INTEGER, P_GLOBAL, &Globals.bAlgorithmicRidBase, NULL, NULL, FLAG_ADVANCED}, + {"root directory", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED}, + {"root dir", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED}, + {"root", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_HIDE}, + {"guest account", P_STRING, P_GLOBAL, &Globals.szGuestaccount, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, - {"pam password change", P_BOOL, P_GLOBAL, &Globals.bPamPasswordChange, NULL, NULL, 0}, - {"passwd program", P_STRING, P_GLOBAL, &Globals.szPasswdProgram, NULL, NULL, 0}, - {"passwd chat", P_STRING, P_GLOBAL, &Globals.szPasswdChat, NULL, NULL, 0}, - {"passwd chat debug", P_BOOL, P_GLOBAL, &Globals.bPasswdChatDebug, NULL, NULL, 0}, - {"username map", P_STRING, P_GLOBAL, &Globals.szUsernameMap, NULL, NULL, 0}, - {"password level", P_INTEGER, P_GLOBAL, &Globals.pwordlevel, NULL, NULL, 0}, - {"username level", P_INTEGER, P_GLOBAL, &Globals.unamelevel, NULL, NULL, 0}, - {"unix password sync", P_BOOL, P_GLOBAL, &Globals.bUnixPasswdSync, NULL, NULL, 0}, - {"restrict anonymous", P_INTEGER, P_GLOBAL, &Globals.restrict_anonymous, NULL, NULL, 0}, - {"lanman auth", P_BOOL, P_GLOBAL, &Globals.bLanmanAuth, NULL, NULL, 0}, - {"ntlm auth", P_BOOL, P_GLOBAL, &Globals.bNTLMAuth, NULL, NULL, 0}, + {"pam password change", P_BOOL, P_GLOBAL, &Globals.bPamPasswordChange, NULL, NULL, FLAG_ADVANCED}, + {"passwd program", P_STRING, P_GLOBAL, &Globals.szPasswdProgram, NULL, NULL, FLAG_ADVANCED}, + {"passwd chat", P_STRING, P_GLOBAL, &Globals.szPasswdChat, NULL, NULL, FLAG_ADVANCED}, + {"passwd chat debug", P_BOOL, P_GLOBAL, &Globals.bPasswdChatDebug, NULL, NULL, FLAG_ADVANCED}, + {"username map", P_STRING, P_GLOBAL, &Globals.szUsernameMap, NULL, NULL, FLAG_ADVANCED}, + {"password level", P_INTEGER, P_GLOBAL, &Globals.pwordlevel, NULL, NULL, FLAG_ADVANCED}, + {"username level", P_INTEGER, P_GLOBAL, &Globals.unamelevel, NULL, NULL, FLAG_ADVANCED}, + {"unix password sync", P_BOOL, P_GLOBAL, &Globals.bUnixPasswdSync, NULL, NULL, FLAG_ADVANCED}, + {"restrict anonymous", P_INTEGER, P_GLOBAL, &Globals.restrict_anonymous, NULL, NULL, FLAG_ADVANCED}, + {"lanman auth", P_BOOL, P_GLOBAL, &Globals.bLanmanAuth, NULL, NULL, FLAG_ADVANCED}, + {"ntlm auth", P_BOOL, P_GLOBAL, &Globals.bNTLMAuth, NULL, NULL, FLAG_ADVANCED}, {"username", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE}, - {"user", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, 0}, - {"users", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, 0}, + {"user", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_HIDE}, + {"users", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_HIDE}, {"invalid users", P_LIST, P_LOCAL, &sDefault.szInvalidUsers, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE}, {"valid users", P_LIST, P_LOCAL, &sDefault.szValidUsers, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE}, @@ -734,12 +743,12 @@ static struct parm_struct parm_table[] = { {"printer admin", P_LIST, P_LOCAL, &sDefault.printer_admin, NULL, NULL, FLAG_GLOBAL | FLAG_PRINT}, {"force user", P_STRING, P_LOCAL, &sDefault.force_user, NULL, NULL, FLAG_SHARE}, {"force group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, FLAG_SHARE}, - {"group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, 0}, + {"group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, FLAG_ADVANCED}, - {"read only", P_BOOL, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_BASIC | FLAG_SHARE}, - {"write ok", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, 0}, - {"writeable", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, 0}, - {"writable", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, 0}, + {"read only", P_BOOL, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE}, + {"write ok", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_HIDE}, + {"writeable", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_HIDE}, + {"writable", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_HIDE}, {"create mask", P_OCTAL, P_LOCAL, &sDefault.iCreate_mask, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE}, {"create mode", P_OCTAL, P_LOCAL, &sDefault.iCreate_mask, NULL, NULL, FLAG_GLOBAL}, @@ -754,27 +763,27 @@ static struct parm_struct parm_table[] = { {"inherit permissions", P_BOOL, P_LOCAL, &sDefault.bInheritPerms, NULL, NULL, FLAG_SHARE}, {"inherit acls", P_BOOL, P_LOCAL, &sDefault.bInheritACLS, NULL, NULL, FLAG_SHARE}, {"guest only", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, FLAG_SHARE}, - {"only guest", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, 0}, + {"only guest", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, FLAG_HIDE}, - {"guest ok", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, - {"public", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, 0}, + {"guest ok", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"public", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_HIDE}, {"only user", P_BOOL, P_LOCAL, &sDefault.bOnlyUser, NULL, NULL, FLAG_SHARE}, - {"hosts allow", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, - {"allow hosts", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, 0}, - {"hosts deny", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, - {"deny hosts", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, 0}, + {"hosts allow", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"allow hosts", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_HIDE}, + {"hosts deny", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"deny hosts", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_HIDE}, {"Logging Options", P_SEP, P_SEPARATOR}, - {"log level", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, 0}, - {"debuglevel", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, 0}, - {"syslog", P_INTEGER, P_GLOBAL, &Globals.syslog, NULL, NULL, 0}, - {"syslog only", P_BOOL, P_GLOBAL, &Globals.bSyslogOnly, NULL, NULL, 0}, - {"log file", P_STRING, P_GLOBAL, &Globals.szLogFile, NULL, NULL, 0}, + {"log level", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, FLAG_ADVANCED}, + {"debuglevel", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, FLAG_HIDE}, + {"syslog", P_INTEGER, P_GLOBAL, &Globals.syslog, NULL, NULL, FLAG_ADVANCED}, + {"syslog only", P_BOOL, P_GLOBAL, &Globals.bSyslogOnly, NULL, NULL, FLAG_ADVANCED}, + {"log file", P_STRING, P_GLOBAL, &Globals.szLogFile, NULL, NULL, FLAG_ADVANCED}, - {"max log size", P_INTEGER, P_GLOBAL, &Globals.max_log_size, NULL, NULL, 0}, - {"timestamp logs", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, 0}, + {"max log size", P_INTEGER, P_GLOBAL, &Globals.max_log_size, NULL, NULL, FLAG_ADVANCED}, + {"timestamp logs", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, FLAG_ADVANCED}, {"debug timestamp", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, 0}, {"debug hires timestamp", P_BOOL, P_GLOBAL, &Globals.bDebugHiresTimestamp, NULL, NULL, 0}, {"debug pid", P_BOOL, P_GLOBAL, &Globals.bDebugPid, NULL, NULL, 0}, @@ -782,8 +791,8 @@ static struct parm_struct parm_table[] = { {"Protocol Options", P_SEP, P_SEPARATOR}, - {"smb ports", P_STRING, P_GLOBAL, &Globals.smb_ports, NULL, NULL, 0}, - {"protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, 0}, + {"smb ports", P_STRING, P_GLOBAL, &Globals.smb_ports, NULL, NULL, FLAG_ADVANCED}, + {"protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, FLAG_ADVANCED}, {"large readwrite", P_BOOL, P_GLOBAL, &Globals.bLargeReadwrite, NULL, NULL, 0}, {"max protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, 0}, {"min protocol", P_ENUM, P_GLOBAL, &Globals.minprotocol, NULL, enum_protocol, 0}, @@ -791,22 +800,22 @@ static struct parm_struct parm_table[] = { {"read bmpx", P_BOOL, P_GLOBAL, &Globals.bReadbmpx, NULL, NULL, 0}, {"read raw", P_BOOL, P_GLOBAL, &Globals.bReadRaw, NULL, NULL, 0}, {"write raw", P_BOOL, P_GLOBAL, &Globals.bWriteRaw, NULL, NULL, 0}, - {"disable netbios", P_BOOL, P_GLOBAL, &Globals.bDisableNetbios, NULL, NULL, 0}, + {"disable netbios", P_BOOL, P_GLOBAL, &Globals.bDisableNetbios, NULL, NULL, FLAG_ADVANCED}, - {"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, 0}, - {"nt acl support", P_BOOL, P_LOCAL, &sDefault.bNTAclSupport, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE }, - {"nt status support", P_BOOL, P_GLOBAL, &Globals.bNTStatusSupport, NULL, NULL, 0}, + {"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, FLAG_ADVANCED}, + {"nt acl support", P_BOOL, P_LOCAL, &sDefault.bNTAclSupport, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE | FLAG_ADVANCED | FLAG_WIZARD}, + {"nt status support", P_BOOL, P_GLOBAL, &Globals.bNTStatusSupport, NULL, NULL, FLAG_ADVANCED}, {"announce version", P_STRING, P_GLOBAL, &Globals.szAnnounceVersion, NULL, NULL, 0}, {"announce as", P_ENUM, P_GLOBAL, &Globals.announce_as, NULL, enum_announce_as, 0}, - {"max mux", P_INTEGER, P_GLOBAL, &Globals.max_mux, NULL, NULL, 0}, - {"max xmit", P_INTEGER, P_GLOBAL, &Globals.max_xmit, NULL, NULL, 0}, + {"max mux", P_INTEGER, P_GLOBAL, &Globals.max_mux, NULL, NULL, FLAG_ADVANCED}, + {"max xmit", P_INTEGER, P_GLOBAL, &Globals.max_xmit, NULL, NULL, FLAG_ADVANCED}, - {"name resolve order", P_STRING, P_GLOBAL, &Globals.szNameResolveOrder, NULL, NULL, 0}, - {"max ttl", P_INTEGER, P_GLOBAL, &Globals.max_ttl, NULL, NULL, 0}, - {"max wins ttl", P_INTEGER, P_GLOBAL, &Globals.max_wins_ttl, NULL, NULL, 0}, - {"min wins ttl", P_INTEGER, P_GLOBAL, &Globals.min_wins_ttl, NULL, NULL, 0}, - {"time server", P_BOOL, P_GLOBAL, &Globals.bTimeServer, NULL, NULL, 0}, - {"unix extensions", P_BOOL, P_GLOBAL, &Globals.bUnixExtensions, NULL, NULL, 0}, + {"name resolve order", P_STRING, P_GLOBAL, &Globals.szNameResolveOrder, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, + {"max ttl", P_INTEGER, P_GLOBAL, &Globals.max_ttl, NULL, NULL, FLAG_ADVANCED}, + {"max wins ttl", P_INTEGER, P_GLOBAL, &Globals.max_wins_ttl, NULL, NULL, FLAG_ADVANCED}, + {"min wins ttl", P_INTEGER, P_GLOBAL, &Globals.min_wins_ttl, NULL, NULL, FLAG_ADVANCED}, + {"time server", P_BOOL, P_GLOBAL, &Globals.bTimeServer, NULL, NULL, FLAG_ADVANCED}, + {"unix extensions", P_BOOL, P_GLOBAL, &Globals.bUnixExtensions, NULL, NULL, FLAG_ADVANCED}, {"use spnego", P_BOOL, P_GLOBAL, &Globals.bUseSpnego, NULL, NULL, 0}, {"Tuning Options", P_SEP, P_SEPARATOR}, @@ -815,14 +824,14 @@ static struct parm_struct parm_table[] = { {"change notify timeout", P_INTEGER, P_GLOBAL, &Globals.change_notify_timeout, NULL, NULL, 0}, {"deadtime", P_INTEGER, P_GLOBAL, &Globals.deadtime, NULL, NULL, 0}, {"getwd cache", P_BOOL, P_GLOBAL, &use_getwd_cache, NULL, NULL, 0}, - {"keepalive", P_INTEGER, P_GLOBAL, &keepalive, NULL, NULL, 0}, + {"keepalive", P_INTEGER, P_GLOBAL, &keepalive, NULL, NULL, FLAG_ADVANCED}, {"lpq cache time", P_INTEGER, P_GLOBAL, &Globals.lpqcachetime, NULL, NULL, 0}, {"max smbd processes", P_INTEGER, P_GLOBAL, &Globals.iMaxSmbdProcesses, NULL, NULL, 0}, {"max connections", P_INTEGER, P_LOCAL, &sDefault.iMaxConnections, NULL, NULL, FLAG_SHARE}, {"paranoid server security", P_BOOL, P_GLOBAL, &Globals.paranoid_server_security, NULL, NULL, 0}, {"max disk size", P_INTEGER, P_GLOBAL, &Globals.maxdisksize, NULL, NULL, 0}, - {"max open files", P_INTEGER, P_GLOBAL, &Globals.max_open_files, NULL, NULL, 0}, + {"max open files", P_INTEGER, P_GLOBAL, &Globals.max_open_files, NULL, NULL, FLAG_ADVANCED}, {"min print space", P_INTEGER, P_LOCAL, &sDefault.iMinPrintSpace, NULL, NULL, FLAG_PRINT}, {"read size", P_INTEGER, P_GLOBAL, &Globals.ReadSize, NULL, NULL, 0}, @@ -832,10 +841,10 @@ static struct parm_struct parm_table[] = { {"strict sync", P_BOOL, P_LOCAL, &sDefault.bStrictSync, NULL, NULL, FLAG_SHARE}, {"sync always", P_BOOL, P_LOCAL, &sDefault.bSyncAlways, NULL, NULL, FLAG_SHARE}, {"use mmap", P_BOOL, P_GLOBAL, &Globals.bUseMmap, NULL, NULL, 0}, - {"hostname lookups", P_BOOL, P_GLOBAL, &Globals.bHostnameLookups, NULL, NULL, 0}, + {"hostname lookups", P_BOOL, P_GLOBAL, &Globals.bHostnameLookups, NULL, NULL, FLAG_ADVANCED}, {"write cache size", P_INTEGER, P_LOCAL, &sDefault.iWriteCacheSize, NULL, NULL, FLAG_SHARE}, - {"name cache timeout", P_INTEGER, P_GLOBAL, &Globals.name_cache_timeout, NULL, NULL, 0}, + {"name cache timeout", P_INTEGER, P_GLOBAL, &Globals.name_cache_timeout, NULL, NULL, FLAG_ADVANCED}, {"Printing Options", P_SEP, P_SEPARATOR}, @@ -845,7 +854,7 @@ static struct parm_struct parm_table[] = { {"printcap name", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_PRINT}, {"printcap", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, 0}, {"printable", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_PRINT}, - {"print ok", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, 0}, + {"print ok", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_HIDE}, {"postscript", P_BOOL, P_LOCAL, &sDefault.bPostscript, NULL, NULL, FLAG_PRINT | FLAG_DEPRECATED}, {"printing", P_ENUM, P_LOCAL, &sDefault.iPrinting, NULL, enum_printing, FLAG_PRINT | FLAG_GLOBAL}, {"print command", P_STRING, P_LOCAL, &sDefault.szPrintcommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL}, @@ -857,14 +866,14 @@ static struct parm_struct parm_table[] = { {"queuepause command", P_STRING, P_LOCAL, &sDefault.szQueuepausecommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL}, {"queueresume command", P_STRING, P_LOCAL, &sDefault.szQueueresumecommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL}, - {"enumports command", P_STRING, P_GLOBAL, &Globals.szEnumPortsCommand, NULL, NULL, 0}, - {"addprinter command", P_STRING, P_GLOBAL, &Globals.szAddPrinterCommand, NULL, NULL, 0}, - {"deleteprinter command", P_STRING, P_GLOBAL, &Globals.szDeletePrinterCommand, NULL, NULL, 0}, - {"show add printer wizard", P_BOOL, P_GLOBAL, &Globals.bMsAddPrinterWizard, NULL, NULL, 0}, - {"os2 driver map", P_STRING, P_GLOBAL, &Globals.szOs2DriverMap, NULL, NULL, 0}, + {"enumports command", P_STRING, P_GLOBAL, &Globals.szEnumPortsCommand, NULL, NULL, FLAG_ADVANCED}, + {"addprinter command", P_STRING, P_GLOBAL, &Globals.szAddPrinterCommand, NULL, NULL, FLAG_ADVANCED}, + {"deleteprinter command", P_STRING, P_GLOBAL, &Globals.szDeletePrinterCommand, NULL, NULL, FLAG_ADVANCED}, + {"show add printer wizard", P_BOOL, P_GLOBAL, &Globals.bMsAddPrinterWizard, NULL, NULL, FLAG_ADVANCED}, + {"os2 driver map", P_STRING, P_GLOBAL, &Globals.szOs2DriverMap, NULL, NULL, FLAG_ADVANCED}, {"printer name", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, FLAG_PRINT}, - {"printer", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, 0}, + {"printer", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, FLAG_HIDE}, {"use client driver", P_BOOL, P_LOCAL, &sDefault.bUseClientDriver, NULL, NULL, FLAG_PRINT}, {"default devmode", P_BOOL, P_LOCAL, &sDefault.bDefaultDevmode, NULL, NULL, FLAG_PRINT}, {"printer driver", P_STRING, P_LOCAL, &sDefault.szPrinterDriver, NULL, NULL, FLAG_PRINT | FLAG_DEPRECATED}, @@ -872,13 +881,13 @@ static struct parm_struct parm_table[] = { {"printer driver location", P_STRING, P_LOCAL, &sDefault.szPrinterDriverLocation, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL | FLAG_DEPRECATED}, {"Filename Handling", P_SEP, P_SEPARATOR}, - {"strip dot", P_BOOL, P_GLOBAL, &Globals.bStripDot, NULL, NULL, 0}, - {"mangling method", P_STRING, P_GLOBAL, &Globals.szManglingMethod, NULL, NULL, 0}, + {"strip dot", P_BOOL, P_GLOBAL, &Globals.bStripDot, NULL, NULL, FLAG_ADVANCED}, + {"mangling method", P_STRING, P_GLOBAL, &Globals.szManglingMethod, NULL, NULL, FLAG_ADVANCED}, - {"mangled stack", P_INTEGER, P_GLOBAL, &Globals.mangled_stack, NULL, NULL, 0}, + {"mangled stack", P_INTEGER, P_GLOBAL, &Globals.mangled_stack, NULL, NULL, FLAG_ADVANCED}, {"default case", P_ENUM, P_LOCAL, &sDefault.iDefaultCase, NULL, enum_case, FLAG_SHARE}, {"case sensitive", P_BOOL, P_LOCAL, &sDefault.bCaseSensitive, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, - {"casesignames", P_BOOL, P_LOCAL, &sDefault.bCaseSensitive, NULL, NULL, 0}, + {"casesignames", P_BOOL, P_LOCAL, &sDefault.bCaseSensitive, NULL, NULL, FLAG_HIDE}, {"preserve case", P_BOOL, P_LOCAL, &sDefault.bCasePreserve, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"short preserve case", P_BOOL, P_LOCAL, &sDefault.bShortCasePreserve, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"mangle case", P_BOOL, P_LOCAL, &sDefault.bCaseMangle, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, @@ -900,48 +909,48 @@ static struct parm_struct parm_table[] = { {"Domain Options", P_SEP, P_SEPARATOR}, - {"machine password timeout", P_INTEGER, P_GLOBAL, &Globals.machine_password_timeout, NULL, NULL, 0}, + {"machine password timeout", P_INTEGER, P_GLOBAL, &Globals.machine_password_timeout, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, {"Logon Options", P_SEP, P_SEPARATOR}, - {"add user script", P_STRING, P_GLOBAL, &Globals.szAddUserScript, NULL, NULL, 0}, - {"delete user script", P_STRING, P_GLOBAL, &Globals.szDelUserScript, NULL, NULL, 0}, - {"add group script", P_STRING, P_GLOBAL, &Globals.szAddGroupScript, NULL, NULL, 0}, - {"delete group script", P_STRING, P_GLOBAL, &Globals.szDelGroupScript, NULL, NULL, 0}, - {"add user to group script", P_STRING, P_GLOBAL, &Globals.szAddUserToGroupScript, NULL, NULL, 0}, - {"delete user from group script", P_STRING, P_GLOBAL, &Globals.szDelUserFromGroupScript, NULL, NULL, 0}, - {"add machine script", P_STRING, P_GLOBAL, &Globals.szAddMachineScript, NULL, NULL, 0}, - {"shutdown script", P_STRING, P_GLOBAL, &Globals.szShutdownScript, NULL, NULL, 0}, - {"abort shutdown script", P_STRING, P_GLOBAL, &Globals.szAbortShutdownScript, NULL, NULL, 0}, - - {"logon script", P_STRING, P_GLOBAL, &Globals.szLogonScript, NULL, NULL, 0}, - {"logon path", P_STRING, P_GLOBAL, &Globals.szLogonPath, NULL, NULL, 0}, - {"logon drive", P_STRING, P_GLOBAL, &Globals.szLogonDrive, NULL, NULL, 0}, - {"logon home", P_STRING, P_GLOBAL, &Globals.szLogonHome, NULL, NULL, 0}, - {"domain logons", P_BOOL, P_GLOBAL, &Globals.bDomainLogons, NULL, NULL, 0}, + {"add user script", P_STRING, P_GLOBAL, &Globals.szAddUserScript, NULL, NULL, FLAG_ADVANCED}, + {"delete user script", P_STRING, P_GLOBAL, &Globals.szDelUserScript, NULL, NULL, FLAG_ADVANCED}, + {"add group script", P_STRING, P_GLOBAL, &Globals.szAddGroupScript, NULL, NULL, FLAG_ADVANCED}, + {"delete group script", P_STRING, P_GLOBAL, &Globals.szDelGroupScript, NULL, NULL, FLAG_ADVANCED}, + {"add user to group script", P_STRING, P_GLOBAL, &Globals.szAddUserToGroupScript, NULL, NULL, FLAG_ADVANCED}, + {"delete user from group script", P_STRING, P_GLOBAL, &Globals.szDelUserFromGroupScript, NULL, NULL, FLAG_ADVANCED}, + {"add machine script", P_STRING, P_GLOBAL, &Globals.szAddMachineScript, NULL, NULL, FLAG_ADVANCED}, + {"shutdown script", P_STRING, P_GLOBAL, &Globals.szShutdownScript, NULL, NULL, FLAG_ADVANCED}, + {"abort shutdown script", P_STRING, P_GLOBAL, &Globals.szAbortShutdownScript, NULL, NULL, FLAG_ADVANCED}, + + {"logon script", P_STRING, P_GLOBAL, &Globals.szLogonScript, NULL, NULL, FLAG_ADVANCED}, + {"logon path", P_STRING, P_GLOBAL, &Globals.szLogonPath, NULL, NULL, FLAG_ADVANCED}, + {"logon drive", P_STRING, P_GLOBAL, &Globals.szLogonDrive, NULL, NULL, FLAG_ADVANCED}, + {"logon home", P_STRING, P_GLOBAL, &Globals.szLogonHome, NULL, NULL, FLAG_ADVANCED}, + {"domain logons", P_BOOL, P_GLOBAL, &Globals.bDomainLogons, NULL, NULL, FLAG_ADVANCED}, {"Browse Options", P_SEP, P_SEPARATOR}, - {"os level", P_INTEGER, P_GLOBAL, &Globals.os_level, NULL, NULL, FLAG_BASIC}, - {"lm announce", P_ENUM, P_GLOBAL, &Globals.lm_announce, NULL, enum_bool_auto, 0}, - {"lm interval", P_INTEGER, P_GLOBAL, &Globals.lm_interval, NULL, NULL, 0}, - {"preferred master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_BASIC}, + {"os level", P_INTEGER, P_GLOBAL, &Globals.os_level, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, + {"lm announce", P_ENUM, P_GLOBAL, &Globals.lm_announce, NULL, enum_bool_auto, FLAG_ADVANCED}, + {"lm interval", P_INTEGER, P_GLOBAL, &Globals.lm_interval, NULL, NULL, FLAG_ADVANCED}, + {"preferred master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED}, {"prefered master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_HIDE}, - {"local master", P_BOOL, P_GLOBAL, &Globals.bLocalMaster, NULL, NULL, FLAG_BASIC}, - {"domain master", P_ENUM, P_GLOBAL, &Globals.bDomainMaster, NULL, enum_bool_auto, FLAG_BASIC}, - {"browse list", P_BOOL, P_GLOBAL, &Globals.bBrowseList, NULL, NULL, 0}, - {"browseable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, - {"browsable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, 0}, + {"local master", P_BOOL, P_GLOBAL, &Globals.bLocalMaster, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, + {"domain master", P_ENUM, P_GLOBAL, &Globals.bDomainMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED}, + {"browse list", P_BOOL, P_GLOBAL, &Globals.bBrowseList, NULL, NULL, FLAG_ADVANCED}, + {"browseable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"browsable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_HIDE}, {"enhanced browsing", P_BOOL, P_GLOBAL, &Globals.enhanced_browsing, NULL, NULL}, {"WINS Options", P_SEP, P_SEPARATOR}, - {"dns proxy", P_BOOL, P_GLOBAL, &Globals.bDNSproxy, NULL, NULL, 0}, - {"wins proxy", P_BOOL, P_GLOBAL, &Globals.bWINSproxy, NULL, NULL, 0}, + {"dns proxy", P_BOOL, P_GLOBAL, &Globals.bDNSproxy, NULL, NULL, FLAG_ADVANCED}, + {"wins proxy", P_BOOL, P_GLOBAL, &Globals.bWINSproxy, NULL, NULL, FLAG_ADVANCED}, - {"wins server", P_LIST, P_GLOBAL, &Globals.szWINSservers, NULL, NULL, FLAG_BASIC}, - {"wins support", P_BOOL, P_GLOBAL, &Globals.bWINSsupport, NULL, NULL, FLAG_BASIC}, - {"wins hook", P_STRING, P_GLOBAL, &Globals.szWINSHook, NULL, NULL, 0}, - {"wins partners", P_STRING, P_GLOBAL, &Globals.szWINSPartners, NULL, NULL, 0}, + {"wins server", P_LIST, P_GLOBAL, &Globals.szWINSservers, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"wins support", P_BOOL, P_GLOBAL, &Globals.bWINSsupport, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"wins hook", P_STRING, P_GLOBAL, &Globals.szWINSHook, NULL, NULL, FLAG_ADVANCED}, + {"wins partners", P_STRING, P_GLOBAL, &Globals.szWINSPartners, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, {"Locking Options", P_SEP, P_SEPARATOR}, @@ -963,57 +972,57 @@ static struct parm_struct parm_table[] = { {"Ldap Options", P_SEP, P_SEPARATOR}, - {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, 0}, - {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, 0}, - {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, 0}, - {"ldap filter", P_STRING, P_GLOBAL, &Globals.szLdapFilter, NULL, NULL, 0}, - {"ldap admin dn", P_STRING, P_GLOBAL, &Globals.szLdapAdminDn, NULL, NULL, 0}, - {"ldap ssl", P_ENUM, P_GLOBAL, &Globals.ldap_ssl, NULL, enum_ldap_ssl, 0}, + {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, FLAG_ADVANCED}, + {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, FLAG_ADVANCED}, + {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, FLAG_ADVANCED}, + {"ldap filter", P_STRING, P_GLOBAL, &Globals.szLdapFilter, NULL, NULL, FLAG_ADVANCED}, + {"ldap admin dn", P_STRING, P_GLOBAL, &Globals.szLdapAdminDn, NULL, NULL, FLAG_ADVANCED}, + {"ldap ssl", P_ENUM, P_GLOBAL, &Globals.ldap_ssl, NULL, enum_ldap_ssl, FLAG_ADVANCED}, {"Miscellaneous Options", P_SEP, P_SEPARATOR}, - {"add share command", P_STRING, P_GLOBAL, &Globals.szAddShareCommand, NULL, NULL, 0}, - {"change share command", P_STRING, P_GLOBAL, &Globals.szChangeShareCommand, NULL, NULL, 0}, - {"delete share command", P_STRING, P_GLOBAL, &Globals.szDeleteShareCommand, NULL, NULL, 0}, + {"add share command", P_STRING, P_GLOBAL, &Globals.szAddShareCommand, NULL, NULL, FLAG_ADVANCED}, + {"change share command", P_STRING, P_GLOBAL, &Globals.szChangeShareCommand, NULL, NULL, FLAG_ADVANCED}, + {"delete share command", P_STRING, P_GLOBAL, &Globals.szDeleteShareCommand, NULL, NULL, FLAG_ADVANCED}, {"config file", P_STRING, P_GLOBAL, &Globals.szConfigFile, NULL, NULL, FLAG_HIDE}, - {"preload", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, 0}, - {"auto services", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, 0}, + {"preload", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED}, + {"auto services", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED}, {"lock dir", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, 0}, - {"lock directory", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, 0}, - {"pid directory", P_STRING, P_GLOBAL, &Globals.szPidDir, NULL, NULL, 0}, + {"lock directory", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, FLAG_ADVANCED}, + {"pid directory", P_STRING, P_GLOBAL, &Globals.szPidDir, NULL, NULL, FLAG_ADVANCED}, #ifdef WITH_UTMP - {"utmp directory", P_STRING, P_GLOBAL, &Globals.szUtmpDir, NULL, NULL, 0}, - {"wtmp directory", P_STRING, P_GLOBAL, &Globals.szWtmpDir, NULL, NULL, 0}, - {"utmp", P_BOOL, P_GLOBAL, &Globals.bUtmp, NULL, NULL, 0}, + {"utmp directory", P_STRING, P_GLOBAL, &Globals.szUtmpDir, NULL, NULL, FLAG_ADVANCED}, + {"wtmp directory", P_STRING, P_GLOBAL, &Globals.szWtmpDir, NULL, NULL, FLAG_ADVANCED}, + {"utmp", P_BOOL, P_GLOBAL, &Globals.bUtmp, NULL, NULL, FLAG_ADVANCED}, #endif - {"default service", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, 0}, + {"default service", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, FLAG_ADVANCED}, {"default", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, 0}, - {"message command", P_STRING, P_GLOBAL, &Globals.szMsgCommand, NULL, NULL, 0}, - {"dfree command", P_STRING, P_GLOBAL, &Globals.szDfree, NULL, NULL, 0}, - {"remote announce", P_STRING, P_GLOBAL, &Globals.szRemoteAnnounce, NULL, NULL, 0}, - {"remote browse sync", P_STRING, P_GLOBAL, &Globals.szRemoteBrowseSync, NULL, NULL, 0}, + {"message command", P_STRING, P_GLOBAL, &Globals.szMsgCommand, NULL, NULL, FLAG_ADVANCED}, + {"dfree command", P_STRING, P_GLOBAL, &Globals.szDfree, NULL, NULL, FLAG_ADVANCED}, + {"remote announce", P_STRING, P_GLOBAL, &Globals.szRemoteAnnounce, NULL, NULL, FLAG_ADVANCED}, + {"remote browse sync", P_STRING, P_GLOBAL, &Globals.szRemoteBrowseSync, NULL, NULL, FLAG_ADVANCED}, {"socket address", P_STRING, P_GLOBAL, &Globals.szSocketAddress, NULL, NULL, 0}, - {"homedir map", P_STRING, P_GLOBAL, &Globals.szNISHomeMapName, NULL, NULL, 0}, - {"time offset", P_INTEGER, P_GLOBAL, &extra_time_offset, NULL, NULL, 0}, - {"NIS homedir", P_BOOL, P_GLOBAL, &Globals.bNISHomeMap, NULL, NULL, 0}, + {"homedir map", P_STRING, P_GLOBAL, &Globals.szNISHomeMapName, NULL, NULL, FLAG_ADVANCED}, + {"time offset", P_INTEGER, P_GLOBAL, &extra_time_offset, NULL, NULL, FLAG_ADVANCED}, + {"NIS homedir", P_BOOL, P_GLOBAL, &Globals.bNISHomeMap, NULL, NULL, FLAG_ADVANCED}, {"-valid", P_BOOL, P_LOCAL, &sDefault.valid, NULL, NULL, FLAG_HIDE}, {"copy", P_STRING, P_LOCAL, &sDefault.szCopy, handle_copy, NULL, FLAG_HIDE}, {"include", P_STRING, P_LOCAL, &sDefault.szInclude, handle_include, NULL, FLAG_HIDE}, {"exec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, FLAG_SHARE | FLAG_PRINT}, - {"preexec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, 0}, + {"preexec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, FLAG_ADVANCED}, {"preexec close", P_BOOL, P_LOCAL, &sDefault.bPreexecClose, NULL, NULL, FLAG_SHARE}, {"postexec", P_STRING, P_LOCAL, &sDefault.szPostExec, NULL, NULL, FLAG_SHARE | FLAG_PRINT}, {"root preexec", P_STRING, P_LOCAL, &sDefault.szRootPreExec, NULL, NULL, FLAG_SHARE | FLAG_PRINT}, {"root preexec close", P_BOOL, P_LOCAL, &sDefault.bRootpreexecClose, NULL, NULL, FLAG_SHARE}, {"root postexec", P_STRING, P_LOCAL, &sDefault.szRootPostExec, NULL, NULL, FLAG_SHARE | FLAG_PRINT}, - {"available", P_BOOL, P_LOCAL, &sDefault.bAvailable, NULL, NULL, FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, + {"available", P_BOOL, P_LOCAL, &sDefault.bAvailable, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, {"volume", P_STRING, P_LOCAL, &sDefault.volume, NULL, NULL, FLAG_SHARE }, {"fstype", P_STRING, P_LOCAL, &sDefault.fstype, NULL, NULL, FLAG_SHARE}, {"set directory", P_BOOLREV, P_LOCAL, &sDefault.bNo_set_dir, NULL, NULL, FLAG_SHARE}, - {"source environment", P_STRING, P_GLOBAL, &Globals.szSourceEnv, handle_source_env, NULL, 0}, + {"source environment", P_STRING, P_GLOBAL, &Globals.szSourceEnv, handle_source_env, NULL, FLAG_ADVANCED}, {"wide links", P_BOOL, P_LOCAL, &sDefault.bWidelinks, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"follow symlinks", P_BOOL, P_LOCAL, &sDefault.bSymlinks, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"dont descend", P_STRING, P_LOCAL, &sDefault.szDontdescend, NULL, NULL, FLAG_SHARE}, @@ -1025,9 +1034,8 @@ static struct parm_struct parm_table[] = { {"dos filetime resolution", P_BOOL, P_LOCAL, &sDefault.bDosFiletimeResolution, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"fake directory create times", P_BOOL, P_LOCAL, &sDefault.bFakeDirCreateTimes, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, - {"panic action", P_STRING, P_GLOBAL, &Globals.szPanicAction, NULL, NULL, 0}, - {"hide local users", P_BOOL, P_GLOBAL, &Globals.bHideLocalUsers, NULL, - NULL, 0}, + {"panic action", P_STRING, P_GLOBAL, &Globals.szPanicAction, NULL, NULL, FLAG_ADVANCED}, + {"hide local users", P_BOOL, P_GLOBAL, &Globals.bHideLocalUsers, NULL, NULL, FLAG_ADVANCED}, {"VFS module options", P_SEP, P_SEPARATOR}, @@ -1037,19 +1045,19 @@ static struct parm_struct parm_table[] = { {"msdfs root", P_BOOL, P_LOCAL, &sDefault.bMSDfsRoot, NULL, NULL, FLAG_SHARE}, - {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, 0}, + {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_ADVANCED}, {"Winbind options", P_SEP, P_SEPARATOR}, - {"winbind uid", P_STRING, P_GLOBAL, &Globals.szWinbindUID, handle_winbind_uid, NULL, 0}, - {"winbind gid", P_STRING, P_GLOBAL, &Globals.szWinbindGID, handle_winbind_gid, NULL, 0}, - {"template homedir", P_STRING, P_GLOBAL, &Globals.szTemplateHomedir, NULL, NULL, 0}, - {"template shell", P_STRING, P_GLOBAL, &Globals.szTemplateShell, NULL, NULL, 0}, - {"winbind separator", P_STRING, P_GLOBAL, &Globals.szWinbindSeparator, NULL, NULL, 0}, - {"winbind cache time", P_INTEGER, P_GLOBAL, &Globals.winbind_cache_time, NULL, NULL, 0}, - {"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, NULL, 0}, - {"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, NULL, 0}, - {"winbind use default domain", P_BOOL, P_GLOBAL, &Globals.bWinbindUseDefaultDomain, NULL, NULL, 0}, + {"winbind uid", P_STRING, P_GLOBAL, &Globals.szWinbindUID, handle_winbind_uid, NULL, FLAG_ADVANCED}, + {"winbind gid", P_STRING, P_GLOBAL, &Globals.szWinbindGID, handle_winbind_gid, NULL, FLAG_ADVANCED}, + {"template homedir", P_STRING, P_GLOBAL, &Globals.szTemplateHomedir, NULL, NULL, FLAG_ADVANCED}, + {"template shell", P_STRING, P_GLOBAL, &Globals.szTemplateShell, NULL, NULL, FLAG_ADVANCED}, + {"winbind separator", P_STRING, P_GLOBAL, &Globals.szWinbindSeparator, NULL, NULL, FLAG_ADVANCED}, + {"winbind cache time", P_INTEGER, P_GLOBAL, &Globals.winbind_cache_time, NULL, NULL, FLAG_ADVANCED}, + {"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, NULL, FLAG_ADVANCED}, + {"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, NULL, FLAG_ADVANCED}, + {"winbind use default domain", P_BOOL, P_GLOBAL, &Globals.bWinbindUseDefaultDomain, NULL, NULL, FLAG_ADVANCED}, {NULL, P_BOOL, P_NONE, NULL, NULL, NULL, 0} }; -- cgit From 89842d94bb2b2bb386716c7db96cc0acda80b76e Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Mon, 16 Sep 2002 11:50:28 +0000 Subject: Committing changes before I lose them. Work still in progress. --- source/web/swat.c | 343 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 290 insertions(+), 53 deletions(-) diff --git a/source/web/swat.c b/source/web/swat.c index 80d3232d2bf..af6fa82ffe5 100644 --- a/source/web/swat.c +++ b/source/web/swat.c @@ -1,7 +1,9 @@ /* Unix SMB/CIFS implementation. Samba Web Administration Tool - Copyright (C) Andrew Tridgell 1997-1998 + Version 3.0.0 + Copyright (C) Andrew Tridgell 1997-2002 + Copyright (C) John H Terpstra 2002 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -297,7 +299,7 @@ static void show_parameter(int snum, struct parm_struct *parm) /**************************************************************************** display a set of parameters for a service ****************************************************************************/ -static void show_parameters(int snum, int allparameters, int advanced, int printers) +static void show_parameters(int snum, int allparameters, unsigned int parm_filter, int printers) { int i = 0; struct parm_struct *parm; @@ -316,7 +318,7 @@ static void show_parameters(int snum, int allparameters, int advanced, int print if (printers & !(parm->flags & FLAG_PRINT)) continue; if (!printers & !(parm->flags & FLAG_SHARE)) continue; } - if (!advanced) { + if (parm_filter == FLAG_BASIC) { if (!(parm->flags & FLAG_BASIC)) { void *ptr = parm->ptr; @@ -363,6 +365,12 @@ static void show_parameters(int snum, int allparameters, int advanced, int print } if (printers && !(parm->flags & FLAG_PRINT)) continue; } + if (parm_filter == FLAG_WIZARD) { + if (!((parm->flags & FLAG_WIZARD))) continue; + } + if (parm_filter == FLAG_ADVANCED) { + if (!((parm->flags & FLAG_ADVANCED))) continue; + } if (heading && heading != last_heading) { d_printf("%s\n", _(heading)); last_heading = heading; @@ -393,7 +401,7 @@ static void write_config(FILE *f, BOOL show_defaults) } /**************************************************************************** - save and reoad the smb.conf config file + save and reload the smb.conf config file ****************************************************************************/ static int save_reload(int snum) { @@ -497,6 +505,7 @@ static void show_main_buttons(void) image_link(_("Globals"), "globals", "images/globals.gif"); image_link(_("Shares"), "shares", "images/shares.gif"); image_link(_("Printers"), "printers", "images/printers.gif"); + image_link(_("Wizard"), "wizard", "images/wizard.gif"); } if (have_read_access) { image_link(_("Status"), "status", "images/status.gif"); @@ -507,6 +516,18 @@ static void show_main_buttons(void) d_printf("
    \n"); } +/**************************************************************************** + * Handle Display/Edit Mode CGI + ****************************************************************************/ +static void ViewModeBoxes(int mode) +{ + d_printf("

    %s\n", _("Configuration View: ")); + d_printf("Basic\n", (mode == 0) ? "checked" : ""); + d_printf("Advanced\n", (mode == 1) ? "checked" : ""); + d_printf("Developer\n", (mode == 2) ? "checked" : ""); + d_printf("


    \n"); +} + /**************************************************************************** display a welcome page ****************************************************************************/ @@ -541,25 +562,240 @@ static void viewconfig_page(void) d_printf("\n"); } +/**************************************************************************** + second screen of the wizard ... Fetch Configuration Parameters +****************************************************************************/ +static void wizard_params_page(void) +{ + unsigned int parm_filter = FLAG_WIZARD; + + /* Here we first set and commit all the parameters that were selected + in the previous screen. */ + + d_printf("

    Wizard Parameter Edit Page

    \n"); + + if (cgi_variable("Commit")) { + commit_parameters(GLOBALS_SNUM); + save_reload(0); + } + + d_printf("
    \n"); + + if (have_write_access) { + d_printf("\n"); + } + + d_printf("\n"); + d_printf("

    \n"); + + d_printf("\n"); + show_parameters(GLOBALS_SNUM, 1, parm_filter, 0); + d_printf("
    \n"); + d_printf("

    \n"); +} + +/**************************************************************************** + Utility to just rewrite the smb.conf file - effectively just cleans it up +****************************************************************************/ +static void rewritecfg_file(void) +{ + commit_parameters(GLOBALS_SNUM); + save_reload(0); + d_printf("

    Note: smb.conf %s

    \n", _("file has been read and rewritten")); +} + +/**************************************************************************** + wizard to create/modify the smb.conf file +****************************************************************************/ +static void wizard_page(void) +{ + /* Set some variables to collect data from smb.conf */ + int role = 0; + int winstype = 0; + int have_home = -1; + int HomeExpo = 0; + int SerType = 0; + + if (cgi_variable("Rewrite")) { + (void) rewritecfg_file(); + return; + } + + if (cgi_variable("GetWizardParams")){ + (void) wizard_params_page(); + return; + } + + if (cgi_variable("Commit")){ + SerType = atoi(cgi_variable("ServerType")); + winstype = atoi(cgi_variable("WINSType")); + have_home = lp_servicenumber(HOMES_NAME); + HomeExpo = atoi(cgi_variable("HomeExpo")); + + /* Plain text passwords are too badly broken - use encrypted passwords only */ + lp_do_parameter( GLOBALS_SNUM, "encrypt passwords", "Yes"); + + switch ( SerType ){ + case 0: + /* Stand-alone Server */ + lp_do_parameter( GLOBALS_SNUM, "security", "USER" ); + lp_do_parameter( GLOBALS_SNUM, "domain logons", "No" ); + break; + case 1: + /* Domain Member */ + lp_do_parameter( GLOBALS_SNUM, "security", "DOMAIN" ); + lp_do_parameter( GLOBALS_SNUM, "domain logons", "No" ); + break; + case 2: + /* Domain Controller */ + lp_do_parameter( GLOBALS_SNUM, "security", "USER" ); + lp_do_parameter( GLOBALS_SNUM, "domain logons", "Yes" ); + break; + } + switch ( winstype ) { + case 0: + lp_do_parameter( GLOBALS_SNUM, "wins support", "No" ); + lp_do_parameter( GLOBALS_SNUM, "wins server", "" ); + break; + case 1: + lp_do_parameter( GLOBALS_SNUM, "wins support", "Yes" ); + lp_do_parameter( GLOBALS_SNUM, "wins server", "" ); + break; + case 2: + lp_do_parameter( GLOBALS_SNUM, "wins support", "No" ); + lp_do_parameter( GLOBALS_SNUM, "wins server", cgi_variable("WINSAddr")); + break; + } + + /* Have to create Homes share? */ + if ((HomeExpo == 1) && (have_home == -1)) { + pstring unix_share; + + pstrcpy(unix_share,HOMES_NAME); + load_config(False); + lp_copy_service(GLOBALS_SNUM, unix_share); + iNumNonAutoPrintServices = lp_numservices(); + have_home = lp_servicenumber(HOMES_NAME); + lp_do_parameter( have_home, "read only", "No"); + lp_do_parameter( have_home, "valid users", "%S"); + lp_do_parameter( have_home, "browseable", "No"); + commit_parameters(have_home); + } + + /* Need to Delete Homes share? */ + if ((HomeExpo == 0) && (have_home != -1)) { + lp_remove_service(have_home); + have_home = -1; + } + + commit_parameters(GLOBALS_SNUM); + save_reload(0); + } + else + { + /* Now determine smb.conf WINS settings */ + if (lp_wins_support()) + winstype = 1; +/* if (strlen(lp_wins_server_list()) != 0 ) + * winstype = 2; + */ + + /* Do we have a homes share? */ + have_home = lp_servicenumber(HOMES_NAME); + } + if ((winstype == 2) && lp_wins_support()) + winstype = 3; + + role = lp_server_role(); + + /* Here we go ... */ + d_printf("

    Samba Configuration Wizard

    \n"); + d_printf("
    \n"); + + if (have_write_access) { + d_printf(_("The \"Rewrite smb.conf file\" button will clear the smb.conf file of all default values and of comments.\n")); + d_printf(_("The same will happen if you press the commit button.")); + d_printf("

    "); + d_printf("
    "); + d_printf("   ",_("Rewrite smb.conf file")); + d_printf("   ",_("Commit")); + d_printf("", _("Edit Parameter Values")); + d_printf("
    "); + } + + d_printf("
    "); + d_printf("
    "); + d_printf("\n", "Server Type: "); + d_printf("", (role == ROLE_STANDALONE) ? "checked" : ""); + d_printf("", (role == ROLE_DOMAIN_MEMBER) ? "checked" : ""); + d_printf("", (role == ROLE_DOMAIN_PDC) ? "checked" : ""); + d_printf(""); + if (role == ROLE_DOMAIN_BDC) { + d_printf(""); + } + d_printf("\n", "Configure WINS As: "); + d_printf("", (winstype == 0) ? "checked" : ""); + d_printf("", (winstype == 1) ? "checked" : ""); + d_printf("", (winstype == 2) ? "checked" : ""); + d_printf("",lp_wins_server_list()); + if (winstype == 3) { + d_printf(""); + d_printf(""); + } + d_printf(""); + d_printf("\n","Expose Home Directories: "); + d_printf("", (have_home == -1) ? "" : "checked "); + d_printf("", (have_home == -1 ) ? "checked" : ""); + d_printf(""); + + /* Enable this when we are ready .... + * d_printf("\n","Is Print Server: "); + * d_printf(""); + * d_printf(""); + * d_printf(""); + */ + + d_printf("
    %s Stand Alone  Domain Member  Domain Controller 
    Unusual Type in smb.conf - Please Select New Mode
    %s Not Used  Server for client use  Client of another WINS server 
    Remote WINS Server 
    Error: WINS Server Mode and WINS Support both set in smb.conf
    Please Select desired WINS mode above.
    %s Yes No
    %s Yes No
    "); + d_printf("
    "); + + d_printf(_("The above configuration options will set multiple parameters and will generally assist with rapid Samba deployment.\n")); + d_printf("
    \n"); +} + + /**************************************************************************** display a globals editing page ****************************************************************************/ static void globals_page(void) { - int advanced = 0; + unsigned int parm_filter = FLAG_BASIC; + int mode = 0; d_printf("

    %s

    \n", _("Global Variables")); - if (cgi_variable("Advanced") && !cgi_variable("Basic")) - advanced = 1; - if (cgi_variable("Commit")) { commit_parameters(GLOBALS_SNUM); save_reload(0); } - d_printf("
    \n"); - + if ( cgi_variable("ViewMode") ) + mode = atoi(cgi_variable("ViewMode")); + + d_printf("\n"); + + ViewModeBoxes( mode ); + switch ( mode ) { + case 0: + parm_filter = FLAG_BASIC; + break; + case 1: + parm_filter = FLAG_ADVANCED; + break; + case 2: + parm_filter = FLAG_DEVELOPER; + break; + } + d_printf("
    \n"); if (have_write_access) { d_printf("\n", _("Commit Changes")); @@ -567,22 +803,12 @@ static void globals_page(void) d_printf("\n", _("Reset Values")); - if (advanced == 0) { - d_printf("\n", _("Advanced View")); - } else { - d_printf("\n", _("Basic View")); - } + d_printf("

    \n"); - d_printf("\n"); - show_parameters(GLOBALS_SNUM, 1, advanced, 0); + show_parameters(GLOBALS_SNUM, 1, parm_filter, 0); d_printf("
    \n"); - - if (advanced) { - d_printf("\n"); - } - - d_printf("

    \n"); + d_printf("\n"); } /**************************************************************************** @@ -595,16 +821,14 @@ static void shares_page(void) char *s; int snum = -1; int i; - int advanced = 0; + int mode = 0; + unsigned int parm_filter = FLAG_BASIC; if (share) snum = lp_servicenumber(share); d_printf("

    %s

    \n", _("Share Parameters")); - if (cgi_variable("Advanced") && !cgi_variable("Basic")) - advanced = 1; - if (cgi_variable("Commit") && snum >= 0) { commit_parameters(snum); save_reload(0); @@ -628,7 +852,21 @@ static void shares_page(void) d_printf("
    \n"); d_printf("\n"); - d_printf("\n"); + if ( cgi_variable("ViewMode") ) + mode = atoi(cgi_variable("ViewMode")); + ViewModeBoxes( mode ); + switch ( mode ) { + case 0: + parm_filter = FLAG_BASIC; + break; + case 1: + parm_filter = FLAG_ADVANCED; + break; + case 2: + parm_filter = FLAG_DEVELOPER; + break; + } + d_printf("
    \n"); d_printf("\n", _("Choose Share")); d_printf("
    \n", _("Reset Values")); - if (advanced == 0) { - d_printf("\n", _("Advanced View")); - } else { - d_printf("\n", _("Basic View")); - } d_printf("

    \n"); } if (snum >= 0) { d_printf("\n"); - show_parameters(snum, 1, advanced, 0); + show_parameters(snum, 1, parm_filter, 0); d_printf("
    \n"); } - if (advanced) { - d_printf("\n"); - } - d_printf("\n"); } @@ -922,7 +1151,8 @@ static void printers_page(void) char *s; int snum=-1; int i; - int advanced = 0; + int mode = 0; + unsigned int parm_filter = FLAG_BASIC; if (share) snum = lp_servicenumber(share); @@ -935,9 +1165,6 @@ static void printers_page(void) d_printf("%s\n", _("Printcap Name")); d_printf(_("Attempting to delete these printers from SWAT will have no effect.\n")); - if (cgi_variable("Advanced") && !cgi_variable("Basic")) - advanced = 1; - if (cgi_variable("Commit") && snum >= 0) { commit_parameters(snum); if (snum >= iNumNonAutoPrintServices) @@ -965,6 +1192,20 @@ static void printers_page(void) d_printf("

    \n"); + if ( cgi_variable("ViewMode") ) + mode = atoi(cgi_variable("ViewMode")); + ViewModeBoxes( mode ); + switch ( mode ) { + case 0: + parm_filter = FLAG_BASIC; + break; + case 1: + parm_filter = FLAG_ADVANCED; + break; + case 2: + parm_filter = FLAG_DEVELOPER; + break; + } d_printf("\n"); d_printf("\n", _("Choose Printer")); d_printf("
    \n", _("Commit Changes")); } d_printf("\n", _("Reset Values")); - if (advanced == 0) { - d_printf("\n", _("Advanced View")); - } else { - d_printf("\n", _("Basic View")); - } d_printf("

    \n"); } if (snum >= 0) { d_printf("\n"); - show_parameters(snum, 1, advanced, 1); + show_parameters(snum, 1, parm_filter, 1); d_printf("
    \n"); } - - if (advanced) { - d_printf("\n"); - } - d_printf("\n"); } @@ -1109,6 +1340,12 @@ static void printers_page(void) viewconfig_page(); } else if (strcmp(page,"passwd")==0) { passwd_page(); + } else if (have_read_access && strcmp(page,"wizard")==0) { + wizard_page(); + } else if (have_read_access && strcmp(page,"wizard_params")==0) { + wizard_params_page(); + } else if (have_read_access && strcmp(page,"rewritecfg")==0) { + rewritecfg_file(); } else { welcome_page(); } -- cgit From bd9dbf5c79bf2bfecdf008fe93eba87ea9993a3c Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Mon, 16 Sep 2002 12:53:11 +0000 Subject: Update to add DEVELOPER option to more parameters. --- source/param/loadparm.c | 364 ++++++++++++++++++++++++------------------------ 1 file changed, 182 insertions(+), 182 deletions(-) diff --git a/source/param/loadparm.c b/source/param/loadparm.c index 6ec96083f2b..7607760cca6 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -678,58 +678,58 @@ static struct enum_list enum_map_to_guest[] = { static struct parm_struct parm_table[] = { {"Base Options", P_SEP, P_SEPARATOR}, - {"dos charset", P_STRING, P_GLOBAL, &Globals.dos_charset, NULL, NULL, FLAG_ADVANCED}, - {"unix charset", P_STRING, P_GLOBAL, &Globals.unix_charset, NULL, NULL, FLAG_ADVANCED}, - {"display charset", P_STRING, P_GLOBAL, &Globals.display_charset, NULL, NULL, FLAG_ADVANCED}, - {"comment", P_STRING, P_LOCAL, &sDefault.comment, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, - {"path", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"dos charset", P_STRING, P_GLOBAL, &Globals.dos_charset, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"unix charset", P_STRING, P_GLOBAL, &Globals.unix_charset, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"display charset", P_STRING, P_GLOBAL, &Globals.display_charset, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"comment", P_STRING, P_LOCAL, &sDefault.comment, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER}, + {"path", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER}, {"directory", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_HIDE}, - {"workgroup", P_USTRING, P_GLOBAL, &Globals.szWorkGroup, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"realm", P_USTRING, P_GLOBAL, &Globals.szRealm, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"ADS server", P_STRING, P_GLOBAL, &Globals.szADSserver, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"netbios name", P_UGSTRING, P_GLOBAL, global_myname, handle_netbios_name, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"netbios aliases", P_LIST, P_GLOBAL, &Globals.szNetbiosAliases, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, - {"netbios scope", P_UGSTRING, P_GLOBAL, global_scope, NULL, NULL, FLAG_ADVANCED}, - {"server string", P_STRING, P_GLOBAL, &Globals.szServerString, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED }, - {"interfaces", P_LIST, P_GLOBAL, &Globals.szInterfaces, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"bind interfaces only", P_BOOL, P_GLOBAL, &Globals.bBindInterfacesOnly, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, + {"workgroup", P_USTRING, P_GLOBAL, &Globals.szWorkGroup, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"realm", P_USTRING, P_GLOBAL, &Globals.szRealm, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"ADS server", P_STRING, P_GLOBAL, &Globals.szADSserver, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"netbios name", P_UGSTRING, P_GLOBAL, global_myname, handle_netbios_name, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"netbios aliases", P_LIST, P_GLOBAL, &Globals.szNetbiosAliases, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"netbios scope", P_UGSTRING, P_GLOBAL, global_scope, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"server string", P_STRING, P_GLOBAL, &Globals.szServerString, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, + {"interfaces", P_LIST, P_GLOBAL, &Globals.szInterfaces, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"bind interfaces only", P_BOOL, P_GLOBAL, &Globals.bBindInterfacesOnly, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, {"Security Options", P_SEP, P_SEPARATOR}, - {"security", P_ENUM, P_GLOBAL, &Globals.security, NULL, enum_security, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"auth methods", P_LIST, P_GLOBAL, &Globals.AuthMethods, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"encrypt passwords", P_BOOL, P_GLOBAL, &Globals.bEncryptPasswords, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"update encrypted", P_BOOL, P_GLOBAL, &Globals.bUpdateEncrypt, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, - {"allow trusted domains", P_BOOL, P_GLOBAL, &Globals.bAllowTrustedDomains, NULL, NULL, FLAG_ADVANCED}, - {"hosts equiv", P_STRING, P_GLOBAL, &Globals.szHostsEquiv, NULL, NULL, FLAG_ADVANCED}, - {"min passwd length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, FLAG_ADVANCED}, - {"min password length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, FLAG_ADVANCED}, - {"map to guest", P_ENUM, P_GLOBAL, &Globals.map_to_guest, NULL, enum_map_to_guest, FLAG_ADVANCED}, - {"null passwords", P_BOOL, P_GLOBAL, &Globals.bNullPasswords, NULL, NULL, FLAG_ADVANCED}, - {"obey pam restrictions", P_BOOL, P_GLOBAL, &Globals.bObeyPamRestrictions, NULL, NULL, FLAG_ADVANCED}, - {"password server", P_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, - {"smb passwd file", P_STRING, P_GLOBAL, &Globals.szSMBPasswdFile, NULL, NULL, FLAG_ADVANCED}, - {"private dir", P_STRING, P_GLOBAL, &Globals.szPrivateDir, NULL, NULL, FLAG_ADVANCED}, - {"passdb backend", P_LIST, P_GLOBAL, &Globals.szPassdbBackend, NULL, NULL, FLAG_ADVANCED}, - {"sam backend", P_LIST, P_GLOBAL, &Globals.szSamBackend, NULL, NULL, FLAG_ADVANCED}, - {"non unix account range", P_STRING, P_GLOBAL, &Globals.szNonUnixAccountRange, handle_non_unix_account_range, NULL, FLAG_ADVANCED}, - {"algorithmic rid base", P_INTEGER, P_GLOBAL, &Globals.bAlgorithmicRidBase, NULL, NULL, FLAG_ADVANCED}, - {"root directory", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED}, - {"root dir", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED}, - {"root", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_HIDE}, - {"guest account", P_STRING, P_GLOBAL, &Globals.szGuestaccount, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, + {"security", P_ENUM, P_GLOBAL, &Globals.security, NULL, enum_security, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"auth methods", P_LIST, P_GLOBAL, &Globals.AuthMethods, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"encrypt passwords", P_BOOL, P_GLOBAL, &Globals.bEncryptPasswords, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"update encrypted", P_BOOL, P_GLOBAL, &Globals.bUpdateEncrypt, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, + {"allow trusted domains", P_BOOL, P_GLOBAL, &Globals.bAllowTrustedDomains, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"hosts equiv", P_STRING, P_GLOBAL, &Globals.szHostsEquiv, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"min passwd length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"min password length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"map to guest", P_ENUM, P_GLOBAL, &Globals.map_to_guest, NULL, enum_map_to_guest, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"null passwords", P_BOOL, P_GLOBAL, &Globals.bNullPasswords, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"obey pam restrictions", P_BOOL, P_GLOBAL, &Globals.bObeyPamRestrictions, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"password server", P_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"smb passwd file", P_STRING, P_GLOBAL, &Globals.szSMBPasswdFile, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"private dir", P_STRING, P_GLOBAL, &Globals.szPrivateDir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"passdb backend", P_LIST, P_GLOBAL, &Globals.szPassdbBackend, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"sam backend", P_LIST, P_GLOBAL, &Globals.szSamBackend, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"non unix account range", P_STRING, P_GLOBAL, &Globals.szNonUnixAccountRange, handle_non_unix_account_range, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"algorithmic rid base", P_INTEGER, P_GLOBAL, &Globals.bAlgorithmicRidBase, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"root directory", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"root dir", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"root", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_HIDE | FLAG_DEVELOPER}, + {"guest account", P_STRING, P_GLOBAL, &Globals.szGuestaccount, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, - {"pam password change", P_BOOL, P_GLOBAL, &Globals.bPamPasswordChange, NULL, NULL, FLAG_ADVANCED}, - {"passwd program", P_STRING, P_GLOBAL, &Globals.szPasswdProgram, NULL, NULL, FLAG_ADVANCED}, - {"passwd chat", P_STRING, P_GLOBAL, &Globals.szPasswdChat, NULL, NULL, FLAG_ADVANCED}, - {"passwd chat debug", P_BOOL, P_GLOBAL, &Globals.bPasswdChatDebug, NULL, NULL, FLAG_ADVANCED}, - {"username map", P_STRING, P_GLOBAL, &Globals.szUsernameMap, NULL, NULL, FLAG_ADVANCED}, - {"password level", P_INTEGER, P_GLOBAL, &Globals.pwordlevel, NULL, NULL, FLAG_ADVANCED}, - {"username level", P_INTEGER, P_GLOBAL, &Globals.unamelevel, NULL, NULL, FLAG_ADVANCED}, - {"unix password sync", P_BOOL, P_GLOBAL, &Globals.bUnixPasswdSync, NULL, NULL, FLAG_ADVANCED}, - {"restrict anonymous", P_INTEGER, P_GLOBAL, &Globals.restrict_anonymous, NULL, NULL, FLAG_ADVANCED}, - {"lanman auth", P_BOOL, P_GLOBAL, &Globals.bLanmanAuth, NULL, NULL, FLAG_ADVANCED}, - {"ntlm auth", P_BOOL, P_GLOBAL, &Globals.bNTLMAuth, NULL, NULL, FLAG_ADVANCED}, + {"pam password change", P_BOOL, P_GLOBAL, &Globals.bPamPasswordChange, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"passwd program", P_STRING, P_GLOBAL, &Globals.szPasswdProgram, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"passwd chat", P_STRING, P_GLOBAL, &Globals.szPasswdChat, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"passwd chat debug", P_BOOL, P_GLOBAL, &Globals.bPasswdChatDebug, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"username map", P_STRING, P_GLOBAL, &Globals.szUsernameMap, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER | FLAG_DEVELOPER}, + {"password level", P_INTEGER, P_GLOBAL, &Globals.pwordlevel, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"username level", P_INTEGER, P_GLOBAL, &Globals.unamelevel, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"unix password sync", P_BOOL, P_GLOBAL, &Globals.bUnixPasswdSync, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"restrict anonymous", P_INTEGER, P_GLOBAL, &Globals.restrict_anonymous, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"lanman auth", P_BOOL, P_GLOBAL, &Globals.bLanmanAuth, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ntlm auth", P_BOOL, P_GLOBAL, &Globals.bNTLMAuth, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"username", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE}, {"user", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_HIDE}, @@ -743,7 +743,7 @@ static struct parm_struct parm_table[] = { {"printer admin", P_LIST, P_LOCAL, &sDefault.printer_admin, NULL, NULL, FLAG_GLOBAL | FLAG_PRINT}, {"force user", P_STRING, P_LOCAL, &sDefault.force_user, NULL, NULL, FLAG_SHARE}, {"force group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, FLAG_SHARE}, - {"group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, FLAG_ADVANCED}, + {"group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"read only", P_BOOL, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE}, {"write ok", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_HIDE}, @@ -765,94 +765,94 @@ static struct parm_struct parm_table[] = { {"guest only", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, FLAG_SHARE}, {"only guest", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, FLAG_HIDE}, - {"guest ok", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"guest ok", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER}, {"public", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_HIDE}, {"only user", P_BOOL, P_LOCAL, &sDefault.bOnlyUser, NULL, NULL, FLAG_SHARE}, - {"hosts allow", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"hosts allow", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER}, {"allow hosts", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_HIDE}, - {"hosts deny", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"hosts deny", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER}, {"deny hosts", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_HIDE}, {"Logging Options", P_SEP, P_SEPARATOR}, - {"log level", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, FLAG_ADVANCED}, + {"log level", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"debuglevel", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, FLAG_HIDE}, - {"syslog", P_INTEGER, P_GLOBAL, &Globals.syslog, NULL, NULL, FLAG_ADVANCED}, - {"syslog only", P_BOOL, P_GLOBAL, &Globals.bSyslogOnly, NULL, NULL, FLAG_ADVANCED}, - {"log file", P_STRING, P_GLOBAL, &Globals.szLogFile, NULL, NULL, FLAG_ADVANCED}, + {"syslog", P_INTEGER, P_GLOBAL, &Globals.syslog, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"syslog only", P_BOOL, P_GLOBAL, &Globals.bSyslogOnly, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"log file", P_STRING, P_GLOBAL, &Globals.szLogFile, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"max log size", P_INTEGER, P_GLOBAL, &Globals.max_log_size, NULL, NULL, FLAG_ADVANCED}, - {"timestamp logs", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, FLAG_ADVANCED}, - {"debug timestamp", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, 0}, - {"debug hires timestamp", P_BOOL, P_GLOBAL, &Globals.bDebugHiresTimestamp, NULL, NULL, 0}, - {"debug pid", P_BOOL, P_GLOBAL, &Globals.bDebugPid, NULL, NULL, 0}, - {"debug uid", P_BOOL, P_GLOBAL, &Globals.bDebugUid, NULL, NULL, 0}, + {"max log size", P_INTEGER, P_GLOBAL, &Globals.max_log_size, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"timestamp logs", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"debug timestamp", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, FLAG_DEVELOPER}, + {"debug hires timestamp", P_BOOL, P_GLOBAL, &Globals.bDebugHiresTimestamp, NULL, NULL, FLAG_DEVELOPER}, + {"debug pid", P_BOOL, P_GLOBAL, &Globals.bDebugPid, NULL, NULL, FLAG_DEVELOPER}, + {"debug uid", P_BOOL, P_GLOBAL, &Globals.bDebugUid, NULL, NULL, FLAG_DEVELOPER}, {"Protocol Options", P_SEP, P_SEPARATOR}, - {"smb ports", P_STRING, P_GLOBAL, &Globals.smb_ports, NULL, NULL, FLAG_ADVANCED}, - {"protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, FLAG_ADVANCED}, - {"large readwrite", P_BOOL, P_GLOBAL, &Globals.bLargeReadwrite, NULL, NULL, 0}, - {"max protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, 0}, - {"min protocol", P_ENUM, P_GLOBAL, &Globals.minprotocol, NULL, enum_protocol, 0}, - {"unicode", P_BOOL, P_GLOBAL, &Globals.bUnicode, NULL, NULL, 0}, - {"read bmpx", P_BOOL, P_GLOBAL, &Globals.bReadbmpx, NULL, NULL, 0}, - {"read raw", P_BOOL, P_GLOBAL, &Globals.bReadRaw, NULL, NULL, 0}, - {"write raw", P_BOOL, P_GLOBAL, &Globals.bWriteRaw, NULL, NULL, 0}, - {"disable netbios", P_BOOL, P_GLOBAL, &Globals.bDisableNetbios, NULL, NULL, FLAG_ADVANCED}, + {"smb ports", P_STRING, P_GLOBAL, &Globals.smb_ports, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"large readwrite", P_BOOL, P_GLOBAL, &Globals.bLargeReadwrite, NULL, NULL, FLAG_DEVELOPER}, + {"max protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, FLAG_DEVELOPER}, + {"min protocol", P_ENUM, P_GLOBAL, &Globals.minprotocol, NULL, enum_protocol, FLAG_DEVELOPER}, + {"unicode", P_BOOL, P_GLOBAL, &Globals.bUnicode, NULL, NULL, FLAG_DEVELOPER}, + {"read bmpx", P_BOOL, P_GLOBAL, &Globals.bReadbmpx, NULL, NULL, FLAG_DEVELOPER}, + {"read raw", P_BOOL, P_GLOBAL, &Globals.bReadRaw, NULL, NULL, FLAG_DEVELOPER}, + {"write raw", P_BOOL, P_GLOBAL, &Globals.bWriteRaw, NULL, NULL, FLAG_DEVELOPER}, + {"disable netbios", P_BOOL, P_GLOBAL, &Globals.bDisableNetbios, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, FLAG_ADVANCED}, + {"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"nt acl support", P_BOOL, P_LOCAL, &sDefault.bNTAclSupport, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE | FLAG_ADVANCED | FLAG_WIZARD}, - {"nt status support", P_BOOL, P_GLOBAL, &Globals.bNTStatusSupport, NULL, NULL, FLAG_ADVANCED}, - {"announce version", P_STRING, P_GLOBAL, &Globals.szAnnounceVersion, NULL, NULL, 0}, - {"announce as", P_ENUM, P_GLOBAL, &Globals.announce_as, NULL, enum_announce_as, 0}, - {"max mux", P_INTEGER, P_GLOBAL, &Globals.max_mux, NULL, NULL, FLAG_ADVANCED}, - {"max xmit", P_INTEGER, P_GLOBAL, &Globals.max_xmit, NULL, NULL, FLAG_ADVANCED}, + {"nt status support", P_BOOL, P_GLOBAL, &Globals.bNTStatusSupport, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"announce version", P_STRING, P_GLOBAL, &Globals.szAnnounceVersion, NULL, NULL, FLAG_DEVELOPER}, + {"announce as", P_ENUM, P_GLOBAL, &Globals.announce_as, NULL, enum_announce_as, FLAG_DEVELOPER}, + {"max mux", P_INTEGER, P_GLOBAL, &Globals.max_mux, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"max xmit", P_INTEGER, P_GLOBAL, &Globals.max_xmit, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"name resolve order", P_STRING, P_GLOBAL, &Globals.szNameResolveOrder, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, - {"max ttl", P_INTEGER, P_GLOBAL, &Globals.max_ttl, NULL, NULL, FLAG_ADVANCED}, - {"max wins ttl", P_INTEGER, P_GLOBAL, &Globals.max_wins_ttl, NULL, NULL, FLAG_ADVANCED}, - {"min wins ttl", P_INTEGER, P_GLOBAL, &Globals.min_wins_ttl, NULL, NULL, FLAG_ADVANCED}, - {"time server", P_BOOL, P_GLOBAL, &Globals.bTimeServer, NULL, NULL, FLAG_ADVANCED}, - {"unix extensions", P_BOOL, P_GLOBAL, &Globals.bUnixExtensions, NULL, NULL, FLAG_ADVANCED}, - {"use spnego", P_BOOL, P_GLOBAL, &Globals.bUseSpnego, NULL, NULL, 0}, + {"name resolve order", P_STRING, P_GLOBAL, &Globals.szNameResolveOrder, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"max ttl", P_INTEGER, P_GLOBAL, &Globals.max_ttl, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"max wins ttl", P_INTEGER, P_GLOBAL, &Globals.max_wins_ttl, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"min wins ttl", P_INTEGER, P_GLOBAL, &Globals.min_wins_ttl, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"time server", P_BOOL, P_GLOBAL, &Globals.bTimeServer, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"unix extensions", P_BOOL, P_GLOBAL, &Globals.bUnixExtensions, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"use spnego", P_BOOL, P_GLOBAL, &Globals.bUseSpnego, NULL, NULL, FLAG_DEVELOPER}, {"Tuning Options", P_SEP, P_SEPARATOR}, {"block size", P_INTEGER, P_LOCAL, &sDefault.iBlock_size, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, - {"change notify timeout", P_INTEGER, P_GLOBAL, &Globals.change_notify_timeout, NULL, NULL, 0}, - {"deadtime", P_INTEGER, P_GLOBAL, &Globals.deadtime, NULL, NULL, 0}, - {"getwd cache", P_BOOL, P_GLOBAL, &use_getwd_cache, NULL, NULL, 0}, - {"keepalive", P_INTEGER, P_GLOBAL, &keepalive, NULL, NULL, FLAG_ADVANCED}, + {"change notify timeout", P_INTEGER, P_GLOBAL, &Globals.change_notify_timeout, NULL, NULL, FLAG_DEVELOPER}, + {"deadtime", P_INTEGER, P_GLOBAL, &Globals.deadtime, NULL, NULL, FLAG_DEVELOPER}, + {"getwd cache", P_BOOL, P_GLOBAL, &use_getwd_cache, NULL, NULL, FLAG_DEVELOPER}, + {"keepalive", P_INTEGER, P_GLOBAL, &keepalive, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"lpq cache time", P_INTEGER, P_GLOBAL, &Globals.lpqcachetime, NULL, NULL, 0}, - {"max smbd processes", P_INTEGER, P_GLOBAL, &Globals.iMaxSmbdProcesses, NULL, NULL, 0}, + {"lpq cache time", P_INTEGER, P_GLOBAL, &Globals.lpqcachetime, NULL, NULL, FLAG_DEVELOPER}, + {"max smbd processes", P_INTEGER, P_GLOBAL, &Globals.iMaxSmbdProcesses, NULL, NULL, FLAG_DEVELOPER}, {"max connections", P_INTEGER, P_LOCAL, &sDefault.iMaxConnections, NULL, NULL, FLAG_SHARE}, - {"paranoid server security", P_BOOL, P_GLOBAL, &Globals.paranoid_server_security, NULL, NULL, 0}, - {"max disk size", P_INTEGER, P_GLOBAL, &Globals.maxdisksize, NULL, NULL, 0}, - {"max open files", P_INTEGER, P_GLOBAL, &Globals.max_open_files, NULL, NULL, FLAG_ADVANCED}, + {"paranoid server security", P_BOOL, P_GLOBAL, &Globals.paranoid_server_security, NULL, NULL, FLAG_DEVELOPER}, + {"max disk size", P_INTEGER, P_GLOBAL, &Globals.maxdisksize, NULL, NULL, FLAG_DEVELOPER}, + {"max open files", P_INTEGER, P_GLOBAL, &Globals.max_open_files, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"min print space", P_INTEGER, P_LOCAL, &sDefault.iMinPrintSpace, NULL, NULL, FLAG_PRINT}, - {"read size", P_INTEGER, P_GLOBAL, &Globals.ReadSize, NULL, NULL, 0}, + {"read size", P_INTEGER, P_GLOBAL, &Globals.ReadSize, NULL, NULL, FLAG_DEVELOPER}, - {"socket options", P_GSTRING, P_GLOBAL, user_socket_options, NULL, NULL, 0}, - {"stat cache size", P_INTEGER, P_GLOBAL, &Globals.stat_cache_size, NULL, NULL, 0}, + {"socket options", P_GSTRING, P_GLOBAL, user_socket_options, NULL, NULL, FLAG_DEVELOPER}, + {"stat cache size", P_INTEGER, P_GLOBAL, &Globals.stat_cache_size, NULL, NULL, FLAG_DEVELOPER}, {"strict allocate", P_BOOL, P_LOCAL, &sDefault.bStrictAllocate, NULL, NULL, FLAG_SHARE}, {"strict sync", P_BOOL, P_LOCAL, &sDefault.bStrictSync, NULL, NULL, FLAG_SHARE}, {"sync always", P_BOOL, P_LOCAL, &sDefault.bSyncAlways, NULL, NULL, FLAG_SHARE}, - {"use mmap", P_BOOL, P_GLOBAL, &Globals.bUseMmap, NULL, NULL, 0}, - {"hostname lookups", P_BOOL, P_GLOBAL, &Globals.bHostnameLookups, NULL, NULL, FLAG_ADVANCED}, + {"use mmap", P_BOOL, P_GLOBAL, &Globals.bUseMmap, NULL, NULL, FLAG_DEVELOPER}, + {"hostname lookups", P_BOOL, P_GLOBAL, &Globals.bHostnameLookups, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"write cache size", P_INTEGER, P_LOCAL, &sDefault.iWriteCacheSize, NULL, NULL, FLAG_SHARE}, - {"name cache timeout", P_INTEGER, P_GLOBAL, &Globals.name_cache_timeout, NULL, NULL, FLAG_ADVANCED}, + {"name cache timeout", P_INTEGER, P_GLOBAL, &Globals.name_cache_timeout, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"Printing Options", P_SEP, P_SEPARATOR}, {"total print jobs", P_INTEGER, P_GLOBAL, &Globals.iTotalPrintJobs, NULL, NULL, FLAG_PRINT}, {"max print jobs", P_INTEGER, P_LOCAL, &sDefault.iMaxPrintJobs, NULL, NULL, FLAG_PRINT}, {"load printers", P_BOOL, P_GLOBAL, &Globals.bLoadPrinters, NULL, NULL, FLAG_PRINT}, - {"printcap name", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_PRINT}, - {"printcap", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, 0}, + {"printcap name", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_PRINT | FLAG_DEVELOPER}, + {"printcap", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_HIDE}, {"printable", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_PRINT}, {"print ok", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_HIDE}, {"postscript", P_BOOL, P_LOCAL, &sDefault.bPostscript, NULL, NULL, FLAG_PRINT | FLAG_DEPRECATED}, @@ -866,11 +866,11 @@ static struct parm_struct parm_table[] = { {"queuepause command", P_STRING, P_LOCAL, &sDefault.szQueuepausecommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL}, {"queueresume command", P_STRING, P_LOCAL, &sDefault.szQueueresumecommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL}, - {"enumports command", P_STRING, P_GLOBAL, &Globals.szEnumPortsCommand, NULL, NULL, FLAG_ADVANCED}, - {"addprinter command", P_STRING, P_GLOBAL, &Globals.szAddPrinterCommand, NULL, NULL, FLAG_ADVANCED}, - {"deleteprinter command", P_STRING, P_GLOBAL, &Globals.szDeletePrinterCommand, NULL, NULL, FLAG_ADVANCED}, - {"show add printer wizard", P_BOOL, P_GLOBAL, &Globals.bMsAddPrinterWizard, NULL, NULL, FLAG_ADVANCED}, - {"os2 driver map", P_STRING, P_GLOBAL, &Globals.szOs2DriverMap, NULL, NULL, FLAG_ADVANCED}, + {"enumports command", P_STRING, P_GLOBAL, &Globals.szEnumPortsCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"addprinter command", P_STRING, P_GLOBAL, &Globals.szAddPrinterCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"deleteprinter command", P_STRING, P_GLOBAL, &Globals.szDeletePrinterCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"show add printer wizard", P_BOOL, P_GLOBAL, &Globals.bMsAddPrinterWizard, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"os2 driver map", P_STRING, P_GLOBAL, &Globals.szOs2DriverMap, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"printer name", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, FLAG_PRINT}, {"printer", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, FLAG_HIDE}, @@ -881,10 +881,10 @@ static struct parm_struct parm_table[] = { {"printer driver location", P_STRING, P_LOCAL, &sDefault.szPrinterDriverLocation, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL | FLAG_DEPRECATED}, {"Filename Handling", P_SEP, P_SEPARATOR}, - {"strip dot", P_BOOL, P_GLOBAL, &Globals.bStripDot, NULL, NULL, FLAG_ADVANCED}, - {"mangling method", P_STRING, P_GLOBAL, &Globals.szManglingMethod, NULL, NULL, FLAG_ADVANCED}, + {"strip dot", P_BOOL, P_GLOBAL, &Globals.bStripDot, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"mangling method", P_STRING, P_GLOBAL, &Globals.szManglingMethod, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"mangled stack", P_INTEGER, P_GLOBAL, &Globals.mangled_stack, NULL, NULL, FLAG_ADVANCED}, + {"mangled stack", P_INTEGER, P_GLOBAL, &Globals.mangled_stack, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"default case", P_ENUM, P_LOCAL, &sDefault.iDefaultCase, NULL, enum_case, FLAG_SHARE}, {"case sensitive", P_BOOL, P_LOCAL, &sDefault.bCaseSensitive, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"casesignames", P_BOOL, P_LOCAL, &sDefault.bCaseSensitive, NULL, NULL, FLAG_HIDE}, @@ -905,52 +905,52 @@ static struct parm_struct parm_table[] = { {"map archive", P_BOOL, P_LOCAL, &sDefault.bMap_archive, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"mangled names", P_BOOL, P_LOCAL, &sDefault.bMangledNames, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"mangled map", P_STRING, P_LOCAL, &sDefault.szMangledMap, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, - {"stat cache", P_BOOL, P_GLOBAL, &Globals.bStatCache, NULL, NULL, 0}, + {"stat cache", P_BOOL, P_GLOBAL, &Globals.bStatCache, NULL, NULL, FLAG_DEVELOPER}, {"Domain Options", P_SEP, P_SEPARATOR}, - {"machine password timeout", P_INTEGER, P_GLOBAL, &Globals.machine_password_timeout, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, + {"machine password timeout", P_INTEGER, P_GLOBAL, &Globals.machine_password_timeout, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, {"Logon Options", P_SEP, P_SEPARATOR}, - {"add user script", P_STRING, P_GLOBAL, &Globals.szAddUserScript, NULL, NULL, FLAG_ADVANCED}, - {"delete user script", P_STRING, P_GLOBAL, &Globals.szDelUserScript, NULL, NULL, FLAG_ADVANCED}, - {"add group script", P_STRING, P_GLOBAL, &Globals.szAddGroupScript, NULL, NULL, FLAG_ADVANCED}, - {"delete group script", P_STRING, P_GLOBAL, &Globals.szDelGroupScript, NULL, NULL, FLAG_ADVANCED}, - {"add user to group script", P_STRING, P_GLOBAL, &Globals.szAddUserToGroupScript, NULL, NULL, FLAG_ADVANCED}, - {"delete user from group script", P_STRING, P_GLOBAL, &Globals.szDelUserFromGroupScript, NULL, NULL, FLAG_ADVANCED}, - {"add machine script", P_STRING, P_GLOBAL, &Globals.szAddMachineScript, NULL, NULL, FLAG_ADVANCED}, - {"shutdown script", P_STRING, P_GLOBAL, &Globals.szShutdownScript, NULL, NULL, FLAG_ADVANCED}, - {"abort shutdown script", P_STRING, P_GLOBAL, &Globals.szAbortShutdownScript, NULL, NULL, FLAG_ADVANCED}, - - {"logon script", P_STRING, P_GLOBAL, &Globals.szLogonScript, NULL, NULL, FLAG_ADVANCED}, - {"logon path", P_STRING, P_GLOBAL, &Globals.szLogonPath, NULL, NULL, FLAG_ADVANCED}, - {"logon drive", P_STRING, P_GLOBAL, &Globals.szLogonDrive, NULL, NULL, FLAG_ADVANCED}, - {"logon home", P_STRING, P_GLOBAL, &Globals.szLogonHome, NULL, NULL, FLAG_ADVANCED}, - {"domain logons", P_BOOL, P_GLOBAL, &Globals.bDomainLogons, NULL, NULL, FLAG_ADVANCED}, + {"add user script", P_STRING, P_GLOBAL, &Globals.szAddUserScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"delete user script", P_STRING, P_GLOBAL, &Globals.szDelUserScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"add group script", P_STRING, P_GLOBAL, &Globals.szAddGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"delete group script", P_STRING, P_GLOBAL, &Globals.szDelGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"add user to group script", P_STRING, P_GLOBAL, &Globals.szAddUserToGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"delete user from group script", P_STRING, P_GLOBAL, &Globals.szDelUserFromGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"add machine script", P_STRING, P_GLOBAL, &Globals.szAddMachineScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"shutdown script", P_STRING, P_GLOBAL, &Globals.szShutdownScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"abort shutdown script", P_STRING, P_GLOBAL, &Globals.szAbortShutdownScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + + {"logon script", P_STRING, P_GLOBAL, &Globals.szLogonScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"logon path", P_STRING, P_GLOBAL, &Globals.szLogonPath, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"logon drive", P_STRING, P_GLOBAL, &Globals.szLogonDrive, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"logon home", P_STRING, P_GLOBAL, &Globals.szLogonHome, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"domain logons", P_BOOL, P_GLOBAL, &Globals.bDomainLogons, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"Browse Options", P_SEP, P_SEPARATOR}, - {"os level", P_INTEGER, P_GLOBAL, &Globals.os_level, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, - {"lm announce", P_ENUM, P_GLOBAL, &Globals.lm_announce, NULL, enum_bool_auto, FLAG_ADVANCED}, - {"lm interval", P_INTEGER, P_GLOBAL, &Globals.lm_interval, NULL, NULL, FLAG_ADVANCED}, - {"preferred master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED}, + {"os level", P_INTEGER, P_GLOBAL, &Globals.os_level, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, + {"lm announce", P_ENUM, P_GLOBAL, &Globals.lm_announce, NULL, enum_bool_auto, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"lm interval", P_INTEGER, P_GLOBAL, &Globals.lm_interval, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"preferred master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, {"prefered master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_HIDE}, - {"local master", P_BOOL, P_GLOBAL, &Globals.bLocalMaster, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, - {"domain master", P_ENUM, P_GLOBAL, &Globals.bDomainMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED}, - {"browse list", P_BOOL, P_GLOBAL, &Globals.bBrowseList, NULL, NULL, FLAG_ADVANCED}, - {"browseable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"local master", P_BOOL, P_GLOBAL, &Globals.bLocalMaster, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, + {"domain master", P_ENUM, P_GLOBAL, &Globals.bDomainMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, + {"browse list", P_BOOL, P_GLOBAL, &Globals.bBrowseList, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"browseable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER}, {"browsable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_HIDE}, - {"enhanced browsing", P_BOOL, P_GLOBAL, &Globals.enhanced_browsing, NULL, NULL}, + {"enhanced browsing", P_BOOL, P_GLOBAL, &Globals.enhanced_browsing, NULL, NULL, FLAG_DEVELOPER | FLAG_ADVANCED}, {"WINS Options", P_SEP, P_SEPARATOR}, - {"dns proxy", P_BOOL, P_GLOBAL, &Globals.bDNSproxy, NULL, NULL, FLAG_ADVANCED}, - {"wins proxy", P_BOOL, P_GLOBAL, &Globals.bWINSproxy, NULL, NULL, FLAG_ADVANCED}, + {"dns proxy", P_BOOL, P_GLOBAL, &Globals.bDNSproxy, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"wins proxy", P_BOOL, P_GLOBAL, &Globals.bWINSproxy, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"wins server", P_LIST, P_GLOBAL, &Globals.szWINSservers, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"wins support", P_BOOL, P_GLOBAL, &Globals.bWINSsupport, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"wins hook", P_STRING, P_GLOBAL, &Globals.szWINSHook, NULL, NULL, FLAG_ADVANCED}, - {"wins partners", P_STRING, P_GLOBAL, &Globals.szWINSPartners, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, + {"wins server", P_LIST, P_GLOBAL, &Globals.szWINSservers, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"wins support", P_BOOL, P_GLOBAL, &Globals.bWINSsupport, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"wins hook", P_STRING, P_GLOBAL, &Globals.szWINSHook, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"wins partners", P_STRING, P_GLOBAL, &Globals.szWINSPartners, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, {"Locking Options", P_SEP, P_SEPARATOR}, @@ -972,46 +972,46 @@ static struct parm_struct parm_table[] = { {"Ldap Options", P_SEP, P_SEPARATOR}, - {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, FLAG_ADVANCED}, - {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, FLAG_ADVANCED}, - {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, FLAG_ADVANCED}, - {"ldap filter", P_STRING, P_GLOBAL, &Globals.szLdapFilter, NULL, NULL, FLAG_ADVANCED}, - {"ldap admin dn", P_STRING, P_GLOBAL, &Globals.szLdapAdminDn, NULL, NULL, FLAG_ADVANCED}, - {"ldap ssl", P_ENUM, P_GLOBAL, &Globals.ldap_ssl, NULL, enum_ldap_ssl, FLAG_ADVANCED}, + {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap filter", P_STRING, P_GLOBAL, &Globals.szLdapFilter, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap admin dn", P_STRING, P_GLOBAL, &Globals.szLdapAdminDn, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap ssl", P_ENUM, P_GLOBAL, &Globals.ldap_ssl, NULL, enum_ldap_ssl, FLAG_ADVANCED | FLAG_DEVELOPER}, {"Miscellaneous Options", P_SEP, P_SEPARATOR}, - {"add share command", P_STRING, P_GLOBAL, &Globals.szAddShareCommand, NULL, NULL, FLAG_ADVANCED}, - {"change share command", P_STRING, P_GLOBAL, &Globals.szChangeShareCommand, NULL, NULL, FLAG_ADVANCED}, - {"delete share command", P_STRING, P_GLOBAL, &Globals.szDeleteShareCommand, NULL, NULL, FLAG_ADVANCED}, + {"add share command", P_STRING, P_GLOBAL, &Globals.szAddShareCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"change share command", P_STRING, P_GLOBAL, &Globals.szChangeShareCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"delete share command", P_STRING, P_GLOBAL, &Globals.szDeleteShareCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"config file", P_STRING, P_GLOBAL, &Globals.szConfigFile, NULL, NULL, FLAG_HIDE}, - {"preload", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED}, - {"auto services", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED}, - {"lock dir", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, 0}, - {"lock directory", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, FLAG_ADVANCED}, - {"pid directory", P_STRING, P_GLOBAL, &Globals.szPidDir, NULL, NULL, FLAG_ADVANCED}, + {"preload", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"auto services", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"lock dir", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, FLAG_HIDE}, + {"lock directory", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"pid directory", P_STRING, P_GLOBAL, &Globals.szPidDir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, #ifdef WITH_UTMP - {"utmp directory", P_STRING, P_GLOBAL, &Globals.szUtmpDir, NULL, NULL, FLAG_ADVANCED}, - {"wtmp directory", P_STRING, P_GLOBAL, &Globals.szWtmpDir, NULL, NULL, FLAG_ADVANCED}, - {"utmp", P_BOOL, P_GLOBAL, &Globals.bUtmp, NULL, NULL, FLAG_ADVANCED}, + {"utmp directory", P_STRING, P_GLOBAL, &Globals.szUtmpDir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"wtmp directory", P_STRING, P_GLOBAL, &Globals.szWtmpDir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"utmp", P_BOOL, P_GLOBAL, &Globals.bUtmp, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, #endif - {"default service", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, FLAG_ADVANCED}, - {"default", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, 0}, - {"message command", P_STRING, P_GLOBAL, &Globals.szMsgCommand, NULL, NULL, FLAG_ADVANCED}, - {"dfree command", P_STRING, P_GLOBAL, &Globals.szDfree, NULL, NULL, FLAG_ADVANCED}, - {"remote announce", P_STRING, P_GLOBAL, &Globals.szRemoteAnnounce, NULL, NULL, FLAG_ADVANCED}, - {"remote browse sync", P_STRING, P_GLOBAL, &Globals.szRemoteBrowseSync, NULL, NULL, FLAG_ADVANCED}, - {"socket address", P_STRING, P_GLOBAL, &Globals.szSocketAddress, NULL, NULL, 0}, - {"homedir map", P_STRING, P_GLOBAL, &Globals.szNISHomeMapName, NULL, NULL, FLAG_ADVANCED}, - {"time offset", P_INTEGER, P_GLOBAL, &extra_time_offset, NULL, NULL, FLAG_ADVANCED}, - {"NIS homedir", P_BOOL, P_GLOBAL, &Globals.bNISHomeMap, NULL, NULL, FLAG_ADVANCED}, + {"default service", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"default", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, FLAG_DEVELOPER}, + {"message command", P_STRING, P_GLOBAL, &Globals.szMsgCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"dfree command", P_STRING, P_GLOBAL, &Globals.szDfree, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"remote announce", P_STRING, P_GLOBAL, &Globals.szRemoteAnnounce, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"remote browse sync", P_STRING, P_GLOBAL, &Globals.szRemoteBrowseSync, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"socket address", P_STRING, P_GLOBAL, &Globals.szSocketAddress, NULL, NULL, FLAG_DEVELOPER}, + {"homedir map", P_STRING, P_GLOBAL, &Globals.szNISHomeMapName, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"time offset", P_INTEGER, P_GLOBAL, &extra_time_offset, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"NIS homedir", P_BOOL, P_GLOBAL, &Globals.bNISHomeMap, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"-valid", P_BOOL, P_LOCAL, &sDefault.valid, NULL, NULL, FLAG_HIDE}, {"copy", P_STRING, P_LOCAL, &sDefault.szCopy, handle_copy, NULL, FLAG_HIDE}, {"include", P_STRING, P_LOCAL, &sDefault.szInclude, handle_include, NULL, FLAG_HIDE}, {"exec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, FLAG_SHARE | FLAG_PRINT}, - {"preexec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, FLAG_ADVANCED}, + {"preexec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"preexec close", P_BOOL, P_LOCAL, &sDefault.bPreexecClose, NULL, NULL, FLAG_SHARE}, {"postexec", P_STRING, P_LOCAL, &sDefault.szPostExec, NULL, NULL, FLAG_SHARE | FLAG_PRINT}, @@ -1022,7 +1022,7 @@ static struct parm_struct parm_table[] = { {"volume", P_STRING, P_LOCAL, &sDefault.volume, NULL, NULL, FLAG_SHARE }, {"fstype", P_STRING, P_LOCAL, &sDefault.fstype, NULL, NULL, FLAG_SHARE}, {"set directory", P_BOOLREV, P_LOCAL, &sDefault.bNo_set_dir, NULL, NULL, FLAG_SHARE}, - {"source environment", P_STRING, P_GLOBAL, &Globals.szSourceEnv, handle_source_env, NULL, FLAG_ADVANCED}, + {"source environment", P_STRING, P_GLOBAL, &Globals.szSourceEnv, handle_source_env, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"wide links", P_BOOL, P_LOCAL, &sDefault.bWidelinks, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"follow symlinks", P_BOOL, P_LOCAL, &sDefault.bSymlinks, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"dont descend", P_STRING, P_LOCAL, &sDefault.szDontdescend, NULL, NULL, FLAG_SHARE}, @@ -1034,8 +1034,8 @@ static struct parm_struct parm_table[] = { {"dos filetime resolution", P_BOOL, P_LOCAL, &sDefault.bDosFiletimeResolution, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"fake directory create times", P_BOOL, P_LOCAL, &sDefault.bFakeDirCreateTimes, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, - {"panic action", P_STRING, P_GLOBAL, &Globals.szPanicAction, NULL, NULL, FLAG_ADVANCED}, - {"hide local users", P_BOOL, P_GLOBAL, &Globals.bHideLocalUsers, NULL, NULL, FLAG_ADVANCED}, + {"panic action", P_STRING, P_GLOBAL, &Globals.szPanicAction, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"hide local users", P_BOOL, P_GLOBAL, &Globals.bHideLocalUsers, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"VFS module options", P_SEP, P_SEPARATOR}, @@ -1045,19 +1045,19 @@ static struct parm_struct parm_table[] = { {"msdfs root", P_BOOL, P_LOCAL, &sDefault.bMSDfsRoot, NULL, NULL, FLAG_SHARE}, - {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_ADVANCED}, + {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"Winbind options", P_SEP, P_SEPARATOR}, - {"winbind uid", P_STRING, P_GLOBAL, &Globals.szWinbindUID, handle_winbind_uid, NULL, FLAG_ADVANCED}, - {"winbind gid", P_STRING, P_GLOBAL, &Globals.szWinbindGID, handle_winbind_gid, NULL, FLAG_ADVANCED}, - {"template homedir", P_STRING, P_GLOBAL, &Globals.szTemplateHomedir, NULL, NULL, FLAG_ADVANCED}, - {"template shell", P_STRING, P_GLOBAL, &Globals.szTemplateShell, NULL, NULL, FLAG_ADVANCED}, - {"winbind separator", P_STRING, P_GLOBAL, &Globals.szWinbindSeparator, NULL, NULL, FLAG_ADVANCED}, - {"winbind cache time", P_INTEGER, P_GLOBAL, &Globals.winbind_cache_time, NULL, NULL, FLAG_ADVANCED}, - {"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, NULL, FLAG_ADVANCED}, - {"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, NULL, FLAG_ADVANCED}, - {"winbind use default domain", P_BOOL, P_GLOBAL, &Globals.bWinbindUseDefaultDomain, NULL, NULL, FLAG_ADVANCED}, + {"winbind uid", P_STRING, P_GLOBAL, &Globals.szWinbindUID, handle_winbind_uid, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"winbind gid", P_STRING, P_GLOBAL, &Globals.szWinbindGID, handle_winbind_gid, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"template homedir", P_STRING, P_GLOBAL, &Globals.szTemplateHomedir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"template shell", P_STRING, P_GLOBAL, &Globals.szTemplateShell, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"winbind separator", P_STRING, P_GLOBAL, &Globals.szWinbindSeparator, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"winbind cache time", P_INTEGER, P_GLOBAL, &Globals.winbind_cache_time, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"winbind use default domain", P_BOOL, P_GLOBAL, &Globals.bWinbindUseDefaultDomain, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {NULL, P_BOOL, P_NONE, NULL, NULL, NULL, 0} }; -- cgit From c6ece53ac2a7a6115ca1160cf02247d7cc0bbb95 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 00:45:39 +0000 Subject: Added autoconf detection for sendfile for Linux. lib/sendfile.c code still needs more work. Don't add --with-sendfile-support yet... Jeremy. --- source/acconfig.h | 4 + source/configure | 1801 ++++++++++++++++++++++++-------------------- source/configure.in | 72 ++ source/include/config.h.in | 4 + 4 files changed, 1062 insertions(+), 819 deletions(-) diff --git a/source/acconfig.h b/source/acconfig.h index 11db920e263..141c59bfed0 100644 --- a/source/acconfig.h +++ b/source/acconfig.h @@ -222,3 +222,7 @@ #endif #undef LDAP_SET_REBIND_PROC_ARGS +#undef HAVE_SENDFILE +#undef HAVE_SENDFILE64 +#undef LINUX_SENDFILE_API +#undef LINUX_BROKEN_SENDFILE_API diff --git a/source/configure b/source/configure index f2b63b75d7f..8e4b1d2961d 100755 --- a/source/configure +++ b/source/configure @@ -80,6 +80,8 @@ ac_help="$ac_help --with-spinlocks Use spin locks instead of fcntl locks (default=no) " ac_help="$ac_help --with-acl-support Include ACL support (default=no)" +ac_help="$ac_help + --with-sendfile-support Include sendfile support (default=no)" ac_help="$ac_help --with-winbind Build winbind (default, if supported by OS)" ac_help="$ac_help @@ -818,7 +820,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:822: checking for $ac_word" >&5 +echo "configure:824: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -848,7 +850,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:852: checking for $ac_word" >&5 +echo "configure:854: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -899,7 +901,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:903: checking for $ac_word" >&5 +echo "configure:905: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -931,7 +933,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:935: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:937: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -942,12 +944,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 946 "configure" +#line 948 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -973,12 +975,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:977: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:979: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:982: checking whether we are using GNU C" >&5 +echo "configure:984: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -987,7 +989,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:993: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1006,7 +1008,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1010: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1012: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1068,7 +1070,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1072: checking for a BSD compatible install" >&5 +echo "configure:1074: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1120,12 +1122,12 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -for ac_prog in mawk gawk nawk awk +for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1129: checking for $ac_word" >&5 +echo "configure:1131: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1157,7 +1159,7 @@ done LD=ld echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1161: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1163: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1173,7 +1175,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1177: checking for POSIXized ISC" >&5 +echo "configure:1179: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1196,10 +1198,10 @@ fi if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:1200: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:1202: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:1203: checking whether cc understands -c and -o together" >&5 +echo "configure:1205: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -1211,16 +1213,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:1215: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1216: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:1217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1218: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:1223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1224: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:1225: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1226: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -1254,20 +1256,20 @@ fi echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6 -echo "configure:1258: checking that the C compiler understands volatile" >&5 +echo "configure:1260: checking that the C compiler understands volatile" >&5 if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { volatile int i = 0 ; return 0; } EOF -if { (eval echo configure:1271: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_volatile=yes else @@ -1316,7 +1318,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1320: checking host system type" >&5 +echo "configure:1322: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1337,7 +1339,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1341: checking target system type" >&5 +echo "configure:1343: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1355,7 +1357,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1359: checking build system type" >&5 +echo "configure:1361: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1389,7 +1391,7 @@ esac echo $ac_n "checking config.cache system type""... $ac_c" 1>&6 -echo "configure:1393: checking config.cache system type" >&5 +echo "configure:1395: checking config.cache system type" >&5 if { test x"${ac_cv_host_system_type+set}" = x"set" && test x"$ac_cv_host_system_type" != x"$host"; } || { test x"${ac_cv_build_system_type+set}" = x"set" && @@ -1417,7 +1419,7 @@ case "$host_os" in *hpux*) echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6 -echo "configure:1421: checking whether ${CC-cc} accepts -Ae" >&5 +echo "configure:1423: checking whether ${CC-cc} accepts -Ae" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1578,14 +1580,14 @@ EOF *sysv4*) if test $host = mips-sni-sysv4 ; then echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1582: checking for LFS support" >&5 +echo "configure:1584: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then SINIX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1597,7 +1599,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then SINIX_LFS_SUPPORT=yes else @@ -1628,14 +1630,14 @@ EOF # *linux*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1632: checking for LFS support" >&5 +echo "configure:1634: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then LINUX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1673,7 +1675,7 @@ main() { } EOF -if { (eval echo configure:1677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then LINUX_LFS_SUPPORT=yes else @@ -1706,14 +1708,14 @@ EOF *hurd*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1710: checking for LFS support" >&5 +echo "configure:1712: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then GLIBC_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1725,7 +1727,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then GLIBC_LFS_SUPPORT=yes else @@ -1755,21 +1757,21 @@ EOF esac echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1759: checking for inline" >&5 +echo "configure:1761: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1775: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -1795,7 +1797,7 @@ EOF esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1799: checking how to run the C preprocessor" >&5 +echo "configure:1801: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1810,13 +1812,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1820: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1822: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1827,13 +1829,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1839: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1844,13 +1846,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1854: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1856: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1875,12 +1877,12 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1879: checking for ANSI C header files" >&5 +echo "configure:1881: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1888,7 +1890,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1892: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1894: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1905,7 +1907,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1923,7 +1925,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1944,7 +1946,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1955,7 +1957,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1983,12 +1985,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1987: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1989: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -1996,7 +1998,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:2000: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2002: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2021,7 +2023,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2025: checking for opendir in -ldir" >&5 +echo "configure:2027: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2029,7 +2031,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2046: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2062,7 +2064,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2066: checking for opendir in -lx" >&5 +echo "configure:2068: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2070,7 +2072,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2104,12 +2106,12 @@ fi fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2108: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2110: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2118,7 +2120,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2124: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2139,12 +2141,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2143: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2145: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2160,7 +2162,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2166: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2184,17 +2186,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2188: checking for $ac_hdr" >&5 +echo "configure:2190: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2198: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2200: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2224,17 +2226,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2228: checking for $ac_hdr" >&5 +echo "configure:2230: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2238: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2240: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2264,17 +2266,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2268: checking for $ac_hdr" >&5 +echo "configure:2270: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2278: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2280: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2304,17 +2306,17 @@ for ac_hdr in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2308: checking for $ac_hdr" >&5 +echo "configure:2310: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2318: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2320: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2344,17 +2346,17 @@ for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h std do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2348: checking for $ac_hdr" >&5 +echo "configure:2350: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2358: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2360: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2384,17 +2386,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2388: checking for $ac_hdr" >&5 +echo "configure:2390: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2398: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2400: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2424,17 +2426,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2428: checking for $ac_hdr" >&5 +echo "configure:2430: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2438: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2440: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2464,17 +2466,17 @@ for ac_hdr in security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2468: checking for $ac_hdr" >&5 +echo "configure:2470: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2478: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2480: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2504,17 +2506,17 @@ for ac_hdr in sys/syslog.h syslog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2508: checking for $ac_hdr" >&5 +echo "configure:2510: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2518: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2520: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2548,14 +2550,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2559: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2561: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2577,17 +2579,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2581: checking for $ac_hdr" >&5 +echo "configure:2583: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2591: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2593: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2617,17 +2619,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2621: checking for $ac_hdr" >&5 +echo "configure:2623: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2631: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2633: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2657,17 +2659,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2661: checking for $ac_hdr" >&5 +echo "configure:2663: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2671: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2673: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2697,17 +2699,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2701: checking for $ac_hdr" >&5 +echo "configure:2703: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2711: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2713: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2737,17 +2739,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2741: checking for $ac_hdr" >&5 +echo "configure:2743: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2753: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2779,17 +2781,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2783: checking for $ac_hdr" >&5 +echo "configure:2785: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2795: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2821,17 +2823,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2825: checking for $ac_hdr" >&5 +echo "configure:2827: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2863,17 +2865,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2867: checking for $ac_hdr" >&5 +echo "configure:2869: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2877: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2879: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2901,7 +2903,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2905: checking size of int" >&5 +echo "configure:2907: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2909,19 +2911,18 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(int)); - exit(0); + return(0); } EOF -if { (eval echo configure:2925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2941,7 +2942,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2945: checking size of long" >&5 +echo "configure:2946: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2949,16 +2950,15 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(long)); - exit(0); + return(0); } EOF if { (eval echo configure:2965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -2992,16 +2992,15 @@ else #line 2993 "configure" #include "confdefs.h" #include -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(short)); - exit(0); + return(0); } EOF -if { (eval echo configure:3005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3022,12 +3021,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3026: checking for working const" >&5 +echo "configure:3025: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3079: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3097,21 +3096,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3101: checking for inline" >&5 +echo "configure:3100: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3114: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3137,14 +3136,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3141: checking whether byte ordering is bigendian" >&5 +echo "configure:3140: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3155,11 +3154,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3159: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3170,7 +3169,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3174: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3173: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3190,7 +3189,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3227,14 +3226,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3231: checking whether char is unsigned" >&5 +echo "configure:3230: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3291,12 +3290,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3295: checking return type of signal handlers" >&5 +echo "configure:3294: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3313,7 +3312,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3317: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3316: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3332,12 +3331,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3336: checking for uid_t in sys/types.h" >&5 +echo "configure:3335: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3366,12 +3365,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3370: checking for mode_t" >&5 +echo "configure:3369: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3399,12 +3398,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3403: checking for off_t" >&5 +echo "configure:3402: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3432,12 +3431,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3436: checking for size_t" >&5 +echo "configure:3435: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3465,12 +3464,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3469: checking for pid_t" >&5 +echo "configure:3468: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3498,12 +3497,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3502: checking for st_rdev in struct stat" >&5 +echo "configure:3501: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3511,7 +3510,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3514: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3532,12 +3531,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3536: checking for d_off in dirent" >&5 +echo "configure:3535: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3547,7 +3546,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3551: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3550: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3568,12 +3567,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3572: checking for ino_t" >&5 +echo "configure:3571: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3601,12 +3600,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3605: checking for loff_t" >&5 +echo "configure:3604: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3634,12 +3633,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3638: checking for offset_t" >&5 +echo "configure:3637: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3667,12 +3666,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3671: checking for ssize_t" >&5 +echo "configure:3670: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3700,12 +3699,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3704: checking for wchar_t" >&5 +echo "configure:3703: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3747,7 +3746,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3751: checking for $ac_word" >&5 +echo "configure:3750: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3796,12 +3795,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3800: checking for $ac_func" >&5 +echo "configure:3799: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3827: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3850,7 +3849,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3854: checking for dlopen in -ldl" >&5 +echo "configure:3853: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3858,7 +3857,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3899,13 +3898,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3903: checking for immediate structures" >&5 +echo "configure:3902: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3923,7 +3922,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3946,13 +3945,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3950: checking for unix domain sockets" >&5 +echo "configure:3949: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3967,7 +3966,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3971: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3970: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3989,13 +3988,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3993: checking for socklen_t type" >&5 +echo "configure:3992: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4008,7 +4007,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4012: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4011: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4029,13 +4028,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4033: checking for sig_atomic_t type" >&5 +echo "configure:4032: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4048,7 +4047,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4052: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4071,20 +4070,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4075: checking for errno declaration" >&5 +echo "configure:4074: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4087: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4106,20 +4105,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4110: checking for setresuid declaration" >&5 +echo "configure:4109: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4123: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4141,20 +4140,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4145: checking for setresgid declaration" >&5 +echo "configure:4144: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4176,20 +4175,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4180: checking for asprintf declaration" >&5 +echo "configure:4179: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4211,20 +4210,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4215: checking for vasprintf declaration" >&5 +echo "configure:4214: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4227: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4246,20 +4245,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4250: checking for vsnprintf declaration" >&5 +echo "configure:4249: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4263: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4262: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4281,20 +4280,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4285: checking for snprintf declaration" >&5 +echo "configure:4284: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4298: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4297: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4318,7 +4317,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4322: checking for real setresuid" >&5 +echo "configure:4321: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4327,12 +4326,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4357,7 +4356,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4361: checking for real setresgid" >&5 +echo "configure:4360: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4366,13 +4365,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4395,7 +4394,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4399: checking for 8-bit clean memcmp" >&5 +echo "configure:4398: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4403,7 +4402,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4436,12 +4435,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4440: checking for $ac_func" >&5 +echo "configure:4439: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4490,7 +4489,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4494: checking for crypt in -lcrypt" >&5 +echo "configure:4493: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4498,7 +4497,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4542,7 +4541,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4546: checking whether to use readline" >&5 +echo "configure:4545: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4554,17 +4553,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4558: checking for $ac_hdr" >&5 +echo "configure:4557: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4568: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4567: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4594,17 +4593,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4598: checking for $ac_hdr" >&5 +echo "configure:4597: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4608: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4635,17 +4634,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4639: checking for $ac_hdr" >&5 +echo "configure:4638: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4649: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4648: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4668,7 +4667,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4672: checking for tgetent in -l${termlib}" >&5 +echo "configure:4671: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4676,7 +4675,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4709,7 +4708,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4713: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4712: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4717,7 +4716,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4779,17 +4778,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4783: checking for $ac_hdr" >&5 +echo "configure:4782: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4792: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4819,17 +4818,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4823: checking for $ac_hdr" >&5 +echo "configure:4822: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4860,17 +4859,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4864: checking for $ac_hdr" >&5 +echo "configure:4863: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4873: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4893,7 +4892,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4897: checking for tgetent in -l${termlib}" >&5 +echo "configure:4896: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4901,7 +4900,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4934,7 +4933,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4938: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4937: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4942,7 +4941,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4956: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5003,7 +5002,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5007: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5006: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5011,7 +5010,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5055,12 +5054,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5059: checking for $ac_func" >&5 +echo "configure:5058: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5086: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5111,7 +5110,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5115: checking for printf in -lnsl_s" >&5 +echo "configure:5114: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5119,7 +5118,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5161,7 +5160,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5165: checking for printf in -lnsl" >&5 +echo "configure:5164: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5169,7 +5168,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5211,7 +5210,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5215: checking for connect in -lsocket" >&5 +echo "configure:5214: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5219,7 +5218,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5261,7 +5260,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5265: checking for connect in -linet" >&5 +echo "configure:5264: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5269,7 +5268,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5324,12 +5323,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5328: checking for $ac_func" >&5 +echo "configure:5327: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5378,7 +5377,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5382: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5381: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5386,7 +5385,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5427,12 +5426,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5431: checking for $ac_func" >&5 +echo "configure:5430: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5488,12 +5487,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5492: checking for $ac_func" >&5 +echo "configure:5491: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5543,12 +5542,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5547: checking for $ac_func" >&5 +echo "configure:5546: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5598,12 +5597,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5602: checking for $ac_func" >&5 +echo "configure:5601: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5653,12 +5652,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5657: checking for $ac_func" >&5 +echo "configure:5656: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5708,12 +5707,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5712: checking for $ac_func" >&5 +echo "configure:5711: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5763,12 +5762,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5767: checking for $ac_func" >&5 +echo "configure:5766: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5794: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5818,12 +5817,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5822: checking for $ac_func" >&5 +echo "configure:5821: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5849: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5873,12 +5872,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5877: checking for $ac_func" >&5 +echo "configure:5876: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5904: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5928,12 +5927,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5932: checking for $ac_func" >&5 +echo "configure:5931: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5983,12 +5982,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5987: checking for $ac_func" >&5 +echo "configure:5986: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6039,12 +6038,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6043: checking for $ac_func" >&5 +echo "configure:6042: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6070: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6096,12 +6095,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6100: checking for $ac_func" >&5 +echo "configure:6099: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6152,12 +6151,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6156: checking for $ac_func" >&5 +echo "configure:6155: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6207,12 +6206,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6211: checking for $ac_func" >&5 +echo "configure:6210: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6262,12 +6261,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6266: checking for $ac_func" >&5 +echo "configure:6265: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6317,12 +6316,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6321: checking for $ac_func" >&5 +echo "configure:6320: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6372,12 +6371,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6376: checking for $ac_func" >&5 +echo "configure:6375: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6427,12 +6426,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6431: checking for $ac_func" >&5 +echo "configure:6430: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6482,12 +6481,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6486: checking for $ac_func" >&5 +echo "configure:6485: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6537,12 +6536,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6541: checking for $ac_func" >&5 +echo "configure:6540: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6592,12 +6591,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6596: checking for $ac_func" >&5 +echo "configure:6595: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6623: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6647,12 +6646,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6651: checking for $ac_func" >&5 +echo "configure:6650: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6702,12 +6701,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6706: checking for $ac_func" >&5 +echo "configure:6705: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6757,12 +6756,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6761: checking for $ac_func" >&5 +echo "configure:6760: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6788: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6812,12 +6811,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6816: checking for $ac_func" >&5 +echo "configure:6815: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6843: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6867,12 +6866,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6871: checking for $ac_func" >&5 +echo "configure:6870: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6898: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6926,9 +6925,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6930: checking for stat64 in " >&5 +echo "configure:6929: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6943: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6959,9 +6958,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6963: checking for lstat64 in " >&5 +echo "configure:6962: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6992,9 +6991,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6996: checking for fstat64 in " >&5 +echo "configure:6995: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7026,7 +7025,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7030: checking for dn_expand in -lresolv" >&5 +echo "configure:7029: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7034,7 +7033,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7083,12 +7082,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7087: checking for $ac_func" >&5 +echo "configure:7086: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7136,7 +7135,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7140: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7139: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7144,7 +7143,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7158: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7185,12 +7184,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7189: checking for $ac_func" >&5 +echo "configure:7188: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7244,12 +7243,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7248: checking for $ac_func" >&5 +echo "configure:7247: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7297,7 +7296,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7301: checking for putprpwnam in -lsec" >&5 +echo "configure:7300: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7305,7 +7304,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7346,12 +7345,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7350: checking for $ac_func" >&5 +echo "configure:7349: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7406,12 +7405,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7410: checking for $ac_func" >&5 +echo "configure:7409: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7459,7 +7458,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7463: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7462: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7467,7 +7466,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7508,12 +7507,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7512: checking for $ac_func" >&5 +echo "configure:7511: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7539: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7567,12 +7566,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7571: checking for $ac_func" >&5 +echo "configure:7570: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7598: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7620,7 +7619,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7624: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7623: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7628,7 +7627,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7642: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7669,12 +7668,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7673: checking for $ac_func" >&5 +echo "configure:7672: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7700: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7730,12 +7729,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7734: checking for $ac_func" >&5 +echo "configure:7733: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7783,7 +7782,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7787: checking for getspnam in -lgen" >&5 +echo "configure:7786: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7791,7 +7790,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7832,12 +7831,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7836: checking for $ac_func" >&5 +echo "configure:7835: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7892,12 +7891,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7896: checking for $ac_func" >&5 +echo "configure:7895: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7945,7 +7944,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7949: checking for getspnam in -lsecurity" >&5 +echo "configure:7948: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7953,7 +7952,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7994,12 +7993,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7998: checking for $ac_func" >&5 +echo "configure:7997: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8053,12 +8052,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8057: checking for $ac_func" >&5 +echo "configure:8056: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8084: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8106,7 +8105,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8110: checking for getspnam in -lsec" >&5 +echo "configure:8109: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8114,7 +8113,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8155,12 +8154,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8159: checking for $ac_func" >&5 +echo "configure:8158: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8215,12 +8214,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8219: checking for $ac_func" >&5 +echo "configure:8218: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8268,7 +8267,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8272: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8271: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8276,7 +8275,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8317,12 +8316,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8321: checking for $ac_func" >&5 +echo "configure:8320: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8376,12 +8375,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8380: checking for $ac_func" >&5 +echo "configure:8379: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8429,7 +8428,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8433: checking for bigcrypt in -lsec" >&5 +echo "configure:8432: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8437,7 +8436,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8478,12 +8477,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8482: checking for $ac_func" >&5 +echo "configure:8481: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8538,12 +8537,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8542: checking for $ac_func" >&5 +echo "configure:8541: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8591,7 +8590,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8595: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8594: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8599,7 +8598,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8640,12 +8639,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8644: checking for $ac_func" >&5 +echo "configure:8643: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8671: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8699,12 +8698,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8703: checking for $ac_func" >&5 +echo "configure:8702: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8752,7 +8751,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8756: checking for getprpwnam in -lsec" >&5 +echo "configure:8755: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8760,7 +8759,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8801,12 +8800,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8805: checking for $ac_func" >&5 +echo "configure:8804: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8873,7 +8872,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8877: checking ability to build shared libraries" >&5 +echo "configure:8876: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9033,7 +9032,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9037: checking for $ac_word" >&5 +echo "configure:9036: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9090,17 +9089,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9094: checking linker flags for shared libraries" >&5 +echo "configure:9093: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9097: checking compiler flags for position-independent code" >&5 +echo "configure:9096: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9104: checking whether building shared libraries actually works" >&5 +echo "configure:9103: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9131,7 +9130,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9135: checking for long long" >&5 +echo "configure:9134: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9140,12 +9139,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9172,20 +9171,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9176: checking for LL suffix on long long integers" >&5 +echo "configure:9175: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9189: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9207,7 +9206,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9211: checking for 64 bit off_t" >&5 +echo "configure:9210: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9216,13 +9215,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9245,7 +9244,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9249: checking for off64_t" >&5 +echo "configure:9248: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9254,7 +9253,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9287,7 +9286,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9291: checking for 64 bit ino_t" >&5 +echo "configure:9290: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9296,13 +9295,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9325,7 +9324,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9329: checking for ino64_t" >&5 +echo "configure:9328: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9334,7 +9333,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9367,7 +9366,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9371: checking for dev64_t" >&5 +echo "configure:9370: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9376,7 +9375,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9409,13 +9408,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9413: checking for struct dirent64" >&5 +echo "configure:9412: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9430: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9448,7 +9447,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9452: checking for major macro" >&5 +echo "configure:9451: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9457,7 +9456,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9489,7 +9488,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9493: checking for minor macro" >&5 +echo "configure:9492: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9498,7 +9497,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9530,7 +9529,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9534: checking for unsigned char" >&5 +echo "configure:9533: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9539,12 +9538,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9567,13 +9566,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9571: checking for sin_len in sock" >&5 +echo "configure:9570: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9582,7 +9581,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9586: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9585: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9603,13 +9602,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9607: checking whether seekdir returns void" >&5 +echo "configure:9606: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9618,7 +9617,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9622: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9621: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9639,20 +9638,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9643: checking for __FILE__ macro" >&5 +echo "configure:9642: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9656: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9655: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9673,20 +9672,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9677: checking for __FUNCTION__ macro" >&5 +echo "configure:9676: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9690: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9689: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9707,7 +9706,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9711: checking if gettimeofday takes tz argument" >&5 +echo "configure:9710: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9716,14 +9715,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9746,13 +9745,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9750: checking for __va_copy" >&5 +echo "configure:9749: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9760,7 +9759,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9781,7 +9780,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9785: checking for C99 vsnprintf" >&5 +echo "configure:9784: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9790,7 +9789,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9817,7 +9816,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9840,7 +9839,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9844: checking for broken readdir" >&5 +echo "configure:9843: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9849,7 +9848,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9857,7 +9856,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9861: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9880,13 +9879,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9884: checking for utimbuf" >&5 +echo "configure:9883: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9894,7 +9893,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9898: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9897: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9918,12 +9917,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9922: checking for $ac_func" >&5 +echo "configure:9921: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9972,13 +9971,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9976: checking for ut_name in utmp" >&5 +echo "configure:9975: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9986,7 +9985,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9990: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9989: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10007,13 +10006,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10011: checking for ut_user in utmp" >&5 +echo "configure:10010: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10021,7 +10020,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10025: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10024: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10042,13 +10041,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10046: checking for ut_id in utmp" >&5 +echo "configure:10045: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10056,7 +10055,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10060: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10059: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10077,13 +10076,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10081: checking for ut_host in utmp" >&5 +echo "configure:10080: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10091,7 +10090,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10095: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10094: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10112,13 +10111,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10116: checking for ut_time in utmp" >&5 +echo "configure:10115: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10126,7 +10125,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10130: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10129: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10147,13 +10146,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10151: checking for ut_tv in utmp" >&5 +echo "configure:10150: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10161,7 +10160,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10165: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10182,13 +10181,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10186: checking for ut_type in utmp" >&5 +echo "configure:10185: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10196,7 +10195,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10200: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10199: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10217,13 +10216,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10221: checking for ut_pid in utmp" >&5 +echo "configure:10220: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10231,7 +10230,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10235: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10234: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10252,13 +10251,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10256: checking for ut_exit in utmp" >&5 +echo "configure:10255: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10266,7 +10265,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10270: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10269: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10287,13 +10286,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10291: checking for ut_addr in utmp" >&5 +echo "configure:10290: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10301,7 +10300,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10305: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10304: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10323,13 +10322,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10327: checking whether pututline returns pointer" >&5 +echo "configure:10326: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10337,7 +10336,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10341: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10359,13 +10358,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10363: checking for ut_syslen in utmpx" >&5 +echo "configure:10362: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10373,7 +10372,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10377: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10397,7 +10396,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10401: checking whether to use libiconv" >&5 +echo "configure:10400: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10410,7 +10409,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10414: checking for iconv_open in -liconv" >&5 +echo "configure:10413: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10418,7 +10417,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10472,7 +10471,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10476: checking for working iconv" >&5 +echo "configure:10475: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10481,7 +10480,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10492,7 +10491,7 @@ main() { } EOF -if { (eval echo configure:10496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10516,7 +10515,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10520: checking for Linux kernel oplocks" >&5 +echo "configure:10519: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10525,7 +10524,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10539,7 +10538,7 @@ main() { } EOF -if { (eval echo configure:10543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10562,7 +10561,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10566: checking for kernel change notify support" >&5 +echo "configure:10565: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10571,7 +10570,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10585,7 +10584,7 @@ main() { } EOF -if { (eval echo configure:10589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10608,7 +10607,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10612: checking for kernel share modes" >&5 +echo "configure:10611: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10617,7 +10616,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10633,7 +10632,7 @@ main() { } EOF -if { (eval echo configure:10637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10659,13 +10658,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10663: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10662: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10673,7 +10672,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10677: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10676: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10694,7 +10693,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10698: checking for irix specific capabilities" >&5 +echo "configure:10697: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10703,7 +10702,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10718,7 +10717,7 @@ main() { } EOF -if { (eval echo configure:10722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10746,13 +10745,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10750: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10749: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10762,7 +10761,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10766: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10765: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10783,13 +10782,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10787: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10786: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10799,7 +10798,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10803: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10802: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10820,13 +10819,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10824: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10823: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10836,7 +10835,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10839: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10857,13 +10856,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10861: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10860: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10873,7 +10872,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10877: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10876: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10895,13 +10894,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10899: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10898: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10915,7 +10914,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10918: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10936,16 +10935,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10940: checking for test routines" >&5 +echo "configure:10939: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10959,7 +10958,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10963: checking for ftruncate extend" >&5 +echo "configure:10962: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10968,11 +10967,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10995,7 +10994,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:10999: checking for AF_LOCAL socket support" >&5 +echo "configure:10998: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11004,11 +11003,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11032,7 +11031,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11036: checking for broken getgroups" >&5 +echo "configure:11035: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11041,11 +11040,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11068,7 +11067,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11072: checking whether getpass should be replaced" >&5 +echo "configure:11071: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11076,7 +11075,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11092: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11112,7 +11111,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11116: checking for broken inet_ntoa" >&5 +echo "configure:11115: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11121,7 +11120,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11135,7 +11134,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11158,7 +11157,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11162: checking for secure mkstemp" >&5 +echo "configure:11161: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11167,7 +11166,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11184,7 +11183,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11207,7 +11206,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11211: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11210: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11216,12 +11215,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11244,7 +11243,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11248: checking for root" >&5 +echo "configure:11247: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11253,11 +11252,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11260: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11285,7 +11284,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11289: checking for iface AIX" >&5 +echo "configure:11288: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11294,7 +11293,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11326,7 +11325,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11330: checking for iface ifconf" >&5 +echo "configure:11329: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11335,7 +11334,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11368,7 +11367,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11372: checking for iface ifreq" >&5 +echo "configure:11371: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11377,7 +11376,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11414,7 +11413,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11418: checking for setresuid" >&5 +echo "configure:11417: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11423,7 +11422,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11457,7 +11456,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11461: checking for setreuid" >&5 +echo "configure:11460: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11466,7 +11465,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11499,7 +11498,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11503: checking for seteuid" >&5 +echo "configure:11502: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11508,7 +11507,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11541,7 +11540,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11545: checking for setuidx" >&5 +echo "configure:11544: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11550,7 +11549,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11583,7 +11582,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11587: checking for working mmap" >&5 +echo "configure:11586: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11592,11 +11591,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11599: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11619,7 +11618,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11623: checking for ftruncate needs root" >&5 +echo "configure:11622: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11628,11 +11627,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11655,7 +11654,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11659: checking for fcntl locking" >&5 +echo "configure:11658: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11664,11 +11663,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11671: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11691,7 +11690,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11695: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11694: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11700,11 +11699,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11729,7 +11728,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11733: checking for 64 bit fcntl locking" >&5 +echo "configure:11732: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11738,7 +11737,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11787,13 +11786,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11791: checking for st_blocks in struct stat" >&5 +echo "configure:11790: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11802,7 +11801,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11805: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11823,13 +11822,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11827: checking for st_blksize in struct stat" >&5 +echo "configure:11826: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11838,7 +11837,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11841: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11861,13 +11860,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11865: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11864: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11884: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11904,13 +11903,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11908: checking for broken nisplus include files" >&5 +echo "configure:11907: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11920,7 +11919,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11924: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11944,7 +11943,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11948: checking whether to use smbwrapper" >&5 +echo "configure:11947: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11991,7 +11990,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11995: checking whether to use AFS clear-text auth" >&5 +echo "configure:11994: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12017,7 +12016,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12021: checking whether to use DFS clear-text auth" >&5 +echo "configure:12020: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12043,7 +12042,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12047: checking for /usr/kerberos" >&5 +echo "configure:12046: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12056,7 +12055,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12060: checking for kerberos 5 install path" >&5 +echo "configure:12059: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12085,17 +12084,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12089: checking for $ac_hdr" >&5 +echo "configure:12088: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12099: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12098: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12128,17 +12127,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12132: checking for $ac_hdr" >&5 +echo "configure:12131: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12142: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12141: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12168,7 +12167,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12172: checking for _et_list in -lcom_err" >&5 +echo "configure:12171: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12176,7 +12175,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12208,7 +12207,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12212: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12211: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12216,7 +12215,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12252,7 +12251,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12256: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12255: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12260,7 +12259,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12299,7 +12298,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12303: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12302: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12307,7 +12306,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12347,7 +12346,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12351: checking for ber_scanf in -llber" >&5 +echo "configure:12350: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12355,7 +12354,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12391,7 +12390,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12395: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12394: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12399,7 +12398,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12441,12 +12440,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12445: checking for $ac_func" >&5 +echo "configure:12444: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12494,13 +12493,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12498: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12497: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12509,7 +12508,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12512: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12531,7 +12530,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12535: checking whether to use AUTOMOUNT" >&5 +echo "configure:12534: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12556,7 +12555,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12560: checking whether to use SMBMOUNT" >&5 +echo "configure:12559: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12593,7 +12592,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12597: checking whether to use PAM" >&5 +echo "configure:12596: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12619,7 +12618,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12623: checking for pam_get_data in -lpam" >&5 +echo "configure:12622: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12627,7 +12626,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12665,7 +12664,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12669: checking whether to use pam_smbpass" >&5 +echo "configure:12668: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12703,12 +12702,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12707: checking for $ac_func" >&5 +echo "configure:12706: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12757,7 +12756,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12761: checking for crypt in -lcrypt" >&5 +echo "configure:12760: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12765,7 +12764,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12811,7 +12810,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12815: checking for a crypt that needs truncated salt" >&5 +echo "configure:12814: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12820,11 +12819,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12827: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12850,7 +12849,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12854: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12853: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12882,7 +12881,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12886: checking whether to use TDB SAM database" >&5 +echo "configure:12885: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12907,7 +12906,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12911: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12910: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12938,7 +12937,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12942: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12941: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12963,7 +12962,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12967: checking whether to use syslog logging" >&5 +echo "configure:12966: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12988,7 +12987,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12992: checking whether to use profiling" >&5 +echo "configure:12991: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13016,7 +13015,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13020: checking whether to support disk-quotas" >&5 +echo "configure:13019: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13027,13 +13026,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13031: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13030: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13045,7 +13044,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13049: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13048: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13094,7 +13093,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13098: checking whether to support utmp accounting" >&5 +echo "configure:13097: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13119,7 +13118,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13123: checking chosen man pages' language(s)" >&5 +echo "configure:13122: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13150,7 +13149,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13154: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13153: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13178,14 +13177,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13182: checking how to get filesystem space usage" >&5 +echo "configure:13181: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13189: checking statvfs64 function (SVR4)" >&5 +echo "configure:13188: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13193,7 +13192,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13210: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13240,12 +13239,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13244: checking statvfs function (SVR4)" >&5 +echo "configure:13243: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13253,7 +13252,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13278,7 +13277,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13282: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13281: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13286,7 +13285,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13299,7 +13298,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13326,7 +13325,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13330: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13329: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13334,7 +13333,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13380,7 +13379,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13384: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13383: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13388,7 +13387,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13398,7 +13397,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13425,7 +13424,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13429: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13428: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13433,7 +13432,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13449,7 +13448,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13476,7 +13475,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13480: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13479: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13484,7 +13483,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13504,7 +13503,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13537,9 +13536,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13541: checking if large file support can be enabled" >&5 +echo "configure:13540: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13617,7 +13616,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13621: checking whether to support ACLs" >&5 +echo "configure:13620: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13670,7 +13669,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13674: checking for acl_get_file in -lacl" >&5 +echo "configure:13673: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13678,7 +13677,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13717,13 +13716,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13721: checking for ACL support" >&5 +echo "configure:13720: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13731,7 +13730,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13751,13 +13750,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13755: checking for acl_get_perm_np" >&5 +echo "configure:13754: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13765,7 +13764,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13806,13 +13805,177 @@ EOF fi +################################################# +# check for sendfile support + +echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 +echo "configure:13813: checking whether to support sendfile" >&5 +# Check whether --with-sendfile-support or --without-sendfile-support was given. +if test "${with_sendfile_support+set}" = set; then + withval="$with_sendfile_support" + case "$withval" in + yes) + + case "$host_os" in + *linux*) + echo $ac_n "checking for sendfile64 support""... $ac_c" 1>&6 +echo "configure:13823: checking for sendfile64 support" >&5 +if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < +int main() { +\ +int tofd, fromfd; +off64_t offset; +size_t total; +ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); + +; return 0; } +EOF +if { (eval echo configure:13841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + samba_cv_HAVE_SENDFILE64=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + samba_cv_HAVE_SENDFILE64=no +fi +rm -f conftest* +fi + +echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 + + echo $ac_n "checking for sendfile support""... $ac_c" 1>&6 +echo "configure:13856: checking for sendfile support" >&5 +if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < +int main() { +\ +int tofd, fromfd; +off_t offset; +size_t total; +ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); + +; return 0; } +EOF +if { (eval echo configure:13874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + samba_cv_HAVE_SENDFILE=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + samba_cv_HAVE_SENDFILE=no +fi +rm -f conftest* +fi + +echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 + +# Try and cope with broken Linux sendfile.... + echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 +echo "configure:13890: checking for broken linux sendfile support" >&5 +if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < +int main() { +\ +int tofd, fromfd; +off_t offset; +size_t total; +ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); + +; return 0; } +EOF +if { (eval echo configure:13912: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no +fi +rm -f conftest* +fi + +echo "$ac_t""$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" 1>&6 + + if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_SENDFILE64 1 +EOF + + cat >> confdefs.h <<\EOF +#define LINUX_SENDFILE_API 1 +EOF + + elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_SENDFILE 1 +EOF + + cat >> confdefs.h <<\EOF +#define LINUX_SENDFILE_API 1 +EOF + + elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_SENDFILE 1 +EOF + + cat >> confdefs.h <<\EOF +#define LINUX_BROKEN_SENDFILE_API 1 +EOF + + else + echo "$ac_t""no" 1>&6; + fi + + ;; + *) + ;; + esac + ;; + *) + echo "$ac_t""no" 1>&6 + ;; + esac +else + echo "$ac_t""no" 1>&6 + +fi + + + ################################################# # Check whether winbind is supported on this platform. If so we need to # build and install client programs (WINBIND_TARGETS), sbin programs # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13816: checking whether to build winbind" >&5 +echo "configure:13979: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -13908,20 +14071,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:13912: checking whether struct passwd has pw_comment" >&5 +echo "configure:14075: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:13925: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -13946,20 +14109,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:13950: checking whether struct passwd has pw_age" >&5 +echo "configure:14113: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:13963: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14126: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -13998,7 +14161,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14002: checking for poptGetContext in -lpopt" >&5 +echo "configure:14165: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14006,7 +14169,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14041,7 +14204,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14045: checking whether to use included popt" >&5 +echo "configure:14208: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14080,16 +14243,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14084: checking configure summary" >&5 +echo "configure:14247: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source/configure.in b/source/configure.in index fd08142bbdc..76dc380c132 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2661,6 +2661,78 @@ samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_cv_HAVE_ACL_GET_PERM_NP=no)]) AC_MSG_RESULT(no) ) +################################################# +# check for sendfile support + +AC_MSG_CHECKING(whether to support sendfile) +AC_ARG_WITH(sendfile-support, +[ --with-sendfile-support Include sendfile support (default=no)], +[ case "$withval" in + yes) + + case "$host_os" in + *linux*) + AC_CACHE_CHECK([for sendfile64 support],samba_cv_HAVE_SENDFILE64,[ + AC_TRY_LINK([#include ], +[\ +int tofd, fromfd; +off64_t offset; +size_t total; +ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); +], +samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)]) + + AC_CACHE_CHECK([for sendfile support],samba_cv_HAVE_SENDFILE,[ + AC_TRY_LINK([#include ], +[\ +int tofd, fromfd; +off_t offset; +size_t total; +ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); +], +samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)]) + +# Try and cope with broken Linux sendfile.... + AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[ + AC_TRY_LINK([\ +#if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64) +#undef _FILE_OFFSET_BITS +#endif +#include ], +[\ +int tofd, fromfd; +off_t offset; +size_t total; +ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); +], +samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)]) + + if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then + AC_DEFINE(HAVE_SENDFILE64) + AC_DEFINE(LINUX_SENDFILE_API) + elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then + AC_DEFINE(HAVE_SENDFILE) + AC_DEFINE(LINUX_SENDFILE_API) + elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then + AC_DEFINE(HAVE_SENDFILE) + AC_DEFINE(LINUX_BROKEN_SENDFILE_API) + else + AC_MSG_RESULT(no); + fi + + ;; + *) + ;; + esac + ;; + *) + AC_MSG_RESULT(no) + ;; + esac ], + AC_MSG_RESULT(no) +) + + ################################################# # Check whether winbind is supported on this platform. If so we need to # build and install client programs (WINBIND_TARGETS), sbin programs diff --git a/source/include/config.h.in b/source/include/config.h.in index 7945e49c79c..3c56845174f 100644 --- a/source/include/config.h.in +++ b/source/include/config.h.in @@ -288,6 +288,10 @@ #endif #undef LDAP_SET_REBIND_PROC_ARGS +#undef HAVE_SENDFILE +#undef HAVE_SENDFILE64 +#undef LINUX_SENDFILE_API +#undef LINUX_BROKEN_SENDFILE_API /* The number of bytes in a int. */ #undef SIZEOF_INT -- cgit From f956a4d29d0d88cd92fac0f0c9f636fc152afe0a Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 01:00:03 +0000 Subject: Attempt to make broken Linux sendfile work.... Still in progress. Jeremy. --- source/acconfig.h | 1 + source/configure | 42 +++++++++++++++++++++++++----------------- source/configure.in | 4 +++- source/include/config.h.in | 1 + source/lib/sendfile.c | 24 +++++++++++++++++------- source/smbd/reply.c | 2 +- 6 files changed, 48 insertions(+), 26 deletions(-) diff --git a/source/acconfig.h b/source/acconfig.h index 141c59bfed0..8ca44f7aba2 100644 --- a/source/acconfig.h +++ b/source/acconfig.h @@ -226,3 +226,4 @@ #undef HAVE_SENDFILE64 #undef LINUX_SENDFILE_API #undef LINUX_BROKEN_SENDFILE_API +#undef WITH_SENDFILE diff --git a/source/configure b/source/configure index 8e4b1d2961d..56ac8ef2741 100755 --- a/source/configure +++ b/source/configure @@ -13929,6 +13929,10 @@ EOF cat >> confdefs.h <<\EOF #define LINUX_SENDFILE_API 1 +EOF + + cat >> confdefs.h <<\EOF +#define WITH_SENDFILE 1 EOF elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then @@ -13940,13 +13944,17 @@ EOF #define LINUX_SENDFILE_API 1 EOF - elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then - cat >> confdefs.h <<\EOF -#define HAVE_SENDFILE 1 + cat >> confdefs.h <<\EOF +#define WITH_SENDFILE 1 EOF + elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then cat >> confdefs.h <<\EOF #define LINUX_BROKEN_SENDFILE_API 1 +EOF + + cat >> confdefs.h <<\EOF +#define WITH_SENDFILE 1 EOF else @@ -13975,7 +13983,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13979: checking whether to build winbind" >&5 +echo "configure:13987: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14071,20 +14079,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14075: checking whether struct passwd has pw_comment" >&5 +echo "configure:14083: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14096: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14109,20 +14117,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14113: checking whether struct passwd has pw_age" >&5 +echo "configure:14121: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14126: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14134: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14161,7 +14169,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14165: checking for poptGetContext in -lpopt" >&5 +echo "configure:14173: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14169,7 +14177,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14204,7 +14212,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14208: checking whether to use included popt" >&5 +echo "configure:14216: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14243,16 +14251,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14247: checking configure summary" >&5 +echo "configure:14255: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source/configure.in b/source/configure.in index 76dc380c132..8f3a06b0cde 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2710,12 +2710,14 @@ samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)] if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then AC_DEFINE(HAVE_SENDFILE64) AC_DEFINE(LINUX_SENDFILE_API) + AC_DEFINE(WITH_SENDFILE) elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then AC_DEFINE(HAVE_SENDFILE) AC_DEFINE(LINUX_SENDFILE_API) + AC_DEFINE(WITH_SENDFILE) elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then - AC_DEFINE(HAVE_SENDFILE) AC_DEFINE(LINUX_BROKEN_SENDFILE_API) + AC_DEFINE(WITH_SENDFILE) else AC_MSG_RESULT(no); fi diff --git a/source/include/config.h.in b/source/include/config.h.in index 3c56845174f..119df4dd5b0 100644 --- a/source/include/config.h.in +++ b/source/include/config.h.in @@ -292,6 +292,7 @@ #undef HAVE_SENDFILE64 #undef LINUX_SENDFILE_API #undef LINUX_BROKEN_SENDFILE_API +#undef WITH_SENDFILE /* The number of bytes in a int. */ #undef SIZEOF_INT diff --git a/source/lib/sendfile.c b/source/lib/sendfile.c index 4613cfb864b..8bcb9dbd02b 100644 --- a/source/lib/sendfile.c +++ b/source/lib/sendfile.c @@ -76,7 +76,13 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of #elif defined(LINUX_BROKEN_SENDFILE_API) -#include +/* + * We must use explicit 32 bit types here. This code path means Linux + * won't do proper 64-bit sendfile. JRA. + */ + +extern int32 sendfile (int out_fd, int in_fd, int32 *offset, uint32 count); + #ifndef MSG_MORE #define MSG_MORE 0x8000 @@ -87,11 +93,13 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of size_t total=0; ssize_t ret; ssize_t hdr_len = 0; + uint32 small_total = 0; + int32 small_offset; /* * Fix for broken Linux 2.4 systems with no working sendfile64(). * If the offset+count > 2 GB then pretend we don't have the - * system call sendfile at all. The upper later catches this + * system call sendfile at all. The upper layer catches this * and uses a normal read. JRA. */ @@ -115,17 +123,19 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of } } - total = count; - while (total) { - ssize_t nwritten; + small_total = (uint32)count; + small_offset = (int32)offset; + + while (small_total) { + int32 nwritten; do { - nwritten = sendfile(tofd, fromfd, &offset, total); + nwritten = sendfile(tofd, fromfd, &small_offset, small_total); } while (nwritten == -1 && errno == EINTR); if (nwritten == -1) return -1; if (nwritten == 0) return -1; /* I think we're at EOF here... */ - total -= nwritten; + small_total -= nwritten; } return count + hdr_len; } diff --git a/source/smbd/reply.c b/source/smbd/reply.c index 878e21f4c27..45704b92641 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -1692,7 +1692,7 @@ int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length ssize_t nread = -1; char *data = smb_buf(outbuf); -#if defined(WITH_SENDFILE) && defined(HAVE_SENDFILE) +#if defined(WITH_SENDFILE) /* * We can only use sendfile on a non-chained packet and on a file * that is exclusively oplocked. -- cgit From 6425f169779ce65509b77cf6d5634de24894a965 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 01:10:47 +0000 Subject: Added FreeBSD sendfile configure tests. Richard please test... Jeremy. --- source/acconfig.h | 1 + source/configure | 97 +++++++++++++++++++++++++++++++++++++--------- source/configure.in | 33 +++++++++++++++- source/include/config.h.in | 1 + 4 files changed, 112 insertions(+), 20 deletions(-) diff --git a/source/acconfig.h b/source/acconfig.h index 8ca44f7aba2..40a3a7cee19 100644 --- a/source/acconfig.h +++ b/source/acconfig.h @@ -227,3 +227,4 @@ #undef LINUX_SENDFILE_API #undef LINUX_BROKEN_SENDFILE_API #undef WITH_SENDFILE +#undef FREEBSD_SENDFILE_API diff --git a/source/configure b/source/configure index 56ac8ef2741..eb8d091dbce 100755 --- a/source/configure +++ b/source/configure @@ -13818,8 +13818,8 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) - echo $ac_n "checking for sendfile64 support""... $ac_c" 1>&6 -echo "configure:13823: checking for sendfile64 support" >&5 + echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 +echo "configure:13823: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13851,8 +13851,8 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 - echo $ac_n "checking for sendfile support""... $ac_c" 1>&6 -echo "configure:13856: checking for sendfile support" >&5 + echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 +echo "configure:13856: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13961,6 +13961,67 @@ EOF echo "$ac_t""no" 1>&6; fi + ;; + *freebsd*) + echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 +echo "configure:13968: checking for freebsd sendfile support" >&5 +if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < +#include +#include +int main() { +\ + int fromfd, tofd; + off_t offset, nwritten; + struct sf_hdtr hdr; + struct iovec hdtrl; + hdr->headers = &hdtrl; + hdr->hdr_cnt = 1; + hdr->trailers = NULL; + hdr->trl_cnt = 0; + hdtrl.iov_base = NULL; + hdtrl.iov_len = 0; + int ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); + +; return 0; } +EOF +if { (eval echo configure:13996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + samba_cv_HAVE_SENDFILE=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + samba_cv_HAVE_SENDFILE=no +fi +rm -f conftest* +fi + +echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 + + if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_SENDFILE 1 +EOF + + cat >> confdefs.h <<\EOF +#define FREEBSD_SENDFILE_API 1 +EOF + + cat >> confdefs.h <<\EOF +#define WITH_SENDFILE 1 +EOF + + else + echo "$ac_t""no" 1>&6; + fi ;; *) ;; @@ -13983,7 +14044,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13987: checking whether to build winbind" >&5 +echo "configure:14048: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14079,20 +14140,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14083: checking whether struct passwd has pw_comment" >&5 +echo "configure:14144: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14096: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14117,20 +14178,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14121: checking whether struct passwd has pw_age" >&5 +echo "configure:14182: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14134: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14169,7 +14230,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14173: checking for poptGetContext in -lpopt" >&5 +echo "configure:14234: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14177,7 +14238,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14212,7 +14273,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14216: checking whether to use included popt" >&5 +echo "configure:14277: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14251,16 +14312,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14255: checking configure summary" >&5 +echo "configure:14316: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source/configure.in b/source/configure.in index 8f3a06b0cde..5e742f9498c 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2672,7 +2672,7 @@ AC_ARG_WITH(sendfile-support, case "$host_os" in *linux*) - AC_CACHE_CHECK([for sendfile64 support],samba_cv_HAVE_SENDFILE64,[ + AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[ AC_TRY_LINK([#include ], [\ int tofd, fromfd; @@ -2682,7 +2682,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ], samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)]) - AC_CACHE_CHECK([for sendfile support],samba_cv_HAVE_SENDFILE,[ + AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[ AC_TRY_LINK([#include ], [\ int tofd, fromfd; @@ -2722,6 +2722,35 @@ samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)] AC_MSG_RESULT(no); fi + ;; + *freebsd*) + AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[ + AC_TRY_LINK([\ +#include +#include +#include ], +[\ + int fromfd, tofd; + off_t offset, nwritten; + struct sf_hdtr hdr; + struct iovec hdtrl; + hdr->headers = &hdtrl; + hdr->hdr_cnt = 1; + hdr->trailers = NULL; + hdr->trl_cnt = 0; + hdtrl.iov_base = NULL; + hdtrl.iov_len = 0; + int ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); +], +samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)]) + + if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then + AC_DEFINE(HAVE_SENDFILE) + AC_DEFINE(FREEBSD_SENDFILE_API) + AC_DEFINE(WITH_SENDFILE) + else + AC_MSG_RESULT(no); + fi ;; *) ;; diff --git a/source/include/config.h.in b/source/include/config.h.in index 119df4dd5b0..9fbde2bf375 100644 --- a/source/include/config.h.in +++ b/source/include/config.h.in @@ -293,6 +293,7 @@ #undef LINUX_SENDFILE_API #undef LINUX_BROKEN_SENDFILE_API #undef WITH_SENDFILE +#undef FREEBSD_SENDFILE_API /* The number of bytes in a int. */ #undef SIZEOF_INT -- cgit From 130e05de073268cbabed0e2f80f0011e5f72dc02 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 17 Sep 2002 01:14:54 +0000 Subject: Default to "python" for --with-python option. This saves having to run --with-python=python which looks a bit silly. --- source/configure.in | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/source/configure.in b/source/configure.in index 5e742f9498c..0e4e910f0c7 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2919,7 +2919,14 @@ AC_SUBST(FLAGS1) AC_ARG_WITH(python, [ --with-python=PYTHONNAME build Python libraries], -[ PYTHON=${withval-python} ]) +[ case "${withval-python}" in + yes) + PYTHON=python + ;; + *) + PYTHON=${withval-python} + ;; + esac ]) AC_SUBST(PYTHON) ################################################# -- cgit From 041f47230b865294e657f47e6aba2fa83a15bf31 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 17 Sep 2002 01:19:04 +0000 Subject: Rerun autoconf. --- source/configure | 1426 +++++++++++++++++++++++++++--------------------------- 1 file changed, 718 insertions(+), 708 deletions(-) diff --git a/source/configure b/source/configure index eb8d091dbce..8caba2b6c46 100755 --- a/source/configure +++ b/source/configure @@ -1122,7 +1122,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -for ac_prog in gawk mawk nawk awk +for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -2914,15 +2914,16 @@ else #line 2915 "configure" #include "confdefs.h" #include -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); - return(0); + exit(0); } EOF -if { (eval echo configure:2926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2942,7 +2943,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2946: checking size of long" >&5 +echo "configure:2947: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2950,18 +2951,19 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); - return(0); + exit(0); } EOF -if { (eval echo configure:2965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2981,7 +2983,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2985: checking size of short" >&5 +echo "configure:2987: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2989,18 +2991,19 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(short)); - return(0); + exit(0); } EOF -if { (eval echo configure:3004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3021,12 +3024,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3025: checking for working const" >&5 +echo "configure:3028: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3096,21 +3099,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3100: checking for inline" >&5 +echo "configure:3103: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3136,14 +3139,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3140: checking whether byte ordering is bigendian" >&5 +echo "configure:3143: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3154,11 +3157,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3161: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3169,7 +3172,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3173: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3176: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3189,7 +3192,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3209: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3226,14 +3229,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3230: checking whether char is unsigned" >&5 +echo "configure:3233: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3290,12 +3293,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3294: checking return type of signal handlers" >&5 +echo "configure:3297: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3312,7 +3315,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3316: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3331,12 +3334,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3335: checking for uid_t in sys/types.h" >&5 +echo "configure:3338: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3365,12 +3368,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3369: checking for mode_t" >&5 +echo "configure:3372: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3398,12 +3401,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3402: checking for off_t" >&5 +echo "configure:3405: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3431,12 +3434,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3435: checking for size_t" >&5 +echo "configure:3438: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3464,12 +3467,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3468: checking for pid_t" >&5 +echo "configure:3471: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3497,12 +3500,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3501: checking for st_rdev in struct stat" >&5 +echo "configure:3504: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3510,7 +3513,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3514: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3517: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3531,12 +3534,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3535: checking for d_off in dirent" >&5 +echo "configure:3538: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3546,7 +3549,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3550: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3553: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3567,12 +3570,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3571: checking for ino_t" >&5 +echo "configure:3574: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3600,12 +3603,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3604: checking for loff_t" >&5 +echo "configure:3607: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3633,12 +3636,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3637: checking for offset_t" >&5 +echo "configure:3640: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3666,12 +3669,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3670: checking for ssize_t" >&5 +echo "configure:3673: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3699,12 +3702,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3703: checking for wchar_t" >&5 +echo "configure:3706: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3746,7 +3749,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3750: checking for $ac_word" >&5 +echo "configure:3753: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3795,12 +3798,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3799: checking for $ac_func" >&5 +echo "configure:3802: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3849,7 +3852,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3853: checking for dlopen in -ldl" >&5 +echo "configure:3856: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3857,7 +3860,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3898,13 +3901,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3902: checking for immediate structures" >&5 +echo "configure:3905: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3922,7 +3925,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3929: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3945,13 +3948,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3949: checking for unix domain sockets" >&5 +echo "configure:3952: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3966,7 +3969,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3970: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3973: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3988,13 +3991,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3992: checking for socklen_t type" >&5 +echo "configure:3995: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4007,7 +4010,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4011: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4014: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4028,13 +4031,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4032: checking for sig_atomic_t type" >&5 +echo "configure:4035: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4047,7 +4050,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4054: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4070,20 +4073,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4074: checking for errno declaration" >&5 +echo "configure:4077: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4087: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4105,20 +4108,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4109: checking for setresuid declaration" >&5 +echo "configure:4112: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4140,20 +4143,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4144: checking for setresgid declaration" >&5 +echo "configure:4147: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4175,20 +4178,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4179: checking for asprintf declaration" >&5 +echo "configure:4182: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4210,20 +4213,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4214: checking for vasprintf declaration" >&5 +echo "configure:4217: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4227: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4230: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4245,20 +4248,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4249: checking for vsnprintf declaration" >&5 +echo "configure:4252: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4262: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4280,20 +4283,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4284: checking for snprintf declaration" >&5 +echo "configure:4287: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4297: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4317,7 +4320,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4321: checking for real setresuid" >&5 +echo "configure:4324: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4326,12 +4329,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4356,7 +4359,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4360: checking for real setresgid" >&5 +echo "configure:4363: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4365,13 +4368,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4394,7 +4397,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4398: checking for 8-bit clean memcmp" >&5 +echo "configure:4401: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4402,7 +4405,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4435,12 +4438,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4439: checking for $ac_func" >&5 +echo "configure:4442: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4489,7 +4492,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4493: checking for crypt in -lcrypt" >&5 +echo "configure:4496: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4497,7 +4500,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4541,7 +4544,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4545: checking whether to use readline" >&5 +echo "configure:4548: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4553,17 +4556,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4557: checking for $ac_hdr" >&5 +echo "configure:4560: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4567: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4570: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4593,17 +4596,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4597: checking for $ac_hdr" >&5 +echo "configure:4600: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4610: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4634,17 +4637,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4638: checking for $ac_hdr" >&5 +echo "configure:4641: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4648: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4651: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4667,7 +4670,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4671: checking for tgetent in -l${termlib}" >&5 +echo "configure:4674: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4675,7 +4678,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4708,7 +4711,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4712: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4715: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4716,7 +4719,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4778,17 +4781,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4782: checking for $ac_hdr" >&5 +echo "configure:4785: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4792: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4795: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4818,17 +4821,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4822: checking for $ac_hdr" >&5 +echo "configure:4825: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4859,17 +4862,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4863: checking for $ac_hdr" >&5 +echo "configure:4866: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4873: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4876: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4892,7 +4895,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4896: checking for tgetent in -l${termlib}" >&5 +echo "configure:4899: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4900,7 +4903,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4933,7 +4936,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4937: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4940: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4941,7 +4944,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5002,7 +5005,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5006: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5009: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5010,7 +5013,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5054,12 +5057,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5058: checking for $ac_func" >&5 +echo "configure:5061: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5110,7 +5113,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5114: checking for printf in -lnsl_s" >&5 +echo "configure:5117: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5118,7 +5121,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5160,7 +5163,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5164: checking for printf in -lnsl" >&5 +echo "configure:5167: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5168,7 +5171,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5210,7 +5213,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5214: checking for connect in -lsocket" >&5 +echo "configure:5217: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5218,7 +5221,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5260,7 +5263,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5264: checking for connect in -linet" >&5 +echo "configure:5267: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5268,7 +5271,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5323,12 +5326,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5327: checking for $ac_func" >&5 +echo "configure:5330: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5377,7 +5380,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5381: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5384: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5385,7 +5388,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5426,12 +5429,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5430: checking for $ac_func" >&5 +echo "configure:5433: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5487,12 +5490,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5491: checking for $ac_func" >&5 +echo "configure:5494: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5542,12 +5545,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5546: checking for $ac_func" >&5 +echo "configure:5549: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5597,12 +5600,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5601: checking for $ac_func" >&5 +echo "configure:5604: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5632: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5652,12 +5655,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5656: checking for $ac_func" >&5 +echo "configure:5659: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5687: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5707,12 +5710,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5711: checking for $ac_func" >&5 +echo "configure:5714: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5742: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5762,12 +5765,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5766: checking for $ac_func" >&5 +echo "configure:5769: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5817,12 +5820,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5821: checking for $ac_func" >&5 +echo "configure:5824: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5852: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5872,12 +5875,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5876: checking for $ac_func" >&5 +echo "configure:5879: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5907: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5927,12 +5930,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5931: checking for $ac_func" >&5 +echo "configure:5934: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5982,12 +5985,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5986: checking for $ac_func" >&5 +echo "configure:5989: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6038,12 +6041,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6042: checking for $ac_func" >&5 +echo "configure:6045: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6095,12 +6098,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6099: checking for $ac_func" >&5 +echo "configure:6102: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6151,12 +6154,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6155: checking for $ac_func" >&5 +echo "configure:6158: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6206,12 +6209,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6210: checking for $ac_func" >&5 +echo "configure:6213: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6241: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6261,12 +6264,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6265: checking for $ac_func" >&5 +echo "configure:6268: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6316,12 +6319,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6320: checking for $ac_func" >&5 +echo "configure:6323: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6371,12 +6374,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6375: checking for $ac_func" >&5 +echo "configure:6378: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6426,12 +6429,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6430: checking for $ac_func" >&5 +echo "configure:6433: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6481,12 +6484,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6485: checking for $ac_func" >&5 +echo "configure:6488: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6536,12 +6539,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6540: checking for $ac_func" >&5 +echo "configure:6543: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6571: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6591,12 +6594,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6595: checking for $ac_func" >&5 +echo "configure:6598: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6646,12 +6649,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6650: checking for $ac_func" >&5 +echo "configure:6653: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6701,12 +6704,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6705: checking for $ac_func" >&5 +echo "configure:6708: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6756,12 +6759,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6760: checking for $ac_func" >&5 +echo "configure:6763: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6811,12 +6814,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6815: checking for $ac_func" >&5 +echo "configure:6818: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6866,12 +6869,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6870: checking for $ac_func" >&5 +echo "configure:6873: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6925,9 +6928,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6929: checking for stat64 in " >&5 +echo "configure:6932: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6958,9 +6961,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6962: checking for lstat64 in " >&5 +echo "configure:6965: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6991,9 +6994,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6995: checking for fstat64 in " >&5 +echo "configure:6998: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7025,7 +7028,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7029: checking for dn_expand in -lresolv" >&5 +echo "configure:7032: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7033,7 +7036,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7082,12 +7085,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7086: checking for $ac_func" >&5 +echo "configure:7089: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7135,7 +7138,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7139: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7142: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7143,7 +7146,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7184,12 +7187,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7188: checking for $ac_func" >&5 +echo "configure:7191: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7243,12 +7246,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7247: checking for $ac_func" >&5 +echo "configure:7250: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7296,7 +7299,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7300: checking for putprpwnam in -lsec" >&5 +echo "configure:7303: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7304,7 +7307,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7345,12 +7348,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7349: checking for $ac_func" >&5 +echo "configure:7352: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7405,12 +7408,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7409: checking for $ac_func" >&5 +echo "configure:7412: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7458,7 +7461,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7462: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7465: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7466,7 +7469,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7507,12 +7510,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7511: checking for $ac_func" >&5 +echo "configure:7514: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7566,12 +7569,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7570: checking for $ac_func" >&5 +echo "configure:7573: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7619,7 +7622,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7623: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7626: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7627,7 +7630,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7668,12 +7671,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7672: checking for $ac_func" >&5 +echo "configure:7675: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7729,12 +7732,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7733: checking for $ac_func" >&5 +echo "configure:7736: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7782,7 +7785,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7786: checking for getspnam in -lgen" >&5 +echo "configure:7789: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7790,7 +7793,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7831,12 +7834,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7835: checking for $ac_func" >&5 +echo "configure:7838: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7891,12 +7894,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7895: checking for $ac_func" >&5 +echo "configure:7898: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7944,7 +7947,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7948: checking for getspnam in -lsecurity" >&5 +echo "configure:7951: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7952,7 +7955,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7970: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7993,12 +7996,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7997: checking for $ac_func" >&5 +echo "configure:8000: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8052,12 +8055,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8056: checking for $ac_func" >&5 +echo "configure:8059: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8105,7 +8108,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8109: checking for getspnam in -lsec" >&5 +echo "configure:8112: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8113,7 +8116,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8154,12 +8157,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8158: checking for $ac_func" >&5 +echo "configure:8161: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8214,12 +8217,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8218: checking for $ac_func" >&5 +echo "configure:8221: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8267,7 +8270,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8271: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8274: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8275,7 +8278,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8316,12 +8319,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8320: checking for $ac_func" >&5 +echo "configure:8323: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8375,12 +8378,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8379: checking for $ac_func" >&5 +echo "configure:8382: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8410: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8428,7 +8431,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8432: checking for bigcrypt in -lsec" >&5 +echo "configure:8435: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8436,7 +8439,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8477,12 +8480,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8481: checking for $ac_func" >&5 +echo "configure:8484: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8537,12 +8540,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8541: checking for $ac_func" >&5 +echo "configure:8544: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8590,7 +8593,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8594: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8597: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8598,7 +8601,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8639,12 +8642,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8643: checking for $ac_func" >&5 +echo "configure:8646: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8698,12 +8701,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8702: checking for $ac_func" >&5 +echo "configure:8705: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8751,7 +8754,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8755: checking for getprpwnam in -lsec" >&5 +echo "configure:8758: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8759,7 +8762,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8800,12 +8803,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8804: checking for $ac_func" >&5 +echo "configure:8807: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8872,7 +8875,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8876: checking ability to build shared libraries" >&5 +echo "configure:8879: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9032,7 +9035,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9036: checking for $ac_word" >&5 +echo "configure:9039: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9089,17 +9092,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9093: checking linker flags for shared libraries" >&5 +echo "configure:9096: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9096: checking compiler flags for position-independent code" >&5 +echo "configure:9099: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9103: checking whether building shared libraries actually works" >&5 +echo "configure:9106: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9130,7 +9133,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9134: checking for long long" >&5 +echo "configure:9137: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9139,12 +9142,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9171,20 +9174,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9175: checking for LL suffix on long long integers" >&5 +echo "configure:9178: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9206,7 +9209,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9210: checking for 64 bit off_t" >&5 +echo "configure:9213: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9215,13 +9218,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9244,7 +9247,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9248: checking for off64_t" >&5 +echo "configure:9251: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9253,7 +9256,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9286,7 +9289,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9290: checking for 64 bit ino_t" >&5 +echo "configure:9293: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9295,13 +9298,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9324,7 +9327,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9328: checking for ino64_t" >&5 +echo "configure:9331: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9333,7 +9336,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9366,7 +9369,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9370: checking for dev64_t" >&5 +echo "configure:9373: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9375,7 +9378,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9408,13 +9411,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9412: checking for struct dirent64" >&5 +echo "configure:9415: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9433: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9447,7 +9450,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9451: checking for major macro" >&5 +echo "configure:9454: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9456,7 +9459,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9488,7 +9491,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9492: checking for minor macro" >&5 +echo "configure:9495: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9497,7 +9500,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9529,7 +9532,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9533: checking for unsigned char" >&5 +echo "configure:9536: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9538,12 +9541,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9550: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9566,13 +9569,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9570: checking for sin_len in sock" >&5 +echo "configure:9573: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9581,7 +9584,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9585: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9588: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9602,13 +9605,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9606: checking whether seekdir returns void" >&5 +echo "configure:9609: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9617,7 +9620,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9621: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9624: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9638,20 +9641,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9642: checking for __FILE__ macro" >&5 +echo "configure:9645: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9655: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9658: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9672,20 +9675,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9676: checking for __FUNCTION__ macro" >&5 +echo "configure:9679: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9689: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9692: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9706,7 +9709,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9710: checking if gettimeofday takes tz argument" >&5 +echo "configure:9713: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9715,14 +9718,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9745,13 +9748,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9749: checking for __va_copy" >&5 +echo "configure:9752: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9759,7 +9762,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9780,7 +9783,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9784: checking for C99 vsnprintf" >&5 +echo "configure:9787: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9789,7 +9792,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9816,7 +9819,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9839,7 +9842,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9843: checking for broken readdir" >&5 +echo "configure:9846: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9848,7 +9851,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9856,7 +9859,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9879,13 +9882,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9883: checking for utimbuf" >&5 +echo "configure:9886: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9893,7 +9896,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9897: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9900: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9917,12 +9920,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9921: checking for $ac_func" >&5 +echo "configure:9924: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9971,13 +9974,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9975: checking for ut_name in utmp" >&5 +echo "configure:9978: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9985,7 +9988,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9989: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10006,13 +10009,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10010: checking for ut_user in utmp" >&5 +echo "configure:10013: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10020,7 +10023,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10024: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10027: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10041,13 +10044,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10045: checking for ut_id in utmp" >&5 +echo "configure:10048: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10055,7 +10058,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10059: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10062: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10076,13 +10079,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10080: checking for ut_host in utmp" >&5 +echo "configure:10083: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10090,7 +10093,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10094: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10097: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10111,13 +10114,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10115: checking for ut_time in utmp" >&5 +echo "configure:10118: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10125,7 +10128,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10129: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10146,13 +10149,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10150: checking for ut_tv in utmp" >&5 +echo "configure:10153: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10160,7 +10163,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10167: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10181,13 +10184,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10185: checking for ut_type in utmp" >&5 +echo "configure:10188: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10195,7 +10198,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10199: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10202: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10216,13 +10219,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10220: checking for ut_pid in utmp" >&5 +echo "configure:10223: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10230,7 +10233,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10234: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10237: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10251,13 +10254,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10255: checking for ut_exit in utmp" >&5 +echo "configure:10258: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10265,7 +10268,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10269: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10286,13 +10289,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10290: checking for ut_addr in utmp" >&5 +echo "configure:10293: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10300,7 +10303,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10304: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10307: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10322,13 +10325,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10326: checking whether pututline returns pointer" >&5 +echo "configure:10329: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10336,7 +10339,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10358,13 +10361,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10362: checking for ut_syslen in utmpx" >&5 +echo "configure:10365: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10372,7 +10375,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10379: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10396,7 +10399,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10400: checking whether to use libiconv" >&5 +echo "configure:10403: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10409,7 +10412,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10413: checking for iconv_open in -liconv" >&5 +echo "configure:10416: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10417,7 +10420,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10471,7 +10474,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10475: checking for working iconv" >&5 +echo "configure:10478: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10480,7 +10483,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10491,7 +10494,7 @@ main() { } EOF -if { (eval echo configure:10495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10515,7 +10518,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10519: checking for Linux kernel oplocks" >&5 +echo "configure:10522: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10524,7 +10527,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10538,7 +10541,7 @@ main() { } EOF -if { (eval echo configure:10542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10561,7 +10564,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10565: checking for kernel change notify support" >&5 +echo "configure:10568: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10570,7 +10573,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10584,7 +10587,7 @@ main() { } EOF -if { (eval echo configure:10588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10607,7 +10610,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10611: checking for kernel share modes" >&5 +echo "configure:10614: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10616,7 +10619,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10632,7 +10635,7 @@ main() { } EOF -if { (eval echo configure:10636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10658,13 +10661,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10662: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10665: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10672,7 +10675,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10676: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10679: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10693,7 +10696,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10697: checking for irix specific capabilities" >&5 +echo "configure:10700: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10702,7 +10705,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10717,7 +10720,7 @@ main() { } EOF -if { (eval echo configure:10721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10745,13 +10748,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10749: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10752: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10761,7 +10764,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10765: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10768: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10782,13 +10785,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10786: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10789: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10798,7 +10801,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10802: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10805: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10819,13 +10822,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10823: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10826: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10835,7 +10838,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10839: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10856,13 +10859,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10860: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10863: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10872,7 +10875,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10876: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10879: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10894,13 +10897,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10898: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10901: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10914,7 +10917,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10918: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10935,16 +10938,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10939: checking for test routines" >&5 +echo "configure:10942: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10958,7 +10961,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10962: checking for ftruncate extend" >&5 +echo "configure:10965: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10967,11 +10970,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10978: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10994,7 +10997,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:10998: checking for AF_LOCAL socket support" >&5 +echo "configure:11001: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11003,11 +11006,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11031,7 +11034,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11035: checking for broken getgroups" >&5 +echo "configure:11038: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11040,11 +11043,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11067,7 +11070,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11071: checking whether getpass should be replaced" >&5 +echo "configure:11074: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11075,7 +11078,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11095: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11111,7 +11114,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11115: checking for broken inet_ntoa" >&5 +echo "configure:11118: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11120,7 +11123,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11134,7 +11137,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11157,7 +11160,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11161: checking for secure mkstemp" >&5 +echo "configure:11164: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11166,7 +11169,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11183,7 +11186,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11206,7 +11209,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11210: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11213: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11215,12 +11218,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11243,7 +11246,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11247: checking for root" >&5 +echo "configure:11250: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11252,11 +11255,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11284,7 +11287,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11288: checking for iface AIX" >&5 +echo "configure:11291: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11293,7 +11296,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11325,7 +11328,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11329: checking for iface ifconf" >&5 +echo "configure:11332: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11334,7 +11337,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11367,7 +11370,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11371: checking for iface ifreq" >&5 +echo "configure:11374: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11376,7 +11379,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11413,7 +11416,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11417: checking for setresuid" >&5 +echo "configure:11420: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11422,7 +11425,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11456,7 +11459,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11460: checking for setreuid" >&5 +echo "configure:11463: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11465,7 +11468,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11498,7 +11501,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11502: checking for seteuid" >&5 +echo "configure:11505: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11507,7 +11510,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11540,7 +11543,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11544: checking for setuidx" >&5 +echo "configure:11547: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11549,7 +11552,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11582,7 +11585,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11586: checking for working mmap" >&5 +echo "configure:11589: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11591,11 +11594,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11618,7 +11621,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11622: checking for ftruncate needs root" >&5 +echo "configure:11625: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11627,11 +11630,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11654,7 +11657,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11658: checking for fcntl locking" >&5 +echo "configure:11661: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11663,11 +11666,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11690,7 +11693,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11694: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11697: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11699,11 +11702,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11710: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11728,7 +11731,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11732: checking for 64 bit fcntl locking" >&5 +echo "configure:11735: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11737,7 +11740,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11786,13 +11789,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11790: checking for st_blocks in struct stat" >&5 +echo "configure:11793: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11801,7 +11804,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11805: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11808: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11822,13 +11825,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11826: checking for st_blksize in struct stat" >&5 +echo "configure:11829: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11837,7 +11840,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11841: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11844: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11860,13 +11863,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11864: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11867: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11887: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11903,13 +11906,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11907: checking for broken nisplus include files" >&5 +echo "configure:11910: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11919,7 +11922,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11943,7 +11946,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11947: checking whether to use smbwrapper" >&5 +echo "configure:11950: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11990,7 +11993,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11994: checking whether to use AFS clear-text auth" >&5 +echo "configure:11997: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12016,7 +12019,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12020: checking whether to use DFS clear-text auth" >&5 +echo "configure:12023: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12042,7 +12045,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12046: checking for /usr/kerberos" >&5 +echo "configure:12049: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12055,7 +12058,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12059: checking for kerberos 5 install path" >&5 +echo "configure:12062: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12084,17 +12087,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12088: checking for $ac_hdr" >&5 +echo "configure:12091: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12098: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12101: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12127,17 +12130,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12131: checking for $ac_hdr" >&5 +echo "configure:12134: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12141: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12144: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12167,7 +12170,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12171: checking for _et_list in -lcom_err" >&5 +echo "configure:12174: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12175,7 +12178,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12193: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12207,7 +12210,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12211: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12214: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12215,7 +12218,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12251,7 +12254,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12255: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12258: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12259,7 +12262,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12298,7 +12301,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12302: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12305: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12306,7 +12309,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12324: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12346,7 +12349,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12350: checking for ber_scanf in -llber" >&5 +echo "configure:12353: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12354,7 +12357,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12390,7 +12393,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12394: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12397: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12398,7 +12401,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12440,12 +12443,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12444: checking for $ac_func" >&5 +echo "configure:12447: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12475: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12493,13 +12496,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12497: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12500: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12508,7 +12511,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12512: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12530,7 +12533,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12534: checking whether to use AUTOMOUNT" >&5 +echo "configure:12537: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12555,7 +12558,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12559: checking whether to use SMBMOUNT" >&5 +echo "configure:12562: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12592,7 +12595,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12596: checking whether to use PAM" >&5 +echo "configure:12599: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12618,7 +12621,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12622: checking for pam_get_data in -lpam" >&5 +echo "configure:12625: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12626,7 +12629,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12664,7 +12667,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12668: checking whether to use pam_smbpass" >&5 +echo "configure:12671: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12702,12 +12705,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12706: checking for $ac_func" >&5 +echo "configure:12709: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12756,7 +12759,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12760: checking for crypt in -lcrypt" >&5 +echo "configure:12763: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12764,7 +12767,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12810,7 +12813,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12814: checking for a crypt that needs truncated salt" >&5 +echo "configure:12817: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12819,11 +12822,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12849,7 +12852,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12853: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12856: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12881,7 +12884,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12885: checking whether to use TDB SAM database" >&5 +echo "configure:12888: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12906,7 +12909,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12910: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12913: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12937,7 +12940,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12941: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12944: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12962,7 +12965,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12966: checking whether to use syslog logging" >&5 +echo "configure:12969: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12987,7 +12990,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12991: checking whether to use profiling" >&5 +echo "configure:12994: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13015,7 +13018,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13019: checking whether to support disk-quotas" >&5 +echo "configure:13022: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13026,13 +13029,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13030: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13033: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13044,7 +13047,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13048: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13093,7 +13096,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13097: checking whether to support utmp accounting" >&5 +echo "configure:13100: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13118,7 +13121,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13122: checking chosen man pages' language(s)" >&5 +echo "configure:13125: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13149,7 +13152,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13153: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13156: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13177,14 +13180,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13181: checking how to get filesystem space usage" >&5 +echo "configure:13184: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13188: checking statvfs64 function (SVR4)" >&5 +echo "configure:13191: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13192,7 +13195,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13213: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13239,12 +13242,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13243: checking statvfs function (SVR4)" >&5 +echo "configure:13246: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13252,7 +13255,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13277,7 +13280,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13281: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13284: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13285,7 +13288,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13298,7 +13301,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13325,7 +13328,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13329: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13332: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13333,7 +13336,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13379,7 +13382,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13383: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13386: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13387,7 +13390,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13397,7 +13400,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13424,7 +13427,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13428: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13431: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13432,7 +13435,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13448,7 +13451,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13475,7 +13478,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13479: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13482: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13483,7 +13486,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13503,7 +13506,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13536,9 +13539,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13540: checking if large file support can be enabled" >&5 +echo "configure:13543: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13558: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13616,7 +13619,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13620: checking whether to support ACLs" >&5 +echo "configure:13623: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13669,7 +13672,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13673: checking for acl_get_file in -lacl" >&5 +echo "configure:13676: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13677,7 +13680,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13716,13 +13719,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13720: checking for ACL support" >&5 +echo "configure:13723: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13730,7 +13733,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13750,13 +13753,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13754: checking for acl_get_perm_np" >&5 +echo "configure:13757: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13764,7 +13767,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13809,7 +13812,7 @@ fi # check for sendfile support echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 -echo "configure:13813: checking whether to support sendfile" >&5 +echo "configure:13816: checking whether to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -13819,13 +13822,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:13823: checking for linux sendfile64 support" >&5 +echo "configure:13826: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13837,7 +13840,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -13852,13 +13855,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:13856: checking for linux sendfile support" >&5 +echo "configure:13859: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13870,7 +13873,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -13886,13 +13889,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:13890: checking for broken linux sendfile support" >&5 +echo "configure:13893: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -13964,13 +13967,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:13968: checking for freebsd sendfile support" >&5 +echo "configure:13971: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -13992,7 +13995,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:13996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14044,7 +14047,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:14048: checking whether to build winbind" >&5 +echo "configure:14051: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14140,20 +14143,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14144: checking whether struct passwd has pw_comment" >&5 +echo "configure:14147: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14178,20 +14181,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14182: checking whether struct passwd has pw_age" >&5 +echo "configure:14185: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14230,7 +14233,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14234: checking for poptGetContext in -lpopt" >&5 +echo "configure:14237: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14238,7 +14241,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14273,7 +14276,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14277: checking whether to use included popt" >&5 +echo "configure:14280: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14296,7 +14299,14 @@ fi # Check whether --with-python or --without-python was given. if test "${with_python+set}" = set; then withval="$with_python" - PYTHON=${withval-python} + case "${withval-python}" in + yes) + PYTHON=python + ;; + *) + PYTHON=${withval-python} + ;; + esac fi @@ -14312,16 +14322,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14316: checking configure summary" >&5 +echo "configure:14326: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else -- cgit From edb6172abf0f07fead8ed3aaaebe0411d757aa64 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 17 Sep 2002 05:38:12 +0000 Subject: Added --with-ads option, defaults to yes. If you run ./configure --with-ads=no or ./configure --without-ads Samba will build without linking to the various kerberos libraries. --- source/acconfig.h | 2 + source/configure.in | 114 +++++++++++++++++++++++++++------------------ source/include/config.h.in | 3 +- source/include/includes.h | 4 +- 4 files changed, 74 insertions(+), 49 deletions(-) diff --git a/source/acconfig.h b/source/acconfig.h index 40a3a7cee19..21c6e330760 100644 --- a/source/acconfig.h +++ b/source/acconfig.h @@ -228,3 +228,5 @@ #undef LINUX_BROKEN_SENDFILE_API #undef WITH_SENDFILE #undef FREEBSD_SENDFILE_API +#undef WITH_ADS + diff --git a/source/configure.in b/source/configure.in index 0e4e910f0c7..fe697e4209e 100644 --- a/source/configure.in +++ b/source/configure.in @@ -1936,63 +1936,85 @@ AC_ARG_WITH(dfs, AC_MSG_RESULT(no) ) - ################################################# -# see if this box has the RedHat location for kerberos -AC_MSG_CHECKING(for /usr/kerberos) -if test -d /usr/kerberos; then +# active directory support + +with_ads_support=yes +AC_MSG_CHECKING([whether to use Active Directory]) + +AC_ARG_WITH(ads, +[ --with-ads Active Directory support (default yes)], +[ case "$withval" in + no) + with_ads_support=no + ;; + esac ]) + +if test x"$with_ads_support" = x"yes"; then + AC_DEFINE(WITH_ADS) +fi + +AC_MSG_RESULT($with_ads_support) + +if test x"$with_ads_support" = x"yes"; then + + ################################################# + # see if this box has the RedHat location for kerberos + AC_MSG_CHECKING(for /usr/kerberos) + if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include" AC_MSG_RESULT(yes) -else + else AC_MSG_RESULT(no) -fi + fi -################################################# -# check for location of Kerberos 5 install -AC_MSG_CHECKING(for kerberos 5 install path) -AC_ARG_WITH(krb5, -[ --with-krb5=base-dir Locate Kerberos 5 support (default=/usr)], -[ case "$withval" in - no) + ################################################# + # check for location of Kerberos 5 install + AC_MSG_CHECKING(for kerberos 5 install path) + AC_ARG_WITH(krb5, + [ --with-krb5=base-dir Locate Kerberos 5 support (default=/usr)], + [ case "$withval" in + no) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + LIBS="$LIBS -lkrb5" + CFLAGS="$CFLAGS -I$withval/include" + CPPFLAGS="$CPPFLAGS -I$withval/include" + LDFLAGS="$LDFLAGS -L$withval/lib" + ;; + esac ], AC_MSG_RESULT(no) - ;; - *) - AC_MSG_RESULT(yes) - LIBS="$LIBS -lkrb5" - CFLAGS="$CFLAGS -I$withval/include" - CPPFLAGS="$CPPFLAGS -I$withval/include" - LDFLAGS="$LDFLAGS -L$withval/lib" - ;; - esac ], - AC_MSG_RESULT(no) -) - -# now check for krb5.h. Some systems have the libraries without the headers! -# note that this check is done here to allow for different kerberos -# include paths -AC_CHECK_HEADERS(krb5.h) - -# now check for gssapi headers. This is also done here to allow for -# different kerberos include paths -AC_CHECK_HEADERS(gssapi/gssapi_generic.h gssapi/gssapi.h) - -################################################################## -# we might need the k5crypto and com_err libraries on some systems -AC_CHECK_LIB(com_err, _et_list, [LIBS="$LIBS -lcom_err"]) -AC_CHECK_LIB(k5crypto, krb5_encrypt_data, [LIBS="$LIBS -lk5crypto"]) - -######################################################## -# now see if we can find the krb5 libs in standard paths -# or as specified above -AC_CHECK_LIB(krb5, krb5_mk_req_extended, [LIBS="$LIBS -lkrb5"; + ) + + # now check for krb5.h. Some systems have the libraries without the headers! + # note that this check is done here to allow for different kerberos + # include paths + AC_CHECK_HEADERS(krb5.h) + + # now check for gssapi headers. This is also done here to allow for + # different kerberos include paths + AC_CHECK_HEADERS(gssapi/gssapi_generic.h gssapi/gssapi.h) + + ################################################################## + # we might need the k5crypto and com_err libraries on some systems + AC_CHECK_LIB(com_err, _et_list, [LIBS="$LIBS -lcom_err"]) + AC_CHECK_LIB(k5crypto, krb5_encrypt_data, [LIBS="$LIBS -lk5crypto"]) + + ######################################################## + # now see if we can find the krb5 libs in standard paths + # or as specified above + AC_CHECK_LIB(krb5, krb5_mk_req_extended, [LIBS="$LIBS -lkrb5"; AC_DEFINE(HAVE_KRB5)]) -######################################################## -# now see if we can find the gssapi libs in standard paths -AC_CHECK_LIB(gssapi_krb5, gss_display_status, [LIBS="$LIBS -lgssapi_krb5"; + ######################################################## + # now see if we can find the gssapi libs in standard paths + AC_CHECK_LIB(gssapi_krb5, gss_display_status, [LIBS="$LIBS -lgssapi_krb5"; AC_DEFINE(HAVE_GSSAPI)]) +fi ################################################################## # we might need the lber lib on some systems. To avoid link errors diff --git a/source/include/config.h.in b/source/include/config.h.in index 9fbde2bf375..8e744e43f7e 100644 --- a/source/include/config.h.in +++ b/source/include/config.h.in @@ -1,4 +1,4 @@ -/* include/config.h.in. Generated automatically from configure.in by autoheader. */ +/* include/config.h.in. Generated automatically from configure.in by autoheader 2.13. */ /* Define if on AIX 3. System headers sometimes define this. @@ -294,6 +294,7 @@ #undef LINUX_BROKEN_SENDFILE_API #undef WITH_SENDFILE #undef FREEBSD_SENDFILE_API +#undef WITH_ADS /* The number of bytes in a int. */ #undef SIZEOF_INT diff --git a/source/include/includes.h b/source/include/includes.h index eaa0d25239c..bdf5bbcef36 100644 --- a/source/include/includes.h +++ b/source/include/includes.h @@ -420,8 +420,8 @@ #include #endif -/* we support ADS if we have krb5 and ldap libs */ -#if defined(HAVE_KRB5) && defined(HAVE_LDAP) +/* we support ADS if we want it and have krb5 and ldap libs */ +#if defined(WITH_ADS) && defined(HAVE_KRB5) && defined(HAVE_LDAP) #define HAVE_ADS #endif -- cgit From c7d4bfde737c5aeda14b72e48197bb2a9a02bbd8 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 17 Sep 2002 05:38:44 +0000 Subject: Rerun configure. --- source/configure | 1755 +++++++++++++++++++++++++++--------------------------- 1 file changed, 893 insertions(+), 862 deletions(-) diff --git a/source/configure b/source/configure index 8caba2b6c46..ced279d410f 100755 --- a/source/configure +++ b/source/configure @@ -46,6 +46,8 @@ ac_help="$ac_help --with-afs Include AFS clear-text auth support (default=no) " ac_help="$ac_help --with-dce-dfs Include DCE/DFS clear-text auth support (default=no)" +ac_help="$ac_help + --with-ads Active Directory support (default yes)" ac_help="$ac_help --with-krb5=base-dir Locate Kerberos 5 support (default=/usr)" ac_help="$ac_help @@ -820,7 +822,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:824: checking for $ac_word" >&5 +echo "configure:826: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -850,7 +852,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:854: checking for $ac_word" >&5 +echo "configure:856: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -901,7 +903,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:905: checking for $ac_word" >&5 +echo "configure:907: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -933,7 +935,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:937: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:939: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -944,12 +946,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 948 "configure" +#line 950 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -975,12 +977,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:979: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:981: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:984: checking whether we are using GNU C" >&5 +echo "configure:986: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -989,7 +991,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:993: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:995: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1008,7 +1010,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1012: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1014: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1070,7 +1072,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1074: checking for a BSD compatible install" >&5 +echo "configure:1076: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1127,7 +1129,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1131: checking for $ac_word" >&5 +echo "configure:1133: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1159,7 +1161,7 @@ done LD=ld echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1163: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1165: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1175,7 +1177,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1179: checking for POSIXized ISC" >&5 +echo "configure:1181: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1198,10 +1200,10 @@ fi if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:1202: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:1204: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:1205: checking whether cc understands -c and -o together" >&5 +echo "configure:1207: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -1213,16 +1215,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:1217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1218: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1225: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:1225: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1226: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:1227: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1228: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -1256,20 +1258,20 @@ fi echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6 -echo "configure:1260: checking that the C compiler understands volatile" >&5 +echo "configure:1262: checking that the C compiler understands volatile" >&5 if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { volatile int i = 0 ; return 0; } EOF -if { (eval echo configure:1273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1275: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_volatile=yes else @@ -1318,7 +1320,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1322: checking host system type" >&5 +echo "configure:1324: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1339,7 +1341,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1343: checking target system type" >&5 +echo "configure:1345: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1357,7 +1359,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1361: checking build system type" >&5 +echo "configure:1363: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1391,7 +1393,7 @@ esac echo $ac_n "checking config.cache system type""... $ac_c" 1>&6 -echo "configure:1395: checking config.cache system type" >&5 +echo "configure:1397: checking config.cache system type" >&5 if { test x"${ac_cv_host_system_type+set}" = x"set" && test x"$ac_cv_host_system_type" != x"$host"; } || { test x"${ac_cv_build_system_type+set}" = x"set" && @@ -1419,7 +1421,7 @@ case "$host_os" in *hpux*) echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6 -echo "configure:1423: checking whether ${CC-cc} accepts -Ae" >&5 +echo "configure:1425: checking whether ${CC-cc} accepts -Ae" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1580,14 +1582,14 @@ EOF *sysv4*) if test $host = mips-sni-sysv4 ; then echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1584: checking for LFS support" >&5 +echo "configure:1586: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then SINIX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1599,7 +1601,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then SINIX_LFS_SUPPORT=yes else @@ -1630,14 +1632,14 @@ EOF # *linux*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1634: checking for LFS support" >&5 +echo "configure:1636: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then LINUX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1675,7 +1677,7 @@ main() { } EOF -if { (eval echo configure:1679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then LINUX_LFS_SUPPORT=yes else @@ -1708,14 +1710,14 @@ EOF *hurd*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1712: checking for LFS support" >&5 +echo "configure:1714: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then GLIBC_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1727,7 +1729,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then GLIBC_LFS_SUPPORT=yes else @@ -1757,21 +1759,21 @@ EOF esac echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1761: checking for inline" >&5 +echo "configure:1763: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -1797,7 +1799,7 @@ EOF esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1801: checking how to run the C preprocessor" >&5 +echo "configure:1803: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1812,13 +1814,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1822: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1829,13 +1831,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1839: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1841: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1846,13 +1848,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1856: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1858: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1877,12 +1879,12 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1881: checking for ANSI C header files" >&5 +echo "configure:1883: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1890,7 +1892,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1894: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1896: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1907,7 +1909,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1925,7 +1927,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1946,7 +1948,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1957,7 +1959,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1985,12 +1987,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1989: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1991: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -1998,7 +2000,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:2002: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2004: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2023,7 +2025,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2027: checking for opendir in -ldir" >&5 +echo "configure:2029: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2031,7 +2033,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2064,7 +2066,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2068: checking for opendir in -lx" >&5 +echo "configure:2070: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2072,7 +2074,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2106,12 +2108,12 @@ fi fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2110: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2112: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2120,7 +2122,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2124: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2126: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2141,12 +2143,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2145: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2147: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2162,7 +2164,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2166: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2186,17 +2188,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2190: checking for $ac_hdr" >&5 +echo "configure:2192: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2200: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2202: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2226,17 +2228,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2230: checking for $ac_hdr" >&5 +echo "configure:2232: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2240: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2242: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2266,17 +2268,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2270: checking for $ac_hdr" >&5 +echo "configure:2272: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2280: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2282: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2306,17 +2308,17 @@ for ac_hdr in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2310: checking for $ac_hdr" >&5 +echo "configure:2312: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2320: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2322: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2346,17 +2348,17 @@ for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h std do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2350: checking for $ac_hdr" >&5 +echo "configure:2352: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2360: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2362: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2386,17 +2388,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2390: checking for $ac_hdr" >&5 +echo "configure:2392: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2400: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2402: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2426,17 +2428,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2430: checking for $ac_hdr" >&5 +echo "configure:2432: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2440: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2442: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2466,17 +2468,17 @@ for ac_hdr in security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2470: checking for $ac_hdr" >&5 +echo "configure:2472: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2480: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2482: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2506,17 +2508,17 @@ for ac_hdr in sys/syslog.h syslog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2510: checking for $ac_hdr" >&5 +echo "configure:2512: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2520: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2522: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2550,14 +2552,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2561: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2563: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2579,17 +2581,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2583: checking for $ac_hdr" >&5 +echo "configure:2585: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2593: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2595: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2619,17 +2621,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2623: checking for $ac_hdr" >&5 +echo "configure:2625: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2633: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2635: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2659,17 +2661,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2663: checking for $ac_hdr" >&5 +echo "configure:2665: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2673: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2675: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2699,17 +2701,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2703: checking for $ac_hdr" >&5 +echo "configure:2705: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2713: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2739,17 +2741,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2743: checking for $ac_hdr" >&5 +echo "configure:2745: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2753: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2755: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2781,17 +2783,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2785: checking for $ac_hdr" >&5 +echo "configure:2787: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2795: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2823,17 +2825,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2827: checking for $ac_hdr" >&5 +echo "configure:2829: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2839: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2865,17 +2867,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2869: checking for $ac_hdr" >&5 +echo "configure:2871: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2879: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2881: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2903,7 +2905,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2907: checking size of int" >&5 +echo "configure:2909: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2911,7 +2913,7 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < #include @@ -2923,7 +2925,7 @@ main() exit(0); } EOF -if { (eval echo configure:2927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2943,7 +2945,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2947: checking size of long" >&5 +echo "configure:2949: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2951,7 +2953,7 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < #include @@ -2963,7 +2965,7 @@ main() exit(0); } EOF -if { (eval echo configure:2967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2983,7 +2985,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2987: checking size of short" >&5 +echo "configure:2989: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2991,7 +2993,7 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < #include @@ -3003,7 +3005,7 @@ main() exit(0); } EOF -if { (eval echo configure:3007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3024,12 +3026,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3028: checking for working const" >&5 +echo "configure:3030: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3084: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3099,21 +3101,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3103: checking for inline" >&5 +echo "configure:3105: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3119: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3139,14 +3141,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3143: checking whether byte ordering is bigendian" >&5 +echo "configure:3145: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3157,11 +3159,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3161: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3172,7 +3174,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3176: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3178: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3192,7 +3194,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3229,14 +3231,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3233: checking whether char is unsigned" >&5 +echo "configure:3235: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3293,12 +3295,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3297: checking return type of signal handlers" >&5 +echo "configure:3299: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3315,7 +3317,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3321: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3334,12 +3336,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3338: checking for uid_t in sys/types.h" >&5 +echo "configure:3340: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3368,12 +3370,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3372: checking for mode_t" >&5 +echo "configure:3374: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3401,12 +3403,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3405: checking for off_t" >&5 +echo "configure:3407: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3434,12 +3436,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3438: checking for size_t" >&5 +echo "configure:3440: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3467,12 +3469,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3471: checking for pid_t" >&5 +echo "configure:3473: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3500,12 +3502,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3504: checking for st_rdev in struct stat" >&5 +echo "configure:3506: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3513,7 +3515,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3517: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3519: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3534,12 +3536,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3538: checking for d_off in dirent" >&5 +echo "configure:3540: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3549,7 +3551,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3553: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3570,12 +3572,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3574: checking for ino_t" >&5 +echo "configure:3576: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3603,12 +3605,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3607: checking for loff_t" >&5 +echo "configure:3609: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3636,12 +3638,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3640: checking for offset_t" >&5 +echo "configure:3642: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3669,12 +3671,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3673: checking for ssize_t" >&5 +echo "configure:3675: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3702,12 +3704,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3706: checking for wchar_t" >&5 +echo "configure:3708: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3749,7 +3751,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3753: checking for $ac_word" >&5 +echo "configure:3755: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3798,12 +3800,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3802: checking for $ac_func" >&5 +echo "configure:3804: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3852,7 +3854,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3856: checking for dlopen in -ldl" >&5 +echo "configure:3858: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3860,7 +3862,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3901,13 +3903,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3905: checking for immediate structures" >&5 +echo "configure:3907: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3925,7 +3927,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3929: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3931: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3948,13 +3950,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3952: checking for unix domain sockets" >&5 +echo "configure:3954: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3969,7 +3971,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3973: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3975: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3991,13 +3993,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3995: checking for socklen_t type" >&5 +echo "configure:3997: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4010,7 +4012,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4014: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4016: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4031,13 +4033,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4035: checking for sig_atomic_t type" >&5 +echo "configure:4037: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4050,7 +4052,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4054: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4056: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4073,20 +4075,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4077: checking for errno declaration" >&5 +echo "configure:4079: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4092: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4108,20 +4110,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4112: checking for setresuid declaration" >&5 +echo "configure:4114: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4127: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4143,20 +4145,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4147: checking for setresgid declaration" >&5 +echo "configure:4149: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4178,20 +4180,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4182: checking for asprintf declaration" >&5 +echo "configure:4184: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4197: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4213,20 +4215,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4217: checking for vasprintf declaration" >&5 +echo "configure:4219: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4230: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4232: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4248,20 +4250,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4252: checking for vsnprintf declaration" >&5 +echo "configure:4254: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4267: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4283,20 +4285,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4287: checking for snprintf declaration" >&5 +echo "configure:4289: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4302: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4320,7 +4322,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4324: checking for real setresuid" >&5 +echo "configure:4326: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4329,12 +4331,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4359,7 +4361,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4363: checking for real setresgid" >&5 +echo "configure:4365: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4368,13 +4370,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4397,7 +4399,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4401: checking for 8-bit clean memcmp" >&5 +echo "configure:4403: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4405,7 +4407,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4438,12 +4440,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4442: checking for $ac_func" >&5 +echo "configure:4444: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4492,7 +4494,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4496: checking for crypt in -lcrypt" >&5 +echo "configure:4498: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4500,7 +4502,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4544,7 +4546,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4548: checking whether to use readline" >&5 +echo "configure:4550: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4556,17 +4558,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4560: checking for $ac_hdr" >&5 +echo "configure:4562: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4570: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4572: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4596,17 +4598,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4600: checking for $ac_hdr" >&5 +echo "configure:4602: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4610: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4612: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4637,17 +4639,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4641: checking for $ac_hdr" >&5 +echo "configure:4643: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4651: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4653: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4670,7 +4672,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4674: checking for tgetent in -l${termlib}" >&5 +echo "configure:4676: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4678,7 +4680,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4711,7 +4713,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4715: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4717: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4719,7 +4721,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4781,17 +4783,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4785: checking for $ac_hdr" >&5 +echo "configure:4787: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4795: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4821,17 +4823,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4825: checking for $ac_hdr" >&5 +echo "configure:4827: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4862,17 +4864,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4866: checking for $ac_hdr" >&5 +echo "configure:4868: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4876: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4878: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4895,7 +4897,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4899: checking for tgetent in -l${termlib}" >&5 +echo "configure:4901: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4903,7 +4905,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4936,7 +4938,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4940: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4942: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4944,7 +4946,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5005,7 +5007,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5009: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5011: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5013,7 +5015,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5057,12 +5059,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5061: checking for $ac_func" >&5 +echo "configure:5063: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5113,7 +5115,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5117: checking for printf in -lnsl_s" >&5 +echo "configure:5119: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5121,7 +5123,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5163,7 +5165,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5167: checking for printf in -lnsl" >&5 +echo "configure:5169: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5171,7 +5173,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5213,7 +5215,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5217: checking for connect in -lsocket" >&5 +echo "configure:5219: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5221,7 +5223,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5263,7 +5265,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5267: checking for connect in -linet" >&5 +echo "configure:5269: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5271,7 +5273,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5288: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5326,12 +5328,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5330: checking for $ac_func" >&5 +echo "configure:5332: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5380,7 +5382,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5384: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5386: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5388,7 +5390,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5429,12 +5431,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5433: checking for $ac_func" >&5 +echo "configure:5435: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5490,12 +5492,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5494: checking for $ac_func" >&5 +echo "configure:5496: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5545,12 +5547,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5549: checking for $ac_func" >&5 +echo "configure:5551: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5600,12 +5602,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5604: checking for $ac_func" >&5 +echo "configure:5606: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5634: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5655,12 +5657,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5659: checking for $ac_func" >&5 +echo "configure:5661: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5710,12 +5712,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5714: checking for $ac_func" >&5 +echo "configure:5716: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5744: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5765,12 +5767,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5769: checking for $ac_func" >&5 +echo "configure:5771: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5799: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5820,12 +5822,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5824: checking for $ac_func" >&5 +echo "configure:5826: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5875,12 +5877,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5879: checking for $ac_func" >&5 +echo "configure:5881: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5909: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5930,12 +5932,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5934: checking for $ac_func" >&5 +echo "configure:5936: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5964: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5985,12 +5987,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5989: checking for $ac_func" >&5 +echo "configure:5991: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6041,12 +6043,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6045: checking for $ac_func" >&5 +echo "configure:6047: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6098,12 +6100,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6102: checking for $ac_func" >&5 +echo "configure:6104: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6154,12 +6156,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6158: checking for $ac_func" >&5 +echo "configure:6160: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6209,12 +6211,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6213: checking for $ac_func" >&5 +echo "configure:6215: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6264,12 +6266,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6268: checking for $ac_func" >&5 +echo "configure:6270: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6319,12 +6321,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6323: checking for $ac_func" >&5 +echo "configure:6325: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6374,12 +6376,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6378: checking for $ac_func" >&5 +echo "configure:6380: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6429,12 +6431,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6433: checking for $ac_func" >&5 +echo "configure:6435: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6484,12 +6486,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6488: checking for $ac_func" >&5 +echo "configure:6490: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6539,12 +6541,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6543: checking for $ac_func" >&5 +echo "configure:6545: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6594,12 +6596,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6598: checking for $ac_func" >&5 +echo "configure:6600: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6649,12 +6651,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6653: checking for $ac_func" >&5 +echo "configure:6655: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6704,12 +6706,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6708: checking for $ac_func" >&5 +echo "configure:6710: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6759,12 +6761,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6763: checking for $ac_func" >&5 +echo "configure:6765: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6814,12 +6816,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6818: checking for $ac_func" >&5 +echo "configure:6820: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6869,12 +6871,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6873: checking for $ac_func" >&5 +echo "configure:6875: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6928,9 +6930,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6932: checking for stat64 in " >&5 +echo "configure:6934: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6961,9 +6963,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6965: checking for lstat64 in " >&5 +echo "configure:6967: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6994,9 +6996,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6998: checking for fstat64 in " >&5 +echo "configure:7000: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7028,7 +7030,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7032: checking for dn_expand in -lresolv" >&5 +echo "configure:7034: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7036,7 +7038,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7053: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7085,12 +7087,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7089: checking for $ac_func" >&5 +echo "configure:7091: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7138,7 +7140,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7142: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7144: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7146,7 +7148,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7163: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7187,12 +7189,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7191: checking for $ac_func" >&5 +echo "configure:7193: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7246,12 +7248,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7250: checking for $ac_func" >&5 +echo "configure:7252: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7299,7 +7301,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7303: checking for putprpwnam in -lsec" >&5 +echo "configure:7305: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7307,7 +7309,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7324: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7348,12 +7350,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7352: checking for $ac_func" >&5 +echo "configure:7354: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7408,12 +7410,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7412: checking for $ac_func" >&5 +echo "configure:7414: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7442: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7461,7 +7463,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7465: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7467: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7469,7 +7471,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7510,12 +7512,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7514: checking for $ac_func" >&5 +echo "configure:7516: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7569,12 +7571,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7573: checking for $ac_func" >&5 +echo "configure:7575: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7622,7 +7624,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7626: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7628: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7630,7 +7632,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7671,12 +7673,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7675: checking for $ac_func" >&5 +echo "configure:7677: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7705: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7732,12 +7734,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7736: checking for $ac_func" >&5 +echo "configure:7738: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7785,7 +7787,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7789: checking for getspnam in -lgen" >&5 +echo "configure:7791: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7793,7 +7795,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7810: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7834,12 +7836,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7838: checking for $ac_func" >&5 +echo "configure:7840: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7894,12 +7896,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7898: checking for $ac_func" >&5 +echo "configure:7900: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7947,7 +7949,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7951: checking for getspnam in -lsecurity" >&5 +echo "configure:7953: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7955,7 +7957,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7996,12 +7998,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8000: checking for $ac_func" >&5 +echo "configure:8002: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8055,12 +8057,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8059: checking for $ac_func" >&5 +echo "configure:8061: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8108,7 +8110,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8112: checking for getspnam in -lsec" >&5 +echo "configure:8114: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8116,7 +8118,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8157,12 +8159,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8161: checking for $ac_func" >&5 +echo "configure:8163: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8217,12 +8219,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8221: checking for $ac_func" >&5 +echo "configure:8223: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8270,7 +8272,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8274: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8276: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8278,7 +8280,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8319,12 +8321,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8323: checking for $ac_func" >&5 +echo "configure:8325: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8378,12 +8380,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8382: checking for $ac_func" >&5 +echo "configure:8384: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8431,7 +8433,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8435: checking for bigcrypt in -lsec" >&5 +echo "configure:8437: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8439,7 +8441,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8480,12 +8482,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8484: checking for $ac_func" >&5 +echo "configure:8486: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8540,12 +8542,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8544: checking for $ac_func" >&5 +echo "configure:8546: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8593,7 +8595,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8597: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8599: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8601,7 +8603,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8618: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8642,12 +8644,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8646: checking for $ac_func" >&5 +echo "configure:8648: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8701,12 +8703,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8705: checking for $ac_func" >&5 +echo "configure:8707: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8754,7 +8756,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8758: checking for getprpwnam in -lsec" >&5 +echo "configure:8760: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8762,7 +8764,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8803,12 +8805,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8807: checking for $ac_func" >&5 +echo "configure:8809: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8837: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8875,7 +8877,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8879: checking ability to build shared libraries" >&5 +echo "configure:8881: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9035,7 +9037,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9039: checking for $ac_word" >&5 +echo "configure:9041: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9092,17 +9094,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9096: checking linker flags for shared libraries" >&5 +echo "configure:9098: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9099: checking compiler flags for position-independent code" >&5 +echo "configure:9101: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9106: checking whether building shared libraries actually works" >&5 +echo "configure:9108: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9133,7 +9135,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9137: checking for long long" >&5 +echo "configure:9139: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9142,12 +9144,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9174,20 +9176,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9178: checking for LL suffix on long long integers" >&5 +echo "configure:9180: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9209,7 +9211,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9213: checking for 64 bit off_t" >&5 +echo "configure:9215: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9218,13 +9220,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9247,7 +9249,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9251: checking for off64_t" >&5 +echo "configure:9253: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9256,7 +9258,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9289,7 +9291,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9293: checking for 64 bit ino_t" >&5 +echo "configure:9295: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9298,13 +9300,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9327,7 +9329,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9331: checking for ino64_t" >&5 +echo "configure:9333: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9336,7 +9338,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9369,7 +9371,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9373: checking for dev64_t" >&5 +echo "configure:9375: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9378,7 +9380,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9411,13 +9413,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9415: checking for struct dirent64" >&5 +echo "configure:9417: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9435: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9450,7 +9452,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9454: checking for major macro" >&5 +echo "configure:9456: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9459,7 +9461,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9491,7 +9493,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9495: checking for minor macro" >&5 +echo "configure:9497: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9500,7 +9502,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9532,7 +9534,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9536: checking for unsigned char" >&5 +echo "configure:9538: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9541,12 +9543,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9550: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9569,13 +9571,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9573: checking for sin_len in sock" >&5 +echo "configure:9575: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9584,7 +9586,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9588: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9590: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9605,13 +9607,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9609: checking whether seekdir returns void" >&5 +echo "configure:9611: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9620,7 +9622,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9624: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9626: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9641,20 +9643,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9645: checking for __FILE__ macro" >&5 +echo "configure:9647: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9658: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9660: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9675,20 +9677,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9679: checking for __FUNCTION__ macro" >&5 +echo "configure:9681: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9692: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9694: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9709,7 +9711,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9713: checking if gettimeofday takes tz argument" >&5 +echo "configure:9715: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9718,14 +9720,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9748,13 +9750,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9752: checking for __va_copy" >&5 +echo "configure:9754: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9762,7 +9764,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9783,7 +9785,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9787: checking for C99 vsnprintf" >&5 +echo "configure:9789: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9792,7 +9794,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9819,7 +9821,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9842,7 +9844,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9846: checking for broken readdir" >&5 +echo "configure:9848: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9851,7 +9853,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9859,7 +9861,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9882,13 +9884,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9886: checking for utimbuf" >&5 +echo "configure:9888: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9896,7 +9898,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9900: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9902: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9920,12 +9922,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9924: checking for $ac_func" >&5 +echo "configure:9926: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9974,13 +9976,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9978: checking for ut_name in utmp" >&5 +echo "configure:9980: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9988,7 +9990,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9994: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10009,13 +10011,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10013: checking for ut_user in utmp" >&5 +echo "configure:10015: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10023,7 +10025,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10027: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10029: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10044,13 +10046,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10048: checking for ut_id in utmp" >&5 +echo "configure:10050: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10058,7 +10060,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10062: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10064: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10079,13 +10081,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10083: checking for ut_host in utmp" >&5 +echo "configure:10085: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10093,7 +10095,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10097: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10099: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10114,13 +10116,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10118: checking for ut_time in utmp" >&5 +echo "configure:10120: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10128,7 +10130,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10134: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10149,13 +10151,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10153: checking for ut_tv in utmp" >&5 +echo "configure:10155: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10163,7 +10165,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10167: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10169: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10184,13 +10186,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10188: checking for ut_type in utmp" >&5 +echo "configure:10190: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10198,7 +10200,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10202: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10204: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10219,13 +10221,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10223: checking for ut_pid in utmp" >&5 +echo "configure:10225: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10233,7 +10235,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10237: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10239: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10254,13 +10256,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10258: checking for ut_exit in utmp" >&5 +echo "configure:10260: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10268,7 +10270,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10274: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10289,13 +10291,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10293: checking for ut_addr in utmp" >&5 +echo "configure:10295: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10303,7 +10305,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10307: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10309: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10325,13 +10327,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10329: checking whether pututline returns pointer" >&5 +echo "configure:10331: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10339,7 +10341,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10345: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10361,13 +10363,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10365: checking for ut_syslen in utmpx" >&5 +echo "configure:10367: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10375,7 +10377,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10379: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10399,7 +10401,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10403: checking whether to use libiconv" >&5 +echo "configure:10405: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10412,7 +10414,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10416: checking for iconv_open in -liconv" >&5 +echo "configure:10418: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10420,7 +10422,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10474,7 +10476,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10478: checking for working iconv" >&5 +echo "configure:10480: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10483,7 +10485,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10494,7 +10496,7 @@ main() { } EOF -if { (eval echo configure:10498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10518,7 +10520,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10522: checking for Linux kernel oplocks" >&5 +echo "configure:10524: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10527,7 +10529,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10541,7 +10543,7 @@ main() { } EOF -if { (eval echo configure:10545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10564,7 +10566,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10568: checking for kernel change notify support" >&5 +echo "configure:10570: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10573,7 +10575,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10587,7 +10589,7 @@ main() { } EOF -if { (eval echo configure:10591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10610,7 +10612,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10614: checking for kernel share modes" >&5 +echo "configure:10616: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10619,7 +10621,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10635,7 +10637,7 @@ main() { } EOF -if { (eval echo configure:10639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10661,13 +10663,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10665: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10667: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10675,7 +10677,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10679: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10681: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10696,7 +10698,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10700: checking for irix specific capabilities" >&5 +echo "configure:10702: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10705,7 +10707,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10720,7 +10722,7 @@ main() { } EOF -if { (eval echo configure:10724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10748,13 +10750,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10752: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10754: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10764,7 +10766,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10768: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10770: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10785,13 +10787,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10789: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10791: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10801,7 +10803,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10805: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10807: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10822,13 +10824,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10826: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10828: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10838,7 +10840,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10844: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10859,13 +10861,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10863: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10865: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10875,7 +10877,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10879: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10881: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10897,13 +10899,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10901: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10903: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10917,7 +10919,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10938,16 +10940,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10942: checking for test routines" >&5 +echo "configure:10944: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10961,7 +10963,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10965: checking for ftruncate extend" >&5 +echo "configure:10967: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10970,11 +10972,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10997,7 +10999,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:11001: checking for AF_LOCAL socket support" >&5 +echo "configure:11003: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11006,11 +11008,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11034,7 +11036,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11038: checking for broken getgroups" >&5 +echo "configure:11040: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11043,11 +11045,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11053: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11070,7 +11072,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11074: checking whether getpass should be replaced" >&5 +echo "configure:11076: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11078,7 +11080,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11097: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11114,7 +11116,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11118: checking for broken inet_ntoa" >&5 +echo "configure:11120: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11123,7 +11125,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11137,7 +11139,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11160,7 +11162,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11164: checking for secure mkstemp" >&5 +echo "configure:11166: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11169,7 +11171,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11186,7 +11188,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11209,7 +11211,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11213: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11215: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11218,12 +11220,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11246,7 +11248,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11250: checking for root" >&5 +echo "configure:11252: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11255,11 +11257,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11287,7 +11289,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11291: checking for iface AIX" >&5 +echo "configure:11293: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11296,7 +11298,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11328,7 +11330,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11332: checking for iface ifconf" >&5 +echo "configure:11334: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11337,7 +11339,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11370,7 +11372,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11374: checking for iface ifreq" >&5 +echo "configure:11376: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11379,7 +11381,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11416,7 +11418,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11420: checking for setresuid" >&5 +echo "configure:11422: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11425,7 +11427,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11459,7 +11461,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11463: checking for setreuid" >&5 +echo "configure:11465: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11468,7 +11470,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11501,7 +11503,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11505: checking for seteuid" >&5 +echo "configure:11507: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11510,7 +11512,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11543,7 +11545,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11547: checking for setuidx" >&5 +echo "configure:11549: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11552,7 +11554,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11585,7 +11587,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11589: checking for working mmap" >&5 +echo "configure:11591: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11594,11 +11596,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11621,7 +11623,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11625: checking for ftruncate needs root" >&5 +echo "configure:11627: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11630,11 +11632,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11657,7 +11659,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11661: checking for fcntl locking" >&5 +echo "configure:11663: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11666,11 +11668,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11693,7 +11695,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11697: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11699: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11702,11 +11704,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11712: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11731,7 +11733,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11735: checking for 64 bit fcntl locking" >&5 +echo "configure:11737: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11740,7 +11742,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11789,13 +11791,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11793: checking for st_blocks in struct stat" >&5 +echo "configure:11795: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11804,7 +11806,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11808: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11810: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11825,13 +11827,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11829: checking for st_blksize in struct stat" >&5 +echo "configure:11831: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11840,7 +11842,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11844: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11846: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11863,13 +11865,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11867: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11869: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11889: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11906,13 +11908,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11910: checking for broken nisplus include files" >&5 +echo "configure:11912: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11922,7 +11924,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11928: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11946,7 +11948,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11950: checking whether to use smbwrapper" >&5 +echo "configure:11952: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11993,7 +11995,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11997: checking whether to use AFS clear-text auth" >&5 +echo "configure:11999: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12019,7 +12021,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12023: checking whether to use DFS clear-text auth" >&5 +echo "configure:12025: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12041,63 +12043,91 @@ else fi - ################################################# -# see if this box has the RedHat location for kerberos -echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12049: checking for /usr/kerberos" >&5 -if test -d /usr/kerberos; then +# active directory support + +with_ads_support=yes +echo $ac_n "checking whether to use Active Directory""... $ac_c" 1>&6 +echo "configure:12052: checking whether to use Active Directory" >&5 + +# Check whether --with-ads or --without-ads was given. +if test "${with_ads+set}" = set; then + withval="$with_ads" + case "$withval" in + no) + with_ads_support=no + ;; + esac +fi + + +if test x"$with_ads_support" = x"yes"; then + cat >> confdefs.h <<\EOF +#define WITH_ADS 1 +EOF + +fi + +echo "$ac_t""$with_ads_support" 1>&6 + +if test x"$with_ads_support" = x"yes"; then + + ################################################# + # see if this box has the RedHat location for kerberos + echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 +echo "configure:12079: checking for /usr/kerberos" >&5 + if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include" echo "$ac_t""yes" 1>&6 -else + else echo "$ac_t""no" 1>&6 -fi + fi -################################################# -# check for location of Kerberos 5 install -echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12062: checking for kerberos 5 install path" >&5 -# Check whether --with-krb5 or --without-krb5 was given. + ################################################# + # check for location of Kerberos 5 install + echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 +echo "configure:12092: checking for kerberos 5 install path" >&5 + # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" case "$withval" in - no) - echo "$ac_t""no" 1>&6 - ;; - *) - echo "$ac_t""yes" 1>&6 - LIBS="$LIBS -lkrb5" - CFLAGS="$CFLAGS -I$withval/include" - CPPFLAGS="$CPPFLAGS -I$withval/include" - LDFLAGS="$LDFLAGS -L$withval/lib" - ;; - esac + no) + echo "$ac_t""no" 1>&6 + ;; + *) + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -lkrb5" + CFLAGS="$CFLAGS -I$withval/include" + CPPFLAGS="$CPPFLAGS -I$withval/include" + LDFLAGS="$LDFLAGS -L$withval/lib" + ;; + esac else echo "$ac_t""no" 1>&6 - + fi -# now check for krb5.h. Some systems have the libraries without the headers! -# note that this check is done here to allow for different kerberos -# include paths -for ac_hdr in krb5.h + # now check for krb5.h. Some systems have the libraries without the headers! + # note that this check is done here to allow for different kerberos + # include paths + for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12091: checking for $ac_hdr" >&5 +echo "configure:12121: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12101: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12131: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12124,23 +12154,23 @@ fi done -# now check for gssapi headers. This is also done here to allow for -# different kerberos include paths -for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h + # now check for gssapi headers. This is also done here to allow for + # different kerberos include paths + for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12134: checking for $ac_hdr" >&5 +echo "configure:12164: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12144: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12174: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12167,10 +12197,10 @@ fi done -################################################################## -# we might need the k5crypto and com_err libraries on some systems -echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12174: checking for _et_list in -lcom_err" >&5 + ################################################################## + # we might need the k5crypto and com_err libraries on some systems + echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 +echo "configure:12204: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12178,7 +12208,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12209,8 +12239,8 @@ else echo "$ac_t""no" 1>&6 fi -echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12214: checking for krb5_encrypt_data in -lk5crypto" >&5 + echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 +echo "configure:12244: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12218,7 +12248,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12250,11 +12280,11 @@ else fi -######################################################## -# now see if we can find the krb5 libs in standard paths -# or as specified above -echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12258: checking for krb5_mk_req_extended in -lkrb5" >&5 + ######################################################## + # now see if we can find the krb5 libs in standard paths + # or as specified above + echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 +echo "configure:12288: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12262,7 +12292,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12298,10 +12328,10 @@ else fi -######################################################## -# now see if we can find the gssapi libs in standard paths -echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12305: checking for gss_display_status in -lgssapi_krb5" >&5 + ######################################################## + # now see if we can find the gssapi libs in standard paths + echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 +echo "configure:12335: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12309,7 +12339,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12344,12 +12374,13 @@ else echo "$ac_t""no" 1>&6 fi +fi ################################################################## # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12353: checking for ber_scanf in -llber" >&5 +echo "configure:12384: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12357,7 +12388,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12393,7 +12424,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12397: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12428: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12401,7 +12432,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12443,12 +12474,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12447: checking for $ac_func" >&5 +echo "configure:12478: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12496,13 +12527,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12500: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12531: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12511,7 +12542,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12546: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12533,7 +12564,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12537: checking whether to use AUTOMOUNT" >&5 +echo "configure:12568: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12558,7 +12589,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12562: checking whether to use SMBMOUNT" >&5 +echo "configure:12593: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12595,7 +12626,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12599: checking whether to use PAM" >&5 +echo "configure:12630: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12621,7 +12652,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12625: checking for pam_get_data in -lpam" >&5 +echo "configure:12656: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12629,7 +12660,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12667,7 +12698,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12671: checking whether to use pam_smbpass" >&5 +echo "configure:12702: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12705,12 +12736,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12709: checking for $ac_func" >&5 +echo "configure:12740: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12759,7 +12790,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12763: checking for crypt in -lcrypt" >&5 +echo "configure:12794: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12767,7 +12798,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12813,7 +12844,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12817: checking for a crypt that needs truncated salt" >&5 +echo "configure:12848: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12822,11 +12853,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12861: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12852,7 +12883,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12856: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12887: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12884,7 +12915,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12888: checking whether to use TDB SAM database" >&5 +echo "configure:12919: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12909,7 +12940,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12913: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12944: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12940,7 +12971,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12944: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12975: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12965,7 +12996,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12969: checking whether to use syslog logging" >&5 +echo "configure:13000: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12990,7 +13021,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12994: checking whether to use profiling" >&5 +echo "configure:13025: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13018,7 +13049,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13022: checking whether to support disk-quotas" >&5 +echo "configure:13053: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13029,13 +13060,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13033: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13064: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13047,7 +13078,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13096,7 +13127,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13100: checking whether to support utmp accounting" >&5 +echo "configure:13131: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13121,7 +13152,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13125: checking chosen man pages' language(s)" >&5 +echo "configure:13156: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13152,7 +13183,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13156: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13187: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13180,14 +13211,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13184: checking how to get filesystem space usage" >&5 +echo "configure:13215: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13191: checking statvfs64 function (SVR4)" >&5 +echo "configure:13222: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13195,7 +13226,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13244: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13242,12 +13273,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13246: checking statvfs function (SVR4)" >&5 +echo "configure:13277: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13255,7 +13286,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13280,7 +13311,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13284: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13315: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13288,7 +13319,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13301,7 +13332,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13328,7 +13359,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13332: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13363: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13336,7 +13367,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13382,7 +13413,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13386: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13417: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13390,7 +13421,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13400,7 +13431,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13427,7 +13458,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13431: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13462: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13435,7 +13466,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13451,7 +13482,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13478,7 +13509,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13482: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13513: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13486,7 +13517,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13506,7 +13537,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13539,9 +13570,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13543: checking if large file support can be enabled" >&5 +echo "configure:13574: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13589: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13619,7 +13650,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13623: checking whether to support ACLs" >&5 +echo "configure:13654: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13672,7 +13703,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13676: checking for acl_get_file in -lacl" >&5 +echo "configure:13707: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13680,7 +13711,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13719,13 +13750,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13723: checking for ACL support" >&5 +echo "configure:13754: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13733,7 +13764,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13753,13 +13784,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13757: checking for acl_get_perm_np" >&5 +echo "configure:13788: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13767,7 +13798,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13812,7 +13843,7 @@ fi # check for sendfile support echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 -echo "configure:13816: checking whether to support sendfile" >&5 +echo "configure:13847: checking whether to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -13822,13 +13853,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:13826: checking for linux sendfile64 support" >&5 +echo "configure:13857: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13840,7 +13871,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -13855,13 +13886,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:13859: checking for linux sendfile support" >&5 +echo "configure:13890: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13873,7 +13904,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -13889,13 +13920,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:13893: checking for broken linux sendfile support" >&5 +echo "configure:13924: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -13967,13 +13998,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:13971: checking for freebsd sendfile support" >&5 +echo "configure:14002: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -13995,7 +14026,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:13999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14047,7 +14078,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:14051: checking whether to build winbind" >&5 +echo "configure:14082: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14143,20 +14174,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14147: checking whether struct passwd has pw_comment" >&5 +echo "configure:14178: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14181,20 +14212,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14185: checking whether struct passwd has pw_age" >&5 +echo "configure:14216: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14233,7 +14264,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14237: checking for poptGetContext in -lpopt" >&5 +echo "configure:14268: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14241,7 +14272,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14276,7 +14307,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14280: checking whether to use included popt" >&5 +echo "configure:14311: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14322,16 +14353,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14326: checking configure summary" >&5 +echo "configure:14357: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else -- cgit From b9460e79a13ab74a5fc05a9db1b5cf4d402fb197 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 17 Sep 2002 06:11:51 +0000 Subject: Added --with-ldap (default=yes) option. We should now be able to compile a non-ADS, non-LDAP version of Samba on a machine with Kerberos and LDAP libraries installed. This shouldn't break anything - let's keep an eye on the build farm just in case. --- source/configure.in | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/source/configure.in b/source/configure.in index fe697e4209e..ef25ba4fed1 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2016,15 +2016,33 @@ if test x"$with_ads_support" = x"yes"; then AC_DEFINE(HAVE_GSSAPI)]) fi -################################################################## -# we might need the lber lib on some systems. To avoid link errors -# this test must be before the libldap test -AC_CHECK_LIB(lber, ber_scanf, [LIBS="$LIBS -llber"]) - ######################################################## -# now see if we can find the ldap libs in standard paths -if test x$have_ldap != xyes; then -AC_CHECK_LIB(ldap, ldap_domain2hostlist, [LIBS="$LIBS -lldap"; +# Compile with LDAP support? + +with_ldap_support=yes +AC_MSG_CHECKING([whether to use LDAP]) + +AC_ARG_WITH(ldap, +[ --with-ldap LDAP support (default yes)], +[ case "$withval" in + no) + with_ldap_support=no + ;; + esac ]) + +AC_MSG_RESULT($with_ldap_support) + +if test x"$with_ldap_support" = x"yes"; then + + ################################################################## + # we might need the lber lib on some systems. To avoid link errors + # this test must be before the libldap test + AC_CHECK_LIB(lber, ber_scanf, [LIBS="$LIBS -llber"]) + + ######################################################## + # now see if we can find the ldap libs in standard paths + if test x$have_ldap != xyes; then + AC_CHECK_LIB(ldap, ldap_domain2hostlist, [LIBS="$LIBS -lldap"; AC_DEFINE(HAVE_LDAP)]) ######################################################## @@ -2036,6 +2054,7 @@ AC_CHECK_LIB(ldap, ldap_domain2hostlist, [LIBS="$LIBS -lldap"; #include #include ], [ldap_set_rebind_proc(0, 0, 0);], [pam_ldap_cv_ldap_set_rebind_proc=3], [pam_ldap_cv_ldap_set_rebind_proc=2]) ]) AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $pam_ldap_cv_ldap_set_rebind_proc) + fi fi ################################################# -- cgit From 443d5ebafad46a9a62527642628aff8e5d9dc10c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 17 Sep 2002 12:07:47 +0000 Subject: another const cleanup --- source/libads/ldap_printer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libads/ldap_printer.c b/source/libads/ldap_printer.c index 64ae8252c81..66984477b81 100644 --- a/source/libads/ldap_printer.c +++ b/source/libads/ldap_printer.c @@ -28,7 +28,7 @@ results can be used. It should be freed using ads_msgfree. */ ADS_STATUS ads_find_printer_on_server(ADS_STRUCT *ads, void **res, - char *printer, char *servername) + const char *printer, char *servername) { ADS_STATUS status; char *srv_dn, **srv_cn, *exp; -- cgit From dfa85f9c48aa3c8d93775df6b6ad2dec9a1692d7 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 17 Sep 2002 12:08:55 +0000 Subject: more const cleanups --- source/passdb/secrets.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/passdb/secrets.c b/source/passdb/secrets.c index ec67b743900..307dc132fc5 100644 --- a/source/passdb/secrets.c +++ b/source/passdb/secrets.c @@ -68,7 +68,7 @@ void *secrets_fetch(const char *key, size_t *size) /* store a secrets entry */ -BOOL secrets_store(const char *key, void *data, size_t size) +BOOL secrets_store(const char *key, const void *data, size_t size) { TDB_DATA kbuf, dbuf; secrets_init(); @@ -95,7 +95,7 @@ BOOL secrets_delete(const char *key) return tdb_delete(tdb, kbuf) == 0; } -BOOL secrets_store_domain_sid(char *domain, DOM_SID *sid) +BOOL secrets_store_domain_sid(char *domain, const DOM_SID *sid) { fstring key; @@ -148,7 +148,7 @@ BOOL secrets_fetch_domain_guid(char *domain, GUID *guid) strupper(key); dyn_guid = (GUID *)secrets_fetch(key, &size); - DEBUG(6,("key is %s, guid is at %x, size is %d\n", key, dyn_guid, size)); + DEBUG(6,("key is %s, size is %d\n", key, (int)size)); if ((NULL == dyn_guid) && (ROLE_DOMAIN_PDC == lp_server_role())) { uuid_generate_random(&new_guid); -- cgit From 3401c3616b3dcb99053f89d88f8e351c986c9096 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 17 Sep 2002 12:09:46 +0000 Subject: disable stat cache when case sensitive --- source/smbd/filename.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/smbd/filename.c b/source/smbd/filename.c index ce98af4ace5..d343db26f6b 100644 --- a/source/smbd/filename.c +++ b/source/smbd/filename.c @@ -168,7 +168,7 @@ BOOL unix_convert(pstring name,connection_struct *conn,char *saved_last_componen pstrcpy(orig_path, name); - if(stat_cache_lookup(conn, name, dirpath, &start, &st)) { + if(!case_sensitive && stat_cache_lookup(conn, name, dirpath, &start, &st)) { *pst = st; return True; } -- cgit From 0d28d769472ea3b98ae4c8757093dfd4499f6dd1 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 17 Sep 2002 12:12:50 +0000 Subject: Add clock skew handling to our kerberos code. This allows us to cope with the DC being out of sync with the local machine. --- source/auth/auth_domain.c | 2 +- source/include/ads.h | 9 +++++- source/libads/kerberos.c | 8 ++++-- source/libads/krb5_setpw.c | 14 ++++++--- source/libads/ldap.c | 66 +++++++++++++++++++++++++++++++++++-------- source/libads/sasl.c | 7 +++-- source/libads/util.c | 2 +- source/libsmb/cliconnect.c | 2 +- source/libsmb/clikrb5.c | 14 ++++++++- source/libsmb/clispnego.c | 4 +-- source/nsswitch/winbindd_cm.c | 2 +- source/utils/net_ads.c | 26 ++++++++--------- 12 files changed, 113 insertions(+), 43 deletions(-) diff --git a/source/auth/auth_domain.c b/source/auth/auth_domain.c index e8f11bb3d5a..2e51a852816 100644 --- a/source/auth/auth_domain.c +++ b/source/auth/auth_domain.c @@ -48,7 +48,7 @@ static NTSTATUS ads_resolve_dc(fstring remote_machine, DEBUG(4,("ads_resolve_dc: realm=%s\n", ads->config.realm)); - ads->auth.no_bind = 1; + ads->auth.flags |= ADS_AUTH_NO_BIND; #ifdef HAVE_ADS /* a full ads_connect() is actually overkill, as we don't srictly need diff --git a/source/include/ads.h b/source/include/ads.h index 6106eb6b409..875b895e493 100644 --- a/source/include/ads.h +++ b/source/include/ads.h @@ -24,7 +24,8 @@ typedef struct { char *password; char *user_name; char *kdc_server; - int no_bind; + unsigned flags; + int time_offset; } auth; /* info derived from the servers config */ @@ -32,6 +33,7 @@ typedef struct { char *realm; char *bind_path; char *ldap_server_name; + time_t current_time; } config; } ADS_STRUCT; @@ -249,3 +251,8 @@ typedef void **ADS_MODLIST; /* DomainCntrollerAddressType */ #define ADS_INET_ADDRESS 0x00000001 #define ADS_NETBIOS_ADDRESS 0x00000002 + + +/* ads auth control flags */ +#define ADS_AUTH_DISABLE_KERBEROS 1 +#define ADS_AUTH_NO_BIND 2 diff --git a/source/libads/kerberos.c b/source/libads/kerberos.c index 9a486237c9f..a80837cf4df 100644 --- a/source/libads/kerberos.c +++ b/source/libads/kerberos.c @@ -50,7 +50,7 @@ kerb_prompter(krb5_context ctx, void *data, simulate a kinit, putting the tgt in the default cache location remus@snapserver.com */ -int kerberos_kinit_password(const char *principal, const char *password) +int kerberos_kinit_password(const char *principal, const char *password, int time_offset) { krb5_context ctx; krb5_error_code code = 0; @@ -60,6 +60,10 @@ int kerberos_kinit_password(const char *principal, const char *password) if ((code = krb5_init_context(&ctx))) return code; + + if (time_offset != 0) { + krb5_set_real_time(ctx, time(NULL) + time_offset, 0); + } if ((code = krb5_cc_default(ctx, &cc))) { krb5_free_context(ctx); @@ -111,7 +115,7 @@ int ads_kinit_password(ADS_STRUCT *ads) int ret; asprintf(&s, "%s@%s", ads->auth.user_name, ads->auth.realm); - ret = kerberos_kinit_password(s, ads->auth.password); + ret = kerberos_kinit_password(s, ads->auth.password, ads->auth.time_offset); if (ret) { DEBUG(0,("kerberos_kinit_password %s failed: %s\n", diff --git a/source/libads/krb5_setpw.c b/source/libads/krb5_setpw.c index ec79a8658fe..a49b6cbe3b0 100644 --- a/source/libads/krb5_setpw.c +++ b/source/libads/krb5_setpw.c @@ -248,7 +248,8 @@ static krb5_error_code parse_setpw_reply(krb5_context context, return 0; } -ADS_STATUS krb5_set_password(const char *kdc_host, const char *princ, const char *newpw) +ADS_STATUS krb5_set_password(const char *kdc_host, const char *princ, const char *newpw, + int time_offset) { krb5_context context; krb5_auth_context auth_context = NULL; @@ -268,6 +269,10 @@ ADS_STATUS krb5_set_password(const char *kdc_host, const char *princ, const char return ADS_ERROR_KRB5(ret); } + if (time_offset != 0) { + krb5_set_real_time(context, time(NULL) + time_offset, 0); + } + ret = krb5_cc_default(context, &ccache); if (ret) { krb5_free_context(context); @@ -452,16 +457,17 @@ ADS_STATUS krb5_set_password(const char *kdc_host, const char *princ, const char ADS_STATUS kerberos_set_password(const char *kpasswd_server, const char *auth_principal, const char *auth_password, - const char *target_principal, const char *new_password) + const char *target_principal, const char *new_password, + int time_offset) { int ret; - if ((ret = kerberos_kinit_password(auth_principal, auth_password))) { + if ((ret = kerberos_kinit_password(auth_principal, auth_password, time_offset))) { DEBUG(1,("Failed kinit for principal %s (%s)\n", auth_principal, error_message(ret))); return ADS_ERROR_KRB5(ret); } - return krb5_set_password(kpasswd_server, target_principal, new_password); + return krb5_set_password(kpasswd_server, target_principal, new_password, time_offset); } diff --git a/source/libads/ldap.c b/source/libads/ldap.c index 2f70d3a2854..385a9bd93f9 100644 --- a/source/libads/ldap.c +++ b/source/libads/ldap.c @@ -63,6 +63,7 @@ static BOOL ads_try_connect(ADS_STRUCT *ads, const char *server, unsigned port) ads->ldap_port = port; ads->ldap_ip = *interpret_addr2(srv); free(srv); + return True; } @@ -204,7 +205,6 @@ static BOOL ads_try_netbios(ADS_STRUCT *ads) ADS_STATUS ads_connect(ADS_STRUCT *ads) { int version = LDAP_VERSION3; - int code; ADS_STATUS status; ads->last_attempt = time(NULL); @@ -274,7 +274,7 @@ got_connection: } #endif - if (ads->auth.no_bind) { + if (ads->auth.flags & ADS_AUTH_NO_BIND) { return ADS_SUCCESS; } @@ -1416,7 +1416,7 @@ ADS_STATUS ads_set_machine_password(ADS_STRUCT *ads, */ asprintf(&principal, "%s$@%s", host, ads->auth.realm); - status = krb5_set_password(ads->auth.kdc_server, principal, password); + status = krb5_set_password(ads->auth.kdc_server, principal, password, ads->auth.time_offset); free(host); free(principal); @@ -1622,6 +1622,26 @@ ADS_STATUS ads_USN(ADS_STRUCT *ads, uint32 *usn) return ADS_SUCCESS; } +/* parse a ADS timestring - typical string is + '20020917091222.0Z0' which means 09:12.22 17th September + 2002, timezone 0 */ +static time_t ads_parse_time(const char *str) +{ + struct tm tm; + + ZERO_STRUCT(tm); + + if (sscanf(str, "%4d%2d%2d%2d%2d%2d", + &tm.tm_year, &tm.tm_mon, &tm.tm_mday, + &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6) { + return 0; + } + tm.tm_year -= 1900; + tm.tm_mon -= 1; + + return timegm(&tm); +} + /** * Find the servers name and realm - this can be done before authentication @@ -1632,22 +1652,36 @@ ADS_STATUS ads_USN(ADS_STRUCT *ads, uint32 *usn) **/ ADS_STATUS ads_server_info(ADS_STRUCT *ads) { - const char *attrs[] = {"ldapServiceName", NULL}; + const char *attrs[] = {"ldapServiceName", "currentTime", NULL}; ADS_STATUS status; void *res; - char **values; + char *value; char *p; + char *timestr; + TALLOC_CTX *ctx; + + if (!(ctx = talloc_init())) { + return ADS_ERROR(LDAP_NO_MEMORY); + } status = ads_do_search(ads, "", LDAP_SCOPE_BASE, "(objectclass=*)", attrs, &res); if (!ADS_ERR_OK(status)) return status; - values = ldap_get_values(ads->ld, res, "ldapServiceName"); - if (!values || !values[0]) return ADS_ERROR(LDAP_NO_RESULTS_RETURNED); + value = ads_pull_string(ads, ctx, res, "ldapServiceName"); + if (!value) { + return ADS_ERROR(LDAP_NO_RESULTS_RETURNED); + } + + timestr = ads_pull_string(ads, ctx, res, "currentTime"); + if (!timestr) { + return ADS_ERROR(LDAP_NO_RESULTS_RETURNED); + } - p = strchr(values[0], ':'); + ldap_msgfree(res); + + p = strchr(value, ':'); if (!p) { - ldap_value_free(values); - ldap_msgfree(res); + talloc_destroy(ctx); DEBUG(1, ("ads_server_info: returned ldap server name did not contain a ':' so was deemed invalid\n")); return ADS_ERROR(LDAP_DECODING_ERROR); } @@ -1657,8 +1691,7 @@ ADS_STATUS ads_server_info(ADS_STRUCT *ads) ads->config.ldap_server_name = strdup(p+1); p = strchr(ads->config.ldap_server_name, '$'); if (!p || p[1] != '@') { - ldap_value_free(values); - ldap_msgfree(res); + talloc_destroy(ctx); SAFE_FREE(ads->config.ldap_server_name); DEBUG(1, ("ads_server_info: returned ldap server name did not contain '$@' so was deemed invalid\n")); return ADS_ERROR(LDAP_DECODING_ERROR); @@ -1675,6 +1708,15 @@ ADS_STATUS ads_server_info(ADS_STRUCT *ads) DEBUG(3,("got ldap server name %s@%s\n", ads->config.ldap_server_name, ads->config.realm)); + ads->config.current_time = ads_parse_time(timestr); + + if (ads->config.current_time != 0) { + ads->auth.time_offset = ads->config.current_time - time(NULL); + DEBUG(4,("time offset is %d seconds\n", ads->auth.time_offset)); + } + + talloc_destroy(ctx); + return ADS_SUCCESS; } diff --git a/source/libads/sasl.c b/source/libads/sasl.c index 12a5722319f..c110c1d2cd7 100644 --- a/source/libads/sasl.c +++ b/source/libads/sasl.c @@ -122,7 +122,7 @@ static ADS_STATUS ads_sasl_spnego_krb5_bind(ADS_STRUCT *ads, const char *princip struct berval cred, *scred; int rc; - blob = spnego_gen_negTokenTarg(principal); + blob = spnego_gen_negTokenTarg(principal, ads->auth.time_offset); if (!blob.data) { return ADS_ERROR(LDAP_OPERATIONS_ERROR); @@ -144,7 +144,7 @@ static ADS_STATUS ads_sasl_spnego_krb5_bind(ADS_STRUCT *ads, const char *princip */ static ADS_STATUS ads_sasl_spnego_bind(ADS_STRUCT *ads) { - struct berval *scred; + struct berval *scred=NULL; int rc, i; ADS_STATUS status; DATA_BLOB blob; @@ -185,7 +185,8 @@ static ADS_STATUS ads_sasl_spnego_bind(ADS_STRUCT *ads) } DEBUG(3,("got principal=%s\n", principal)); - if (got_kerberos_mechanism && ads_kinit_password(ads) == 0) { + if (!(ads->auth.flags & ADS_AUTH_DISABLE_KERBEROS) && + got_kerberos_mechanism && ads_kinit_password(ads) == 0) { return ads_sasl_spnego_krb5_bind(ads, principal); } diff --git a/source/libads/util.c b/source/libads/util.c index b10b130a313..021f2d93e4a 100644 --- a/source/libads/util.c +++ b/source/libads/util.c @@ -40,7 +40,7 @@ ADS_STATUS ads_change_trust_account_password(ADS_STRUCT *ads, char *host_princip asprintf(&service_principal, "HOST/%s", host_principal); ret = kerberos_set_password(ads->auth.kdc_server, host_principal, password, - service_principal, new_password); + service_principal, new_password, ads->auth.time_offset); if (!secrets_store_machine_password(new_password)) { DEBUG(1,("Failed to save machine password\n")); diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index 6c5c5e0b0e7..298b1e52b61 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -431,7 +431,7 @@ static BOOL cli_session_setup_kerberos(struct cli_state *cli, char *principal, c DEBUG(2,("Doing kerberos session setup\n")); /* generate the encapsulated kerberos5 ticket */ - negTokenTarg = spnego_gen_negTokenTarg(principal); + negTokenTarg = spnego_gen_negTokenTarg(principal, 0); if (!negTokenTarg.data) return False; diff --git a/source/libsmb/clikrb5.c b/source/libsmb/clikrb5.c index 1fc400edb0e..22bfdc04633 100644 --- a/source/libsmb/clikrb5.c +++ b/source/libsmb/clikrb5.c @@ -64,6 +64,14 @@ static krb5_error_code krb5_mk_req2(krb5_context context, goto cleanup_creds; } + /* cope with the ticket being in the future due to clock skew */ + if ((unsigned)credsp->times.starttime > time(NULL)) { + time_t t = time(NULL); + int time_offset = (unsigned)credsp->times.starttime - t; + DEBUG(4,("Advancing clock by %d seconds to cope with clock skew\n", time_offset)); + krb5_set_real_time(context, t + time_offset + 1, 0); + } + in_data.length = 0; retval = krb5_mk_req_extended(context, auth_context, ap_req_options, &in_data, credsp, outbuf); @@ -86,7 +94,7 @@ cleanup_princ: /* get a kerberos5 ticket for the given service */ -DATA_BLOB krb5_get_ticket(char *principal) +DATA_BLOB krb5_get_ticket(char *principal, time_t time_offset) { krb5_error_code retval; krb5_data packet; @@ -108,6 +116,10 @@ DATA_BLOB krb5_get_ticket(char *principal) goto failed; } + if (time_offset != 0) { + krb5_set_real_time(context, time(NULL) + time_offset, 0); + } + if ((retval = krb5_cc_default(context, &ccdef))) { DEBUG(1,("krb5_cc_default failed (%s)\n", error_message(retval))); diff --git a/source/libsmb/clispnego.c b/source/libsmb/clispnego.c index 04ec6ed39ec..55f49c59871 100644 --- a/source/libsmb/clispnego.c +++ b/source/libsmb/clispnego.c @@ -321,13 +321,13 @@ BOOL spnego_parse_krb5_wrap(DATA_BLOB blob, DATA_BLOB *ticket) generate a SPNEGO negTokenTarg packet, ready for a EXTENDED_SECURITY kerberos session setup */ -DATA_BLOB spnego_gen_negTokenTarg(const char *principal) +DATA_BLOB spnego_gen_negTokenTarg(const char *principal, int time_offset) { DATA_BLOB tkt, tkt_wrapped, targ; const char *krb_mechs[] = {OID_KERBEROS5_OLD, OID_NTLMSSP, NULL}; /* get a kerberos ticket for the service */ - tkt = krb5_get_ticket(principal); + tkt = krb5_get_ticket(principal, time_offset); /* wrap that up in a nice GSS-API wrapping */ tkt_wrapped = spnego_gen_krb5_wrap(tkt); diff --git a/source/nsswitch/winbindd_cm.c b/source/nsswitch/winbindd_cm.c index 9ac392a6ba0..0b9e38eb1f2 100644 --- a/source/nsswitch/winbindd_cm.c +++ b/source/nsswitch/winbindd_cm.c @@ -109,7 +109,7 @@ static BOOL cm_ads_find_dc(const char *domain, struct in_addr *dc_ip, fstring sr } /* we don't need to bind, just connect */ - ads->auth.no_bind = 1; + ads->auth.flags |= ADS_AUTH_NO_BIND; DEBUG(4,("cm_ads_find_dc: domain=%s\n", domain)); diff --git a/source/utils/net_ads.c b/source/utils/net_ads.c index 8c85bd82f98..af290ce83c6 100644 --- a/source/utils/net_ads.c +++ b/source/utils/net_ads.c @@ -66,7 +66,7 @@ static int net_ads_lookup(int argc, const char **argv) ads = ads_init(NULL, NULL, opt_host); if (ads) { - ads->auth.no_bind = 1; + ads->auth.flags |= ADS_AUTH_NO_BIND; } ads_connect(ads); @@ -88,7 +88,7 @@ static int net_ads_info(int argc, const char **argv) ads = ads_init(NULL, NULL, opt_host); if (ads) { - ads->auth.no_bind = 1; + ads->auth.flags |= ADS_AUTH_NO_BIND; } ads_connect(ads); @@ -103,6 +103,7 @@ static int net_ads_info(int argc, const char **argv) d_printf("Realm: %s\n", ads->config.realm); d_printf("Bind Path: %s\n", ads->config.bind_path); d_printf("LDAP port: %d\n", ads->ldap_port); + d_printf("Server time: %s\n", http_timestring(ads->config.current_time)); return 0; } @@ -199,7 +200,7 @@ static int net_ads_workgroup(int argc, const char **argv) -static void usergrp_display(char *field, void **values, void *data_area) +static BOOL usergrp_display(char *field, void **values, void *data_area) { char **disp_fields = (char **) data_area; @@ -213,15 +214,16 @@ static void usergrp_display(char *field, void **values, void *data_area) } SAFE_FREE(disp_fields[0]); SAFE_FREE(disp_fields[1]); - return; + return True; } if (!values) /* must be new field, indicate string field */ - return; + return True; if (StrCaseCmp(field, "sAMAccountName") == 0) { disp_fields[0] = strdup((char *) values[0]); } if (StrCaseCmp(field, "description") == 0) disp_fields[1] = strdup((char *) values[0]); + return True; } static int net_ads_user_usage(int argc, const char **argv) @@ -270,7 +272,7 @@ static int ads_user_add(int argc, const char **argv) /* try setting the password */ asprintf(&upn, "%s@%s", argv[0], ads->config.realm); - status = krb5_set_password(ads->auth.kdc_server, upn, argv[1]); + status = krb5_set_password(ads->auth.kdc_server, upn, argv[1], ads->auth.time_offset); safe_free(upn); if (ADS_ERR_OK(status)) { d_printf("User %s added\n", argv[0]); @@ -653,7 +655,9 @@ int net_ads_join(int argc, const char **argv) return -1; } - if (ads_kinit_password(ads)) { + rc = ads_domain_sid(ads, &dom_sid); + if (!ADS_ERR_OK(rc)) { + d_printf("ads_domain_sid: %s\n", ads_errstr(rc)); return -1; } @@ -663,12 +667,6 @@ int net_ads_join(int argc, const char **argv) return -1; } - rc = ads_domain_sid(ads, &dom_sid); - if (!ADS_ERR_OK(rc)) { - d_printf("ads_domain_sid: %s\n", ads_errstr(rc)); - return -1; - } - if (!secrets_store_domain_sid(lp_workgroup(), &dom_sid)) { DEBUG(1,("Failed to save domain sid\n")); return -1; @@ -885,7 +883,7 @@ static int net_ads_password(int argc, const char **argv) new_password = getpass(prompt); ret = kerberos_set_password(ads->auth.kdc_server, auth_principal, - auth_password, argv[0], new_password); + auth_password, argv[0], new_password, ads->auth.time_offset); if (!ADS_ERR_OK(ret)) { d_printf("Password change failed :-( ...\n"); ads_destroy(&ads); -- cgit From 5881f0a22633ed9fb73e6cd788d0751c4db6cd32 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 19:48:19 +0000 Subject: Actually use sendfile if selected. Jeremy. --- source/include/vfs.h | 7 +++++-- source/lib/sendfile.c | 4 ++-- source/smbd/reply.c | 2 +- source/smbd/vfs-wrap.c | 7 +++---- source/smbd/vfs.c | 3 +++ 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/source/include/vfs.h b/source/include/vfs.h index 1b1a13d7c12..9a067643713 100644 --- a/source/include/vfs.h +++ b/source/include/vfs.h @@ -44,17 +44,18 @@ /* Changed to version 2 for CIFS UNIX extensions (mknod and link added). JRA. */ /* Changed to version 3 for POSIX acl extensions. JRA. */ /* Changed to version 4 for cascaded VFS interface. Alexander Bokovoy. */ +/* Changed to version 5 for sendfile addition. JRA. */ #define SMB_VFS_INTERFACE_VERSION 5 /* Version of supported cascaded interface backward copmatibility. - (version 4 corresponds to SMB_VFS_INTERFACE_VERSION 4) + (version 5 corresponds to SMB_VFS_INTERFACE_VERSION 5) It is used in vfs_init_custom() to detect VFS modules which conform to cascaded VFS interface but implement elder version than current version of Samba uses. This allows to use old modules with new VFS interface as far as combined VFS operation set is coherent (will be in most cases). */ -#define SMB_VFS_INTERFACE_CASCADED 4 +#define SMB_VFS_INTERFACE_CASCADED 5 /* Each VFS module must provide following global functions: @@ -116,6 +117,7 @@ struct vfs_ops { ssize_t (*read)(struct files_struct *fsp, int fd, void *data, size_t n); ssize_t (*write)(struct files_struct *fsp, int fd, const void *data, size_t n); SMB_OFF_T (*lseek)(struct files_struct *fsp, int filedes, SMB_OFF_T offset, int whence); + ssize_t (*sendfile)(int tofd, files_struct *fsp, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count); int (*rename)(struct connection_struct *conn, const char *old, const char *new); int (*fsync)(struct files_struct *fsp, int fd); int (*stat)(struct connection_struct *conn, const char *fname, SMB_STRUCT_STAT *sbuf); @@ -210,6 +212,7 @@ typedef enum _vfs_op_type { SMB_VFS_OP_READ, SMB_VFS_OP_WRITE, SMB_VFS_OP_LSEEK, + SMB_VFS_OP_SENDFILE, SMB_VFS_OP_RENAME, SMB_VFS_OP_FSYNC, SMB_VFS_OP_STAT, diff --git a/source/lib/sendfile.c b/source/lib/sendfile.c index 8bcb9dbd02b..bcace5fee29 100644 --- a/source/lib/sendfile.c +++ b/source/lib/sendfile.c @@ -47,7 +47,7 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of if (header) { hdr_len = header->length; - while (total < hd_len) { + while (total < hdr_len) { ret = sys_send(tofd, header->data + total,hdr_len - total, MSG_MORE); if (ret == -1) return -1; @@ -115,7 +115,7 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of if (header) { hdr_len = header->length; - while (total < hd_len) { + while (total < hdr_len) { ret = sys_send(tofd, header->data + total,hdr_len - total, MSG_MORE); if (ret == -1) return -1; diff --git a/source/smbd/reply.c b/source/smbd/reply.c index 45704b92641..b8a89b1d9d5 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -1723,7 +1723,7 @@ int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length SSVAL(outbuf,smb_vwv5,smb_maxcnt); SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); SSVAL(smb_buf(outbuf),-2,smb_maxcnt); - CVAL(outbuf,smb_vwv0) = 0xFF; + SCVAL(outbuf,smb_vwv0,0xFF); set_message(outbuf,12,smb_maxcnt,False); header.data = outbuf; header.length = data - outbuf; diff --git a/source/smbd/vfs-wrap.c b/source/smbd/vfs-wrap.c index 27bb1f42f34..bae304096ce 100644 --- a/source/smbd/vfs-wrap.c +++ b/source/smbd/vfs-wrap.c @@ -192,17 +192,16 @@ SMB_OFF_T vfswrap_lseek(files_struct *fsp, int filedes, SMB_OFF_T offset, int wh return result; } -#if 0 /* JRATEST */ -ssize_t vfswrap_sendfile(int tofd, struct files_struct *fsp, int fromfd, DATA_BLOB *hdr, SMB_OFF_T offset, size_t n) +ssize_t vfswrap_sendfile(int tofd, struct files_struct *fsp, int fromfd, const DATA_BLOB *hdr, + SMB_OFF_T offset, size_t n) { ssize_t result; START_PROFILE_BYTES(syscall_sendfile, n); - result = sys_sendfile(outfd, fsp, infd, hdr, offset, n); + result = sys_sendfile(tofd, fromfd, hdr, offset, n); END_PROFILE(syscall_sendfile); return result; } -#endif int vfswrap_rename(connection_struct *conn, const char *old, const char *new) { diff --git a/source/smbd/vfs.c b/source/smbd/vfs.c index 6869c618612..a0a7b920b8b 100644 --- a/source/smbd/vfs.c +++ b/source/smbd/vfs.c @@ -68,6 +68,7 @@ static struct vfs_ops default_vfs_ops = { vfswrap_read, vfswrap_write, vfswrap_lseek, + vfswrap_sendfile, vfswrap_rename, vfswrap_fsync, vfswrap_stat, @@ -263,6 +264,7 @@ BOOL smbd_vfs_init(connection_struct *conn) /******************************************************************* Create vfs_ops reflecting current vfs_opaque_ops *******************************************************************/ + struct vfs_ops *smb_vfs_get_opaque_ops(void) { int i; @@ -301,6 +303,7 @@ BOOL vfs_directory_exist(connection_struct *conn, const char *dname, SMB_STRUCT_ /******************************************************************* vfs getwd wrapper ********************************************************************/ + static char *vfs_getwd(connection_struct *conn, char *path) { return conn->vfs_ops.getwd(conn,path); -- cgit From ffb7632d05191342ecfc5f78fbfd7beacfe257ad Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 20:47:59 +0000 Subject: Only create the pidfile once we're ready to receive requests. This allows external programs to correctly synchronise with us. Jeremy. --- source/nsswitch/winbindd.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source/nsswitch/winbindd.c b/source/nsswitch/winbindd.c index 58b0f5943c1..a937f06639e 100644 --- a/source/nsswitch/winbindd.c +++ b/source/nsswitch/winbindd.c @@ -853,10 +853,8 @@ static void usage(void) fstrcpy(global_myworkgroup, lp_workgroup()); - if (!interactive) { + if (!interactive) become_daemon(); - pidfile_create("winbindd"); - } #if HAVE_SETPGID /* @@ -891,6 +889,10 @@ static void usage(void) return 1; } + /* Only create the pidfile when we're ready to receive requests. */ + if (!interactive) + pidfile_create("winbindd"); + /* Loop waiting for requests */ process_loop(accept_sock); -- cgit From f8a0e6ad8b25d405ff2bcb492974d2f0bef81036 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 20:53:21 +0000 Subject: Reverted my earlier change. It was incorrect. We must be protected by pidfile before doing secrets_init(). Jeremy. --- source/nsswitch/winbindd.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/source/nsswitch/winbindd.c b/source/nsswitch/winbindd.c index a937f06639e..bb4a1b78ec5 100644 --- a/source/nsswitch/winbindd.c +++ b/source/nsswitch/winbindd.c @@ -853,8 +853,11 @@ static void usage(void) fstrcpy(global_myworkgroup, lp_workgroup()); - if (!interactive) + if (!interactive) { become_daemon(); + pidfile_create("winbindd"); + } + #if HAVE_SETPGID /* @@ -889,10 +892,6 @@ static void usage(void) return 1; } - /* Only create the pidfile when we're ready to receive requests. */ - if (!interactive) - pidfile_create("winbindd"); - /* Loop waiting for requests */ process_loop(accept_sock); -- cgit From a7781f91d8c1177210bffc199cd2f3b7ff993eaf Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 23:45:21 +0000 Subject: Never, *ever* hold a mutex lock in the message database where there may be traversals being attempted. Yes, this was from bitter experience (and an out of control server :-). Also allow callers to break out of a tdb_chainlock with sigalarm if desired. Jeremy. --- source/Makefile.in | 4 +-- source/lib/messages.c | 69 ----------------------------------------------- source/lib/server_mutex.c | 5 ++-- source/passdb/secrets.c | 66 +++++++++++++++++++++++++++++++++++++++++++++ source/tdb/tdb.c | 15 +++++++++++ source/tdb/tdb.h | 1 + source/tdb/tdbbackup.c | 1 + 7 files changed, 87 insertions(+), 74 deletions(-) diff --git a/source/Makefile.in b/source/Makefile.in index 87ee4ef540d..cc8fb42e9af 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -136,7 +136,7 @@ LIB_OBJ = lib/charcnv.o lib/debug.o lib/fault.o \ lib/util.o lib/util_sock.o lib/util_sec.o \ lib/talloc.o lib/hash.o lib/substitute.o lib/fsusage.o \ lib/ms_fnmatch.o lib/select.o lib/error.o lib/messages.o \ - lib/server_mutex.o lib/tallocmsg.o lib/dmallocmsg.o \ + lib/tallocmsg.o lib/dmallocmsg.o \ lib/md5.o lib/hmacmd5.o lib/iconv.o lib/smbpasswd.o \ nsswitch/wb_client.o nsswitch/wb_common.o \ lib/pam_errors.o intl/lang_tdb.o lib/account_pol.o \ @@ -259,7 +259,7 @@ SMBD_OBJ_SRV = smbd/files.o smbd/chgpasswd.o smbd/connection.o \ smbd/dosmode.o smbd/filename.o smbd/open.o smbd/close.o \ smbd/blocking.o smbd/sec_ctx.o \ smbd/vfs.o smbd/vfs-wrap.o smbd/statcache.o \ - smbd/posix_acls.o lib/sysacls.o \ + smbd/posix_acls.o lib/sysacls.o lib/server_mutex.o \ smbd/process.o smbd/service.o smbd/error.o \ printing/printfsp.o lib/util_seaccess.o smbd/srvstr.o \ smbd/build_options.o \ diff --git a/source/lib/messages.c b/source/lib/messages.c index 21470dff5c8..d9886a54daf 100644 --- a/source/lib/messages.c +++ b/source/lib/messages.c @@ -471,73 +471,4 @@ BOOL message_send_all(TDB_CONTEXT *conn_tdb, int msg_type, *n_sent = msg_all.n_sent; return True; } - -static SIG_ATOMIC_T gotalarm; - -/*************************************************************** - Signal function to tell us we timed out. -****************************************************************/ - -static void gotalarm_sig(void) -{ - gotalarm = 1; -} - -/** - * Lock the messaging tdb based on a string - this is used as a primitive - * form of mutex between smbd instances. - * - * @param name A string identifying the name of the mutex. - */ - -BOOL message_named_mutex(char *name, unsigned int timeout) -{ - TDB_DATA key; - int ret; - void (*oldsig_handler)(int) = NULL; - - if (!message_init()) - return False; - - key.dptr = name; - key.dsize = strlen(name)+1; - - if (timeout) { - gotalarm = 0; - oldsig_handler = CatchSignal(SIGALRM, SIGNAL_CAST gotalarm_sig); - alarm(timeout); - } - - ret = tdb_chainlock(tdb, key); - - if (timeout) { - alarm(0); - CatchSignal(SIGALRM, SIGNAL_CAST oldsig_handler); - if (gotalarm) - return False; - } - - if (ret == 0) - DEBUG(10,("message_named_mutex: got mutex for %s\n", name )); - - return (ret == 0); -} - -/** - * Unlock a named mutex. - * - * @param name A string identifying the name of the mutex. - */ - -void message_named_mutex_release(char *name) -{ - TDB_DATA key; - - key.dptr = name; - key.dsize = strlen(name)+1; - - tdb_chainunlock(tdb, key); - DEBUG(10,("message_named_mutex: released mutex for %s\n", name )); -} - /** @} **/ diff --git a/source/lib/server_mutex.c b/source/lib/server_mutex.c index 416d77564d7..3e5512c7342 100644 --- a/source/lib/server_mutex.c +++ b/source/lib/server_mutex.c @@ -38,7 +38,7 @@ BOOL grab_server_mutex(const char *name) DEBUG(0,("grab_server_mutex: malloc failed for %s\n", name)); return False; } - if (!message_named_mutex(mutex_server_name, 20)) { + if (!secrets_named_mutex(mutex_server_name, 10)) { DEBUG(10,("grab_server_mutex: failed for %s\n", name)); SAFE_FREE(mutex_server_name); return False; @@ -50,8 +50,7 @@ BOOL grab_server_mutex(const char *name) void release_server_mutex(void) { if (mutex_server_name) { - message_named_mutex_release(mutex_server_name); + secrets_named_mutex_release(mutex_server_name); SAFE_FREE(mutex_server_name); } } - diff --git a/source/passdb/secrets.c b/source/passdb/secrets.c index 307dc132fc5..b2bdaf2753c 100644 --- a/source/passdb/secrets.c +++ b/source/passdb/secrets.c @@ -559,3 +559,69 @@ NTSTATUS secrets_get_trusted_domains(TALLOC_CTX* ctx, int* enum_ctx, int max_num return status; } +static SIG_ATOMIC_T gotalarm; + +/*************************************************************** + Signal function to tell us we timed out. +****************************************************************/ + +static void gotalarm_sig(void) +{ + gotalarm = 1; +} + +/* + lock the secrets tdb based on a string - this is used as a primitive form of mutex + between smbd instances. +*/ +BOOL secrets_named_mutex(const char *name, unsigned int timeout) +{ + TDB_DATA key; + int ret; + + if (!message_init()) + return False; + + key.dptr = (char *)name; + key.dsize = strlen(name)+1; + + /* Allow tdb_chainlock to be interrupted by an alarm. */ + gotalarm = 0; + tdb_set_lock_alarm(&gotalarm); + + if (timeout) { + CatchSignal(SIGALRM, SIGNAL_CAST gotalarm_sig); + alarm(timeout); + } + + ret = tdb_chainlock(tdb, key); + + /* Prevent tdb_chainlock from being interrupted by an alarm. */ + tdb_set_lock_alarm(NULL); + + if (timeout) { + alarm(0); + CatchSignal(SIGALRM, SIGNAL_CAST SIG_IGN); + if (gotalarm) + return False; + } + + if (ret == 0) + DEBUG(10,("secrets_named_mutex: got mutex for %s\n", name )); + + return (ret == 0); +} + +/* + unlock a named mutex +*/ +void secrets_named_mutex_release(char *name) +{ + TDB_DATA key; + + key.dptr = name; + key.dsize = strlen(name)+1; + + tdb_chainunlock(tdb, key); + DEBUG(10,("secrets_named_mutex: released mutex for %s\n", name )); +} diff --git a/source/tdb/tdb.c b/source/tdb/tdb.c index 40e7dcd42c7..5bb75ffe077 100644 --- a/source/tdb/tdb.c +++ b/source/tdb/tdb.c @@ -34,6 +34,7 @@ #include #include #include +#include #include "tdb.h" #include "spinlock.h" #else @@ -160,6 +161,18 @@ struct list_struct { */ }; +/*************************************************************** + Allow a caller to set a "alarm" flag that tdb can check to abort + a blocking lock on SIGALRM. +***************************************************************/ + +static sig_atomic_t *palarm_fired; + +void tdb_set_lock_alarm(sig_atomic_t *palarm) +{ + palarm_fired = palarm; +} + /* a byte range locking function - return 0 on success this functions locks/unlocks 1 byte at the specified offset. @@ -186,6 +199,8 @@ static int tdb_brlock(TDB_CONTEXT *tdb, tdb_off offset, do { ret = fcntl(tdb->fd,lck_type,&fl); + if (ret == -1 && errno == EINTR && palarm_fired && *palarm_fired) + break; } while (ret == -1 && errno == EINTR); if (ret == -1) { diff --git a/source/tdb/tdb.h b/source/tdb/tdb.h index 8cc908703f8..42b88aeb161 100644 --- a/source/tdb/tdb.h +++ b/source/tdb/tdb.h @@ -126,6 +126,7 @@ int tdb_lockall(TDB_CONTEXT *tdb); void tdb_unlockall(TDB_CONTEXT *tdb); /* Low level locking functions: use with care */ +void tdb_set_lock_alarm(sig_atomic_t *palarm); int tdb_chainlock(TDB_CONTEXT *tdb, TDB_DATA key); int tdb_chainunlock(TDB_CONTEXT *tdb, TDB_DATA key); diff --git a/source/tdb/tdbbackup.c b/source/tdb/tdbbackup.c index f59f98a90f5..36ba7db9188 100644 --- a/source/tdb/tdbbackup.c +++ b/source/tdb/tdbbackup.c @@ -53,6 +53,7 @@ #include #include #include +#include #include "tdb.h" static int failed; -- cgit From 660dafcbb2d1029831212a32d995891626a0344c Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 18 Sep 2002 00:30:00 +0000 Subject: We had a race condition when changing a machine acount password as we were no longer locking the secrets entry. I saw this on a live system. Jeremy. --- source/passdb/secrets.c | 22 +++++++++++++++++++++- source/smbd/process.c | 9 +++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/source/passdb/secrets.c b/source/passdb/secrets.c index b2bdaf2753c..08a0e9c9acf 100644 --- a/source/passdb/secrets.c +++ b/source/passdb/secrets.c @@ -206,8 +206,27 @@ char *trustdom_keystr(const char *domain) } /************************************************************************ - Routine to get the machine trust account password for a domain. + Lock the trust password entry. ************************************************************************/ + +BOOL secrets_lock_trust_account_password(char *domain, BOOL dolock) +{ + if (!tdb) + return False; + + if (dolock) + return (tdb_lock_bystring(tdb, trust_keystr(domain)) == 0); + else + tdb_unlock_bystring(tdb, trust_keystr(domain)); + return True; +} + +/************************************************************************ + Routine to get the trust account password for a domain. + The user of this function must have locked the trust password file using + the above call. +************************************************************************/ + BOOL secrets_fetch_trust_account_password(char *domain, uint8 ret_pwd[16], time_t *pass_last_set_time) { @@ -243,6 +262,7 @@ BOOL secrets_fetch_trust_account_password(char *domain, uint8 ret_pwd[16], /************************************************************************ Routine to get account password to trusted domain ************************************************************************/ + BOOL secrets_fetch_trusted_domain_password(char *domain, char** pwd, DOM_SID *sid, time_t *pass_last_set_time) { diff --git a/source/smbd/process.c b/source/smbd/process.c index c796797fad1..0f7cfd0e9cb 100644 --- a/source/smbd/process.c +++ b/source/smbd/process.c @@ -1154,9 +1154,16 @@ static BOOL timeout_processing(int deadtime, int *select_timeout, time_t *last_t * First, open the machine password file with an exclusive lock. */ + if (secrets_lock_trust_account_password(global_myworkgroup, True) == False) { + DEBUG(0,("process: unable to lock the machine account password for \ +machine %s in domain %s.\n", global_myname, global_myworkgroup )); + return True; + } + if(!secrets_fetch_trust_account_password(global_myworkgroup, trust_passwd_hash, &lct)) { DEBUG(0,("process: unable to read the machine account password for \ machine %s in domain %s.\n", global_myname, global_myworkgroup )); + secrets_lock_trust_account_password(global_myworkgroup, False); return True; } @@ -1166,6 +1173,7 @@ machine %s in domain %s.\n", global_myname, global_myworkgroup )); if(t < lct + lp_machine_password_timeout()) { global_machine_password_needs_changing = False; + secrets_lock_trust_account_password(global_myworkgroup, False); return True; } @@ -1173,6 +1181,7 @@ machine %s in domain %s.\n", global_myname, global_myworkgroup )); change_trust_account_password( global_myworkgroup, remote_machine_list); global_machine_password_needs_changing = False; + secrets_lock_trust_account_password(global_myworkgroup, False); } /* -- cgit From 66c2e25079b348188abd48868300771b1e49fff3 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 18 Sep 2002 01:40:13 +0000 Subject: Fixed compiler error when HAVE_KRB5 not defined. --- source/libsmb/clikrb5.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libsmb/clikrb5.c b/source/libsmb/clikrb5.c index 22bfdc04633..e7143d065d7 100644 --- a/source/libsmb/clikrb5.c +++ b/source/libsmb/clikrb5.c @@ -154,7 +154,7 @@ failed: #else /* HAVE_KRB5 */ /* this saves a few linking headaches */ - DATA_BLOB krb5_get_ticket(char *principal) + DATA_BLOB krb5_get_ticket(char *principal, time_t time_offset) { DEBUG(0,("NO KERBEROS SUPPORT\n")); return data_blob(NULL, 0); -- cgit From a8dc1464ea2d05eb2a26afdd433cdb6b69002259 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Wed, 18 Sep 2002 06:11:13 +0000 Subject: Add a synonym for samdump ... --- source/utils/net_rpc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c index 4067ce344d3..50c14c6f5b8 100644 --- a/source/utils/net_rpc.c +++ b/source/utils/net_rpc.c @@ -2260,6 +2260,7 @@ int net_rpc(int argc, const char **argv) {"abortshutdown", rpc_shutdown_abort}, {"shutdown", rpc_shutdown}, {"samdump", rpc_samdump}, + {"vampire", rpc_samdump}, {"getsid", net_rpc_getsid}, {"help", net_rpc_help}, {NULL, NULL} -- cgit From 0c1fadd9e024ef886542d362a7f119968552852d Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 18 Sep 2002 06:34:10 +0000 Subject: First code for 'net rpc vampire'. We should probably find a more positive name for this. It creates users and global groups. More to come. Volker --- source/Makefile.in | 2 +- source/utils/net_rpc.c | 2 +- source/utils/net_rpc_samsync.c | 278 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 280 insertions(+), 2 deletions(-) diff --git a/source/Makefile.in b/source/Makefile.in index cc8fb42e9af..d7f8dc5f680 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -387,7 +387,7 @@ NET_OBJ1 = utils/net.o utils/net_ads.o utils/net_ads_cldap.o utils/net_help.o \ utils/net_cache.o NET_OBJ = $(NET_OBJ1) $(SECRETS_OBJ) $(LIBSMB_OBJ) \ - $(RPC_PARSE_OBJ) $(PASSDB_GET_SET_OBJ) \ + $(RPC_PARSE_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ) \ $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \ $(LIBMSRPC_OBJ) $(LIBMSRPC_SERVER_OBJ) \ $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c index 50c14c6f5b8..3192768931b 100644 --- a/source/utils/net_rpc.c +++ b/source/utils/net_rpc.c @@ -2260,7 +2260,7 @@ int net_rpc(int argc, const char **argv) {"abortshutdown", rpc_shutdown_abort}, {"shutdown", rpc_shutdown}, {"samdump", rpc_samdump}, - {"vampire", rpc_samdump}, + {"vampire", rpc_vampire}, {"getsid", net_rpc_getsid}, {"help", net_rpc_help}, {NULL, NULL} diff --git a/source/utils/net_rpc_samsync.c b/source/utils/net_rpc_samsync.c index 4ddb931adb7..6d8b7c672f9 100644 --- a/source/utils/net_rpc_samsync.c +++ b/source/utils/net_rpc_samsync.c @@ -185,3 +185,281 @@ fail: } return -1; } + +/* Convert a SAM_ACCOUNT_DELTA to a SAM_ACCOUNT. */ + +static NTSTATUS +sam_account_from_delta(SAM_ACCOUNT *account, SAM_ACCOUNT_INFO *delta) +{ + DOM_SID sid; + fstring s; + + /* Username, fullname, home dir, dir drive, logon script, acct + desc, workstations, profile. */ + + unistr2_to_ascii(s, &delta->uni_acct_name, sizeof(s) - 1); + pdb_set_nt_username(account, s); + + /* Unix username is the same - for sainity */ + pdb_set_username(account, s); + + unistr2_to_ascii(s, &delta->uni_full_name, sizeof(s) - 1); + pdb_set_fullname(account, s); + + unistr2_to_ascii(s, &delta->uni_home_dir, sizeof(s) - 1); + pdb_set_homedir(account, s, True); + + unistr2_to_ascii(s, &delta->uni_dir_drive, sizeof(s) - 1); + pdb_set_dir_drive(account, s, True); + + unistr2_to_ascii(s, &delta->uni_logon_script, sizeof(s) - 1); + pdb_set_logon_script(account, s, True); + + unistr2_to_ascii(s, &delta->uni_acct_desc, sizeof(s) - 1); + pdb_set_acct_desc(account, s); + + unistr2_to_ascii(s, &delta->uni_workstations, sizeof(s) - 1); + pdb_set_workstations(account, s); + + unistr2_to_ascii(s, &delta->uni_profile, sizeof(s) - 1); + pdb_set_profile_path(account, s, True); + + /* User and group sid */ + + sid_copy(&sid, get_global_sam_sid()); + sid_append_rid(&sid, delta->user_rid); + pdb_set_user_sid(account, &sid); + + sid_copy(&sid, get_global_sam_sid()); + sid_append_rid(&sid, delta->group_rid); + pdb_set_group_sid(account, &sid); + + /* Logon and password information */ + + pdb_set_logon_time(account, nt_time_to_unix(&delta->logon_time), True); + pdb_set_logoff_time(account, nt_time_to_unix(&delta->logoff_time), + True); + + pdb_set_logon_divs(account, delta->logon_divs); + + /* TODO: logon hours */ + /* TODO: bad password count */ + /* TODO: logon count */ + + pdb_set_pass_last_set_time( + account, nt_time_to_unix(&delta->pwd_last_set_time)); + + /* TODO: account expiry time */ + + pdb_set_acct_ctrl(account, delta->acb_info); + return NT_STATUS_OK; +} + +static NTSTATUS +fetch_account_info(uint32 rid, SAM_ACCOUNT_INFO *delta) +{ + NTSTATUS nt_ret; + fstring account; + pstring add_script; + SAM_ACCOUNT *sam_account=NULL; + + fstrcpy(account, unistr2_static(&delta->uni_acct_name)); + d_printf("Creating account: %s\n", account); + + if (!NT_STATUS_IS_OK(nt_ret = pdb_init_sam(&sam_account))) + return nt_ret; + + if (!pdb_getsampwnam(sam_account, account)) { + struct passwd *pw; + + /* Create appropriate user */ + if (delta->acb_info & ACB_NORMAL) { + pstrcpy(add_script, lp_adduser_script()); + } else if ( (delta->acb_info & ACB_WSTRUST) || + (delta->acb_info & ACB_SVRTRUST) ) { + pstrcpy(add_script, lp_addmachine_script()); + } else { + DEBUG(1, ("Unknown user type: %s\n", + smbpasswd_encode_acb_info(delta->acb_info))); + pdb_free_sam(&sam_account); + return NT_STATUS_NO_SUCH_USER; + } + if (*add_script) { + int add_ret; + all_string_sub(add_script, "%u", account, + sizeof(account)); + add_ret = smbrun(add_script,NULL); + DEBUG(1,("fetch_account: Running the command `%s' " + "gave %d\n", add_script, add_ret)); + } + pw = getpwnam_alloc(account); + if (pw) { + nt_ret = pdb_init_sam_pw(&sam_account, pw); + + if (!NT_STATUS_IS_OK(nt_ret)) { + passwd_free(&pw); + pdb_free_sam(&sam_account); + return nt_ret; + } + passwd_free(&pw); + } else { + DEBUG(3, ("Could not create account %s\n", account)); + pdb_free_sam(&sam_account); + return NT_STATUS_NO_SUCH_USER; + } + } + + sam_account_from_delta(sam_account, delta); + pdb_add_sam_account(sam_account); + pdb_free_sam(&sam_account); + return NT_STATUS_OK; +} + +static NTSTATUS +fetch_group_info(uint32 rid, SAM_GROUP_INFO *delta) +{ + fstring name; + fstring comment; + struct group *grp; + DOM_SID group_sid; + fstring sid_string; + GROUP_MAP map; + int flag = TDB_INSERT; + + unistr2_to_ascii(name, &delta->uni_grp_name, sizeof(name)-1); + unistr2_to_ascii(comment, &delta->uni_grp_desc, sizeof(comment)-1); + + if ((grp = getgrnam(name)) == NULL) + smb_create_group(name); + + if ((grp = getgrnam(name)) == NULL) + return NT_STATUS_ACCESS_DENIED; + + /* add the group to the mapping table */ + sid_copy(&group_sid, get_global_sam_sid()); + sid_append_rid(&group_sid, rid); + sid_to_string(sid_string, &group_sid); + + /* Add the group mapping */ + if (get_group_map_from_sid(group_sid, &map, False)) { + /* Don't TDB_INSERT, mapping exists */ + flag = 0; + } + + map.gid = grp->gr_gid; + map.sid = group_sid; + map.sid_name_use = SID_NAME_DOM_GRP; + fstrcpy(map.nt_name, name); + fstrcpy(map.comment, comment); + + map.priv_set.count = 0; + map.priv_set.set = NULL; + + add_mapping_entry(&map, flag); + + return NT_STATUS_OK; +} + +static void +fetch_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta) +{ + switch(hdr_delta->type) { + case SAM_DELTA_ACCOUNT_INFO: + fetch_account_info(hdr_delta->target_rid, + &delta->account_info); + break; + case SAM_DELTA_GROUP_INFO: + fetch_group_info(hdr_delta->target_rid, + &delta->group_info); + break; + default: + d_printf("Unknown delta record type %d\n", hdr_delta->type); + break; + } +} + +static void +fetch_database(struct cli_state *cli, unsigned db_type, DOM_CRED *ret_creds) +{ + unsigned last_rid = -1; + NTSTATUS result; + int i; + TALLOC_CTX *mem_ctx; + SAM_DELTA_HDR *hdr_deltas; + SAM_DELTA_CTR *deltas; + uint32 num_deltas; + + if (!(mem_ctx = talloc_init())) { + return; + } + + d_printf("Fetching database %u\n", db_type); + + do { + result = cli_netlogon_sam_sync(cli, mem_ctx, ret_creds, + db_type, last_rid+1, + &num_deltas, + &hdr_deltas, &deltas); + clnt_deal_with_creds(cli->sess_key, &(cli->clnt_cred), + ret_creds); + last_rid = 0; + for (i = 0; i < num_deltas; i++) { + fetch_sam_entry(&hdr_deltas[i], &deltas[i]); + last_rid = hdr_deltas[i].target_rid; + } + } while (last_rid && NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES)); + + talloc_destroy(mem_ctx); +} + +/* dump sam database via samsync rpc calls */ +int rpc_vampire(int argc, const char **argv) +{ + NTSTATUS result; + struct cli_state *cli = NULL; + uchar trust_password[16]; + DOM_CRED ret_creds; + uint32 neg_flags = 0x000001ff; + + ZERO_STRUCT(ret_creds); + + /* Connect to remote machine */ + if (!(cli = net_make_ipc_connection(NET_FLAGS_ANONYMOUS | + NET_FLAGS_PDC))) { + return 1; + } + + if (!cli_nt_session_open(cli, PIPE_NETLOGON)) { + DEBUG(0,("Error connecting to NETLOGON pipe\n")); + goto fail; + } + + if (!secrets_fetch_trust_account_password(lp_workgroup(), + trust_password, NULL)) { + d_printf("Could not retrieve domain trust secret"); + goto fail; + } + + result = cli_nt_setup_creds(cli, SEC_CHAN_BDC, trust_password, + &neg_flags, 2); + if (!NT_STATUS_IS_OK(result)) { + d_printf("Failed to setup BDC creds\n"); + goto fail; + } + + fetch_database(cli, SAM_DATABASE_DOMAIN, &ret_creds); + fetch_database(cli, SAM_DATABASE_BUILTIN, &ret_creds); + + /* Currently we crash on PRIVS somewhere in unmarshalling */ + /* Dump_database(cli, SAM_DATABASE_PRIVS, &ret_creds); */ + + cli_nt_session_close(cli); + + return 0; + +fail: + if (cli) { + cli_nt_session_close(cli); + } + return -1; +} -- cgit From 3c6975c711d87755f0532147f9aaecb224159f43 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 18 Sep 2002 08:16:22 +0000 Subject: Display the repr() of non-string dictionary values. --- source/python/gtkdictbrowser.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/source/python/gtkdictbrowser.py b/source/python/gtkdictbrowser.py index 6d6cdb3c8ae..dd8bed8f478 100755 --- a/source/python/gtkdictbrowser.py +++ b/source/python/gtkdictbrowser.py @@ -116,16 +116,27 @@ class GtkDictBrowser: # Set the text to appear in the right hand side of the user interface - def set_value_text(self, text): - self.text.delete_text(0, self.text.get_length()) + def set_value_text(self, item): - # The text widget has trouble inserting text containing NULL - # characters. + # Clear old old value in text window - text = string.replace(text, "\x00", ".") + self.text.delete_text(0, self.text.get_length()) + + if type(item) == str: - self.text.insert(self.font, None, None, text) + # The text widget has trouble inserting text containing NULL + # characters. + + item = string.replace(item, "\x00", ".") + + self.text.insert(self.font, None, None, item) + else: + + # A non-text item + + self.text.insert(self.font, None, None, repr(item)) + # This function is called when a key is selected in the left hand side # of the user interface. @@ -246,7 +257,7 @@ def hex_string(data): if __name__ == "__main__": - dict = {"chicken": "ham", "spam": "fun"} + dict = {"chicken": "ham", "spam": "fun", "subdict": {"a": "b", "c": "d"}} db = GtkDictBrowser(dict) -- cgit From 53f7af9c41633877757c85182660c0826275ff2d Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 18 Sep 2002 13:16:07 +0000 Subject: samtest and vfstest binaries shouldn't go into CVS... --- source/bin/.cvsignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/bin/.cvsignore b/source/bin/.cvsignore index c87d15fdb40..de6085d5261 100644 --- a/source/bin/.cvsignore +++ b/source/bin/.cvsignore @@ -38,3 +38,5 @@ testprns wbinfo winbindd wrepld +vfstest +samtest -- cgit From 060c0bda078923b11c34539323f9def176c006bc Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 18 Sep 2002 13:34:47 +0000 Subject: Update introduction somewhat --- docs/docbook/devdoc/dev-doc.sgml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/docbook/devdoc/dev-doc.sgml b/docs/docbook/devdoc/dev-doc.sgml index 0e017fb6a68..c1ffb735bad 100644 --- a/docs/docbook/devdoc/dev-doc.sgml +++ b/docs/docbook/devdoc/dev-doc.sgml @@ -31,9 +31,11 @@ This book is a collection of documents that might be useful for people developing samba or those interested in doing so. -than one person can maintain. The most recent version of this document -can be found at http://www.samba.org/ -on the "Documentation" page. Please send updates to http://devel.samba.org/. +Please send updates to jelmer@samba.org. -- cgit From aa52351384abace54a89c9fbfa5e4c31a8464c91 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 18 Sep 2002 19:06:58 +0000 Subject: printjob merge from APP_HEAD regarding device modes --- source/include/includes.h | 5 ++ source/include/printing.h | 1 + source/printing/nt_printing.c | 4 +- source/printing/printfsp.c | 2 +- source/printing/printing.c | 156 ++++++++++++++++++++++++++++++------- source/rpc_server/srv_spoolss_nt.c | 156 ++++++++++++++++++++++--------------- 6 files changed, 232 insertions(+), 92 deletions(-) diff --git a/source/include/includes.h b/source/include/includes.h index bdf5bbcef36..56b83578312 100644 --- a/source/include/includes.h +++ b/source/include/includes.h @@ -803,6 +803,11 @@ struct functable { #include "nsswitch/nss.h" +/* forward declaration from printing.h to get around + header file dependencies */ + +struct printjob; + /***** automatically generated prototypes *****/ #include "proto.h" diff --git a/source/include/printing.h b/source/include/printing.h index ecf603b8fcc..9774a6acd95 100644 --- a/source/include/printing.h +++ b/source/include/printing.h @@ -43,6 +43,7 @@ struct printjob { fstring jobname; /* the job name given to us by the client */ fstring user; /* the user who started the job */ fstring queuename; /* service number of printer for this job */ + NT_DEVICEMODE *nt_devmode; }; /* Information for print interfaces */ diff --git a/source/printing/nt_printing.c b/source/printing/nt_printing.c index 2a96f9a83e0..58eba9d87e8 100644 --- a/source/printing/nt_printing.c +++ b/source/printing/nt_printing.c @@ -1905,7 +1905,7 @@ static uint32 dump_a_printer_driver(NT_PRINTER_DRIVER_INFO_LEVEL driver, uint32 /**************************************************************************** ****************************************************************************/ -static int pack_devicemode(NT_DEVICEMODE *nt_devmode, char *buf, int buflen) +int pack_devicemode(NT_DEVICEMODE *nt_devmode, char *buf, int buflen) { int len = 0; @@ -2282,7 +2282,7 @@ static void free_nt_printer_info_level_2(NT_PRINTER_INFO_LEVEL_2 **info_ptr) /**************************************************************************** ****************************************************************************/ -static int unpack_devicemode(NT_DEVICEMODE **nt_devmode, char *buf, int buflen) +int unpack_devicemode(NT_DEVICEMODE **nt_devmode, char *buf, int buflen) { int len = 0; int extra_len = 0; diff --git a/source/printing/printfsp.c b/source/printing/printfsp.c index ff50ac47c49..8a4e7ea073b 100644 --- a/source/printing/printfsp.c +++ b/source/printing/printfsp.c @@ -46,7 +46,7 @@ files_struct *print_fsp_open(connection_struct *conn, char *fname) fstrcat(name, p); } - jobid = print_job_start(¤t_user, SNUM(conn), name); + jobid = print_job_start(¤t_user, SNUM(conn), name, NULL); if (jobid == -1) { file_free(fsp); return NULL; diff --git a/source/printing/printing.c b/source/printing/printing.c index 035d4d383af..208da5b78b5 100644 --- a/source/printing/printing.c +++ b/source/printing/printing.c @@ -311,15 +311,49 @@ static TDB_DATA print_key(uint32 jobid) return ret; } +/*********************************************************************** + unpack a pjob from a tdb buffer +***********************************************************************/ + +int unpack_pjob( char* buf, int buflen, struct printjob *pjob ) +{ + int len = 0; + + if ( !buf || !pjob ) + return -1; + + len += tdb_unpack(buf+len, buflen-len, "dddddddddffff", + &pjob->pid, + &pjob->sysjob, + &pjob->fd, + &pjob->starttime, + &pjob->status, + &pjob->size, + &pjob->page_count, + &pjob->spooled, + &pjob->smbjob, + pjob->filename, + pjob->jobname, + pjob->user, + pjob->queuename); + + + len += unpack_devicemode(&pjob->nt_devmode, buf+len, buflen-len); + + return len; + +} + /**************************************************************************** Useful function to find a print job in the database. ****************************************************************************/ static struct printjob *print_job_find(int snum, uint32 jobid) { - static struct printjob pjob; - TDB_DATA ret; - struct tdb_print_db *pdb = get_print_db_byname(lp_const_servicename(snum)); + static struct printjob pjob; + TDB_DATA ret; + struct tdb_print_db *pdb = get_print_db_byname(lp_const_servicename(snum)); + if (!pdb) return NULL; @@ -327,11 +361,17 @@ static struct printjob *print_job_find(int snum, uint32 jobid) ret = tdb_fetch(pdb->tdb, print_key(jobid)); release_print_db(pdb); - if (!ret.dptr || ret.dsize != sizeof(pjob)) + if (!ret.dptr) return NULL; - - memcpy(&pjob, ret.dptr, sizeof(pjob)); - SAFE_FREE(ret.dptr); + + if ( pjob.nt_devmode ) + free_nt_devicemode( &pjob.nt_devmode ); + + ZERO_STRUCT( pjob ); + + unpack_pjob( ret.dptr, ret.dsize, &pjob ); + + SAFE_FREE(ret.dptr); return &pjob; } @@ -462,9 +502,12 @@ static void pjob_store_notify(int snum, uint32 jobid, struct printjob *old_data, static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob) { - TDB_DATA old_data, new_data; - BOOL ret; - struct tdb_print_db *pdb = get_print_db_byname(lp_const_servicename(snum)); + TDB_DATA old_data, new_data; + BOOL ret = False; + struct tdb_print_db *pdb = get_print_db_byname(lp_const_servicename(snum)); + char *buf = NULL; + int len, newlen, buflen; + if (!pdb) return False; @@ -473,22 +516,63 @@ static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob) old_data = tdb_fetch(pdb->tdb, print_key(jobid)); + /* Doh! Now we have to pack/unpack data since the NT_DEVICEMODE was added */ + + newlen = 0; + + do { + len = 0; + buflen = newlen; + len += tdb_pack(buf+len, buflen-len, "dddddddddffff", + pjob->pid, + pjob->sysjob, + pjob->fd, + pjob->starttime, + pjob->status, + pjob->size, + pjob->page_count, + pjob->spooled, + pjob->smbjob, + pjob->filename, + pjob->jobname, + pjob->user, + pjob->queuename); + + len += pack_devicemode(pjob->nt_devmode, buf+len, buflen-len); + + if (buflen != len) + { + char *tb; + + tb = (char *)Realloc(buf, len); + if (!tb) { + DEBUG(0,("pjob_store: failed to enlarge buffer!\n")); + goto done; + } + else + buf = tb; + newlen = len; + } + } + while ( buflen != len ); + + /* Store new data */ - new_data.dptr = (void *)pjob; - new_data.dsize = sizeof(*pjob); + new_data.dptr = buf; + new_data.dsize = len; ret = (tdb_store(pdb->tdb, print_key(jobid), new_data, TDB_REPLACE) == 0); release_print_db(pdb); /* Send notify updates for what has changed */ - if (ret && (old_data.dsize == 0 || old_data.dsize == sizeof(*pjob))) { - pjob_store_notify( - snum, jobid, (struct printjob *)old_data.dptr, - (struct printjob *)new_data.dptr); - free(old_data.dptr); - } + if ( ret && (old_data.dsize == 0 || old_data.dsize == sizeof(*pjob)) ) + pjob_store_notify( snum, jobid, (struct printjob *)old_data.dptr, pjob ); + +done: + SAFE_FREE( old_data.dptr ); + SAFE_FREE( buf ); return ret; } @@ -956,6 +1040,23 @@ char *print_job_fname(int snum, uint32 jobid) return pjob->filename; } + +/**************************************************************************** + Give the filename used for a jobid. + Only valid for the process doing the spooling and when the job + has not been spooled. +****************************************************************************/ + +NT_DEVICEMODE *print_job_devmode(int snum, uint32 jobid) +{ + struct printjob *pjob = print_job_find(snum, jobid); + + if ( !pjob ) + return NULL; + + return pjob->nt_devmode; +} + /**************************************************************************** Set the place in the queue for a job. ****************************************************************************/ @@ -1297,7 +1398,7 @@ int print_queue_length(int snum, print_status_struct *pstatus) Start spooling a job - return the jobid. ***************************************************************************/ -uint32 print_job_start(struct current_user *user, int snum, char *jobname) +uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DEVICEMODE *nt_devmode ) { uint32 jobid; char *path; @@ -1357,7 +1458,9 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) } /* create the database entry */ + ZERO_STRUCT(pjob); + pjob.pid = local_pid; pjob.sysjob = -1; pjob.fd = -1; @@ -1366,7 +1469,8 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) pjob.size = 0; pjob.spooled = False; pjob.smbjob = True; - + pjob.nt_devmode = nt_devmode; + fstrcpy(pjob.jobname, jobname); if ((vuser = get_valid_user_struct(user->vuid)) != NULL) { @@ -1554,10 +1658,10 @@ static int traverse_fn_queue(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void * int i; uint32 jobid; - if (data.dsize != sizeof(pjob) || key.dsize != sizeof(int)) - return 0; memcpy(&jobid, key.dptr, sizeof(jobid)); - memcpy(&pjob, data.dptr, sizeof(pjob)); + + if ( !unpack_pjob( data.dptr, data.dsize, &pjob ) ) + return 0; /* maybe it isn't for this queue */ if (ts->snum != lp_servicenumber(pjob.queuename)) @@ -1596,10 +1700,10 @@ static int traverse_count_fn_queue(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, struct printjob pjob; uint32 jobid; - if (data.dsize != sizeof(pjob) || key.dsize != sizeof(int)) - return 0; memcpy(&jobid, key.dptr, sizeof(jobid)); - memcpy(&pjob, data.dptr, sizeof(pjob)); + + if ( !unpack_pjob( data.dptr, data.dsize, &pjob ) ) + return 0; /* maybe it isn't for this queue - this cannot happen with the tdb/printer code. JRA */ if (ts->snum != lp_servicenumber(pjob.queuename)) diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index bcba89c2cc1..6953ec36631 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -87,6 +87,10 @@ typedef struct _Printer{ fstring machine; fstring user; } client; + + /* devmode sent in the OpenPrinter() call */ + NT_DEVICEMODE *nt_devmode; + } Printer_entry; static Printer_entry *printers_list; @@ -224,6 +228,8 @@ static void free_printer_entry(void *ptr) free_spool_notify_option(&Printer->notify.option); Printer->notify.option=NULL; Printer->notify.client_connected=False; + + free_nt_devicemode( &Printer->nt_devmode ); /* Remove from the internal list. */ DLIST_REMOVE(printers_list, Printer); @@ -1446,9 +1452,9 @@ WERROR _spoolss_open_printer(pipes_struct *p, SPOOL_Q_OPEN_PRINTER *q_u, SPOOL_R WERROR _spoolss_open_printer_ex( pipes_struct *p, SPOOL_Q_OPEN_PRINTER_EX *q_u, SPOOL_R_OPEN_PRINTER_EX *r_u) { - UNISTR2 *printername = NULL; - PRINTER_DEFAULT *printer_default = &q_u->printer_default; - POLICY_HND *handle = &r_u->handle; + UNISTR2 *printername = NULL; + PRINTER_DEFAULT *printer_default = &q_u->printer_default; + POLICY_HND *handle = &r_u->handle; fstring name; int snum; @@ -1606,6 +1612,18 @@ Can't find printer handle we created for printer %s\n", name )); } Printer->access_granted = printer_default->access_required; + + /* + * If the client sent a devmode in the OpenPrinter() call, then + * save it here in case we get a job submission on this handle + */ + + if ( (Printer->printer_type != PRINTER_HANDLE_IS_PRINTSERVER) + && q_u->printer_default.devmode_cont.devmode_ptr ) + { + convert_devicemode( Printer->dev.handlename, q_u->printer_default.devmode_cont.devmode, + &Printer->nt_devmode ); + } return WERR_OK; } @@ -3784,47 +3802,20 @@ static void free_dev_mode(DEVICEMODE *dev) SAFE_FREE(dev); } + /**************************************************************************** - Create a DEVMODE struct. Returns malloced memory. + Convert an NT_DEVICEMODE to a DEVICEMODE structure. Both pointers + should be valid upon entry ****************************************************************************/ -DEVICEMODE *construct_dev_mode(int snum) +static BOOL convert_nt_devicemode( DEVICEMODE *devmode, NT_DEVICEMODE *ntdevmode ) { - char adevice[32]; - char aform[32]; - NT_PRINTER_INFO_LEVEL *printer = NULL; - NT_DEVICEMODE *ntdevmode = NULL; - DEVICEMODE *devmode = NULL; - - DEBUG(7,("construct_dev_mode\n")); - - DEBUGADD(8,("getting printer characteristics\n")); - - if ((devmode = (DEVICEMODE *)malloc(sizeof(DEVICEMODE))) == NULL) { - DEBUG(2,("construct_dev_mode: malloc fail.\n")); - return NULL; - } - - ZERO_STRUCTP(devmode); - - if (!W_ERROR_IS_OK(get_a_printer(&printer, 2, lp_servicename(snum)))) - goto fail; - - if (printer->info_2->devmode) - ntdevmode = dup_nt_devicemode(printer->info_2->devmode); - - if (ntdevmode == NULL) { - DEBUG(5, ("BONG! There was no device mode!\n")); - goto fail; - } - - DEBUGADD(8,("loading DEVICEMODE\n")); - - slprintf(adevice, sizeof(adevice)-1, printer->info_2->printername); - init_unistr(&devmode->devicename, adevice); + if ( !devmode || !ntdevmode ) + return False; + + init_unistr(&devmode->devicename, ntdevmode->devicename); - slprintf(aform, sizeof(aform)-1, ntdevmode->formname); - init_unistr(&devmode->formname, aform); + init_unistr(&devmode->formname, ntdevmode->formname); devmode->specversion = ntdevmode->specversion; devmode->driverversion = ntdevmode->driverversion; @@ -3852,23 +3843,51 @@ DEVICEMODE *construct_dev_mode(int snum) if (ntdevmode->private != NULL) { if ((devmode->private=(uint8 *)memdup(ntdevmode->private, ntdevmode->driverextra)) == NULL) - goto fail; + return False; } + + return True; +} - free_nt_devicemode(&ntdevmode); - free_a_printer(&printer,2); +/**************************************************************************** + Create a DEVMODE struct. Returns malloced memory. +****************************************************************************/ - return devmode; +DEVICEMODE *construct_dev_mode(int snum) +{ + NT_PRINTER_INFO_LEVEL *printer = NULL; + DEVICEMODE *devmode = NULL; + + DEBUG(7,("construct_dev_mode\n")); + + DEBUGADD(8,("getting printer characteristics\n")); - fail: + if (!W_ERROR_IS_OK(get_a_printer(&printer, 2, lp_servicename(snum)))) + return NULL; - if (ntdevmode) - free_nt_devicemode(&ntdevmode); - if (printer) - free_a_printer(&printer,2); - free_dev_mode(devmode); + if ( !printer->info_2->devmode ) { + DEBUG(5, ("BONG! There was no device mode!\n")); + goto done; + } + + if ((devmode = (DEVICEMODE *)malloc(sizeof(DEVICEMODE))) == NULL) { + DEBUG(2,("construct_dev_mode: malloc fail.\n")); + goto done; + } + + ZERO_STRUCTP(devmode); + + DEBUGADD(8,("loading DEVICEMODE\n")); + + if ( !convert_nt_devicemode( devmode, printer->info_2->devmode ) ) { + free_dev_mode( devmode ); + devmode = NULL; + } - return NULL; +done: + free_a_printer(&printer,2); + + return devmode; } /******************************************************************** @@ -5286,10 +5305,6 @@ WERROR _spoolss_startdocprinter(pipes_struct *p, SPOOL_Q_STARTDOCPRINTER *q_u, S * in EMF format. * * So I add checks like in NT Server ... - * - * lkclXXXX jean-francois, i love this kind of thing. oh, well, - * there's a bug in NT client-side code, so we'll fix it in the - * server-side code. *nnnnnggggh!* */ if (info_1->p_datatype != 0) { @@ -5307,7 +5322,7 @@ WERROR _spoolss_startdocprinter(pipes_struct *p, SPOOL_Q_STARTDOCPRINTER *q_u, S unistr2_to_ascii(jobname, &info_1->docname, sizeof(jobname)); - Printer->jobid = print_job_start(&user, snum, jobname); + Printer->jobid = print_job_start(&user, snum, jobname, Printer->nt_devmode); /* An error occured in print_job_start() so return an appropriate NT error code. */ @@ -8013,7 +8028,7 @@ static WERROR getjob_level_1(print_queue_struct *queue, int count, int snum, uin return WERR_NOMEM; } - for (i=0; i Date: Wed, 18 Sep 2002 20:07:56 +0000 Subject: HPUX sendfile is now detected correctly. Jeremy. --- source/acconfig.h | 2 +- source/configure | 1824 ++++++++++++++++++++++++-------------------- source/configure.in | 56 +- source/include/config.h.in | 3 +- source/lib/sendfile.c | 3 +- 5 files changed, 1042 insertions(+), 846 deletions(-) diff --git a/source/acconfig.h b/source/acconfig.h index 21c6e330760..45d63669354 100644 --- a/source/acconfig.h +++ b/source/acconfig.h @@ -228,5 +228,5 @@ #undef LINUX_BROKEN_SENDFILE_API #undef WITH_SENDFILE #undef FREEBSD_SENDFILE_API +#undef HPUX_SENDFILE_API #undef WITH_ADS - diff --git a/source/configure b/source/configure index ced279d410f..9bd514ee04e 100755 --- a/source/configure +++ b/source/configure @@ -50,6 +50,8 @@ ac_help="$ac_help --with-ads Active Directory support (default yes)" ac_help="$ac_help --with-krb5=base-dir Locate Kerberos 5 support (default=/usr)" +ac_help="$ac_help + --with-ldap LDAP support (default yes)" ac_help="$ac_help --with-automount Include AUTOMOUNT support (default=no)" ac_help="$ac_help @@ -822,7 +824,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:826: checking for $ac_word" >&5 +echo "configure:828: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -852,7 +854,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:856: checking for $ac_word" >&5 +echo "configure:858: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -903,7 +905,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:907: checking for $ac_word" >&5 +echo "configure:909: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -935,7 +937,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:939: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:941: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -946,12 +948,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 950 "configure" +#line 952 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -977,12 +979,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:981: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:983: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:986: checking whether we are using GNU C" >&5 +echo "configure:988: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -991,7 +993,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:995: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:997: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1010,7 +1012,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1014: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1016: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1072,7 +1074,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1076: checking for a BSD compatible install" >&5 +echo "configure:1078: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1124,12 +1126,12 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -for ac_prog in mawk gawk nawk awk +for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1133: checking for $ac_word" >&5 +echo "configure:1135: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1161,7 +1163,7 @@ done LD=ld echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1165: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1167: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1177,7 +1179,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1181: checking for POSIXized ISC" >&5 +echo "configure:1183: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1200,10 +1202,10 @@ fi if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:1204: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:1206: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:1207: checking whether cc understands -c and -o together" >&5 +echo "configure:1209: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -1215,16 +1217,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1222: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1225: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1227: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:1227: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1228: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:1229: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1230: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -1258,20 +1260,20 @@ fi echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6 -echo "configure:1262: checking that the C compiler understands volatile" >&5 +echo "configure:1264: checking that the C compiler understands volatile" >&5 if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { volatile int i = 0 ; return 0; } EOF -if { (eval echo configure:1275: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1277: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_volatile=yes else @@ -1320,7 +1322,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1324: checking host system type" >&5 +echo "configure:1326: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1341,7 +1343,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1345: checking target system type" >&5 +echo "configure:1347: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1359,7 +1361,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1363: checking build system type" >&5 +echo "configure:1365: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1393,7 +1395,7 @@ esac echo $ac_n "checking config.cache system type""... $ac_c" 1>&6 -echo "configure:1397: checking config.cache system type" >&5 +echo "configure:1399: checking config.cache system type" >&5 if { test x"${ac_cv_host_system_type+set}" = x"set" && test x"$ac_cv_host_system_type" != x"$host"; } || { test x"${ac_cv_build_system_type+set}" = x"set" && @@ -1421,7 +1423,7 @@ case "$host_os" in *hpux*) echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6 -echo "configure:1425: checking whether ${CC-cc} accepts -Ae" >&5 +echo "configure:1427: checking whether ${CC-cc} accepts -Ae" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1582,14 +1584,14 @@ EOF *sysv4*) if test $host = mips-sni-sysv4 ; then echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1586: checking for LFS support" >&5 +echo "configure:1588: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then SINIX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1601,7 +1603,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1607: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then SINIX_LFS_SUPPORT=yes else @@ -1632,14 +1634,14 @@ EOF # *linux*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1636: checking for LFS support" >&5 +echo "configure:1638: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then LINUX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1677,7 +1679,7 @@ main() { } EOF -if { (eval echo configure:1681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then LINUX_LFS_SUPPORT=yes else @@ -1710,14 +1712,14 @@ EOF *hurd*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1714: checking for LFS support" >&5 +echo "configure:1716: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then GLIBC_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1729,7 +1731,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then GLIBC_LFS_SUPPORT=yes else @@ -1759,21 +1761,21 @@ EOF esac echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1763: checking for inline" >&5 +echo "configure:1765: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -1799,7 +1801,7 @@ EOF esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1803: checking how to run the C preprocessor" >&5 +echo "configure:1805: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1814,13 +1816,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1826: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1831,13 +1833,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1841: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1843: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1848,13 +1850,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1858: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1860: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1879,12 +1881,12 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1883: checking for ANSI C header files" >&5 +echo "configure:1885: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1892,7 +1894,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1896: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1898: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1909,7 +1911,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1927,7 +1929,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1948,7 +1950,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1959,7 +1961,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1987,12 +1989,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1991: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1993: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -2000,7 +2002,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:2004: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2006: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2025,7 +2027,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2029: checking for opendir in -ldir" >&5 +echo "configure:2031: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2033,7 +2035,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2050: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2066,7 +2068,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2070: checking for opendir in -lx" >&5 +echo "configure:2072: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2074,7 +2076,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2108,12 +2110,12 @@ fi fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2112: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2114: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2122,7 +2124,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2126: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2128: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2143,12 +2145,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2147: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2149: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2164,7 +2166,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2170: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2188,17 +2190,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2192: checking for $ac_hdr" >&5 +echo "configure:2194: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2202: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2204: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2228,17 +2230,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2232: checking for $ac_hdr" >&5 +echo "configure:2234: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2242: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2244: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2268,17 +2270,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2272: checking for $ac_hdr" >&5 +echo "configure:2274: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2282: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2284: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2308,17 +2310,17 @@ for ac_hdr in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2312: checking for $ac_hdr" >&5 +echo "configure:2314: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2322: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2324: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2348,17 +2350,17 @@ for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h std do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2352: checking for $ac_hdr" >&5 +echo "configure:2354: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2362: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2364: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2388,17 +2390,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2392: checking for $ac_hdr" >&5 +echo "configure:2394: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2402: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2404: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2428,17 +2430,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2432: checking for $ac_hdr" >&5 +echo "configure:2434: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2442: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2468,17 +2470,17 @@ for ac_hdr in security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2472: checking for $ac_hdr" >&5 +echo "configure:2474: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2482: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2484: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2508,17 +2510,17 @@ for ac_hdr in sys/syslog.h syslog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2512: checking for $ac_hdr" >&5 +echo "configure:2514: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2522: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2524: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2552,14 +2554,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2563: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2565: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2581,17 +2583,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2585: checking for $ac_hdr" >&5 +echo "configure:2587: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2595: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2597: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2621,17 +2623,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2625: checking for $ac_hdr" >&5 +echo "configure:2627: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2635: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2637: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2661,17 +2663,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2665: checking for $ac_hdr" >&5 +echo "configure:2667: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2675: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2677: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2701,17 +2703,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2705: checking for $ac_hdr" >&5 +echo "configure:2707: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2717: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2741,17 +2743,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2745: checking for $ac_hdr" >&5 +echo "configure:2747: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2755: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2757: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2783,17 +2785,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2787: checking for $ac_hdr" >&5 +echo "configure:2789: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2799: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2825,17 +2827,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2829: checking for $ac_hdr" >&5 +echo "configure:2831: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2839: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2841: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2867,17 +2869,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2871: checking for $ac_hdr" >&5 +echo "configure:2873: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2881: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2883: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2905,7 +2907,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2909: checking size of int" >&5 +echo "configure:2911: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2913,19 +2915,18 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(int)); - exit(0); + return(0); } EOF -if { (eval echo configure:2929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2945,7 +2946,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2949: checking size of long" >&5 +echo "configure:2950: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2953,16 +2954,15 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(long)); - exit(0); + return(0); } EOF if { (eval echo configure:2969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -2996,16 +2996,15 @@ else #line 2997 "configure" #include "confdefs.h" #include -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(short)); - exit(0); + return(0); } EOF -if { (eval echo configure:3009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3026,12 +3025,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3030: checking for working const" >&5 +echo "configure:3029: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3101,21 +3100,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3105: checking for inline" >&5 +echo "configure:3104: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3141,14 +3140,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3145: checking whether byte ordering is bigendian" >&5 +echo "configure:3144: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3159,11 +3158,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3174,7 +3173,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3178: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3177: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3194,7 +3193,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3210: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3231,14 +3230,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3235: checking whether char is unsigned" >&5 +echo "configure:3234: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3295,12 +3294,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3299: checking return type of signal handlers" >&5 +echo "configure:3298: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3317,7 +3316,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3321: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3320: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3336,12 +3335,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3340: checking for uid_t in sys/types.h" >&5 +echo "configure:3339: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3370,12 +3369,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3374: checking for mode_t" >&5 +echo "configure:3373: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3403,12 +3402,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3407: checking for off_t" >&5 +echo "configure:3406: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3436,12 +3435,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3440: checking for size_t" >&5 +echo "configure:3439: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3469,12 +3468,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3473: checking for pid_t" >&5 +echo "configure:3472: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3502,12 +3501,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3506: checking for st_rdev in struct stat" >&5 +echo "configure:3505: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3515,7 +3514,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3519: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3518: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3536,12 +3535,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3540: checking for d_off in dirent" >&5 +echo "configure:3539: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3551,7 +3550,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3554: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3572,12 +3571,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3576: checking for ino_t" >&5 +echo "configure:3575: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3605,12 +3604,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3609: checking for loff_t" >&5 +echo "configure:3608: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3638,12 +3637,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3642: checking for offset_t" >&5 +echo "configure:3641: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3671,12 +3670,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3675: checking for ssize_t" >&5 +echo "configure:3674: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3704,12 +3703,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3708: checking for wchar_t" >&5 +echo "configure:3707: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3751,7 +3750,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3755: checking for $ac_word" >&5 +echo "configure:3754: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3800,12 +3799,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3804: checking for $ac_func" >&5 +echo "configure:3803: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3854,7 +3853,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3858: checking for dlopen in -ldl" >&5 +echo "configure:3857: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3862,7 +3861,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3876: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3903,13 +3902,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3907: checking for immediate structures" >&5 +echo "configure:3906: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3927,7 +3926,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3931: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3930: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3950,13 +3949,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3954: checking for unix domain sockets" >&5 +echo "configure:3953: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3971,7 +3970,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3975: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3974: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3993,13 +3992,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3997: checking for socklen_t type" >&5 +echo "configure:3996: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4012,7 +4011,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4016: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4015: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4033,13 +4032,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4037: checking for sig_atomic_t type" >&5 +echo "configure:4036: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4052,7 +4051,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4056: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4075,20 +4074,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4079: checking for errno declaration" >&5 +echo "configure:4078: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4092: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4091: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4110,20 +4109,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4114: checking for setresuid declaration" >&5 +echo "configure:4113: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4127: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4126: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4145,20 +4144,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4149: checking for setresgid declaration" >&5 +echo "configure:4148: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4161: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4180,20 +4179,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4184: checking for asprintf declaration" >&5 +echo "configure:4183: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4197: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4196: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4215,20 +4214,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4219: checking for vasprintf declaration" >&5 +echo "configure:4218: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4232: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4231: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4250,20 +4249,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4254: checking for vsnprintf declaration" >&5 +echo "configure:4253: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4267: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4285,20 +4284,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4289: checking for snprintf declaration" >&5 +echo "configure:4288: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4302: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4301: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4322,7 +4321,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4326: checking for real setresuid" >&5 +echo "configure:4325: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4331,12 +4330,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4339: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4361,7 +4360,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4365: checking for real setresgid" >&5 +echo "configure:4364: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4370,13 +4369,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4399,7 +4398,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4403: checking for 8-bit clean memcmp" >&5 +echo "configure:4402: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4407,7 +4406,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4420: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4440,12 +4439,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4444: checking for $ac_func" >&5 +echo "configure:4443: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4494,7 +4493,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4498: checking for crypt in -lcrypt" >&5 +echo "configure:4497: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4502,7 +4501,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4546,7 +4545,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4550: checking whether to use readline" >&5 +echo "configure:4549: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4558,17 +4557,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4562: checking for $ac_hdr" >&5 +echo "configure:4561: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4572: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4571: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4598,17 +4597,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4602: checking for $ac_hdr" >&5 +echo "configure:4601: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4612: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4611: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4639,17 +4638,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4643: checking for $ac_hdr" >&5 +echo "configure:4642: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4653: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4652: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4672,7 +4671,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4676: checking for tgetent in -l${termlib}" >&5 +echo "configure:4675: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4680,7 +4679,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4713,7 +4712,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4717: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4716: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4721,7 +4720,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4783,17 +4782,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4787: checking for $ac_hdr" >&5 +echo "configure:4786: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4796: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4823,17 +4822,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4827: checking for $ac_hdr" >&5 +echo "configure:4826: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4836: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4864,17 +4863,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4868: checking for $ac_hdr" >&5 +echo "configure:4867: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4878: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4877: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4897,7 +4896,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4901: checking for tgetent in -l${termlib}" >&5 +echo "configure:4900: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4905,7 +4904,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4938,7 +4937,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4942: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4941: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4946,7 +4945,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5007,7 +5006,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5011: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5010: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5015,7 +5014,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5059,12 +5058,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5063: checking for $ac_func" >&5 +echo "configure:5062: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5090: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5115,7 +5114,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5119: checking for printf in -lnsl_s" >&5 +echo "configure:5118: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5123,7 +5122,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5165,7 +5164,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5169: checking for printf in -lnsl" >&5 +echo "configure:5168: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5173,7 +5172,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5215,7 +5214,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5219: checking for connect in -lsocket" >&5 +echo "configure:5218: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5223,7 +5222,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5265,7 +5264,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5269: checking for connect in -linet" >&5 +echo "configure:5268: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5273,7 +5272,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5328,12 +5327,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5332: checking for $ac_func" >&5 +echo "configure:5331: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5382,7 +5381,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5386: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5385: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5390,7 +5389,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5431,12 +5430,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5435: checking for $ac_func" >&5 +echo "configure:5434: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5492,12 +5491,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5496: checking for $ac_func" >&5 +echo "configure:5495: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5547,12 +5546,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5551: checking for $ac_func" >&5 +echo "configure:5550: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5602,12 +5601,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5606: checking for $ac_func" >&5 +echo "configure:5605: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5633: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5657,12 +5656,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5661: checking for $ac_func" >&5 +echo "configure:5660: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5712,12 +5711,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5716: checking for $ac_func" >&5 +echo "configure:5715: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5743: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5767,12 +5766,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5771: checking for $ac_func" >&5 +echo "configure:5770: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5798: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5822,12 +5821,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5826: checking for $ac_func" >&5 +echo "configure:5825: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5853: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5877,12 +5876,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5881: checking for $ac_func" >&5 +echo "configure:5880: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5932,12 +5931,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5936: checking for $ac_func" >&5 +echo "configure:5935: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5987,12 +5986,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5991: checking for $ac_func" >&5 +echo "configure:5990: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6043,12 +6042,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6047: checking for $ac_func" >&5 +echo "configure:6046: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6100,12 +6099,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6104: checking for $ac_func" >&5 +echo "configure:6103: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6156,12 +6155,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6160: checking for $ac_func" >&5 +echo "configure:6159: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6211,12 +6210,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6215: checking for $ac_func" >&5 +echo "configure:6214: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6266,12 +6265,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6270: checking for $ac_func" >&5 +echo "configure:6269: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6297: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6321,12 +6320,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6325: checking for $ac_func" >&5 +echo "configure:6324: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6376,12 +6375,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6380: checking for $ac_func" >&5 +echo "configure:6379: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6431,12 +6430,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6435: checking for $ac_func" >&5 +echo "configure:6434: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6486,12 +6485,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6490: checking for $ac_func" >&5 +echo "configure:6489: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6541,12 +6540,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6545: checking for $ac_func" >&5 +echo "configure:6544: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6596,12 +6595,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6600: checking for $ac_func" >&5 +echo "configure:6599: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6651,12 +6650,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6655: checking for $ac_func" >&5 +echo "configure:6654: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6706,12 +6705,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6710: checking for $ac_func" >&5 +echo "configure:6709: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6761,12 +6760,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6765: checking for $ac_func" >&5 +echo "configure:6764: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6792: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6816,12 +6815,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6820: checking for $ac_func" >&5 +echo "configure:6819: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6871,12 +6870,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6875: checking for $ac_func" >&5 +echo "configure:6874: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6930,9 +6929,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6934: checking for stat64 in " >&5 +echo "configure:6933: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6963,9 +6962,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6967: checking for lstat64 in " >&5 +echo "configure:6966: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6996,9 +6995,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:7000: checking for fstat64 in " >&5 +echo "configure:6999: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7030,7 +7029,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7034: checking for dn_expand in -lresolv" >&5 +echo "configure:7033: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7038,7 +7037,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7087,12 +7086,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7091: checking for $ac_func" >&5 +echo "configure:7090: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7140,7 +7139,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7144: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7143: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7148,7 +7147,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7189,12 +7188,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7193: checking for $ac_func" >&5 +echo "configure:7192: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7248,12 +7247,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7252: checking for $ac_func" >&5 +echo "configure:7251: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7301,7 +7300,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7305: checking for putprpwnam in -lsec" >&5 +echo "configure:7304: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7309,7 +7308,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7350,12 +7349,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7354: checking for $ac_func" >&5 +echo "configure:7353: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7410,12 +7409,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7414: checking for $ac_func" >&5 +echo "configure:7413: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7463,7 +7462,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7467: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7466: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7471,7 +7470,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7485: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7512,12 +7511,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7516: checking for $ac_func" >&5 +echo "configure:7515: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7571,12 +7570,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7575: checking for $ac_func" >&5 +echo "configure:7574: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7624,7 +7623,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7628: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7627: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7632,7 +7631,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7646: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7673,12 +7672,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7677: checking for $ac_func" >&5 +echo "configure:7676: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7704: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7734,12 +7733,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7738: checking for $ac_func" >&5 +echo "configure:7737: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7787,7 +7786,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7791: checking for getspnam in -lgen" >&5 +echo "configure:7790: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7795,7 +7794,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7836,12 +7835,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7840: checking for $ac_func" >&5 +echo "configure:7839: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7896,12 +7895,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7900: checking for $ac_func" >&5 +echo "configure:7899: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7949,7 +7948,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7953: checking for getspnam in -lsecurity" >&5 +echo "configure:7952: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7957,7 +7956,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7971: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7998,12 +7997,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8002: checking for $ac_func" >&5 +echo "configure:8001: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8057,12 +8056,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8061: checking for $ac_func" >&5 +echo "configure:8060: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8110,7 +8109,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8114: checking for getspnam in -lsec" >&5 +echo "configure:8113: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8118,7 +8117,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8159,12 +8158,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8163: checking for $ac_func" >&5 +echo "configure:8162: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8219,12 +8218,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8223: checking for $ac_func" >&5 +echo "configure:8222: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8272,7 +8271,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8276: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8275: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8280,7 +8279,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8321,12 +8320,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8325: checking for $ac_func" >&5 +echo "configure:8324: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8380,12 +8379,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8384: checking for $ac_func" >&5 +echo "configure:8383: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8433,7 +8432,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8437: checking for bigcrypt in -lsec" >&5 +echo "configure:8436: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8441,7 +8440,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8482,12 +8481,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8486: checking for $ac_func" >&5 +echo "configure:8485: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8542,12 +8541,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8546: checking for $ac_func" >&5 +echo "configure:8545: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8595,7 +8594,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8599: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8598: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8603,7 +8602,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8644,12 +8643,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8648: checking for $ac_func" >&5 +echo "configure:8647: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8703,12 +8702,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8707: checking for $ac_func" >&5 +echo "configure:8706: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8756,7 +8755,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8760: checking for getprpwnam in -lsec" >&5 +echo "configure:8759: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8764,7 +8763,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8778: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8805,12 +8804,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8809: checking for $ac_func" >&5 +echo "configure:8808: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8877,7 +8876,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8881: checking ability to build shared libraries" >&5 +echo "configure:8880: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9037,7 +9036,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9041: checking for $ac_word" >&5 +echo "configure:9040: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9094,17 +9093,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9098: checking linker flags for shared libraries" >&5 +echo "configure:9097: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9101: checking compiler flags for position-independent code" >&5 +echo "configure:9100: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9108: checking whether building shared libraries actually works" >&5 +echo "configure:9107: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9135,7 +9134,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9139: checking for long long" >&5 +echo "configure:9138: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9144,12 +9143,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9176,20 +9175,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9180: checking for LL suffix on long long integers" >&5 +echo "configure:9179: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9211,7 +9210,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9215: checking for 64 bit off_t" >&5 +echo "configure:9214: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9220,13 +9219,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9249,7 +9248,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9253: checking for off64_t" >&5 +echo "configure:9252: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9258,7 +9257,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9291,7 +9290,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9295: checking for 64 bit ino_t" >&5 +echo "configure:9294: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9300,13 +9299,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9329,7 +9328,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9333: checking for ino64_t" >&5 +echo "configure:9332: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9338,7 +9337,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9371,7 +9370,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9375: checking for dev64_t" >&5 +echo "configure:9374: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9380,7 +9379,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9413,13 +9412,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9417: checking for struct dirent64" >&5 +echo "configure:9416: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9434: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9452,7 +9451,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9456: checking for major macro" >&5 +echo "configure:9455: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9461,7 +9460,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9493,7 +9492,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9497: checking for minor macro" >&5 +echo "configure:9496: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9502,7 +9501,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9534,7 +9533,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9538: checking for unsigned char" >&5 +echo "configure:9537: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9543,12 +9542,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9571,13 +9570,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9575: checking for sin_len in sock" >&5 +echo "configure:9574: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9586,7 +9585,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9590: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9589: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9607,13 +9606,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9611: checking whether seekdir returns void" >&5 +echo "configure:9610: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9622,7 +9621,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9626: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9643,20 +9642,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9647: checking for __FILE__ macro" >&5 +echo "configure:9646: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9660: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9677,20 +9676,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9681: checking for __FUNCTION__ macro" >&5 +echo "configure:9680: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9694: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9693: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9711,7 +9710,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9715: checking if gettimeofday takes tz argument" >&5 +echo "configure:9714: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9720,14 +9719,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9750,13 +9749,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9754: checking for __va_copy" >&5 +echo "configure:9753: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9764,7 +9763,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9785,7 +9784,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9789: checking for C99 vsnprintf" >&5 +echo "configure:9788: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9794,7 +9793,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9821,7 +9820,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9844,7 +9843,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9848: checking for broken readdir" >&5 +echo "configure:9847: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9853,7 +9852,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9861,7 +9860,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9884,13 +9883,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9888: checking for utimbuf" >&5 +echo "configure:9887: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9898,7 +9897,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9902: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9922,12 +9921,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9926: checking for $ac_func" >&5 +echo "configure:9925: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9976,13 +9975,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9980: checking for ut_name in utmp" >&5 +echo "configure:9979: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9990,7 +9989,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9994: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10011,13 +10010,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10015: checking for ut_user in utmp" >&5 +echo "configure:10014: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10025,7 +10024,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10029: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10046,13 +10045,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10050: checking for ut_id in utmp" >&5 +echo "configure:10049: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10060,7 +10059,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10064: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10081,13 +10080,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10085: checking for ut_host in utmp" >&5 +echo "configure:10084: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10095,7 +10094,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10099: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10098: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10116,13 +10115,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10120: checking for ut_time in utmp" >&5 +echo "configure:10119: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10130,7 +10129,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10134: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10133: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10151,13 +10150,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10155: checking for ut_tv in utmp" >&5 +echo "configure:10154: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10165,7 +10164,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10169: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10186,13 +10185,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10190: checking for ut_type in utmp" >&5 +echo "configure:10189: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10200,7 +10199,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10204: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10221,13 +10220,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10225: checking for ut_pid in utmp" >&5 +echo "configure:10224: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10235,7 +10234,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10239: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10238: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10256,13 +10255,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10260: checking for ut_exit in utmp" >&5 +echo "configure:10259: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10270,7 +10269,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10274: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10291,13 +10290,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10295: checking for ut_addr in utmp" >&5 +echo "configure:10294: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10305,7 +10304,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10309: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10308: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10327,13 +10326,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10331: checking whether pututline returns pointer" >&5 +echo "configure:10330: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10341,7 +10340,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10345: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10363,13 +10362,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10367: checking for ut_syslen in utmpx" >&5 +echo "configure:10366: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10377,7 +10376,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10380: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10401,7 +10400,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10405: checking whether to use libiconv" >&5 +echo "configure:10404: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10414,7 +10413,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10418: checking for iconv_open in -liconv" >&5 +echo "configure:10417: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10422,7 +10421,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10476,7 +10475,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10480: checking for working iconv" >&5 +echo "configure:10479: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10485,7 +10484,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10496,7 +10495,7 @@ main() { } EOF -if { (eval echo configure:10500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10520,7 +10519,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10524: checking for Linux kernel oplocks" >&5 +echo "configure:10523: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10529,7 +10528,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10543,7 +10542,7 @@ main() { } EOF -if { (eval echo configure:10547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10566,7 +10565,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10570: checking for kernel change notify support" >&5 +echo "configure:10569: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10575,7 +10574,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10589,7 +10588,7 @@ main() { } EOF -if { (eval echo configure:10593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10612,7 +10611,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10616: checking for kernel share modes" >&5 +echo "configure:10615: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10621,7 +10620,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10637,7 +10636,7 @@ main() { } EOF -if { (eval echo configure:10641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10663,13 +10662,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10667: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10666: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10677,7 +10676,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10681: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10680: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10698,7 +10697,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10702: checking for irix specific capabilities" >&5 +echo "configure:10701: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10707,7 +10706,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10722,7 +10721,7 @@ main() { } EOF -if { (eval echo configure:10726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10750,13 +10749,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10754: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10753: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10766,7 +10765,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10770: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10769: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10787,13 +10786,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10791: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10790: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10803,7 +10802,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10807: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10824,13 +10823,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10828: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10827: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10840,7 +10839,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10844: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10843: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10861,13 +10860,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10865: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10864: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10877,7 +10876,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10881: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10899,13 +10898,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10903: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10902: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10919,7 +10918,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10940,16 +10939,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10944: checking for test routines" >&5 +echo "configure:10943: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10963,7 +10962,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10967: checking for ftruncate extend" >&5 +echo "configure:10966: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10972,11 +10971,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10999,7 +10998,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:11003: checking for AF_LOCAL socket support" >&5 +echo "configure:11002: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11008,11 +11007,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11015: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11036,7 +11035,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11040: checking for broken getgroups" >&5 +echo "configure:11039: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11045,11 +11044,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11072,7 +11071,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11076: checking whether getpass should be replaced" >&5 +echo "configure:11075: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11080,7 +11079,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11096: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11116,7 +11115,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11120: checking for broken inet_ntoa" >&5 +echo "configure:11119: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11125,7 +11124,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11139,7 +11138,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11162,7 +11161,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11166: checking for secure mkstemp" >&5 +echo "configure:11165: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11171,7 +11170,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11188,7 +11187,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11211,7 +11210,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11215: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11214: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11220,12 +11219,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11248,7 +11247,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11252: checking for root" >&5 +echo "configure:11251: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11257,11 +11256,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11289,7 +11288,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11293: checking for iface AIX" >&5 +echo "configure:11292: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11298,7 +11297,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11330,7 +11329,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11334: checking for iface ifconf" >&5 +echo "configure:11333: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11339,7 +11338,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11372,7 +11371,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11376: checking for iface ifreq" >&5 +echo "configure:11375: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11381,7 +11380,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11418,7 +11417,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11422: checking for setresuid" >&5 +echo "configure:11421: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11427,7 +11426,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11461,7 +11460,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11465: checking for setreuid" >&5 +echo "configure:11464: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11470,7 +11469,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11503,7 +11502,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11507: checking for seteuid" >&5 +echo "configure:11506: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11512,7 +11511,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11545,7 +11544,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11549: checking for setuidx" >&5 +echo "configure:11548: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11554,7 +11553,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11587,7 +11586,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11591: checking for working mmap" >&5 +echo "configure:11590: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11596,11 +11595,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11623,7 +11622,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11627: checking for ftruncate needs root" >&5 +echo "configure:11626: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11632,11 +11631,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11659,7 +11658,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11663: checking for fcntl locking" >&5 +echo "configure:11662: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11668,11 +11667,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11695,7 +11694,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11699: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11698: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11704,11 +11703,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11733,7 +11732,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11737: checking for 64 bit fcntl locking" >&5 +echo "configure:11736: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11742,7 +11741,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11791,13 +11790,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11795: checking for st_blocks in struct stat" >&5 +echo "configure:11794: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11806,7 +11805,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11810: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11809: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11827,13 +11826,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11831: checking for st_blksize in struct stat" >&5 +echo "configure:11830: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11842,7 +11841,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11846: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11845: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11865,13 +11864,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11869: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11868: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11908,13 +11907,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11912: checking for broken nisplus include files" >&5 +echo "configure:11911: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11924,7 +11923,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11928: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11948,7 +11947,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11952: checking whether to use smbwrapper" >&5 +echo "configure:11951: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11995,7 +11994,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11999: checking whether to use AFS clear-text auth" >&5 +echo "configure:11998: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12021,7 +12020,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12025: checking whether to use DFS clear-text auth" >&5 +echo "configure:12024: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12048,7 +12047,7 @@ fi with_ads_support=yes echo $ac_n "checking whether to use Active Directory""... $ac_c" 1>&6 -echo "configure:12052: checking whether to use Active Directory" >&5 +echo "configure:12051: checking whether to use Active Directory" >&5 # Check whether --with-ads or --without-ads was given. if test "${with_ads+set}" = set; then @@ -12075,7 +12074,7 @@ if test x"$with_ads_support" = x"yes"; then ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12079: checking for /usr/kerberos" >&5 +echo "configure:12078: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12088,7 +12087,7 @@ echo "configure:12079: checking for /usr/kerberos" >&5 ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12092: checking for kerberos 5 install path" >&5 +echo "configure:12091: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12117,17 +12116,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12121: checking for $ac_hdr" >&5 +echo "configure:12120: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12131: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12130: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12160,17 +12159,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12164: checking for $ac_hdr" >&5 +echo "configure:12163: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12174: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12173: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12200,7 +12199,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12204: checking for _et_list in -lcom_err" >&5 +echo "configure:12203: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12208,7 +12207,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12240,7 +12239,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12244: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12243: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12248,7 +12247,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12284,7 +12283,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12288: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12287: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12292,7 +12291,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12331,7 +12330,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12335: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12334: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12339,7 +12338,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12376,11 +12375,33 @@ fi fi -################################################################## -# we might need the lber lib on some systems. To avoid link errors -# this test must be before the libldap test -echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12384: checking for ber_scanf in -llber" >&5 +######################################################## +# Compile with LDAP support? + +with_ldap_support=yes +echo $ac_n "checking whether to use LDAP""... $ac_c" 1>&6 +echo "configure:12384: checking whether to use LDAP" >&5 + +# Check whether --with-ldap or --without-ldap was given. +if test "${with_ldap+set}" = set; then + withval="$with_ldap" + case "$withval" in + no) + with_ldap_support=no + ;; + esac +fi + + +echo "$ac_t""$with_ldap_support" 1>&6 + +if test x"$with_ldap_support" = x"yes"; then + + ################################################################## + # we might need the lber lib on some systems. To avoid link errors + # this test must be before the libldap test + echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 +echo "configure:12405: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12388,7 +12409,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12420,11 +12441,11 @@ else fi -######################################################## -# now see if we can find the ldap libs in standard paths -if test x$have_ldap != xyes; then -echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12428: checking for ldap_domain2hostlist in -lldap" >&5 + ######################################################## + # now see if we can find the ldap libs in standard paths + if test x$have_ldap != xyes; then + echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 +echo "configure:12449: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12432,7 +12453,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12474,12 +12495,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12478: checking for $ac_func" >&5 +echo "configure:12499: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12527,13 +12548,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12531: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12552: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12542,7 +12563,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12546: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12567: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12559,12 +12580,13 @@ echo "$ac_t""$pam_ldap_cv_ldap_set_rebind_proc" 1>&6 #define LDAP_SET_REBIND_PROC_ARGS $pam_ldap_cv_ldap_set_rebind_proc EOF + fi fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12568: checking whether to use AUTOMOUNT" >&5 +echo "configure:12590: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12589,7 +12611,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12593: checking whether to use SMBMOUNT" >&5 +echo "configure:12615: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12626,7 +12648,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12630: checking whether to use PAM" >&5 +echo "configure:12652: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12652,7 +12674,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12656: checking for pam_get_data in -lpam" >&5 +echo "configure:12678: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12660,7 +12682,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12697: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12698,7 +12720,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12702: checking whether to use pam_smbpass" >&5 +echo "configure:12724: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12736,12 +12758,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12740: checking for $ac_func" >&5 +echo "configure:12762: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12790,7 +12812,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12794: checking for crypt in -lcrypt" >&5 +echo "configure:12816: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12798,7 +12820,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12844,7 +12866,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12848: checking for a crypt that needs truncated salt" >&5 +echo "configure:12870: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12853,11 +12875,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12883,7 +12905,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12887: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12909: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12915,7 +12937,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12919: checking whether to use TDB SAM database" >&5 +echo "configure:12941: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12940,7 +12962,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12944: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12966: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12971,7 +12993,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12975: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12997: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12996,7 +13018,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:13000: checking whether to use syslog logging" >&5 +echo "configure:13022: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -13021,7 +13043,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:13025: checking whether to use profiling" >&5 +echo "configure:13047: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13049,7 +13071,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13053: checking whether to support disk-quotas" >&5 +echo "configure:13075: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13060,13 +13082,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13064: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13086: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13078,7 +13100,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13104: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13127,7 +13149,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13131: checking whether to support utmp accounting" >&5 +echo "configure:13153: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13152,7 +13174,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13156: checking chosen man pages' language(s)" >&5 +echo "configure:13178: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13183,7 +13205,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13187: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13209: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13211,14 +13233,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13215: checking how to get filesystem space usage" >&5 +echo "configure:13237: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13222: checking statvfs64 function (SVR4)" >&5 +echo "configure:13244: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13226,7 +13248,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13273,12 +13295,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13277: checking statvfs function (SVR4)" >&5 +echo "configure:13299: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13286,7 +13308,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13311,7 +13333,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13315: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13337: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13319,7 +13341,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13332,7 +13354,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13359,7 +13381,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13363: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13385: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13367,7 +13389,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13413,7 +13435,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13417: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13439: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13421,7 +13443,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13431,7 +13453,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13458,7 +13480,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13462: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13484: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13466,7 +13488,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13482,7 +13504,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13509,7 +13531,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13513: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13535: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13517,7 +13539,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13537,7 +13559,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13570,9 +13592,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13574: checking if large file support can be enabled" >&5 +echo "configure:13596: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13611: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13650,7 +13672,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13654: checking whether to support ACLs" >&5 +echo "configure:13676: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13703,7 +13725,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13707: checking for acl_get_file in -lacl" >&5 +echo "configure:13729: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13711,7 +13733,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13748: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13750,13 +13772,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13754: checking for ACL support" >&5 +echo "configure:13776: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13764,7 +13786,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13784,13 +13806,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13788: checking for acl_get_perm_np" >&5 +echo "configure:13810: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13798,7 +13820,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13843,7 +13865,7 @@ fi # check for sendfile support echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 -echo "configure:13847: checking whether to support sendfile" >&5 +echo "configure:13869: checking whether to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -13853,13 +13875,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:13857: checking for linux sendfile64 support" >&5 +echo "configure:13879: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13871,7 +13893,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -13886,13 +13908,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:13890: checking for linux sendfile support" >&5 +echo "configure:13912: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13904,7 +13926,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -13920,13 +13942,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:13924: checking for broken linux sendfile support" >&5 +echo "configure:13946: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -13998,13 +14020,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:14002: checking for freebsd sendfile support" >&5 +echo "configure:14024: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14026,7 +14048,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14057,7 +14079,125 @@ EOF echo "$ac_t""no" 1>&6; fi ;; - *) + + *hpux*) + echo $ac_n "checking for hpux sendfile64 support""... $ac_c" 1>&6 +echo "configure:14086: checking for hpux sendfile64 support" >&5 +if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < +#include +int main() { +\ + int fromfd, tofd; + size_t total=0; + struct iovec hdtrl[2]; + ssize_t nwritten; + off64_t offset; + + hdtrl[0].iov_base = 0; + hdtrl[0].iov_len = 0; + + nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0); + +; return 0; } +EOF +if { (eval echo configure:14112: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + samba_cv_HAVE_SENDFILE64=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + samba_cv_HAVE_SENDFILE64=no +fi +rm -f conftest* +fi + +echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 + if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_SENDFILE64 1 +EOF + + cat >> confdefs.h <<\EOF +#define HPUX_SENDFILE_API 1 +EOF + + cat >> confdefs.h <<\EOF +#define WITH_SENDFILE 1 +EOF + + else + echo "$ac_t""no" 1>&6; + fi + + echo $ac_n "checking for hpux sendfile support""... $ac_c" 1>&6 +echo "configure:14143: checking for hpux sendfile support" >&5 +if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < +#include +int main() { +\ + int fromfd, tofd; + size_t total=0; + struct iovec hdtrl[2]; + ssize_t nwritten; + off_t offset; + + hdtrl[0].iov_base = 0; + hdtrl[0].iov_len = 0; + + nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0); + +; return 0; } +EOF +if { (eval echo configure:14169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + samba_cv_HAVE_SENDFILE=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + samba_cv_HAVE_SENDFILE=no +fi +rm -f conftest* +fi + +echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 + if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_SENDFILE 1 +EOF + + cat >> confdefs.h <<\EOF +#define HPUX_SENDFILE_API 1 +EOF + + cat >> confdefs.h <<\EOF +#define WITH_SENDFILE 1 +EOF + + else + echo "$ac_t""no" 1>&6; + fi + + ;; + + *) ;; esac ;; @@ -14078,7 +14218,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:14082: checking whether to build winbind" >&5 +echo "configure:14222: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14174,20 +14314,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14178: checking whether struct passwd has pw_comment" >&5 +echo "configure:14318: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14331: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14212,20 +14352,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14216: checking whether struct passwd has pw_age" >&5 +echo "configure:14356: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14369: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14264,7 +14404,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14268: checking for poptGetContext in -lpopt" >&5 +echo "configure:14408: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14272,7 +14412,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14427: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14307,7 +14447,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14311: checking whether to use included popt" >&5 +echo "configure:14451: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14353,16 +14493,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14357: checking configure summary" >&5 +echo "configure:14497: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source/configure.in b/source/configure.in index ef25ba4fed1..d53886bc65d 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2793,7 +2793,61 @@ samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)]) AC_MSG_RESULT(no); fi ;; - *) + + *hpux*) + AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[ + AC_TRY_LINK([\ +#include +#include ], +[\ + int fromfd, tofd; + size_t total=0; + struct iovec hdtrl[2]; + ssize_t nwritten; + off64_t offset; + + hdtrl[0].iov_base = 0; + hdtrl[0].iov_len = 0; + + nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0); +], +samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)]) + if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then + AC_DEFINE(HAVE_SENDFILE64) + AC_DEFINE(HPUX_SENDFILE_API) + AC_DEFINE(WITH_SENDFILE) + else + AC_MSG_RESULT(no); + fi + + AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[ + AC_TRY_LINK([\ +#include +#include ], +[\ + int fromfd, tofd; + size_t total=0; + struct iovec hdtrl[2]; + ssize_t nwritten; + off_t offset; + + hdtrl[0].iov_base = 0; + hdtrl[0].iov_len = 0; + + nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0); +], +samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)]) + if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then + AC_DEFINE(HAVE_SENDFILE) + AC_DEFINE(HPUX_SENDFILE_API) + AC_DEFINE(WITH_SENDFILE) + else + AC_MSG_RESULT(no); + fi + + ;; + + *) ;; esac ;; diff --git a/source/include/config.h.in b/source/include/config.h.in index 8e744e43f7e..770af1a6b56 100644 --- a/source/include/config.h.in +++ b/source/include/config.h.in @@ -1,4 +1,4 @@ -/* include/config.h.in. Generated automatically from configure.in by autoheader 2.13. */ +/* include/config.h.in. Generated automatically from configure.in by autoheader. */ /* Define if on AIX 3. System headers sometimes define this. @@ -294,6 +294,7 @@ #undef LINUX_BROKEN_SENDFILE_API #undef WITH_SENDFILE #undef FREEBSD_SENDFILE_API +#undef HPUX_SENDFILE_API #undef WITH_ADS /* The number of bytes in a int. */ diff --git a/source/lib/sendfile.c b/source/lib/sendfile.c index bcace5fee29..df6c1980d06 100644 --- a/source/lib/sendfile.c +++ b/source/lib/sendfile.c @@ -209,7 +209,8 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of hdtrl[0].iov_len = 0; } else { nwritten = 0; - hdtrl[0].iov_base += nwritten; + /* iov_base is defined as a void *... */ + hdtrl[0].iov_base = ((char *)hdtrl[0].iov_base) + nwritten; hdtrl[0].iov_len -= nwritten; } } -- cgit From 28466ff42c3328e49d46f7cddfc4bb2fe462d871 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 18 Sep 2002 20:36:50 +0000 Subject: Added "use sendfile" per share option. Jeremy. --- source/param/loadparm.c | 13 ++++++++++++- source/smbd/reply.c | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/source/param/loadparm.c b/source/param/loadparm.c index 7607760cca6..67128c75d2d 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -384,7 +384,9 @@ typedef struct BOOL bUseClientDriver; BOOL bDefaultDevmode; BOOL bNTAclSupport; - +#ifdef WITH_SENDFILE + BOOL bUseSendfile; +#endif char dummy[3]; /* for alignment */ } service; @@ -504,6 +506,9 @@ static service sDefault = { False, /* bUseClientDriver */ False, /* bDefaultDevmode */ True, /* bNTAclSupport */ +#ifdef WITH_SENDFILE + False, /* bUseSendfile */ +#endif "" /* dummy */ }; @@ -841,6 +846,9 @@ static struct parm_struct parm_table[] = { {"strict sync", P_BOOL, P_LOCAL, &sDefault.bStrictSync, NULL, NULL, FLAG_SHARE}, {"sync always", P_BOOL, P_LOCAL, &sDefault.bSyncAlways, NULL, NULL, FLAG_SHARE}, {"use mmap", P_BOOL, P_GLOBAL, &Globals.bUseMmap, NULL, NULL, FLAG_DEVELOPER}, +#ifdef WITH_SENDFILE + {"use sendfile", P_BOOL, P_LOCAL, &sDefault.bUseSendfile, NULL, NULL, FLAG_SHARE}, +#endif {"hostname lookups", P_BOOL, P_GLOBAL, &Globals.bHostnameLookups, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"write cache size", P_INTEGER, P_LOCAL, &sDefault.iWriteCacheSize, NULL, NULL, FLAG_SHARE}, @@ -1728,6 +1736,9 @@ FN_LOCAL_BOOL(lp_inherit_acls, bInheritACLS) FN_LOCAL_BOOL(lp_use_client_driver, bUseClientDriver) FN_LOCAL_BOOL(lp_default_devmode, bDefaultDevmode) FN_LOCAL_BOOL(lp_nt_acl_support, bNTAclSupport) +#ifdef WITH_SENDFILE +FN_LOCAL_BOOL(lp_use_sendfile, bUseSendfile) +#endif FN_LOCAL_INTEGER(lp_create_mask, iCreate_mask) FN_LOCAL_INTEGER(lp_force_create_mode, iCreate_force_mode) FN_LOCAL_INTEGER(lp_security_mask, iSecurity_mask) diff --git a/source/smbd/reply.c b/source/smbd/reply.c index b8a89b1d9d5..4c7d73bc6e6 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -1698,7 +1698,7 @@ int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length * that is exclusively oplocked. */ - if ((CVAL(inbuf,smb_vwv0) == 0xFF) && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) { + if ((CVAL(inbuf,smb_vwv0) == 0xFF) && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type) && lp_use_sendfile(SNUM(conn)) ) { SMB_STRUCT_STAT sbuf; DATA_BLOB header; -- cgit From 739ea89eb3ab49e5dccddfa767812811b413e67d Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 00:14:01 +0000 Subject: Implement printerdata_ex as Python dictionary. Read only at the moment. --- source/python/printerdata.py | 43 ++++++++++++++++++++++++++++---------- source/python/samba/printerdata.py | 43 ++++++++++++++++++++++++++++---------- 2 files changed, 64 insertions(+), 22 deletions(-) diff --git a/source/python/printerdata.py b/source/python/printerdata.py index 3384de4f30b..33251f6a00f 100644 --- a/source/python/printerdata.py +++ b/source/python/printerdata.py @@ -1,10 +1,18 @@ +#!/usr/bin/env python + # # A python module that maps printerdata to a dictionary. We define # two classes. The printerdata class maps to Get/Set/Enum/DeletePrinterData # and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx # -import spoolss +# +# TODO: +# +# - Implement __delitem__ +# + +from samba import spoolss class printerdata: def __init__(self, host, creds = {}): @@ -22,17 +30,30 @@ class printerdata: "data": value}) class printerdata_ex: - def __init__(self, host, creds = {}): - self.hnd = spoolss.openprinter(host, creds = creds) + def __init__(self, host): + self.host = host + self.top_level_keys = ["PrinterDriverData", "DsSpooler", "DsDriver", + "DsUser"] def keys(self): - return self.hnd.enumprinterdataex("PrinterDriverData").keys() + return self.top_level_keys - def __getitem__(self, key): - return self.hnd.getprinterdataex("PrinterDriverData", key)['data'] + def has_key(self, key): + for k in self.top_level_keys: + if k == key: + return 1 + return 0 - def __setitem__(self, key, value): - # Store as REG_BINARY for now - self.hnd.setprinterdataex({"key": "PrinterDriverData", "value": key, "type": 3, - "data": value}) - + class printerdata_ex_subkey: + def __init__(self, host, key): + self.hnd = spoolss.openprinter(host) + self.key = key + + def keys(self): + return self.hnd.enumprinterdataex(self.key).keys() + + def __getitem__(self, key): + return self.hnd.getprinterdataex(self.key, key)['data'] + + def __getitem__(self, key): + return self.printerdata_ex_subkey(self.host, key) diff --git a/source/python/samba/printerdata.py b/source/python/samba/printerdata.py index 3384de4f30b..33251f6a00f 100644 --- a/source/python/samba/printerdata.py +++ b/source/python/samba/printerdata.py @@ -1,10 +1,18 @@ +#!/usr/bin/env python + # # A python module that maps printerdata to a dictionary. We define # two classes. The printerdata class maps to Get/Set/Enum/DeletePrinterData # and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx # -import spoolss +# +# TODO: +# +# - Implement __delitem__ +# + +from samba import spoolss class printerdata: def __init__(self, host, creds = {}): @@ -22,17 +30,30 @@ class printerdata: "data": value}) class printerdata_ex: - def __init__(self, host, creds = {}): - self.hnd = spoolss.openprinter(host, creds = creds) + def __init__(self, host): + self.host = host + self.top_level_keys = ["PrinterDriverData", "DsSpooler", "DsDriver", + "DsUser"] def keys(self): - return self.hnd.enumprinterdataex("PrinterDriverData").keys() + return self.top_level_keys - def __getitem__(self, key): - return self.hnd.getprinterdataex("PrinterDriverData", key)['data'] + def has_key(self, key): + for k in self.top_level_keys: + if k == key: + return 1 + return 0 - def __setitem__(self, key, value): - # Store as REG_BINARY for now - self.hnd.setprinterdataex({"key": "PrinterDriverData", "value": key, "type": 3, - "data": value}) - + class printerdata_ex_subkey: + def __init__(self, host, key): + self.hnd = spoolss.openprinter(host) + self.key = key + + def keys(self): + return self.hnd.enumprinterdataex(self.key).keys() + + def __getitem__(self, key): + return self.hnd.getprinterdataex(self.key, key)['data'] + + def __getitem__(self, key): + return self.printerdata_ex_subkey(self.host, key) -- cgit From 154c59c8f92b9f735f4e1e7c8c42692c959996f1 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 00:26:07 +0000 Subject: Moving to subdirectory. --- source/python/printerdata.py | 59 -------------------------------------------- 1 file changed, 59 deletions(-) delete mode 100644 source/python/printerdata.py diff --git a/source/python/printerdata.py b/source/python/printerdata.py deleted file mode 100644 index 33251f6a00f..00000000000 --- a/source/python/printerdata.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python - -# -# A python module that maps printerdata to a dictionary. We define -# two classes. The printerdata class maps to Get/Set/Enum/DeletePrinterData -# and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx -# - -# -# TODO: -# -# - Implement __delitem__ -# - -from samba import spoolss - -class printerdata: - def __init__(self, host, creds = {}): - self.hnd = spoolss.openprinter(host, creds = creds) - - def keys(self): - return self.hnd.enumprinterdata().keys() - - def __getitem__(self, key): - return self.hnd.getprinterdata(key)['data'] - - def __setitem__(self, key, value): - # Store as REG_BINARY for now - self.hnd.setprinterdata({"key": "", "value": key, "type": 3, - "data": value}) - -class printerdata_ex: - def __init__(self, host): - self.host = host - self.top_level_keys = ["PrinterDriverData", "DsSpooler", "DsDriver", - "DsUser"] - - def keys(self): - return self.top_level_keys - - def has_key(self, key): - for k in self.top_level_keys: - if k == key: - return 1 - return 0 - - class printerdata_ex_subkey: - def __init__(self, host, key): - self.hnd = spoolss.openprinter(host) - self.key = key - - def keys(self): - return self.hnd.enumprinterdataex(self.key).keys() - - def __getitem__(self, key): - return self.hnd.getprinterdataex(self.key, key)['data'] - - def __getitem__(self, key): - return self.printerdata_ex_subkey(self.host, key) -- cgit From c7845b3c43f7167f2c695722bc9923ff666ade76 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 05:29:14 +0000 Subject: Fixed bug in keyword args for enumprinterdataex --- source/python/py_spoolss_printerdata.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/python/py_spoolss_printerdata.c b/source/python/py_spoolss_printerdata.c index ffff2b3a67a..bacc870d9dd 100644 --- a/source/python/py_spoolss_printerdata.c +++ b/source/python/py_spoolss_printerdata.c @@ -321,7 +321,7 @@ PyObject *spoolss_hnd_setprinterdataex(PyObject *self, PyObject *args, PyObject PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject *kw) { spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - static char *kwlist[] = { NULL }; + static char *kwlist[] = { "key", NULL }; uint32 needed, i; char *key; WERROR werror; -- cgit From 3ce8f8c50c0adcedc38bf2812b7e9fae78942458 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 05:39:03 +0000 Subject: Bong! The devmode could be NULL. Don't crash if this is the case. --- source/python/py_spoolss_printers_conv.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/python/py_spoolss_printers_conv.c b/source/python/py_spoolss_printers_conv.c index 247db65b1ef..760896fcdef 100644 --- a/source/python/py_spoolss_printers_conv.c +++ b/source/python/py_spoolss_printers_conv.c @@ -227,8 +227,14 @@ BOOL py_from_PRINTER_INFO_2(PyObject **dict, PRINTER_INFO_2 *info) if (py_from_SECDESC(&obj, info->secdesc)) PyDict_SetItemString(*dict, "security_descriptor", obj); - if (py_from_DEVICEMODE(&obj, info->devmode)) - PyDict_SetItemString(*dict, "device_mode", obj); + /* Bong! The devmode could be NULL */ + + if (info->devmode) + py_from_DEVICEMODE(&obj, info->devmode); + else + obj = PyDict_New(); + + PyDict_SetItemString(*dict, "device_mode", obj); PyDict_SetItemString(*dict, "level", PyInt_FromLong(2)); -- cgit From a36882175ae546859fa4a5ba02a22d711a04cedf Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 05:47:50 +0000 Subject: Clean up python extensions in clean target. Pass more flags down to setup.py so we don't have to hard code any -I directives. --- source/Makefile.in | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/source/Makefile.in b/source/Makefile.in index d7f8dc5f680..c819ef1114d 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -883,7 +883,7 @@ python_common_proto: $(PY_COMMON_PROTO_OBJ) python_ext: $(PYTHON_OBJS) - PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS)" \ + PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS) $(FLAGS)" \ LIBS="$(LIBS)" \ $(PYTHON) python/setup.py build @@ -892,6 +892,9 @@ python_install: $(PYTHON_OBJS) LIBS="$(LIBS)" \ $(PYTHON) python/setup.py install +python_clean: + @if test -n "$(PYTHON)"; then $(PYTHON) python/setup.py clean; fi + # revert to the previously installed version revert: @$(SHELL) $(srcdir)/script/revert.sh $(SBINDIR) $(SPROGS) @@ -927,9 +930,9 @@ uninstallscripts: # Toplevel clean files TOPFILES=dynconfig.o dynconfig.po -clean: delheaders +clean: delheaders python_clean -rm -f core */*~ *~ */*.o */*.po */*.po32 */*.@SHLIBEXT@ \ - $(TOPFILES) $(PROGS) $(SPROGS) .headers.stamp + $(TOPFILES) $(PROGS) $(SPROGS) .headers.stamp # Making this target will just make sure that the prototype files # exist, not necessarily that they are up to date. Since they're -- cgit From 105ff7c5400a6b79613b6a3b72808124b17ddc60 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 05:49:14 +0000 Subject: Remove hardcoded -I stuff. Hooray! --- source/python/setup.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/source/python/setup.py b/source/python/setup.py index d3c420834a9..6d03ca633a7 100755 --- a/source/python/setup.py +++ b/source/python/setup.py @@ -65,13 +65,6 @@ setup( author_email = "tpot@samba.org", license = "GPL", - # Build info - - include_dirs = [samba_srcdir + '.', samba_srcdir + "include", - samba_srcdir + "ubiqx", samba_srcdir + "smbwrapper", - samba_srcdir + "popt", "/usr/kerberos/include", - "/usr/local/include"], - # Get the "samba" directory of Python source. At the moment this # just contains the __init__ file that makes it work as a # subpackage. This is needed even though everything else is an @@ -104,6 +97,7 @@ setup( ], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # LSA pipe module @@ -114,6 +108,7 @@ setup( samba_srcdir + "python/py_ntsec.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # SAMR pipe module @@ -124,6 +119,7 @@ setup( samba_srcdir + "python/py_common.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # winbind client module @@ -135,8 +131,8 @@ setup( samba_srcdir + "python/py_common.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list, - extra_compile_args = flags_list), + extra_compile_args = flags_list, + extra_objects = obj_list), # WINREG pipe module @@ -145,6 +141,7 @@ setup( samba_srcdir + "python/py_common.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # tdb module @@ -153,6 +150,7 @@ setup( sources = [samba_srcdir + "python/py_tdb.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # libsmb module @@ -162,6 +160,7 @@ setup( samba_srcdir + "python/py_common.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # Moving to merge all individual extensions in to one big @@ -173,6 +172,7 @@ setup( samba_srcdir + "python/py_common.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # tdbpack/unpack extensions. Does not actually link to any Samba -- cgit From 9d6331524089d76c5832b9ba001fb0e8a05f39d7 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 19 Sep 2002 12:34:39 +0000 Subject: trivial comment fix --- source/rpc_server/srv_samr_nt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c index e2336aca557..fd1111d5dcf 100644 --- a/source/rpc_server/srv_samr_nt.c +++ b/source/rpc_server/srv_samr_nt.c @@ -4072,9 +4072,9 @@ NTSTATUS _samr_set_groupinfo(pipes_struct *p, SAMR_Q_SET_GROUPINFO *q_u, SAMR_R_ } /********************************************************************* - _samr_set_groupinfo + _samr_set_aliasinfo - update a domain group's comment. + update an alias's comment. *********************************************************************/ NTSTATUS _samr_set_aliasinfo(pipes_struct *p, SAMR_Q_SET_ALIASINFO *q_u, SAMR_R_SET_ALIASINFO *r_u) -- cgit From 60ab55fedf03a0b505b0b73527e031124a46304e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 19 Sep 2002 15:39:00 +0000 Subject: Merge in first command for 'samtest' Fix small bug in sam/interface.c Make sam backend to default to a define --- source/Makefile.in | 2 +- source/include/sam.h | 3 + source/sam/interface.c | 33 +- source/torture/cmd_sam.c | 1002 ++++++++++++++++++++++++++++++++++++++++++++++ source/torture/samtest.c | 14 +- source/torture/samtest.h | 31 ++ 6 files changed, 1056 insertions(+), 29 deletions(-) create mode 100644 source/torture/cmd_sam.c create mode 100644 source/torture/samtest.h diff --git a/source/Makefile.in b/source/Makefile.in index c819ef1114d..dbbd97bbff9 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -225,7 +225,7 @@ SAM_STATIC_MODULES = sam/sam_plugin.o SAM_OBJ = sam/account.o sam/get_set_account.o sam/get_set_group.o \ sam/get_set_domain.o sam/interface.o sam/api.o $(SAM_STATIC_MODULES) -SAMTEST_OBJ = torture/samtest.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o passdb/machine_sid.o passdb/secrets.o +SAMTEST_OBJ = torture/samtest.o torture/cmd_sam.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o passdb/machine_sid.o passdb/secrets.o GROUPDB_OBJ = groupdb/mapping.o diff --git a/source/include/sam.h b/source/include/sam.h index 875efbe0de7..ca1a84fd979 100644 --- a/source/include/sam.h +++ b/source/include/sam.h @@ -48,6 +48,9 @@ int sam_version(void)\ return SAM_INTERFACE_VERSION;\ } +/* Backend to use by default when no backend was specified */ +#define SAM_DEFAULT_BACKEND "plugin" + typedef struct sam_domain_handle { TALLOC_CTX *mem_ctx; uint32 access_granted; diff --git a/source/sam/interface.c b/source/sam/interface.c index a10b34200d4..17df276aed0 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -206,7 +206,7 @@ NTSTATUS context_sam_lookup_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN NTSTATUS context_sam_update_domain(const SAM_CONTEXT *context, const SAM_DOMAIN_HANDLE *domain) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; DEBUG(5,("context_sam_update_domain: %d\n", __LINE__)); @@ -426,7 +426,7 @@ NTSTATUS context_sam_add_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_H NTSTATUS context_sam_update_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; DEBUG(5,("context_sam_update_account: %d\n", __LINE__)); @@ -452,7 +452,7 @@ NTSTATUS context_sam_update_account(const SAM_CONTEXT *context, const SAM_ACCOUN NTSTATUS context_sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; DEBUG(5,("context_sam_delete_account: %d\n", __LINE__)); @@ -632,7 +632,7 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL NTSTATUS context_sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; DEBUG(5,("context_sam_update_group: %d\n", __LINE__)); @@ -658,7 +658,7 @@ NTSTATUS context_sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HA NTSTATUS context_sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; DEBUG(5,("context_sam_delete_group: %d\n", __LINE__)); @@ -771,7 +771,7 @@ NTSTATUS context_sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER NTSTATUS context_sam_add_member_to_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -796,7 +796,7 @@ NTSTATUS context_sam_add_member_to_group(const SAM_CONTEXT *context, const SAM_G NTSTATUS context_sam_delete_member_from_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; /* invalid group or member specified */ @@ -819,7 +819,7 @@ NTSTATUS context_sam_delete_member_from_group(const SAM_CONTEXT *context, const NTSTATUS context_sam_enum_groupmembers(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; /* invalid group specified */ @@ -986,7 +986,7 @@ static NTSTATUS check_correct_backend_entries(SAM_BACKEND_ENTRY **backend_entrie } for (j = i + 1; j < *nBackends; j++) { if (sid_equal((*backend_entries)[i].domain_sid, (*backend_entries)[j].domain_sid)) { - DEBUG(2,("two backend modules claim the same domain %s", + DEBUG(0,("two backend modules claim the same domain %s\n", sid_string_static((*backend_entries)[j].domain_sid))); return NT_STATUS_INVALID_PARAMETER; } @@ -999,12 +999,11 @@ static NTSTATUS check_correct_backend_entries(SAM_BACKEND_ENTRY **backend_entrie if (increase_by > 0) { *nBackends += increase_by; - (*backend_entries) = (SAM_BACKEND_ENTRY *)realloc((*backend_entries), sizeof(SAM_BACKEND_ENTRY) * (*nBackends)); + (*backend_entries) = (SAM_BACKEND_ENTRY *)realloc((*backend_entries), sizeof(SAM_BACKEND_ENTRY) * (*nBackends+1)); if (!has_workgroup) { - /* should be replaced by the default sam module */ - DEBUG(4,("There was no backend specified for domain %s useing plugin\n", - lp_workgroup())); - (*backend_entries)[i].module_name = "plugin"; + DEBUG(4,("There was no backend specified for domain %s; using %s\n", + lp_workgroup(), SAM_DEFAULT_BACKEND)); + (*backend_entries)[i].module_name = SAM_DEFAULT_BACKEND; (*backend_entries)[i].module_params = NULL; (*backend_entries)[i].domain_name = lp_workgroup(); (*backend_entries)[i].domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); @@ -1012,9 +1011,9 @@ static NTSTATUS check_correct_backend_entries(SAM_BACKEND_ENTRY **backend_entrie i++; } if (!has_builtin) { - /* should be replaced by the default sam module */ - DEBUG(4,("There was no backend specified for domain BUILTIN useing plugin\n")); - (*backend_entries)[i].module_name = "plugin"; + DEBUG(4,("There was no backend specified for domain BUILTIN; using %s\n", + SAM_DEFAULT_BACKEND)); + (*backend_entries)[i].module_name = SAM_DEFAULT_BACKEND; (*backend_entries)[i].module_params = NULL; (*backend_entries)[i].domain_name = "BUILTIN"; (*backend_entries)[i].domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); diff --git a/source/torture/cmd_sam.c b/source/torture/cmd_sam.c new file mode 100644 index 00000000000..d276d52fe62 --- /dev/null +++ b/source/torture/cmd_sam.c @@ -0,0 +1,1002 @@ +/* + Unix SMB/CIFS implementation. + SAM module functions + + Copyright (C) Jelmer Vernooij 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "samtest.h" + +static NTSTATUS cmd_load_module(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char *plugin_arg[2]; + NTSTATUS status; + if (argc != 2) { + printf("Usage: load \n"); + return NT_STATUS_OK; + } + + asprintf(&plugin_arg[0], "plugin:%s", argv[1]); + plugin_arg[1] = NULL; + + if(!NT_STATUS_IS_OK(status = make_sam_context_list(&c, plugin_arg))) + { + return status; + } + printf("load: ok\n"); + return NT_STATUS_OK; +} + +#if 0 +static NTSTATUS cmd_populate(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char c; + size_t size; + if (argc != 3) { + printf("Usage: populate \n"); + return NT_STATUS_OK; + } + c = argv[1][0]; + size = atoi(argv[2]); + vfs->data = (char *)talloc(mem_ctx, size); + if (vfs->data == NULL) { + printf("populate: error=-1 (not enough memory)"); + return NT_STATUS_UNSUCCESSFUL; + } + memset(vfs->data, c, size); + vfs->data_size = size; + return NT_STATUS_OK; +} + +static NTSTATUS cmd_show_data(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + size_t offset; + size_t len; + if (argc != 1 && argc != 3) { + printf("Usage: showdata [ ]\n"); + return NT_STATUS_OK; + } + if (vfs->data == NULL || vfs->data_size == 0) { + printf("show_data: error=-1 (buffer empty)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (argc == 3) { + offset = atoi(argv[1]); + len = atoi(argv[2]); + } else { + offset = 0; + len = vfs->data_size; + } + if ((offset + len) > vfs->data_size) { + printf("show_data: error=-1 (not enough data in buffer)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + dump_data(0, (char *)(vfs->data) + offset, len); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_connect(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + vfs->conn->vfs_ops.connect(vfs->conn, lp_servicename(vfs->conn->service), "vfstest"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_disconnect(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + vfs->conn->vfs_ops.disconnect(vfs->conn); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_disk_free(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + SMB_BIG_UINT diskfree, bsize, dfree, dsize; + if (argc != 2) { + printf("Usage: disk_free \n"); + return NT_STATUS_OK; + } + + diskfree = vfs->conn->vfs_ops.disk_free(vfs->conn, argv[1], False, &bsize, &dfree, &dsize); + printf("disk_free: %ld, bsize = %ld, dfree = %ld, dsize = %ld\n", diskfree, bsize, dfree, dsize); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_opendir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + if (argc != 2) { + printf("Usage: opendir \n"); + return NT_STATUS_OK; + } + + vfs->currentdir = vfs->conn->vfs_ops.opendir(vfs->conn, argv[1]); + if (vfs->currentdir == NULL) { + printf("opendir error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("opendir: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_readdir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + struct dirent *dent; + + if (vfs->currentdir == NULL) { + printf("readdir: error=-1 (no open directory)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + dent = vfs->conn->vfs_ops.readdir(vfs->conn, vfs->currentdir); + if (dent == NULL) { + printf("readdir: NULL\n"); + return NT_STATUS_OK; + } + + printf("readdir: %s\n", dent->d_name); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_mkdir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + if (argc != 2) { + printf("Usage: mkdir \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.mkdir(vfs->conn, argv[1], 00755) == -1) { + printf("mkdir error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("mkdir: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_closedir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret; + + if (vfs->currentdir == NULL) { + printf("closedir: failure (no directory open)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + ret = vfs->conn->vfs_ops.closedir(vfs->conn, vfs->currentdir); + if (ret == -1) { + printf("closedir failure: %s\n", strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("closedir: ok\n"); + vfs->currentdir = NULL; + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_open(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int flags, fd; + mode_t mode; + char *flagstr; + + mode = 00400; + + if (argc < 3 || argc > 5) { + printf("Usage: open \n"); + printf(" flags: O = O_RDONLY\n"); + printf(" R = O_RDWR\n"); + printf(" W = O_WRONLY\n"); + printf(" C = O_CREAT\n"); + printf(" E = O_EXCL\n"); + printf(" T = O_TRUNC\n"); + printf(" A = O_APPEND\n"); + printf(" N = O_NONBLOCK/O_NDELAY\n"); +#ifdef O_SYNC + printf(" S = O_SYNC\n"); +#endif +#ifdef O_NOFOLLOW + printf(" F = O_NOFOLLOW\n"); +#endif + printf(" mode: see open.2\n"); + printf(" mode is ignored if C flag not present\n"); + printf(" mode defaults to 00400\n"); + return NT_STATUS_OK; + } + flags = 0; + flagstr = argv[2]; + while (*flagstr) { + switch (*flagstr) { + case 'O': + flags |= O_RDONLY; + break; + case 'R': + flags |= O_RDWR; + break; + case 'W': + flags |= O_WRONLY; + break; + case 'C': + flags |= O_CREAT; + break; + case 'E': + flags |= O_EXCL; + break; + case 'T': + flags |= O_TRUNC; + break; + case 'A': + flags |= O_APPEND; + break; + case 'N': + flags |= O_NONBLOCK; + break; +#ifdef O_SYNC + case 'S': + flags |= O_SYNC; + break; +#endif +#ifdef O_NOFOLLOW + case 'F': + flags |= O_NOFOLLOW; + break; +#endif + default: + printf("open: error=-1 (invalid flag!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + flagstr++; + } + if ((flags & O_CREAT) && argc == 4) { + if (sscanf(argv[3], "%o", &mode) == 0) { + printf("open: error=-1 (invalid mode!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + } + + fd = vfs->conn->vfs_ops.open(vfs->conn, argv[1], flags, mode); + if (fd == -1) { + printf("open: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + vfs->files[fd] = (struct files_struct *)malloc(sizeof(struct files_struct)); + vfs->files[fd]->fsp_name = strdup(argv[1]); + vfs->files[fd]->fd = fd; + vfs->files[fd]->conn = vfs->conn; + printf("open: fd=%d\n", fd); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_pathfunc(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret = -1; + + if (argc != 2) { + printf("Usage: %s \n", argv[0]); + return NT_STATUS_OK; + } + + if (strcmp("rmdir", argv[0]) == 0 ) { + ret = vfs->conn->vfs_ops.rmdir(vfs->conn, argv[1]); + } else if (strcmp("unlink", argv[0]) == 0 ) { + ret = vfs->conn->vfs_ops.unlink(vfs->conn, argv[1]); + } else if (strcmp("chdir", argv[0]) == 0 ) { + ret = vfs->conn->vfs_ops.chdir(vfs->conn, argv[1]); + } else { + printf("%s: error=%d (invalid function name!)\n", argv[0], errno); + return NT_STATUS_UNSUCCESSFUL; + } + + if (ret == -1) { + printf("%s: error=%d (%s)\n", argv[0], errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("%s: ok\n", argv[0]); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_close(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd, ret; + + if (argc != 2) { + printf("Usage: close \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + if (vfs->files[fd] == NULL) { + printf("close: error=-1 (invalid file descriptor)\n"); + return NT_STATUS_OK; + } + + ret = vfs->conn->vfs_ops.close(vfs->files[fd], fd); + if (ret == -1 ) + printf("close: error=%d (%s)\n", errno, strerror(errno)); + else + printf("close: ok\n"); + + SAFE_FREE(vfs->files[fd]->fsp_name); + SAFE_FREE(vfs->files[fd]); + vfs->files[fd] = NULL; + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_read(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd; + size_t size, rsize; + + if (argc != 3) { + printf("Usage: read \n"); + return NT_STATUS_OK; + } + + /* do some error checking on these */ + fd = atoi(argv[1]); + size = atoi(argv[2]); + vfs->data = (char *)talloc(mem_ctx, size); + if (vfs->data == NULL) { + printf("read: error=-1 (not enough memory)"); + return NT_STATUS_UNSUCCESSFUL; + } + vfs->data_size = size; + + rsize = vfs->conn->vfs_ops.read(vfs->files[fd], fd, vfs->data, size); + if (rsize == -1) { + printf("read: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("read: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_write(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd, size, wsize; + + if (argc != 3) { + printf("Usage: write \n"); + return NT_STATUS_OK; + } + + /* some error checking should go here */ + fd = atoi(argv[1]); + size = atoi(argv[2]); + if (vfs->data == NULL) { + printf("write: error=-1 (buffer empty, please populate it before writing)"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (vfs->data_size < size) { + printf("write: error=-1 (buffer too small, please put some more data in)"); + return NT_STATUS_UNSUCCESSFUL; + } + + wsize = vfs->conn->vfs_ops.write(vfs->files[fd], fd, vfs->data, size); + + if (wsize == -1) { + printf("write: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("write: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_lseek(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd, offset, whence; + SMB_OFF_T pos; + + if (argc != 4) { + printf("Usage: lseek \n...where whence is 1 => SEEK_SET, 2 => SEEK_CUR, 3 => SEEK_END\n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + offset = atoi(argv[2]); + whence = atoi(argv[3]); + switch (whence) { + case 1: whence = SEEK_SET; break; + case 2: whence = SEEK_CUR; break; + default: whence = SEEK_END; + } + + pos = vfs->conn->vfs_ops.lseek(vfs->files[fd], fd, offset, whence); + if (pos == (SMB_OFF_T)-1) { + printf("lseek: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("lseek: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_rename(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret; + if (argc != 3) { + printf("Usage: rename \n"); + return NT_STATUS_OK; + } + + ret = vfs->conn->vfs_ops.rename(vfs->conn, argv[1], argv[2]); + if (ret == -1) { + printf("rename: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("rename: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_fsync(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret, fd; + if (argc != 2) { + printf("Usage: fsync \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + ret = vfs->conn->vfs_ops.fsync(vfs->files[fd], fd); + if (ret == -1) { + printf("fsync: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("fsync: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_stat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret; + char *user; + char *group; + struct passwd *pwd; + struct group *grp; + SMB_STRUCT_STAT st; + + if (argc != 2) { + printf("Usage: stat \n"); + return NT_STATUS_OK; + } + + ret = vfs->conn->vfs_ops.stat(vfs->conn, argv[1], &st); + if (ret == -1) { + printf("stat: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + pwd = sys_getpwuid(st.st_uid); + if (pwd != NULL) user = strdup(pwd->pw_name); + else user = null_string; + grp = sys_getgrgid(st.st_gid); + if (grp != NULL) group = strdup(grp->gr_name); + else group = null_string; + + printf("stat: ok\n"); + printf(" File: %s", argv[1]); + if (S_ISREG(st.st_mode)) printf(" Regular File\n"); + else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); + else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); + else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); + else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); + else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); + else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); + printf(" Size: %10d", st.st_size); + printf(" Blocks: %9d", st.st_blocks); + printf(" IO Block: %d\n", st.st_blksize); + printf(" Device: 0x%10x", st.st_dev); + printf(" Inode: %10d", st.st_ino); + printf(" Links: %10d\n", st.st_nlink); + printf(" Access: %05o", (st.st_mode) & 007777); + printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); + printf(" Access: %s", ctime(&(st.st_atime))); + printf(" Modify: %s", ctime(&(st.st_mtime))); + printf(" Change: %s", ctime(&(st.st_ctime))); + if (user != null_string) SAFE_FREE(user); + if (group!= null_string) SAFE_FREE(group); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_fstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd; + char *user; + char *group; + struct passwd *pwd; + struct group *grp; + SMB_STRUCT_STAT st; + + if (argc != 2) { + printf("Usage: fstat \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + if (fd < 0 || fd > 1024) { + printf("fstat: error=%d (file descriptor out of range)\n", EBADF); + return NT_STATUS_OK; + } + + if (vfs->files[fd] == NULL) { + printf("fstat: error=%d (invalid file descriptor)\n", EBADF); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.fstat(vfs->files[fd], fd, &st) == -1) { + printf("fstat: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + pwd = sys_getpwuid(st.st_uid); + if (pwd != NULL) user = strdup(pwd->pw_name); + else user = null_string; + grp = sys_getgrgid(st.st_gid); + if (grp != NULL) group = strdup(grp->gr_name); + else group = null_string; + + printf("fstat: ok\n"); + if (S_ISREG(st.st_mode)) printf(" Regular File\n"); + else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); + else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); + else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); + else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); + else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); + else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); + printf(" Size: %10d", st.st_size); + printf(" Blocks: %9d", st.st_blocks); + printf(" IO Block: %d\n", st.st_blksize); + printf(" Device: 0x%10x", st.st_dev); + printf(" Inode: %10d", st.st_ino); + printf(" Links: %10d\n", st.st_nlink); + printf(" Access: %05o", (st.st_mode) & 007777); + printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); + printf(" Access: %s", ctime(&(st.st_atime))); + printf(" Modify: %s", ctime(&(st.st_mtime))); + printf(" Change: %s", ctime(&(st.st_ctime))); + if (user != null_string) SAFE_FREE(user); + if (group!= null_string) SAFE_FREE(group); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_lstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char *user; + char *group; + struct passwd *pwd; + struct group *grp; + SMB_STRUCT_STAT st; + + if (argc != 2) { + printf("Usage: lstat \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.lstat(vfs->conn, argv[1], &st) == -1) { + printf("lstat: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + pwd = sys_getpwuid(st.st_uid); + if (pwd != NULL) user = strdup(pwd->pw_name); + else user = null_string; + grp = sys_getgrgid(st.st_gid); + if (grp != NULL) group = strdup(grp->gr_name); + else group = null_string; + + printf("lstat: ok\n"); + if (S_ISREG(st.st_mode)) printf(" Regular File\n"); + else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); + else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); + else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); + else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); + else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); + else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); + printf(" Size: %10d", st.st_size); + printf(" Blocks: %9d", st.st_blocks); + printf(" IO Block: %d\n", st.st_blksize); + printf(" Device: 0x%10x", st.st_dev); + printf(" Inode: %10d", st.st_ino); + printf(" Links: %10d\n", st.st_nlink); + printf(" Access: %05o", (st.st_mode) & 007777); + printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); + printf(" Access: %s", ctime(&(st.st_atime))); + printf(" Modify: %s", ctime(&(st.st_mtime))); + printf(" Change: %s", ctime(&(st.st_ctime))); + if (user != null_string) SAFE_FREE(user); + if (group!= null_string) SAFE_FREE(group); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_chmod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + mode_t mode; + if (argc != 3) { + printf("Usage: chmod \n"); + return NT_STATUS_OK; + } + + mode = atoi(argv[2]); + if (vfs->conn->vfs_ops.chmod(vfs->conn, argv[1], mode) == -1) { + printf("chmod: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("chmod: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_fchmod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd; + mode_t mode; + if (argc != 3) { + printf("Usage: fchmod \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + mode = atoi(argv[2]); + if (fd < 0 || fd > 1024) { + printf("fchmod: error=%d (file descriptor out of range)\n", EBADF); + return NT_STATUS_OK; + } + if (vfs->files[fd] == NULL) { + printf("fchmod: error=%d (invalid file descriptor)\n", EBADF); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.fchmod(vfs->files[fd], fd, mode) == -1) { + printf("fchmod: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("fchmod: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_chown(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + uid_t uid; + gid_t gid; + if (argc != 4) { + printf("Usage: chown \n"); + return NT_STATUS_OK; + } + + uid = atoi(argv[2]); + gid = atoi(argv[3]); + if (vfs->conn->vfs_ops.chown(vfs->conn, argv[1], uid, gid) == -1) { + printf("chown: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("chown: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_fchown(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + uid_t uid; + gid_t gid; + int fd; + if (argc != 4) { + printf("Usage: fchown \n"); + return NT_STATUS_OK; + } + + uid = atoi(argv[2]); + gid = atoi(argv[3]); + fd = atoi(argv[1]); + if (fd < 0 || fd > 1024) { + printf("fchown: faliure=%d (file descriptor out of range)\n", EBADF); + return NT_STATUS_OK; + } + if (vfs->files[fd] == NULL) { + printf("fchown: error=%d (invalid file descriptor)\n", EBADF); + return NT_STATUS_OK; + } + if (vfs->conn->vfs_ops.fchown(vfs->files[fd], fd, uid, gid) == -1) { + printf("fchown error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("fchown: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_getwd(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char buf[PATH_MAX]; + if (vfs->conn->vfs_ops.getwd(vfs->conn, buf) == NULL) { + printf("getwd: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("getwd: %s\n", buf); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_utime(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + struct utimbuf times; + if (argc != 4) { + printf("Usage: utime \n"); + return NT_STATUS_OK; + } + times.actime = atoi(argv[2]); + times.modtime = atoi(argv[3]); + if (vfs->conn->vfs_ops.utime(vfs->conn, argv[1], ×) != 0) { + printf("utime: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("utime: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_ftruncate(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd; + SMB_OFF_T off; + if (argc != 3) { + printf("Usage: ftruncate \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + off = atoi(argv[2]); + if (fd < 0 || fd > 1024) { + printf("ftruncate: error=%d (file descriptor out of range)\n", EBADF); + return NT_STATUS_OK; + } + if (vfs->files[fd] == NULL) { + printf("ftruncate: error=%d (invalid file descriptor)\n", EBADF); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.ftruncate(vfs->files[fd], fd, off) == -1) { + printf("ftruncate: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("ftruncate: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_lock(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + BOOL ret; + int fd; + int op; + long offset; + long count; + int type; + char *typestr; + + if (argc != 6) { + printf("Usage: lock \n"); + printf(" ops: G = F_GETLK\n"); + printf(" S = F_SETLK\n"); + printf(" W = F_SETLKW\n"); + printf(" type: R = F_RDLCK\n"); + printf(" W = F_WRLCK\n"); + printf(" U = F_UNLCK\n"); + return NT_STATUS_OK; + } + + if (sscanf(argv[1], "%d", &fd) == 0) { + printf("lock: error=-1 (error parsing fd)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + op = 0; + switch (*argv[2]) { + case 'G': + op = F_GETLK; + break; + case 'S': + op = F_SETLK; + break; + case 'W': + op = F_SETLKW; + break; + default: + printf("lock: error=-1 (invalid op flag!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (sscanf(argv[3], "%ld", &offset) == 0) { + printf("lock: error=-1 (error parsing fd)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (sscanf(argv[4], "%ld", &count) == 0) { + printf("lock: error=-1 (error parsing fd)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + type = 0; + typestr = argv[5]; + while(*typestr) { + switch (*typestr) { + case 'R': + type |= F_RDLCK; + break; + case 'W': + type |= F_WRLCK; + break; + case 'U': + type |= F_UNLCK; + break; + default: + printf("lock: error=-1 (invalid type flag!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + typestr++; + } + + printf("lock: debug lock(fd=%d, op=%d, offset=%ld, count=%ld, type=%d))\n", fd, op, offset, count, type); + + if ((ret = vfs->conn->vfs_ops.lock(vfs->files[fd], fd, op, offset, count, type)) == False) { + printf("lock: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("lock: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_symlink(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + if (argc != 3) { + printf("Usage: symlink \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.symlink(vfs->conn, argv[1], argv[2]) == -1) { + printf("symlink: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("symlink: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_readlink(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char buffer[PATH_MAX]; + int size; + + if (argc != 2) { + printf("Usage: readlink \n"); + return NT_STATUS_OK; + } + + if ((size = vfs->conn->vfs_ops.readlink(vfs->conn, argv[1], buffer, PATH_MAX)) == -1) { + printf("readlink: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + buffer[size] = '\0'; + printf("readlink: %s\n", buffer); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_link(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + if (argc != 3) { + printf("Usage: link \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.link(vfs->conn, argv[1], argv[2]) == -1) { + printf("link: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("link: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_mknod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + mode_t mode; + SMB_DEV_T dev; + + if (argc != 4) { + printf("Usage: mknod \n"); + printf(" mode is octal\n"); + printf(" dev is hex\n"); + return NT_STATUS_OK; + } + + if (sscanf(argv[2], "%o", &mode) == 0) { + printf("open: error=-1 (invalid mode!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (sscanf(argv[3], "%x", &dev) == 0) { + printf("open: error=-1 (invalid dev!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (vfs->conn->vfs_ops.mknod(vfs->conn, argv[1], mode, dev) == -1) { + printf("mknod: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("mknod: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_realpath(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char respath[PATH_MAX]; + + if (argc != 2) { + printf("Usage: realpath \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.realpath(vfs->conn, argv[1], respath) == NULL) { + printf("realpath: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("realpath: ok\n"); + return NT_STATUS_OK; +} + +#endif + +struct cmd_set sam_commands[] = { + + { "SAM Commands" }, + + { "load", cmd_load_module, "Load a module", "load " }, + { NULL } +}; diff --git a/source/torture/samtest.c b/source/torture/samtest.c index 490cc2cdf3d..3ac65ef0dfe 100644 --- a/source/torture/samtest.c +++ b/source/torture/samtest.c @@ -23,20 +23,13 @@ */ #include "includes.h" +#include "samtest.h" struct func_entry { char *name; int (*fn)(struct connection_struct *conn, const char *path); }; -struct cmd_set { - char *name; - NTSTATUS (*fn)(struct sam_context *sam, TALLOC_CTX *mem_ctx, int argc, - char **argv); - char *description; - char *usage; -}; - /* List to hold groups of commands */ static struct cmd_list { struct cmd_list *prev, *next; @@ -164,9 +157,10 @@ static struct cmd_set separator_command[] = { /*extern struct cmd_set sam_commands[];*/ +extern struct cmd_set sam_commands[]; static struct cmd_set *samtest_command_list[] = { samtest_commands, -/* sam_commands, NOT YET */ + sam_commands, NULL }; @@ -336,12 +330,10 @@ int main(int argc, char *argv[]) int opt; static char *cmdstr = ""; static char *opt_logfile=NULL; - static int opt_debuglevel; pstring logfile; struct cmd_set **cmd_set; extern BOOL AllowDebugChange; static struct sam_context sam; - int i; /* make sure the vars that get altered (4th field) are in diff --git a/source/torture/samtest.h b/source/torture/samtest.h new file mode 100644 index 00000000000..2a8516cfc3b --- /dev/null +++ b/source/torture/samtest.h @@ -0,0 +1,31 @@ +/* + Unix SMB/CIFS implementation. + SAM module tester + + Copyright (C) Jelmer Vernooij 2002 + + Most of this code was ripped off of rpcclient. + Copyright (C) Tim Potter 2000-2001 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +struct cmd_set { + char *name; + NTSTATUS (*fn)(struct sam_context *sam, TALLOC_CTX *mem_ctx, int argc, + char **argv); + char *description; + char *usage; +}; -- cgit From 7e19a6b7ade1e70aafa9be8a86665a49f592b6f4 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 19 Sep 2002 17:36:29 +0000 Subject: tdb tools need #include Jeremy. --- source/tdb/spinlock.c | 1 + source/tdb/tdbtest.c | 1 + source/tdb/tdbtool.c | 1 + 3 files changed, 3 insertions(+) diff --git a/source/tdb/spinlock.c b/source/tdb/spinlock.c index 74472854cf2..2370ce3bdd9 100644 --- a/source/tdb/spinlock.c +++ b/source/tdb/spinlock.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "tdb.h" #include "spinlock.h" diff --git a/source/tdb/tdbtest.c b/source/tdb/tdbtest.c index 0741073ce11..89295a3291f 100644 --- a/source/tdb/tdbtest.c +++ b/source/tdb/tdbtest.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "tdb.h" #include diff --git a/source/tdb/tdbtool.c b/source/tdb/tdbtool.c index ba0fb48957d..f529c6e6eeb 100644 --- a/source/tdb/tdbtool.c +++ b/source/tdb/tdbtool.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "tdb.h" /* a tdb tool for manipulating a tdb database */ -- cgit From 2fe72652ee468bf5e1f8f151215f45b10f4c8a28 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 19 Sep 2002 17:40:55 +0000 Subject: Move functionality to check whether entries for lp_workgroup() and "BUILTIN" exist and add them if necessary from check_correct_backend_entries into sam_context_check_default_backends. The reason for this is that we don't always want to have BUILTIN and lp_workgroup() in a sam_context, for example when doing sam2sam. check_correct_backend_entries has been renamed to 'check_duplicate_backend_entries' since that's what it currently does. The sam_context_check_default_backends() function is only called by sam_get_static_context(BOOL reload) currently currently. --- source/sam/api.c | 4 +- source/sam/interface.c | 163 +++++++++++++++++++++++++++++-------------------- 2 files changed, 98 insertions(+), 69 deletions(-) diff --git a/source/sam/api.c b/source/sam/api.c index 5d850becce3..fb2f015e953 100644 --- a/source/sam/api.c +++ b/source/sam/api.c @@ -1,7 +1,7 @@ /* Unix SMB/CIFS implementation. SAM interface API. - + Copyright (C) Stefan (metze) Metzmacher 2002 This program is free software; you can redistribute it and/or modify @@ -24,7 +24,7 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_SAM -/* this function should be used by the rest of SAMBA --metze */ +/* these functions should be used by the rest of SAMBA --metze */ /* General API */ diff --git a/source/sam/interface.c b/source/sam/interface.c index 17df276aed0..6668e3848d0 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -965,65 +965,9 @@ static NTSTATUS make_backend_entry(SAM_BACKEND_ENTRY *backend_entry, char *sam_b return NT_STATUS_OK; } -static NTSTATUS check_correct_backend_entries(SAM_BACKEND_ENTRY **backend_entries, int *nBackends) -{ - BOOL has_builtin = False; - BOOL has_workgroup = False; - DOM_SID *global_sam_sid = get_global_sam_sid(); /* lp_workgroup doesn't play nicely with multiple domains */ - int increase_by = 0; - int i, j; - - DEBUG(5,("check_correct_backend_entries: %d\n", __LINE__)); - - for (i = 0; i < *nBackends; i++) { - if (sid_equal((*backend_entries)[i].domain_sid, &global_sid_Builtin)) { - DEBUG(20,("check_correct_backend_entries: smb.conf specified BUILTIN domain\n")); - has_builtin = True; - } - if (sid_equal((*backend_entries)[i].domain_sid, global_sam_sid)) { - DEBUG(20,("check_correct_backend_entries: smb.conf specified main domain\n")); - has_workgroup = True; - } - for (j = i + 1; j < *nBackends; j++) { - if (sid_equal((*backend_entries)[i].domain_sid, (*backend_entries)[j].domain_sid)) { - DEBUG(0,("two backend modules claim the same domain %s\n", - sid_string_static((*backend_entries)[j].domain_sid))); - return NT_STATUS_INVALID_PARAMETER; - } - } - } - - if (!has_workgroup) increase_by++; - if (!has_builtin) increase_by++; - - if (increase_by > 0) { - *nBackends += increase_by; - - (*backend_entries) = (SAM_BACKEND_ENTRY *)realloc((*backend_entries), sizeof(SAM_BACKEND_ENTRY) * (*nBackends+1)); - if (!has_workgroup) { - DEBUG(4,("There was no backend specified for domain %s; using %s\n", - lp_workgroup(), SAM_DEFAULT_BACKEND)); - (*backend_entries)[i].module_name = SAM_DEFAULT_BACKEND; - (*backend_entries)[i].module_params = NULL; - (*backend_entries)[i].domain_name = lp_workgroup(); - (*backend_entries)[i].domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); - sid_copy((*backend_entries)[i].domain_sid, global_sam_sid); - i++; - } - if (!has_builtin) { - DEBUG(4,("There was no backend specified for domain BUILTIN; using %s\n", - SAM_DEFAULT_BACKEND)); - (*backend_entries)[i].module_name = SAM_DEFAULT_BACKEND; - (*backend_entries)[i].module_params = NULL; - (*backend_entries)[i].domain_name = "BUILTIN"; - (*backend_entries)[i].domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); - sid_copy((*backend_entries)[i].domain_sid, &global_sid_Builtin); - i++; - } - } - - return NT_STATUS_OK; -} +/****************************************************************** + create sam_methods struct based on sam_backend_entry + *****************************************************************/ static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS **methods, SAM_BACKEND_ENTRY *backend_entry) { @@ -1048,7 +992,6 @@ static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS backend_entry->module_name, nt_errstr(nt_status))); } return nt_status; - break; /* unreached */ } } @@ -1057,6 +1000,90 @@ static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS return NT_STATUS_INVALID_PARAMETER; } +static NTSTATUS sam_context_check_default_backends(SAM_CONTEXT *context) +{ + SAM_BACKEND_ENTRY entry; + DOM_SID *global_sam_sid = get_global_sam_sid(); /* lp_workgroup doesn't play nicely with multiple domains */ + SAM_METHODS *methods, *tmpmethods; + NTSTATUS ntstatus; + + DEBUG(5,("sam_context_check_default_backends: %d\n", __LINE__)); + + /* Make sure domain lp_workgroup() is available */ + + ntstatus = sam_get_methods_by_sid(context, &methods, &global_sid_Builtin); + + if (NT_STATUS_EQUAL(ntstatus, NT_STATUS_NO_SUCH_DOMAIN)) { + DEBUG(4,("There was no backend specified for domain %s; using %s\n", + lp_workgroup(), SAM_DEFAULT_BACKEND)); + + SAM_ASSERT(global_sam_sid); + + entry.module_name = SAM_DEFAULT_BACKEND; + entry.module_params = NULL; + entry.domain_name = lp_workgroup(); + entry.domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); + sid_copy(entry.domain_sid, global_sam_sid); + + if (!NT_STATUS_IS_OK(ntstatus = make_sam_methods_backend_entry(context, &methods, &entry))) { + DEBUG(4,("make_sam_methods_backend_entry failed\n")); + return ntstatus; + } + + methods->parent = context; + DLIST_ADD_END(context->methods, methods, tmpmethods); + + } else if (!NT_STATUS_IS_OK(ntstatus)) { + DEBUG(2, ("sam_get_methods_by_sid failed for %s\n", lp_workgroup())); + return ntstatus; + } + + /* Make sure the BUILTIN domain is available */ + + ntstatus = sam_get_methods_by_sid(context, &methods, global_sam_sid); + + if (NT_STATUS_EQUAL(ntstatus, NT_STATUS_NO_SUCH_DOMAIN)) { + DEBUG(4,("There was no backend specified for domain BUILTIN; using %s\n", + SAM_DEFAULT_BACKEND)); + entry.module_name = SAM_DEFAULT_BACKEND; + entry.module_params = NULL; + entry.domain_name = "BUILTIN"; + entry.domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); + sid_copy(entry.domain_sid, &global_sid_Builtin); + + if (!NT_STATUS_IS_OK(ntstatus = make_sam_methods_backend_entry(context, &methods, &entry))) { + DEBUG(4,("make_sam_methods_backend_entry failed\n")); + return ntstatus; + } + + methods->parent = context; + DLIST_ADD_END(context->methods, methods, tmpmethods); + } else if (!NT_STATUS_IS_OK(ntstatus)) { + DEBUG(2, ("sam_get_methods_by_sid failed for BUILTIN\n")); + return ntstatus; + } + + return NT_STATUS_OK; +} + +static NTSTATUS check_duplicate_backend_entries(SAM_BACKEND_ENTRY **backend_entries, int *nBackends) +{ + int i, j; + + DEBUG(5,("check_duplicate_backend_entries: %d\n", __LINE__)); + + for (i = 0; i < *nBackends; i++) { + for (j = i + 1; j < *nBackends; j++) { + if (sid_equal((*backend_entries)[i].domain_sid, (*backend_entries)[j].domain_sid)) { + DEBUG(0,("two backend modules claim the same domain %s\n", + sid_string_static((*backend_entries)[j].domain_sid))); + return NT_STATUS_INVALID_PARAMETER; + } + } + } + + return NT_STATUS_OK; +} NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **sam_backends_param) { @@ -1095,8 +1122,8 @@ NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **sam_backends_param) } } - if (!NT_STATUS_IS_OK(nt_status = check_correct_backend_entries(&backends, &nBackends))) { - DEBUG(4,("check_correct_backend_entries failed\n")); + if (!NT_STATUS_IS_OK(nt_status = check_duplicate_backend_entries(&backends, &nBackends))) { + DEBUG(4,("check_duplicate_backend_entries failed\n")); for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); SAFE_FREE(backends); free_sam_context(context); @@ -1153,7 +1180,6 @@ NTSTATUS make_sam_context(SAM_CONTEXT **context) return NT_STATUS_OK; } - /****************************************************************** Return an already initialised sam_context, to facilitate backward compatibility (see functions below). @@ -1165,10 +1191,7 @@ struct sam_context *sam_get_static_context(BOOL reload) if ((sam_context) && (reload)) { sam_context->free_fn(&sam_context); - if (!NT_STATUS_IS_OK(make_sam_context_list(&sam_context, lp_sam_backend()))) { - DEBUG(4,("make_sam_context_list failed\n")); - return NULL; - } + sam_context = NULL; } if (!sam_context) { @@ -1176,6 +1199,12 @@ struct sam_context *sam_get_static_context(BOOL reload) DEBUG(4,("make_sam_context_list failed\n")); return NULL; } + + /* Make sure the required domains (default domain, builtin) are available */ + if (!NT_STATUS_IS_OK(sam_context_check_default_backends(sam_context))) { + DEBUG(4,("sam_context_check_default_backends failed\n")); + return NULL; + } } return sam_context; -- cgit From a77966645a976d6ae08581c2e92465c48a8e961d Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 19 Sep 2002 18:20:38 +0000 Subject: Use sendfile in readbraw. Jeremy. --- source/smbd/reply.c | 67 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 11 deletions(-) diff --git a/source/smbd/reply.c b/source/smbd/reply.c index 4c7d73bc6e6..a881e135c08 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -1431,6 +1431,59 @@ void fail_readraw(void) exit_server(errstr); } +/**************************************************************************** + Use sendfile in readbraw. +****************************************************************************/ + +void send_file_readbraw(connection_struct *conn, files_struct *fsp, SMB_OFF_T startpos, size_t nread, + ssize_t mincount, char *outbuf) +{ + ssize_t ret=0; + +#if defined(WITH_SENDFILE) + /* + * We can only use sendfile on a non-chained packet and on a file + * that is exclusively oplocked. reply_readbraw has already checked the length. + */ + + if ((nread > 0) && (lp_write_cache_size(SNUM(conn)) == 0) && + EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type) && lp_use_sendfile(SNUM(conn)) ) { + DATA_BLOB header; + + _smb_setlen(outbuf,nread); + header.data = outbuf; + header.length = 4; + header.free = NULL; + + if ( conn->vfs_ops.sendfile( smbd_server_fd(), fsp, fsp->fd, &header, startpos, nread) == -1) { + /* + * Special hack for broken Linux with no 64 bit clean sendfile. If we + * return ENOSYS then pretend we just got a normal read. + */ + if (errno == ENOSYS) + goto normal_read; + + DEBUG(0,("send_file_readbraw: sendfile failed for file %s (%s). Terminating\n", + fsp->fsp_name, strerror(errno) )); + exit_server("send_file_readbraw sendfile failed"); + } + + } + + normal_read: +#endif + + if (nread > 0) { + ret = read_file(fsp,outbuf+4,startpos,nread); + if (ret < mincount) + ret = 0; + } + + _smb_setlen(outbuf,ret); + if (write_data(smbd_server_fd(),outbuf,4+ret) != 4+ret) + fail_readraw(); +} + /**************************************************************************** Reply to a readbraw (core+ protocol). ****************************************************************************/ @@ -1441,7 +1494,6 @@ int reply_readbraw(connection_struct *conn, char *inbuf, char *outbuf, int dum_s size_t nread = 0; SMB_OFF_T startpos; char *header = outbuf; - ssize_t ret=0; files_struct *fsp; START_PROFILE(SMBreadbraw); @@ -1545,15 +1597,7 @@ int reply_readbraw(connection_struct *conn, char *inbuf, char *outbuf, int dum_s DEBUG( 3, ( "readbraw fnum=%d start=%.0f max=%d min=%d nread=%d\n", fsp->fnum, (double)startpos, (int)maxcount, (int)mincount, (int)nread ) ); - if (nread > 0) { - ret = read_file(fsp,header+4,startpos,nread); - if (ret < mincount) - ret = 0; - } - - _smb_setlen(header,ret); - if (write_data(smbd_server_fd(),header,4+ret) != 4+ret) - fail_readraw(); + send_file_readbraw(conn, fsp, startpos, nread, mincount, outbuf); DEBUG(5,("readbraw finished\n")); END_PROFILE(SMBreadbraw); @@ -1698,7 +1742,8 @@ int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length * that is exclusively oplocked. */ - if ((CVAL(inbuf,smb_vwv0) == 0xFF) && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type) && lp_use_sendfile(SNUM(conn)) ) { + if ((CVAL(inbuf,smb_vwv0) == 0xFF) && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type) && + lp_use_sendfile(SNUM(conn)) && (lp_write_cache_size(SNUM(conn)) == 0) ) { SMB_STRUCT_STAT sbuf; DATA_BLOB header; -- cgit From 1bd2c6e1441ea8e54284c72dc07de741f88dbe90 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 23:32:38 +0000 Subject: remove proto headers on realclean --- source/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Makefile.in b/source/Makefile.in index dbbd97bbff9..f1c71264510 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -1008,7 +1008,7 @@ etags: ctags: ctags `find $(srcdir) -name "*.[ch]" | grep -v /CVS/` -realclean: clean +realclean: clean delheaders -rm -f config.log $(PROGS) $(SPROGS) bin/.dummy -rmdir bin -- cgit From 56b194e83538bcb6006a5ab1e00cdb493dd9ad7f Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 20 Sep 2002 09:34:35 +0000 Subject: allow --with-krb5 to override the location of the kerberos libs on redhat --- source/configure.in | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/source/configure.in b/source/configure.in index d53886bc65d..7ae8ac90d38 100644 --- a/source/configure.in +++ b/source/configure.in @@ -1958,20 +1958,9 @@ AC_MSG_RESULT($with_ads_support) if test x"$with_ads_support" = x"yes"; then - ################################################# - # see if this box has the RedHat location for kerberos - AC_MSG_CHECKING(for /usr/kerberos) - if test -d /usr/kerberos; then - LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" - CFLAGS="$CFLAGS -I/usr/kerberos/include" - CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include" - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi - ################################################# # check for location of Kerberos 5 install +FOUND_KRB5=0 AC_MSG_CHECKING(for kerberos 5 install path) AC_ARG_WITH(krb5, [ --with-krb5=base-dir Locate Kerberos 5 support (default=/usr)], @@ -1985,11 +1974,28 @@ if test x"$with_ads_support" = x"yes"; then CFLAGS="$CFLAGS -I$withval/include" CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" + FOUND_KRB5=1 ;; esac ], AC_MSG_RESULT(no) ) + +if [ $FOUND_KRB5 = 0 ]; then +################################################# +# see if this box has the RedHat location for kerberos +AC_MSG_CHECKING(for /usr/kerberos) +if test -d /usr/kerberos; then + LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" + CFLAGS="$CFLAGS -I/usr/kerberos/include" + CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include" + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi +fi + + # now check for krb5.h. Some systems have the libraries without the headers! # note that this check is done here to allow for different kerberos # include paths -- cgit From e8ff1c0819e02a1fc7234ad0a07d5415936dfbd2 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 20 Sep 2002 09:37:02 +0000 Subject: change ADS negprot to match more closely the options used by w2k. This affects the principal used and the order of SPNEGO OIDs --- source/smbd/negprot.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/source/smbd/negprot.c b/source/smbd/negprot.c index 0e306cdab0a..16427b00d70 100644 --- a/source/smbd/negprot.c +++ b/source/smbd/negprot.c @@ -170,9 +170,9 @@ static int negprot_spnego(char *p) DATA_BLOB blob; extern pstring global_myname; uint8 guid[16]; - const char *OIDs_krb5[] = {OID_NTLMSSP, - OID_KERBEROS5, + const char *OIDs_krb5[] = {OID_KERBEROS5, OID_KERBEROS5_OLD, + OID_NTLMSSP, NULL}; const char *OIDs_plain[] = {OID_NTLMSSP, NULL}; char *principal; @@ -199,9 +199,7 @@ static int negprot_spnego(char *p) if (lp_security() != SEC_ADS) { blob = spnego_gen_negTokenInit(guid, OIDs_plain, "NONE"); } else { - /* win2000 uses host$@REALM, which we will probably use eventually, - but for now this works */ - asprintf(&principal, "HOST/%s@%s", guid, lp_realm()); + asprintf(&principal, "%s$@%s", guid, lp_realm()); blob = spnego_gen_negTokenInit(guid, OIDs_krb5, principal); free(principal); } -- cgit From cbb16eac0e79649f4383763439c7e745f27fd0cb Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 20 Sep 2002 15:11:31 +0000 Subject: CUPS merge from SAMBA_2_2 --- source/printing/print_cups.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/printing/print_cups.c b/source/printing/print_cups.c index 51ebb739a33..858647a52f4 100644 --- a/source/printing/print_cups.c +++ b/source/printing/print_cups.c @@ -665,6 +665,10 @@ cups_job_submit(int snum, struct printjob *pjob) httpClose(http); + if ( ret == 0 ) + unlink(pjob->filename); + /* else print_job_end will do it for us */ + return (ret); } -- cgit From 29be94110415c87c7030f0d2d87b612220397eae Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 20 Sep 2002 16:09:59 +0000 Subject: reran autoconf --- source/configure | 758 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 387 insertions(+), 371 deletions(-) diff --git a/source/configure b/source/configure index 9bd514ee04e..7dc099e9133 100755 --- a/source/configure +++ b/source/configure @@ -2918,12 +2918,12 @@ else #line 2919 "configure" #include "confdefs.h" #include -int main() +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); - return(0); + exit(0); } EOF if { (eval echo configure:2930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -2957,12 +2957,12 @@ else #line 2958 "configure" #include "confdefs.h" #include -int main() +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); - return(0); + exit(0); } EOF if { (eval echo configure:2969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -2996,12 +2996,12 @@ else #line 2997 "configure" #include "confdefs.h" #include -int main() +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(short)); - return(0); + exit(0); } EOF if { (eval echo configure:3008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -8928,7 +8928,17 @@ EOF SONAMEFLAG="-Wl,-h," PICFLAG="-KPIC" # Is this correct for SunOS ;; - *bsd*) BLDSHARED="true" + *freebsd*) BLDSHARED="true" + LDSHFLAGS="-shared" + DYNEXP="-Wl,--export-dynamic" + SONAMEFLAG="-Wl,-soname," + PICFLAG="-fPIC -DPIC" + cat >> confdefs.h <<\EOF +#define STAT_ST_BLOCKSIZE 512 +EOF + + ;; + *openbsd*) BLDSHARED="true" LDSHFLAGS="-shared" DYNEXP="-Wl,-Bdynamic" SONAMEFLAG="-Wl,-soname," @@ -9036,7 +9046,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9040: checking for $ac_word" >&5 +echo "configure:9050: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9093,17 +9103,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9097: checking linker flags for shared libraries" >&5 +echo "configure:9107: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9100: checking compiler flags for position-independent code" >&5 +echo "configure:9110: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9107: checking whether building shared libraries actually works" >&5 +echo "configure:9117: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9134,7 +9144,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9138: checking for long long" >&5 +echo "configure:9148: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9143,12 +9153,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9175,20 +9185,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9179: checking for LL suffix on long long integers" >&5 +echo "configure:9189: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9202: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9210,7 +9220,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9214: checking for 64 bit off_t" >&5 +echo "configure:9224: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9219,13 +9229,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9248,7 +9258,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9252: checking for off64_t" >&5 +echo "configure:9262: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9257,7 +9267,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9290,7 +9300,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9294: checking for 64 bit ino_t" >&5 +echo "configure:9304: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9299,13 +9309,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9328,7 +9338,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9332: checking for ino64_t" >&5 +echo "configure:9342: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9337,7 +9347,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9370,7 +9380,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9374: checking for dev64_t" >&5 +echo "configure:9384: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9379,7 +9389,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9412,13 +9422,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9416: checking for struct dirent64" >&5 +echo "configure:9426: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9444: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9451,7 +9461,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9455: checking for major macro" >&5 +echo "configure:9465: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9460,7 +9470,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9492,7 +9502,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9496: checking for minor macro" >&5 +echo "configure:9506: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9501,7 +9511,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9533,7 +9543,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9537: checking for unsigned char" >&5 +echo "configure:9547: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9542,12 +9552,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9570,13 +9580,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9574: checking for sin_len in sock" >&5 +echo "configure:9584: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9585,7 +9595,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9589: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9599: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9606,13 +9616,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9610: checking whether seekdir returns void" >&5 +echo "configure:9620: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9621,7 +9631,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9642,20 +9652,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9646: checking for __FILE__ macro" >&5 +echo "configure:9656: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9669: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9676,20 +9686,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9680: checking for __FUNCTION__ macro" >&5 +echo "configure:9690: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9693: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9703: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9710,7 +9720,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9714: checking if gettimeofday takes tz argument" >&5 +echo "configure:9724: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9719,14 +9729,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9749,13 +9759,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9753: checking for __va_copy" >&5 +echo "configure:9763: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9763,7 +9773,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9784,7 +9794,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9788: checking for C99 vsnprintf" >&5 +echo "configure:9798: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9793,7 +9803,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9820,7 +9830,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9834: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9843,7 +9853,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9847: checking for broken readdir" >&5 +echo "configure:9857: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9852,7 +9862,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9860,7 +9870,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9883,13 +9893,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9887: checking for utimbuf" >&5 +echo "configure:9897: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9897,7 +9907,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9911: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9921,12 +9931,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9925: checking for $ac_func" >&5 +echo "configure:9935: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9975,13 +9985,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9979: checking for ut_name in utmp" >&5 +echo "configure:9989: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9989,7 +9999,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10003: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10010,13 +10020,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10014: checking for ut_user in utmp" >&5 +echo "configure:10024: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10024,7 +10034,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10038: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10045,13 +10055,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10049: checking for ut_id in utmp" >&5 +echo "configure:10059: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10059,7 +10069,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10080,13 +10090,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10084: checking for ut_host in utmp" >&5 +echo "configure:10094: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10094,7 +10104,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10098: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10108: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10115,13 +10125,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10119: checking for ut_time in utmp" >&5 +echo "configure:10129: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10129,7 +10139,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10133: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10143: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10150,13 +10160,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10154: checking for ut_tv in utmp" >&5 +echo "configure:10164: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10164,7 +10174,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10178: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10185,13 +10195,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10189: checking for ut_type in utmp" >&5 +echo "configure:10199: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10199,7 +10209,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10213: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10220,13 +10230,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10224: checking for ut_pid in utmp" >&5 +echo "configure:10234: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10234,7 +10244,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10238: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10248: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10255,13 +10265,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10259: checking for ut_exit in utmp" >&5 +echo "configure:10269: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10269,7 +10279,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10283: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10290,13 +10300,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10294: checking for ut_addr in utmp" >&5 +echo "configure:10304: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10304,7 +10314,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10308: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10318: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10326,13 +10336,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10330: checking whether pututline returns pointer" >&5 +echo "configure:10340: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10340,7 +10350,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10354: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10362,13 +10372,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10366: checking for ut_syslen in utmpx" >&5 +echo "configure:10376: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10376,7 +10386,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10380: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10390: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10400,7 +10410,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10404: checking whether to use libiconv" >&5 +echo "configure:10414: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10413,7 +10423,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10417: checking for iconv_open in -liconv" >&5 +echo "configure:10427: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10421,7 +10431,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10475,7 +10485,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10479: checking for working iconv" >&5 +echo "configure:10489: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10484,7 +10494,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10495,7 +10505,7 @@ main() { } EOF -if { (eval echo configure:10499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10519,7 +10529,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10523: checking for Linux kernel oplocks" >&5 +echo "configure:10533: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10528,7 +10538,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10542,7 +10552,7 @@ main() { } EOF -if { (eval echo configure:10546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10556: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10565,7 +10575,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10569: checking for kernel change notify support" >&5 +echo "configure:10579: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10574,7 +10584,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10588,7 +10598,7 @@ main() { } EOF -if { (eval echo configure:10592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10611,7 +10621,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10615: checking for kernel share modes" >&5 +echo "configure:10625: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10620,7 +10630,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10636,7 +10646,7 @@ main() { } EOF -if { (eval echo configure:10640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10662,13 +10672,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10666: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10676: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10676,7 +10686,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10680: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10690: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10697,7 +10707,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10701: checking for irix specific capabilities" >&5 +echo "configure:10711: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10706,7 +10716,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10721,7 +10731,7 @@ main() { } EOF -if { (eval echo configure:10725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10749,13 +10759,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10753: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10763: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10765,7 +10775,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10769: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10786,13 +10796,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10790: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10800: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10802,7 +10812,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10816: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10823,13 +10833,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10827: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10837: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10839,7 +10849,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10843: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10853: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10860,13 +10870,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10864: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10874: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10876,7 +10886,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10890: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10898,13 +10908,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10902: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10912: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10918,7 +10928,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10932: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10939,16 +10949,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10943: checking for test routines" >&5 +echo "configure:10953: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10962,7 +10972,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10966: checking for ftruncate extend" >&5 +echo "configure:10976: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10971,11 +10981,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10998,7 +11008,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:11002: checking for AF_LOCAL socket support" >&5 +echo "configure:11012: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11007,11 +11017,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11035,7 +11045,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11039: checking for broken getgroups" >&5 +echo "configure:11049: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11044,11 +11054,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11071,7 +11081,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11075: checking whether getpass should be replaced" >&5 +echo "configure:11085: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11079,7 +11089,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11106: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11115,7 +11125,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11119: checking for broken inet_ntoa" >&5 +echo "configure:11129: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11124,7 +11134,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11138,7 +11148,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11161,7 +11171,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11165: checking for secure mkstemp" >&5 +echo "configure:11175: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11170,7 +11180,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11187,7 +11197,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11210,7 +11220,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11214: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11224: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11219,12 +11229,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11247,7 +11257,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11251: checking for root" >&5 +echo "configure:11261: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11256,11 +11266,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11288,7 +11298,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11292: checking for iface AIX" >&5 +echo "configure:11302: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11297,7 +11307,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11329,7 +11339,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11333: checking for iface ifconf" >&5 +echo "configure:11343: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11338,7 +11348,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11371,7 +11381,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11375: checking for iface ifreq" >&5 +echo "configure:11385: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11380,7 +11390,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11417,7 +11427,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11421: checking for setresuid" >&5 +echo "configure:11431: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11426,7 +11436,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11460,7 +11470,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11464: checking for setreuid" >&5 +echo "configure:11474: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11469,7 +11479,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11502,7 +11512,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11506: checking for seteuid" >&5 +echo "configure:11516: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11511,7 +11521,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11544,7 +11554,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11548: checking for setuidx" >&5 +echo "configure:11558: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11553,7 +11563,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11586,7 +11596,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11590: checking for working mmap" >&5 +echo "configure:11600: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11595,11 +11605,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11622,7 +11632,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11626: checking for ftruncate needs root" >&5 +echo "configure:11636: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11631,11 +11641,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11658,7 +11668,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11662: checking for fcntl locking" >&5 +echo "configure:11672: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11667,11 +11677,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11694,7 +11704,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11698: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11708: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11703,11 +11713,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11732,7 +11742,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11736: checking for 64 bit fcntl locking" >&5 +echo "configure:11746: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11741,7 +11751,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11790,13 +11800,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11794: checking for st_blocks in struct stat" >&5 +echo "configure:11804: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11805,7 +11815,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11809: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11819: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11826,13 +11836,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11830: checking for st_blksize in struct stat" >&5 +echo "configure:11840: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11841,7 +11851,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11845: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11855: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11864,13 +11874,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11868: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11878: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11898: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11907,13 +11917,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11911: checking for broken nisplus include files" >&5 +echo "configure:11921: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11923,7 +11933,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11937: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11947,7 +11957,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11951: checking whether to use smbwrapper" >&5 +echo "configure:11961: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11994,7 +12004,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11998: checking whether to use AFS clear-text auth" >&5 +echo "configure:12008: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12020,7 +12030,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12024: checking whether to use DFS clear-text auth" >&5 +echo "configure:12034: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12047,7 +12057,7 @@ fi with_ads_support=yes echo $ac_n "checking whether to use Active Directory""... $ac_c" 1>&6 -echo "configure:12051: checking whether to use Active Directory" >&5 +echo "configure:12061: checking whether to use Active Directory" >&5 # Check whether --with-ads or --without-ads was given. if test "${with_ads+set}" = set; then @@ -12071,23 +12081,11 @@ echo "$ac_t""$with_ads_support" 1>&6 if test x"$with_ads_support" = x"yes"; then - ################################################# - # see if this box has the RedHat location for kerberos - echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12078: checking for /usr/kerberos" >&5 - if test -d /usr/kerberos; then - LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" - CFLAGS="$CFLAGS -I/usr/kerberos/include" - CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include" - echo "$ac_t""yes" 1>&6 - else - echo "$ac_t""no" 1>&6 - fi - ################################################# # check for location of Kerberos 5 install +FOUND_KRB5=0 echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12091: checking for kerberos 5 install path" >&5 +echo "configure:12089: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12101,6 +12099,7 @@ if test "${with_krb5+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" + FOUND_KRB5=1 ;; esac else @@ -12109,6 +12108,23 @@ else fi + +if $FOUND_KRB5 = 0 ; then +################################################# +# see if this box has the RedHat location for kerberos +echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 +echo "configure:12117: checking for /usr/kerberos" >&5 +if test -d /usr/kerberos; then + LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" + CFLAGS="$CFLAGS -I/usr/kerberos/include" + CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include" + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi +fi + + # now check for krb5.h. Some systems have the libraries without the headers! # note that this check is done here to allow for different kerberos # include paths @@ -12116,17 +12132,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12120: checking for $ac_hdr" >&5 +echo "configure:12136: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12130: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12159,17 +12175,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12163: checking for $ac_hdr" >&5 +echo "configure:12179: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12173: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12199,7 +12215,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12203: checking for _et_list in -lcom_err" >&5 +echo "configure:12219: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12207,7 +12223,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12239,7 +12255,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12243: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12259: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12247,7 +12263,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12283,7 +12299,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12287: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12303: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12291,7 +12307,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12330,7 +12346,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12334: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12350: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12338,7 +12354,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12380,7 +12396,7 @@ fi with_ldap_support=yes echo $ac_n "checking whether to use LDAP""... $ac_c" 1>&6 -echo "configure:12384: checking whether to use LDAP" >&5 +echo "configure:12400: checking whether to use LDAP" >&5 # Check whether --with-ldap or --without-ldap was given. if test "${with_ldap+set}" = set; then @@ -12401,7 +12417,7 @@ if test x"$with_ldap_support" = x"yes"; then # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12405: checking for ber_scanf in -llber" >&5 +echo "configure:12421: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12409,7 +12425,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12445,7 +12461,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12449: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12465: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12453,7 +12469,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12495,12 +12511,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12499: checking for $ac_func" >&5 +echo "configure:12515: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12548,13 +12564,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12552: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12568: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12563,7 +12579,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12567: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12583: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12586,7 +12602,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12590: checking whether to use AUTOMOUNT" >&5 +echo "configure:12606: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12611,7 +12627,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12615: checking whether to use SMBMOUNT" >&5 +echo "configure:12631: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12648,7 +12664,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12652: checking whether to use PAM" >&5 +echo "configure:12668: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12674,7 +12690,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12678: checking for pam_get_data in -lpam" >&5 +echo "configure:12694: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12682,7 +12698,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12720,7 +12736,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12724: checking whether to use pam_smbpass" >&5 +echo "configure:12740: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12758,12 +12774,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12762: checking for $ac_func" >&5 +echo "configure:12778: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12812,7 +12828,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12816: checking for crypt in -lcrypt" >&5 +echo "configure:12832: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12820,7 +12836,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12866,7 +12882,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12870: checking for a crypt that needs truncated salt" >&5 +echo "configure:12886: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12875,11 +12891,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12905,7 +12921,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12909: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12925: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12937,7 +12953,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12941: checking whether to use TDB SAM database" >&5 +echo "configure:12957: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12962,7 +12978,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12966: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12982: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12993,7 +13009,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12997: checking whether to use NISPLUS_HOME" >&5 +echo "configure:13013: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -13018,7 +13034,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:13022: checking whether to use syslog logging" >&5 +echo "configure:13038: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -13043,7 +13059,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:13047: checking whether to use profiling" >&5 +echo "configure:13063: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13071,7 +13087,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13075: checking whether to support disk-quotas" >&5 +echo "configure:13091: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13082,13 +13098,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13086: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13102: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13100,7 +13116,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13104: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13149,7 +13165,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13153: checking whether to support utmp accounting" >&5 +echo "configure:13169: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13174,7 +13190,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13178: checking chosen man pages' language(s)" >&5 +echo "configure:13194: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13205,7 +13221,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13209: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13225: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13233,14 +13249,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13237: checking how to get filesystem space usage" >&5 +echo "configure:13253: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13244: checking statvfs64 function (SVR4)" >&5 +echo "configure:13260: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13248,7 +13264,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13295,12 +13311,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13299: checking statvfs function (SVR4)" >&5 +echo "configure:13315: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13308,7 +13324,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13333,7 +13349,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13337: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13353: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13341,7 +13357,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13354,7 +13370,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13381,7 +13397,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13385: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13401: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13389,7 +13405,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13435,7 +13451,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13439: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13455: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13443,7 +13459,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13453,7 +13469,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13480,7 +13496,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13484: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13500: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13488,7 +13504,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13504,7 +13520,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13531,7 +13547,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13535: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13551: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13539,7 +13555,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13559,7 +13575,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13592,9 +13608,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13596: checking if large file support can be enabled" >&5 +echo "configure:13612: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13627: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13672,7 +13688,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13676: checking whether to support ACLs" >&5 +echo "configure:13692: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13725,7 +13741,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13729: checking for acl_get_file in -lacl" >&5 +echo "configure:13745: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13733,7 +13749,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13772,13 +13788,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13776: checking for ACL support" >&5 +echo "configure:13792: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13786,7 +13802,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13806,13 +13822,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13810: checking for acl_get_perm_np" >&5 +echo "configure:13826: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13820,7 +13836,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13840: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13865,7 +13881,7 @@ fi # check for sendfile support echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 -echo "configure:13869: checking whether to support sendfile" >&5 +echo "configure:13885: checking whether to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -13875,13 +13891,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:13879: checking for linux sendfile64 support" >&5 +echo "configure:13895: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13893,7 +13909,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -13908,13 +13924,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:13912: checking for linux sendfile support" >&5 +echo "configure:13928: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13926,7 +13942,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -13942,13 +13958,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:13946: checking for broken linux sendfile support" >&5 +echo "configure:13962: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -14020,13 +14036,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:14024: checking for freebsd sendfile support" >&5 +echo "configure:14040: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14048,7 +14064,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14082,13 +14098,13 @@ EOF *hpux*) echo $ac_n "checking for hpux sendfile64 support""... $ac_c" 1>&6 -echo "configure:14086: checking for hpux sendfile64 support" >&5 +echo "configure:14102: checking for hpux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14108,7 +14124,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14112: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -14139,13 +14155,13 @@ EOF fi echo $ac_n "checking for hpux sendfile support""... $ac_c" 1>&6 -echo "configure:14143: checking for hpux sendfile support" >&5 +echo "configure:14159: checking for hpux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14165,7 +14181,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14218,7 +14234,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:14222: checking whether to build winbind" >&5 +echo "configure:14238: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14314,20 +14330,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14318: checking whether struct passwd has pw_comment" >&5 +echo "configure:14334: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14331: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14347: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14352,20 +14368,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14356: checking whether struct passwd has pw_age" >&5 +echo "configure:14372: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14369: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14385: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14404,7 +14420,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14408: checking for poptGetContext in -lpopt" >&5 +echo "configure:14424: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14412,7 +14428,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14447,7 +14463,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14451: checking whether to use included popt" >&5 +echo "configure:14467: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14493,16 +14509,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14497: checking configure summary" >&5 +echo "configure:14513: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else -- cgit From f1021cbc557bfa0078e932a8268c5c9adcae0ae8 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 20 Sep 2002 16:59:48 +0000 Subject: Add framework for samtest commands --- source/torture/cmd_sam.c | 985 ++++++----------------------------------------- source/torture/samtest.c | 12 +- 2 files changed, 117 insertions(+), 880 deletions(-) diff --git a/source/torture/cmd_sam.c b/source/torture/cmd_sam.c index d276d52fe62..a2835ed69af 100644 --- a/source/torture/cmd_sam.c +++ b/source/torture/cmd_sam.c @@ -22,6 +22,26 @@ #include "includes.h" #include "samtest.h" +#if 0 +static struct cmd_popt_user_opts [] = { + { NULL, 0, POPT_ARG_CALLBACK, cmd_parse_user_opts }, + {"username", 'u', POPT_ARG_STRING, NULL, 1, "Username to use"}, +}; + +static void cmd_parse_user_opts(poptContext con, + enum poptCallbackReason reason, + const struct poptOption *opt, + const char *arg, const void *data) +{ + SAM_ACCOUNT_HANDLE *account = (SAM_ACCOUNT_HANDLE *)data; + switch(opt->val) { + case 'u': + sam_set_account_username(account, arg); + break; + } +} +#endif + static NTSTATUS cmd_load_module(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { char *plugin_arg[2]; @@ -42,961 +62,172 @@ static NTSTATUS cmd_load_module(struct sam_context *c, TALLOC_CTX *mem_ctx, int return NT_STATUS_OK; } -#if 0 -static NTSTATUS cmd_populate(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - char c; - size_t size; - if (argc != 3) { - printf("Usage: populate \n"); - return NT_STATUS_OK; - } - c = argv[1][0]; - size = atoi(argv[2]); - vfs->data = (char *)talloc(mem_ctx, size); - if (vfs->data == NULL) { - printf("populate: error=-1 (not enough memory)"); - return NT_STATUS_UNSUCCESSFUL; - } - memset(vfs->data, c, size); - vfs->data_size = size; - return NT_STATUS_OK; -} - -static NTSTATUS cmd_show_data(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - size_t offset; - size_t len; - if (argc != 1 && argc != 3) { - printf("Usage: showdata [ ]\n"); - return NT_STATUS_OK; - } - if (vfs->data == NULL || vfs->data_size == 0) { - printf("show_data: error=-1 (buffer empty)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - if (argc == 3) { - offset = atoi(argv[1]); - len = atoi(argv[2]); - } else { - offset = 0; - len = vfs->data_size; - } - if ((offset + len) > vfs->data_size) { - printf("show_data: error=-1 (not enough data in buffer)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - dump_data(0, (char *)(vfs->data) + offset, len); - return NT_STATUS_OK; -} - -static NTSTATUS cmd_connect(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - vfs->conn->vfs_ops.connect(vfs->conn, lp_servicename(vfs->conn->service), "vfstest"); - return NT_STATUS_OK; -} - -static NTSTATUS cmd_disconnect(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - vfs->conn->vfs_ops.disconnect(vfs->conn); - return NT_STATUS_OK; -} - -static NTSTATUS cmd_disk_free(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - SMB_BIG_UINT diskfree, bsize, dfree, dsize; - if (argc != 2) { - printf("Usage: disk_free \n"); - return NT_STATUS_OK; - } - - diskfree = vfs->conn->vfs_ops.disk_free(vfs->conn, argv[1], False, &bsize, &dfree, &dsize); - printf("disk_free: %ld, bsize = %ld, dfree = %ld, dsize = %ld\n", diskfree, bsize, dfree, dsize); - return NT_STATUS_OK; -} - - -static NTSTATUS cmd_opendir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - if (argc != 2) { - printf("Usage: opendir \n"); - return NT_STATUS_OK; - } - - vfs->currentdir = vfs->conn->vfs_ops.opendir(vfs->conn, argv[1]); - if (vfs->currentdir == NULL) { - printf("opendir error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("opendir: ok\n"); - return NT_STATUS_OK; -} - - -static NTSTATUS cmd_readdir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - struct dirent *dent; - - if (vfs->currentdir == NULL) { - printf("readdir: error=-1 (no open directory)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - dent = vfs->conn->vfs_ops.readdir(vfs->conn, vfs->currentdir); - if (dent == NULL) { - printf("readdir: NULL\n"); - return NT_STATUS_OK; - } - - printf("readdir: %s\n", dent->d_name); - return NT_STATUS_OK; -} - - -static NTSTATUS cmd_mkdir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_get_sec_desc(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - if (argc != 2) { - printf("Usage: mkdir \n"); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.mkdir(vfs->conn, argv[1], 00755) == -1) { - printf("mkdir error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("mkdir: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_closedir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_set_sec_desc(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int ret; - - if (vfs->currentdir == NULL) { - printf("closedir: failure (no directory open)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - ret = vfs->conn->vfs_ops.closedir(vfs->conn, vfs->currentdir); - if (ret == -1) { - printf("closedir failure: %s\n", strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("closedir: ok\n"); - vfs->currentdir = NULL; - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_open(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_sid(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int flags, fd; - mode_t mode; - char *flagstr; - - mode = 00400; - - if (argc < 3 || argc > 5) { - printf("Usage: open \n"); - printf(" flags: O = O_RDONLY\n"); - printf(" R = O_RDWR\n"); - printf(" W = O_WRONLY\n"); - printf(" C = O_CREAT\n"); - printf(" E = O_EXCL\n"); - printf(" T = O_TRUNC\n"); - printf(" A = O_APPEND\n"); - printf(" N = O_NONBLOCK/O_NDELAY\n"); -#ifdef O_SYNC - printf(" S = O_SYNC\n"); -#endif -#ifdef O_NOFOLLOW - printf(" F = O_NOFOLLOW\n"); -#endif - printf(" mode: see open.2\n"); - printf(" mode is ignored if C flag not present\n"); - printf(" mode defaults to 00400\n"); - return NT_STATUS_OK; - } - flags = 0; - flagstr = argv[2]; - while (*flagstr) { - switch (*flagstr) { - case 'O': - flags |= O_RDONLY; - break; - case 'R': - flags |= O_RDWR; - break; - case 'W': - flags |= O_WRONLY; - break; - case 'C': - flags |= O_CREAT; - break; - case 'E': - flags |= O_EXCL; - break; - case 'T': - flags |= O_TRUNC; - break; - case 'A': - flags |= O_APPEND; - break; - case 'N': - flags |= O_NONBLOCK; - break; -#ifdef O_SYNC - case 'S': - flags |= O_SYNC; - break; -#endif -#ifdef O_NOFOLLOW - case 'F': - flags |= O_NOFOLLOW; - break; -#endif - default: - printf("open: error=-1 (invalid flag!)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - flagstr++; - } - if ((flags & O_CREAT) && argc == 4) { - if (sscanf(argv[3], "%o", &mode) == 0) { - printf("open: error=-1 (invalid mode!)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - } - - fd = vfs->conn->vfs_ops.open(vfs->conn, argv[1], flags, mode); - if (fd == -1) { - printf("open: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - vfs->files[fd] = (struct files_struct *)malloc(sizeof(struct files_struct)); - vfs->files[fd]->fsp_name = strdup(argv[1]); - vfs->files[fd]->fd = fd; - vfs->files[fd]->conn = vfs->conn; - printf("open: fd=%d\n", fd); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_pathfunc(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_name(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int ret = -1; - - if (argc != 2) { - printf("Usage: %s \n", argv[0]); - return NT_STATUS_OK; - } - - if (strcmp("rmdir", argv[0]) == 0 ) { - ret = vfs->conn->vfs_ops.rmdir(vfs->conn, argv[1]); - } else if (strcmp("unlink", argv[0]) == 0 ) { - ret = vfs->conn->vfs_ops.unlink(vfs->conn, argv[1]); - } else if (strcmp("chdir", argv[0]) == 0 ) { - ret = vfs->conn->vfs_ops.chdir(vfs->conn, argv[1]); - } else { - printf("%s: error=%d (invalid function name!)\n", argv[0], errno); - return NT_STATUS_UNSUCCESSFUL; - } - - if (ret == -1) { - printf("%s: error=%d (%s)\n", argv[0], errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("%s: ok\n", argv[0]); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_close(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd, ret; - - if (argc != 2) { - printf("Usage: close \n"); - return NT_STATUS_OK; - } - - fd = atoi(argv[1]); - if (vfs->files[fd] == NULL) { - printf("close: error=-1 (invalid file descriptor)\n"); - return NT_STATUS_OK; - } - - ret = vfs->conn->vfs_ops.close(vfs->files[fd], fd); - if (ret == -1 ) - printf("close: error=%d (%s)\n", errno, strerror(errno)); - else - printf("close: ok\n"); - - SAFE_FREE(vfs->files[fd]->fsp_name); - SAFE_FREE(vfs->files[fd]); - vfs->files[fd] = NULL; - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_read(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd; - size_t size, rsize; - - if (argc != 3) { - printf("Usage: read \n"); - return NT_STATUS_OK; - } - - /* do some error checking on these */ - fd = atoi(argv[1]); - size = atoi(argv[2]); - vfs->data = (char *)talloc(mem_ctx, size); - if (vfs->data == NULL) { - printf("read: error=-1 (not enough memory)"); - return NT_STATUS_UNSUCCESSFUL; - } - vfs->data_size = size; - - rsize = vfs->conn->vfs_ops.read(vfs->files[fd], fd, vfs->data, size); - if (rsize == -1) { - printf("read: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("read: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_write(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_update_domain(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd, size, wsize; - - if (argc != 3) { - printf("Usage: write \n"); - return NT_STATUS_OK; - } - - /* some error checking should go here */ - fd = atoi(argv[1]); - size = atoi(argv[2]); - if (vfs->data == NULL) { - printf("write: error=-1 (buffer empty, please populate it before writing)"); - return NT_STATUS_UNSUCCESSFUL; - } - - if (vfs->data_size < size) { - printf("write: error=-1 (buffer too small, please put some more data in)"); - return NT_STATUS_UNSUCCESSFUL; - } - - wsize = vfs->conn->vfs_ops.write(vfs->files[fd], fd, vfs->data, size); - - if (wsize == -1) { - printf("write: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("write: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_lseek(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_show_domain(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd, offset, whence; - SMB_OFF_T pos; - - if (argc != 4) { - printf("Usage: lseek \n...where whence is 1 => SEEK_SET, 2 => SEEK_CUR, 3 => SEEK_END\n"); - return NT_STATUS_OK; - } - - fd = atoi(argv[1]); - offset = atoi(argv[2]); - whence = atoi(argv[3]); - switch (whence) { - case 1: whence = SEEK_SET; break; - case 2: whence = SEEK_CUR; break; - default: whence = SEEK_END; - } - - pos = vfs->conn->vfs_ops.lseek(vfs->files[fd], fd, offset, whence); - if (pos == (SMB_OFF_T)-1) { - printf("lseek: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("lseek: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_rename(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_create_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int ret; - if (argc != 3) { - printf("Usage: rename \n"); - return NT_STATUS_OK; - } - - ret = vfs->conn->vfs_ops.rename(vfs->conn, argv[1], argv[2]); - if (ret == -1) { - printf("rename: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("rename: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_fsync(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_update_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int ret, fd; - if (argc != 2) { - printf("Usage: fsync \n"); - return NT_STATUS_OK; - } - - fd = atoi(argv[1]); - ret = vfs->conn->vfs_ops.fsync(vfs->files[fd], fd); - if (ret == -1) { - printf("fsync: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("fsync: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_stat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_delete_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int ret; - char *user; - char *group; - struct passwd *pwd; - struct group *grp; - SMB_STRUCT_STAT st; - - if (argc != 2) { - printf("Usage: stat \n"); - return NT_STATUS_OK; - } - - ret = vfs->conn->vfs_ops.stat(vfs->conn, argv[1], &st); - if (ret == -1) { - printf("stat: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - pwd = sys_getpwuid(st.st_uid); - if (pwd != NULL) user = strdup(pwd->pw_name); - else user = null_string; - grp = sys_getgrgid(st.st_gid); - if (grp != NULL) group = strdup(grp->gr_name); - else group = null_string; - - printf("stat: ok\n"); - printf(" File: %s", argv[1]); - if (S_ISREG(st.st_mode)) printf(" Regular File\n"); - else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); - else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); - else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); - else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); - else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); - else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); - printf(" Size: %10d", st.st_size); - printf(" Blocks: %9d", st.st_blocks); - printf(" IO Block: %d\n", st.st_blksize); - printf(" Device: 0x%10x", st.st_dev); - printf(" Inode: %10d", st.st_ino); - printf(" Links: %10d\n", st.st_nlink); - printf(" Access: %05o", (st.st_mode) & 007777); - printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); - printf(" Access: %s", ctime(&(st.st_atime))); - printf(" Modify: %s", ctime(&(st.st_mtime))); - printf(" Change: %s", ctime(&(st.st_ctime))); - if (user != null_string) SAFE_FREE(user); - if (group!= null_string) SAFE_FREE(group); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_fstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_enum_accounts(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd; - char *user; - char *group; - struct passwd *pwd; - struct group *grp; - SMB_STRUCT_STAT st; - - if (argc != 2) { - printf("Usage: fstat \n"); - return NT_STATUS_OK; - } - - fd = atoi(argv[1]); - if (fd < 0 || fd > 1024) { - printf("fstat: error=%d (file descriptor out of range)\n", EBADF); - return NT_STATUS_OK; - } - - if (vfs->files[fd] == NULL) { - printf("fstat: error=%d (invalid file descriptor)\n", EBADF); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.fstat(vfs->files[fd], fd, &st) == -1) { - printf("fstat: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - pwd = sys_getpwuid(st.st_uid); - if (pwd != NULL) user = strdup(pwd->pw_name); - else user = null_string; - grp = sys_getgrgid(st.st_gid); - if (grp != NULL) group = strdup(grp->gr_name); - else group = null_string; - - printf("fstat: ok\n"); - if (S_ISREG(st.st_mode)) printf(" Regular File\n"); - else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); - else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); - else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); - else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); - else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); - else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); - printf(" Size: %10d", st.st_size); - printf(" Blocks: %9d", st.st_blocks); - printf(" IO Block: %d\n", st.st_blksize); - printf(" Device: 0x%10x", st.st_dev); - printf(" Inode: %10d", st.st_ino); - printf(" Links: %10d\n", st.st_nlink); - printf(" Access: %05o", (st.st_mode) & 007777); - printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); - printf(" Access: %s", ctime(&(st.st_atime))); - printf(" Modify: %s", ctime(&(st.st_mtime))); - printf(" Change: %s", ctime(&(st.st_ctime))); - if (user != null_string) SAFE_FREE(user); - if (group!= null_string) SAFE_FREE(group); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_lstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_account_sid(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - char *user; - char *group; - struct passwd *pwd; - struct group *grp; - SMB_STRUCT_STAT st; - - if (argc != 2) { - printf("Usage: lstat \n"); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.lstat(vfs->conn, argv[1], &st) == -1) { - printf("lstat: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - pwd = sys_getpwuid(st.st_uid); - if (pwd != NULL) user = strdup(pwd->pw_name); - else user = null_string; - grp = sys_getgrgid(st.st_gid); - if (grp != NULL) group = strdup(grp->gr_name); - else group = null_string; - - printf("lstat: ok\n"); - if (S_ISREG(st.st_mode)) printf(" Regular File\n"); - else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); - else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); - else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); - else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); - else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); - else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); - printf(" Size: %10d", st.st_size); - printf(" Blocks: %9d", st.st_blocks); - printf(" IO Block: %d\n", st.st_blksize); - printf(" Device: 0x%10x", st.st_dev); - printf(" Inode: %10d", st.st_ino); - printf(" Links: %10d\n", st.st_nlink); - printf(" Access: %05o", (st.st_mode) & 007777); - printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); - printf(" Access: %s", ctime(&(st.st_atime))); - printf(" Modify: %s", ctime(&(st.st_mtime))); - printf(" Change: %s", ctime(&(st.st_ctime))); - if (user != null_string) SAFE_FREE(user); - if (group!= null_string) SAFE_FREE(group); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_chmod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_account_name(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - mode_t mode; - if (argc != 3) { - printf("Usage: chmod \n"); - return NT_STATUS_OK; - } - - mode = atoi(argv[2]); - if (vfs->conn->vfs_ops.chmod(vfs->conn, argv[1], mode) == -1) { - printf("chmod: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("chmod: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_fchmod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_create_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd; - mode_t mode; - if (argc != 3) { - printf("Usage: fchmod \n"); - return NT_STATUS_OK; - } - - fd = atoi(argv[1]); - mode = atoi(argv[2]); - if (fd < 0 || fd > 1024) { - printf("fchmod: error=%d (file descriptor out of range)\n", EBADF); - return NT_STATUS_OK; - } - if (vfs->files[fd] == NULL) { - printf("fchmod: error=%d (invalid file descriptor)\n", EBADF); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.fchmod(vfs->files[fd], fd, mode) == -1) { - printf("fchmod: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("fchmod: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_chown(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_update_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - uid_t uid; - gid_t gid; - if (argc != 4) { - printf("Usage: chown \n"); - return NT_STATUS_OK; - } - - uid = atoi(argv[2]); - gid = atoi(argv[3]); - if (vfs->conn->vfs_ops.chown(vfs->conn, argv[1], uid, gid) == -1) { - printf("chown: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("chown: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_fchown(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_delete_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - uid_t uid; - gid_t gid; - int fd; - if (argc != 4) { - printf("Usage: fchown \n"); - return NT_STATUS_OK; - } - - uid = atoi(argv[2]); - gid = atoi(argv[3]); - fd = atoi(argv[1]); - if (fd < 0 || fd > 1024) { - printf("fchown: faliure=%d (file descriptor out of range)\n", EBADF); - return NT_STATUS_OK; - } - if (vfs->files[fd] == NULL) { - printf("fchown: error=%d (invalid file descriptor)\n", EBADF); - return NT_STATUS_OK; - } - if (vfs->conn->vfs_ops.fchown(vfs->files[fd], fd, uid, gid) == -1) { - printf("fchown error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("fchown: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_getwd(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_enum_groups(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - char buf[PATH_MAX]; - if (vfs->conn->vfs_ops.getwd(vfs->conn, buf) == NULL) { - printf("getwd: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("getwd: %s\n", buf); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_utime(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_group_sid(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - struct utimbuf times; - if (argc != 4) { - printf("Usage: utime \n"); - return NT_STATUS_OK; - } - times.actime = atoi(argv[2]); - times.modtime = atoi(argv[3]); - if (vfs->conn->vfs_ops.utime(vfs->conn, argv[1], ×) != 0) { - printf("utime: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("utime: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_ftruncate(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_group_name(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd; - SMB_OFF_T off; - if (argc != 3) { - printf("Usage: ftruncate \n"); - return NT_STATUS_OK; - } - - fd = atoi(argv[1]); - off = atoi(argv[2]); - if (fd < 0 || fd > 1024) { - printf("ftruncate: error=%d (file descriptor out of range)\n", EBADF); - return NT_STATUS_OK; - } - if (vfs->files[fd] == NULL) { - printf("ftruncate: error=%d (invalid file descriptor)\n", EBADF); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.ftruncate(vfs->files[fd], fd, off) == -1) { - printf("ftruncate: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("ftruncate: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lock(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_group_add_member(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - BOOL ret; - int fd; - int op; - long offset; - long count; - int type; - char *typestr; - - if (argc != 6) { - printf("Usage: lock \n"); - printf(" ops: G = F_GETLK\n"); - printf(" S = F_SETLK\n"); - printf(" W = F_SETLKW\n"); - printf(" type: R = F_RDLCK\n"); - printf(" W = F_WRLCK\n"); - printf(" U = F_UNLCK\n"); - return NT_STATUS_OK; - } - - if (sscanf(argv[1], "%d", &fd) == 0) { - printf("lock: error=-1 (error parsing fd)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - op = 0; - switch (*argv[2]) { - case 'G': - op = F_GETLK; - break; - case 'S': - op = F_SETLK; - break; - case 'W': - op = F_SETLKW; - break; - default: - printf("lock: error=-1 (invalid op flag!)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - if (sscanf(argv[3], "%ld", &offset) == 0) { - printf("lock: error=-1 (error parsing fd)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - if (sscanf(argv[4], "%ld", &count) == 0) { - printf("lock: error=-1 (error parsing fd)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - type = 0; - typestr = argv[5]; - while(*typestr) { - switch (*typestr) { - case 'R': - type |= F_RDLCK; - break; - case 'W': - type |= F_WRLCK; - break; - case 'U': - type |= F_UNLCK; - break; - default: - printf("lock: error=-1 (invalid type flag!)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - typestr++; - } - - printf("lock: debug lock(fd=%d, op=%d, offset=%ld, count=%ld, type=%d))\n", fd, op, offset, count, type); - - if ((ret = vfs->conn->vfs_ops.lock(vfs->files[fd], fd, op, offset, count, type)) == False) { - printf("lock: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("lock: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_symlink(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_group_del_member(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - if (argc != 3) { - printf("Usage: symlink \n"); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.symlink(vfs->conn, argv[1], argv[2]) == -1) { - printf("symlink: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("symlink: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_readlink(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_group_enum(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - char buffer[PATH_MAX]; - int size; - - if (argc != 2) { - printf("Usage: readlink \n"); - return NT_STATUS_OK; - } - - if ((size = vfs->conn->vfs_ops.readlink(vfs->conn, argv[1], buffer, PATH_MAX)) == -1) { - printf("readlink: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - buffer[size] = '\0'; - printf("readlink: %s\n", buffer); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_link(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_get_sid_groups(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - if (argc != 3) { - printf("Usage: link \n"); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.link(vfs->conn, argv[1], argv[2]) == -1) { - printf("link: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("link: ok\n"); - return NT_STATUS_OK; -} - -static NTSTATUS cmd_mknod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - mode_t mode; - SMB_DEV_T dev; - - if (argc != 4) { - printf("Usage: mknod \n"); - printf(" mode is octal\n"); - printf(" dev is hex\n"); - return NT_STATUS_OK; - } - - if (sscanf(argv[2], "%o", &mode) == 0) { - printf("open: error=-1 (invalid mode!)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - if (sscanf(argv[3], "%x", &dev) == 0) { - printf("open: error=-1 (invalid dev!)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - if (vfs->conn->vfs_ops.mknod(vfs->conn, argv[1], mode, dev) == -1) { - printf("mknod: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("mknod: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_realpath(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - char respath[PATH_MAX]; - - if (argc != 2) { - printf("Usage: realpath \n"); - return NT_STATUS_OK; - } +struct cmd_set sam_general_commands[] = { - if (vfs->conn->vfs_ops.realpath(vfs->conn, argv[1], respath) == NULL) { - printf("realpath: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } + { "General SAM Commands" }, - printf("realpath: ok\n"); - return NT_STATUS_OK; -} - -#endif + { "load", cmd_load_module, "Load a module", "load " }, + { "get_sec_desc", cmd_get_sec_desc, "Get security descriptor info", "get_sec_desc " }, + { "set_sec_desc", cmd_set_sec_desc, "Set security descriptor info", "set_sec_desc " }, + { "lookup_sid", cmd_lookup_sid, "Lookup type of specified SID", "lookup_sid " }, + { "lookup_name", cmd_lookup_name, "Lookup type of specified name", "lookup_name " }, + { NULL } +}; -struct cmd_set sam_commands[] = { +struct cmd_set sam_domain_commands[] = { + { "Domain Commands" }, + { "update_domain", cmd_update_domain, "Update domain information", "update_domain [domain-options] domain-name | domain-sid" }, + { "show_domain", cmd_show_domain, "Show domain information", "show_domain domain-sid | domain-name" }, + { NULL } +}; - { "SAM Commands" }, +struct cmd_set sam_account_commands[] = { + { "Account Commands" }, + { "create_account", cmd_create_account, "Create a new account with specified properties", "create_account [account-options]" }, + { "update_account", cmd_update_account, "Update an existing account", "update_account [account-options] account-sid | account-name" }, + { "delete_account", cmd_delete_account, "Delete an account", "delete_account account-sid | account-name" }, + { "enum_accounts", cmd_enum_accounts, "Enumerate all accounts", "enum_accounts " }, + { "lookup_account", cmd_lookup_account, "Lookup an account by either sid or name", "lookup_account account-sid | account-name" }, + { "lookup_account_sid", cmd_lookup_account_sid, "Lookup an account by sid", "lookup_account_sid account-sid" }, + { "lookup_account_name", cmd_lookup_account_name, "Lookup an account by name", "lookup_account_name account-name" }, + { NULL } +}; - { "load", cmd_load_module, "Load a module", "load " }, +struct cmd_set sam_group_commands[] = { + { "Group Commands" }, + { "create_group", cmd_create_group, "Create a new group", "create_group [group-opts]" }, + { "update_group", cmd_update_group, "Update an existing group", "update_group [group-opts] group-name | group-sid" }, + { "delete_group", cmd_delete_group, "Delete an existing group", "delete_group group-name | group-sid" }, + { "enum_groups", cmd_enum_groups, "Enumerate all groups", "enum_groups " }, + { "lookup_group", cmd_lookup_group, "Lookup a group by SID or name", "lookup_group group-sid | group-name" }, + { "lookup_group_sid", cmd_lookup_group_sid, "Lookup a group by SID", "lookup_group_sid " }, + { "lookup_group_name", cmd_lookup_group_name, "Lookup a group by name", "lookup_group_name " }, + { "group_add_member", cmd_group_add_member, "Add group member to group", "group_add_member " }, + { "group_del_member", cmd_group_del_member, "Delete group member from group", "group_del_member " }, + { "group_enum", cmd_group_enum, "Enumerate all members of specified group", "group_enum group-sid | group-name" }, + + { "get_sid_groups", cmd_get_sid_groups, "Get a list of groups specified sid is a member of", "group_enum " }, { NULL } }; diff --git a/source/torture/samtest.c b/source/torture/samtest.c index 3ac65ef0dfe..0275e0f002f 100644 --- a/source/torture/samtest.c +++ b/source/torture/samtest.c @@ -100,7 +100,7 @@ static NTSTATUS cmd_help(struct sam_context *sam, TALLOC_CTX *mem_ctx, while(tmp_set->name) { - printf("%15s\t\t%s\n", tmp_set->name, + printf("%20s\t%s\n", tmp_set->name, tmp_set->description ? tmp_set->description: ""); @@ -157,10 +157,16 @@ static struct cmd_set separator_command[] = { /*extern struct cmd_set sam_commands[];*/ -extern struct cmd_set sam_commands[]; +extern struct cmd_set sam_general_commands[]; +extern struct cmd_set sam_domain_commands[]; +extern struct cmd_set sam_account_commands[]; +extern struct cmd_set sam_group_commands[]; static struct cmd_set *samtest_command_list[] = { samtest_commands, - sam_commands, + sam_general_commands, + sam_domain_commands, + sam_account_commands, + sam_group_commands, NULL }; -- cgit From 5c4857d8e00162fc43a0f2e3a335b441bad743bd Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 20 Sep 2002 19:09:28 +0000 Subject: "@" is valid in NetBIOS domain names. Jeremy. --- source/smbd/sesssetup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/smbd/sesssetup.c b/source/smbd/sesssetup.c index 3dc9fe9208c..09288ad44dd 100644 --- a/source/smbd/sesssetup.c +++ b/source/smbd/sesssetup.c @@ -734,7 +734,7 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf, /* don't allow for weird usernames or domains */ alpha_strcpy(user, user, ". _-$", sizeof(user)); - alpha_strcpy(domain, domain, ". _-", sizeof(domain)); + alpha_strcpy(domain, domain, ". _-@", sizeof(domain)); if (strstr(user, "..") || strstr(domain,"..")) { return ERROR_NT(NT_STATUS_LOGON_FAILURE); } -- cgit From f1058012b9662f0f9ce62ea05833e78a411f80b9 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 21 Sep 2002 01:30:08 +0000 Subject: enable 'map hidden' and 'create mask' to allow the new OPEN test to succeed --- testsuite/build_farm/basicsmb.smb.conf.template | 2 ++ 1 file changed, 2 insertions(+) diff --git a/testsuite/build_farm/basicsmb.smb.conf.template b/testsuite/build_farm/basicsmb.smb.conf.template index ed2e3dee619..9b8483db162 100644 --- a/testsuite/build_farm/basicsmb.smb.conf.template +++ b/testsuite/build_farm/basicsmb.smb.conf.template @@ -20,6 +20,8 @@ passdb backend = smbpasswd_nua non unix account range = 10000-200000 + map hidden = yes + create mask = 0777 [test] path = PREFIX/testdir -- cgit From f4845b0213aec58e0f489eba5653aa7b3855610f Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Sat, 21 Sep 2002 08:53:05 +0000 Subject: Merge back Richard's FreeBSD sendfile fixes. Jeremy. --- source/configure | 748 +++++++++++++++++++++++++------------------------- source/configure.in | 20 +- source/lib/sendfile.c | 10 +- 3 files changed, 390 insertions(+), 388 deletions(-) diff --git a/source/configure b/source/configure index 7dc099e9133..994d830cdd5 100755 --- a/source/configure +++ b/source/configure @@ -2918,12 +2918,12 @@ else #line 2919 "configure" #include "confdefs.h" #include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(int)); - exit(0); + return(0); } EOF if { (eval echo configure:2930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -2957,12 +2957,12 @@ else #line 2958 "configure" #include "confdefs.h" #include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(long)); - exit(0); + return(0); } EOF if { (eval echo configure:2969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -2996,12 +2996,12 @@ else #line 2997 "configure" #include "confdefs.h" #include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(short)); - exit(0); + return(0); } EOF if { (eval echo configure:3008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -8928,17 +8928,7 @@ EOF SONAMEFLAG="-Wl,-h," PICFLAG="-KPIC" # Is this correct for SunOS ;; - *freebsd*) BLDSHARED="true" - LDSHFLAGS="-shared" - DYNEXP="-Wl,--export-dynamic" - SONAMEFLAG="-Wl,-soname," - PICFLAG="-fPIC -DPIC" - cat >> confdefs.h <<\EOF -#define STAT_ST_BLOCKSIZE 512 -EOF - - ;; - *openbsd*) BLDSHARED="true" + *bsd*) BLDSHARED="true" LDSHFLAGS="-shared" DYNEXP="-Wl,-Bdynamic" SONAMEFLAG="-Wl,-soname," @@ -9046,7 +9036,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9050: checking for $ac_word" >&5 +echo "configure:9040: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9103,17 +9093,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9107: checking linker flags for shared libraries" >&5 +echo "configure:9097: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9110: checking compiler flags for position-independent code" >&5 +echo "configure:9100: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9117: checking whether building shared libraries actually works" >&5 +echo "configure:9107: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9144,7 +9134,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9148: checking for long long" >&5 +echo "configure:9138: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9153,12 +9143,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9185,20 +9175,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9189: checking for LL suffix on long long integers" >&5 +echo "configure:9179: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9202: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9220,7 +9210,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9224: checking for 64 bit off_t" >&5 +echo "configure:9214: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9229,13 +9219,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9258,7 +9248,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9262: checking for off64_t" >&5 +echo "configure:9252: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9267,7 +9257,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9300,7 +9290,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9304: checking for 64 bit ino_t" >&5 +echo "configure:9294: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9309,13 +9299,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9338,7 +9328,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9342: checking for ino64_t" >&5 +echo "configure:9332: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9347,7 +9337,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9380,7 +9370,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9384: checking for dev64_t" >&5 +echo "configure:9374: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9389,7 +9379,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9422,13 +9412,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9426: checking for struct dirent64" >&5 +echo "configure:9416: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9434: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9461,7 +9451,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9465: checking for major macro" >&5 +echo "configure:9455: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9470,7 +9460,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9502,7 +9492,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9506: checking for minor macro" >&5 +echo "configure:9496: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9511,7 +9501,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9543,7 +9533,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9547: checking for unsigned char" >&5 +echo "configure:9537: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9552,12 +9542,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9580,13 +9570,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9584: checking for sin_len in sock" >&5 +echo "configure:9574: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9595,7 +9585,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9599: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9589: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9616,13 +9606,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9620: checking whether seekdir returns void" >&5 +echo "configure:9610: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9631,7 +9621,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9652,20 +9642,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9656: checking for __FILE__ macro" >&5 +echo "configure:9646: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9669: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9686,20 +9676,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9690: checking for __FUNCTION__ macro" >&5 +echo "configure:9680: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9703: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9693: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9720,7 +9710,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9724: checking if gettimeofday takes tz argument" >&5 +echo "configure:9714: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9729,14 +9719,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9759,13 +9749,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9763: checking for __va_copy" >&5 +echo "configure:9753: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9773,7 +9763,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9794,7 +9784,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9798: checking for C99 vsnprintf" >&5 +echo "configure:9788: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9803,7 +9793,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9830,7 +9820,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9834: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9853,7 +9843,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9857: checking for broken readdir" >&5 +echo "configure:9847: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9862,7 +9852,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9870,7 +9860,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9893,13 +9883,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9897: checking for utimbuf" >&5 +echo "configure:9887: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9907,7 +9897,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9911: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9931,12 +9921,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9935: checking for $ac_func" >&5 +echo "configure:9925: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9985,13 +9975,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9989: checking for ut_name in utmp" >&5 +echo "configure:9979: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9999,7 +9989,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10003: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10020,13 +10010,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10024: checking for ut_user in utmp" >&5 +echo "configure:10014: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10034,7 +10024,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10038: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10055,13 +10045,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10059: checking for ut_id in utmp" >&5 +echo "configure:10049: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10069,7 +10059,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10090,13 +10080,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10094: checking for ut_host in utmp" >&5 +echo "configure:10084: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10104,7 +10094,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10108: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10098: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10125,13 +10115,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10129: checking for ut_time in utmp" >&5 +echo "configure:10119: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10139,7 +10129,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10143: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10133: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10160,13 +10150,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10164: checking for ut_tv in utmp" >&5 +echo "configure:10154: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10174,7 +10164,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10178: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10195,13 +10185,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10199: checking for ut_type in utmp" >&5 +echo "configure:10189: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10209,7 +10199,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10213: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10230,13 +10220,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10234: checking for ut_pid in utmp" >&5 +echo "configure:10224: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10244,7 +10234,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10248: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10238: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10265,13 +10255,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10269: checking for ut_exit in utmp" >&5 +echo "configure:10259: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10279,7 +10269,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10283: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10300,13 +10290,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10304: checking for ut_addr in utmp" >&5 +echo "configure:10294: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10314,7 +10304,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10318: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10308: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10336,13 +10326,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10340: checking whether pututline returns pointer" >&5 +echo "configure:10330: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10350,7 +10340,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10354: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10372,13 +10362,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10376: checking for ut_syslen in utmpx" >&5 +echo "configure:10366: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10386,7 +10376,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10390: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10380: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10410,7 +10400,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10414: checking whether to use libiconv" >&5 +echo "configure:10404: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10423,7 +10413,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10427: checking for iconv_open in -liconv" >&5 +echo "configure:10417: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10431,7 +10421,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10485,7 +10475,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10489: checking for working iconv" >&5 +echo "configure:10479: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10494,7 +10484,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10505,7 +10495,7 @@ main() { } EOF -if { (eval echo configure:10509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10529,7 +10519,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10533: checking for Linux kernel oplocks" >&5 +echo "configure:10523: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10538,7 +10528,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10552,7 +10542,7 @@ main() { } EOF -if { (eval echo configure:10556: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10575,7 +10565,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10579: checking for kernel change notify support" >&5 +echo "configure:10569: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10584,7 +10574,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10598,7 +10588,7 @@ main() { } EOF -if { (eval echo configure:10602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10621,7 +10611,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10625: checking for kernel share modes" >&5 +echo "configure:10615: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10630,7 +10620,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10646,7 +10636,7 @@ main() { } EOF -if { (eval echo configure:10650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10672,13 +10662,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10676: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10666: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10686,7 +10676,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10690: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10680: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10707,7 +10697,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10711: checking for irix specific capabilities" >&5 +echo "configure:10701: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10716,7 +10706,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10731,7 +10721,7 @@ main() { } EOF -if { (eval echo configure:10735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10759,13 +10749,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10763: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10753: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10775,7 +10765,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10769: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10796,13 +10786,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10800: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10790: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10812,7 +10802,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10816: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10833,13 +10823,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10837: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10827: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10849,7 +10839,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10853: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10843: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10870,13 +10860,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10874: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10864: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10886,7 +10876,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10890: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10908,13 +10898,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10912: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10902: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10928,7 +10918,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10932: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10949,16 +10939,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10953: checking for test routines" >&5 +echo "configure:10943: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10972,7 +10962,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10976: checking for ftruncate extend" >&5 +echo "configure:10966: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10981,11 +10971,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -11008,7 +10998,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:11012: checking for AF_LOCAL socket support" >&5 +echo "configure:11002: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11017,11 +11007,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11015: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11045,7 +11035,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11049: checking for broken getgroups" >&5 +echo "configure:11039: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11054,11 +11044,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11081,7 +11071,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11085: checking whether getpass should be replaced" >&5 +echo "configure:11075: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11089,7 +11079,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11096: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11125,7 +11115,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11129: checking for broken inet_ntoa" >&5 +echo "configure:11119: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11134,7 +11124,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11148,7 +11138,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11171,7 +11161,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11175: checking for secure mkstemp" >&5 +echo "configure:11165: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11180,7 +11170,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11197,7 +11187,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11220,7 +11210,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11224: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11214: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11229,12 +11219,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11257,7 +11247,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11261: checking for root" >&5 +echo "configure:11251: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11266,11 +11256,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11298,7 +11288,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11302: checking for iface AIX" >&5 +echo "configure:11292: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11307,7 +11297,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11339,7 +11329,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11343: checking for iface ifconf" >&5 +echo "configure:11333: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11348,7 +11338,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11381,7 +11371,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11385: checking for iface ifreq" >&5 +echo "configure:11375: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11390,7 +11380,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11427,7 +11417,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11431: checking for setresuid" >&5 +echo "configure:11421: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11436,7 +11426,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11470,7 +11460,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11474: checking for setreuid" >&5 +echo "configure:11464: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11479,7 +11469,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11512,7 +11502,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11516: checking for seteuid" >&5 +echo "configure:11506: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11521,7 +11511,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11554,7 +11544,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11558: checking for setuidx" >&5 +echo "configure:11548: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11563,7 +11553,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11596,7 +11586,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11600: checking for working mmap" >&5 +echo "configure:11590: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11605,11 +11595,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11632,7 +11622,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11636: checking for ftruncate needs root" >&5 +echo "configure:11626: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11641,11 +11631,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11668,7 +11658,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11672: checking for fcntl locking" >&5 +echo "configure:11662: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11677,11 +11667,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11704,7 +11694,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11708: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11698: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11713,11 +11703,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11742,7 +11732,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11746: checking for 64 bit fcntl locking" >&5 +echo "configure:11736: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11751,7 +11741,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11800,13 +11790,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11804: checking for st_blocks in struct stat" >&5 +echo "configure:11794: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11815,7 +11805,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11819: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11809: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11836,13 +11826,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11840: checking for st_blksize in struct stat" >&5 +echo "configure:11830: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11851,7 +11841,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11855: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11845: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11874,13 +11864,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11878: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11868: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11917,13 +11907,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11921: checking for broken nisplus include files" >&5 +echo "configure:11911: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11933,7 +11923,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11937: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11957,7 +11947,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11961: checking whether to use smbwrapper" >&5 +echo "configure:11951: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -12004,7 +11994,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12008: checking whether to use AFS clear-text auth" >&5 +echo "configure:11998: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12030,7 +12020,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12034: checking whether to use DFS clear-text auth" >&5 +echo "configure:12024: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12057,7 +12047,7 @@ fi with_ads_support=yes echo $ac_n "checking whether to use Active Directory""... $ac_c" 1>&6 -echo "configure:12061: checking whether to use Active Directory" >&5 +echo "configure:12051: checking whether to use Active Directory" >&5 # Check whether --with-ads or --without-ads was given. if test "${with_ads+set}" = set; then @@ -12085,7 +12075,7 @@ if test x"$with_ads_support" = x"yes"; then # check for location of Kerberos 5 install FOUND_KRB5=0 echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12089: checking for kerberos 5 install path" >&5 +echo "configure:12079: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12113,7 +12103,7 @@ if $FOUND_KRB5 = 0 ; then ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12117: checking for /usr/kerberos" >&5 +echo "configure:12107: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12132,17 +12122,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12136: checking for $ac_hdr" >&5 +echo "configure:12126: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12136: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12175,17 +12165,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12179: checking for $ac_hdr" >&5 +echo "configure:12169: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12179: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12215,7 +12205,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12219: checking for _et_list in -lcom_err" >&5 +echo "configure:12209: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12223,7 +12213,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12255,7 +12245,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12259: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12249: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12263,7 +12253,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12299,7 +12289,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12303: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12293: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12307,7 +12297,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12346,7 +12336,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12350: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12340: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12354,7 +12344,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12396,7 +12386,7 @@ fi with_ldap_support=yes echo $ac_n "checking whether to use LDAP""... $ac_c" 1>&6 -echo "configure:12400: checking whether to use LDAP" >&5 +echo "configure:12390: checking whether to use LDAP" >&5 # Check whether --with-ldap or --without-ldap was given. if test "${with_ldap+set}" = set; then @@ -12417,7 +12407,7 @@ if test x"$with_ldap_support" = x"yes"; then # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12421: checking for ber_scanf in -llber" >&5 +echo "configure:12411: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12425,7 +12415,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12430: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12461,7 +12451,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12465: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12455: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12469,7 +12459,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12511,12 +12501,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12515: checking for $ac_func" >&5 +echo "configure:12505: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12564,13 +12554,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12568: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12558: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12579,7 +12569,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12583: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12573: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12602,7 +12592,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12606: checking whether to use AUTOMOUNT" >&5 +echo "configure:12596: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12627,7 +12617,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12631: checking whether to use SMBMOUNT" >&5 +echo "configure:12621: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12664,7 +12654,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12668: checking whether to use PAM" >&5 +echo "configure:12658: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12690,7 +12680,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12694: checking for pam_get_data in -lpam" >&5 +echo "configure:12684: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12698,7 +12688,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12736,7 +12726,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12740: checking whether to use pam_smbpass" >&5 +echo "configure:12730: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12774,12 +12764,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12778: checking for $ac_func" >&5 +echo "configure:12768: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12828,7 +12818,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12832: checking for crypt in -lcrypt" >&5 +echo "configure:12822: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12836,7 +12826,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12882,7 +12872,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12886: checking for a crypt that needs truncated salt" >&5 +echo "configure:12876: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12891,11 +12881,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12889: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12921,7 +12911,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12925: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12915: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12953,7 +12943,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12957: checking whether to use TDB SAM database" >&5 +echo "configure:12947: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12978,7 +12968,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12982: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12972: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -13009,7 +12999,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:13013: checking whether to use NISPLUS_HOME" >&5 +echo "configure:13003: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -13034,7 +13024,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:13038: checking whether to use syslog logging" >&5 +echo "configure:13028: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -13059,7 +13049,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:13063: checking whether to use profiling" >&5 +echo "configure:13053: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13087,7 +13077,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13091: checking whether to support disk-quotas" >&5 +echo "configure:13081: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13098,13 +13088,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13102: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13092: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13116,7 +13106,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13110: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13165,7 +13155,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13169: checking whether to support utmp accounting" >&5 +echo "configure:13159: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13190,7 +13180,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13194: checking chosen man pages' language(s)" >&5 +echo "configure:13184: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13221,7 +13211,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13225: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13215: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13249,14 +13239,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13253: checking how to get filesystem space usage" >&5 +echo "configure:13243: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13260: checking statvfs64 function (SVR4)" >&5 +echo "configure:13250: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13264,7 +13254,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13311,12 +13301,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13315: checking statvfs function (SVR4)" >&5 +echo "configure:13305: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13324,7 +13314,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13349,7 +13339,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13353: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13343: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13357,7 +13347,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13370,7 +13360,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13397,7 +13387,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13401: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13391: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13405,7 +13395,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13451,7 +13441,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13455: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13445: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13459,7 +13449,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13469,7 +13459,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13496,7 +13486,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13500: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13490: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13504,7 +13494,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13520,7 +13510,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13547,7 +13537,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13551: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13541: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13555,7 +13545,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13575,7 +13565,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13608,9 +13598,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13612: checking if large file support can be enabled" >&5 +echo "configure:13602: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13617: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13688,7 +13678,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13692: checking whether to support ACLs" >&5 +echo "configure:13682: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13741,7 +13731,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13745: checking for acl_get_file in -lacl" >&5 +echo "configure:13735: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13749,7 +13739,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13754: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13788,13 +13778,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13792: checking for ACL support" >&5 +echo "configure:13782: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13802,7 +13792,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13822,13 +13812,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13826: checking for acl_get_perm_np" >&5 +echo "configure:13816: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13836,7 +13826,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13840: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13881,7 +13871,7 @@ fi # check for sendfile support echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 -echo "configure:13885: checking whether to support sendfile" >&5 +echo "configure:13875: checking whether to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -13891,13 +13881,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:13895: checking for linux sendfile64 support" >&5 +echo "configure:13885: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13909,7 +13899,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -13924,13 +13914,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:13928: checking for linux sendfile support" >&5 +echo "configure:13918: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13942,7 +13932,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13936: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -13958,13 +13948,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:13962: checking for broken linux sendfile support" >&5 +echo "configure:13952: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -14036,13 +14026,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:14040: checking for freebsd sendfile support" >&5 +echo "configure:14030: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14050,21 +14040,27 @@ else #include int main() { \ - int fromfd, tofd; +#define NULL (void *)0 + int fromfd, tofd, ret, total; off_t offset, nwritten; - struct sf_hdtr hdr; + struct sf_hdtr { + struct iovec *headers; + int hdr_cnt; + struct iovec *trailers; + int trl_cnt; + } hdr; struct iovec hdtrl; - hdr->headers = &hdtrl; - hdr->hdr_cnt = 1; - hdr->trailers = NULL; - hdr->trl_cnt = 0; + hdr.headers = &hdtrl; + hdr.hdr_cnt = 1; + hdr.trailers = NULL; + hdr.trl_cnt = 0; hdtrl.iov_base = NULL; hdtrl.iov_len = 0; - int ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); + ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); ; return 0; } EOF -if { (eval echo configure:14068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14098,13 +14094,13 @@ EOF *hpux*) echo $ac_n "checking for hpux sendfile64 support""... $ac_c" 1>&6 -echo "configure:14102: checking for hpux sendfile64 support" >&5 +echo "configure:14098: checking for hpux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14124,7 +14120,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -14155,13 +14151,13 @@ EOF fi echo $ac_n "checking for hpux sendfile support""... $ac_c" 1>&6 -echo "configure:14159: checking for hpux sendfile support" >&5 +echo "configure:14155: checking for hpux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14181,7 +14177,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14234,7 +14230,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:14238: checking whether to build winbind" >&5 +echo "configure:14234: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14330,20 +14326,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14334: checking whether struct passwd has pw_comment" >&5 +echo "configure:14330: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14347: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14368,20 +14364,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14372: checking whether struct passwd has pw_age" >&5 +echo "configure:14368: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14385: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14420,7 +14416,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14424: checking for poptGetContext in -lpopt" >&5 +echo "configure:14420: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14428,7 +14424,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14463,7 +14459,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14467: checking whether to use included popt" >&5 +echo "configure:14463: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14509,16 +14505,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14513: checking configure summary" >&5 +echo "configure:14509: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source/configure.in b/source/configure.in index 7ae8ac90d38..6b4f138747c 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2777,17 +2777,23 @@ samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)] #include #include ], [\ - int fromfd, tofd; +#define NULL (void *)0 + int fromfd, tofd, ret, total; off_t offset, nwritten; - struct sf_hdtr hdr; + struct sf_hdtr { + struct iovec *headers; + int hdr_cnt; + struct iovec *trailers; + int trl_cnt; + } hdr; struct iovec hdtrl; - hdr->headers = &hdtrl; - hdr->hdr_cnt = 1; - hdr->trailers = NULL; - hdr->trl_cnt = 0; + hdr.headers = &hdtrl; + hdr.hdr_cnt = 1; + hdr.trailers = NULL; + hdr.trl_cnt = 0; hdtrl.iov_base = NULL; hdtrl.iov_len = 0; - int ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); + ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); ], samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)]) diff --git a/source/lib/sendfile.c b/source/lib/sendfile.c index df6c1980d06..98a52608b8d 100644 --- a/source/lib/sendfile.c +++ b/source/lib/sendfile.c @@ -233,10 +233,10 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of struct iovec hdtrl; size_t hdr_len = 0; - hdr->headers = &hdtrl; - hdr->hdr_cnt = 1; - hdr->trailers = NULL; - hdr->trl_cnt = 0; + hdr.headers = &hdtrl; + hdr.hdr_cnt = 1; + hdr.trailers = NULL; + hdr.trl_cnt = 0; /* Set up the header iovec. */ if (header) { @@ -274,7 +274,7 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of * We change nwritten to be the number of file bytes written. */ - if (hdtrl[0].iov_base && hdtrl.iov_len) { + if (hdtrl.iov_base && hdtrl.iov_len) { if (nwritten >= hdtrl.iov_len) { nwritten -= hdtrl.iov_len; hdtrl.iov_base = NULL; -- cgit From 9f7a16acf1b1f3b100b85339aad8268254512e68 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sat, 21 Sep 2002 14:14:40 +0000 Subject: Sorry for the new parameter, but I think to really reflect what's coming in via deltas, we need a way to set a user's primary group. Volker --- source/groupdb/mapping.c | 24 +++++++++++++++++++++--- source/param/loadparm.c | 3 +++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/source/groupdb/mapping.c b/source/groupdb/mapping.c index 70d6317a77a..2c9c7f47eaf 100644 --- a/source/groupdb/mapping.c +++ b/source/groupdb/mapping.c @@ -434,7 +434,7 @@ BOOL check_priv_in_privilege(PRIVILEGE_SET *priv_set, LUID_ATTR set) } /**************************************************************************** -remove a privilege to a privilege array +remove a privilege from a privilege array ****************************************************************************/ BOOL remove_privilege(PRIVILEGE_SET *priv_set, LUID_ATTR set) { @@ -1187,7 +1187,25 @@ int smb_delete_group(char *unix_group) } /**************************************************************************** - Create a UNIX group on demand. + Set a user's primary UNIX group. +****************************************************************************/ +int smb_set_primary_group(const char *unix_group, const char* unix_user) +{ + pstring add_script; + int ret; + + pstrcpy(add_script, lp_setprimarygroup_script()); + if (! *add_script) return -1; + all_string_sub(add_script, "%g", unix_group, sizeof(add_script)); + all_string_sub(add_script, "%u", unix_user, sizeof(add_script)); + ret = smbrun(add_script,NULL); + DEBUG(3,("smb_set_primary_group: " + "Running the command `%s' gave %d\n",add_script,ret)); + return ret; +} + +/**************************************************************************** + Add a user to a UNIX group. ****************************************************************************/ int smb_add_user_group(char *unix_group, char *unix_user) @@ -1205,7 +1223,7 @@ int smb_add_user_group(char *unix_group, char *unix_user) } /**************************************************************************** - Delete a UNIX group on demand. + Delete a user from a UNIX group ****************************************************************************/ int smb_delete_user_group(const char *unix_group, const char *unix_user) diff --git a/source/param/loadparm.c b/source/param/loadparm.c index 67128c75d2d..f95c03dcdbe 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -140,6 +140,7 @@ typedef struct char *szDelGroupScript; char *szAddUserToGroupScript; char *szDelUserFromGroupScript; + char *szSetPrimaryGroupScript; char *szAddMachineScript; char *szShutdownScript; char *szAbortShutdownScript; @@ -927,6 +928,7 @@ static struct parm_struct parm_table[] = { {"delete group script", P_STRING, P_GLOBAL, &Globals.szDelGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"add user to group script", P_STRING, P_GLOBAL, &Globals.szAddUserToGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"delete user from group script", P_STRING, P_GLOBAL, &Globals.szDelUserFromGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"set primary group script", P_STRING, P_GLOBAL, &Globals.szSetPrimaryGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"add machine script", P_STRING, P_GLOBAL, &Globals.szAddMachineScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"shutdown script", P_STRING, P_GLOBAL, &Globals.szShutdownScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"abort shutdown script", P_STRING, P_GLOBAL, &Globals.szAbortShutdownScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, @@ -1542,6 +1544,7 @@ FN_GLOBAL_STRING(lp_addgroup_script, &Globals.szAddGroupScript) FN_GLOBAL_STRING(lp_delgroup_script, &Globals.szDelGroupScript) FN_GLOBAL_STRING(lp_addusertogroup_script, &Globals.szAddUserToGroupScript) FN_GLOBAL_STRING(lp_deluserfromgroup_script, &Globals.szDelUserFromGroupScript) +FN_GLOBAL_STRING(lp_setprimarygroup_script, &Globals.szSetPrimaryGroupScript) FN_GLOBAL_STRING(lp_addmachine_script, &Globals.szAddMachineScript) -- cgit From 8c41b5cd1b8b0c2639def9552bd20b8aca39785c Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sun, 22 Sep 2002 10:30:00 +0000 Subject: Change parsing of policy and privs delta to what Ethereal says. Volker --- source/include/rpc_netlogon.h | 93 +++++++++++----------------- source/rpc_parse/parse_net.c | 136 ++++++++++++++++++++--------------------- source/utils/net_rpc_samsync.c | 4 +- 3 files changed, 104 insertions(+), 129 deletions(-) diff --git a/source/include/rpc_netlogon.h b/source/include/rpc_netlogon.h index 500f5fef8ac..fb849f82380 100644 --- a/source/include/rpc_netlogon.h +++ b/source/include/rpc_netlogon.h @@ -719,45 +719,31 @@ typedef struct sam_alias_mem_info_info /* SAM_DELTA_POLICY (0x0D) */ typedef struct { - uint32 unknown1; /* 0x5000 */ - uint32 unknown2; /* 0 */ - uint32 unknown3; /* 0 */ - uint32 unknown4; /* 0 */ - uint32 count1; - uint32 ptr1; - uint16 count2; - uint16 count3; - uint32 ptr2; - uint32 ptr3; - - uint32 unknown4b; /* 0x02000000 */ - uint32 unknown5; /* 0x00100000 */ - uint32 unknown6; /* 0x00010000 */ - uint32 unknown7; /* 0x0f000000 */ - uint32 unknown8; /* 0 */ - uint32 unknown9; /* 0 */ - uint32 unknown10; /* 0 */ - uint32 unknown11; /* 0x3c*/ - uint32 unknown12; /* 0*/ - - uint32 unknown13; /* a7080110 */ - uint32 unknown14; /* 01bfb0dd */ - uint32 unknown15; /* 0f */ - uint32 unknown16; /* 68 */ - uint32 unknown17; /* 00169000 */ - - uint32 count4; - uint32 unknown18; /* 0 times count4 */ - - uint32 unknown19; /* 8 */ - - uint32 unknown20; /* 0x04 times count1 */ - - uint32 ptr4; - - UNISTR2 domain_name; + uint32 max_log_size; /* 0x5000 */ + UINT64_S audit_retention_period; /* 0 */ + uint32 auditing_mode; /* 0 */ + uint32 num_events; + uint32 ptr_events; + UNIHDR hdr_dom_name; + uint32 sid_ptr; + + uint32 paged_pool_limit; /* 0x02000000 */ + uint32 non_paged_pool_limit; /* 0x00100000 */ + uint32 min_workset_size; /* 0x00010000 */ + uint32 max_workset_size; /* 0x0f000000 */ + uint32 page_file_limit; /* 0 */ + UINT64_S time_limit; /* 0 */ + NTTIME modify_time; /* 0x3c*/ + NTTIME create_time; /* a7080110 */ + BUFHDR2 hdr_sec_desc; + + uint32 num_event_audit_options; + uint32 event_audit_option; + + UNISTR2 domain_name; DOM_SID2 domain_sid; + BUFFER4 buf_sec_desc; } SAM_DELTA_POLICY; /* SAM_DELTA_TRUST_DOMS */ @@ -783,29 +769,24 @@ typedef struct /* SAM_DELTA_PRIVS (0x10) */ typedef struct { - uint32 buf_size; - SEC_DESC *sec_desc; DOM_SID2 sid; uint32 priv_count; - uint32 reserved1; /* 0x0 */ - - uint32 ptr1; - uint32 ptr2; - - uint32 unknown1; - uint32 unknown2; - uint32 unknown3; - uint32 unknown4; - uint32 unknown5; - uint32 unknown6; - uint32 unknown7; - uint32 unknown8; - uint32 unknown9; + uint32 priv_control; + + uint32 priv_attr_ptr; + uint32 priv_name_ptr; + + uint32 paged_pool_limit; /* 0x02000000 */ + uint32 non_paged_pool_limit; /* 0x00100000 */ + uint32 min_workset_size; /* 0x00010000 */ + uint32 max_workset_size; /* 0x0f000000 */ + uint32 page_file_limit; /* 0 */ + UINT64_S time_limit; /* 0 */ + uint32 system_flags; /* 1 */ + BUFHDR2 hdr_sec_desc; uint32 buf_size2; - uint32 ptr3; - uint32 unknown10; /* 48 bytes 0x0*/ uint32 attribute_count; uint32 *attributes; @@ -814,7 +795,7 @@ typedef struct UNIHDR *hdr_privslist; UNISTR2 *uni_privslist; - + BUFFER4 buf_sec_desc; } SAM_DELTA_PRIVS; /* SAM_DELTA_SECRET */ diff --git a/source/rpc_parse/parse_net.c b/source/rpc_parse/parse_net.c index f1d813c3f07..e0f710b2d75 100644 --- a/source/rpc_parse/parse_net.c +++ b/source/rpc_parse/parse_net.c @@ -2357,79 +2357,70 @@ static BOOL net_io_sam_policy_info(char *desc, SAM_DELTA_POLICY *info, prs_struct *ps, int depth) { int i; - prs_debug(ps, depth, desc, "net_io_sam_policy_info"); depth++; if(!prs_align(ps)) return False; - if (!prs_uint32("unknown1", ps, depth, &info->unknown1)) - return False; - if (!prs_uint32("unknown2", ps, depth, &info->unknown2)) + if (!prs_uint32("max_log_size", ps, depth, &info->max_log_size)) return False; - if (!prs_uint32("unknown3", ps, depth, &info->unknown3)) + if (!prs_uint64("audit_retention_period", ps, depth, + &info->audit_retention_period)) return False; - if (!prs_uint32("unknown4", ps, depth, &info->unknown4)) + if (!prs_uint32("auditing_mode", ps, depth, &info->auditing_mode)) return False; - if (!prs_uint32("count1", ps, depth, &info->count1)) + if (!prs_uint32("num_events", ps, depth, &info->num_events)) return False; - if (!prs_uint32("ptr1", ps, depth, &info->ptr1)) + if (!prs_uint32("ptr_events", ps, depth, &info->ptr_events)) return False; - if (!prs_uint16("count2", ps, depth, &info->count2)) - return False; - if (!prs_uint16("count3", ps, depth, &info->count3)) - return False; + if (!smb_io_unihdr("hdr_dom_name", &info->hdr_dom_name, ps, depth)) + return False; - if (!prs_uint32("ptr2", ps, depth, &info->ptr2)) - return False; - if (!prs_uint32("ptr3", ps, depth, &info->ptr3)) + if (!prs_uint32("sid_ptr", ps, depth, &info->sid_ptr)) return False; - if (!prs_uint32("unknown4b", ps, depth, &info->unknown4b)) + if (!prs_uint32("paged_pool_limit", ps, depth, &info->paged_pool_limit)) return False; - if (!prs_uint32("unknown5", ps, depth, &info->unknown5)) + if (!prs_uint32("non_paged_pool_limit", ps, depth, + &info->non_paged_pool_limit)) return False; - if (!prs_uint32("unknown6", ps, depth, &info->unknown6)) + if (!prs_uint32("min_workset_size", ps, depth, &info->min_workset_size)) return False; - if (!prs_uint32("unknown7", ps, depth, &info->unknown7)) + if (!prs_uint32("max_workset_size", ps, depth, &info->max_workset_size)) return False; - if (!prs_uint32("unknown8", ps, depth, &info->unknown8)) + if (!prs_uint32("page_file_limit", ps, depth, &info->page_file_limit)) return False; - if (!prs_uint32("unknown9", ps, depth, &info->unknown9)) + if (!prs_uint64("time_limit", ps, depth, &info->time_limit)) return False; - if (!prs_uint32("unknown10", ps, depth, &info->unknown10)) + if (!smb_io_time("modify_time", &info->modify_time, ps, depth)) return False; - if (!prs_uint32("unknown11", ps, depth, &info->unknown11)) + if (!smb_io_time("create_time", &info->create_time, ps, depth)) return False; - if (!prs_uint32("unknown12", ps, depth, &info->unknown12)) + if (!smb_io_bufhdr2("hdr_sec_desc", &info->hdr_sec_desc, ps, depth)) return False; - if (!prs_uint32("unknown13", ps, depth, &info->unknown13)) - return False; - if (!prs_uint32("unknown14", ps, depth, &info->unknown14)) - return False; - if (!prs_uint32("unknown15", ps, depth, &info->unknown15)) - return False; - if (!prs_uint32("unknown16", ps, depth, &info->unknown16)) - return False; - if (!prs_uint32("unknown17", ps, depth, &info->unknown17)) - return False; + for (i=0; i<4; i++) { + UNIHDR dummy; + if (!smb_io_unihdr("dummy", &dummy, ps, depth)) + return False; + } - for (i=0; icount2; i++) - if (!prs_uint32("unknown18", ps, depth, &info->unknown18)) - return False; + for (i=0; i<4; i++) { + uint32 reserved; + if (!prs_uint32("reserved", ps, depth, &reserved)) + return False; + } - if (!prs_uint32("unknown19", ps, depth, &info->unknown19)) + if (!prs_uint32("num_event_audit_options", ps, depth, + &info->num_event_audit_options)) return False; - for (i=0; icount1; i++) - if (!prs_uint32("unknown20", ps, depth, &info->unknown20)) - return False; - - if (!prs_uint32("ptr4", ps, depth, &info->ptr4)) - return False; + for (i=0; inum_event_audit_options; i++) + if (!prs_uint32("event_audit_option", ps, depth, + &info->event_audit_option)) + return False; if (!smb_io_unistr2("domain_name", &info->domain_name, True, ps, depth)) return False; @@ -2437,6 +2428,11 @@ static BOOL net_io_sam_policy_info(char *desc, SAM_DELTA_POLICY *info, if(!smb_io_dom_sid2("domain_sid", &info->domain_sid, ps, depth)) return False; + if (!smb_io_buffer4("buf_sec_desc", &info->buf_sec_desc, + info->hdr_sec_desc.buffer, ps, depth)) + + return False; + return True; } @@ -2589,52 +2585,48 @@ static BOOL net_io_sam_privs_info(char *desc, SAM_DELTA_PRIVS *info, if(!prs_align(ps)) return False; - if(!prs_uint32("buf_size", ps, depth, &info->buf_size)) - return False; - - if(!sec_io_desc("sec_desc", &info->sec_desc, ps, depth)) - return False; - if(!smb_io_dom_sid2("sid", &info->sid, ps, depth)) return False; if(!prs_uint32("priv_count", ps, depth, &info->priv_count)) return False; - if(!prs_uint32("reserved1", ps, depth, &info->reserved1)) + if(!prs_uint32("priv_control", ps, depth, &info->priv_control)) return False; - if(!prs_uint32("ptr1", ps, depth, &info->ptr1)) + if(!prs_uint32("priv_attr_ptr", ps, depth, &info->priv_attr_ptr)) return False; - if(!prs_uint32("ptr2", ps, depth, &info->ptr2)) + if(!prs_uint32("priv_name_ptr", ps, depth, &info->priv_name_ptr)) return False; - if(!prs_uint32("unknown1", ps, depth, &info->unknown1)) + if (!prs_uint32("paged_pool_limit", ps, depth, &info->paged_pool_limit)) return False; - if(!prs_uint32("unknown2", ps, depth, &info->unknown2)) + if (!prs_uint32("non_paged_pool_limit", ps, depth, + &info->non_paged_pool_limit)) return False; - if(!prs_uint32("unknown3", ps, depth, &info->unknown3)) + if (!prs_uint32("min_workset_size", ps, depth, &info->min_workset_size)) return False; - if(!prs_uint32("unknown4", ps, depth, &info->unknown4)) + if (!prs_uint32("max_workset_size", ps, depth, &info->max_workset_size)) return False; - if(!prs_uint32("unknown5", ps, depth, &info->unknown5)) + if (!prs_uint32("page_file_limit", ps, depth, &info->page_file_limit)) return False; - if(!prs_uint32("unknown6", ps, depth, &info->unknown6)) + if (!prs_uint64("time_limit", ps, depth, &info->time_limit)) return False; - if(!prs_uint32("unknown7", ps, depth, &info->unknown7)) + if (!prs_uint32("system_flags", ps, depth, &info->system_flags)) return False; - if(!prs_uint32("unknown8", ps, depth, &info->unknown8)) - return False; - if(!prs_uint32("unknown9", ps, depth, &info->unknown9)) + if (!smb_io_bufhdr2("hdr_sec_desc", &info->hdr_sec_desc, ps, depth)) return False; - if(!prs_uint32("buf_size2", ps, depth, &info->buf_size2)) - return False; - if(!prs_uint32("ptr3", ps, depth, &info->ptr3)) - return False; + for (i=0; i<4; i++) { + UNIHDR dummy; + if (!smb_io_unihdr("dummy", &dummy, ps, depth)) + return False; + } - for (i=0; i<12; i++) - if(!prs_uint32("unknown10", ps, depth, &info->unknown10)) - return False; + for (i=0; i<4; i++) { + uint32 reserved; + if (!prs_uint32("reserved", ps, depth, &reserved)) + return False; + } if(!prs_uint32("attribute_count", ps, depth, &info->attribute_count)) return False; @@ -2659,6 +2651,10 @@ static BOOL net_io_sam_privs_info(char *desc, SAM_DELTA_PRIVS *info, if (!smb_io_unistr2("uni_privslist", &info->uni_privslist[i], True, ps, depth)) return False; + if (!smb_io_buffer4("buf_sec_desc", &info->buf_sec_desc, + info->hdr_sec_desc.buffer, ps, depth)) + return False; + return True; } diff --git a/source/utils/net_rpc_samsync.c b/source/utils/net_rpc_samsync.c index 6d8b7c672f9..9d54a771fc4 100644 --- a/source/utils/net_rpc_samsync.c +++ b/source/utils/net_rpc_samsync.c @@ -171,9 +171,7 @@ int rpc_samdump(int argc, const char **argv) dump_database(cli, SAM_DATABASE_DOMAIN, &ret_creds); dump_database(cli, SAM_DATABASE_BUILTIN, &ret_creds); - - /* Currently we crash on PRIVS somewhere in unmarshalling */ - /* Dump_database(cli, SAM_DATABASE_PRIVS, &ret_creds); */ + dump_database(cli, SAM_DATABASE_PRIVS, &ret_creds); cli_nt_session_close(cli); -- cgit From 40aea3fe94b68ce284e2f21e57f086212936c049 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Sun, 22 Sep 2002 16:22:48 +0000 Subject: Small, long overdue, fix for libsmbclient. --- source/libsmb/clientgen.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/source/libsmb/clientgen.c b/source/libsmb/clientgen.c index 6b6a2acd3b8..793dd19644f 100644 --- a/source/libsmb/clientgen.c +++ b/source/libsmb/clientgen.c @@ -328,3 +328,22 @@ uint16 cli_setpid(struct cli_state *cli, uint16 pid) cli->pid = pid; return ret; } + +/**************************************************************************** +Send a keepalive packet to the server +****************************************************************************/ +BOOL cli_send_keepalive(struct cli_state *cli) +{ + if (cli->fd == -1) { + DEBUG(3, ("cli_send_keepalive: fd == -1\n")); + return False; + } + if (!send_keepalive(cli->fd)) { + close(cli->fd); + cli->fd = -1; + DEBUG(0,("Error sending keepalive packet to client.\n")); + return False; + } + return True; +} + -- cgit From 575b8674863341d3dbd04d8618a3a5f2ff5651ee Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 23 Sep 2002 02:49:01 +0000 Subject: Fix typo. --- docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml b/docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml index 594516640de..adcd059bc2f 100644 --- a/docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml +++ b/docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml @@ -154,7 +154,7 @@ password required /lib/security/pam_smbpass.so nodelay smbconf=/etc/samba. Note: PAM allows stacking of authentication mechanisms. It is -also possible to pass information obtained within on PAM module through +also possible to pass information obtained within one PAM module through to the next module in the PAM stack. Please refer to the documentation for your particular system implementation for details regarding the specific capabilities of PAM in this environment. Some Linux implmentations also -- cgit From 50752f84f24b36332ec4f1ade92dc5a095ac077b Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 23 Sep 2002 04:01:28 +0000 Subject: * fix getpass check * merge in AIX fixes from SAMBA_2_2 --- source/configure | 740 ++++++++++++++++++++++++++-------------------------- source/configure.in | 39 ++- 2 files changed, 390 insertions(+), 389 deletions(-) diff --git a/source/configure b/source/configure index 994d830cdd5..39fa8b05f07 100755 --- a/source/configure +++ b/source/configure @@ -8928,7 +8928,17 @@ EOF SONAMEFLAG="-Wl,-h," PICFLAG="-KPIC" # Is this correct for SunOS ;; - *bsd*) BLDSHARED="true" + *freebsd*) BLDSHARED="true" + LDSHFLAGS="-shared" + DYNEXP="-Wl,--export-dynamic" + SONAMEFLAG="-Wl,-soname," + PICFLAG="-fPIC -DPIC" + cat >> confdefs.h <<\EOF +#define STAT_ST_BLOCKSIZE 512 +EOF + + ;; + *openbsd*) BLDSHARED="true" LDSHFLAGS="-shared" DYNEXP="-Wl,-Bdynamic" SONAMEFLAG="-Wl,-soname," @@ -8971,12 +8981,10 @@ EOF BLDSHARED="true" LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-bnoentry" DYNEXP="-Wl,-brtl,-bexpall" - if test "${GCC}" = "yes"; then - PICFLAG="-O2" - else - PICFLAG="-O2 -qmaxmem=6000" + PICFLAG="-O2" + if test "${GCC}" != "yes"; then ## for funky AIX compiler using strncpy() - CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT" + CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000" fi cat >> confdefs.h <<\EOF @@ -9036,7 +9044,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9040: checking for $ac_word" >&5 +echo "configure:9048: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9093,17 +9101,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9097: checking linker flags for shared libraries" >&5 +echo "configure:9105: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9100: checking compiler flags for position-independent code" >&5 +echo "configure:9108: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9107: checking whether building shared libraries actually works" >&5 +echo "configure:9115: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9134,7 +9142,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9138: checking for long long" >&5 +echo "configure:9146: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9143,12 +9151,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9160: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9175,20 +9183,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9179: checking for LL suffix on long long integers" >&5 +echo "configure:9187: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9200: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9210,7 +9218,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9214: checking for 64 bit off_t" >&5 +echo "configure:9222: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9219,13 +9227,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9248,7 +9256,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9252: checking for off64_t" >&5 +echo "configure:9260: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9257,7 +9265,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9290,7 +9298,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9294: checking for 64 bit ino_t" >&5 +echo "configure:9302: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9299,13 +9307,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9328,7 +9336,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9332: checking for ino64_t" >&5 +echo "configure:9340: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9337,7 +9345,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9370,7 +9378,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9374: checking for dev64_t" >&5 +echo "configure:9382: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9379,7 +9387,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9412,13 +9420,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9416: checking for struct dirent64" >&5 +echo "configure:9424: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9442: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9451,7 +9459,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9455: checking for major macro" >&5 +echo "configure:9463: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9460,7 +9468,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9492,7 +9500,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9496: checking for minor macro" >&5 +echo "configure:9504: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9501,7 +9509,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9533,7 +9541,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9537: checking for unsigned char" >&5 +echo "configure:9545: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9542,12 +9550,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9570,13 +9578,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9574: checking for sin_len in sock" >&5 +echo "configure:9582: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9585,7 +9593,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9589: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9597: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9606,13 +9614,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9610: checking whether seekdir returns void" >&5 +echo "configure:9618: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9621,7 +9629,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9633: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9642,20 +9650,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9646: checking for __FILE__ macro" >&5 +echo "configure:9654: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9667: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9676,20 +9684,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9680: checking for __FUNCTION__ macro" >&5 +echo "configure:9688: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9693: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9701: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9710,7 +9718,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9714: checking if gettimeofday takes tz argument" >&5 +echo "configure:9722: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9719,14 +9727,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9749,13 +9757,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9753: checking for __va_copy" >&5 +echo "configure:9761: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9763,7 +9771,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9784,7 +9792,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9788: checking for C99 vsnprintf" >&5 +echo "configure:9796: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9793,7 +9801,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9820,7 +9828,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9843,7 +9851,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9847: checking for broken readdir" >&5 +echo "configure:9855: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9852,7 +9860,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9860,7 +9868,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9883,13 +9891,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9887: checking for utimbuf" >&5 +echo "configure:9895: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9897,7 +9905,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9909: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9921,12 +9929,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9925: checking for $ac_func" >&5 +echo "configure:9933: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9975,13 +9983,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9979: checking for ut_name in utmp" >&5 +echo "configure:9987: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9989,7 +9997,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10001: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10010,13 +10018,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10014: checking for ut_user in utmp" >&5 +echo "configure:10022: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10024,7 +10032,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10036: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10045,13 +10053,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10049: checking for ut_id in utmp" >&5 +echo "configure:10057: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10059,7 +10067,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10071: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10080,13 +10088,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10084: checking for ut_host in utmp" >&5 +echo "configure:10092: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10094,7 +10102,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10098: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10106: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10115,13 +10123,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10119: checking for ut_time in utmp" >&5 +echo "configure:10127: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10129,7 +10137,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10133: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10141: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10150,13 +10158,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10154: checking for ut_tv in utmp" >&5 +echo "configure:10162: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10164,7 +10172,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10176: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10185,13 +10193,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10189: checking for ut_type in utmp" >&5 +echo "configure:10197: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10199,7 +10207,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10220,13 +10228,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10224: checking for ut_pid in utmp" >&5 +echo "configure:10232: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10234,7 +10242,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10238: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10246: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10255,13 +10263,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10259: checking for ut_exit in utmp" >&5 +echo "configure:10267: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10269,7 +10277,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10281: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10290,13 +10298,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10294: checking for ut_addr in utmp" >&5 +echo "configure:10302: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10304,7 +10312,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10308: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10316: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10326,13 +10334,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10330: checking whether pututline returns pointer" >&5 +echo "configure:10338: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10340,7 +10348,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10352: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10362,13 +10370,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10366: checking for ut_syslen in utmpx" >&5 +echo "configure:10374: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10376,7 +10384,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10380: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10388: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10400,7 +10408,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10404: checking whether to use libiconv" >&5 +echo "configure:10412: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10413,7 +10421,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10417: checking for iconv_open in -liconv" >&5 +echo "configure:10425: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10421,7 +10429,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10475,7 +10483,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10479: checking for working iconv" >&5 +echo "configure:10487: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10484,7 +10492,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10495,7 +10503,7 @@ main() { } EOF -if { (eval echo configure:10499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10519,7 +10527,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10523: checking for Linux kernel oplocks" >&5 +echo "configure:10531: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10528,7 +10536,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10542,7 +10550,7 @@ main() { } EOF -if { (eval echo configure:10546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10565,7 +10573,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10569: checking for kernel change notify support" >&5 +echo "configure:10577: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10574,7 +10582,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10588,7 +10596,7 @@ main() { } EOF -if { (eval echo configure:10592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10600: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10611,7 +10619,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10615: checking for kernel share modes" >&5 +echo "configure:10623: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10620,7 +10628,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10636,7 +10644,7 @@ main() { } EOF -if { (eval echo configure:10640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10662,13 +10670,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10666: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10674: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10676,7 +10684,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10680: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10688: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10697,7 +10705,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10701: checking for irix specific capabilities" >&5 +echo "configure:10709: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10706,7 +10714,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10721,7 +10729,7 @@ main() { } EOF -if { (eval echo configure:10725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10749,13 +10757,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10753: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10761: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10765,7 +10773,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10769: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10786,13 +10794,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10790: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10798: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10802,7 +10810,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10823,13 +10831,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10827: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10835: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10839,7 +10847,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10843: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10851: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10860,13 +10868,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10864: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10872: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10876,7 +10884,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10898,13 +10906,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10902: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10910: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10918,7 +10926,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10930: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10939,16 +10947,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10943: checking for test routines" >&5 +echo "configure:10951: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10962,7 +10970,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10966: checking for ftruncate extend" >&5 +echo "configure:10974: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10971,11 +10979,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10987: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10998,7 +11006,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:11002: checking for AF_LOCAL socket support" >&5 +echo "configure:11010: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11007,11 +11015,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11023: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11035,7 +11043,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11039: checking for broken getgroups" >&5 +echo "configure:11047: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11044,11 +11052,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11071,7 +11079,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11075: checking whether getpass should be replaced" >&5 +echo "configure:11083: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11079,7 +11087,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11104: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11115,7 +11123,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11119: checking for broken inet_ntoa" >&5 +echo "configure:11127: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11124,7 +11132,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11138,7 +11146,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11150: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11161,7 +11169,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11165: checking for secure mkstemp" >&5 +echo "configure:11173: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11170,7 +11178,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11187,7 +11195,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11199: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11210,7 +11218,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11214: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11222: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11219,12 +11227,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11247,7 +11255,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11251: checking for root" >&5 +echo "configure:11259: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11256,11 +11264,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11288,7 +11296,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11292: checking for iface AIX" >&5 +echo "configure:11300: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11297,7 +11305,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11329,7 +11337,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11333: checking for iface ifconf" >&5 +echo "configure:11341: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11338,7 +11346,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11371,7 +11379,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11375: checking for iface ifreq" >&5 +echo "configure:11383: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11380,7 +11388,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11417,7 +11425,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11421: checking for setresuid" >&5 +echo "configure:11429: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11426,7 +11434,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11460,7 +11468,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11464: checking for setreuid" >&5 +echo "configure:11472: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11469,7 +11477,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11502,7 +11510,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11506: checking for seteuid" >&5 +echo "configure:11514: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11511,7 +11519,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11531: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11544,7 +11552,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11548: checking for setuidx" >&5 +echo "configure:11556: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11553,7 +11561,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11586,7 +11594,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11590: checking for working mmap" >&5 +echo "configure:11598: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11595,11 +11603,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11622,7 +11630,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11626: checking for ftruncate needs root" >&5 +echo "configure:11634: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11631,11 +11639,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11658,7 +11666,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11662: checking for fcntl locking" >&5 +echo "configure:11670: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11667,11 +11675,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11694,7 +11702,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11698: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11706: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11703,11 +11711,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11719: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11732,7 +11740,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11736: checking for 64 bit fcntl locking" >&5 +echo "configure:11744: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11741,7 +11749,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11790,13 +11798,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11794: checking for st_blocks in struct stat" >&5 +echo "configure:11802: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11805,7 +11813,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11809: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11817: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11826,13 +11834,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11830: checking for st_blksize in struct stat" >&5 +echo "configure:11838: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11841,7 +11849,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11845: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11853: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11864,13 +11872,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11868: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11876: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11896: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11907,13 +11915,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11911: checking for broken nisplus include files" >&5 +echo "configure:11919: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11923,7 +11931,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11935: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11947,7 +11955,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11951: checking whether to use smbwrapper" >&5 +echo "configure:11959: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11994,7 +12002,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11998: checking whether to use AFS clear-text auth" >&5 +echo "configure:12006: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12020,7 +12028,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12024: checking whether to use DFS clear-text auth" >&5 +echo "configure:12032: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12047,7 +12055,7 @@ fi with_ads_support=yes echo $ac_n "checking whether to use Active Directory""... $ac_c" 1>&6 -echo "configure:12051: checking whether to use Active Directory" >&5 +echo "configure:12059: checking whether to use Active Directory" >&5 # Check whether --with-ads or --without-ads was given. if test "${with_ads+set}" = set; then @@ -12075,7 +12083,7 @@ if test x"$with_ads_support" = x"yes"; then # check for location of Kerberos 5 install FOUND_KRB5=0 echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12079: checking for kerberos 5 install path" >&5 +echo "configure:12087: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12089,7 +12097,7 @@ if test "${with_krb5+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" - FOUND_KRB5=1 + FOUND_KRB5=1 ;; esac else @@ -12103,7 +12111,7 @@ if $FOUND_KRB5 = 0 ; then ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12107: checking for /usr/kerberos" >&5 +echo "configure:12115: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12122,17 +12130,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12126: checking for $ac_hdr" >&5 +echo "configure:12134: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12136: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12144: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12165,17 +12173,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12169: checking for $ac_hdr" >&5 +echo "configure:12177: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12179: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12187: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12205,7 +12213,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12209: checking for _et_list in -lcom_err" >&5 +echo "configure:12217: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12213,7 +12221,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12245,7 +12253,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12249: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12257: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12253,7 +12261,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12276: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12289,7 +12297,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12293: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12301: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12297,7 +12305,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12336,7 +12344,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12340: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12348: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12344,7 +12352,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12367: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12386,7 +12394,7 @@ fi with_ldap_support=yes echo $ac_n "checking whether to use LDAP""... $ac_c" 1>&6 -echo "configure:12390: checking whether to use LDAP" >&5 +echo "configure:12398: checking whether to use LDAP" >&5 # Check whether --with-ldap or --without-ldap was given. if test "${with_ldap+set}" = set; then @@ -12407,7 +12415,7 @@ if test x"$with_ldap_support" = x"yes"; then # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12411: checking for ber_scanf in -llber" >&5 +echo "configure:12419: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12415,7 +12423,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12451,7 +12459,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12455: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12463: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12459,7 +12467,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12501,12 +12509,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12505: checking for $ac_func" >&5 +echo "configure:12513: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12554,13 +12562,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12558: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12566: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12569,7 +12577,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12573: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12581: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12592,7 +12600,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12596: checking whether to use AUTOMOUNT" >&5 +echo "configure:12604: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12617,7 +12625,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12621: checking whether to use SMBMOUNT" >&5 +echo "configure:12629: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12654,7 +12662,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12658: checking whether to use PAM" >&5 +echo "configure:12666: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12680,7 +12688,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12684: checking for pam_get_data in -lpam" >&5 +echo "configure:12692: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12688,7 +12696,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12726,7 +12734,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12730: checking whether to use pam_smbpass" >&5 +echo "configure:12738: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12764,12 +12772,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12768: checking for $ac_func" >&5 +echo "configure:12776: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12818,7 +12826,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12822: checking for crypt in -lcrypt" >&5 +echo "configure:12830: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12826,7 +12834,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12849: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12872,7 +12880,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12876: checking for a crypt that needs truncated salt" >&5 +echo "configure:12884: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12881,11 +12889,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12911,7 +12919,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12915: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12923: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12943,7 +12951,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12947: checking whether to use TDB SAM database" >&5 +echo "configure:12955: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12968,7 +12976,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12972: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12980: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12999,7 +13007,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:13003: checking whether to use NISPLUS_HOME" >&5 +echo "configure:13011: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -13024,7 +13032,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:13028: checking whether to use syslog logging" >&5 +echo "configure:13036: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -13049,7 +13057,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:13053: checking whether to use profiling" >&5 +echo "configure:13061: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13077,7 +13085,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13081: checking whether to support disk-quotas" >&5 +echo "configure:13089: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13088,13 +13096,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13092: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13100: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13106,7 +13114,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13110: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13155,7 +13163,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13159: checking whether to support utmp accounting" >&5 +echo "configure:13167: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13180,7 +13188,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13184: checking chosen man pages' language(s)" >&5 +echo "configure:13192: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13211,7 +13219,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13215: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13223: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13239,14 +13247,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13243: checking how to get filesystem space usage" >&5 +echo "configure:13251: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13250: checking statvfs64 function (SVR4)" >&5 +echo "configure:13258: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13254,7 +13262,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13301,12 +13309,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13305: checking statvfs function (SVR4)" >&5 +echo "configure:13313: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13314,7 +13322,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13326: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13339,7 +13347,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13343: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13351: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13347,7 +13355,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13360,7 +13368,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13387,7 +13395,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13391: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13399: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13395,7 +13403,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13441,7 +13449,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13445: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13453: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13449,7 +13457,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13459,7 +13467,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13486,7 +13494,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13490: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13498: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13494,7 +13502,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13510,7 +13518,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13537,7 +13545,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13541: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13549: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13545,7 +13553,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13565,7 +13573,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13598,9 +13606,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13602: checking if large file support can be enabled" >&5 +echo "configure:13610: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13678,7 +13686,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13682: checking whether to support ACLs" >&5 +echo "configure:13690: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13731,7 +13739,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13735: checking for acl_get_file in -lacl" >&5 +echo "configure:13743: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13739,7 +13747,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13778,13 +13786,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13782: checking for ACL support" >&5 +echo "configure:13790: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13792,7 +13800,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13812,13 +13820,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13816: checking for acl_get_perm_np" >&5 +echo "configure:13824: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13826,7 +13834,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13838: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13871,7 +13879,7 @@ fi # check for sendfile support echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 -echo "configure:13875: checking whether to support sendfile" >&5 +echo "configure:13883: checking whether to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -13881,13 +13889,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:13885: checking for linux sendfile64 support" >&5 +echo "configure:13893: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13899,7 +13907,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -13914,13 +13922,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:13918: checking for linux sendfile support" >&5 +echo "configure:13926: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13932,7 +13940,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13936: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -13948,13 +13956,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:13952: checking for broken linux sendfile support" >&5 +echo "configure:13960: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -14026,13 +14034,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:14030: checking for freebsd sendfile support" >&5 +echo "configure:14038: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14040,27 +14048,21 @@ else #include int main() { \ -#define NULL (void *)0 - int fromfd, tofd, ret, total; + int fromfd, tofd; off_t offset, nwritten; - struct sf_hdtr { - struct iovec *headers; - int hdr_cnt; - struct iovec *trailers; - int trl_cnt; - } hdr; + struct sf_hdtr hdr; struct iovec hdtrl; - hdr.headers = &hdtrl; - hdr.hdr_cnt = 1; - hdr.trailers = NULL; - hdr.trl_cnt = 0; + hdr->headers = &hdtrl; + hdr->hdr_cnt = 1; + hdr->trailers = NULL; + hdr->trl_cnt = 0; hdtrl.iov_base = NULL; hdtrl.iov_len = 0; - ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); + int ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); ; return 0; } EOF -if { (eval echo configure:14064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14094,13 +14096,13 @@ EOF *hpux*) echo $ac_n "checking for hpux sendfile64 support""... $ac_c" 1>&6 -echo "configure:14098: checking for hpux sendfile64 support" >&5 +echo "configure:14100: checking for hpux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14120,7 +14122,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -14151,13 +14153,13 @@ EOF fi echo $ac_n "checking for hpux sendfile support""... $ac_c" 1>&6 -echo "configure:14155: checking for hpux sendfile support" >&5 +echo "configure:14157: checking for hpux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14177,7 +14179,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14230,7 +14232,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:14234: checking whether to build winbind" >&5 +echo "configure:14236: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14326,20 +14328,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14330: checking whether struct passwd has pw_comment" >&5 +echo "configure:14332: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14345: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14364,20 +14366,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14368: checking whether struct passwd has pw_age" >&5 +echo "configure:14370: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14383: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14416,7 +14418,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14420: checking for poptGetContext in -lpopt" >&5 +echo "configure:14422: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14424,7 +14426,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14459,7 +14461,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14463: checking whether to use included popt" >&5 +echo "configure:14465: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14505,16 +14507,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14509: checking configure summary" >&5 +echo "configure:14511: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source/configure.in b/source/configure.in index 6b4f138747c..07cf6e88cdb 100644 --- a/source/configure.in +++ b/source/configure.in @@ -896,7 +896,14 @@ case "$host_os" in SONAMEFLAG="-Wl,-h," PICFLAG="-KPIC" # Is this correct for SunOS ;; - *bsd*) BLDSHARED="true" + *freebsd*) BLDSHARED="true" + LDSHFLAGS="-shared" + DYNEXP="-Wl,--export-dynamic" + SONAMEFLAG="-Wl,-soname," + PICFLAG="-fPIC -DPIC" + AC_DEFINE(STAT_ST_BLOCKSIZE,512) + ;; + *openbsd*) BLDSHARED="true" LDSHFLAGS="-shared" DYNEXP="-Wl,-Bdynamic" SONAMEFLAG="-Wl,-soname," @@ -924,12 +931,10 @@ case "$host_os" in BLDSHARED="true" LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-bnoentry" DYNEXP="-Wl,-brtl,-bexpall" - if test "${GCC}" = "yes"; then - PICFLAG="-O2" - else - PICFLAG="-O2 -qmaxmem=6000" + PICFLAG="-O2" + if test "${GCC}" != "yes"; then ## for funky AIX compiler using strncpy() - CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT" + CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000" fi AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE) @@ -1974,7 +1979,7 @@ FOUND_KRB5=0 CFLAGS="$CFLAGS -I$withval/include" CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" - FOUND_KRB5=1 + FOUND_KRB5=1 ;; esac ], AC_MSG_RESULT(no) @@ -2777,23 +2782,17 @@ samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)] #include #include ], [\ -#define NULL (void *)0 - int fromfd, tofd, ret, total; + int fromfd, tofd; off_t offset, nwritten; - struct sf_hdtr { - struct iovec *headers; - int hdr_cnt; - struct iovec *trailers; - int trl_cnt; - } hdr; + struct sf_hdtr hdr; struct iovec hdtrl; - hdr.headers = &hdtrl; - hdr.hdr_cnt = 1; - hdr.trailers = NULL; - hdr.trl_cnt = 0; + hdr->headers = &hdtrl; + hdr->hdr_cnt = 1; + hdr->trailers = NULL; + hdr->trl_cnt = 0; hdtrl.iov_base = NULL; hdtrl.iov_len = 0; - ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); + int ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); ], samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)]) -- cgit From f6ed429838cc0140c0d033875012c7a999891549 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 23 Sep 2002 10:05:15 +0000 Subject: Add the ability to view/set the current local domain SIDs. Volker --- source/utils/net.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/source/utils/net.c b/source/utils/net.c index e3cfc24b697..9363d1a6a02 100644 --- a/source/utils/net.c +++ b/source/utils/net.c @@ -329,6 +329,49 @@ static int net_file(int argc, const char **argv) return net_rap_file(argc, argv); } +static int net_setlocalsid(int argc, const char **argv) +{ + DOM_SID sid; + + if ( (argc != 1) + || (strncmp(argv[0], "S-1-5-21-", strlen("S-1-5-21-")) != 0) + || (!string_to_sid(&sid, argv[0])) + || (sid.num_auths != 4)) { + d_printf("usage: net setlocalsid S-1-5-21-x-y-z\n"); + return 1; + } + + if (!secrets_store_domain_sid(global_myname, &sid)) { + DEBUG(0,("Can't store domain SID as a pdc/bdc.\n")); + return 1; + } + + return 0; +} + +static int net_getdomainsid(int argc, const char **argv) +{ + DOM_SID domain_sid; + fstring sid_str; + + if (!secrets_fetch_domain_sid(global_myname, &domain_sid)) { + d_printf("Could not fetch local SID\n"); + return 1; + } + sid_to_string(sid_str, &domain_sid); + d_printf("SID for domain %s is: %s\n", global_myname, sid_str); + + if (!secrets_fetch_domain_sid(lp_workgroup(), &domain_sid)) { + d_printf("Could not fetch domain SID\n"); + return 1; + } + + sid_to_string(sid_str, &domain_sid); + d_printf("SID for domain %s is: %s\n", lp_workgroup(), sid_str); + + return 0; +} + /* main function table */ static struct functable net_func[] = { {"RPC", net_rpc}, @@ -353,6 +396,8 @@ static struct functable net_func[] = { {"LOOKUP", net_lookup}, {"JOIN", net_join}, {"CACHE", net_cache}, + {"SETLOCALSID", net_setlocalsid}, + {"GETDOMAINSID", net_getdomainsid}, {"HELP", net_help}, {NULL, NULL} -- cgit From a1bade0748fa46c6cb00e99d7022b21057679889 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 23 Sep 2002 15:00:09 +0000 Subject: tdbdump also needs signal.h. Thanks to Guenther Deschner Volker --- source/tdb/tdbdump.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/tdb/tdbdump.c b/source/tdb/tdbdump.c index 66642132093..9c1dc2761b6 100644 --- a/source/tdb/tdbdump.c +++ b/source/tdb/tdbdump.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "tdb.h" static void print_data(TDB_DATA d) -- cgit From 42774a7753eb8be1ec04bcb5dda089910a1b6d0b Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 23 Sep 2002 15:36:02 +0000 Subject: Cosmetic fix for debug message. --- source/utils/net_rpc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c index 3192768931b..8b8278b053e 100644 --- a/source/utils/net_rpc.c +++ b/source/utils/net_rpc.c @@ -424,8 +424,7 @@ rpc_getsid_internals(const DOM_SID *domain_sid, struct cli_state *cli, sid_str, lp_workgroup()); if (!secrets_store_domain_sid(global_myname, domain_sid)) { - DEBUG(0,("pdb_generate_sam_sid: " - "Can't store domain SID as a pdc/bdc.\n")); + DEBUG(0,("Can't store domain SID\n")); return NT_STATUS_UNSUCCESSFUL; } -- cgit From b959419ed38e66a12b63cad3e5fbfa849f952acc Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 23 Sep 2002 16:21:01 +0000 Subject: Ok, getting a bit more ambitious. Stop me, if this is wrong. ;-) When creating a group you have to take care of the fact that the underlying unix might not like the group name. This change gets around that problem by giving the add group script the chance to invent a group name. It then must only return the newly created numerical gid. Volker --- docs/manpages/smb.conf.5 | 9 +++++++-- source/groupdb/mapping.c | 30 ++++++++++++++++++++++++++++-- source/rpc_server/srv_samr_nt.c | 12 ++++++++---- source/utils/net_rpc_samsync.c | 5 +++-- 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/docs/manpages/smb.conf.5 b/docs/manpages/smb.conf.5 index 990ba027ab6..89671344817 100644 --- a/docs/manpages/smb.conf.5 +++ b/docs/manpages/smb.conf.5 @@ -1616,8 +1616,13 @@ Example: \fBadd user script = /usr/local/samba/bin/add_user %u\fR .TP \fBadd group script (G)\fR -This is the full pathname to a script that will -be run \fBAS ROOT\fR by smbd(8) when a new group is requested. It will expand any \fI%g\fR to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. +This is the full pathname to a script that will be run \fBAS ROOT\fR +by smbd(8) when a new group is requested. It will expand any \fI%g\fR +to the group name passed. This script is only useful for +installations using the Windows NT domain administration tools. The +script is free to create a group with an arbitrary name to circumvent +unix group name restrictions. In that case the script must print the +numeric gid of the created group on stdout. .TP \fBadmin users (S)\fR This is a list of users who will be granted diff --git a/source/groupdb/mapping.c b/source/groupdb/mapping.c index 2c9c7f47eaf..56414312465 100644 --- a/source/groupdb/mapping.c +++ b/source/groupdb/mapping.c @@ -1156,16 +1156,42 @@ BOOL get_uid_list_of_group(gid_t gid, uid_t **uid, int *num_uids) Create a UNIX group on demand. ****************************************************************************/ -int smb_create_group(char *unix_group) +int smb_create_group(char *unix_group, gid_t *new_gid) { pstring add_script; int ret; + int fd = 0; pstrcpy(add_script, lp_addgroup_script()); if (! *add_script) return -1; pstring_sub(add_script, "%g", unix_group); - ret = smbrun(add_script,NULL); + ret = smbrun(add_script, (new_gid!=NULL) ? &fd : NULL); DEBUG(3,("smb_create_group: Running the command `%s' gave %d\n",add_script,ret)); + if (ret != 0) + return ret; + + if (fd != 0) { + fstring output; + + *new_gid = 0; + if (read(fd, output, sizeof(output)) > 0) { + *new_gid = (gid_t)strtoul(output, NULL, 10); + } + close(fd); + + if (*new_gid == 0) { + /* The output was garbage. We assume nobody + will create group 0 via smbd. Now we try to + get the group via getgrnam. */ + + struct group *grp = getgrnam(unix_group); + if (grp != NULL) + *new_gid = grp->gr_gid; + else + return 1; + } + } + return ret; } diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c index fd1111d5dcf..ea631838dab 100644 --- a/source/rpc_server/srv_samr_nt.c +++ b/source/rpc_server/srv_samr_nt.c @@ -3857,6 +3857,7 @@ NTSTATUS _samr_create_dom_group(pipes_struct *p, SAMR_Q_CREATE_DOM_GROUP *q_u, S struct samr_info *info; PRIVILEGE_SET priv_set; uint32 acc_granted; + gid_t gid; init_privilege(&priv_set); @@ -3880,10 +3881,11 @@ NTSTATUS _samr_create_dom_group(pipes_struct *p, SAMR_Q_CREATE_DOM_GROUP *q_u, S return NT_STATUS_GROUP_EXISTS; /* we can create the UNIX group */ - smb_create_group(name); + if (smb_create_group(name, &gid) != 0) + return NT_STATUS_ACCESS_DENIED; /* check if the group has been successfully created */ - if ((grp=getgrnam(name)) == NULL) + if ((grp=getgrgid(gid)) == NULL) return NT_STATUS_ACCESS_DENIED; r_u->rid=pdb_gid_to_group_rid(grp->gr_gid); @@ -3920,6 +3922,7 @@ NTSTATUS _samr_create_dom_alias(pipes_struct *p, SAMR_Q_CREATE_DOM_ALIAS *q_u, S struct samr_info *info; PRIVILEGE_SET priv_set; uint32 acc_granted; + gid_t gid; init_privilege(&priv_set); @@ -3943,10 +3946,11 @@ NTSTATUS _samr_create_dom_alias(pipes_struct *p, SAMR_Q_CREATE_DOM_ALIAS *q_u, S return NT_STATUS_GROUP_EXISTS; /* we can create the UNIX group */ - smb_create_group(name); + if (smb_create_group(name, &gid) != 0) + return NT_STATUS_ACCESS_DENIED; /* check if the group has been successfully created */ - if ((grp=getgrnam(name)) == NULL) + if ((grp=getgrgid(gid)) == NULL) return NT_STATUS_ACCESS_DENIED; r_u->rid=pdb_gid_to_group_rid(grp->gr_gid); diff --git a/source/utils/net_rpc_samsync.c b/source/utils/net_rpc_samsync.c index 9d54a771fc4..95a813dcfde 100644 --- a/source/utils/net_rpc_samsync.c +++ b/source/utils/net_rpc_samsync.c @@ -323,14 +323,15 @@ fetch_group_info(uint32 rid, SAM_GROUP_INFO *delta) fstring sid_string; GROUP_MAP map; int flag = TDB_INSERT; + gid_t gid; unistr2_to_ascii(name, &delta->uni_grp_name, sizeof(name)-1); unistr2_to_ascii(comment, &delta->uni_grp_desc, sizeof(comment)-1); if ((grp = getgrnam(name)) == NULL) - smb_create_group(name); + smb_create_group(name, &gid); - if ((grp = getgrnam(name)) == NULL) + if ((grp = getgrgid(gid)) == NULL) return NT_STATUS_ACCESS_DENIED; /* add the group to the mapping table */ -- cgit From 08c3e2b824cd2c93ca548fa18ea16a18f5b197e5 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Mon, 23 Sep 2002 16:46:32 +0000 Subject: Add net getlocalsid [name] --- source/utils/net.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/source/utils/net.c b/source/utils/net.c index 9363d1a6a02..800aeded0a6 100644 --- a/source/utils/net.c +++ b/source/utils/net.c @@ -329,6 +329,31 @@ static int net_file(int argc, const char **argv) return net_rap_file(argc, argv); } +/* + Retrieve our local SID or the SID for the specified name + */ +static int net_getlocalsid(int argc, const char **argv) +{ + DOM_SID sid; + const char *name; + fstring sid_str; + + if (argc >= 1) { + name = argv[0]; + } + else { + name = global_myname; + } + + if (!secrets_fetch_domain_sid(name, &sid)) { + DEBUG(0, ("Can't fetch domain SID for name: %s\n", name)); + return 1; + } + sid_to_string(sid_str, &sid); + d_printf("SID for domain %s is: %s\n", name, sid_str); + return 0; +} + static int net_setlocalsid(int argc, const char **argv) { DOM_SID sid; @@ -396,6 +421,7 @@ static struct functable net_func[] = { {"LOOKUP", net_lookup}, {"JOIN", net_join}, {"CACHE", net_cache}, + {"GETLOCALSID", net_getlocalsid}, {"SETLOCALSID", net_setlocalsid}, {"GETDOMAINSID", net_getdomainsid}, -- cgit From b53547bf663ed1714326f9b0e74215e012e728af Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Mon, 23 Sep 2002 16:54:32 +0000 Subject: Update some help. People keep forgetting that! --- source/utils/net_help.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/utils/net_help.c b/source/utils/net_help.c index 16309c53345..262670cb2a3 100644 --- a/source/utils/net_help.c +++ b/source/utils/net_help.c @@ -58,7 +58,7 @@ static int help_usage(int argc, const char **argv) "\n"\ "Valid functions are:\n"\ " RPC RAP ADS FILE SHARE SESSION SERVER DOMAIN PRINTQ USER GROUP VALIDATE\n"\ -" GROUPMEMBER ADMIN SERVICE PASSWORD TIME LOOKUP\n"); +" GROUPMEMBER ADMIN SERVICE PASSWORD TIME LOOKUP GETLOCALSID SETLOCALSID\n"); return -1; } @@ -136,6 +136,8 @@ static int net_usage(int argc, const char **argv) " net group\t\tto manage groups\n"\ " net join\t\tto join a domain\n"\ " net cache\t\tto operate on cache tdb file\n"\ + " net getlocalsid [NAME]\tto get the SID for local name\n"\ + " net setlocalsid SID\tto set the local domain SID\n"\ "\n"\ " net ads \tto run ADS commands\n"\ " net rap \tto run RAP (pre-RPC) commands\n"\ -- cgit From 066b163bde9419d32fe8ffe00c1841107357c138 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 23 Sep 2002 17:50:04 +0000 Subject: Ok, what's this? Samba as a PDC wants to authenticate a user coming in to a native NT member server. If the logoff time in the samlogon reply is set to something else but infinity, the tree connect to the member server comes back with 'bad uid'. In my traces, NT PDC sends 0x7fff.. always. Weird, but true. I would really like others to double-check this. If you have questions regarding the setup, feel free to ask! Thanks! Volker --- source/rpc_server/srv_netlog_nt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/rpc_server/srv_netlog_nt.c b/source/rpc_server/srv_netlog_nt.c index 8f6011826aa..4478729e4d9 100644 --- a/source/rpc_server/srv_netlog_nt.c +++ b/source/rpc_server/srv_netlog_nt.c @@ -712,8 +712,8 @@ NTSTATUS _net_sam_logon(pipes_struct *p, NET_Q_SAM_LOGON *q_u, NET_R_SAM_LOGON * pdb_get_logon_script(sampw), pdb_get_profile_path(sampw), pdb_get_logon_time(sampw), - pdb_get_logoff_time(sampw), - pdb_get_kickoff_time(sampw), + get_time_t_max(), + get_time_t_max(), pdb_get_pass_last_set_time(sampw), pdb_get_pass_can_change_time(sampw), pdb_get_pass_must_change_time(sampw), -- cgit From 0ad19825df318030b1772404570cd993fe49e40a Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 23 Sep 2002 21:24:31 +0000 Subject: Don't uppercase the username and domain in a session setup. --- source/client/client.c | 2 -- source/libsmb/cliconnect.c | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/source/client/client.c b/source/client/client.c index 7afd8f25bc3..eb6b5727608 100644 --- a/source/client/client.c +++ b/source/client/client.c @@ -2758,7 +2758,6 @@ static void remember_query_host(const char *arg, got_pass = True; memset(strchr_m(getenv("USER"),'%')+1,'X',strlen(password)); } - strupper(username); } /* modification to support PASSWD environmental var @@ -2775,7 +2774,6 @@ static void remember_query_host(const char *arg, if (*username == 0 && getenv("LOGNAME")) { pstrcpy(username,getenv("LOGNAME")); - strupper(username); } if (*username == 0) { diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index 298b1e52b61..62acccdfb77 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -317,8 +317,8 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, p = smb_buf(cli->outbuf); memcpy(p,pword,passlen); p += passlen; memcpy(p,ntpword,ntpasslen); p += ntpasslen; - p += clistr_push(cli, p, user, -1, STR_TERMINATE|STR_UPPER); - p += clistr_push(cli, p, workgroup, -1, STR_TERMINATE|STR_UPPER); + p += clistr_push(cli, p, user, -1, STR_TERMINATE); + p += clistr_push(cli, p, workgroup, -1, STR_TERMINATE); p += clistr_push(cli, p, "Unix", -1, STR_TERMINATE); p += clistr_push(cli, p, "Samba", -1, STR_TERMINATE); cli_setup_bcc(cli, p); -- cgit From 05f61b2dc4c120f5303e1a7c85ca8b1409d9a95e Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Tue, 24 Sep 2002 01:12:11 +0000 Subject: Updated in preparation for samba-3.0.0alpha20 --- packaging/Caldera/OpenLinux/samba3.spec.tmpl | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/packaging/Caldera/OpenLinux/samba3.spec.tmpl b/packaging/Caldera/OpenLinux/samba3.spec.tmpl index 7d7da043360..a59ef071b27 100644 --- a/packaging/Caldera/OpenLinux/samba3.spec.tmpl +++ b/packaging/Caldera/OpenLinux/samba3.spec.tmpl @@ -244,25 +244,23 @@ CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="-s" ./configure \ --with-netatalk \ --with-smbwrapper \ --with-libsmbclient \ + --with-acl-support \ --with-sambabook=$(DESTDIR)/usr/share/swat/using_samba # Temp disabled - add later - JHT # --with-pam_smbpass \ # --with-nisplus-home \ -# --with-acl-support \ make all nsswitch/libnss_wins.so nsswitch/libnss_winbind.so torture nsswitch/pam_winbind.so everything (cd tdb; make tdbdump tdbtest tdbtorture tdbtool) -#cd ../examples/VFS -#CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="-s" ./configure \ -# --prefix='$(DESTDIR)/usr' \ -# --localstatedir='$(DESTDIR)/var' \ -# --libdir='$(DESTDIR)%{EtcSamba}' \ -# --sbindir='$(DESTDIR)/usr/sbin' -#make -#cd block -#make +cd ../examples/VFS +CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="-s" ./configure \ + --prefix='$(DESTDIR)/usr' \ + --localstatedir='$(DESTDIR)/var' \ + --libdir='$(DESTDIR)%{EtcSamba}' \ + --sbindir='$(DESTDIR)/usr/sbin' +make %Install %{mkDESTDIR} @@ -304,11 +302,12 @@ for i in tdbdump tdbtest tdbtorture tdbtool do install -m 755 source/tdb/$i $DESTDIR/usr/sbin done + # Add VFS Modules -#for i in audit.so recycle.so block/block.so -#do -# install -m755 $i $DESTDIR/lib/samba -#done +for i in audit.so recycle.so netatalk.so skel.so +do + install -m755 $i $DESTDIR/lib/samba +done #mv $DESTDIR/usr/bin/{make,add,conv}* $DESTDIR/usr/sbin -- cgit From a029d9781d8511eb5eb51568647fbeccde2efed3 Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Tue, 24 Sep 2002 01:37:05 +0000 Subject: Removed call to configure for VFS modules. --- packaging/Caldera/OpenLinux/samba3.spec.tmpl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packaging/Caldera/OpenLinux/samba3.spec.tmpl b/packaging/Caldera/OpenLinux/samba3.spec.tmpl index a59ef071b27..4e9f755edc1 100644 --- a/packaging/Caldera/OpenLinux/samba3.spec.tmpl +++ b/packaging/Caldera/OpenLinux/samba3.spec.tmpl @@ -255,11 +255,11 @@ make all nsswitch/libnss_wins.so nsswitch/libnss_winbind.so torture nsswitch/pam (cd tdb; make tdbdump tdbtest tdbtorture tdbtool) cd ../examples/VFS -CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="-s" ./configure \ - --prefix='$(DESTDIR)/usr' \ - --localstatedir='$(DESTDIR)/var' \ - --libdir='$(DESTDIR)%{EtcSamba}' \ - --sbindir='$(DESTDIR)/usr/sbin' +#CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="-s" ./configure \ +# --prefix='$(DESTDIR)/usr' \ +# --localstatedir='$(DESTDIR)/var' \ +# --libdir='$(DESTDIR)%{EtcSamba}' \ +# --sbindir='$(DESTDIR)/usr/sbin' make %Install -- cgit From d2976b6872c43e3b5bb9a589e8eaff1a08ad5352 Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Tue, 24 Sep 2002 01:59:08 +0000 Subject: Typos! Fix 'em! --- packaging/Caldera/OpenLinux/samba3.spec.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/Caldera/OpenLinux/samba3.spec.tmpl b/packaging/Caldera/OpenLinux/samba3.spec.tmpl index 4e9f755edc1..43e60a2ac09 100644 --- a/packaging/Caldera/OpenLinux/samba3.spec.tmpl +++ b/packaging/Caldera/OpenLinux/samba3.spec.tmpl @@ -306,7 +306,7 @@ done # Add VFS Modules for i in audit.so recycle.so netatalk.so skel.so do - install -m755 $i $DESTDIR/lib/samba + install -m755 examples/VFS/$i $DESTDIR/lib/samba done #mv $DESTDIR/usr/bin/{make,add,conv}* $DESTDIR/usr/sbin -- cgit From ef970a764eb97893ff2090f7cbf2f2ec06911d0f Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 24 Sep 2002 06:44:37 +0000 Subject: Make sure that Alfred Perlstein's changes get into head as smbprint and that the old one becomes smbprint.old. We still need to hack smbprint some more to make sure that we can pass the username and password in a file rather than on the command line where local hackers can see it. --- examples/printing/smbprint | 104 ++++++++++++++++++++++++++++++----------- examples/printing/smbprint.old | 95 +++++++++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+), 27 deletions(-) create mode 100755 examples/printing/smbprint.old diff --git a/examples/printing/smbprint b/examples/printing/smbprint index 5a00a2a8aa8..68bd66a13fe 100755 --- a/examples/printing/smbprint +++ b/examples/printing/smbprint @@ -25,6 +25,11 @@ # # -t now causes translate to be used when sending files # +# Further modifications by Alfred Perlstein to fix some problems and +# improve the quality of the code (3-Dec-2001). +# +# More hacking by Richard Sharpe to improve portability. 9-Dec-2001. +# # In order for this to work the /etc/printcap entry must include an # accounting file (af=...): # @@ -46,12 +51,10 @@ # service=CJET_371 # password="" -# -# Debugging log file, change to /dev/null if you like. -# -logfile=/tmp/smb-print.log -# logfile=/dev/null +#smbclient=/usr/pkg/bin/smbclient +# Assume that smbclient will be in the same place as smbprint +smbclient="`dirname $0`/smbclient" # # The last parameter to the filter is the accounting file name. @@ -67,29 +70,76 @@ config_file=$spool_dir/.config # server # service # password -eval `cat $config_file` +# username (optional) +# IP (optional) +# debug (optional) +# debugsmb (optional) +# debugfile (optional) +. $config_file + +if [ "x$password" = "x" ] ; then + password="-N" +fi -while getopts t c; do - case $c in - t) - TRANS=1 - ;; +if [ "x$username" == "x" ] ; then + username="$server"; +fi - '?') # Bad parameters, ignore it ... - ;; - esac +while test $# -gt 0; do + case "$1" in + -t) + TRANS=1 + ;; + + *) # Bad Parameters, ignore them ... + ;; + esac + shift done + +command="print - ;" +if [ $TRANS -eq 1 ]; then + command="translate;$command"; +fi + +debugfile="/tmp/smb-print.log" +if [ "x$debug" = "x" ] ; then + debugfile=/dev/null debugargs= +else + if [ $debug -eq 0 ] ; then + debugfile=/dev/null debugargs= + else + set -x; exec >>$debugfile 2>&1 + debugargs="$debugfile." + #[ "x$debugsmb" == "x" ] || debugargs="$debugargs -d $debugsmb" + fi +fi + +if [ "x$smbconf" != "x" ]; then + + smbconf="-s $smbconf" + +fi + +if [ "x$IP" != "x" ]; then + + IP="-I $IP" + +fi + +if [ "x$debugargs" != "x" ]; then + + debugargs="-l $debugargs" + +fi + +$smbclient \ + "\\\\$server\\$service" \ + $password \ + $smbconf \ + $IP \ + $debugargs \ + -U $username \ + -P \ + -c "$command" # -# Some debugging help, change the >> to > if you want to same space. -# -echo "server $server, service $service" >> $logfile - -( -# NOTE You may wish to add the line `echo translate' if you want automatic -# CR/LF translation when printing. - if [ $TRANS -eq 1 ]; then - echo translate - fi - echo "print -" - cat -) | /usr/local/samba/bin/smbclient "\\\\$server\\$service" $password -U $server -N -P >> $logfile diff --git a/examples/printing/smbprint.old b/examples/printing/smbprint.old new file mode 100755 index 00000000000..5a00a2a8aa8 --- /dev/null +++ b/examples/printing/smbprint.old @@ -0,0 +1,95 @@ +#!/bin/sh + +# This script is an input filter for printcap printing on a unix machine. It +# uses the smbclient program to print the file to the specified smb-based +# server and service. +# For example you could have a printcap entry like this +# +# smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint +# +# which would create a unix printer called "smb" that will print via this +# script. You will need to create the spool directory /usr/spool/smb with +# appropriate permissions and ownerships for your system. + +# Set these to the server and service you wish to print to +# In this example I have a WfWg PC called "lapland" that has a printer +# exported called "printer" with no password. + +# +# Script further altered by hamiltom@ecnz.co.nz (Michael Hamilton) +# so that the server, service, and password can be read from +# a /usr/var/spool/lpd/PRINTNAME/.config file. +# +# Script further modified by Richard Sharpe to fix some things. +# Get rid of the -x on the first line, and add parameters +# +# -t now causes translate to be used when sending files +# +# In order for this to work the /etc/printcap entry must include an +# accounting file (af=...): +# +# cdcolour:\ +# :cm=CD IBM Colorjet on 6th:\ +# :sd=/var/spool/lpd/cdcolour:\ +# :af=/var/spool/lpd/cdcolour/acct:\ +# :if=/usr/local/etc/smbprint:\ +# :mx=0:\ +# :lp=/dev/null: +# +# The /usr/var/spool/lpd/PRINTNAME/.config file should contain: +# server=PC_SERVER +# service=PR_SHARENAME +# password="password" +# +# E.g. +# server=PAULS_PC +# service=CJET_371 +# password="" + +# +# Debugging log file, change to /dev/null if you like. +# +logfile=/tmp/smb-print.log +# logfile=/dev/null + + +# +# The last parameter to the filter is the accounting file name. +# Extract the directory name from the file name. +# Concat this with /.config to get the config file. +# +TRANS=0 +eval acct_file=\${$#} +spool_dir=`dirname $acct_file` +config_file=$spool_dir/.config + +# Should read the following variables set in the config file: +# server +# service +# password +eval `cat $config_file` + +while getopts t c; do + case $c in + t) + TRANS=1 + ;; + + '?') # Bad parameters, ignore it ... + ;; + esac +done +# +# Some debugging help, change the >> to > if you want to same space. +# +echo "server $server, service $service" >> $logfile + +( +# NOTE You may wish to add the line `echo translate' if you want automatic +# CR/LF translation when printing. + if [ $TRANS -eq 1 ]; then + echo translate + fi + echo "print -" + cat +) | /usr/local/samba/bin/smbclient "\\\\$server\\$service" $password -U $server -N -P >> $logfile -- cgit From f0d7ac9feb5844c93789344285b1d66f480209ba Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Tue, 24 Sep 2002 06:50:11 +0000 Subject: This is a first working version of net rpc vampire. First do a net rpc getsid, then join as a BDC, and then watch net rpc vampire suck out the good stuff out of a PDC :-). It's not perfect, but it does quite a bit for me. Watch out for more. Volker --- source/utils/net_rpc_samsync.c | 276 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 264 insertions(+), 12 deletions(-) diff --git a/source/utils/net_rpc_samsync.c b/source/utils/net_rpc_samsync.c index 95a813dcfde..202d5b5c88e 100644 --- a/source/utils/net_rpc_samsync.c +++ b/source/utils/net_rpc_samsync.c @@ -23,6 +23,8 @@ #include "includes.h" #include "../utils/net.h" +extern DOM_SID global_sid_Builtin; + static void display_group_mem_info(uint32 rid, SAM_GROUP_MEM_INFO *g) { int i; @@ -191,6 +193,7 @@ sam_account_from_delta(SAM_ACCOUNT *account, SAM_ACCOUNT_INFO *delta) { DOM_SID sid; fstring s; + uchar lm_passwd[16], nt_passwd[16]; /* Username, fullname, home dir, dir drive, logon script, acct desc, workstations, profile. */ @@ -235,9 +238,8 @@ sam_account_from_delta(SAM_ACCOUNT *account, SAM_ACCOUNT_INFO *delta) /* Logon and password information */ pdb_set_logon_time(account, nt_time_to_unix(&delta->logon_time), True); - pdb_set_logoff_time(account, nt_time_to_unix(&delta->logoff_time), + pdb_set_logoff_time(account, nt_time_to_unix(&delta->logoff_time), True); - pdb_set_logon_divs(account, delta->logon_divs); /* TODO: logon hours */ @@ -247,6 +249,14 @@ sam_account_from_delta(SAM_ACCOUNT *account, SAM_ACCOUNT_INFO *delta) pdb_set_pass_last_set_time( account, nt_time_to_unix(&delta->pwd_last_set_time)); + pdb_set_kickoff_time(account, get_time_t_max(), True); + + /* Decode hashes from password hash */ + sam_pwd_hash(delta->user_rid, delta->pass.buf_lm_pwd, lm_passwd, 0); + sam_pwd_hash(delta->user_rid, delta->pass.buf_nt_pwd, nt_passwd, 0); + pdb_set_nt_passwd(account, nt_passwd); + pdb_set_lanman_passwd(account, lm_passwd); + /* TODO: account expiry time */ pdb_set_acct_ctrl(account, delta->acb_info); @@ -260,6 +270,8 @@ fetch_account_info(uint32 rid, SAM_ACCOUNT_INFO *delta) fstring account; pstring add_script; SAM_ACCOUNT *sam_account=NULL; + GROUP_MAP map; + struct group *grp; fstrcpy(account, unistr2_static(&delta->uni_acct_name)); d_printf("Creating account: %s\n", account); @@ -270,6 +282,8 @@ fetch_account_info(uint32 rid, SAM_ACCOUNT_INFO *delta) if (!pdb_getsampwnam(sam_account, account)) { struct passwd *pw; + pdb_free_sam(&sam_account); + /* Create appropriate user */ if (delta->acb_info & ACB_NORMAL) { pstrcpy(add_script, lp_adduser_script()); @@ -308,7 +322,29 @@ fetch_account_info(uint32 rid, SAM_ACCOUNT_INFO *delta) } sam_account_from_delta(sam_account, delta); - pdb_add_sam_account(sam_account); + + if (!pdb_add_sam_account(sam_account)) { + DEBUG(1, ("SAM Account for %s already existed, updating\n", + account)); + pdb_update_sam_account(sam_account); + } + + if (!get_group_map_from_sid(*pdb_get_group_sid(sam_account), + &map, False)) { + DEBUG(0, ("Primary group of %s has no mapping!\n", + pdb_get_username(sam_account))); + pdb_free_sam(&sam_account); + return NT_STATUS_NO_SUCH_GROUP; + } + + if (!(grp = getgrgid(map.gid))) { + DEBUG(0, ("Could not find unix group %d\n", map.gid)); + pdb_free_sam(&sam_account); + return NT_STATUS_NO_SUCH_GROUP; + } + + smb_set_primary_group(grp->gr_name, pdb_get_username(sam_account)); + pdb_free_sam(&sam_account); return NT_STATUS_OK; } @@ -318,7 +354,7 @@ fetch_group_info(uint32 rid, SAM_GROUP_INFO *delta) { fstring name; fstring comment; - struct group *grp; + struct group *grp = NULL; DOM_SID group_sid; fstring sid_string; GROUP_MAP map; @@ -339,10 +375,24 @@ fetch_group_info(uint32 rid, SAM_GROUP_INFO *delta) sid_append_rid(&group_sid, rid); sid_to_string(sid_string, &group_sid); - /* Add the group mapping */ if (get_group_map_from_sid(group_sid, &map, False)) { - /* Don't TDB_INSERT, mapping exists */ - flag = 0; + grp = getgrgid(map.gid); + flag = 0; /* Don't TDB_INSERT, mapping exists */ + } + + if (grp == NULL) + { + gid_t new_gid; + /* No group found from mapping, find it from its name. */ + if ((grp = getgrnam(name)) == NULL) { + /* No appropriate group found, create one */ + d_printf("Creating unix group: '%s'\n", name); + if (smb_create_group(name, &new_gid) != 0) + return NT_STATUS_ACCESS_DENIED; + } + + if ((grp = getgrgid(new_gid)) == NULL) + return NT_STATUS_ACCESS_DENIED; } map.gid = grp->gr_gid; @@ -359,8 +409,193 @@ fetch_group_info(uint32 rid, SAM_GROUP_INFO *delta) return NT_STATUS_OK; } +static NTSTATUS +fetch_group_mem_info(uint32 rid, SAM_GROUP_MEM_INFO *delta) +{ + int i; + TALLOC_CTX *t = NULL; + char **nt_members = NULL; + char **unix_members; + DOM_SID group_sid; + GROUP_MAP map; + struct group *grp; + + if (delta->num_members == 0) { + return NT_STATUS_OK; + } + + sid_copy(&group_sid, get_global_sam_sid()); + sid_append_rid(&group_sid, rid); + + if (!get_domain_group_from_sid(group_sid, &map, False)) { + DEBUG(0, ("Could not find global group %d\n", rid)); + return NT_STATUS_NO_SUCH_GROUP; + } + + if (!(grp = getgrgid(map.gid))) { + DEBUG(0, ("Could not find unix group %d\n", map.gid)); + return NT_STATUS_NO_SUCH_GROUP; + } + + d_printf("Group members of %s: ", grp->gr_name); + + if (!(t = talloc_init())) { + DEBUG(0, ("could not talloc_init\n")); + return NT_STATUS_NO_MEMORY; + } + + nt_members = talloc_zero(t, sizeof(char *) * delta->num_members); + + for (i=0; inum_members; i++) { + NTSTATUS nt_status; + SAM_ACCOUNT *member = NULL; + DOM_SID member_sid; + + if (!NT_STATUS_IS_OK(nt_status = pdb_init_sam_talloc(t, &member))) { + talloc_destroy(t); + return nt_status; + } + + sid_copy(&member_sid, get_global_sam_sid()); + sid_append_rid(&member_sid, delta->rids[i]); + + if (!pdb_getsampwsid(member, &member_sid)) { + DEBUG(1, ("Found bogus group member: %d\n", + delta->rids[i])); + pdb_free_sam(&member); + continue; + } + + if (pdb_get_group_rid(member) == rid) { + d_printf("%s(primary),", pdb_get_username(member)); + pdb_free_sam(&member); + continue; + } + + d_printf("%s,", pdb_get_username(member)); + nt_members[i] = talloc_strdup(t, pdb_get_username(member)); + pdb_free_sam(&member); + } + + d_printf("\n"); + + unix_members = grp->gr_mem; + + while (*unix_members) { + BOOL is_nt_member = False; + for (i=0; inum_members; i++) { + if (nt_members[i] == NULL) { + /* This was a primary group */ + continue; + } + + if (strcmp(*unix_members, nt_members[i]) == 0) { + is_nt_member = True; + break; + } + } + if (!is_nt_member) { + /* We look at a unix group member that is not + an nt group member. So, remove it. NT is + boss here. */ + smb_delete_user_group(grp->gr_name, *unix_members); + } + unix_members += 1; + } + + for (i=0; inum_members; i++) { + BOOL is_unix_member = False; + + if (nt_members[i] == NULL) { + /* This was the primary group */ + continue; + } + + unix_members = grp->gr_mem; + + while (*unix_members) { + if (strcmp(*unix_members, nt_members[i]) == 0) { + is_unix_member = True; + break; + } + unix_members += 1; + } + + if (!is_unix_member) { + /* We look at a nt group member that is not a + unix group member currently. So, add the nt + group member. */ + smb_add_user_group(grp->gr_name, nt_members[i]); + } + } + + talloc_destroy(t); + return NT_STATUS_OK; +} + +static NTSTATUS fetch_alias_info(uint32 rid, SAM_ALIAS_INFO *delta, + DOM_SID dom_sid) +{ + fstring name; + fstring comment; + struct group *grp = NULL; + DOM_SID alias_sid; + fstring sid_string; + GROUP_MAP map; + int insert_flag = TDB_INSERT; + + unistr2_to_ascii(name, &delta->uni_als_name, sizeof(name)-1); + unistr2_to_ascii(comment, &delta->uni_als_desc, sizeof(comment)-1); + + /* Find out whether the group is already mapped */ + sid_copy(&alias_sid, &dom_sid); + sid_append_rid(&alias_sid, rid); + sid_to_string(sid_string, &alias_sid); + + if (get_group_map_from_sid(alias_sid, &map, False)) { + grp = getgrgid(map.gid); + insert_flag = 0; /* Don't TDB_INSERT, mapping exists */ + } + + if (grp == NULL) { + gid_t new_gid; + /* No group found from mapping, find it from its name. */ + if ((grp = getgrnam(name)) == NULL) { + /* No appropriate group found, create one */ + d_printf("Creating unix group: '%s'\n", name); + if (smb_create_group(name, &new_gid) != 0) + return NT_STATUS_ACCESS_DENIED; + } + + if ((grp = getgrgid(new_gid)) == NULL) + return NT_STATUS_ACCESS_DENIED; + } + + map.gid = grp->gr_gid; + map.sid = alias_sid; + map.sid_name_use = SID_NAME_ALIAS; + + fstrcpy(map.nt_name, name); + fstrcpy(map.comment, comment); + + map.priv_set.count = 0; + map.priv_set.set = NULL; + + add_mapping_entry(&map, insert_flag); + + return NT_STATUS_OK; +} + +static NTSTATUS +fetch_alias_mem(uint32 rid, SAM_ALIAS_MEM_INFO *delta, DOM_SID dom_sid) +{ + + return NT_STATUS_OK; +} + static void -fetch_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta) +fetch_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta, + DOM_SID dom_sid) { switch(hdr_delta->type) { case SAM_DELTA_ACCOUNT_INFO: @@ -371,6 +606,18 @@ fetch_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta) fetch_group_info(hdr_delta->target_rid, &delta->group_info); break; + case SAM_DELTA_GROUP_MEM: + fetch_group_mem_info(hdr_delta->target_rid, + &delta->grp_mem_info); + break; + case SAM_DELTA_ALIAS_INFO: + fetch_alias_info(hdr_delta->target_rid, + &delta->alias_info, dom_sid); + break; + case SAM_DELTA_ALIAS_MEM: + fetch_alias_mem(hdr_delta->target_rid, + &delta->als_mem_info, dom_sid); + break; default: d_printf("Unknown delta record type %d\n", hdr_delta->type); break; @@ -378,7 +625,8 @@ fetch_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta) } static void -fetch_database(struct cli_state *cli, unsigned db_type, DOM_CRED *ret_creds) +fetch_database(struct cli_state *cli, unsigned db_type, DOM_CRED *ret_creds, + DOM_SID dom_sid) { unsigned last_rid = -1; NTSTATUS result; @@ -403,7 +651,7 @@ fetch_database(struct cli_state *cli, unsigned db_type, DOM_CRED *ret_creds) ret_creds); last_rid = 0; for (i = 0; i < num_deltas; i++) { - fetch_sam_entry(&hdr_deltas[i], &deltas[i]); + fetch_sam_entry(&hdr_deltas[i], &deltas[i], dom_sid); last_rid = hdr_deltas[i].target_rid; } } while (last_rid && NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES)); @@ -419,6 +667,7 @@ int rpc_vampire(int argc, const char **argv) uchar trust_password[16]; DOM_CRED ret_creds; uint32 neg_flags = 0x000001ff; + DOM_SID dom_sid; ZERO_STRUCT(ret_creds); @@ -446,8 +695,11 @@ int rpc_vampire(int argc, const char **argv) goto fail; } - fetch_database(cli, SAM_DATABASE_DOMAIN, &ret_creds); - fetch_database(cli, SAM_DATABASE_BUILTIN, &ret_creds); + dom_sid = *get_global_sam_sid(); + fetch_database(cli, SAM_DATABASE_DOMAIN, &ret_creds, dom_sid); + + sid_copy(&dom_sid, &global_sid_Builtin); + fetch_database(cli, SAM_DATABASE_BUILTIN, &ret_creds, dom_sid); /* Currently we crash on PRIVS somewhere in unmarshalling */ /* Dump_database(cli, SAM_DATABASE_PRIVS, &ret_creds); */ -- cgit From 50d2527eed0eb26c16f2f7e28badbf08d771380e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 24 Sep 2002 20:18:39 +0000 Subject: - Don't put pointer to sam_domain_handle in sam_methods but single domainsid and domainname - Allocate sam_methods, set domain_sid, domain_name and backend_name in make_sam_methods_backend_entry instead of in the backend - Remove sam_context and domain_sid pointers from the sam_init_function - we don't need those arguments anymore since they're available in sam_methods as well --- examples/sam/sam_skel.c | 114 ++++++++++++++++++++++------------------------- source/include/sam.h | 5 ++- source/sam/interface.c | 39 +++++++++------- source/sam/sam_plugin.c | 6 +-- source/torture/cmd_sam.c | 102 ++++++++++++++++++++++-------------------- source/torture/samtest.c | 22 ++++----- source/torture/samtest.h | 9 +++- 7 files changed, 156 insertions(+), 141 deletions(-) diff --git a/examples/sam/sam_skel.c b/examples/sam/sam_skel.c index a3b8f13391d..da3a3758947 100644 --- a/examples/sam/sam_skel.c +++ b/examples/sam/sam_skel.c @@ -3,6 +3,7 @@ this is a skeleton for SAM backend modules. Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Jelmer Vernooij 2002 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,29 +30,28 @@ static int sam_skel_debug_level = DBGC_SAM; /* define the version of the SAM interface */ SAM_MODULE_VERSIONING_MAGIC - /* General API */ -NTSTATUS sam_skel_get_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) +NTSTATUS sam_skel_get_sec_desc(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_set_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) +NTSTATUS sam_skel_set_sec_desc(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_lookup_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type) +NTSTATUS sam_skel_lookup_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_lookup_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type) +NTSTATUS sam_skel_lookup_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -60,13 +60,13 @@ NTSTATUS sam_skel_lookup_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN /* Domain API */ -NTSTATUS sam_skel_update_domain(const SAM_METHODS *sam_method, const SAM_DOMAIN_HANDLE *domain) +NTSTATUS sam_skel_update_domain(const SAM_METHODS *sam_methods, const SAM_DOMAIN_HANDLE *domain) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_domain_handle(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, SAM_DOMAIN_HANDLE **domain) +NTSTATUS sam_skel_get_domain_handle(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, SAM_DOMAIN_HANDLE **domain) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -75,44 +75,44 @@ NTSTATUS sam_skel_get_domain_handle(const SAM_METHODS *sam_method, const NT_USER /* Account API */ -NTSTATUS sam_skel_create_account(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *group_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_skel_create_account(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *group_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_add_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) +NTSTATUS sam_skel_add_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_update_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) +NTSTATUS sam_skel_update_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_delete_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) +NTSTATUS sam_skel_delete_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_enum_accounts(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) +NTSTATUS sam_skel_enum_accounts(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_account_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_skel_get_account_by_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_account_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_skel_get_account_by_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -121,126 +121,118 @@ NTSTATUS sam_skel_get_account_by_name(const SAM_METHODS *sam_method, const NT_US /* Group API */ -NTSTATUS sam_skel_create_group(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) +NTSTATUS sam_skel_create_group(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_add_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_skel_add_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_update_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_skel_update_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_delete_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_skel_delete_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_enum_groups(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_skel_enum_groups(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_group_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) +NTSTATUS sam_skel_get_group_by_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_group_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group) +NTSTATUS sam_skel_get_group_by_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_add_member_to_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +NTSTATUS sam_skel_add_member_to_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_delete_member_from_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +NTSTATUS sam_skel_delete_member_from_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_enum_groupmembers(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) +NTSTATUS sam_skel_enum_groupmembers(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_groups_of_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_skel_get_groups_of_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const DOM_SID *domain, const char *module_params) +NTSTATUS sam_init(SAM_METHODS *sam_methods, const char *module_params) { - NTSTATUS nt_status; - - if (!NT_STATUS_IS_OK(nt_status = make_sam_methods(sam_context->mem_ctx, sam_method))) { - return nt_status; - } - - (*sam_method)->backendname = "sam_skel"; - /* Functions your SAM module doesn't provide should be set * to NULL */ - (*sam_method)->sam_get_sec_desc = sam_skel_get_sec_desc; - (*sam_method)->sam_set_sec_desc = sam_skel_set_sec_desc; + sam_methods->sam_get_sec_desc = sam_skel_get_sec_desc; + sam_methods->sam_set_sec_desc = sam_skel_set_sec_desc; - (*sam_method)->sam_lookup_sid = sam_skel_lookup_sid; - (*sam_method)->sam_lookup_name = sam_skel_lookup_name; + sam_methods->sam_lookup_sid = sam_skel_lookup_sid; + sam_methods->sam_lookup_name = sam_skel_lookup_name; /* Domain API */ - (*sam_method)->sam_update_domain = sam_skel_update_domain; - (*sam_method)->sam_get_domain_handle = sam_skel_get_domain_handle; + sam_methods->sam_update_domain = sam_skel_update_domain; + sam_methods->sam_get_domain_handle = sam_skel_get_domain_handle; /* Account API */ - (*sam_method)->sam_create_account = sam_skel_create_account; - (*sam_method)->sam_add_account = sam_skel_add_account; - (*sam_method)->sam_update_account = sam_skel_update_account; - (*sam_method)->sam_delete_account = sam_skel_delete_account; - (*sam_method)->sam_enum_accounts = sam_skel_enum_accounts; + sam_methods->sam_create_account = sam_skel_create_account; + sam_methods->sam_add_account = sam_skel_add_account; + sam_methods->sam_update_account = sam_skel_update_account; + sam_methods->sam_delete_account = sam_skel_delete_account; + sam_methods->sam_enum_accounts = sam_skel_enum_accounts; - (*sam_method)->sam_get_account_by_sid = sam_skel_get_account_by_sid; - (*sam_method)->sam_get_account_by_name = sam_skel_get_account_by_name; + sam_methods->sam_get_account_by_sid = sam_skel_get_account_by_sid; + sam_methods->sam_get_account_by_name = sam_skel_get_account_by_name; /* Group API */ - (*sam_method)->sam_create_group = sam_skel_create_group; - (*sam_method)->sam_add_group = sam_skel_add_group; - (*sam_method)->sam_update_group = sam_skel_update_group; - (*sam_method)->sam_delete_group = sam_skel_delete_group; - (*sam_method)->sam_enum_groups = sam_skel_enum_groups; - (*sam_method)->sam_get_group_by_sid = sam_skel_get_group_by_sid; - (*sam_method)->sam_get_group_by_name = sam_skel_get_group_by_name; + sam_methods->sam_create_group = sam_skel_create_group; + sam_methods->sam_add_group = sam_skel_add_group; + sam_methods->sam_update_group = sam_skel_update_group; + sam_methods->sam_delete_group = sam_skel_delete_group; + sam_methods->sam_enum_groups = sam_skel_enum_groups; + sam_methods->sam_get_group_by_sid = sam_skel_get_group_by_sid; + sam_methods->sam_get_group_by_name = sam_skel_get_group_by_name; - (*sam_method)->sam_add_member_to_group = sam_skel_add_member_to_group; - (*sam_method)->sam_delete_member_from_group = sam_skel_delete_member_from_group; - (*sam_method)->sam_enum_groupmembers = sam_skel_enum_groupmembers; + sam_methods->sam_add_member_to_group = sam_skel_add_member_to_group; + sam_methods->sam_delete_member_from_group = sam_skel_delete_member_from_group; + sam_methods->sam_enum_groupmembers = sam_skel_enum_groupmembers; - (*sam_method)->sam_get_groups_of_sid = sam_skel_get_groups_of_sid; + sam_methods->sam_get_groups_of_sid = sam_skel_get_groups_of_sid; - (*sam_method)->free_private_data = NULL; + sam_methods->free_private_data = NULL; sam_skel_debug_level = debug_add_class("sam_skel"); @@ -250,9 +242,9 @@ NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, cons } else DEBUG(2, ("sam_skel: Debug class number of 'sam_skel': %d\n", sam_skel_debug_level)); if(module_params) - DEBUG(0, ("Starting 'sam_skel' with parameters '%s' for domain %s\n", module_params, sid_string_static(domain))); + DEBUG(0, ("Starting 'sam_skel' with parameters '%s' for domain %s\n", module_params, sam_methods->domain_name)); else - DEBUG(0, ("Starting 'sam_skel' for domain %s without paramters\n", sid_string_static(domain))); + DEBUG(0, ("Starting 'sam_skel' for domain %s without paramters\n", sam_methods->domain_name)); return NT_STATUS_OK; } diff --git a/source/include/sam.h b/source/include/sam.h index ca1a84fd979..4d18ec61b96 100644 --- a/source/include/sam.h +++ b/source/include/sam.h @@ -216,7 +216,8 @@ typedef struct sam_methods struct sam_methods *next; struct sam_methods *prev; const char *backendname; - struct sam_domain_handle *domain; + const char *domain_name; + DOM_SID domain_sid; void *private_data; /* General API */ @@ -262,7 +263,7 @@ typedef struct sam_methods void (*free_private_data)(void **); } SAM_METHODS; -typedef NTSTATUS (*sam_init_function)(const SAM_CONTEXT *, SAM_METHODS **, const DOM_SID *domain, const char *); +typedef NTSTATUS (*sam_init_function)(SAM_METHODS *, const char *); struct sam_init_function_entry { char *module_name; diff --git a/source/sam/interface.c b/source/sam/interface.c index 6668e3848d0..6e6902ab3ce 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -54,7 +54,7 @@ NTSTATUS sam_get_methods_by_sid(const SAM_CONTEXT *context, SAM_METHODS **sam_me tmp_methods = context->methods; while (tmp_methods) { - if (sid_equal(domainsid, &(tmp_methods->domain->private.sid))) + if (sid_equal(domainsid, &(tmp_methods->domain_sid))) { (*sam_method) = tmp_methods; return NT_STATUS_OK; @@ -79,7 +79,7 @@ NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_m tmp_methods = context->methods; while (tmp_methods) { - if (strcmp(domainname, tmp_methods->domain->private.name)) + if (strcmp(domainname, tmp_methods->domain_name)) { (*sam_method) = tmp_methods; return NT_STATUS_OK; @@ -162,7 +162,7 @@ NTSTATUS context_sam_lookup_name(const SAM_CONTEXT *context, const NT_USER_TOKEN if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_name(tmp_methods, access_token, name, sid, type))) { DEBUG(4,("sam_lookup_name for %s\\%s in backend %s failed\n", - tmp_methods->domain->private.name, name, tmp_methods->backendname)); + tmp_methods->domain_name, name, tmp_methods->backendname)); return nt_status; } @@ -278,9 +278,9 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE } while (tmp_methods) { - DEBUGADD(7,(" [%d] %s: %s\n", i, tmp_methods->domain->private.name, sid_string_static(&tmp_methods->domain->private.sid))); - sid_copy(domains[i],&tmp_methods->domain->private.sid); - if(asprintf(&(*domain_names[i]),"%s",tmp_methods->domain->private.name) < 0) { + DEBUGADD(7,(" [%d] %s: %s\n", i, tmp_methods->domain_name, sid_string_static(&tmp_methods->domain_sid))); + sid_copy(domains[i],&tmp_methods->domain_sid); + if(asprintf(&(*domain_names[i]),"%s",tmp_methods->domain_name) < 0) { DEBUG(0,("context_sam_enum_domains: asprintf failed")); SAFE_FREE((*domains)); SAFE_FREE((*domain_names)); @@ -321,8 +321,8 @@ NTSTATUS context_sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOK tmp_methods= context->methods; while (tmp_methods) { - if (strcmp(domain, tmp_methods->domain->private.name) == 0) { - sid_copy((*domainsid), &tmp_methods->domain->private.sid); + if (strcmp(domain, tmp_methods->domain_name) == 0) { + sid_copy((*domainsid), &tmp_methods->domain_sid); return NT_STATUS_OK; } tmp_methods= tmp_methods->next; @@ -495,7 +495,7 @@ NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOK if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_accounts(tmp_methods, access_token, acct_ctrl, account_count, accounts))) { DEBUG(4,("sam_enum_accounts for domain %s in backend %s failed\n", - tmp_methods->domain->private.name, tmp_methods->backendname)); + tmp_methods->domain_name, tmp_methods->backendname)); return nt_status; } @@ -701,7 +701,7 @@ NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groups(tmp_methods, access_token, group_ctrl, groups_count, groups))) { DEBUG(4,("sam_enum_groups for domain %s in backend %s failed\n", - tmp_methods->domain->private.name, tmp_methods->backendname)); + tmp_methods->domain_name, tmp_methods->backendname)); return nt_status; } @@ -969,13 +969,23 @@ static NTSTATUS make_backend_entry(SAM_BACKEND_ENTRY *backend_entry, char *sam_b create sam_methods struct based on sam_backend_entry *****************************************************************/ -static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS **methods, SAM_BACKEND_ENTRY *backend_entry) +static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS **methods_ptr, SAM_BACKEND_ENTRY *backend_entry) { NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; + SAM_METHODS *methods; int i; - + DEBUG(5,("make_sam_methods_backend_entry: %d\n", __LINE__)); + if (!NT_STATUS_IS_OK(nt_status = make_sam_methods(context->mem_ctx, methods_ptr))) { + return nt_status; + } + + methods = *methods_ptr; + methods->backendname = talloc_strdup(context->mem_ctx, backend_entry->module_name); + methods->domain_name = talloc_strdup(context->mem_ctx, backend_entry->domain_name); + sid_copy(&methods->domain_sid, backend_entry->domain_sid); + methods->parent = context; DEBUG(5,("Attempting to find sam backend %s\n", backend_entry->module_name)); for (i = 0; builtin_sam_init_functions[i].module_name; i++) @@ -984,7 +994,7 @@ static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS { DEBUG(5,("Found sam backend %s (at pos %d)\n", backend_entry->module_name, i)); DEBUGADD(5,("initialising it with options=%s for domain %s\n", backend_entry->module_params, sid_string_static(backend_entry->domain_sid))); - nt_status = builtin_sam_init_functions[i].init(context, methods, backend_entry->domain_sid, backend_entry->module_params); + nt_status = builtin_sam_init_functions[i].init(methods, backend_entry->module_params); if (NT_STATUS_IS_OK(nt_status)) { DEBUG(5,("sam backend %s has a valid init\n", backend_entry->module_name)); } else { @@ -1030,7 +1040,6 @@ static NTSTATUS sam_context_check_default_backends(SAM_CONTEXT *context) return ntstatus; } - methods->parent = context; DLIST_ADD_END(context->methods, methods, tmpmethods); } else if (!NT_STATUS_IS_OK(ntstatus)) { @@ -1056,7 +1065,6 @@ static NTSTATUS sam_context_check_default_backends(SAM_CONTEXT *context) return ntstatus; } - methods->parent = context; DLIST_ADD_END(context->methods, methods, tmpmethods); } else if (!NT_STATUS_IS_OK(ntstatus)) { DEBUG(2, ("sam_get_methods_by_sid failed for BUILTIN\n")); @@ -1138,7 +1146,6 @@ NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **sam_backends_param) free_sam_context(context); return nt_status; } - curmethods->parent = *context; DLIST_ADD_END((*context)->methods, curmethods, tmpmethods); } diff --git a/source/sam/sam_plugin.c b/source/sam/sam_plugin.c index 9d2ee937efa..fd26c4b8d3c 100644 --- a/source/sam/sam_plugin.c +++ b/source/sam/sam_plugin.c @@ -25,7 +25,7 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_SAM -NTSTATUS sam_init_plugin(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const DOM_SID *domain, const char *module_params) +NTSTATUS sam_init_plugin(SAM_METHODS *sam_methods, const char *module_params) { void *dl_handle; char *plugin_params, *plugin_name, *p; @@ -74,6 +74,6 @@ NTSTATUS sam_init_plugin(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_metho return NT_STATUS_UNSUCCESSFUL; } - DEBUG(5, ("Starting sam plugin %s with parameters %s for domain %s\n", plugin_name, plugin_params, sid_string_static(domain))); - return plugin_init(sam_context, sam_method, domain, plugin_params); + DEBUG(5, ("Starting sam plugin %s with parameters %s for domain %s\n", plugin_name, plugin_params, sam_methods->domain_name)); + return plugin_init(sam_methods, plugin_params); } diff --git a/source/torture/cmd_sam.c b/source/torture/cmd_sam.c index a2835ed69af..2b4c21e501e 100644 --- a/source/torture/cmd_sam.c +++ b/source/torture/cmd_sam.c @@ -22,27 +22,7 @@ #include "includes.h" #include "samtest.h" -#if 0 -static struct cmd_popt_user_opts [] = { - { NULL, 0, POPT_ARG_CALLBACK, cmd_parse_user_opts }, - {"username", 'u', POPT_ARG_STRING, NULL, 1, "Username to use"}, -}; - -static void cmd_parse_user_opts(poptContext con, - enum poptCallbackReason reason, - const struct poptOption *opt, - const char *arg, const void *data) -{ - SAM_ACCOUNT_HANDLE *account = (SAM_ACCOUNT_HANDLE *)data; - switch(opt->val) { - case 'u': - sam_set_account_username(account, arg); - break; - } -} -#endif - -static NTSTATUS cmd_load_module(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_load_module(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { char *plugin_arg[2]; NTSTATUS status; @@ -54,132 +34,158 @@ static NTSTATUS cmd_load_module(struct sam_context *c, TALLOC_CTX *mem_ctx, int asprintf(&plugin_arg[0], "plugin:%s", argv[1]); plugin_arg[1] = NULL; - if(!NT_STATUS_IS_OK(status = make_sam_context_list(&c, plugin_arg))) - { + if(!NT_STATUS_IS_OK(status = make_sam_context_list(&st->context, plugin_arg))) { + free(plugin_arg[0]); return status; } + + free(plugin_arg[0]); + printf("load: ok\n"); return NT_STATUS_OK; } -static NTSTATUS cmd_get_sec_desc(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_get_sec_desc(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_set_sec_desc(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_set_sec_desc(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_sid(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { - return NT_STATUS_NOT_IMPLEMENTED; + char *name; + uint32 type; + NTSTATUS status; + DOM_SID sid; + if(argc != 2) { + printf("Usage: lookup_sid \n"); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!string_to_sid(&sid, argv[1])){ + printf("Unparseable SID specified!\n"); + return NT_STATUS_INVALID_PARAMETER; + } + + if(!NT_STATUS_IS_OK(status = context_sam_lookup_sid(st->context, st->token, &sid, &name, &type))) { + printf("context_sam_lookup_sid failed!\n"); + return status; + } + + return NT_STATUS_OK; } -static NTSTATUS cmd_lookup_name(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { + if(argc != 2) { + printf("Usage: lookup_name \n"); + return NT_STATUS_INVALID_PARAMETER; + } return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_update_domain(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_update_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_show_domain(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_show_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_create_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_create_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_update_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_update_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_delete_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_delete_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_enum_accounts(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_enum_accounts(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_account_sid(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_account_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_account_name(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_account_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_create_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_create_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_update_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_update_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_delete_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_delete_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_enum_groups(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_enum_groups(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_group_sid(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_group_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_group_name(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_group_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_group_add_member(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_group_add_member(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_group_del_member(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_group_del_member(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_group_enum(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_group_enum(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_get_sid_groups(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_get_sid_groups(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } diff --git a/source/torture/samtest.c b/source/torture/samtest.c index 0275e0f002f..e68ff5a0bf3 100644 --- a/source/torture/samtest.c +++ b/source/torture/samtest.c @@ -54,7 +54,7 @@ static char* next_command (char** cmdstr) } /* Display help on commands */ -static NTSTATUS cmd_help(struct sam_context *sam, TALLOC_CTX *mem_ctx, +static NTSTATUS cmd_help(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { struct cmd_list *tmp; @@ -112,7 +112,7 @@ static NTSTATUS cmd_help(struct sam_context *sam, TALLOC_CTX *mem_ctx, } /* Change the debug level */ -static NTSTATUS cmd_debuglevel(struct sam_context *sam, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_debuglevel(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { if (argc > 2) { printf("Usage: %s [debuglevel]\n", argv[0]); @@ -128,7 +128,7 @@ static NTSTATUS cmd_debuglevel(struct sam_context *sam, TALLOC_CTX *mem_ctx, int return NT_STATUS_OK; } -static NTSTATUS cmd_quit(struct sam_context *sam, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_quit(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { /* Cleanup */ talloc_destroy(mem_ctx); @@ -185,7 +185,7 @@ static void add_command_set(struct cmd_set *cmd_set) DLIST_ADD(cmd_list, entry); } -static NTSTATUS do_cmd(struct sam_context *sam, struct cmd_set *cmd_entry, char *cmd) +static NTSTATUS do_cmd(struct samtest_state *st, struct cmd_set *cmd_entry, char *cmd) { char *p = cmd, **argv = NULL; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; @@ -237,7 +237,7 @@ static NTSTATUS do_cmd(struct sam_context *sam, struct cmd_set *cmd_entry, char } /* Run command */ - result = cmd_entry->fn(sam, mem_ctx, argc, argv); + result = cmd_entry->fn(st, mem_ctx, argc, argv); } else { fprintf (stderr, "Invalid command\n"); @@ -259,7 +259,7 @@ static NTSTATUS do_cmd(struct sam_context *sam, struct cmd_set *cmd_entry, char } /* Process a command entered at the prompt or as part of -c */ -static NTSTATUS process_cmd(struct sam_context *sam, char *cmd) +static NTSTATUS process_cmd(struct samtest_state *st, char *cmd) { struct cmd_list *temp_list; BOOL found = False; @@ -288,7 +288,7 @@ static NTSTATUS process_cmd(struct sam_context *sam, char *cmd) while(temp_set->name) { if (strequal(buf, temp_set->name)) { found = True; - result = do_cmd(sam, temp_set, cmd); + result = do_cmd(st, temp_set, cmd); goto done; } @@ -339,7 +339,7 @@ int main(int argc, char *argv[]) pstring logfile; struct cmd_set **cmd_set; extern BOOL AllowDebugChange; - static struct sam_context sam; + struct samtest_state st; /* make sure the vars that get altered (4th field) are in @@ -353,6 +353,8 @@ int main(int argc, char *argv[]) { 0, 0, 0, 0} }; + ZERO_STRUCT(st); + setlinebuf(stdout); DEBUGLEVEL = 1; @@ -397,7 +399,7 @@ int main(int argc, char *argv[]) char *p = cmdstr; while((cmd=next_command(&p)) != NULL) { - process_cmd(&sam, cmd); + process_cmd(&st, cmd); } return 0; @@ -417,7 +419,7 @@ int main(int argc, char *argv[]) break; if (line[0] != '\n') - process_cmd(&sam, line); + process_cmd(&st, line); } return 0; diff --git a/source/torture/samtest.h b/source/torture/samtest.h index 2a8516cfc3b..a136ab191e4 100644 --- a/source/torture/samtest.h +++ b/source/torture/samtest.h @@ -22,10 +22,17 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +struct samtest_state { + SAM_CONTEXT *context; + NT_USER_TOKEN *token; +}; + struct cmd_set { char *name; - NTSTATUS (*fn)(struct sam_context *sam, TALLOC_CTX *mem_ctx, int argc, + NTSTATUS (*fn)(struct samtest_state *sam, TALLOC_CTX *mem_ctx, int argc, char **argv); char *description; char *usage; }; + + -- cgit From 0c01219850e5d9b77b3b2c0b4b87aa3c82e3292b Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 24 Sep 2002 21:18:22 +0000 Subject: Fix bug in get_methods_by_name Fix bug in enum_domains Add samtest commands: - lookup_sid - lookup_name - enum_domains - lookup_domain --- source/sam/interface.c | 19 ++++++------ source/torture/cmd_sam.c | 80 ++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 80 insertions(+), 19 deletions(-) diff --git a/source/sam/interface.c b/source/sam/interface.c index 6e6902ab3ce..e129604ca36 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -79,7 +79,7 @@ NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_m tmp_methods = context->methods; while (tmp_methods) { - if (strcmp(domainname, tmp_methods->domain_name)) + if (!strcmp(domainname, tmp_methods->domain_name)) { (*sam_method) = tmp_methods; return NT_STATUS_OK; @@ -256,6 +256,7 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE } tmp_methods= context->methods; + *domain_count = 0; while (tmp_methods) { (*domain_count)++; @@ -264,15 +265,19 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE DEBUG(6,("context_sam_enum_domains: enumerating %d domains\n", (*domain_count))); + if (*domain_count == 0) { + return NT_STATUS_OK; + } + tmp_methods = context->methods; if (((*domains) = malloc( sizeof(DOM_SID) * (*domain_count))) == NULL) { - DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain list\n")); + DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain SID list\n")); return NT_STATUS_NO_MEMORY; } if (((*domain_names) = malloc( sizeof(char*) * (*domain_count))) == NULL) { - DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain list\n")); + DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain name list\n")); SAFE_FREE((*domains)); return NT_STATUS_NO_MEMORY; } @@ -280,13 +285,7 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE while (tmp_methods) { DEBUGADD(7,(" [%d] %s: %s\n", i, tmp_methods->domain_name, sid_string_static(&tmp_methods->domain_sid))); sid_copy(domains[i],&tmp_methods->domain_sid); - if(asprintf(&(*domain_names[i]),"%s",tmp_methods->domain_name) < 0) { - DEBUG(0,("context_sam_enum_domains: asprintf failed")); - SAFE_FREE((*domains)); - SAFE_FREE((*domain_names)); - return NT_STATUS_NO_MEMORY; - } - + *domain_names[i] = smb_xstrdup(tmp_methods->domain_name); i++; tmp_methods= tmp_methods->next; } diff --git a/source/torture/cmd_sam.c b/source/torture/cmd_sam.c index 2b4c21e501e..3ebf91434e4 100644 --- a/source/torture/cmd_sam.c +++ b/source/torture/cmd_sam.c @@ -26,12 +26,16 @@ static NTSTATUS cmd_load_module(struct samtest_state *st, TALLOC_CTX *mem_ctx, i { char *plugin_arg[2]; NTSTATUS status; - if (argc != 2) { - printf("Usage: load \n"); + if (argc != 2 && argc != 3) { + printf("Usage: load [domain-sid]\n"); return NT_STATUS_OK; } - asprintf(&plugin_arg[0], "plugin:%s", argv[1]); + if (argc == 3) + asprintf(&plugin_arg[0], "%s|plugin:%s", argv[2], argv[1]); + else + asprintf(&plugin_arg[0], "plugin:%s", argv[1]); + plugin_arg[1] = NULL; if(!NT_STATUS_IS_OK(status = make_sam_context_list(&st->context, plugin_arg))) { @@ -61,7 +65,7 @@ static NTSTATUS cmd_lookup_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, in uint32 type; NTSTATUS status; DOM_SID sid; - if(argc != 2) { + if (argc != 2) { printf("Usage: lookup_sid \n"); return NT_STATUS_INVALID_PARAMETER; } @@ -71,21 +75,36 @@ static NTSTATUS cmd_lookup_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, in return NT_STATUS_INVALID_PARAMETER; } - if(!NT_STATUS_IS_OK(status = context_sam_lookup_sid(st->context, st->token, &sid, &name, &type))) { + if (!NT_STATUS_IS_OK(status = context_sam_lookup_sid(st->context, st->token, &sid, &name, &type))) { printf("context_sam_lookup_sid failed!\n"); return status; } + printf("Name: %s\n", name); + printf("Type: %d\n", type); /* FIXME: What kind of an integer is type ? */ + return NT_STATUS_OK; } static NTSTATUS cmd_lookup_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { - if(argc != 2) { - printf("Usage: lookup_name \n"); + DOM_SID *sid; + uint32 type; + NTSTATUS status; + if (argc != 3) { + printf("Usage: lookup_name \n"); return NT_STATUS_INVALID_PARAMETER; } - return NT_STATUS_NOT_IMPLEMENTED; + + if (!NT_STATUS_IS_OK(status = context_sam_lookup_name(st->context, st->token, argv[1], argv[2], &sid, &type))) { + printf("context_sam_lookup_name failed!\n"); + return status; + } + + printf("SID: %s\n", sid_string_static(sid)); + printf("Type: %d\n", type); + + return NT_STATUS_OK; } static NTSTATUS cmd_lookup_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) @@ -98,6 +117,47 @@ static NTSTATUS cmd_lookup_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, return NT_STATUS_NOT_IMPLEMENTED; } +static NTSTATUS cmd_lookup_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + DOM_SID *sid; + NTSTATUS status; + if (argc != 2) { + printf("Usage: lookup_domain \n"); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!NT_STATUS_IS_OK(status = context_sam_lookup_domain(st->context, st->token, argv[1], &sid))) { + printf("context_sam_lookup_name failed!\n"); + return status; + } + + printf("SID: %s\n", sid_string_static(sid)); + + return NT_STATUS_OK; +} + +static NTSTATUS cmd_enum_domains(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int32 domain_count, i; + DOM_SID *domain_sids; + char **domain_names; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = context_sam_enum_domains(st->context, st->token, &domain_count, &domain_sids, &domain_names))) { + printf("context_sam_enum_domains failed!\n"); + return status; + } + + for (i = 0; i < domain_count; i++) { + printf("%s %s\n", domain_names[i], sid_string_static(&domain_sids[i])); + } + + SAFE_FREE(domain_sids); + SAFE_FREE(domain_names); + + return NT_STATUS_OK; +} + static NTSTATUS cmd_update_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; @@ -194,7 +254,7 @@ struct cmd_set sam_general_commands[] = { { "General SAM Commands" }, - { "load", cmd_load_module, "Load a module", "load " }, + { "load", cmd_load_module, "Load a module", "load [domain-sid]" }, { "get_sec_desc", cmd_get_sec_desc, "Get security descriptor info", "get_sec_desc " }, { "set_sec_desc", cmd_set_sec_desc, "Set security descriptor info", "set_sec_desc " }, { "lookup_sid", cmd_lookup_sid, "Lookup type of specified SID", "lookup_sid " }, @@ -206,6 +266,8 @@ struct cmd_set sam_domain_commands[] = { { "Domain Commands" }, { "update_domain", cmd_update_domain, "Update domain information", "update_domain [domain-options] domain-name | domain-sid" }, { "show_domain", cmd_show_domain, "Show domain information", "show_domain domain-sid | domain-name" }, + { "enum_domains", cmd_enum_domains, "Enumerate all domains", "enum_domains " }, + { "lookup_domain", cmd_lookup_domain, "Lookup a domain by name", "lookup_domain domain-name" }, { NULL } }; -- cgit From d312e1c2b44905af87c4d550975eee78dbf2edee Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 24 Sep 2002 21:29:33 +0000 Subject: enum_domains shouldn't crash when there are no domains available --- source/sam/interface.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source/sam/interface.c b/source/sam/interface.c index e129604ca36..bb7b88b240b 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -265,10 +265,6 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE DEBUG(6,("context_sam_enum_domains: enumerating %d domains\n", (*domain_count))); - if (*domain_count == 0) { - return NT_STATUS_OK; - } - tmp_methods = context->methods; if (((*domains) = malloc( sizeof(DOM_SID) * (*domain_count))) == NULL) { -- cgit From 38c67632ade40413c0cc2b91e04105e4065a18b7 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 24 Sep 2002 22:56:59 +0000 Subject: Moved -ve cache check to correct place. Jeremy. --- source/nsswitch/winbindd_cm.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/source/nsswitch/winbindd_cm.c b/source/nsswitch/winbindd_cm.c index 0b9e38eb1f2..01f55698893 100644 --- a/source/nsswitch/winbindd_cm.c +++ b/source/nsswitch/winbindd_cm.c @@ -382,16 +382,6 @@ static NTSTATUS cm_open_connection(const char *domain,const char *pipe_name, fstrcpy(new_conn->domain, domain); fstrcpy(new_conn->pipe_name, pipe_name); - /* Look for a domain controller for this domain. Negative results - are cached so don't bother applying the caching for this - function just yet. */ - - if (!cm_get_dc_name(domain, new_conn->controller, &dc_ip)) { - result = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND; - add_failed_connection_entry(new_conn, result); - return result; - } - /* Return false if we have tried to look up this domain and netbios name before and failed. */ @@ -423,6 +413,16 @@ static NTSTATUS cm_open_connection(const char *domain,const char *pipe_name, return result; } + /* Look for a domain controller for this domain. Negative results + are cached so don't bother applying the caching for this + function just yet. */ + + if (!cm_get_dc_name(domain, new_conn->controller, &dc_ip)) { + result = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND; + add_failed_connection_entry(new_conn, result); + return result; + } + /* Initialise SMB connection */ cm_get_ipc_userpass(&ipc_username, &ipc_domain, &ipc_password); -- cgit From f93a008f09acda2ddaff9857f2fe0c86948539d1 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 24 Sep 2002 22:57:51 +0000 Subject: Hold lock on NEXTJOB record for a very short time. Jerry needs to add code to make this rebust w.r.t. stored devicemodes. Jeremy. --- source/printing/printing.c | 81 +++++++++++++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 29 deletions(-) diff --git a/source/printing/printing.c b/source/printing/printing.c index 208da5b78b5..0344d44d617 100644 --- a/source/printing/printing.c +++ b/source/printing/printing.c @@ -382,9 +382,13 @@ static uint32 sysjob_to_jobid_value; static int unixjob_traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA key, TDB_DATA data, void *state) { - struct printjob *pjob = (struct printjob *)data.dptr; + struct printjob *pjob; int *sysjob = (int *)state; + if (!data.dptr || data.dsize == 0) + return 0; + + pjob = (struct printjob *)data.dptr; if (key.dsize != sizeof(uint32)) return 0; @@ -1408,6 +1412,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DE int njobs = 0; const char *printername = lp_const_servicename(snum); struct tdb_print_db *pdb = get_print_db_byname(printername); + BOOL pdb_locked = False; errno = 0; @@ -1457,37 +1462,15 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DE return (uint32)-1; } - /* create the database entry */ - - ZERO_STRUCT(pjob); - - pjob.pid = local_pid; - pjob.sysjob = -1; - pjob.fd = -1; - pjob.starttime = time(NULL); - pjob.status = LPQ_SPOOLING; - pjob.size = 0; - pjob.spooled = False; - pjob.smbjob = True; - pjob.nt_devmode = nt_devmode; - - fstrcpy(pjob.jobname, jobname); - - if ((vuser = get_valid_user_struct(user->vuid)) != NULL) { - fstrcpy(pjob.user, vuser->user.smb_name); - } else { - fstrcpy(pjob.user, uidtoname(user->uid)); - } - - fstrcpy(pjob.queuename, lp_const_servicename(snum)); - - /* lock the database */ + /* Lock the database */ if (tdb_lock_bystring(pdb->tdb, "INFO/nextjob") == -1) { DEBUG(0,("print_job_start: failed to lock printing database %s\n", printername )); release_print_db(pdb); return (uint32)-1; } + pdb_locked = True; + next_jobid = tdb_fetch_int32(pdb->tdb, "INFO/nextjob"); if (next_jobid == -1) next_jobid = 1; @@ -1496,13 +1479,27 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DE if (!print_job_exists(snum, jobid)) break; } - if (jobid == next_jobid || !pjob_store(snum, jobid, &pjob)) { - DEBUG(3, ("print_job_start: either jobid (%d)==next_jobid(%d) or pjob_store failed.\n", + + if (jobid == next_jobid) { + DEBUG(3, ("print_job_start: jobid (%d)==next_jobid(%d).\n", jobid, next_jobid )); jobid = -1; goto fail; } + /* Store a dummy placeholder. This must be quick as we have the lock. */ + { + TDB_DATA dum; + dum.dptr = NULL; + dum.dsize = 0; + if (tdb_store(pdb->tdb, print_key(jobid), dum, TDB_INSERT) == -1) { + DEBUG(3, ("print_job_start: jobid (%d) failed to store placeholder.\n", + jobid )); + jobid = -1; + goto fail; + } + } + if (tdb_store_int32(pdb->tdb, "INFO/nextjob", jobid)==-1) { DEBUG(3, ("print_job_start: failed to store INFO/nextjob.\n")); jobid = -1; @@ -1511,6 +1508,31 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DE /* We've finished with the INFO/nextjob lock. */ tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); + pdb_locked = False; + + /* create the database entry */ + + ZERO_STRUCT(pjob); + + pjob.pid = local_pid; + pjob.sysjob = -1; + pjob.fd = -1; + pjob.starttime = time(NULL); + pjob.status = LPQ_SPOOLING; + pjob.size = 0; + pjob.spooled = False; + pjob.smbjob = True; + pjob.nt_devmode = nt_devmode; + + fstrcpy(pjob.jobname, jobname); + + if ((vuser = get_valid_user_struct(user->vuid)) != NULL) { + fstrcpy(pjob.user, vuser->user.smb_name); + } else { + fstrcpy(pjob.user, uidtoname(user->uid)); + } + + fstrcpy(pjob.queuename, lp_const_servicename(snum)); /* we have a job entry - now create the spool file */ slprintf(pjob.filename, sizeof(pjob.filename)-1, "%s/%s%.8u.XXXXXX", @@ -1551,7 +1573,8 @@ to open spool file %s.\n", pjob.filename)); if (jobid != -1) pjob_delete(snum, jobid); - tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); + if (pdb_locked) + tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); release_print_db(pdb); DEBUG(3, ("print_job_start: returning fail. Error = %s\n", strerror(errno) )); -- cgit From 930c6710fe076b52ad21addf5fcda834f85e15a9 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 25 Sep 2002 05:01:51 +0000 Subject: merge from APP_HEAD --- source/printing/printing.c | 40 ++++++++++++++++++++++++++++++-------- source/rpc_server/srv_spoolss_nt.c | 2 ++ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/source/printing/printing.c b/source/printing/printing.c index 0344d44d617..6474c92c692 100644 --- a/source/printing/printing.c +++ b/source/printing/printing.c @@ -318,6 +318,7 @@ static TDB_DATA print_key(uint32 jobid) int unpack_pjob( char* buf, int buflen, struct printjob *pjob ) { int len = 0; + int used; if ( !buf || !pjob ) return -1; @@ -336,9 +337,14 @@ int unpack_pjob( char* buf, int buflen, struct printjob *pjob ) pjob->jobname, pjob->user, pjob->queuename); - - - len += unpack_devicemode(&pjob->nt_devmode, buf+len, buflen-len); + + if ( len == -1 ) + return -1; + + if ( (used = unpack_devicemode(&pjob->nt_devmode, buf+len, buflen-len)) == -1 ) + return -1; + + len += used; return len; @@ -369,7 +375,8 @@ static struct printjob *print_job_find(int snum, uint32 jobid) ZERO_STRUCT( pjob ); - unpack_pjob( ret.dptr, ret.dsize, &pjob ); + if ( unpack_pjob( ret.dptr, ret.dsize, &pjob ) == -1 ) + return NULL; SAFE_FREE(ret.dptr); return &pjob; @@ -689,10 +696,14 @@ static int traverse_fn_delete(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void uint32 jobid; int i; - if (data.dsize != sizeof(pjob) || key.dsize != sizeof(jobid)) + if ( key.dsize != sizeof(jobid) ) return 0; + memcpy(&jobid, key.dptr, sizeof(jobid)); - memcpy(&pjob, data.dptr, sizeof(pjob)); + if ( unpack_pjob( data.dptr, data.dsize, &pjob ) == -1 ) + return 0; + free_nt_devicemode( &pjob.nt_devmode ); + if (ts->snum != lp_servicenumber(pjob.queuename)) { /* this isn't for the queue we are looking at - this cannot happen with the split tdb's. JRA */ @@ -1681,10 +1692,16 @@ static int traverse_fn_queue(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void * int i; uint32 jobid; + /* sanity checks */ + + if ( key.dsize != sizeof(jobid) ) + return 0; + memcpy(&jobid, key.dptr, sizeof(jobid)); - if ( !unpack_pjob( data.dptr, data.dsize, &pjob ) ) + if ( unpack_pjob( data.dptr, data.dsize, &pjob ) == -1 ) return 0; + free_nt_devicemode( &pjob.nt_devmode ); /* maybe it isn't for this queue */ if (ts->snum != lp_servicenumber(pjob.queuename)) @@ -1723,10 +1740,17 @@ static int traverse_count_fn_queue(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, struct printjob pjob; uint32 jobid; + /* sanity checks */ + + if ( key.dsize != sizeof(jobid) ) + return 0; + memcpy(&jobid, key.dptr, sizeof(jobid)); - if ( !unpack_pjob( data.dptr, data.dsize, &pjob ) ) + if ( unpack_pjob( data.dptr, data.dsize, &pjob ) == -1 ) return 0; + + free_nt_devicemode( &pjob.nt_devmode ); /* maybe it isn't for this queue - this cannot happen with the tdb/printer code. JRA */ if (ts->snum != lp_servicenumber(pjob.queuename)) diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index 6953ec36631..2190215107a 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -5421,11 +5421,13 @@ static WERROR control_printer(POLICY_HND *handle, uint32 command, errcode = WERR_OK; } break; +#if 0 /* JERRY - Never called */ case PRINTER_CONTROL_PURGE: if (print_queue_purge(&user, snum, &errcode)) { errcode = WERR_OK; } break; +#endif default: return WERR_UNKNOWN_LEVEL; } -- cgit From cfd1bf250b417f3ba3ad21ff681ab282311bb7eb Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 25 Sep 2002 05:11:25 +0000 Subject: Merge of "profile acls" code. Jeremy. --- source/lib/util_sid.c | 9 +++++++-- source/param/loadparm.c | 6 ++++++ source/smbd/posix_acls.c | 30 ++++++++++++++++++++++++++++-- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/source/lib/util_sid.c b/source/lib/util_sid.c index 8bb06e8866c..e9635fc7f84 100644 --- a/source/lib/util_sid.c +++ b/source/lib/util_sid.c @@ -30,13 +30,11 @@ extern fstring global_myworkgroup; * Some useful sids */ -DOM_SID global_sid_Builtin; /* Local well-known domain */ DOM_SID global_sid_World_Domain; /* Everyone domain */ DOM_SID global_sid_World; /* Everyone */ DOM_SID global_sid_Creator_Owner_Domain; /* Creator Owner domain */ DOM_SID global_sid_NT_Authority; /* NT Authority */ DOM_SID global_sid_NULL; /* NULL sid */ -DOM_SID global_sid_Builtin_Guests; /* Builtin guest users */ DOM_SID global_sid_Authenticated_Users; /* All authenticated rids */ DOM_SID global_sid_Network; /* Network rids */ @@ -44,6 +42,11 @@ static DOM_SID global_sid_Creator_Owner; /* Creator Owner */ static DOM_SID global_sid_Creator_Group; /* Creator Group */ static DOM_SID global_sid_Anonymous; /* Anonymous login */ +DOM_SID global_sid_Builtin; /* Local well-known domain */ +DOM_SID global_sid_Builtin_Administrators; +DOM_SID global_sid_Builtin_Users; +DOM_SID global_sid_Builtin_Guests; /* Builtin guest users */ + /* * An NT compatible anonymous token. */ @@ -99,6 +102,8 @@ const char *sid_type_lookup(uint32 sid_type) void generate_wellknown_sids(void) { string_to_sid(&global_sid_Builtin, "S-1-5-32"); + string_to_sid(&global_sid_Builtin_Administrators, "S-1-5-32-544"); + string_to_sid(&global_sid_Builtin_Users, "S-1-5-32-545"); string_to_sid(&global_sid_Builtin_Guests, "S-1-5-32-546"); string_to_sid(&global_sid_World_Domain, "S-1-1"); string_to_sid(&global_sid_World, "S-1-1-0"); diff --git a/source/param/loadparm.c b/source/param/loadparm.c index f95c03dcdbe..7b8efbd5bc7 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -388,6 +388,8 @@ typedef struct #ifdef WITH_SENDFILE BOOL bUseSendfile; #endif + BOOL bProfileAcls; + char dummy[3]; /* for alignment */ } service; @@ -510,6 +512,7 @@ static service sDefault = { #ifdef WITH_SENDFILE False, /* bUseSendfile */ #endif + False, /* bProfileAcls */ "" /* dummy */ }; @@ -811,6 +814,8 @@ static struct parm_struct parm_table[] = { {"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"nt acl support", P_BOOL, P_LOCAL, &sDefault.bNTAclSupport, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE | FLAG_ADVANCED | FLAG_WIZARD}, {"nt status support", P_BOOL, P_GLOBAL, &Globals.bNTStatusSupport, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"profile acls", P_BOOL, P_LOCAL, &sDefault.bProfileAcls, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE | FLAG_ADVANCED | FLAG_WIZARD}, + {"announce version", P_STRING, P_GLOBAL, &Globals.szAnnounceVersion, NULL, NULL, FLAG_DEVELOPER}, {"announce as", P_ENUM, P_GLOBAL, &Globals.announce_as, NULL, enum_announce_as, FLAG_DEVELOPER}, {"max mux", P_INTEGER, P_GLOBAL, &Globals.max_mux, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, @@ -1742,6 +1747,7 @@ FN_LOCAL_BOOL(lp_nt_acl_support, bNTAclSupport) #ifdef WITH_SENDFILE FN_LOCAL_BOOL(lp_use_sendfile, bUseSendfile) #endif +FN_LOCAL_BOOL(lp_profile_acls, bProfileAcls) FN_LOCAL_INTEGER(lp_create_mask, iCreate_mask) FN_LOCAL_INTEGER(lp_force_create_mode, iCreate_force_mode) FN_LOCAL_INTEGER(lp_security_mask, iSecurity_mask) diff --git a/source/smbd/posix_acls.c b/source/smbd/posix_acls.c index 043e33e8367..e6ae1c7d799 100644 --- a/source/smbd/posix_acls.c +++ b/source/smbd/posix_acls.c @@ -1881,6 +1881,8 @@ static int nt_ace_comp( SEC_ACE *a1, SEC_ACE *a2) size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc) { + extern DOM_SID global_sid_Builtin_Administrators; + extern DOM_SID global_sid_Builtin_Users; connection_struct *conn = fsp->conn; SMB_STRUCT_STAT sbuf; SEC_ACE *nt_ace_list = NULL; @@ -1895,6 +1897,7 @@ size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc) SMB_ACL_T dir_acl = NULL; canon_ace *file_ace = NULL; canon_ace *dir_ace = NULL; + size_t num_profile_acls = 0; *ppdesc = NULL; @@ -1939,7 +1942,14 @@ size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc) * Get the owner, group and world SIDs. */ - create_file_sids(&sbuf, &owner_sid, &group_sid); + if (lp_profile_acls(SNUM(fsp->conn))) { + /* For WXP SP1 the owner must be administrators. */ + sid_copy(&owner_sid, &global_sid_Builtin_Administrators); + sid_copy(&group_sid, &global_sid_Builtin_Users); + num_profile_acls = 2; + } else { + create_file_sids(&sbuf, &owner_sid, &group_sid); + } /* Create the canon_ace lists. */ file_ace = canonicalise_acl( fsp, posix_acl, &sbuf, &owner_sid, &group_sid); @@ -1963,7 +1973,7 @@ size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc) } /* Allocate the ace list. */ - if ((nt_ace_list = (SEC_ACE *)malloc((num_acls + num_dir_acls)* sizeof(SEC_ACE))) == NULL) { + if ((nt_ace_list = (SEC_ACE *)malloc((num_acls + num_profile_acls + num_dir_acls)* sizeof(SEC_ACE))) == NULL) { DEBUG(0,("get_nt_acl: Unable to malloc space for nt_ace_list.\n")); goto done; } @@ -1986,6 +1996,13 @@ size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc) init_sec_ace(&nt_ace_list[num_aces++], &ace->trustee, nt_acl_type, acc, 0); } + /* The User must have access to a profile share - even if we can't map the SID. */ + if (lp_profile_acls(SNUM(fsp->conn))) { + SEC_ACCESS acc; + init_sec_access(&acc,FILE_GENERIC_ALL); + init_sec_ace(&nt_ace_list[num_aces++], &global_sid_Builtin_Users, SEC_ACE_TYPE_ACCESS_ALLOWED, acc, 0); + } + ace = dir_ace; for (i = 0; i < num_dir_acls; i++, ace = ace->next) { @@ -1994,6 +2011,15 @@ size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc) SEC_ACE_FLAG_OBJECT_INHERIT|SEC_ACE_FLAG_CONTAINER_INHERIT|SEC_ACE_FLAG_INHERIT_ONLY); } + /* The User must have access to a profile share - even if we can't map the SID. */ + if (lp_profile_acls(SNUM(fsp->conn))) { + SEC_ACCESS acc; + init_sec_access(&acc,FILE_GENERIC_ALL); + init_sec_ace(&nt_ace_list[num_aces++], &global_sid_Builtin_Users, SEC_ACE_TYPE_ACCESS_ALLOWED, acc, + SEC_ACE_FLAG_OBJECT_INHERIT|SEC_ACE_FLAG_CONTAINER_INHERIT| + SEC_ACE_FLAG_INHERIT_ONLY); + } + /* * Sort to force deny entries to the front. */ -- cgit From 7ce782c20c6b9e515a2fa831315ae14c66d322ee Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 25 Sep 2002 06:25:02 +0000 Subject: The security descriptor in a PRINTER_INFO_2 could be NULL. (Bong?) --- source/python/py_spoolss_printers_conv.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/python/py_spoolss_printers_conv.c b/source/python/py_spoolss_printers_conv.c index 760896fcdef..9bef118f2ba 100644 --- a/source/python/py_spoolss_printers_conv.c +++ b/source/python/py_spoolss_printers_conv.c @@ -224,8 +224,12 @@ BOOL py_from_PRINTER_INFO_2(PyObject **dict, PRINTER_INFO_2 *info) *dict = from_struct(info, py_PRINTER_INFO_2); - if (py_from_SECDESC(&obj, info->secdesc)) - PyDict_SetItemString(*dict, "security_descriptor", obj); + /* The security descriptor could be NULL */ + + if (info->secdesc) { + if (py_from_SECDESC(&obj, info->secdesc)) + PyDict_SetItemString(*dict, "security_descriptor", obj); + } /* Bong! The devmode could be NULL */ -- cgit From bb518a3bae3bf91a589021fcc5b1e715247c5ded Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:32:08 +0000 Subject: Avoid a segfault in net join when you have not done an kinit, and it's falling back to NTLMSSP. We need to get the password out of the user, and this eventually does. Andrew Bartlett --- source/libads/sasl.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/libads/sasl.c b/source/libads/sasl.c index c110c1d2cd7..f7dd01084a2 100644 --- a/source/libads/sasl.c +++ b/source/libads/sasl.c @@ -39,6 +39,11 @@ static ADS_STATUS ads_sasl_spnego_ntlmssp_bind(ADS_STRUCT *ads) extern pstring global_myname; int rc; + if (!ads->auth.password) { + /* No password, don't segfault below... */ + return ADS_ERROR_NT(NT_STATUS_LOGON_FAILURE); + } + neg_flags = NTLMSSP_NEGOTIATE_UNICODE | NTLMSSP_NEGOTIATE_128 | NTLMSSP_NEGOTIATE_NTLM; -- cgit From a3882a19254811ace2f9545580c14ce3bd588095 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:34:43 +0000 Subject: Move to common user token debugging, and ensure we always print both the NT_TOKEN and the unix credentials - as we incresingly use the NT stuff we want to make it easy to check they don't get out of wack. Andrew Bartlett --- source/auth/auth_util.c | 30 ++++++++++++++++++++++++------ source/smbd/sec_ctx.c | 13 ++----------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/source/auth/auth_util.c b/source/auth/auth_util.c index c2d92a985ff..ce5fd32337b 100644 --- a/source/auth/auth_util.c +++ b/source/auth/auth_util.c @@ -478,12 +478,32 @@ void debug_nt_user_token(int dbg_class, int dbg_lev, NT_USER_TOKEN *token) fstring sid_str; int i; + if (!token) { + DEBUGC(dbg_class, dbg_lev, ("NT user token: (NULL)\n")); + return; + } + DEBUGC(dbg_class, dbg_lev, ("NT user token of user %s\n", - sid_to_string(sid_str, &token->user_sids[0]) )); + sid_to_string(sid_str, &token->user_sids[0]) )); DEBUGADDC(dbg_class, dbg_lev, ("contains %i SIDs\n", token->num_sids)); for (i = 0; i < token->num_sids; i++) DEBUGADDC(dbg_class, dbg_lev, ("SID[%3i]: %s\n", i, - sid_to_string(sid_str, &token->user_sids[i]))); + sid_to_string(sid_str, &token->user_sids[i]))); +} + +/**************************************************************************** + prints a UNIX 'token' to debug output. +****************************************************************************/ + +void debug_unix_user_token(int dbg_class, int dbg_lev, uid_t uid, gid_t gid, int n_groups, gid_t *groups) +{ + int i; + DEBUGC(dbg_class, dbg_lev, ("UNIX token of user %ld\n", (long int)uid)); + + DEBUGADDC(dbg_class, dbg_lev, ("Primary group is %ld and contains %i supplementary groups\n", (long int)gid, n_groups)); + for (i = 0; i < n_groups; i++) + DEBUGADDC(dbg_class, dbg_lev, ("Group[%3i]: %ld\n", i, + (long int)groups[i])); } /**************************************************************************** @@ -668,12 +688,10 @@ static NTSTATUS get_user_groups_from_local_sam(const DOM_SID *user_sid, } } + debug_unix_user_token(DBGC_CLASS, 5, usr->pw_uid, usr->pw_gid, n_unix_groups, *unix_groups); + passwd_free(&usr); - DEBUG(5,("get_user_groups_from_local_sam: user is in the unix following groups\n")); - for (i = 0; i < n_unix_groups; i++) - DEBUGADD(5,("supplementary group gid:%ld\n",(long int)(*unix_groups)[i])); - if (n_unix_groups > 0) { *groups = malloc(sizeof(DOM_SID) * n_unix_groups); if (!*groups) { diff --git a/source/smbd/sec_ctx.c b/source/smbd/sec_ctx.c index bdcdce6e145..411ece52495 100644 --- a/source/smbd/sec_ctx.c +++ b/source/smbd/sec_ctx.c @@ -287,17 +287,8 @@ void set_sec_ctx(uid_t uid, gid_t gid, int ngroups, gid_t *groups, NT_USER_TOKEN DEBUG(3, ("setting sec ctx (%u, %u) - sec_ctx_stack_ndx = %d\n", (unsigned int)uid, (unsigned int)gid, sec_ctx_stack_ndx)); - if (ngroups) { - int i; - - DEBUG(3, ("%d user groups: \n", ngroups)); - for (i = 0; i < ngroups; i++) { - DEBUGADD(3, ("%u ", (unsigned int)groups[i])); - } - - DEBUG(3, ("\n")); - } - + debug_nt_user_token(DBGC_CLASS, 5, token); + debug_unix_user_token(DBGC_CLASS, 5, uid, gid, ngroups, groups); gain_root(); -- cgit From d9a91a41441c156223760cb356fa997ea7bdbc1a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:35:45 +0000 Subject: If adding a user to ldap, make sure we have the 'account' structural class, or else we can't add to OpenLDAP 2.1 --- source/passdb/pdb_ldap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/passdb/pdb_ldap.c b/source/passdb/pdb_ldap.c index f82cb4488fc..6d38a2600d0 100644 --- a/source/passdb/pdb_ldap.c +++ b/source/passdb/pdb_ldap.c @@ -1590,6 +1590,7 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT rc = ldap_modify_s(ldap_struct, dn, mods); } else { + make_a_mod(&mods, LDAP_MOD_ADD, "objectclass", "account"); rc = ldap_add_s(ldap_struct, dn, mods); } -- cgit From c0925b6352ff6135da03edff44e0bbd72c949a20 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:37:18 +0000 Subject: Actually pick up the kerberos libs in RedHat - the previous shell construct didn't seem to work properly. Andrew Bartlett --- source/configure | 8 ++++---- source/configure.in | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/source/configure b/source/configure index 39fa8b05f07..538f44621c8 100755 --- a/source/configure +++ b/source/configure @@ -12077,11 +12077,11 @@ fi echo "$ac_t""$with_ads_support" 1>&6 +FOUND_KRB5=no if test x"$with_ads_support" = x"yes"; then ################################################# # check for location of Kerberos 5 install -FOUND_KRB5=0 echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 echo "configure:12087: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. @@ -12097,7 +12097,7 @@ if test "${with_krb5+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" - FOUND_KRB5=1 + FOUND_KRB5=yes ;; esac else @@ -12107,7 +12107,7 @@ fi -if $FOUND_KRB5 = 0 ; then +if test x$FOUND_KRB5 = x"no"; then ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 @@ -12768,7 +12768,7 @@ fi ############################################### # test for where we get crypt() from, but only # if not using PAM -if test $with_pam_for_crypt = no; then +if test x"$with_pam_for_crypt" = x"no"; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 diff --git a/source/configure.in b/source/configure.in index 07cf6e88cdb..5221b8ec2b4 100644 --- a/source/configure.in +++ b/source/configure.in @@ -1961,11 +1961,11 @@ fi AC_MSG_RESULT($with_ads_support) +FOUND_KRB5=no if test x"$with_ads_support" = x"yes"; then ################################################# # check for location of Kerberos 5 install -FOUND_KRB5=0 AC_MSG_CHECKING(for kerberos 5 install path) AC_ARG_WITH(krb5, [ --with-krb5=base-dir Locate Kerberos 5 support (default=/usr)], @@ -1979,14 +1979,14 @@ FOUND_KRB5=0 CFLAGS="$CFLAGS -I$withval/include" CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" - FOUND_KRB5=1 + FOUND_KRB5=yes ;; esac ], AC_MSG_RESULT(no) ) -if [ $FOUND_KRB5 = 0 ]; then +if test x$FOUND_KRB5 = x"no"; then ################################################# # see if this box has the RedHat location for kerberos AC_MSG_CHECKING(for /usr/kerberos) @@ -2168,7 +2168,7 @@ AC_ARG_WITH(pam_smbpass, ############################################### # test for where we get crypt() from, but only # if not using PAM -if test $with_pam_for_crypt = no; then +if test x"$with_pam_for_crypt" = x"no"; then AC_CHECK_FUNCS(crypt) if test x"$ac_cv_func_crypt" = x"no"; then AC_CHECK_LIB(crypt, crypt, [LIBS="$LIBS -lcrypt"; -- cgit From 13f33e466ed31d35221157d6b3a1a05507157b66 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:38:27 +0000 Subject: Header files should not include includes.h - therein lies maddness, particuarly if we ever want to get rid of the magic macros. --- source/include/smb_acls.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/include/smb_acls.h b/source/include/smb_acls.h index 3ed670d38ba..e7edb62bde2 100644 --- a/source/include/smb_acls.h +++ b/source/include/smb_acls.h @@ -20,9 +20,6 @@ #ifndef _SMB_ACLS_H #define _SMB_ACLS_H - -#include "includes.h" - #if defined(HAVE_POSIX_ACLS) /* This is an identity mapping (just remove the SMB_). */ -- cgit From 9c62d1312fdf0aa7b1978e8bbb56fc076ba7e9d0 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:40:45 +0000 Subject: Another patch from metze, towards his work on sam_ads. See mx-ldap.sf.net for his current progress. --- source/include/ads.h | 13 ++++--- source/include/sam.h | 6 +-- source/libads/ads_utils.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++- source/libads/ldap.c | 2 +- 4 files changed, 108 insertions(+), 11 deletions(-) diff --git a/source/include/ads.h b/source/include/ads.h index 875b895e493..0181ae535e0 100644 --- a/source/include/ads.h +++ b/source/include/ads.h @@ -134,6 +134,7 @@ typedef void **ADS_MODLIST; #define ADS_PAGE_CTL_OID "1.2.840.113556.1.4.319" #define ADS_NO_REFERRALS_OID "1.2.840.113556.1.4.1339" #define ADS_SERVER_SORT_OID "1.2.840.113556.1.4.473" +#define ADS_PERMIT_MODIFY_OID "1.2.840.113556.1.4.1413" /* UserFlags for userAccountControl */ #define UF_SCRIPT 0x00000001 @@ -163,7 +164,7 @@ typedef void **ADS_MODLIST; #define UF_NOT_DELEGATED 0x00100000 #define UF_USE_DES_KEY_ONLY 0x00200000 -#define UF_DONT_REQUIRE_PREAUTH 0x00400000 +#define UF_DONT_REQUIRE_PREAUTH 0x00400000 #define UF_UNUSED_5 0x00800000 #define UF_UNUSED_6 0x01000000 @@ -210,11 +211,11 @@ typedef void **ADS_MODLIST; /* sAMAccountType */ #define ATYPE_NORMAL_ACCOUNT 0x30000000 /* 805306368 */ -#define ATYPE_WORKSTATION_TRUST 0x30000001 /* 805306369 */ -#define ATYPE_INTERDOMAIN_TRUST 0x30000002 /* 805306370 */ +#define ATYPE_WORKSTATION_TRUST 0x30000001 /* 805306369 */ +#define ATYPE_INTERDOMAIN_TRUST 0x30000002 /* 805306370 */ #define ATYPE_SECURITY_GLOBAL_GROUP 0x10000000 /* 268435456 */ -#define ATYPE_DISTRIBUTION_GLOBAL_GROUP 0x10000001 /* 268435457 */ -#define ATYPE_DISTRIBUTION_UNIVERSAL_GROUP AT_DISTRIBUTION_GLOBAL_GROUP +#define ATYPE_DISTRIBUTION_GLOBAL_GROUP 0x10000001 /* 268435457 */ +#define ATYPE_DISTRIBUTION_UNIVERSAL_GROUP ATYPE_DISTRIBUTION_GLOBAL_GROUP #define ATYPE_SECURITY_LOCAL_GROUP 0x20000000 /* 536870912 */ #define ATYPE_DISTRIBUTION_LOCAL_GROUP 0x20000001 /* 536870913 */ @@ -226,7 +227,7 @@ typedef void **ADS_MODLIST; #define GTYPE_SECURITY_BUILTIN_LOCAL_GROUP 0x80000005 /* -2147483643 */ #define GTYPE_SECURITY_DOMAIN_LOCAL_GROUP 0x80000004 /* -2147483644 */ #define GTYPE_SECURITY_GLOBAL_GROUP 0x80000002 /* -2147483646 */ -#define GTYPE_DISTRIBUTION_GLOBAL_GROUP 0x00000002 /* 2 */ +#define GTYPE_DISTRIBUTION_GLOBAL_GROUP 0x00000002 /* 2 */ #define GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP 0x00000004 /* 4 */ #define GTYPE_DISTRIBUTION_UNIVERSAL_GROUP 0x00000008 /* 8 */ diff --git a/source/include/sam.h b/source/include/sam.h index 4d18ec61b96..2157a370652 100644 --- a/source/include/sam.h +++ b/source/include/sam.h @@ -152,10 +152,10 @@ typedef struct sam_group_enum { /* bits for group_ctrl: to spezify if the group is global group or alias */ -#define GCB_LOCAL_GROUP 0x0001 -#define GCB_ALIAS_GROUP GCB_LOCAL_GROUP +#define GCB_LOCAL_GROUP 0x0001 +#define GCB_ALIAS_GROUP (GCB_LOCAL_GROUP |GCB_BUILTIN) #define GCB_GLOBAL_GROUP 0x0002 - +#define GCB_BUILTIN 0x1000 typedef struct sam_context { diff --git a/source/libads/ads_utils.c b/source/libads/ads_utils.c index 1789193d7ee..fc8a2700211 100644 --- a/source/libads/ads_utils.c +++ b/source/libads/ads_utils.c @@ -46,7 +46,9 @@ uint32 ads_acb2uf(uint16 acb) return uf; } -/* translated the UserFlags (userAccountControl) to ACB_CTRL Flags */ +/* +translated the UserFlags (userAccountControl) to ACB_CTRL Flags +*/ uint16 ads_uf2acb(uint32 uf) { uint16 acb = 0x0000; @@ -72,4 +74,98 @@ uint16 ads_uf2acb(uint32 uf) return acb; } +/* +get the accountType from the UserFlags +*/ +uint32 ads_uf2atype(uint32 uf) +{ + uint32 atype = 0x00000000; + + if (uf & UF_NORMAL_ACCOUNT) atype = ATYPE_NORMAL_ACCOUNT; + else if (uf & UF_TEMP_DUPLICATE_ACCOUNT) atype = ATYPE_NORMAL_ACCOUNT; + else if (uf & UF_SERVER_TRUST_ACCOUNT) atype = ATYPE_WORKSTATION_TRUST; + else if (uf & UF_WORKSTATION_TRUST_ACCOUNT) atype = ATYPE_WORKSTATION_TRUST; + else if (uf & UF_INTERDOMAIN_TRUST_ACCOUNT) atype = ATYPE_INTERDOMAIN_TRUST; + + return atype; +} + +/* +translated the GROUP_CTRL Flags to GroupType (groupType) +*/ +uint32 ads_gcb2gtype(uint16 gcb) +{ + uint32 gtype = 0x00000000; + + if (gcb & GCB_ALIAS_GROUP) gtype |= GTYPE_SECURITY_BUILTIN_LOCAL_GROUP; + else if(gcb & GCB_LOCAL_GROUP) gtype |= GTYPE_SECURITY_DOMAIN_LOCAL_GROUP; + if (gcb & GCB_GLOBAL_GROUP) gtype |= GTYPE_SECURITY_GLOBAL_GROUP; + + return gtype; +} + +/* +translated the GroupType (groupType) to GROUP_CTRL Flags +*/ +uint16 ads_gtype2gcb(uint32 gtype) +{ + uint16 gcb = 0x0000; + + switch(gtype) { + case GTYPE_SECURITY_BUILTIN_LOCAL_GROUP: + gcb = GCB_ALIAS_GROUP; + break; + case GTYPE_SECURITY_DOMAIN_LOCAL_GROUP: + gcb = GCB_LOCAL_GROUP; + break; + case GTYPE_SECURITY_GLOBAL_GROUP: + gcb = GCB_GLOBAL_GROUP; + break; + + case GTYPE_DISTRIBUTION_GLOBAL_GROUP: + gcb = GCB_GLOBAL_GROUP; + break; + case GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP: + gcb = GCB_LOCAL_GROUP; + break; + case GTYPE_DISTRIBUTION_UNIVERSAL_GROUP: + gcb = GCB_GLOBAL_GROUP; + break; + } + + return gcb; +} + +/* +get the accountType from the groupType +*/ +uint32 ads_gtype2atype(uint32 gtype) +{ + uint32 atype = 0x00000000; + + switch(gtype) { + case GTYPE_SECURITY_BUILTIN_LOCAL_GROUP: + atype = ATYPE_SECURITY_LOCAL_GROUP; + break; + case GTYPE_SECURITY_DOMAIN_LOCAL_GROUP: + atype = ATYPE_SECURITY_LOCAL_GROUP; + break; + case GTYPE_SECURITY_GLOBAL_GROUP: + atype = ATYPE_SECURITY_GLOBAL_GROUP; + break; + + case GTYPE_DISTRIBUTION_GLOBAL_GROUP: + atype = ATYPE_DISTRIBUTION_GLOBAL_GROUP; + break; + case GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP: + atype = ATYPE_DISTRIBUTION_UNIVERSAL_GROUP; + break; + case GTYPE_DISTRIBUTION_UNIVERSAL_GROUP: + atype = ATYPE_DISTRIBUTION_LOCAL_GROUP; + break; + } + + return atype; +} + #endif diff --git a/source/libads/ldap.c b/source/libads/ldap.c index 385a9bd93f9..7a0afb1a816 100644 --- a/source/libads/ldap.c +++ b/source/libads/ldap.c @@ -890,7 +890,7 @@ ADS_STATUS ads_gen_mod(ADS_STRUCT *ads, const char *mod_dn, ADS_MODLIST mods) non-existent attribute (but allowable for the object) to run */ LDAPControl PermitModify = { - "1.2.840.113556.1.4.1413", + ADS_PERMIT_MODIFY_OID, {0, NULL}, (char) 1}; LDAPControl *controls[2]; -- cgit From 760c0740cad948665db4a1d462fbbd99332713ef Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:55:41 +0000 Subject: Kill of Get_Pwnam_Modify and smb_getpwnam(). The latter assumes some things that just don't apply any more - now that we always keep username and domain seperate. Also, the policy it was trying to permit is now implemented by the auth code. Andrew Bartlett --- source/lib/username.c | 57 ------------------------------------------------- source/smbd/sesssetup.c | 4 ++-- 2 files changed, 2 insertions(+), 59 deletions(-) diff --git a/source/lib/username.c b/source/lib/username.c index 5db7f58b1e2..ef11542ab19 100644 --- a/source/lib/username.c +++ b/source/lib/username.c @@ -273,27 +273,6 @@ done: return ret; } -/**************************************************************************** - Get_Pwnam wrapper for modification. - NOTE: This can potentially modify 'user'! -****************************************************************************/ - -struct passwd *Get_Pwnam_Modify(fstring user) -{ - fstring user2; - struct passwd *ret; - - fstrcpy(user2, user); - - ret = Get_Pwnam_internals(user, user2); - - /* If caller wants the modified username, ensure they get it */ - fstrcpy(user,user2); - - /* We can safely assume ret is NULL if none of the above succeed */ - return(ret); -} - /**************************************************************************** Get_Pwnam wrapper without modification. NOTE: This with NOT modify 'user'! @@ -636,39 +615,3 @@ static struct passwd * uname_string_combinations(char *s,struct passwd * (*fn)(c return(NULL); } -/**************************************************************************** - These wrappers allow appliance mode to work. In appliance mode the username - takes the form DOMAIN/user. -****************************************************************************/ - -struct passwd *smb_getpwnam(char *user, BOOL allow_change) -{ - struct passwd *pw; - char *p; - char *sep; - extern pstring global_myname; - - if (allow_change) - pw = Get_Pwnam_Modify(user); - else - pw = Get_Pwnam(user); - - if (pw) - return pw; - - /* - * If it is a domain qualified name and it isn't in our password - * database but the domain portion matches our local machine name then - * lookup just the username portion locally. - */ - - sep = lp_winbind_separator(); - p = strchr_m(user,*sep); - if (p && strncasecmp(global_myname, user, strlen(global_myname))==0) { - if (allow_change) - pw = Get_Pwnam_Modify(p+1); - else - pw = Get_Pwnam(p+1); - } - return NULL; -} diff --git a/source/smbd/sesssetup.c b/source/smbd/sesssetup.c index 09288ad44dd..785f8d68211 100644 --- a/source/smbd/sesssetup.c +++ b/source/smbd/sesssetup.c @@ -160,12 +160,12 @@ static int reply_spnego_kerberos(connection_struct *conn, ads_destroy(&ads); /* the password is good - let them in */ - pw = smb_getpwnam(user,False); + pw = Get_Pwnam(user); if (!pw && !strstr(user, lp_winbind_separator())) { char *user2; /* try it with a winbind domain prefix */ asprintf(&user2, "%s%s%s", lp_workgroup(), lp_winbind_separator(), user); - pw = smb_getpwnam(user2,False); + pw = Get_Pwnam(user2); if (pw) { free(user); user = user2; -- cgit From d5303d5c080212486329f7e5a65f732e11efbb37 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:56:36 +0000 Subject: At least try to get this function picked up by the autoprototyper --- source/printing/print_cups.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/printing/print_cups.c b/source/printing/print_cups.c index 858647a52f4..2df846aa579 100644 --- a/source/printing/print_cups.c +++ b/source/printing/print_cups.c @@ -73,9 +73,9 @@ cups_passwd_cb(const char *prompt) /* I - Prompt */ * system. */ -void -cups_printer_fn(void (*fn)(char *, char *)) /* I - Function to call */ +void cups_printer_fn(void (*fn)(char *, char *)) { + /* I - Function to call */ http_t *http; /* HTTP connection to server */ ipp_t *request, /* IPP Request */ *response; /* IPP Response */ -- cgit From 237883d1e68e99a3ea3df9b6e182c70cb31b2523 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 25 Sep 2002 10:17:08 +0000 Subject: samtest should load smb.conf by default add command-line option to samtest to specify alternate config file - use /dev/null to don't load any config file.. add 'conf' command to load specified config file --- source/torture/samtest.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/source/torture/samtest.c b/source/torture/samtest.c index e68ff5a0bf3..5503887e628 100644 --- a/source/torture/samtest.c +++ b/source/torture/samtest.c @@ -53,6 +53,24 @@ static char* next_command (char** cmdstr) return command; } +/* Load specified configuration file */ +static NTSTATUS cmd_conf(struct samtest_state *sam, TALLOC_CTX *mem_ctx, + int argc, char **argv) +{ + if (argc != 2) { + printf("Usage: %s \n", argv[0]); + return NT_STATUS_OK; + } + + if (!lp_load(argv[1], False, True, False)) { + printf("Error loading \"%s\"\n", argv[1]); + return NT_STATUS_OK; + } + + printf("\"%s\" successfully loaded\n", argv[1]); + return NT_STATUS_OK; +} + /* Display help on commands */ static NTSTATUS cmd_help(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) @@ -143,6 +161,7 @@ static struct cmd_set samtest_commands[] = { { "help", cmd_help, "Get help on commands", "" }, { "?", cmd_help, "Get help on commands", "" }, + { "conf", cmd_conf, "Load smb configuration file", "conf " }, { "debuglevel", cmd_debuglevel, "Set debug level", "" }, { "exit", cmd_quit, "Exit program", "" }, { "quit", cmd_quit, "Exit program", "" }, @@ -336,6 +355,7 @@ int main(int argc, char *argv[]) int opt; static char *cmdstr = ""; static char *opt_logfile=NULL; + static char *config_file = dyn_CONFIGFILE; pstring logfile; struct cmd_set **cmd_set; extern BOOL AllowDebugChange; @@ -348,8 +368,9 @@ int main(int argc, char *argv[]) struct poptOption long_options[] = { POPT_AUTOHELP { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_debug }, - {"command", 'c', POPT_ARG_STRING, &cmdstr, 'c', "Execute semicolon seperated cmds"}, + {"command", 'e', POPT_ARG_STRING, &cmdstr, 'e', "Execute semicolon seperated cmds"}, {"logfile", 'l', POPT_ARG_STRING, &opt_logfile, 'l', "Logfile to use instead of stdout"}, + {"configfile", 'c', POPT_ARG_STRING, &config_file, 0,"use different configuration file",NULL}, { 0, 0, 0, 0} }; @@ -374,6 +395,10 @@ int main(int argc, char *argv[]) } } + if (!lp_load(config_file,True,False,False)) { + fprintf(stderr, "Can't load %s - run testparm to debug it\n", config_file); + exit(1); + } poptFreeContext(pc); -- cgit From f0c095875758ef44ed2d25d3ed9d77e5e163b75f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 25 Sep 2002 11:08:16 +0000 Subject: Compile samtest with LIBADS_OBJ and PASSDB_OBJ... --- source/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Makefile.in b/source/Makefile.in index f1c71264510..f3d9b7ec099 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -225,7 +225,7 @@ SAM_STATIC_MODULES = sam/sam_plugin.o SAM_OBJ = sam/account.o sam/get_set_account.o sam/get_set_group.o \ sam/get_set_domain.o sam/interface.o sam/api.o $(SAM_STATIC_MODULES) -SAMTEST_OBJ = torture/samtest.o torture/cmd_sam.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o passdb/machine_sid.o passdb/secrets.o +SAMTEST_OBJ = torture/samtest.o torture/cmd_sam.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o $(LIBADS_OBJ) $(PASSDB_OBJ) $(SECRETS_OBJ) $(GROUPDB_OBJ) GROUPDB_OBJ = groupdb/mapping.o -- cgit From 779aea57450db83fa7870e8a35db55d475682519 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 25 Sep 2002 11:19:48 +0000 Subject: Fix debuglevel command-line argument --- source/torture/samtest.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source/torture/samtest.c b/source/torture/samtest.c index 5503887e628..2bbf01a6bed 100644 --- a/source/torture/samtest.c +++ b/source/torture/samtest.c @@ -379,7 +379,6 @@ int main(int argc, char *argv[]) setlinebuf(stdout); DEBUGLEVEL = 1; - AllowDebugChange = False; pc = poptGetContext("samtest", argc, (const char **) argv, long_options, 0); -- cgit From f13e243f1a13d34ae057b40b01f561e8b95d4570 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 11:34:31 +0000 Subject: This patch from "Stefan (metze) Metzmacher" cleans up pdb_ldap and adds a 'ldap passwd sync' option. The idea with this option is to do allow an ldap backend to do all the fancy password hashing etc - and to tell smbd no to try and double-up. Using 'ldap passwd sync = only' will do this, but is not recommended unless such a backend is in place... Running 'ldap passwd sync = yes' just gets you the same as doing 'pam passwd sync = yes' and having both PAM and pam_ldap correctly configured for 'magic root' behaviour, but only using ldap connection, and one set of credentials. This also gets us closer to allowing ldap to say 'password too short' etc, which might assist in maintaining a consistant password policy. Andrew Bartlett --- source/include/smb.h | 5 +- source/param/loadparm.c | 27 +++- source/passdb/passdb.c | 11 +- source/passdb/pdb_get_set.c | 25 +++- source/passdb/pdb_ldap.c | 291 ++++++++++++++++++++++++++------------------ 5 files changed, 231 insertions(+), 128 deletions(-) diff --git a/source/include/smb.h b/source/include/smb.h index 59bfb6b4495..c39ebed950f 100644 --- a/source/include/smb.h +++ b/source/include/smb.h @@ -616,7 +616,7 @@ typedef struct sam_passwd DATA_BLOB lm_pw; /* .data is Null if no password */ DATA_BLOB nt_pw; /* .data is Null if no password */ - DATA_BLOB plaintext_pw; /* .data is Null if not available */ + char* plaintext_pw; /* is Null if not available */ uint16 acct_ctrl; /* account info (ACB_xxxx bit-mask) */ uint32 unknown_3; /* 0x00ff ffff */ @@ -1346,6 +1346,9 @@ enum schema_types {SCHEMA_COMPAT, SCHEMA_AD, SCHEMA_SAMBA}; /* LDAP SSL options */ enum ldap_ssl_types {LDAP_SSL_ON, LDAP_SSL_OFF, LDAP_SSL_START_TLS}; +/* LDAP PASSWD SYNC methods */ +enum ldap_passwd_sync_types {LDAP_PASSWD_SYNC_ON, LDAP_PASSWD_SYNC_OFF, LDAP_PASSWD_SYNC_ONLY}; + /* Remote architectures we know about. */ enum remote_arch_types {RA_UNKNOWN, RA_WFWG, RA_OS2, RA_WIN95, RA_WINNT, RA_WIN2K, RA_SAMBA}; diff --git a/source/param/loadparm.c b/source/param/loadparm.c index 7b8efbd5bc7..4aaf6f20eb7 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -207,11 +207,11 @@ typedef struct int iLockSpinTime; char *szLdapMachineSuffix; char *szLdapUserSuffix; - int ldap_port; int ldap_ssl; char *szLdapSuffix; char *szLdapFilter; char *szLdapAdminDn; + int ldap_passwd_sync; BOOL bMsAddPrinterWizard; BOOL bDNSproxy; BOOL bWINSsupport; @@ -600,6 +600,22 @@ static struct enum_list enum_ldap_ssl[] = { {-1, NULL} }; +static struct enum_list enum_ldap_passwd_sync[] = { + {LDAP_PASSWD_SYNC_ON, "Yes"}, + {LDAP_PASSWD_SYNC_ON, "yes"}, + {LDAP_PASSWD_SYNC_ON, "on"}, + {LDAP_PASSWD_SYNC_ON, "On"}, + {LDAP_PASSWD_SYNC_OFF, "no"}, + {LDAP_PASSWD_SYNC_OFF, "No"}, + {LDAP_PASSWD_SYNC_OFF, "off"}, + {LDAP_PASSWD_SYNC_OFF, "Off"}, +#ifdef LDAP_EXOP_X_MODIFY_PASSWD + {LDAP_PASSWD_SYNC_ONLY, "Only"}, + {LDAP_PASSWD_SYNC_ONLY, "only"}, +#endif /* LDAP_EXOP_X_MODIFY_PASSWD */ + {-1, NULL} +}; + /* Types of machine we can announce as. */ #define ANNOUNCE_AS_NT_SERVER 1 #define ANNOUNCE_AS_WIN95 2 @@ -987,12 +1003,13 @@ static struct parm_struct parm_table[] = { {"Ldap Options", P_SEP, P_SEPARATOR}, - {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"ldap filter", P_STRING, P_GLOBAL, &Globals.szLdapFilter, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"ldap admin dn", P_STRING, P_GLOBAL, &Globals.szLdapAdminDn, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"ldap ssl", P_ENUM, P_GLOBAL, &Globals.ldap_ssl, NULL, enum_ldap_ssl, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap passwd sync", P_ENUM, P_GLOBAL, &Globals.ldap_passwd_sync, NULL, enum_ldap_passwd_sync, FLAG_ADVANCED | FLAG_DEVELOPER}, {"Miscellaneous Options", P_SEP, P_SEPARATOR}, {"add share command", P_STRING, P_GLOBAL, &Globals.szAddShareCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, @@ -1357,6 +1374,7 @@ static void init_globals(void) string_set(&Globals.szLdapFilter, "(&(uid=%u)(objectclass=sambaAccount))"); string_set(&Globals.szLdapAdminDn, ""); Globals.ldap_ssl = LDAP_SSL_ON; + Globals.ldap_passwd_sync = LDAP_PASSWD_SYNC_OFF; /* these parameters are set to defaults that are more appropriate for the increasing samba install base: @@ -1570,6 +1588,7 @@ FN_GLOBAL_STRING(lp_ldap_user_suffix, &Globals.szLdapUserSuffix) FN_GLOBAL_STRING(lp_ldap_filter, &Globals.szLdapFilter) FN_GLOBAL_STRING(lp_ldap_admin_dn, &Globals.szLdapAdminDn) FN_GLOBAL_INTEGER(lp_ldap_ssl, &Globals.ldap_ssl) +FN_GLOBAL_INTEGER(lp_ldap_passwd_sync, &Globals.ldap_passwd_sync) FN_GLOBAL_STRING(lp_add_share_cmd, &Globals.szAddShareCommand) FN_GLOBAL_STRING(lp_change_share_cmd, &Globals.szChangeShareCommand) FN_GLOBAL_STRING(lp_delete_share_cmd, &Globals.szDeleteShareCommand) diff --git a/source/passdb/passdb.c b/source/passdb/passdb.c index 05450c9f2f2..e0f0cce67fb 100644 --- a/source/passdb/passdb.c +++ b/source/passdb/passdb.c @@ -75,11 +75,19 @@ static void pdb_fill_default_sam(SAM_ACCOUNT *user) user->private.workstations = ""; user->private.unknown_str = ""; user->private.munged_dial = ""; + + user->private.plaintext_pw = NULL; + } static void destroy_pdb_talloc(SAM_ACCOUNT **user) { if (*user) { + data_blob_clear_free(&((*user)->private.lm_pw)); + data_blob_clear_free(&((*user)->private.nt_pw)); + + if((*user)->private.plaintext_pw!=NULL) + memset((*user)->private.plaintext_pw,'\0',strlen((*user)->private.plaintext_pw)); talloc_destroy((*user)->mem_ctx); *user = NULL; } @@ -310,7 +318,8 @@ static void pdb_free_sam_contents(SAM_ACCOUNT *user) data_blob_clear_free(&(user->private.lm_pw)); data_blob_clear_free(&(user->private.nt_pw)); - data_blob_clear_free(&(user->private.plaintext_pw)); + if (user->private.plaintext_pw!=NULL) + memset(user->private.plaintext_pw,'\0',strlen(user->private.plaintext_pw)); } diff --git a/source/passdb/pdb_get_set.c b/source/passdb/pdb_get_set.c index 2da6de72701..0c338f317ec 100644 --- a/source/passdb/pdb_get_set.c +++ b/source/passdb/pdb_get_set.c @@ -151,7 +151,7 @@ const uint8* pdb_get_lanman_passwd (const SAM_ACCOUNT *sampass) const char* pdb_get_plaintext_passwd (const SAM_ACCOUNT *sampass) { if (sampass) { - return ((char*)sampass->private.plaintext_pw.data); + return (sampass->private.plaintext_pw); } else return (NULL); @@ -956,14 +956,24 @@ BOOL pdb_set_lanman_passwd (SAM_ACCOUNT *sampass, const uint8 pwd[16]) below) ********************************************************************/ -BOOL pdb_set_plaintext_pw_only (SAM_ACCOUNT *sampass, const uint8 *password, size_t len) +BOOL pdb_set_plaintext_pw_only (SAM_ACCOUNT *sampass, const char *password) { if (!sampass) return False; - data_blob_clear_free(&sampass->private.plaintext_pw); - - sampass->private.plaintext_pw = data_blob(password, len); + if (password) { + if (sampass->private.plaintext_pw!=NULL) + memset(sampass->private.plaintext_pw,'\0',strlen(sampass->private.plaintext_pw)+1); + sampass->private.plaintext_pw = talloc_strdup(sampass->mem_ctx, password); + + if (!sampass->private.plaintext_pw) { + DEBUG(0, ("pdb_set_unknown_str: talloc_strdup() failed!\n")); + return False; + } + + } else { + sampass->private.plaintext_pw = NULL; + } return True; } @@ -1062,7 +1072,10 @@ BOOL pdb_set_plaintext_passwd (SAM_ACCOUNT *sampass, const char *plaintext) if (!pdb_set_lanman_passwd (sampass, new_lanman_p16)) return False; - + + if (!pdb_set_plaintext_pw_only (sampass, plaintext)) + return False; + if (!pdb_set_pass_changed_now (sampass)) return False; diff --git a/source/passdb/pdb_ldap.c b/source/passdb/pdb_ldap.c index 6d38a2600d0..71a8c256a3a 100644 --- a/source/passdb/pdb_ldap.c +++ b/source/passdb/pdb_ldap.c @@ -1,11 +1,11 @@ /* Unix SMB/CIFS implementation. LDAP protocol helper functions for SAMBA - Copyright (C) Jean François Micouleau 1998 - Copyright (C) Gerald Carter 2001 - Copyright (C) Shahms King 2001 - Copyright (C) Andrew Bartlett 2002 - Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Jean François Micouleau 1998 + Copyright (C) Gerald Carter 2001 + Copyright (C) Shahms King 2001 + Copyright (C) Andrew Bartlett 2002 + Copyright (C) Stefan (metze) Metzmacher 2002 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -273,7 +273,8 @@ static BOOL ldapsam_open_connection (struct ldapsam_privates *ldap_state, LDAP * a rebind function for authenticated referrals This version takes a void* that we can shove useful stuff in :-) ******************************************************************/ - +#if defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) +#else static int rebindproc_with_state (LDAP * ld, char **whop, char **credp, int *methodp, int freeit, void *arg) { @@ -304,13 +305,14 @@ static int rebindproc_with_state (LDAP * ld, char **whop, char **credp, } return 0; } +#endif /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/ /******************************************************************* a rebind function for authenticated referrals This version takes a void* that we can shove useful stuff in :-) and actually does the connection. ******************************************************************/ - +#if defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) static int rebindproc_connect_with_state (LDAP *ldap_struct, LDAP_CONST char *url, ber_tag_t request, @@ -329,11 +331,14 @@ static int rebindproc_connect_with_state (LDAP *ldap_struct, return rc; } +#endif /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/ /******************************************************************* Add a rebind function for authenticated referrals ******************************************************************/ - +#if defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) +#else +# if LDAP_SET_REBIND_PROC_ARGS == 2 static int rebindproc (LDAP *ldap_struct, char **whop, char **credp, int *method, int freeit ) { @@ -341,19 +346,23 @@ static int rebindproc (LDAP *ldap_struct, char **whop, char **credp, method, freeit, static_ldap_state); } +# endif /*LDAP_SET_REBIND_PROC_ARGS == 2*/ +#endif /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/ /******************************************************************* a rebind function for authenticated referrals this also does the connection, but no void*. ******************************************************************/ - +#if defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) +# if LDAP_SET_REBIND_PROC_ARGS == 2 static int rebindproc_connect (LDAP * ld, LDAP_CONST char *url, int request, ber_int_t msgid) { return rebindproc_connect_with_state(ld, url, (ber_tag_t)request, msgid, static_ldap_state); } - +# endif /*LDAP_SET_REBIND_PROC_ARGS == 2*/ +#endif /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/ /******************************************************************* connect to the ldap server under system privilege. @@ -391,18 +400,18 @@ static BOOL ldapsam_connect_system(struct ldapsam_privates *ldap_state, LDAP * l # if LDAP_SET_REBIND_PROC_ARGS == 3 ldap_set_rebind_proc(ldap_struct, &rebindproc_connect_with_state, (void *)ldap_state); # endif -#else +#else /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/ # if LDAP_SET_REBIND_PROC_ARGS == 2 ldap_set_rebind_proc(ldap_struct, &rebindproc); # endif # if LDAP_SET_REBIND_PROC_ARGS == 3 ldap_set_rebind_proc(ldap_struct, &rebindproc_with_state, (void *)ldap_state); # endif -#endif +#endif /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/ + rc = ldap_simple_bind_s(ldap_struct, ldap_dn, ldap_secret); - if (rc != LDAP_SUCCESS) - { + if (rc != LDAP_SUCCESS) { DEBUG(0, ("Bind failed: %s\n", ldap_err2string(rc))); return False; } @@ -421,7 +430,7 @@ static int ldapsam_search_one_user (struct ldapsam_privates *ldap_state, LDAP * DEBUG(2, ("ldapsam_search_one_user: searching for:[%s]\n", filter)); - rc = ldap_search_s(ldap_struct, lp_ldap_suffix (), scope, filter, attr, 0, result); + rc = ldap_search_s(ldap_struct, lp_ldap_suffix (), scope, filter, (char **)attr, 0, result); if (rc != LDAP_SUCCESS) { DEBUG(0,("ldapsam_search_one_user: Problem during the LDAP search: %s\n", @@ -944,9 +953,6 @@ static BOOL init_ldap_from_sam (struct ldapsam_privates *ldap_state, slprintf(temp, sizeof(temp) - 1, "%i", rid); make_a_mod(mods, ldap_op, "primaryGroupID", temp); - slprintf (temp, sizeof (temp) - 1, "%li", pdb_get_pass_last_set_time(sampass)); - make_a_mod(mods, ldap_op, "pwdLastSet", temp); - /* displayName, cn, and gecos should all be the same * most easily accomplished by giving them the same OID * gecos isn't set here b/c it should be handled by the @@ -989,6 +995,7 @@ static BOOL init_ldap_from_sam (struct ldapsam_privates *ldap_state, make_a_mod(mods, ldap_op, "kickoffTime", temp); } + if (IS_SAM_SET(sampass, FLAG_SAM_CANCHANGETIME)) { slprintf (temp, sizeof (temp) - 1, "%li", pdb_get_pass_can_change_time(sampass)); make_a_mod(mods, ldap_op, "pwdCanChange", temp); @@ -999,13 +1006,22 @@ static BOOL init_ldap_from_sam (struct ldapsam_privates *ldap_state, make_a_mod(mods, ldap_op, "pwdMustChange", temp); } - /* FIXME: Hours stuff goes in LDAP */ - pdb_sethexpwd (temp, pdb_get_lanman_passwd(sampass), pdb_get_acct_ctrl(sampass)); - make_a_mod (mods, ldap_op, "lmPassword", temp); + if ((pdb_get_acct_ctrl(sampass)&(ACB_WSTRUST|ACB_SVRTRUST|ACB_DOMTRUST))|| + (lp_ldap_passwd_sync()!=LDAP_PASSWD_SYNC_ONLY)) { + + pdb_sethexpwd (temp, pdb_get_lanman_passwd(sampass), pdb_get_acct_ctrl(sampass)); + make_a_mod (mods, ldap_op, "lmPassword", temp); - pdb_sethexpwd (temp, pdb_get_nt_passwd(sampass), pdb_get_acct_ctrl(sampass)); - make_a_mod (mods, ldap_op, "ntPassword", temp); + pdb_sethexpwd (temp, pdb_get_nt_passwd(sampass), pdb_get_acct_ctrl(sampass)); + make_a_mod (mods, ldap_op, "ntPassword", temp); + slprintf (temp, sizeof (temp) - 1, "%li", pdb_get_pass_last_set_time(sampass)); + make_a_mod(mods, ldap_op, "pwdLastSet", temp); + + } + + /* FIXME: Hours stuff goes in LDAP */ + make_a_mod (mods, ldap_op, "acctFlags", pdb_encode_acct_ctrl (pdb_get_acct_ctrl(sampass), NEW_PW_FORMAT_SPACE_PADDED_LEN)); @@ -1030,18 +1046,18 @@ static uint32 check_nua_rid_is_avail(struct ldapsam_privates *ldap_state, uint32 if (ldapsam_search_one_user_by_rid(ldap_state, ldap_struct, final_rid, &result) != LDAP_SUCCESS) { DEBUG(0, ("Cannot allocate NUA RID %d (0x%x), as the confirmation search failed!\n", final_rid, final_rid)); - final_rid = 0; ldap_msgfree(result); + return 0; } - if (ldap_count_entries(ldap_struct, result) != 0) - { + if (ldap_count_entries(ldap_struct, result) != 0) { DEBUG(0, ("Cannot allocate NUA RID %d (0x%x), as the RID is already in use!!\n", final_rid, final_rid)); - final_rid = 0; ldap_msgfree(result); + return 0; } DEBUG(5, ("NUA RID %d (0x%x), declared valid\n", final_rid, final_rid)); + ldap_msgfree(result); return final_rid; } @@ -1093,12 +1109,10 @@ static uint32 search_top_nua_rid(struct ldapsam_privates *ldap_state, LDAP *ldap DEBUG(2, ("ldapsam_get_next_available_nua_rid: searching for:[%s]\n", final_filter)); rc = ldap_search_s(ldap_struct, lp_ldap_suffix(), - LDAP_SCOPE_SUBTREE, final_filter, attr, 0, + LDAP_SCOPE_SUBTREE, final_filter, (char **)attr, 0, &result); - if (rc != LDAP_SUCCESS) - { - + if (rc != LDAP_SUCCESS) { DEBUG(3, ("LDAP search failed! cannot find base for NUA RIDs: %s\n", ldap_err2string(rc))); DEBUGADD(3, ("Query was: %s, %s\n", lp_ldap_suffix(), final_filter)); @@ -1149,12 +1163,10 @@ static uint32 ldapsam_get_next_available_nua_rid(struct ldapsam_privates *ldap_s uint32 next_nua_rid; uint32 top_nua_rid; - if (!ldapsam_open_connection(ldap_state, &ldap_struct)) - { + if (!ldapsam_open_connection(ldap_state, &ldap_struct)) { return 0; } - if (!ldapsam_connect_system(ldap_state, ldap_struct)) - { + if (!ldapsam_connect_system(ldap_state, ldap_struct)) { ldap_unbind(ldap_struct); return 0; } @@ -1177,12 +1189,10 @@ static BOOL ldapsam_setsampwent(struct pdb_methods *my_methods, BOOL update) int rc; pstring filter; - if (!ldapsam_open_connection(ldap_state, &ldap_state->ldap_struct)) - { + if (!ldapsam_open_connection(ldap_state, &ldap_state->ldap_struct)) { return False; } - if (!ldapsam_connect_system(ldap_state, ldap_state->ldap_struct)) - { + if (!ldapsam_connect_system(ldap_state, ldap_state->ldap_struct)) { ldap_unbind(ldap_state->ldap_struct); return False; } @@ -1191,11 +1201,10 @@ static BOOL ldapsam_setsampwent(struct pdb_methods *my_methods, BOOL update) all_string_sub(filter, "%u", "*", sizeof(pstring)); rc = ldap_search_s(ldap_state->ldap_struct, lp_ldap_suffix(), - LDAP_SCOPE_SUBTREE, filter, attr, 0, + LDAP_SCOPE_SUBTREE, filter, (char **)attr, 0, &ldap_state->result); - if (rc != LDAP_SUCCESS) - { + if (rc != LDAP_SUCCESS) { DEBUG(0, ("LDAP search failed: %s\n", ldap_err2string(rc))); DEBUG(3, ("Query was: %s, %s\n", lp_ldap_suffix(), filter)); ldap_msgfree(ldap_state->result); @@ -1222,8 +1231,7 @@ End enumeration of the LDAP password list static void ldapsam_endsampwent(struct pdb_methods *my_methods) { struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; - if (ldap_state->ldap_struct && ldap_state->result) - { + if (ldap_state->ldap_struct && ldap_state->result) { ldap_msgfree(ldap_state->result); ldap_unbind(ldap_state->ldap_struct); ldap_state->ldap_struct = NULL; @@ -1234,7 +1242,7 @@ static void ldapsam_endsampwent(struct pdb_methods *my_methods) /********************************************************************** Get the next entry in the LDAP password database *********************************************************************/ -static BOOL ldapsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT * user) +static BOOL ldapsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *user) { struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; BOOL ret = False; @@ -1252,8 +1260,7 @@ static BOOL ldapsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT * us ldap_state->entry); ldap_state->entry = ldap_next_entry(ldap_state->ldap_struct, - ldap_state->entry); - + ldap_state->entry); } return True; @@ -1262,7 +1269,7 @@ static BOOL ldapsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT * us /********************************************************************** Get SAM_ACCOUNT entry from LDAP by username *********************************************************************/ -static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT * user, const char *sname) +static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT *user, const char *sname) { struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; LDAP *ldap_struct; @@ -1271,18 +1278,15 @@ static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT * us if (!ldapsam_open_connection(ldap_state, &ldap_struct)) return False; - if (!ldapsam_connect_system(ldap_state, ldap_struct)) - { + if (!ldapsam_connect_system(ldap_state, ldap_struct)) { ldap_unbind(ldap_struct); return False; } - if (ldapsam_search_one_user_by_name(ldap_state, ldap_struct, sname, &result) != LDAP_SUCCESS) - { + if (ldapsam_search_one_user_by_name(ldap_state, ldap_struct, sname, &result) != LDAP_SUCCESS) { ldap_unbind(ldap_struct); return False; } - if (ldap_count_entries(ldap_struct, result) < 1) - { + if (ldap_count_entries(ldap_struct, result) < 1) { DEBUG(4, ("We don't find this user [%s] count=%d\n", sname, ldap_count_entries(ldap_struct, result))); @@ -1290,8 +1294,7 @@ static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT * us return False; } entry = ldap_first_entry(ldap_struct, result); - if (entry) - { + if (entry) { if (!init_sam_from_ldap(ldap_state, user, ldap_struct, entry)) { DEBUG(1,("ldapsam_getsampwnam: init_sam_from_ldap failed for user '%s'!\n", sname)); ldap_msgfree(result); @@ -1301,9 +1304,7 @@ static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT * us ldap_msgfree(result); ldap_unbind(ldap_struct); return True; - } - else - { + } else { ldap_msgfree(result); ldap_unbind(ldap_struct); return False; @@ -1313,7 +1314,7 @@ static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT * us /********************************************************************** Get SAM_ACCOUNT entry from LDAP by rid *********************************************************************/ -static BOOL ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT * user, uint32 rid) +static BOOL ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT *user, uint32 rid) { struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; LDAP *ldap_struct; @@ -1323,20 +1324,17 @@ static BOOL ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT * us if (!ldapsam_open_connection(ldap_state, &ldap_struct)) return False; - if (!ldapsam_connect_system(ldap_state, ldap_struct)) - { + if (!ldapsam_connect_system(ldap_state, ldap_struct)) { ldap_unbind(ldap_struct); return False; } if (ldapsam_search_one_user_by_rid(ldap_state, ldap_struct, rid, &result) != - LDAP_SUCCESS) - { + LDAP_SUCCESS) { ldap_unbind(ldap_struct); return False; } - if (ldap_count_entries(ldap_struct, result) < 1) - { + if (ldap_count_entries(ldap_struct, result) < 1) { DEBUG(4, ("We don't find this rid [%i] count=%d\n", rid, ldap_count_entries(ldap_struct, result))); @@ -1345,8 +1343,7 @@ static BOOL ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT * us } entry = ldap_first_entry(ldap_struct, result); - if (entry) - { + if (entry) { if (!init_sam_from_ldap(ldap_state, user, ldap_struct, entry)) { DEBUG(1,("ldapsam_getsampwrid: init_sam_from_ldap failed!\n")); ldap_msgfree(result); @@ -1356,9 +1353,7 @@ static BOOL ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT * us ldap_msgfree(result); ldap_unbind(ldap_struct); return True; - } - else - { + } else { ldap_msgfree(result); ldap_unbind(ldap_struct); return False; @@ -1373,6 +1368,95 @@ static BOOL ldapsam_getsampwsid(struct pdb_methods *my_methods, SAM_ACCOUNT * us return ldapsam_getsampwrid(my_methods, user, rid); } +static BOOL ldapsam_modify_entry(LDAP *ldap_struct,SAM_ACCOUNT *newpwd,char *dn,LDAPMod **mods,int ldap_op) +{ + int version; + int rc; + + switch(ldap_op) + { + case LDAP_MOD_ADD: + make_a_mod(&mods, LDAP_MOD_ADD, "objectclass", "account"); + if((rc = ldap_add_s(ldap_struct,dn,mods))!=LDAP_SUCCESS) { + char *ld_error; + ldap_get_option(ldap_struct, LDAP_OPT_ERROR_STRING, + &ld_error); + DEBUG(0, + ("failed to add user with uid = %s with: %s\n\t%s\n", + pdb_get_username(newpwd), ldap_err2string(rc), + ld_error)); + free(ld_error); + return False; + } + break; + case LDAP_MOD_REPLACE: + if((rc = ldap_modify_s(ldap_struct,dn,mods))!=LDAP_SUCCESS) { + char *ld_error; + ldap_get_option(ldap_struct, LDAP_OPT_ERROR_STRING, + &ld_error); + DEBUG(0, + ("failed to modify user with uid = %s with: %s\n\t%s\n", + pdb_get_username(newpwd), ldap_err2string(rc), + ld_error)); + free(ld_error); + return False; + } + break; + default: + DEBUG(0,("Wrong LDAP operation type: %d!\n",ldap_op)); + return False; + } + +#ifdef LDAP_EXOP_X_MODIFY_PASSWD + if (!(pdb_get_acct_ctrl(newpwd)&(ACB_WSTRUST|ACB_SVRTRUST|ACB_DOMTRUST))&& + (lp_ldap_passwd_sync()!=LDAP_PASSWD_SYNC_OFF)&& + (pdb_get_plaintext_passwd(newpwd)!=NULL)) { + BerElement *ber; + struct berval *bv; + char *retoid; + struct berval *retdata; + + if (ldap_get_option(ldap_struct, LDAP_OPT_PROTOCOL_VERSION, &version) == LDAP_OPT_SUCCESS) { + if (version != LDAP_VERSION3) { + version = LDAP_VERSION3; + ldap_set_option (ldap_struct, LDAP_OPT_PROTOCOL_VERSION, &version); + } + } + + if ((ber = ber_alloc_t(LBER_USE_DER))==NULL) { + DEBUG(0,("ber_alloc_t returns NULL\n")); + return False; + } + ber_printf (ber, "{"); + ber_printf (ber, "ts", LDAP_TAG_EXOP_X_MODIFY_PASSWD_ID,dn); + ber_printf (ber, "ts", LDAP_TAG_EXOP_X_MODIFY_PASSWD_NEW, pdb_get_plaintext_passwd(newpwd)); + ber_printf (ber, "N}"); + + if ((rc = ber_flatten (ber, &bv))<0) { + DEBUG(0,("ber_flatten returns a value <0\n")); + return False; + } + + ber_free(ber,1); + + if ((rc = ldap_extended_operation_s(ldap_struct, LDAP_EXOP_X_MODIFY_PASSWD, + bv, NULL, NULL, &retoid, &retdata))!=LDAP_SUCCESS) { + DEBUG(0,("LDAP Password could not be changed for user %s: %s\n", + pdb_get_username(newpwd),ldap_err2string(rc))); + } else { + DEBUG(3,("LDAP Password changed for user %s\n",pdb_get_username(newpwd))); + + ber_bvfree(retdata); + ber_memfree(retoid); + } + ber_bvfree(bv); + } +#else + DEBUG(10,("LDAP PASSWORD SYNC is not supported!\n")); +#endif /* LDAP_EXOP_X_MODIFY_PASSWD */ + return True; +} + /********************************************************************** Delete entry from LDAP for username *********************************************************************/ @@ -1414,7 +1498,8 @@ static BOOL ldapsam_delete_sam_account(struct pdb_methods *my_methods, SAM_ACCOU entry = ldap_first_entry (ldap_struct, result); dn = ldap_get_dn (ldap_struct, entry); - + ldap_msgfree(result); + rc = ldap_delete_s (ldap_struct, dn); ldap_memfree (dn); @@ -1449,8 +1534,7 @@ static BOOL ldapsam_update_sam_account(struct pdb_methods *my_methods, SAM_ACCOU if (!ldapsam_open_connection(ldap_state, &ldap_struct)) /* open a connection to the server */ return False; - if (!ldapsam_connect_system(ldap_state, ldap_struct)) /* connect as system account */ - { + if (!ldapsam_connect_system(ldap_state, ldap_struct)) { /* connect as system account */ ldap_unbind(ldap_struct); return False; } @@ -1458,8 +1542,7 @@ static BOOL ldapsam_update_sam_account(struct pdb_methods *my_methods, SAM_ACCOU rc = ldapsam_search_one_user_by_name(ldap_state, ldap_struct, pdb_get_username(newpwd), &result); - if (ldap_count_entries(ldap_struct, result) == 0) - { + if (ldap_count_entries(ldap_struct, result) == 0) { DEBUG(0, ("No user to modify!\n")); ldap_msgfree(result); ldap_unbind(ldap_struct); @@ -1475,23 +1558,17 @@ static BOOL ldapsam_update_sam_account(struct pdb_methods *my_methods, SAM_ACCOU entry = ldap_first_entry(ldap_struct, result); dn = ldap_get_dn(ldap_struct, entry); - - rc = ldap_modify_s(ldap_struct, dn, mods); - - if (rc != LDAP_SUCCESS) - { - char *ld_error; - ldap_get_option(ldap_struct, LDAP_OPT_ERROR_STRING, - &ld_error); - DEBUG(0, - ("failed to modify user with uid = %s with: %s\n\t%s\n", - pdb_get_username(newpwd), ldap_err2string(rc), - ld_error)); - free(ld_error); + ldap_msgfree(result); + + if (!ldapsam_modify_entry(ldap_struct,newpwd,dn,mods,LDAP_MOD_REPLACE)) { + DEBUG(0,("failed to modify user with uid = %s\n", + pdb_get_username(newpwd))); + ldap_mods_free(mods,1); ldap_unbind(ldap_struct); return False; } + DEBUG(2, ("successfully modified uid = %s in the LDAP database\n", pdb_get_username(newpwd))); @@ -1514,7 +1591,7 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT LDAPMod **mods = NULL; int ldap_op; uint32 num_result; - + const char *username = pdb_get_username(newpwd); if (!username || !*username) { DEBUG(0, ("Cannot add user without a username!\n")); @@ -1522,20 +1599,16 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT } if (!ldapsam_open_connection(ldap_state, &ldap_struct)) /* open a connection to the server */ - { return False; - } - if (!ldapsam_connect_system(ldap_state, ldap_struct)) /* connect as system account */ - { + if (!ldapsam_connect_system(ldap_state, ldap_struct)) { /* connect as system account */ ldap_unbind(ldap_struct); return False; } rc = ldapsam_search_one_user_by_name (ldap_state, ldap_struct, username, &result); - if (ldap_count_entries(ldap_struct, result) != 0) - { + if (ldap_count_entries(ldap_struct, result) != 0) { DEBUG(0,("User already in the base, with samba properties\n")); ldap_msgfree(result); ldap_unbind(ldap_struct); @@ -1564,8 +1637,7 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT tmp = ldap_get_dn (ldap_struct, entry); slprintf (dn, sizeof (dn) - 1, "%s", tmp); ldap_memfree (tmp); - } - else { + } else { /* Check if we need to add an entry */ DEBUG(3,("Adding new user\n")); ldap_op = LDAP_MOD_ADD; @@ -1586,27 +1658,14 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT } make_a_mod(&mods, LDAP_MOD_ADD, "objectclass", "sambaAccount"); - if (ldap_op == LDAP_MOD_REPLACE) { - rc = ldap_modify_s(ldap_struct, dn, mods); - } - else { - make_a_mod(&mods, LDAP_MOD_ADD, "objectclass", "account"); - rc = ldap_add_s(ldap_struct, dn, mods); - } - - if (rc != LDAP_SUCCESS) - { - char *ld_error; - - ldap_get_option (ldap_struct, LDAP_OPT_ERROR_STRING, &ld_error); - DEBUG(0,("failed to modify/add user with uid = %s (dn = %s) with: %s\n\t%s\n", - pdb_get_username(newpwd), dn, ldap_err2string (rc), ld_error)); - free(ld_error); - ldap_mods_free(mods, 1); + if (!ldapsam_modify_entry(ldap_struct,newpwd,dn,mods,ldap_op)) { + DEBUG(0,("failed to modify/add user with uid = %s (dn = %s)\n", + pdb_get_username(newpwd),dn)); + ldap_mods_free(mods,1); ldap_unbind(ldap_struct); return False; } - + DEBUG(2,("added: uid = %s in the LDAP database\n", pdb_get_username(newpwd))); ldap_mods_free(mods, 1); ldap_unbind(ldap_struct); -- cgit From 4aea951102a6e82612560e6a59931fde433ee6ea Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 25 Sep 2002 11:42:30 +0000 Subject: Don't crash when a backend doesn't have a setsampwent function available - bug reported by metze --- source/passdb/pdb_interface.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/passdb/pdb_interface.c b/source/passdb/pdb_interface.c index f5926e54f12..f965dd727cc 100644 --- a/source/passdb/pdb_interface.c +++ b/source/passdb/pdb_interface.c @@ -41,7 +41,7 @@ const struct pdb_init_function_entry builtin_pdb_init_functions[] = { static BOOL context_setsampwent(struct pdb_context *context, BOOL update) { - if ((!context) || (!context->pdb_methods) || (!context->pdb_methods->setsampwent)) { + if (!context) { DEBUG(0, ("invalid pdb_context specified!\n")); return False; } @@ -53,7 +53,7 @@ static BOOL context_setsampwent(struct pdb_context *context, BOOL update) return True; } - while (!(context->pwent_methods->setsampwent(context->pwent_methods, update))) { + while (!(context->pwent_methods->setsampwent) || !(context->pwent_methods->setsampwent(context->pwent_methods, update))) { context->pwent_methods = context->pwent_methods->next; if (context->pwent_methods == NULL) return False; -- cgit From a198940ea6f7b7f3cba38c5a9f695e0731204583 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 12:02:57 +0000 Subject: Whenever we deal with adding machine/trusted domain accounts, always reset the flag to what we expect. This handles the 'upgrade' from unixsam beter (where all $ terminated accounts are machines). Andrew Bartlett --- source/passdb/passdb.c | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/source/passdb/passdb.c b/source/passdb/passdb.c index e0f0cce67fb..b78f26a8e81 100644 --- a/source/passdb/passdb.c +++ b/source/passdb/passdb.c @@ -1003,6 +1003,7 @@ BOOL local_password_change(const char *user_name, int local_flags, { struct passwd *pwd = NULL; SAM_ACCOUNT *sam_pass=NULL; + uint16 other_acb; *err_str = '\0'; *msg_str = '\0'; @@ -1042,31 +1043,33 @@ BOOL local_password_change(const char *user_name, int local_flags, return False; } } - if (local_flags & LOCAL_TRUST_ACCOUNT) { - if (!pdb_set_acct_ctrl(sam_pass, ACB_WSTRUST)) { - slprintf(err_str, err_str_len - 1, "Failed to set 'trusted workstation account' flags for user %s.\n", user_name); - pdb_free_sam(&sam_pass); - return False; - } - } else if (local_flags & LOCAL_INTERDOM_ACCOUNT) { - if (!pdb_set_acct_ctrl(sam_pass, ACB_DOMTRUST)) { - slprintf(err_str, err_str_len - 1, "Failed to set 'domain trust account' flags for user %s.\n", user_name); - pdb_free_sam(&sam_pass); - return False; - } - } else { - if (!pdb_set_acct_ctrl(sam_pass, ACB_NORMAL)) { - slprintf(err_str, err_str_len - 1, "Failed to set 'normal account' flags for user %s.\n", user_name); - pdb_free_sam(&sam_pass); - return False; - } - } - } else { /* the entry already existed */ local_flags &= ~LOCAL_ADD_USER; } + /* the 'other' acb bits not being changed here */ + other_acb = (pdb_get_acct_ctrl(sam_pass) & (!(ACB_WSTRUST|ACB_DOMTRUST|ACB_SVRTRUST|ACB_NORMAL))); + if (local_flags & LOCAL_TRUST_ACCOUNT) { + if (!pdb_set_acct_ctrl(sam_pass, ACB_WSTRUST | other_acb) ) { + slprintf(err_str, err_str_len - 1, "Failed to set 'trusted workstation account' flags for user %s.\n", user_name); + pdb_free_sam(&sam_pass); + return False; + } + } else if (local_flags & LOCAL_INTERDOM_ACCOUNT) { + if (!pdb_set_acct_ctrl(sam_pass, ACB_DOMTRUST | other_acb)) { + slprintf(err_str, err_str_len - 1, "Failed to set 'domain trust account' flags for user %s.\n", user_name); + pdb_free_sam(&sam_pass); + return False; + } + } else { + if (!pdb_set_acct_ctrl(sam_pass, ACB_NORMAL | other_acb)) { + slprintf(err_str, err_str_len - 1, "Failed to set 'normal account' flags for user %s.\n", user_name); + pdb_free_sam(&sam_pass); + return False; + } + } + /* * We are root - just write the new password * and the valid last change time. -- cgit From 0e6babc306f60e88fc28705a8d4ad112bafe92cb Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 12:09:56 +0000 Subject: Metze claims that without this his win2k server gets horribly confused looking for all sorts of AD things in lp_realm(). We need to get some non-Win2k NTLMSSP and chase this up a bit, but this will do for now. (Hmm, this might affect NTLMv2 as well) Andrew Bartlett --- source/smbd/sesssetup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/smbd/sesssetup.c b/source/smbd/sesssetup.c index 785f8d68211..b9af7200089 100644 --- a/source/smbd/sesssetup.c +++ b/source/smbd/sesssetup.c @@ -322,12 +322,12 @@ static int reply_spnego_negotiate(connection_struct *conn, "U", lp_workgroup()); - fstrcpy(dnsdomname, lp_realm()); + fstrcpy(dnsdomname, (SEC_ADS == lp_security())?lp_realm():""); strlower(dnsdomname); fstrcpy(dnsname, global_myname); fstrcat(dnsname, "."); - fstrcat(dnsname, lp_realm()); + fstrcat(dnsname, dnsdomname); strlower(dnsname); msrpc_gen(&struct_blob, "aaaaa", -- cgit From 25950dbb3272949a235bed936c7d7b1d23f15fac Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 12:32:17 +0000 Subject: Fix the circular dependency that was preventing 'domain master = auto' (the default) from working. Andrew Bartlett --- source/param/loadparm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/param/loadparm.c b/source/param/loadparm.c index 4aaf6f20eb7..c4844398370 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -3563,7 +3563,7 @@ static void set_server_role(void) case SEC_USER: if (lp_domain_logons()) { - if (lp_domain_master()) + if (Globals.bDomainMaster) /* auto or yes */ server_role = ROLE_DOMAIN_PDC; else server_role = ROLE_DOMAIN_BDC; -- cgit From 70d9b71ceaeba95712fa61e601376ff5cc8e7714 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 25 Sep 2002 12:59:47 +0000 Subject: remove extern for AllowDebugChange since we don't use it --- source/torture/samtest.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source/torture/samtest.c b/source/torture/samtest.c index 2bbf01a6bed..b5f7ed9f765 100644 --- a/source/torture/samtest.c +++ b/source/torture/samtest.c @@ -358,7 +358,6 @@ int main(int argc, char *argv[]) static char *config_file = dyn_CONFIGFILE; pstring logfile; struct cmd_set **cmd_set; - extern BOOL AllowDebugChange; struct samtest_state st; -- cgit From 6b78e554c3dd3c98bff7dbd1d3715a9b7e405b8d Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 14:18:11 +0000 Subject: Make it clear what this if statement applies to, and what it doesn't --- source/passdb/pdb_get_set.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/passdb/pdb_get_set.c b/source/passdb/pdb_get_set.c index 0c338f317ec..07474693ddf 100644 --- a/source/passdb/pdb_get_set.c +++ b/source/passdb/pdb_get_set.c @@ -964,6 +964,7 @@ BOOL pdb_set_plaintext_pw_only (SAM_ACCOUNT *sampass, const char *password) if (password) { if (sampass->private.plaintext_pw!=NULL) memset(sampass->private.plaintext_pw,'\0',strlen(sampass->private.plaintext_pw)+1); + sampass->private.plaintext_pw = talloc_strdup(sampass->mem_ctx, password); if (!sampass->private.plaintext_pw) { -- cgit From 1b55965f12dc2ede46ca2dbc82acbf56b7e33e2e Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 25 Sep 2002 15:46:49 +0000 Subject: fix getpass replacement check (i thought I fixed this a few days ago....) --- source/nsswitch/winbind_nss_config.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/nsswitch/winbind_nss_config.h b/source/nsswitch/winbind_nss_config.h index d9a9b8aaaef..2faaa30d1b6 100644 --- a/source/nsswitch/winbind_nss_config.h +++ b/source/nsswitch/winbind_nss_config.h @@ -26,7 +26,9 @@ /* Include header files from data in config.h file */ +#ifndef NO_CONFIG_H #include +#endif #include -- cgit From e969b1897269ebd27650c2192cd19ebda47e042e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 25 Sep 2002 15:54:40 +0000 Subject: add samtest commands: - show_domain - context --- source/torture/cmd_sam.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 134 insertions(+), 1 deletion(-) diff --git a/source/torture/cmd_sam.c b/source/torture/cmd_sam.c index 3ebf91434e4..535711bb12d 100644 --- a/source/torture/cmd_sam.c +++ b/source/torture/cmd_sam.c @@ -22,6 +22,30 @@ #include "includes.h" #include "samtest.h" +static NTSTATUS cmd_context(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + NTSTATUS status; + char **plugins; + int i; + + plugins = malloc(argc * sizeof(char *)); + + for(i = 1; i < argc; i++) + plugins[i-1] = argv[i]; + + plugins[argc-1] = NULL; + + if(!NT_STATUS_IS_OK(status = make_sam_context_list(&st->context, plugins))) { + printf("make_sam_context_list failed: %s\n", nt_errstr(status)); + SAFE_FREE(plugins); + return status; + } + + SAFE_FREE(plugins); + + return NT_STATUS_OK; +} + static NTSTATUS cmd_load_module(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { char *plugin_arg[2]; @@ -165,7 +189,115 @@ static NTSTATUS cmd_update_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, static NTSTATUS cmd_show_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { - return NT_STATUS_NOT_IMPLEMENTED; + NTSTATUS status; + DOM_SID sid; + SAM_DOMAIN_HANDLE *domain; + uint32 tmp_uint32; + uint16 tmp_uint16; + NTTIME tmp_nttime; + BOOL tmp_bool; + const char *tmp_string; + + if (argc != 2) { + printf("Usage: show_domain \n"); + return status; + } + + if (!string_to_sid(&sid, argv[1])){ + printf("Unparseable SID specified!\n"); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!NT_STATUS_IS_OK(status = context_sam_get_domain_by_sid(st->context, st->token, DOMAIN_ALL_ACCESS, &sid, &domain))) { + printf("context_sam_get_domain_by_sid failed\n"); + return status; + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_num_accounts(domain, &tmp_uint32))) { + printf("sam_get_domain_num_accounts failed: %s\n", nt_errstr(status)); + } else { + printf("Number of accounts: %d\n", tmp_uint32); + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_num_groups(domain, &tmp_uint32))) { + printf("sam_get_domain_num_groups failed: %s\n", nt_errstr(status)); + } else { + printf("Number of groups: %d\n", tmp_uint32); + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_num_aliases(domain, &tmp_uint32))) { + printf("sam_get_domain_num_aliases failed: %s\n", nt_errstr(status)); + } else { + printf("Number of aliases: %d\n", tmp_uint32); + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_name(domain, &tmp_string))) { + printf("sam_get_domain_name failed: %s\n", nt_errstr(status)); + } else { + printf("Domain Name: %s\n", tmp_string); + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_lockout_count(domain, &tmp_uint16))) { + printf("sam_get_domain_lockout_count failed: %s\n", nt_errstr(status)); + } else { + printf("Lockout Count: %d\n", tmp_uint16); + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_force_logoff(domain, &tmp_bool))) { + printf("sam_get_domain_force_logoff failed: %s\n", nt_errstr(status)); + } else { + printf("Force Logoff: %s\n", (tmp_bool?"Yes":"No")); + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_lockout_duration(domain, &tmp_nttime))) { + printf("sam_get_domain_lockout_duration failed: %s\n", nt_errstr(status)); + } else { + printf("Lockout duration: %d\n", tmp_nttime.low); + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_login_pwdchange(domain, &tmp_bool))) { + printf("sam_get_domain_login_pwdchange failed: %s\n", nt_errstr(status)); + } else { + printf("Password changing allowed: %s\n", (tmp_bool?"Yes":"No")); + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_max_pwdage(domain, &tmp_nttime))) { + printf("sam_get_domain_max_pwdage failed: %s\n", nt_errstr(status)); + } else { + printf("Maximum password age: %d\n", tmp_nttime.low); + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_min_pwdage(domain, &tmp_nttime))) { + printf("sam_get_domain_min_pwdage failed: %s\n", nt_errstr(status)); + } else { + printf("Minimal password age: %d\n", tmp_nttime.low); + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_min_pwdlength(domain, &tmp_uint16))) { + printf("sam_get_domain_min_pwdlength: %s\n", nt_errstr(status)); + } else { + printf("Minimal Password Length: %d\n", tmp_uint16); + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_pwd_history(domain, &tmp_uint16))) { + printf("sam_get_domain_pwd_history failed: %s\n", nt_errstr(status)); + } else { + printf("Password history: %d\n", tmp_uint16); + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_reset_count(domain, &tmp_nttime))) { + printf("sam_get_domain_reset_count failed: %s\n", nt_errstr(status)); + } else { + printf("Reset count: %d\n", tmp_nttime.low); + } + + if (!NT_STATUS_IS_OK(status = sam_get_domain_server(domain, &tmp_string))) { + printf("sam_get_domain_server failed: %s\n", nt_errstr(status)); + } else { + printf("Server: %s\n", tmp_string); + } + + return NT_STATUS_OK; } static NTSTATUS cmd_create_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) @@ -255,6 +387,7 @@ struct cmd_set sam_general_commands[] = { { "General SAM Commands" }, { "load", cmd_load_module, "Load a module", "load [domain-sid]" }, + { "context", cmd_context, "Load specified context", "context [DOMAIN|]backend1[:options] [DOMAIN|]backend2[:options]" }, { "get_sec_desc", cmd_get_sec_desc, "Get security descriptor info", "get_sec_desc " }, { "set_sec_desc", cmd_set_sec_desc, "Set security descriptor info", "set_sec_desc " }, { "lookup_sid", cmd_lookup_sid, "Lookup type of specified SID", "lookup_sid " }, -- cgit From 81156d6556dab2ea23dea69da6940a0482d79d9b Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 25 Sep 2002 17:10:58 +0000 Subject: Add samtest command 'enum_accounts' + few typo fixes in sam/interface.c --- source/sam/interface.c | 4 +--- source/torture/cmd_sam.c | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/source/sam/interface.c b/source/sam/interface.c index bb7b88b240b..320e39dbb46 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -904,7 +904,7 @@ void free_sam_context(SAM_CONTEXT **context) } /****************************************************************** - Make a sam_methods from scratch + Make a backend_entry from scratch *******************************************************************/ static NTSTATUS make_backend_entry(SAM_BACKEND_ENTRY *backend_entry, char *sam_backend_string) @@ -1175,8 +1175,6 @@ NTSTATUS make_sam_context(SAM_CONTEXT **context) (*context)->mem_ctx = mem_ctx; - /* FIXME */ - (*context)->free_fn = free_sam_context; return NT_STATUS_OK; diff --git a/source/torture/cmd_sam.c b/source/torture/cmd_sam.c index 535711bb12d..caa63f13029 100644 --- a/source/torture/cmd_sam.c +++ b/source/torture/cmd_sam.c @@ -317,7 +317,35 @@ static NTSTATUS cmd_delete_account(struct samtest_state *st, TALLOC_CTX *mem_ctx static NTSTATUS cmd_enum_accounts(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { - return NT_STATUS_NOT_IMPLEMENTED; + NTSTATUS status; + DOM_SID sid; + int32 account_count, i; + SAM_ACCOUNT_ENUM *accounts; + + if (argc != 2) { + printf("Usage: enum_accounts \n"); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!string_to_sid(&sid, argv[1])){ + printf("Unparseable SID specified!\n"); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!NT_STATUS_IS_OK(status = context_sam_enum_accounts(st->context, st->token, &sid, 0, &account_count, &accounts))) { + printf("context_sam_enum_accounts failed: %s\n", nt_errstr(status)); + return status; + } + + for (i = 0; i < account_count; i++) + printf("%s\t%s\t%s\t%s\t%d\n", + sid_string_static(&accounts[i].sid), accounts[i].account_name, + accounts[i].full_name, accounts[i].account_desc, + accounts[i].acct_ctrl); + + SAFE_FREE(accounts); + + return NT_STATUS_OK; } static NTSTATUS cmd_lookup_account_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -- cgit From ee3b497962a28c7c58e866b8536b1d2ae6f9b23a Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 25 Sep 2002 19:33:04 +0000 Subject: notify user when no {domains,accounts} were found --- source/torture/cmd_sam.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/torture/cmd_sam.c b/source/torture/cmd_sam.c index caa63f13029..3d4725c8a8a 100644 --- a/source/torture/cmd_sam.c +++ b/source/torture/cmd_sam.c @@ -172,6 +172,11 @@ static NTSTATUS cmd_enum_domains(struct samtest_state *st, TALLOC_CTX *mem_ctx, return status; } + if (domain_count == 0) { + printf("No domains found!\n"); + return NT_STATUS_OK; + } + for (i = 0; i < domain_count; i++) { printf("%s %s\n", domain_names[i], sid_string_static(&domain_sids[i])); } @@ -337,6 +342,11 @@ static NTSTATUS cmd_enum_accounts(struct samtest_state *st, TALLOC_CTX *mem_ctx, return status; } + if (account_count == 0) { + printf("No accounts found!\n"); + return NT_STATUS_OK; + } + for (i = 0; i < account_count; i++) printf("%s\t%s\t%s\t%s\t%d\n", sid_string_static(&accounts[i].sid), accounts[i].account_name, -- cgit From 102a26e06591928a03b49cd312a65811ed46314f Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Thu, 26 Sep 2002 09:50:53 +0000 Subject: move all the passdb internal interface to NTSTATUS only the interface has been fully moved to NTSTATUS not all the plugins make full use of it, but have been all converted. My testings passed completely, however a bit of more testing is welcome Simo. --- source/passdb/pdb_interface.c | 116 ++++++++++++++++++------------------ source/passdb/pdb_ldap.c | 133 ++++++++++++++++++++++-------------------- source/passdb/pdb_nisplus.c | 111 ++++++++++++++++++----------------- source/passdb/pdb_smbpasswd.c | 71 ++++++++++++---------- source/passdb/pdb_tdb.c | 70 ++++++++++++---------- source/passdb/pdb_unix.c | 62 +++++++++++++------- source/utils/pdbedit.c | 26 ++++----- 7 files changed, 320 insertions(+), 269 deletions(-) diff --git a/source/passdb/pdb_interface.c b/source/passdb/pdb_interface.c index f965dd727cc..a94b8b8992a 100644 --- a/source/passdb/pdb_interface.c +++ b/source/passdb/pdb_interface.c @@ -39,26 +39,28 @@ const struct pdb_init_function_entry builtin_pdb_init_functions[] = { { NULL, NULL} }; -static BOOL context_setsampwent(struct pdb_context *context, BOOL update) +static NTSTATUS context_setsampwent(struct pdb_context *context, BOOL update) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; + if (!context) { DEBUG(0, ("invalid pdb_context specified!\n")); - return False; + return ret; } context->pwent_methods = context->pdb_methods; if (!context->pwent_methods) { /* No passdbs at all */ - return True; + return ret; } - while (!(context->pwent_methods->setsampwent) || !(context->pwent_methods->setsampwent(context->pwent_methods, update))) { + while (NT_STATUS_IS_ERR(ret = context->pwent_methods->setsampwent(context->pwent_methods, update))) { context->pwent_methods = context->pwent_methods->next; if (context->pwent_methods == NULL) - return False; + return NT_STATUS_UNSUCCESSFUL; } - return True; + return ret; } static void context_endsampwent(struct pdb_context *context) @@ -75,81 +77,82 @@ static void context_endsampwent(struct pdb_context *context) context->pwent_methods = NULL; } -static BOOL context_getsampwent(struct pdb_context *context, SAM_ACCOUNT *user) +static NTSTATUS context_getsampwent(struct pdb_context *context, SAM_ACCOUNT *user) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; + if ((!context) || (!context->pwent_methods)) { DEBUG(0, ("invalid pdb_context specified!\n")); - return False; + return ret; } /* Loop until we find something useful */ - while ((!context->pwent_methods->getsampwent) || - context->pwent_methods->getsampwent(context->pwent_methods, user) == False){ + while (NT_STATUS_IS_ERR(ret = context->pwent_methods->getsampwent(context->pwent_methods, user))) { - if (context->pwent_methods->endsampwent) - context->pwent_methods->endsampwent(context->pwent_methods); + context->pwent_methods->endsampwent(context->pwent_methods); context->pwent_methods = context->pwent_methods->next; /* All methods are checked now. There are no more entries */ if (context->pwent_methods == NULL) - return False; + return ret; - if (!context->pwent_methods->setsampwent){ - DEBUG(5, ("next backend does not implment setsampwent\n")); - return False; - } - context->pwent_methods->setsampwent(context->pwent_methods, False); } user->methods = context->pwent_methods; - return True; + return ret; } -static BOOL context_getsampwnam(struct pdb_context *context, SAM_ACCOUNT *sam_acct, const char *username) +static NTSTATUS context_getsampwnam(struct pdb_context *context, SAM_ACCOUNT *sam_acct, const char *username) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; + struct pdb_methods *curmethods; if ((!context)) { DEBUG(0, ("invalid pdb_context specified!\n")); - return False; + return ret; } curmethods = context->pdb_methods; while (curmethods){ - if (curmethods->getsampwnam && curmethods->getsampwnam(curmethods, sam_acct, username) == True){ + if (NT_STATUS_IS_OK(ret = curmethods->getsampwnam(curmethods, sam_acct, username))) { sam_acct->methods = curmethods; - return True; + return ret; } curmethods = curmethods->next; } - return False; + return ret; } -static BOOL context_getsampwsid(struct pdb_context *context, SAM_ACCOUNT *sam_acct, const DOM_SID *sid) +static NTSTATUS context_getsampwsid(struct pdb_context *context, SAM_ACCOUNT *sam_acct, const DOM_SID *sid) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; + struct pdb_methods *curmethods; if ((!context)) { DEBUG(0, ("invalid pdb_context specified!\n")); - return False; + return ret; } curmethods = context->pdb_methods; while (curmethods){ - if (curmethods->getsampwsid && curmethods->getsampwsid(curmethods, sam_acct, sid) == True){ + if (NT_STATUS_IS_OK(ret = curmethods->getsampwsid(curmethods, sam_acct, sid))) { sam_acct->methods = curmethods; - return True; + return ret; } curmethods = curmethods->next; } - return False; + return ret; } -static BOOL context_add_sam_account(struct pdb_context *context, SAM_ACCOUNT *sam_acct) +static NTSTATUS context_add_sam_account(struct pdb_context *context, SAM_ACCOUNT *sam_acct) { - if ((!context) || (!context->pdb_methods) || (!context->pdb_methods->add_sam_account)) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; + + if ((!context) || (!context->pdb_methods)) { DEBUG(0, ("invalid pdb_context specified!\n")); - return False; + return ret; } /** @todo This is where a 're-read on add' should be done */ @@ -159,21 +162,18 @@ static BOOL context_add_sam_account(struct pdb_context *context, SAM_ACCOUNT *sa return context->pdb_methods->add_sam_account(context->pdb_methods, sam_acct); } -static BOOL context_update_sam_account(struct pdb_context *context, SAM_ACCOUNT *sam_acct) +static NTSTATUS context_update_sam_account(struct pdb_context *context, SAM_ACCOUNT *sam_acct) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; + if (!context) { DEBUG(0, ("invalid pdb_context specified!\n")); - return False; + return ret; } if (!sam_acct || !sam_acct->methods){ DEBUG(0, ("invalid sam_acct specified\n")); - return False; - } - - if (!sam_acct->methods->update_sam_account){ - DEBUG(0, ("invalid sam_acct->methods\n")); - return False; + return ret; } /** @todo This is where a 're-read on update' should be done */ @@ -181,12 +181,14 @@ static BOOL context_update_sam_account(struct pdb_context *context, SAM_ACCOUNT return sam_acct->methods->update_sam_account(sam_acct->methods, sam_acct); } -static BOOL context_delete_sam_account(struct pdb_context *context, SAM_ACCOUNT *sam_acct) +static NTSTATUS context_delete_sam_account(struct pdb_context *context, SAM_ACCOUNT *sam_acct) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; + struct pdb_methods *pdb_selected; if (!context) { DEBUG(0, ("invalid pdb_context specified!\n")); - return False; + return ret; } if (!sam_acct->methods){ @@ -197,17 +199,17 @@ static BOOL context_delete_sam_account(struct pdb_context *context, SAM_ACCOUNT * in /etc/passwd. */ while (pdb_selected){ - if (pdb_selected->delete_sam_account && pdb_selected->delete_sam_account(pdb_selected, sam_acct)){ - return True; + if (NT_STATUS_IS_OK(ret = pdb_selected->delete_sam_account(pdb_selected, sam_acct))) { + return ret; } pdb_selected = pdb_selected->next; } - return False; + return ret; } if (!sam_acct->methods->delete_sam_account){ DEBUG(0,("invalid sam_acct->methods->delete_sam_account\n")); - return False; + return ret; } return sam_acct->methods->delete_sam_account(sam_acct->methods, sam_acct); @@ -223,9 +225,7 @@ static void free_pdb_context(struct pdb_context **context) struct pdb_methods *pdb_selected = (*context)->pdb_methods; while (pdb_selected){ - if (pdb_selected->free_private_data) { - pdb_selected->free_private_data(&(pdb_selected->private_data)); - } + pdb_selected->free_private_data(&(pdb_selected->private_data)); pdb_selected = pdb_selected->next; } @@ -371,13 +371,13 @@ static struct pdb_context *pdb_get_static_context(BOOL reload) if ((pdb_context) && (reload)) { pdb_context->free_fn(&pdb_context); - if (!NT_STATUS_IS_OK(make_pdb_context_list(&pdb_context, lp_passdb_backend()))) { + if (NT_STATUS_IS_ERR(make_pdb_context_list(&pdb_context, lp_passdb_backend()))) { return NULL; } } if (!pdb_context) { - if (!NT_STATUS_IS_OK(make_pdb_context_list(&pdb_context, lp_passdb_backend()))) { + if (NT_STATUS_IS_ERR(make_pdb_context_list(&pdb_context, lp_passdb_backend()))) { return NULL; } } @@ -399,7 +399,7 @@ BOOL pdb_setsampwent(BOOL update) return False; } - return pdb_context->pdb_setsampwent(pdb_context, update); + return NT_STATUS_IS_OK(pdb_context->pdb_setsampwent(pdb_context, update)); } void pdb_endsampwent(void) @@ -421,7 +421,7 @@ BOOL pdb_getsampwent(SAM_ACCOUNT *user) return False; } - return pdb_context->pdb_getsampwent(pdb_context, user); + return NT_STATUS_IS_OK(pdb_context->pdb_getsampwent(pdb_context, user)); } BOOL pdb_getsampwnam(SAM_ACCOUNT *sam_acct, const char *username) @@ -432,7 +432,7 @@ BOOL pdb_getsampwnam(SAM_ACCOUNT *sam_acct, const char *username) return False; } - return pdb_context->pdb_getsampwnam(pdb_context, sam_acct, username); + return NT_STATUS_IS_OK(pdb_context->pdb_getsampwnam(pdb_context, sam_acct, username)); } BOOL pdb_getsampwsid(SAM_ACCOUNT *sam_acct, const DOM_SID *sid) @@ -443,7 +443,7 @@ BOOL pdb_getsampwsid(SAM_ACCOUNT *sam_acct, const DOM_SID *sid) return False; } - return pdb_context->pdb_getsampwsid(pdb_context, sam_acct, sid); + return NT_STATUS_IS_OK(pdb_context->pdb_getsampwsid(pdb_context, sam_acct, sid)); } BOOL pdb_add_sam_account(SAM_ACCOUNT *sam_acct) @@ -454,7 +454,7 @@ BOOL pdb_add_sam_account(SAM_ACCOUNT *sam_acct) return False; } - return pdb_context->pdb_add_sam_account(pdb_context, sam_acct); + return NT_STATUS_IS_OK(pdb_context->pdb_add_sam_account(pdb_context, sam_acct)); } BOOL pdb_update_sam_account(SAM_ACCOUNT *sam_acct) @@ -465,7 +465,7 @@ BOOL pdb_update_sam_account(SAM_ACCOUNT *sam_acct) return False; } - return pdb_context->pdb_update_sam_account(pdb_context, sam_acct); + return NT_STATUS_IS_OK(pdb_context->pdb_update_sam_account(pdb_context, sam_acct)); } BOOL pdb_delete_sam_account(SAM_ACCOUNT *sam_acct) @@ -476,7 +476,7 @@ BOOL pdb_delete_sam_account(SAM_ACCOUNT *sam_acct) return False; } - return pdb_context->pdb_delete_sam_account(pdb_context, sam_acct); + return NT_STATUS_IS_OK(pdb_context->pdb_delete_sam_account(pdb_context, sam_acct)); } #endif /* !defined(WITH_NISPLUS_SAM) */ diff --git a/source/passdb/pdb_ldap.c b/source/passdb/pdb_ldap.c index 71a8c256a3a..c7badb50e77 100644 --- a/source/passdb/pdb_ldap.c +++ b/source/passdb/pdb_ldap.c @@ -1183,18 +1183,19 @@ static uint32 ldapsam_get_next_available_nua_rid(struct ldapsam_privates *ldap_s /********************************************************************** Connect to LDAP server for password enumeration *********************************************************************/ -static BOOL ldapsam_setsampwent(struct pdb_methods *my_methods, BOOL update) +static NTSTATUS ldapsam_setsampwent(struct pdb_methods *my_methods, BOOL update) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; int rc; pstring filter; if (!ldapsam_open_connection(ldap_state, &ldap_state->ldap_struct)) { - return False; + return ret; } if (!ldapsam_connect_system(ldap_state, ldap_state->ldap_struct)) { ldap_unbind(ldap_state->ldap_struct); - return False; + return ret; } pstrcpy(filter, lp_ldap_filter()); @@ -1211,7 +1212,7 @@ static BOOL ldapsam_setsampwent(struct pdb_methods *my_methods, BOOL update) ldap_unbind(ldap_state->ldap_struct); ldap_state->ldap_struct = NULL; ldap_state->result = NULL; - return False; + return ret; } DEBUG(2, ("ldapsam_setsampwent: %d entries in the base!\n", @@ -1222,7 +1223,7 @@ static BOOL ldapsam_setsampwent(struct pdb_methods *my_methods, BOOL update) ldap_state->result); ldap_state->index = 0; - return True; + return NT_STATUS_OK; } /********************************************************************** @@ -1242,56 +1243,58 @@ static void ldapsam_endsampwent(struct pdb_methods *my_methods) /********************************************************************** Get the next entry in the LDAP password database *********************************************************************/ -static BOOL ldapsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *user) +static NTSTATUS ldapsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *user) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; - BOOL ret = False; + BOOL bret = False; /* The rebind proc needs this *HACK*. We are not multithreaded, so this will work, but it's not nice. */ static_ldap_state = ldap_state; - while (!ret) { + while (!bret) { if (!ldap_state->entry) - return False; + return ret; ldap_state->index++; - ret = init_sam_from_ldap(ldap_state, user, ldap_state->ldap_struct, + bret = init_sam_from_ldap(ldap_state, user, ldap_state->ldap_struct, ldap_state->entry); ldap_state->entry = ldap_next_entry(ldap_state->ldap_struct, ldap_state->entry); } - return True; + return NT_STATUS_OK; } /********************************************************************** Get SAM_ACCOUNT entry from LDAP by username *********************************************************************/ -static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT *user, const char *sname) +static NTSTATUS ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT *user, const char *sname) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; LDAP *ldap_struct; LDAPMessage *result; LDAPMessage *entry; if (!ldapsam_open_connection(ldap_state, &ldap_struct)) - return False; + return ret; if (!ldapsam_connect_system(ldap_state, ldap_struct)) { ldap_unbind(ldap_struct); - return False; + return ret; } if (ldapsam_search_one_user_by_name(ldap_state, ldap_struct, sname, &result) != LDAP_SUCCESS) { ldap_unbind(ldap_struct); - return False; + return ret; } if (ldap_count_entries(ldap_struct, result) < 1) { DEBUG(4, ("We don't find this user [%s] count=%d\n", sname, ldap_count_entries(ldap_struct, result))); ldap_unbind(ldap_struct); - return False; + return ret; } entry = ldap_first_entry(ldap_struct, result); if (entry) { @@ -1299,39 +1302,39 @@ static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT *use DEBUG(1,("ldapsam_getsampwnam: init_sam_from_ldap failed for user '%s'!\n", sname)); ldap_msgfree(result); ldap_unbind(ldap_struct); - return False; + return ret; } ldap_msgfree(result); ldap_unbind(ldap_struct); - return True; + ret = NT_STATUS_OK; } else { ldap_msgfree(result); ldap_unbind(ldap_struct); - return False; } + return ret; } /********************************************************************** Get SAM_ACCOUNT entry from LDAP by rid *********************************************************************/ -static BOOL ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT *user, uint32 rid) +static NTSTATUS ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT *user, uint32 rid) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; LDAP *ldap_struct; LDAPMessage *result; LDAPMessage *entry; if (!ldapsam_open_connection(ldap_state, &ldap_struct)) - return False; + return ret; if (!ldapsam_connect_system(ldap_state, ldap_struct)) { ldap_unbind(ldap_struct); - return False; + return ret; } - if (ldapsam_search_one_user_by_rid(ldap_state, ldap_struct, rid, &result) != - LDAP_SUCCESS) { + if (ldapsam_search_one_user_by_rid(ldap_state, ldap_struct, rid, &result) != LDAP_SUCCESS) { ldap_unbind(ldap_struct); - return False; + return ret; } if (ldap_count_entries(ldap_struct, result) < 1) { @@ -1339,7 +1342,7 @@ static BOOL ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT *use ("We don't find this rid [%i] count=%d\n", rid, ldap_count_entries(ldap_struct, result))); ldap_unbind(ldap_struct); - return False; + return ret; } entry = ldap_first_entry(ldap_struct, result); @@ -1348,28 +1351,29 @@ static BOOL ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT *use DEBUG(1,("ldapsam_getsampwrid: init_sam_from_ldap failed!\n")); ldap_msgfree(result); ldap_unbind(ldap_struct); - return False; + return ret; } ldap_msgfree(result); ldap_unbind(ldap_struct); - return True; + ret = NT_STATUS_OK; } else { ldap_msgfree(result); ldap_unbind(ldap_struct); - return False; } + return ret; } -static BOOL ldapsam_getsampwsid(struct pdb_methods *my_methods, SAM_ACCOUNT * user, const DOM_SID *sid) +static NTSTATUS ldapsam_getsampwsid(struct pdb_methods *my_methods, SAM_ACCOUNT * user, const DOM_SID *sid) { uint32 rid; if (!sid_peek_check_rid(get_global_sam_sid(), sid, &rid)) - return False; + return NT_STATUS_UNSUCCESSFUL; return ldapsam_getsampwrid(my_methods, user, rid); } -static BOOL ldapsam_modify_entry(LDAP *ldap_struct,SAM_ACCOUNT *newpwd,char *dn,LDAPMod **mods,int ldap_op) +static NTSTATUS ldapsam_modify_entry(LDAP *ldap_struct,SAM_ACCOUNT *newpwd,char *dn,LDAPMod **mods,int ldap_op) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; int version; int rc; @@ -1386,7 +1390,7 @@ static BOOL ldapsam_modify_entry(LDAP *ldap_struct,SAM_ACCOUNT *newpwd,char *dn, pdb_get_username(newpwd), ldap_err2string(rc), ld_error)); free(ld_error); - return False; + return ret; } break; case LDAP_MOD_REPLACE: @@ -1399,12 +1403,12 @@ static BOOL ldapsam_modify_entry(LDAP *ldap_struct,SAM_ACCOUNT *newpwd,char *dn, pdb_get_username(newpwd), ldap_err2string(rc), ld_error)); free(ld_error); - return False; + return ret; } break; default: DEBUG(0,("Wrong LDAP operation type: %d!\n",ldap_op)); - return False; + return ret; } #ifdef LDAP_EXOP_X_MODIFY_PASSWD @@ -1425,7 +1429,7 @@ static BOOL ldapsam_modify_entry(LDAP *ldap_struct,SAM_ACCOUNT *newpwd,char *dn, if ((ber = ber_alloc_t(LBER_USE_DER))==NULL) { DEBUG(0,("ber_alloc_t returns NULL\n")); - return False; + return ret; } ber_printf (ber, "{"); ber_printf (ber, "ts", LDAP_TAG_EXOP_X_MODIFY_PASSWD_ID,dn); @@ -1434,7 +1438,7 @@ static BOOL ldapsam_modify_entry(LDAP *ldap_struct,SAM_ACCOUNT *newpwd,char *dn, if ((rc = ber_flatten (ber, &bv))<0) { DEBUG(0,("ber_flatten returns a value <0\n")); - return False; + return ret; } ber_free(ber,1); @@ -1454,14 +1458,15 @@ static BOOL ldapsam_modify_entry(LDAP *ldap_struct,SAM_ACCOUNT *newpwd,char *dn, #else DEBUG(10,("LDAP PASSWORD SYNC is not supported!\n")); #endif /* LDAP_EXOP_X_MODIFY_PASSWD */ - return True; + return NT_STATUS_OK; } /********************************************************************** Delete entry from LDAP for username *********************************************************************/ -static BOOL ldapsam_delete_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT * sam_acct) +static NTSTATUS ldapsam_delete_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT * sam_acct) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; const char *sname; int rc; @@ -1472,20 +1477,20 @@ static BOOL ldapsam_delete_sam_account(struct pdb_methods *my_methods, SAM_ACCOU if (!sam_acct) { DEBUG(0, ("sam_acct was NULL!\n")); - return False; + return ret; } sname = pdb_get_username(sam_acct); if (!ldapsam_open_connection(ldap_state, &ldap_struct)) - return False; + return ret; DEBUG (3, ("Deleting user %s from LDAP.\n", sname)); if (!ldapsam_connect_system(ldap_state, ldap_struct)) { ldap_unbind (ldap_struct); DEBUG(0, ("Failed to delete user %s from LDAP.\n", sname)); - return False; + return ret; } rc = ldapsam_search_one_user_by_name(ldap_state, ldap_struct, sname, &result); @@ -1493,7 +1498,7 @@ static BOOL ldapsam_delete_sam_account(struct pdb_methods *my_methods, SAM_ACCOU DEBUG (0, ("User doesn't exit!\n")); ldap_msgfree (result); ldap_unbind (ldap_struct); - return False; + return ret; } entry = ldap_first_entry (ldap_struct, result); @@ -1510,19 +1515,20 @@ static BOOL ldapsam_delete_sam_account(struct pdb_methods *my_methods, SAM_ACCOU sname, ldap_err2string (rc), ld_error)); free (ld_error); ldap_unbind (ldap_struct); - return False; + return ret; } DEBUG (2,("successfully deleted uid = %s from the LDAP database\n", sname)); ldap_unbind (ldap_struct); - return True; + return NT_STATUS_OK; } /********************************************************************** Update SAM_ACCOUNT *********************************************************************/ -static BOOL ldapsam_update_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT * newpwd) +static NTSTATUS ldapsam_update_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT * newpwd) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; int rc; char *dn; @@ -1532,11 +1538,11 @@ static BOOL ldapsam_update_sam_account(struct pdb_methods *my_methods, SAM_ACCOU LDAPMod **mods; if (!ldapsam_open_connection(ldap_state, &ldap_struct)) /* open a connection to the server */ - return False; + return ret; if (!ldapsam_connect_system(ldap_state, ldap_struct)) { /* connect as system account */ ldap_unbind(ldap_struct); - return False; + return ret; } rc = ldapsam_search_one_user_by_name(ldap_state, ldap_struct, @@ -1546,26 +1552,26 @@ static BOOL ldapsam_update_sam_account(struct pdb_methods *my_methods, SAM_ACCOU DEBUG(0, ("No user to modify!\n")); ldap_msgfree(result); ldap_unbind(ldap_struct); - return False; + return ret; } if (!init_ldap_from_sam(ldap_state, &mods, LDAP_MOD_REPLACE, newpwd)) { DEBUG(0, ("ldapsam_update_sam_account: init_ldap_from_sam failed!\n")); ldap_msgfree(result); ldap_unbind(ldap_struct); - return False; + return ret; } entry = ldap_first_entry(ldap_struct, result); dn = ldap_get_dn(ldap_struct, entry); ldap_msgfree(result); - if (!ldapsam_modify_entry(ldap_struct,newpwd,dn,mods,LDAP_MOD_REPLACE)) { + if (NT_STATUS_IS_ERR(ldapsam_modify_entry(ldap_struct,newpwd,dn,mods,LDAP_MOD_REPLACE))) { DEBUG(0,("failed to modify user with uid = %s\n", pdb_get_username(newpwd))); ldap_mods_free(mods,1); ldap_unbind(ldap_struct); - return False; + return ret; } @@ -1574,14 +1580,15 @@ static BOOL ldapsam_update_sam_account(struct pdb_methods *my_methods, SAM_ACCOU pdb_get_username(newpwd))); ldap_mods_free(mods, 1); ldap_unbind(ldap_struct); - return True; + return NT_STATUS_OK; } /********************************************************************** Add SAM_ACCOUNT to LDAP *********************************************************************/ -static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT * newpwd) +static NTSTATUS ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT * newpwd) { + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; int rc; pstring filter; @@ -1595,15 +1602,15 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT const char *username = pdb_get_username(newpwd); if (!username || !*username) { DEBUG(0, ("Cannot add user without a username!\n")); - return False; + return ret; } if (!ldapsam_open_connection(ldap_state, &ldap_struct)) /* open a connection to the server */ - return False; + return ret; if (!ldapsam_connect_system(ldap_state, ldap_struct)) { /* connect as system account */ ldap_unbind(ldap_struct); - return False; + return ret; } rc = ldapsam_search_one_user_by_name (ldap_state, ldap_struct, username, &result); @@ -1612,7 +1619,7 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT DEBUG(0,("User already in the base, with samba properties\n")); ldap_msgfree(result); ldap_unbind(ldap_struct); - return False; + return ret; } ldap_msgfree(result); @@ -1623,7 +1630,7 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT if (num_result > 1) { DEBUG (0, ("More than one user with that uid exists: bailing out!\n")); ldap_msgfree(result); - return False; + return ret; } /* Check if we need to update an existing entry */ @@ -1654,22 +1661,22 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT DEBUG(0, ("ldapsam_add_sam_account: init_ldap_from_sam failed!\n")); ldap_mods_free(mods, 1); ldap_unbind(ldap_struct); - return False; + return ret; } make_a_mod(&mods, LDAP_MOD_ADD, "objectclass", "sambaAccount"); - if (!ldapsam_modify_entry(ldap_struct,newpwd,dn,mods,ldap_op)) { + if (NT_STATUS_IS_ERR(ldapsam_modify_entry(ldap_struct,newpwd,dn,mods,ldap_op))) { DEBUG(0,("failed to modify/add user with uid = %s (dn = %s)\n", pdb_get_username(newpwd),dn)); ldap_mods_free(mods,1); ldap_unbind(ldap_struct); - return False; + return ret; } DEBUG(2,("added: uid = %s in the LDAP database\n", pdb_get_username(newpwd))); ldap_mods_free(mods, 1); ldap_unbind(ldap_struct); - return True; + return NT_STATUS_OK; } static void free_private_data(void **vp) diff --git a/source/passdb/pdb_nisplus.c b/source/passdb/pdb_nisplus.c index 484e8986e42..de520b6b149 100644 --- a/source/passdb/pdb_nisplus.c +++ b/source/passdb/pdb_nisplus.c @@ -130,7 +130,7 @@ static nis_result *nisp_get_nis_list (const char *nisname, Start enumeration of the passwd list. ****************************************************************/ -static BOOL nisplussam_setsampwent (struct pdb_methods *methods, BOOL update) +static NTSTATUS nisplussam_setsampwent (struct pdb_methods *methods, BOOL update) { struct nisplus_private_info *private = (struct nisplus_private_info *) methods->private_data; @@ -148,7 +148,10 @@ static BOOL nisplussam_setsampwent (struct pdb_methods *methods, BOOL update) pdb_endsampwent (); /* just in case */ global_nisp_ent->result = nisp_get_nis_list (pfiletmp, 0); global_nisp_ent->enum_entry = 0; - return global_nisp_ent->result != NULL ? True : False; + if (global_nisp_ent->result != NULL) + return NT_STATUS_UNSUCCESSFUL; + else + return NT_STATUS_OK; } /*************************************************************** @@ -169,10 +172,10 @@ static void nisplussam_endsampwent (struct pdb_methods *methods) Get one SAM_ACCOUNT from the list (next in line) *****************************************************************/ -static BOOL nisplussam_getsampwent (struct pdb_methods *methods, +static NTSTATUS nisplussam_getsampwent (struct pdb_methods *methods, SAM_ACCOUNT * user) { - + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; struct nisplus_private_info *global_nisp_ent = (struct nisplus_private_info *) methods->private_data; int enum_entry = (int) (global_nisp_ent->enum_entry); @@ -180,33 +183,31 @@ static BOOL nisplussam_getsampwent (struct pdb_methods *methods, if (user == NULL) { DEBUG (0, ("SAM_ACCOUNT is NULL.\n")); - return False; + return nt_status; } - if (result == NULL || - enum_entry < 0 || enum_entry >= (NIS_RES_NUMOBJ (result) - 1)) { - return False; + if (result == NULL || enum_entry < 0 || enum_entry >= (NIS_RES_NUMOBJ (result) - 1)) { + return nt_status; } - if (!make_sam_from_nisp_object - (user, &NIS_RES_OBJECT (result)[enum_entry])) { + if (!make_sam_from_nisp_object(user, &NIS_RES_OBJECT (result)[enum_entry])) { DEBUG (0, ("Bad SAM_ACCOUNT entry returned from NIS+!\n")); - return False; + return nt_status; } (int) (global_nisp_ent->enum_entry)++; - return True; - DEBUG (10, ("nisplussam_getsampwent called\n")); - return False; + + return nt_status; } /****************************************************************** Lookup a name in the SAM database ******************************************************************/ -static BOOL nisplussam_getsampwnam (struct pdb_methods *methods, +static NTSTATUS nisplussam_getsampwnam (struct pdb_methods *methods, SAM_ACCOUNT * user, const char *sname) { /* Static buffers we will return. */ + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; nis_result *result = NULL; pstring nisname; BOOL ret; @@ -215,7 +216,7 @@ static BOOL nisplussam_getsampwnam (struct pdb_methods *methods, if (!private->location || !(*private->location)) { DEBUG (0, ("No SMB password file set\n")); - return False; + return nt_status; } if (strrchr (private->location, '/')) private->location = strrchr (private->location, '/') + 1; @@ -227,25 +228,25 @@ static BOOL nisplussam_getsampwnam (struct pdb_methods *methods, /* Search the table. */ if (!(result = nisp_get_nis_list (nisname, 0))) { - return False; + return nt_status; } ret = make_sam_from_nisresult (user, result); nis_freeresult (result); - return ret; + if (ret) nt_status = NT_STATUS_OK; - DEBUG (10, ("nisplussam_getsampwnam called\n")); - return False; + return nt_status; } /*************************************************************************** Search by sid **************************************************************************/ -static BOOL nisplussam_getsampwrid (struct pdb_methods *methods, +static NTSTATUS nisplussam_getsampwrid (struct pdb_methods *methods, SAM_ACCOUNT * user, uint32 rid) { + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; nis_result *result; char *nisname; BOOL ret; @@ -256,7 +257,7 @@ static BOOL nisplussam_getsampwrid (struct pdb_methods *methods, if (!private->location || !(*private->location)) { DEBUG (0, ("no SMB password file set\n")); - return False; + return nt_status; } if ((sp = strrchr (private->location, '/'))) @@ -273,22 +274,24 @@ static BOOL nisplussam_getsampwrid (struct pdb_methods *methods, /* Search the table. */ if (!(result = nisp_get_nis_list (nisname, 0))) { - return False; + return nt_status; } ret = make_sam_from_nisresult (user, result); nis_freeresult (result); - return ret; + if (ret) nt_status = NT_STATUS_OK; + + return nt_status; } -static BOOL nisplussam_getsampwsid (struct pdb_methods *methods, +static NTSTATUS nisplussam_getsampwsid (struct pdb_methods *methods, SAM_ACCOUNT * user, const DOM_SID * sid) { uint32 rid; if (!sid_peek_check_rid (get_global_sam_sid (), sid, &rid)) - return False; + return NT_STATUS_UNSUCCESSFUL; return nisplussam_getsampwrid (methods, user, rid); } @@ -298,9 +301,10 @@ static BOOL nisplussam_getsampwsid (struct pdb_methods *methods, Delete a SAM_ACCOUNT ****************************************************************************/ -static BOOL nisplussam_delete_sam_account (struct pdb_methods *methods, - SAM_ACCOUNT * user) +static NTSTATUS nisplussam_delete_sam_account (struct pdb_methods *methods, + SAM_ACCOUNT * user) { + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; const char *sname; pstring nisname; nis_result *result, *delresult; @@ -310,14 +314,14 @@ static BOOL nisplussam_delete_sam_account (struct pdb_methods *methods, if (!user) { DEBUG (0, ("no SAM_ACCOUNT specified!\n")); - return False; + return nt_status; } sname = pdb_get_username (user); if (!private->location || !(*private->location)) { DEBUG (0, ("no SMB password file set\n")); - return False; + return nt_status; } if (strrchr (private->location, '/')) @@ -332,14 +336,14 @@ static BOOL nisplussam_delete_sam_account (struct pdb_methods *methods, MASTER_ONLY | FOLLOW_LINKS | FOLLOW_PATH | EXPAND_NAME | HARD_LOOKUP))) { - return False; + return nt_status; } if (result->status != NIS_SUCCESS || NIS_RES_NUMOBJ (result) <= 0) { /* User not found. */ DEBUG (0, ("user not found in NIS+\n")); nis_freeresult (result); - return False; + return nt_status; } obj = NIS_RES_OBJECT (result); @@ -358,21 +362,21 @@ static BOOL nisplussam_delete_sam_account (struct pdb_methods *methods, DEBUG (0, ("NIS+ table update failed: %s %s\n", nisname, nis_sperrno (delresult->status))); nis_freeresult (delresult); - return False; + return nt_status; } nis_freeresult (delresult); - return True; - DEBUG (10, ("nisplussam_delete_sam_account called\n")); - return False; + + return NT_STATUS_OK; } /*************************************************************************** Modifies an existing SAM_ACCOUNT ****************************************************************************/ -static BOOL nisplussam_update_sam_account (struct pdb_methods *methods, +static NTSTATUS nisplussam_update_sam_account (struct pdb_methods *methods, SAM_ACCOUNT * newpwd) { + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; nis_result *result, *addresult; nis_object *obj; nis_object new_obj; @@ -384,7 +388,7 @@ static BOOL nisplussam_update_sam_account (struct pdb_methods *methods, if (!private->location || !(*private->location)) { DEBUG (0, ("no SMB password file set\n")); - return False; + return nt_status; } if (strrchr (private->location, '/')) private->location = strrchr (private->location, '/') + 1; @@ -401,14 +405,14 @@ static BOOL nisplussam_update_sam_account (struct pdb_methods *methods, nisp_get_nis_list (nisname, MASTER_ONLY | FOLLOW_LINKS | FOLLOW_PATH | EXPAND_NAME | HARD_LOOKUP))) { - return False; + return ne_status; } if (result->status != NIS_SUCCESS || NIS_RES_NUMOBJ (result) <= 0) { /* User not found. */ DEBUG (0, ("user not found in NIS+\n")); nis_freeresult (result); - return False; + return nt_status; } obj = NIS_RES_OBJECT (result); @@ -425,7 +429,7 @@ static BOOL nisplussam_update_sam_account (struct pdb_methods *methods, if (!(ecol = (entry_col *) malloc (ta_maxcol * sizeof (entry_col)))) { DEBUG (0, ("memory allocation failure\n")); nis_freeresult (result); - return False; + return nt_status; } memmove ((char *) ecol, obj->EN_data.en_cols.en_cols_val, @@ -449,7 +453,7 @@ static BOOL nisplussam_update_sam_account (struct pdb_methods *methods, nis_freeresult (addresult); nis_freeresult (result); free (ecol); - return False; + return nt_status; } DEBUG (6, ("password changed\n")); @@ -461,16 +465,17 @@ static BOOL nisplussam_update_sam_account (struct pdb_methods *methods, free (ecol); nis_freeresult (result); - return True; + return NT_STATUS_OK; } /*************************************************************************** Adds an existing SAM_ACCOUNT ****************************************************************************/ -static BOOL nisplussam_add_sam_account (struct pdb_methods *methods, +static NTSTATUS nisplussam_add_sam_account (struct pdb_methods *methods, SAM_ACCOUNT * newpwd) { + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; int local_user = 0; char *pfile; pstring pfiletmp; @@ -518,7 +523,7 @@ static BOOL nisplussam_add_sam_account (struct pdb_methods *methods, nisname = make_nisname_from_name (pdb_get_username (newpwd), pfiletmp); } else { - return False; + return nt_status; } if (! @@ -526,20 +531,20 @@ static BOOL nisplussam_add_sam_account (struct pdb_methods *methods, nisp_get_nis_list (nisname, MASTER_ONLY | FOLLOW_LINKS | FOLLOW_PATH | EXPAND_NAME | HARD_LOOKUP))) { - return False; + return nt_status; } if (result->status != NIS_SUCCESS && result->status != NIS_NOTFOUND) { DEBUG (3, ("nis_list failure: %s: %s\n", nisname, nis_sperrno (result->status))); nis_freeresult (result); - return False; + return nt_status; } if (result->status == NIS_SUCCESS && NIS_RES_NUMOBJ (result) > 0) { DEBUG (3, ("User already exists in NIS+ password db: %s\n", pfile)); nis_freeresult (result); - return False; + return nt_status; } nis_freeresult (result); /* no such user, free results */ @@ -565,7 +570,7 @@ static BOOL nisplussam_add_sam_account (struct pdb_methods *methods, if (!(passwd = getpwnam_alloc (pdb_get_username (newpwd)))) { /* no such user in system! */ - return False; + return nt_status; } passwd_free (&passwd); @@ -607,7 +612,7 @@ static BOOL nisplussam_add_sam_account (struct pdb_methods *methods, nis_freeresult (tblresult); DEBUG (3, ("nis_lookup failure: %s\n", nis_sperrno (tblresult->status))); - return False; + return nt_status; } /* we need full name for nis_add_entry() */ safe_strcpy (pfiletmp, pfile, sizeof (pfiletmp) - 1); @@ -636,7 +641,7 @@ static BOOL nisplussam_add_sam_account (struct pdb_methods *methods, if (!(ecol = (entry_col *) malloc (ta_maxcol * sizeof (entry_col)))) { DEBUG (0, ("memory allocation failure\n")); nis_freeresult (tblresult); - return False; + return nt_status; } memset ((char *) ecol, 0, ta_maxcol * sizeof (entry_col)); @@ -655,13 +660,13 @@ static BOOL nisplussam_add_sam_account (struct pdb_methods *methods, nisname, nis_sperrno (result->status))); nis_freeresult (tblresult); nis_freeresult (result); - return False; + return nt_status; } nis_freeresult (tblresult); nis_freeresult (result); - return True; + return NT_STATUS_OK; } /*************************************************************** diff --git a/source/passdb/pdb_smbpasswd.c b/source/passdb/pdb_smbpasswd.c index 04c0d333e43..257b5fa2aa2 100644 --- a/source/passdb/pdb_smbpasswd.c +++ b/source/passdb/pdb_smbpasswd.c @@ -1248,7 +1248,7 @@ static BOOL build_sam_account(struct smbpasswd_privates *smbpasswd_state, /***************************************************************** Functions to be implemented by the new passdb API ****************************************************************/ -static BOOL smbpasswd_setsampwent (struct pdb_methods *my_methods, BOOL update) +static NTSTATUS smbpasswd_setsampwent (struct pdb_methods *my_methods, BOOL update) { struct smbpasswd_privates *smbpasswd_state = (struct smbpasswd_privates*)my_methods->private_data; @@ -1275,7 +1275,10 @@ static BOOL smbpasswd_setsampwent (struct pdb_methods *my_methods, BOOL update) &(smbpasswd_state->pw_file_lock_depth)); } - return (smbpasswd_state->pw_file != NULL); + if (smbpasswd_state->pw_file != NULL) + return NT_STATUS_OK; + else + return NT_STATUS_UNSUCCESSFUL; } static void smbpasswd_endsampwent (struct pdb_methods *my_methods) @@ -1286,8 +1289,9 @@ static void smbpasswd_endsampwent (struct pdb_methods *my_methods) /***************************************************************** ****************************************************************/ -static BOOL smbpasswd_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *user) +static NTSTATUS smbpasswd_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *user) { + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; struct smbpasswd_privates *smbpasswd_state = (struct smbpasswd_privates*)my_methods->private_data; struct smb_passwd *pw_buf=NULL; BOOL done = False; @@ -1298,7 +1302,7 @@ static BOOL smbpasswd_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *u #if 0 smb_panic("NULL pointer passed to getsampwent (smbpasswd)\n"); #endif - return False; + return nt_status; } while (!done) @@ -1306,7 +1310,7 @@ static BOOL smbpasswd_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *u /* do we have an entry? */ pw_buf = getsmbfilepwent(smbpasswd_state, smbpasswd_state->pw_file); if (pw_buf == NULL) - return False; + return nt_status; /* build the SAM_ACCOUNT entry from the smb_passwd struct. We loop in case the user in the pdb does not exist in @@ -1318,7 +1322,7 @@ static BOOL smbpasswd_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *u DEBUG(5,("getsampwent (smbpasswd): done\n")); /* success */ - return True; + return NT_STATUS_OK; } @@ -1327,9 +1331,10 @@ static BOOL smbpasswd_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *u call getpwnam() for unix account information until we have found the correct entry ***************************************************************/ -static BOOL smbpasswd_getsampwnam(struct pdb_methods *my_methods, +static NTSTATUS smbpasswd_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT *sam_acct, const char *username) { + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; struct smbpasswd_privates *smbpasswd_state = (struct smbpasswd_privates*)my_methods->private_data; struct smb_passwd *smb_pw; void *fp = NULL; @@ -1343,7 +1348,7 @@ static BOOL smbpasswd_getsampwnam(struct pdb_methods *my_methods, if (fp == NULL) { DEBUG(0, ("unable to open passdb database.\n")); - return False; + return nt_status; } while ( ((smb_pw=getsmbfilepwent(smbpasswd_state, fp)) != NULL)&& (!strequal(smb_pw->smb_name, username)) ) @@ -1354,7 +1359,7 @@ static BOOL smbpasswd_getsampwnam(struct pdb_methods *my_methods, /* did we locate the username in smbpasswd */ if (smb_pw == NULL) - return False; + return nt_status; DEBUG(10, ("getsampwnam (smbpasswd): found by name: %s\n", smb_pw->smb_name)); @@ -1363,19 +1368,20 @@ static BOOL smbpasswd_getsampwnam(struct pdb_methods *my_methods, #if 0 smb_panic("NULL pointer passed to pdb_getsampwnam\n"); #endif - return False; + return nt_status; } /* now build the SAM_ACCOUNT */ if (!build_sam_account(smbpasswd_state, sam_acct, smb_pw)) - return False; + return nt_status; /* success */ - return True; + return NT_STATUS_OK; } -static BOOL smbpasswd_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT *sam_acct,uint32 rid) +static NTSTATUS smbpasswd_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT *sam_acct,uint32 rid) { + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; struct smbpasswd_privates *smbpasswd_state = (struct smbpasswd_privates*)my_methods->private_data; struct smb_passwd *smb_pw; void *fp = NULL; @@ -1387,7 +1393,7 @@ static BOOL smbpasswd_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT *s const char *guest_account = lp_guestaccount(); if (!(guest_account && *guest_account)) { DEBUG(1, ("Guest account not specfied!\n")); - return False; + return nt_status; } return smbpasswd_getsampwnam(my_methods, sam_acct, guest_account); } @@ -1397,7 +1403,7 @@ static BOOL smbpasswd_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT *s if (fp == NULL) { DEBUG(0, ("unable to open passdb database.\n")); - return False; + return nt_status; } while ( ((smb_pw=getsmbfilepwent(smbpasswd_state, fp)) != NULL) && (fallback_pdb_uid_to_user_rid(smb_pw->smb_userid) != rid) ) @@ -1408,7 +1414,7 @@ static BOOL smbpasswd_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT *s /* did we locate the username in smbpasswd */ if (smb_pw == NULL) - return False; + return nt_status; DEBUG(10, ("getsampwrid (smbpasswd): found by name: %s\n", smb_pw->smb_name)); @@ -1417,44 +1423,44 @@ static BOOL smbpasswd_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT *s #if 0 smb_panic("NULL pointer passed to pdb_getsampwrid\n"); #endif - return False; + return nt_status; } /* now build the SAM_ACCOUNT */ if (!build_sam_account (smbpasswd_state, sam_acct, smb_pw)) - return False; + return nt_status; /* success */ - return True; + return NT_STATUS_OK; } -static BOOL smbpasswd_getsampwsid(struct pdb_methods *my_methods, SAM_ACCOUNT * user, const DOM_SID *sid) +static NTSTATUS smbpasswd_getsampwsid(struct pdb_methods *my_methods, SAM_ACCOUNT * user, const DOM_SID *sid) { uint32 rid; if (!sid_peek_check_rid(get_global_sam_sid(), sid, &rid)) - return False; + return NT_STATUS_UNSUCCESSFUL; return smbpasswd_getsampwrid(my_methods, user, rid); } -static BOOL smbpasswd_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT *sampass) +static NTSTATUS smbpasswd_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT *sampass) { struct smbpasswd_privates *smbpasswd_state = (struct smbpasswd_privates*)my_methods->private_data; struct smb_passwd smb_pw; /* convert the SAM_ACCOUNT */ if (!build_smb_pass(&smb_pw, sampass)) { - return False; + return NT_STATUS_UNSUCCESSFUL; } /* add the entry */ if(!add_smbfilepwd_entry(smbpasswd_state, &smb_pw)) { - return False; + return NT_STATUS_UNSUCCESSFUL; } - return True; + return NT_STATUS_OK; } -static BOOL smbpasswd_update_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT *sampass) +static NTSTATUS smbpasswd_update_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT *sampass) { struct smbpasswd_privates *smbpasswd_state = (struct smbpasswd_privates*)my_methods->private_data; struct smb_passwd smb_pw; @@ -1462,25 +1468,28 @@ static BOOL smbpasswd_update_sam_account(struct pdb_methods *my_methods, SAM_ACC /* convert the SAM_ACCOUNT */ if (!build_smb_pass(&smb_pw, sampass)) { DEBUG(0, ("smbpasswd_update_sam_account: build_smb_pass failed!\n")); - return False; + return NT_STATUS_UNSUCCESSFUL; } /* update the entry */ if(!mod_smbfilepwd_entry(smbpasswd_state, &smb_pw)) { DEBUG(0, ("smbpasswd_update_sam_account: mod_smbfilepwd_entry failed!\n")); - return False; + return NT_STATUS_UNSUCCESSFUL; } - return True; + return NT_STATUS_OK; } -static BOOL smbpasswd_delete_sam_account (struct pdb_methods *my_methods, SAM_ACCOUNT *sampass) +static NTSTATUS smbpasswd_delete_sam_account (struct pdb_methods *my_methods, SAM_ACCOUNT *sampass) { struct smbpasswd_privates *smbpasswd_state = (struct smbpasswd_privates*)my_methods->private_data; const char *username = pdb_get_username(sampass); - return del_smbfilepwd_entry(smbpasswd_state, username); + if (del_smbfilepwd_entry(smbpasswd_state, username)) + return NT_STATUS_OK; + + return NT_STATUS_UNSUCCESSFUL; } static void free_private_data(void **vp) diff --git a/source/passdb/pdb_tdb.c b/source/passdb/pdb_tdb.c index 27453fc1af7..241b3298b0b 100644 --- a/source/passdb/pdb_tdb.c +++ b/source/passdb/pdb_tdb.c @@ -484,7 +484,7 @@ static uint32 init_buffer_from_sam (struct tdbsam_privates *tdb_state, Open the TDB passwd database for SAM account enumeration. ****************************************************************/ -static BOOL tdbsam_setsampwent(struct pdb_methods *my_methods, BOOL update) +static NTSTATUS tdbsam_setsampwent(struct pdb_methods *my_methods, BOOL update) { struct tdbsam_privates *tdb_state = (struct tdbsam_privates *)my_methods->private_data; @@ -492,12 +492,12 @@ static BOOL tdbsam_setsampwent(struct pdb_methods *my_methods, BOOL update) if (!(tdb_state->passwd_tdb = tdb_open_log(tdb_state->tdbsam_location, 0, TDB_DEFAULT, update?(O_RDWR|O_CREAT):O_RDONLY, 0600))) { DEBUG(0, ("Unable to open/create TDB passwd\n")); - return False; + return NT_STATUS_UNSUCCESSFUL; } tdb_state->key = tdb_firstkey(tdb_state->passwd_tdb); - return True; + return NT_STATUS_OK; } static void close_tdb(struct tdbsam_privates *tdb_state) @@ -524,8 +524,9 @@ static void tdbsam_endsampwent(struct pdb_methods *my_methods) Get one SAM_ACCOUNT from the TDB (next in line) *****************************************************************/ -static BOOL tdbsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *user) +static NTSTATUS tdbsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *user) { + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; struct tdbsam_privates *tdb_state = (struct tdbsam_privates *)my_methods->private_data; TDB_DATA data; char *prefix = USERPREFIX; @@ -534,7 +535,7 @@ static BOOL tdbsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *user if (user==NULL) { DEBUG(0,("pdb_get_sampwent: SAM_ACCOUNT is NULL.\n")); - return False; + return nt_status; } /* skip all non-USER entries (eg. RIDs) */ @@ -545,35 +546,36 @@ static BOOL tdbsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *user /* do we have an valid iteration pointer? */ if(tdb_state->passwd_tdb == NULL) { DEBUG(0,("pdb_get_sampwent: Bad TDB Context pointer.\n")); - return False; + return nt_status; } data = tdb_fetch(tdb_state->passwd_tdb, tdb_state->key); if (!data.dptr) { DEBUG(5,("pdb_getsampwent: database entry not found.\n")); - return False; + return nt_status; } /* unpack the buffer */ if (!init_sam_from_buffer(tdb_state, user, data.dptr, data.dsize)) { DEBUG(0,("pdb_getsampwent: Bad SAM_ACCOUNT entry returned from TDB!\n")); SAFE_FREE(data.dptr); - return False; + return nt_status; } SAFE_FREE(data.dptr); /* increment to next in line */ tdb_state->key = tdb_nextkey(tdb_state->passwd_tdb, tdb_state->key); - return True; + return NT_STATUS_OK; } /****************************************************************** Lookup a name in the SAM TDB ******************************************************************/ -static BOOL tdbsam_getsampwnam (struct pdb_methods *my_methods, SAM_ACCOUNT *user, const char *sname) +static NTSTATUS tdbsam_getsampwnam (struct pdb_methods *my_methods, SAM_ACCOUNT *user, const char *sname) { + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; struct tdbsam_privates *tdb_state = (struct tdbsam_privates *)my_methods->private_data; TDB_CONTEXT *pwd_tdb; TDB_DATA data, key; @@ -582,7 +584,7 @@ static BOOL tdbsam_getsampwnam (struct pdb_methods *my_methods, SAM_ACCOUNT *use if (user==NULL) { DEBUG(0,("pdb_getsampwnam: SAM_ACCOUNT is NULL.\n")); - return False; + return nt_status; } /* Data is stored in all lower-case */ @@ -596,7 +598,7 @@ static BOOL tdbsam_getsampwnam (struct pdb_methods *my_methods, SAM_ACCOUNT *use /* open the accounts TDB */ if (!(pwd_tdb = tdb_open_log(tdb_state->tdbsam_location, 0, TDB_DEFAULT, O_RDONLY, 0600))) { DEBUG(0, ("pdb_getsampwnam: Unable to open TDB passwd (%s)!\n", tdb_state->tdbsam_location)); - return False; + return nt_status; } /* get the record */ @@ -606,7 +608,7 @@ static BOOL tdbsam_getsampwnam (struct pdb_methods *my_methods, SAM_ACCOUNT *use DEBUGADD(5, (" Error: %s\n", tdb_errorstr(pwd_tdb))); DEBUGADD(5, (" Key: %s\n", keystr)); tdb_close(pwd_tdb); - return False; + return nt_status; } /* unpack the buffer */ @@ -614,22 +616,23 @@ static BOOL tdbsam_getsampwnam (struct pdb_methods *my_methods, SAM_ACCOUNT *use DEBUG(0,("pdb_getsampwent: Bad SAM_ACCOUNT entry returned from TDB!\n")); SAFE_FREE(data.dptr); tdb_close(pwd_tdb); - return False; + return nt_status; } SAFE_FREE(data.dptr); /* no further use for database, close it now */ tdb_close(pwd_tdb); - return True; + return NT_STATUS_OK; } /*************************************************************************** Search by rid **************************************************************************/ -static BOOL tdbsam_getsampwrid (struct pdb_methods *my_methods, SAM_ACCOUNT *user, uint32 rid) +static NTSTATUS tdbsam_getsampwrid (struct pdb_methods *my_methods, SAM_ACCOUNT *user, uint32 rid) { + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; struct tdbsam_privates *tdb_state = (struct tdbsam_privates *)my_methods->private_data; TDB_CONTEXT *pwd_tdb; TDB_DATA data, key; @@ -638,7 +641,7 @@ static BOOL tdbsam_getsampwrid (struct pdb_methods *my_methods, SAM_ACCOUNT *use if (user==NULL) { DEBUG(0,("pdb_getsampwrid: SAM_ACCOUNT is NULL.\n")); - return False; + return nt_status; } /* set search key */ @@ -649,7 +652,7 @@ static BOOL tdbsam_getsampwrid (struct pdb_methods *my_methods, SAM_ACCOUNT *use /* open the accounts TDB */ if (!(pwd_tdb = tdb_open_log(tdb_state->tdbsam_location, 0, TDB_DEFAULT, O_RDONLY, 0600))) { DEBUG(0, ("pdb_getsampwrid: Unable to open TDB rid database!\n")); - return False; + return nt_status; } /* get the record */ @@ -658,7 +661,7 @@ static BOOL tdbsam_getsampwrid (struct pdb_methods *my_methods, SAM_ACCOUNT *use DEBUG(5,("pdb_getsampwrid (TDB): error looking up RID %d by key %s.\n", rid, keystr)); DEBUGADD(5, (" Error: %s\n", tdb_errorstr(pwd_tdb))); tdb_close (pwd_tdb); - return False; + return nt_status; } fstrcpy (name, data.dptr); @@ -669,11 +672,11 @@ static BOOL tdbsam_getsampwrid (struct pdb_methods *my_methods, SAM_ACCOUNT *use return tdbsam_getsampwnam (my_methods, user, name); } -static BOOL tdbsam_getsampwsid(struct pdb_methods *my_methods, SAM_ACCOUNT * user, const DOM_SID *sid) +static NTSTATUS tdbsam_getsampwsid(struct pdb_methods *my_methods, SAM_ACCOUNT * user, const DOM_SID *sid) { uint32 rid; if (!sid_peek_check_rid(get_global_sam_sid(), sid, &rid)) - return False; + return NT_STATUS_UNSUCCESSFUL; return tdbsam_getsampwrid(my_methods, user, rid); } @@ -681,8 +684,9 @@ static BOOL tdbsam_getsampwsid(struct pdb_methods *my_methods, SAM_ACCOUNT * use Delete a SAM_ACCOUNT ****************************************************************************/ -static BOOL tdbsam_delete_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT *sam_pass) +static NTSTATUS tdbsam_delete_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT *sam_pass) { + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; struct tdbsam_privates *tdb_state = (struct tdbsam_privates *)my_methods->private_data; TDB_CONTEXT *pwd_tdb; TDB_DATA key; @@ -695,7 +699,7 @@ static BOOL tdbsam_delete_sam_account(struct pdb_methods *my_methods, SAM_ACCOUN /* open the TDB */ if (!(pwd_tdb = tdb_open_log(tdb_state->tdbsam_location, 0, TDB_DEFAULT, O_RDWR, 0600))) { DEBUG(0, ("Unable to open TDB passwd!")); - return False; + return nt_status; } /* set the search key */ @@ -710,7 +714,7 @@ static BOOL tdbsam_delete_sam_account(struct pdb_methods *my_methods, SAM_ACCOUN DEBUG(5, ("Error deleting entry from tdb passwd database!\n")); DEBUGADD(5, (" Error: %s\n", tdb_errorstr(pwd_tdb))); tdb_close(pwd_tdb); - return False; + return nt_status; } /* delete also the RID key */ @@ -725,12 +729,12 @@ static BOOL tdbsam_delete_sam_account(struct pdb_methods *my_methods, SAM_ACCOUN DEBUG(5, ("Error deleting entry from tdb rid database!\n")); DEBUGADD(5, (" Error: %s\n", tdb_errorstr(pwd_tdb))); tdb_close(pwd_tdb); - return False; + return nt_status; } tdb_close(pwd_tdb); - return True; + return NT_STATUS_OK; } /*************************************************************************** @@ -872,18 +876,24 @@ done: Modifies an existing SAM_ACCOUNT ****************************************************************************/ -static BOOL tdbsam_update_sam_account (struct pdb_methods *my_methods, SAM_ACCOUNT *newpwd) +static NTSTATUS tdbsam_update_sam_account (struct pdb_methods *my_methods, SAM_ACCOUNT *newpwd) { - return (tdb_update_sam(my_methods, newpwd, TDB_MODIFY)); + if (tdb_update_sam(my_methods, newpwd, TDB_MODIFY)) + return NT_STATUS_OK; + else + return NT_STATUS_UNSUCCESSFUL; } /*************************************************************************** Adds an existing SAM_ACCOUNT ****************************************************************************/ -static BOOL tdbsam_add_sam_account (struct pdb_methods *my_methods, SAM_ACCOUNT *newpwd) +static NTSTATUS tdbsam_add_sam_account (struct pdb_methods *my_methods, SAM_ACCOUNT *newpwd) { - return (tdb_update_sam(my_methods, newpwd, TDB_INSERT)); + if (tdb_update_sam(my_methods, newpwd, TDB_INSERT)) + return NT_STATUS_OK; + else + return NT_STATUS_UNSUCCESSFUL; } static void free_private_data(void **vp) diff --git a/source/passdb/pdb_unix.c b/source/passdb/pdb_unix.c index 06f12164eb8..ba5ed0abdfd 100644 --- a/source/passdb/pdb_unix.c +++ b/source/passdb/pdb_unix.c @@ -23,20 +23,20 @@ Lookup a name in the SAM database ******************************************************************/ -static BOOL unixsam_getsampwnam (struct pdb_methods *methods, SAM_ACCOUNT *user, const char *sname) +static NTSTATUS unixsam_getsampwnam (struct pdb_methods *methods, SAM_ACCOUNT *user, const char *sname) { struct passwd *pass; if (!methods) { DEBUG(0,("invalid methods\n")); - return False; + return NT_STATUS_UNSUCCESSFUL; } if (!sname) { DEBUG(0,("invalid name specified")); - return False; + return NT_STATUS_UNSUCCESSFUL; } pass = Get_Pwnam(sname); - return NT_STATUS_IS_OK(pdb_fill_sam_pw(user, pass)); + return pdb_fill_sam_pw(user, pass); } @@ -44,45 +44,45 @@ static BOOL unixsam_getsampwnam (struct pdb_methods *methods, SAM_ACCOUNT *user, Search by rid **************************************************************************/ -static BOOL unixsam_getsampwrid (struct pdb_methods *methods, +static NTSTATUS unixsam_getsampwrid (struct pdb_methods *methods, SAM_ACCOUNT *user, uint32 rid) { + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; struct passwd *pass; - BOOL ret = False; const char *guest_account = lp_guestaccount(); if (!(guest_account && *guest_account)) { DEBUG(1, ("NULL guest account!?!?\n")); - return False; + return nt_status; } if (!methods) { DEBUG(0,("invalid methods\n")); - return False; + return nt_status; } if (rid == DOMAIN_USER_RID_GUEST) { pass = getpwnam_alloc(guest_account); if (!pass) { DEBUG(1, ("guest account %s does not seem to exist...\n", guest_account)); - return False; + return nt_status; } } else if (pdb_rid_is_user(rid)) { pass = getpwuid_alloc(fallback_pdb_user_rid_to_uid (rid)); } else { - return False; + return nt_status; } - ret = NT_STATUS_IS_OK(pdb_fill_sam_pw(user, pass)); + nt_status = pdb_fill_sam_pw(user, pass); passwd_free(&pass); - return ret; + return nt_status; } -static BOOL unixsam_getsampwsid(struct pdb_methods *my_methods, SAM_ACCOUNT * user, const DOM_SID *sid) +static NTSTATUS unixsam_getsampwsid(struct pdb_methods *my_methods, SAM_ACCOUNT * user, const DOM_SID *sid) { uint32 rid; if (!sid_peek_check_rid(get_global_sam_sid(), sid, &rid)) - return False; + return NT_STATUS_UNSUCCESSFUL; return unixsam_getsampwrid(my_methods, user, rid); } @@ -90,10 +90,10 @@ static BOOL unixsam_getsampwsid(struct pdb_methods *my_methods, SAM_ACCOUNT * us Adds an existing SAM_ACCOUNT ****************************************************************************/ -static BOOL unixsam_add_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd) +static NTSTATUS unixsam_add_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd) { DEBUG(0,("pdb_unix should not be listed as the first passdb backend! You can't add users to it.\n")); - return False; + return NT_STATUS_NOT_IMPLEMENTED; } /*************************************************************************** @@ -106,11 +106,31 @@ static BOOL unixsam_add_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *n as if the pdb_unix version was modified, but its actually stored somehwere. ****************************************************************************/ -static BOOL unixsam_update_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd) +static NTSTATUS unixsam_update_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd) { return methods->parent->pdb_add_sam_account(methods->parent, newpwd); } +static NTSTATUS unixsam_delete_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *pwd) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS unixsam_setsampwent(struct pdb_methods *methods, BOOL update) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS unixsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT *user) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} + +static void unixsam_endsampwent(struct pdb_methods *methods) +{ + return; /* NT_STATUS_NOT_IMPLEMENTED; */ +} + NTSTATUS pdb_init_unixsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location) { NTSTATUS nt_status; @@ -126,14 +146,14 @@ NTSTATUS pdb_init_unixsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, co (*pdb_method)->name = "unixsam"; - (*pdb_method)->setsampwent = NULL; - (*pdb_method)->endsampwent = NULL; - (*pdb_method)->getsampwent = NULL; + (*pdb_method)->setsampwent = unixsam_setsampwent; + (*pdb_method)->endsampwent = unixsam_endsampwent; + (*pdb_method)->getsampwent = unixsam_getsampwent; (*pdb_method)->getsampwnam = unixsam_getsampwnam; (*pdb_method)->getsampwsid = unixsam_getsampwsid; (*pdb_method)->add_sam_account = unixsam_add_sam_account; (*pdb_method)->update_sam_account = unixsam_update_sam_account; - (*pdb_method)->delete_sam_account = NULL; + (*pdb_method)->delete_sam_account = unixsam_delete_sam_account; /* There's not very much to initialise here */ return NT_STATUS_OK; diff --git a/source/utils/pdbedit.c b/source/utils/pdbedit.c index 7c61e6d8be4..6942779556e 100644 --- a/source/utils/pdbedit.c +++ b/source/utils/pdbedit.c @@ -62,7 +62,7 @@ extern BOOL AllowDebugChange; static int export_database (struct pdb_context *in, struct pdb_context *out) { SAM_ACCOUNT *user = NULL; - if (!in->pdb_setsampwent(in, 0)) { + if (NT_STATUS_IS_ERR(in->pdb_setsampwent(in, 0))) { fprintf(stderr, "Can't sampwent!\n"); return 1; } @@ -72,7 +72,7 @@ static int export_database (struct pdb_context *in, struct pdb_context *out) { return 1; } - while (in->pdb_getsampwent(in, user)) { + while (NT_STATUS_IS_OK(in->pdb_getsampwent(in, user))) { out->pdb_add_sam_account(out, user); if (!NT_STATUS_IS_OK(pdb_reset_sam(user))){ fprintf(stderr, "Can't reset SAM_ACCOUNT!\n"); @@ -188,7 +188,7 @@ static int print_user_info (struct pdb_context *in, char *username, BOOL verbosi return -1; } - ret = in->pdb_getsampwnam (in, sam_pwent, username); + ret = NT_STATUS_IS_OK(in->pdb_getsampwnam (in, sam_pwent, username)); if (ret==False) { fprintf (stderr, "Username not found!\n"); @@ -210,7 +210,7 @@ static int print_users_list (struct pdb_context *in, BOOL verbosity, BOOL smbpwd SAM_ACCOUNT *sam_pwent=NULL; BOOL check, ret; - check = in->pdb_setsampwent(in, False); + check = NT_STATUS_IS_OK(in->pdb_setsampwent(in, False)); if (!check) { return 1; } @@ -218,7 +218,7 @@ static int print_users_list (struct pdb_context *in, BOOL verbosity, BOOL smbpwd check = True; if (!(NT_STATUS_IS_OK(pdb_init_sam(&sam_pwent)))) return 1; - while (check && (ret = in->pdb_getsampwent (in, sam_pwent))) { + while (check && (ret = NT_STATUS_IS_OK(in->pdb_getsampwent (in, sam_pwent)))) { if (verbosity) printf ("---------------\n"); print_sam_info (sam_pwent, verbosity, smbpwdstyle); @@ -242,7 +242,7 @@ static int set_user_info (struct pdb_context *in, char *username, char *fullname pdb_init_sam(&sam_pwent); - ret = in->pdb_getsampwnam (in, sam_pwent, username); + ret = NT_STATUS_IS_OK(in->pdb_getsampwnam (in, sam_pwent, username)); if (ret==False) { fprintf (stderr, "Username not found!\n"); pdb_free_sam(&sam_pwent); @@ -260,7 +260,7 @@ static int set_user_info (struct pdb_context *in, char *username, char *fullname if (profile) pdb_set_profile_path (sam_pwent, profile, True); - if (in->pdb_update_sam_account (in, sam_pwent)) + if (NT_STATUS_IS_OK(in->pdb_update_sam_account (in, sam_pwent))) print_user_info (in, username, True, False); else { fprintf (stderr, "Unable to modify entry!\n"); @@ -328,7 +328,7 @@ static int new_user (struct pdb_context *in, char *username, char *fullname, cha pdb_set_acct_ctrl (sam_pwent, ACB_NORMAL); - if (in->pdb_add_sam_account (in, sam_pwent)) { + if (NT_STATUS_IS_OK(in->pdb_add_sam_account (in, sam_pwent))) { print_user_info (in, username, True, False); } else { fprintf (stderr, "Unable to add user! (does it alredy exist?)\n"); @@ -370,7 +370,7 @@ static int new_machine (struct pdb_context *in, char *machinename) pdb_set_group_sid_from_rid(sam_pwent, DOMAIN_GROUP_RID_COMPUTERS); - if (in->pdb_add_sam_account (in, sam_pwent)) { + if (NT_STATUS_IS_OK(in->pdb_add_sam_account (in, sam_pwent))) { print_user_info (in, name, True, False); } else { fprintf (stderr, "Unable to add machine! (does it already exist?)\n"); @@ -393,12 +393,12 @@ static int delete_user_entry (struct pdb_context *in, char *username) return -1; } - if (!in->pdb_getsampwnam(in, samaccount, username)) { + if (NT_STATUS_IS_ERR(in->pdb_getsampwnam(in, samaccount, username))) { fprintf (stderr, "user %s does not exist in the passdb\n", username); return -1; } - return in->pdb_delete_sam_account (in, samaccount); + return NT_STATUS_IS_OK(in->pdb_delete_sam_account (in, samaccount)); } /********************************************************* @@ -418,12 +418,12 @@ static int delete_machine_entry (struct pdb_context *in, char *machinename) return -1; } - if (!in->pdb_getsampwnam(in, samaccount, name)) { + if (NT_STATUS_IS_ERR(in->pdb_getsampwnam(in, samaccount, name))) { fprintf (stderr, "machine %s does not exist in the passdb\n", name); return -1; } - return in->pdb_delete_sam_account (in, samaccount); + return NT_STATUS_IS_OK(in->pdb_delete_sam_account (in, samaccount)); } /********************************************************* -- cgit From ab878b6cc4132594fc33f78aeebf0d8b7266c150 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 26 Sep 2002 10:25:34 +0000 Subject: Patch from "Stefan (metze) Metzmacher" to do a *much* better job of working with usrmgr. Previously we were blanking out entires, and all sort of mischif. The new patch (which I've now had a chance to test/modify) also takes care not to expand % values (ie we go \\%L\%U -> \\server\user, we don't want to store \\server\user back) and to correctly notice 'not set' compared to 'null string' etc. Andrew Bartlett --- source/include/rpc_samr.h | 19 +- source/lib/time.c | 14 +- source/passdb/passdb.c | 2 +- source/rpc_parse/parse_samr.c | 45 +++- source/rpc_server/srv_samr_nt.c | 4 +- source/rpc_server/srv_samr_util.c | 420 +++++++++++++++++++++++++++++++------- 6 files changed, 419 insertions(+), 85 deletions(-) diff --git a/source/include/rpc_samr.h b/source/include/rpc_samr.h index 11438ae0676..72c65ebfb75 100644 --- a/source/include/rpc_samr.h +++ b/source/include/rpc_samr.h @@ -314,6 +314,9 @@ SamrTestPrivateFunctionsUser #define ALIAS_EXECUTE ( STANDARD_RIGHTS_EXECUTE_ACCESS | \ ALIAS_ACCESS_LOOKUP_INFO ) +/* A flag for the user info 21 and 23 structs */ +#define PASS_MUST_CHANGE_AT_NEXT_LOGON 1 + typedef struct _DISP_USER_INFO { SAM_ACCOUNT *sam; } DISP_USER_INFO; @@ -366,10 +369,14 @@ typedef struct sam_user_info_23 /* uint8 pad[2] */ uint32 ptr_logon_hrs; /* pointer to logon hours */ - uint8 padding1[8]; - uint32 unknown_5; /* 0x0001 0000 */ + uint8 padding1[6]; + + uint8 passmustchange; /* 0x00 must change = 0x01 */ + + uint8 padding2; + uint8 pass[516]; UNISTR2 uni_user_name; /* NULL - username unicode string */ @@ -487,7 +494,11 @@ typedef struct sam_user_info_21 uint32 unknown_5; /* 0x0002 0000 */ - uint8 padding1[8]; + uint8 padding1[6]; + + uint8 passmustchange; /* 0x00 must change = 0x01 */ + + uint8 padding2; UNISTR2 uni_user_name; /* username unicode string */ UNISTR2 uni_full_name; /* user's full name unicode string */ @@ -507,6 +518,8 @@ typedef struct sam_user_info_21 } SAM_USER_INFO_21; +#define PASS_MUST_CHANGE_AT_NEXT_LOGON 0x01 +#define PASS_DONT_CHANGE_AT_NEXT_LOGON 0x00 /* SAM_USER_INFO_20 */ typedef struct sam_user_info_20 diff --git a/source/lib/time.c b/source/lib/time.c index ef12dc15f34..5da63910d9c 100644 --- a/source/lib/time.c +++ b/source/lib/time.c @@ -1,8 +1,8 @@ /* Unix SMB/CIFS implementation. time handling functions - Copyright (C) Andrew Tridgell 1992-1998 - + Copyright (C) Andrew Tridgell 1992-1998 + Copyright (C) Stefan (metze) Metzmacher 2002 This program 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 @@ -748,3 +748,13 @@ void init_nt_time(NTTIME *nt) nt->high = 0x7FFFFFFF; nt->low = 0xFFFFFFFF; } + +/**************************************************************************** +check if NTTIME is 0 +****************************************************************************/ +BOOL nt_time_is_zero(NTTIME *nt) +{ + if(nt->high==0) + return True; + return False; +} diff --git a/source/passdb/passdb.c b/source/passdb/passdb.c index b78f26a8e81..2d8ea858aa4 100644 --- a/source/passdb/passdb.c +++ b/source/passdb/passdb.c @@ -978,7 +978,7 @@ const char *pdb_unistr2_convert(const UNISTR2 *from) static pstring convert_buffer; *convert_buffer = 0; if (!from) { - return convert_buffer; + return NULL; } unistr2_to_ascii(convert_buffer, from, sizeof(pstring)); diff --git a/source/rpc_parse/parse_samr.c b/source/rpc_parse/parse_samr.c index 1137993bb60..ddf51fcf0be 100644 --- a/source/rpc_parse/parse_samr.c +++ b/source/rpc_parse/parse_samr.c @@ -5470,7 +5470,15 @@ void init_sam_user_info23W(SAM_USER_INFO_23 * usr, NTTIME * logon_time, /* all z usr->logon_divs = logon_divs; /* should be 168 (hours/week) */ usr->ptr_logon_hrs = hrs ? 1 : 0; + if (nt_time_is_zero(pass_must_change_time)) { + usr->passmustchange=PASS_MUST_CHANGE_AT_NEXT_LOGON; + } else { + usr->passmustchange=0; + } + + ZERO_STRUCT(usr->padding1); + ZERO_STRUCT(usr->padding2); usr->unknown_5 = unknown_5; /* 0x0001 0000 */ @@ -5558,7 +5566,14 @@ void init_sam_user_info23A(SAM_USER_INFO_23 * usr, NTTIME * logon_time, /* all z usr->logon_divs = logon_divs; /* should be 168 (hours/week) */ usr->ptr_logon_hrs = hrs ? 1 : 0; + if (nt_time_is_zero(pass_must_change_time)) { + usr->passmustchange=PASS_MUST_CHANGE_AT_NEXT_LOGON; + } else { + usr->passmustchange=0; + } + ZERO_STRUCT(usr->padding1); + ZERO_STRUCT(usr->padding2); usr->unknown_5 = unknown_5; /* 0x0001 0000 */ @@ -5651,11 +5666,18 @@ static BOOL sam_io_user_info23(char *desc, SAM_USER_INFO_23 * usr, return False; if(!prs_uint32("ptr_logon_hrs ", ps, depth, &usr->ptr_logon_hrs)) return False; + + if(!prs_uint32("unknown_5 ", ps, depth, &usr->unknown_5)) + return False; + if(!prs_uint8s(False, "padding1 ", ps, depth, usr->padding1, sizeof(usr->padding1))) return False; - if(!prs_uint32("unknown_5 ", ps, depth, &usr->unknown_5)) + if(!prs_uint8("passmustchange ", ps, depth, &usr->passmustchange)) + return False; + if(!prs_uint8("padding2 ", ps, depth, &usr->padding2)) return False; + if(!prs_uint8s(False, "password ", ps, depth, usr->pass, sizeof(usr->pass))) return False; @@ -5905,7 +5927,15 @@ void init_sam_user_info21W(SAM_USER_INFO_21 * usr, usr->ptr_logon_hrs = hrs ? 1 : 0; usr->unknown_5 = unknown_5; /* 0x0002 0000 */ + if (nt_time_is_zero(pass_must_change_time)) { + usr->passmustchange=PASS_MUST_CHANGE_AT_NEXT_LOGON; + } else { + usr->passmustchange=0; + } + + ZERO_STRUCT(usr->padding1); + ZERO_STRUCT(usr->padding2); copy_unistr2(&usr->uni_user_name, user_name); copy_unistr2(&usr->uni_full_name, full_name); @@ -6037,7 +6067,15 @@ NTSTATUS init_sam_user_info21A(SAM_USER_INFO_21 *usr, SAM_ACCOUNT *pw, DOM_SID * usr->ptr_logon_hrs = pdb_get_hours(pw) ? 1 : 0; usr->unknown_5 = pdb_get_unknown5(pw); /* 0x0002 0000 */ + if (pdb_get_pass_must_change_time(pw) == 0) { + usr->passmustchange=PASS_MUST_CHANGE_AT_NEXT_LOGON; + } else { + usr->passmustchange=0; + } + + ZERO_STRUCT(usr->padding1); + ZERO_STRUCT(usr->padding2); init_unistr2(&usr->uni_user_name, user_name, len_user_name); init_unistr2(&usr->uni_full_name, full_name, len_full_name); @@ -6132,11 +6170,16 @@ static BOOL sam_io_user_info21(char *desc, SAM_USER_INFO_21 * usr, return False; if(!prs_uint32("ptr_logon_hrs ", ps, depth, &usr->ptr_logon_hrs)) return False; + if(!prs_uint32("unknown_5 ", ps, depth, &usr->unknown_5)) return False; if(!prs_uint8s(False, "padding1 ", ps, depth, usr->padding1, sizeof(usr->padding1))) return False; + if(!prs_uint8("passmustchange ", ps, depth, &usr->passmustchange)) + return False; + if(!prs_uint8("padding2 ", ps, depth, &usr->padding2)) + return False; /* here begins pointed-to data */ diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c index ea631838dab..6e9ba2f0267 100644 --- a/source/rpc_server/srv_samr_nt.c +++ b/source/rpc_server/srv_samr_nt.c @@ -2802,8 +2802,6 @@ static BOOL set_user_info_23(SAM_USER_INFO_23 *id23, DOM_SID *sid) acct_ctrl = pdb_get_acct_ctrl(pwd); - copy_id23_to_sam_passwd(pwd, id23); - if (!decode_pw_buffer((char*)id23->pass, plaintext_buf, 256, &len)) { pdb_free_sam(&pwd); return False; @@ -2814,6 +2812,8 @@ static BOOL set_user_info_23(SAM_USER_INFO_23 *id23, DOM_SID *sid) return False; } + copy_id23_to_sam_passwd(pwd, id23); + /* if it's a trust account, don't update /etc/passwd */ if ( (!IS_SAM_UNIX_USER(pwd)) || ( (acct_ctrl & ACB_DOMTRUST) == ACB_DOMTRUST ) || diff --git a/source/rpc_server/srv_samr_util.c b/source/rpc_server/srv_samr_util.c index 7a5b1e5f46e..18297056d68 100644 --- a/source/rpc_server/srv_samr_util.c +++ b/source/rpc_server/srv_samr_util.c @@ -1,10 +1,11 @@ /* Unix SMB/CIFS implementation. SAMR Pipe utility functions. - Copyright (C) Jeremy Allison 1996-2001 + Copyright (C) Luke Kenneth Casson Leighton 1996-1998 Copyright (C) Gerald (Jerry) Carter 2000-2001 Copyright (C) Andrew Bartlett 2001-2002 + Copyright (C) Stefan (metze) Metzmacher 2002 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,118 +27,385 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_RPC_SRV +#define STRING_CHANGED (old_string && !new_string) ||\ + (!old_string && new_string) ||\ + (old_string && new_string && (strcmp(old_string, new_string) != 0)) + /************************************************************* - Copies a SAM_USER_INFO_23 to a SAM_ACCOUNT - **************************************************************/ + Copies a SAM_USER_INFO_21 to a SAM_ACCOUNT +**************************************************************/ -void copy_id23_to_sam_passwd(SAM_ACCOUNT *to, SAM_USER_INFO_23 *from) +void copy_id21_to_sam_passwd(SAM_ACCOUNT *to, SAM_USER_INFO_21 *from) { + time_t unix_time, stored_time; + const char *old_string, *new_string; if (from == NULL || to == NULL) return; + if (!nt_time_is_zero(&from->logon_time)) { + unix_time=nt_time_to_unix(&from->logon_time); + stored_time = pdb_get_logon_time(to); + DEBUG(10,("INFO_21 LOGON_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time)); + if (stored_time != unix_time) + pdb_set_logon_time(to, unix_time, True); + } + if (!nt_time_is_zero(&from->logoff_time)) { + unix_time=nt_time_to_unix(&from->logoff_time); + stored_time = pdb_get_logoff_time(to); + DEBUG(10,("INFO_21 LOGOFF_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time)); + if (stored_time != unix_time) + pdb_set_logoff_time(to, unix_time, True); + } + + if (!nt_time_is_zero(&from->kickoff_time)) { + unix_time=nt_time_to_unix(&from->kickoff_time); + stored_time = pdb_get_kickoff_time(to); + DEBUG(10,("INFO_21 KICKOFF_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time)); + if (stored_time != unix_time) + pdb_set_kickoff_time(to, unix_time , True); + } - pdb_set_logon_time(to,nt_time_to_unix(&from->logon_time), True); - pdb_set_logoff_time(to,nt_time_to_unix(&from->logoff_time), True); - pdb_set_kickoff_time(to, nt_time_to_unix(&from->kickoff_time), True); - pdb_set_pass_can_change_time(to, nt_time_to_unix(&from->pass_can_change_time), True); - pdb_set_pass_must_change_time(to, nt_time_to_unix(&from->pass_must_change_time), True); - - pdb_set_pass_last_set_time(to, nt_time_to_unix(&from->pass_last_set_time)); - - if (from->uni_user_name.buffer) - pdb_set_username(to , pdb_unistr2_convert(&from->uni_user_name )); - if (from->uni_full_name.buffer) - pdb_set_fullname(to , pdb_unistr2_convert(&from->uni_full_name )); - if (from->uni_home_dir.buffer) - pdb_set_homedir(to , pdb_unistr2_convert(&from->uni_home_dir ), True); - if (from->uni_dir_drive.buffer) - pdb_set_dir_drive(to , pdb_unistr2_convert(&from->uni_dir_drive ), True); - if (from->uni_logon_script.buffer) - pdb_set_logon_script(to , pdb_unistr2_convert(&from->uni_logon_script), True); - if (from->uni_profile_path.buffer) - pdb_set_profile_path(to , pdb_unistr2_convert(&from->uni_profile_path), True); - if (from->uni_acct_desc.buffer) - pdb_set_acct_desc(to , pdb_unistr2_convert(&from->uni_acct_desc )); - if (from->uni_workstations.buffer) - pdb_set_workstations(to , pdb_unistr2_convert(&from->uni_workstations)); - if (from->uni_unknown_str.buffer) - pdb_set_unknown_str(to , pdb_unistr2_convert(&from->uni_unknown_str )); - if (from->uni_munged_dial.buffer) - pdb_set_munged_dial(to , pdb_unistr2_convert(&from->uni_munged_dial )); - - if (from->user_rid) - pdb_set_user_sid_from_rid(to, from->user_rid); - if (from->group_rid) - pdb_set_group_sid_from_rid(to, from->group_rid); + if (!nt_time_is_zero(&from->pass_can_change_time)) { + unix_time=nt_time_to_unix(&from->pass_can_change_time); + stored_time = pdb_get_pass_can_change_time(to); + DEBUG(10,("INFO_21 PASS_CAN_CH: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time)); + if (stored_time != unix_time) + pdb_set_pass_can_change_time(to, unix_time, True); + } + if (!nt_time_is_zero(&from->pass_last_set_time)) { + unix_time=nt_time_to_unix(&from->pass_last_set_time); + stored_time = pdb_get_pass_last_set_time(to); + DEBUG(10,("INFO_21 PASS_LAST_SET: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time)); + if (stored_time != unix_time) + pdb_set_pass_last_set_time(to, unix_time); + } + + if (!nt_time_is_zero(&from->pass_must_change_time)) { + unix_time=nt_time_to_unix(&from->pass_must_change_time); + stored_time=pdb_get_pass_must_change_time(to); + DEBUG(10,("INFO_21 PASS_MUST_CH: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time)); + if (stored_time != unix_time) + pdb_set_pass_must_change_time(to, unix_time, True); + } + + /* Backend should check this for sainity */ + if (from->hdr_user_name.buffer) { + old_string = pdb_get_username(to); + new_string = pdb_unistr2_convert(&from->uni_user_name); + DEBUG(10,("INFO_21 UNI_USER_NAME: %s -> %s\n", old_string, new_string)); + if (STRING_CHANGED) + pdb_set_username(to , new_string); + } + + if (from->hdr_full_name.buffer) { + old_string = pdb_get_fullname(to); + new_string = pdb_unistr2_convert(&from->uni_user_name); + DEBUG(10,("INFO_21 UNI_FULL_NAME: %s -> %s\n",old_string, new_string)); + if (STRING_CHANGED) + pdb_set_fullname(to , new_string); + } + + if (from->hdr_home_dir.buffer) { + old_string = pdb_get_homedir(to); + new_string = pdb_unistr2_convert(&from->uni_home_dir); + DEBUG(10,("INFO_21 UNI_HOME_DIR: %s -> %s\n",old_string,new_string)); + if (STRING_CHANGED) + pdb_set_homedir(to , new_string, True); + } + + if (from->hdr_dir_drive.buffer) { + old_string = pdb_get_dir_drive(to); + new_string = pdb_unistr2_convert(&from->uni_dir_drive); + DEBUG(10,("INFO_21 UNI_DIR_DRIVE: %s -> %s\n",old_string,new_string)); + if (STRING_CHANGED) + pdb_set_dir_drive(to , new_string, True); + } + if (from->hdr_logon_script.buffer) { + old_string = pdb_get_logon_script(to); + new_string = pdb_unistr2_convert(&from->uni_logon_script); + DEBUG(10,("INFO_21 UNI_LOGON_SCRIPT: %s -> %s\n",old_string,new_string)); + if (STRING_CHANGED) + pdb_set_logon_script(to , new_string, True); + } + + if (from->hdr_profile_path.buffer) { + old_string = pdb_get_profile_path(to); + new_string = pdb_unistr2_convert(&from->uni_profile_path); + DEBUG(10,("INFO_21 UNI_PROFILE_PATH: %s -> %s\n",old_string, new_string)); + if (STRING_CHANGED) + pdb_set_profile_path(to , new_string, True); + } + + if (from->hdr_acct_desc.buffer) { + old_string = pdb_get_acct_desc(to); + new_string = pdb_unistr2_convert(&from->uni_acct_desc); + DEBUG(10,("INFO_21 UNI_ACCT_DESC: %s -> %s\n",old_string,new_string)); + if (STRING_CHANGED) + pdb_set_acct_desc(to , new_string); + } + + if (from->hdr_workstations.buffer) { + old_string = pdb_get_workstations(to); + new_string = pdb_unistr2_convert(&from->uni_workstations); + DEBUG(10,("INFO_21 UNI_WORKSTATIONS: %s -> %s\n",old_string, new_string)); + if (STRING_CHANGED) + pdb_set_workstations(to , new_string); + } + + if (from->hdr_unknown_str.buffer) { + old_string = pdb_get_unknown_str(to); + new_string = pdb_unistr2_convert(&from->uni_unknown_str); + DEBUG(10,("INFO_21 UNI_UNKNOWN_STR: %s -> %s\n",old_string, new_string)); + if (STRING_CHANGED) + pdb_set_unknown_str(to , new_string); + } + + if (from->hdr_munged_dial.buffer) { + old_string = pdb_get_munged_dial(to); + new_string = pdb_unistr2_convert(&from->uni_munged_dial); + DEBUG(10,("INFO_21 UNI_MUNGED_DIAL: %s -> %s\n",old_string, new_string)); + if (STRING_CHANGED) + pdb_set_munged_dial(to , new_string); + } + + if (from->user_rid) { + DEBUG(10,("INFO_21 USER_RID: %u -> %u NOT UPDATED!\n",pdb_get_user_rid(to),from->user_rid)); + /* we really allow this ??? metze */ + /* pdb_set_user_sid_from_rid(to, from->user_rid);*/ + } + + if (from->group_rid) { + DEBUG(10,("INFO_21 GROUP_RID: %u -> %u\n",pdb_get_group_rid(to),from->group_rid)); + pdb_set_group_sid_from_rid(to, from->group_rid); + } + + DEBUG(10,("INFO_21 ACCT_CTRL: %08X -> %08X\n",pdb_get_acct_ctrl(to),from->acb_info)); pdb_set_acct_ctrl(to, from->acb_info); + + DEBUG(10,("INFO_21 UNKOWN_3: %08X -> %08X\n",pdb_get_unknown3(to),from->unknown_3)); pdb_set_unknown_3(to, from->unknown_3); + + DEBUG(15,("INFO_21 LOGON_DIVS: %08X -> %08X\n",pdb_get_logon_divs(to),from->logon_divs)); pdb_set_logon_divs(to, from->logon_divs); + + DEBUG(15,("INFO_21 LOGON_HRS.LEN: %08X -> %08X\n",pdb_get_hours_len(to),from->logon_hrs.len)); pdb_set_hours_len(to, from->logon_hrs.len); + DEBUG(15,("INFO_21 LOGON_HRS.HOURS: %s -> %s\n",pdb_get_hours(to),from->logon_hrs.hours)); pdb_set_hours(to, from->logon_hrs.hours); + DEBUG(10,("INFO_21 UNKOWN_5: %08X -> %08X\n",pdb_get_unknown5(to),from->unknown_5)); pdb_set_unknown_5(to, from->unknown_5); + + DEBUG(10,("INFO_21 UNKOWN_6: %08X -> %08X\n",pdb_get_unknown6(to),from->unknown_6)); pdb_set_unknown_6(to, from->unknown_6); + + DEBUG(10,("INFO_21 PADDING1 %02X %02X %02X %02X %02X %02X\n", + from->padding1[0], + from->padding1[1], + from->padding1[2], + from->padding1[3], + from->padding1[4], + from->padding1[5])); + + DEBUG(10,("INFO_21 PASS_MUST_CHANGE_AT_NEXT_LOGON: %02X\n",from->passmustchange)); + if (from->passmustchange==PASS_MUST_CHANGE_AT_NEXT_LOGON) { + pdb_set_pass_must_change_time(to,0, True); + } + + DEBUG(10,("INFO_21 PADDING_2: %02X\n",from->padding2)); + + DEBUG(10,("INFO_21 PADDING_4: %08X\n",from->padding4)); } /************************************************************* - Copies a sam passwd. - **************************************************************/ + Copies a SAM_USER_INFO_23 to a SAM_ACCOUNT +**************************************************************/ -void copy_id21_to_sam_passwd(SAM_ACCOUNT *to, SAM_USER_INFO_21 *from) +void copy_id23_to_sam_passwd(SAM_ACCOUNT *to, SAM_USER_INFO_23 *from) { + time_t unix_time, stored_time; + const char *old_string, *new_string; + if (from == NULL || to == NULL) return; + if (!nt_time_is_zero(&from->logon_time)) { + unix_time=nt_time_to_unix(&from->logon_time); + stored_time = pdb_get_logon_time(to); + DEBUG(10,("INFO_23 LOGON_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time)); + if (stored_time != unix_time) + pdb_set_logon_time(to, unix_time, True); + } + if (!nt_time_is_zero(&from->logoff_time)) { + unix_time=nt_time_to_unix(&from->logoff_time); + stored_time = pdb_get_logoff_time(to); + DEBUG(10,("INFO_23 LOGOFF_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time)); + if (stored_time != unix_time) + pdb_set_logoff_time(to, unix_time, True); + } + + if (!nt_time_is_zero(&from->kickoff_time)) { + unix_time=nt_time_to_unix(&from->kickoff_time); + stored_time = pdb_get_kickoff_time(to); + DEBUG(10,("INFO_23 KICKOFF_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time)); + if (stored_time != unix_time) + pdb_set_kickoff_time(to, unix_time , True); + } - pdb_set_logon_time(to,nt_time_to_unix(&from->logon_time), True); - pdb_set_logoff_time(to,nt_time_to_unix(&from->logoff_time), True); - pdb_set_kickoff_time(to, nt_time_to_unix(&from->kickoff_time), True); - pdb_set_pass_can_change_time(to, nt_time_to_unix(&from->pass_can_change_time), True); - pdb_set_pass_must_change_time(to, nt_time_to_unix(&from->pass_must_change_time), True); - - pdb_set_pass_last_set_time(to, nt_time_to_unix(&from->pass_last_set_time)); - - if (from->uni_user_name.buffer) - pdb_set_username(to , pdb_unistr2_convert(&from->uni_user_name )); - if (from->uni_full_name.buffer) - pdb_set_fullname(to , pdb_unistr2_convert(&from->uni_full_name )); - if (from->uni_home_dir.buffer) - pdb_set_homedir(to , pdb_unistr2_convert(&from->uni_home_dir ), True); - if (from->uni_dir_drive.buffer) - pdb_set_dir_drive(to , pdb_unistr2_convert(&from->uni_dir_drive ), True); - if (from->uni_logon_script.buffer) - pdb_set_logon_script(to , pdb_unistr2_convert(&from->uni_logon_script), True); - if (from->uni_profile_path.buffer) - pdb_set_profile_path(to , pdb_unistr2_convert(&from->uni_profile_path), True); - if (from->uni_acct_desc.buffer) - pdb_set_acct_desc(to , pdb_unistr2_convert(&from->uni_acct_desc )); - if (from->uni_workstations.buffer) - pdb_set_workstations(to , pdb_unistr2_convert(&from->uni_workstations)); - if (from->uni_unknown_str.buffer) - pdb_set_unknown_str(to , pdb_unistr2_convert(&from->uni_unknown_str )); - if (from->uni_munged_dial.buffer) - pdb_set_munged_dial(to , pdb_unistr2_convert(&from->uni_munged_dial )); - - if (from->user_rid) - pdb_set_user_sid_from_rid(to, from->user_rid); - if (from->group_rid) - pdb_set_group_sid_from_rid(to, from->group_rid); + if (!nt_time_is_zero(&from->pass_can_change_time)) { + unix_time=nt_time_to_unix(&from->pass_can_change_time); + stored_time = pdb_get_pass_can_change_time(to); + DEBUG(10,("INFO_23 PASS_CAN_CH: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time)); + if (stored_time != unix_time) + pdb_set_pass_can_change_time(to, unix_time, True); + } + if (!nt_time_is_zero(&from->pass_last_set_time)) { + unix_time=nt_time_to_unix(&from->pass_last_set_time); + stored_time = pdb_get_pass_last_set_time(to); + DEBUG(10,("INFO_23 PASS_LAST_SET: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time)); + if (stored_time != unix_time) + pdb_set_pass_last_set_time(to, unix_time); + } + + if (!nt_time_is_zero(&from->pass_must_change_time)) { + unix_time=nt_time_to_unix(&from->pass_must_change_time); + stored_time=pdb_get_pass_must_change_time(to); + DEBUG(10,("INFO_23 PASS_MUST_CH: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time)); + if (stored_time != unix_time) + pdb_set_pass_must_change_time(to, unix_time, True); + } + + /* Backend should check this for sainity */ + if (from->hdr_user_name.buffer) { + old_string = pdb_get_username(to); + new_string = pdb_unistr2_convert(&from->uni_user_name); + DEBUG(10,("INFO_23 UNI_USER_NAME: %s -> %s\n", old_string, new_string)); + if (STRING_CHANGED) + pdb_set_username(to , new_string); + } + + if (from->hdr_full_name.buffer) { + old_string = pdb_get_fullname(to); + new_string = pdb_unistr2_convert(&from->uni_user_name); + DEBUG(10,("INFO_23 UNI_FULL_NAME: %s -> %s\n",old_string, new_string)); + if (STRING_CHANGED) + pdb_set_fullname(to , new_string); + } + + if (from->hdr_home_dir.buffer) { + old_string = pdb_get_homedir(to); + new_string = pdb_unistr2_convert(&from->uni_home_dir); + DEBUG(10,("INFO_23 UNI_HOME_DIR: %s -> %s\n",old_string,new_string)); + if (STRING_CHANGED) + pdb_set_homedir(to , new_string, True); + } + + if (from->hdr_dir_drive.buffer) { + old_string = pdb_get_dir_drive(to); + new_string = pdb_unistr2_convert(&from->uni_dir_drive); + DEBUG(10,("INFO_23 UNI_DIR_DRIVE: %s -> %s\n",old_string,new_string)); + if (STRING_CHANGED) + pdb_set_dir_drive(to , new_string, True); + } - /* FIXME!! Do we need to copy the passwords here as well? - I don't know. Need to figure this out --jerry */ + if (from->hdr_logon_script.buffer) { + old_string = pdb_get_logon_script(to); + new_string = pdb_unistr2_convert(&from->uni_logon_script); + DEBUG(10,("INFO_23 UNI_LOGON_SCRIPT: %s -> %s\n",old_string,new_string)); + if (STRING_CHANGED) + pdb_set_logon_script(to , new_string, True); + } - /* Passwords dealt with in caller --abartlet */ + if (from->hdr_profile_path.buffer) { + old_string = pdb_get_profile_path(to); + new_string = pdb_unistr2_convert(&from->uni_profile_path); + DEBUG(10,("INFO_23 UNI_PROFILE_PATH: %s -> %s\n",old_string, new_string)); + if (STRING_CHANGED) + pdb_set_profile_path(to , new_string, True); + } + + if (from->hdr_acct_desc.buffer) { + old_string = pdb_get_acct_desc(to); + new_string = pdb_unistr2_convert(&from->uni_acct_desc); + DEBUG(10,("INFO_23 UNI_ACCT_DESC: %s -> %s\n",old_string,new_string)); + if (STRING_CHANGED) + pdb_set_acct_desc(to , new_string); + } + + if (from->hdr_workstations.buffer) { + old_string = pdb_get_workstations(to); + new_string = pdb_unistr2_convert(&from->uni_workstations); + DEBUG(10,("INFO_23 UNI_WORKSTATIONS: %s -> %s\n",old_string, new_string)); + if (STRING_CHANGED) + pdb_set_workstations(to , new_string); + } + if (from->hdr_unknown_str.buffer) { + old_string = pdb_get_unknown_str(to); + new_string = pdb_unistr2_convert(&from->uni_unknown_str); + DEBUG(10,("INFO_23 UNI_UNKNOWN_STR: %s -> %s\n",old_string, new_string)); + if (STRING_CHANGED) + pdb_set_unknown_str(to , new_string); + } + + if (from->hdr_munged_dial.buffer) { + old_string = pdb_get_munged_dial(to); + new_string = pdb_unistr2_convert(&from->uni_munged_dial); + DEBUG(10,("INFO_23 UNI_MUNGED_DIAL: %s -> %s\n",old_string, new_string)); + if (STRING_CHANGED) + pdb_set_munged_dial(to , new_string); + } + + if (from->user_rid) { + DEBUG(10,("INFO_23 USER_RID: %u -> %u NOT UPDATED!\n",pdb_get_user_rid(to),from->user_rid)); + /* we really allow this ??? metze */ + /* pdb_set_user_sid_from_rid(to, from->user_rid);*/ + } + + if (from->group_rid) { + DEBUG(10,("INFO_23 GROUP_RID: %u -> %u\n",pdb_get_group_rid(to),from->group_rid)); + pdb_set_group_sid_from_rid(to, from->group_rid); + } + + DEBUG(10,("INFO_23 ACCT_CTRL: %08X -> %08X\n",pdb_get_acct_ctrl(to),from->acb_info)); pdb_set_acct_ctrl(to, from->acb_info); + + DEBUG(10,("INFO_23 UNKOWN_3: %08X -> %08X\n",pdb_get_unknown3(to),from->unknown_3)); pdb_set_unknown_3(to, from->unknown_3); + + DEBUG(15,("INFO_23 LOGON_DIVS: %08X -> %08X\n",pdb_get_logon_divs(to),from->logon_divs)); pdb_set_logon_divs(to, from->logon_divs); + + DEBUG(15,("INFO_23 LOGON_HRS.LEN: %08X -> %08X\n",pdb_get_hours_len(to),from->logon_hrs.len)); pdb_set_hours_len(to, from->logon_hrs.len); + DEBUG(15,("INFO_23 LOGON_HRS.HOURS: %s -> %s\n",pdb_get_hours(to),from->logon_hrs.hours)); pdb_set_hours(to, from->logon_hrs.hours); + DEBUG(10,("INFO_23 UNKOWN_5: %08X -> %08X\n",pdb_get_unknown5(to),from->unknown_5)); pdb_set_unknown_5(to, from->unknown_5); + + DEBUG(10,("INFO_23 UNKOWN_6: %08X -> %08X\n",pdb_get_unknown6(to),from->unknown_6)); pdb_set_unknown_6(to, from->unknown_6); + + DEBUG(10,("INFO_23 PADDING1 %02X %02X %02X %02X %02X %02X\n", + from->padding1[0], + from->padding1[1], + from->padding1[2], + from->padding1[3], + from->padding1[4], + from->padding1[5])); + + DEBUG(10,("INFO_23 PASS_MUST_CHANGE_AT_NEXT_LOGON: %02X\n",from->passmustchange)); + if (from->passmustchange==PASS_MUST_CHANGE_AT_NEXT_LOGON) { + pdb_set_pass_must_change_time(to,0, True); + } + + DEBUG(10,("INFO_23 PADDING_2: %02X\n",from->padding2)); + + DEBUG(10,("INFO_23 PADDING_4: %08X\n",from->padding4)); } + -- cgit From 67d600ed8ed1cdd25503fdb2299bdfa93befee1f Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Thu, 26 Sep 2002 10:31:51 +0000 Subject: forgot include file, sorry --- source/include/passdb.h | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/source/include/passdb.h b/source/include/passdb.h index 7a791ddac4f..0c694987fe5 100644 --- a/source/include/passdb.h +++ b/source/include/passdb.h @@ -49,21 +49,21 @@ typedef struct pdb_context /* These functions are wrappers for the functions listed above. They may do extra things like re-reading a SAM_ACCOUNT on update */ - BOOL (*pdb_setsampwent)(struct pdb_context *, BOOL update); + NTSTATUS (*pdb_setsampwent)(struct pdb_context *, BOOL update); void (*pdb_endsampwent)(struct pdb_context *); - BOOL (*pdb_getsampwent)(struct pdb_context *, SAM_ACCOUNT *user); + NTSTATUS (*pdb_getsampwent)(struct pdb_context *, SAM_ACCOUNT *user); - BOOL (*pdb_getsampwnam)(struct pdb_context *, SAM_ACCOUNT *sam_acct, const char *username); + NTSTATUS (*pdb_getsampwnam)(struct pdb_context *, SAM_ACCOUNT *sam_acct, const char *username); - BOOL (*pdb_getsampwsid)(struct pdb_context *, SAM_ACCOUNT *sam_acct, const DOM_SID *sid); + NTSTATUS (*pdb_getsampwsid)(struct pdb_context *, SAM_ACCOUNT *sam_acct, const DOM_SID *sid); - BOOL (*pdb_add_sam_account)(struct pdb_context *, SAM_ACCOUNT *sampass); + NTSTATUS (*pdb_add_sam_account)(struct pdb_context *, SAM_ACCOUNT *sampass); - BOOL (*pdb_update_sam_account)(struct pdb_context *, SAM_ACCOUNT *sampass); + NTSTATUS (*pdb_update_sam_account)(struct pdb_context *, SAM_ACCOUNT *sampass); - BOOL (*pdb_delete_sam_account)(struct pdb_context *, SAM_ACCOUNT *username); + NTSTATUS (*pdb_delete_sam_account)(struct pdb_context *, SAM_ACCOUNT *username); void (*free_fn)(struct pdb_context **); @@ -80,21 +80,21 @@ typedef struct pdb_methods struct pdb_methods *next; struct pdb_methods *prev; - BOOL (*setsampwent)(struct pdb_methods *, BOOL update); + NTSTATUS (*setsampwent)(struct pdb_methods *, BOOL update); void (*endsampwent)(struct pdb_methods *); - BOOL (*getsampwent)(struct pdb_methods *, SAM_ACCOUNT *user); + NTSTATUS (*getsampwent)(struct pdb_methods *, SAM_ACCOUNT *user); - BOOL (*getsampwnam)(struct pdb_methods *, SAM_ACCOUNT *sam_acct, const char *username); + NTSTATUS (*getsampwnam)(struct pdb_methods *, SAM_ACCOUNT *sam_acct, const char *username); - BOOL (*getsampwsid)(struct pdb_methods *, SAM_ACCOUNT *sam_acct, const DOM_SID *Sid); + NTSTATUS (*getsampwsid)(struct pdb_methods *, SAM_ACCOUNT *sam_acct, const DOM_SID *Sid); - BOOL (*add_sam_account)(struct pdb_methods *, SAM_ACCOUNT *sampass); + NTSTATUS (*add_sam_account)(struct pdb_methods *, SAM_ACCOUNT *sampass); - BOOL (*update_sam_account)(struct pdb_methods *, SAM_ACCOUNT *sampass); + NTSTATUS (*update_sam_account)(struct pdb_methods *, SAM_ACCOUNT *sampass); - BOOL (*delete_sam_account)(struct pdb_methods *, SAM_ACCOUNT *username); + NTSTATUS (*delete_sam_account)(struct pdb_methods *, SAM_ACCOUNT *username); void *private_data; /* Private data of some kind */ -- cgit From e87948c777b59592b130da081ef5d25600455d29 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 26 Sep 2002 13:31:49 +0000 Subject: Patch from "Kai Krueger" to get some more of our access control bits right on the SAMR pipe. Andrew Bartlett --- source/include/rpc_samr.h | 86 ++++++++++++++++++++--------------------- source/rpc_server/srv_samr_nt.c | 19 +++++++-- 2 files changed, 58 insertions(+), 47 deletions(-) diff --git a/source/include/rpc_samr.h b/source/include/rpc_samr.h index 72c65ebfb75..95e79b39ada 100644 --- a/source/include/rpc_samr.h +++ b/source/include/rpc_samr.h @@ -177,49 +177,49 @@ SamrTestPrivateFunctionsUser SAMR_ACCESS_UNKNOWN_1 ) /* Access bits to Domain-objects */ - -#define DOMAIN_ACCESS_LOOKUP_INFO_1 0x00000001 -#define DOMAIN_ACCESS_SET_INFO_1 0x00000002 -#define DOMAIN_ACCESS_LOOKUP_INFO_2 0x00000004 -#define DOMAIN_ACCESS_SET_INFO_2 0x00000008 -#define DOMAIN_ACCESS_CREATE_USER 0x00000010 -#define DOMAIN_ACCESS_CREATE_GROUP 0x00000020 -#define DOMAIN_ACCESS_CREATE_ALIAS 0x00000040 -#define DOMAIN_ACCESS_UNKNOWN_80 0x00000080 -#define DOMAIN_ACCESS_ENUM_ACCOUNTS 0x00000100 -#define DOMAIN_ACCESS_OPEN_ACCOUNT 0x00000200 -#define DOMAIN_ACCESS_SET_INFO_3 0x00000400 - -#define DOMAIN_ALL_ACCESS ( STANDARD_RIGHTS_REQUIRED_ACCESS | \ - DOMAIN_ACCESS_SET_INFO_3 | \ - DOMAIN_ACCESS_OPEN_ACCOUNT | \ - DOMAIN_ACCESS_ENUM_ACCOUNTS | \ - DOMAIN_ACCESS_UNKNOWN_80 | \ - DOMAIN_ACCESS_CREATE_ALIAS | \ - DOMAIN_ACCESS_CREATE_GROUP | \ - DOMAIN_ACCESS_CREATE_USER | \ - DOMAIN_ACCESS_SET_INFO_2 | \ - DOMAIN_ACCESS_LOOKUP_INFO_2 | \ - DOMAIN_ACCESS_SET_INFO_1 | \ - DOMAIN_ACCESS_LOOKUP_INFO_1 ) - -#define DOMAIN_READ ( STANDARD_RIGHTS_READ_ACCESS | \ - DOMAIN_ACCESS_UNKNOWN_80 | \ - DOMAIN_ACCESS_LOOKUP_INFO_2 ) - -#define DOMAIN_WRITE ( STANDARD_RIGHTS_WRITE_ACCESS | \ - DOMAIN_ACCESS_SET_INFO_3 | \ - DOMAIN_ACCESS_CREATE_ALIAS | \ - DOMAIN_ACCESS_CREATE_GROUP | \ - DOMAIN_ACCESS_CREATE_USER | \ - DOMAIN_ACCESS_SET_INFO_2 | \ - DOMAIN_ACCESS_SET_INFO_1 ) - -#define DOMAIN_EXECUTE ( STANDARD_RIGHTS_EXECUTE_ACCESS | \ - DOMAIN_ACCESS_OPEN_ACCOUNT | \ - DOMAIN_ACCESS_ENUM_ACCOUNTS | \ - DOMAIN_ACCESS_LOOKUP_INFO_1 ) - + +#define DOMAIN_ACCESS_LOOKUP_INFO_1 0x000000001 +#define DOMAIN_ACCESS_SET_INFO_1 0x000000002 +#define DOMAIN_ACCESS_LOOKUP_INFO_2 0x000000004 +#define DOMAIN_ACCESS_SET_INFO_2 0x000000008 +#define DOMAIN_ACCESS_CREATE_USER 0x000000010 +#define DOMAIN_ACCESS_CREATE_GROUP 0x000000020 +#define DOMAIN_ACCESS_CREATE_ALIAS 0x000000040 +#define DOMAIN_ACCESS_LOOKUP_ALIAS_BY_MEM 0x000000080 +#define DOMAIN_ACCESS_ENUM_ACCOUNTS 0x000000100 +#define DOMAIN_ACCESS_OPEN_ACCOUNT 0x000000200 +#define DOMAIN_ACCESS_SET_INFO_3 0x000000400 + +#define DOMAIN_ALL_ACCESS ( STANDARD_RIGHTS_REQUIRED_ACCESS | \ + DOMAIN_ACCESS_SET_INFO_3 | \ + DOMAIN_ACCESS_OPEN_ACCOUNT | \ + DOMAIN_ACCESS_ENUM_ACCOUNTS | \ + DOMAIN_ACCESS_LOOKUP_ALIAS_BY_MEM | \ + DOMAIN_ACCESS_CREATE_ALIAS | \ + DOMAIN_ACCESS_CREATE_GROUP | \ + DOMAIN_ACCESS_CREATE_USER | \ + DOMAIN_ACCESS_SET_INFO_2 | \ + DOMAIN_ACCESS_LOOKUP_INFO_2 | \ + DOMAIN_ACCESS_SET_INFO_1 | \ + DOMAIN_ACCESS_LOOKUP_INFO_1 ) + +#define DOMAIN_READ ( STANDARD_RIGHTS_READ_ACCESS | \ + DOMAIN_ACCESS_LOOKUP_ALIAS_BY_MEM | \ + DOMAIN_ACCESS_LOOKUP_INFO_2 ) + +#define DOMAIN_WRITE ( STANDARD_RIGHTS_WRITE_ACCESS | \ + DOMAIN_ACCESS_SET_INFO_3 | \ + DOMAIN_ACCESS_CREATE_ALIAS | \ + DOMAIN_ACCESS_CREATE_GROUP | \ + DOMAIN_ACCESS_CREATE_USER | \ + DOMAIN_ACCESS_SET_INFO_2 | \ + DOMAIN_ACCESS_SET_INFO_1 ) + +#define DOMAIN_EXECUTE ( STANDARD_RIGHTS_EXECUTE_ACCESS | \ + DOMAIN_ACCESS_OPEN_ACCOUNT | \ + DOMAIN_ACCESS_ENUM_ACCOUNTS | \ + DOMAIN_ACCESS_LOOKUP_INFO_1 ) + /* Access bits to User-objects */ #define USER_ACCESS_GET_NAME_ETC 0x00000001 diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c index 6e9ba2f0267..c5a2c545115 100644 --- a/source/rpc_server/srv_samr_nt.c +++ b/source/rpc_server/srv_samr_nt.c @@ -3059,6 +3059,10 @@ NTSTATUS _samr_query_useraliases(pipes_struct *p, SAMR_Q_QUERY_USERALIASES *q_u, uint32 *rids=NULL, *new_rids=NULL, *tmp_rids=NULL; struct samr_info *info = NULL; int i,j; + + NTSTATUS ntstatus1; + NTSTATUS ntstatus2; + /* until i see a real useraliases query, we fack one up */ /* I have seen one, JFM 2/12/2001 */ @@ -3084,9 +3088,15 @@ NTSTATUS _samr_query_useraliases(pipes_struct *p, SAMR_Q_QUERY_USERALIASES *q_u, if (!find_policy_by_hnd(p, &q_u->pol, (void **)&info)) return NT_STATUS_INVALID_HANDLE; - if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(info->acc_granted, USER_ACCESS_GET_GROUPS, "_samr_query_useraliases"))) { - return r_u->status; - } + ntstatus1 = access_check_samr_function(info->acc_granted, DOMAIN_ACCESS_LOOKUP_ALIAS_BY_MEM, "_samr_query_useraliases"); + ntstatus2 = access_check_samr_function(info->acc_granted, DOMAIN_ACCESS_OPEN_ACCOUNT, "_samr_query_useraliases"); + + if (!NT_STATUS_IS_OK(ntstatus1) || !NT_STATUS_IS_OK(ntstatus2)) { + if (!(NT_STATUS_EQUAL(ntstatus1,NT_STATUS_ACCESS_DENIED) && NT_STATUS_IS_OK(ntstatus2)) && + !(NT_STATUS_EQUAL(ntstatus1,NT_STATUS_ACCESS_DENIED) && NT_STATUS_IS_OK(ntstatus1))) { + return (NT_STATUS_IS_OK(ntstatus1)) ? ntstatus2 : ntstatus1; + } + } if (!sid_check_is_domain(&info->sid) && !sid_check_is_builtin(&info->sid)) @@ -3157,7 +3167,8 @@ NTSTATUS _samr_query_aliasmem(pipes_struct *p, SAMR_Q_QUERY_ALIASMEM *q_u, SAMR_ if (!get_lsa_policy_samr_sid(p, &q_u->alias_pol, &alias_sid, &acc_granted)) return NT_STATUS_INVALID_HANDLE; - if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, ALIAS_ACCESS_GET_MEMBERS, "_samr_query_aliasmem"))) { + if (!NT_STATUS_IS_OK(r_u->status = + access_check_samr_function(acc_granted, ALIAS_ACCESS_GET_MEMBERS, "_samr_query_aliasmem"))) { return r_u->status; } -- cgit From 11ec785f3f43b277ae3f28b38865f4de972495bc Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 26 Sep 2002 14:01:39 +0000 Subject: Add -r parameter to smbgroupedit. With -r you can manually choose a rid. Volker --- source/utils/smbgroupedit.c | 47 +++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/source/utils/smbgroupedit.c b/source/utils/smbgroupedit.c index 4358e6f08c9..cf5ac1f0257 100644 --- a/source/utils/smbgroupedit.c +++ b/source/utils/smbgroupedit.c @@ -86,28 +86,17 @@ static BOOL get_sid_from_input(DOM_SID *sid, char *input) /********************************************************* add a group. **********************************************************/ -static int addgroup(char *group, enum SID_NAME_USE sid_type, char *ntgroup, char *ntcomment, char *privilege) +static int addgroup(gid_t gid, enum SID_NAME_USE sid_type, char *ntgroup, char *ntcomment, char *privilege, uint32 rid) { PRIVILEGE_SET se_priv; - gid_t gid; DOM_SID sid; fstring string_sid; - fstring name, comment; - - gid=nametogid(group); - if (gid==-1) { - printf("unix group %s doesn't exist!\n", group); - return -1; - } + fstring comment; - local_gid_to_sid(&sid, gid); - - sid_to_string(string_sid, &sid); + sid_copy(&sid, get_global_sam_sid()); + sid_append_rid(&sid, rid); - if (ntgroup==NULL) - fstrcpy(name, group); - else - fstrcpy(name, ntgroup); + sid_to_string(string_sid, &sid); if (ntcomment==NULL) fstrcpy(comment, "Local Unix group"); @@ -118,8 +107,9 @@ static int addgroup(char *group, enum SID_NAME_USE sid_type, char *ntgroup, char if (privilege!=NULL) convert_priv_from_text(&se_priv, privilege); - if(!add_initial_entry(gid, string_sid, sid_type, name, comment, se_priv, PR_ACCESS_FROM_NETWORK)) { - printf("adding entry for group %s failed!\n", group); + if(!add_initial_entry(gid, string_sid, sid_type, ntgroup, + comment, se_priv, PR_ACCESS_FROM_NETWORK)) { + printf("adding entry for group %s failed!\n", ntgroup); free_privilege(&se_priv); return -1; } @@ -276,6 +266,7 @@ int main (int argc, char **argv) char *group_desc = NULL; enum SID_NAME_USE sid_type; + uint32 rid = -1; setup_logging("groupedit", True); @@ -312,7 +303,7 @@ int main (int argc, char **argv) return 0; } - while ((ch = getopt(argc, argv, "a:c:d:ln:p:st:u:vx:")) != EOF) { + while ((ch = getopt(argc, argv, "a:c:d:ln:p:r:st:u:vx:")) != EOF) { switch(ch) { case 'a': add_group = True; @@ -336,6 +327,9 @@ int main (int argc, char **argv) priv = True; privilege=optarg; break; + case 'r': + rid = atoi(optarg); + break; case 's': long_list = False; break; @@ -392,8 +386,19 @@ int main (int argc, char **argv) } } - if (add_group) - return addgroup(group, sid_type, ntgroup, group_desc, privilege); + if (add_group) { + gid_t gid=nametogid(group); + if (gid==-1) { + printf("unix group %s doesn't exist!\n", group); + return -1; + } + + if (rid == -1) { + rid = pdb_gid_to_group_rid(gid); + } + return addgroup(gid, sid_type, ntgroup?ntgroup:group, + group_desc, privilege, rid); + } if (view_group) return listgroup(sid_type, long_list); -- cgit From 6347d40eff03ad780446bdae0f1dfe0bc9edf824 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 26 Sep 2002 14:29:09 +0000 Subject: Make functions return NTSTATUS instead of BOOL --- examples/pdb/pdb_test.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/examples/pdb/pdb_test.c b/examples/pdb/pdb_test.c index b46fe24bd6a..c5ba094e42c 100644 --- a/examples/pdb/pdb_test.c +++ b/examples/pdb/pdb_test.c @@ -32,10 +32,10 @@ PDB_MODULE_VERSIONING_MAGIC Start enumeration of the passwd list. ****************************************************************/ -static BOOL testsam_setsampwent(struct pdb_methods *methods, BOOL update) +static NTSTATUS testsam_setsampwent(struct pdb_methods *methods, BOOL update) { DEBUG(10, ("testsam_setsampwent called\n")); - return True; + return NT_STATUS_NOT_IMPLEMENTED; } /*************************************************************** @@ -51,60 +51,60 @@ static void testsam_endsampwent(struct pdb_methods *methods) Get one SAM_ACCOUNT from the list (next in line) *****************************************************************/ -static BOOL testsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT *user) +static NTSTATUS testsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT *user) { DEBUG(10, ("testsam_getsampwent called\n")); - return False; + return NT_STATUS_NOT_IMPLEMENTED; } /****************************************************************** Lookup a name in the SAM database ******************************************************************/ -static BOOL testsam_getsampwnam (struct pdb_methods *methods, SAM_ACCOUNT *user, const char *sname) +static NTSTATUS testsam_getsampwnam (struct pdb_methods *methods, SAM_ACCOUNT *user, const char *sname) { DEBUG(10, ("testsam_getsampwnam called\n")); - return False; + return NT_STATUS_NOT_IMPLEMENTED; } /*************************************************************************** Search by sid **************************************************************************/ -static BOOL testsam_getsampwsid (struct pdb_methods *methods, SAM_ACCOUNT *user, const DOM_SID *sid) +static NTSTATUS testsam_getsampwsid (struct pdb_methods *methods, SAM_ACCOUNT *user, const DOM_SID *sid) { DEBUG(10, ("testsam_getsampwsid called\n")); - return False; + return NT_STATUS_NOT_IMPLEMENTED; } /*************************************************************************** Delete a SAM_ACCOUNT ****************************************************************************/ -static BOOL testsam_delete_sam_account(struct pdb_methods *methods, SAM_ACCOUNT *sam_pass) +static NTSTATUS testsam_delete_sam_account(struct pdb_methods *methods, SAM_ACCOUNT *sam_pass) { DEBUG(10, ("testsam_delete_sam_account called\n")); - return False; + return NT_STATUS_NOT_IMPLEMENTED; } /*************************************************************************** Modifies an existing SAM_ACCOUNT ****************************************************************************/ -static BOOL testsam_update_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd) +static NTSTATUS testsam_update_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd) { DEBUG(10, ("testsam_update_sam_account called\n")); - return False; + return NT_STATUS_NOT_IMPLEMENTED; } /*************************************************************************** Adds an existing SAM_ACCOUNT ****************************************************************************/ -static BOOL testsam_add_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd) +static NTSTATUS testsam_add_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd) { DEBUG(10, ("testsam_add_sam_account called\n")); - return False; + return NT_STATUS_NOT_IMPLEMENTED; } NTSTATUS pdb_init(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location) -- cgit From fa056769a08c93f086f05baf9095ee93217f92f1 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 26 Sep 2002 14:52:54 +0000 Subject: Change pdb_mysql function to return NTSTATUS --- examples/pdb/mysql/pdb_mysql.c | 141 ++++++++++++++++++++++------------------- 1 file changed, 76 insertions(+), 65 deletions(-) diff --git a/examples/pdb/mysql/pdb_mysql.c b/examples/pdb/mysql/pdb_mysql.c index 0cc1de6aaf2..c73d3716fe1 100644 --- a/examples/pdb/mysql/pdb_mysql.c +++ b/examples/pdb/mysql/pdb_mysql.c @@ -83,16 +83,16 @@ typedef struct pdb_mysql_query { #define SET_DATA(data,methods) { \ if(!methods){ \ DEBUG(0, ("invalid methods!\n")); \ - return False; \ + return NT_STATUS_INVALID_PARAMETER; \ } \ data = (struct pdb_mysql_data *)methods->private_data; \ if(!data || !(data->handle)){ \ DEBUG(0, ("invalid handle!\n")); \ - return False; \ + return NT_STATUS_INVALID_HANDLE; \ } \ } -void pdb_mysql_int_field(struct pdb_methods *m, +static void pdb_mysql_int_field(struct pdb_methods *m, struct pdb_mysql_query *q, char *name, int value) { if (!name || strchr(name, '\'')) @@ -110,21 +110,25 @@ void pdb_mysql_int_field(struct pdb_methods *m, } } -static BOOL pdb_mysql_string_field(struct pdb_methods *methods, +static NTSTATUS pdb_mysql_string_field(struct pdb_methods *methods, struct pdb_mysql_query *q, char *name, const char *value) { char *esc_value; struct pdb_mysql_data *data; + char *tmp_value; SET_DATA(data, methods); if (!name || !value || !strcmp(value, "") || strchr(name, '\'')) - return False; /* This field shouldn't be set by module */ + return NT_STATUS_INVALID_PARAMETER; /* This field shouldn't be set by module */ esc_value = malloc(strlen(value) * 2 + 1); - mysql_real_escape_string(data->handle, esc_value, (char *) value, - strlen(value)); + + tmp_value = smb_xstrdup(value); + mysql_real_escape_string(data->handle, esc_value, tmp_value, + strlen(tmp_value)); + SAFE_FREE(tmp_value); if (q->update) { q->part1 = @@ -140,7 +144,7 @@ static BOOL pdb_mysql_string_field(struct pdb_methods *methods, SAFE_FREE(esc_value); - return True; + return NT_STATUS_OK; } static char * config_value(pdb_mysql_data * data, char *name, char *default_value) @@ -153,46 +157,46 @@ static char * config_value(pdb_mysql_data * data, char *name, char *default_valu static char * config_value_write(pdb_mysql_data * data, char *name, char *default_value) { char *v = config_value(data, name, NULL); - char *write; + char *swrite; if (!v) return default_value; - write = strchr(v, ':'); + swrite = strchr(v, ':'); /* Default to the same field as read field */ - if (!write) + if (!swrite) return v; - write++; + swrite++; /* If the field is 0 chars long, we shouldn't write to it */ - if (!strlen(write) || !strcmp(write, "NULL")) + if (!strlen(swrite) || !strcmp(swrite, "NULL")) return NULL; /* Otherwise, use the additionally specified */ - return write; + return swrite; } static const char * config_value_read(pdb_mysql_data * data, char *name, char *default_value) { char *v = config_value(data, name, NULL); - char *write; + char *swrite; if (!v) return default_value; - write = strchr(v, ':'); + swrite = strchr(v, ':'); /* If no write is specified, there are no problems */ - if (!write) { + if (!swrite) { if (strlen(v) == 0) return "NULL"; return v; } /* Otherwise, we have to cut the ':write_part' */ - *write = '\0'; + *swrite = '\0'; if (strlen(v) == 0) return "NULL"; @@ -210,18 +214,17 @@ static long xatol(char *a) return ret; } -static BOOL row_to_sam_account(MYSQL_RES * r, SAM_ACCOUNT * u) +static NTSTATUS row_to_sam_account(MYSQL_RES * r, SAM_ACCOUNT * u) { MYSQL_ROW row; pstring temp; unsigned int num_fields; - unsigned long *lengths; DOM_SID sid; num_fields = mysql_num_fields(r); row = mysql_fetch_row(r); if (!row) - return False; + return NT_STATUS_INVALID_PARAMETER; pdb_set_logon_time(u, xatol(row[0]), FALSE); pdb_set_logoff_time(u, xatol(row[1]), FALSE); @@ -269,10 +272,10 @@ static BOOL row_to_sam_account(MYSQL_RES * r, SAM_ACCOUNT * u) pdb_set_unknown_5(u, xatol(row[29])); pdb_set_unknown_6(u, xatol(row[30])); - return True; + return NT_STATUS_OK; } -static BOOL mysqlsam_setsampwent(struct pdb_methods *methods, BOOL update) +static NTSTATUS mysqlsam_setsampwent(struct pdb_methods *methods, BOOL update) { struct pdb_mysql_data *data = (struct pdb_mysql_data *) methods->private_data; @@ -281,7 +284,7 @@ static BOOL mysqlsam_setsampwent(struct pdb_methods *methods, BOOL update) if (!data || !(data->handle)) { DEBUG(0, ("invalid handle!\n")); - return False; + return NT_STATUS_INVALID_HANDLE; } asprintf(&query, @@ -355,7 +358,7 @@ static BOOL mysqlsam_setsampwent(struct pdb_methods *methods, BOOL update) if (ret) { DEBUG(0, ("Error executing query: %s\n", mysql_error(data->handle))); - return False; + return NT_STATUS_UNSUCCESSFUL; } data->pwent = mysql_store_result(data->handle); @@ -363,14 +366,14 @@ static BOOL mysqlsam_setsampwent(struct pdb_methods *methods, BOOL update) if (data->pwent == NULL) { DEBUG(0, ("Error storing results: %s\n", mysql_error(data->handle))); - return False; + return NT_STATUS_UNSUCCESSFUL; } DEBUG(5, ("mysqlsam_setsampwent succeeded(%d results)!\n", mysql_num_fields(data->pwent))); - return True; + return NT_STATUS_OK; } /*************************************************************** @@ -399,7 +402,7 @@ static void mysqlsam_endsampwent(struct pdb_methods *methods) Get one SAM_ACCOUNT from the list (next in line) *****************************************************************/ -static BOOL mysqlsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT * user) +static NTSTATUS mysqlsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT * user) { struct pdb_mysql_data *data; @@ -407,41 +410,46 @@ static BOOL mysqlsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT * user if (data->pwent == NULL) { DEBUG(0, ("invalid pwent\n")); - return False; + return NT_STATUS_INVALID_PARAMETER; } return row_to_sam_account(data->pwent, user); } -BOOL mysqlsam_select_by_field(struct pdb_methods * methods, SAM_ACCOUNT * user, +static NTSTATUS mysqlsam_select_by_field(struct pdb_methods * methods, SAM_ACCOUNT * user, const char *field, const char *sname) { char *esc_sname; char *query; - int ret; + NTSTATUS ret; MYSQL_RES *res; + int mysql_ret; struct pdb_mysql_data *data; + char *tmp_sname; SET_DATA(data, methods); esc_sname = malloc(strlen(sname) * 2 + 1); if (!esc_sname) { - DEBUG(0, ("Not enough memory available!\n")); - return False; + return NT_STATUS_NO_MEMORY; } DEBUG(5, ("mysqlsam_select_by_field: getting data where %s = %s(nonescaped)\n", field, sname)); + tmp_sname = smb_xstrdup(sname); + /* Escape sname */ - mysql_real_escape_string(data->handle, esc_sname, (char *) sname, - strlen(sname)); + mysql_real_escape_string(data->handle, esc_sname, tmp_sname, + strlen(tmp_sname)); + + SAFE_FREE(tmp_sname); if (user == NULL) { DEBUG(0, ("pdb_getsampwnam: SAM_ACCOUNT is NULL.\n")); SAFE_FREE(esc_sname); - return False; + return NT_STATUS_INVALID_PARAMETER; } asprintf(&query, @@ -511,22 +519,22 @@ BOOL mysqlsam_select_by_field(struct pdb_methods * methods, SAM_ACCOUNT * user, SAFE_FREE(esc_sname); - ret = mysql_query(data->handle, query); + mysql_ret = mysql_query(data->handle, query); SAFE_FREE(query); - if (ret) { + if (mysql_ret) { DEBUG(0, ("Error while executing MySQL query: %s\n", mysql_error(data->handle))); - return False; + return NT_STATUS_UNSUCCESSFUL; } res = mysql_store_result(data->handle); if (res == NULL) { DEBUG(0, ("Error storing results: %s\n", mysql_error(data->handle))); - return False; + return NT_STATUS_UNSUCCESSFUL; } ret = row_to_sam_account(res, user); @@ -539,7 +547,7 @@ BOOL mysqlsam_select_by_field(struct pdb_methods * methods, SAM_ACCOUNT * user, Lookup a name in the SAM database ******************************************************************/ -static BOOL mysqlsam_getsampwnam(struct pdb_methods *methods, SAM_ACCOUNT * user, +static NTSTATUS mysqlsam_getsampwnam(struct pdb_methods *methods, SAM_ACCOUNT * user, const char *sname) { struct pdb_mysql_data *data; @@ -548,8 +556,9 @@ static BOOL mysqlsam_getsampwnam(struct pdb_methods *methods, SAM_ACCOUNT * user if (!sname) { DEBUG(0, ("invalid name specified")); - return False; + return NT_STATUS_INVALID_PARAMETER; } + return mysqlsam_select_by_field(methods, user, config_value_read(data, "username column", CONFIG_USERNAME_DEFAULT), sname); @@ -560,10 +569,9 @@ static BOOL mysqlsam_getsampwnam(struct pdb_methods *methods, SAM_ACCOUNT * user Search by sid **************************************************************************/ -static BOOL mysqlsam_getsampwsid(struct pdb_methods *methods, SAM_ACCOUNT * user, +static NTSTATUS mysqlsam_getsampwsid(struct pdb_methods *methods, SAM_ACCOUNT * user, const DOM_SID * sid) { - BOOL ret = False; struct pdb_mysql_data *data; fstring sid_str; @@ -571,19 +579,16 @@ static BOOL mysqlsam_getsampwsid(struct pdb_methods *methods, SAM_ACCOUNT * user sid_to_string(sid_str, sid); - ret = - mysqlsam_select_by_field(methods, user, + return mysqlsam_select_by_field(methods, user, config_value_read(data, "user sid column", CONFIG_USER_SID_DEFAULT), sid_str); - - return ret; } /*************************************************************************** Delete a SAM_ACCOUNT ****************************************************************************/ -static BOOL mysqlsam_delete_sam_account(struct pdb_methods *methods, +static NTSTATUS mysqlsam_delete_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * sam_pass) { const char *sname = pdb_get_username(sam_pass); @@ -591,33 +596,39 @@ static BOOL mysqlsam_delete_sam_account(struct pdb_methods *methods, char *query; int ret; struct pdb_mysql_data *data; + char *tmp_sname; SET_DATA(data, methods); if (!methods) { DEBUG(0, ("invalid methods!\n")); - return False; + return NT_STATUS_INVALID_PARAMETER; } data = (struct pdb_mysql_data *) methods->private_data; if (!data || !(data->handle)) { DEBUG(0, ("invalid handle!\n")); - return False; + return NT_STATUS_INVALID_HANDLE; } if (!sname) { DEBUG(0, ("invalid name specified\n")); - return False; + return NT_STATUS_INVALID_PARAMETER; } /* Escape sname */ esc = malloc(strlen(sname) * 2 + 1); if (!esc) { DEBUG(0, ("Can't allocate memory to store escaped name\n")); - return False; + return NT_STATUS_NO_MEMORY; } - mysql_real_escape_string(data->handle, esc, (char *) sname, - strlen(sname)); + + tmp_sname = smb_xstrdup(sname); + + mysql_real_escape_string(data->handle, esc, tmp_sname, + strlen(tmp_sname)); + + SAFE_FREE(tmp_sname); asprintf(&query, "DELETE FROM %s WHERE %s = '%s'", config_value(data, "table", CONFIG_TABLE_DEFAULT), @@ -634,14 +645,14 @@ static BOOL mysqlsam_delete_sam_account(struct pdb_methods *methods, DEBUG(0, ("Error while executing query: %s\n", mysql_error(data->handle))); - return False; + return NT_STATUS_UNSUCCESSFUL; } DEBUG(5, ("User '%s' deleted\n", sname)); - return True; + return NT_STATUS_OK; } -static BOOL mysqlsam_replace_sam_account(struct pdb_methods *methods, +static NTSTATUS mysqlsam_replace_sam_account(struct pdb_methods *methods, const SAM_ACCOUNT * newpwd, char isupdate) { pstring temp; @@ -652,13 +663,13 @@ static BOOL mysqlsam_replace_sam_account(struct pdb_methods *methods, if (!methods) { DEBUG(0, ("invalid methods!\n")); - return False; + return NT_STATUS_INVALID_PARAMETER; } data = (struct pdb_mysql_data *) methods->private_data; if (data == NULL || data->handle == NULL) { DEBUG(0, ("invalid handle!\n")); - return False; + return NT_STATUS_INVALID_HANDLE; } query.update = isupdate; @@ -867,18 +878,18 @@ static BOOL mysqlsam_replace_sam_account(struct pdb_methods *methods, DEBUG(0, ("Error executing %s, %s\n", query.part1, mysql_error(data->handle))); - return False; + return NT_STATUS_INVALID_PARAMETER; } talloc_destroy(query.mem_ctx); - return True; + return NT_STATUS_OK; } -static BOOL mysqlsam_add_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * newpwd) +static NTSTATUS mysqlsam_add_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * newpwd) { return mysqlsam_replace_sam_account(methods, newpwd, 0); } -static BOOL mysqlsam_update_sam_account(struct pdb_methods *methods, +static NTSTATUS mysqlsam_update_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * newpwd) { return mysqlsam_replace_sam_account(methods, newpwd, 1); @@ -931,7 +942,7 @@ NTSTATUS pdb_init(PDB_CONTEXT * pdb_context, PDB_METHODS ** pdb_method, data->location = smb_xstrdup(location); DEBUG(1, - ("Connecting to database server, host: %s, user: %s, password: %s, database: %s, port: %d\n", + ("Connecting to database server, host: %s, user: %s, password: %s, database: %s, port: %ld\n", config_value(data, "mysql host", CONFIG_HOST_DEFAULT), config_value(data, "mysql user", CONFIG_USER_DEFAULT), config_value(data, "mysql password", CONFIG_PASS_DEFAULT), -- cgit From 834fcd23959ed202a84069bf19390103f563540c Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 26 Sep 2002 15:03:26 +0000 Subject: Change pdb_xml functions to return NTSTATUS --- examples/pdb/xml/pdb_xml.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/examples/pdb/xml/pdb_xml.c b/examples/pdb/xml/pdb_xml.c index 17261873cd4..5de27bc6e2e 100644 --- a/examples/pdb/xml/pdb_xml.c +++ b/examples/pdb/xml/pdb_xml.c @@ -287,23 +287,24 @@ xmlNodePtr parseSambaXMLFile(struct pdb_xml *data) return cur; } -static BOOL xmlsam_setsampwent(struct pdb_methods *methods, BOOL update) +static NTSTATUS xmlsam_setsampwent(struct pdb_methods *methods, BOOL update) { pdb_xml *data; if (!methods) { DEBUG(0, ("Invalid methods\n")); - return False; + return NT_STATUS_INVALID_PARAMETER; } data = (pdb_xml *) methods->private_data; if (!data) { DEBUG(0, ("Invalid pdb_xml_data\n")); - return False; + return NT_STATUS_INVALID_PARAMETER; } data->pwent = parseSambaXMLFile(data); if (!data->pwent) - return False; - return True; + return NT_STATUS_UNSUCCESSFUL; + + return NT_STATUS_OK; } /*************************************************************** @@ -335,19 +336,19 @@ static void xmlsam_endsampwent(struct pdb_methods *methods) Get one SAM_ACCOUNT from the list (next in line) *****************************************************************/ -static BOOL xmlsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT * user) +static NTSTATUS xmlsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT * user) { pdb_xml *data; if (!methods) { DEBUG(0, ("Invalid methods\n")); - return False; + return NT_STATUS_INVALID_PARAMETER; } data = (pdb_xml *) methods->private_data; if (!data) { DEBUG(0, ("Invalid pdb_xml_data\n")); - return False; + return NT_STATUS_INVALID_PARAMETER; } while (data->pwent) { @@ -356,18 +357,18 @@ static BOOL xmlsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT * user) parseUser(data->doc, data->ns, data->pwent, user); data->pwent = data->pwent->next; - return True; + return NT_STATUS_OK; } data->pwent = data->pwent->next; } - return False; + return NT_STATUS_UNSUCCESSFUL; } /*************************************************************************** Adds an existing SAM_ACCOUNT ****************************************************************************/ -static BOOL xmlsam_add_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * u) +static NTSTATUS xmlsam_add_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * u) { pstring temp; fstring sid_str; @@ -379,13 +380,13 @@ static BOOL xmlsam_add_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * u) if (!methods) { DEBUG(0, ("Invalid methods\n")); - return False; + return NT_STATUS_INVALID_PARAMETER; } data = (pdb_xml *) methods->private_data; if (!data) { DEBUG(0, ("Invalid pdb_xml_data\n")); - return False; + return NT_STATUS_INVALID_PARAMETER; } /* Create a new document if we can't open the current one */ @@ -504,7 +505,7 @@ static BOOL xmlsam_add_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * u) xmlNewChild(user, data->ns, "unknown_6", iota(pdb_get_unknown6(u))); xmlSaveFile(data->location, data->doc); - return True; + return NT_STATUS_OK; } NTSTATUS pdb_init(PDB_CONTEXT * pdb_context, PDB_METHODS ** pdb_method, -- cgit From cae3705b9a03e36137439e24667dcf2e5e9643fc Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 26 Sep 2002 15:11:47 +0000 Subject: Don't define PASS_MUST_CHANGE_AT_NEXT_LOGON twice.. --- source/include/rpc_samr.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/include/rpc_samr.h b/source/include/rpc_samr.h index 95e79b39ada..6b537715b8c 100644 --- a/source/include/rpc_samr.h +++ b/source/include/rpc_samr.h @@ -314,9 +314,6 @@ SamrTestPrivateFunctionsUser #define ALIAS_EXECUTE ( STANDARD_RIGHTS_EXECUTE_ACCESS | \ ALIAS_ACCESS_LOOKUP_INFO ) -/* A flag for the user info 21 and 23 structs */ -#define PASS_MUST_CHANGE_AT_NEXT_LOGON 1 - typedef struct _DISP_USER_INFO { SAM_ACCOUNT *sam; } DISP_USER_INFO; -- cgit From 1430473d3fdcc8e711fe483b84dfeefa6bd54905 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 26 Sep 2002 15:20:11 +0000 Subject: Fix segfault in sam_context_enum_domains - reported by Kai --- source/sam/interface.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/sam/interface.c b/source/sam/interface.c index 320e39dbb46..0943a0e8f13 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -317,6 +317,7 @@ NTSTATUS context_sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOK while (tmp_methods) { if (strcmp(domain, tmp_methods->domain_name) == 0) { + (*domainsid) = (DOM_SID *)malloc(sizeof(DOM_SID)); sid_copy((*domainsid), &tmp_methods->domain_sid); return NT_STATUS_OK; } -- cgit From 284c515dbd36d49081c1cdf9b2b9a60bf7a22ae4 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Thu, 26 Sep 2002 18:57:58 +0000 Subject: sync with SAMBA_3_0 --- WHATSNEW.txt | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) diff --git a/WHATSNEW.txt b/WHATSNEW.txt index 53467f85dbc..a77a9bd167e 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -1,6 +1,168 @@ WHATS NEW IN Samba 3.0 alphaX ============================= +Changes in alpha20 + - Rework the 'guest account get's RID 501' code again... + - Change ito use NT-based session key negotiated for Win2k SPNEGO + - Support printer data registry keys other than the default + PrinterDriverData + - Moved internal printerdata to REGISTRY_VALUE object + - Corrected bug in dependentfiles list of DRIVER_INFO_3 + - fixed logic bug in blocking locks code + - Updated registry api code to work with new printer data key + support + - Added vfstest tool + - round lock timeouts in lockingX upwards to multiples of 1 second + - Fixed bugs in Printer Change Notify code + - added a 'net ads lookup' command that does a CLDAP NetLogon + query to a win2000 server + - Added script to find undocumented smb.conf parameters + - Added missing parameters to smb.conf(5) + - receive & parse main CLDAP reply from win2k server + - removed "admin log" & "alternate permissions" parameters from smb.conf + - added a generic print_guid utility, and get the byte order handing + - fixed memory corruption in cli_full_connection() + - remove unused 'max packet' and 'packet size' options + - add support for the "value,OID" format described in MSDN for Printer + Data values + - moves NT_TOKEN generation into our authenticaion code + - Update documentation build system + - Several fixes for IRIX compiler + - Correctly handle "max data count" value in smb transacts + - Fix for permissions error when adding/modifying using a Print + server handle + - Fix pam_smbpass to always check the return value of pdb_getsampwnam() + - Use the 'init' flag to determine if the UID is set, rather than testing + the uid for -1 + - Cope with non-unix accounts - we just won't get the groups for those users + - Add 'net rpc getsid' to fetch the PDC's SID into the local secrets.tdb. + Print domain SID on 'net rpc info' + - don't use lp_passwd_file() to retrieve NIS domain name, but use location + instead + - Various POSIX compatbility fixes + - Show only non-default values in testparm + - Fix longstanding bug in Win2k clients by clearing the shortname + buffer before returning ascii short name. + - Add example backtrace script + - Added NETLOGON NetServerAuthenticate3 include and parser file + - fix for difference in strsep and strtok semantics in nmbd + - Ensure we don't change to a user that we can't get an NT_TOKEN for + - Put back in BDC support in set_server_role() + - added a 'net rpc samdump' command for dumping the whole sam via + samsync operations (as a BDC) + - don't use spnego in the client unless enabled in smb.conf + - Added some new delta types discovered by Ronnie from ethereal + - Cope with negative cache dns entries better + - do not expose special files, only files, directories and links + - attempts to simplify Samba's external lib dependencies + - support non-root-mode systems without getgrouplist() + - Some fixes for SMB signing + - Pass the object name down to the enum_printers client rpc + - add the netatalk VFS module + - Ensure we have at least smb_size bytes before processing a packet + - Allow us to "lock" printer tdb entries in memory to stop them being + re-used as cache + - fix 2 byte alignment/offset bug that prevented Win2k/XP clients + from receiving all the printer data in EnumPrinterDataEx() + - Add option to compile new sam system can be enabled with the + configure option --with-sam + - Added SGML/DocBook version of developer oriented docs to build process + - Return correct FILE_SUPERSEDED response + - Added example sam module (skeleton) + - Add plugin support for the sam system (based on passdb code) + - show builtin groups in samdump + - Adding samtest utility used to test sam backends + - fix connecting to a BDC when the PDC is down but in WINS and no bcast + can be used to find a BDC + - convert the LDAP/SASL code to use GSS-SPNEGO if possible + - added cli_net_auth_3 client code + - merge of phant0m key fix from APP_HEAD + - allow rpcclient's samlogon command to use cli_net_3() + - Added attribute specific OPEN tests + - Fix bug with stat mode open being done on read-only open with + truncate + - Add lots of const casts to function parameters + - Implemented some more client side spoolss functions + - usrmgr expects unicode as ProductType + - Change JOB_INFO_CTR to return a pointer to an array rather than array of + pointers in client code + - Varios NTLMSSP fixes + - fixed crash bug in cli_connection code + - DeletePrinterDriver[Ex]() fixes from APP_HEAD + - remove some inet_aton() calls for portability + - Set default ACB attributes on 'unixsam' accounts + - Add bcast_msg_flags to connection struct + - aggregate change notify events in the smbd sender and when transmitting + - Added better error code on out of space in printer spool directory + - Removed total jobs check - not applicable any more + - fixed bug in share enumeration RPC code + - extend the ADS_STATUS system to include NTSTATUS + - commit trusted domain patch n+3 + - remove block VFS module + - restrict readline headers to readline.c + - merge of various recycle bin VFS patches + - Winbind client-side cleanups + - change parametric option name to vfs_recycle_bin it is more + sane and do not pollute standard options namespace too much + - added --enable-python configure option for building the samba-python + unit tests + - correct trans2 bugs in client for enumerating files/directories + - Readd OS/2 EA error codes + - Added patch for required attributes in directory listsing to reply code + - Fix browse synchronization bug by noticing that W2K DMB's return empty + NetServerEnum2 on port 445, but not on port 139 + - Fix semantics of AbortPrinter() spoolss call in server code + - Ensure we've failed a lock with a lock denied message before automatically + pushing it onto the blocking queue + - Added experimental sendfile code + - Initialise user_rid value in WINBIND_USERINFO structure returned by + the rpc version of query_user() + - added gencache implementation + - Merge the cli_shutdown change from 2_2 + - Fixes for DeletePrinterDriverEx() + - Fixed alignment error in spoolss code + - Changed Major/Minor version info reported to Server Manager to 4.9 + - Applied new display mode FLAGS for SWAT + - Update to add DEVELOPER option to more parameters + - Added --with-ads option, defaults to yes + - Added --with-ldap option to configure + - Add clock skew handling to our kerberos code + - correct race condition in password change code for out machine account + when a member of a domain + - First implementation for 'net rpc vampire' + - store current handle's Device Mode with print job + - Move functionality to check whether entries for lp_workgroup() and + "BUILTIN" exist and add them if necessary from check_correct_backend_entries + into sam_context_check_default_backends + - allow --with-krb5 to override the location of the kerberos libs on + redhat + - unlink spool file after submitting rint job when using CUPS api + - Add framework for samtest commands + - Add the ability to view/set the current local domain SIDs to net command + - When creating a group you have to take care of the fact that the + underlying unix might not like the group name + - Don't uppercase the username and domain in a session setup + - Merge of "profile acls" code from SAMBA_2_2 + - Check for existing of security descriptor in PRINTER_INFO_2 structure + in rpc client code + - Move to common user token debugging, and ensure we always print both the + NT_TOKEN and the unix credentials + - If adding a user to ldap, make sure we have the 'account' structural class, + or else we can't add to OpenLDAP 2.1 + - Kill of Get_Pwnam_Modify and smb_getpwnam() + - add a 'ldap passwd sync' option to smb.conf + - Whenever we deal with adding machine/trusted domain accounts, always reset + the flag to what we expect + - Fix the circular dependency that was preventing 'domain master = auto' (the + default) from working + - move all the passdb internal interface to NTSTATUS + - to expand % values (ie we go \\%L\%U -> \\server\user, we don't want to + store \\server\user back) and to correctly notice 'not set' compared to 'null + string' etc. + - get some more of our access control bits right on the SAMR pipe + - Add -r parameter to smbgroupedit. With -r you can manually choose + a rid + Changes in alpha19 - Virtual registry framework with printing hooks (jerry) - Heavy registry updates (jerry) -- cgit From ba8b6c8e31ad5f15a0cfa9d28d9b8692c3473a42 Mon Sep 17 00:00:00 2001 From: Samba Release Account Date: Thu, 26 Sep 2002 19:45:29 +0000 Subject: preparing for release of 3.0alpha20 --- WHATSNEW.txt | 18 +++++++++--------- source/include/version.h | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/WHATSNEW.txt b/WHATSNEW.txt index a77a9bd167e..21e5c4d03cb 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -2,8 +2,8 @@ ============================= Changes in alpha20 - - Rework the 'guest account get's RID 501' code again... - - Change ito use NT-based session key negotiated for Win2k SPNEGO + - Rework the 'guest account gets RID 501' code again... + - Change to use NT-based session key negotiated for Win2k SPNEGO - Support printer data registry keys other than the default PrinterDriverData - Moved internal printerdata to REGISTRY_VALUE object @@ -25,7 +25,7 @@ Changes in alpha20 - remove unused 'max packet' and 'packet size' options - add support for the "value,OID" format described in MSDN for Printer Data values - - moves NT_TOKEN generation into our authenticaion code + - moves NT_TOKEN generation into our authentication code - Update documentation build system - Several fixes for IRIX compiler - Correctly handle "max data count" value in smb transacts @@ -39,7 +39,7 @@ Changes in alpha20 Print domain SID on 'net rpc info' - don't use lp_passwd_file() to retrieve NIS domain name, but use location instead - - Various POSIX compatbility fixes + - Various POSIX compatibility fixes - Show only non-default values in testparm - Fix longstanding bug in Win2k clients by clearing the shortname buffer before returning ascii short name. @@ -86,7 +86,7 @@ Changes in alpha20 - usrmgr expects unicode as ProductType - Change JOB_INFO_CTR to return a pointer to an array rather than array of pointers in client code - - Varios NTLMSSP fixes + - Various NTLMSSP fixes - fixed crash bug in cli_connection code - DeletePrinterDriver[Ex]() fixes from APP_HEAD - remove some inet_aton() calls for portability @@ -107,15 +107,15 @@ Changes in alpha20 - added --enable-python configure option for building the samba-python unit tests - correct trans2 bugs in client for enumerating files/directories - - Readd OS/2 EA error codes - - Added patch for required attributes in directory listsing to reply code + - Re-add OS/2 EA error codes + - Added patch for required attributes in directory listings to reply code - Fix browse synchronization bug by noticing that W2K DMB's return empty NetServerEnum2 on port 445, but not on port 139 - Fix semantics of AbortPrinter() spoolss call in server code - Ensure we've failed a lock with a lock denied message before automatically pushing it onto the blocking queue - Added experimental sendfile code - - Initialise user_rid value in WINBIND_USERINFO structure returned by + - Initialize user_rid value in WINBIND_USERINFO structure returned by the rpc version of query_user() - added gencache implementation - Merge the cli_shutdown change from 2_2 @@ -136,7 +136,7 @@ Changes in alpha20 into sam_context_check_default_backends - allow --with-krb5 to override the location of the kerberos libs on redhat - - unlink spool file after submitting rint job when using CUPS api + - unlink spool file after submitting print job when using CUPS api - Add framework for samtest commands - Add the ability to view/set the current local domain SIDs to net command - When creating a group you have to take care of the fact that the diff --git a/source/include/version.h b/source/include/version.h index 87e3673a7f6..27f67c589c4 100644 --- a/source/include/version.h +++ b/source/include/version.h @@ -1 +1 @@ -#define VERSION "3.0-alpha19" +#define VERSION "3.0alpha20" -- cgit From a6ec9af7e38b1b937eba7003f130d662d5bde035 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Thu, 26 Sep 2002 20:38:20 +0000 Subject: add -r to usage output --- source/utils/smbgroupedit.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/utils/smbgroupedit.c b/source/utils/smbgroupedit.c index cf5ac1f0257..35285452a05 100644 --- a/source/utils/smbgroupedit.c +++ b/source/utils/smbgroupedit.c @@ -52,6 +52,7 @@ static void usage(void) printf(" -c SID change group\n"); printf(" -u unix group\n"); printf(" -d description group description\n"); + printf(" -r rid RID of new group\n") printf(" -x group delete this group\n"); printf("\n"); printf(" -t[b|d|l] type: builtin, domain, local \n"); -- cgit From 0962a2f74f89b684a5f333126fed2b6a7fc0b454 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Thu, 26 Sep 2002 20:39:53 +0000 Subject: tagging version as post3.0-HEAD to differentiate from the SAMBA_3_0 branch. --- source/include/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/include/version.h b/source/include/version.h index 27f67c589c4..c0a1c702f29 100644 --- a/source/include/version.h +++ b/source/include/version.h @@ -1 +1 @@ -#define VERSION "3.0alpha20" +#define VERSION "post3.0-HEAD" -- cgit From ece9507ec3d363fccf56b000ad9758780a9b3fb4 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 26 Sep 2002 21:00:25 +0000 Subject: Make explicit the difference between a tdb key with no data attached, and a non existent entry. Stop a malloc(0) being called in the first case. Jeremy. --- source/tdb/tdb.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/source/tdb/tdb.c b/source/tdb/tdb.c index 5bb75ffe077..4143ac77819 100644 --- a/source/tdb/tdb.c +++ b/source/tdb/tdb.c @@ -1048,6 +1048,12 @@ static int tdb_update(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf) } /* find an entry in the database given a key */ +/* If an entry doesn't exist tdb_err will be set to + * TDB_ERR_NOEXIST. If a key has no data attached + * tdb_err will not be set. Both will return a + * zero pptr and zero dsize. + */ + TDB_DATA tdb_fetch(TDB_CONTEXT *tdb, TDB_DATA key) { tdb_off rec_ptr; @@ -1058,8 +1064,11 @@ TDB_DATA tdb_fetch(TDB_CONTEXT *tdb, TDB_DATA key) if (!(rec_ptr = tdb_find_lock(tdb,key,F_RDLCK,&rec))) return tdb_null; - ret.dptr = tdb_alloc_read(tdb, rec_ptr + sizeof(rec) + rec.key_len, - rec.data_len); + if (rec.data_len) + ret.dptr = tdb_alloc_read(tdb, rec_ptr + sizeof(rec) + rec.key_len, + rec.data_len); + else + ret.dptr = NULL; ret.dsize = rec.data_len; tdb_unlock(tdb, BUCKET(rec.full_hash), F_RDLCK); return ret; -- cgit From 36c2a3820faa1d90cd331881720be0e61ab93460 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 27 Sep 2002 01:02:37 +0000 Subject: Readd the 2.2 --with-ldapsam paramaters so as to allow a smooth upgrade path to a 3.0 based PDC. Change defaults to use SSL, so that this also matches. Andrew Bartlett --- source/configure | 1687 ++++++++++++++++++++++---------------------- source/configure.in | 17 + source/include/config.h.in | 2 +- source/param/loadparm.c | 18 + source/passdb/pdb_ldap.c | 23 +- 5 files changed, 912 insertions(+), 835 deletions(-) diff --git a/source/configure b/source/configure index 538f44621c8..d0753f20275 100755 --- a/source/configure +++ b/source/configure @@ -62,6 +62,8 @@ ac_help="$ac_help --with-pam_smbpass Build a PAM module to allow other applications to use our smbpasswd file (default=no)" ac_help="$ac_help --with-sam Build new (experimental) SAM database (default=no)" +ac_help="$ac_help + --with-ldapsam Include LDAP SAM 2.2 compatible configuration (default=no)" ac_help="$ac_help --with-tdbsam Include experimental TDB SAM support (default=no)" ac_help="$ac_help @@ -824,7 +826,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:828: checking for $ac_word" >&5 +echo "configure:830: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -854,7 +856,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:858: checking for $ac_word" >&5 +echo "configure:860: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -905,7 +907,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:909: checking for $ac_word" >&5 +echo "configure:911: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -937,7 +939,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:941: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:943: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -948,12 +950,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 952 "configure" +#line 954 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -979,12 +981,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:983: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:985: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:988: checking whether we are using GNU C" >&5 +echo "configure:990: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -993,7 +995,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:997: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:999: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1012,7 +1014,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1016: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1018: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1074,7 +1076,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1078: checking for a BSD compatible install" >&5 +echo "configure:1080: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1131,7 +1133,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1135: checking for $ac_word" >&5 +echo "configure:1137: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1163,7 +1165,7 @@ done LD=ld echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1167: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1169: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1179,7 +1181,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1183: checking for POSIXized ISC" >&5 +echo "configure:1185: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1202,10 +1204,10 @@ fi if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:1206: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:1208: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:1209: checking whether cc understands -c and -o together" >&5 +echo "configure:1211: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -1217,16 +1219,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1222: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:1223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1224: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1227: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1229: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:1229: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1230: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:1231: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1232: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -1260,20 +1262,20 @@ fi echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6 -echo "configure:1264: checking that the C compiler understands volatile" >&5 +echo "configure:1266: checking that the C compiler understands volatile" >&5 if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { volatile int i = 0 ; return 0; } EOF -if { (eval echo configure:1277: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1279: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_volatile=yes else @@ -1322,7 +1324,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1326: checking host system type" >&5 +echo "configure:1328: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1343,7 +1345,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1347: checking target system type" >&5 +echo "configure:1349: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1361,7 +1363,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1365: checking build system type" >&5 +echo "configure:1367: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1395,7 +1397,7 @@ esac echo $ac_n "checking config.cache system type""... $ac_c" 1>&6 -echo "configure:1399: checking config.cache system type" >&5 +echo "configure:1401: checking config.cache system type" >&5 if { test x"${ac_cv_host_system_type+set}" = x"set" && test x"$ac_cv_host_system_type" != x"$host"; } || { test x"${ac_cv_build_system_type+set}" = x"set" && @@ -1423,7 +1425,7 @@ case "$host_os" in *hpux*) echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6 -echo "configure:1427: checking whether ${CC-cc} accepts -Ae" >&5 +echo "configure:1429: checking whether ${CC-cc} accepts -Ae" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1584,14 +1586,14 @@ EOF *sysv4*) if test $host = mips-sni-sysv4 ; then echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1588: checking for LFS support" >&5 +echo "configure:1590: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then SINIX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1603,7 +1605,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1607: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then SINIX_LFS_SUPPORT=yes else @@ -1634,14 +1636,14 @@ EOF # *linux*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1638: checking for LFS support" >&5 +echo "configure:1640: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then LINUX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1679,7 +1681,7 @@ main() { } EOF -if { (eval echo configure:1683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then LINUX_LFS_SUPPORT=yes else @@ -1712,14 +1714,14 @@ EOF *hurd*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1716: checking for LFS support" >&5 +echo "configure:1718: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then GLIBC_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1731,7 +1733,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then GLIBC_LFS_SUPPORT=yes else @@ -1761,21 +1763,21 @@ EOF esac echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1765: checking for inline" >&5 +echo "configure:1767: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1781: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -1801,7 +1803,7 @@ EOF esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1805: checking how to run the C preprocessor" >&5 +echo "configure:1807: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1816,13 +1818,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1826: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1828: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1833,13 +1835,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1843: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1845: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1850,13 +1852,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1860: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1862: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1881,12 +1883,12 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1885: checking for ANSI C header files" >&5 +echo "configure:1887: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1894,7 +1896,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1898: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1900: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1911,7 +1913,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1929,7 +1931,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1950,7 +1952,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1961,7 +1963,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1989,12 +1991,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1993: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1995: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -2002,7 +2004,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:2006: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2008: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2027,7 +2029,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2031: checking for opendir in -ldir" >&5 +echo "configure:2033: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2035,7 +2037,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2068,7 +2070,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2072: checking for opendir in -lx" >&5 +echo "configure:2074: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2076,7 +2078,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2110,12 +2112,12 @@ fi fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2114: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2116: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2124,7 +2126,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2128: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2130: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2145,12 +2147,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2149: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2151: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2166,7 +2168,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2170: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2172: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2190,17 +2192,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2194: checking for $ac_hdr" >&5 +echo "configure:2196: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2204: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2206: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2230,17 +2232,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2234: checking for $ac_hdr" >&5 +echo "configure:2236: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2244: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2246: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2270,17 +2272,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2274: checking for $ac_hdr" >&5 +echo "configure:2276: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2284: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2286: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2310,17 +2312,17 @@ for ac_hdr in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2314: checking for $ac_hdr" >&5 +echo "configure:2316: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2324: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2326: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2350,17 +2352,17 @@ for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h std do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2354: checking for $ac_hdr" >&5 +echo "configure:2356: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2364: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2366: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2390,17 +2392,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2394: checking for $ac_hdr" >&5 +echo "configure:2396: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2404: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2406: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2430,17 +2432,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2434: checking for $ac_hdr" >&5 +echo "configure:2436: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2446: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2470,17 +2472,17 @@ for ac_hdr in security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2474: checking for $ac_hdr" >&5 +echo "configure:2476: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2484: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2486: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2510,17 +2512,17 @@ for ac_hdr in sys/syslog.h syslog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2514: checking for $ac_hdr" >&5 +echo "configure:2516: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2524: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2526: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2554,14 +2556,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2565: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2567: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2583,17 +2585,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2587: checking for $ac_hdr" >&5 +echo "configure:2589: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2597: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2599: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2623,17 +2625,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2627: checking for $ac_hdr" >&5 +echo "configure:2629: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2637: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2639: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2663,17 +2665,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2667: checking for $ac_hdr" >&5 +echo "configure:2669: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2677: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2679: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2703,17 +2705,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2707: checking for $ac_hdr" >&5 +echo "configure:2709: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2717: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2719: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2743,17 +2745,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2747: checking for $ac_hdr" >&5 +echo "configure:2749: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2757: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2759: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2785,17 +2787,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2789: checking for $ac_hdr" >&5 +echo "configure:2791: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2799: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2801: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2827,17 +2829,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2831: checking for $ac_hdr" >&5 +echo "configure:2833: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2841: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2843: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2869,17 +2871,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2873: checking for $ac_hdr" >&5 +echo "configure:2875: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2883: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2885: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2907,7 +2909,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2911: checking size of int" >&5 +echo "configure:2913: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2915,7 +2917,7 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < int main() @@ -2926,7 +2928,7 @@ int main() return(0); } EOF -if { (eval echo configure:2930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2932: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2946,7 +2948,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2950: checking size of long" >&5 +echo "configure:2952: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2954,7 +2956,7 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < int main() @@ -2965,7 +2967,7 @@ int main() return(0); } EOF -if { (eval echo configure:2969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2971: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2985,7 +2987,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2989: checking size of short" >&5 +echo "configure:2991: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2993,7 +2995,7 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < int main() @@ -3004,7 +3006,7 @@ int main() return(0); } EOF -if { (eval echo configure:3008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3010: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3025,12 +3027,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3029: checking for working const" >&5 +echo "configure:3031: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3085: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3100,21 +3102,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3104: checking for inline" >&5 +echo "configure:3106: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3140,14 +3142,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3144: checking whether byte ordering is bigendian" >&5 +echo "configure:3146: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3158,11 +3160,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3173,7 +3175,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3177: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3179: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3193,7 +3195,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3212: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3230,14 +3232,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3234: checking whether char is unsigned" >&5 +echo "configure:3236: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3294,12 +3296,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3298: checking return type of signal handlers" >&5 +echo "configure:3300: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3316,7 +3318,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3320: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3322: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3335,12 +3337,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3339: checking for uid_t in sys/types.h" >&5 +echo "configure:3341: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3369,12 +3371,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3373: checking for mode_t" >&5 +echo "configure:3375: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3402,12 +3404,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3406: checking for off_t" >&5 +echo "configure:3408: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3435,12 +3437,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3439: checking for size_t" >&5 +echo "configure:3441: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3468,12 +3470,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3472: checking for pid_t" >&5 +echo "configure:3474: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3501,12 +3503,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3505: checking for st_rdev in struct stat" >&5 +echo "configure:3507: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3514,7 +3516,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3518: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3520: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3535,12 +3537,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3539: checking for d_off in dirent" >&5 +echo "configure:3541: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3550,7 +3552,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3554: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3556: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3571,12 +3573,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3575: checking for ino_t" >&5 +echo "configure:3577: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3604,12 +3606,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3608: checking for loff_t" >&5 +echo "configure:3610: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3637,12 +3639,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3641: checking for offset_t" >&5 +echo "configure:3643: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3670,12 +3672,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3674: checking for ssize_t" >&5 +echo "configure:3676: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3703,12 +3705,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3707: checking for wchar_t" >&5 +echo "configure:3709: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3750,7 +3752,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3754: checking for $ac_word" >&5 +echo "configure:3756: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3799,12 +3801,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3803: checking for $ac_func" >&5 +echo "configure:3805: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3833: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3853,7 +3855,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3857: checking for dlopen in -ldl" >&5 +echo "configure:3859: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3861,7 +3863,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3878: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3902,13 +3904,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3906: checking for immediate structures" >&5 +echo "configure:3908: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3926,7 +3928,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3930: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3932: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3949,13 +3951,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3953: checking for unix domain sockets" >&5 +echo "configure:3955: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3970,7 +3972,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3974: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3976: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3992,13 +3994,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3996: checking for socklen_t type" >&5 +echo "configure:3998: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4011,7 +4013,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4015: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4017: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4032,13 +4034,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4036: checking for sig_atomic_t type" >&5 +echo "configure:4038: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4051,7 +4053,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4057: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4074,20 +4076,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4078: checking for errno declaration" >&5 +echo "configure:4080: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4091: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4093: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4109,20 +4111,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4113: checking for setresuid declaration" >&5 +echo "configure:4115: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4126: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4128: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4144,20 +4146,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4148: checking for setresgid declaration" >&5 +echo "configure:4150: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4161: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4179,20 +4181,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4183: checking for asprintf declaration" >&5 +echo "configure:4185: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4196: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4214,20 +4216,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4218: checking for vasprintf declaration" >&5 +echo "configure:4220: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4231: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4233: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4249,20 +4251,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4253: checking for vsnprintf declaration" >&5 +echo "configure:4255: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4268: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4284,20 +4286,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4288: checking for snprintf declaration" >&5 +echo "configure:4290: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4301: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4303: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4321,7 +4323,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4325: checking for real setresuid" >&5 +echo "configure:4327: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4330,12 +4332,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4339: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4360,7 +4362,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4364: checking for real setresgid" >&5 +echo "configure:4366: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4369,13 +4371,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4398,7 +4400,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4402: checking for 8-bit clean memcmp" >&5 +echo "configure:4404: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4406,7 +4408,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4439,12 +4441,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4443: checking for $ac_func" >&5 +echo "configure:4445: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4493,7 +4495,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4497: checking for crypt in -lcrypt" >&5 +echo "configure:4499: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4501,7 +4503,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4545,7 +4547,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4549: checking whether to use readline" >&5 +echo "configure:4551: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4557,17 +4559,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4561: checking for $ac_hdr" >&5 +echo "configure:4563: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4571: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4573: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4597,17 +4599,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4601: checking for $ac_hdr" >&5 +echo "configure:4603: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4611: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4613: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4638,17 +4640,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4642: checking for $ac_hdr" >&5 +echo "configure:4644: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4652: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4654: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4671,7 +4673,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4675: checking for tgetent in -l${termlib}" >&5 +echo "configure:4677: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4679,7 +4681,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4712,7 +4714,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4716: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4718: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4720,7 +4722,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4782,17 +4784,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4786: checking for $ac_hdr" >&5 +echo "configure:4788: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4796: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4798: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4822,17 +4824,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4826: checking for $ac_hdr" >&5 +echo "configure:4828: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4836: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4838: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4863,17 +4865,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4867: checking for $ac_hdr" >&5 +echo "configure:4869: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4877: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4879: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4896,7 +4898,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4900: checking for tgetent in -l${termlib}" >&5 +echo "configure:4902: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4904,7 +4906,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4921: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4937,7 +4939,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4941: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4943: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4945,7 +4947,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5006,7 +5008,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5010: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5012: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5014,7 +5016,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5031: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5058,12 +5060,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5062: checking for $ac_func" >&5 +echo "configure:5064: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5114,7 +5116,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5118: checking for printf in -lnsl_s" >&5 +echo "configure:5120: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5122,7 +5124,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5164,7 +5166,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5168: checking for printf in -lnsl" >&5 +echo "configure:5170: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5172,7 +5174,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5214,7 +5216,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5218: checking for connect in -lsocket" >&5 +echo "configure:5220: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5222,7 +5224,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5264,7 +5266,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5268: checking for connect in -linet" >&5 +echo "configure:5270: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5272,7 +5274,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5327,12 +5329,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5331: checking for $ac_func" >&5 +echo "configure:5333: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5381,7 +5383,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5385: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5387: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5389,7 +5391,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5430,12 +5432,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5434: checking for $ac_func" >&5 +echo "configure:5436: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5491,12 +5493,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5495: checking for $ac_func" >&5 +echo "configure:5497: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5546,12 +5548,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5550: checking for $ac_func" >&5 +echo "configure:5552: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5601,12 +5603,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5605: checking for $ac_func" >&5 +echo "configure:5607: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5656,12 +5658,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5660: checking for $ac_func" >&5 +echo "configure:5662: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5711,12 +5713,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5715: checking for $ac_func" >&5 +echo "configure:5717: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5745: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5766,12 +5768,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5770: checking for $ac_func" >&5 +echo "configure:5772: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5821,12 +5823,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5825: checking for $ac_func" >&5 +echo "configure:5827: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5855: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5876,12 +5878,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5880: checking for $ac_func" >&5 +echo "configure:5882: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5910: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5931,12 +5933,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5935: checking for $ac_func" >&5 +echo "configure:5937: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5986,12 +5988,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5990: checking for $ac_func" >&5 +echo "configure:5992: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6020: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6042,12 +6044,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6046: checking for $ac_func" >&5 +echo "configure:6048: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6076: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6099,12 +6101,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6103: checking for $ac_func" >&5 +echo "configure:6105: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6155,12 +6157,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6159: checking for $ac_func" >&5 +echo "configure:6161: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6210,12 +6212,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6214: checking for $ac_func" >&5 +echo "configure:6216: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6244: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6265,12 +6267,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6269: checking for $ac_func" >&5 +echo "configure:6271: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6299: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6320,12 +6322,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6324: checking for $ac_func" >&5 +echo "configure:6326: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6375,12 +6377,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6379: checking for $ac_func" >&5 +echo "configure:6381: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6430,12 +6432,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6434: checking for $ac_func" >&5 +echo "configure:6436: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6485,12 +6487,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6489: checking for $ac_func" >&5 +echo "configure:6491: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6540,12 +6542,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6544: checking for $ac_func" >&5 +echo "configure:6546: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6595,12 +6597,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6599: checking for $ac_func" >&5 +echo "configure:6601: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6650,12 +6652,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6654: checking for $ac_func" >&5 +echo "configure:6656: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6705,12 +6707,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6709: checking for $ac_func" >&5 +echo "configure:6711: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6760,12 +6762,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6764: checking for $ac_func" >&5 +echo "configure:6766: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6794: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6815,12 +6817,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6819: checking for $ac_func" >&5 +echo "configure:6821: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6849: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6870,12 +6872,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6874: checking for $ac_func" >&5 +echo "configure:6876: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6904: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6929,9 +6931,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6933: checking for stat64 in " >&5 +echo "configure:6935: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6962,9 +6964,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6966: checking for lstat64 in " >&5 +echo "configure:6968: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6995,9 +6997,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6999: checking for fstat64 in " >&5 +echo "configure:7001: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7015: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7029,7 +7031,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7033: checking for dn_expand in -lresolv" >&5 +echo "configure:7035: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7037,7 +7039,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7086,12 +7088,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7090: checking for $ac_func" >&5 +echo "configure:7092: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7120: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7139,7 +7141,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7143: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7145: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7147,7 +7149,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7188,12 +7190,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7192: checking for $ac_func" >&5 +echo "configure:7194: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7247,12 +7249,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7251: checking for $ac_func" >&5 +echo "configure:7253: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7300,7 +7302,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7304: checking for putprpwnam in -lsec" >&5 +echo "configure:7306: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7308,7 +7310,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7349,12 +7351,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7353: checking for $ac_func" >&5 +echo "configure:7355: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7383: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7409,12 +7411,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7413: checking for $ac_func" >&5 +echo "configure:7415: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7462,7 +7464,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7466: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7468: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7470,7 +7472,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7511,12 +7513,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7515: checking for $ac_func" >&5 +echo "configure:7517: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7570,12 +7572,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7574: checking for $ac_func" >&5 +echo "configure:7576: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7623,7 +7625,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7627: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7629: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7631,7 +7633,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7672,12 +7674,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7676: checking for $ac_func" >&5 +echo "configure:7678: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7733,12 +7735,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7737: checking for $ac_func" >&5 +echo "configure:7739: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7786,7 +7788,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7790: checking for getspnam in -lgen" >&5 +echo "configure:7792: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7794,7 +7796,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7811: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7835,12 +7837,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7839: checking for $ac_func" >&5 +echo "configure:7841: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7895,12 +7897,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7899: checking for $ac_func" >&5 +echo "configure:7901: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7948,7 +7950,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7952: checking for getspnam in -lsecurity" >&5 +echo "configure:7954: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7956,7 +7958,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7997,12 +7999,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8001: checking for $ac_func" >&5 +echo "configure:8003: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8031: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8056,12 +8058,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8060: checking for $ac_func" >&5 +echo "configure:8062: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8090: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8109,7 +8111,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8113: checking for getspnam in -lsec" >&5 +echo "configure:8115: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8117,7 +8119,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8158,12 +8160,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8162: checking for $ac_func" >&5 +echo "configure:8164: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8218,12 +8220,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8222: checking for $ac_func" >&5 +echo "configure:8224: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8271,7 +8273,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8275: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8277: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8279,7 +8281,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8320,12 +8322,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8324: checking for $ac_func" >&5 +echo "configure:8326: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8379,12 +8381,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8383: checking for $ac_func" >&5 +echo "configure:8385: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8432,7 +8434,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8436: checking for bigcrypt in -lsec" >&5 +echo "configure:8438: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8440,7 +8442,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8481,12 +8483,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8485: checking for $ac_func" >&5 +echo "configure:8487: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8541,12 +8543,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8545: checking for $ac_func" >&5 +echo "configure:8547: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8594,7 +8596,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8598: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8600: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8602,7 +8604,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8619: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8643,12 +8645,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8647: checking for $ac_func" >&5 +echo "configure:8649: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8702,12 +8704,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8706: checking for $ac_func" >&5 +echo "configure:8708: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8755,7 +8757,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8759: checking for getprpwnam in -lsec" >&5 +echo "configure:8761: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8763,7 +8765,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8780: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8804,12 +8806,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8808: checking for $ac_func" >&5 +echo "configure:8810: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8838: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8876,7 +8878,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8880: checking ability to build shared libraries" >&5 +echo "configure:8882: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9044,7 +9046,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9048: checking for $ac_word" >&5 +echo "configure:9050: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9101,17 +9103,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9105: checking linker flags for shared libraries" >&5 +echo "configure:9107: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9108: checking compiler flags for position-independent code" >&5 +echo "configure:9110: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9115: checking whether building shared libraries actually works" >&5 +echo "configure:9117: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9142,7 +9144,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9146: checking for long long" >&5 +echo "configure:9148: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9151,12 +9153,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9160: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9183,20 +9185,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9187: checking for LL suffix on long long integers" >&5 +echo "configure:9189: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9200: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9202: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9218,7 +9220,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9222: checking for 64 bit off_t" >&5 +echo "configure:9224: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9227,13 +9229,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9256,7 +9258,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9260: checking for off64_t" >&5 +echo "configure:9262: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9265,7 +9267,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9298,7 +9300,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9302: checking for 64 bit ino_t" >&5 +echo "configure:9304: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9307,13 +9309,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9336,7 +9338,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9340: checking for ino64_t" >&5 +echo "configure:9342: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9345,7 +9347,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9378,7 +9380,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9382: checking for dev64_t" >&5 +echo "configure:9384: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9387,7 +9389,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9420,13 +9422,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9424: checking for struct dirent64" >&5 +echo "configure:9426: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9444: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9459,7 +9461,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9463: checking for major macro" >&5 +echo "configure:9465: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9468,7 +9470,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9500,7 +9502,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9504: checking for minor macro" >&5 +echo "configure:9506: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9509,7 +9511,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9541,7 +9543,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9545: checking for unsigned char" >&5 +echo "configure:9547: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9550,12 +9552,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9578,13 +9580,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9582: checking for sin_len in sock" >&5 +echo "configure:9584: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9593,7 +9595,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9597: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9599: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9614,13 +9616,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9618: checking whether seekdir returns void" >&5 +echo "configure:9620: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9629,7 +9631,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9633: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9650,20 +9652,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9654: checking for __FILE__ macro" >&5 +echo "configure:9656: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9667: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9669: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9684,20 +9686,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9688: checking for __FUNCTION__ macro" >&5 +echo "configure:9690: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9701: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9703: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9718,7 +9720,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9722: checking if gettimeofday takes tz argument" >&5 +echo "configure:9724: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9727,14 +9729,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9757,13 +9759,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9761: checking for __va_copy" >&5 +echo "configure:9763: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9771,7 +9773,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9792,7 +9794,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9796: checking for C99 vsnprintf" >&5 +echo "configure:9798: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9801,7 +9803,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9828,7 +9830,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9834: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9851,7 +9853,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9855: checking for broken readdir" >&5 +echo "configure:9857: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9860,7 +9862,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9868,7 +9870,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9891,13 +9893,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9895: checking for utimbuf" >&5 +echo "configure:9897: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9905,7 +9907,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9909: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9911: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9929,12 +9931,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9933: checking for $ac_func" >&5 +echo "configure:9935: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9983,13 +9985,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9987: checking for ut_name in utmp" >&5 +echo "configure:9989: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9997,7 +9999,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10001: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10003: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10018,13 +10020,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10022: checking for ut_user in utmp" >&5 +echo "configure:10024: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10032,7 +10034,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10036: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10038: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10053,13 +10055,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10057: checking for ut_id in utmp" >&5 +echo "configure:10059: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10067,7 +10069,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10071: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10088,13 +10090,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10092: checking for ut_host in utmp" >&5 +echo "configure:10094: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10102,7 +10104,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10106: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10108: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10123,13 +10125,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10127: checking for ut_time in utmp" >&5 +echo "configure:10129: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10137,7 +10139,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10141: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10143: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10158,13 +10160,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10162: checking for ut_tv in utmp" >&5 +echo "configure:10164: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10172,7 +10174,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10176: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10178: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10193,13 +10195,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10197: checking for ut_type in utmp" >&5 +echo "configure:10199: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10207,7 +10209,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10213: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10228,13 +10230,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10232: checking for ut_pid in utmp" >&5 +echo "configure:10234: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10242,7 +10244,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10246: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10248: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10263,13 +10265,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10267: checking for ut_exit in utmp" >&5 +echo "configure:10269: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10277,7 +10279,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10281: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10283: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10298,13 +10300,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10302: checking for ut_addr in utmp" >&5 +echo "configure:10304: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10312,7 +10314,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10316: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10318: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10334,13 +10336,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10338: checking whether pututline returns pointer" >&5 +echo "configure:10340: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10348,7 +10350,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10352: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10354: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10370,13 +10372,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10374: checking for ut_syslen in utmpx" >&5 +echo "configure:10376: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10384,7 +10386,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10388: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10390: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10408,7 +10410,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10412: checking whether to use libiconv" >&5 +echo "configure:10414: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10421,7 +10423,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10425: checking for iconv_open in -liconv" >&5 +echo "configure:10427: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10429,7 +10431,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10483,7 +10485,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10487: checking for working iconv" >&5 +echo "configure:10489: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10492,7 +10494,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10503,7 +10505,7 @@ main() { } EOF -if { (eval echo configure:10507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10527,7 +10529,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10531: checking for Linux kernel oplocks" >&5 +echo "configure:10533: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10536,7 +10538,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10550,7 +10552,7 @@ main() { } EOF -if { (eval echo configure:10554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10556: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10573,7 +10575,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10577: checking for kernel change notify support" >&5 +echo "configure:10579: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10582,7 +10584,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10596,7 +10598,7 @@ main() { } EOF -if { (eval echo configure:10600: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10619,7 +10621,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10623: checking for kernel share modes" >&5 +echo "configure:10625: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10628,7 +10630,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10644,7 +10646,7 @@ main() { } EOF -if { (eval echo configure:10648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10670,13 +10672,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10674: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10676: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10684,7 +10686,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10688: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10690: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10705,7 +10707,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10709: checking for irix specific capabilities" >&5 +echo "configure:10711: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10714,7 +10716,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10729,7 +10731,7 @@ main() { } EOF -if { (eval echo configure:10733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10757,13 +10759,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10761: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10763: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10773,7 +10775,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10794,13 +10796,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10798: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10800: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10810,7 +10812,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10816: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10831,13 +10833,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10835: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10837: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10847,7 +10849,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10851: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10853: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10868,13 +10870,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10872: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10874: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10884,7 +10886,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10890: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10906,13 +10908,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10910: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10912: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10926,7 +10928,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10930: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10932: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10947,16 +10949,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10951: checking for test routines" >&5 +echo "configure:10953: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10970,7 +10972,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10974: checking for ftruncate extend" >&5 +echo "configure:10976: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10979,11 +10981,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -11006,7 +11008,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:11010: checking for AF_LOCAL socket support" >&5 +echo "configure:11012: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11015,11 +11017,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11043,7 +11045,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11047: checking for broken getgroups" >&5 +echo "configure:11049: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11052,11 +11054,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11079,7 +11081,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11083: checking whether getpass should be replaced" >&5 +echo "configure:11085: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11087,7 +11089,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11106: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11123,7 +11125,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11127: checking for broken inet_ntoa" >&5 +echo "configure:11129: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11132,7 +11134,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11146,7 +11148,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11150: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11169,7 +11171,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11173: checking for secure mkstemp" >&5 +echo "configure:11175: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11178,7 +11180,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11195,7 +11197,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11199: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11218,7 +11220,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11222: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11224: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11227,12 +11229,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11255,7 +11257,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11259: checking for root" >&5 +echo "configure:11261: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11264,11 +11266,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11296,7 +11298,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11300: checking for iface AIX" >&5 +echo "configure:11302: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11305,7 +11307,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11337,7 +11339,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11341: checking for iface ifconf" >&5 +echo "configure:11343: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11346,7 +11348,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11379,7 +11381,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11383: checking for iface ifreq" >&5 +echo "configure:11385: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11388,7 +11390,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11425,7 +11427,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11429: checking for setresuid" >&5 +echo "configure:11431: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11434,7 +11436,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11468,7 +11470,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11472: checking for setreuid" >&5 +echo "configure:11474: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11477,7 +11479,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11510,7 +11512,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11514: checking for seteuid" >&5 +echo "configure:11516: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11519,7 +11521,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11552,7 +11554,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11556: checking for setuidx" >&5 +echo "configure:11558: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11561,7 +11563,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11594,7 +11596,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11598: checking for working mmap" >&5 +echo "configure:11600: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11603,11 +11605,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11630,7 +11632,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11634: checking for ftruncate needs root" >&5 +echo "configure:11636: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11639,11 +11641,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11666,7 +11668,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11670: checking for fcntl locking" >&5 +echo "configure:11672: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11675,11 +11677,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11702,7 +11704,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11706: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11708: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11711,11 +11713,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11740,7 +11742,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11744: checking for 64 bit fcntl locking" >&5 +echo "configure:11746: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11749,7 +11751,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11798,13 +11800,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11802: checking for st_blocks in struct stat" >&5 +echo "configure:11804: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11813,7 +11815,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11817: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11819: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11834,13 +11836,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11838: checking for st_blksize in struct stat" >&5 +echo "configure:11840: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11849,7 +11851,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11853: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11855: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11872,13 +11874,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11876: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11878: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11898: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11915,13 +11917,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11919: checking for broken nisplus include files" >&5 +echo "configure:11921: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11931,7 +11933,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11935: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11937: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11955,7 +11957,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11959: checking whether to use smbwrapper" >&5 +echo "configure:11961: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -12002,7 +12004,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12006: checking whether to use AFS clear-text auth" >&5 +echo "configure:12008: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12028,7 +12030,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12032: checking whether to use DFS clear-text auth" >&5 +echo "configure:12034: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12055,7 +12057,7 @@ fi with_ads_support=yes echo $ac_n "checking whether to use Active Directory""... $ac_c" 1>&6 -echo "configure:12059: checking whether to use Active Directory" >&5 +echo "configure:12061: checking whether to use Active Directory" >&5 # Check whether --with-ads or --without-ads was given. if test "${with_ads+set}" = set; then @@ -12083,7 +12085,7 @@ if test x"$with_ads_support" = x"yes"; then ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12087: checking for kerberos 5 install path" >&5 +echo "configure:12089: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12111,7 +12113,7 @@ if test x$FOUND_KRB5 = x"no"; then ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12115: checking for /usr/kerberos" >&5 +echo "configure:12117: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12130,17 +12132,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12134: checking for $ac_hdr" >&5 +echo "configure:12136: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12144: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12173,17 +12175,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12177: checking for $ac_hdr" >&5 +echo "configure:12179: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12187: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12213,7 +12215,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12217: checking for _et_list in -lcom_err" >&5 +echo "configure:12219: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12221,7 +12223,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12253,7 +12255,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12257: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12259: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12261,7 +12263,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12297,7 +12299,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12301: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12303: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12305,7 +12307,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12344,7 +12346,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12348: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12350: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12352,7 +12354,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12394,7 +12396,7 @@ fi with_ldap_support=yes echo $ac_n "checking whether to use LDAP""... $ac_c" 1>&6 -echo "configure:12398: checking whether to use LDAP" >&5 +echo "configure:12400: checking whether to use LDAP" >&5 # Check whether --with-ldap or --without-ldap was given. if test "${with_ldap+set}" = set; then @@ -12415,7 +12417,7 @@ if test x"$with_ldap_support" = x"yes"; then # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12419: checking for ber_scanf in -llber" >&5 +echo "configure:12421: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12423,7 +12425,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12459,7 +12461,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12463: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12465: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12467,7 +12469,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12509,12 +12511,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12513: checking for $ac_func" >&5 +echo "configure:12515: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12562,13 +12564,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12566: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12568: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12577,7 +12579,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12581: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12583: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12600,7 +12602,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12604: checking whether to use AUTOMOUNT" >&5 +echo "configure:12606: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12625,7 +12627,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12629: checking whether to use SMBMOUNT" >&5 +echo "configure:12631: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12662,7 +12664,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12666: checking whether to use PAM" >&5 +echo "configure:12668: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12688,7 +12690,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12692: checking for pam_get_data in -lpam" >&5 +echo "configure:12694: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12696,7 +12698,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12734,7 +12736,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12738: checking whether to use pam_smbpass" >&5 +echo "configure:12740: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12772,12 +12774,12 @@ if test x"$with_pam_for_crypt" = x"no"; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12776: checking for $ac_func" >&5 +echo "configure:12778: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12826,7 +12828,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12830: checking for crypt in -lcrypt" >&5 +echo "configure:12832: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12834,7 +12836,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12880,7 +12882,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12884: checking for a crypt that needs truncated salt" >&5 +echo "configure:12886: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12889,11 +12891,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12919,7 +12921,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12923: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12925: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12948,10 +12950,35 @@ fi ## ######################################################################################## +################################################# +# check for a LDAP password database configuration backwards compatibility +echo $ac_n "checking whether to use LDAP SAM 2.2 compatible configuration""... $ac_c" 1>&6 +echo "configure:12957: checking whether to use LDAP SAM 2.2 compatible configuration" >&5 +# Check whether --with-ldapsam or --without-ldapsam was given. +if test "${with_ldapsam+set}" = set; then + withval="$with_ldapsam" + case "$withval" in + yes) + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define WITH_LDAP_SAMCONFIG 1 +EOF + + ;; + *) + echo "$ac_t""no" 1>&6 + ;; + esac +else + echo "$ac_t""no" 1>&6 + +fi + + ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12955: checking whether to use TDB SAM database" >&5 +echo "configure:12982: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12976,7 +13003,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12980: checking whether to use NISPLUS SAM database" >&5 +echo "configure:13007: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -13007,7 +13034,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:13011: checking whether to use NISPLUS_HOME" >&5 +echo "configure:13038: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -13032,7 +13059,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:13036: checking whether to use syslog logging" >&5 +echo "configure:13063: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -13057,7 +13084,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:13061: checking whether to use profiling" >&5 +echo "configure:13088: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13085,7 +13112,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13089: checking whether to support disk-quotas" >&5 +echo "configure:13116: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13096,13 +13123,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13100: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13127: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13114,7 +13141,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13145: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13163,7 +13190,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13167: checking whether to support utmp accounting" >&5 +echo "configure:13194: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13188,7 +13215,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13192: checking chosen man pages' language(s)" >&5 +echo "configure:13219: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13219,7 +13246,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13223: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13250: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13247,14 +13274,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13251: checking how to get filesystem space usage" >&5 +echo "configure:13278: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13258: checking statvfs64 function (SVR4)" >&5 +echo "configure:13285: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13262,7 +13289,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13309,12 +13336,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13313: checking statvfs function (SVR4)" >&5 +echo "configure:13340: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13322,7 +13349,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13326: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13347,7 +13374,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13351: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13378: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13355,7 +13382,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13368,7 +13395,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13395,7 +13422,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13399: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13426: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13403,7 +13430,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13449,7 +13476,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13453: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13480: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13457,7 +13484,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13467,7 +13494,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13494,7 +13521,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13498: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13525: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13502,7 +13529,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13518,7 +13545,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13545,7 +13572,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13549: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13576: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13553,7 +13580,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13573,7 +13600,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13606,9 +13633,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13610: checking if large file support can be enabled" >&5 +echo "configure:13637: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13652: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13686,7 +13713,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13690: checking whether to support ACLs" >&5 +echo "configure:13717: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13739,7 +13766,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13743: checking for acl_get_file in -lacl" >&5 +echo "configure:13770: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13747,7 +13774,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13786,13 +13813,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13790: checking for ACL support" >&5 +echo "configure:13817: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13800,7 +13827,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13820,13 +13847,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13824: checking for acl_get_perm_np" >&5 +echo "configure:13851: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13834,7 +13861,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13838: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13879,7 +13906,7 @@ fi # check for sendfile support echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 -echo "configure:13883: checking whether to support sendfile" >&5 +echo "configure:13910: checking whether to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -13889,13 +13916,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:13893: checking for linux sendfile64 support" >&5 +echo "configure:13920: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13907,7 +13934,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -13922,13 +13949,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:13926: checking for linux sendfile support" >&5 +echo "configure:13953: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13940,7 +13967,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13971: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -13956,13 +13983,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:13960: checking for broken linux sendfile support" >&5 +echo "configure:13987: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -14034,13 +14061,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:14038: checking for freebsd sendfile support" >&5 +echo "configure:14065: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14062,7 +14089,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14096,13 +14123,13 @@ EOF *hpux*) echo $ac_n "checking for hpux sendfile64 support""... $ac_c" 1>&6 -echo "configure:14100: checking for hpux sendfile64 support" >&5 +echo "configure:14127: checking for hpux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14122,7 +14149,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -14153,13 +14180,13 @@ EOF fi echo $ac_n "checking for hpux sendfile support""... $ac_c" 1>&6 -echo "configure:14157: checking for hpux sendfile support" >&5 +echo "configure:14184: checking for hpux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14179,7 +14206,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14210: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14232,7 +14259,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:14236: checking whether to build winbind" >&5 +echo "configure:14263: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14328,20 +14355,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14332: checking whether struct passwd has pw_comment" >&5 +echo "configure:14359: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14345: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14372: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14366,20 +14393,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14370: checking whether struct passwd has pw_age" >&5 +echo "configure:14397: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14383: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14410: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14418,7 +14445,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14422: checking for poptGetContext in -lpopt" >&5 +echo "configure:14449: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14426,7 +14453,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14461,7 +14488,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14465: checking whether to use included popt" >&5 +echo "configure:14492: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14507,16 +14534,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14511: checking configure summary" >&5 +echo "configure:14538: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source/configure.in b/source/configure.in index 5221b8ec2b4..faa7a2d6fa9 100644 --- a/source/configure.in +++ b/source/configure.in @@ -2215,6 +2215,23 @@ AC_ARG_WITH(sam, ## ######################################################################################## +################################################# +# check for a LDAP password database configuration backwards compatibility +AC_MSG_CHECKING(whether to use LDAP SAM 2.2 compatible configuration) +AC_ARG_WITH(ldapsam, +[ --with-ldapsam Include LDAP SAM 2.2 compatible configuration (default=no)], +[ case "$withval" in + yes) + AC_MSG_RESULT(yes) + AC_DEFINE(WITH_LDAP_SAMCONFIG) + ;; + *) + AC_MSG_RESULT(no) + ;; + esac ], + AC_MSG_RESULT(no) +) + ################################################# # check for a TDB password database AC_MSG_CHECKING(whether to use TDB SAM database) diff --git a/source/include/config.h.in b/source/include/config.h.in index 770af1a6b56..617cf0c5faf 100644 --- a/source/include/config.h.in +++ b/source/include/config.h.in @@ -233,7 +233,7 @@ #undef HAVE_IMMEDIATE_STRUCTURES #undef HAVE_CUPS #undef WITH_SAM -#undef WITH_LDAP_SAM +#undef WITH_LDAP_SAMCONFIG #undef WITH_NISPLUS_SAM #undef WITH_TDB_SAM #undef LINUX_QUOTAS_1 diff --git a/source/param/loadparm.c b/source/param/loadparm.c index c4844398370..ba16d68624f 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -207,6 +207,10 @@ typedef struct int iLockSpinTime; char *szLdapMachineSuffix; char *szLdapUserSuffix; +#ifdef WITH_LDAP_SAMCONFIG + int ldap_port; + char *szLdapServer; +#endif int ldap_ssl; char *szLdapSuffix; char *szLdapFilter; @@ -1003,6 +1007,10 @@ static struct parm_struct parm_table[] = { {"Ldap Options", P_SEP, P_SEPARATOR}, +#ifdef WITH_LDAP_SAMCONFIG + {"ldap server", P_STRING, P_GLOBAL, &Globals.szLdapServer, NULL, NULL, 0}, + {"ldap port", P_INTEGER, P_GLOBAL, &Globals.ldap_port, NULL, NULL, 0}, +#endif {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, @@ -1367,6 +1375,11 @@ static void init_globals(void) a large number of sites (tridge) */ Globals.bHostnameLookups = False; +#ifdef WITH_LDAP_SAMCONFIG + string_set(&Globals.szLdapServer, "localhost"); + Globals.ldap_port = 636; +#endif /* WITH_LDAP_SAMCONFIG */ + string_set(&Globals.szLdapSuffix, ""); string_set(&Globals.szLdapMachineSuffix, ""); string_set(&Globals.szLdapUserSuffix, ""); @@ -1582,6 +1595,11 @@ FN_GLOBAL_STRING(lp_winbind_separator, &Globals.szWinbindSeparator) FN_GLOBAL_BOOL(lp_winbind_enum_users, &Globals.bWinbindEnumUsers) FN_GLOBAL_BOOL(lp_winbind_enum_groups, &Globals.bWinbindEnumGroups) FN_GLOBAL_BOOL(lp_winbind_use_default_domain, &Globals.bWinbindUseDefaultDomain) + +#ifdef WITH_LDAP_SAMCONFIG +FN_GLOBAL_STRING(lp_ldap_server, &Globals.szLdapServer) +FN_GLOBAL_INTEGER(lp_ldap_port, &Globals.ldap_port) +#endif FN_GLOBAL_STRING(lp_ldap_suffix, &Globals.szLdapSuffix) FN_GLOBAL_STRING(lp_ldap_machine_suffix, &Globals.szLdapMachineSuffix) FN_GLOBAL_STRING(lp_ldap_user_suffix, &Globals.szLdapUserSuffix) diff --git a/source/passdb/pdb_ldap.c b/source/passdb/pdb_ldap.c index c7badb50e77..a10e6f2989b 100644 --- a/source/passdb/pdb_ldap.c +++ b/source/passdb/pdb_ldap.c @@ -954,9 +954,9 @@ static BOOL init_ldap_from_sam (struct ldapsam_privates *ldap_state, make_a_mod(mods, ldap_op, "primaryGroupID", temp); /* displayName, cn, and gecos should all be the same - * most easily accomplished by giving them the same OID - * gecos isn't set here b/c it should be handled by the - * add-user script + * most easily accomplished by giving them the same OID + * gecos isn't set here b/c it should be handled by the + * add-user script */ make_a_mod(mods, ldap_op, "displayName", pdb_get_fullname(sampass)); @@ -1730,8 +1730,23 @@ NTSTATUS pdb_init_ldapsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, co if (location) { ldap_state->uri = talloc_strdup(pdb_context->mem_ctx, location); +#ifdef WITH_LDAP_SAMCONFIG } else { - ldap_state->uri = "ldap://localhost"; + int ldap_port = lp_ldap_port(); + + /* remap default port is no SSL */ + if ( (lp_ldap_ssl() == LDAP_SSL_OFF) && (ldap_port == 636) ) { + ldap_port = 389; + } + + ldap_state->uri = talloc_asprintf(pdb_context->mem_ctx, "%s://%s:%d", lp_ldap_ssl() ? "ldap" : "ldaps", lp_ldap_server(), ldap_port); + if (!ldap_state->uri) { + return NT_STATUS_NO_MEMORY; + } +#else + } else { + ldap_state->uri = "ldaps://localhost"; +#endif } (*pdb_method)->private_data = ldap_state; -- cgit From 0a6a0c88d0972fcea4aead7115929f96c0d23cbc Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 27 Sep 2002 02:09:57 +0000 Subject: When compiled --with-ldapsam, make ldapsam the default passdb backend. This is to allow painless upgrades from 2.2, and so people don't get a shock when they follow old docs. If ldap has been detected on the system, ldapsam is always available, just not the default. Andrew Bartlett --- source/param/loadparm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/param/loadparm.c b/source/param/loadparm.c index ba16d68624f..eb910a1245c 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -1252,7 +1252,6 @@ static void init_globals(void) string_set(&Globals.szSMBPasswdFile, dyn_SMB_PASSWD_FILE); string_set(&Globals.szPrivateDir, dyn_PRIVATE_DIR); - Globals.szPassdbBackend = str_list_make("smbpasswd unixsam", NULL); /* use the new 'hash2' method by default */ string_set(&Globals.szManglingMethod, "hash2"); @@ -1378,6 +1377,9 @@ static void init_globals(void) #ifdef WITH_LDAP_SAMCONFIG string_set(&Globals.szLdapServer, "localhost"); Globals.ldap_port = 636; + Globals.szPassdbBackend = str_list_make("ldapsam unixsam", NULL); +#else + Globals.szPassdbBackend = str_list_make("smbpasswd unixsam", NULL); #endif /* WITH_LDAP_SAMCONFIG */ string_set(&Globals.szLdapSuffix, ""); -- cgit From 42c7ecd3d5dc5eb8ff690635946a403a82ebb270 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 27 Sep 2002 02:11:54 +0000 Subject: Fix typo --- source/utils/smbgroupedit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/utils/smbgroupedit.c b/source/utils/smbgroupedit.c index 35285452a05..589dafc2310 100644 --- a/source/utils/smbgroupedit.c +++ b/source/utils/smbgroupedit.c @@ -52,7 +52,7 @@ static void usage(void) printf(" -c SID change group\n"); printf(" -u unix group\n"); printf(" -d description group description\n"); - printf(" -r rid RID of new group\n") + printf(" -r rid RID of new group\n"); printf(" -x group delete this group\n"); printf("\n"); printf(" -t[b|d|l] type: builtin, domain, local \n"); -- cgit From 4636809153987f03b14a27dba175cb1511c2d460 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 27 Sep 2002 02:13:07 +0000 Subject: I missed committing this - all updates to configure.in adding --with-foo options need a matching entry in acconfig.h to actually do anything... Andrew Bartlett --- source/acconfig.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/acconfig.h b/source/acconfig.h index 45d63669354..a5bf16279cf 100644 --- a/source/acconfig.h +++ b/source/acconfig.h @@ -167,7 +167,7 @@ #undef HAVE_IMMEDIATE_STRUCTURES #undef HAVE_CUPS #undef WITH_SAM -#undef WITH_LDAP_SAM +#undef WITH_LDAP_SAMCONFIG #undef WITH_NISPLUS_SAM #undef WITH_TDB_SAM #undef LINUX_QUOTAS_1 -- cgit From ce00a3238ed8a82639c4d0ee3e960f7000b1a7b0 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 27 Sep 2002 03:05:20 +0000 Subject: Some small cleanups to the libads code (mainly error checking), and give a sane prototype for the push_utf8_allocate code. Andrew Bartlett --- source/lib/charcnv.c | 4 ++-- source/libads/ads_status.c | 6 ++++++ source/libads/ldap.c | 27 ++++++++++++++++++++++----- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/source/lib/charcnv.c b/source/lib/charcnv.c index cd8aa4fe55f..d0cef52c923 100644 --- a/source/lib/charcnv.c +++ b/source/lib/charcnv.c @@ -522,12 +522,12 @@ int push_utf8_talloc(TALLOC_CTX *ctx, char **dest, const char *src) * * @retval The number of bytes occupied by the string in the destination **/ -int push_utf8_allocate(void **dest, const char *src) +int push_utf8_allocate(char **dest, const char *src) { int src_len = strlen(src)+1; *dest = NULL; - return convert_string_allocate(CH_UNIX, CH_UTF8, src, src_len, dest); + return convert_string_allocate(CH_UNIX, CH_UTF8, src, src_len, (void **)dest); } /**************************************************************************** diff --git a/source/libads/ads_status.c b/source/libads/ads_status.c index d85f9c9b58a..80fdb99eac0 100644 --- a/source/libads/ads_status.c +++ b/source/libads/ads_status.c @@ -72,6 +72,12 @@ NTSTATUS ads_ntstatus(ADS_STATUS status) if (status.error_type == ADS_ERROR_NT){ return status.err.nt_status; } +#ifdef HAVE_LDAP + if ((status.error_type == ADS_ERROR_LDAP) + && (status.err.rc == LDAP_NO_MEMORY)) { + return NT_STATUS_NO_MEMORY; + } +#endif if (ADS_ERR_OK(status)) return NT_STATUS_OK; return NT_STATUS_UNSUCCESSFUL; } diff --git a/source/libads/ldap.c b/source/libads/ldap.c index 7a0afb1a816..b4c7c3970c0 100644 --- a/source/libads/ldap.c +++ b/source/libads/ldap.c @@ -741,7 +741,11 @@ ADS_STATUS ads_find_machine_acct(ADS_STRUCT *ads, void **res, const char *host) /* the easiest way to find a machine account anywhere in the tree is to look for hostname$ */ - asprintf(&exp, "(samAccountName=%s$)", host); + if (asprintf(&exp, "(samAccountName=%s$)", host) == -1) { + DEBUG(1, ("asprintf failed!\n")); + return ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + } + status = ads_search(ads, res, exp, attrs); free(exp); return status; @@ -898,13 +902,15 @@ ADS_STATUS ads_gen_mod(ADS_STRUCT *ads, const char *mod_dn, ADS_MODLIST mods) controls[0] = &PermitModify; controls[1] = NULL; - push_utf8_allocate((void **) &utf8_dn, mod_dn); + if (push_utf8_allocate(&utf8_dn, mod_dn) == -1) { + return ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + } /* find the end of the list, marked by NULL or -1 */ for(i=0;(mods[i]!=0)&&(mods[i]!=(LDAPMod *) -1);i++); /* make sure the end of the list is NULL */ mods[i] = NULL; - ret = ldap_modify_ext_s(ads->ld, utf8_dn ? utf8_dn : mod_dn, + ret = ldap_modify_ext_s(ads->ld, utf8_dn, (LDAPMod **) mods, controls, NULL); SAFE_FREE(utf8_dn); return ADS_ERROR(ret); @@ -922,7 +928,10 @@ ADS_STATUS ads_gen_add(ADS_STRUCT *ads, const char *new_dn, ADS_MODLIST mods) int ret, i; char *utf8_dn = NULL; - push_utf8_allocate((void **) &utf8_dn, new_dn); + if (push_utf8_allocate(&utf8_dn, new_dn) == -1) { + DEBUG(1, ("ads_gen_add: push_utf8_allocate failed!")); + return ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + } /* find the end of the list, marked by NULL or -1 */ for(i=0;(mods[i]!=0)&&(mods[i]!=(LDAPMod *) -1);i++); @@ -944,7 +953,11 @@ ADS_STATUS ads_del_dn(ADS_STRUCT *ads, char *del_dn) { int ret; char *utf8_dn = NULL; - push_utf8_allocate((void **) &utf8_dn, del_dn); + if (push_utf8_allocate(&utf8_dn, del_dn) == -1) { + DEBUG(1, ("ads_del_dn: push_utf8_allocate failed!")); + return ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + } + ret = ldap_delete(ads->ld, utf8_dn ? utf8_dn : del_dn); return ADS_ERROR(ret); } @@ -991,6 +1004,10 @@ static ADS_STATUS ads_add_machine_acct(ADS_STRUCT *ads, const char *hostname, if (!(host_upn = talloc_asprintf(ctx, "%s@%s", host_spn, ads->config.realm))) goto done; ou_str = ads_ou_string(org_unit); + if (!ou_str) { + DEBUG(1, ("ads_ou_string returned NULL (malloc failure?)\n")); + goto done; + } new_dn = talloc_asprintf(ctx, "cn=%s,%s,%s", hostname, ou_str, ads->config.bind_path); free(ou_str); -- cgit From 31bdbeef0ea6f30247cd3b30cfea57b34102abe6 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 27 Sep 2002 04:33:58 +0000 Subject: Minor updates: Add const to some more functions, and reintroduce 'net rpc join oldstyle' as *only* trying an old-style join. This means that we can rely on it not prompting for a password on the build farm. Andrew Bartlett --- source/passdb/secrets.c | 8 ++++---- source/utils/net.c | 7 ++++++- source/utils/net_rpc.c | 19 ++++++++++++++----- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/source/passdb/secrets.c b/source/passdb/secrets.c index 08a0e9c9acf..73201ab62a5 100644 --- a/source/passdb/secrets.c +++ b/source/passdb/secrets.c @@ -95,7 +95,7 @@ BOOL secrets_delete(const char *key) return tdb_delete(tdb, kbuf) == 0; } -BOOL secrets_store_domain_sid(char *domain, const DOM_SID *sid) +BOOL secrets_store_domain_sid(const char *domain, const DOM_SID *sid) { fstring key; @@ -104,7 +104,7 @@ BOOL secrets_store_domain_sid(char *domain, const DOM_SID *sid) return secrets_store(key, sid, sizeof(DOM_SID)); } -BOOL secrets_fetch_domain_sid(char *domain, DOM_SID *sid) +BOOL secrets_fetch_domain_sid(const char *domain, DOM_SID *sid) { DOM_SID *dyn_sid; fstring key; @@ -128,7 +128,7 @@ BOOL secrets_fetch_domain_sid(char *domain, DOM_SID *sid) return True; } -BOOL secrets_store_domain_guid(char *domain, GUID *guid) +BOOL secrets_store_domain_guid(const char *domain, GUID *guid) { fstring key; @@ -137,7 +137,7 @@ BOOL secrets_store_domain_guid(char *domain, GUID *guid) return secrets_store(key, guid, sizeof(GUID)); } -BOOL secrets_fetch_domain_guid(char *domain, GUID *guid) +BOOL secrets_fetch_domain_guid(const char *domain, GUID *guid) { GUID *dyn_guid; fstring key; diff --git a/source/utils/net.c b/source/utils/net.c index 800aeded0a6..b3b72e24658 100644 --- a/source/utils/net.c +++ b/source/utils/net.c @@ -277,8 +277,13 @@ struct cli_state *net_make_ipc_connection(unsigned flags) } else { nt_status = connect_to_ipc(&cli, &server_ip, server_name); } + SAFE_FREE(server_name); - return cli; + if (NT_STATUS_IS_OK(nt_status)) { + return cli; + } else { + return NULL; + } } static int net_user(int argc, const char **argv) diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c index 8b8278b053e..11f73a1387d 100644 --- a/source/utils/net_rpc.c +++ b/source/utils/net_rpc.c @@ -309,15 +309,24 @@ static int rpc_join_usage(int argc, const char **argv) * Main 'net_rpc_join()' (where the admain username/password is used) is * in net_rpc_join.c * Assume if a -U is specified, it's the new style, otherwise it's the - * old style + * old style. If 'oldstyle' is specfied explicity, do it and don't prompt. **/ int net_rpc_join(int argc, const char **argv) { - if ((net_rpc_join_oldstyle(argc, argv) == 0)) - return 0; - - return net_rpc_join_newstyle(argc, argv); + struct functable func[] = { + {"oldstyle", net_rpc_join_oldstyle}, + {NULL, NULL} + }; + + if (argc == 0) { + if ((net_rpc_join_oldstyle(argc, argv) == 0)) + return 0; + + return net_rpc_join_newstyle(argc, argv); + } + + return net_run_function(argc, argv, func, rpc_join_usage); } -- cgit From df8f0338fae01e5edc176708c2b798c67c2e8c36 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 27 Sep 2002 05:29:43 +0000 Subject: Vance picked up a pile of typos etc at the CIFS confernce, and finally got them off his laptop :-) Andrew Bartlett --- source/Doxyfile | 8 ++++---- source/Makefile.in | 2 +- source/lib/util_str.c | 16 ++++++++-------- source/param/loadparm.c | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/source/Doxyfile b/source/Doxyfile index fe71065c24c..bbdc5da7e7a 100644 --- a/source/Doxyfile +++ b/source/Doxyfile @@ -124,7 +124,7 @@ MAN_LINKS = NO #--------------------------------------------------------------------------- GENERATE_XML = NO #--------------------------------------------------------------------------- -# Configuration options related to the preprocessor +# configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = NO MACRO_EXPANSION = NO @@ -136,14 +136,14 @@ PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- -# Configuration::addtions related to external references +# configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- -# Configuration options related to the dot tool +# configuration options related to the dot tool #--------------------------------------------------------------------------- HAVE_DOT = YES CLASS_GRAPH = YES @@ -159,7 +159,7 @@ MAX_DOT_GRAPH_HEIGHT = 1024 GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine +# configuration::additions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO CGI_NAME = search.cgi diff --git a/source/Makefile.in b/source/Makefile.in index f3d9b7ec099..bd09ee55c88 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -70,7 +70,7 @@ SWATDIR = @swatdir@ # the directory where lock files go LOCKDIR = @lockdir@ -# the directorty where pid files go +# the directory where pid files go PIDDIR = @piddir@ # man pages language(s) man_langs = "@manlangs@" diff --git a/source/lib/util_str.c b/source/lib/util_str.c index 19d92eec8fb..75338de4d3f 100644 --- a/source/lib/util_str.c +++ b/source/lib/util_str.c @@ -468,7 +468,7 @@ char *alpha_strcpy(char *dest, const char *src, const char *other_safe_chars, si for(i = 0; i < len; i++) { int val = (src[i] & 0xff); - if(isupper(val) || islower(val) || isdigit(val) || strchr_m(other_safe_chars, val)) + if (isupper(val) || islower(val) || isdigit(val) || strchr_m(other_safe_chars, val)) dest[i] = src[i]; else dest[i] = '_'; @@ -501,7 +501,7 @@ char *StrnCpy(char *dest,const char *src,size_t n) like strncpy but copies up to the character marker. always null terminates. returns a pointer to the character marker in the source string (src). ****************************************************************************/ -char *strncpyn(char *dest, const char *src,size_t n, char c) +char *strncpyn(char *dest, const char *src, size_t n, char c) { char *p; size_t str_len; @@ -643,8 +643,8 @@ void string_free(char **s) } /**************************************************************************** -set a string value, allocing the space for the string, and deallocating any -existing space +set a string value, deallocating any existing space, and allocing the space +for the string ****************************************************************************/ BOOL string_set(char **dest,const char *src) { @@ -724,7 +724,7 @@ void pstring_sub(char *s,const char *pattern,const char *insert) /* similar to string_sub, but it will accept only allocated strings * and may realloc them so pay attention at what you pass on no - * pointers inside strings, no pstrings or const must be passed + * pointers inside strings, no pstrings or const may be passed * as string. */ @@ -830,7 +830,7 @@ void all_string_sub(char *s,const char *pattern,const char *insert, size_t len) /**************************************************************************** similar to all_string_sub but for unicode strings. -return a new allocate unicode string. +return a new allocated unicode string. similar to string_sub() but allows for any character to be substituted. Use with caution! ****************************************************************************/ @@ -1203,7 +1203,7 @@ BOOL str_list_copy(char ***dest, char **src) lsize += S_LIST_ABS; rlist = (char **)Realloc(list, ((sizeof(char **)) * (lsize +1))); if (!rlist) { - DEBUG(0,("str_list_copy: Unable to allocate memory")); + DEBUG(0,("str_list_copy: Unable to re-allocate memory")); str_list_free(&list); return False; } @@ -1225,7 +1225,7 @@ BOOL str_list_copy(char ***dest, char **src) return True; } -/* return true if all the elemnts of the list matches exactly */ +/* return true if all the elements of the list match exactly */ BOOL str_list_compare(char **list1, char **list2) { diff --git a/source/param/loadparm.c b/source/param/loadparm.c index eb910a1245c..67276befec1 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -600,7 +600,7 @@ static struct enum_list enum_ldap_ssl[] = { {LDAP_SSL_OFF, "off"}, {LDAP_SSL_OFF, "Off"}, {LDAP_SSL_START_TLS, "start tls"}, - {LDAP_SSL_START_TLS, "start_tls"}, + {LDAP_SSL_START_TLS, "Start_tls"}, {-1, NULL} }; @@ -1185,7 +1185,7 @@ static void init_printer_values(void) "lp -i %p-%j -H hold"); string_set(&sDefault.szLpresumecommand, "lp -i %p-%j -H resume"); -#endif /* SYSV */ +#endif /* HPUX */ break; case PRINT_QNX: -- cgit From 4d20cf56f2fbe60f2dfa2ae62de1f132f24348aa Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 27 Sep 2002 06:45:23 +0000 Subject: Doco patch from metze. This reformats the 'ldap ssl' docs, and add doco for the new 'ldap passwd sync' option. Andrew Bartlett --- docs/docbook/manpages/smb.conf.5.sgml | 44 ++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index 89ffa0934a3..cc521d358d5 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -656,8 +656,9 @@ ldap filter ldap ssl ldap suffix - ldap suffix - ldap suffix + ldap user suffix + ldap machine suffix + ldap passwd sync lm announce lm interval @@ -3484,13 +3485,16 @@ The ldap ssl can be set to one of three values: - (a) on - Always use SSL when contacting the - ldap server, (b) off - - Never use SSL when querying the directory, or (c) start_tls - - Use the LDAPv3 StartTLS extended operation - (RFC2830) for communicating with the directory server. - - + + + On = Always use SSL when contacting the + ldap server. + + Off = Never use SSL when querying the directory. + + Start_tls = Use the LDAPv3 StartTLS extended operation + (RFC2830) for communicating with the directory server. + Default : ldap ssl = on @@ -3533,7 +3537,29 @@ + + ldap passwd sync (G) + This option is used to define whether + or not Samba should sync the LDAP password with the NT + and LM hashes for normal accounts (NOT for + workstation, server or domain trusts) on a password + change via SAMBA. + + + The ldap passwd sync can be set to one of three values: + + + Yes = Try to update the LDAP, NT and LM passwords and update the pwdLastSet time. + + No = Update NT and LM passwords and update the pwdLastSet time. + + Only = Only update the LDAP password and let the LDAP server do the rest. + + + Default : ldap passwd sync = no + + -- cgit From 685387b0109e880e30191fbea0aad1e5c677273a Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 27 Sep 2002 07:02:43 +0000 Subject: Do not update manpages directly... --- docs/docbook/manpages/smb.conf.5.sgml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index cc521d358d5..0c565e7e511 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -1139,7 +1139,16 @@ add group script (G) This is the full pathname to a script that will - be run AS ROOT by smbd(8) when a new group is requested. It will expand any %g to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. + be run AS ROOT by smbd(8) when a new group is + requested. It will expand any + %g to the group name passed. + This script is only useful for installations using the + Windows NT domain administration tools. The script is + free to create a group with an arbitrary name to + circumvent unix group name restrictions. In that case + the script must print the numeric gid of the created + group on stdout. -- cgit From 3f78923a6feefffae6203d27a765b2a8cf3c5c24 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 27 Sep 2002 09:47:02 +0000 Subject: An example of a group creation command that can handle failures of groupadd. Volker --- source/script/creategroup | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100755 source/script/creategroup diff --git a/source/script/creategroup b/source/script/creategroup new file mode 100755 index 00000000000..01fb0659444 --- /dev/null +++ b/source/script/creategroup @@ -0,0 +1,27 @@ +#!/bin/sh + +# Example script for 'add group command'. Handle weird NT group +# names. First attempt to create the group directly, if that fails +# then create a random group and print the numeric group id. +# +# Note that this is only an example and assumes /dev/urandom. +# +# Volker + +GROUPNAME="$1" +ITERS=0 + +while ! /usr/sbin/groupadd "$GROUPNAME" > /dev/null 2>&1 +do + # we had difficulties creating that group. Maybe the name was + # too weird, or it already existed. Create a random name. + GROUPNAME=nt-$(dd if=/dev/urandom bs=16 count=1 2>/dev/null | md5sum | cut -b 1-5) + ITERS=$(expr "$ITERS" + 1) + if [ "$ITERS" -gt 10 ] + then + # Too many attempts + exit 1 + fi +done + +getent group | grep ^"$GROUPNAME": | cut -d : -f 3 -- cgit From c864edf4fbf8a6c37888a14b861d7c12cf503d4f Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 27 Sep 2002 12:23:47 +0000 Subject: Move a number of ADS related functions out into utility libs, so that things like metze's sam_ads can also use them. Also add error checking etc to a few more functions. Andrew Bartlett --- source/Makefile.in | 3 +- source/libads/ads_ldap.c | 145 ++++++++++++++++++++++++++++++ source/libads/ads_utils.c | 20 +++-- source/libads/kerberos.c | 9 +- source/libads/ldap.c | 99 +++++++++++++++------ source/libads/ldap_utils.c | 90 +++++++++++++++++++ source/nsswitch/winbindd_ads.c | 197 +++-------------------------------------- 7 files changed, 345 insertions(+), 218 deletions(-) create mode 100644 source/libads/ads_ldap.c create mode 100644 source/libads/ldap_utils.c diff --git a/source/Makefile.in b/source/Makefile.in index bd09ee55c88..32c2e3f70f3 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -154,7 +154,8 @@ PARAM_OBJ = param/loadparm.o param/params.o dynconfig.o LIBADS_OBJ = libads/ldap.o libads/ldap_printer.o libads/sasl.o \ libads/krb5_setpw.o libads/kerberos.o libads/ldap_user.o \ libads/ads_struct.o libads/ads_status.o \ - libads/disp_sec.o libads/ads_utils.o + libads/disp_sec.o libads/ads_utils.o libads/ldap_utils.o \ + libads/ads_ldap.o LIBADS_SERVER_OBJ = libads/util.o libads/kerberos_verify.o diff --git a/source/libads/ads_ldap.c b/source/libads/ads_ldap.c new file mode 100644 index 00000000000..8c39a897625 --- /dev/null +++ b/source/libads/ads_ldap.c @@ -0,0 +1,145 @@ +/* + Unix SMB/CIFS implementation. + + Winbind ADS backend functions + + Copyright (C) Andrew Tridgell 2001 + Copyright (C) Andrew Bartlett 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#ifdef HAVE_LDAP + +/* convert a single name to a sid in a domain */ +NTSTATUS ads_name_to_sid(ADS_STRUCT *ads, + const char *name, + DOM_SID *sid, + enum SID_NAME_USE *type) +{ + const char *attrs[] = {"objectSid", "sAMAccountType", NULL}; + int count; + ADS_STATUS rc; + void *res = NULL; + char *exp; + uint32 t; + NTSTATUS status = NT_STATUS_UNSUCCESSFUL; + + if (asprintf(&exp, "(|(sAMAccountName=%s)(userPrincipalName=%s@%s))", + name, name, ads->config.realm) == -1) { + DEBUG(1,("ads_name_to_sid: asprintf failed!\n")); + status = NT_STATUS_NO_MEMORY; + goto done; + } + + rc = ads_search_retry(ads, &res, exp, attrs); + free(exp); + if (!ADS_ERR_OK(rc)) { + DEBUG(1,("name_to_sid ads_search: %s\n", ads_errstr(rc))); + goto done; + } + + count = ads_count_replies(ads, res); + if (count != 1) { + DEBUG(1,("name_to_sid: %s not found\n", name)); + goto done; + } + + if (!ads_pull_sid(ads, res, "objectSid", sid)) { + DEBUG(1,("No sid for %s !?\n", name)); + goto done; + } + + if (!ads_pull_uint32(ads, res, "sAMAccountType", &t)) { + DEBUG(1,("No sAMAccountType for %s !?\n", name)); + goto done; + } + + *type = ads_atype_map(t); + + status = NT_STATUS_OK; + + DEBUG(3,("ads name_to_sid mapped %s\n", name)); + +done: + if (res) ads_msgfree(ads, res); + + return status; +} + +/* convert a sid to a user or group name */ +NTSTATUS ads_sid_to_name(ADS_STRUCT *ads, + TALLOC_CTX *mem_ctx, + DOM_SID *sid, + char **name, + enum SID_NAME_USE *type) +{ + const char *attrs[] = {"userPrincipalName", + "sAMAccountName", + "sAMAccountType", NULL}; + ADS_STATUS rc; + void *msg = NULL; + char *exp = NULL; + char *sidstr = NULL; + uint32 atype; + NTSTATUS status = NT_STATUS_UNSUCCESSFUL; + + if (!(sidstr = sid_binstring(sid))) { + DEBUG(1,("ads_sid_to_name: sid_binstring failed!\n")); + status = NT_STATUS_NO_MEMORY; + goto done; + } + + if (asprintf(&exp, "(objectSid=%s)", sidstr) == -1) { + DEBUG(1,("ads_sid_to_name: asprintf failed!\n")); + status = NT_STATUS_NO_MEMORY; + goto done; + } + + rc = ads_search_retry(ads, &msg, exp, attrs); + if (!ADS_ERR_OK(rc)) { + status = ads_ntstatus(rc); + DEBUG(1,("ads_sid_to_name ads_search: %s\n", ads_errstr(rc))); + goto done; + } + + if (!ads_pull_uint32(ads, msg, "sAMAccountType", &atype)) { + goto done; + } + + *name = ads_pull_username(ads, mem_ctx, msg); + if (!*name) { + DEBUG(1,("ads_sid_to_name: ads_pull_username retuned NULL!\n")); + status = NT_STATUS_NO_MEMORY; + goto done; + } + + *type = ads_atype_map(atype); + + status = NT_STATUS_OK; + + DEBUG(3,("ads sid_to_name mapped %s\n", *name)); + +done: + if (msg) ads_msgfree(ads, msg); + + SAFE_FREE(exp); + SAFE_FREE(sidstr); + + return status; +} + +#endif diff --git a/source/libads/ads_utils.c b/source/libads/ads_utils.c index fc8a2700211..626c1779266 100644 --- a/source/libads/ads_utils.c +++ b/source/libads/ads_utils.c @@ -3,7 +3,8 @@ ads (active directory) utility library Copyright (C) Stefan (metze) Metzmacher 2002 - + Copyright (C) Andrew Tridgell 2001 + This program 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 @@ -21,9 +22,6 @@ #include "includes.h" -#ifdef HAVE_ADS - - /* translated the ACB_CTRL Flags to UserFlags (userAccountControl) */ @@ -168,4 +166,16 @@ uint32 ads_gtype2atype(uint32 gtype) return atype; } -#endif +/* turn a sAMAccountType into a SID_NAME_USE */ +enum SID_NAME_USE ads_atype_map(uint32 atype) +{ + switch (atype & 0xF0000000) { + case ATYPE_GLOBAL_GROUP: + return SID_NAME_DOM_GRP; + case ATYPE_ACCOUNT: + return SID_NAME_USER; + default: + DEBUG(1,("hmm, need to map account type 0x%x\n", atype)); + } + return SID_NAME_UNKNOWN; +} diff --git a/source/libads/kerberos.c b/source/libads/kerberos.c index a80837cf4df..b586d842262 100644 --- a/source/libads/kerberos.c +++ b/source/libads/kerberos.c @@ -114,7 +114,14 @@ int ads_kinit_password(ADS_STRUCT *ads) char *s; int ret; - asprintf(&s, "%s@%s", ads->auth.user_name, ads->auth.realm); + if (asprintf(&s, "%s@%s", ads->auth.user_name, ads->auth.realm) == -1) { + return KRB5_CC_NOMEM; + } + + if (!ads->auth.password) { + return KRB5_LIBOS_CANTREADPWD; + } + ret = kerberos_kinit_password(s, ads->auth.password, ads->auth.time_offset); if (ret) { diff --git a/source/libads/ldap.c b/source/libads/ldap.c index b4c7c3970c0..e09ffeb3f6b 100644 --- a/source/libads/ldap.c +++ b/source/libads/ldap.c @@ -1337,9 +1337,7 @@ ADS_STATUS ads_set_machine_sd(ADS_STRUCT *ads, const char *hostname, char *dn) const char *attrs[] = {"ntSecurityDescriptor", "objectSid", 0}; char *exp = 0; size_t sd_size = 0; - struct berval **bvals = 0; struct berval bval = {0, NULL}; - prs_struct ps; prs_struct ps_wire; LDAPMessage *res = 0; @@ -1356,37 +1354,39 @@ ADS_STATUS ads_set_machine_sd(ADS_STRUCT *ads, const char *hostname, char *dn) ret = ADS_ERROR(LDAP_SUCCESS); - asprintf(&exp, "(samAccountName=%s$)", hostname); + if (asprintf(&exp, "(samAccountName=%s$)", hostname) == -1) { + DEBUG(1, ("ads_set_machine_sd: asprintf failed!\n")); + return ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + } + ret = ads_search(ads, (void *) &res, exp, attrs); if (!ADS_ERR_OK(ret)) return ret; msg = ads_first_entry(ads, res); - bvals = ldap_get_values_len(ads->ld, msg, attrs[0]); ads_pull_sid(ads, msg, attrs[1], &sid); - ads_msgfree(ads, res); -#if 0 - file_save("/tmp/sec_desc.old", bvals[0]->bv_val, bvals[0]->bv_len); -#endif - if (!(ctx = talloc_init_named("sec_io_desc"))) - return ADS_ERROR(LDAP_NO_MEMORY); - - prs_init(&ps, bvals[0]->bv_len, ctx, UNMARSHALL); - prs_append_data(&ps, bvals[0]->bv_val, bvals[0]->bv_len); - ps.data_offset = 0; - ldap_value_free_len(bvals); + if (!(ctx = talloc_init_named("sec_io_desc"))) { + ret = ADS_ERROR(LDAP_NO_MEMORY); + goto ads_set_sd_error; + } - if (!sec_io_desc("sd", &psd, &ps, 1)) + if (!ads_pull_sd(ads, ctx, msg, attrs[0], &psd)) { + ret = ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER); goto ads_set_sd_error; + } status = sec_desc_add_sid(ctx, &psd, &sid, SEC_RIGHTS_FULL_CTRL, &sd_size); - if (!NT_STATUS_IS_OK(status)) + if (!NT_STATUS_IS_OK(status)) { + ret = ADS_ERROR_NT(status); goto ads_set_sd_error; + } prs_init(&ps_wire, sd_size, ctx, MARSHALL); - if (!sec_io_desc("sd_wire", &psd, &ps_wire, 1)) + if (!sec_io_desc("sd_wire", &psd, &ps_wire, 1)) { + ret = ADS_ERROR(LDAP_NO_MEMORY); goto ads_set_sd_error; + } #if 0 file_save("/tmp/sec_desc.new", ps_wire.data_p, sd_size); @@ -1398,16 +1398,11 @@ ADS_STATUS ads_set_machine_sd(ADS_STRUCT *ads, const char *hostname, char *dn) ads_mod_ber(ctx, &mods, attrs[0], &bval); ret = ads_gen_mod(ads, dn, mods); - prs_mem_free(&ps); - prs_mem_free(&ps_wire); - talloc_destroy(ctx); - return ret; - ads_set_sd_error: - prs_mem_free(&ps); + ads_msgfree(ads, res); prs_mem_free(&ps_wire); talloc_destroy(ctx); - return ADS_ERROR(LDAP_NO_MEMORY); + return ret; } /** @@ -1613,6 +1608,60 @@ int ads_pull_sids(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, return count; } +/** + * pull a SEC_DESC from a ADS result + * @param ads connection to ads server + * @param mem_ctx TALLOC_CTX for allocating sid array + * @param msg Results of search + * @param field Attribute to retrieve + * @param sd Pointer to *SEC_DESC to store result (talloc()ed) + * @return boolean inidicating success +*/ +BOOL ads_pull_sd(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, + void *msg, const char *field, SEC_DESC **sd) +{ + struct berval **values; + prs_struct ps; + BOOL ret = False; + + values = ldap_get_values_len(ads->ld, msg, field); + + if (!values) return False; + + if (values[0]) { + prs_init(&ps, values[0]->bv_len, mem_ctx, UNMARSHALL); + prs_append_data(&ps, values[0]->bv_val, values[0]->bv_len); + ps.data_offset = 0; + + ret = sec_io_desc("sd", sd, &ps, 1); + } + + ldap_value_free_len(values); + return ret; +} + +/* + * in order to support usernames longer than 21 characters we need to + * use both the sAMAccountName and the userPrincipalName attributes + * It seems that not all users have the userPrincipalName attribute set + * + * @param ads connection to ads server + * @param mem_ctx TALLOC_CTX for allocating sid array + * @param msg Results of search + * @return the username + */ +char *ads_pull_username(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, void *msg) +{ + char *ret, *p; + + ret = ads_pull_string(ads, mem_ctx, msg, "userPrincipalName"); + if (ret && (p = strchr(ret, '@'))) { + *p = 0; + return ret; + } + return ads_pull_string(ads, mem_ctx, msg, "sAMAccountName"); +} + /** * find the update serial number - this is the core of the ldap cache diff --git a/source/libads/ldap_utils.c b/source/libads/ldap_utils.c new file mode 100644 index 00000000000..fbc9eb433f0 --- /dev/null +++ b/source/libads/ldap_utils.c @@ -0,0 +1,90 @@ +/* + Unix SMB/CIFS implementation. + + Some Helpful wrappers on LDAP + + Copyright (C) Andrew Tridgell 2001 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +/* + a wrapper around ldap_search_s that retries depending on the error code + this is supposed to catch dropped connections and auto-reconnect +*/ +ADS_STATUS ads_do_search_retry(ADS_STRUCT *ads, const char *bind_path, int scope, + const char *exp, + const char **attrs, void **res) +{ + ADS_STATUS status; + int count = 3; + char *bp; + + if (!ads->ld && + time(NULL) - ads->last_attempt < ADS_RECONNECT_TIME) { + return ADS_ERROR(LDAP_SERVER_DOWN); + } + + bp = strdup(bind_path); + + while (count--) { + status = ads_do_search_all(ads, bp, scope, exp, attrs, res); + if (ADS_ERR_OK(status)) { + DEBUG(5,("Search for %s gave %d replies\n", + exp, ads_count_replies(ads, *res))); + free(bp); + return status; + } + + if (*res) ads_msgfree(ads, *res); + *res = NULL; + DEBUG(3,("Reopening ads connection to realm '%s' after error %s\n", + ads->config.realm, ads_errstr(status))); + if (ads->ld) { + ldap_unbind(ads->ld); + } + ads->ld = NULL; + status = ads_connect(ads); + if (!ADS_ERR_OK(status)) { + DEBUG(1,("ads_search_retry: failed to reconnect (%s)\n", + ads_errstr(status))); + ads_destroy(&ads); + free(bp); + return status; + } + } + free(bp); + + DEBUG(1,("ads reopen failed after error %s\n", ads_errstr(status))); + return status; +} + + +ADS_STATUS ads_search_retry(ADS_STRUCT *ads, void **res, + const char *exp, + const char **attrs) +{ + return ads_do_search_retry(ads, ads->config.bind_path, LDAP_SCOPE_SUBTREE, + exp, attrs, res); +} + +ADS_STATUS ads_search_retry_dn(ADS_STRUCT *ads, void **res, + const char *dn, + const char **attrs) +{ + return ads_do_search_retry(ads, dn, LDAP_SCOPE_BASE, + "(objectclass=*)", attrs, res); +} diff --git a/source/nsswitch/winbindd_ads.c b/source/nsswitch/winbindd_ads.c index 4f91ed0f20c..228c4a2a088 100644 --- a/source/nsswitch/winbindd_ads.c +++ b/source/nsswitch/winbindd_ads.c @@ -31,74 +31,6 @@ static char *primary_realm; -/* - a wrapper around ldap_search_s that retries depending on the error code - this is supposed to catch dropped connections and auto-reconnect -*/ -ADS_STATUS ads_do_search_retry(ADS_STRUCT *ads, const char *bind_path, int scope, - const char *exp, - const char **attrs, void **res) -{ - ADS_STATUS status; - int count = 3; - char *bp; - - if (!ads->ld && - time(NULL) - ads->last_attempt < ADS_RECONNECT_TIME) { - return ADS_ERROR(LDAP_SERVER_DOWN); - } - - bp = strdup(bind_path); - - while (count--) { - status = ads_do_search_all(ads, bp, scope, exp, attrs, res); - if (ADS_ERR_OK(status)) { - DEBUG(5,("Search for %s gave %d replies\n", - exp, ads_count_replies(ads, *res))); - free(bp); - return status; - } - - if (*res) ads_msgfree(ads, *res); - *res = NULL; - DEBUG(3,("Reopening ads connection to realm '%s' after error %s\n", - ads->config.realm, ads_errstr(status))); - if (ads->ld) { - ldap_unbind(ads->ld); - } - ads->ld = NULL; - status = ads_connect(ads); - if (!ADS_ERR_OK(status)) { - DEBUG(1,("ads_search_retry: failed to reconnect (%s)\n", - ads_errstr(status))); - ads_destroy(&ads); - free(bp); - return status; - } - } - free(bp); - - DEBUG(1,("ads reopen failed after error %s\n", ads_errstr(status))); - return status; -} - - -ADS_STATUS ads_search_retry(ADS_STRUCT *ads, void **res, - const char *exp, - const char **attrs) -{ - return ads_do_search_retry(ads, ads->config.bind_path, LDAP_SCOPE_SUBTREE, - exp, attrs, res); -} - -ADS_STATUS ads_search_retry_dn(ADS_STRUCT *ads, void **res, - const char *dn, - const char **attrs) -{ - return ads_do_search_retry(ads, dn, LDAP_SCOPE_BASE, - "(objectclass=*)", attrs, res); -} - /* return our ads connections structure for a domain. We keep the connection open to make things faster @@ -166,37 +98,6 @@ static void sid_from_rid(struct winbindd_domain *domain, uint32 rid, DOM_SID *si sid_append_rid(sid, rid); } -/* turn a sAMAccountType into a SID_NAME_USE */ -static enum SID_NAME_USE ads_atype_map(uint32 atype) -{ - switch (atype & 0xF0000000) { - case ATYPE_GLOBAL_GROUP: - return SID_NAME_DOM_GRP; - case ATYPE_ACCOUNT: - return SID_NAME_USER; - default: - DEBUG(1,("hmm, need to map account type 0x%x\n", atype)); - } - return SID_NAME_UNKNOWN; -} - -/* - in order to support usernames longer than 21 characters we need to - use both the sAMAccountName and the userPrincipalName attributes - It seems that not all users have the userPrincipalName attribute set -*/ -static char *pull_username(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, void *msg) -{ - char *ret, *p; - - ret = ads_pull_string(ads, mem_ctx, msg, "userPrincipalName"); - if (ret && (p = strchr(ret, '@'))) { - *p = 0; - return ret; - } - return ads_pull_string(ads, mem_ctx, msg, "sAMAccountName"); -} - /* Query display info for a realm. This is the basic user list fn */ static NTSTATUS query_user_list(struct winbindd_domain *domain, @@ -254,7 +155,7 @@ static NTSTATUS query_user_list(struct winbindd_domain *domain, continue; } - name = pull_username(ads, mem_ctx, msg); + name = ads_pull_username(ads, mem_ctx, msg); gecos = ads_pull_string(ads, mem_ctx, msg, "name"); if (!ads_pull_sid(ads, msg, "objectSid", &sid)) { DEBUG(1,("No sid for %s !?\n", name)); @@ -341,7 +242,7 @@ static NTSTATUS enum_dom_groups(struct winbindd_domain *domain, &account_type) || !(account_type & ATYPE_GLOBAL_GROUP)) continue; - name = pull_username(ads, mem_ctx, msg); + name = ads_pull_username(ads, mem_ctx, msg); gecos = ads_pull_string(ads, mem_ctx, msg, "name"); if (!ads_pull_sid(ads, msg, "objectSid", &sid)) { DEBUG(1,("No sid for %s !?\n", name)); @@ -371,63 +272,21 @@ done: return status; } - /* convert a single name to a sid in a domain */ static NTSTATUS name_to_sid(struct winbindd_domain *domain, const char *name, DOM_SID *sid, enum SID_NAME_USE *type) { - ADS_STRUCT *ads = NULL; - const char *attrs[] = {"objectSid", "sAMAccountType", NULL}; - int count; - ADS_STATUS rc; - void *res = NULL; - char *exp; - uint32 t; - NTSTATUS status = NT_STATUS_UNSUCCESSFUL; + ADS_STRUCT *ads; DEBUG(3,("ads: name_to_sid\n")); ads = ads_cached_connection(domain); - if (!ads) goto done; - - /* accept either the win2000 or the pre-win2000 username */ - asprintf(&exp, "(|(sAMAccountName=%s)(userPrincipalName=%s@%s))", - name, name, ads->config.realm); - rc = ads_search_retry(ads, &res, exp, attrs); - free(exp); - if (!ADS_ERR_OK(rc)) { - DEBUG(1,("name_to_sid ads_search: %s\n", ads_errstr(rc))); - goto done; - } + if (!ads) + return NT_STATUS_UNSUCCESSFUL; - count = ads_count_replies(ads, res); - if (count != 1) { - DEBUG(1,("name_to_sid: %s not found\n", name)); - goto done; - } - - if (!ads_pull_sid(ads, res, "objectSid", sid)) { - DEBUG(1,("No sid for %s !?\n", name)); - goto done; - } - - if (!ads_pull_uint32(ads, res, "sAMAccountType", &t)) { - DEBUG(1,("No sAMAccountType for %s !?\n", name)); - goto done; - } - - *type = ads_atype_map(t); - - status = NT_STATUS_OK; - - DEBUG(3,("ads name_to_sid mapped %s\n", name)); - -done: - if (res) ads_msgfree(ads, res); - - return status; + return ads_name_to_sid(ads, name, sid, type); } /* convert a sid to a user or group name */ @@ -438,46 +297,12 @@ static NTSTATUS sid_to_name(struct winbindd_domain *domain, enum SID_NAME_USE *type) { ADS_STRUCT *ads = NULL; - const char *attrs[] = {"userPrincipalName", - "sAMAccountName", - "sAMAccountType", NULL}; - ADS_STATUS rc; - void *msg = NULL; - char *exp; - char *sidstr; - uint32 atype; - NTSTATUS status = NT_STATUS_UNSUCCESSFUL; - DEBUG(3,("ads: sid_to_name\n")); - ads = ads_cached_connection(domain); - if (!ads) goto done; - - sidstr = sid_binstring(sid); - asprintf(&exp, "(objectSid=%s)", sidstr); - rc = ads_search_retry(ads, &msg, exp, attrs); - free(exp); - free(sidstr); - if (!ADS_ERR_OK(rc)) { - DEBUG(1,("sid_to_name ads_search: %s\n", ads_errstr(rc))); - goto done; - } - - if (!ads_pull_uint32(ads, msg, "sAMAccountType", &atype)) { - goto done; - } - - *name = pull_username(ads, mem_ctx, msg); - *type = ads_atype_map(atype); - - status = NT_STATUS_OK; - - DEBUG(3,("ads sid_to_name mapped %s\n", *name)); - -done: - if (msg) ads_msgfree(ads, msg); + if (!ads) + return NT_STATUS_UNSUCCESSFUL; - return status; + return ads_sid_to_name(ads, mem_ctx, sid, name, type); } @@ -504,7 +329,7 @@ static BOOL dn_lookup(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, goto failed; } - (*name) = pull_username(ads, mem_ctx, res); + (*name) = ads_pull_username(ads, mem_ctx, res); if (!ads_pull_uint32(ads, res, "sAMAccountType", &atype)) { goto failed; @@ -566,7 +391,7 @@ static NTSTATUS query_user(struct winbindd_domain *domain, goto done; } - info->acct_name = pull_username(ads, mem_ctx, msg); + info->acct_name = ads_pull_username(ads, mem_ctx, msg); info->full_name = ads_pull_string(ads, mem_ctx, msg, "name"); if (!ads_pull_sid(ads, msg, "objectSid", &sid)) { DEBUG(1,("No sid for %d !?\n", user_rid)); -- cgit From ba754b57ddb78dadedcb7b5877cbee5bab08181e Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 27 Sep 2002 16:20:09 +0000 Subject: Sorry to touch such an internal function. But I was quite surprised that 'security = user', 'encrypt passwords = no' did not work anymore. This is on quite a standard SuSE 7.3, ./configure.developer --with-tdbsam. I can provide a config.log / config.h on demand. Please re-check for consequences, I don't really oversee that file. Thanks, Volker --- source/auth/pass_check.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/source/auth/pass_check.c b/source/auth/pass_check.c index 63918796efb..d98ee96edd6 100644 --- a/source/auth/pass_check.c +++ b/source/auth/pass_check.c @@ -609,6 +609,8 @@ NTSTATUS pass_check(const struct passwd *pass, const char *user, const char *pas if (((!*password) || (!pwlen)) && !lp_null_passwords()) return NT_STATUS_LOGON_FAILURE; + this_salt[0] = 0; + #if defined(WITH_PAM) /* @@ -645,8 +647,10 @@ NTSTATUS pass_check(const struct passwd *pass, const char *user, const char *pas perhaps for IPC password changing requests */ spass = getspnam(pass->pw_name); - if (spass && spass->sp_pwdp) + if (spass && spass->sp_pwdp) { fstrcpy(this_crypted, spass->sp_pwdp); + fstrcpy(this_salt, spass->sp_pwdp); + } } #elif defined(IA_UINFO) { @@ -705,7 +709,8 @@ NTSTATUS pass_check(const struct passwd *pass, const char *user, const char *pas #endif /* extract relevant info */ - fstrcpy(this_salt, pass->pw_passwd); + if (this_salt[0] == 0) + fstrcpy(this_salt, pass->pw_passwd); #if defined(HAVE_TRUNCATED_SALT) /* crypt on some platforms (HPUX in particular) -- cgit From bba2ee620a286dcc7fcd509c8954227e203274a1 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 27 Sep 2002 16:45:57 +0000 Subject: Apply Vance Lankhaars' cifs2002 documentation patch - mostly grammar and English typo fixes and updates of documentation --- docs/README.Win32-Viruses | 23 ++-- docs/docbook/docbook.txt | 2 +- docs/docbook/global.ent | 2 +- docs/docbook/manpages/findsmb.1.sgml | 4 +- docs/docbook/manpages/make_smbcodepage.1.sgml | 4 +- docs/docbook/manpages/nmbd.8.sgml | 16 +-- docs/docbook/manpages/pdbedit.8.sgml | 45 +++---- docs/docbook/manpages/rpcclient.1.sgml | 34 ++--- docs/docbook/manpages/samba.7.sgml | 31 ++--- docs/docbook/manpages/smb.conf.5.sgml | 4 +- docs/docbook/manpages/smbcacls.1.sgml | 6 +- docs/docbook/manpages/smbcontrol.1.sgml | 2 +- docs/docbook/manpages/smbgroupedit.8.sgml | 8 +- docs/docbook/manpages/smbmount.8.sgml | 4 +- docs/docbook/manpages/smbpasswd.8.sgml | 27 ++-- docs/docbook/manpages/smbspool.8.sgml | 6 +- docs/docbook/manpages/smbtar.1.sgml | 4 +- docs/docbook/manpages/swat.8.sgml | 4 +- docs/docbook/manpages/winbindd.8.sgml | 174 ++++---------------------- 19 files changed, 138 insertions(+), 262 deletions(-) diff --git a/docs/README.Win32-Viruses b/docs/README.Win32-Viruses index 07f03360cbc..4646da83cf2 100644 --- a/docs/README.Win32-Viruses +++ b/docs/README.Win32-Viruses @@ -1,9 +1,9 @@ -While this article is specific to the recent Nimda worm, +While this article is specific to the Nimda worm, the information can be applied to preventing the spread of many Win32 viruses. Thanks to the Samba Users Group of Japan (SUGJ) for this article. =============================================================================== -Steps againt Nimba Worm for Samba +Steps against Nimba Worm for Samba Author: HASEGAWA Yosuke Translator: TAKAHASHI Motonobu @@ -14,11 +14,11 @@ The information in this article applies to Windows 95/98/Me/NT/2000 SYMPTOMS - This article has described the measure against Nimba Worm for Samba + This article describes measures against Nimba Worm for Samba server. DESCRIPTION - Nimba Worm is infected through the shared disk on a network besides + Nimba Worm is infected through shared disks on a network, as well as through Microsoft IIS, Internet Explorer and mailer of Outlook series. At this time, the worm copies itself by the name *.nws and *.eml on @@ -36,23 +36,22 @@ DESCRIPTION veto files = /*.eml/*.nws/riched20.dll/ ----- - Setting up "veto files" parameter, the matched files on the Samba - server are completely hidden from the clients and become impossible + By setting the "veto files" parameter, matched files on the Samba + server are completely hidden from the clients and making it impossible to access them at all. - In addition to it, the following setting are also pointed out by the + In addition to it, the following setting is also pointed out by the samba-jp:09448 thread: when the - "(Jreadme.txt.{3050F4D8-98B5-11CF-BB82-00AA00BDCE0B}"(B file exists on - a Samba server, it is visible only with "readme.txt" and a dangerous - code may be performed when this file is double-clicked. + "readme.txt.{3050F4D8-98B5-11CF-BB82-00AA00BDCE0B}" file exists on + a Samba server, it is visible only as "readme.txt" and dangerous + code may be executed if this file is double-clicked. Setting the following, ----- veto files = /*.{*}/ ----- - no files having CLSID in its file extension can be accessed from any + any files having CLSID in its file extension will be inaccessible from any clients. This technical article is created based on the discussion of samba-jp:09448 and samba-jp:10900 threads. - diff --git a/docs/docbook/docbook.txt b/docs/docbook/docbook.txt index 019b073b511..84848fd88f2 100644 --- a/docs/docbook/docbook.txt +++ b/docs/docbook/docbook.txt @@ -40,7 +40,7 @@ The Output ---------- The current Samba CVS tree contains the SGML/DocBook source files as well -as the following autogenerated formats +as the following autogenerated formats: * man pages * HTML diff --git a/docs/docbook/global.ent b/docs/docbook/global.ent index 91286de98be..d88c489a4a2 100644 --- a/docs/docbook/global.ent +++ b/docs/docbook/global.ent @@ -21,7 +21,7 @@ - + diff --git a/docs/docbook/manpages/findsmb.1.sgml b/docs/docbook/manpages/findsmb.1.sgml index d8f436c4a12..7b2371fdb71 100644 --- a/docs/docbook/manpages/findsmb.1.sgml +++ b/docs/docbook/manpages/findsmb.1.sgml @@ -45,7 +45,7 @@ will probe the subnet of the machine where findsmb is run. This value is passed to nmblookup as part of the - -B option + -B option. @@ -73,7 +73,7 @@ get proper responses from Windows 95 and Windows 98 machines, the command must be run as root. - For example running findsmb on a machine + For example, running findsmb on a machine without nmbd running would yield output similar to the following diff --git a/docs/docbook/manpages/make_smbcodepage.1.sgml b/docs/docbook/manpages/make_smbcodepage.1.sgml index a36f9b968c1..774b3d8f8bb 100644 --- a/docs/docbook/manpages/make_smbcodepage.1.sgml +++ b/docs/docbook/manpages/make_smbcodepage.1.sgml @@ -57,10 +57,10 @@ inputfile This is the input file to process. In - the c case this will be a text + the c case, this will be a text codepage definition file such as the ones found in the Samba source/codepages directory. In - the d case this will be the + the d case, this will be the binary format codepage definition file normally found in the lib/codepages directory in the Samba install directory path. diff --git a/docs/docbook/manpages/nmbd.8.sgml b/docs/docbook/manpages/nmbd.8.sgml index d5c89064e74..2b8e0661203 100644 --- a/docs/docbook/manpages/nmbd.8.sgml +++ b/docs/docbook/manpages/nmbd.8.sgml @@ -67,7 +67,7 @@ In addition, nmbd can act as a WINS proxy, relaying broadcast queries from clients that do - not understand how to talk the WINS protocol to a WIN + not understand how to talk the WINS protocol to a WINS server. @@ -99,7 +99,7 @@ If this parameter is specified it causes the server to run "interactively", not as a daemon, even if the server is executed on the command line of a shell. Setting this - parameter negates the implicit deamon mode when run from the + parameter negates the implicit daemon mode when run from the command line. @@ -136,9 +136,9 @@ Samba as part of the build process. Common defaults are /usr/local/samba/lib/lmhosts, /usr/samba/lib/lmhosts or - /etc/lmhosts. See the - lmhosts(5) man page for details on the - contents of this file. + /etc/lmhosts. See the + lmhosts(5) + man page for details on the contents of this file. @@ -169,15 +169,15 @@ Note that specifying this parameter here will override the log level parameter in the - smb.conf file. + smb.conf(5) file. -l <log directory> The -l parameter specifies a directory into which the "log.nmbd" log file will be created - for operational data from the running - nmbd server. The default log directory is compiled into Samba + for operational data from the running nmbd + server. The default log directory is compiled into Samba as part of the build process. Common defaults are /usr/local/samba/var/log.nmb, /usr/samba/var/log.nmb or diff --git a/docs/docbook/manpages/pdbedit.8.sgml b/docs/docbook/manpages/pdbedit.8.sgml index 213275b7ccb..45ccbaee64a 100644 --- a/docs/docbook/manpages/pdbedit.8.sgml +++ b/docs/docbook/manpages/pdbedit.8.sgml @@ -41,11 +41,11 @@ Samba suite. The pdbedit program is used to manage the users accounts - stored in the sam database and can be run only by root. + stored in the sam database and can only be run by root. - The pdbedit tool use the passdb modular interface and is + The pdbedit tool uses the passdb modular interface and is independent from the kind of users database used (currently there - are smbpasswd, ldap, nis+ and tdb based and more can be addedd + are smbpasswd, ldap, nis+ and tdb based and more can be added without changing the tool). There are five main ways to use pdbedit: adding a user account, @@ -58,7 +58,7 @@ -l - This option list all the user accounts + This option lists all the user accounts present in the users database. This option prints a list of user/uid pairs separated by the ':' character. @@ -75,8 +75,8 @@ -v - This option sets the verbose listing format. - It will make pdbedit list the users in the database printing + This option enables the verbose listing format. + It causes pdbedit to list the users in the database, printing out the account fields in a descriptive format. Example: pdbedit -l -v @@ -108,7 +108,7 @@ -w This option sets the "smbpasswd" listing format. - It will make pdbedit list the users in the database printing + It will make pdbedit list the users in the database, printing out the account fields in a format compatible with the smbpasswd file format. (see the smbpasswd(5) for details) @@ -124,8 +124,8 @@ -u username - This option specifies that the username to be - used for the operation requested (listing, adding, removing) + This option specifies the username to be + used for the operation requested (listing, adding, removing). It is required in add, remove and modify operations and optional in list operations. @@ -198,9 +198,9 @@ -a This option is used to add a user into the - database. This command need the user name be specified with - the -u switch. When adding a new user pdbedit will also - ask for the password to be used + database. This command needs a user name specified with + the -u switch. When adding a new user, pdbedit will also + ask for the password to be used. Example: pdbedit -a -u sorce new password: @@ -227,7 +227,7 @@ -x This option causes pdbedit to delete an account - from the database. It need the username be specified with the + from the database. It needs a username specified with the -u switch. Example: pdbedit -x -u bob @@ -237,22 +237,25 @@ -i passdb-backend - Use a different passdb backend to retrieve users than the one specified in smb.conf. Can be used to import data into your - local user database. + Use a different passdb backend to retrieve users + than the one specified in smb.conf. Can be used to import data into + your local user database. - This option will ease migration from one passdb backend to another. - + This option will ease migration from one passdb backend to + another. - Example: pdbedit -i smbpasswd:/etc/smbpasswd.old - + Example: pdbedit -i smbpasswd:/etc/smbpasswd.old + -e passdb-backend - Export all currently available users to the specified password database backend. + Exports all currently available users to the + specified password database backend. - This option will ease migration from one passdb backend to another and will ease backupping + This option will ease migration from one passdb backend to + another and will ease backing up. Example: pdbedit -e smbpasswd:/root/samba-users.backup diff --git a/docs/docbook/manpages/rpcclient.1.sgml b/docs/docbook/manpages/rpcclient.1.sgml index f1ba474cfba..7a7a19c837b 100644 --- a/docs/docbook/manpages/rpcclient.1.sgml +++ b/docs/docbook/manpages/rpcclient.1.sgml @@ -127,8 +127,8 @@ -l|--logfile=logbasename File name for log/debug files. The extension - '.client' will be appended. The log file is never removed - by the client. + '.client' will be appended. The log file is + never removed by the client. @@ -137,14 +137,15 @@ -N|--nopass instruct rpcclient not to ask - for a password. By default, rpcclient will prompt - for a password. See also the -U option. + for a password. By default, rpcclient will + prompt for a password. See also the -U + option. -s|--conf=smb.conf - Specifies the location of the all important + Specifies the location of the all-important smb.conf file. @@ -162,8 +163,8 @@ A third option is to use a credentials file which contains the plaintext of the username and password. This - option is mainly provided for scripts where the admin doesn't - desire to pass the credentials on the command line or via environment + option is mainly provided for scripts where the admin does not + wish to pass the credentials on the command line or via environment variables. If this method is used, make certain that the permissions on the file restrict access from unwanted users. See the -A for more details. @@ -203,7 +204,7 @@ of SIDs to usernames. - lookupnames - Resolve s list + lookupnames - Resolve a list of usernames to SIDs. @@ -290,7 +291,7 @@ enumjobs <printer> - - List the jobs and status of a given printer. + - List the jobs and status of a given printer. This command corresponds to the MS Platform SDK EnumJobs() function (* This command is currently unimplemented). @@ -339,7 +340,7 @@ getdriverdir <arch> - Execute a GetPrinterDriverDirectory() - RPC to retreive the SMB share name and subdirectory for + RPC to retrieve the SMB share name and subdirectory for storing printer driver files for a given architecture. Possible values for arch are "Windows 4.0" (for Windows 95/98), "Windows NT x86", "Windows NT PowerPC", "Windows @@ -359,10 +360,11 @@ against a given printer. - setdriver <printername> <drivername> - - Execute a SetPrinter() command to update the printer driver associated - with an installed printer. The printer driver must already be correctly - installed on the print server. + setdriver <printername> + <drivername> + - Execute a SetPrinter() command to update the printer driver + associated with an installed printer. The printer driver must + already be correctly installed on the print server. See also the enumprinters and enumdrivers commands for obtaining a list of @@ -374,8 +376,8 @@ GENERAL OPTIONS - debuglevel - Set the current debug level - used to log information. + debuglevel - Set the current + debug level used to log information. help (?) - Print a listing of all known commands or extended help on a particular command. diff --git a/docs/docbook/manpages/samba.7.sgml b/docs/docbook/manpages/samba.7.sgml index 5d81d9d4468..ce443e78d97 100644 --- a/docs/docbook/manpages/samba.7.sgml +++ b/docs/docbook/manpages/samba.7.sgml @@ -22,8 +22,10 @@ The Samba software suite is a collection of programs that implements the Server Message Block (commonly abbreviated as SMB) protocol for UNIX systems. This protocol is sometimes - also referred to as the Common Internet File System (CIFS), - LanManager or NetBIOS protocol. + also referred to as the Common Internet File System (CIFS). For a + more thorough description, see + http://www.ubiqx.org/cifs/. Samba also implements the NetBIOS + protocol in nmbd. @@ -39,7 +41,7 @@ nmbd The nmbd - daemon provides NetBIOS nameserving and browsing + daemon provides NetBIOS nameservice and browsing support. The configuration file for this daemon is described in smb.conf @@ -68,7 +70,7 @@ testprns The testprns utility supports testing printer names defined - in your printcap> file used + in your printcap file used by Samba. @@ -115,12 +117,14 @@ component is described in a separate manual page. It is strongly recommended that you read the documentation that comes with Samba and the manual pages of those components that you use. If the - manual pages aren't clear enough then please send a patch or - bug report to - samba@samba.org - - + manual pages and documents aren't clear enough then please visit + http://devel.samba.org + for information on how to file a bug report or submit a patch. + If you require help, visit the Samba webpage at + http://www.samba.org/ and + explore the many option available to you. + @@ -164,11 +168,10 @@ http://lists.samba.org. - If you have patches to submit or bugs to report - then you may mail them directly to samba-patches@samba.org. - Note, however, that due to the enormous popularity of this - package the Samba Team may take some time to respond to mail. We - prefer patches in diff -u format. + If you have patches to submit, visit + http://devel.samba.org/ + for information on how to do it properly. We prefer patches in + diff -u format. diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index 0c565e7e511..c0893f1005a 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -2904,9 +2904,9 @@ system print command such as lpr(1) or lp(1). - This paramater does not accept % marcos, becouse + This paramater does not accept % macros, because many parts of the system require this value to be - constant for correct operation + constant for correct operation. Default: specified at compile time, usually "nobody" diff --git a/docs/docbook/manpages/smbcacls.1.sgml b/docs/docbook/manpages/smbcacls.1.sgml index 69aa9674928..766d2a78b11 100644 --- a/docs/docbook/manpages/smbcacls.1.sgml +++ b/docs/docbook/manpages/smbcacls.1.sgml @@ -35,8 +35,8 @@ This tool is part of the Samba suite. - The smbcacls program manipulates NT Access Control Lists - (ACLs) on SMB file shares. + The smbcacls program manipulates NT Access Control + Lists (ACLs) on SMB file shares. @@ -79,7 +79,7 @@ -S acls This command sets the ACLs on the file with only the ones specified on the command line. All other ACLs are - erased. Note that the ACL specified must contain at least a revision, + erased. Note that the ACL specified must contain at least a revision, type, owner and group for the call to succeed. diff --git a/docs/docbook/manpages/smbcontrol.1.sgml b/docs/docbook/manpages/smbcontrol.1.sgml index 9a6f31b336a..166ef63e87f 100644 --- a/docs/docbook/manpages/smbcontrol.1.sgml +++ b/docs/docbook/manpages/smbcontrol.1.sgml @@ -121,7 +121,7 @@ The printnotify message-type sends a message to smbd which in turn sends a printer notify message to - any Windows NT clients connected to a printer. This message-type + any Windows NT clients connected to a printer. This message-type takes the following arguments: diff --git a/docs/docbook/manpages/smbgroupedit.8.sgml b/docs/docbook/manpages/smbgroupedit.8.sgml index b9607312ffe..53bc0bec610 100644 --- a/docs/docbook/manpages/smbgroupedit.8.sgml +++ b/docs/docbook/manpages/smbgroupedit.8.sgml @@ -19,7 +19,7 @@ smbroupedit -v [l|s] - -a UNIX-groupname [-d NT-groupname|-p prividge| + -a UNIX-groupname [-d NT-groupname|-p privilege|] @@ -73,10 +73,10 @@ etc. For examples, Users - SID : S-1-5-32-545 + SID : S-1-5-32-545 Unix group: -1 Group type: Local group - Comment : + Comment : Privilege : No privilege @@ -195,7 +195,7 @@ Domain Admins (S-1-5-21-1108995562-3116817432-1375597819-512) -> -1 -To verify that you mapping has taken effect: +To verify that your mapping has taken effect: diff --git a/docs/docbook/manpages/smbmount.8.sgml b/docs/docbook/manpages/smbmount.8.sgml index ec4dbbaff1f..c4b91a5572d 100644 --- a/docs/docbook/manpages/smbmount.8.sgml +++ b/docs/docbook/manpages/smbmount.8.sgml @@ -73,7 +73,7 @@ given. - Note that password which contain the arguement delimiter + Note that passwords which contain the argument delimiter character (i.e. a comma ',') will failed to be parsed correctly on the command line. However, the same password defined in the PASSWD environment variable or a credentials file (see @@ -222,7 +222,7 @@ ttl=<arg> - how long a directory listing is cached in milliseconds + sets how long a directory listing is cached in milliseconds (also affects visibility of file size and date changes). A higher value means that changes on the server take longer to be noticed but it can give diff --git a/docs/docbook/manpages/smbpasswd.8.sgml b/docs/docbook/manpages/smbpasswd.8.sgml index 3c7a6a5150a..c0b7ac33591 100644 --- a/docs/docbook/manpages/smbpasswd.8.sgml +++ b/docs/docbook/manpages/smbpasswd.8.sgml @@ -24,7 +24,6 @@ -r <remote machine> -R <name resolve order> -m - -j DOMAIN -U username[%password] -h -s @@ -56,7 +55,7 @@ UNIX machine the encrypted SMB passwords are usually stored in the smbpasswd(5) file. - When run by an ordinary user with no options. smbpasswd + When run by an ordinary user with no options, smbpasswd will prompt them for their old SMB password and then ask them for their new password twice, to ensure that the new password was typed correctly. No passwords will be echoed on the screen @@ -89,7 +88,7 @@ password command. Note that the default passdb backends require the user to already exist in the system password file (usually /etc/passwd), else the request to add the - user will fail. + user will fail. This option is only available when running smbpasswd as root. @@ -220,12 +219,12 @@ -R name resolve order - This option allows the user of smbpasswd to determine + This option allows the user of smbpasswd to determine what name resolution services to use when looking up the NetBIOS name of the host being connected to. - The options are :"lmhosts", "host", "wins" and "bcast". They cause - names to be resolved as follows : + The options are :"lmhosts", "host", "wins" and "bcast". They + cause names to be resolved as follows : lmhosts : Lookup an IP address in the Samba lmhosts file. If the line in lmhosts has @@ -244,14 +243,14 @@ wins : Query a name with the IP address listed in the wins server - parameter. If no WINS server has been specified this method - will be ignored. + parameter. If no WINS server has been specified this method + will be ignored. bcast : Do a broadcast on each of the known local interfaces listed in the interfaces parameter. This is the least - reliable of the name resolution methods as it depends on the - target host being on a locally connected subnet. + reliable of the name resolution methods as it depends on the + target host being on a locally connected subnet. The default order is lmhosts, host, wins, bcast @@ -267,7 +266,7 @@ being changed is a MACHINE account. Currently this is used when Samba is being used as an NT Primary Domain Controller. - This option is only available when running smbpasswd as root. + This option is only available when running smbpasswd as root. @@ -305,15 +304,15 @@ -w password - This parameter is only available is Samba - has been configured to use the experiemental + This parameter is only available if Samba + has been configured to use the experimental --with-ldapsam option. The -w switch is used to specify the password to be used with the ldap admin dn. Note that the password is stored in the private/secrets.tdb and is keyed off of the admin's DN. This means that if the value of ldap - admin dn ever changes, the password will beed to be + admin dn ever changes, the password will need to be manually updated as well. diff --git a/docs/docbook/manpages/smbspool.8.sgml b/docs/docbook/manpages/smbspool.8.sgml index d5c9c0a1148..d164cb0864e 100644 --- a/docs/docbook/manpages/smbspool.8.sgml +++ b/docs/docbook/manpages/smbspool.8.sgml @@ -9,7 +9,7 @@ smbspool - send print file to an SMB printer + send a print file to an SMB printer @@ -79,11 +79,11 @@ The copies argument (argv[4]) contains the number of copies to be printed of the named file. If - no filename is provided than this argument is not used by + no filename is provided then this argument is not used by smbspool. The options argument (argv[5]) contains - the print options in a single string and is presently + the print options in a single string and is currently not used by smbspool. The filename argument (argv[6]) contains the diff --git a/docs/docbook/manpages/smbtar.1.sgml b/docs/docbook/manpages/smbtar.1.sgml index d1585d7ca39..bd70493b6bf 100644 --- a/docs/docbook/manpages/smbtar.1.sgml +++ b/docs/docbook/manpages/smbtar.1.sgml @@ -164,7 +164,7 @@ BUGS The smbtar script has different - options from ordinary tar and tar called from smbclient. + options from ordinary tar and from smbclient's tar command. @@ -173,7 +173,7 @@ Sites that are more careful about security may not like the way the script handles PC passwords. Backup and restore work - on entire shares, should work on file lists. smbtar works best + on entire shares; should work on file lists. smbtar works best with GNU tar and may not work well with other versions. diff --git a/docs/docbook/manpages/swat.8.sgml b/docs/docbook/manpages/swat.8.sgml index dc6989d5663..c0052f3d53d 100644 --- a/docs/docbook/manpages/swat.8.sgml +++ b/docs/docbook/manpages/swat.8.sgml @@ -62,7 +62,7 @@ swat in demo mode. In that mode anyone will be able to modify the smb.conf file. - Do NOT enable this option on a production + WARNING: Do NOT enable this option on a production server. @@ -168,7 +168,7 @@ swat will rewrite your smb.conf file. It will rearrange the entries and delete all - comments, include= and copy=" + comments, include= and copy= options. If you have a carefully crafted smb.conf then back it up or don't use swat! diff --git a/docs/docbook/manpages/winbindd.8.sgml b/docs/docbook/manpages/winbindd.8.sgml index 0325f9bfe14..32ea86b0d69 100644 --- a/docs/docbook/manpages/winbindd.8.sgml +++ b/docs/docbook/manpages/winbindd.8.sgml @@ -46,10 +46,10 @@ The pam_winbind module in the 2.2.2 release only supports the auth and account - module-types. The latter is simply + module-types. The latter simply performs a getpwnam() to verify that the system can obtain a uid for the user. If the libnss_winbind library has been correctly - installed, this should always suceed. + installed, this should always succeed. The following nsswitch databases are implemented by @@ -156,156 +156,26 @@ group: files winbind file. All parameters should be specified in the [global] section of smb.conf. - - - winbind separator - The winbind separator option allows you - to specify how NT domain names and user names are combined - into unix user names when presented to users. By default, - winbindd will use the traditional '\' - separator so that the unix user names look like - DOMAIN\username. In some cases this separator character may - cause problems as the '\' character has special meaning in - unix shells. In that case you can use the winbind separator - option to specify an alternative separator character. Good - alternatives may be '/' (although that conflicts - with the unix directory separator) or a '+ 'character. - The '+' character appears to be the best choice for 100% - compatibility with existing unix utilities, but may be an - aesthetically bad choice depending on your taste. - - Default: winbind separator = \ - - Example: winbind separator = + - - - - - winbind uid - The winbind uid parameter specifies the - range of user ids that are allocated by the winbindd daemon. - This range of ids should have no existing local or NIS users - within it as strange conflicts can occur otherwise. - - Default: winbind uid = <empty string> - - Example: winbind uid = 10000-20000 - - - - - - winbind gid - The winbind gid parameter specifies the - range of group ids that are allocated by the winbindd daemon. - This range of group ids should have no existing local or NIS - groups within it as strange conflicts can occur otherwise. - - Default: winbind gid = <empty string> - - Example: winbind gid = 10000-20000 - - - - - - winbind cache time - This parameter specifies the number of - seconds the winbindd daemon will cache user and group information - before querying a Windows NT server again. When a item in the - cache is older than this time winbindd will ask the domain - controller for the sequence number of the server's account database. - If the sequence number has not changed then the cached item is - marked as valid for a further winbind cache time - seconds. Otherwise the item is fetched from the - server. This means that as long as the account database is not - actively changing winbindd will only have to send one sequence - number query packet every winbind cache time - seconds. - - Default: winbind cache time = 15 - - - - - winbind enum users - On large installations it may be necessary - to suppress the enumeration of users through the - setpwent(), getpwent() and - endpwent() group of system calls. If - the winbind enum users parameter is false, - calls to the getpwent system call will not - return any data. - - Warning: Turning off user enumeration - may cause some programs to behave oddly. For example, the finger - program relies on having access to the full user list when - searching for matching usernames. - - Default: winbind enum users = yes - - - - - winbind enum groups - On large installations it may be necessary - to suppress the enumeration of groups through the - setgrent(), getgrent() and - endgrent() group of system calls. If - the winbind enum groups parameter is - false, calls to the getgrent() system - call will not return any data. - - Warning: Turning off group - enumeration may cause some programs to behave oddly. - - - Default: winbind enum groups = no - - - - - - - template homedir - When filling out the user information - for a Windows NT user, the winbindd daemon - uses this parameter to fill in the home directory for that user. - If the string %D is present it is - substituted with the user's Windows NT domain name. If the - string %U is present it is substituted - with the user's Windows NT user name. - - Default: template homedir = /home/%D/%U - - - - - - template shell - When filling out the user information for - a Windows NT user, the winbindd daemon - uses this parameter to fill in the shell for that user. - - - Default: template shell = /bin/false - - - - - winbind use default domain - This parameter specifies whether the winbindd - daemon should operate on users without domain component in their username. - Users without a domain component are treated as is part of the winbindd server's - own domain. While this does not benifit Windows users, it makes SSH, FTP and e-mail - function in a way much closer to the way they would in a native unix system. - - Default: winbind use default domain = <falseg> - - Example: winbind use default domain = true - - - + + + winbind separator + + winbind uid + + winbind gid + + winbind cache time + + winbind enum users + + winbind enum groups + + template homedir + + template shell + + winbind use default domain + -- cgit From c7de62d839634a85295d1a0ef5a48270ef30aa93 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 27 Sep 2002 16:51:22 +0000 Subject: Touching somebody else's code again... Sorry, Richard. smbclient would announce that it can send UNICODE, but would send the plain text password in ASCII. This confused Samba HEAD somewhat. This change has been tested against Samba HEAD of today and Samba 2.2.1a. I do not have any other servers that do plain text passwords. Anybody? Volker --- source/libsmb/cliconnect.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index 62acccdfb77..ebadafd5f05 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -188,7 +188,14 @@ static BOOL cli_session_setup_plaintext(struct cli_state *cli, char *user, int passlen; char *p; - passlen = clistr_push(cli, pword, pass, sizeof(pword), STR_TERMINATE|STR_ASCII); + int push_flags = STR_TERMINATE; + + if (capabilities & CAP_UNICODE) + push_flags |= STR_UNICODE; + else + push_flags |= STR_ASCII; + + passlen = clistr_push(cli, pword, pass, sizeof(pword), push_flags); set_message(cli->outbuf,13,0,True); SCVAL(cli->outbuf,smb_com,SMBsesssetupX); @@ -202,7 +209,7 @@ static BOOL cli_session_setup_plaintext(struct cli_state *cli, char *user, SSVAL(cli->outbuf,smb_vwv8,0); SIVAL(cli->outbuf,smb_vwv11,capabilities); p = smb_buf(cli->outbuf); - p += clistr_push(cli, p, pword, -1, STR_TERMINATE); /* password */ + p += clistr_push(cli, p, pass, -1, push_flags); /* password */ SSVAL(cli->outbuf,smb_vwv7,PTR_DIFF(p, smb_buf(cli->outbuf))); p += clistr_push(cli, p, user, -1, STR_TERMINATE); /* username */ p += clistr_push(cli, p, workgroup, -1, STR_TERMINATE); /* workgroup */ -- cgit From e42b76337b9a01fee84bc95d6899a724b2fdab29 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 27 Sep 2002 18:49:35 +0000 Subject: HEAD and APP-HEAD spoolss parsing was out of sync. This MUST NOT HAPPEN ! Jeremy. --- source/rpc_parse/parse_spoolss.c | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/source/rpc_parse/parse_spoolss.c b/source/rpc_parse/parse_spoolss.c index 36b00ff55db..783dd97ebf5 100644 --- a/source/rpc_parse/parse_spoolss.c +++ b/source/rpc_parse/parse_spoolss.c @@ -2503,7 +2503,7 @@ BOOL smb_io_printer_info_2(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_2 *info, { prs_struct *ps=&buffer->prs; uint32 dm_offset, sd_offset, current_offset; - uint32 dummy_value = 0; + uint32 dummy_value = 0, has_secdesc = 0; prs_debug(ps, depth, desc, "smb_io_printer_info_2"); depth++; @@ -2541,7 +2541,7 @@ BOOL smb_io_printer_info_2(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_2 *info, /* save current offset for the sec_desc */ sd_offset = prs_offset(ps); - if (!prs_uint32("sec_desc", ps, depth, &dummy_value)) + if (!prs_uint32("sec_desc", ps, depth, &has_secdesc)) return False; @@ -2555,10 +2555,12 @@ BOOL smb_io_printer_info_2(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_2 *info, return False; /* parse the sec_desc */ - if (!prs_set_offset(ps, sd_offset)) - return False; - if (!smb_io_relsecdesc("secdesc", buffer, depth, &info->secdesc)) - return False; + if (has_secdesc) { + if (!prs_set_offset(ps, sd_offset)) + return False; + if (!smb_io_relsecdesc("secdesc", buffer, depth, &info->secdesc)) + return False; + } /* pick up where we left off */ if (!prs_set_offset(ps, current_offset)) @@ -3366,9 +3368,8 @@ uint32 spoolss_size_printer_info_2(PRINTER_INFO_2 *info) * it is easier to maintain the calculation here and * not place the burden on the caller to remember. --jerry */ - if ((size % 4) != 0) { + if ((size % 4) != 0) size += 4 - (size % 4); - } return size; } @@ -7131,6 +7132,7 @@ BOOL spoolss_io_q_enumprinterdataex(char *desc, SPOOL_Q_ENUMPRINTERDATAEX *q_u, /******************************************************************* ********************************************************************/ + static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, PRINTER_ENUM_VALUES_CTR *ctr, int depth) { @@ -7159,8 +7161,7 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, return False; } - for (i=0; isize_of_array; i++) - { + for (i=0; isize_of_array; i++) { valuename_offset = current_offset; if (!prs_uint32("valuename_offset", ps, depth, &valuename_offset)) return False; @@ -7189,8 +7190,7 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, * attention to 2-byte alignment here.... */ - for (i=0; isize_of_array; i++) - { + for (i=0; isize_of_array; i++) { if (!prs_unistr("valuename", ps, depth, &ctr->values[i].valuename)) return False; @@ -7212,23 +7212,22 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, return True; } - /******************************************************************* * write a structure. ********************************************************************/ BOOL spoolss_io_r_enumprinterdataex(char *desc, SPOOL_R_ENUMPRINTERDATAEX *r_u, prs_struct *ps, int depth) { - int data_offset, end_offset; + uint32 data_offset, end_offset; prs_debug(ps, depth, desc, "spoolss_io_r_enumprinterdataex"); depth++; if(!prs_align(ps)) return False; - + if (!prs_uint32("size", ps, depth, &r_u->ctr.size)) return False; - + data_offset = prs_offset(ps); if (!prs_set_offset(ps, data_offset + r_u->ctr.size)) @@ -7239,7 +7238,7 @@ BOOL spoolss_io_r_enumprinterdataex(char *desc, SPOOL_R_ENUMPRINTERDATAEX *r_u, if(!prs_uint32("needed", ps, depth, &r_u->needed)) return False; - + if(!prs_uint32("returned", ps, depth, &r_u->returned)) return False; @@ -7259,11 +7258,9 @@ BOOL spoolss_io_r_enumprinterdataex(char *desc, SPOOL_R_ENUMPRINTERDATAEX *r_u, if (!prs_set_offset(ps, end_offset)) return False; - - return True; + return True; } - /******************************************************************* * write a structure. ********************************************************************/ -- cgit From 0d27cc909b4489b54e57481bd8a9494fb077dc3d Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 27 Sep 2002 22:08:25 +0000 Subject: Check for security on delete printer was reversed... Jeremy. --- source/rpc_server/srv_spoolss_nt.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index 2190215107a..dcffa968d5c 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -313,11 +313,6 @@ static WERROR delete_printer_handle(pipes_struct *p, POLICY_HND *hnd) return WERR_BADFID; } - if (del_a_printer(Printer->dev.handlename) != 0) { - DEBUG(3,("Error deleting printer %s\n", Printer->dev.handlename)); - return WERR_BADFID; - } - /* Check calling user has permission to delete printer. Note that since we set the snum parameter to -1 only administrators can delete the printer. This stops people with the Full Control @@ -328,6 +323,11 @@ static WERROR delete_printer_handle(pipes_struct *p, POLICY_HND *hnd) return WERR_ACCESS_DENIED; } + if (del_a_printer(Printer->dev.handlename) != 0) { + DEBUG(3,("Error deleting printer %s\n", Printer->dev.handlename)); + return WERR_BADFID; + } + if (*lp_deleteprinter_cmd()) { char *cmd = lp_deleteprinter_cmd(); -- cgit From 322d8b4c83439261cfd2ff79b557bddb1e784660 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 27 Sep 2002 22:51:59 +0000 Subject: It turns out that Windows allows delete printer on a handle opened by an admin user, then used on a pipe handle created by an anonymous user..... but they're working on security.... riiight ! Jeremy. --- source/rpc_server/srv_spoolss_nt.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c index dcffa968d5c..f942a685a1e 100644 --- a/source/rpc_server/srv_spoolss_nt.c +++ b/source/rpc_server/srv_spoolss_nt.c @@ -313,6 +313,19 @@ static WERROR delete_printer_handle(pipes_struct *p, POLICY_HND *hnd) return WERR_BADFID; } + /* + * It turns out that Windows allows delete printer on a handle + * opened by an admin user, then used on a pipe handle created + * by an anonymous user..... but they're working on security.... riiight ! + * JRA. + */ + + if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) { + DEBUG(3, ("delete_printer_handle: denied by handle\n")); + return WERR_ACCESS_DENIED; + } + +#if 0 /* Check calling user has permission to delete printer. Note that since we set the snum parameter to -1 only administrators can delete the printer. This stops people with the Full Control @@ -322,6 +335,7 @@ static WERROR delete_printer_handle(pipes_struct *p, POLICY_HND *hnd) DEBUG(3, ("printer delete denied by security descriptor\n")); return WERR_ACCESS_DENIED; } +#endif if (del_a_printer(Printer->dev.handlename) != 0) { DEBUG(3,("Error deleting printer %s\n", Printer->dev.handlename)); -- cgit From 4b72f84cf9bc3f7583318d5dff97257f9dc5b87f Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 27 Sep 2002 23:56:20 +0000 Subject: Back our volker's patch as was breaking the build. Volker, I would like to understand what you are trying to do here... I'll trust that it's broken (this code is certainly not well tested) but I do want to keep a close eye on the fixes... Andrew Bartlett --- source/auth/pass_check.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/source/auth/pass_check.c b/source/auth/pass_check.c index d98ee96edd6..63918796efb 100644 --- a/source/auth/pass_check.c +++ b/source/auth/pass_check.c @@ -609,8 +609,6 @@ NTSTATUS pass_check(const struct passwd *pass, const char *user, const char *pas if (((!*password) || (!pwlen)) && !lp_null_passwords()) return NT_STATUS_LOGON_FAILURE; - this_salt[0] = 0; - #if defined(WITH_PAM) /* @@ -647,10 +645,8 @@ NTSTATUS pass_check(const struct passwd *pass, const char *user, const char *pas perhaps for IPC password changing requests */ spass = getspnam(pass->pw_name); - if (spass && spass->sp_pwdp) { + if (spass && spass->sp_pwdp) fstrcpy(this_crypted, spass->sp_pwdp); - fstrcpy(this_salt, spass->sp_pwdp); - } } #elif defined(IA_UINFO) { @@ -709,8 +705,7 @@ NTSTATUS pass_check(const struct passwd *pass, const char *user, const char *pas #endif /* extract relevant info */ - if (this_salt[0] == 0) - fstrcpy(this_salt, pass->pw_passwd); + fstrcpy(this_salt, pass->pw_passwd); #if defined(HAVE_TRUNCATED_SALT) /* crypt on some platforms (HPUX in particular) -- cgit From 0f5d18626bebaa0621ee703ea2cc8bf47e14ea3e Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 28 Sep 2002 00:12:49 +0000 Subject: Add const. --- source/lib/util_sid.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/lib/util_sid.c b/source/lib/util_sid.c index e9635fc7f84..18260be8700 100644 --- a/source/lib/util_sid.c +++ b/source/lib/util_sid.c @@ -347,7 +347,7 @@ void sid_copy(DOM_SID *dst, const DOM_SID *src) /***************************************************************** Write a sid out into on-the-wire format. *****************************************************************/ -BOOL sid_linearize(char *outbuf, size_t len, DOM_SID *sid) +BOOL sid_linearize(char *outbuf, size_t len, const DOM_SID *sid) { size_t i; @@ -366,7 +366,7 @@ BOOL sid_linearize(char *outbuf, size_t len, DOM_SID *sid) /***************************************************************** parse a on-the-wire SID to a DOM_SID *****************************************************************/ -BOOL sid_parse(char *inbuf, size_t len, DOM_SID *sid) +BOOL sid_parse(const char *inbuf, size_t len, DOM_SID *sid) { int i; if (len < 8) return False; @@ -482,7 +482,7 @@ BOOL sid_check_is_in_builtin(const DOM_SID *sid) Calculates size of a sid. *****************************************************************/ -size_t sid_size(DOM_SID *sid) +size_t sid_size(const DOM_SID *sid) { if (sid == NULL) return 0; @@ -518,7 +518,7 @@ BOOL non_mappable_sid(DOM_SID *sid) return the binary string representation of a DOM_SID caller must free */ -char *sid_binstring(DOM_SID *sid) +char *sid_binstring(const DOM_SID *sid) { char *buf, *s; int len = sid_size(sid); -- cgit From 2b54a2fc2c85ea139e2acdbbc2f14b969c0c6315 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 28 Sep 2002 00:47:06 +0000 Subject: This needs to be #ifdef HAVE_LDAP. --- source/libads/ldap_utils.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/libads/ldap_utils.c b/source/libads/ldap_utils.c index fbc9eb433f0..9e4b8a1de92 100644 --- a/source/libads/ldap_utils.c +++ b/source/libads/ldap_utils.c @@ -21,6 +21,8 @@ */ #include "includes.h" + +#ifdef HAVE_LDAP /* a wrapper around ldap_search_s that retries depending on the error code this is supposed to catch dropped connections and auto-reconnect @@ -88,3 +90,4 @@ ADS_STATUS ads_search_retry_dn(ADS_STRUCT *ads, void **res, return ads_do_search_retry(ads, dn, LDAP_SCOPE_BASE, "(objectclass=*)", attrs, res); } +#endif -- cgit From 1e4ac9615d26bfbf90e3a45f088564f448f689ce Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Sat, 28 Sep 2002 03:38:37 +0000 Subject: Commit a fix to smbclient so that it will connect to EMCs and NetApp's machines. --- source/client/client.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/source/client/client.c b/source/client/client.c index eb6b5727608..de6bf0e1b05 100644 --- a/source/client/client.c +++ b/source/client/client.c @@ -2436,9 +2436,24 @@ static struct cli_state *do_connect(const char *server, const char *share) if (!cli_send_tconX(c, sharename, "?????", password, strlen(password)+1)) { - d_printf("tree connect failed: %s\n", cli_errstr(c)); - cli_shutdown(c); - return NULL; + pstring share; + + /* + * Some servers require \\server\share for the share + * while others are happy with share as we gave above + * Lets see if we give it the long form if it works + */ + pstrcpy(share, "\\\\"); + pstrcat(share, server); + pstrcat(share, "\\"); + pstrcat(share, sharename); + if (!cli_send_tconX(c, share, "?????", password, + strlen(password) + 1)) { + + d_printf("tree connect failed: %s\n", cli_errstr(c)); + cli_shutdown(c); + return NULL; + } } DEBUG(4,(" tconx ok\n")); -- cgit From f7dd66e88dba947a167d9a14c96810854dfc5c9d Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 28 Sep 2002 12:11:19 +0000 Subject: Add const. --- source/lib/util_seaccess.c | 2 +- source/passdb/secrets.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/lib/util_seaccess.c b/source/lib/util_seaccess.c index b137023e55c..456d7ba9e29 100644 --- a/source/lib/util_seaccess.c +++ b/source/lib/util_seaccess.c @@ -226,7 +226,7 @@ void se_map_standard(uint32 *access_mask, struct standard_mapping *mapping) "Access-Checking" document in MSDN. *****************************************************************************/ -BOOL se_access_check(SEC_DESC *sd, const NT_USER_TOKEN *token, +BOOL se_access_check(const SEC_DESC *sd, const NT_USER_TOKEN *token, uint32 acc_desired, uint32 *acc_granted, NTSTATUS *status) { diff --git a/source/passdb/secrets.c b/source/passdb/secrets.c index 73201ab62a5..4b2c76d8b0e 100644 --- a/source/passdb/secrets.c +++ b/source/passdb/secrets.c @@ -227,7 +227,7 @@ BOOL secrets_lock_trust_account_password(char *domain, BOOL dolock) the above call. ************************************************************************/ -BOOL secrets_fetch_trust_account_password(char *domain, uint8 ret_pwd[16], +BOOL secrets_fetch_trust_account_password(const char *domain, uint8 ret_pwd[16], time_t *pass_last_set_time) { struct machine_acct_pass *pass; -- cgit From df906c156aea46524dedc28ee54f4e87711c7160 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sat, 28 Sep 2002 12:14:17 +0000 Subject: Thanks to abartlet I looked at that function a bit closer. What did the first cli_push_string do? I suspect that it's a leftover from times when the password length was needed at some point. Volker --- source/libsmb/cliconnect.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index ebadafd5f05..695c6506b5d 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -184,10 +184,7 @@ static BOOL cli_session_setup_plaintext(struct cli_state *cli, char *user, char *pass, char *workgroup) { uint32 capabilities = cli_session_setup_capabilities(cli); - fstring pword; - int passlen; char *p; - int push_flags = STR_TERMINATE; if (capabilities & CAP_UNICODE) @@ -195,8 +192,6 @@ static BOOL cli_session_setup_plaintext(struct cli_state *cli, char *user, else push_flags |= STR_ASCII; - passlen = clistr_push(cli, pword, pass, sizeof(pword), push_flags); - set_message(cli->outbuf,13,0,True); SCVAL(cli->outbuf,smb_com,SMBsesssetupX); cli_setup_packet(cli); -- cgit From 24fb0cde2f0b657df1c99474cd694438c94a566e Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 28 Sep 2002 12:27:04 +0000 Subject: Add the beginings of sam_ads to the tree. This module, primarilly the work of "Stefan (metze) Metzmacher" , uses the Active Directory schema to store the user/group/other information. I've been testing it against a real AD server, and it is intended to work with OpenLDAP as well. I've moved a few functions around in our other libads code, which has made it easier to tap into that existing code. Also, I've made some changes to the SAM interface, I hope there are not too many objections... To ensure we don't get silly bugs in the skel module, it is now in the default compile. This way you should not forget to update it :-) Andrew Bartlett --- source/Makefile.in | 2 +- source/include/ads.h | 7 +- source/include/sam.h | 12 +- source/libads/ads_ldap.c | 2 +- source/libads/ads_struct.c | 1 + source/libads/ldap.c | 43 +- source/libads/ldap_utils.c | 3 + source/sam/api.c | 12 +- source/sam/interface.c | 25 +- source/sam/sam_ads.c | 1080 ++++++++++++++++++++++++++++++++++++++++++++ source/torture/cmd_sam.c | 6 +- 11 files changed, 1161 insertions(+), 32 deletions(-) create mode 100755 source/sam/sam_ads.c diff --git a/source/Makefile.in b/source/Makefile.in index 32c2e3f70f3..598062ec051 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -221,7 +221,7 @@ PASSDB_OBJ = $(PASSDB_GET_SET_OBJ) passdb/passdb.o passdb/pdb_interface.o \ passdb/pdb_unix.o passdb/util_sam_sid.o \ passdb/pdb_compat.o passdb/pdb_nisplus.o -SAM_STATIC_MODULES = sam/sam_plugin.o +SAM_STATIC_MODULES = sam/sam_plugin.o sam/sam_skel.o sam/sam_ads.o SAM_OBJ = sam/account.o sam/get_set_account.o sam/get_set_group.o \ sam/get_set_domain.o sam/interface.o sam/api.o $(SAM_STATIC_MODULES) diff --git a/source/include/ads.h b/source/include/ads.h index 0181ae535e0..88a90229b1c 100644 --- a/source/include/ads.h +++ b/source/include/ads.h @@ -15,6 +15,7 @@ typedef struct { char *realm; char *workgroup; char *ldap_server; + char *ldap_uri; int foreign; /* set to 1 if connecting to a foreign realm */ } server; @@ -255,5 +256,7 @@ typedef void **ADS_MODLIST; /* ads auth control flags */ -#define ADS_AUTH_DISABLE_KERBEROS 1 -#define ADS_AUTH_NO_BIND 2 +#define ADS_AUTH_DISABLE_KERBEROS 0x01 +#define ADS_AUTH_NO_BIND 0x02 +#define ADS_AUTH_ANON_BIND 0x04 +#define ADS_AUTH_SIMPLE_BIND 0x08 diff --git a/source/include/sam.h b/source/include/sam.h index 2157a370652..8fbda7e8578 100644 --- a/source/include/sam.h +++ b/source/include/sam.h @@ -167,8 +167,8 @@ typedef struct sam_context NTSTATUS (*sam_get_sec_desc) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd); NTSTATUS (*sam_set_sec_desc) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd); - NTSTATUS (*sam_lookup_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type); - NTSTATUS (*sam_lookup_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID **sid, uint32 *type); + NTSTATUS (*sam_lookup_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, TALLOC_CTX *ctx, const DOM_SID *sid, char **name, uint32 *type); + NTSTATUS (*sam_lookup_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID *sid, uint32 *type); /* Domain API */ @@ -183,7 +183,7 @@ typedef struct sam_context /* Account API */ - NTSTATUS (*sam_create_account) (const struct sam_context *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_create_account) (const struct sam_context *context, const NT_USER_TOKEN *access_token, uint32 access_desired, TALLOC_CTX *mem_ctx, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); NTSTATUS (*sam_add_account) (const struct sam_context *, const DOM_SID *domainsid, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_update_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_delete_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account); @@ -225,8 +225,8 @@ typedef struct sam_methods NTSTATUS (*sam_get_sec_desc) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd); NTSTATUS (*sam_set_sec_desc) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd); - NTSTATUS (*sam_lookup_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type); - NTSTATUS (*sam_lookup_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type); + NTSTATUS (*sam_lookup_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, uint32 *type); + NTSTATUS (*sam_lookup_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const char *name, DOM_SID *sid, uint32 *type); /* Domain API */ @@ -235,7 +235,7 @@ typedef struct sam_methods /* Account API */ - NTSTATUS (*sam_create_account) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_create_account) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, TALLOC_CTX *mem_ctx, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); NTSTATUS (*sam_add_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_update_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_delete_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); diff --git a/source/libads/ads_ldap.c b/source/libads/ads_ldap.c index 8c39a897625..05b016539e2 100644 --- a/source/libads/ads_ldap.c +++ b/source/libads/ads_ldap.c @@ -83,7 +83,7 @@ done: /* convert a sid to a user or group name */ NTSTATUS ads_sid_to_name(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, - DOM_SID *sid, + const DOM_SID *sid, char **name, enum SID_NAME_USE *type) { diff --git a/source/libads/ads_struct.c b/source/libads/ads_struct.c index b68c822ce35..3cdd015bf46 100644 --- a/source/libads/ads_struct.c +++ b/source/libads/ads_struct.c @@ -122,6 +122,7 @@ void ads_destroy(ADS_STRUCT **ads) SAFE_FREE((*ads)->server.realm); SAFE_FREE((*ads)->server.workgroup); SAFE_FREE((*ads)->server.ldap_server); + SAFE_FREE((*ads)->server.ldap_uri); SAFE_FREE((*ads)->auth.realm); SAFE_FREE((*ads)->auth.password); diff --git a/source/libads/ldap.c b/source/libads/ldap.c index e09ffeb3f6b..1004ea229c6 100644 --- a/source/libads/ldap.c +++ b/source/libads/ldap.c @@ -67,6 +67,29 @@ static BOOL ads_try_connect(ADS_STRUCT *ads, const char *server, unsigned port) return True; } +/* + try a connection to a given ldap server, based on URL, returning True if successful + */ +static BOOL ads_try_connect_uri(ADS_STRUCT *ads) +{ +#if defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) + DEBUG(5,("ads_try_connect: trying ldap server at URI '%s'\n", + ads->server.ldap_uri)); + + + if (ldap_initialize((LDAP**)&(ads->ld), ads->server.ldap_uri) == LDAP_SUCCESS) { + return True; + } + DEBUG(0, ("ldap_initialize: %s\n", strerror(errno))); + +#else + + DEBUG(1, ("no URL support in LDAP libs!\n")); +#endif + + return False; +} + /* used by the IP comparison function */ struct ldap_ip { struct in_addr ip; @@ -210,6 +233,13 @@ ADS_STATUS ads_connect(ADS_STRUCT *ads) ads->last_attempt = time(NULL); ads->ld = NULL; + /* try with a URL based server */ + + if (ads->server.ldap_uri && + ads_try_connect_uri(ads)) { + goto got_connection; + } + /* try with a user specified server */ if (ads->server.ldap_server && ads_try_connect(ads, ads->server.ldap_server, LDAP_PORT)) { @@ -278,6 +308,14 @@ got_connection: return ADS_SUCCESS; } + if (ads->auth.flags & ADS_AUTH_ANON_BIND) { + return ADS_ERROR(ldap_simple_bind_s( ads->ld, NULL, NULL)); + } + + if (ads->auth.flags & ADS_AUTH_SIMPLE_BIND) { + return ADS_ERROR(ldap_simple_bind_s( ads->ld, ads->auth.user_name, ads->auth.password)); + } + return ads_sasl_bind(ads); } @@ -1771,8 +1809,9 @@ ADS_STATUS ads_server_info(ADS_STRUCT *ads) ads->config.realm = strdup(p+2); ads->config.bind_path = ads_build_dn(ads->config.realm); - DEBUG(3,("got ldap server name %s@%s\n", - ads->config.ldap_server_name, ads->config.realm)); + DEBUG(3,("got ldap server name %s@%s, using bind path: %s\n", + ads->config.ldap_server_name, ads->config.realm, + ads->config.bind_path)); ads->config.current_time = ads_parse_time(timestr); diff --git a/source/libads/ldap_utils.c b/source/libads/ldap_utils.c index 9e4b8a1de92..907f7c8aff5 100644 --- a/source/libads/ldap_utils.c +++ b/source/libads/ldap_utils.c @@ -42,6 +42,9 @@ ADS_STATUS ads_do_search_retry(ADS_STRUCT *ads, const char *bind_path, int scope bp = strdup(bind_path); + if (!bp) + return ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + while (count--) { status = ads_do_search_all(ads, bp, scope, exp, attrs, res); if (ADS_ERR_OK(status)) { diff --git a/source/sam/api.c b/source/sam/api.c index fb2f015e953..349c18787c2 100644 --- a/source/sam/api.c +++ b/source/sam/api.c @@ -50,7 +50,7 @@ NTSTATUS sam_set_sec_desc(const NT_USER_TOKEN *access_token, const DOM_SID *sid, return sam_context->sam_set_sec_desc(sam_context, access_token, sid, sd); } -NTSTATUS sam_lookup_sid(const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type) +NTSTATUS sam_lookup_sid(const NT_USER_TOKEN *access_token, TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, uint32 *type) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -58,10 +58,10 @@ NTSTATUS sam_lookup_sid(const NT_USER_TOKEN *access_token, const DOM_SID *sid, c return NT_STATUS_UNSUCCESSFUL; } - return sam_context->sam_lookup_sid(sam_context, access_token, sid, name, type); + return sam_context->sam_lookup_sid(sam_context, access_token, mem_ctx, sid, name, type); } -NTSTATUS sam_lookup_name(const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID **sid, uint32 *type) +NTSTATUS sam_lookup_name(const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID *sid, uint32 *type) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -69,7 +69,7 @@ NTSTATUS sam_lookup_name(const NT_USER_TOKEN *access_token, const char *domain, return NT_STATUS_UNSUCCESSFUL; } - return sam_context->sam_lookup_name(sam_context, access_token, domain, name, sid, type); + return sam_context->sam_lookup_name(sam_context, access_token,domain, name, sid, type); } /* Domain API */ @@ -120,7 +120,7 @@ NTSTATUS sam_get_domain_by_sid(const NT_USER_TOKEN *access_token, const uint32 a /* Account API */ -NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 access_desired, TALLOC_CTX *mem_ctx, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -128,7 +128,7 @@ NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 acce return NT_STATUS_UNSUCCESSFUL; } - return sam_context->sam_create_account(sam_context, access_token, access_desired, domainsid, account_name, acct_ctrl, account); + return sam_context->sam_create_account(sam_context, access_token, access_desired, mem_ctx, domainsid, account_name, acct_ctrl, account); } NTSTATUS sam_add_account(const DOM_SID *domainsid, const SAM_ACCOUNT_HANDLE *account) diff --git a/source/sam/interface.c b/source/sam/interface.c index 0943a0e8f13..5d12cfc9990 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -32,6 +32,8 @@ extern DOM_SID global_sid_Builtin; const struct sam_init_function_entry builtin_sam_init_functions[] = { { "plugin", sam_init_plugin }, + { "ads", sam_init_ads }, + { "skel", sam_init_skel }, { NULL, NULL} }; @@ -79,7 +81,7 @@ NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_m tmp_methods = context->methods; while (tmp_methods) { - if (!strcmp(domainname, tmp_methods->domain_name)) + if (strequal(domainname, tmp_methods->domain_name)) { (*sam_method) = tmp_methods; return NT_STATUS_OK; @@ -143,7 +145,7 @@ NTSTATUS context_sam_set_sec_desc(const SAM_CONTEXT *context, const NT_USER_TOKE } -NTSTATUS context_sam_lookup_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID **sid, uint32 *type) +NTSTATUS context_sam_lookup_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID *sid, uint32 *type) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -169,7 +171,7 @@ NTSTATUS context_sam_lookup_name(const SAM_CONTEXT *context, const NT_USER_TOKEN return NT_STATUS_OK; } -NTSTATUS context_sam_lookup_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type) +NTSTATUS context_sam_lookup_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, uint32 *type) { SAM_METHODS *tmp_methods; uint32 rid; @@ -194,7 +196,7 @@ NTSTATUS context_sam_lookup_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_sid(tmp_methods, access_token, sid, name, type))) { + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_sid(tmp_methods, access_token, mem_ctx, sid, name, type))) { DEBUG(4,("sam_lookup_name for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); return nt_status; @@ -354,7 +356,7 @@ NTSTATUS context_sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER return NT_STATUS_OK; } -NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) +NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, TALLOC_CTX *mem_ctx, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -371,7 +373,7 @@ NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TO return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, account_name, acct_ctrl, account))) { + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, mem_ctx, account_name, acct_ctrl, account))) { DEBUG(4,("sam_create_account in backend %s failed\n", tmp_methods->backendname)); return nt_status; @@ -924,21 +926,21 @@ static NTSTATUS make_backend_entry(SAM_BACKEND_ENTRY *backend_entry, char *sam_b if ((tmp = strchr(tmp_string, '|')) != NULL) { DEBUGADD(20,("a domain name has been specified\n")); *tmp = 0; - backend_entry->domain_name = tmp + 1; + backend_entry->domain_name = smb_xstrdup(tmp + 1); tmp_string = tmp + 1; } if ((tmp = strchr(tmp_string, ':')) != NULL) { DEBUG(20,("options for the backend have been specified\n")); *tmp = 0; - backend_entry->module_params = tmp + 1; + backend_entry->module_params = smb_xstrdup(tmp + 1); tmp_string = tmp + 1; } if (backend_entry->domain_name == NULL) { DEBUG(10,("make_backend_entry: no domain was specified for sam module %s. Useing default domain %s\n", backend_entry->module_name, lp_workgroup())); - backend_entry->domain_name = lp_workgroup(); + backend_entry->domain_name = smb_xstrdup(lp_workgroup()); } if ((backend_entry->domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID))) == NULL) { @@ -1109,11 +1111,12 @@ NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **sam_backends_param) DEBUG(6,("There are %d domains listed with there backends\n", nBackends)); - if ((backends = (SAM_BACKEND_ENTRY *)malloc(sizeof(SAM_BACKEND_ENTRY)*nBackends)) == NULL) { + if ((backends = (SAM_BACKEND_ENTRY *)malloc(sizeof(*backends)*nBackends)) == NULL) { DEBUG(0,("make_sam_context_list: failed to allocate backends\n")); return NT_STATUS_NO_MEMORY; } - ZERO_STRUCTP(backends); + + memset(backends, '\0', sizeof(*backends)*nBackends); for (i = 0; i < nBackends; i++) { DEBUG(8,("processing %s\n",sam_backends_param[i])); diff --git a/source/sam/sam_ads.c b/source/sam/sam_ads.c new file mode 100755 index 00000000000..7f2a901d81d --- /dev/null +++ b/source/sam/sam_ads.c @@ -0,0 +1,1080 @@ +/* + Unix SMB/CIFS implementation. + Active Directory SAM backend, for simulate a W2K DC in mixed mode. + + Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Andrew Bartlett 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" + + +#ifdef HAVE_LDAP + +static int sam_ads_debug_level = DBGC_SAM; + +#undef DBGC_CLASS +#define DBGC_CLASS sam_ads_debug_level + +#define ADS_STATUS_OK ADS_ERROR(0) +#define ADS_STATUS_UNSUCCESSFUL ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL) +#define ADS_STATUS_NOT_IMPLEMENTED ADS_ERROR_NT(NT_STATUS_NOT_IMPLEMENTED) + + +#define ADS_SUBTREE_BUILTIN "CN=Builtin," +#define ADS_SUBTREE_COMPUTERS "CN=Computers," +#define ADS_SUBTREE_DC "CN=Domain Controllers," +#define ADS_SUBTREE_USERS "CN=Users," +#define ADS_ROOT_TREE "" +/* Here are private module structs and functions */ + +struct sam_ads_privates { + ADS_STRUCT *ads_struct; + TALLOC_CTX *mem_ctx; + BOOL bind_plaintext; + char *ads_bind_dn; + char *ads_bind_pw; + char *ldap_uri; + /* did we need something more? */ +}; + + +/* get only these LDAP attributes, witch we really need for an account */ +const char *account_attrs[] = { "objectSid", + "objectGUID", + "sAMAccountType", + "sAMAcountName", + "userPrincipalName", + "accountExpires", + "badPasswordTime", + "badPwdCount", + "lastLogoff", + "lastLogon", + "userWorkstations", + "dBCSPwd", + "unicodePwd", + "pwdLastSet", + "userAccountControl", + "profilePath", + "homeDrive", + "scriptPath", + "homeDirectory", + "cn", + "primaryGroupID",/* 513 */ + "nsNPAllowDialIn",/* TRUE */ + "userParameters",/* Dial Back number ...*/ + "codePage",/* 0 */ + "countryCode",/* 0 */ + "adminCount",/* 1 or 0 */ + "logonCount",/* 0 */ + "managedObjects", + "memberOf",/* dn */ + "instanceType",/* 4 */ + "name", /* sync with cn */ + "description", + /* "nTSecurityDescriptor", */ + NULL}; + +/* get only these LDAP attributes, witch we really need for a group */ +const char *group_attrs[] = {"objectSid", + /* "objectGUID", */ + "sAMAccountType", + "sAMAcountName", + "groupType", + /* "member", */ + "description", + "name", /* sync with cn */ + /* "nTSecurityDescriptor", */ + NULL}; + + +/*************************************************** + return our ads connection. We keep the connection + open to make things faster +****************************************************/ +static ADS_STATUS sam_ads_cached_connection(struct sam_ads_privates *private) +{ + ADS_STRUCT *ads_struct; + ADS_STATUS ads_status; + + if (!private->ads_struct) { + private->ads_struct = ads_init_simple(); + ads_struct = private->ads_struct; + ads_struct->server.ldap_uri = smb_xstrdup(private->ldap_uri); + if ((!private->ads_bind_dn) || (!*private->ads_bind_dn)) { + ads_struct->auth.flags |= ADS_AUTH_ANON_BIND; + } else { + ads_struct->auth.user_name + = smb_xstrdup(private->ads_bind_dn); + if (private->ads_bind_pw) { + ads_struct->auth.password + = smb_xstrdup(private->ads_bind_pw); + } + } + if (private->bind_plaintext) { + ads_struct->auth.flags |= ADS_AUTH_SIMPLE_BIND; + } + } else { + ads_struct = private->ads_struct; + } + + if (ads_struct->ld != NULL) { + /* connection has been opened. ping server. */ + struct sockaddr_un addr; + socklen_t len; + int sd; + if (ldap_get_option(ads_struct->ld, LDAP_OPT_DESC, &sd) == 0 && + getpeername(sd, (struct sockaddr *) &addr, &len) < 0) { + /* the other end has died. reopen. */ + ldap_unbind_ext(ads_struct->ld, NULL, NULL); + ads_struct->ld = NULL; + } + } + + if (ads_struct->ld != NULL) { + DEBUG(5,("sam_ads_cached_connection: allready connected to the LDAP server\n")); + return ADS_SUCCESS; + } + + ads_status = ads_connect(ads_struct); + + ads_status = ads_server_info(ads_struct); + if (!ADS_ERR_OK(ads_status)) { + DEBUG(0,("Can't set server info: %s\n",ads_errstr(ads_status))); + /* return ads_status; */ /*for now we only warn! */ + } + + DEBUG(2, ("sam_ads_cached_connection: succesful connection to the LDAP server\n")); + return ADS_SUCCESS; +} + +static ADS_STATUS sam_ads_do_search(struct sam_ads_privates *private, const char *bind_path, int scope, const char *exp, const char **attrs, void **res) +{ + ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); + + ads_status = sam_ads_cached_connection(private); + if (!ADS_ERR_OK(ads_status)) + return ads_status; + + return ads_do_search_retry(private->ads_struct, bind_path, scope, exp, attrs, res); +} + +/*********************************************** +Initialize SAM_ACCOUNT_HANDLE from an ADS query +************************************************/ +/* not ready :-( */ +static ADS_STATUS ads_entry2sam_account_handle(ADS_STRUCT *ads_struct, SAM_ACCOUNT_HANDLE *account ,const void *entry) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(ads_struct && account && entry); + + + + return ads_status; +} + + +/*********************************************** +Initialize SAM_GROUP_ENUM from an ads entry +************************************************/ +/* not ready :-( */ +static ADS_STATUS ads_entry2sam_group_enum(ADS_STRUCT *ads_struct, TALLOC_CTX *mem_ctx, SAM_GROUP_ENUM **group_enum,const void *entry) +{ + ADS_STATUS ads_status = ADS_STATUS_UNSUCCESSFUL; + SAM_GROUP_ENUM __group_enum; + SAM_GROUP_ENUM *_group_enum = &__group_enum; + + SAM_ASSERT(ads_struct && mem_ctx && group_enum && entry); + + *group_enum = _group_enum; + + DEBUG(3,("sam_ads: ads_entry2sam_account_handle\n")); + + if (!ads_pull_sid((ADS_STRUCT *)ads_struct, &entry, "objectSid", &(_group_enum->sid))) { + DEBUG(0,("No sid for!?\n")); + return ADS_STATUS_UNSUCCESSFUL; + } + + if (!(_group_enum->group_name = ads_pull_string((ADS_STRUCT *)ads_struct, mem_ctx, &entry, "sAMAccountName"))) { + DEBUG(0,("No groupname found")); + return ADS_STATUS_UNSUCCESSFUL; + } + + if (!(_group_enum->group_desc = ads_pull_string((ADS_STRUCT *)ads_struct, mem_ctx, &entry, "desciption"))) { + DEBUG(0,("No description found")); + return ADS_STATUS_UNSUCCESSFUL; + } + + DEBUG(0,("sAMAccountName: %s\ndescription: %s\nobjectSid: %s\n", + _group_enum->group_name, + _group_enum->group_desc, + sid_string_static(&(_group_enum->sid)) + )); + + return ads_status; +} + +static ADS_STATUS sam_ads_access_check(const SAM_METHODS *sam_method, const SEC_DESC *sd, const NT_USER_TOKEN *access_token, uint32 access_desired) +{ + ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_ACCESS_DENIED); + NTSTATUS nt_status; + uint32 acc_granted; + + SAM_ASSERT(sam_method && sd && access_token); + /* the steps you need are: + 1. get_sec_desc for sid + 2. se_map_generic(accessdesired, generic_mapping) + 3. se_access_check() */ + + if (!se_access_check(sd, access_token, access_desired, &acc_granted, &nt_status)) { + DEBUG(3,("sam_ads_access_check: ACCESS DENIED\n")); + ads_status = ADS_ERROR_NT(nt_status); + return ads_status; + } + ads_status = ADS_ERROR_NT(nt_status); + return ads_status; +} + +static ADS_STATUS sam_ads_get_tree_sec_desc(const SAM_METHODS *sam_method, const char *subtree, SEC_DESC **sd) +{ + ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER); + struct sam_ads_privates *privates = (struct sam_ads_privates *)sam_method->private_data; + ADS_STRUCT *ads_struct = privates->ads_struct; + TALLOC_CTX *mem_ctx = privates->mem_ctx; + char *search_path; + void *sec_desc_res; + void *sec_desc_msg; + const char *sec_desc_attrs[] = {"nTSecurityDescriptor",NULL}; + + SAM_ASSERT(sam_method && ads_struct && sd); + *sd = NULL; + + if (subtree) { + asprintf(&search_path, "%s%s",subtree,ads_struct->config.bind_path); + } else { + asprintf(&search_path, "%s",""); + } + ads_status = sam_ads_do_search(privates, search_path, LDAP_SCOPE_BASE, "(objectClass=*)", sec_desc_attrs, &sec_desc_res); + SAFE_FREE(search_path); + if (!ADS_ERR_OK(ads_status)) + return ads_status; + + if ((sec_desc_msg = ads_first_entry(ads_struct, sec_desc_res))==NULL) { + ads_status = ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER); + return ads_status; + } + + if (!ads_pull_sd(ads_struct, mem_ctx, sec_desc_msg, sec_desc_attrs[0], sd)) { + *sd = NULL; + ads_status = ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER); + return ads_status; + } + + return ads_status; +} + +static ADS_STATUS sam_ads_account_policy_get(const SAM_METHODS *sam_method, int field, uint32 *value) +{ + ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_NOT_IMPLEMENTED); + DEBUG(0,("sam_ads: %s needs to be done! %s\n",__FUNCTION__,ads_errstr(ads_status))); + + SAM_ASSERT(sam_method && value); + + /* Fix Me */ + switch(field) { + /* Fix Me */ + default: *value = 0; break; + } + + return ads_status; +} + +/********************************** +Now the functions off the SAM API +***********************************/ + +/* General API */ +static NTSTATUS sam_ads_get_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, + const DOM_SID *sid, SEC_DESC **sd) +{ + ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); + struct sam_ads_privates *privates = (struct sam_ads_privates *)sam_method->private_data; + ADS_STRUCT *ads_struct = privates->ads_struct; + TALLOC_CTX *mem_ctx; + char *sidstr,*filter; + void *sec_desc_res; + void *sec_desc_msg; + const char *sec_desc_attrs[] = {"nTSecurityDescriptor",NULL}; + fstring sid_str; + SEC_DESC *my_sd; + + SAM_ASSERT(sam_method && access_token && sid && sd); + + ads_status = sam_ads_get_tree_sec_desc(sam_method, ADS_ROOT_TREE, &my_sd); + if (!ADS_ERR_OK(ads_status)) + return ads_ntstatus(ads_status); + + ads_status = sam_ads_access_check(sam_method, my_sd, access_token, DOMAIN_READ); + + if (!ADS_ERR_OK(ads_status)) + return ads_ntstatus(ads_status); + + sidstr = sid_binstring(sid); + if (asprintf(&filter, "(objectSid=%s)", sidstr) == -1) { + SAFE_FREE(sidstr); + return NT_STATUS_NO_MEMORY; + } + + SAFE_FREE(sidstr); + + ads_status = sam_ads_do_search(privates,ads_struct->config.bind_path, + LDAP_SCOPE_SUBTREE, filter, sec_desc_attrs, + &sec_desc_res); + SAFE_FREE(filter); + + if (!ADS_ERR_OK(ads_status)) { + return ads_ntstatus(ads_status); + } + + sec_desc_msg = ads_first_entry(ads_struct, sec_desc_res); + + if (!(mem_ctx = talloc_init_named("sec_desc parse in sam_ads"))) { + DEBUG(1, ("talloc_init_named() failed for sec_desc parse context in sam_ads")); + ads_msgfree(ads_struct, sec_desc_res); + return NT_STATUS_NO_MEMORY; + } + + if (!ads_pull_sd(ads_struct, mem_ctx, sec_desc_msg, sec_desc_attrs[0], sd)) { + talloc_destroy(mem_ctx); + ads_msgfree(ads_struct, sec_desc_res); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!ADS_ERR_OK(ads_status)) { + talloc_destroy(mem_ctx); + ads_msgfree(ads_struct, sec_desc_res); + return ads_ntstatus(ads_status); + } + + if (ads_count_replies(ads_struct, sec_desc_res) != 1) { + DEBUG(1,("sam_ads_get_sec_desc: duplicate or 0 results for sid %s\n", + sid_to_string(sid_str, sid))); + talloc_destroy(mem_ctx); + ads_msgfree(ads_struct, sec_desc_res); + return NT_STATUS_UNSUCCESSFUL; + } + + if (!(sec_desc_msg = ads_first_entry(ads_struct, sec_desc_res))) { + talloc_destroy(mem_ctx); + ads_msgfree(ads_struct, sec_desc_res); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!ads_pull_sd(ads_struct, mem_ctx, sec_desc_msg, sec_desc_attrs[0], sd)) { + ads_status = ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER); + talloc_destroy(mem_ctx); + ads_msgfree(ads_struct, sec_desc_res); + return ads_ntstatus(ads_status); + } + + /* now, were we allowed to see the SD we just got? */ + + ads_msgfree(ads_struct, sec_desc_res); + talloc_destroy(mem_ctx); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_set_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, + const DOM_SID *sid, const SEC_DESC *sd) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + + +static NTSTATUS sam_ads_lookup_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, + TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, + enum SID_NAME_USE *type) +{ + struct sam_ads_privates *privates = (struct sam_ads_privates *)sam_method->private_data; + ADS_STRUCT *ads_struct = privates->ads_struct; + SAM_ASSERT(sam_method); + + /* Ignoring access_token for now */ + + return ads_sid_to_name(ads_struct, mem_ctx, sid, name, type); +} + +static NTSTATUS sam_ads_lookup_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, + const char *name, DOM_SID *sid, enum SID_NAME_USE *type) +{ + struct sam_ads_privates *privates = (struct sam_ads_privates *)sam_method->private_data; + ADS_STRUCT *ads_struct = privates->ads_struct; + SAM_ASSERT(sam_method); + + /* Ignoring access_token for now */ + + return ads_name_to_sid(ads_struct, name, sid, type); +} + + +/* Domain API */ + +static NTSTATUS sam_ads_update_domain(const SAM_METHODS *sam_method, const SAM_DOMAIN_HANDLE *domain) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_get_domain_handle(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, + const uint32 access_desired, SAM_DOMAIN_HANDLE **domain) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + struct sam_ads_privates *privates = (struct sam_ads_privates *)sam_method->private_data; + TALLOC_CTX *mem_ctx = privates->mem_ctx; /*Fix me is this right??? */ + SAM_DOMAIN_HANDLE *dom_handle = NULL; + SEC_DESC *sd; + uint32 acc_granted; + uint32 tmp_value; + + DEBUG(5,("sam_ads_get_domain_handle: %d\n",__LINE__)); + + SAM_ASSERT(sam_method && domain); + + (*domain) = NULL; + + if ((dom_handle = talloc(mem_ctx, sizeof(SAM_DOMAIN_HANDLE))) == NULL) { + DEBUG(0,("failed to talloc dom_handle\n")); + ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + return ads_ntstatus(ads_status); + } + + ZERO_STRUCTP(dom_handle); + + dom_handle->mem_ctx = mem_ctx; /*Fix me is this right??? */ + dom_handle->free_fn = NULL; + dom_handle->current_sam_methods = sam_method; + + /* check if access can be granted as requested */ + + ads_status = sam_ads_get_tree_sec_desc(sam_method, ADS_ROOT_TREE, &sd); + if (!ADS_ERR_OK(ads_status)) + return ads_ntstatus(ads_status); + + ads_status = sam_ads_access_check(sam_method, sd, access_token, access_desired); + if (!ADS_ERR_OK(ads_status)) + return ads_ntstatus(ads_status); + + dom_handle->access_granted = acc_granted; + + /* fill all the values of dom_handle */ + sid_copy(&dom_handle->private.sid, &sam_method->domain_sid); + dom_handle->private.name = smb_xstrdup(sam_method->domain_name); + dom_handle->private.servername = "WHOKNOWS"; /* what is the servername */ + + /*Fix me: sam_ads_account_policy_get() return ADS_STATUS! */ + ads_status = sam_ads_account_policy_get(sam_method, AP_MAX_PASSWORD_AGE, &tmp_value); + if (!ADS_ERR_OK(ads_status)) { + DEBUG(4,("sam_ads_account_policy_get failed for max password age. Useing default\n")); + tmp_value = MAX_PASSWORD_AGE; + } + unix_to_nt_time_abs(&dom_handle->private.max_passwordage,tmp_value); + + ads_status = sam_ads_account_policy_get(sam_method, AP_MIN_PASSWORD_AGE, &tmp_value); + if (!ADS_ERR_OK(ads_status)) { + DEBUG(4,("sam_ads_account_policy_get failed for min password age. Useing default\n")); + tmp_value = 0; + } + unix_to_nt_time_abs(&dom_handle->private.min_passwordage, tmp_value); + + ads_status = sam_ads_account_policy_get(sam_method, AP_LOCK_ACCOUNT_DURATION, &tmp_value); + if (!ADS_ERR_OK(ads_status)) { + DEBUG(4,("sam_ads_account_policy_get failed for lockout duration. Useing default\n")); + tmp_value = 0; + } + unix_to_nt_time_abs(&dom_handle->private.lockout_duration, tmp_value); + + ads_status = sam_ads_account_policy_get(sam_method, AP_RESET_COUNT_TIME, &tmp_value); + if (!ADS_ERR_OK(ads_status)) { + DEBUG(4,("sam_ads_account_policy_get failed for time till locout count is reset. Useing default\n")); + tmp_value = 0; + } + unix_to_nt_time_abs(&dom_handle->private.reset_count, tmp_value); + + ads_status = sam_ads_account_policy_get(sam_method, AP_MIN_PASSWORD_LEN, &tmp_value); + if (!ADS_ERR_OK(ads_status)) { + DEBUG(4,("sam_ads_account_policy_get failed for min password length. Useing default\n")); + tmp_value = 0; + } + dom_handle->private.min_passwordlength = (uint16)tmp_value; + + ads_status = sam_ads_account_policy_get(sam_method, AP_PASSWORD_HISTORY, &tmp_value); + if (!ADS_ERR_OK(ads_status)) { + DEBUG(4,("sam_ads_account_policy_get failed password history. Useing default\n")); + tmp_value = 0; + } + dom_handle->private.password_history = (uint16)tmp_value; + + ads_status = sam_ads_account_policy_get(sam_method, AP_BAD_ATTEMPT_LOCKOUT, &tmp_value); + if (!ADS_ERR_OK(ads_status)) { + DEBUG(4,("sam_ads_account_policy_get failed for bad attempts till lockout. Useing default\n")); + tmp_value = 0; + } + dom_handle->private.lockout_count = (uint16)tmp_value; + + ads_status = sam_ads_account_policy_get(sam_method, AP_TIME_TO_LOGOUT, &tmp_value); + if (!ADS_ERR_OK(ads_status)) { + DEBUG(4,("sam_ads_account_policy_get failed for force logout. Useing default\n")); + tmp_value = -1; + } + + ads_status = sam_ads_account_policy_get(sam_method, AP_USER_MUST_LOGON_TO_CHG_PASS, &tmp_value); + if (!ADS_ERR_OK(ads_status)) { + DEBUG(4,("sam_ads_account_policy_get failed for user must login to change password. Useing default\n")); + tmp_value = 0; + } + + /* should the real values of num_accounts, num_groups and num_aliases be retreved? + * I think it is to expensive to bother + */ + dom_handle->private.num_accounts = 3; + dom_handle->private.num_groups = 4; + dom_handle->private.num_aliases = 5; + + *domain = dom_handle; + + ads_status = ADS_ERROR_NT(NT_STATUS_OK); + return ads_ntstatus(ads_status); +} + +/* Account API */ +static NTSTATUS sam_ads_create_account(const SAM_METHODS *sam_method, + const NT_USER_TOKEN *access_token, uint32 access_desired, + TALLOC_CTX *mem_ctx, + const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + struct sam_ads_privates *privates = (struct sam_ads_privates *)sam_method->private_data; + SEC_DESC *sd = NULL; + + SAM_ASSERT(sam_method && access_token && account_name && account); + + ads_status = sam_ads_get_tree_sec_desc(sam_method, ADS_SUBTREE_USERS, &sd); + if (!ADS_ERR_OK(ads_status)) + return ads_ntstatus(ads_status); + + ads_status = sam_ads_access_check(sam_method, sd, access_token, access_desired); + if (!ADS_ERR_OK(ads_status)) + return ads_ntstatus(ads_status); + + ads_status = ADS_ERROR_NT(sam_init_account_talloc(mem_ctx, account)); + if (!ADS_ERR_OK(ads_status)) + return ads_ntstatus(ads_status); + + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_add_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) +{ + ADS_STATUS ads_status = ADS_ERROR(LDAP_NO_MEMORY); + struct sam_ads_privates *privates = (struct sam_ads_privates *)sam_method->private_data; + ADS_STRUCT *ads_struct = privates->ads_struct; + TALLOC_CTX *mem_ctx = privates->mem_ctx; + ADS_MODLIST mods; + uint16 acct_ctrl; + char *new_dn; + + SAM_ASSERT(sam_method && account); + + ads_status = ADS_ERROR_NT(sam_get_account_acct_ctrl(account,&acct_ctrl)); + if (!ADS_ERR_OK(ads_status)) + goto done; + + if ((acct_ctrl & ACB_WSTRUST)||(acct_ctrl & ACB_SVRTRUST)) { + /* Computer account */ + char *name,*controlstr; + char *hostname,*host_upn,*host_spn; + const char *objectClass[] = {"top", "person", "organizationalPerson", + "user", "computer", NULL}; + + ads_status = ADS_ERROR_NT(sam_get_account_name(account,&name)); + if (!ADS_ERR_OK(ads_status)) + goto done; + + if (!(host_upn = talloc_asprintf(mem_ctx, "%s@%s", name, ads_struct->config.realm))) { + ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + goto done; + } + + if (!(new_dn = talloc_asprintf(mem_ctx, "CN=%s,CN=Computers,%s", hostname, + ads_struct->config.bind_path))) { + ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + goto done; + } + + if (!(controlstr = talloc_asprintf(mem_ctx, "%u", ads_acb2uf(acct_ctrl)))) { + ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + goto done; + } + + if (!(mods = ads_init_mods(mem_ctx))) { + ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + goto done; + } + + ads_status = ads_mod_str(mem_ctx, &mods, "cn", hostname); + if (!ADS_ERR_OK(ads_status)) + goto done; + ads_status = ads_mod_strlist(mem_ctx, &mods, "objectClass", objectClass); + if (!ADS_ERR_OK(ads_status)) + goto done; + ads_status = ads_mod_str(mem_ctx, &mods, "userPrincipalName", host_upn); + if (!ADS_ERR_OK(ads_status)) + goto done; + ads_status = ads_mod_str(mem_ctx, &mods, "displayName", hostname); + if (!ADS_ERR_OK(ads_status)) + goto done; + ads_status = ads_mod_str(mem_ctx, &mods, "sAMAccountName", name); + if (!ADS_ERR_OK(ads_status)) + goto done; + ads_status = ads_mod_str(mem_ctx, &mods, "userAccountControl", controlstr); + if (!ADS_ERR_OK(ads_status)) + goto done; + + ads_status = ads_mod_str(mem_ctx, &mods, "servicePrincipalName", host_spn); + if (!ADS_ERR_OK(ads_status)) + goto done; + ads_status = ads_mod_str(mem_ctx, &mods, "dNSHostName", hostname); + if (!ADS_ERR_OK(ads_status)) + goto done; + ads_status = ads_mod_str(mem_ctx, &mods, "userAccountControl", controlstr); + if (!ADS_ERR_OK(ads_status)) + goto done; + /* ads_status = ads_mod_str(mem_ctx, &mods, "operatingSystem", "Samba"); + if (!ADS_ERR_OK(ads_status)) + goto done; + *//* ads_status = ads_mod_str(mem_ctx, &mods, "operatingSystemVersion", VERSION); + if (!ADS_ERR_OK(ads_status)) + goto done; + */ + /* End Computer account */ + } else { + /* User account*/ + char *upn, *controlstr; + char *name, *fullname; + const char *objectClass[] = {"top", "person", "organizationalPerson", + "user", NULL}; + + ads_status = ADS_ERROR_NT(sam_get_account_name(account,&name)); + if (!ADS_ERR_OK(ads_status)) + goto done; + + ads_status = ADS_ERROR_NT(sam_get_account_fullname(account,&fullname)); + if (!ADS_ERR_OK(ads_status)) + goto done; + + if (!(upn = talloc_asprintf(mem_ctx, "%s@%s", name, ads_struct->config.realm))) { + ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + goto done; + } + + if (!(new_dn = talloc_asprintf(mem_ctx, "CN=%s,CN=Users,%s", fullname, + ads_struct->config.bind_path))) { + ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + goto done; + } + + if (!(controlstr = talloc_asprintf(mem_ctx, "%u", ads_acb2uf(acct_ctrl)))) { + ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + goto done; + } + + if (!(mods = ads_init_mods(mem_ctx))) { + ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + goto done; + } + + ads_status = ads_mod_str(mem_ctx, &mods, "cn", fullname); + if (!ADS_ERR_OK(ads_status)) + goto done; + ads_status = ads_mod_strlist(mem_ctx, &mods, "objectClass", objectClass); + if (!ADS_ERR_OK(ads_status)) + goto done; + ads_status = ads_mod_str(mem_ctx, &mods, "userPrincipalName", upn); + if (!ADS_ERR_OK(ads_status)) + goto done; + ads_status = ads_mod_str(mem_ctx, &mods, "displayName", fullname); + if (!ADS_ERR_OK(ads_status)) + goto done; + ads_status = ads_mod_str(mem_ctx, &mods, "sAMAccountName", name); + if (!ADS_ERR_OK(ads_status)) + goto done; + ads_status = ads_mod_str(mem_ctx, &mods, "userAccountControl", controlstr); + if (!ADS_ERR_OK(ads_status)) + goto done; + }/* End User account */ + + /* Finally at the account */ + ads_status = ads_gen_add(ads_struct, new_dn, mods); + +done: + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_update_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_delete_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + + + + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_enum_accounts(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_get_account_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_get_account_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + + +/* Group API */ +static NTSTATUS sam_ads_create_group(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_add_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_update_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_delete_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_enum_groups(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + struct sam_ads_privates *privates = (struct sam_ads_privates *)sam_method->private_data; + ADS_STRUCT *ads_struct = privates->ads_struct; + TALLOC_CTX *mem_ctx = privates->mem_ctx; + void *res = NULL; + void *msg = NULL; + char *filter = NULL; + int i = 0; + + /* get only these LDAP attributes, witch we really need for a group */ + const char *group_enum_attrs[] = {"objectSid", + "description", + "sAMAcountName", + NULL}; + + SAM_ASSERT(sam_method && access_token && groups_count && groups); + + *groups_count = 0; + + DEBUG(3,("ads: enum_dom_groups\n")); + + /* Fix Me: get only group from the wanted Type */ + asprintf(&filter, "(&(objectClass=group)(groupType=%s))", "*"); + ads_status = sam_ads_do_search(privates, ads_struct->config.bind_path, LDAP_SCOPE_SUBTREE, filter, group_enum_attrs, &res); + if (!ADS_ERR_OK(ads_status)) { + DEBUG(1,("enum_groups ads_search: %s\n", ads_errstr(ads_status))); + } + + *groups_count = ads_count_replies(ads_struct, res); + if (*groups_count == 0) { + DEBUG(1,("enum_groups: No groups found\n")); + } + + (*groups) = talloc_zero(mem_ctx, (*groups_count) * sizeof(**groups)); + if (!*groups) { + ads_status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY); + } + + for (msg = ads_first_entry(ads_struct, res); msg; msg = ads_next_entry(ads_struct, msg)) { + uint32 grouptype; + + if (!ads_pull_uint32(ads_struct, msg, "groupType", &grouptype)) { + ; + } else { + (*groups)->group_ctrl = ads_gtype2gcb(grouptype); + } + + if (!((*groups)->group_name = ads_pull_string(ads_struct, mem_ctx, msg, "sAMAccountName"))) { + ; + } + + if (!((*groups)->group_desc = ads_pull_string(ads_struct, mem_ctx, msg, "description"))) { + ; + } + + if (!ads_pull_sid(ads_struct, msg, "objectSid", &((*groups)->sid))) { + DEBUG(1,("No sid for group %s !?\n", (*groups)->group_name)); + continue; + } + + i++; + } + + (*groups_count) = i; + + ads_status = ADS_ERROR_NT(NT_STATUS_OK); + + DEBUG(3,("ads enum_dom_groups gave %d entries\n", (*groups_count))); + + if (res) ads_msgfree(ads_struct, res); + + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_get_group_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_get_group_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_add_member_to_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_delete_member_from_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_enum_groupmembers(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +static NTSTATUS sam_ads_get_groups_of_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID **sids, const uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) +{ + ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; + DEBUG(0,("sam_ads: %s was called!\n",__FUNCTION__)); + SAM_ASSERT(sam_method); + return ads_ntstatus(ads_status); +} + +/********************************** +Free our private data +***********************************/ +static void sam_ads_free_private_data(void **vp) +{ + struct sam_ads_privates **sam_ads_state = (struct sam_ads_privates **)vp; + + if ((*sam_ads_state)->ads_struct->ld) { + ldap_unbind((*sam_ads_state)->ads_struct->ld); + } + + ads_destroy(&((*sam_ads_state)->ads_struct)); + + talloc_destroy((*sam_ads_state)->mem_ctx); + /* Fix me: maybe we must free some other stuff here */ + + *sam_ads_state = NULL; +} + + + +/***************************************************** +Init the ADS SAM backend +******************************************************/ +NTSTATUS sam_init_ads(SAM_METHODS *sam_method, const char *module_params) +{ + ADS_STATUS ads_status; + NTSTATUS nt_status; + struct sam_ads_privates *sam_ads_state; + TALLOC_CTX *mem_ctx; + + SAM_ASSERT(sam_method && sam_method->parent); + + mem_ctx = sam_method->parent->mem_ctx; + + /* Here the SAM API functions of the sam_ads module */ + + /* General API */ + + sam_method->sam_get_sec_desc = sam_ads_get_sec_desc; + sam_method->sam_set_sec_desc = sam_ads_set_sec_desc; + + sam_method->sam_lookup_sid = sam_ads_lookup_sid; + sam_method->sam_lookup_name = sam_ads_lookup_name; + + /* Domain API */ + + sam_method->sam_update_domain = sam_ads_update_domain; + sam_method->sam_get_domain_handle = sam_ads_get_domain_handle; + + /* Account API */ + + sam_method->sam_create_account = sam_ads_create_account; + sam_method->sam_add_account = sam_ads_add_account; + sam_method->sam_update_account = sam_ads_update_account; + sam_method->sam_delete_account = sam_ads_delete_account; + sam_method->sam_enum_accounts = sam_ads_enum_accounts; + + sam_method->sam_get_account_by_sid = sam_ads_get_account_by_sid; + sam_method->sam_get_account_by_name = sam_ads_get_account_by_name; + + /* Group API */ + + sam_method->sam_create_group = sam_ads_create_group; + sam_method->sam_add_group = sam_ads_add_group; + sam_method->sam_update_group = sam_ads_update_group; + sam_method->sam_delete_group = sam_ads_delete_group; + sam_method->sam_enum_groups = sam_ads_enum_groups; + sam_method->sam_get_group_by_sid = sam_ads_get_group_by_sid; + sam_method->sam_get_group_by_name = sam_ads_get_group_by_name; + + sam_method->sam_add_member_to_group = sam_ads_add_member_to_group; + sam_method->sam_delete_member_from_group = sam_ads_delete_member_from_group; + sam_method->sam_enum_groupmembers = sam_ads_enum_groupmembers; + + sam_method->sam_get_groups_of_sid = sam_ads_get_groups_of_sid; + + /*Fix me: use talloc !*/ + sam_ads_state = talloc_zero(mem_ctx, sizeof(struct sam_ads_privates)); + if (!sam_ads_state) { + DEBUG(0, ("talloc() failed for sam_ads private_data!\n")); + return NT_STATUS_NO_MEMORY; + } + + if (!(sam_ads_state->mem_ctx = talloc_init_named("sam_ads_method"))) { + DEBUG(0, ("talloc_init_named() failed for sam_ads_state->mem_ctx\n")); + return NT_STATUS_NO_MEMORY; + } + + sam_ads_state->ads_bind_dn = talloc_strdup(sam_ads_state->mem_ctx, lp_parm_string(NULL,"sam_ads","bind as")); + sam_ads_state->ads_bind_pw = talloc_strdup(sam_ads_state->mem_ctx, lp_parm_string(NULL,"sam_ads","bind pw")); + + sam_ads_state->bind_plaintext = strequal(lp_parm_string(NULL, "sam_ads", "plaintext bind"), "yes"); + + if (!sam_ads_state->ads_bind_dn || !sam_ads_state->ads_bind_pw) { + DEBUG(0, ("talloc_strdup() failed for bind dn or password\n")); + return NT_STATUS_NO_MEMORY; + } + + /* Maybe we should not check the result here? Server down on startup? */ + + if (module_params && *module_params) { + sam_ads_state->ldap_uri = talloc_strdup(sam_ads_state->mem_ctx, module_params); + if (!sam_ads_state->ldap_uri) { + DEBUG(0, ("talloc_strdup() failed for bind dn or password\n")); + return NT_STATUS_NO_MEMORY; + } + } else { + sam_ads_state->ldap_uri = "ldapi://"; + } + + ads_status = sam_ads_cached_connection(sam_ads_state); + if (!ADS_ERR_OK(ads_status)) { + return ads_ntstatus(ads_status); + } + + sam_method->private_data = sam_ads_state; + sam_method->free_private_data = sam_ads_free_private_data; + + sam_ads_debug_level = debug_add_class("sam_ads"); + if (sam_ads_debug_level == -1) { + sam_ads_debug_level = DBGC_ALL; + DEBUG(0, ("sam_ads: Couldn't register custom debugging class!\n")); + } else DEBUG(2, ("sam_ads: Debug class number of 'sam_ads': %d\n", sam_ads_debug_level)); + + DEBUG(5, ("Initializing sam_ads\n")); + if (module_params) + DEBUG(10, ("Module Parameters for Domain %s[%s]: %s\n", sam_method->domain_name, sam_method->domain_name, module_params)); + return NT_STATUS_OK; +} + +#else /* HAVE_LDAP */ +void sam_ads_dummy(void) +{ + DEBUG(0,("sam_ads: not supported!\n")); +} +#endif /* HAVE_LDAP */ diff --git a/source/torture/cmd_sam.c b/source/torture/cmd_sam.c index 3d4725c8a8a..627a2f59b36 100644 --- a/source/torture/cmd_sam.c +++ b/source/torture/cmd_sam.c @@ -99,7 +99,7 @@ static NTSTATUS cmd_lookup_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, in return NT_STATUS_INVALID_PARAMETER; } - if (!NT_STATUS_IS_OK(status = context_sam_lookup_sid(st->context, st->token, &sid, &name, &type))) { + if (!NT_STATUS_IS_OK(status = context_sam_lookup_sid(st->context, st->token, mem_ctx, &sid, &name, &type))) { printf("context_sam_lookup_sid failed!\n"); return status; } @@ -112,7 +112,7 @@ static NTSTATUS cmd_lookup_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, in static NTSTATUS cmd_lookup_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { - DOM_SID *sid; + DOM_SID sid; uint32 type; NTSTATUS status; if (argc != 3) { @@ -125,7 +125,7 @@ static NTSTATUS cmd_lookup_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, i return status; } - printf("SID: %s\n", sid_string_static(sid)); + printf("SID: %s\n", sid_string_static(&sid)); printf("Type: %d\n", type); return NT_STATUS_OK; -- cgit From f39f167900db3f06ec3c52c3ddf61e8bf3d57f56 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 28 Sep 2002 13:29:51 +0000 Subject: Second stab at Volker's 'make shadow passwords work' patch. Basicly, the password and the salt must be taken from the same place in both passwd and shadow based systems. Taking salt from one, and password from the other just doesn't work. So pull them from passwd, then overwrite them if need be. When modifying this file, watch the #ifdef hell - as vl found out, some variables are globals - but only with #ifndef WITH_PAM, and the code jumps all over the place with the password cracker. Getting double-reviews of any change to this file highly advised, it is one of our most system-specifc areas of code. (So now I get to take the blame for this one... :-) Andrew Bartlett --- source/auth/pass_check.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/auth/pass_check.c b/source/auth/pass_check.c index 63918796efb..e1783bfd1e2 100644 --- a/source/auth/pass_check.c +++ b/source/auth/pass_check.c @@ -634,6 +634,7 @@ NTSTATUS pass_check(const struct passwd *pass, const char *user, const char *pas /* Also the place to keep the 'password' no matter what crazy struct it started in... */ fstrcpy(this_crypted, pass->pw_passwd); + fstrcpy(this_salt, pass->pw_passwd); #ifdef HAVE_GETSPNAM { @@ -645,8 +646,10 @@ NTSTATUS pass_check(const struct passwd *pass, const char *user, const char *pas perhaps for IPC password changing requests */ spass = getspnam(pass->pw_name); - if (spass && spass->sp_pwdp) + if (spass && spass->sp_pwdp) { fstrcpy(this_crypted, spass->sp_pwdp); + fstrcpy(this_salt, spass->sp_pwdp); + } } #elif defined(IA_UINFO) { @@ -704,9 +707,6 @@ NTSTATUS pass_check(const struct passwd *pass, const char *user, const char *pas } #endif - /* extract relevant info */ - fstrcpy(this_salt, pass->pw_passwd); - #if defined(HAVE_TRUNCATED_SALT) /* crypt on some platforms (HPUX in particular) won't work with more than 2 salt characters. */ -- cgit From dc8b0d23e088d1e7f7fbc6ab0423eaa82f14e258 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 28 Sep 2002 14:26:19 +0000 Subject: Back out one of the API changes, now I recall how it was meant to work. (New accounts are created on thier internal talloc context, not a supplied one and not the one beloning to the SAM) Also actaully add the sam_skel to the tree. I need to work out with Jelmer an appropriate way to ensure we still have an example external build, and if this should move back out again. Andrew Bartlett --- source/sam/api.c | 4 +- source/sam/interface.c | 6 +- source/sam/sam_ads.c | 3 +- source/sam/sam_skel.c | 251 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 258 insertions(+), 6 deletions(-) create mode 100644 source/sam/sam_skel.c diff --git a/source/sam/api.c b/source/sam/api.c index 349c18787c2..fd345592ce8 100644 --- a/source/sam/api.c +++ b/source/sam/api.c @@ -120,7 +120,7 @@ NTSTATUS sam_get_domain_by_sid(const NT_USER_TOKEN *access_token, const uint32 a /* Account API */ -NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 access_desired, TALLOC_CTX *mem_ctx, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -128,7 +128,7 @@ NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 acce return NT_STATUS_UNSUCCESSFUL; } - return sam_context->sam_create_account(sam_context, access_token, access_desired, mem_ctx, domainsid, account_name, acct_ctrl, account); + return sam_context->sam_create_account(sam_context, access_token, access_desired, domainsid, account_name, acct_ctrl, account); } NTSTATUS sam_add_account(const DOM_SID *domainsid, const SAM_ACCOUNT_HANDLE *account) diff --git a/source/sam/interface.c b/source/sam/interface.c index 5d12cfc9990..994e36606a1 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -32,7 +32,9 @@ extern DOM_SID global_sid_Builtin; const struct sam_init_function_entry builtin_sam_init_functions[] = { { "plugin", sam_init_plugin }, +#ifdef HAVE_LDAP { "ads", sam_init_ads }, +#endif { "skel", sam_init_skel }, { NULL, NULL} }; @@ -356,7 +358,7 @@ NTSTATUS context_sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER return NT_STATUS_OK; } -NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, TALLOC_CTX *mem_ctx, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) +NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -373,7 +375,7 @@ NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TO return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, mem_ctx, account_name, acct_ctrl, account))) { + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, account_name, acct_ctrl, account))) { DEBUG(4,("sam_create_account in backend %s failed\n", tmp_methods->backendname)); return nt_status; diff --git a/source/sam/sam_ads.c b/source/sam/sam_ads.c index 7f2a901d81d..cd24baa1bcf 100755 --- a/source/sam/sam_ads.c +++ b/source/sam/sam_ads.c @@ -569,7 +569,6 @@ static NTSTATUS sam_ads_get_domain_handle(const SAM_METHODS *sam_method, const N /* Account API */ static NTSTATUS sam_ads_create_account(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, - TALLOC_CTX *mem_ctx, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; @@ -586,7 +585,7 @@ static NTSTATUS sam_ads_create_account(const SAM_METHODS *sam_method, if (!ADS_ERR_OK(ads_status)) return ads_ntstatus(ads_status); - ads_status = ADS_ERROR_NT(sam_init_account_talloc(mem_ctx, account)); + ads_status = ADS_ERROR_NT(sam_init_account(account)); if (!ADS_ERR_OK(ads_status)) return ads_ntstatus(ads_status); diff --git a/source/sam/sam_skel.c b/source/sam/sam_skel.c new file mode 100644 index 00000000000..80734707161 --- /dev/null +++ b/source/sam/sam_skel.c @@ -0,0 +1,251 @@ +/* + Unix SMB/CIFS implementation. + this is a skeleton for SAM backend modules. + + Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Jelmer Vernooij 2002 + Copyright (C) Andrew Bartlett 2002 + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" + +static int sam_skel_debug_level = DBGC_SAM; + +#undef DBGC_CLASS +#define DBGC_CLASS sam_skel_debug_level + +/* define the version of the SAM interface */ +SAM_MODULE_VERSIONING_MAGIC + +/* General API */ + +static NTSTATUS sam_skel_get_sec_desc(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_set_sec_desc(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + + +static NTSTATUS sam_skel_lookup_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, uint32 *type) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_lookup_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const char *name, DOM_SID *sid, uint32 *type) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + + +/* Domain API */ + +static NTSTATUS sam_skel_update_domain(const SAM_METHODS *sam_methods, const SAM_DOMAIN_HANDLE *domain) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_get_domain_handle(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, SAM_DOMAIN_HANDLE **domain) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + + +/* Account API */ + +static NTSTATUS sam_skel_create_account(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_add_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_update_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_delete_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_enum_accounts(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + + +static NTSTATUS sam_skel_get_account_by_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_get_account_by_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + + +/* Group API */ + +static NTSTATUS sam_skel_create_group(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_add_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_update_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_delete_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_enum_groups(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_get_group_by_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_get_group_by_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + + +static NTSTATUS sam_skel_add_member_to_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_delete_member_from_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +static NTSTATUS sam_skel_enum_groupmembers(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + + +static NTSTATUS sam_skel_get_groups_of_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) +{ + DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); + return NT_STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS sam_init_skel(SAM_METHODS *sam_methods, const char *module_params) +{ + /* Functions your SAM module doesn't provide should be set + * to NULL */ + + sam_methods->sam_get_sec_desc = sam_skel_get_sec_desc; + sam_methods->sam_set_sec_desc = sam_skel_set_sec_desc; + + sam_methods->sam_lookup_sid = sam_skel_lookup_sid; + sam_methods->sam_lookup_name = sam_skel_lookup_name; + + /* Domain API */ + + sam_methods->sam_update_domain = sam_skel_update_domain; + sam_methods->sam_get_domain_handle = sam_skel_get_domain_handle; + + /* Account API */ + + sam_methods->sam_create_account = sam_skel_create_account; + sam_methods->sam_add_account = sam_skel_add_account; + sam_methods->sam_update_account = sam_skel_update_account; + sam_methods->sam_delete_account = sam_skel_delete_account; + sam_methods->sam_enum_accounts = sam_skel_enum_accounts; + + sam_methods->sam_get_account_by_sid = sam_skel_get_account_by_sid; + sam_methods->sam_get_account_by_name = sam_skel_get_account_by_name; + + /* Group API */ + + sam_methods->sam_create_group = sam_skel_create_group; + sam_methods->sam_add_group = sam_skel_add_group; + sam_methods->sam_update_group = sam_skel_update_group; + sam_methods->sam_delete_group = sam_skel_delete_group; + sam_methods->sam_enum_groups = sam_skel_enum_groups; + sam_methods->sam_get_group_by_sid = sam_skel_get_group_by_sid; + sam_methods->sam_get_group_by_name = sam_skel_get_group_by_name; + + sam_methods->sam_add_member_to_group = sam_skel_add_member_to_group; + sam_methods->sam_delete_member_from_group = sam_skel_delete_member_from_group; + sam_methods->sam_enum_groupmembers = sam_skel_enum_groupmembers; + + sam_methods->sam_get_groups_of_sid = sam_skel_get_groups_of_sid; + + sam_methods->free_private_data = NULL; + + + sam_skel_debug_level = debug_add_class("sam_skel"); + if (sam_skel_debug_level == -1) { + sam_skel_debug_level = DBGC_SAM; + DEBUG(0, ("sam_skel: Couldn't register custom debugging class!\n")); + } else DEBUG(2, ("sam_skel: Debug class number of 'sam_skel': %d\n", sam_skel_debug_level)); + + if(module_params) + DEBUG(0, ("Starting 'sam_skel' with parameters '%s' for domain %s\n", module_params, sam_methods->domain_name)); + else + DEBUG(0, ("Starting 'sam_skel' for domain %s without paramters\n", sam_methods->domain_name)); + + return NT_STATUS_OK; +} -- cgit From cf249f5b222312bb05fb8ab53413d160149f7477 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 28 Sep 2002 14:41:12 +0000 Subject: Forgot to commit this in the patch changing back the create_user API. --- source/include/sam.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/include/sam.h b/source/include/sam.h index 8fbda7e8578..4cf46bfa757 100644 --- a/source/include/sam.h +++ b/source/include/sam.h @@ -183,7 +183,7 @@ typedef struct sam_context /* Account API */ - NTSTATUS (*sam_create_account) (const struct sam_context *context, const NT_USER_TOKEN *access_token, uint32 access_desired, TALLOC_CTX *mem_ctx, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_create_account) (const struct sam_context *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); NTSTATUS (*sam_add_account) (const struct sam_context *, const DOM_SID *domainsid, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_update_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_delete_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account); @@ -235,7 +235,7 @@ typedef struct sam_methods /* Account API */ - NTSTATUS (*sam_create_account) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, TALLOC_CTX *mem_ctx, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_create_account) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); NTSTATUS (*sam_add_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_update_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_delete_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); -- cgit From 9615ab10c006d8027f6a8b7dd3770eb77304dbdc Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 28 Sep 2002 14:42:32 +0000 Subject: Try to compile as much as possible with only ldap, but not kerberos. --- source/libads/disp_sec.c | 3 --- source/libads/krb5_setpw.c | 31 +++++++++++++++++++++++++++++++ source/libads/ldap.c | 33 +-------------------------------- source/libads/sasl.c | 4 +++- 4 files changed, 35 insertions(+), 36 deletions(-) diff --git a/source/libads/disp_sec.c b/source/libads/disp_sec.c index a930fd6fe09..a7b0bf6f07c 100644 --- a/source/libads/disp_sec.c +++ b/source/libads/disp_sec.c @@ -20,8 +20,6 @@ #include "includes.h" -#ifdef HAVE_ADS - static struct perm_mask_str { uint32 mask; char *str; @@ -158,5 +156,4 @@ void ads_disp_sd(SEC_DESC *sd) printf("-------------- End Of Security Descriptor\n"); } -#endif diff --git a/source/libads/krb5_setpw.c b/source/libads/krb5_setpw.c index a49b6cbe3b0..8079c0953fc 100644 --- a/source/libads/krb5_setpw.c +++ b/source/libads/krb5_setpw.c @@ -471,4 +471,35 @@ ADS_STATUS kerberos_set_password(const char *kpasswd_server, } +/** + * Set the machine account password + * @param ads connection to ads server + * @param hostname machine whose password is being set + * @param password new password + * @return status of password change + **/ +ADS_STATUS ads_set_machine_password(ADS_STRUCT *ads, + const char *hostname, + const char *password) +{ + ADS_STATUS status; + char *host = strdup(hostname); + char *principal; + + strlower(host); + + /* + we need to use the '$' form of the name here, as otherwise the + server might end up setting the password for a user instead + */ + asprintf(&principal, "%s$@%s", host, ads->auth.realm); + + status = krb5_set_password(ads->auth.kdc_server, principal, password, ads->auth.time_offset); + + free(host); + free(principal); + + return status; +} + #endif diff --git a/source/libads/ldap.c b/source/libads/ldap.c index 1004ea229c6..2133bf0719d 100644 --- a/source/libads/ldap.c +++ b/source/libads/ldap.c @@ -22,7 +22,7 @@ #include "includes.h" -#ifdef HAVE_ADS +#ifdef HAVE_LDAP /** * @file ldap.c @@ -1443,37 +1443,6 @@ ads_set_sd_error: return ret; } -/** - * Set the machine account password - * @param ads connection to ads server - * @param hostname machine whose password is being set - * @param password new password - * @return status of password change - **/ -ADS_STATUS ads_set_machine_password(ADS_STRUCT *ads, - const char *hostname, - const char *password) -{ - ADS_STATUS status; - char *host = strdup(hostname); - char *principal; - - strlower(host); - - /* - we need to use the '$' form of the name here, as otherwise the - server might end up setting the password for a user instead - */ - asprintf(&principal, "%s$@%s", host, ads->auth.realm); - - status = krb5_set_password(ads->auth.kdc_server, principal, password, ads->auth.time_offset); - - free(host); - free(principal); - - return status; -} - /** * pull the first entry from a ADS result * @param ads connection to ads server diff --git a/source/libads/sasl.c b/source/libads/sasl.c index f7dd01084a2..aa7d99a5f7c 100644 --- a/source/libads/sasl.c +++ b/source/libads/sasl.c @@ -20,7 +20,7 @@ #include "includes.h" -#ifdef HAVE_ADS +#ifdef HAVE_LDAP /* perform a LDAP/SASL/SPNEGO/NTLMSSP bind (just how many layers can @@ -190,10 +190,12 @@ static ADS_STATUS ads_sasl_spnego_bind(ADS_STRUCT *ads) } DEBUG(3,("got principal=%s\n", principal)); +#ifdef HAVE_KRB5 if (!(ads->auth.flags & ADS_AUTH_DISABLE_KERBEROS) && got_kerberos_mechanism && ads_kinit_password(ads) == 0) { return ads_sasl_spnego_krb5_bind(ads, principal); } +#endif /* lets do NTLMSSP ... this has the big advantage that we don't need to sync clocks, and we don't rely on special versions of the krb5 -- cgit From d47aff38db23815a48e64718ecb6c957101ecdac Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sat, 28 Sep 2002 15:01:58 +0000 Subject: Ok, hopefully final fix for this one. abartlet told a bit about the history. Volker --- source/libsmb/cliconnect.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index 695c6506b5d..3951e3c7762 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -185,12 +185,6 @@ static BOOL cli_session_setup_plaintext(struct cli_state *cli, char *user, { uint32 capabilities = cli_session_setup_capabilities(cli); char *p; - int push_flags = STR_TERMINATE; - - if (capabilities & CAP_UNICODE) - push_flags |= STR_UNICODE; - else - push_flags |= STR_ASCII; set_message(cli->outbuf,13,0,True); SCVAL(cli->outbuf,smb_com,SMBsesssetupX); @@ -204,7 +198,7 @@ static BOOL cli_session_setup_plaintext(struct cli_state *cli, char *user, SSVAL(cli->outbuf,smb_vwv8,0); SIVAL(cli->outbuf,smb_vwv11,capabilities); p = smb_buf(cli->outbuf); - p += clistr_push(cli, p, pass, -1, push_flags); /* password */ + p += clistr_push(cli, p, pass, -1, STR_TERMINATE); /* password */ SSVAL(cli->outbuf,smb_vwv7,PTR_DIFF(p, smb_buf(cli->outbuf))); p += clistr_push(cli, p, user, -1, STR_TERMINATE); /* username */ p += clistr_push(cli, p, workgroup, -1, STR_TERMINATE); /* workgroup */ -- cgit From e35a5da3a75c74ab066bff5e0f60d30deb008451 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 28 Sep 2002 20:09:30 +0000 Subject: Include ../include/libsmbclient.h instead of just libsmbclient.h - we don't want to include the globally installed libsmbclient.h - found by jht --- source/libsmb/libsmbclient.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libsmb/libsmbclient.c b/source/libsmb/libsmbclient.c index 44cba611d2f..faa4191e6dd 100644 --- a/source/libsmb/libsmbclient.c +++ b/source/libsmb/libsmbclient.c @@ -23,7 +23,7 @@ #include "includes.h" -#include "libsmbclient.h" +#include "../include/libsmbclient.h" /* * Functions exported by libsmb_cache.c that we need here -- cgit From cc878f43b9a91385ca3671f17a08253b8464c039 Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Sat, 28 Sep 2002 20:44:23 +0000 Subject: Fixing path to libsmbclient.h so it never gets crossed with a system installed one. --- source/libsmb/libsmb_cache.c | 2 +- source/libsmb/libsmb_compat.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/libsmb/libsmb_cache.c b/source/libsmb/libsmb_cache.c index df02cf3718f..b1620042f38 100644 --- a/source/libsmb/libsmb_cache.c +++ b/source/libsmb/libsmb_cache.c @@ -27,7 +27,7 @@ * Define this to get the real SMBCFILE and SMBCSRV structures */ #define _SMBC_INTERNAL -#include "libsmbclient.h" +#include "../include/libsmbclient.h" /* * Structure we use if internal caching mechanism is used diff --git a/source/libsmb/libsmb_compat.c b/source/libsmb/libsmb_compat.c index dbfd8603584..bba90c648eb 100644 --- a/source/libsmb/libsmb_compat.c +++ b/source/libsmb/libsmb_compat.c @@ -28,7 +28,7 @@ * Define this to get the real SMBCFILE and SMBCSRV structures */ #define _SMBC_INTERNAL -#include "libsmbclient.h" +#include "../include/libsmbclient.h" struct smbc_compat_fdlist { SMBCFILE * file; -- cgit From 9d529256c55e5a5099f69471ed1357cff06003fe Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 28 Sep 2002 21:17:33 +0000 Subject: Patch from metze to fix enum_accounts --- source/torture/cmd_sam.c | 69 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 13 deletions(-) diff --git a/source/torture/cmd_sam.c b/source/torture/cmd_sam.c index 627a2f59b36..4c274b60ad4 100644 --- a/source/torture/cmd_sam.c +++ b/source/torture/cmd_sam.c @@ -22,6 +22,11 @@ #include "includes.h" #include "samtest.h" +static void print_account(SAM_ACCOUNT_HANDLE *a) +{ + /* FIXME */ +} + static NTSTATUS cmd_context(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { NTSTATUS status; @@ -227,13 +232,13 @@ static NTSTATUS cmd_show_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, i if (!NT_STATUS_IS_OK(status = sam_get_domain_num_groups(domain, &tmp_uint32))) { printf("sam_get_domain_num_groups failed: %s\n", nt_errstr(status)); } else { - printf("Number of groups: %d\n", tmp_uint32); + printf("Number of groups: %u\n", tmp_uint32); } if (!NT_STATUS_IS_OK(status = sam_get_domain_num_aliases(domain, &tmp_uint32))) { printf("sam_get_domain_num_aliases failed: %s\n", nt_errstr(status)); } else { - printf("Number of aliases: %d\n", tmp_uint32); + printf("Number of aliases: %u\n", tmp_uint32); } if (!NT_STATUS_IS_OK(status = sam_get_domain_name(domain, &tmp_string))) { @@ -245,7 +250,7 @@ static NTSTATUS cmd_show_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, i if (!NT_STATUS_IS_OK(status = sam_get_domain_lockout_count(domain, &tmp_uint16))) { printf("sam_get_domain_lockout_count failed: %s\n", nt_errstr(status)); } else { - printf("Lockout Count: %d\n", tmp_uint16); + printf("Lockout Count: %u\n", tmp_uint16); } if (!NT_STATUS_IS_OK(status = sam_get_domain_force_logoff(domain, &tmp_bool))) { @@ -257,7 +262,7 @@ static NTSTATUS cmd_show_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, i if (!NT_STATUS_IS_OK(status = sam_get_domain_lockout_duration(domain, &tmp_nttime))) { printf("sam_get_domain_lockout_duration failed: %s\n", nt_errstr(status)); } else { - printf("Lockout duration: %d\n", tmp_nttime.low); + printf("Lockout duration: %u\n", tmp_nttime.low); } if (!NT_STATUS_IS_OK(status = sam_get_domain_login_pwdchange(domain, &tmp_bool))) { @@ -269,31 +274,31 @@ static NTSTATUS cmd_show_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, i if (!NT_STATUS_IS_OK(status = sam_get_domain_max_pwdage(domain, &tmp_nttime))) { printf("sam_get_domain_max_pwdage failed: %s\n", nt_errstr(status)); } else { - printf("Maximum password age: %d\n", tmp_nttime.low); + printf("Maximum password age: %u\n", tmp_nttime.low); } if (!NT_STATUS_IS_OK(status = sam_get_domain_min_pwdage(domain, &tmp_nttime))) { printf("sam_get_domain_min_pwdage failed: %s\n", nt_errstr(status)); } else { - printf("Minimal password age: %d\n", tmp_nttime.low); + printf("Minimal password age: %u\n", tmp_nttime.low); } if (!NT_STATUS_IS_OK(status = sam_get_domain_min_pwdlength(domain, &tmp_uint16))) { printf("sam_get_domain_min_pwdlength: %s\n", nt_errstr(status)); } else { - printf("Minimal Password Length: %d\n", tmp_uint16); + printf("Minimal Password Length: %u\n", tmp_uint16); } if (!NT_STATUS_IS_OK(status = sam_get_domain_pwd_history(domain, &tmp_uint16))) { printf("sam_get_domain_pwd_history failed: %s\n", nt_errstr(status)); } else { - printf("Password history: %d\n", tmp_uint16); + printf("Password history: %u\n", tmp_uint16); } if (!NT_STATUS_IS_OK(status = sam_get_domain_reset_count(domain, &tmp_nttime))) { printf("sam_get_domain_reset_count failed: %s\n", nt_errstr(status)); } else { - printf("Reset count: %d\n", tmp_nttime.low); + printf("Reset count: %u\n", tmp_nttime.low); } if (!NT_STATUS_IS_OK(status = sam_get_domain_server(domain, &tmp_string))) { @@ -326,6 +331,7 @@ static NTSTATUS cmd_enum_accounts(struct samtest_state *st, TALLOC_CTX *mem_ctx, DOM_SID sid; int32 account_count, i; SAM_ACCOUNT_ENUM *accounts; + uint16 acct_ctrl = (ACB_NORMAL |ACB_WSTRUST |ACB_SVRTRUST |ACB_DOMTRUST | ACB_MNS); if (argc != 2) { printf("Usage: enum_accounts \n"); @@ -337,7 +343,7 @@ static NTSTATUS cmd_enum_accounts(struct samtest_state *st, TALLOC_CTX *mem_ctx, return NT_STATUS_INVALID_PARAMETER; } - if (!NT_STATUS_IS_OK(status = context_sam_enum_accounts(st->context, st->token, &sid, 0, &account_count, &accounts))) { + if (!NT_STATUS_IS_OK(status = context_sam_enum_accounts(st->context, st->token, &sid, acct_ctrl, &account_count, &accounts))) { printf("context_sam_enum_accounts failed: %s\n", nt_errstr(status)); return status; } @@ -348,7 +354,7 @@ static NTSTATUS cmd_enum_accounts(struct samtest_state *st, TALLOC_CTX *mem_ctx, } for (i = 0; i < account_count; i++) - printf("%s\t%s\t%s\t%s\t%d\n", + printf("SID: %s\nName: %s\nFullname: %s\nDescription: %s\nACB_BITS: %08X\n\n", sid_string_static(&accounts[i].sid), accounts[i].account_name, accounts[i].full_name, accounts[i].account_desc, accounts[i].acct_ctrl); @@ -360,12 +366,49 @@ static NTSTATUS cmd_enum_accounts(struct samtest_state *st, TALLOC_CTX *mem_ctx, static NTSTATUS cmd_lookup_account_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { - return NT_STATUS_NOT_IMPLEMENTED; + NTSTATUS status; + DOM_SID sid; + SAM_ACCOUNT_HANDLE *account; + + if (argc != 2) { + printf("Usage: lookup_account_sid \n"); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!string_to_sid(&sid, argv[1])){ + printf("Unparseable SID specified!\n"); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!NT_STATUS_IS_OK(status = context_sam_get_account_by_sid(st->context, st->token, USER_ALL_ACCESS, &sid, &account))) { + printf("context_sam_get_account_by_sid failed: %s\n", nt_errstr(status)); + return status; + } + + print_account(account); + + return NT_STATUS_OK; } static NTSTATUS cmd_lookup_account_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { - return NT_STATUS_NOT_IMPLEMENTED; + NTSTATUS status; + SAM_ACCOUNT_HANDLE *account; + + if (argc != 3) { + printf("Usage: lookup_account_name \n"); + return NT_STATUS_INVALID_PARAMETER; + } + + + if (!NT_STATUS_IS_OK(status = context_sam_get_account_by_name(st->context, st->token, USER_ALL_ACCESS, argv[1], argv[2], &account))) { + printf("context_sam_get_account_by_sid failed: %s\n", nt_errstr(status)); + return status; + } + + print_account(account); + + return NT_STATUS_OK; } static NTSTATUS cmd_create_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) -- cgit From 470a1316324821984745bcf7321bafd8d0fd0a77 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 28 Sep 2002 22:54:16 +0000 Subject: Fix typos + report FIXME --- source/sam/interface.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/sam/interface.c b/source/sam/interface.c index 994e36606a1..9a21eb844fd 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -940,7 +940,7 @@ static NTSTATUS make_backend_entry(SAM_BACKEND_ENTRY *backend_entry, char *sam_b } if (backend_entry->domain_name == NULL) { - DEBUG(10,("make_backend_entry: no domain was specified for sam module %s. Useing default domain %s\n", + DEBUG(10,("make_backend_entry: no domain was specified for sam module %s. Using default domain %s\n", backend_entry->module_name, lp_workgroup())); backend_entry->domain_name = smb_xstrdup(lp_workgroup()); } @@ -955,7 +955,7 @@ static NTSTATUS make_backend_entry(SAM_BACKEND_ENTRY *backend_entry, char *sam_b if (!secrets_fetch_domain_sid(backend_entry->domain_name, backend_entry->domain_sid)) { DEBUG(2,("make_backend_entry: There is no SID stored for domain %s. Creating a new one.\n", backend_entry->domain_name)); - /* FIXME */ + DEBUG(0, ("FIXME in %s:%d\n", __FILE__, __LINE__)); ZERO_STRUCTP(backend_entry->domain_sid); } @@ -1024,8 +1024,8 @@ static NTSTATUS sam_context_check_default_backends(SAM_CONTEXT *context) ntstatus = sam_get_methods_by_sid(context, &methods, &global_sid_Builtin); if (NT_STATUS_EQUAL(ntstatus, NT_STATUS_NO_SUCH_DOMAIN)) { - DEBUG(4,("There was no backend specified for domain %s; using %s\n", - lp_workgroup(), SAM_DEFAULT_BACKEND)); + DEBUG(4,("There was no backend specified for domain %s(%s); using %s\n", + lp_workgroup(), sid_string_static(global_sam_sid), SAM_DEFAULT_BACKEND)); SAM_ASSERT(global_sam_sid); @@ -1111,7 +1111,7 @@ NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **sam_backends_param) while (sam_backends_param[nBackends]) nBackends++; - DEBUG(6,("There are %d domains listed with there backends\n", nBackends)); + DEBUG(6,("There are %d domains listed with their backends\n", nBackends)); if ((backends = (SAM_BACKEND_ENTRY *)malloc(sizeof(*backends)*nBackends)) == NULL) { DEBUG(0,("make_sam_context_list: failed to allocate backends\n")); -- cgit From b01c55ed5bbf4903a87fd17d70ae9acd832d60fe Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 28 Sep 2002 22:58:44 +0000 Subject: Fix 'plugin' command --- source/torture/cmd_sam.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/torture/cmd_sam.c b/source/torture/cmd_sam.c index 4c274b60ad4..9f162f2a07c 100644 --- a/source/torture/cmd_sam.c +++ b/source/torture/cmd_sam.c @@ -56,12 +56,12 @@ static NTSTATUS cmd_load_module(struct samtest_state *st, TALLOC_CTX *mem_ctx, i char *plugin_arg[2]; NTSTATUS status; if (argc != 2 && argc != 3) { - printf("Usage: load [domain-sid]\n"); + printf("Usage: load [domain-name]\n"); return NT_STATUS_OK; } if (argc == 3) - asprintf(&plugin_arg[0], "%s|plugin:%s", argv[2], argv[1]); + asprintf(&plugin_arg[0], "plugin:%s|%s", argv[1], argv[2]); else asprintf(&plugin_arg[0], "plugin:%s", argv[1]); -- cgit From 85122800fce7a6f9eeee0651f6d9eb9218e35bb6 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sun, 29 Sep 2002 01:01:44 +0000 Subject: Updates for sam_ads by metze - add the start of domain policy searching, and a small fix for the previous merge. Andrew Bartlett --- source/sam/sam_ads.c | 175 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 150 insertions(+), 25 deletions(-) diff --git a/source/sam/sam_ads.c b/source/sam/sam_ads.c index cd24baa1bcf..e10b476997b 100755 --- a/source/sam/sam_ads.c +++ b/source/sam/sam_ads.c @@ -173,6 +173,27 @@ static ADS_STATUS sam_ads_do_search(struct sam_ads_privates *private, const char return ads_do_search_retry(private->ads_struct, bind_path, scope, exp, attrs, res); } + +/********************************************* +here we have to check the update serial number + - this is the core of the ldap cache +*********************************************/ +static ADS_STATUS sam_ads_usn_is_valid(ADS_STRUCT *ads_struct, uint32 usn_in, uint32 *usn_out) +{ + ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); + + SAM_ASSERT(ads_struct && usn_out); + + ads_status = ads_USN(ads_struct, usn_out); + if (!ADS_ERR_OK(ads_status)) + return ads_status; + + if (*usn_out == usn_in) + return ADS_SUCCESS; + + return ads_status; +} + /*********************************************** Initialize SAM_ACCOUNT_HANDLE from an ADS query ************************************************/ @@ -290,14 +311,116 @@ static ADS_STATUS sam_ads_get_tree_sec_desc(const SAM_METHODS *sam_method, const static ADS_STATUS sam_ads_account_policy_get(const SAM_METHODS *sam_method, int field, uint32 *value) { - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_NOT_IMPLEMENTED); - DEBUG(0,("sam_ads: %s needs to be done! %s\n",__FUNCTION__,ads_errstr(ads_status))); + ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER); + struct sam_ads_privates *privates = (struct sam_ads_privates *)sam_method->private_data; + ADS_STRUCT *ads_struct = privates->ads_struct; + void *ap_res; + void *ap_msg; + const char *ap_attrs[] = {"minPwdLength","pwdHistoryLength", + /*"mustLogonToChangePass",*/"lockoutDuration" + "maxPwdAge","minPwdAge",NULL}; + /*lockOutObservationWindow + lockoutThreshold $ pwdProperties*/ + static uint32 ap[9]; + static uint32 ap_usn = 0; + uint32 tmp_usn = 0; SAM_ASSERT(sam_method && value); - /* Fix Me */ + ads_status = sam_ads_usn_is_valid(ads_struct,ap_usn,&tmp_usn); + if (!ADS_ERR_OK(ads_status)) { + ads_status = sam_ads_do_search(privates, ads_struct->config.bind_path, LDAP_SCOPE_BASE, "(objectClass=*)", ap_attrs, &ap_res); + if (!ADS_ERR_OK(ads_status)) + return ads_status; + + if (ads_count_replies(ads_struct, ap_res) != 1) { + ads_msgfree(ads_struct, ap_res); + return ADS_ERROR(LDAP_NO_RESULTS_RETURNED); + } + + if (!(ap_msg = ads_first_entry(ads_struct, ap_res))) { + ads_msgfree(ads_struct, ap_res); + return ADS_ERROR(LDAP_NO_RESULTS_RETURNED); + } + + if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[0], &ap[0])) { + /* AP_MIN_PASSWORD_LEN */ + ap[0] = MINPASSWDLENGTH;/* 5 chars minimum */ + } + if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[1], &ap[1])) { + /* AP_PASSWORD_HISTORY */ + ap[1] = 0;/* don't keep any old password */ + } + if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[2], &ap[2])) { + /* AP_USER_MUST_LOGON_TO_CHG_PASS */ + ap[2] = 0;/* don't force user to logon */ + } + if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[3], &ap[3])) { + /* AP_MAX_PASSWORD_AGE */ + ap[3] = MAX_PASSWORD_AGE;/* 21 days */ + } + if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[4], &ap[4])) { + /* AP_MIN_PASSWORD_AGE */ + ap[4] = 0;/* 0 days */ + } + if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[5], &ap[5])) { + /* AP_LOCK_ACCOUNT_DURATION */ + ap[5] = 0;/* lockout for 0 minutes */ + } + if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[6], &ap[6])) { + /* AP_RESET_COUNT_TIME */ + ap[6] = 0;/* reset immediatly */ + } + if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[7], &ap[7])) { + /* AP_BAD_ATTEMPT_LOCKOUT */ + ap[7] = 0;/* don't lockout */ + } + if (!ads_pull_uint32(ads_struct, ap_msg, ap_attrs[8], &ap[8])) { + /* AP_TIME_TO_LOGOUT */ + ap[8] = -1;/* don't force logout */ + } + + ads_msgfree(ads_struct, ap_res); + ap_usn = tmp_usn; + } + switch(field) { - /* Fix Me */ + case AP_MIN_PASSWORD_LEN: + *value = ap[0]; + ads_status = ADS_ERROR_NT(NT_STATUS_OK); + break; + case AP_PASSWORD_HISTORY: + *value = ap[1]; + ads_status = ADS_ERROR_NT(NT_STATUS_OK); + break; + case AP_USER_MUST_LOGON_TO_CHG_PASS: + *value = ap[2]; + ads_status = ADS_ERROR_NT(NT_STATUS_OK); + break; + case AP_MAX_PASSWORD_AGE: + *value = ap[3]; + ads_status = ADS_ERROR_NT(NT_STATUS_OK); + break; + case AP_MIN_PASSWORD_AGE: + *value = ap[4]; + ads_status = ADS_ERROR_NT(NT_STATUS_OK); + break; + case AP_LOCK_ACCOUNT_DURATION: + *value = ap[5]; + ads_status = ADS_ERROR_NT(NT_STATUS_OK); + break; + case AP_RESET_COUNT_TIME: + *value = ap[6]; + ads_status = ADS_ERROR_NT(NT_STATUS_OK); + break; + case AP_BAD_ATTEMPT_LOCKOUT: + *value = ap[7]; + ads_status = ADS_ERROR_NT(NT_STATUS_OK); + break; + case AP_TIME_TO_LOGOUT: + *value = ap[8]; + ads_status = ADS_ERROR_NT(NT_STATUS_OK); + break; default: *value = 0; break; } @@ -351,26 +474,12 @@ static NTSTATUS sam_ads_get_sec_desc(const SAM_METHODS *sam_method, const NT_USE return ads_ntstatus(ads_status); } - sec_desc_msg = ads_first_entry(ads_struct, sec_desc_res); - if (!(mem_ctx = talloc_init_named("sec_desc parse in sam_ads"))) { DEBUG(1, ("talloc_init_named() failed for sec_desc parse context in sam_ads")); ads_msgfree(ads_struct, sec_desc_res); return NT_STATUS_NO_MEMORY; } - if (!ads_pull_sd(ads_struct, mem_ctx, sec_desc_msg, sec_desc_attrs[0], sd)) { - talloc_destroy(mem_ctx); - ads_msgfree(ads_struct, sec_desc_res); - return NT_STATUS_INVALID_PARAMETER; - } - - if (!ADS_ERR_OK(ads_status)) { - talloc_destroy(mem_ctx); - ads_msgfree(ads_struct, sec_desc_res); - return ads_ntstatus(ads_status); - } - if (ads_count_replies(ads_struct, sec_desc_res) != 1) { DEBUG(1,("sam_ads_get_sec_desc: duplicate or 0 results for sid %s\n", sid_to_string(sid_str, sid))); @@ -413,11 +522,20 @@ static NTSTATUS sam_ads_lookup_sid(const SAM_METHODS *sam_method, const NT_USER_ TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, enum SID_NAME_USE *type) { + ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); struct sam_ads_privates *privates = (struct sam_ads_privates *)sam_method->private_data; ADS_STRUCT *ads_struct = privates->ads_struct; - SAM_ASSERT(sam_method); + SEC_DESC *my_sd; + + SAM_ASSERT(sam_method && access_token && mem_ctx && sid && name && type); + + ads_status = sam_ads_get_tree_sec_desc(sam_method, ADS_ROOT_TREE, &my_sd); + if (!ADS_ERR_OK(ads_status)) + return ads_ntstatus(ads_status); - /* Ignoring access_token for now */ + ads_status = sam_ads_access_check(sam_method, my_sd, access_token, DOMAIN_READ); + if (!ADS_ERR_OK(ads_status)) + return ads_ntstatus(ads_status); return ads_sid_to_name(ads_struct, mem_ctx, sid, name, type); } @@ -425,11 +543,20 @@ static NTSTATUS sam_ads_lookup_sid(const SAM_METHODS *sam_method, const NT_USER_ static NTSTATUS sam_ads_lookup_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const char *name, DOM_SID *sid, enum SID_NAME_USE *type) { + ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); struct sam_ads_privates *privates = (struct sam_ads_privates *)sam_method->private_data; ADS_STRUCT *ads_struct = privates->ads_struct; - SAM_ASSERT(sam_method); + SEC_DESC *my_sd; - /* Ignoring access_token for now */ + SAM_ASSERT(sam_method && access_token && name && sid && type); + + ads_status = sam_ads_get_tree_sec_desc(sam_method, ADS_ROOT_TREE, &my_sd); + if (!ADS_ERR_OK(ads_status)) + return ads_ntstatus(ads_status); + + ads_status = sam_ads_access_check(sam_method, my_sd, access_token, DOMAIN_READ); + if (!ADS_ERR_OK(ads_status)) + return ads_ntstatus(ads_status); return ads_name_to_sid(ads_struct, name, sid, type); } @@ -458,7 +585,7 @@ static NTSTATUS sam_ads_get_domain_handle(const SAM_METHODS *sam_method, const N DEBUG(5,("sam_ads_get_domain_handle: %d\n",__LINE__)); - SAM_ASSERT(sam_method && domain); + SAM_ASSERT(sam_method && access_token && domain); (*domain) = NULL; @@ -572,7 +699,6 @@ static NTSTATUS sam_ads_create_account(const SAM_METHODS *sam_method, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { ADS_STATUS ads_status = ADS_STATUS_NOT_IMPLEMENTED; - struct sam_ads_privates *privates = (struct sam_ads_privates *)sam_method->private_data; SEC_DESC *sd = NULL; SAM_ASSERT(sam_method && access_token && account_name && account); @@ -967,7 +1093,6 @@ Init the ADS SAM backend NTSTATUS sam_init_ads(SAM_METHODS *sam_method, const char *module_params) { ADS_STATUS ads_status; - NTSTATUS nt_status; struct sam_ads_privates *sam_ads_state; TALLOC_CTX *mem_ctx; -- cgit From b9036900d0bb227ec16c6a5792c18ef943dcf015 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sun, 29 Sep 2002 06:07:58 +0000 Subject: Remove sam/api.c. In order to reduce complexity, this patch removes the upper layer of the SAM API. Also, we remove the function pointers on the sam context - there really is no point making these replaceable - that's for the modules. Move a number of functions in include/interface.c around to allow for use of 'static' and to keep the external API in one chunk, at the bottem. All these functions were renamed to remove the context_sam -> sam Consequential changes in the samtest module, and back out metze's change for ACB filtering, becouse I think it belongs in the SAM backeds. (But I will take debate on this one). Changes to the lib/util_sid.c code to create a 'system' token, and make it a SAM_ASSERT() enforced requirement to have a token on those calls that specify it. samtest now uses this. We should have a samtest call to set your own token. We also need to extend our se_access code to cover the things that Win2k is returning in it's access tokens. Currently our system token doesn't pass, due to unexpected flags. (When running sam_ads against Win2k) Andrew Bartlett --- source/Makefile.in | 2 +- source/include/sam.h | 45 -- source/lib/util_sid.c | 26 + source/sam/api.c | 322 ----------- source/sam/interface.c | 1346 +++++++++++++++++++++++++--------------------- source/torture/cmd_sam.c | 25 +- source/torture/samtest.c | 3 +- 7 files changed, 762 insertions(+), 1007 deletions(-) delete mode 100644 source/sam/api.c diff --git a/source/Makefile.in b/source/Makefile.in index 598062ec051..0c553a95e8f 100644 --- a/source/Makefile.in +++ b/source/Makefile.in @@ -224,7 +224,7 @@ PASSDB_OBJ = $(PASSDB_GET_SET_OBJ) passdb/passdb.o passdb/pdb_interface.o \ SAM_STATIC_MODULES = sam/sam_plugin.o sam/sam_skel.o sam/sam_ads.o SAM_OBJ = sam/account.o sam/get_set_account.o sam/get_set_group.o \ - sam/get_set_domain.o sam/interface.o sam/api.o $(SAM_STATIC_MODULES) + sam/get_set_domain.o sam/interface.o $(SAM_STATIC_MODULES) SAMTEST_OBJ = torture/samtest.o torture/cmd_sam.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o $(LIBADS_OBJ) $(PASSDB_OBJ) $(SECRETS_OBJ) $(GROUPDB_OBJ) diff --git a/source/include/sam.h b/source/include/sam.h index 4cf46bfa757..d6fc1d7a1c7 100644 --- a/source/include/sam.h +++ b/source/include/sam.h @@ -162,51 +162,6 @@ typedef struct sam_context struct sam_methods *methods; TALLOC_CTX *mem_ctx; - /* General API */ - - NTSTATUS (*sam_get_sec_desc) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd); - NTSTATUS (*sam_set_sec_desc) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd); - - NTSTATUS (*sam_lookup_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, TALLOC_CTX *ctx, const DOM_SID *sid, char **name, uint32 *type); - NTSTATUS (*sam_lookup_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID *sid, uint32 *type); - - - /* Domain API */ - - NTSTATUS (*sam_update_domain) (const struct sam_context *, const SAM_DOMAIN_HANDLE *domain); - - NTSTATUS (*sam_enum_domains) (const struct sam_context *, const NT_USER_TOKEN *access_token, int32 *domain_count, DOM_SID **domains, char **domain_names); - NTSTATUS (*sam_lookup_domain) (const struct sam_context *, const NT_USER_TOKEN * access_token, const char *domain, DOM_SID **domainsid); - - NTSTATUS (*sam_get_domain_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain); - - - /* Account API */ - - NTSTATUS (*sam_create_account) (const struct sam_context *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); - NTSTATUS (*sam_add_account) (const struct sam_context *, const DOM_SID *domainsid, const SAM_ACCOUNT_HANDLE *account); - NTSTATUS (*sam_update_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account); - NTSTATUS (*sam_delete_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account); - NTSTATUS (*sam_enum_accounts) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domain, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts); - - NTSTATUS (*sam_get_account_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account); - NTSTATUS (*sam_get_account_by_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account); - - /* Group API */ - - NTSTATUS (*sam_create_group) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group); - NTSTATUS (*sam_add_group) (const struct sam_context *, const DOM_SID *domainsid, const SAM_GROUP_HANDLE *group); - NTSTATUS (*sam_update_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group); - NTSTATUS (*sam_delete_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group); - NTSTATUS (*sam_enum_groups) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups); - NTSTATUS (*sam_get_group_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); - NTSTATUS (*sam_get_group_by_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group); - - NTSTATUS (*sam_add_member_to_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); - NTSTATUS (*sam_delete_member_from_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); - NTSTATUS (*sam_enum_groupmembers) (const struct sam_context *, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members); - - NTSTATUS (*sam_get_groups_of_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups); void (*free_fn)(struct sam_context **); } SAM_CONTEXT; diff --git a/source/lib/util_sid.c b/source/lib/util_sid.c index 18260be8700..9e533eb9fd1 100644 --- a/source/lib/util_sid.c +++ b/source/lib/util_sid.c @@ -34,6 +34,7 @@ DOM_SID global_sid_World_Domain; /* Everyone domain */ DOM_SID global_sid_World; /* Everyone */ DOM_SID global_sid_Creator_Owner_Domain; /* Creator Owner domain */ DOM_SID global_sid_NT_Authority; /* NT Authority */ +DOM_SID global_sid_System; /* System */ DOM_SID global_sid_NULL; /* NULL sid */ DOM_SID global_sid_Authenticated_Users; /* All authenticated rids */ DOM_SID global_sid_Network; /* Network rids */ @@ -58,6 +59,12 @@ NT_USER_TOKEN anonymous_token = { anon_sid_array }; +static DOM_SID system_sid_array[4]; +NT_USER_TOKEN system_token = { + 4, + system_sid_array +}; + /**************************************************************************** Lookup string names for SID types. ****************************************************************************/ @@ -101,6 +108,10 @@ const char *sid_type_lookup(uint32 sid_type) void generate_wellknown_sids(void) { + static BOOL initialised = False; + if (initialised) + return; + string_to_sid(&global_sid_Builtin, "S-1-5-32"); string_to_sid(&global_sid_Builtin_Administrators, "S-1-5-32-544"); string_to_sid(&global_sid_Builtin_Users, "S-1-5-32-545"); @@ -111,6 +122,7 @@ void generate_wellknown_sids(void) string_to_sid(&global_sid_Creator_Owner, "S-1-3-0"); string_to_sid(&global_sid_Creator_Group, "S-1-3-1"); string_to_sid(&global_sid_NT_Authority, "S-1-5"); + string_to_sid(&global_sid_System, "S-1-5-18"); string_to_sid(&global_sid_NULL, "S-1-0-0"); string_to_sid(&global_sid_Authenticated_Users, "S-1-5-11"); string_to_sid(&global_sid_Network, "S-1-5-2"); @@ -120,6 +132,20 @@ void generate_wellknown_sids(void) sid_copy( &anonymous_token.user_sids[0], &global_sid_World); sid_copy( &anonymous_token.user_sids[1], &global_sid_Network); sid_copy( &anonymous_token.user_sids[2], &global_sid_Anonymous); + + /* Create the system token. */ + sid_copy( &system_token.user_sids[0], &global_sid_World); + sid_copy( &system_token.user_sids[1], &global_sid_Authenticated_Users); + sid_copy( &system_token.user_sids[2], &global_sid_Builtin_Administrators); + sid_copy( &system_token.user_sids[3], &global_sid_System); + + initialised = True; +} + +NT_USER_TOKEN *get_system_token(void) +{ + generate_wellknown_sids(); /* The token is initialised here */ + return &system_token; } /************************************************************************** diff --git a/source/sam/api.c b/source/sam/api.c deleted file mode 100644 index fd345592ce8..00000000000 --- a/source/sam/api.c +++ /dev/null @@ -1,322 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SAM interface API. - - Copyright (C) Stefan (metze) Metzmacher 2002 - - This program 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 this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_SAM - -/* these functions should be used by the rest of SAMBA --metze */ - -/* General API */ - -NTSTATUS sam_get_sec_desc(const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_get_sec_desc(sam_context, access_token, sid, sd); -} - -NTSTATUS sam_set_sec_desc(const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_set_sec_desc(sam_context, access_token, sid, sd); -} - -NTSTATUS sam_lookup_sid(const NT_USER_TOKEN *access_token, TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, uint32 *type) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_lookup_sid(sam_context, access_token, mem_ctx, sid, name, type); -} - -NTSTATUS sam_lookup_name(const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID *sid, uint32 *type) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_lookup_name(sam_context, access_token,domain, name, sid, type); -} - -/* Domain API */ - -NTSTATUS sam_update_domain(const SAM_DOMAIN_HANDLE *domain) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_update_domain(sam_context, domain); -} - -NTSTATUS sam_enum_domains(const NT_USER_TOKEN *access_token, int32 *domain_count, DOM_SID **domains, char **domain_names) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_enum_domains(sam_context, access_token, domain_count, domains, domain_names); -} - -NTSTATUS sam_lookup_domain(const NT_USER_TOKEN * access_token, const char *domain, DOM_SID **domainsid) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_lookup_domain(sam_context, access_token, domain, domainsid); -} - -NTSTATUS sam_get_domain_by_sid(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_get_domain_by_sid(sam_context, access_token, access_desired, domainsid, domain); -} - -/* Account API */ - -NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_create_account(sam_context, access_token, access_desired, domainsid, account_name, acct_ctrl, account); -} - -NTSTATUS sam_add_account(const DOM_SID *domainsid, const SAM_ACCOUNT_HANDLE *account) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_add_account(sam_context, domainsid, account); -} - -NTSTATUS sam_update_account(const SAM_ACCOUNT_HANDLE *account) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_update_account(sam_context, account); -} - -NTSTATUS sam_delete_account(const SAM_ACCOUNT_HANDLE *account) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_delete_account(sam_context, account); -} - -NTSTATUS sam_enum_accounts(const NT_USER_TOKEN *access_token, const DOM_SID *domain, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_enum_accounts(sam_context, access_token, domain, acct_ctrl, account_count, accounts); -} - -NTSTATUS sam_get_account_by_sid(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_get_account_by_sid(sam_context, access_token, access_desired, accountsid, account); -} - -NTSTATUS sam_get_account_by_name(const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_get_account_by_name(sam_context, access_token, access_desired, domain, name, account); -} - -/* Group API */ - -NTSTATUS sam_create_group(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_create_group(sam_context, access_token, access_desired, domainsid, group_name, group_ctrl, group); -} - -NTSTATUS sam_add_group(const DOM_SID *domainsid, const SAM_GROUP_HANDLE *group) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_add_group(sam_context, domainsid, group); -} - -NTSTATUS sam_update_group(const SAM_GROUP_HANDLE *group) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_update_group(sam_context, group); -} - -NTSTATUS sam_delete_group(const SAM_GROUP_HANDLE *group) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_delete_group(sam_context, group); -} - -NTSTATUS sam_enum_groups(const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_enum_groups(sam_context, access_token, domainsid, group_ctrl, groups_count, groups); -} - -NTSTATUS sam_get_group_by_sid(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_get_group_by_sid(sam_context, access_token, access_desired, groupsid, group); -} - -NTSTATUS sam_get_group_by_name(const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_get_group_by_name(sam_context, access_token, access_desired, domain, name, group); -} - -NTSTATUS sam_add_member_to_group(const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_add_member_to_group(sam_context, group, member); -} - -NTSTATUS sam_delete_member_from_group(const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_delete_member_from_group(sam_context, group, member); -} - -NTSTATUS sam_enum_groupmembers(const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_enum_groupmembers(sam_context, group, members_count, members); -} - -NTSTATUS sam_get_groups_of_sid(const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) -{ - SAM_CONTEXT *sam_context = sam_get_static_context(False); - - if (!sam_context) { - return NT_STATUS_UNSUCCESSFUL; - } - - return sam_context->sam_get_groups_of_sid(sam_context, access_token, sids, group_ctrl, group_count, groups); -} - diff --git a/source/sam/interface.c b/source/sam/interface.c index 9a21eb844fd..8e4e0d114bc 100644 --- a/source/sam/interface.c +++ b/source/sam/interface.c @@ -39,14 +39,8 @@ const struct sam_init_function_entry builtin_sam_init_functions[] = { { NULL, NULL} }; -/****************************************************************** - context_sam_* functions are used to link the external SAM interface - with the internal backends. These functions lookup the appropriate - backends for the domain and pass on to the function in sam_methods - in the selected backend - *******************************************************************/ -NTSTATUS sam_get_methods_by_sid(const SAM_CONTEXT *context, SAM_METHODS **sam_method, const DOM_SID *domainsid) +static NTSTATUS sam_get_methods_by_sid(const SAM_CONTEXT *context, SAM_METHODS **sam_method, const DOM_SID *domainsid) { SAM_METHODS *tmp_methods; @@ -71,7 +65,7 @@ NTSTATUS sam_get_methods_by_sid(const SAM_CONTEXT *context, SAM_METHODS **sam_me return NT_STATUS_NO_SUCH_DOMAIN; } -NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_method, const char *domainname) +static NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_method, const char *domainname) { SAM_METHODS *tmp_methods; @@ -96,379 +90,526 @@ NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_m return NT_STATUS_NO_SUCH_DOMAIN; } -NTSTATUS context_sam_get_sec_desc(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) +static NTSTATUS make_sam_methods(TALLOC_CTX *mem_ctx, SAM_METHODS **methods) { - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("context_sam_get_sec_desc: %d\n", __LINE__)); - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } + *methods = talloc(mem_ctx, sizeof(SAM_METHODS)); - if (!tmp_methods->sam_get_sec_desc) { - DEBUG(3, ("context_sam_get_sec_desc: sam_methods of the domain did not specify sam_get_sec_desc\n")); - return NT_STATUS_NOT_IMPLEMENTED; + if (!*methods) { + return NT_STATUS_NO_MEMORY; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_sec_desc(tmp_methods, access_token, sid, sd))) { - DEBUG(4,("sam_get_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); - return nt_status; - } + ZERO_STRUCTP(*methods); return NT_STATUS_OK; } -NTSTATUS context_sam_set_sec_desc(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) +/****************************************************************** + Free and cleanup a sam context, any associated data and anything + that the attached modules might have associated. + *******************************************************************/ + +void free_sam_context(SAM_CONTEXT **context) { - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; + SAM_METHODS *sam_selected = (*context)->methods; - DEBUG(5,("context_sam_set_sec_desc: %d\n", __LINE__)); - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; + while (sam_selected) { + if (sam_selected->free_private_data) { + sam_selected->free_private_data(&(sam_selected->private_data)); + } + sam_selected = sam_selected->next; } - if (!tmp_methods->sam_set_sec_desc) { - DEBUG(3, ("context_sam_set_sec_desc: sam_methods of the domain did not specify sam_set_sec_desc\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } + talloc_destroy((*context)->mem_ctx); + *context = NULL; +} - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_set_sec_desc(tmp_methods, access_token, sid, sd))) { - DEBUG(4,("sam_set_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); - return nt_status; +/****************************************************************** + Make a backend_entry from scratch + *******************************************************************/ + +static NTSTATUS make_backend_entry(SAM_BACKEND_ENTRY *backend_entry, char *sam_backend_string) +{ + char *tmp = NULL; + char *tmp_string = sam_backend_string; + + DEBUG(5,("make_backend_entry: %d\n", __LINE__)); + + SAM_ASSERT(sam_backend_string && backend_entry); + + backend_entry->module_name = sam_backend_string; + + DEBUG(5,("makeing backend_entry for %s\n", backend_entry->module_name)); + + if ((tmp = strchr(tmp_string, '|')) != NULL) { + DEBUGADD(20,("a domain name has been specified\n")); + *tmp = 0; + backend_entry->domain_name = smb_xstrdup(tmp + 1); + tmp_string = tmp + 1; } - + + if ((tmp = strchr(tmp_string, ':')) != NULL) { + DEBUG(20,("options for the backend have been specified\n")); + *tmp = 0; + backend_entry->module_params = smb_xstrdup(tmp + 1); + tmp_string = tmp + 1; + } + + if (backend_entry->domain_name == NULL) { + DEBUG(10,("make_backend_entry: no domain was specified for sam module %s. Using default domain %s\n", + backend_entry->module_name, lp_workgroup())); + backend_entry->domain_name = smb_xstrdup(lp_workgroup()); + } + + if ((backend_entry->domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID))) == NULL) { + DEBUG(0,("make_backend_entry: failed to malloc domain_sid\n")); + return NT_STATUS_NO_MEMORY; + } + + DEBUG(10,("looking up sid for domain %s\n", backend_entry->domain_name)); + + if (!secrets_fetch_domain_sid(backend_entry->domain_name, backend_entry->domain_sid)) { + DEBUG(2,("make_backend_entry: There is no SID stored for domain %s. Creating a new one.\n", + backend_entry->domain_name)); + DEBUG(0, ("FIXME in %s:%d\n", __FILE__, __LINE__)); + ZERO_STRUCTP(backend_entry->domain_sid); + } + + DEBUG(5,("make_backend_entry: module name: %s, module parameters: %s, domain name: %s, domain sid: %s\n", + backend_entry->module_name, backend_entry->module_params, backend_entry->domain_name, sid_string_static(backend_entry->domain_sid))); + return NT_STATUS_OK; } +/****************************************************************** + create sam_methods struct based on sam_backend_entry + *****************************************************************/ -NTSTATUS context_sam_lookup_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID *sid, uint32 *type) +static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS **methods_ptr, SAM_BACKEND_ENTRY *backend_entry) { - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; + SAM_METHODS *methods; + int i; - DEBUG(5,("context_sam_lookup_name: %d\n", __LINE__)); + DEBUG(5,("make_sam_methods_backend_entry: %d\n", __LINE__)); - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_name(context, &tmp_methods, domain))) { - DEBUG(4,("sam_get_methods_by_name failed\n")); + if (!NT_STATUS_IS_OK(nt_status = make_sam_methods(context->mem_ctx, methods_ptr))) { return nt_status; } - if (!tmp_methods->sam_lookup_name) { - DEBUG(3, ("context_sam_lookup_name: sam_methods of the domain did not specify sam_lookup_name\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } + methods = *methods_ptr; + methods->backendname = talloc_strdup(context->mem_ctx, backend_entry->module_name); + methods->domain_name = talloc_strdup(context->mem_ctx, backend_entry->domain_name); + sid_copy(&methods->domain_sid, backend_entry->domain_sid); + methods->parent = context; - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_name(tmp_methods, access_token, name, sid, type))) { - DEBUG(4,("sam_lookup_name for %s\\%s in backend %s failed\n", - tmp_methods->domain_name, name, tmp_methods->backendname)); - return nt_status; + DEBUG(5,("Attempting to find sam backend %s\n", backend_entry->module_name)); + for (i = 0; builtin_sam_init_functions[i].module_name; i++) + { + if (strequal(builtin_sam_init_functions[i].module_name, backend_entry->module_name)) + { + DEBUG(5,("Found sam backend %s (at pos %d)\n", backend_entry->module_name, i)); + DEBUGADD(5,("initialising it with options=%s for domain %s\n", backend_entry->module_params, sid_string_static(backend_entry->domain_sid))); + nt_status = builtin_sam_init_functions[i].init(methods, backend_entry->module_params); + if (NT_STATUS_IS_OK(nt_status)) { + DEBUG(5,("sam backend %s has a valid init\n", backend_entry->module_name)); + } else { + DEBUG(2,("sam backend %s did not correctly init (error was %s)\n", + backend_entry->module_name, nt_errstr(nt_status))); + } + return nt_status; + } } + + DEBUG(2,("could not find backend %s\n", backend_entry->module_name)); - return NT_STATUS_OK; + return NT_STATUS_INVALID_PARAMETER; } -NTSTATUS context_sam_lookup_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, uint32 *type) +static NTSTATUS sam_context_check_default_backends(SAM_CONTEXT *context) { - SAM_METHODS *tmp_methods; - uint32 rid; - NTSTATUS nt_status; - DOM_SID domainsid; + SAM_BACKEND_ENTRY entry; + DOM_SID *global_sam_sid = get_global_sam_sid(); /* lp_workgroup doesn't play nicely with multiple domains */ + SAM_METHODS *methods, *tmpmethods; + NTSTATUS ntstatus; + + DEBUG(5,("sam_context_check_default_backends: %d\n", __LINE__)); - DEBUG(5,("context_sam_lookup_sid: %d\n", __LINE__)); + /* Make sure domain lp_workgroup() is available */ + + ntstatus = sam_get_methods_by_sid(context, &methods, &global_sid_Builtin); - sid_copy(&domainsid, sid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("context_sam_lookup_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } + if (NT_STATUS_EQUAL(ntstatus, NT_STATUS_NO_SUCH_DOMAIN)) { + DEBUG(4,("There was no backend specified for domain %s(%s); using %s\n", + lp_workgroup(), sid_string_static(global_sam_sid), SAM_DEFAULT_BACKEND)); - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } + SAM_ASSERT(global_sam_sid); - if (!tmp_methods->sam_lookup_sid) { - DEBUG(3, ("context_sam_lookup_sid: sam_methods of the domain did not specify sam_lookup_sid\n")); - return NT_STATUS_NOT_IMPLEMENTED; + entry.module_name = SAM_DEFAULT_BACKEND; + entry.module_params = NULL; + entry.domain_name = lp_workgroup(); + entry.domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); + sid_copy(entry.domain_sid, global_sam_sid); + + if (!NT_STATUS_IS_OK(ntstatus = make_sam_methods_backend_entry(context, &methods, &entry))) { + DEBUG(4,("make_sam_methods_backend_entry failed\n")); + return ntstatus; + } + + DLIST_ADD_END(context->methods, methods, tmpmethods); + + } else if (!NT_STATUS_IS_OK(ntstatus)) { + DEBUG(2, ("sam_get_methods_by_sid failed for %s\n", lp_workgroup())); + return ntstatus; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_sid(tmp_methods, access_token, mem_ctx, sid, name, type))) { - DEBUG(4,("sam_lookup_name for %s in backend %s failed\n", - sid_string_static(sid), tmp_methods->backendname)); - return nt_status; + /* Make sure the BUILTIN domain is available */ + + ntstatus = sam_get_methods_by_sid(context, &methods, global_sam_sid); + + if (NT_STATUS_EQUAL(ntstatus, NT_STATUS_NO_SUCH_DOMAIN)) { + DEBUG(4,("There was no backend specified for domain BUILTIN; using %s\n", + SAM_DEFAULT_BACKEND)); + entry.module_name = SAM_DEFAULT_BACKEND; + entry.module_params = NULL; + entry.domain_name = "BUILTIN"; + entry.domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); + sid_copy(entry.domain_sid, &global_sid_Builtin); + + if (!NT_STATUS_IS_OK(ntstatus = make_sam_methods_backend_entry(context, &methods, &entry))) { + DEBUG(4,("make_sam_methods_backend_entry failed\n")); + return ntstatus; + } + + DLIST_ADD_END(context->methods, methods, tmpmethods); + } else if (!NT_STATUS_IS_OK(ntstatus)) { + DEBUG(2, ("sam_get_methods_by_sid failed for BUILTIN\n")); + return ntstatus; } return NT_STATUS_OK; } - -NTSTATUS context_sam_update_domain(const SAM_CONTEXT *context, const SAM_DOMAIN_HANDLE *domain) +static NTSTATUS check_duplicate_backend_entries(SAM_BACKEND_ENTRY **backend_entries, int *nBackends) { - const SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("context_sam_update_domain: %d\n", __LINE__)); - - /* invalid domain specified */ - SAM_ASSERT(domain && domain->current_sam_methods); + int i, j; - tmp_methods = domain->current_sam_methods; + DEBUG(5,("check_duplicate_backend_entries: %d\n", __LINE__)); - if (!tmp_methods->sam_update_domain) { - DEBUG(3, ("context_sam_update_domain: sam_methods of the domain did not specify sam_update_domain\n")); - return NT_STATUS_NOT_IMPLEMENTED; - } - - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_update_domain(tmp_methods, domain))){ - DEBUG(4,("sam_update_domain in backend %s failed\n", - tmp_methods->backendname)); - return nt_status; + for (i = 0; i < *nBackends; i++) { + for (j = i + 1; j < *nBackends; j++) { + if (sid_equal((*backend_entries)[i].domain_sid, (*backend_entries)[j].domain_sid)) { + DEBUG(0,("two backend modules claim the same domain %s\n", + sid_string_static((*backend_entries)[j].domain_sid))); + return NT_STATUS_INVALID_PARAMETER; + } + } } return NT_STATUS_OK; } -NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, int32 *domain_count, DOM_SID **domains, char ***domain_names) +NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **sam_backends_param) { - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; + int i = 0, j = 0; + SAM_METHODS *curmethods, *tmpmethods; + int nBackends = 0; + SAM_BACKEND_ENTRY *backends = NULL; + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; - SEC_DESC *sd; - size_t sd_size; - uint32 acc_granted; - int i = 0; - - DEBUG(5,("context_sam_enum_domains: %d\n", __LINE__)); + DEBUG(5,("make_sam_context_from_conf: %d\n", __LINE__)); - /* invalid sam_context specified */ - SAM_ASSERT(context && context->methods); + if (!sam_backends_param) { + DEBUG(1, ("no SAM backeds specified!\n")); + return NT_STATUS_INVALID_PARAMETER; + } - if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { - DEBUG(4,("samr_make_sam_obj_sd failed\n")); + if (!NT_STATUS_IS_OK(nt_status = make_sam_context(context))) { + DEBUG(4,("make_sam_context failed\n")); return nt_status; } - if (!se_access_check(sd, access_token, SAMR_ACCESS_ENUM_DOMAINS, &acc_granted, &nt_status)) { - DEBUG(3,("context_sam_enum_domains: ACCESS DENIED\n")); - return nt_status; - } + while (sam_backends_param[nBackends]) + nBackends++; - tmp_methods= context->methods; - *domain_count = 0; + DEBUG(6,("There are %d domains listed with their backends\n", nBackends)); - while (tmp_methods) { - (*domain_count)++; - tmp_methods= tmp_methods->next; + if ((backends = (SAM_BACKEND_ENTRY *)malloc(sizeof(*backends)*nBackends)) == NULL) { + DEBUG(0,("make_sam_context_list: failed to allocate backends\n")); + return NT_STATUS_NO_MEMORY; } - DEBUG(6,("context_sam_enum_domains: enumerating %d domains\n", (*domain_count))); - - tmp_methods = context->methods; + memset(backends, '\0', sizeof(*backends)*nBackends); - if (((*domains) = malloc( sizeof(DOM_SID) * (*domain_count))) == NULL) { - DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain SID list\n")); - return NT_STATUS_NO_MEMORY; + for (i = 0; i < nBackends; i++) { + DEBUG(8,("processing %s\n",sam_backends_param[i])); + if (!NT_STATUS_IS_OK(nt_status = make_backend_entry(&backends[i], sam_backends_param[i]))) { + DEBUG(4,("make_backend_entry failed\n")); + for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); + SAFE_FREE(backends); + free_sam_context(context); + return nt_status; + } } - if (((*domain_names) = malloc( sizeof(char*) * (*domain_count))) == NULL) { - DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain name list\n")); - SAFE_FREE((*domains)); - return NT_STATUS_NO_MEMORY; + if (!NT_STATUS_IS_OK(nt_status = check_duplicate_backend_entries(&backends, &nBackends))) { + DEBUG(4,("check_duplicate_backend_entries failed\n")); + for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); + SAFE_FREE(backends); + free_sam_context(context); + return nt_status; } - while (tmp_methods) { - DEBUGADD(7,(" [%d] %s: %s\n", i, tmp_methods->domain_name, sid_string_static(&tmp_methods->domain_sid))); - sid_copy(domains[i],&tmp_methods->domain_sid); - *domain_names[i] = smb_xstrdup(tmp_methods->domain_name); - i++; - tmp_methods= tmp_methods->next; + for (i = 0; i < nBackends; i++) { + if (!NT_STATUS_IS_OK(nt_status = make_sam_methods_backend_entry(*context, &curmethods, &backends[i]))) { + DEBUG(4,("make_sam_methods_backend_entry failed\n")); + for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); + SAFE_FREE(backends); + free_sam_context(context); + return nt_status; + } + DLIST_ADD_END((*context)->methods, curmethods, tmpmethods); } + + for (i = 0; i < nBackends; i++) SAFE_FREE(backends[i].domain_sid); + SAFE_FREE(backends); return NT_STATUS_OK; } -NTSTATUS context_sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const char *domain, DOM_SID **domainsid) -{ - SAM_METHODS *tmp_methods; - NTSTATUS nt_status; +/****************************************************************** + Make a sam_context from scratch. + *******************************************************************/ - SEC_DESC *sd; - size_t sd_size; - uint32 acc_granted; +NTSTATUS make_sam_context(SAM_CONTEXT **context) +{ + TALLOC_CTX *mem_ctx; - DEBUG(5,("context_sam_lookup_domain: %d\n", __LINE__)); + mem_ctx = talloc_init_named("sam_context internal allocation context"); - /* invalid sam_context specified */ - SAM_ASSERT(context && context->methods); + if (!mem_ctx) { + DEBUG(0, ("make_sam_context: talloc init failed!\n")); + return NT_STATUS_NO_MEMORY; + } - if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { - DEBUG(4,("samr_make_sam_obj_sd failed\n")); - return nt_status; + *context = talloc(mem_ctx, sizeof(**context)); + if (!*context) { + DEBUG(0, ("make_sam_context: talloc failed!\n")); + return NT_STATUS_NO_MEMORY; } - if (!se_access_check(sd, access_token, SAMR_ACCESS_OPEN_DOMAIN, &acc_granted, &nt_status)) { - DEBUG(3,("context_sam_lookup_domain: ACCESS DENIED\n")); - return nt_status; + ZERO_STRUCTP(*context); + + (*context)->mem_ctx = mem_ctx; + + (*context)->free_fn = free_sam_context; + + return NT_STATUS_OK; +} + +/****************************************************************** + Return an already initialised sam_context, to facilitate backward + compatibility (see functions below). + *******************************************************************/ + +static struct sam_context *sam_get_static_context(BOOL reload) +{ + static SAM_CONTEXT *sam_context = NULL; + + if ((sam_context) && (reload)) { + sam_context->free_fn(&sam_context); + sam_context = NULL; } - tmp_methods= context->methods; + if (!sam_context) { + if (!NT_STATUS_IS_OK(make_sam_context_list(&sam_context, lp_sam_backend()))) { + DEBUG(4,("make_sam_context_list failed\n")); + return NULL; + } - while (tmp_methods) { - if (strcmp(domain, tmp_methods->domain_name) == 0) { - (*domainsid) = (DOM_SID *)malloc(sizeof(DOM_SID)); - sid_copy((*domainsid), &tmp_methods->domain_sid); - return NT_STATUS_OK; + /* Make sure the required domains (default domain, builtin) are available */ + if (!NT_STATUS_IS_OK(sam_context_check_default_backends(sam_context))) { + DEBUG(4,("sam_context_check_default_backends failed\n")); + return NULL; } - tmp_methods= tmp_methods->next; } - return NT_STATUS_NO_SUCH_DOMAIN; + return sam_context; +} + +/*************************************************************** + Initialize the static context (at smbd startup etc). + + If uninitialised, context will auto-init on first use. + ***************************************************************/ + +BOOL initialize_sam(BOOL reload) +{ + return (sam_get_static_context(reload) != NULL); } -NTSTATUS context_sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain) +/************************************************************** + External API. This is what the rest of the world calls... +***************************************************************/ + +/****************************************************************** + sam_* functions are used to link the external SAM interface + with the internal backends. These functions lookup the appropriate + backends for the domain and pass on to the function in sam_methods + in the selected backend + + When the context parmater is NULL, the default is used. + *******************************************************************/ + +#define SAM_SETUP_CONTEXT if (!context) \ + context = sam_get_static_context(False);\ + if (!context) {\ + return NT_STATUS_UNSUCCESSFUL; \ + }\ + + + +NTSTATUS sam_get_sec_desc(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) { SAM_METHODS *tmp_methods; - NTSTATUS nt_status; + NTSTATUS nt_status; - DEBUG(5,("context_sam_get_domain_by_sid: %d\n", __LINE__)); + DEBUG(5,("sam_get_sec_desc: %d\n", __LINE__)); - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { + SAM_SETUP_CONTEXT; + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { DEBUG(4,("sam_get_methods_by_sid failed\n")); return nt_status; } - if (!tmp_methods->sam_get_domain_handle) { - DEBUG(3, ("context_sam_get_domain_by_sid: sam_methods of the domain did not specify sam_get_domain_handle\n")); + if (!tmp_methods->sam_get_sec_desc) { + DEBUG(3, ("sam_get_sec_desc: sam_methods of the domain did not specify sam_get_sec_desc\n")); return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_domain_handle(tmp_methods, access_token, access_desired, domain))) { - DEBUG(4,("sam_get_domain_handle for %s in backend %s failed\n", - sid_string_static(domainsid), tmp_methods->backendname)); + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_sec_desc(tmp_methods, access_token, sid, sd))) { + DEBUG(4,("sam_get_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); return nt_status; } return NT_STATUS_OK; } -NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_set_sec_desc(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; - DEBUG(5,("context_sam_create_account: %d\n", __LINE__)); + DEBUG(5,("sam_set_sec_desc: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { DEBUG(4,("sam_get_methods_by_sid failed\n")); return nt_status; } - if (!tmp_methods->sam_create_account) { - DEBUG(3, ("context_sam_create_account: sam_methods of the domain did not specify sam_create_account\n")); + if (!tmp_methods->sam_set_sec_desc) { + DEBUG(3, ("sam_set_sec_desc: sam_methods of the domain did not specify sam_set_sec_desc\n")); return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, account_name, acct_ctrl, account))) { - DEBUG(4,("sam_create_account in backend %s failed\n", - tmp_methods->backendname)); + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_set_sec_desc(tmp_methods, access_token, sid, sd))) { + DEBUG(4,("sam_set_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); return nt_status; } return NT_STATUS_OK; } -NTSTATUS context_sam_add_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) + +NTSTATUS sam_lookup_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID *sid, uint32 *type) { - DOM_SID domainsid; - const DOM_SID *accountsid; SAM_METHODS *tmp_methods; - uint32 rid; NTSTATUS nt_status; - - DEBUG(5,("context_sam_add_account: %d\n", __LINE__)); - if (!NT_STATUS_IS_OK(nt_status = sam_get_account_sid(account, &accountsid))) { - DEBUG(0,("Can't get account SID\n")); - return nt_status; - } + DEBUG(5,("sam_lookup_name: %d\n", __LINE__)); - sid_copy(&domainsid, accountsid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("context_sam_get_account_by_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } + SAM_SETUP_CONTEXT; - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_name(context, &tmp_methods, domain))) { + DEBUG(4,("sam_get_methods_by_name failed\n")); return nt_status; } - if (!tmp_methods->sam_add_account) { - DEBUG(3, ("context_sam_add_account: sam_methods of the domain did not specify sam_add_account\n")); + if (!tmp_methods->sam_lookup_name) { + DEBUG(3, ("sam_lookup_name: sam_methods of the domain did not specify sam_lookup_name\n")); return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_add_account(tmp_methods, account))){ - DEBUG(4,("sam_add_account in backend %s failed\n", - tmp_methods->backendname)); + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_name(tmp_methods, access_token, name, sid, type))) { + DEBUG(4,("sam_lookup_name for %s\\%s in backend %s failed\n", + tmp_methods->domain_name, name, tmp_methods->backendname)); return nt_status; } return NT_STATUS_OK; } -NTSTATUS context_sam_update_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) +NTSTATUS sam_lookup_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, TALLOC_CTX *mem_ctx, const DOM_SID *sid, char **name, uint32 *type) { - const SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("context_sam_update_account: %d\n", __LINE__)); - - /* invalid account specified */ - SAM_ASSERT(account && account->current_sam_methods); - - tmp_methods = account->current_sam_methods; - - if (!tmp_methods->sam_update_account) { - DEBUG(3, ("context_sam_update_account: sam_methods of the domain did not specify sam_update_account\n")); + SAM_METHODS *tmp_methods; + uint32 rid; + NTSTATUS nt_status; + DOM_SID domainsid; + + DEBUG(5,("sam_lookup_sid: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + sid_copy(&domainsid, sid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("sam_lookup_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_lookup_sid) { + DEBUG(3, ("sam_lookup_sid: sam_methods of the domain did not specify sam_lookup_sid\n")); return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_update_account(tmp_methods, account))){ - DEBUG(4,("sam_update_account in backend %s failed\n", - tmp_methods->backendname)); + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_sid(tmp_methods, access_token, mem_ctx, sid, name, type))) { + DEBUG(4,("sam_lookup_name for %s in backend %s failed\n", + sid_string_static(sid), tmp_methods->backendname)); return nt_status; } return NT_STATUS_OK; } -NTSTATUS context_sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) + +NTSTATUS sam_update_domain(const SAM_CONTEXT *context, const SAM_DOMAIN_HANDLE *domain) { const SAM_METHODS *tmp_methods; NTSTATUS nt_status; + + DEBUG(5,("sam_update_domain: %d\n", __LINE__)); - DEBUG(5,("context_sam_delete_account: %d\n", __LINE__)); + SAM_SETUP_CONTEXT; + + /* invalid domain specified */ + SAM_ASSERT(domain && domain->current_sam_methods); - /* invalid account specified */ - SAM_ASSERT(account && account->current_sam_methods); + tmp_methods = domain->current_sam_methods; - tmp_methods = account->current_sam_methods; - - if (!tmp_methods->sam_delete_account) { - DEBUG(3, ("context_sam_delete_account: sam_methods of the domain did not specify sam_delete_account\n")); + if (!tmp_methods->sam_update_domain) { + DEBUG(3, ("sam_update_domain: sam_methods of the domain did not specify sam_update_domain\n")); return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_delete_account(tmp_methods, account))){ - DEBUG(4,("sam_delete_account in backend %s failed\n", + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_update_domain(tmp_methods, domain))){ + DEBUG(4,("sam_update_domain in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -476,20 +617,288 @@ NTSTATUS context_sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUN return NT_STATUS_OK; } -NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 acct_ctrl, int32 *account_count, SAM_ACCOUNT_ENUM **accounts) +NTSTATUS sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, int32 *domain_count, DOM_SID **domains, char ***domain_names) { SAM_METHODS *tmp_methods; - NTSTATUS nt_status; - - DEBUG(5,("context_sam_enum_accounts: %d\n", __LINE__)); + NTSTATUS nt_status; - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); + SEC_DESC *sd; + size_t sd_size; + uint32 acc_granted; + int i = 0; + + DEBUG(5,("sam_enum_domains: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + /* invalid parmaters specified */ + SAM_ASSERT(domain_count && domains && domain_names); + + if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { + DEBUG(4,("samr_make_sam_obj_sd failed\n")); + return nt_status; + } + + if (!se_access_check(sd, access_token, SAMR_ACCESS_ENUM_DOMAINS, &acc_granted, &nt_status)) { + DEBUG(3,("sam_enum_domains: ACCESS DENIED\n")); + return nt_status; + } + + tmp_methods= context->methods; + *domain_count = 0; + + while (tmp_methods) { + (*domain_count)++; + tmp_methods= tmp_methods->next; + } + + DEBUG(6,("sam_enum_domains: enumerating %d domains\n", (*domain_count))); + + tmp_methods = context->methods; + + if (((*domains) = malloc( sizeof(DOM_SID) * (*domain_count))) == NULL) { + DEBUG(0,("sam_enum_domains: Out of memory allocating domain SID list\n")); + return NT_STATUS_NO_MEMORY; + } + + if (((*domain_names) = malloc( sizeof(char*) * (*domain_count))) == NULL) { + DEBUG(0,("sam_enum_domains: Out of memory allocating domain name list\n")); + SAFE_FREE((*domains)); + return NT_STATUS_NO_MEMORY; + } + + while (tmp_methods) { + DEBUGADD(7,(" [%d] %s: %s\n", i, tmp_methods->domain_name, sid_string_static(&tmp_methods->domain_sid))); + sid_copy(domains[i],&tmp_methods->domain_sid); + *domain_names[i] = smb_xstrdup(tmp_methods->domain_name); + i++; + tmp_methods= tmp_methods->next; + } + + return NT_STATUS_OK; +} + +NTSTATUS sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const char *domain, DOM_SID **domainsid) +{ + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + SEC_DESC *sd; + size_t sd_size; + uint32 acc_granted; + + DEBUG(5,("sam_lookup_domain: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + /* invalid paramters */ + SAM_ASSERT(access_token && domain && domainsid); + + if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { + DEBUG(4,("samr_make_sam_obj_sd failed\n")); + return nt_status; + } + + if (!se_access_check(sd, access_token, SAMR_ACCESS_OPEN_DOMAIN, &acc_granted, &nt_status)) { + DEBUG(3,("sam_lookup_domain: ACCESS DENIED\n")); + return nt_status; + } + + tmp_methods= context->methods; + + while (tmp_methods) { + if (strcmp(domain, tmp_methods->domain_name) == 0) { + (*domainsid) = (DOM_SID *)malloc(sizeof(DOM_SID)); + sid_copy((*domainsid), &tmp_methods->domain_sid); + return NT_STATUS_OK; + } + tmp_methods= tmp_methods->next; + } + + return NT_STATUS_NO_SUCH_DOMAIN; +} + + +NTSTATUS sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain) +{ + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("sam_get_domain_by_sid: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + SAM_ASSERT(access_token && domainsid && domain); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_get_domain_handle) { + DEBUG(3, ("sam_get_domain_by_sid: sam_methods of the domain did not specify sam_get_domain_handle\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_domain_handle(tmp_methods, access_token, access_desired, domain))) { + DEBUG(4,("sam_get_domain_handle for %s in backend %s failed\n", + sid_string_static(domainsid), tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) +{ + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("sam_create_account: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + /* invalid parmaters */ + SAM_ASSERT(access_token && domainsid && account_name && account); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_create_account) { + DEBUG(3, ("sam_create_account: sam_methods of the domain did not specify sam_create_account\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, account_name, acct_ctrl, account))) { + DEBUG(4,("sam_create_account in backend %s failed\n", + tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS sam_add_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) +{ + DOM_SID domainsid; + const DOM_SID *accountsid; + SAM_METHODS *tmp_methods; + uint32 rid; + NTSTATUS nt_status; + + DEBUG(5,("sam_add_account: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + /* invalid parmaters */ + SAM_ASSERT(account); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_account_sid(account, &accountsid))) { + DEBUG(0,("Can't get account SID\n")); + return nt_status; + } + + sid_copy(&domainsid, accountsid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("sam_get_account_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_add_account) { + DEBUG(3, ("sam_add_account: sam_methods of the domain did not specify sam_add_account\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_add_account(tmp_methods, account))){ + DEBUG(4,("sam_add_account in backend %s failed\n", + tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS sam_update_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) +{ + const SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("sam_update_account: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + /* invalid account specified */ + SAM_ASSERT(account && account->current_sam_methods); + + tmp_methods = account->current_sam_methods; + + if (!tmp_methods->sam_update_account) { + DEBUG(3, ("sam_update_account: sam_methods of the domain did not specify sam_update_account\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_update_account(tmp_methods, account))){ + DEBUG(4,("sam_update_account in backend %s failed\n", + tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) +{ + const SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("sam_delete_account: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + /* invalid account specified */ + SAM_ASSERT(account && account->current_sam_methods); + + tmp_methods = account->current_sam_methods; + + if (!tmp_methods->sam_delete_account) { + DEBUG(3, ("sam_delete_account: sam_methods of the domain did not specify sam_delete_account\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_delete_account(tmp_methods, account))){ + DEBUG(4,("sam_delete_account in backend %s failed\n", + tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 acct_ctrl, int32 *account_count, SAM_ACCOUNT_ENUM **accounts) +{ + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("sam_enum_accounts: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + SAM_ASSERT(access_token && domainsid && account_count && accounts); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); return nt_status; } if (!tmp_methods->sam_enum_accounts) { - DEBUG(3, ("context_sam_enum_accounts: sam_methods of the domain did not specify sam_enum_accounts\n")); + DEBUG(3, ("sam_enum_accounts: sam_methods of the domain did not specify sam_enum_accounts\n")); return NT_STATUS_NOT_IMPLEMENTED; } @@ -503,18 +912,22 @@ NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOK } -NTSTATUS context_sam_get_account_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_get_account_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) { SAM_METHODS *tmp_methods; uint32 rid; DOM_SID domainsid; NTSTATUS nt_status; - DEBUG(5,("context_sam_get_account_by_sid: %d\n", __LINE__)); + DEBUG(5,("sam_get_account_by_sid: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + SAM_ASSERT(access_token && accountsid && account); sid_copy(&domainsid, accountsid); if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("context_sam_get_account_by_sid: failed to split the sid\n")); + DEBUG(3,("sam_get_account_by_sid: failed to split the sid\n")); return NT_STATUS_INVALID_SID; } @@ -525,7 +938,7 @@ NTSTATUS context_sam_get_account_by_sid(const SAM_CONTEXT *context, const NT_USE } if (!tmp_methods->sam_get_account_by_sid) { - DEBUG(3, ("context_sam_get_account_by_sid: sam_methods of the domain did not specify sam_get_account_by_sid\n")); + DEBUG(3, ("sam_get_account_by_sid: sam_methods of the domain did not specify sam_get_account_by_sid\n")); return NT_STATUS_NOT_IMPLEMENTED; } @@ -538,12 +951,16 @@ NTSTATUS context_sam_get_account_by_sid(const SAM_CONTEXT *context, const NT_USE return NT_STATUS_OK; } -NTSTATUS context_sam_get_account_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_get_account_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; - DEBUG(5,("context_sam_get_account_by_name: %d\n", __LINE__)); + DEBUG(5,("sam_get_account_by_name: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + SAM_ASSERT(access_token && domain && name && account); if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_name(context, &tmp_methods, domain))) { DEBUG(4,("sam_get_methods_by_name failed\n")); @@ -551,7 +968,7 @@ NTSTATUS context_sam_get_account_by_name(const SAM_CONTEXT *context, const NT_US } if (!tmp_methods->sam_get_account_by_name) { - DEBUG(3, ("context_sam_get_account_by_name: sam_methods of the domain did not specify sam_get_account_by_name\n")); + DEBUG(3, ("sam_get_account_by_name: sam_methods of the domain did not specify sam_get_account_by_name\n")); return NT_STATUS_NOT_IMPLEMENTED; } @@ -564,12 +981,16 @@ NTSTATUS context_sam_get_account_by_name(const SAM_CONTEXT *context, const NT_US return NT_STATUS_OK; } -NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) +NTSTATUS sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; - DEBUG(5,("context_sam_create_group: %d\n", __LINE__)); + DEBUG(5,("sam_create_group: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + SAM_ASSERT(access_token && domainsid && group_name && group); if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { DEBUG(4,("sam_get_methods_by_sid failed\n")); @@ -577,7 +998,7 @@ NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKE } if (!tmp_methods->sam_create_group) { - DEBUG(3, ("context_sam_create_group: sam_methods of the domain did not specify sam_create_group\n")); + DEBUG(3, ("sam_create_group: sam_methods of the domain did not specify sam_create_group\n")); return NT_STATUS_UNSUCCESSFUL; } @@ -590,7 +1011,7 @@ NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKE return NT_STATUS_OK; } -NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { DOM_SID domainsid; const DOM_SID *groupsid; @@ -598,7 +1019,11 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL uint32 rid; NTSTATUS nt_status; - DEBUG(5,("context_sam_add_group: %d\n", __LINE__)); + DEBUG(5,("sam_add_group: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + SAM_ASSERT(group); if (!NT_STATUS_IS_OK(nt_status = sam_get_group_sid(group, &groupsid))) { DEBUG(0,("Can't get group SID\n")); @@ -607,7 +1032,7 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL sid_copy(&domainsid, groupsid); if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); + DEBUG(3,("sam_get_group_by_sid: failed to split the sid\n")); return NT_STATUS_INVALID_SID; } @@ -617,7 +1042,7 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL } if (!tmp_methods->sam_add_group) { - DEBUG(3, ("context_sam_add_group: sam_methods of the domain did not specify sam_add_group\n")); + DEBUG(3, ("sam_add_group: sam_methods of the domain did not specify sam_add_group\n")); return NT_STATUS_NOT_IMPLEMENTED; } @@ -630,20 +1055,22 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL return NT_STATUS_OK; } -NTSTATUS context_sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { const SAM_METHODS *tmp_methods; NTSTATUS nt_status; - DEBUG(5,("context_sam_update_group: %d\n", __LINE__)); + DEBUG(5,("sam_update_group: %d\n", __LINE__)); + SAM_SETUP_CONTEXT; + /* invalid group specified */ SAM_ASSERT(group && group->current_sam_methods); tmp_methods = group->current_sam_methods; if (!tmp_methods->sam_update_group) { - DEBUG(3, ("context_sam_update_group: sam_methods of the domain did not specify sam_update_group\n")); + DEBUG(3, ("sam_update_group: sam_methods of the domain did not specify sam_update_group\n")); return NT_STATUS_NOT_IMPLEMENTED; } @@ -656,20 +1083,22 @@ NTSTATUS context_sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HA return NT_STATUS_OK; } -NTSTATUS context_sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { const SAM_METHODS *tmp_methods; NTSTATUS nt_status; - DEBUG(5,("context_sam_delete_group: %d\n", __LINE__)); + DEBUG(5,("sam_delete_group: %d\n", __LINE__)); + SAM_SETUP_CONTEXT; + /* invalid group specified */ SAM_ASSERT(group && group->current_sam_methods); tmp_methods = group->current_sam_methods; if (!tmp_methods->sam_delete_group) { - DEBUG(3, ("context_sam_delete_group: sam_methods of the domain did not specify sam_delete_group\n")); + DEBUG(3, ("sam_delete_group: sam_methods of the domain did not specify sam_delete_group\n")); return NT_STATUS_NOT_IMPLEMENTED; } @@ -682,12 +1111,16 @@ NTSTATUS context_sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HA return NT_STATUS_OK; } -NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; - DEBUG(5,("context_sam_enum_groups: %d\n", __LINE__)); + DEBUG(5,("sam_enum_groups: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + SAM_ASSERT(access_token && domainsid && groups_count && groups); if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { DEBUG(4,("sam_get_methods_by_sid failed\n")); @@ -695,7 +1128,7 @@ NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN } if (!tmp_methods->sam_enum_accounts) { - DEBUG(3, ("context_sam_enum_groups: sam_methods of the domain did not specify sam_enum_groups\n")); + DEBUG(3, ("sam_enum_groups: sam_methods of the domain did not specify sam_enum_groups\n")); return NT_STATUS_NOT_IMPLEMENTED; } @@ -708,18 +1141,22 @@ NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN return NT_STATUS_OK; } -NTSTATUS context_sam_get_group_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) +NTSTATUS sam_get_group_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) { SAM_METHODS *tmp_methods; uint32 rid; NTSTATUS nt_status; DOM_SID domainsid; - DEBUG(5,("context_sam_get_group_by_sid: %d\n", __LINE__)); + DEBUG(5,("sam_get_group_by_sid: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + SAM_ASSERT(access_token && groupsid && group); sid_copy(&domainsid, groupsid); if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); + DEBUG(3,("sam_get_group_by_sid: failed to split the sid\n")); return NT_STATUS_INVALID_SID; } @@ -730,7 +1167,7 @@ NTSTATUS context_sam_get_group_by_sid(const SAM_CONTEXT *context, const NT_USER_ } if (!tmp_methods->sam_get_group_by_sid) { - DEBUG(3, ("context_sam_get_group_by_sid: sam_methods of the domain did not specify sam_get_group_by_sid\n")); + DEBUG(3, ("sam_get_group_by_sid: sam_methods of the domain did not specify sam_get_group_by_sid\n")); return NT_STATUS_NOT_IMPLEMENTED; } @@ -743,12 +1180,16 @@ NTSTATUS context_sam_get_group_by_sid(const SAM_CONTEXT *context, const NT_USER_ return NT_STATUS_OK; } -NTSTATUS context_sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group) +NTSTATUS sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; - DEBUG(5,("context_sam_get_group_by_name: %d\n", __LINE__)); + DEBUG(5,("sam_get_group_by_name: %d\n", __LINE__)); + + SAM_SETUP_CONTEXT; + + SAM_ASSERT(access_token && domain && name && group); if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_name(context, &tmp_methods, domain))) { DEBUG(4,("sam_get_methods_by_name failed\n")); @@ -756,7 +1197,7 @@ NTSTATUS context_sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER } if (!tmp_methods->sam_get_group_by_name) { - DEBUG(3, ("context_sam_get_group_by_name: sam_methods of the domain did not specify sam_get_group_by_name\n")); + DEBUG(3, ("sam_get_group_by_name: sam_methods of the domain did not specify sam_get_group_by_name\n")); return NT_STATUS_NOT_IMPLEMENTED; } @@ -769,11 +1210,12 @@ NTSTATUS context_sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER return NT_STATUS_OK; } -NTSTATUS context_sam_add_member_to_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +NTSTATUS sam_add_member_to_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { const SAM_METHODS *tmp_methods; NTSTATUS nt_status; + SAM_SETUP_CONTEXT; /* invalid group or member specified */ SAM_ASSERT(group && group->current_sam_methods && member); @@ -781,7 +1223,7 @@ NTSTATUS context_sam_add_member_to_group(const SAM_CONTEXT *context, const SAM_G tmp_methods = group->current_sam_methods; if (!tmp_methods->sam_add_member_to_group) { - DEBUG(3, ("context_sam_add_member_to_group: sam_methods of the domain did not specify sam_add_member_to_group\n")); + DEBUG(3, ("sam_add_member_to_group: sam_methods of the domain did not specify sam_add_member_to_group\n")); return NT_STATUS_NOT_IMPLEMENTED; } @@ -794,18 +1236,20 @@ NTSTATUS context_sam_add_member_to_group(const SAM_CONTEXT *context, const SAM_G } -NTSTATUS context_sam_delete_member_from_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +NTSTATUS sam_delete_member_from_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { const SAM_METHODS *tmp_methods; NTSTATUS nt_status; + + SAM_SETUP_CONTEXT; /* invalid group or member specified */ - SAM_ASSERT(group && group->current_sam_methods &&member); + SAM_ASSERT(group && group->current_sam_methods && member); tmp_methods = group->current_sam_methods; if (!tmp_methods->sam_delete_member_from_group) { - DEBUG(3, ("context_sam_delete_member_from_group: sam_methods of the domain did not specify sam_delete_member_from_group\n")); + DEBUG(3, ("sam_delete_member_from_group: sam_methods of the domain did not specify sam_delete_member_from_group\n")); return NT_STATUS_NOT_IMPLEMENTED; } @@ -817,18 +1261,20 @@ NTSTATUS context_sam_delete_member_from_group(const SAM_CONTEXT *context, const return NT_STATUS_OK; } -NTSTATUS context_sam_enum_groupmembers(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) +NTSTATUS sam_enum_groupmembers(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) { const SAM_METHODS *tmp_methods; NTSTATUS nt_status; + SAM_SETUP_CONTEXT; + /* invalid group specified */ - SAM_ASSERT(group && group->current_sam_methods); + SAM_ASSERT(group && group->current_sam_methods && members_count && members); tmp_methods = group->current_sam_methods; if (!tmp_methods->sam_enum_groupmembers) { - DEBUG(3, ("context_sam_enum_groupmembers: sam_methods of the domain did not specify sam_enum_group_members\n")); + DEBUG(3, ("sam_enum_groupmembers: sam_methods of the domain did not specify sam_enum_group_members\n")); return NT_STATUS_NOT_IMPLEMENTED; } @@ -840,7 +1286,7 @@ NTSTATUS context_sam_enum_groupmembers(const SAM_CONTEXT *context, const SAM_GRO return NT_STATUS_OK; } -NTSTATUS context_sam_get_groups_of_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_get_groups_of_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -848,10 +1294,12 @@ NTSTATUS context_sam_get_groups_of_sid(const SAM_CONTEXT *context, const NT_USER uint32 tmp_group_count; SAM_GROUP_ENUM *tmp_groups; - DEBUG(5,("context_sam_get_groups_of_sid: %d\n", __LINE__)); + DEBUG(5,("sam_get_groups_of_sid: %d\n", __LINE__)); + SAM_SETUP_CONTEXT; + /* invalid sam_context specified */ - SAM_ASSERT(context && context->methods); + SAM_ASSERT(access_token && sids && context && context->methods); *group_count = 0; @@ -862,7 +1310,7 @@ NTSTATUS context_sam_get_groups_of_sid(const SAM_CONTEXT *context, const NT_USER while (tmp_methods) { DEBUG(5,("getting groups from domain \n")); if (!tmp_methods->sam_get_groups_of_sid) { - DEBUG(3, ("context_sam_get_groups_of_sid: sam_methods of domain did not specify sam_get_groups_of_sid\n")); + DEBUG(3, ("sam_get_groups_of_sid: sam_methods of domain did not specify sam_get_groups_of_sid\n")); SAFE_FREE(*groups); return NT_STATUS_NOT_IMPLEMENTED; } @@ -888,355 +1336,3 @@ NTSTATUS context_sam_get_groups_of_sid(const SAM_CONTEXT *context, const NT_USER } -/****************************************************************** - Free and cleanup a sam context, any associated data and anything - that the attached modules might have associated. - *******************************************************************/ - -void free_sam_context(SAM_CONTEXT **context) -{ - SAM_METHODS *sam_selected = (*context)->methods; - - while (sam_selected) { - if (sam_selected->free_private_data) { - sam_selected->free_private_data(&(sam_selected->private_data)); - } - sam_selected = sam_selected->next; - } - - talloc_destroy((*context)->mem_ctx); - *context = NULL; -} - -/****************************************************************** - Make a backend_entry from scratch - *******************************************************************/ - -static NTSTATUS make_backend_entry(SAM_BACKEND_ENTRY *backend_entry, char *sam_backend_string) -{ - char *tmp = NULL; - char *tmp_string = sam_backend_string; - - DEBUG(5,("make_backend_entry: %d\n", __LINE__)); - - SAM_ASSERT(sam_backend_string && backend_entry); - - backend_entry->module_name = sam_backend_string; - - DEBUG(5,("makeing backend_entry for %s\n", backend_entry->module_name)); - - if ((tmp = strchr(tmp_string, '|')) != NULL) { - DEBUGADD(20,("a domain name has been specified\n")); - *tmp = 0; - backend_entry->domain_name = smb_xstrdup(tmp + 1); - tmp_string = tmp + 1; - } - - if ((tmp = strchr(tmp_string, ':')) != NULL) { - DEBUG(20,("options for the backend have been specified\n")); - *tmp = 0; - backend_entry->module_params = smb_xstrdup(tmp + 1); - tmp_string = tmp + 1; - } - - if (backend_entry->domain_name == NULL) { - DEBUG(10,("make_backend_entry: no domain was specified for sam module %s. Using default domain %s\n", - backend_entry->module_name, lp_workgroup())); - backend_entry->domain_name = smb_xstrdup(lp_workgroup()); - } - - if ((backend_entry->domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID))) == NULL) { - DEBUG(0,("make_backend_entry: failed to malloc domain_sid\n")); - return NT_STATUS_NO_MEMORY; - } - - DEBUG(10,("looking up sid for domain %s\n", backend_entry->domain_name)); - - if (!secrets_fetch_domain_sid(backend_entry->domain_name, backend_entry->domain_sid)) { - DEBUG(2,("make_backend_entry: There is no SID stored for domain %s. Creating a new one.\n", - backend_entry->domain_name)); - DEBUG(0, ("FIXME in %s:%d\n", __FILE__, __LINE__)); - ZERO_STRUCTP(backend_entry->domain_sid); - } - - DEBUG(5,("make_backend_entry: module name: %s, module parameters: %s, domain name: %s, domain sid: %s\n", - backend_entry->module_name, backend_entry->module_params, backend_entry->domain_name, sid_string_static(backend_entry->domain_sid))); - - return NT_STATUS_OK; -} - -/****************************************************************** - create sam_methods struct based on sam_backend_entry - *****************************************************************/ - -static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS **methods_ptr, SAM_BACKEND_ENTRY *backend_entry) -{ - NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; - SAM_METHODS *methods; - int i; - - DEBUG(5,("make_sam_methods_backend_entry: %d\n", __LINE__)); - - if (!NT_STATUS_IS_OK(nt_status = make_sam_methods(context->mem_ctx, methods_ptr))) { - return nt_status; - } - - methods = *methods_ptr; - methods->backendname = talloc_strdup(context->mem_ctx, backend_entry->module_name); - methods->domain_name = talloc_strdup(context->mem_ctx, backend_entry->domain_name); - sid_copy(&methods->domain_sid, backend_entry->domain_sid); - methods->parent = context; - - DEBUG(5,("Attempting to find sam backend %s\n", backend_entry->module_name)); - for (i = 0; builtin_sam_init_functions[i].module_name; i++) - { - if (strequal(builtin_sam_init_functions[i].module_name, backend_entry->module_name)) - { - DEBUG(5,("Found sam backend %s (at pos %d)\n", backend_entry->module_name, i)); - DEBUGADD(5,("initialising it with options=%s for domain %s\n", backend_entry->module_params, sid_string_static(backend_entry->domain_sid))); - nt_status = builtin_sam_init_functions[i].init(methods, backend_entry->module_params); - if (NT_STATUS_IS_OK(nt_status)) { - DEBUG(5,("sam backend %s has a valid init\n", backend_entry->module_name)); - } else { - DEBUG(2,("sam backend %s did not correctly init (error was %s)\n", - backend_entry->module_name, nt_errstr(nt_status))); - } - return nt_status; - } - } - - DEBUG(2,("could not find backend %s\n", backend_entry->module_name)); - - return NT_STATUS_INVALID_PARAMETER; -} - -static NTSTATUS sam_context_check_default_backends(SAM_CONTEXT *context) -{ - SAM_BACKEND_ENTRY entry; - DOM_SID *global_sam_sid = get_global_sam_sid(); /* lp_workgroup doesn't play nicely with multiple domains */ - SAM_METHODS *methods, *tmpmethods; - NTSTATUS ntstatus; - - DEBUG(5,("sam_context_check_default_backends: %d\n", __LINE__)); - - /* Make sure domain lp_workgroup() is available */ - - ntstatus = sam_get_methods_by_sid(context, &methods, &global_sid_Builtin); - - if (NT_STATUS_EQUAL(ntstatus, NT_STATUS_NO_SUCH_DOMAIN)) { - DEBUG(4,("There was no backend specified for domain %s(%s); using %s\n", - lp_workgroup(), sid_string_static(global_sam_sid), SAM_DEFAULT_BACKEND)); - - SAM_ASSERT(global_sam_sid); - - entry.module_name = SAM_DEFAULT_BACKEND; - entry.module_params = NULL; - entry.domain_name = lp_workgroup(); - entry.domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); - sid_copy(entry.domain_sid, global_sam_sid); - - if (!NT_STATUS_IS_OK(ntstatus = make_sam_methods_backend_entry(context, &methods, &entry))) { - DEBUG(4,("make_sam_methods_backend_entry failed\n")); - return ntstatus; - } - - DLIST_ADD_END(context->methods, methods, tmpmethods); - - } else if (!NT_STATUS_IS_OK(ntstatus)) { - DEBUG(2, ("sam_get_methods_by_sid failed for %s\n", lp_workgroup())); - return ntstatus; - } - - /* Make sure the BUILTIN domain is available */ - - ntstatus = sam_get_methods_by_sid(context, &methods, global_sam_sid); - - if (NT_STATUS_EQUAL(ntstatus, NT_STATUS_NO_SUCH_DOMAIN)) { - DEBUG(4,("There was no backend specified for domain BUILTIN; using %s\n", - SAM_DEFAULT_BACKEND)); - entry.module_name = SAM_DEFAULT_BACKEND; - entry.module_params = NULL; - entry.domain_name = "BUILTIN"; - entry.domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); - sid_copy(entry.domain_sid, &global_sid_Builtin); - - if (!NT_STATUS_IS_OK(ntstatus = make_sam_methods_backend_entry(context, &methods, &entry))) { - DEBUG(4,("make_sam_methods_backend_entry failed\n")); - return ntstatus; - } - - DLIST_ADD_END(context->methods, methods, tmpmethods); - } else if (!NT_STATUS_IS_OK(ntstatus)) { - DEBUG(2, ("sam_get_methods_by_sid failed for BUILTIN\n")); - return ntstatus; - } - - return NT_STATUS_OK; -} - -static NTSTATUS check_duplicate_backend_entries(SAM_BACKEND_ENTRY **backend_entries, int *nBackends) -{ - int i, j; - - DEBUG(5,("check_duplicate_backend_entries: %d\n", __LINE__)); - - for (i = 0; i < *nBackends; i++) { - for (j = i + 1; j < *nBackends; j++) { - if (sid_equal((*backend_entries)[i].domain_sid, (*backend_entries)[j].domain_sid)) { - DEBUG(0,("two backend modules claim the same domain %s\n", - sid_string_static((*backend_entries)[j].domain_sid))); - return NT_STATUS_INVALID_PARAMETER; - } - } - } - - return NT_STATUS_OK; -} - -NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **sam_backends_param) -{ - int i = 0, j = 0; - SAM_METHODS *curmethods, *tmpmethods; - int nBackends = 0; - SAM_BACKEND_ENTRY *backends = NULL; - NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; - - DEBUG(5,("make_sam_context_from_conf: %d\n", __LINE__)); - - if (!NT_STATUS_IS_OK(nt_status = make_sam_context(context))) { - DEBUG(4,("make_sam_context failed\n")); - return nt_status; - } - - while (sam_backends_param[nBackends]) - nBackends++; - - DEBUG(6,("There are %d domains listed with their backends\n", nBackends)); - - if ((backends = (SAM_BACKEND_ENTRY *)malloc(sizeof(*backends)*nBackends)) == NULL) { - DEBUG(0,("make_sam_context_list: failed to allocate backends\n")); - return NT_STATUS_NO_MEMORY; - } - - memset(backends, '\0', sizeof(*backends)*nBackends); - - for (i = 0; i < nBackends; i++) { - DEBUG(8,("processing %s\n",sam_backends_param[i])); - if (!NT_STATUS_IS_OK(nt_status = make_backend_entry(&backends[i], sam_backends_param[i]))) { - DEBUG(4,("make_backend_entry failed\n")); - for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); - SAFE_FREE(backends); - free_sam_context(context); - return nt_status; - } - } - - if (!NT_STATUS_IS_OK(nt_status = check_duplicate_backend_entries(&backends, &nBackends))) { - DEBUG(4,("check_duplicate_backend_entries failed\n")); - for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); - SAFE_FREE(backends); - free_sam_context(context); - return nt_status; - } - - for (i = 0; i < nBackends; i++) { - if (!NT_STATUS_IS_OK(nt_status = make_sam_methods_backend_entry(*context, &curmethods, &backends[i]))) { - DEBUG(4,("make_sam_methods_backend_entry failed\n")); - for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); - SAFE_FREE(backends); - free_sam_context(context); - return nt_status; - } - DLIST_ADD_END((*context)->methods, curmethods, tmpmethods); - } - - for (i = 0; i < nBackends; i++) SAFE_FREE(backends[i].domain_sid); - - SAFE_FREE(backends); - return NT_STATUS_OK; -} - -/****************************************************************** - Make a sam_context from scratch. - *******************************************************************/ - -NTSTATUS make_sam_context(SAM_CONTEXT **context) -{ - TALLOC_CTX *mem_ctx; - - mem_ctx = talloc_init_named("sam_context internal allocation context"); - - if (!mem_ctx) { - DEBUG(0, ("make_sam_context: talloc init failed!\n")); - return NT_STATUS_NO_MEMORY; - } - - *context = talloc(mem_ctx, sizeof(**context)); - if (!*context) { - DEBUG(0, ("make_sam_context: talloc failed!\n")); - return NT_STATUS_NO_MEMORY; - } - - ZERO_STRUCTP(*context); - - (*context)->mem_ctx = mem_ctx; - - (*context)->free_fn = free_sam_context; - - return NT_STATUS_OK; -} - -/****************************************************************** - Return an already initialised sam_context, to facilitate backward - compatibility (see functions below). - *******************************************************************/ - -struct sam_context *sam_get_static_context(BOOL reload) -{ - static SAM_CONTEXT *sam_context = NULL; - - if ((sam_context) && (reload)) { - sam_context->free_fn(&sam_context); - sam_context = NULL; - } - - if (!sam_context) { - if (!NT_STATUS_IS_OK(make_sam_context_list(&sam_context, lp_sam_backend()))) { - DEBUG(4,("make_sam_context_list failed\n")); - return NULL; - } - - /* Make sure the required domains (default domain, builtin) are available */ - if (!NT_STATUS_IS_OK(sam_context_check_default_backends(sam_context))) { - DEBUG(4,("sam_context_check_default_backends failed\n")); - return NULL; - } - } - - return sam_context; -} - -/*************************************************************** - Initialize the static context (at smbd startup etc). - - If uninitialised, context will auto-init on first use. - ***************************************************************/ - -BOOL initialize_sam(BOOL reload) -{ - return (sam_get_static_context(reload) != NULL); -} - - -NTSTATUS make_sam_methods(TALLOC_CTX *mem_ctx, SAM_METHODS **methods) -{ - *methods = talloc(mem_ctx, sizeof(SAM_METHODS)); - - if (!*methods) { - return NT_STATUS_NO_MEMORY; - } - - ZERO_STRUCTP(*methods); - - return NT_STATUS_OK; -} diff --git a/source/torture/cmd_sam.c b/source/torture/cmd_sam.c index 9f162f2a07c..0cd219cb459 100644 --- a/source/torture/cmd_sam.c +++ b/source/torture/cmd_sam.c @@ -104,8 +104,8 @@ static NTSTATUS cmd_lookup_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, in return NT_STATUS_INVALID_PARAMETER; } - if (!NT_STATUS_IS_OK(status = context_sam_lookup_sid(st->context, st->token, mem_ctx, &sid, &name, &type))) { - printf("context_sam_lookup_sid failed!\n"); + if (!NT_STATUS_IS_OK(status = sam_lookup_sid(st->context, st->token, mem_ctx, &sid, &name, &type))) { + printf("sam_lookup_sid failed!\n"); return status; } @@ -125,8 +125,8 @@ static NTSTATUS cmd_lookup_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, i return NT_STATUS_INVALID_PARAMETER; } - if (!NT_STATUS_IS_OK(status = context_sam_lookup_name(st->context, st->token, argv[1], argv[2], &sid, &type))) { - printf("context_sam_lookup_name failed!\n"); + if (!NT_STATUS_IS_OK(status = sam_lookup_name(st->context, st->token, argv[1], argv[2], &sid, &type))) { + printf("sam_lookup_name failed!\n"); return status; } @@ -155,8 +155,8 @@ static NTSTATUS cmd_lookup_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, return NT_STATUS_INVALID_PARAMETER; } - if (!NT_STATUS_IS_OK(status = context_sam_lookup_domain(st->context, st->token, argv[1], &sid))) { - printf("context_sam_lookup_name failed!\n"); + if (!NT_STATUS_IS_OK(status = sam_lookup_domain(st->context, st->token, argv[1], &sid))) { + printf("sam_lookup_name failed!\n"); return status; } @@ -172,8 +172,8 @@ static NTSTATUS cmd_enum_domains(struct samtest_state *st, TALLOC_CTX *mem_ctx, char **domain_names; NTSTATUS status; - if (!NT_STATUS_IS_OK(status = context_sam_enum_domains(st->context, st->token, &domain_count, &domain_sids, &domain_names))) { - printf("context_sam_enum_domains failed!\n"); + if (!NT_STATUS_IS_OK(status = sam_enum_domains(st->context, st->token, &domain_count, &domain_sids, &domain_names))) { + printf("sam_enum_domains failed!\n"); return status; } @@ -218,8 +218,8 @@ static NTSTATUS cmd_show_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, i return NT_STATUS_INVALID_PARAMETER; } - if (!NT_STATUS_IS_OK(status = context_sam_get_domain_by_sid(st->context, st->token, DOMAIN_ALL_ACCESS, &sid, &domain))) { - printf("context_sam_get_domain_by_sid failed\n"); + if (!NT_STATUS_IS_OK(status = sam_get_domain_by_sid(st->context, st->token, DOMAIN_ALL_ACCESS, &sid, &domain))) { + printf("sam_get_domain_by_sid failed\n"); return status; } @@ -331,7 +331,6 @@ static NTSTATUS cmd_enum_accounts(struct samtest_state *st, TALLOC_CTX *mem_ctx, DOM_SID sid; int32 account_count, i; SAM_ACCOUNT_ENUM *accounts; - uint16 acct_ctrl = (ACB_NORMAL |ACB_WSTRUST |ACB_SVRTRUST |ACB_DOMTRUST | ACB_MNS); if (argc != 2) { printf("Usage: enum_accounts \n"); @@ -343,8 +342,8 @@ static NTSTATUS cmd_enum_accounts(struct samtest_state *st, TALLOC_CTX *mem_ctx, return NT_STATUS_INVALID_PARAMETER; } - if (!NT_STATUS_IS_OK(status = context_sam_enum_accounts(st->context, st->token, &sid, acct_ctrl, &account_count, &accounts))) { - printf("context_sam_enum_accounts failed: %s\n", nt_errstr(status)); + if (!NT_STATUS_IS_OK(status = sam_enum_accounts(st->context, st->token, &sid, 0, &account_count, &accounts))) { + printf("sam_enum_accounts failed: %s\n", nt_errstr(status)); return status; } diff --git a/source/torture/samtest.c b/source/torture/samtest.c index b5f7ed9f765..d3268d8b5b2 100644 --- a/source/torture/samtest.c +++ b/source/torture/samtest.c @@ -360,7 +360,6 @@ int main(int argc, char *argv[]) struct cmd_set **cmd_set; struct samtest_state st; - /* make sure the vars that get altered (4th field) are in a fixed location or certain compilers complain */ poptContext pc; @@ -375,6 +374,8 @@ int main(int argc, char *argv[]) ZERO_STRUCT(st); + st.token = get_system_token(); + setlinebuf(stdout); DEBUGLEVEL = 1; -- cgit From d83cae2bbd1625aeb3b7c73ba8dde2d1371e7f89 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Sun, 29 Sep 2002 06:44:13 +0000 Subject: Make sure that variable does not shadow a parameter. --- source/client/client.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/client/client.c b/source/client/client.c index de6bf0e1b05..f25ed1623b0 100644 --- a/source/client/client.c +++ b/source/client/client.c @@ -2436,18 +2436,18 @@ static struct cli_state *do_connect(const char *server, const char *share) if (!cli_send_tconX(c, sharename, "?????", password, strlen(password)+1)) { - pstring share; + pstring full_share; /* * Some servers require \\server\share for the share * while others are happy with share as we gave above * Lets see if we give it the long form if it works */ - pstrcpy(share, "\\\\"); - pstrcat(share, server); - pstrcat(share, "\\"); - pstrcat(share, sharename); - if (!cli_send_tconX(c, share, "?????", password, + pstrcpy(full_share, "\\\\"); + pstrcat(full_share, server); + pstrcat(full_share, "\\"); + pstrcat(full_share, sharename); + if (!cli_send_tconX(c, full_share, "?????", password, strlen(password) + 1)) { d_printf("tree connect failed: %s\n", cli_errstr(c)); -- cgit From cb05dcab2de117ea4db54af313a05905cd5a0d0a Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sun, 29 Sep 2002 10:39:03 +0000 Subject: We have to hand out info on Builtin here as well. They are stored in group mapping not as local, but as WKN_GRP. Volker --- source/rpc_server/srv_samr_nt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c index c5a2c545115..290baabc3b4 100644 --- a/source/rpc_server/srv_samr_nt.c +++ b/source/rpc_server/srv_samr_nt.c @@ -1328,7 +1328,7 @@ NTSTATUS _samr_query_aliasinfo(pipes_struct *p, SAMR_Q_QUERY_ALIASINFO *q_u, SAM !sid_check_is_in_builtin(&sid)) return NT_STATUS_OBJECT_TYPE_MISMATCH; - if (!get_local_group_from_sid(sid, &map, MAPPING_WITHOUT_PRIV)) + if (!get_group_map_from_sid(sid, &map, MAPPING_WITHOUT_PRIV)) return NT_STATUS_NO_SUCH_ALIAS; switch (q_u->switch_level) { -- cgit From f68825e93371e3d3403167f608d1da0d7ada1a04 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sun, 29 Sep 2002 10:53:47 +0000 Subject: Some more work on vampire. Volker --- source/utils/net_rpc_samsync.c | 44 +++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/source/utils/net_rpc_samsync.c b/source/utils/net_rpc_samsync.c index 202d5b5c88e..c040b3cca2f 100644 --- a/source/utils/net_rpc_samsync.c +++ b/source/utils/net_rpc_samsync.c @@ -4,6 +4,7 @@ Copyright (C) Andrew Tridgell 2002 Copyright (C) Tim Potter 2001,2002 + Modified by Volker Lendecke 2002 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -191,7 +192,6 @@ fail: static NTSTATUS sam_account_from_delta(SAM_ACCOUNT *account, SAM_ACCOUNT_INFO *delta) { - DOM_SID sid; fstring s; uchar lm_passwd[16], nt_passwd[16]; @@ -227,13 +227,8 @@ sam_account_from_delta(SAM_ACCOUNT *account, SAM_ACCOUNT_INFO *delta) /* User and group sid */ - sid_copy(&sid, get_global_sam_sid()); - sid_append_rid(&sid, delta->user_rid); - pdb_set_user_sid(account, &sid); - - sid_copy(&sid, get_global_sam_sid()); - sid_append_rid(&sid, delta->group_rid); - pdb_set_group_sid(account, &sid); + pdb_set_user_sid_from_rid(account, delta->user_rid); + pdb_set_group_sid_from_rid(account, delta->group_rid); /* Logon and password information */ @@ -359,17 +354,10 @@ fetch_group_info(uint32 rid, SAM_GROUP_INFO *delta) fstring sid_string; GROUP_MAP map; int flag = TDB_INSERT; - gid_t gid; unistr2_to_ascii(name, &delta->uni_grp_name, sizeof(name)-1); unistr2_to_ascii(comment, &delta->uni_grp_desc, sizeof(comment)-1); - if ((grp = getgrnam(name)) == NULL) - smb_create_group(name, &gid); - - if ((grp = getgrgid(gid)) == NULL) - return NT_STATUS_ACCESS_DENIED; - /* add the group to the mapping table */ sid_copy(&group_sid, get_global_sam_sid()); sid_append_rid(&group_sid, rid); @@ -382,17 +370,17 @@ fetch_group_info(uint32 rid, SAM_GROUP_INFO *delta) if (grp == NULL) { - gid_t new_gid; + gid_t gid; + /* No group found from mapping, find it from its name. */ if ((grp = getgrnam(name)) == NULL) { /* No appropriate group found, create one */ d_printf("Creating unix group: '%s'\n", name); - if (smb_create_group(name, &new_gid) != 0) + if (smb_create_group(name, &gid) != 0) + return NT_STATUS_ACCESS_DENIED; + if ((grp = getgrgid(gid)) == NULL) return NT_STATUS_ACCESS_DENIED; } - - if ((grp = getgrgid(new_gid)) == NULL) - return NT_STATUS_ACCESS_DENIED; } map.gid = grp->gr_gid; @@ -558,22 +546,26 @@ static NTSTATUS fetch_alias_info(uint32 rid, SAM_ALIAS_INFO *delta, } if (grp == NULL) { - gid_t new_gid; + gid_t gid; + /* No group found from mapping, find it from its name. */ if ((grp = getgrnam(name)) == NULL) { /* No appropriate group found, create one */ d_printf("Creating unix group: '%s'\n", name); - if (smb_create_group(name, &new_gid) != 0) + if (smb_create_group(name, &gid) != 0) + return NT_STATUS_ACCESS_DENIED; + if ((grp = getgrgid(gid)) == NULL) return NT_STATUS_ACCESS_DENIED; } - - if ((grp = getgrgid(new_gid)) == NULL) - return NT_STATUS_ACCESS_DENIED; } map.gid = grp->gr_gid; map.sid = alias_sid; - map.sid_name_use = SID_NAME_ALIAS; + + if (sid_equal(&dom_sid, &global_sid_Builtin)) + map.sid_name_use = SID_NAME_WKN_GRP; + else + map.sid_name_use = SID_NAME_ALIAS; fstrcpy(map.nt_name, name); fstrcpy(map.comment, comment); -- cgit From ace7738e123b28f69c290f9f1de50011d230e14b Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 30 Sep 2002 02:28:28 +0000 Subject: Fix the compile issue in bin/samtest, and make the 'system' token just have the System sid. This avoids comparing with ACEs that we don't yet support in the ADS Domain security descriptor. --- source/lib/util_sid.c | 7 ++----- source/torture/cmd_sam.c | 4 ++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/source/lib/util_sid.c b/source/lib/util_sid.c index 9e533eb9fd1..1439471f64b 100644 --- a/source/lib/util_sid.c +++ b/source/lib/util_sid.c @@ -61,7 +61,7 @@ NT_USER_TOKEN anonymous_token = { static DOM_SID system_sid_array[4]; NT_USER_TOKEN system_token = { - 4, + 1, system_sid_array }; @@ -134,10 +134,7 @@ void generate_wellknown_sids(void) sid_copy( &anonymous_token.user_sids[2], &global_sid_Anonymous); /* Create the system token. */ - sid_copy( &system_token.user_sids[0], &global_sid_World); - sid_copy( &system_token.user_sids[1], &global_sid_Authenticated_Users); - sid_copy( &system_token.user_sids[2], &global_sid_Builtin_Administrators); - sid_copy( &system_token.user_sids[3], &global_sid_System); + sid_copy( &system_token.user_sids[0], &global_sid_System); initialised = True; } diff --git a/source/torture/cmd_sam.c b/source/torture/cmd_sam.c index 0cd219cb459..eb8c17f2f96 100644 --- a/source/torture/cmd_sam.c +++ b/source/torture/cmd_sam.c @@ -379,7 +379,7 @@ static NTSTATUS cmd_lookup_account_sid(struct samtest_state *st, TALLOC_CTX *mem return NT_STATUS_INVALID_PARAMETER; } - if (!NT_STATUS_IS_OK(status = context_sam_get_account_by_sid(st->context, st->token, USER_ALL_ACCESS, &sid, &account))) { + if (!NT_STATUS_IS_OK(status = sam_get_account_by_sid(st->context, st->token, USER_ALL_ACCESS, &sid, &account))) { printf("context_sam_get_account_by_sid failed: %s\n", nt_errstr(status)); return status; } @@ -400,7 +400,7 @@ static NTSTATUS cmd_lookup_account_name(struct samtest_state *st, TALLOC_CTX *me } - if (!NT_STATUS_IS_OK(status = context_sam_get_account_by_name(st->context, st->token, USER_ALL_ACCESS, argv[1], argv[2], &account))) { + if (!NT_STATUS_IS_OK(status = sam_get_account_by_name(st->context, st->token, USER_ALL_ACCESS, argv[1], argv[2], &account))) { printf("context_sam_get_account_by_sid failed: %s\n", nt_errstr(status)); return status; } -- cgit From d60afa48e3214a4fa4c0a937635c3acf2a4b4a65 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 30 Sep 2002 04:58:55 +0000 Subject: This is an initial draft of printing internals. Not done (not really even started), and not in SGML. Plain ASCII right now, but I'll do some more work on it tomorrow. --- docs/docbook/devdoc/printing.sgml | 73 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 docs/docbook/devdoc/printing.sgml diff --git a/docs/docbook/devdoc/printing.sgml b/docs/docbook/devdoc/printing.sgml new file mode 100644 index 00000000000..3cce7ab99ca --- /dev/null +++ b/docs/docbook/devdoc/printing.sgml @@ -0,0 +1,73 @@ +!= +!= Samba Printing Internals +!= +!= Author : Gerald Carter +!= +!=================================================================== + +The purpose of this document is to provide some insight into +Samba's printing functionality and also to describe the semantics +of certain features of Windows client printing. + +Print Queue TDB's +------------------ + +* matching lanman jobids, spoolss jobids, & lpd jobids +* why ? +* caching time + + +ChangeID & Client Caching of Printer Information +------------------------------------------------ + +[To be filled in later] + + +Windows NT/2K Printer Change Notify +----------------------------------- + +When working with Windows NT+ clients, it is possible for a +print server to use RPC to send asynchronous change notification +events to clients for certain printer and print job attributes. +This can be useful when the client needs to know that a new +job has been added to the queue for a given printer or that the +driver for a printer has been changed. Note that this is done +entirely orthogonal to cache updates based on a new ChangeID for +a printer object. + +The basic set of RPC's used to implement change notification are + + * RemoteFindFirstPrinterChangeNotifyEx ( RFFPCN ) + * RemoteFindNextPrinterChangeNotifyEx ( RFNPCN ) + * FindClosePrinterChangeNotify( FCPCN ) + * ReplyOpenPrinter + * ReplyClosePrinter + * RouteRefreshPrinterChangeNotify ( RRPCN ) + +One additional RPC is available to a server, but is never used by the +Windows spooler service: + + * RouteReplyPrinter() + +The opnum for all of these RPC's are defined in include/rpc_spoolss.h + +Windows NT print servers use a bizarre method of sending print +notification event to clients. The process of registering a new change +notification handle is as follows. The 'C' is for client and the +'S' is for server. All error conditions have been eliminated. + +C: Obtain handle to printer or to the printer + server via the standard OpenPrinterEx() call. +S: Respond with a valid handle to object + +C: Send a RFFPCN request with the previously obtained + handle and either (a) + + + +* Back Channel +* Methods of sending an event +* Id numbers (print server handles, jobids, & printer handles ) +* event types ( jobs & printer attributes ) +* aggegating notifications + -- cgit From a7009ad5c8aaae350b2521b8c0cd2538e561618a Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 30 Sep 2002 05:19:43 +0000 Subject: Don't zero out numwritten before using.... Found by Pierre Belanger belanger@pobox.com Jeremy. --- source/lib/sendfile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/lib/sendfile.c b/source/lib/sendfile.c index 98a52608b8d..5d1cf2f10bc 100644 --- a/source/lib/sendfile.c +++ b/source/lib/sendfile.c @@ -208,10 +208,10 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of hdtrl[0].iov_base = NULL; hdtrl[0].iov_len = 0; } else { - nwritten = 0; /* iov_base is defined as a void *... */ hdtrl[0].iov_base = ((char *)hdtrl[0].iov_base) + nwritten; hdtrl[0].iov_len -= nwritten; + nwritten = 0; } } total -= nwritten; @@ -280,9 +280,9 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of hdtrl.iov_base = NULL; hdtrl.iov_len = 0; } else { - nwritten = 0; hdtrl.iov_base += nwritten; hdtrl.iov_len -= nwritten; + nwritten = 0; } } total -= nwritten; -- cgit From ac0d1acc5542b0f02a85e38e5adfcc8098ff166a Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Mon, 30 Sep 2002 05:39:33 +0000 Subject: Added from samba mailing lists. Might help someone one day. --- docs/textdocs/CUPS-PrintingInfo.txt | 589 ++++++++++++++++++++++++++++++++++++ 1 file changed, 589 insertions(+) create mode 100644 docs/textdocs/CUPS-PrintingInfo.txt diff --git a/docs/textdocs/CUPS-PrintingInfo.txt b/docs/textdocs/CUPS-PrintingInfo.txt new file mode 100644 index 00000000000..bbe14f33e8f --- /dev/null +++ b/docs/textdocs/CUPS-PrintingInfo.txt @@ -0,0 +1,589 @@ +Date: Sun, 22 Sep 2002 15:38:02 +0200 +From: "Kurt Pfeifle" +Reply-To: kpfeifle@danka.de +Organization: Danka Deutschland GmbH +To: samba@lists.samba.org +Subject: CUPS filtering mechanism explained, was: [cups raw mode, was Re: [Samba] unlink data file in cups_job_submit] + +Paul Janzen wrote on Samba digest: + + > Message: 7 + > To: Gerald Carter + > Cc: samba@lists.samba.org + > From: Paul Janzen + > Subject: cups raw mode, was Re: [Samba] unlink data file in cups_job_submit + > Date: 21 Sep 2002 12:09:23 -0700 + > + > + > Gerald Carter writes: + > + > > Looks right to me [:-)] Applying it now. Thanks. I've been meaning to + > > track this one down. + > + > + > Thanks! + > + > While we are on the subject... [:-)] + > + > If I am using native printer drivers on Windows clients, I would like + > the "raw" option to get propagated to CUPS. Otherwise cups does not + > pass the data on to the printer. + +Paul, + +I see you know about what you call the "raw data passthrough feature". +I guess you mean the lines in "/etc/cups/mime.types" and +"/etc/cups/mime.convs" which need to be uncommented to allow "raw" +printing ? + +Here is some clarification (likely not very useful for you, but +possibly for some other readers of the Samba list): + +### If you have "printing = cups" and "printcap = cups" enabled, +--- everything is handled by Samba accessing the CUPS API. (And any + "print command" directive in Samba will be ignored.) If the CUPS + API is not available (because Samba might not be compiled against +libcups), it automatically maps to the "System V" command set, with +"-oraw" enabled automatically. + + > (If I enable cups's application/ + > octet-stream raw-data passthrough feature, both cupsomatic and the + > Windows driver add PJL headers and footers, which is not what I want + > either.) + +### According to my experience, cupsomatic on the Samba/CUPS server +--- does *not* add any features if a file is really printed "raw". + However, if you have loaded the driver for the Windows client +from the CUPS server, using the "cupsaddsmb" utility, and if this +driver is one using a "Foomatic" PPD, the PJL header in question is +already added on the Windows client, at the time when the driver +initially generated the PostScript data -- and CUPS in true "-oraw" +manner doesn't remove this PJL header and passes the file "as is" +to its printer communication backend. + +NOTE, please, that the editing in the "mime.convs" and the +----- "mime.types" file does not *enforce* "raw" printing, it + only *allows* it. Any file arriving from Windows is +"auto-typed" by CUPS, which might consecutively lead to its +treatment by various filters automatically (depending on the +actual outcome of the auto-typing and the configuration of the +printqueue in question): + + --> Files generated by PCL drivers and destined to PCL + printers get auto-typed "application/octet-stream" + and are indeed printed "raw". Also, unknown file + types are getting tagged as "application/octet-stream". + + --> Files generated by a PostScript driver (and destined + for any target printer type) are auto-typed. Depending + on the driver, the discovered MIME type may be + + * application/postscript or + * application/vnd.cups-postscript + +"application/postscript" goes first thru the "pstops" filter + (where also the page counting and accounting takes place + currently), and the outcome will be of MIME type + "application/vnd.cups-postscript". The pstopsfilter reads and + uses information from the PPD and inserts user-provided options + into the PostScript file. As a consequence, the filtered file + will possibly have the PJL header you don't want. + +"application/postscript" will be all files with a ".ps", ".ai", + ".eps" suffix or which have as their first character string one + of "%!" or "<04>%". + +"application/vnd.cups-postscript" will be those files which do both, + first... + ...carry a string "LANGUAGE=POSTSCRIPT" (or similar variations + with different capitalization) amongst the first 512 bytes, + *plus*... + ...contain the "PJL super escape code" amongst the first 128 + bytes ("<1B>%-12345X"). Very likely, most PostScript files + generated on Windows using a CUPS- or other PPD, will have + to be auto-typed as "vnd.cups-postscript". + Probably a file produced with a "Generic PostScript driver" + will be just "application/postscript" (have not checked). + +Once the file is in "application/vnd.cups-postscript" format, +either "pstoraster" or "cupsomatic" will take over (depending +on the printer configuration, as determined by the PPD in use). + +NOTE: a printer queue with *no* PPD associated to it is a "raw" +----- printer and all files will go directly there as received + by the spooler; the exeption are file types +"application/octet-stream" which need the mentioned "passthrough +feature" enabled. "Raw" queues don't do any filtering at all, they +hand the file directly to the CUPS backend. This backend is +responsible for the sending of the data to the device (as visible +in the "device URI" notation as lpd://, socket://, smb://, ipp://, +http://, parallel:/, serial:/, usb:/ etc.) + +NOTE, please, also the following fact: "cupsomatic"/Foomatic are +----- *not* native CUPS drivers and they don't ship with CUPS. + They are a Third Party add-on, developed at Linuxprinting.org. +As such, they are a brilliant hack to make all models (driven by +Ghostscript drivers/filters in traditional spoolers) also work via +CUPS, with the same (good or bad!) quality as in these other +spoolers. "cupsomatic" is only a vehicle to execute a ghostscript +commandline at that stage in the CUPS filtering chain, where +"normally" the native CUPS "pstoraster" filter would kick in. +cupsomatic by-passes pstoraster, "kidnaps" the printfile from CUPS +away and re-directs it to go through Ghostscipt. CUPS accepts this, +because the associated CUPS-O-Matic-/Foomatic-PPD carries a line +reading + + *cupsFilter: "application/vnd.cups-postscript 0 cupsomatic" + +This line persuades CUPS to hand the file to cupsomatic, once it +has successfully converted it to the MIME type +"application/vnd.cups-postscript". This conversion will not +happen for Jobs arriving from Windows which are autotyped +"application/octet-stream", with the according changes in +"/etc/cups/mime.types" in place. + +See small drawings at the end... + +I am not a programmer, so please correct me if I am wrong. + + > With traditional lpr, you can just add "-oraw" to the "print command" + > line in smb.conf. With cups, you don't have that alternative. + +You *do* have it, I think. + +But you need to disable the settings "printing = cups" and "printcap = += cups" and use "printing = bsd" and "printcap = /etc/printcap" +instead. [Additionally, you will probably have to enable and configure +the CUPS mini-LPD daemon ("cups-lpd") run from inetd... but I have not +checked, so take this item with a grain of salt and a proper dose of +caution, please.] + + > The result is that to support both unix printing and native-driver + > Windows printing from CUPS, you have to have two logical printers per + > physical printer: one ("cooked") for Unix clients and one ("raw") for + > Samba to use. + +Yes, that is one current workaround, if you don't want the auto-typing +of CUPS influencing Samba/Windows client PostScript jobs. + +CUPS is widely configurable and flexible, even regarding its filtering +mechanism. Another workaround in some situations would be to have +lines in "/etc/cups/mime.types" saying + + application/postscript application/vnd.cups-raw 0 - + application/vnd.cups-postscript application/vnd.cups-raw 0 - + +This would prevent all Postscript files to be filtered (or rather, they +will go thru the virtual "nullfilter" denoted with "-". (This could only +be useful for PS printers, or if you want to print PS code on non-PS +printers ;-) + +A single line of + + */* application/vnd.cups-raw 0 - + +would effectively send *all* files towards the backend immediately +(good luck!) + +Last, you could have the following (without the need for a Samba +patch): + + application/vnd.cups-postscript application/vnd.cups-raw 0 my_PJL_stripping_filter + +You'd need to write a "my_PJL_stripping_filter" (could be a shellscript) +which parses the PostScript and removes the undesired PJL. This would +need to conform to CUPS filter design (mainly, receive and pass the +parameters printername, job-id, username, jobtitle, copies, printoptions +and possibly the filename). It would just go as world executably into +"/usr/lib/cups/filters/" and work from there, called by cups if it +encounters a MIME type "application/vnd.cups-postscript" + + > The attached patch allows you to specify an option string for cups + > printers in smb.conf. + +I think your patch is in any case very useful (if it works as +advertised ;-). It is the most generic, simple and flexible +approach to complement CUPS. + + > So, if you want to use native Windows drivers, + > all you need is + > + > cups printer options = raw + > + > in smb.conf. You can add any other options that cups and the printer + > understand. + +Now this last sentence makes me very curious. Do you mean you can add +*multiple* options to this directive? Which syntax would be required +for this ? (Some CUPS options are specified by an "-o option=value" +pair on the commandline, some are single values, like the "-o raw" +one...) + +I am thinking on one specific usage now: + +----------------------------------------------------------------------- +-> passing any available IPP job attribute to the printer / the spooler +----------------------------------------------------------------------- + +For example, CUPS can handle "-o job-hold-until=indefinite". This +keeps the job in the queue "on hold". It will only be printed upon +manual release by the printer operator. This is a requirement in +many "central reproduction departments", where a few operators +manage the jobs of hundreds of users on some big machine, where no +user is allowed to have direct access. (The operators often need to +load the proper paper type before running the 10.000 page job +requested by marketing for the mailing, etc.). + +A lot more useful applications come to mind, if I could pass +"any other options that cups and the printer understand" via +the smb.conf directive!! + +Thanks a lot! + +Cheers, +Kurt + +P.S.: List, please give me some feedback, if you think this type of + explanation could be useful in the Samba HOWTO Collection. In + that case, I'll try to write it up in a nicer form. + + +######################################################################### +# +# CUPS in and of itself has this (general) filter chain (CAPITAL +# letters are FILE-FORMATS or MIME types, other are filters (this is +# true for pre-1.1.15 of pre-4.3 versions of CUPS and ESP PrintPro): +# +# -FILEFORMAT +# | +# | +# V +# tops +# | +# | +# V +# APPLICATION/POSTSCRIPT +# | +# | +# V +# pstops +# | +# | +# V +# APPLICATION/VND.CUPS-POSTSCRIPT +# | +# | +# V +# pstoraster # as shipped with CUPS, independent from any Ghostscipt +# | # installation on the system +# | (= "postscipt interpreter") +# | +# V +# APPLICATION/VND.CUPS-RASTER +# | +# | +# V +# rasterto (f.e. Gimp-Print filters may be plugged in here) +# | (= "raster driver") +# | +# V +# SOMETHING-DEVICE-SPECIFIC +# | +# | +# V +# backend +# +# +# ESP PrintPro has some enhanced "rasterto" filters as compared to +# CUPS, and also a somewhat improved "pstoraster" filter. +# +# NOTE: Gimp-Print and some other 3rd-Party-Filters (like TurboPrint) to +# CUPS and ESP PrintPro plug-in where rasterto is noted. +# +# +######################################################################### +# +# This is how "cupsomatic" comes into play: +# ========================================= +# +# -FILEFORMAT +# | +# | +# V +# tops +# | +# | +# V +# APPLICATION/POSTSCRIPT +# | +# | +# V +# pstops +# | +# | +# V +# APPLICATION/VND.CUPS-POSTSCRIPT ----------------+ +# | | +# | V +# V cupsomatic +# pstoraster (constructs complicated +# | (= "postscipt interpreter") Ghostscript commandline +# | to let the file be +# V processed by a +# APPLICATION/VND.CUPS-RASTER "-sDEVICE=" +# | call...) +# | | +# V | +# rasterto V +# | (= "raster driver") +-------------------------+ +# | | Ghostscript at work.... | +# V | | +# SOMETHING-DEVICE-SPECIFIC *-------------------------+ +# | | +# | | +# V | +# backend <------------------------------------+ +# | +# | +# V +# THE PRINTER +# +# +# +# Note, that cupsomatic "kidnaps" the printfile after the +# "APPLICATION/VND.CUPS-POSTSCRPT" stage and deviates it through +# the CUPS-external, systemwide Ghostscript installation, bypassing the +# "pstoraster" filter (therefor also bypassing the CUPS-raster-drivers +# "rasterto", and hands the rasterized file directly to the CUPS +# backend... +# +# cupsomatic is not made by the CUPS developers. It is an independent +# contribution to printing development, made by people from +# Linuxprinting.org. (see also http://www.cups.org/cups-help.html) +# +# NOTE: Gimp-Print and some other 3rd-Party-Filters (like TurboPrint) to +# CUPS and ESP PrintPro plug-in where rasterto is noted. +# +# +######################################################################### +# +# And this is how it works for ESP PrintPro from 4.3: +# =================================================== +# +# -FILEFORMAT +# | +# | +# V +# tops +# | +# | +# V +# APPLICATION/POSTSCRIPT +# | +# | +# V +# pstops +# | +# | +# V +# APPLICATION/VND.CUPS-POSTSCRIPT +# | +# | +# V +# gsrip +# | (= "postscipt interpreter") +# | +# V +# APPLICATION/VND.CUPS-RASTER +# | +# | +# V +# rasterto (f.e. Gimp-Print filters may be plugged in here) +# | (= "raster driver") +# | +# V +# SOMETHING-DEVICE-SPECIFIC +# | +# | +# V +# backend +# +# NOTE: Gimp-Print and some other 3rd-Party-Filters (like TurboPrint) to +# CUPS and ESP PrintPro plug-in where rasterto is noted. +# +# +######################################################################### +# +# This is how "cupsomatic" would come into play with ESP PrintPro: +# ================================================================ +# +# +# -FILEFORMAT +# | +# | +# V +# tops +# | +# | +# V +# APPLICATION/POSTSCRIPT +# | +# | +# V +# pstops +# | +# | +# V +# APPLICATION/VND.CUPS-POSTSCRIPT ----------------+ +# | | +# | V +# V cupsomatic +# gsrip (constructs complicated +# | (= "postscipt interpreter") Ghostscript commandline +# | to let the file be +# V processed by a +# APPLICATION/VND.CUPS-RASTER "-sDEVICE=" +# | call...) +# | | +# V | +# rasterto V +# | (= "raster driver") +-------------------------+ +# | | Ghostscript at work.... | +# V | | +# SOMETHING-DEVICE-SPECIFIC *-------------------------+ +# | | +# | | +# V | +# backend <------------------------------------+ +# | +# | +# V +# THE PRINTER +# +# NOTE: Gimp-Print and some other 3rd-Party-Filters (like TurboPrint) to +# CUPS and ESP PrintPro plug-in where rasterto is noted. +# +######################################################################### +# +# And this is how it works for CUPS from 1.1.15: +# ============================================== +# +# -FILEFORMAT +# | +# | +# V +# tops +# | +# | +# V +# APPLICATION/POSTSCRIPT +# | +# | +# V +# pstops +# | +# | +# V +# APPLICATION/VND.CUPS-POSTSCRIPT-----+ +# | +# +------------------v------------------------------+ +# | Ghostscript | +# | at work... | +# | (with | +# | "-sDEVICE=cups") | +# | | +# | (= "postscipt interpreter") | +# | | +# +------------------v------------------------------+ +# | +# | +# APPLICATION/VND.CUPS-RASTER <-------+ +# | +# | +# V +# rasterto +# | (= "raster driver") +# | +# V +# SOMETHING-DEVICE-SPECIFIC +# | +# | +# V +# backend +# +# +# NOTE: since version 1.1.15 CUPS "outsourced" the pstoraster process to +# Ghostscript. GNU Ghostscript needs to be patched to handle the +# CUPS requirement; ESP Ghostscript has this builtin. In any case, +# "gs -h" needs to show up a "cups" device. pstoraster is now a +# calling an appropriate "gs -sDEVICE=cups..." commandline to do +# the job. It will output "application/vnd.cup-raster", which will +# be finally processed by a CUPS raster driver "rasterto" +# Note the difference to "cupsomatic", which will *not* output +# CUPS-raster, but a final version of the printfile, ready to be +# sent to the printer. cupsomatic also doesn't use the "cups" +# devicemode in Ghostscript, but one of the classical devicemodes.... +# +# NOTE: Gimp-Print and some other 3rd-Party-Filters (like TurboPrint) to +# CUPS and ESP PrintPro plug-in where rasterto is noted. +# +######################################################################### +# +# And this is how it works for CUPS from 1.1.15, with cupsomatic included: +# ======================================================================== +# +# -FILEFORMAT +# | +# | +# V +# tops +# | +# | +# V +# APPLICATION/POSTSCRIPT +# | +# | +# V +# pstops +# | +# | +# V +# APPLICATION/VND.CUPS-POSTSCRIPT-----+ +# | +# +------------------v------------------------------+ +# | Ghostscript . Ghostscript at work.... | +# | at work... . (with "-sDEVICE= | +# | (with . " | +# | "-sDEVICE=cups") . | +# | . | +# | (CUPS standard) . (cupsomatic) | +# | . | +# | (= "postscript interpreter") | +# | . | +# +------------------v--------------v---------------+ +# | | +# | | +# APPLICATION/VND.CUPS-RASTER <-------+ | +# | | +# | | +# V | +# rasterto | +# | (= "raster driver") | +# | | +# V | +# SOMETHING-DEVICE-SPECIFIC <------------------------+ +# | +# | +# V +# backend +# +# +# NOTE: Gimp-Print and some other 3rd-Party-Filters (like TurboPrint) to +# CUPS and ESP PrintPro plug-in where rasterto is noted. +# +########################################################################## + +I hope this helps more people understand how CUPS works and how they +can possibly tweak it to their needs. + + -- cgit From 2613d3a48a8d60c3db38406a1abd943dbe0b7d09 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 30 Sep 2002 06:45:58 +0000 Subject: Second part of my fix -- incorrect merge. --- source/rpc_server/srv_samr_nt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c index 290baabc3b4..020a3c6aafd 100644 --- a/source/rpc_server/srv_samr_nt.c +++ b/source/rpc_server/srv_samr_nt.c @@ -894,7 +894,7 @@ static NTSTATUS get_group_alias_entries(TALLOC_CTX *ctx, DOMAIN_GRP **d_grp, DOM /* well-known aliases */ if (sid_equal(sid, &global_sid_Builtin) && !lp_hide_local_users()) { - enum_group_mapping(SID_NAME_ALIAS, &map, (int *)&num_entries, ENUM_ONLY_MAPPED, MAPPING_WITHOUT_PRIV); + enum_group_mapping(SID_NAME_WKN_GRP, &map, (int *)&num_entries, ENUM_ONLY_MAPPED, MAPPING_WITHOUT_PRIV); if (num_entries != 0) { *d_grp=(DOMAIN_GRP *)talloc_zero(ctx, num_entries*sizeof(DOMAIN_GRP)); -- cgit From b9942092cf3d0a9fbf94b51b576836a86059551b Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 30 Sep 2002 15:18:59 +0000 Subject: fix logic error in testparm with wins servers --- source/utils/testparm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/utils/testparm.c b/source/utils/testparm.c index d48cecba47b..c81d6e72e48 100644 --- a/source/utils/testparm.c +++ b/source/utils/testparm.c @@ -52,8 +52,8 @@ static int do_global_checks(void) ret = 1; } - if (lp_wins_support() && wins_srv_count()) { - printf("ERROR: both 'wins support = true' and 'wins server = ' \ + if (lp_wins_support() && lp_wins_server_list()) { + printf("ERROR: both 'wins support = true' and 'wins server = ' \ cannot be set in the smb.conf file. nmbd will abort with this setting.\n"); ret = 1; } -- cgit From 93cb8b47c48d0492e3e699542bdc521aafb8d1b7 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 30 Sep 2002 15:25:40 +0000 Subject: README.OtherModules --- examples/VFS/README.OtherModules | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 examples/VFS/README.OtherModules diff --git a/examples/VFS/README.OtherModules b/examples/VFS/README.OtherModules new file mode 100644 index 00000000000..02dced61589 --- /dev/null +++ b/examples/VFS/README.OtherModules @@ -0,0 +1,39 @@ +This file contains a listing of various other VFS modules that +have been posted but don't currently reside in the Samba CVS +tree for one reason ot another (e.g. it is easy for the maintainer +to have his or her own CVS tree). + +No statemets about the stability or functionality any module +should be implied due to its presence here. + + +------------------------------------------------------------ +Date: Sat, 28 Sep 2002 23:41:31 -0500 +From: Eric Lorimer +To: samba-technical@lists.samba.org +Subject: DatabaseFS VFS module + +Hello, + +I have created a VFS module which implements a fairly complete read-only +filesystem. It presents information from a database as a filesystem in +a modular and generic way to allow different databases to be used +(originally designed for organizing MP3s under directories such as +"Artists," "Song Keywords," etc... I have since applied it to a student +roster database very easily). The directory structure is stored in the +database itself and the module makes no assumptions about the database +structure beyond the table it requires to run. You can find it at: + +http://www.css.tayloru.edu/~elorimer/databasefs/index.php + + +Any feedback would be appreciated: comments, suggestions, patches, +etc... If nothing else, hopefully it might prove useful for someone +else who wishes to create a virtual filesystem. + +Thanks for the great product and keep up the good work. + + +- Eric Lorimer + +------------------------------------------------------------ -- cgit From a4a3469ffb44061c58bbcd807a9585ae13326f7b Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 30 Sep 2002 16:51:35 +0000 Subject: more details opn change notification --- docs/docbook/devdoc/printing.sgml | 89 +++++++++++++++++++++++++++++++++++---- 1 file changed, 80 insertions(+), 9 deletions(-) diff --git a/docs/docbook/devdoc/printing.sgml b/docs/docbook/devdoc/printing.sgml index 3cce7ab99ca..1d4085bb88e 100644 --- a/docs/docbook/devdoc/printing.sgml +++ b/docs/docbook/devdoc/printing.sgml @@ -60,14 +60,85 @@ C: Obtain handle to printer or to the printer server via the standard OpenPrinterEx() call. S: Respond with a valid handle to object -C: Send a RFFPCN request with the previously obtained - handle and either (a) +C: Send a RFFPCN request with the previously obtained + handle with either (a) set of flags for change events + to monitor, or (b) a PRINTER_NOTIFY_OPTIONS structure + containing the event information to monitor. The windows + spooler has only been observed to use (b). +S: The opens a new TCP session to the client (thus requiring + all print clients to be CIFS servers as well) and sends + a ReplyOpenPrinter() request to the client. +C: The client responds with a printer handle that can be used to + send event notification messages. +S: The server replies success to the RFFPCN request. + +C: The windows spooler follows the RFFPCN with a RFNPCN + request to fetch the current values of all monitored + attributes. +S: The server replies with an array SPOOL_NOTIFY_INFO_DATA + structures (contained in a SPOOL_NOTIFY_INFO structure). + +C: If the change notification handle is ever released by the + client via a PCPCN request, the server sends a ReplyClosePrinter() + request back to the client first. However a request of this + nature from the client is often an indication that the previous + notification event was not marshalled correctly by the server + or a piece of data was wrong. +S: The server closes the internal change notification handle + (POLICY_HND) and does not send any further change notification + events to the client for that printer or job. + +The current list of notification events supported by Samba can be +found by examining the internal tables in srv_spoolss_nt.c + + * printer_notify_table[] + * job_notify_table[] + +When an event occurs that could be monitored, smbd sends a messages +to itself about the change. The list of events to be transmitted +are queued by the smbd process sending the message to prevent and +overload of TDB usage and the internal message is sent during smbd's +idle loop (refer to printing/notify.c and the functions +send_spoolss_notify2_msg() and print_notify_send_messages() ). + + +The decision of whether or not the change is to be sent to connected +clients is made by the routine which actually sends the notification. +( refer to srv_spoolss_nt.c:recieve_notify2_message() ). + +Because it possible to recieve a listing of multiple changes for +multiple printers the notification events must be split into +categories by the printer name. This makes it possible to group +multiple change events to be sent in a single RPC according to the +printer handle obtained via a ReplyOpenPrinter(). + +The actual change notification is performed using the RRPCN request +RPC. This packet contains + + * the printer handle registered with the client's spooler on + which the change occurred + * The change_low value which was sent as part of the last + RFNPCN request from the client + * The SPOOL_NOTIFY_INFO container with the event information + - the version and flags field are predefined and should not + be changed + - The count field is the number of entries in the + SPOOL_NOTIFY_INFO_DATA array + o The type defines whether or not this event is for a printer + or a print job + o The field is the flag identifying the event + o the notify_data union contains the new valuie of the attribute + o The enc_type defines the size of the structure for marshalling + and unmarshalling + o (a) the id must be 0 for a printer event on a printer handle. + (b) the id must be the job id for an event on a printer job + (c) the id must be the matching number of the printer index used + in the response packet to the RFNPCN when using a print server + handle for notification. Samba currently uses the snum of + the printer for this which can break if the list of services + has been modified since the notification handle was registered. + o The size is either (a) the string length in UNICODE for strings, + (b) the size in bytes of the security descriptor, or (c) 0 for + data values. - -* Back Channel -* Methods of sending an event -* Id numbers (print server handles, jobids, & printer handles ) -* event types ( jobs & printer attributes ) -* aggegating notifications - -- cgit From a42414fe5aff8a9e0fccd1c73a86e3b472f2c149 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 30 Sep 2002 19:52:11 +0000 Subject: more updates--printing backend inmterface & Print queue tdb's --- docs/docbook/devdoc/printing.sgml | 129 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 124 insertions(+), 5 deletions(-) diff --git a/docs/docbook/devdoc/printing.sgml b/docs/docbook/devdoc/printing.sgml index 1d4085bb88e..2e9d429439e 100644 --- a/docs/docbook/devdoc/printing.sgml +++ b/docs/docbook/devdoc/printing.sgml @@ -1,6 +1,6 @@ != != Samba Printing Internals -!= +!= != Author : Gerald Carter != !=================================================================== @@ -9,18 +9,137 @@ The purpose of this document is to provide some insight into Samba's printing functionality and also to describe the semantics of certain features of Windows client printing. + +Printing Interface to Various Backends +-------------------------------------- + +Samba uses a table of function pointers to seven functions. The +function prototypes are defined in the printif structure declared +in printing.h. + + * retrieve the contents of a print queue + * pause the print queue + * resume a paused print queue + * delete a job from the queue + * pause a job in the print queue + * result a paused print job in the queue + * submit a jobn to the print queue + +Currently there are only two printing backend implementations +defined. + + * a generic set of functions for working with standard UNIX + printing subsystems + * a set of CUPS specific functions (this is only enabled if + the CUPS libraries were located at compile time). + + + Print Queue TDB's ------------------ -* matching lanman jobids, spoolss jobids, & lpd jobids -* why ? -* caching time +Samba provides periodic caching of the output from the "lpq command" +for performance reasons. This cache time is configurable in seconds. +Obviously the longer the cache time the less often smbd will be +required to exec a copy of lpq. However, the accuracy of the print +queue contents displayed to clients will be diminished as well. + +The list of currently opened print queue TDB's can eb found +be examining the list of tdb_print_db structures ( see print_db_head +in printing.c ). A queue TDB is opened using the wrapper function +printing.c:get_print_db_byname(). The function ensures that smbd +does not open more than MAX_PRINT_DBS_OPEN in an effort to prevent +a large print server from exhausting all available file descriptors. +If the number of open queue TDB's exceeds the MAX_PRINT_DBS_OPEN +limit, smbd falls back to a most recently used algorithm for maintaining +a list of open TDB's. + +There are two ways in which a a print job can be entered into +a print queue's TDB. The first is to submit the job from a Windows +client which will insert the job information directly into the TDB. +The second method is to have the print job picked up by executing the +"lpq command". + +/* included from printing.h */ +struct printjob { + pid_t pid; /* which process launched the job */ + int sysjob; /* the system (lp) job number */ + int fd; /* file descriptor of open file if open */ + time_t starttime; /* when the job started spooling */ + int status; /* the status of this job */ + size_t size; /* the size of the job so far */ + int page_count; /* then number of pages so far */ + BOOL spooled; /* has it been sent to the spooler yet? */ + BOOL smbjob; /* set if the job is a SMB job */ + fstring filename; /* the filename used to spool the file */ + fstring jobname; /* the job name given to us by the client */ + fstring user; /* the user who started the job */ + fstring queuename; /* service number of printer for this job */ + NT_DEVICEMODE *nt_devmode; +}; + +The current manifestation of the printjob structure contains a field +for the UNIX job id returned from the "lpq command" and a Windows job +ID (32-bit bounded by PRINT_MAX_JOBID). When a print job is returned +by the "lpq command" that does not match an existing job in th queue's +TDB, a 32-bit job ID above the is generating by adding UNIX_JOB_START to +the id reported by lpq. + +In order to match a 32-bit Windows jobid onto a 16-bit lanman print job +id, smbd uses an in memory TDB to match the former to a number approriate +for old lanman clients. + +When updating a print queue, smbd will performs the following +steps ( refer to print.c:print_queue_update() ): + + 1) Check to see if another sbmd is currently in the process of + updating the queue contents by checking the pid stored in + "LOCK/". If so, then do not update the TDB. + 2) Lock the mutex entry in the TDB and store our own pid. + Check that this succeeded, else fail. + 3) Store the updated time stamp for the new cache listing + 4) Retrieve the queue listing via "lpq command" + 5) foreach job in the queue + { + if the job is a UNIX job, create a new entry; + if the job has a Windows based jobid, then + { + Lookup the record by the jobid; + if the lookup failed, then + treat it as a UNIX job; + else + update the job status only + } + } + 6) Delete any jobs in the TDB that are not in the in the lpq + listing + 7) Store the print queue status in the TDB + 8) update the cache time stamp again + +Note that it is the contents of this TDB that is returned to Windows +clients and not the actual listing from the "lpq command". + +The NT_DEVICEMODE stored as part of the printjob structure is used to +store a pointer to a non-default DeviceMode associated with the print +job. The pointer will be non-null when the client included a Device +Mode in the OpePrinterEx() call and subsequently submitted a job for +printing on that sam handle. If the client did not include a Device +Mode in the OpenPrinterEx() request, the nt_devmode field is NULL +and the job has the printer's device mode associated with it by default. + +Only non-default Device Mode are stored with print jobs in the print +queue TDB. Otherwise, the Device Mode is obtained from the printer +object when the client issues a GetJob(level == 2) request. + + + + ChangeID & Client Caching of Printer Information ------------------------------------------------ -[To be filled in later] + [To be filled in later] Windows NT/2K Printer Change Notify -- cgit From cb96e1a1d9a07314bb60e431484cfd05aef83de6 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 30 Sep 2002 20:18:12 +0000 Subject: * add the Developers guide to the repository * fix syntax errors in developer's docs * update Makefile.in to place HTML files in htmldocs & text files in textdocs/ --- docs/Samba-Developers-Guide.pdf | 2060 ++++++++ docs/Samba-HOWTO-Collection.pdf | 8137 +++++++++++++++-------------- docs/docbook/Makefile.in | 21 +- docs/docbook/devdoc/internals.sgml | 1 + docs/docbook/devdoc/parsing.sgml | 2 +- docs/htmldocs/Samba-Developers-Guide.html | 7734 +++++++++++++++++++++++++++ docs/htmldocs/Samba-HOWTO-Collection.html | 3593 +++++++------ 7 files changed, 15980 insertions(+), 5568 deletions(-) create mode 100644 docs/Samba-Developers-Guide.pdf create mode 100644 docs/htmldocs/Samba-Developers-Guide.html diff --git a/docs/Samba-Developers-Guide.pdf b/docs/Samba-Developers-Guide.pdf new file mode 100644 index 00000000000..282325e02a2 --- /dev/null +++ b/docs/Samba-Developers-Guide.pdf @@ -0,0 +1,2060 @@ +%PDF-1.3 +%âãÏÓ +1 0 obj<>endobj +2 0 obj<>endobj +3 0 obj<>endobj +4 0 obj<>endobj +5 0 obj<>endobj +6 0 obj<>endobj +7 0 obj<>endobj +8 0 obj<>endobj +9 0 obj<>endobj +10 0 obj<>endobj +11 0 obj<>endobj +12 0 obj<>endobj +13 0 obj<>endobj +14 0 obj<>endobj +15 0 obj<>endobj +16 0 obj<>endobj +17 0 obj<>endobj +18 0 obj<>endobj +19 0 obj<>endobj +20 0 obj<>endobj +21 0 obj<>endobj +22 0 obj<>endobj +23 0 obj<>endobj +24 0 obj<>endobj +25 0 obj<>endobj +26 0 obj<>endobj +27 0 obj<>endobj +28 0 obj<>endobj +29 0 obj<>endobj +30 0 obj<>endobj +31 0 obj<>endobj +32 0 obj<>endobj +33 0 obj<>endobj +34 0 obj<>endobj +35 0 obj<>endobj +36 0 obj<>endobj +37 0 obj<>endobj +38 0 obj<>endobj +39 0 obj<>endobj +40 0 obj<>endobj +41 0 obj<>endobj +42 0 obj<>endobj +43 0 obj<>endobj +44 0 obj<>endobj +45 0 obj<>endobj +46 0 obj<>endobj +47 0 obj<>endobj +48 0 obj<>endobj +49 0 obj<>endobj +50 0 obj<>endobj +51 0 obj<>endobj +52 0 obj[10 0 R +11 0 R +12 0 R +13 0 R +14 0 R +15 0 R +16 0 R +17 0 R +18 0 R +19 0 R +20 0 R +21 0 R +22 0 R +23 0 R +24 0 R +25 0 R +26 0 R +27 0 R +28 0 R +29 0 R +30 0 R +31 0 R +32 0 R +33 0 R +34 0 R +35 0 R +36 0 R +37 0 R +38 0 R +39 0 R +40 0 R +41 0 R +42 0 R +43 0 R +44 0 R +45 0 R +46 0 R +47 0 R +48 0 R +49 0 R +50 0 R +51 0 R]endobj +53 0 obj<>endobj +54 0 obj<>endobj +55 0 obj<>endobj +56 0 obj<>endobj +57 0 obj<>endobj +58 0 obj<>endobj +59 0 obj<>endobj +60 0 obj<>endobj +61 0 obj<>endobj +62 0 obj<>endobj +63 0 obj<>endobj +64 0 obj<>endobj +65 0 obj<>endobj +66 0 obj<>endobj +67 0 obj<>endobj +68 0 obj<>endobj +69 0 obj<>endobj +70 0 obj<>endobj +71 0 obj<>endobj +72 0 obj<>endobj +73 0 obj<>endobj +74 0 obj<>endobj +75 0 obj<>endobj +76 0 obj<>endobj +77 0 obj<>endobj +78 0 obj<>endobj +79 0 obj<>endobj +80 0 obj<>endobj +81 0 obj<>endobj +82 0 obj<>endobj +83 0 obj<>endobj +84 0 obj<>endobj +85 0 obj<>endobj +86 0 obj<>endobj +87 0 obj<>endobj +88 0 obj<>endobj +89 0 obj<>endobj +90 0 obj<>endobj +91 0 obj<>endobj +92 0 obj<>endobj +93 0 obj<>endobj +94 0 obj<>endobj +95 0 obj<>endobj +96 0 obj<>endobj +97 0 obj[53 0 R +54 0 R +55 0 R +56 0 R +57 0 R +58 0 R +59 0 R +60 0 R +61 0 R +62 0 R +63 0 R +64 0 R +65 0 R +66 0 R +67 0 R +68 0 R +69 0 R +70 0 R +71 0 R +72 0 R +73 0 R +74 0 R +75 0 R +76 0 R +77 0 R +78 0 R +79 0 R +80 0 R +81 0 R +82 0 R +83 0 R +84 0 R +85 0 R +86 0 R +87 0 R +88 0 R +89 0 R +90 0 R +91 0 R +92 0 R +93 0 R +94 0 R +95 0 R +96 0 R]endobj +98 0 obj<>endobj +99 0 obj<>endobj +100 0 obj<>endobj +101 0 obj<>endobj +102 0 obj<>endobj +103 0 obj<>endobj +104 0 obj<>endobj +105 0 obj<>endobj +106 0 obj<>endobj +107 0 obj<>endobj +108 0 obj<>endobj +109 0 obj<>endobj +110 0 obj<>endobj +111 0 obj<>endobj +112 0 obj<>endobj +113 0 obj<>endobj +114 0 obj<>endobj +115 0 obj<>endobj +116 0 obj<>endobj +117 0 obj<>endobj +118 0 obj[98 0 R +99 0 R +100 0 R +101 0 R +102 0 R +103 0 R +104 0 R +105 0 R +106 0 R +107 0 R +108 0 R +109 0 R +110 0 R +111 0 R +112 0 R +113 0 R +114 0 R +115 0 R +116 0 R +117 0 R]endobj +119 0 obj<>endobj +120 0 obj<>endobj +121 0 obj<>endobj +122 0 obj<>endobj +123 0 obj<>endobj +124 0 obj<>endobj +125 0 obj<>endobj +126 0 obj<>endobj +127 0 obj<>endobj +128 0 obj<>endobj +129 0 obj<>endobj +130 0 obj<>endobj +131 0 obj<>endobj +132 0 obj<>endobj +133 0 obj<>endobj +134 0 obj<>endobj +135 0 obj<>endobj +136 0 obj<>endobj +137 0 obj<>endobj +138 0 obj<>endobj +139 0 obj<>endobj +140 0 obj<>endobj +141 0 obj<>endobj +142 0 obj<>endobj +143 0 obj<>endobj +144 0 obj<>endobj +145 0 obj<>endobj +146 0 obj<>endobj +147 0 obj<>endobj +148 0 obj<>endobj +149 0 obj<>endobj +150 0 obj<>endobj +151 0 obj<>endobj +152 0 obj<>endobj +153 0 obj<>endobj +154 0 obj<>endobj +155 0 obj<>endobj +156 0 obj<>endobj +157 0 obj<>endobj +158 0 obj<>endobj +159 0 obj<>endobj +160 0 obj<>endobj +161 0 obj[120 0 R +122 0 R +124 0 R +125 0 R +126 0 R +127 0 R +128 0 R +129 0 R +130 0 R +131 0 R +132 0 R +133 0 R +134 0 R +135 0 R +136 0 R +137 0 R +138 0 R +139 0 R +140 0 R +141 0 R +142 0 R +143 0 R +144 0 R +145 0 R +146 0 R +147 0 R +148 0 R +149 0 R +150 0 R +151 0 R +152 0 R +153 0 R +154 0 R +155 0 R +156 0 R +157 0 R +158 0 R +159 0 R +160 0 R]endobj +162 0 obj<>endobj +163 0 obj<>endobj +164 0 obj<>endobj +165 0 obj<>endobj +166 0 obj<>endobj +167 0 obj<>endobj +168 0 obj<>endobj +169 0 obj<>endobj +170 0 obj<>endobj +171 0 obj<>endobj +172 0 obj<>endobj +173 0 obj<>endobj +174 0 obj<>endobj +175 0 obj<>endobj +176 0 obj<>endobj +177 0 obj<>endobj +178 0 obj<>endobj +179 0 obj<>endobj +180 0 obj<>endobj +181 0 obj<>endobj +182 0 obj<>endobj +183 0 obj<>endobj +184 0 obj<>endobj +185 0 obj<>endobj +186 0 obj<>endobj +187 0 obj<>endobj +188 0 obj<>endobj +189 0 obj<>endobj +190 0 obj<>endobj +191 0 obj<>endobj +192 0 obj<>endobj +193 0 obj<>endobj +194 0 obj<>endobj +195 0 obj<>endobj +196 0 obj<>endobj +197 0 obj<>endobj +198 0 obj<>endobj +199 0 obj<>endobj +200 0 obj<>endobj +201 0 obj<>endobj +202 0 obj<>endobj +203 0 obj<>endobj +204 0 obj<>endobj +205 0 obj<>endobj +206 0 obj<>endobj +207 0 obj<>endobj +208 0 obj<>endobj +209 0 obj<>endobj +210 0 obj<>endobj +211 0 obj<>endobj +212 0 obj<>endobj +213 0 obj[162 0 R +163 0 R +164 0 R +165 0 R +166 0 R +167 0 R +168 0 R +169 0 R +170 0 R +171 0 R +172 0 R +173 0 R +174 0 R +175 0 R +176 0 R +177 0 R +178 0 R +179 0 R +180 0 R +181 0 R +182 0 R +183 0 R +184 0 R +185 0 R +186 0 R +187 0 R +188 0 R +189 0 R +190 0 R +191 0 R +192 0 R +193 0 R +194 0 R +195 0 R +196 0 R +197 0 R +198 0 R +199 0 R +200 0 R +201 0 R +202 0 R +203 0 R +204 0 R +205 0 R +206 0 R +207 0 R +208 0 R +209 0 R +210 0 R +211 0 R +212 0 R]endobj +214 0 obj<>endobj +215 0 obj<>endobj +216 0 obj<>endobj +217 0 obj<>endobj +218 0 obj<>endobj +219 0 obj<>endobj +220 0 obj<>endobj +221 0 obj<>endobj +222 0 obj<>endobj +223 0 obj<>endobj +224 0 obj<>endobj +225 0 obj<>endobj +226 0 obj<>endobj +227 0 obj<>endobj +228 0 obj[214 0 R +215 0 R +216 0 R +217 0 R +218 0 R +219 0 R +220 0 R +221 0 R +222 0 R +223 0 R +224 0 R +225 0 R +226 0 R +227 0 R]endobj +229 0 obj<>endobj +230 0 obj<>endobj +231 0 obj<>endobj +232 0 obj<>endobj +233 0 obj[230 0 R +232 0 R]endobj +234 0 obj<>endobj +235 0 obj<>endobj +236 0 obj<>endobj +237 0 obj<>endobj +238 0 obj<>endobj +239 0 obj<>endobj +240 0 obj<>endobj +241 0 obj<>endobj +242 0 obj<>endobj +243 0 obj<>endobj +244 0 obj<>endobj +245 0 obj<>endobj +246 0 obj[235 0 R +237 0 R +239 0 R +241 0 R +243 0 R +245 0 R]endobj +247 0 obj<>endobj +248 0 obj<>endobj +249 0 obj<>endobj +250 0 obj<>endobj +251 0 obj<>endobj +252 0 obj<>endobj +253 0 obj<>endobj +254 0 obj<>endobj +255 0 obj<>endobj +256 0 obj<>endobj +257 0 obj<>endobj +258 0 obj<>endobj +259 0 obj<>endobj +260 0 obj<>endobj +261 0 obj<>endobj +262 0 obj<>endobj +263 0 obj<>endobj +264 0 obj<>endobj +265 0 obj<>endobj +266 0 obj<>endobj +267 0 obj<>endobj +268 0 obj<>endobj +269 0 obj<>endobj +270 0 obj<>endobj +271 0 obj<>endobj +272 0 obj<>endobj +273 0 obj<>endobj +274 0 obj<>endobj +275 0 obj<>endobj +276 0 obj<>endobj +277 0 obj<>endobj +278 0 obj<>endobj +279 0 obj<>endobj +280 0 obj<>endobj +281 0 obj<>endobj +282 0 obj<>endobj +283 0 obj<>endobj +284 0 obj<>endobj +285 0 obj<>endobj +286 0 obj<>endobj +287 0 obj<>endobj +288 0 obj<>endobj +289 0 obj<>endobj +290 0 obj<>endobj +291 0 obj<>endobj +292 0 obj<>endobj +293 0 obj<>endobj +294 0 obj<>endobj +295 0 obj<>endobj +296 0 obj<>endobj +297 0 obj<>endobj +298 0 obj<>endobj +299 0 obj<>endobj +300 0 obj<>endobj +301 0 obj<>endobj +302 0 obj<>endobj +303 0 obj<>endobj +304 0 obj<>endobj +305 0 obj<>endobj +306 0 obj<>endobj +307 0 obj<>endobj +308 0 obj<>endobj +309 0 obj<>endobj +310 0 obj<>endobj +311 0 obj<>endobj +312 0 obj<>endobj +313 0 obj<>endobj +314 0 obj<>endobj +315 0 obj<>endobj +316 0 obj<>endobj +317 0 obj<>endobj +318 0 obj<>endobj +319 0 obj<>endobj +320 0 obj<>endobj +321 0 obj<>endobj +322 0 obj<>endobj +323 0 obj<>endobj +324 0 obj<>endobj +325 0 obj<>endobj +326 0 obj<>endobj +327 0 obj<>endobj +328 0 obj<>endobj +329 0 obj<>endobj +330 0 obj<>endobj +331 0 obj<>endobj +332 0 obj<>endobj +333 0 obj<>endobj +334 0 obj<>endobj +335 0 obj<>endobj +336 0 obj<>endobj +337 0 obj<>endobj +338 0 obj<>endobj +339 0 obj<>endobj +340 0 obj<>endobj +341 0 obj<>endobj +342 0 obj<>endobj +343 0 obj<>endobj +344 0 obj<>endobj +345 0 obj<>endobj +346 0 obj<>endobj +347 0 obj<>endobj +348 0 obj<>endobj +349 0 obj<>endobj +350 0 obj<>endobj +351 0 obj<>endobj +352 0 obj<>endobj +353 0 obj<>endobj +354 0 obj<>endobj +355 0 obj<>endobj +356 0 obj<>endobj +357 0 obj<>endobj +358 0 obj<>endobj +359 0 obj<>endobj +360 0 obj<>endobj +361 0 obj<>endobj +362 0 obj<>endobj +363 0 obj<>endobj +364 0 obj<>endobj +365 0 obj<>endobj +366 0 obj<>endobj +367 0 obj<>endobj +368 0 obj<>endobj +369 0 obj<>endobj +370 0 obj<>endobj +371 0 obj<>endobj +372 0 obj<>endobj +373 0 obj<>endobj +374 0 obj<>endobj +375 0 obj<>endobj +376 0 obj<>endobj +377 0 obj<>endobj +378 0 obj<>endobj +379 0 obj<>endobj +380 0 obj<>endobj +381 0 obj<>endobj +382 0 obj<>endobj +383 0 obj<>endobj +384 0 obj<>endobj +385 0 obj<>endobj +386 0 obj<>endobj +387 0 obj<>endobj +388 0 obj<>endobj +389 0 obj<>endobj +390 0 obj<>endobj +391 0 obj<>endobj +392 0 obj<>endobj +393 0 obj<>endobj +394 0 obj<>endobj +395 0 obj<>endobj +396 0 obj<>endobj +397 0 obj<>endobj +398 0 obj<>endobj +399 0 obj<>endobj +400 0 obj<>endobj +401 0 obj<>endobj +402 0 obj<>endobj +403 0 obj<>endobj +404 0 obj<>endobj +405 0 obj<>endobj +406 0 obj<>endobj +407 0 obj<>endobj +408 0 obj<>endobj +409 0 obj<>endobj +410 0 obj<>endobj +411 0 obj<>endobj +412 0 obj<>endobj +413 0 obj<>endobj +414 0 obj<>endobj +415 0 obj<>endobj +416 0 obj<>endobj +417 0 obj<>endobj +418 0 obj<>endobj +419 0 obj<>endobj +420 0 obj<>endobj +421 0 obj<>endobj +422 0 obj<>endobj +423 0 obj<>endobj +424 0 obj<>endobj +425 0 obj<>endobj +426 0 obj<>endobj +427 0 obj<>endobj +428 0 obj<>endobj +429 0 obj<>endobj +430 0 obj<>endobj +431 0 obj<>endobj +432 0 obj<>endobj +433 0 obj<>/XObject<<>>>>>>endobj +434 0 obj<>stream +x+ä2T0BCs#c3…ä\.§.}7K#…4CCK=ccS=3…= D²F°£¯“£‚KjYjN~AjQ±‚{ifJªfH—kW SÙ?endstream +endobj +435 0 obj<>/XObject<<>>>>/Annots 52 0 R>>endobj +436 0 obj<>stream +xÕZÛnÔH}ÏWø$ƸÝn_s!, lf–'$4'™Õ\Ø ¿§ªoåR–Œ4HIŽ«\U]]]Ýö?'*Éð_%Užè2™.O²4Õðãæ5]IÊ¢ÁÏe¢›´r`‘ O\&M‘‚p™¨Ü¤ uIJµIk(­Lª ¥B0ËIï$’ɦ*½{ïvÝçí¥×Ão«nü•îÖ8ŒÀÖ€ú§Ø¶Yöp€3 Yý`⤷õ aûøìãs:l}C#6žnÖÞ±úª¼ÊÈšAƒ¢Ö«6A¿óéôâ»…‰ZÕßùE=‡9`yT¼ë(Ì­G9ôöÃ[ïÎ4z@;‚W~ àPfܾq?Yô?µzËÔfÓånÅMwú´téã*Êîž +±­Mîºök燀öïG0)ú#ä̶¶…¾–ßÏ6Áp×f÷%Š¼ÙUìmn×›å¸û4k'»»O2îuC³å UÖš+ÖL…×4…ý¢y¾ö &’ùÔN†»»»vK½3§=NuÃòrÐð÷®´-³*ú;a¹§Áf Ý¬Æ ;‡‹´>Æ ù¦îûÑ¡ÈŠ{~?¦óvÃK Ž[߉þ}ÁÂípxY4G²µ=fy_¹Vdz•_o{ŽxyÀUðAòÙ3‚Š‹k(`¼ÂqšÑ¡PíO‘æÜXãÄ*6¡“o]»ÞÌÚMzOƒ‰Cå}Ÿ!õí}$R|h0ÀË‹^Þ}8ÅŠ>Ùݾø¼ÞÚ ïƒ]ݼKÎfkQŠ÷¿¡ÍÃsiô‹/ã… ö·c.À°"Dw( ýM2âÍl¦oºDû$Æé!¯fx³.ö æკWQÝ?£}­`{BfP”¿3™¾ÃÁ Šàìaþð‹cÝa/‘ãŒ;†æÍ&„µ$„wØËbapyðLvá­É’ho?…£ÁxƒzØ4VöˆÏÚíí篰÷°û>o­¨Á7½ÜµEß—CmpÖ²5!´7½ÔuöM1s¾ýbvó³ú€ÜgŸ ½·‚7?« G2Õ^^Öî-<ΚŸ7¢{Žßˆo ’ð-Îð%ξUÖÐ +2§EòÕèäÏ“ÿ‡íŠendstream +endobj +437 0 obj<>/XObject<<>>>>/Annots 97 0 R>>endobj +438 0 obj<>stream +xÕZÛr7}×WÌÛf8`0·GYŠUɲlÒµÏ5Š¹&9Z^œøïsNãJ‰.U¥‘kWÙ<ÓÓ@ßÐh4æg*+ðWeÎÊ:›-ÏŠ¼À“ðϧ_ø$«M‡—Y©sãÀ"Ÿ%p™5MÞ¥´š|e•·à«Ú¼v€| \fª(8¨¼IbŠA-Ë\¥ÔƒZ•ûNª5r`M‰ɬB,:̶ÌÚ’4¤%ŒªÈ«„XR•ª«sMU:üg ¡±Lˆ”ÀcPu©#+ [ÕHµ|Q€Ø Â%”‡:‘–@¨¡Â ä³’VµèÑ0ÒhU„XÑ6•)Å6m, c©b½GL1¨u±GµÃ–…XÎŽ# ëhn˜@L1-G+U‘š`P;±d ÚIU•†îÀIÆÒÐ!˜bêÒ ò"ÕÚ¶(Å_5M\ à°2¥Œ;ø¤Ê, -Ԥ̛„HÉMM—™ÑÚò%QgÈ&/ºù<”øðƒ†øð²0"_)‹‚¼‘( +šŠµÌ ‹É,à –V6¢|Ëø0"MQ RA4BLX˜=¢T) º–©Åƒ–]+–i4´· ÒÚJÅzl³R€L!”ÐðD¤É|e£D‰†qlùHAK2Ê›qBÉZâŠ2+È„¶R¦H³šJlJ¾(@&Œ®hɈ ‹R¹œÛO€È!¢›i ¤¬‰)¶3¦¬œQÃ^’8+ÌhgTBûDû%Øü ")Ó¦nl¾•x²@ø˜o4VQÙ:i$Æ! š€8fi“f­Zi _A-Ô½Ùc”Õ«‘©<äÅ ¢0Ê&FS¨L ŠDì_Ô±ZgZ@Tµ. 1€- MâÙÓ$f"-»b0¦Tø[¥Ôƒ +oš„*Z*D!7d¸  @ #b™-#2»$7úƒiÞ­oúQ™ÆF8ýaA°s*­ƒÄ >bÅr]Bƒ!=„0È40¦T¬ÿ.‡M1¨£:òZEõ$°—L…$ª6B0b/a1Å " Ã)‘š`P[&–Hµ“6sZ+ˆVp4U0ª@L1EÒ°c¤Ê°ØQ%diLùu®ù"’ˆã*¡EZŸ CÊdØÇX8‰ +ò;Læ(JW1ˆ±8«„ák†Aød²Ú%~j&¿ÃdŽb­H ¤­¸±š ˆ¼åÊütÖjØÒ=I˜ŒÛ*(…üLŽ¢°_%¤R +Ù{ùÙd@„kp˜ü:Š!ˆ±= ir²½œ½y×ÁzÙäÃfšµ1Ùä^êw<žý4™Þ-úlxÈ.†Õ¶_m7ÿžü\Ö8¹FŽm¤ÉöÓxº¼›ò ÄZÙU8àavÎõjºp¼QáEQŠ GÈ…š¯]Ÿß“Å6[Î÷ÓÕô·~Íç´—1îy:OÝi÷ôüöŠo²®:û,?ÆÕPŒQ× `ƒz·ÓõtÙÃbÓQ¾ç6qCª ï§~»[¯Ä#]ÞoãoÓÅ®—§u^'¤…jÅè,Ï«_ ÷VZ™æQ•ñ8û_Ìà +ràÄRT>®¶ŒvÑÆ‘÷Ÿ›ëUŸ¨Ž¥Kkm„\++nòEäeÌ—Óo³¼ËgÃêAÔCF Š?Ì­v +ÌÞ£¯ªËË“éÂjë“Äk>ÄäuÿÇ|6]ð $˜®u‹<;Grù¾™ËÊBά_NÁsV[«Ñh—¿NW÷‹ùê7qN¼ÞÈ´|„M¡S¥sç¾Ì·ýæq:OW8ãùÌú²9ÿî7œ2,š¿¨Îõ|e—<täî2_í¦Ûù 9Õƒi]Îù»uøÑx^7ô‡ÒäEEW{Ÿ<•å¬.<ñãn¾þjƒ±ÈÛÖ%—MûO=׊‘4bç#Ugü}µþ!K2ŸFŠ;h‚ ÿžøçwÃnKéqóUÂ#·ÖM>¥pø:¥´¦@{‰[‰.>wßôÛ·WÆ| ­š¦ñél.K€9™ÞnYRT¡¢õ*^ÍŇ(˜Ëºö‰bX/îÅXZå‰ä@]Z+„„Žóx(×ÃýnV>N)'âÀ4,­#dßTø϶Ë^»©O&ôRÉóÜÉnå ›é;_  I©|}ø}… +õËüQ‚]•ce¯} rª 䃷ÓÍæ÷a}o}p¤d<üCÚs¿–f_]€Í©ä¬çâ;Ñ­ŒÁè—ýê;UB3ºÕ>xÞ£Ø/àô¬pŽ<̪åT©’Âe²ž>Þƒ=  óY3û|u)ª Áõ1“>/XObject<<>>>>/Annots 118 0 R>>endobj +440 0 obj<>stream +xÍXMS9½ûWè¶Ù“ÑècFGbE‚]Ù ¯ƒwm±MRù÷ûº¥‘D€P•*ì…*ÃÓ›nu·º[=þ:¢Ä¯u%”Óå ,J¬Ä«ZV;|.…4… +`!Fƒ .…yÌep)š&*!9e *S4ÐéLá .ƒØOVE‘9&k™Ãz¼9 ƒmjèÏØ /E%ËBf¬ÑdRU&Õš$Þ ’I*>É›f¬-ɤ(êÕ–®ÐQ-ƒ¤6pR)ò4’9†Z]Ѧ‘eµÆÙ¢êÕzÕöœ,é™Dæj|Ìf˜|¡SK²~Ó†Ü!2 Ò¦“¥„¿‰Ì1Ôª +ÑM¬Wk'‡Ú0HjÔD2ǤV#€I”sÌË*ë†,bDzýžZñ±4²0Â0 .ƒHÎY’¸ bÇŠ£½RUúC¡ä3 Ø‘!ˆsTéM•µlC‚ X0AJJ¤Dæ,ÊÁål†ÁÖœ Q±·¶TvÄ’ hÓ r×È!=„ÒÊFD‚¬T»’ƒÎZ<ˆJ{ŽÎN‰Dæ˜ÔRÓÉØ ƒÕ‡’XŸ®k>Lçp˜ЦŒjùI"Ã6AR*‰ $ÑÓ¦tf›a°è-ù¶9F¯A/¬3Y%«9Q$" QF)„(Dª2ÇQb8E¹„=BheD¤C¥9ö†JW3`ÁQºT‰Ë )¥˜Hoª¤z‰¿0•iÍ1X€E–E•k¼—,êQ¬¢à&öÃxðþ£U)Æ3¤5î#l­Åø†¯&,Oß'/ZÑÍÄ°[mÛÕvóçøHXIRAì "±wçc¢q_UµÃ…‡qÔ-'ó-kd[Õ/_]ÿºtÔóÊ:œ!mÇ㳋“‹s†uM­‚Îõý”÷AU¸:¬×“Õf2݆lÕ?|>Y¶7´ŠÎed¿œß·´ˆæ¢U0ªxã#iG„ ñ1ÉͳÑ![RuŒÚUûõ¡Ý°3ª)¤«‚ÙûÉbÑ®nÙv ÿ{‰76ýõ¦òÞ”¨ºW¼9|ØÞ!wæÓÉ– GÙ8'¸e4ûƒiãwÝ™Íøüþ_þР™åÞ5~>žžÎ.Æ××h†øH Q¢âé׌1>—0{çÆ~~h×?8s0 4}—Ÿu\'¸L åhÈÏQã݃ý©*²ÿ‚S˜²ø÷¥€ÙM=)…ÊÖ†Ïíï_cù\jšbû]}}ápãͦ¿*Äo^•˜Š1÷ï>ã;>åÈ€äÛyè«x½í{’ÝMÖþZÇøGƒãÕÃ’S““܇O³"¸T—¯øóìUs–…©Â´ðtÛ­˜ÆXù¨ž†ë÷Ûîv=¹¿›óüf1’ë¾²6óre¡ë0 `î$E¸¶ÒuFLt™xæóѬ”MsYŒ*òî¯Þg¼ +å}ñ¨ÍWó- àiWïixáàƒÑ°*¶ŒËu·í¦Ý‚ß·½¤÷±l§,‹»å²3Ñ>/XObject<<>>>>>>endobj +442 0 obj<>stream +x}Ž»Â0 E÷|Åa ØiHÃØŠÇÄ€ð 6•Š¨€"ø~\Ú‰Y–,ßã#? ƒ´¹CPu†,!d+ëác®³Óîš1pdÝoPŠYîÖpiÔò©¡ÒM5;‡²À&½ÓõvOýûW[§¹\¾WìÇ«EÆj–zÂ%»‰`žàƒÜ”>’ÑëŠñ`ØŠ9šÒ°7~endstream +endobj +443 0 obj<>/XObject<<>>>>/Annots 161 0 R>>endobj +444 0 obj<>stream +x…WÙRÛH}÷WôÛª ¬Å²ÌÓ˜% U@ìä)U)ÉjÛÊHjÔ‚ð÷9÷¶Üj›,•*Âѹû&ñÿÈcüóÅ4a,VÕhìñÄþxºÅSo"&Ià%¢þÔ÷¦=*ÅbL'Þ̲ax‘ÃÂŽ˜„ôšß {Dšô4š!_‰(òâåÀJLÈ$Ε˜MÔÀ9þ™õ@Š.¦hD3¨ºl#K‡up%‚0FEÖÅ`ãä #ÑéÔ hÂY3 ˜ G\ DŸ ˆs I²¤QœŒ¹'(:*Ä€ÅqD%²$û§ˆ‘ÎHé9r0–3þ‚ˆ»5ó)#C¾Ï ú〲gD¤‹Mà“Ëu0Ø eÙi8K¸:‰< »¤$iÒ(&”92aEƒbÏùcš‘Ð’F#Nå‰i6C¤è@ Ubਪ!&ŠfÙ§á0€ 0@Ì9å2pDœ‡œ©ncÏwMœÑ„KŽˆEÈ€:ÎF÷ÐÝ#R4FÀË= ( lt€H~FÕ¶œa4¤¤1ê'Ü +c”Á`´çü€NGhIÃ,FñXÖ˜S渃ÁlÏù¬ZÒÅdvLÑZ–Í3Š„OŒ!ÀfÉÙž£±rJU ¦3³˜àiHÓ1ݸéãHH¤ÀוïgÀˆHš«wŒ²D½£åÀ~[ U b΂·:`@”+}2i9“½šKEû0 =lÑ"‡`‚n ¤QS´}7¤ÈÍ1CJÈr¤ÂÄTK²Q:ÄT˜˜j`u ’§œa4ŒÐŠäVøðKõCzDV É{N$]@ŸÑ@FæŒÓc¼5 $|q‡ù„=;¦ æC™04q¿8 ˆÆˆ®Y<ÌŸÄÑ ``õ¸) pyºsÁ …—yéÆH‘ÕÂ*™Y ‘ KEæòù1ÝL– +úëÑx0 êb9:û0C×ÄrïˆxšˆeΟx²:™g­nÒ•~·ü9äí¹S yr—¶Z|Úå©–F&êeNŸWµH» –;üs&.¯K’€ÄÇ┇†–Û¢™Rÿ üŸŠ•*K¹Ò,¨µÈÕª«d­[¡·©U±Ùj‘IѵrÝ•b­±“jWJ‘ËgYª]QoD›VY*@é­j¥(j-Ùj™ã×Þ9oœçŠ”'nõ_­¨•ÞÒƒJ5’<"‹_ôÒZËZd¯½Ã>Ù LuzçuZ¶ÈæÈ÷sÚªkÅ.m’5q§uΚ‹û ±k”V¨H^«‹²D+U!e-=±„‹J¡\¡LâÞûÒ!“ÖÖïÈõ +™¡ŠkÕÁêºÕzw~vÆx†§šÍ™'K™¢„­„\ÇÍF'”ø&ËJ6[Iïg=Ý÷.åfR0fªÈ:êKj7ŸÄ¬e“–â±ËÊb%î +$·_Nnï¾¼³Yž˜£»Wªt²‚*«ÁjTv9ü¼zkÊÉCѪ®YaXö‘ VÖæAQT}ZµDqŽœô¥zyyñÖíšËÔûmÏ6»ÒÓßûÁ ²;CF=Í0©ˆýRa&1Õdû`»ösy%×E]ì·àAê‹Û ñ؃ yH+)žd«ÊŽåîU.Ù þ8ÝÛy¸^’æQOçW—sìco™øSì¤U»xXp®ÍWrÞ¬¶…Ʀv ÷Á•¸­u£òŽ·øÈõ}Wj´¤‘iN‹F‰°½#±¥•h«,?o`ëžub¯³*W²-6¼ì§n`´.<´âêúâÓh_q*2ïJ=Èñ±Ó;¬ðâµÖé÷7ÁI£ÿåÃyŸ®õ+‰ùÕÕŸ…î>ßýRˆbùÐÕ\Ê7Ýͳ–ß5)f›7?!p1«TÍeÖm¾ºÊ§ø;ÒöÿRqwÝfƒÃ‰%a×N‘Í  Ï²¡ãv\ÁËmJ/lø?è0is5¢Fjk75Ç>•ÖçUKÕàXxÛ7^>ÏQ¸¬[¿ß©öM Ë..]úýsZ¾1°p% ëîÈí[ÚI€”GÁkÿŽ_xÿy| "®63ø„ÜPÉÎdžÂ1Å8ûô'Žgߧ|äÜ/‡ŸtIáû×_ü×ËÑ¿£›.endstream +endobj +445 0 obj<>/XObject<<>>>>/Annots 213 0 R>>endobj +446 0 obj<>stream +xuXËRÛJÝó³»IUp¬·´t ªìÜl²²ºØ’#ËIøû{N<Ó(IQ…}83ý8ÝÓ#ñý$0sü& M”šj{2ŸÍñ÷ëöýIÎæ&ÍSüÞš fñˆ6f9’X’“LãYaRAžLŠY*dD;‚HF4˜Æ)ÌmM’ÎÂSpkŠb)𸣀Š+7j 6 —gm&Q Èvù`C¤Nr.v‰]…¹5Ÿ%&u¬MežŠHñ T<¤Ùx–)Rcš-hÖme(Iê²@âI„x9ŒzNÁ­É·û$Ò$Ÿ‹èiŽ È)ÈHŸ“"]’fVº€AY$Ñ(Ì4ØŠUl–CvÏZÃIle·†)ÃGÖò¬Â03¸Ä³ +oMˆ| ¦c­Ûx.%+¦#€^„Ù$¤JŽÔlžÌÅZ}ÃLj–&ÌTÍZ—A,Ú¢‚qé!3 XPGJ ÙµQA¸OAôËê9=âöÙmæ<½~Ÿ‚ˆnn£$ç'3À‡ OtœÅ¢)„IF๔B#˜ùÅÈ)‡8"¹"­Ã˜Ý¸5¹làF‰(“q0Å<rvÁ!a,@z(IDŠ³þÐ-hèUìÀ} +Ú@‘…#ecT$6C~X =„CÎ:ÏÙ} B¼ÄDÄ¡‡pˆNŠɶˆR¦‚¶ hpŸ‚[“¦hCÏ)ˆX¨«ç¤?Î@OŠ?Lf™ã@h’#„Ø,²çD9=gsíí!Ý ÜYº#Q.Šy2°—[Y’ìc4·c]Œ€œ‚ˆfNed!9™=¤'åô†E€lŒZࢠ3;ÿÜ(™±È“é8Æ©PI ”“Šâ³ƒ-£•…äD¨húTmÔ,Z$ѬÂ` 6žrJÕÃhœósvœEô(L·1ÝÊZ‰W¶b&KƒÌäÉÀÎÛ¼ B@SVñ䈊€œ‚ðˆGŠÔ,Îw Y…ÁÆÉÖ¬<¹xVªävVèÄ$ˆ1il gš…£#›±Õ^…y+…¨g­[ôÏ4z É +%<„Y(Q(Rc†”1`·ÕšÅÌ—Þ;¼Ù‘ ðHƒh©1ÍrÞ+VafÊqáYë4¶·ÍE€w:rö‘2p¤Æ4›QNÏ* p¨Xë…ÒJ’©ïtäFÁ©±fkÍö²¹ðfG.À'zБv#΂/¨¿qä‚0åFGjŒx0DcÅŠY WOùŒµá(i‘7œãdáz㥇ْðæËít›pd O)Hƒ!êä¶)/©â<äàqû$3<8¹úÉw—ÙÈð*Äc?—‘RÎðÈ«81(Ïp㉒ïÎàÈx¦À#g¡ô™ñ¬9N â¹ËUT¾;ƒ#ÃË7—Ù„AµCùk*Öâ®; fGÉö³JTA‰àWõðæâzišÖ”æsÛü2_º~³žZ¹h‡¾[ªc|ºüŸ÷uߢ Ój¼ƒ|æúg‹:=4»IV7å~ÿ³ë×ÓM—]õù$N%ØyÝ>™¨àtýª/wë®ëÍç‹ó)wÓõƒiÛ»ß;å¦ï†®ê6~»Û ¦Ã“¸ÔzÂtÅJî¥÷Oû¡ÞÔ~3õsµ2çݶ„„·7gÿ«íLµÓܲ;ôÕoIõõºÄг +_uè'ƒ3Ë¡G1½Ýª-Êš‰Øo!BÝKsY£JÙç–ž¹û¸D>¦ûÓ-Ú=Ž¹B¡×æ¦ÙIOkÇv5™©>êr]÷“˜Ve³™ü‰ÞÞ4ÈîµýXTRíÕêr¹ø[4jW]ïêÖÜt›¦’ÚNØO‡º2í}§Ö趦‰£p5\PÿõXèi†Îݲ®úz˜äEölÓíE²I—]÷xØ™åÅùrš+·4U·•ÓŠ_½]]^¿¿¾2ý®ú›&z= ÞÖßõ~0ghäºýö§˜‡á¡Æ<ªÊ¡6á’YÖ=›âx†Íò)/ÿ7;Ð^¿Ãç\0^ÛÒ·q.—V½Y˜óúG½év8¨æý¡YÛÉ qåi6/xÏ,îö§7#Šñb–ç1þO "â_Þ®N>ü½°endstream +endobj +447 0 obj<>/XObject<<>>>>/Annots 228 0 R>>endobj +448 0 obj<>stream +xe•Ms¢@†ïüŠ>f’`8M,«Œù€Ê^rauˆì +ã"f+ÿ~»£UàË3ýötÏ þõ$üJЄ1ljOøŸ —ç…§_@œÄx­!~x{ÈLû¥máq>#(F—ÏÍ7ÿìù%{™AÞͱØt°.j³…Çê`.ýצƒlW`Q·Í©¾HÀд礪Ž[6¥ý–jÖ~:ûÖ‡]µcµ5`KXç0·uQ50=u;ÓtÕ¦è*Ë3uË››²j*"Ç‹Ü­íìÆî/Ïl]£þÒÒl9?BÑláP›æ§Ùï'û¯wáéP Έ^ß%çÅ•xÂã4ÉG×»~3…¹y7{{0í',š‚&R'>/XObject<<>>>>>>endobj +450 0 obj<>stream +x•W[SÛ8~çWœ7Úâ\èPØÉ i¦i÷A±åDÅ–\I&ÍþúýŽ|Áx»ÝÝá’‹tnßùÎ'ùûÁ˜FøÓÙ„ŽO)ÎF>žM¢ Mggx?ÁŸ•”\­†·ç4Ñ*…ÉéÙŒV aûßÄoÞËTiå•ÑdRº—þjþ°¤…5ÞÄ&#¡º¹|»úv0¢Ád +ã7¥3Yl~7‰t¼È1ÆgUŒÁñy`ãýÍŠÝUëSëõÉYtÖëp¶ÔŽÌ³´ä·ÈÙd™Ù)½!o….Œõî‚V׋á|ñ.dxó8‰ÍŸ‡ËÅ爖"_ 2:ÛSé¤kË`—uæãã*¥ÊOD·ÆR"½P"ë·Zj—Ò9†e)í³Šeûý{áÅÆŠ¼Y8ª@ªJéEcèÜ9)ɦñx4Gþ‡Õç Žj«Éiðå.pÊ‘ +vmèa%MsT^d2—Ú‹Ð ¿pÍؽ ÔÉ:ò†Ö™hO¦ô½<[ìwÊÊC’ùZ&‰Lh§üViº»»¦ÜE!™:;m‡}h¾|âÕ6ܧOJ'Ì–ó“£ëN!?èA¶á!·¨©‘Ë©= ;^ab™Š2ó-3]¹º-ú‹ßµŒ&”ö¶vÇhÊ…y®u’㡶ƒØèTmJ[‘ÎæýÑDëΫ˜(ŠLÅa¿£¯o\o9cÇjñõ-ôtãT” MÁó¶Ê ž­#Zþ~@ÀHÆ ° +Ó㶯v IôÒôAcP#Zq™y‰ÒâL¨±6/5’£¥ßû\8îŠ3Á²"(Z"& w©E —8–B­eÌŠÐ*[ˆCnÂVd)*­u¯›s•(:»Þ‡Îv,¿¾e{qÓ&Å5ê‘H…ÛÚ1 èñwq¦X€x‚CÊÏcùOd¬Wä@Ä5>¡ø‹Øc„¨ÈJ–ÈC¿/ ZíÃWñ ÔR™°,Í^Ÿ#¦âÏ$’ÄÛ^MÜiÁç …QÖ%´°³`X1Ã{Ñtg v<Ýb™´5H8ÌSE³D1Û¸øºý°%ÆGR»­6Ð… Ä9ò©ÿÊ}}Š5Q˜i/N¹¢^¹U}íÄög¨ê@à047Ðì%Öä­T³Ù)ÂUQ˜g½s­¨œ¡59ÐéåáJåƒöß|Œ`ê\¹F”w(øÎÄ"£K+#†s* ‰|õõ¯©Ä½’8ÓõãýüÃã ÁËo=ðýÁè×ÍdªVÃ+‹ngzEtqé'²BPøÆÒ§'¨,æóåÊuϲ’Õ7« º²F$1Ž…0= Hƒx3o‚ïþ•+Ü®>>\¾¿¾\®‚r†ÃÛŸ\¾®Ã,bºÚ +C{ªv2B•&UôíÒ : +¥ti™¯†µ-€©êߺÖM-………ªÖ2êP4µ1´‘¾Éº’ŽnÃÉŽyqÅþœú"ÊUl3© +ÃÄn†‰Ä´šÂ¯ç·Ë!Ûó(𕠔˜7ê>|¥ìÁ?Å*uSÞ +¡gº±2s{{¿»¼g +} xN°'ɇ©%‹{«¤QÁáÚA…ˆŸ¤Çª5y}» ‚ãh||v„³âøøüïDRЂ­Ù¡:–6)áÖ^"š§á<ߊg0Ž €I/™þô°w†¥`gƒzõ +òÈÎO¨6×È´ê5yÓDŠŒ1âc§L܉ÒTÅ}éæÔÜ&h€ª“[_¾úô®%áEÕ"ƒ${ÚB|¥Ä5¬€Ndû?1åÁÖ,(¸)7[P–aßv2:¹ÒèðÜÀYФáí¬ó¤2«žTþãcýìÑh:E³Ù_x$:áúnVþ@xãendstream +endobj +451 0 obj<>/XObject<<>>>>>>endobj +452 0 obj<>stream +x…VkOãFýί¸ýHÁy&a[­´´HÝìV‰„*Q¡ÉxŒ§Øwfœlþ}ϱC0HÕŠ°Ážû8çÜsçß“1ðoLó ]ÎH–'£dD³ù,™Ðt1Çÿ'ø±Š²ð`2ú_{nÖ'û)Ç´Îk¶˜Ó:%Äh-ÏÜNø\92m¬©Γ·"Ë´üáïä|ýŽ_ѧøøÅå4™"ÀÙòf¹¢¥ò7÷_Wñ¥×“y2ã—l&Ç£Ñ8ñß=¥ÊI«7Ê H”¦zFƒÌ–|®ñm€ßŠtYªT•^›ŠD•RãŠÃ!:mÓÑR”ŠVÊnµT§¡D6¾(\Øzx½Â‰LYG§ºJÍÎÑ}å•­”{–v¹–9iGYS{jëNHT¢Eå´i<åÂá'%oÈ‹Å ¥tµ’x‘¡ìö9Ie½ÐU‡U(Úþ`lÊ]*‰´ç‘>¡Ç³ÌXR߃0à'©…£èô²Zõ¬˜ +)AßÏcù)¨Ïm>Qœ3ÕŒp¥Ø»„î!´¤Ñp·J¤`UÀ_¿hi3™§‡ûe ÷¨[ ü®Šš2] ).›D½h¹pç)“YTËA#‘à‘c’‹Qdã!ÀR LíŒ}é„2tì3(Ø™¢áÖÑLäç=B +MKÈ,£Õq 7ø*u8«”\³AVbž^±€  r8W¨NšäÈÑÞ4–þ¸^‚Ô;×ËË GÅÖè€.gnQXß~Þ;ª£òéûÀ=äªâ,Pß‘Þ`ĺüƒø@³bÐçïo]Hƒ‰\À1úx€ÜöµuŒ5ä²4qr,+Œ‰Ï †2ê2†‡¡Æ(Kˆ-=—Svœ¸-°‡ÙV;ŠZ÷ê|’¢zŠ8¶y íZ Š4EBô£YO‹@‰gkÀù>È)ÙXí÷½¬Ð¾3Uà’JýœóŒ`P"lNó°Ö÷,ŸwjJžkÆÔš¢`›þ£—Á¿ ÆÇ£¾Q˜£Xr/k[x´&Øå¦)RªŒ'¨ìÂC€:UT*J!è®—ÇóGÙ- |µ¾õ†Ã^vqDTºÇPiÉHõ¸æjk¶­‰Î³Æ±?sÖÂq1e‚m±gãÆ&ÈVŽ;Œ”úßXøq´o2G˯k½ú‚V¢Ñ Hm1:82°ð}ƒûäƒF hMÔpo¬1¡ë^ΧJ©Ô=}œ´õ¥’‚GõƒzÛ!ŒÊ3WȨ{z-!¬µ¸@ažÞ¶ +A“,„.£OÃP¢[LyáÁ®_[Ô®‘hÚÅ=N¢å°SQ*J÷-è`r=“Kèk¥x°Èáv©°}aº¿úxÎ +zaá ù¾<¢ã<–„&Â* cbMƒMvÒNØ48þLFpYʬ)©õ`žXGãËù‹Pâøòª›ƒîZñF4¸V†Å€r³C›[: öœâbÀ“ÂÅR!ì³j×{6¯‚`¡Bl™°Ûðv¸e(ÏãŽ{XY«´7›ýHGF×Ç‘úvù>:줵DG,u¥K -ótTŠUä‘=àÒËÚ^ÿ::톡ìŒ`­VdqåþvwZùd†ÿßš ·«&DçûE{ÙÏÉìꊦWíÕtuýåæš~‰óÁ"ý­«ò¡‹îÝ‹ùèê£ëõt1J‹)nà¸âÎøȯë“?Oþ¬j÷>endstream +endobj +453 0 obj<>/XObject<<>>>>>>endobj +454 0 obj<>stream +xuW]oÛ8|ϯطK€Äuçë^ŠöpòТ‡ø—-Q/é’”߯¿R²§‡"…e‘ÜÝ™ÙYúçÉ¥LñïRngru#E{2Le~?¹“ùÝ->ÏðçµTéÅÕôú×/®ï¹íí†Ï‹“_îe6•E…7·w²(çOñMqú¨Ú¥’O¾¨MÔEì¼>[ü“v\ÞæWóÉ {Nlô®ìŠhœÍ‹æry9,šÝNn¸hQ› ¥+ºVÛ(+³ÑA”¬´Õ^5â6ÚoŒîÅUR»^rôÞù— ÆFí­jšíDµÞ-´j¥VA¢7º”è¤pmÊq*—W9³n-½‰5µ®Ôôµ)jA"ç,uˆ²v!˜e£¹{í]k_Ä^k+ºÑ+e }ŽU>ª¥iLÜžKÐEçñI”EÜú8fálˆ^!k¤Þâ|d·Ü¦ˆ(r+­a+_?§ý<|yŽ®pÍ„è!ýÙÍdž€¢šàR‰ÈÙaGèµ—€J‰«¨¼þÙÒù„ÄÂS AB‡bUø§B=ûcÀaªDë;k]‰³ò·5¯Ô¯ÛeݨX9ß~”§Z!¡¥ëbŠì~L6f6MþÈ``"*O/'Âg<î(ùîˆrĉE´]Á‘תd|ce£¼q]µòÀK’Þ<{ðS½‹ŒjµÑ CkT‰^ÃŽÊ$6í‰;û]Öv  +”Õ† +ònÙ…¸ƒí(:+Ëp¡ 5M$ÉJÊ,u¡:Ø‹‰#;óAk—Ž/`PÐÇ‹ÖköBÓJ}bB¤k2›lEÍ1Ū@_¹º°Û:¤<öm˜Èóà¾^õKU¼dSž KDì=ËIÏgCi£‘ÖÆÙxe·c[ÆÁvÒL¢…œ»;µ W/,'iàPWL=´×Ù¨Yr +ó‡þσFÿoin¡qðÃóLO(T£`åÃãTB-­~C"kªpp®¢?Æ“Dý‰hŠîe1‰;›ô•šÿ70mV0DðUn„ˆÏ©Qö.‚Þ=d±s>ÂÃò韤ÂtD Àv€~ÇsfU˜]Hx'À„5Xyoþ R«ÎPŽM°WÈ;9m¡5U²]çÔ!ëxë:´.Ê*Èvž`%Ù5qÇÞ4’¶É‚ˆD G"a­ S™ÂÄ(õyz¡a¶{‹Y5n©šç³çÉ8ÒFÊ(O„%Ãá%Eý|ªáš$p–aÓèy°~³++'ò„Sð©¶Õ%í‘ Ô˜C·[6þ0ñŽJê œ£—àÁh„«l (2°¾-b6M^gIÐeã +¶ÉD¾9{1> ¦»Ù¨åiÉ£òfnÊ>s”ÙUeR7Ð_ýK¯| dè"lBâBŸÈ£œ ¥Èœ.˜µnÁ$pØQ¼^%[ÈC«VL „„šiÝ)ž|ÃU§‚¿ 0"’fO:T…xNTzƒˆpfÁ Ž¹½8j‡9%¶k ïЈ´ãåê>_@‡QλÈõ ×d\O¨hÿ[äí'ßÒp0Ðl;ƒeeÿÅÐ!ƨ©Õ¸Œ¥TÓTL·¤pßäŒ2å‡ÈâôhŽð鸆k ”‡ƒÙŠé‰ðIP"Kß2vÀ|÷F×pç¡cÊRêPx³Ž@cZ—”)î°nà\¤¯’„nMËYi5€´]»Ä¡®:â{P»Įß'6† Æ´Ôƒä>Š™žÆ)“z€öõ+Lª’ªÀåöùjMJJ>/XObject<<>>>>>>endobj +456 0 obj<>stream +xmWÛnÛF}÷W ò°XÉql¹/…’ôâ"MRXAú` X’#i#r—Ù]ZÑß÷Ì,©DD¶Éݹœ9sfôílAsü[Ðí½º¡ª=›sºž¿–Ïå->¯ð?0môÅby]ÜL_¼YŸýôÛ-ni½­›å‚Ö5ÁÎ|Nëê|½ ljë¶äÚ²¾XÅékZàœž]ÝÂâºÆ1éàû¦¦’ÉÖlšK*ûD[N‘bïöT©ó!™Ò66Õ·ÞnÙ¥Xˆ]±vS\‹µ•«(Ë5%O‡`“¡Ä1QÒˆ"5¶ &iãƒÆ†&QqÅ»æHÆE;{K•w1…¾Bç}”L"§¯m‡šü.^Wâ·ñn‹7}v°›zgÃVô-ÓÇŽTó†á&I¾È( ¢`«$f‡ÛpešF™‰Äˆ{œA)âïüÃóèN1U}e¼‹dôqL¦Ú#Óu0ã¢ZÝÿCµWã6JÐZ…Öìñ`…g2ä ÆòÛÄ»m;£-.èÁK +±ïä.!Zò}8…Õ5&šåæ¡â;óûÈÚלKQú´£ƒÅ@Ö_|Ÿ&.‡€.õˆ„pš†ŒmÉoNhØ–¬ôˆ:©áGÎ'Ò0¶Æ:0À¸#J䶳‰`ÃLÜ·8ƒZËŒÌà·"mLLŠ!)%L41F¢õî’`¸BÑžßÓÀ”ø’N4 Æ1q.×Ls0GˆQC‡UÂ)%D~-§¯/†ëc¼ÝAelØq…¡Vh7ÇÖíVˆƒür[šL5ÕØ?’Ò:“Á&pœºà«ÌÔÇs³˪¿b¹V¹0aÛëZ‚æzºwñeÄæ2q\£qßq­ó`‹6ë'ð½²G™¦úB2 ÆU(kžŒ´Öf>ÔÐ…Íà#Côu˜@þTD˜aÑA7Pµl|µD6öuÍÒ^Z?Äw"Æ|Ãágj#Fuß–€_zmôÍ–¸IšjKÀµUÖ<(H‹9Äõà¸*1eèuÐíÊ™@¨•Cÿ~X¿Œ´çàË¡Mhß³{¼Ùp5Ý´ +:£³–ÁÔ‰)C“O7HÌÑŸŒýRv´LeY`3õò4ÈÊcòó]&‚!%•Ô‚îå‰!g+í&P/ñ|E3'@!{gtªÞédDŸÉ.“wsˆyY“|CµÅ;plÐ^°†™^d–Ïþͽ)çà$x*vÝ$€àz30Û¨s'K†®Uøá 1<“ô”¦Ce¢cŠ"3ÙßU9²\À%"ܤ$ómVÔ}âX„Zžc{ÂÁ2øƒnÛRè/÷ÆrÐÓåð%bq»,nîîè5aý*ñ°úëÍ +²šÛ +ôü½G<âk6žÝÎïò·a…HÒøåäz9/–Ëk|5Á:¿”K¿®Ïþ>ûD¤iªendstream +endobj +457 0 obj<>/XObject<<>>>>>>endobj +458 0 obj<>stream +xVkoâFýž_q¿A$p0oP¶Ò>È)›UµÞªRˆ¢±=€[{Æõ !lÕÿÞsÇ6¯Ujˆ ž¹Ï3çÞ;^ùÔÁǧQ—zCŠ²«Ž7ÓáQ¬ðÒ¡A§ã¨?á·ß>’–îÖÕÎ`èMÊïÁôþC7wêv(XÂãp4¦ vûX‰šÁZ’Y(èÓìÃ÷ÏdvÆÊì:øýŠµüQ©Õîõ½.ôšrK_76ßXú¶SV¼–’}òýJ²;ò†,é ;ÒKËp³Z%jE©^Ñ2I%%Aç…4RY“0ÓÒZ‡&lÌ÷ú½.µ»oŒo˜$úÉYaå[š¾{GU+™YÝÒ݂߬_FP‹»M'^ª¯ãâ–‹…jTÚV¾ÚÛ ÊNØ)7̨̿ÑjÐýì×Ù=5žt7¿ÇÒ´Awß>ó¯O0Þ„Èü‹ëÆËÎëIi¢×¥4Ê]Î:˜ý” ”xÕè·kÄF9>–Ì‚Œ-{E´…ˆ¬, É×(ÝļnA%·ìã àÕ‘½>ã_& s,]Ò%•/2e«¼”IcÄJÒ¢)%8Ó•,ðíö +¡°Óñ<¿³¸>7ì`uaÚF¬ÈòssåZ‰LÖ>‘–…Îh»N¢µóåH²f+ ­¤’…Éþe¶:3‰SXnTd­èÿ›tç^™sxªMˆ +¤28äˆ2ïáUØC|.ˆ +ÇóX?“D"Mw-ä +%§‰wd*”A®|ÐMÚÝêÀÞ_¨ºLÄ’69‡t‚•q.Û¨eô†¸é{Ä ÀkÛï•õ?ÀøD‡‘;²'h-a½ ¡bbŠ{×j²Fæà×»ƒ˜Ag1 +w$Ø[\{«¹ª^ï«S=rJ´CÛÄ–tØsÊÅTÿ&o¥ŠRm8¢FþÖ¸ð«:¨Ý3瘃­=]ZÎôñiã|„¬ ã„Š´Ôiª·%>µI yæ …š%ÊÆQ¤S­J'„uEÁ´;‘gà ¢­¥ÁnS¤Ñº«Âä Ï\–„õè“Ì¥ría“£$ØV¤³Ù-÷¶¯ç<; +Ñc¸¥,š‰erìk6Îœ=?×}óùDŠ +ÍôæR†®Ò–6*yA³bâS’å©+·(FKIlÕM˜´ƒ®ÇíÙ;Ðc¸ŸEõ8²ÁôgÈB“.(Ó®Œ‡i‘d¢Ÿb)ê¹ç£«’~é sêPx?ËB6ÀuF%_ÑÎ0í´›ÿ9âˆýÉd|ÓÁüît0˜v-òŸHeaìEÓEs8˜,®kqg(‡#áïAÚ0Ñô4²pÄàqGó½‰çOÚ˜·"Í×<DqÔý;u¾+’ÕÚÒ{úA‘Ä+‰fƒàúm>/XObject<<>>>>>>endobj +460 0 obj<>stream +x¥V]sÛ6|÷¯¸ñLÇrÆ¢I}’ûOìÔ“¸N•æ¡êH‚#’`HÀŠþ}÷ÀIvÕ:­mÉîÝíí-ñõÌ#¿#ûåg®ã’?›;šÌ|áUIJ°0›Ñþ­Zá‹KÓÉØñÚ­ÞØ º½.®Íùß®Œ'¾ãwðgº¿ÇóÝÍѦ£l¿p»àtQ@ÿ†¬®ïçä´HP—ïO-b»Ã¥E4X¬%½»»ýô~9X^Ò£ˆ*u¹ørv}?!ÏknŽ¤·ˆŸjI*!}tKηPZ“)¢µ(V2vµØÈšôVQ)*‘K-«Ú!š¤U­ù>†Ëe]‹•¤L>ÉìŠ/q. AáˆC×2REÜmU¼ãL%ˆªSUP$²Œ´j’“¡Yy¶ nÝiñF> ¼ÅZè‹šš˜:-VÏ×’•Äº(H~y™IÚ®ÓhM¹ØÑZf%B‡©vè!¡2´U&‹i[¥Ú&~}ïÒœÉóœÉxDÃXÇÄ-«´ÐÉr@ç‹5jÇŸ ê®~g¹,ίè<æÎiyùãq/†^`q‡Šk b˜Deti4“Pë_,Å÷å×JÜ+zu’ÿ=OÎÚÖ +5dÒ¡·èa+°BU¹È¨ã ÚLøŠÖhÉ:%tµUÕæyç~VZ‚m–ª'Ù·‘CÚ";ÎÍq'jiÉszläˆæèvÙ%‘mÅ®nêbvê¼uÊÜ]QÚÌÇ‘ <$§UªH~5¨­Uë*S!¾=‰Ì´©}¼ûýîcÛ½>ßç¡…–¹,ì••Š€Ñ{!ó^-¯Çl4º %Õ +³¹fn³t#oÙ1áço>Ÿ]»Áõné߸îÍÔ»"÷Ϧ“ÑM7xË7š-/»ìá—<Œ@°n´¤Ù"öôRôw“Ø üÞ¼¢J‚ž¨Bn1¥"–½1SÿæpB@Wl"S¸³—ËJ>¥ÊÀZé1»´[ŠÓ˜ +¥‰'n›ê5B]`d/ú¥Ÿ½cMsëKÁ­A¤J™ßs äÐ$ ²lÌ{“ÌÔkl†V»gÑušË¦¸,-$#Ë"R¦€§²éŠ8v‹ˆU›i^êàeq`ÊXãJel5fÙJ ¶,Ô)ÜîydQ–(ù¥¼Ç Ùq3ýúbàë‚>d&^a¦4mH`ø‚ÊLDÈQFÂàaÒóLkl %²ÄeP¥/准N1\p݉»›ºÎ£›œ% +6y§è,»•ü&E»ìgÖ÷ÃENZd¸¸" ƒÑ¯{›gãŠpnŒD‘•Ô¦*/[uç‚üÐ:PyÊfÏ»íãèÄ ´øÖtÏ•‘ç'ñdV÷Ïƃ0ÔqÙ`Ü l; rÏ>töñþið>Có`Ìê¬q+·FHXâ6/¼É™à¾ðž*ê¬1žL©5 ¦õ+ñz×Mýd¿h_7ft~Oœ“î†Jÿ´ï(á_ò³=¬¤uq¡)7pKŒU{ì²OÑÎ%6vHáÙßø”Æv o 3™·fí!Ð fŽ?Ÿã ì:ã‘=Aýööñö-½ã›*qª£÷&mÁÃn÷0pq +âÃÖá¨÷gÌI0qghÞã¹ÌÕÝâì׳¿ä¼P›endstream +endobj +461 0 obj<>/XObject<<>>>>>>endobj +462 0 obj<>stream +x•WýkãFý=Åppà€­èß)$Mî8ÈÑ–º¥.a%­d5Ò®o%åƒÒÿ½oV’-çÜØM°bI»ofgÞ›™|;óÈůG3Ÿ‚)EÅ™ë¸4/œ1ç3|÷ñ1’¼˜Ïiw1)n\šLæά[:v&ÝZ—ƳÀñÚ7ã)¾¶(. :Ý¥EOyëIƒ©ëø4ñg0ëïôg;=ƒä'hágóž“\ñ[¯·G¿^ž]|\7£e‚hM§gNË؞åe4X®%ÝÜ^ÿöéêæf5XÓ}¾ü ûÆäy;œžbßà³"ÇY•iE•¦ +»ò:Nå •:¯ûÏC£¤¢e¢M!* +ë$A8,‹Mõb½¤òEUâ™tbãqÀK,gŒR’R5þ•M{<§ÉƒK NƒçŒŸF>Rˆ¿ˆáÇZ[ ÈÒjðn¹†©ÖZ’™²²áwV+õŽÛÕùÈa¦ÿJ)#ðq¦o Zgf÷¦o`GQçôÌ:§6:®#Y?ÚÞb1¿pgd>½tÝˉ7$÷OJ²\:ÑeR«ˆ ·L<ÀÞÉ$:QØ_Û?öÑŽ@4§ê×>˜t§©›”Ý}½;An?A;-QZ •`uµÞÍ‚4Zxê¨Õr ç´o$½¦²‚D ¼Ð*uèG­Ê r^f3ÒS›|Å&ó.Ha|_G(¥wŽÿ± ¶nC“·Þç:ù}!ÊJšû¨€ +/©zÙHzÿÌ2#Å2y_JLY‡ +.ã†_ì;àï¦Ì¶VZ|œÃ¢ µ €fTÓuµfÙ[˜ÆpR51å¶x¢ý ±ñqÞ¸Þ$p¦‹ÆcŒÐ¾ÍůW_®¯è†¥ªÑ’>Õh”M1ˆóêÑÌÅ\fÓ¶WÒw#ôsýlŠÿ=lØ=Þ}»<ûåì_^¿¨“endstream +endobj +463 0 obj<>/XObject<<>>>>>>endobj +464 0 obj<>stream +x…U]OÛ@|ϯØÇ 7NBAŠD+UuÛ—Hèì;'G»Ôw&Í¿ïìÇUˆ|Øç™Ý™ÙÍŸAJcü¥”Mh:§r;'c:˦x-2¼Nðß(ªÂÙøt}NiFy’ù"¥\ÆcÊËáWµ§ëÖ”^[ãNò‡xx¦ ˜Ë¡,Ö^ýõ«áê$ž™Q +M€,‡ùF;ª: Ú5ÚxGR횶Ê9±VÄä-ùêîTºV´ +#igÓE}àîàj»^Уáte›­ðT´U¥š„òâ*ÀN“ ³?·N9ô(- +€‹fÝn•ñTkçé¡ÅK­«X`ÅýmhÉu¦ü-€“6»Ö +}(‰ (KtPë´Ysa½*]ˆ¸ÇšN‰ûÃiC;áЀ;ºÝ¥M趢ƒmA hyuùãæîç]¨‘/îu]£ [ ±C9Щ ++d«ðù(|¬÷…‡I4©x2:Mð1½‘Íÿ|†2lâ±C|;ûFû þk×7JH6ísx‡9ȱ±ž;) Èñ˵³½6ñbÄd:vø*l#«íΠ:•ŠAltÞ5Eìèe[" rµ~'ô]1º¢Òn93¶÷ +xjÚZ4£Meƒ < ó(ãmHópÚ8Õ\´5#ÁÏl¨*HݨÒׄ <Œ H*1!£Š‹å2dõCßMW<ýþàB9AÎ ¯ËgWµ‰cš”¡&çÑm4> +šu`ÑÞ ž‡Æx]“ö=E•)mk¼j¸£öµ6*¡_<-ŒÚ]¡r#Qâ›\á yYÃJà‹?ÏO½Y0]¾zÄÏ3ÿÔñÓ¤°hY!a½Á(»w˜N&2 5ì—È +”³h–=†j­áAT¢Ü ¦¿,z3ÊòE~Ü“2®jw˜ä/•9±$õ–é~£AVÖJ”¹ëi¯ñˆ„U±è6yš-’ùù9MgYÜùß/¾\^`5>ªÚîØŸ›VËÐÅèxv”Ïyk¼ù™e³$›/ðó€»é„™®òÁ·Á?‹0µendstream +endobj +465 0 obj<>/XObject<<>>>>/Annots 233 0 R>>endobj +466 0 obj<>stream +x}WÛrã6}÷WteV³eS–íø2o3^;ë‡Ä³–6•Ýr• "A1pPåë÷4@èÂI¥¦Æ%^€î>}ÎiðëÉŒÎñoF7tyMe{r^œãÎîÏËO|‡®®¯ð·¥‹ËÛâr¸Ò4OÏ.oŠk<›ÝÍøÍxÅÏ>/N¦wtqN‹1®oniQÅ­q§œÜÛJ™ÍûÕJú ¬ñ¿cÅÍfiÅÙÅmq5“¹¥­íi#L `IT•¶’ü{.Ú¥ ¢(xñ9]\W¼äÙH²5…FR%z8TþÝS-J¾Ô9»r¢m¥#‚l»ô’¥SA¦µuCå©7•t>ÇÖCÌÙeJs-œ²½ç•¡´f-•QïeEË-ò±^Rk} Qµ–¤LLÉü.ËPТ‘xãpíFº´DoG{éi9Q#u‡(ªÅ^ØX*dèÒæÖ±TZ…í)¡€ô“Pâxå±C¹Íp1²œ +®lÙ·(6JëQì2îÁî5AµÜä}Z‹´‘ ÇÆ(ãºK9@"ÐPŽT‹~%(RK…þn+Hò[üP?*aV’¼V«&hT¶f â4%Ñ~må솄G;8SOZ +g°ƒXÚ>]ú²wãÇrü"x „ˆ=f‹4'w?ƒâ‰³Ÿ>Bd‘ÖÏŒzÛ»RN• Ò¡}÷Ó‹™ÿÎõx-ø¹v´‹peÊ–ùþÙFL½@8Šs´µÛ˜ùX:` i ž9'µ`P¿öI£ÜÜ~¶:Âp·ÔAqcfbliH ÛÆ‚ñIe =2qÒGÅðÁ÷KVÂ) ,eï+Ïž¨ 6Z#Ýš{Í7%w™{ÎÔâF‹¥'/eË–:—µt¯Ck‰\ ý\xÆô©Ž6ÃlŠ}AÉi„„½:UŽË?¥€žÛ:œ}í-¿œ‹ö„]>¼ÍžÔ„Ð}œNõ7Wheúo…±™ÿ”2½2g€ÿ|‹ÍfSÔ¾.¬[MQ^7®$\åß‚-‹&´Y®9ög0=@ Ùq 3*ì_hUÕGgå¢[a¶T©ø± €GƒczÚ465*N-{”ŸÍA­Övݘz k&âíÛëŠ-›²—¥• ϽËô¨`¿Q ¯dàÉÄMÙ.£ë‰0†ÿËÞYí<T+ÀÝ£œ˜$CuoàUÖÀ5<¯0Ývïx¿íÄÎE7ðYBš˜+Á2k“œ~—T‡å¨ôþéq>ÿü™ÝQ#cvdžLñ_Ûà™môÇJ…Erã}—½Ò`q+EωFüFq‡Z•Bë(=Òjé¸î\_Úš „H•YÛ÷Dû\Ê•›QÐ'˜{&ñŒI3WF±¿ö¸²ÛÆñSƒ¯îŠµ|ûIÐz-p;ø×»8<ÔÖVa&V½ìÙ;ãÄõé„»«ûê¯rXI œð¦­YF :\î ;ˆ‘»p.9*ôÇïƒà¤¤U©ø`sˆî0à…V5Ôm¥®¥NxÏF CÌNÁ¶ÏtŽÏaÊt|R2ØêuÂüÞÀ¤büƒ©Á¼‚.1(†¥€¼$ý­’µŠÇ®Ø&Y’ðz_@+qJäì­Å›†ç²IcGá8Âɯ çoñ)ÀÝX{°\frCÙ~ýôvÿü忯ô2R‡Ó?È>Ílgȧ»Àq˜€)}ɧY¸tÛ#”¦ Ž[ÀõÁO›Ø0TðÉÂÌ~ú•T= +Ê_;QÑLŽ\ûÍŽË;|vA?pƒ§Ih:Åro5DÎý€èN›pYÈu|l܃5r»u¬Ë)SêÇuƒ˜À·VFÒÜ?ÏÒÓáj˜ö¸6~ S + iGPX¶p´oˆä‹fWVœÛéã%rîÀºîö¹gä’§äÇÃÙ{×h¢à]IÃg{ôn?´â’6Ø Š¿‹fo£Ä¿Ëîºøqo­ç)Áéãíð]p6»Ã󳫋ÔÔt_Ý\7×·É7g—ñaqòï“ÿT.Fendstream +endobj +467 0 obj<>/XObject<<>>>>>>endobj +468 0 obj<>stream +xmWasÚ8ýž_±ßš¦à%Ü7BÒN皶7¡s_2“¶À:dÉ'Éî×ß[‡a:™&FÖî¾}ïíòïÅø7¤éˆ>O(-.É€FãA2¡ñí”Ç“´º¸_\\ÓpH‹ŸÜNi‘δH/+/IšL C^¬$"uÖÓ.—†*SŠt£ÌšžŸî=½\z)i¹ÒºLº$'a2R&Hg„öIfÓ—ˆ*¼5±áã⟋õ‡Ÿ“b^Ê­t{k$!¦§oxOó‰þp’ÜPsh8LˆŸÆ‡ýÑ$ó«?lôÛ¨Ôf’TQj•Š ¬ñdW”æÂy(G:š³­=I,¡gd_VZ¿^ÅÄËÊçõ¯'y¦Ö ÓðêƒãÛV•Ic¬¤­sGÍüThõ_üåL)£s¥'kô¾½óK»•Ç+Ѫìu i[¸=KbkUd9ce®m¨N™rëÚ*(ä" V¨œ¡L^«) æS­Q¦|÷úËǘI§•M“ç M*˜C>ˆ¥Ò*ì©tv©eáÙ7©ÇÝšÞ>_ª©-÷N­óÀÌQ)Òñ©s2 =ÊjØÊd¥…SÙZ~ðdP Wy Ë%e*cˆc1 }[ÑÞVœL'á0õ Âá3Ùû7(…Ó‰—©€êP¡•oÊã´ +y<ì$þóøÅgQ,}ýõ]fñ’äLÝ7çꞃ¾ +:BÓÄZòu³ÅìõþûOhmeiiÖèK™ª•Âõ,½>·ìÈÄöcÔš+“nȦ .Od[aÂ!dÈ–u0¾v)ÐH­p¦aKËIhÂiÒýi¤é¹H–§è£¯aš=½ÎæóŸ¿,ÀW¥à·Š»«÷=>³'ŸÛJ£N$ßDÍ[%¨Ì–¯k’$y¹„Ã@æ'íäp€æ@“½?ƒSM:SJƒÐð¶[MCѺš4—é†Ä»ƒ¶Ù“X e@ æš-{$ôNì={]|_~m^uDƒZ‰TFÊtØÙ¨K[ˆú-¨ÔÕz}Øÿ6é»sIŒ¾„•…9«ËÚß 3(jÕüãG_J뽂Š±"«Fƒn &üoD0ÖBÓè…4ÁÓ5]ÁH@‘1·çŸ>u>»®ir…Ít@ß×µ´:çX…8"ʳ±µò›ßݱ÷˜L¸¬GÞ¬fUmaQ̨Tš]0³QôÌ­2 +g¤::;~PFGÁ-)¬ +bûBýúÖ*¦†³e¸'ùVj°ƒ}9ÒâwÔ¦ÃÁ•NÃ{Žr@Q7JÈ„hƒÉ™:ŒA©úJàù$܆c¡-ѱR®ÐÌ>prM4 x;ÜáÞÕ@d‚D6ï£ÿA¥J7PcU„èÁ¾í×Ò !ž8Œž¬qÏF9£w3ðóL²?¥,#®òçì.¡_TH±#~7{¯·Â)"<'Žù7Þ(Z®&ô7 …ÇÄ ’;ØÙÊÅiá±Ò0¿µ®‚Ìz˜}…Í* ã¯í'[H† +49mªb‰0à°|«WÌê­:ꣃ^ë<êµ)ŸÃåÝ,opa%5W Çh°OKlcìNK >Þê *¦–JòÄDŽõ†ä­(»Ã —>'ÈÔC5âöæÞ]Ç·5É`ËÁdG" ¼$jÄ]Ñ“¶Ð;NÇ0žú5}x–ÆÙrtåÄdéÅ}ï, €Ÿ˜;vmùÒ«µãQ€g§Œ`Gðb.@üf—*-n'aˆGÉÒmfjú¾ÀSC‹^ã5ë`1!Š Ž…s¼_uÜ´rôn×¹%·L|0Ül )'WXD÷‡FîXmÐûNiÍ×# b;ãþIÍ%cÉ˲ø· a¹aQgè/VÉßïPr׌TlÉðù3·¶WÁ3°'tÛO +øR§¸ÆñG‡…¦?¼ÃêÞoj^ÀÈ<¶£¸›Ç%6®qž¡P(Lúx¤GKБgíöì©…ØS.uÉôu2«ÒÆ<h¯Ì)‹Ä4Þ°ôáý†ŒÜðà|СTÊŒoÀ¦ ˜£#cé€:€(¾;êp1wK%.ðUÉMo>ˆ®~B¨Ã7%ÞRÑx ~ýåöð]k8½M&Nã›imzϳ§û=À³4Lãèk…õ_ê7gûÓÁÓdncÂÏG øØx:N¦“[|ñã/c~ô¸¸øëâ+,†³endstream +endobj +469 0 obj<>/XObject<<>>>>>>endobj +470 0 obj<>stream +x}WÛnÛF}÷W üäm]l)}kœ5Ð&h-?0`,É¥¸5¹ËpIËúûž™åÍrZ4E"r9—sÎ\öÇÉœ.ñßœÖ Z^SRž\F—tµü­hµYãß ü_kÊN>oO.n?Ñâ’¶>¹^oh›Ž_âIrv¯ÊXÑmtmUá?lÿ‘ãóu8>[®¢>8»ÉU­œ¢ß”M cwáèŠæóîèb]óÑmnI4QÄò¯§4À¸ÓVתv^GA+Ÿh*+á±°zOYkE/ªªpÒ|àö®~F2æY@ãa¨„A`L¨ÿ8°a¬7`6žÓ>exNû÷‹×ÄoʶhÌ,>4ºXâw€™Ç°CÇGؤ:3ðÅ9$ú£§ä*) XðeA:™3CõÔÎ#b“x2doìV”ᡇUm^áämAe=ßúÎ)'ÊŽÎ É°Öz˜Hø³š ÏûÒêCÉ\Q¸= b­ r£ßÃ\¶(<ëÈ6 +™}{øýwOú5ÑUCj¬4VqæœÙl~-7+t"T¯ê² †Ò£±¦õ,6l¹¬ð9ÊE”F7='çä]Ç »÷²M÷ŽÅ?ƒ°nð-'ÉÏf ú°(b¨Â,ë­yQžö†ú×vâZxGfüžÌ}Ž¯®¥¶¤\*pî~¨ÁOÓ‘lc 4NÙú/ tµÙÙ¢ûäºÉÿ£«Q䙸ºF³.”»]¶+iö]wBÀÀ³0ŒƒàÈ-sOè[F*€,„¦Áålq56Ê[$¨_wöszØÞÎ6,f®´|´õÒAB“ŠSÞ Á‘= ë¥*Ã'¬ê‡›ûân.k/°:›4g÷qEð€©(ˆN«¶E[Y›o"žg‹‘¶ùR†ßÀZ(G—Ö@••~·Yèé@‚‚¡‘†0YK{S#c€Áô‹¡‰RBß$…7p%•2&snòok‚í~ðî͜ś ¸>t@ƒÐ+¤þ„`ØëÄiÕúüihÆݨ’£Cƒ–OÇäeÀ)I G0dz‘ÔÇa…Þ$O¼ný[Ï^~^d6óÐb;?qØzdïXŽ¼]-•ŒK³wTrk +9³äŽ Œ€ÈÖ¦ºæ^‚R€/ù(„-j•O»4x’{é(SíH5 +ÓIQÌU^9ÀÒËÃc^B»òŒ«ˆÃ„ËZÁØÇû?>cÆ'ÏX”úõ`POza戻ѯ”h’ëäYŒe…Â2’ —Ò¾  Þ80miq×C Huè×8!’î >ÁªðŒA¡dDOØSL­ìál¨jdq½"Éz%¡†ð í ãgÿ )ð>=+ %`8ôˆþvíQ®%6$l«Žë" BOŒç•³å)`Üþõôðíîæû—¯\x÷øùëýÍÝØÅ&v‹‡ PÁDN/˜á#O…‰ñê‚ÍA ¬ˆ}­¸wU‚Š+ ñ$úðõ‹ü[hcL%QÑűìxqâ×G.a·6 +ëGf E¸ÝaµaÂú~û0 ¥ƒâ­3åcàeÞ&~Áé‹ûþ9ê\žªá\Ï]¢×’&›_WàM ²ùŽQ‘f•P„M³-cm;‘ú˜& nâßáÀ,±/QÂy›ßÏÁ#„–Ñ$KÈ¡Ïc_h±²¿°€$i>/XObject<<>>>>>>endobj +472 0 obj<>stream +xµU_oÚ0çSœú2*5nœ„$<ÒuÝ&­ê6²=ñb’ ñ³Z¾ýÎ…"A“­tLBä»óï_â_=>}8$„1ä‹žÏ|ˆ“˜¥ ýè«ÊÍ‚Ïé¶ea,n[ˆÒ¨}T XÚÖ::‚aGG&,jÅ“a;\øípãà9Ú«¬wyç•N¤8M +€„ò}Èò¾˜ÏaU(•[Y+VüDh”|cµT3ÃàºVo,äµZ¡¶p_¡‚¥0†ÁÖ`+\œg?zmB3‹~ÂÀÝ_Þ Ón%xÁ¼0"ž´z+r] +¦k‹µ.P³jSÿ„Ó§Ž„8RuVI±A&×rŠ²BXlXJ…ÅÁ@Y…fW$(¡*|°¨Œ\á|í:Üœ±XL…@Ûò$¤móº@¶#A¸K¢æ…|Cáí÷ѧIÚ”ËÚLÎ[À»m£ ´‡£ +ÂB]–-PÜK[9š²Dí. EÒ9s„òJh‘[’§È磬ļA‚ Æ>º¹^:û·¤²8û‚ñÞœ ß©?B +Ö+ýv 0~½Î–OSÕ”ìIŸÇ0•vrsií=T…$O¶2üÍA£]íA Hq²›ø;y]¤ëZ¹ (k$ÿÉn"L8û6þp÷5;ë¦üñD”ÃÀQ}%ÑÎD:CÆÇ=»H:G¶¹;‘0ˆ'€ùŸ4ÜKõËž©'Ù¥ñ%ß^Dú/âmÏgÓíIÇ“”ÅÃ!ÄtäÑ«x<º½Á5Òk¿^¢6𾑺txO•^â]içñ%KâtsÄñØ5¿Ëz_z¿ …¤endstream +endobj +473 0 obj<>/XObject<<>>>>>>endobj +474 0 obj<>stream +xµVMsÛ6½ûWìä${LFüI¹'¹mZÏÄ©k©=i¦’ „–UŒãß@´¥Hò$ד ì¾}ûvÁÏãPR”PÑœý1%qâ‡g)Æ!þ§ÊNLð*;:NýøØDœ0pÄT4=±#ŠîÈ2ûÃE­ðlaäOã1†PÄä·—íÚ Ëž×1]/ÎÞ˜RÓ¢ I†Ai÷ŽiQŒæó?gçËQÞW—›¶»üÌêåùùâolŠ)Ü&/L±iÔqÝ‘^sêÖ­Ò´ åB/Ï©+ÉKª…Ö5÷¸,“$¤æ+®ˆij« +› èAèµæp#ÝZ£ðÜsÂÕwîŸ1{Qæ`~ó°[¬ßqõ:Œ÷†Ð'>Or©¸î•ttºÈ[0n{¹%ó€ä\¬¾“ÚÓLÞ&ßå–Ö7Åf5ùîÛ$ù¿qhä¹/Í1yA„æA*CøXÃ:z÷Çü×ßîï^ Ý*øMB{5ñ‡Ùþ€ +7ýÁ‹bWkgŸè–If*xΚœÑìîæHcðCÄb-:êx¡E+©ä]¡Dκ«^Ú×Iî¨jØ?œíz¸¿û‘ +V×>YKBV­j˜µ¶f%åœKã{‡ú6×L˜¦“?ÿÂ!…\Ù +rh‹¶„‰Ü ¨v]™nP¨l‹¾áR[/>ÝhÓÖúº$Ùj8üÊ]Ñ¢.K›lìŠ×hŵ`yÍ·ùÓÔpˆ^…ÜxáÄÏp7&®¿ØF,G舴Q…Ô—¦9RùâC–Ñ+äzÓšc^ ‡øÓÐ@2=9´f 1fž2“šqÊÿÊÐ3D냀F-0m@[üúa'#NÓ¸Õµ•Ôõ©CðþC¶ýP +&‘ŸL§”¤¸'#«ùìözF?ñϼn7°G¿ôè"ÎLšÙÕ^:FßÀÒS_bqûi‚oC«ÓÔlþyqöûÙ›Þ> endstream +endobj +475 0 obj<>/XObject<<>>>>>>endobj +476 0 obj<>stream +x•WÛnÛF}÷W üR°IVtÉ›Ò6…$Hc¡E Á’\Z›»*—´¢|}Ïì…¢ÕmÄ ¤½œ9sæÌ𯋠ñoB‹)ÝÎ)«.ÆɘnW+ü-ø;ÅÿZRáàoß¿Þ\¼x3£É„6Ÿ1_.h“Îi“]e¢,?‰z¸z¸¦ªµ å_™L4’š­²TÉÊÔ‡äzóùbL£Ém2ÅWu.ñŠíŒÒ¬©1½û­Ê¶´WeI©$+þÙ­ä‡f+ºik-sâsÚà+†‚ƒLáž"¨Á½ÿq„H#ÆeB¼{4}I£ÛU2gܸÈJàŒQìD-* ø–<äƒiÉ´[ØJßÒn©©sûTMb·“ج3tgQ +ú¾¼â«Aøh:Of|óZS«­zä 'sJUƒ|Ä©ëw¤Û*•uBÝš¶Ì=oœ‚'Q¶t6[º¿ÿmý–“•Ð冴iè‹6ûMû­ô!"X²uAçÒfµJeîòÙ'kâÉ}}Äëûïîþ$ÛÔJ?Bn7?Ø Yå@ŠVg2š„ņBq¼Ã·ë÷ôNh˜]bzzÊMÖVR7‚·z=ª†;ZoBŠÀ_neýê4ò‡Y2U¥Ä)áSŒ§TXhw;£ñ)ßüDȕЭ(oϼåz"²¿– ´¸¦#5æ|z$5 +2x–Twà·8)ô²ì$‰jŠ•Ó]†:ίn7Eù¯5ãÜë6F×åŠkïæùŒ1WO’†í…3°tyï²sIB3÷Îð¤tV¶y”ÏeûV>Éò²²‹)Æ0;†9}¦ŽÚöl1Kó%:;~œ,ùþŸ7¿^ü Ù¦öcendstream +endobj +477 0 obj<>/XObject<<>>>>>>endobj +478 0 obj<>stream +x•TMo›@½ó+æè ,Æ|äbÙNSEr#U¡ê%—³Þuw—¸É¯ï,¶œPT)2ÚµgÞ{óñüÛcÒà `ž@µ÷ „8‹ƒˆÞ)#úh„Æ[Þõ],…¢¡”$cPÔ@áaE5Û¨¡j¹æ•E –—^¿('F¡.ÇÒ ¡¬ÙµåBBÍ-cu_Ù^£NL5šJ‹k(_`\P ¬7÷÷¯.VÈJI@g:¾'6- l;H b6§‚ˆøŸà§êö£$ˆÝï?ƒ}9 q[„NXÛ¡²\B/ØIÒ%¤Åj—ëSiT~=c¸;]/\„U©^Z§ßôå»:­¨ZhTשã&šÂÜL£zýiIó)Öš°†ÊžfGa[P+”äÝY'þ9Ð •È XÍEç<´j±Ö<]äÆSŠ×‘\Õ4-XEß>üØnvc/$·Äqšåo1Åëþƒ'•ôOÐZ8·J#¬dŠUñMÒ°}çNœõé¤S å6„< È9´Øng®²oÔËår$4›bl¡C¹£‘Gܼ |+Ÿbµ û}Irh /XB6Jï¹›>ðg´³ëEX,Î[žð®ï²³‰Ù"XžCÄ¿<®¾­Wp‹ÏØ©j_{Q¦óYš Eúi˜žùôí"Nã M²3aîZó¥ð¾{lÝ^Nendstream +endobj +479 0 obj<>/XObject<<>>>>>>endobj +480 0 obj<>stream +xVMoã6½çW Ѓm`¥ø+¶³Åvƒ] ‡5ÐCu¡eÚf#‘^‘Nâýõûf(YþÚ´ âØ9óæÍ›G~»P¿ši4¡¼¼é§}ÝÓ!gS¼â¯Ò´’ÃQÿÚƒÙŒúióR­ñ¡O³ûô¾ 1NïÚ£I:­ Fx+Á¿Ì9> ^æöñž†}š¯€p2Ñ|)ÏñMÞo4ùr‘æήhe +Ý›ÿ{ÃÓ¸!q óe÷I¿™\ôÙªbï Ç4Ô ‡Ót ¿(Ï ‹ý +ˆÎAÉxÚV.×Þë%9KŠ +c5-öõlñ) ªP\‰ÛUö[íÉ­dG0äa¥s·¶æ;B!r0”>% A5RÅH¿ëŠ²îVUªôižõ>òb´(NÒ±À-”}®S$ôXžÀFPÆ»ØbO¯´ßª\§¼=AÍ`o٤ğññüÁ•¥¶á,àB¯•x¯&lHã¸y]š$w(qüyëvvIÞ¬-@w~íð·_:Yï4ïð2ï_:a6Z-šéõÔÔs–^!ÛV[òßvLö¢Rù³œñŸ‹T£ËT0™:üw–=9©3ß`GŽ )r É´Ô+µ+"IÒæ4ë;ŽY“á]Û(Þ¸2•^a£ì²€ +ô[^ì¼yÑhUTkà÷0ߘu˜®RG… +\ +ÇMFÕt¤*Ÿ+k‘lå*~r,¡„ö-ˆ‘ÉxO" µ ^n¸ÒÛã /ªØ¥¨[tN–£„J£ˆƒ{Ös¨dƒ“é”Áˆ½t"œ¬[à ¾.yZÒs¨Ê)bàœq´4/fÉU®DR°Qè +D§¡·BÔý‘:Ÿ:¢iñ "›S2Ä™ü+Ó·¢¿³ÇÉnO‡‡°]À6iAúKRžàAtž‡AžÙ–ËLgݬG«”u½Ö”³ ²îè!ëá!¦·[Ån¬~áRñ e™Å(±£QóàD¨LÐBçj‡™@ ̳2Q”¤Á/,»ÆQ…£c­qÄsqkS:¢U‘ÔEðKŽÓN?Gç=µ“+6ÖšÛÝjDÔJ¥Ú7IÆbxà³ÇySú æ[Ï$ö<æÏûÁú™jrWn1“|4@•0EtgF¬áÀêrcóGƒÒxù×41À!y[†è—ÅòÌ]}ÑÕBS +L!,¶›Ý„媪ŒZkè'ì*{Ž½±6»^¡ëDyØ-‡-¶Ò¥{ÑË‹ŽÜµ©á ÎÒgæC¥ŒÌÁ™€]G‹c{ÒŽå!‡œPµ‘¶S&.qmΞ 6zÀÁgìt8©ôʸ=9€ó§§Í©JX·^T²Ð|€¤y óÊy| ß7[´7®‚1ðÔŠ_à ò…ò›Ÿ±IÎ2>¦ä¬!6ˆ¹¥ÑàŦi!G;ƒƒÄÚSY‚Û4Œ­ÇMáhɺÖÙ¤¥3|P`«ã³òa Ð +N‘Ñ(:”$·!{Õ?Þê“ðÕ`nÀ{ð:Þ¡8¿³¹ +ΪåúÀC着¹güìÐKéÐô›*A¸\|nûtÏf £ AÁ]:ø(Õ?RCÔOGÅ‘ñ¡bifYÓ\W7 :nìI[„ïVII“{*ØÁÝ®`O„°;7GéÿAɽ hVß]@#\µû#®‡MöâV<žŽÓéWt^1ì3Èßæ7Þü¡´²endstream +endobj +481 0 obj<>/XObject<<>>>>>>endobj +482 0 obj<>stream +xµV[oâF~çWœ7’¼¾€ ÛM¤¤MªJÙ¬VK+UK3€ÛC=&l¶êßïÌx d7©*(ÆñœËw¾só߀||JBŠbJ‹Žïù‡‘7 Á(Á}ˆ¿JÒ£í.Õÿø4 ‡^ЈFC/r²> ’À7'Aä%»“h̆­ùChÀ‚öäP'ŒcoØœ„Ü6˜Ðw`÷O˜ç7—m0Ž¼‘³ò|`£ kãÖø»˜0? ¿¹PÐd"ãQB“¹qìÓ$=ºQµ¤z%j\$L6“ÝKÒk‘JM •çj›•K>§­ªæÔÕu…Ý\®+©eY»sU6Š4“õVʲ&QBsŠO÷xòWǧ>è å(+éZ­)ÏJÙ£u¾ÑæÑBm*‚‡Tʹó`l³zÕ¥FSËTÁ8+{4=úSêýÖ-(U›²¬œ§¨3UzÓãB#1€p Uˆ³ôƈPº•HkYiÃH¶,U%ç¤Jšå¢¼3Îp·–9’¸U ) +øÑMVòÁ螨28y4‚RË2û +› "A ÎØ\Ãy!áÝúñXùÍÕ˜ å$ö£`øÏûÀ?n²êN[…]Öû!gÝ%n³*¿ˆbË·Vç1{€õ(¤>:g„_(Ró1À¨8:¥Ê{‘oxS4ºXÑ‹Nù‡9rá÷M´|ßI (€³Tdóy.­r¦é¤Tõ Ò T 1{iB)¦b£%e5At‘Uºf‡©¨U)ê&5h²‡êÖ›œužçæ5œ8þþCÄšIþºÕ U¹R;(‘ÿ-ÀO­Ë§³)œÌ+²ˆ`UHýBõ½–á@†k¸~=žh½¶ WRÌ›îë™ÊHs¥yÍ0îd1Ó½íN9!(%Aš+гE†ªbÙv†ôLSóüDIÕ<&øžç•ë7 +55“ÆV ‹¼P})>·ØÉöç--E5KùㆴœZQô²é`[çO7ï† +̠Þo  ÜPã‰që‚Ý ™ÝÀQ‡µÀ’°“K˜'šÿÓ¦ø—C¤ˆaâÅ|̳AG³.fR´@ãc` _vü½TvDïXçÌEÿoOO‰þ¡wM`gô/]~¸ú.²Ý¹S6Šî1Ùú:cK†‚vÖÃà“ÆZ-‹¢û¹K7çï/ •ø½Îc³VÇÊŸvéóëß/éæúHG7Ølè¾:KEž?p€¼BŠ’—³¨Y/d}·CEKpÞ¡ÍšðUVŠ0« +lOW Øμ7aÌ5 :g†]Y2•è¬­¤»Rn—é±$}¼¾àue~xd!š7š`yñxLq2òÃÈ”Èùû‹súEÞË\­yƒÿºA²Z?€K÷‹®YüOìÏA2ð’o”,¬9é|ì|ó,þ endstream +endobj +483 0 obj<>/XObject<<>>>>>>endobj +484 0 obj<>stream +xmSÁRÛ0¼ç+öF`ˆ°c‡CÉzf:¸œrQd9QkKÁ’¡é×÷=% Lflé½Ý}ûÖO£ ýR”¦T7JD‚"›Šù¬¤çŒþ½F/./S1û|±¨F79ÒUà ŬDUƒ€’•Ïáµ +ÆYNÖî|;ßh:íѸ¶u/ºÆj‡?ºwp=:Gä[ÙËN*iÕ^œV?Gâ#øzœ ð;½NÒ©ÈøèÈx@&bSkLcöðÒÂmµ5vU/Õ/ m ¢èŒ•a_6ªuþ]•@µÑL—Ù´å"j¹Ÿß]y<¸ÿ0ú›äW‰Ó£ê¬ ³£ês²]µy&á5Œ Ž ‹ ,Tâq~ûã:ÊÁYczΠŸÙ›5 g#;ÛE7hÿI7Ë‹€MïºXþ3>²‚–HXýQÕ†@ïd9¾¿Åœ,—ödyúϤù~Ò‹›+¤4gƒIv‰Iž‹"½rCØ/Ø Å +Y"3ŽÒ˜<ç’¸ + WÎ6fÆ´šUJ¬LÀ`Ϙ;7@Rt^ y×êßçØI¥Î©Ò;{”ÀÂ… ßEmÒÊvçÍgŸ–c¯¤å¬,OcJ^¥0þV÷ë»}`âþh GÙšdQEë(Ü5ž‘´+J¹JŠèœ:*ß=;|Bi9Å»uÆÃün1ÇWý¬[ +mïñm PpÓäµvR&Wÿ·3/sQ³Ã·’q×u5ú>ú %2âendstream +endobj +485 0 obj<>/XObject<<>>>>>>endobj +486 0 obj<>stream +x}WÛnÛF|÷W(êŽâ[lh 4A hë´vп¬È¥´1Éew—’õ÷9äJ +ãq›Ü=—™9þ{t&§øw&×çrq%Est:?•·Woç7rysßÏñ?X©ôÅ™>š¼x÷pôæö'9?•‡ +¶®®oä¡Ø9Å“âøO›Þ}¼»׊‘Ï­{–|¨ËW_ôÚÙõpíõÅåü?¶)ø²/’óípèRÎÎÆCç×ó+zX¹(ø1W>$)}Ñ7¶M’VÙX·°Q¢o¬ø +-ŽÇôDáÛ*xœ7rÿÇ;qMW[Þ7ô*øé艘Vã<•×gCt+¿‘{Ó,Œ¾ƒµK+Zoæò°²[iÌVV¶î¤³6e³òb€_íý“k—‚èhúç׿~zH’ 0ÌÂÕ.mçÌÎÎ¯æ— +E’àR²­$?˜ö=ãƵˆ@é RÒ¼Ê9ð§xqš µ˜m¥µ Ù-¡¿´ðôO* dþI×cM³Õ°1m$;âxÅ·t5¦Ã$JJ#—ÊVfµ_.ññù™žD²Ç‰5&€©å×–~©eϧ%ºE_eYåJgX{0´Fÿ[)VlÏêx$K+]|X›^6œQÎwl¥0[”dòI%ºz'R‹ÄêÓ/‘2Êw|$e ´9 +4¹ÓãPfý„Æ º)ÉØ;SCÄIöÏrèšöA/"ÑãN°ÁœFÃ+1۬䇀!9qží1ÌÂPúÚ 2ÜSĆ!ª‘¯½£XAjÖúPA½+˜ZÈΗCÌ  Ó± *ÇJ_L›Æ|ñ:5w©1žD;ÚÁÅ¢îÑ4wÑ7¦ƒø°ŠØö¾’¸ÅÒƒMG_€±$,_5–@²¯û¹±+ÊÒ‚äqö¯](ؼšÃHD«ùñØb¸"¤Ò‘ô(hí ±±z~Áôâèuÿâsë°sÝmZìF+×1Ê7·/®”_Óè悸ÊÉz’WŽQ%Ñhœm}äÛÙ\ö…- î ß”žoüfhÎ"™eU(ÖCì3'd¶2E:áfƒJàªDäy6†òŠ3½/Gèhýd¥ï¸aÑ ºéÀ.Æ#¦2™¥¡ÜKûl¸ær`¡­k.¾ãâ¦>)ÒapkQéî«Ðóí„nxÇr‚%„›©5X +tâ0ìR.^™T…‘>õ°qˆ3ÓFôdä¬Åš9¬ôh·l ¼±Áv¾,Wö[ ážùЫ<’kìã1´‚``•‚ÝB”ᱚö H&Ü9¸Š-x>PØ&÷¯àk’þ$÷ÝÝN¬Á^ǯÂŒi 6¯_Ú³è|¬àF°¨†4Ƶ3O\÷»D+ãj퀚”˜úª¢t+)±HaÕò~•…ÞÁ–­ hL¥vOX"ódgtŽù7 +N¼ë¾œ¦Ür•”›7·7û´‹Óá;é;_}—×—óë«|*âCîü‚>><ýuôŠ«ã9endstream +endobj +487 0 obj<>/XObject<<>>>>>>endobj +488 0 obj<>stream +x}W]Oã8}çW\ñ²ÌªZªa(+$>f¡³h$¤•›8g;c;-ý÷{®”n†]!Míûqî¹çÞü<Ñ)~F4ÓÙ”²êàtxJÓéþNÎgø;Ư“TÄ/&ã‹áä£/F£épÚÿâjqpr3¡ÑˆœLÏg´È NOi‘-J ÿ^®¥šjë½Zj<°º ÊOÁR(•§ÚY|Q H™L7¹2+j¼tFT’*Q×x0 ar*¬Ëø[A¾–™*Töiñýà”ŽGgÃ1üí®á$Õ•5Z8ò%BñC>}rsA#ËQŸM2î}Þo¬Ë}:ñž×ñx†Üqâ^˜-=ß_Q¦•4ÁSS×ÒeÂKøi/ÓRÂ/§lb¡”Õn©kIÆ’Ê¥ M¹EÖrKyÊLX> 3½í%ôR¼ŒÎ +ßý‘5zKªˆp& écHÀ5ØÌjZ9)à…¡ÏOó/w_Ÿ¨DÏ›]®•m<[ 0e~ ô½ñ!:ÈE„ÌÝ–œEähDˆEF%—åŠ×ñ4áúÕ¨·=|˜2 äUPk9¤gàRÄzS Y©7™§SïÀFÀø¶2àté»zÕRà–2[KÚ¨P"LÀ²Ü’Ä Ðx†‡‘<ì<Kõ!Ùš™‰©¬„-Äã)f®²ÝRö1+ +T/ße™\6ub7ȘŠ¦©–po‹”]†b¬¤¨Šà>Š*µ «ç8)´¶›½ Á*v®…V¨'³VÍccê•ÈJTŽ^¶V.oÑL/Ê<,ÀZfÐë§õ ¡u°Ì¸í`“&sÛ„Y%Cis.aÎéìµÊl¸²ðm®2@èŒôÒÚ3‰bß«ÌYo‹@Ftè.–"êÑ™@‡ùrŸ‡µLùHþlàu‡´`*TR°ú žžïÈzúý¯ùÓ·ßIUœ°0Ú‚ø¾ýv9$RøjC€2)([fM€Û–]{ÊÐÅßܳ=¯hÎ\°26ÆÇY$‡æìSB+²¦B©¢ó‡ÏOß¾,n† ²ÖU¬;¹„{ý?2wg3ýï‹÷Näp¥ÓpTkOb ‹1¸Æä ¯ ëÇç&gÖI³VÎŽ,Ê@Õ mz§ÓP0¼AMHBG±N¶÷ª"â–Œà©V?djÁ×O”•Ö¦æµ‘E G‰ráP‚Ìýz„cK¨2˜ÈÚóïlB_ðPc ŸùÚ›¸æøÒÙµâh©Bt§mè£J|çA“æ‹o$Hn}´å£-£j :³¤Ô@ûVFæˆÔ± )Êdç½õL7 Ë&âÛãM²2 •Z3åâ4€›Qt³³ v„Æ@þÑêwóñûCb `°u¼Œ½Ô2ƒ«ÑJìéžoæ¬át ò%ÖíIÿÂ÷+xaAx:P­V[,=k,ÇÑâ“\*ƒpR*Qº±8[;…~-Ñ÷6—ÿ½¿0ÐboÏÀò†)Gq#gàžA¨vÝ«Àaζ+Ø>d(ÐÞØ2p$cüøv$6j§úe=ºž?|ûûáña> øïÓüòºý÷åévÑ=¾¼»kŸÞ|¾ŠmOc~BøÓV¸Eñ~YBD–ÞŽ|i] +úÃ;^bé>c6%ï¤-k¸C»ðwJÁ/PLŒÈç]¬¬†)ç^q÷Dàä›à9`˸‰€¬ãJÄp¿»dœy‘a^´‘Xb«žÜœ·/Š£Ùùpzq×Åö…íùòþê’®yû†=çéoI×qwöxvzñË;Úd6Φçx‡Ã»ÙxÂ拃?þ€ëòyendstream +endobj +489 0 obj<>/XObject<<>>>>>>endobj +490 0 obj<>stream +x}WMsÛ8 ½çW`|i:»¶óáä²3éGvö4¸ÓK.´DYl(R©8Þ_¿ d»JºÓvšP$<<<€¿Žf4ÅŸ-ætzAYu4LéâôbrAg— ü<Ç¿FS!Χ—o˜Ÿ½ñáãòèÃÍÍf´,`äârAËœ``:¥evüÝ™*U çIÿjͳ²ÚEüwZz2UmuÅ‹±4TµRÔH›XꆬϞ¨0++tNÞa+¼•%ã|®I¹üýòçєƳÓÉ×VeØk) +ºVŠ:]•›FgÑ7[ò ,Uƒ•®xiçê„¡ØKKe¶­Âö »™w¡­àkÝøL‡`Üšw‰·À8ø¶Áò‰Dð¦Ùȳ +Ñnq“.4ûÈ÷`9¶!¯¶”ëBµ6RÐàjж!ê +‡J)´uí›H&Nø쇛+š!_œ¸ñéÙäŒ[6ªÎ=ÎÿçsH»öéÏàv]ÓÃíG‹‘ŽL9jZGd ‹ÏºQ–Z“‡>WÞÁäQGäœÓ\ªºÖ.ЦԜ!ä»!@çøê)n|ÊŒ¸pW1‘›‚gø SÀ[¸”ùZ''„KÌ’– ˆMð‰œÖp ·Ü’•ÉC¾,á½ìe—¶ }uxƒ¯ÒuHîãqhqxýðéëã{œFLø ^SíÊÊê.ÒJ+Ä)ð q9)ìna›™5΂±1YDjá¢Z‘,Nš\RDæ)awÌ–û·¾•T(<­5W”¦Q슳#P8µFõ ÃßØU¤Ð½ÅOÈ“æë4Ý\“]¹ŽÊØðgÆÜ3¥\[­tógÂ,aJs˜ŠóüŒ˜™8âv‚@¸’88­TšuI£ÖÕy6>Ã{aog +Iøk™ü\{€Ý9I¾\oý†Fº¯Ë\Ôètê!&úåÆGz™q¨åÞEÝD_„Ù ÖÀ´5(>Ç€Xój&¤pÄ! SzëC¤ûOÞq¥õí‰÷£ø‘”å‡qwK€{v©ð–£By–Ù¨í–ÃÔT)3äwÖZ@#Täô;WƃÒ\]€°‹¢ÍëÉìt1¡;|¤_­†r6w0Ðp¯X\EîÒ_œY¢V8 -Py¨š*I‚PÙW+ƒ’„ORõì.¯€e ß(kÙ©¨³Ò'Xàĺßðã°¨KÏÐ*îa¨óòºfa\ìáOiO«W¡˜„ÓðÇ +­ N)¶3Y¬¦~Ö3dÁñö !ô'.NY§q» q QÅ6H. «á?ïž¹È[T†Óå„À•«s)aÍé¿X;p BT{>ç÷¾6±£4’ÊݽR1"æ ÷ÎÔaê7( Nc;š$ †7¾yB“×q£QW•Ê Ì"“¸MšV€õ'eÍåZµÜÏ k,³&¾û]„EÁÐ_¸ H“APùku•!¢ƒ°óPDØaH(8pàë|i]W¹Í.¡ëI}#@V‡T\ðd(¸xfÉžv^®½² ÆMiÐU½½Ã‰rII€92ë€3* 0`8èò8£5˜/Uß@7#” ÞApÀS¦yÖb/9âaæYãóoN ÷>ó–>‰Ð¼˜¸M{ߘ–Ò +½J`rwÖ‚Ü6Œzª°îõß6‡³›d4ÈAÑ@iœÞPѺŒû‰²°KÌ6•çÒG+º5Yãƒ/D¼12™ÒŒ$3²šN"ójo@hÌ…ÙøÍëŽ&< LîöÝ‘~AîØÍ G‚5ß”©Z­ \çÂíN÷ÍŲã6§fwV!C9:y D‹@ºQ[ô»Lç%ÁŠ§eîW²LÞû‹_ûœæ%0³b%‹ò"ÚaU³ÆxƒŒÈ¤Ñ—wwqŠÇ3ƒvB².<É¡;}=,LHÍ­Yƒ$àf½ôŒÀÏ4{ýø~BÜ°}1p @ôÐBm‹öR¢‘à "¬ +íj¼/ˆÇcÜ…êËï܃©ñÛu.® ÌÞéåWÅÌyìÞµµŒ!ü©(2™ú†¯™Ê¦üÉJå0Ú2ö¨þb€ž2¡[9œûùÝñ*Ü~j§‘áéÝ w'˜¡HiNÝ_I½Íðë»ÓA¡4:½Ï€«>/XObject<<>>>>>>endobj +492 0 obj<>stream +xeT]oÚ@|çW¬xi"‚á1_TH!UWíC^Îö:¾r¾sïÎ þ}çŒTTdöövggfýgÓŸ˜’Ý,(¯GÓhJ·q-i¾Lð<Ã×2•£ûtt½žSSZâÊb™PZÒ§SJó _1½iHñžÕ˜ÊVç^í"ÚxrmÓë­Ž´¤· g¨öí’LIáîëöÞ[¡R³É?—Ÿö¬é%¥Â°Ó_>*]¦¿GSšÄ7Ñ 0B÷š„RQŸ-¢yˆ¿Š:”·Ö²öèü£mÈ›®ñÅŸ·$ž©±Æ›Ü¨+:T2¯Hº.ÇhÆ—Œ:eGú)õê–„.Îp þ’ÞD·=·ùN¢£¯Pc({"‡*áHÐ8Ȥ’^²a’UÑ·u ç7üo¶“"üž5Ô|˜”B¿+à2MGx‡Ø±Ý³ óÚ#JŒŠUƒ ÕbÇ]š¬Å5¸áêI‹ÿñÖm^õeá$ÛsºÓŠá +úŠ0w†út¾êúAeê†Ë»†"áýºþÖ@êpzEYë»ü>˜³ Yp •ÖÔg`dÁ’AdHÕ˜›0-ô‘0$HÚ£„kÙ]A±—úÂ`ƒd-Þ¥î`E´•¹5ΔÞÏOÖƒDÍç‚÷ÖýTøa³~…½L]ƒÐöl5{ZKçžH+±‡©ÚLIWA<yb¦”Ü€NÇ$Âú‰sá¡,[iìßÀ<=[…ÉÛ ©hDPÄy©µz8G×;òq,|ky°JïÀðvƸÀncÍ”qàñ`ì.P‡ÝÔqP„÷€Hàr¤aTO• ÝH.}ç¢ëõ²·ÄÉ2Z¬V/§ýßmïïèñ³Þ׊D“!w’LWaßS+šÂ€•›Çó<™GÉb‰Ng‹pé)}ý™œùendstream +endobj +493 0 obj<>/XObject<<>>>>>>endobj +494 0 obj<>stream +xWÛnÛF}÷WLý+€ÄH²l) iÀ@§µš¢€_–ä’Ú˜Üew—–õ÷=³\êBÇ}h.–LíÎœ™9sfôÏÙŒ¦ø;£åœ.¯)«Ï¦ÉjE‡¶Ä/Sš¿&KZ¬–x?»Ä[+©8û°Æñ) ìàø›Ooi>¥u»×Ë­óð9žd£µ™Ò%9Q§‚ÜÎyYS&ªÊ½^?{óiA³Yws2_%sÜ­7ÊQ¡*I¹t™U©t´1[ò†rC'FÈü$£é.ØÇ‘­±dZOÛð¤¼Ã%°µF— ã°¯§ÂX1¥  ®ýA +¥=™‚6RX?¦¶TA;Ó’@¬9ÛóŒçõþ“ÆšT¤ÕŽa7Ò +/“h~~,8²_2ß"ô]€Å„£Täüžù¿HÍ£¤Z< håÉ™VçcúÞ:8ô…'ùÔÈ̇³ˆ²8Jz”vG•ÞïèÝäþõÀõíö:œnÒÒ¹„n5’Wc©*IäB{QÂ7ž¶Z=ÅŠ CDBqG™A…2SKÚ*¿Ùf˜ÒP¡Ö«JY°{fëBÞ€½6Zycƒµc~ijˆÉ”VÔŒiAêE”OÞÊZ +GTþ  ¹LÛ²äÏ„Fž+gPÖªq`*çí.”ò„5;$½–(/.Á§ViLWé.ÿ ý >dxÖ:9ˆ8ÁÔdœæ£Ð°ŒÚ)²Ö¨Jx暆_Ü+káÈ’¤>…ÀÄý#sÊUQH+ÁÖ€EÓGϺˡÈôYéö¨–hŠhÂ…ê}÷mð§Îò]«oïhÈw§)~þí9¿C£F_t?R:«ÚÐ ÎTÂ*wÿúÔ@˼ë ÔHÉ wî>îqïF¿'0ûvâÊ¢5ºjq‹:äºBj ׎{Ÿq?ijÀkfóÎ’FòÑh1Ãì¦Ó›Ð ˆ;¹rÀr‰R  Þ\àŠp®ÿv 厎 –6Æz(ÄÞmˆÊrÖªx Ê +»7œ¤ÐŠÿ~×HN.ó:\gn—ÐfoßÔZeé)¤ð­•Ï8ö 4æ.ˆý!#â`Ä©º´8@ä(Û'“O‚ŸŽΛOWQ¾G}¸C]Q'²?8*³MèÆÊt¶úQ0êéØ×­ÆɆ`"d3è:ëBÞ"<ÏçÛ5GÜé! +ÁFþ13¸ÿ˜\aKÔJ#Óäò¤úQÝiîÕ§SdN6ÛB.ÛÊ'ôEÂ摦h©¡”ˆúkûæ?a*ŨJé©2tÀ>ð#ºU¨àüYð°ÀΡý˜• îv£² wÔÑÍÇŽY¥xZÁ?8 ²Mˆ*Z…bZŒ7ÐîH1ièëÍÇÓRhg­ƒŒþˆnÁê*p¼D(Û¯QÎcÚÙžX!ùQ÷‚ƒneaÆÔÆlÄ~×:QJ"¯‰7uS1pž¹ +¦%2Ò·P,¡½ÜÅ*O +BÀ—+ìéï_ÅÒ'¸Óøî\¿ˆýOGŽhþþÕìEo_Œï6ÖóIq—˜ÃfÆÝa¢í'JØÿÝ8ncÇk`˜…a-½ÅÜËZËÛÍ ±ºÝbÎÃ1Û¨*ÇAnTèƒjÍË9þ•ÐœðõÓa+i,¶{n˜XÖ¼b€Ð9¥¼œJ–Q^ÿcíϾSÉW»¯]fV‡ï/WWÉååUøóŸ_zËE²¼ÆW.>:_²ßÖg¿Ÿý \eœendstream +endobj +495 0 obj<>/XObject<<>>>>>>endobj +496 0 obj<>stream +xU]oã6|÷¯XäÉbÙRü¡(Šä.9h›61p(š¢`¤ŭ"U’ŠëßYÊJR¿ô`@_\îÎÌÎÒršá—Óª ó%UÍh–•%½_ü3^f´ÈYNór…çbž-È3m;Ãî·Ë!v¾\fC,âSèÕz4½™SžÓzƒ‚ËrEë:íѺßÙŠiï:RˆV1ªjËuú·l©R–jG»­ŠüÊžt$ÈYÂ*UF³xTék¥º í3µÞ=n)ÛgÚicN×f4ÉϳõÇ•jc'I©Â>DnPΘÐ' ÍSMzáöËl.{mÝN` nm#ûÖ³à`P‰áú–=²íé–+_m±î]÷,w&×Ŷ‹´qžBô@}¨zK/¹1©¶ÅÆ#à;QE2XÒVÂlÈè¹øÕ´†ÏHoPW5X}I¢ë ÒÆ-µì‚v6 ©h£±tK;×™zÀ +`G…“ÊȪ†Á;Áz…øˆâƹt²_í<8ÛZ0m¡%]ZøžÀºz‘fF™#ôéÚå¨nÍ¡òº`g»æ‰}ßד3ÆíN’5$ ã HϪ³Q›ƒi*ã×Çͼâ½è¸igRª±äêBò&lguÔ*êWÎhíè½i-éš¹Mc0²h œ¥¿ µ€úˆX«Y„Ûˆ>H˜t0ØÁ²kzƒIM4žÖü:µ]oè÷ÁK(‹.ztqçud…–Ÿ—†¶2è\ «ÅÞ´QFq„ëA5O껡셌mžÍÏ š‹¬Ä#ð{«k*ÊbYþ‘Ô~Ÿ¼;9£»?ï?½<%¢ï1st}ùéÓõ=ŽyóÕl5קCuœ<ß”ùëýÝÏ?þ†Üß”ù]¡É@b•È€ÄºŸ¢ŠCH>ôûAíCì]4Èðê{Võ$©.¾·8ðî¬Ùgt¿'±aqYÃʆÿæýp0½ÉØG çJ[9﹊‡89zzS’¯ÊlyqAÅyžËE:°.ºº¤Ï8@ Fô¥ƒk¥Àdˆž¬fè44E… & §¢„ÏWólµÄ¿„„¥|º^~ý ‚ôendstream +endobj +497 0 obj<>/XObject<<>>>>/Annots 246 0 R>>endobj +498 0 obj<>stream +xWmOãFþίõËDì8„BÇÁ5*Ç¥$ÕõªHÕÚÞ$[ì]ßî:/ýí}fíä \_@¼Ø;;/ÏÌ<3ùzPß {ÔPVt£.Þì~Ý8HNO¢. º=ü.!•Dƒö© )ËSÿ4‰z|6EýöiwÖ;‰Îp– Ïp¯žø,ö¢!õFgÑ N{ÝntÚ>ñéógœžœBª‘Ýêíá>ûÓžðÍð´;ƒü Ødïøö€øìÝì ¾Á͈z0<£Y‚Å›ìðnFïM)”¦ûÉÕw4û3ˆ'ÃF¼Ó?A”³üp¬½5yyet#tBIÒ +õ†0¡ÙJ9ÊMV—R{ÊŒöPìHé…±¥à«ä UÖ¬U.Ih‚õGcœo•_Qa–ðÆI»V™tÇÄ/Míɯ$i)s‚2Üe'ºÔIúÐÄW¤hì n°¸[–ácËfA+ï«·qŒp‹•q>ÊÒ$ÊLÿUhDþɇ¬) +M7t[?Ȩ5Û 9 ‹'ï +HªŒs*-$éd!3Optƒ—"g/DˆyiM]Ñü±²«/‘xãhv5‰Çèñ^饛!æ|/h±ðÒ†ë&-ÔRxc7dej œ÷›Jz˜«Œ¥<¦J8ÀóãWþA9¹:ânQņӀÛ@Þ"¾}ËUee¦„ç4nh¼¤"{ à¼1µ%ùTI«¤†¾@8‰œ ólà˜C ÷>— +ÞdÆB!—ˆkNó\…§=À6¨ÚVÙ~BfÀ²‚'Ò£¥Ë¬J‘½•´’2²$…Sˆ/‡k®&kJ¤!x!¸˜Šç)€¸µ† óÆ䀉˜í9t'}it$ŸdD_Lh‹¢©S¸ +äCzžÕ`#·Âz"[¡™Û BÊcN2Äy5[TŠÍžÑ\f +çzvûéç»c*œ°UÐsvíÖͬÐN  +UIÑËþä^}JpÚtM8—ÉžQ†HÖ*WçíÕBÑ6 Ò^¼¼ Ø ­ oš‘·"“¡qµH”åãJe«€ážñB=È* ÒÄíd™ÖŒ”ÿkQ\΄œ° ÀÚT¸*«B¦Bä- Þòia@Y¶D²­¶mIqà ~f7•7K+*ø½çq%¬çvo»[ÔøG{•ªûN.Ä´„Ò“MI¢5ªÕèMf +¹2=oXZFfµU~ié÷ çj)¨é +ÅÍœ(SpQ8Aû¡b—18²äаhËýNºD¢« #ðÒ³·­¹-¶¤ª}Z/‘ѯ‘Í"4D&âéÕýx2›ÆŸ/£ëß®¼ì](†Ý³óÛ‹øù§‹ËóÉEoÔ?ý¾âbk†>Zù²Ø»¿;¡;vù ˆƒüš¹Óp¹Òµ£;4Z*í²ISCPïÿuÀ52vgKÕI•ŽË…‹»IÜ@'£Ñ0 E½Œ»ýQò=ÿc(…01ö£ä’½ ½¾MÔ\"˜žÌÜßFn[ÃW+‰¦~W+ «ç|ôb7Ô,5êÕp£´†·ƒö¹ ºkɧ-g®•l¥$ó*f;»B,0FÍ#뼿þðÇôwŒ©¥BoèAn8†îS²_¡¾â,h»õ¢¶?ý|ûq>Ÿ~™Î®ñ÷ªÆÄÐþ +[fôTzµKÃ|*Â3z>Ÿ‹Ñ*ow›Ák½cÝN4!’<{àjÛ½;Wy‚d‚I=0vÉÁê0îè]A‚æ–Xz0`ÁÞW[Ý{0¾,ÎWŠ%ýp«Dª +´ùÛH¤fÝìñÍóÝ«ç–gG‰â˜.îm©WmÝÞyD„ÍŒZ p'󹱊7.^4]NÆð»h‚±U„µiƒ?- {³æjCȵåMj¬€6ô]3Îs¹R¼•Á1VÞR+JFN>²©}*z5·P\ÚP)1ÞÀRÌãXDx-É"^'}TXÈGe³Y E#¢ %»‰„˜JÅSÉ›PzøHÐÙrÛGQUPŒt?~ÿCÓ…mʵ[¯©n(1? +ŽwP¸Ø­óÃ$"† »5õsˆŸ~ÅFFã÷f®Çæ퇰†×/õEñÍY[¼Þ)uúüf¾M¯Ý +‚ÃÁYãFoÄ^\Ï~9ø9ý-ñendstream +endobj +499 0 obj<>/XObject<<>>>>>>endobj +500 0 obj<>stream +xWMsÛ8½ûWtå²N•ÉèûcæäŒ'S©²ïJS{Xï"[Æ$È@;š_¿¯AB¢äì¶R‘,@w¿~ýºùŸ«! ðoHóg”•Wƒt@Ó埓…|Žðß2mÃYšþèÁx6I——>¯¯>}™ÐpHë­Ü>[Ìi, ´Î®×{&þ®2O%+£ÍîSÎ[m´×•¡jK¯ÊêªqTªÎ(«ŒóÊxG•%6MÉVÉN—~\ÿq•À +.ͯÇ)ÉoüL†ãt$KbÇr]ˆ­Åá¬Ê™”É©q,vü^ùþ£·=RôVÙX Þl8«JvX-¹Ü°•cŠòªTÚ󃓹çk_ц)g—Y½áœ +åÙ>Lé‹ÒE4±Á²o¬míÎlë¢@À/دû. ‚ÊúÖYíI;±Û3« +Ë*?œ¹(w´NAÍÒ‰€29á4^¦3Y’Ý™=Ô¾ÚYUï¹Ó@* ÄôÈޮؾ²}RÎÁ³|ÅX–% ¼¡7ìßÃá¦ÈIEõvÀ%LÀ Û+³cÒÈiÝÝ™ÒZ‰?¦d)Ävl$å-2Eev P-ɱsB˜>¤ô¯¯‚ ÕÖ6…}’å?„ °}.¼0×ÁepP5…?Ã>ºóïw0N[?}YÒ¸n)M)™ÎÓ… ºª›qÈÔ©†éd<¾EøÆ®ì@®­ÂNÚÚª¨Ë +u®>_ æ:czRÙ +U|U›ê•Ÿ?ÆÐfé`6sMA·nï†ìºoÀ¢{Ö;YùÊùµôáqMw·@¬ Hht¼åËJ ¾LGþ„2½u³Ô÷ïLþÍàÏ(îïaÓ…>¥ @±œ#ýrí_ô„„t‘ýDE¥r³ ¢7í÷‚=´€ýLÉÙŠRäP”QD¬o¼ÎÚrvç¹üE¸eË&ãW§º¬ >+`ݹ¦Å¤[Þ>EÔ„•Õ;mPÚ(ø8ß5&S†VpÕm5¹Äö–üʨŠƒ“‹¶ô°úÇÓ/ô¤knµî,[÷Ú@"QŽ¥ÝOTÛ*o2 =K‚ÐF ‚ @[ÝäjþQâÿ©M^½9jYk!`ð¤ªò¬Ê6K :dDÉœÆd>V^$Ô[yÛdзHýXð|Ï;ZD2’qýU„‘iõðYêÂ8éµÄC:LN>Üô„çRuÍÊŠd@…'ÉæÍP…ÞèHà î¾H¸XÚC>Ùâ¸ÈkK ‘õ)ý*- +yl3Ý7M†qe¸ZG¶LG-gÚ1N¼˜ê Ì^‹<‰¬@¯Šª<|¯Ê¿ß=ÑãúþÛoßémÄ•ÿ?àÁqáX§< +?z\°ö9-}7öÙÑÉùO«4´úzŠBz-f‰Ê–y•X~Õ¢Ý šJø–2&ò9JÓT¾Sât,õzÝ*&Ód8'“é,™/–ñï4˜¢-IBújus4t”ïèroZˆ.+s éùÝ4[¨zŠ6h8GçåjÇÿd[‘nÃrÞ + ºíhÑA]œð³‹Ç¤pÙ²Ñÿ úr)¢<² мª¢ }î@nC½(•Òà;f(LnƒÁ Ë`%¯Bôp¢í|I4T·èŸÜÛR<ºÊßµópAÑãï÷÷qµ‹—â1˜ˆç." "(Øìü> Ü3üµÅçGი»Ÿ fYpH“—~ß³ÕJ‰l9!*§¿­©npÎáçë¶Ìú{ŒQ(?l©¶ÏÅNP”\y°ÂcZ*»i—qYkà* _áƒ(ç°U’#!øJ÷«[ZÝ>\ÔÎ}µC7€âÕIŒtu‹ I‘!€L9¡´µ!ó œ5kØ +"æ…M‰è,š“T!Ã{ÑAãZÉC£QÖªƒõ¹.Z +ÔB‘”Ûí!äæüÉi×`æ"i^(ƒªy¬«åèÝt9L[Åï»ø»Ì©X2$wê½W¯RÁ(ft 0øÄ*L#¤í3`%ü ù¹púHct¦ÂUa_ +diÛXà‡.'tÀG*!ß}æü˜7]ÍGóF£4tä–<]ú· ’²Ä`Ñ1¶•ŒÎqpé‘+:vP’› ƒí9¤fƒ€^ª;áA˜"ƒ'Ô[ì. íRÞm0ÅX”žF‡U[ÈR½Pî8öuãÑÙ]ÇÜO1ÕIó>ŽÄ‹îÕo8§³å’f£q:¶ƒñíÃç[ºk Õß¼jHPÉp¾»“ù`)×õfèÉ|’Îg‹îEo Û]_ýýê¿ßÆ´¿endstream +endobj +501 0 obj<>/XObject<<>>>>>>endobj +502 0 obj<>stream +x”Ýn1…ïyŠ¹L#íÖ6[¯é$¡Ô¤)l{[m¼Ü°?±½UÚ§ïx UH©‰ÒŸ9ÌãˆÁ…œÁ˜ƒ¬G$%ÀÅ$Í 9þfø5 +VC!ïRq¬ÀOù±eôø îá/®˜£·ó Ð ŠvŹÀ³EØ!Pȳ«¦¯•)nû¦øÔ4¨–£öìf¹¸»€ª¬”÷«SA—ý«ãø8Tʶ®Ë¦dÞ£V7à6 +jk: ])”ƒÍ€ þ/a¸ëûB=öʺ÷‡¡› §ÌßDž9„$ÏË{ŒíðY*Îa'93ÝTqÆìUŒ©|ˆc.ç58;<‰‰àm˜Â]pQ7«6hL¡ðž«²ÑÍÚ•Å´m˵m¡oªVâ̧ªÃ® $l7ȹ6ÖÍM¹Ž÷K#øT¾†3ÿ¶uåé²H %ÊgàÄøD„qÛÞô[§»­zŠšAcyħÌ[s]©º‹BØ Èª53‰ÆF!Yòµ×q;Äîü~m cÓÃ¥3½t½QÿÛß>__Ây0ôH8­þ­0”^uîã8fp¯MÃ}ò}w¹—›Òœ¢y‡‰ç,±ûÑ\¤|2ŽOvÇrz3›Â¥ú©¶m§Œ…èÈ°Ô’½6ÉÉį™—Û1˳4ç7)ÇCü¯ŠÑ—Ñ=}Cendstream +endobj +503 0 obj<>/XObject<<>>>>>>endobj +504 0 obj<>stream +x­UQS›@~ϯØGíåâ›Nl›ãØ`_¢ã8Ì9áHï«ÿ¾{Lˆ€S§“I†Ì.ß~ûÝ·{¿Gü\ð($ùȱ µ)øa€Ï.~%ƒ¬ +œ†Ä»^oÀ5 P®Cm·+@HO ß{_û"}ý6B Ê°¥€=8DÉÑm4½º<Žž0ÉK²\jû˜VG+ð\Xr­N€‹”'±æâ4ÏþÅ’B¤ + ‡<Å‚Œdž´HÊœ ÍR“–ðLQ[¿h¸;ÂW4/xö)lâGvRýXÄö±¸çÜÛ5µË kj³hy6Ô©_Qÿw:0L`r}õ0ŸN°›´ÈclÐüQZ–‰.%»;®™ÓQ§³ÈsÛš£³ÞúeEª\Zq©W…äš3e$Üjƒ[û¯ß"|ØnXJöÌ•ÑK-™ü<Øÿ º ÷ýl),_56Ÿr¯{°`š¢±xÆ™„ó­H¯[³4’¿S…Ð…x@Yªj èNæÃCèPª•Y¡ÙèÛç‰öÛ¶VìÏŠIÖïêyôÓŒ‡–8`…:æ²f\C²ŠåâÎðQ”ëµ¥™Ì¹ˆÍôÕxÆT±J8¯RãT?“ÛÙôÇÄ)OŠ”5 +§L6Ü­ql!Œÿí?Ò5zeÈ´‘;´m6ÁGyüŸ„D}VŠÝˆUù«YGµ\nŸ^°Y— +–e–¡a7Ç¥8¨a%~¿†må >“]O'_†àvM¬_jöïa˵Ûl>´Æb`ôúÛ16oy7ÜnXâ»6žúõ 1?¿º8‡ {fëbƒ^‡ï%O™iÈ"AXåZ36WͼYÛÊ„ýÀ·âmin¡jS_F£›Ñ_”¥1Cendstream +endobj +505 0 obj<>/XObject<<>>>>>>endobj +506 0 obj<>stream +x­UQoÚ0~çWÜ#–, ™At+S­ÉöÒNU° ¸ +1uœ¶üû“Ð-iK'„„9û»ûî¾»»m¹ààÇ…Àƒºl9¶Äulü0Àß~‡Yið;Ä&/¼C—„Ï_ôãÖ—o]p]ˆgè„Ä Ð³ã@LÛãÞè®Ú)Ïæza‰Œ šhΠÈ•ŒC®•ÈæW''ñ âGË#¶HíßÃqÜñ*³_›‘åvÚ+d³=È]@kû‰tÉåßàY‘¦–æj)²2Ú*Êm't‘¨„â•Ü®`6)(=yaüxÅ& IÅ<{/ï°)ÆU¦´„9×{ìÁ·¦kÍaãö^èè…Éw¢´!bѨ ž0®j›ü?KWS–ÉY…&X,$Å$-–>/XObject<<>>>>>>endobj +508 0 obj<>stream +xÕVÁnÚ@½ós¨RÅ׆öD’¦B" ‚›Ú¬Çx[³K¼kHþ¾³¶!‘(UQ…†±ß¼yïí.÷6´èՆЃN|Ùh¹-:€ß éÚ£wŽ”¿ÛsýcÏï¹Ýc…0p½ç¿_DóëÚmˆjtCˆb Æ­D¼9R¿‚I‘Ú + ¸’I&¸;4DikPHÁUŒ M.äRd1æÀd|¬*ŒÆ,¦Á(ؤ‚§ö¢ÐH§ÑïF œv‡ˆFqSÈXpfvÀÊ…I]B%.‘e ©‰"6$ŒVÙc·ñ’‡@v#ÀtpæqE“Ô¸ú •>°å*Ã3b ,L£A7˜eΩ6¹*V€†×©y¬x±Di¨»VKÜXÊÆç×½˜Ž×­(\oæj>kÆjÉ„û…Ä*¸)rœZÆû.8[î¿£¨ãUe¿Æ¥hìúÎ>QÐ¥ü8VͼwÖÔˆ0MÕ¦9ÔÏ;9ûXoéUȧÁIÿÔ“ +ï¡œ ¥œä'>€* ( +ÖZÛ4$d‰äXߣ«N[sJº[{†ãóÁèzLþnkÌ) œ«Bš3à™ ›ßdV´L-”„ +$[Úð²ÜؼJúFÁÉlv>/XObject<<>>>>>>endobj +510 0 obj<>stream +xÝVQoÚ0~çWÜc»MBÂ^¦¶´R­¤ÝC;!×1à5‰SÛ)âßª&¨/Ó4P$ˆÏßÝw÷ÝÙO-,üÚÐw ç[V×϶º¸~;øH‹|Á­[p¼Ú½Úq´N.`Û,Љç÷!Xôèüúb8ƒû#*YÈÍI¤à#h3PšÄéýñq𼄎ãu]Ä8¢+"ïü_ź[®cü»‡ƒ +s¤³kuŒÆõ U(…Í–JŽáøE(çW“`>š\N¤¢˜|f² 4âÈiÈŒêL²—7;q5ЛÍ>Ãzņp W\UX@Ò”©€'@°4OSº ‘Aœ) š<2\ "Ý€XàfV†Ó¡$¢YD4 a'Ãͪ2'eü™…mx`”dŠ„ ¬yáüÇ*{PÆ3’¬ €®}TÝÜg*™ÊâÜZ›êŠ…žh|€$¯\“ ]¡)ÍC,™ N*‡$<ê–{¶JÈÓ?»¾-*ô¦ŠZ$„¢<˜©bÃV[û²Mÿ®A]_ð) Cž,Û°ÜÎÃFcÚ#¾Lb“•5×+˜Ï`ÅHÈdv%å=w·ÓÑðC}ü©À|ˆ­¬ªŒ«&ܼ¿êq Öˆ±Ô°i‚¤Yþ;ê'”Š,AMþ·mÿ\\M¿æS¨¾Þ‘Xb–µÁ^ˆÂöÍø+Ú óç6j‡›±²Õ˜kƒáŒÀn–‡ÚGË9ç|n70¾™Œ¾ ¯ëÓ +3¸òÙY©YÙÛM 8IzN=hJ$‰qT'ZŠèŽçÖãµ › ðCEË÷²;¹òq)E–¾7?Ým¯aI]¸Ãôç%|'J¡§°û> _Þì¾ßõðún×7—†Ùéøì†Fq"exÂ~Íx˜¿ÎÖ¶Ó·¹éödÏÏúžwDé}2‘\­­?•Ôµ‹endstream +endobj +511 0 obj<>/XObject<<>>>>>>endobj +512 0 obj<>stream +x­U[OÛ0~ï¯8o+Órk.ìa +¬Òh7Û Rå&Në­‰;;UÓþûŽ¤AS±ÑªŽŸóù;ŸÏågÏ ¿6¸>$yÏ2-D®^¨V‚B†a‹˜ã \Ç1ÝÆtà›Qkk!¬Ù.­­íšÁSX<ÃŽ6 ›óNâÞṶ q¦¸ùaqªQ-ˆ“>‰ã&ßÎá3‘òž‹ô þŽN~ãd —g:è׿®ã+§¶Ø‚ݤ<'¬€‚䪂%<¥ KÁŠùÿ V’Š×ÆÄHÈ’”ŒwжEpBÓS"\_NGãó Üö%ÉaÉç¼8Tk–KW1WIY z{ð8p ǯqƼ¤G°TV9™-×ï \P¼zt+ 4¥EÉÈR“ «ÕŠKš.×q¡ Q“;”¥ä€–­ñ%)õ΃/$ u "‹7¥"‚Ç·w9£áùJðœ!´Ùì·ôN?cgÇu'K†$1jE5c‰–óT¾¨ÿjA‹ð(§¾NF÷õþsµâ¬(ë8ŸJ£9ïÈÕÓ«³ánاX`›uïB½cÛß«³–ôŽ.;bÞ‡"ïY™,àŽ,+ZÃX©6\Ïø!&ÑÀ ]]“Ð|LJí<ÕÎuú©[Ǧ£’·µNˆ¤`)ðgvïx¯¼GCS[C±tª~j¿ßáò§æ¿©$Ûô·áDú‰Œ.FC¬¤¹àÕª-ŸŽ¢QʹÙâÔ§>ßÄö@ènCJìZ³ª¤Éñë_§0[«néš6"ÅçÀn¹nTý²mÃÉåôêì!šÆ(hF-ª«¢õmin5‡=UQ)Oª«L‘ª2D…¦Röeo—zE•cj(¦P“–:Ä| ÏíáðzœU6AN~’Ÿ¡ <”E0*;hïK#1_.ŽÇð $¥¢¦6cÇöÓ"ðƒÐ ýA3|NŽa¨ú _Q!á¢Âî«Ü ­”µXØ+pNµ3H áž`çÀ±Ÿö]ÝÁÎâÞ—Þ_ˆÍUÔendstream +endobj +513 0 obj<>/XObject<<>>>>>>endobj +514 0 obj<>stream +xÅVMoÚ@½ó+æVÕ®m\Ûô%"i9@Ô`z Úx×°ÅÞ¥»ë üûŽ?’bˆU²„äÙ÷Þμ™ñÏŽ þ\=èäÇv pÛ? +ñ¿‡bV/zQÏŽv_ÜÄw¸.Ä)bQ1Äqˆ“ît<ü2xðE‘ÏKçTæÚr¿_Ä?ð˜ßCnËí!iL»Ä £€±„ (O$e âbKF(SºFx%¶¶!s?¦hpÉÙøÐÁýh>Zù£kàáFt¿¹v%Ú‹l¿¼w‰?ßÝìÛèã"•ï!cÏ,ÓÐ"(|‚Õ0KLŠŸ]Ì.ÚŠ°¼ Æ›ÇqôxDáÕÕ¬ ¥eN„3à[O/†ÉøBäLØp³Ä¼e@¦0Ý4Ùo³¶“¼npZò›ŠfL,ç¼ÿ€ûí~8¸<,·T&E™Œß†¬ŒÓh*Rô+¬%ÇuDÿ_ð c^M2Míý&‘ûúkÛü³n»·víÔ*lÓ‡SÕ £ê:f¯Í§“Û‡WŸ3—É…Pz}—}ËÌciØ'àhHYdžàLÀF°r›%1UW¸T®5Óš#öŠ½×Je—¶aãx8º=|£Z›á9«cöN›ñ i +g¢¬x²’çì‰Ö©(dDÐØógêzLˆ€dIÄËr^ÂÞ ó5ž†Y¯™Ã•, ±gÞŸ0Ϊýuøš«È2ø'µu¢øÚìl«óÕ¯•LyÆpàümÏ‚óÁ—÷+åŠ%Fª—cðQ³]ß³ƒ~‚Ðà \Š“ëÑÍ5 Ê(׸ôásÁiÕŒ–FU¬:ý*Ô¨"1…bÕ’õC߃?H¥–õ»;_;¿82t'endstream +endobj +515 0 obj<>/XObject<<>>>>>>endobj +516 0 obj<>stream +x­–ßoÚ0Çßù+îmÝ$²Pž¦VÙX¤–j%쥚PˆðìÌ?Øøïw&©ÖVÅxB9üõÝ×çûÝ ÀÇ_ц!›ÞMÖûø%„ €¬Ä/aAFÀ÷|߇¬¸šOÓ¯ÉÃûì'FÚ(\؆ޯÖbC0I -äˆd[ +†³B +JKÆW°¦9¡²a<íÔ™§Ó,oR‰•àPÃõ”eN Î•ú#$9 +6–4WTBštÈq&R˜ú<7XYŒrèø~Ÿ&Äp" +³¡\SKS–x®Z0ü+A‹ï9ø¶x®s›©²ÊW.‘Å:—AøáÓbUŠ¡~ÑKQ‡g;!o‹È“½zœˆMÎøÉðSjÕœ¢Ýˆ¡µ›¢9ò²OòÈw$yä£äg~¨sBì ^î4U”FIþ­snëðɱY—-|èúw!ôšÊ…bD¹h‰™Îoo‘÷Rûï÷€6U³4QN?OÓYöà¸úÖÐ<Ƕ÷Ò:®\ƒ|§0¿UF·f/$«õ×R”¬¢ØPõú‚ØWÏÉå2ü +üÖ;å*`G;ªOÒäÑ:¾éØŽ[¸ÆKá’Ôå)G—;ûfs`“û»^¼&"nçˆ Š½p<Æ™c?JÌ®ïn®!¡[Z‰šJõKúO‘ýÈÛ©c¦¥)l/Ú¿)£häEaŒÓ ~ÆvÅç¬÷­÷(If$endstream +endobj +517 0 obj<>/XObject<<>>>>>>endobj +518 0 obj<>stream +x­UßS›@~Ï_±Ú)W>´£FÛ<5b_´“¡p˜«rGá°Ú¿¾{@И¤Ž“aÈpû}»ûíÞîï< lâl`\' >8¾‡ÿ-| +i}à˜¡«lêïùÁa8øt⥦šÝõ=@¦ a¼“È,â.GÃÝ𚺭©¶µ‰…Ö;óÓ)Z\‹*›–<)4¶Ú…©T3VÀ’µüÒØ]^Ë'Žæ½ü6OΦtzNàf'—\(V” $ܳv¢”³Sç"•Pª‚‹Ûòf·ª †å6„c©Ø>”ŒAÌÓ²ˆr‹¨G…bÅ¥ØûytË€š¤Ÿ%Žm!‹G||c`&¤²@לNÕS®Ý'<Ž+!‚!/ïj<ú¥.1Ý= k綂‹ŠUì%ÐZ²¯ÀدcŒÎ çù +˜ùèëªãc¢ØJæð“kqæ·Löf·—îŒ' ÓÇX†V¶E¼ÐíûÙhø¡¯m·jAS"ÊЖ[W?‚þÚ¯l¯ ¯Fãж6×Õ2 ~É´/—•Hd\e ,yžG7ÆmR(Xwý b™iò–zC»_Öíþ¦¿½I‡¥È•à±LX{yEÙFë­œ,dxéc+5&ÇóûNú•í\êfÄR(œT8\þp5Ã’¢Øgå~¿e:¸M £»â¸!™°(éóüWëi¦Ã*MY¡Ijè|"­ þó{„ÿ>¡ )Œ¿¬½ ^Y›Ý.¢Þпî`Öl•FE†ÅzšOrM½–.ðª¼ÁE»h~»¹¨c7ÀõöH`5ûëàôðpJ³{™ë½õµâI=à êùµµá™A½êTQŪ*X·ãáªv}l\v ‡ƒ‹Á?41“endstream +endobj +519 0 obj<>/XObject<<>>>>>>endobj +520 0 obj<>stream +x¥V]›8}ϯ¸]©Éƒfß !«hdÀ3™jU!ÎÄ[‚Scš™ßk>æCênÜ6QPBÌ=>÷ûëÈß&Ì,¸šB~¦¦1±ÀvføÝ °ydôçr +¦ dLp¸aÉ?Ü­Bâüóùò/³ûaXrl^a-R|8eEÁªG©„¦b9/(ÔR¨»öx÷,)d%{¬hg&øW&$ð=È…$ðà@³‚ŠI‡1LeüDÍâÊúïIøÂÑ:ÆB¿QÅ€1ôtº*×=ßv.–3±áÄïý8]…Ë(5 ó=–°¦Ý¸KúÔ”BÎöõt"Ÿ$þÊ%ã¨!ã–ÿžÑ²¨¡ u.Ø[„M”Uت²„U}ÊêšaÓªœb«Àž  OÙñTÒmù|¢j"?èRâ#XnGK~V·ÃêìˆZÔ°O¨øFÁ§>ÂùÀòƒñ:„ÇNÌV’7”’û”|Úøé6Šoâ’Uvôd ã -¤^&¸HåÌÅ$¡è×ï{öNé¢ë²Fu«­^·„´ +ß®µkÛàVÏ(šjˆ¦ª”¥['·ëþ¾—E¸«0“x­AÈ`ÇL>/XObject<<>>>>>>endobj +522 0 obj<>stream +x­VaOÛHýίõœ×NÒ$|„B¯‘JšB¨®ºœÐÆ^öήë]¸_ovr!Tº½Ì¼y3ïÍþ{Ã>;ø©$åáE—m½8¼ýУ$¡iÎAúÃM3B 8¦iz?ôðѹ®²N’ÑÅ#Ií*%--DõCfô¦0©(ÞM¿#`¿ ØFÄvÒ:ˆyxõõfúmr~söùâd4¾9__„Óéׇã‡aH»™÷Ì,„Ò6¢é¤Òþ}%«¥¬HèŒÿ +o©•XH'+@«­£¹¤ñõ§OÑd~Ôcd×£ñ´ÛyÌ;Tߦ².7ÕâFe;b­ªüúytöÛË¡J£4°‘3¤sO WAÒB|7«Œþ±zKéÿ%–{,%ÍÖÝŽ¢ˆæÊQ®d‘ÍŽö€üuæR³X`üö宦—{Zj—IœÜp Pz­Uj2I­oÉädÃd½Ö¢×³Üpšï¾LÍ‘]Sºš,ˆáŸ…ªwi¦YÆø1[·ÒmWÕkÏ¡]Q¨[ ½Þ+w‡‚Eå¸^A]]œÒ™¬Ç”À rò*îö‚V.®.'ïɰÐV¤ŽÆ 1£‰*›y^ƒj:ƒ¨Ïû€Ùʤª°°u¾!Z _RªrÛÜCÓd@Rs¸]»›lá¤ö9%>+çd—p•¥Ôè¬NpzìBûz×ù9NàDxa2)!, Ö›ãál6MÎg³çÙ#úfê`5¹ª`8fŽ25 Jú<ù|V]ÌU!é–UÈÍQ¬öMŒÇ”Rÿ`pGJågô(¶ZÚeºˆ`R$Ä¢,d—¢ZÄó±¥”ûü󉋖wSoœ©¨ªG2µk¤…±ìý¾yeàQ*é$Þ5J+{'3?CÜŠÆc=Ót)ÖÒº'kFù®)øÞ€ W—ăžôm‹´i~¦na+ÚhI?´¹Ás`›Ä^[Tg‰Íu`ëñÛ8yöö +Ú}R}ô³ÂRuhçh­äaÞÊÚ@[ƒZ/?®o³[<üŒ‡ ü°B`s)ÿÕ4œ;c‘ÒaÅøÑú“ɈÞÄyóB(M‰³C¶Ž;;B±>˳¶tÈ©ùØGï4­­*rSæp ŒÕI +ÿE(àûçeÃÚÃÂô±?6— ÃYŠ¢f¶e¨x0ÿëƒ\ Ž^w›¸0>—Ò–F[\’X~Ô…Å…,<%ž.ðd•_=àRTÙ“×ç oÖÌGˆ»›»ðÎsÄ} ²ãnƒ9Ænk[¢«àÚÝ (ÑŸ5Ë"kQ–|ä`lRÀá:ÏWÉì°¬Ì\Ìq) KfvÄýBå­yƒiLq(³¬°8|ƒÇÎÞ,QX¯ +ÌXªÍv2s¿“³&EØc| `œXeŒsm V`c¥p¥Ó¢»ÿ¶¹9"ju÷Üõ'ÆÃ?zo|zÈýóܾý0l–D2Fýãcê¿4—Þ“‹Ó:“KYÀÜq'ý½F»\{u¶=ˆy]ˆû6koЋý!¶ Ž÷Žr>=ørð€Ã”¤endstream +endobj +523 0 obj<>/XObject<<>>>>>>endobj +524 0 obj<>stream +xÅV]oÚH}çWÜ­ö!•jÇ_|¥OIZ¤”²‹[­´ìÃ`Ã4fìÎ þ}ÏŒ1E4´+­ª5’1öý8÷Üs¯ùÒ )À'¤~Dq²U'ðúvRøP7‰ý!%ƒ>®ã®“âTÀ6€÷áÔÚ:ƒÆ6‚½3½I;—£„ÂÒ {ƒ>¥¹ó (Í.FBi󊘤Ùû“Uò/ÂIò̈J’дb9'S‘YrOo'½dŠû”â÷‘åj­ -xc¾ÖB>—™ÚÕ†ç/ÓÏ€¼0ö#侨™ÖÛJåúÉÊPVr¦<ߌ *[0UͦE0A-ê&·5£74a+žÓ÷é“yÉif˜á'9[xšK[ma¸¢íRdËCT›Iq–ïl±,Ëxmèz:F«âjŸî™6åÎÂË-YYYin½lLŸ/êù‰­1­,ŠëªÜðüêäiù˜•—A(«Í°o Q¬®AƒÍ ?³„<¶¬¤ÅÎp½mIë²aj%$*Íi>ŸŽ§wó9IpAE…0°úszÛÐuBÅ'V®Ns.IWT +J¥Ð6Ö‚—ÕÖá½4´¢ ý$ŽÈ‹ºþß(Žö‡@| £i–â_Ú\µÃ‰endstream +endobj +525 0 obj<>/XObject<<>>>>>>endobj +526 0 obj<>stream +xµUËŽœ0¼ó-å À›ÓìæyH”Éi¤È Íàl›U6_Ÿ6CÒb13« $ì.QEu—oºBH#Ø$PvNàät‹³”îý„Ú¹*œ§¯žABQ"ÉR(* ê €¢te]+Ô—Åw*‹ç2‚ì°òèE‰ÔýÊÎnZ}ßãà—·ï‹0YWL³àz`û…†Å^7à)Å"ìÜ›{jw\”Ð «p&*ÐŒ·¾õ…6}[+â?ê HuCyÉ4—bVj%c£mE¬ÓßDëàE{JÖ¶À+þæ8øÐ1]6¨ ŒÈ,ãü&YƒdÇÅ>}¸ž<Ùž0X§hm¿³õ‘<9ÛÒpêÂåö#e£zt†ñ#ž=`¦ûYxh¿R +?ô?®ZiYZñ.V«ŽH™ÅN4:J&Jl¡”£Ð'“N­ˆõù9—4”È}ËQ]R{ô p¸Ãê9 =ÜŽ¨4mÉ^Œm+DxRaͪÓè’‹®øÓoýë,Ú¢4´I€)¶wî^R8PÈÕ’¢úÏp}›†kNóÛ²ùà ÓÌOò’(÷#sØ|Þ¾»Ú ¼ÃVö8(x=R÷»ÖKƒÜ”¾™Ž³§±Ÿ&}dZŽ7féeá|t~¢ïendstream +endobj +527 0 obj<>/XObject<<>>>>>>endobj +528 0 obj<>stream +xVÛ’ÚF}ç+ºüâujQfta—MöaSή\~ˆS©A¼ºY3à%_ŸîKÀ1 ¤ž¾œ>}f¾Œ80|sH|bÈêó„ðbE‚×>~z>_ýÿ0¢ÐKœièEΖ¡[Ï}9Û0ö¸³=¸Å?8qféèç» pi)Æ"4·N¤ÙÕãû›¿ÞËìY(ÚÃ~Y+m®ñBwm£Õ5,Ê&‰Ÿá"{nÚ¯•Ê—ªVy—~F÷ñÞýؽ\}¸ÿ-°Q½.Û¦–ŸÃpgˆyàùdÙ«®Ú‚–µ©]ð銽°èÓ»ãã× C”Í…`ßÂl;uÚyÛ(h 0+OgŠæ šu­/&_Tr¹³úŸÐ0Û®öæ©Àþ}ºw±¤ÀGœ;l1vPlÐéêÎt‡Ñ‹_ÇPôrY©fiV§#€ƒƒ3—F‚Veèî==ÌÀô²ÑÐYÖ^€c˵Yb³ñˆ?ˆD&«ªÌOçEϡ̪²(Uï!5•·ôuÆÃI4 Ïâýh³^À‡§9¤›aÒNÇ" zUKl«ê]ÉC¡«N5yÙ,Ñ Ã7ÄË7ƒ37àv@|1Ìà}cT_ÈLíÓÏþ£ÛˆˆZòZºE$ +Òx¡z•{4œ[T‰{XÉjÞìŒj nÑȬ$6ç`¿ÖZå.Q;Û]‰SÑДë~£7Ù7ƒ é÷BìÄØ<¿( +r¡±Ë™±:Î?¼»–éü6àqÂè:L¢i"¸O×BÌy<ŸÝYËL }¡Ž£Þ’WKœ‘%uS!¢[Ò +Îo&üf>Û­s1±žb +Î|wŸüú®Û{È]ò[†!¸·¸?~Ê<)‹­QðøÏÓ”@“‘&6 Í8vù$"€;Ù=íô¨ÑGn÷U‘Ò:"QA¨-¤6àJrzõ/úœb¯,‹–¶+%‰Üe±#0|EfY×åÀk·õÀ`yíìôª]W¸ Y-~5Ç´vš=Ãò*-šsD±–/F—ŸQr´(ëu=èK]jÚº¬tÑN´Ö‡ÇÁw‰ºÃÝïB@÷L•< Dþ@ì¶ÔºÍ–ç$ÌZ”ÒàH.ûvÝ¡ØJ.—î‘tª²›ý™Š5°“xêì¸ÜÀ¸!ø†±Øœ¬EÙy1çŠx½_9û½°ífúrA‚ÒÔ[Ü÷^Ô®±;”ðk“ ĉï‰8"Áxš>̦p«6ªj;<ËÀ/kÜ ˆicg=NJX~õ«¥5= +<ËÅxÈ£ÛaH·æéè÷Ñ?–tÍendstream +endobj +529 0 obj<>/XObject<<>>>>>>endobj +530 0 obj<>stream +xÍVÁrÚ@ ½ó:’L 6qlsètB›¶9$Ó2=”Ng±epk{Ý%|}%Ö&ÐÄæ’ét|ðjõ$=éÉwú¹ àÔ‡(ï8}Ά=½Ÿú+„Ä8ƒ¾ÿÒ8ÏF“Λ¸.Löî‡Lb ÇIÔ5 „b™ÏPL@¯ #V¨aÚ] "{k 3ÄÜwÓ£i×Y¹Ó££É/rêWN{äµçžöä·{{y= ¿ÿ°;°[¯7[$Ïé¼È±0PŠ8N‹ù ˆ¹H màæj 1ªœc3m”ˆLJ>no.`üåýÏËDDØŒMy‚(b¸G¥ûœ.ÝEÅw ÊR&Õ°ÔM+2Á:Aõ:ÈF$q+Q\RÚ‚wË;û——“>/XObject<<>>>>>>endobj +532 0 obj<>stream +xµVÛrÛ6}÷Wì8/r§R¨K))}èØ­›x&Q\›™ö3ˆ-ÔI dçës ]ÑVTû¡º‹XìåìÙÞ )ÀsHÓCJÖGÁ  0ãs2›âs„·–”¹…Él>˜ì[‡?=ßq½ý=¤á¢ AÂÙ”¢” (Jz?±õ’¾\ŸS´¹É­´'Ñ?Ø2i¶ ¡þp<aWOPå,(••,RYX* ²+I•ª$b-)îUº\ŠeþàTa¥ÎD"ãEꮕõz)u|âcÍ›X}6š¡:»ºüõï+i¥^ÓÕŸÞðß:ú£Ð›}¹XDã‰>/XObject<<>>>>>>endobj +534 0 obj<>stream +xUQo¢@~÷WLš{°I¥€´oZm¯Ikmá’{hrÙ œ¸KÙåZÿýÍ®pjm59Ùo¾ùæÛáµå€M_º>ÄË–mÙàõ»–^/ {—~%Bjzž||>ŒZç×8D©Æð{D ŽmC·Ožé3½Žõu2Žîn&'§Ño +óë°Åu\ßò(²= +/!š#¥ôk†]·a8‰îÂD%ã’Å +&l‰ L³÷ Ö}oë¾IÝ #˜”IPl'ù2 +¿ >–Š½ä™œÓ ãh0@ £ýíôêÈ9EÃs;¼*ÚòóùÔ‚J"PÚrU(âX0)ßD™HÓše +¢Â¸é®.Þ²ÚHœÊƒÇæ’•E|bA¨eÔNI³aN6Ëqû‡l<²µíŒ$!W2ÉÊ á»*W´ûÝëÚö>hh¢9èVòS‘gñŠ¦±ü6¹zelv]µá·³³f¨>/XObject<<>>>>>>endobj +536 0 obj<>stream +x­U[oÚ0~çWœ·ÒiñâÜÓ—‰Šucj¡—tOH•I%]Hhì´BÕþûŽ“Ð-¬«FDäØÇßùü‹ï;Lz8øØÄóŽÉLðYà>-ú—ÓzÁ Cú|mÁt˜÷Ú‚½ Êr9 ^î0ÙêUÞÒѱ™ÛZ!³Ÿésf¶¯ÖÔuX¸ zu>„Àˆ¦tV/ ARo5!Š»§W=-0‡ó"KãåatGæpÞ˜–OæÝa¡ð¢¢6ƒ™È“ !9LD¾T³4¿…eQA–þDÖàÛgœ€iÇÝK¼¯Pª—~¼fýÇhÐÿЬ:ínŠŒÁm + mŸTÓ)–Ä"Í–›(ƺáõpp]Z»‘$–„”‹9‚UžÆE‚ U©Ï!•(•<¦jê±€ƒñø@îñ7:þ~Ó‹¢ËÝ‹ÉÆ +„"“Já>´ëÁ0²÷çD9A™–˜€ˆc”-ØJðZ +ëYr¹(r‰›ìM0¬VóóÑéÍ·a7u$ß„Ú¾DU•ùn,ò iž¤± @V›ìë,­ñlÞ$„ö}Qa¹„A>-Þš¦©¶3!%9£’i€y%•NXE™,uä…¤±PÚHÏ•Mv¾?}ÿ«”: ¸·[ʵCŽ»"“ˆÍ0}6»ß—©Å*OŠ¸š#Ubo/Ì9Ô*Fk'­ÃY÷ña'BÝ­ Ûa®P^»,°ëv!©~㌻I( 9uZÝRb!ì#-Ôö¬»=û´eÕÝ †'#HŠ¹ fÚÍGÈð3 6õÅ\ò.è +Y¥\ËzÍÕ¯Ôât‰¡¦‚€~{j%h›#÷}fy>]Z³l[ï¿ê÷ ¯I ,%|­Ò¤®~ƒûó ß$ɒ׺¿ã;Ì'évHºN ¹}‰:ß»!ãendstream +endobj +537 0 obj<>/XObject<<>>>>>>endobj +538 0 obj<>stream +xåTMoÛ0 ½ûW=e{’-øã˜6]; k×Æ;šÌ )•ä!û÷£-§HQ/+ÐKÂ0`€ä#ýÞ##ŒE +Yj±„AΫ¤QôÒkVC@i’O2ʬàÿ +”-Nëèó— +¸€zESå%}4@1µš]-çp®» ZéjÛ9 ,ÌF¶Ú}ª…bŠã´ âÙ>vè|ˆ +àOÑ<éÁgÚÐH/_b”!ëÝÖh‡!! óãëu¥Ï»Ÿ1Ï’´oà Goe´§¾ÏñâÊ×!zÛ¢#}dóF(ß³ ­^»‘žF<‚gÑwvLØSz8:Û•½bŒqI¿}Bè¤U´:×)…ÎÍHê^ö„ŒÞ{Åo¶¨a‰Šº†™(óIÅ÷¦q§£È¡¤î[ùpPƒò鸗ÁcÀvìl°R&F+‘sÀ v8f#Z¸C­Í~{Ûgb·¿ß\Ý_^/‚ù¦ü¾5ëVý©›5‚7ðAõ G ”£a¹ ëYU³ñ¬,çßNç°À߸6[´.º6ìCÌ‹rÈ Võä¿·O")ò’Î&e‹ªŸö¼Žn£¿7T‚+endstream +endobj +539 0 obj<>/XObject<<>>>>>>endobj +540 0 obj<>stream +xµUÁnÚ@½ós$Uíx ئ7R’‰@ N/I„Œ=(nm¯³ëD¿¾³Ø8à$(©,$‹Ͼ÷æÍì}‹E׆ŽaÚ²L f™6t=—Þmú „Õ&Ðë1Ó;è4˜Ý3»‡¾ptñgGœù­Ó‹>0þŠP9ž ~„ȲÀÛ3”9Ï$žø¿)ÏÙå¶CgøQûÇt¼ø>–ñn'ZëJ°$&\b9Oâp wA%7í Ià/ +.oNtC·-,°P"#HÄY‡A¤ +C”²€1çTóÑp¾Z³kOx_ Sé³BÄT7ÎHð’)¤J°DAŠÈý¼{…²0w*å Û+1Ìp“°ö[Ó$jJÕKmTÚª{5šø»L8¤þ’/Tù5 ?5QYÄC•’XÔȧÉEòÂR­V(kLñ±õ3­þq\?!{ M +´ +®»œ[ˆ•Ê«†q8½\ßzýGšJm§¥Ö°ð.×̹mV;äiž`ɺÎ9°\Óè¥÷r)­S­¥÷îÛ lµ˜·`i1Û½p½êŠa®g:ý>8´ú7÷Ì|py6€!>`Âs¾©8ÚÜ[Æ6×p­¾ÞÿzÁ~Õ7’nP×íš®ãÑ-B‘ž¥ÿ:÷[?[ÿȱendstream +endobj +541 0 obj<>/XObject<<>>>>>>endobj +542 0 obj<>stream +xµV]oÓ@|ϯX!Z„í¸vÊ J“ù¢1EÕÅ^7çν³ ù÷ì]œ6.4mA$ŠåÖs³s³c_¶\pèíBèA;€xÕrlü°c{àwBúíÑG"¤fÁ;ríÎí…“¨õâõ1¸.D)a¢Çq ŠNñ²BUFߨ,¸.³¼Àö©ð`6¿ô7ë~½N\,·M$¨`4ïB!ò,^Ã’ñ$Ç&”µ[ûa8‰ÚÞÝX¼Z#/e†ê¿£|œûÏî¦RñDÄÕŠØ`‰X±ŒÃ|؇E•¦(©ãŒVä–ÏÙ +¾Á¤;|ÙQìëÝÍh`¥€B.Äwj©*ì=äã%“_ö6ÔY¬KB· e¹Â| ¥d\åL §S¥¬â²’øj³áÖ‹Æ^gc³ST…àê–y¸öa:>?¼¾»ÇúŒ$Òñ ‘ÆâOëG8;È3¥{b q…g‡{Ô{ÌÑ?ØO˜Çp5ºû4ÒÍ (Ú$•bu€<‡¦<ûÜõ¯­lœS”Dò§d³ ãI“ï¨*ŽQÕ!B†£ÌÓágµýÝ&ƒh4}3€,bˆ´_Y\„Æ$YVÔ6Üƶah:í¢%‚Ò‘©&R Ë2ò-”ì;rÊe¦  `_j“¸¶ßö B‡¾ £d Òj bÁ9=œ%ag½§ húôOJ*ù|vhC¥hS¹.´ ¦Ô!ed&~n`;Á‘F'ŒÃé¬gY¹4È&\žœÑk6œ ô÷V„'6ÌKA;ji–cä¿cgüâvÑs’ƒÓPÀw„·æ^@ÃOç¡›s~úmÇ1V“¯.èå%-ô–,Ï‘_ 1Ò¨úÞRû«±fØÎQ^Qß\£Ån@çq¥cˆ°”¢S‚w¸®I!Ý­Ho¢Bÿ¿û·Fn²ÎãQféúšºD:Úsy³OZzì¦|ËÚ”ÿñ}°Ý1ŒÄ5sìcéÖ¸iznC`A¦lº¶ûNý à†¡í!o‡Æžóîø¤ }¼Â\(¼©²ÄÌ›åÒsMp| VèoŸ,Ft·ª +3™fšý€‚Í2YýÈÕ¢ÖûÖ/œ=°endstream +endobj +543 0 obj<>/XObject<<>>>>>>endobj +544 0 obj<>stream +x¥UMoÛ8½ûW ÐCÂR%Ù‘Þܦ]H²ÛÆí¥^,jd±+“.IEë¿CŠrb×q +† K¾ùzóæÇ …„>)L3çÀ׃$Nà<™Ä9LfSúŸÑW#”þ`|>ŽgDz$?~#M³8;¼ñv1xýai +‹’¼ç³), + ÏI >¼ÄRH4P* ¶6bƒ#J+Ê­+zð£A½¦ñlñðò^”åñ„‡W·søŒdg,¼«X]£\á›Î¼wOYGé˜b$ûä¿d²=>vp·¨ïQÃ_̘Vé‚žíiÀü9Àù5\©•’§a²_„)ËÓ8ãgpæ­ ;Q>ƒáÓwJZ­êÓP¡wRÃJðå§'º·ï:(sÜÞ(‹o vuÓµH²5‚±L[­ ¬l«àårùxÅ4ãµ& ‚5› 5•3ƒ±sà`…óZ½£ßšñŠh:©¬Ñãã׹ +VÓ×L²ùÛô$ª˜©FÀVLHbj[ NÑÒ +´ã¬ó)Œi° 1Øs.ÍsOca Ö%,‡µjCZ˳Ø!Ò ·¢®á9!÷˜dùµ—g!‹Â¡ù!aFP3*`LÒP6†&ò òe(~ï„~Tk`«° +Xݲ­©][(Qãzµ+Çr(bçáêú¨Òÿ åöùR1©×”ÛW×@ÊÔ½}ý8ô%Êf£‚tçGôâëŸ/_u§Çä¡‘…âÍš8€Ü5eéz¨=ú@$hO5¾Ü|¼]|ó{ vµ\Ž¸:Tõ÷`gÖÍÆ·ÙßO!_lŸùC¹ÍFIó´>?ë,Œòž³ÎEO¶Ñ’vHDœ('R0 çhÌ.2/-dòXXœÎ¹uânÀ¸¨ +‘ím‹(‰íÝ2q²¡±ËnähÎ7ž¨}4ú}ÅjgÏ+äÿ:‹õnÒéÁIþúÑí.G;Dºö€CsÚ­C­\~@‚ÓiÁFã½P©·GqOüü9Œ0.»=q“¸ú§¬ÙŠä@ú úÌz©ñÓÉœ+Fê×ÛøJ„Y›…YK§³8¿¸ î÷ïíüúí.ñkEkà†–¸K9ê-£irñäªv–“é$žæ3j1Éü¹ïÔûÅàÓàRV…rendstream +endobj +545 0 obj<>/XObject<<>>>>>>endobj +546 0 obj<>stream +xÝVÛnÚ@}ç+æ1QcÇ6Ęö)wEJ“¶Ð§¦Š6ë1¸˜]g/Pþ¾³k !éE}ªÖ;—3sæ "zÅÐO ›Ÿu¢0‚4íÒg/ëÓgBo…PøGñQ˜ízÐí¶Hâþn‹8醽]®’ÁsO'£ÎáE +q £‚ÒM³>Œr T£F|ïF| Kiafµæ ¸¬— 0^•(LÀYÅmÅ æÀætT²J>Žåœ'¨ð3«Ñ.aQVäPŠýÑ·NAÜ JaOÛ–³tŸrfJ) f|ŠF‡Îàðbð”{d„›L?9;mšçklA’6ϯo/ï¯n.n› ½Ö5é)x +J£X.E!·[F¦¾d_åõ…R½âøóÕÍ(ûòŠãšåy)Æ`$ô‚‡¥¡UåXP…Í´aʸn ߟPXŽª-ݪ4[(\°nò2ãû¢bc ÐwI}vMoŽîö¬¶¬‚9«,B©!úND¢9ˆ‹ân¿qºj˜ºn™®¥Ð¸]¢ÃªgüWÅÕ¨æ¨6É÷¯Pj6£‚j‡¶E^ +"¶ç˜Ñ iÉ¥ÐX%h”ât´åµ¡`eeiè›Y1r!ÖL&úº) ºqËÔá1 `˜Ö ©rú½ƒÙnjÛauC)pAcÒP´Õ5r×'¢ƒ³ó! àjYû™²Úó‡Le•¯Méö*á‡}ŠKŸìFc… Š< Y >U˜È©JM[àI6Dc³Yþ>Ÿ Ÿº3`cV +'9O +Š¸R†×çnÏLq­¤«¸íCÖ +祴ºZ®E©ó ÁºÛßÏõ9ÀQ+9ñÖ(ë«[(9Ûø¨{¨Îcß”D°7;òoàÔH®óÝùügŠ|z}3úI>üi5üŽB¿¢£[c€¹ävF«›6¬·ÍŸ‰×é§ó³áË’úœXáŠlž¤à³X]#SDf?Á$ï’ö¬gÇoëÏ;ÒãS¯ÇQÊ6ä©U¥&ì݇q? ÓÁ€þ² š<<~r g8ÇJÖH™\ZZÎ(XÝ úÑÀ)Ñ5éÖñzk#ø…Òë÷Â~š‘ÀÑ•£®³<u>v~'»&endstream +endobj +547 0 obj<>/XObject<<>>>>>>endobj +548 0 obj<>stream +xíUMo›@½ûWÌÑ©Â0^p{¨œ¯6Rê¨1î)’µ%¦²Yº NÒªÿ½3 Ä$qÔC{,–e‡y3of߸øó ôaÄ!Ù \æ8ó!ˆB¼÷ñ¯%dvcFû6¢\Öô-.ð½Ðc^çÃð¾ó‚€ÌmO1÷Ù¸3îz—MönøþË£xðöl^q†YñoR‹æBœ /æS˜O?Ã…ºUÅAü 9x^cìø!gª’ï`+Öyº¬Ôˆu-!Ï2¨Vèa!6D‘B)Œ¹S:…•0+˜¡}2¥­±–ßki*™Bª6"/XƒŠ!>¢FŒ‚^5–/£âÍ>ƽ<Ÿ]6AëKæx#, z0b³ÌS0•®“ªÖò)”C¦þ#˜)UaZ“>-Ú×Ëó“7¯CÕEª’z# Êì¦Î2ä©T9.õÓ,jàñÕéÉüu§Èëý$Z¦è8kà}VåÈ·©Ä¦Q–Rh•‚,Êm¡Ð¾¥Õ… ÕÒlÌ#LwÌ¢‘å&Ïàz¸+êõ…á"wضÄÝÏgkhÅù,öx³æ.¯’™:¢HóDTyq ‹ùé•-ÏŽ~S‚œXZ­·BΩúl‰£Œö¸ÙØÎÊ6蚺ƒÁžÛ`4Mg#°ï1N¹åLàá!â´®VJçZo%ŽeÓ ïqb˜a`´ÿ¡î{Ñûª /dÙ¦/ ˜:I¤1ÏBýõl-×MÃõ8ù3íÔ'AK>²Õ…²S %¦‚]Ù´C†"ÞQïÞ»x€=õ³@/;f§¨+cŸ‡Îæýq¨ñrOãÅ|9»\ÎÇŸ–VG×±–ÝØ9 °ÀÎÈ·W,{_첌jñªÚ5¼‰›õáU­NkvÍL*hÇGàÄZé8QI­5ÎêúúŠp}RkTÀD¥Ô^Ô42íº¡U+œHRS’bVtŸ åÿ +¹OáÿZ!£Ö«øŒO&Àù„q>&™À¢MáDnåZ•öc§ö áxøÕ'k'tQ`Ÿ¶VAu €…¨¸ø•M‡ã€ƃ/ƒßÐJîendstream +endobj +549 0 obj<>/XObject<<>>>>>>endobj +550 0 obj<>stream +xÕ•ooÚ0Æßó)îe+5YÒ$LÓ$º² +  +î«1Mir@¶`ÓØ¡ë·ßÙáOiiaZ÷b áìós9ß5\pèíBèA3€tÞpl‚0°=ð£Æ}J„Ip\ú¹'pî{v°/àE-;ÚhêäO2]°Æ»Ï>¸.° © +¢X¤Èq€¥'%ªªä° çYž& +%È*MQJ*ž‰´š#W˜Á$É‹Šd¯æå‚Û§ìeoKIuv«éÛ>å?Ó«ßîöF½ãŽþb½ÁÕ ®—A–R•´$ +ßÃœ6‘…Pîó¢€Tp•äòK.—¸™qJÀý,Og f¸Ë™¨Š n$é¶MP%åĨ.ºƒ‘–@ZÝ&mÌ“9%aع¾éŒØ÷¸Ýï|ðœg”©ÞÇÿëyz7³FLÌxž¤³œ#eö4ÿ–xW¡T[‹È—Ú"·¶èºÂò&¢„/—Ÿö¸²õ$fK,%ù}½~Ì”ø‰fè9fH²­>!ÁZ ÔE%Z¬ Ϧù¹žW;õDÙ + Ë‹jeÃZúsMA¿éÆÌ êðš,}c¨ó‹à +‰¨WJ´/±áËÙÖöjËw%Ÿã<¯$ÒÕE_¿½,h‘dYΧ?Ϻ}Päs‘O9«f 5DÆäkàw4ßÄÝ·(]+nz/ Þðs ê×ÎtÞ_åX[ç ¶aÈ3–lÙ«óÝmèiõþ¾6Á7Ô ƒØ§czsa|BSµX`™&ǧ»rwùÿãé–™ ¸¹éê>ŠJ2sÝ­JL‘ZUV·4Ó¦z{µÿtu>ªŽhE½«o÷V ‚À­¯¡Q»цK\b!ˆ+ WUž™Žg¹adæZ¡Ó:|»ú¡o‡AD×1]nççúˆ:¬qÝø ¦7STendstream +endobj +551 0 obj<>/XObject<<>>>>>>endobj +552 0 obj<>stream +xÍU]oÚ@|çWì[R)vÏئ/(QÚ +)A*¸OIT]ì®1wÄw†¶¿¾{¶qpìH‘ª‚Ýzvvvgý8p€à×Ð/€d= 6áȳ}ð£Ï.þr‹òÂõ†ø÷ÙÅE<øøeŽñ±‚) !'§óók¸’K)>Ä?10Ç©-7ÄÀÓ©Ôì¬i²â‚ k\`Jµ‘BáYÁ&g KY +÷¿Aï$œÜÞž@²¢9M4Ë•m€ Xn€¤Ài¼Å;.Å\]Oc-XytIylå X ^1P&9Ux–˜yÉ·L˜8s•³Ç‚)ýz®B±¼a^E·Ø«bMï3$ßÊAõk॔BQUÒ¬ÊþRÁºäï“iìÕµ_ Œí´Ïv$ä!Ž i†uÜVK‰,„nSjãL'óxvœÔaËßÓˆßÑÉ£µ5å™ÊdgM(´ç¯‰f™Ü1l6ÎQÒ+PX*‘‘€ùäÿÃ:ê3f¸Q<ýaâîŽÓ{B<¹@Ôê 4–f•ž Úî%Rn:Çø MS.– %øcpÇ`` _ +Øq½¥i®Mê½Ö¥¡:’v‰ÝX¼C™¾anvû0ê¥Raà*,ý[ +è6®6B;ÍÁÖê#ZZØC Ïö›U~“ÿ± ‘âNæØiÛt^(ý3ôЬG×¼Ú¾˜Óÿmd¢zœ0²ƒÑ‚°ÞÚؽ‹s¸d[–É ¾¬àkÁÓ²:kk…ddx«Ñ~èÛaá»o†åÚÿ¾ þ=2oendstream +endobj +553 0 obj<>/XObject<<>>>>>>endobj +554 0 obj<>stream +xÕUMs›0½ûWìÑé +˜Î¥“ïz¦qZ›äRw2 +,¶Z#I¤q}°èø£=Ö{°wõ´zïíê©ç‚CoB$yϱÂÀöÀBzö裲:pìGÛ~0°ým+<×±ƒmAþÇgqïÝ•® qV•D!Ä)PIŽqÒÿxã9F~Gq£Ì!¸ÏÀ¢TkàSqÚŸNî§÷ç+&4K ŒYŽ)|â6‹6ðX^H¥Ñ’ ̸@ ™T`\CAÙo§( ÏV\Ìéo„§Õ +˜Â“)XZ!Íæc40]P +\Š2ïnXéˆ>ÚÑyq².H}†M¸†AõŒ +® q$2¹Ë=n¢ÄQ°áÃÝ]R»òŠáþX<]W¾Äg\)èÜ$ xfË‹š…ºBcÅô«ÌÙãrUÇ4Q LÓ³¤„ß ˆ7mìªÄ6SõŽ Ï´b…g›³¾ÆÄp)àxv9[Á#‚Ì`ÉsnHC¦5׆‰a +kÄÚµ]*ì¨9òë-»·ö¾¿]¼ÙMh!¹0Dý¬o$èFAG{?;êBv4»¦ñÄÛ ÛBÚ3ÇÑ—¯»a +–¦µ#%ÌÉ¥à‰L´QÕ¿¾õ¸2$Â’ÏQF.i S¦"³2òôæŒd)ª5‡?tD• öçÕ-γ¥å±=0) 6ýp:¹|¯n܇óx²t{êf@´ûµé N}ØPêÅQïA¿;À5O†J‘J9{áy™ÃÅœôšÑxÈèÕ×ÆsÔÛµÍk‰^Þ4c·Š–ÓÕÐêø.Æ¿9áÓpÖ—‚fu±Ï³õà«å-Œº„ÖOT²¡¿!}=ãšR º4-q)O˜¡«C—I‚zm‡h­•Fv0B¸ÍØŸžÞœÂE5`eJÃuI—LżµÉµBgxøóC߃ˆŠ á}V—qïsï–C*endstream +endobj +555 0 obj<>/XObject<<>>>>>>endobj +556 0 obj<>stream +x•VQo›H~÷¯˜‡>àPÀp¥>Û©¬äÜ;›öJm—uà»”G¾_³,¶.­CtBHxgvæÛo¾™õ‰ >.„Ì ÕıüÀöÀBüöðmì{ÃÕ•kG— ¾ãÛÁECôëúu2y3ׇdɃ?2ÀÄŽ 56¬…k¬Oø¹æ{1MþÆ-¸®Þby!n16¢e dVB!¡ÍHR18²c@$¼_lØŽÉÖÖa0ó9Ld«ÜÆV;üš&Ðö/›õ.ÙzÚîû‘/Ë!Q@j¼³¿ bý×ëËz“ÌÆ¢<-Íõ^bíÃxg´²\þ”ÉË;ÁýßyNÔ¾€ûõózùÛëg®EÁ[,R+`·Ú~]mÖ››Ï®ãŽPpÑs„Ñ«©!xy’e,ƒbÛ½­nU{.¸õkD:UÉ5] k»†£Ð,ÔCVPÒ2 ²£”Iyfõ¤´hÍ|]ñEs¬[ñØ:/(È"c ö°I`)*‚²Š;ToU´Bðs˜AÒÖÌAÙ£.–l_ðB¹ ©ND«jõŽ³,5b׌= ýýÍ%6ÖÈt ß-Âh2Ö ÈFXᢢi˜EVðGðµã3zö-@š†%Ä.žA<ð„äEÉW©qk.Ç,W;X-®qª(“)‘N™‘–À:©`„zí‰ávDe%ž÷©1–óŽp¨ð͉ÌG"ñöÍHXÀ7‚üñ—Îp© +Uæ§FEh^pöP)Åé>~„ÞTJ’uU ï›PªÍõ³2œ7¿ÃÕÔè•AÊòØû¨´¨ŠÓDÑ57/¨ÈØy{:UÏñvHoÍ»'siÞ!Ä×Ϥ\*æPE,kÉøc›Ã]8™rèK©Ê}ZÁpøVÙ6O ³L§÷¯ç—Ýw‰Sƒ`߈ª„Jn‚è%¦H‚Z÷Dµ:v1ú PÊ$ l—7u­”ÿ-´íÐ ïÍþ‡cÛÁ½j,UÝ©¹A€b4Õùd,eRTX®1Þ‡&¥v.o¡Å cG æb˜ —„9´- Kuù0"iŽÔaù–š[ùáÔ©\ÏçEÃ=çúžÌçø¯`®‡Ú.þý:†¥ºvEÍ Ÿ:œ +½å†xߣ¯:óþ†¾|—û¡o‡A„gäU¤¶®’ÉŸ“ÞbYendstream +endobj +557 0 obj<>/XObject<<>>>>>>endobj +558 0 obj<>stream +x•V]sÛ6|÷¯¸§FI(V²eÉòL3£(I›IüQ‰žYúÞo×_¾ÎÃp|ú-¨?ŒÂpú-XÄñf°”ÁÒn^ò«ŸöœVç—F!î“€ÍKò•KTáR)œ +´F(—z EÊ€„µÊ¸Í€ÓtDdòÍàØò¼)<> ¹ŸÃ1¤ìó0{ ¯ +ú®Ó"-î(Ö¹H ÿVf) Ò.Í2Ò¥ÃHD–íI8§òÒ‘Ó$QÜ)J¥5wÚÄ$Š¸›HêÂeÊP.ö=œFm+«8SUƘ2Q¬JUÄ u—ZgöàÄ9|gCŠ’ÔÖ˜Df5i)+C;¥îÚÖ)³&¶a¯Ëå9Ä‚ùFi®6íJ¾èÎ{%_GvÖÊüPæºii­(zD2èáFN˜Ø¯Ã,CY®wÛÍÀ` +PS“€ 2ñ}9øš¯ÇÌäy‡jàêÖä^ñˆõÒöS èiGÕÙYô+‹X+•l¯R{ äõˆS½IÞ@‘çt +\òÈú5>ÛDYæ2Ów¬ Ý•Áf2¡'‘¨d+™ +A4÷Ö –—×N-À^¯:O¡ºø¹ û´^*÷Yßéb-rÿ¿eõ¦?ÚŸyOƒÂyj¯ÁÄxê—ó'öÕ úOÌöšm··•Åæ8 Ë%Ë‚Ñ®5EO$Ðã©vºƒó´ošCØ=“[½€2ŒßJ“–.¸ùø.X|gåüFtiöÐ>:–/ÑÉÿ/‚ç]WžŒ'Öy‘xƒ~ÆÎaVÛÔX÷O–Õµn©«,¦[Õú:ÞÃ!Š½.epå=ãDçì|…r¬EÖ$>öºÌ…LRl9¡a¾o¼/ô® "«TH70õÌçkÀ®ŒºÕúeóvê]¬ Øé^QUH³‡Ó^F~3>_ª¢ØÓ¶*$oŒ%½=`Â.%)/îÓNõP¥€Æ3 iQì‰IG _S 5õjÞª­ÆyHÛ·z«»qÓ¶WÁØaô°Óº£Düð§Ró\mR•oÒÕ|TÆö\3°;=4€!5‡qó>ûª`“èûü%O3átF¹Ê˜ºo™…~0'z§ÒèmšñÐ`i|±úé•(K%Ì+v2¨ANI&ñ¶ +pñ…²µE­¨hy+RÉ{[å} ‚ \3u;°À¼„¤|ͦdzW€‹ø¹£ÍÝlqU²W¾ÕÎC…6l<…Öì0Ž‡Jauj‘|$)Šë„~ˆ@|HèbP|§óœ{òÀôŠ~I|„Gþ8l,—­{{úÙ«/°‰_ÓË«ˆ‡Œ~i?äh7Ò0"›Þâ†oV‚•„ â¹ >Þ­,hèA^¬–þ’òÿÙÃù2ö××#ÐÆ$˜Dÿ¥€®Û%CÇí÷8]/:oN=ÞÅ…oÒ»9ùux2©ÝÌ눵‚ VÏÒÂ)?­=‰òÛëm%Ö²b/Ä´UfÕÒRM©³æ1w<; §ó9M§#>/XObject<<>>>>>>endobj +560 0 obj<>stream +x•mOÛ0Çß÷SÜË"Í&NÒ$Ý»²„ÑLlR¥ÉKÍšáÚàÄ”~û“ÁÆœ6ª’ÖçßýïÁ—ǃ/iQåfÐ’ ¦ˆ³ŸCüwíB2šþ½pRŒŽOc` Š;d%Y +Å +P”ã,ÎçPÕÀä,DiMÕìÿ\Žk!`~uùÙԱecXQ(Öbë;hÖè_›ÍÇ£â÷ˆÑ8 +„)Íð^¬ÆF>/XObject<<>>>>>>endobj +562 0 obj<>stream +x½UQo¢@~÷WÌ#M\ŽEXð^.Ô¨½̽˜N×–;d-Ëözÿþf{mÔ¶—šBH€™ùæ›ù&³w +Þ<z VÛŽeZÀzÌdàø¾ÛøT6Áe.~ž0ô<ß´O(µ ƒ¤óiÄ€RH6˜ù$kÀÌ–ÉÊX³JQUæwŠCÊåÕUòƒœ6¹ÚCädmÄ„—XÔ%¦iîýàä©ãÒ¨¼¨I^ÂZl³¼| U¶¨¶µGìu4ݱGMüXßyQ_¥ø]Â< +ãç- ¶.Ì´r Hõƒdª¾U^ÿû¬P¼ ™„]VÕ 6Àóú–WèGaDÈÿÀ*“\ÛÇ•P; '»1Ú^OÓqj˜öÐYWjU« +s´8‹x8O£Ùè:¥plÄÄÁ&âF”¨ºÜ‰Rò¶¥Ø€V/bû§Ê%y%÷=pŸ8³½sC½Ì¶üóó6š|ÍÒ†––á4šÅù‚ׄõ€³Ó*u"7¢‡Ð‘s6ÉÛÉŽÃ89‹sA²î>Éë2Üèy‡ãùõâkú(D;Õ'ºz±âì¤{U‰tõ}[zVïÿ`Û Î‡Ðµß:9Y‘ãžyÇè“(ˆ/2:~»@(,¬ßƼvÛÓA!¿ç…Øá¾±Ê×\WH¾Ä³úg¶³ã9¦Ç|>/XObject<<>>>>>>endobj +564 0 obj<>stream +x½•ÁOƒ0Æïü0hÁ‹)P qHKOÄl5QÌ™©¾e›ñ°p0iÚÞÚ÷}ï——ôë»åRÛâà Ãzk%º¾ Áó@<«@.BÄÚ®‹ìæJ¼ªšà\cò}t:ûÓ9>v¥´óýpØõO[y!ËÊ-–-”·Ê·m8«ù¤Ñ­Zè[qM7Ÿ õ&›üƒ6oFp}¸U¹bµ¹Ït0Ó4-›¥hËÊÈœÌü‘ ¶0…ê@®êÂܱΩ÷MejÈDrͪy‘RQÖ“n.:5‰Îí‘ÈÅq 8 ]<¦2§‹„B&?e7ìäþòÃËFŽ"ç·Ö!(KW²ëœ·~øêAÅéñ!$p ŽÔ÷ îñ1ž˜°¬õ,ãendstream +endobj +565 0 obj<>endobj +566 0 obj<>endobj +567 0 obj<>endobj +568 0 obj<>endobj +569 0 obj<>endobj +570 0 obj<>endobj +571 0 obj<>endobj +572 0 obj<>endobj +573 0 obj<>endobj +574 0 obj<>endobj +575 0 obj<>endobj +576 0 obj<>endobj +577 0 obj<>endobj +578 0 obj<>endobj +579 0 obj<>endobj +580 0 obj<>endobj +581 0 obj<>endobj +582 0 obj<>endobj +583 0 obj<>endobj +584 0 obj<>endobj +585 0 obj<>endobj +586 0 obj<>endobj +587 0 obj<>endobj +588 0 obj<>endobj +589 0 obj<>endobj +590 0 obj<>endobj +591 0 obj<>endobj +592 0 obj<>endobj +593 0 obj<>endobj +594 0 obj<>endobj +595 0 obj<>endobj +596 0 obj<>endobj +597 0 obj<>endobj +598 0 obj<>endobj +599 0 obj<>endobj +600 0 obj<>endobj +601 0 obj<>endobj +602 0 obj<>endobj +603 0 obj<>endobj +604 0 obj<>endobj +605 0 obj<>endobj +606 0 obj<>endobj +607 0 obj<>endobj +608 0 obj<>endobj +609 0 obj<>endobj +610 0 obj<>endobj +611 0 obj<>endobj +612 0 obj<>endobj +613 0 obj<>endobj +614 0 obj<>endobj +615 0 obj<>endobj +616 0 obj<>endobj +617 0 obj<>endobj +618 0 obj<>endobj +619 0 obj<>endobj +620 0 obj<>endobj +621 0 obj<>endobj +622 0 obj<>endobj +623 0 obj<>endobj +624 0 obj<>endobj +625 0 obj<>endobj +626 0 obj<>endobj +627 0 obj<>endobj +628 0 obj<>endobj +629 0 obj<>endobj +630 0 obj<>endobj +631 0 obj<>endobj +632 0 obj<>endobj +633 0 obj<>endobj +634 0 obj<>endobj +635 0 obj<>endobj +636 0 obj<>endobj +637 0 obj<>endobj +638 0 obj<>endobj +639 0 obj<>endobj +640 0 obj<>endobj +641 0 obj<>endobj +642 0 obj<>endobj +643 0 obj<>endobj +644 0 obj<>endobj +645 0 obj<>endobj +646 0 obj<>endobj +647 0 obj<>endobj +648 0 obj<>endobj +649 0 obj<>endobj +650 0 obj<>endobj +651 0 obj<>endobj +652 0 obj<>endobj +653 0 obj<>endobj +654 0 obj<>endobj +655 0 obj<>endobj +656 0 obj<>endobj +657 0 obj<>endobj +658 0 obj<>endobj +659 0 obj<>endobj +660 0 obj<>endobj +661 0 obj<>endobj +662 0 obj<>endobj +663 0 obj<>endobj +664 0 obj<>endobj +665 0 obj<>endobj +666 0 obj<>endobj +667 0 obj<>endobj +668 0 obj<>endobj +669 0 obj<>endobj +670 0 obj<>endobj +671 0 obj<>1<>4<>5<>8<>10<>12<>16<>18<>23<>26<>30<>32<>]>>>>endobj +xref +0 672 +0000000000 65535 f +0000000015 00000 n +0000000245 00000 n +0000001811 00000 n +0000001885 00000 n +0000001963 00000 n +0000002040 00000 n +0000002119 00000 n +0000002202 00000 n +0000002278 00000 n +0000002359 00000 n +0000002460 00000 n +0000002562 00000 n +0000002663 00000 n +0000002764 00000 n +0000002866 00000 n +0000002968 00000 n +0000003070 00000 n +0000003171 00000 n +0000003273 00000 n +0000003375 00000 n +0000003477 00000 n +0000003579 00000 n +0000003681 00000 n +0000003782 00000 n +0000003884 00000 n +0000003986 00000 n +0000004088 00000 n +0000004190 00000 n +0000004292 00000 n +0000004394 00000 n +0000004496 00000 n +0000004598 00000 n +0000004699 00000 n +0000004800 00000 n +0000004902 00000 n +0000005004 00000 n +0000005106 00000 n +0000005208 00000 n +0000005310 00000 n +0000005412 00000 n +0000005514 00000 n +0000005616 00000 n +0000005718 00000 n +0000005820 00000 n +0000005922 00000 n +0000006024 00000 n +0000006126 00000 n +0000006228 00000 n +0000006330 00000 n +0000006431 00000 n +0000006531 00000 n +0000006631 00000 n +0000006941 00000 n +0000007042 00000 n +0000007144 00000 n +0000007246 00000 n +0000007348 00000 n +0000007450 00000 n +0000007551 00000 n +0000007653 00000 n +0000007755 00000 n +0000007857 00000 n +0000007959 00000 n +0000008061 00000 n +0000008163 00000 n +0000008264 00000 n +0000008366 00000 n +0000008468 00000 n +0000008570 00000 n +0000008672 00000 n +0000008774 00000 n +0000008876 00000 n +0000008978 00000 n +0000009080 00000 n +0000009182 00000 n +0000009283 00000 n +0000009384 00000 n +0000009486 00000 n +0000009588 00000 n +0000009690 00000 n +0000009792 00000 n +0000009894 00000 n +0000009996 00000 n +0000010098 00000 n +0000010200 00000 n +0000010302 00000 n +0000010404 00000 n +0000010506 00000 n +0000010608 00000 n +0000010710 00000 n +0000010812 00000 n +0000010914 00000 n +0000011016 00000 n +0000011118 00000 n +0000011219 00000 n +0000011319 00000 n +0000011419 00000 n +0000011743 00000 n +0000011844 00000 n +0000011946 00000 n +0000012049 00000 n +0000012152 00000 n +0000012255 00000 n +0000012358 00000 n +0000012461 00000 n +0000012564 00000 n +0000012667 00000 n +0000012770 00000 n +0000012873 00000 n +0000012976 00000 n +0000013079 00000 n +0000013182 00000 n +0000013285 00000 n +0000013388 00000 n +0000013491 00000 n +0000013594 00000 n +0000013697 00000 n +0000013800 00000 n +0000013975 00000 n +0000014030 00000 n +0000014117 00000 n +0000014172 00000 n +0000014259 00000 n +0000014326 00000 n +0000014412 00000 n +0000014514 00000 n +0000014617 00000 n +0000014720 00000 n +0000014823 00000 n +0000014925 00000 n +0000015028 00000 n +0000015131 00000 n +0000015234 00000 n +0000015337 00000 n +0000015440 00000 n +0000015542 00000 n +0000015645 00000 n +0000015748 00000 n +0000015851 00000 n +0000015954 00000 n +0000016057 00000 n +0000016160 00000 n +0000016263 00000 n +0000016366 00000 n +0000016468 00000 n +0000016570 00000 n +0000016673 00000 n +0000016776 00000 n +0000016879 00000 n +0000016982 00000 n +0000017085 00000 n +0000017188 00000 n +0000017291 00000 n +0000017394 00000 n +0000017497 00000 n +0000017600 00000 n +0000017703 00000 n +0000017806 00000 n +0000017908 00000 n +0000018009 00000 n +0000018110 00000 n +0000018439 00000 n +0000018542 00000 n +0000018645 00000 n +0000018748 00000 n +0000018851 00000 n +0000018954 00000 n +0000019057 00000 n +0000019160 00000 n +0000019262 00000 n +0000019365 00000 n +0000019468 00000 n +0000019571 00000 n +0000019674 00000 n +0000019777 00000 n +0000019880 00000 n +0000019982 00000 n +0000020085 00000 n +0000020188 00000 n +0000020291 00000 n +0000020394 00000 n +0000020497 00000 n +0000020600 00000 n +0000020703 00000 n +0000020806 00000 n +0000020909 00000 n +0000021011 00000 n +0000021113 00000 n +0000021216 00000 n +0000021319 00000 n +0000021422 00000 n +0000021525 00000 n +0000021628 00000 n +0000021731 00000 n +0000021834 00000 n +0000021937 00000 n +0000022040 00000 n +0000022143 00000 n +0000022246 00000 n +0000022349 00000 n +0000022452 00000 n +0000022555 00000 n +0000022658 00000 n +0000022761 00000 n +0000022864 00000 n +0000022967 00000 n +0000023070 00000 n +0000023173 00000 n +0000023276 00000 n +0000023379 00000 n +0000023481 00000 n +0000023582 00000 n +0000023683 00000 n +0000024108 00000 n +0000024211 00000 n +0000024314 00000 n +0000024417 00000 n +0000024520 00000 n +0000024623 00000 n +0000024726 00000 n +0000024829 00000 n +0000024932 00000 n +0000025035 00000 n +0000025138 00000 n +0000025241 00000 n +0000025344 00000 n +0000025447 00000 n +0000025550 00000 n +0000025679 00000 n +0000025763 00000 n +0000025849 00000 n +0000025923 00000 n +0000026009 00000 n +0000026042 00000 n +0000026120 00000 n +0000026207 00000 n +0000026313 00000 n +0000026399 00000 n +0000026471 00000 n +0000026557 00000 n +0000026616 00000 n +0000026703 00000 n +0000026794 00000 n +0000026880 00000 n +0000026951 00000 n +0000027037 00000 n +0000027102 00000 n +0000027136 00000 n +0000027170 00000 n +0000030104 00000 n +0000030147 00000 n +0000030190 00000 n +0000030233 00000 n +0000030276 00000 n +0000030319 00000 n +0000030362 00000 n +0000030405 00000 n +0000030448 00000 n +0000030491 00000 n +0000030534 00000 n +0000030577 00000 n +0000030620 00000 n +0000030663 00000 n +0000030706 00000 n +0000030749 00000 n +0000030792 00000 n +0000030835 00000 n +0000030878 00000 n +0000030921 00000 n +0000030964 00000 n +0000031007 00000 n +0000031050 00000 n +0000031093 00000 n +0000031136 00000 n +0000031179 00000 n +0000031222 00000 n +0000031265 00000 n +0000031308 00000 n +0000031351 00000 n +0000031394 00000 n +0000031437 00000 n +0000031480 00000 n +0000031523 00000 n +0000031566 00000 n +0000031609 00000 n +0000031652 00000 n +0000031695 00000 n +0000031738 00000 n +0000031781 00000 n +0000031824 00000 n +0000031867 00000 n +0000031910 00000 n +0000031953 00000 n +0000031996 00000 n +0000032039 00000 n +0000032082 00000 n +0000032125 00000 n +0000032168 00000 n +0000032211 00000 n +0000032254 00000 n +0000032297 00000 n +0000032340 00000 n +0000032383 00000 n +0000032426 00000 n +0000032469 00000 n +0000032512 00000 n +0000032555 00000 n +0000032598 00000 n +0000032641 00000 n +0000032684 00000 n +0000032727 00000 n +0000032770 00000 n +0000032813 00000 n +0000032856 00000 n +0000032899 00000 n +0000032942 00000 n +0000032985 00000 n +0000033028 00000 n +0000033071 00000 n +0000033114 00000 n +0000033157 00000 n +0000033200 00000 n +0000033243 00000 n +0000033286 00000 n +0000033329 00000 n +0000033372 00000 n +0000033415 00000 n +0000033458 00000 n +0000033501 00000 n +0000033544 00000 n +0000033587 00000 n +0000033630 00000 n +0000033673 00000 n +0000033716 00000 n +0000033759 00000 n +0000033802 00000 n +0000033845 00000 n +0000033888 00000 n +0000033931 00000 n +0000033974 00000 n +0000034017 00000 n +0000034060 00000 n +0000034103 00000 n +0000034146 00000 n +0000034189 00000 n +0000034232 00000 n +0000034275 00000 n +0000034318 00000 n +0000034361 00000 n +0000034404 00000 n +0000034447 00000 n +0000034490 00000 n +0000034533 00000 n +0000034576 00000 n +0000034619 00000 n +0000034662 00000 n +0000034705 00000 n +0000034748 00000 n +0000034791 00000 n +0000034834 00000 n +0000034877 00000 n +0000034920 00000 n +0000034963 00000 n +0000035006 00000 n +0000035049 00000 n +0000035092 00000 n +0000035135 00000 n +0000035178 00000 n +0000035221 00000 n +0000035264 00000 n +0000035307 00000 n +0000035350 00000 n +0000035393 00000 n +0000035436 00000 n +0000035479 00000 n +0000035522 00000 n +0000035565 00000 n +0000035608 00000 n +0000035651 00000 n +0000035694 00000 n +0000035737 00000 n +0000035780 00000 n +0000035823 00000 n +0000035866 00000 n +0000035909 00000 n +0000035952 00000 n +0000035995 00000 n +0000036038 00000 n +0000036081 00000 n +0000036124 00000 n +0000036167 00000 n +0000036210 00000 n +0000036253 00000 n +0000036296 00000 n +0000036339 00000 n +0000036382 00000 n +0000036425 00000 n +0000036468 00000 n +0000036511 00000 n +0000036554 00000 n +0000036597 00000 n +0000036640 00000 n +0000036683 00000 n +0000036726 00000 n +0000036769 00000 n +0000036812 00000 n +0000036855 00000 n +0000036898 00000 n +0000036941 00000 n +0000036984 00000 n +0000037027 00000 n +0000037070 00000 n +0000037113 00000 n +0000037156 00000 n +0000037199 00000 n +0000037242 00000 n +0000037285 00000 n +0000037328 00000 n +0000037371 00000 n +0000037414 00000 n +0000037457 00000 n +0000037500 00000 n +0000037543 00000 n +0000037586 00000 n +0000037629 00000 n +0000037672 00000 n +0000037715 00000 n +0000037758 00000 n +0000037801 00000 n +0000037844 00000 n +0000037887 00000 n +0000037930 00000 n +0000038505 00000 n +0000038661 00000 n +0000038828 00000 n +0000039016 00000 n +0000041152 00000 n +0000041340 00000 n +0000043961 00000 n +0000044150 00000 n +0000045607 00000 n +0000045763 00000 n +0000045992 00000 n +0000046190 00000 n +0000047898 00000 n +0000048069 00000 n +0000050000 00000 n +0000050171 00000 n +0000050953 00000 n +0000051118 00000 n +0000052748 00000 n +0000052913 00000 n +0000054450 00000 n +0000054615 00000 n +0000056332 00000 n +0000056497 00000 n +0000058227 00000 n +0000058401 00000 n +0000059696 00000 n +0000059870 00000 n +0000061162 00000 n +0000061336 00000 n +0000062674 00000 n +0000062839 00000 n +0000063736 00000 n +0000063925 00000 n +0000065881 00000 n +0000066037 00000 n +0000067813 00000 n +0000067978 00000 n +0000069941 00000 n +0000070106 00000 n +0000070819 00000 n +0000070993 00000 n +0000072022 00000 n +0000072187 00000 n +0000073829 00000 n +0000073994 00000 n +0000074614 00000 n +0000074788 00000 n +0000076148 00000 n +0000076322 00000 n +0000077470 00000 n +0000077635 00000 n +0000078271 00000 n +0000078436 00000 n +0000080201 00000 n +0000080366 00000 n +0000082234 00000 n +0000082399 00000 n +0000084358 00000 n +0000084514 00000 n +0000085295 00000 n +0000085478 00000 n +0000087127 00000 n +0000087292 00000 n +0000088207 00000 n +0000088405 00000 n +0000090121 00000 n +0000090295 00000 n +0000092104 00000 n +0000092278 00000 n +0000092867 00000 n +0000093041 00000 n +0000093791 00000 n +0000093965 00000 n +0000094699 00000 n +0000094873 00000 n +0000095695 00000 n +0000095869 00000 n +0000096684 00000 n +0000096867 00000 n +0000097727 00000 n +0000097901 00000 n +0000098649 00000 n +0000098814 00000 n +0000099434 00000 n +0000099617 00000 n +0000100370 00000 n +0000100544 00000 n +0000101497 00000 n +0000101680 00000 n +0000103010 00000 n +0000103193 00000 n +0000104237 00000 n +0000104402 00000 n +0000104977 00000 n +0000105160 00000 n +0000106211 00000 n +0000106385 00000 n +0000107263 00000 n +0000107437 00000 n +0000108516 00000 n +0000108699 00000 n +0000109540 00000 n +0000109723 00000 n +0000110488 00000 n +0000110662 00000 n +0000111193 00000 n +0000111367 00000 n +0000112043 00000 n +0000112226 00000 n +0000113142 00000 n +0000113316 00000 n +0000114266 00000 n +0000114440 00000 n +0000115367 00000 n +0000115550 00000 n +0000116436 00000 n +0000116610 00000 n +0000117373 00000 n +0000117547 00000 n +0000118214 00000 n +0000118388 00000 n +0000119204 00000 n +0000119378 00000 n +0000120347 00000 n +0000120512 00000 n +0000121934 00000 n +0000122117 00000 n +0000122837 00000 n +0000123020 00000 n +0000123632 00000 n +0000123797 00000 n +0000124174 00000 n +0000124230 00000 n +0000124329 00000 n +0000124482 00000 n +0000124561 00000 n +0000124664 00000 n +0000124851 00000 n +0000124940 00000 n +0000125052 00000 n +0000125146 00000 n +0000125295 00000 n +0000125389 00000 n +0000125508 00000 n +0000125617 00000 n +0000125726 00000 n +0000125819 00000 n +0000125972 00000 n +0000126071 00000 n +0000126185 00000 n +0000126302 00000 n +0000126419 00000 n +0000126550 00000 n +0000126643 00000 n +0000126748 00000 n +0000126851 00000 n +0000126964 00000 n +0000127110 00000 n +0000127210 00000 n +0000127322 00000 n +0000127475 00000 n +0000127572 00000 n +0000127682 00000 n +0000127797 00000 n +0000127907 00000 n +0000128017 00000 n +0000128128 00000 n +0000128239 00000 n +0000128354 00000 n +0000128469 00000 n +0000128585 00000 n +0000128701 00000 n +0000128812 00000 n +0000128923 00000 n +0000129039 00000 n +0000129142 00000 n +0000129294 00000 n +0000129386 00000 n +0000129480 00000 n +0000129582 00000 n +0000129730 00000 n +0000129864 00000 n +0000129968 00000 n +0000130092 00000 n +0000130198 00000 n +0000130322 00000 n +0000130405 00000 n +0000130559 00000 n +0000130653 00000 n +0000130757 00000 n +0000130866 00000 n +0000130970 00000 n +0000131072 00000 n +0000131177 00000 n +0000131285 00000 n +0000131392 00000 n +0000131493 00000 n +0000131614 00000 n +0000131747 00000 n +0000131877 00000 n +0000131966 00000 n +0000132055 00000 n +0000132206 00000 n +0000132293 00000 n +0000132400 00000 n +0000132492 00000 n +0000132654 00000 n +0000132747 00000 n +0000132848 00000 n +0000132947 00000 n +0000133061 00000 n +0000133181 00000 n +0000133291 00000 n +0000133407 00000 n +0000133531 00000 n +0000133641 00000 n +0000133745 00000 n +0000133855 00000 n +0000133953 00000 n +0000134116 00000 n +0000134219 00000 n +0000134332 00000 n +0000134450 00000 n +0000134558 00000 n +0000134654 00000 n +0000134811 00000 n +0000134906 00000 n +0000134997 00000 n +0000135154 00000 n +0000135250 00000 n +0000135351 00000 n +0000135528 00000 n +0000135621 00000 n +0000135724 00000 n +0000135814 00000 n +0000135945 00000 n +0000136042 00000 n +0000136139 00000 n +trailer +<]>> +startxref +136539 +%%EOF diff --git a/docs/Samba-HOWTO-Collection.pdf b/docs/Samba-HOWTO-Collection.pdf index 85326c8b8ce..81199718981 100644 --- a/docs/Samba-HOWTO-Collection.pdf +++ b/docs/Samba-HOWTO-Collection.pdf @@ -1,6 +1,6 @@ %PDF-1.3 %âãÏÓ -1 0 obj<>endobj +1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj 4 0 obj<>endobj @@ -13,50 +13,50 @@ 11 0 obj<>endobj 12 0 obj<>endobj 13 0 obj<>endobj -14 0 obj<>endobj -15 0 obj<>endobj -16 0 obj<>endobj -17 0 obj<>endobj -18 0 obj<>endobj -19 0 obj<>endobj -20 0 obj<>endobj -21 0 obj<>endobj -22 0 obj<>endobj -23 0 obj<>endobj -24 0 obj<>endobj -25 0 obj<>endobj -26 0 obj<>endobj -27 0 obj<>endobj -28 0 obj<>endobj -29 0 obj<>endobj -30 0 obj<>endobj -31 0 obj<>endobj -32 0 obj<>endobj -33 0 obj<>endobj -34 0 obj<>endobj -35 0 obj<>endobj -36 0 obj<>endobj -37 0 obj<>endobj -38 0 obj<>endobj -39 0 obj<>endobj -40 0 obj<>endobj -41 0 obj<>endobj -42 0 obj<>endobj -43 0 obj<>endobj -44 0 obj<>endobj -45 0 obj<>endobj -46 0 obj<>endobj -47 0 obj<>endobj -48 0 obj<>endobj -49 0 obj<>endobj -50 0 obj<>endobj -51 0 obj<>endobj -52 0 obj<>endobj -53 0 obj<>endobj -54 0 obj<>endobj -55 0 obj<>endobj -56 0 obj<>endobj -57 0 obj<>endobj +14 0 obj<>endobj +15 0 obj<>endobj +16 0 obj<>endobj +17 0 obj<>endobj +18 0 obj<>endobj +19 0 obj<>endobj +20 0 obj<>endobj +21 0 obj<>endobj +22 0 obj<>endobj +23 0 obj<>endobj +24 0 obj<>endobj +25 0 obj<>endobj +26 0 obj<>endobj +27 0 obj<>endobj +28 0 obj<>endobj +29 0 obj<>endobj +30 0 obj<>endobj +31 0 obj<>endobj +32 0 obj<>endobj +33 0 obj<>endobj +34 0 obj<>endobj +35 0 obj<>endobj +36 0 obj<>endobj +37 0 obj<>endobj +38 0 obj<>endobj +39 0 obj<>endobj +40 0 obj<>endobj +41 0 obj<>endobj +42 0 obj<>endobj +43 0 obj<>endobj +44 0 obj<>endobj +45 0 obj<>endobj +46 0 obj<>endobj +47 0 obj<>endobj +48 0 obj<>endobj +49 0 obj<>endobj +50 0 obj<>endobj +51 0 obj<>endobj +52 0 obj<>endobj +53 0 obj<>endobj +54 0 obj<>endobj +55 0 obj<>endobj +56 0 obj<>endobj +57 0 obj<>endobj 58 0 obj[14 0 R 15 0 R 16 0 R @@ -101,50 +101,50 @@ 55 0 R 56 0 R 57 0 R]endobj -59 0 obj<>endobj -60 0 obj<>endobj -61 0 obj<>endobj -62 0 obj<>endobj -63 0 obj<>endobj -64 0 obj<>endobj -65 0 obj<>endobj -66 0 obj<>endobj -67 0 obj<>endobj -68 0 obj<>endobj -69 0 obj<>endobj -70 0 obj<>endobj -71 0 obj<>endobj -72 0 obj<>endobj -73 0 obj<>endobj -74 0 obj<>endobj -75 0 obj<>endobj -76 0 obj<>endobj -77 0 obj<>endobj -78 0 obj<>endobj -79 0 obj<>endobj -80 0 obj<>endobj -81 0 obj<>endobj -82 0 obj<>endobj -83 0 obj<>endobj -84 0 obj<>endobj -85 0 obj<>endobj -86 0 obj<>endobj -87 0 obj<>endobj -88 0 obj<>endobj -89 0 obj<>endobj -90 0 obj<>endobj -91 0 obj<>endobj -92 0 obj<>endobj -93 0 obj<>endobj -94 0 obj<>endobj -95 0 obj<>endobj -96 0 obj<>endobj -97 0 obj<>endobj -98 0 obj<>endobj -99 0 obj<>endobj -100 0 obj<>endobj -101 0 obj<>endobj -102 0 obj<>endobj +59 0 obj<>endobj +60 0 obj<>endobj +61 0 obj<>endobj +62 0 obj<>endobj +63 0 obj<>endobj +64 0 obj<>endobj +65 0 obj<>endobj +66 0 obj<>endobj +67 0 obj<>endobj +68 0 obj<>endobj +69 0 obj<>endobj +70 0 obj<>endobj +71 0 obj<>endobj +72 0 obj<>endobj +73 0 obj<>endobj +74 0 obj<>endobj +75 0 obj<>endobj +76 0 obj<>endobj +77 0 obj<>endobj +78 0 obj<>endobj +79 0 obj<>endobj +80 0 obj<>endobj +81 0 obj<>endobj +82 0 obj<>endobj +83 0 obj<>endobj +84 0 obj<>endobj +85 0 obj<>endobj +86 0 obj<>endobj +87 0 obj<>endobj +88 0 obj<>endobj +89 0 obj<>endobj +90 0 obj<>endobj +91 0 obj<>endobj +92 0 obj<>endobj +93 0 obj<>endobj +94 0 obj<>endobj +95 0 obj<>endobj +96 0 obj<>endobj +97 0 obj<>endobj +98 0 obj<>endobj +99 0 obj<>endobj +100 0 obj<>endobj +101 0 obj<>endobj +102 0 obj<>endobj 103 0 obj[59 0 R 60 0 R 61 0 R @@ -189,49 +189,49 @@ 100 0 R 101 0 R 102 0 R]endobj -104 0 obj<>endobj -105 0 obj<>endobj -106 0 obj<>endobj -107 0 obj<>endobj -108 0 obj<>endobj -109 0 obj<>endobj -110 0 obj<>endobj -111 0 obj<>endobj -112 0 obj<>endobj -113 0 obj<>endobj -114 0 obj<>endobj -115 0 obj<>endobj -116 0 obj<>endobj -117 0 obj<>endobj -118 0 obj<>endobj -119 0 obj<>endobj -120 0 obj<>endobj -121 0 obj<>endobj -122 0 obj<>endobj -123 0 obj<>endobj -124 0 obj<>endobj -125 0 obj<>endobj -126 0 obj<>endobj -127 0 obj<>endobj -128 0 obj<>endobj -129 0 obj<>endobj -130 0 obj<>endobj -131 0 obj<>endobj -132 0 obj<>endobj -133 0 obj<>endobj -134 0 obj<>endobj -135 0 obj<>endobj -136 0 obj<>endobj -137 0 obj<>endobj -138 0 obj<>endobj -139 0 obj<>endobj -140 0 obj<>endobj -141 0 obj<>endobj -142 0 obj<>endobj -143 0 obj<>endobj -144 0 obj<>endobj -145 0 obj<>endobj -146 0 obj<>endobj +104 0 obj<>endobj +105 0 obj<>endobj +106 0 obj<>endobj +107 0 obj<>endobj +108 0 obj<>endobj +109 0 obj<>endobj +110 0 obj<>endobj +111 0 obj<>endobj +112 0 obj<>endobj +113 0 obj<>endobj +114 0 obj<>endobj +115 0 obj<>endobj +116 0 obj<>endobj +117 0 obj<>endobj +118 0 obj<>endobj +119 0 obj<>endobj +120 0 obj<>endobj +121 0 obj<>endobj +122 0 obj<>endobj +123 0 obj<>endobj +124 0 obj<>endobj +125 0 obj<>endobj +126 0 obj<>endobj +127 0 obj<>endobj +128 0 obj<>endobj +129 0 obj<>endobj +130 0 obj<>endobj +131 0 obj<>endobj +132 0 obj<>endobj +133 0 obj<>endobj +134 0 obj<>endobj +135 0 obj<>endobj +136 0 obj<>endobj +137 0 obj<>endobj +138 0 obj<>endobj +139 0 obj<>endobj +140 0 obj<>endobj +141 0 obj<>endobj +142 0 obj<>endobj +143 0 obj<>endobj +144 0 obj<>endobj +145 0 obj<>endobj +146 0 obj<>endobj 147 0 obj[104 0 R 105 0 R 106 0 R @@ -275,50 +275,50 @@ 144 0 R 145 0 R 146 0 R]endobj -148 0 obj<>endobj -149 0 obj<>endobj -150 0 obj<>endobj -151 0 obj<>endobj -152 0 obj<>endobj -153 0 obj<>endobj -154 0 obj<>endobj -155 0 obj<>endobj -156 0 obj<>endobj -157 0 obj<>endobj -158 0 obj<>endobj -159 0 obj<>endobj -160 0 obj<>endobj -161 0 obj<>endobj -162 0 obj<>endobj -163 0 obj<>endobj -164 0 obj<>endobj -165 0 obj<>endobj -166 0 obj<>endobj -167 0 obj<>endobj -168 0 obj<>endobj -169 0 obj<>endobj -170 0 obj<>endobj -171 0 obj<>endobj -172 0 obj<>endobj -173 0 obj<>endobj -174 0 obj<>endobj -175 0 obj<>endobj -176 0 obj<>endobj -177 0 obj<>endobj -178 0 obj<>endobj -179 0 obj<>endobj -180 0 obj<>endobj -181 0 obj<>endobj -182 0 obj<>endobj -183 0 obj<>endobj -184 0 obj<>endobj -185 0 obj<>endobj -186 0 obj<>endobj -187 0 obj<>endobj -188 0 obj<>endobj -189 0 obj<>endobj -190 0 obj<>endobj -191 0 obj<>endobj +148 0 obj<>endobj +149 0 obj<>endobj +150 0 obj<>endobj +151 0 obj<>endobj +152 0 obj<>endobj +153 0 obj<>endobj +154 0 obj<>endobj +155 0 obj<>endobj +156 0 obj<>endobj +157 0 obj<>endobj +158 0 obj<>endobj +159 0 obj<>endobj +160 0 obj<>endobj +161 0 obj<>endobj +162 0 obj<>endobj +163 0 obj<>endobj +164 0 obj<>endobj +165 0 obj<>endobj +166 0 obj<>endobj +167 0 obj<>endobj +168 0 obj<>endobj +169 0 obj<>endobj +170 0 obj<>endobj +171 0 obj<>endobj +172 0 obj<>endobj +173 0 obj<>endobj +174 0 obj<>endobj +175 0 obj<>endobj +176 0 obj<>endobj +177 0 obj<>endobj +178 0 obj<>endobj +179 0 obj<>endobj +180 0 obj<>endobj +181 0 obj<>endobj +182 0 obj<>endobj +183 0 obj<>endobj +184 0 obj<>endobj +185 0 obj<>endobj +186 0 obj<>endobj +187 0 obj<>endobj +188 0 obj<>endobj +189 0 obj<>endobj +190 0 obj<>endobj +191 0 obj<>endobj 192 0 obj[148 0 R 149 0 R 150 0 R @@ -363,47 +363,52 @@ 189 0 R 190 0 R 191 0 R]endobj -193 0 obj<>endobj -194 0 obj<>endobj -195 0 obj<>endobj -196 0 obj<>endobj -197 0 obj<>endobj -198 0 obj<>endobj -199 0 obj<>endobj -200 0 obj<>endobj -201 0 obj<>endobj -202 0 obj<>endobj -203 0 obj<>endobj -204 0 obj<>endobj -205 0 obj<>endobj -206 0 obj<>endobj -207 0 obj<>endobj -208 0 obj<>endobj -209 0 obj<>endobj -210 0 obj<>endobj -211 0 obj<>endobj -212 0 obj<>endobj -213 0 obj<>endobj -214 0 obj<>endobj -215 0 obj<>endobj -216 0 obj<>endobj -217 0 obj<>endobj -218 0 obj<>endobj -219 0 obj<>endobj -220 0 obj<>endobj -221 0 obj<>endobj -222 0 obj<>endobj -223 0 obj<>endobj -224 0 obj<>endobj -225 0 obj<>endobj -226 0 obj<>endobj -227 0 obj<>endobj -228 0 obj<>endobj -229 0 obj<>endobj -230 0 obj<>endobj -231 0 obj<>endobj -232 0 obj<>endobj -233 0 obj[193 0 R +193 0 obj<>endobj +194 0 obj<>endobj +195 0 obj<>endobj +196 0 obj<>endobj +197 0 obj<>endobj +198 0 obj<>endobj +199 0 obj<>endobj +200 0 obj<>endobj +201 0 obj<>endobj +202 0 obj<>endobj +203 0 obj<>endobj +204 0 obj<>endobj +205 0 obj<>endobj +206 0 obj<>endobj +207 0 obj<>endobj +208 0 obj<>endobj +209 0 obj<>endobj +210 0 obj<>endobj +211 0 obj<>endobj +212 0 obj<>endobj +213 0 obj<>endobj +214 0 obj<>endobj +215 0 obj<>endobj +216 0 obj<>endobj +217 0 obj<>endobj +218 0 obj<>endobj +219 0 obj<>endobj +220 0 obj<>endobj +221 0 obj<>endobj +222 0 obj<>endobj +223 0 obj<>endobj +224 0 obj<>endobj +225 0 obj<>endobj +226 0 obj<>endobj +227 0 obj<>endobj +228 0 obj<>endobj +229 0 obj<>endobj +230 0 obj<>endobj +231 0 obj<>endobj +232 0 obj<>endobj +233 0 obj<>endobj +234 0 obj<>endobj +235 0 obj<>endobj +236 0 obj<>endobj +237 0 obj<>endobj +238 0 obj[193 0 R 194 0 R 195 0 R 196 0 R @@ -442,63 +447,70 @@ 229 0 R 230 0 R 231 0 R -232 0 R]endobj -234 0 obj<>endobj -235 0 obj<>endobj -236 0 obj<>endobj -237 0 obj<>endobj -238 0 obj<>endobj -239 0 obj<>endobj -240 0 obj<>endobj -241 0 obj<>endobj -242 0 obj<>endobj -243 0 obj<>endobj -244 0 obj<>endobj -245 0 obj<>endobj -246 0 obj<>endobj -247 0 obj<>endobj -248 0 obj<>endobj -249 0 obj<>endobj -250 0 obj<>endobj -251 0 obj<>endobj -252 0 obj<>endobj -253 0 obj<>endobj -254 0 obj<>endobj -255 0 obj<>endobj -256 0 obj<>endobj -257 0 obj<>endobj -258 0 obj<>endobj -259 0 obj<>endobj -260 0 obj<>endobj -261 0 obj<>endobj -262 0 obj<>endobj -263 0 obj<>endobj -264 0 obj<>endobj -265 0 obj<>endobj -266 0 obj<>endobj -267 0 obj<>endobj -268 0 obj<>endobj -269 0 obj<>endobj -270 0 obj<>endobj -271 0 obj<>endobj -272 0 obj<>endobj -273 0 obj<>endobj -274 0 obj[235 0 R -237 0 R -239 0 R +232 0 R +233 0 R +234 0 R +235 0 R +236 0 R +237 0 R]endobj +239 0 obj<>endobj +240 0 obj<>endobj +241 0 obj<>endobj +242 0 obj<>endobj +243 0 obj<>endobj +244 0 obj<>endobj +245 0 obj<>endobj +246 0 obj<>endobj +247 0 obj[239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R -246 0 R -247 0 R -248 0 R -249 0 R -250 0 R +246 0 R]endobj +248 0 obj<>endobj +249 0 obj<>endobj +250 0 obj<>endobj +251 0 obj<>endobj +252 0 obj<>endobj +253 0 obj<>endobj +254 0 obj<>endobj +255 0 obj<>endobj +256 0 obj<>endobj +257 0 obj<>endobj +258 0 obj<>endobj +259 0 obj<>endobj +260 0 obj<>endobj +261 0 obj<>endobj +262 0 obj<>endobj +263 0 obj<>endobj +264 0 obj<>endobj +265 0 obj<>endobj +266 0 obj<>endobj +267 0 obj<>endobj +268 0 obj<>endobj +269 0 obj<>endobj +270 0 obj<>endobj +271 0 obj<>endobj +272 0 obj<>endobj +273 0 obj<>endobj +274 0 obj<>endobj +275 0 obj<>endobj +276 0 obj<>endobj +277 0 obj<>endobj +278 0 obj<>endobj +279 0 obj<>endobj +280 0 obj<>endobj +281 0 obj<>endobj +282 0 obj<>endobj +283 0 obj<>endobj +284 0 obj<>endobj +285 0 obj<>endobj +286 0 obj<>endobj +287 0 obj<>endobj +288 0 obj[249 0 R 251 0 R -252 0 R 253 0 R 254 0 R 255 0 R @@ -519,59 +531,9 @@ 270 0 R 271 0 R 272 0 R -273 0 R]endobj -275 0 obj<>endobj -276 0 obj<>endobj -277 0 obj<>endobj -278 0 obj<>endobj -279 0 obj<>endobj -280 0 obj<>endobj -281 0 obj<>endobj -282 0 obj<>endobj -283 0 obj<>endobj -284 0 obj<>endobj -285 0 obj<>endobj -286 0 obj<>endobj -287 0 obj<>endobj -288 0 obj<>endobj -289 0 obj<>endobj -290 0 obj<>endobj -291 0 obj<>endobj -292 0 obj<>endobj -293 0 obj<>endobj -294 0 obj<>endobj -295 0 obj<>endobj -296 0 obj<>endobj -297 0 obj<>endobj -298 0 obj<>endobj -299 0 obj<>endobj -300 0 obj<>endobj -301 0 obj<>endobj -302 0 obj<>endobj -303 0 obj<>endobj -304 0 obj<>endobj -305 0 obj<>endobj -306 0 obj<>endobj -307 0 obj<>endobj -308 0 obj<>endobj -309 0 obj<>endobj -310 0 obj<>endobj -311 0 obj<>endobj -312 0 obj<>endobj -313 0 obj<>endobj -314 0 obj<>endobj -315 0 obj<>endobj -316 0 obj<>endobj -317 0 obj<>endobj -318 0 obj<>endobj -319 0 obj<>endobj -320 0 obj<>endobj -321 0 obj<>endobj -322 0 obj<>endobj -323 0 obj<>endobj -324 0 obj<>endobj -325 0 obj<>endobj -326 0 obj[275 0 R +273 0 R +274 0 R +275 0 R 276 0 R 277 0 R 278 0 R @@ -583,9 +545,59 @@ 284 0 R 285 0 R 286 0 R -287 0 R -288 0 R -289 0 R +287 0 R]endobj +289 0 obj<>endobj +290 0 obj<>endobj +291 0 obj<>endobj +292 0 obj<>endobj +293 0 obj<>endobj +294 0 obj<>endobj +295 0 obj<>endobj +296 0 obj<>endobj +297 0 obj<>endobj +298 0 obj<>endobj +299 0 obj<>endobj +300 0 obj<>endobj +301 0 obj<>endobj +302 0 obj<>endobj +303 0 obj<>endobj +304 0 obj<>endobj +305 0 obj<>endobj +306 0 obj<>endobj +307 0 obj<>endobj +308 0 obj<>endobj +309 0 obj<>endobj +310 0 obj<>endobj +311 0 obj<>endobj +312 0 obj<>endobj +313 0 obj<>endobj +314 0 obj<>endobj +315 0 obj<>endobj +316 0 obj<>endobj +317 0 obj<>endobj +318 0 obj<>endobj +319 0 obj<>endobj +320 0 obj<>endobj +321 0 obj<>endobj +322 0 obj<>endobj +323 0 obj<>endobj +324 0 obj<>endobj +325 0 obj<>endobj +326 0 obj<>endobj +327 0 obj<>endobj +328 0 obj<>endobj +329 0 obj<>endobj +330 0 obj<>endobj +331 0 obj<>endobj +332 0 obj<>endobj +333 0 obj<>endobj +334 0 obj<>endobj +335 0 obj<>endobj +336 0 obj<>endobj +337 0 obj<>endobj +338 0 obj<>endobj +339 0 obj<>endobj +340 0 obj[289 0 R 290 0 R 291 0 R 292 0 R @@ -621,59 +633,9 @@ 322 0 R 323 0 R 324 0 R -325 0 R]endobj -327 0 obj<>endobj -328 0 obj<>endobj -329 0 obj<>endobj -330 0 obj<>endobj -331 0 obj<>endobj -332 0 obj<>endobj -333 0 obj<>endobj -334 0 obj<>endobj -335 0 obj<>endobj -336 0 obj<>endobj -337 0 obj<>endobj -338 0 obj<>endobj -339 0 obj<>endobj -340 0 obj<>endobj -341 0 obj<>endobj -342 0 obj<>endobj -343 0 obj<>endobj -344 0 obj<>endobj -345 0 obj<>endobj -346 0 obj<>endobj -347 0 obj<>endobj -348 0 obj<>endobj -349 0 obj<>endobj -350 0 obj<>endobj -351 0 obj<>endobj -352 0 obj<>endobj -353 0 obj<>endobj -354 0 obj<>endobj -355 0 obj<>endobj -356 0 obj<>endobj -357 0 obj<>endobj -358 0 obj<>endobj -359 0 obj<>endobj -360 0 obj<>endobj -361 0 obj<>endobj -362 0 obj<>endobj -363 0 obj<>endobj -364 0 obj<>endobj -365 0 obj<>endobj -366 0 obj<>endobj -367 0 obj<>endobj -368 0 obj<>endobj -369 0 obj<>endobj -370 0 obj<>endobj -371 0 obj<>endobj -372 0 obj<>endobj -373 0 obj<>endobj -374 0 obj<>endobj -375 0 obj<>endobj -376 0 obj<>endobj -377 0 obj<>endobj -378 0 obj[327 0 R +325 0 R +326 0 R +327 0 R 328 0 R 329 0 R 330 0 R @@ -685,9 +647,59 @@ 336 0 R 337 0 R 338 0 R -339 0 R -340 0 R -341 0 R +339 0 R]endobj +341 0 obj<>endobj +342 0 obj<>endobj +343 0 obj<>endobj +344 0 obj<>endobj +345 0 obj<>endobj +346 0 obj<>endobj +347 0 obj<>endobj +348 0 obj<>endobj +349 0 obj<>endobj +350 0 obj<>endobj +351 0 obj<>endobj +352 0 obj<>endobj +353 0 obj<>endobj +354 0 obj<>endobj +355 0 obj<>endobj +356 0 obj<>endobj +357 0 obj<>endobj +358 0 obj<>endobj +359 0 obj<>endobj +360 0 obj<>endobj +361 0 obj<>endobj +362 0 obj<>endobj +363 0 obj<>endobj +364 0 obj<>endobj +365 0 obj<>endobj +366 0 obj<>endobj +367 0 obj<>endobj +368 0 obj<>endobj +369 0 obj<>endobj +370 0 obj<>endobj +371 0 obj<>endobj +372 0 obj<>endobj +373 0 obj<>endobj +374 0 obj<>endobj +375 0 obj<>endobj +376 0 obj<>endobj +377 0 obj<>endobj +378 0 obj<>endobj +379 0 obj<>endobj +380 0 obj<>endobj +381 0 obj<>endobj +382 0 obj<>endobj +383 0 obj<>endobj +384 0 obj<>endobj +385 0 obj<>endobj +386 0 obj<>endobj +387 0 obj<>endobj +388 0 obj<>endobj +389 0 obj<>endobj +390 0 obj<>endobj +391 0 obj<>endobj +392 0 obj[341 0 R 342 0 R 343 0 R 344 0 R @@ -723,59 +735,9 @@ 374 0 R 375 0 R 376 0 R -377 0 R]endobj -379 0 obj<>endobj -380 0 obj<>endobj -381 0 obj<>endobj -382 0 obj<>endobj -383 0 obj<>endobj -384 0 obj<>endobj -385 0 obj<>endobj -386 0 obj<>endobj -387 0 obj<>endobj -388 0 obj<>endobj -389 0 obj<>endobj -390 0 obj<>endobj -391 0 obj<>endobj -392 0 obj<>endobj -393 0 obj<>endobj -394 0 obj<>endobj -395 0 obj<>endobj -396 0 obj<>endobj -397 0 obj<>endobj -398 0 obj<>endobj -399 0 obj<>endobj -400 0 obj<>endobj -401 0 obj<>endobj -402 0 obj<>endobj -403 0 obj<>endobj -404 0 obj<>endobj -405 0 obj<>endobj -406 0 obj<>endobj -407 0 obj<>endobj -408 0 obj<>endobj -409 0 obj<>endobj -410 0 obj<>endobj -411 0 obj<>endobj -412 0 obj<>endobj -413 0 obj<>endobj -414 0 obj<>endobj -415 0 obj<>endobj -416 0 obj<>endobj -417 0 obj<>endobj -418 0 obj<>endobj -419 0 obj<>endobj -420 0 obj<>endobj -421 0 obj<>endobj -422 0 obj<>endobj -423 0 obj<>endobj -424 0 obj<>endobj -425 0 obj<>endobj -426 0 obj<>endobj -427 0 obj<>endobj -428 0 obj<>endobj -429 0 obj<>endobj -430 0 obj[379 0 R +377 0 R +378 0 R +379 0 R 380 0 R 381 0 R 382 0 R @@ -787,9 +749,59 @@ 388 0 R 389 0 R 390 0 R -391 0 R -392 0 R -393 0 R +391 0 R]endobj +393 0 obj<>endobj +394 0 obj<>endobj +395 0 obj<>endobj +396 0 obj<>endobj +397 0 obj<>endobj +398 0 obj<>endobj +399 0 obj<>endobj +400 0 obj<>endobj +401 0 obj<>endobj +402 0 obj<>endobj +403 0 obj<>endobj +404 0 obj<>endobj +405 0 obj<>endobj +406 0 obj<>endobj +407 0 obj<>endobj +408 0 obj<>endobj +409 0 obj<>endobj +410 0 obj<>endobj +411 0 obj<>endobj +412 0 obj<>endobj +413 0 obj<>endobj +414 0 obj<>endobj +415 0 obj<>endobj +416 0 obj<>endobj +417 0 obj<>endobj +418 0 obj<>endobj +419 0 obj<>endobj +420 0 obj<>endobj +421 0 obj<>endobj +422 0 obj<>endobj +423 0 obj<>endobj +424 0 obj<>endobj +425 0 obj<>endobj +426 0 obj<>endobj +427 0 obj<>endobj +428 0 obj<>endobj +429 0 obj<>endobj +430 0 obj<>endobj +431 0 obj<>endobj +432 0 obj<>endobj +433 0 obj<>endobj +434 0 obj<>endobj +435 0 obj<>endobj +436 0 obj<>endobj +437 0 obj<>endobj +438 0 obj<>endobj +439 0 obj<>endobj +440 0 obj<>endobj +441 0 obj<>endobj +442 0 obj<>endobj +443 0 obj<>endobj +444 0 obj[393 0 R 394 0 R 395 0 R 396 0 R @@ -825,29 +837,9 @@ 426 0 R 427 0 R 428 0 R -429 0 R]endobj -431 0 obj<>endobj -432 0 obj<>endobj -433 0 obj<>endobj -434 0 obj<>endobj -435 0 obj<>endobj -436 0 obj<>endobj -437 0 obj<>endobj -438 0 obj<>endobj -439 0 obj<>endobj -440 0 obj<>endobj -441 0 obj<>endobj -442 0 obj<>endobj -443 0 obj<>endobj -444 0 obj<>endobj -445 0 obj<>endobj -446 0 obj<>endobj -447 0 obj<>endobj -448 0 obj<>endobj -449 0 obj<>endobj -450 0 obj<>endobj -451 0 obj<>endobj -452 0 obj[431 0 R +429 0 R +430 0 R +431 0 R 432 0 R 433 0 R 434 0 R @@ -859,2302 +851,2431 @@ 440 0 R 441 0 R 442 0 R -443 0 R -444 0 R -445 0 R +443 0 R]endobj +445 0 obj<>endobj +446 0 obj<>endobj +447 0 obj<>endobj +448 0 obj<>endobj +449 0 obj<>endobj +450 0 obj<>endobj +451 0 obj<>endobj +452 0 obj<>endobj +453 0 obj<>endobj +454 0 obj<>endobj +455 0 obj<>endobj +456 0 obj<>endobj +457 0 obj<>endobj +458 0 obj<>endobj +459 0 obj<>endobj +460 0 obj<>endobj +461 0 obj<>endobj +462 0 obj<>endobj +463 0 obj<>endobj +464 0 obj<>endobj +465 0 obj<>endobj +466 0 obj<>endobj +467 0 obj<>endobj +468 0 obj<>endobj +469 0 obj<>endobj +470 0 obj<>endobj +471 0 obj<>endobj +472 0 obj<>endobj +473 0 obj<>endobj +474 0 obj<>endobj +475 0 obj<>endobj +476 0 obj<>endobj +477 0 obj<>endobj +478 0 obj<>endobj +479 0 obj[445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R -451 0 R]endobj -453 0 obj<>endobj -454 0 obj<>endobj -455 0 obj[454 0 R]endobj -456 0 obj<>endobj -457 0 obj<>endobj -458 0 obj<>endobj -459 0 obj<>endobj -460 0 obj[457 0 R -459 0 R]endobj -461 0 obj<>endobj -462 0 obj<>endobj -463 0 obj<>endobj -464 0 obj<>endobj -465 0 obj<>endobj -466 0 obj<>endobj -467 0 obj[462 0 R +451 0 R +452 0 R +453 0 R +454 0 R +455 0 R +456 0 R +457 0 R +458 0 R +459 0 R +460 0 R +461 0 R +462 0 R +463 0 R 464 0 R -466 0 R]endobj -468 0 obj<>endobj -469 0 obj<>endobj -470 0 obj<>endobj -471 0 obj<>endobj -472 0 obj[469 0 R -471 0 R]endobj -473 0 obj<>endobj -474 0 obj<>endobj -475 0 obj[474 0 R]endobj -476 0 obj<>endobj -477 0 obj<>endobj -478 0 obj<>endobj -479 0 obj<>endobj -480 0 obj[477 0 R -479 0 R]endobj -481 0 obj<>endobj -482 0 obj<>endobj -483 0 obj<>endobj -484 0 obj<>endobj -485 0 obj<>endobj -486 0 obj<>endobj -487 0 obj[482 0 R -484 0 R +465 0 R +466 0 R +467 0 R +468 0 R +469 0 R +470 0 R +471 0 R +472 0 R +473 0 R +474 0 R +475 0 R +476 0 R +477 0 R +478 0 R]endobj +480 0 obj<>endobj +481 0 obj<>endobj +482 0 obj[481 0 R]endobj +483 0 obj<>endobj +484 0 obj<>endobj +485 0 obj<>endobj +486 0 obj<>endobj +487 0 obj[484 0 R 486 0 R]endobj -488 0 obj<>endobj -489 0 obj<>endobj -490 0 obj[489 0 R]endobj -491 0 obj<>endobj -492 0 obj<>endobj -493 0 obj<>endobj -494 0 obj<>endobj -495 0 obj<>endobj -496 0 obj<>endobj -497 0 obj<>endobj -498 0 obj<>endobj -499 0 obj<>endobj -500 0 obj<>endobj -501 0 obj<>endobj -502 0 obj<>endobj -503 0 obj[492 0 R -494 0 R -496 0 R -498 0 R -500 0 R -502 0 R]endobj -504 0 obj<>endobj -505 0 obj<>endobj -506 0 obj<>endobj -507 0 obj<>endobj -508 0 obj<>endobj -509 0 obj<>endobj -510 0 obj<>endobj -511 0 obj[505 0 R -507 0 R -509 0 R -510 0 R]endobj -512 0 obj<>endobj -513 0 obj<>endobj -514 0 obj<>endobj -515 0 obj<>endobj -516 0 obj<>endobj -517 0 obj<>endobj -518 0 obj<>endobj -519 0 obj<>endobj -520 0 obj<>endobj -521 0 obj<>endobj -522 0 obj<>endobj -523 0 obj[512 0 R -514 0 R -516 0 R -518 0 R -520 0 R -522 0 R]endobj -524 0 obj<>endobj -525 0 obj<>endobj -526 0 obj[525 0 R]endobj -527 0 obj<>endobj -528 0 obj<>endobj -529 0 obj<>endobj -530 0 obj<>endobj -531 0 obj<>endobj -532 0 obj<>endobj -533 0 obj<>endobj -534 0 obj<>endobj -535 0 obj<>endobj -536 0 obj<>endobj -537 0 obj[528 0 R -530 0 R -532 0 R +488 0 obj<>endobj +489 0 obj<>endobj +490 0 obj<>endobj +491 0 obj<>endobj +492 0 obj<>endobj +493 0 obj<>endobj +494 0 obj[489 0 R +491 0 R +493 0 R]endobj +495 0 obj<>endobj +496 0 obj<>endobj +497 0 obj<>endobj +498 0 obj<>endobj +499 0 obj[496 0 R +498 0 R]endobj +500 0 obj<>endobj +501 0 obj<>endobj +502 0 obj[501 0 R]endobj +503 0 obj<>endobj +504 0 obj<>endobj +505 0 obj<>endobj +506 0 obj<>endobj +507 0 obj[504 0 R +506 0 R]endobj +508 0 obj<>endobj +509 0 obj<>endobj +510 0 obj<>endobj +511 0 obj<>endobj +512 0 obj<>endobj +513 0 obj<>endobj +514 0 obj[509 0 R +511 0 R +513 0 R]endobj +515 0 obj<>endobj +516 0 obj<>endobj +517 0 obj[516 0 R]endobj +518 0 obj<>endobj +519 0 obj<>endobj +520 0 obj<>endobj +521 0 obj<>endobj +522 0 obj<>endobj +523 0 obj<>endobj +524 0 obj<>endobj +525 0 obj<>endobj +526 0 obj<>endobj +527 0 obj<>endobj +528 0 obj<>endobj +529 0 obj<>endobj +530 0 obj[519 0 R +521 0 R +523 0 R +525 0 R +527 0 R +529 0 R]endobj +531 0 obj<>endobj +532 0 obj<>endobj +533 0 obj<>endobj +534 0 obj<>endobj +535 0 obj<>endobj +536 0 obj<>endobj +537 0 obj<>endobj +538 0 obj[532 0 R 534 0 R -536 0 R]endobj -538 0 obj<>endobj -539 0 obj<>endobj -540 0 obj<>endobj -541 0 obj<>endobj -542 0 obj<>endobj -543 0 obj<>endobj -544 0 obj[539 0 R +536 0 R +537 0 R]endobj +539 0 obj<>endobj +540 0 obj<>endobj +541 0 obj<>endobj +542 0 obj<>endobj +543 0 obj<>endobj +544 0 obj<>endobj +545 0 obj<>endobj +546 0 obj<>endobj +547 0 obj<>endobj +548 0 obj<>endobj +549 0 obj<>endobj +550 0 obj[539 0 R 541 0 R -543 0 R]endobj -545 0 obj<>endobj -546 0 obj<>endobj -547 0 obj[546 0 R]endobj -548 0 obj<>endobj -549 0 obj<>endobj -550 0 obj<>endobj -551 0 obj<>endobj -552 0 obj<>endobj -553 0 obj<>endobj -554 0 obj[549 0 R -551 0 R -553 0 R]endobj -555 0 obj<>endobj -556 0 obj<>endobj -557 0 obj<>endobj -558 0 obj<>endobj -559 0 obj<>endobj -560 0 obj<>endobj -561 0 obj[556 0 R -558 0 R -560 0 R]endobj -562 0 obj<>endobj -563 0 obj<>endobj -564 0 obj<>endobj -565 0 obj<>endobj -566 0 obj<>endobj -567 0 obj<>endobj -568 0 obj<>endobj -569 0 obj<>endobj -570 0 obj[563 0 R -565 0 R -567 0 R -569 0 R]endobj -571 0 obj<>endobj -572 0 obj<>endobj -573 0 obj<>endobj -574 0 obj<>endobj -575 0 obj<>endobj -576 0 obj<>endobj -577 0 obj[572 0 R -574 0 R -576 0 R]endobj -578 0 obj<>endobj -579 0 obj<>endobj -580 0 obj[579 0 R]endobj -581 0 obj<>endobj -582 0 obj<>endobj -583 0 obj[582 0 R]endobj -584 0 obj<>endobj -585 0 obj<>endobj -586 0 obj<>endobj -587 0 obj<>endobj -588 0 obj<>endobj -589 0 obj<>endobj -590 0 obj<>endobj -591 0 obj<>endobj -592 0 obj<>endobj -593 0 obj<>endobj -594 0 obj<>endobj -595 0 obj<>endobj -596 0 obj<>endobj -597 0 obj<>endobj -598 0 obj<>endobj -599 0 obj<>endobj -600 0 obj[585 0 R -587 0 R -589 0 R -591 0 R -593 0 R +543 0 R +545 0 R +547 0 R +549 0 R]endobj +551 0 obj<>endobj +552 0 obj<>endobj +553 0 obj[552 0 R]endobj +554 0 obj<>endobj +555 0 obj<>endobj +556 0 obj<>endobj +557 0 obj<>endobj +558 0 obj<>endobj +559 0 obj<>endobj +560 0 obj<>endobj +561 0 obj<>endobj +562 0 obj<>endobj +563 0 obj<>endobj +564 0 obj[555 0 R +557 0 R +559 0 R +561 0 R +563 0 R]endobj +565 0 obj<>endobj +566 0 obj<>endobj +567 0 obj[566 0 R]endobj +568 0 obj<>endobj +569 0 obj<>endobj +570 0 obj<>endobj +571 0 obj<>endobj +572 0 obj<>endobj +573 0 obj<>endobj +574 0 obj[569 0 R +571 0 R +573 0 R]endobj +575 0 obj<>endobj +576 0 obj<>endobj +577 0 obj[576 0 R]endobj +578 0 obj<>endobj +579 0 obj<>endobj +580 0 obj<>endobj +581 0 obj<>endobj +582 0 obj<>endobj +583 0 obj<>endobj +584 0 obj[579 0 R +581 0 R +583 0 R]endobj +585 0 obj<>endobj +586 0 obj<>endobj +587 0 obj<>endobj +588 0 obj<>endobj +589 0 obj<>endobj +590 0 obj<>endobj +591 0 obj[586 0 R +588 0 R +590 0 R]endobj +592 0 obj<>endobj +593 0 obj<>endobj +594 0 obj<>endobj +595 0 obj<>endobj +596 0 obj<>endobj +597 0 obj<>endobj +598 0 obj<>endobj +599 0 obj<>endobj +600 0 obj[593 0 R 595 0 R 597 0 R 599 0 R]endobj -601 0 obj<>endobj -602 0 obj<>endobj -603 0 obj<>endobj -604 0 obj<>endobj -605 0 obj<>endobj -606 0 obj<>endobj -607 0 obj<>endobj -608 0 obj<>endobj -609 0 obj[602 0 R +601 0 obj<>endobj +602 0 obj<>endobj +603 0 obj<>endobj +604 0 obj<>endobj +605 0 obj<>endobj +606 0 obj<>endobj +607 0 obj[602 0 R 604 0 R -606 0 R -608 0 R]endobj -610 0 obj<>endobj -611 0 obj<>endobj -612 0 obj<>endobj -613 0 obj<>endobj -614 0 obj<>endobj -615 0 obj<>endobj -616 0 obj<>endobj -617 0 obj<>endobj -618 0 obj<>endobj -619 0 obj<>endobj -620 0 obj<>endobj -621 0 obj<>endobj -622 0 obj<>endobj -623 0 obj<>endobj -624 0 obj<>endobj -625 0 obj<>endobj -626 0 obj<>endobj -627 0 obj<>endobj -628 0 obj<>endobj -629 0 obj<>endobj -630 0 obj<>endobj -631 0 obj<>endobj -632 0 obj<>endobj -633 0 obj<>endobj -634 0 obj<>endobj -635 0 obj<>endobj -636 0 obj<>endobj -637 0 obj<>endobj -638 0 obj<>endobj -639 0 obj<>endobj -640 0 obj<>endobj -641 0 obj<>endobj -642 0 obj<>endobj -643 0 obj<>endobj -644 0 obj<>endobj -645 0 obj<>endobj -646 0 obj<>endobj -647 0 obj<>endobj -648 0 obj<>endobj -649 0 obj<>endobj -650 0 obj<>endobj -651 0 obj<>endobj -652 0 obj<>endobj -653 0 obj<>endobj -654 0 obj<>endobj -655 0 obj<>endobj -656 0 obj[611 0 R -613 0 R -615 0 R +606 0 R]endobj +608 0 obj<>endobj +609 0 obj<>endobj +610 0 obj[609 0 R]endobj +611 0 obj<>endobj +612 0 obj<>endobj +613 0 obj[612 0 R]endobj +614 0 obj<>endobj +615 0 obj<>endobj +616 0 obj<>endobj +617 0 obj<>endobj +618 0 obj<>endobj +619 0 obj<>endobj +620 0 obj<>endobj +621 0 obj<>endobj +622 0 obj<>endobj +623 0 obj<>endobj +624 0 obj<>endobj +625 0 obj<>endobj +626 0 obj<>endobj +627 0 obj<>endobj +628 0 obj[615 0 R 617 0 R 619 0 R 621 0 R 623 0 R 625 0 R -627 0 R -629 0 R -631 0 R -633 0 R +627 0 R]endobj +629 0 obj<>endobj +630 0 obj<>endobj +631 0 obj[630 0 R]endobj +632 0 obj<>endobj +633 0 obj<>endobj +634 0 obj<>endobj +635 0 obj<>endobj +636 0 obj<>endobj +637 0 obj<>endobj +638 0 obj<>endobj +639 0 obj<>endobj +640 0 obj[633 0 R 635 0 R 637 0 R -639 0 R -641 0 R -643 0 R -645 0 R -647 0 R -649 0 R -651 0 R -653 0 R -655 0 R]endobj -657 0 obj<>endobj -658 0 obj<>endobj -659 0 obj<>endobj -660 0 obj<>endobj -661 0 obj[658 0 R -660 0 R]endobj -662 0 obj<>endobj -663 0 obj<>endobj -664 0 obj<>endobj -665 0 obj<>endobj -666 0 obj[663 0 R -665 0 R]endobj -667 0 obj<>endobj -668 0 obj<>endobj -669 0 obj[668 0 R]endobj -670 0 obj<>endobj -671 0 obj<>endobj -672 0 obj<>endobj -673 0 obj<>endobj -674 0 obj[671 0 R -673 0 R]endobj -675 0 obj<>endobj -676 0 obj<>endobj -677 0 obj<>endobj -678 0 obj<>endobj -679 0 obj[676 0 R -678 0 R]endobj -680 0 obj<>endobj -681 0 obj<>endobj -682 0 obj<>endobj -683 0 obj<>endobj -684 0 obj<>endobj -685 0 obj<>endobj -686 0 obj<>endobj -687 0 obj<>endobj -688 0 obj<>endobj -689 0 obj<>endobj -690 0 obj<>endobj -691 0 obj<>endobj -692 0 obj<>endobj -693 0 obj<>endobj -694 0 obj<>endobj -695 0 obj<>endobj -696 0 obj[681 0 R -683 0 R -685 0 R -687 0 R -689 0 R -691 0 R -693 0 R -695 0 R]endobj -697 0 obj<>endobj -698 0 obj<>endobj -699 0 obj<>endobj -700 0 obj<>endobj -701 0 obj[698 0 R -700 0 R]endobj -702 0 obj<>endobj -703 0 obj<>endobj -704 0 obj[703 0 R]endobj -705 0 obj<>endobj -706 0 obj<>endobj -707 0 obj<>endobj -708 0 obj<>endobj -709 0 obj<>endobj -710 0 obj<>endobj -711 0 obj<>endobj -712 0 obj<>endobj -713 0 obj<>endobj -714 0 obj<>endobj -715 0 obj<>endobj -716 0 obj<>endobj -717 0 obj[706 0 R -708 0 R -710 0 R -712 0 R +639 0 R]endobj +641 0 obj<>endobj +642 0 obj<>endobj +643 0 obj<>endobj +644 0 obj<>endobj +645 0 obj<>endobj +646 0 obj<>endobj +647 0 obj<>endobj +648 0 obj<>endobj +649 0 obj<>endobj +650 0 obj<>endobj +651 0 obj<>endobj +652 0 obj<>endobj +653 0 obj<>endobj +654 0 obj<>endobj +655 0 obj<>endobj +656 0 obj<>endobj +657 0 obj<>endobj +658 0 obj<>endobj +659 0 obj<>endobj +660 0 obj<>endobj +661 0 obj<>endobj +662 0 obj<>endobj +663 0 obj<>endobj +664 0 obj<>endobj +665 0 obj<>endobj +666 0 obj<>endobj +667 0 obj<>endobj +668 0 obj<>endobj +669 0 obj<>endobj +670 0 obj<>endobj +671 0 obj<>endobj +672 0 obj<>endobj +673 0 obj<>endobj +674 0 obj<>endobj +675 0 obj<>endobj +676 0 obj<>endobj +677 0 obj<>endobj +678 0 obj<>endobj +679 0 obj<>endobj +680 0 obj<>endobj +681 0 obj<>endobj +682 0 obj<>endobj +683 0 obj<>endobj +684 0 obj<>endobj +685 0 obj<>endobj +686 0 obj<>endobj +687 0 obj[642 0 R +644 0 R +646 0 R +648 0 R +650 0 R +652 0 R +654 0 R +656 0 R +658 0 R +660 0 R +662 0 R +664 0 R +666 0 R +668 0 R +670 0 R +672 0 R +674 0 R +676 0 R +678 0 R +680 0 R +682 0 R +684 0 R +686 0 R]endobj +688 0 obj<>endobj +689 0 obj<>endobj +690 0 obj<>endobj +691 0 obj<>endobj +692 0 obj[689 0 R +691 0 R]endobj +693 0 obj<>endobj +694 0 obj<>endobj +695 0 obj<>endobj +696 0 obj<>endobj +697 0 obj[694 0 R +696 0 R]endobj +698 0 obj<>endobj +699 0 obj<>endobj +700 0 obj[699 0 R]endobj +701 0 obj<>endobj +702 0 obj<>endobj +703 0 obj<>endobj +704 0 obj<>endobj +705 0 obj[702 0 R +704 0 R]endobj +706 0 obj<>endobj +707 0 obj<>endobj +708 0 obj<>endobj +709 0 obj<>endobj +710 0 obj[707 0 R +709 0 R]endobj +711 0 obj<>endobj +712 0 obj<>endobj +713 0 obj<>endobj +714 0 obj<>endobj +715 0 obj<>endobj +716 0 obj<>endobj +717 0 obj<>endobj +718 0 obj<>endobj +719 0 obj<>endobj +720 0 obj<>endobj +721 0 obj<>endobj +722 0 obj<>endobj +723 0 obj<>endobj +724 0 obj<>endobj +725 0 obj<>endobj +726 0 obj<>endobj +727 0 obj[712 0 R 714 0 R -716 0 R]endobj -718 0 obj<>endobj -719 0 obj<>endobj -720 0 obj<>endobj -721 0 obj<>endobj -722 0 obj<>endobj -723 0 obj<>endobj -724 0 obj<>endobj -725 0 obj<>endobj -726 0 obj[719 0 R -721 0 R -723 0 R -725 0 R]endobj -727 0 obj<>endobj -728 0 obj<>endobj -729 0 obj[728 0 R]endobj -730 0 obj<>endobj -731 0 obj<>endobj -732 0 obj<>endobj -733 0 obj<>endobj -734 0 obj<>endobj -735 0 obj<>endobj -736 0 obj<>endobj -737 0 obj<>endobj -738 0 obj<>endobj -739 0 obj<>endobj -740 0 obj<>endobj -741 0 obj<>endobj -742 0 obj[731 0 R -733 0 R -735 0 R -737 0 R +716 0 R +718 0 R +720 0 R +722 0 R +724 0 R +726 0 R]endobj +728 0 obj<>endobj +729 0 obj<>endobj +730 0 obj<>endobj +731 0 obj<>endobj +732 0 obj[729 0 R +731 0 R]endobj +733 0 obj<>endobj +734 0 obj<>endobj +735 0 obj[734 0 R]endobj +736 0 obj<>endobj +737 0 obj<>endobj +738 0 obj<>endobj +739 0 obj<>endobj +740 0 obj<>endobj +741 0 obj<>endobj +742 0 obj<>endobj +743 0 obj<>endobj +744 0 obj<>endobj +745 0 obj<>endobj +746 0 obj<>endobj +747 0 obj<>endobj +748 0 obj[737 0 R 739 0 R -741 0 R]endobj -743 0 obj<>endobj -744 0 obj<>endobj -745 0 obj[744 0 R]endobj -746 0 obj<>endobj -747 0 obj<>endobj -748 0 obj[747 0 R]endobj -749 0 obj<>endobj -750 0 obj<>endobj -751 0 obj[750 0 R]endobj -752 0 obj<>endobj -753 0 obj<>endobj -754 0 obj<>endobj -755 0 obj<>endobj -756 0 obj<>endobj -757 0 obj<>endobj -758 0 obj<>endobj -759 0 obj<>endobj -760 0 obj[753 0 R -755 0 R -757 0 R -759 0 R]endobj -761 0 obj<>endobj -762 0 obj<>endobj -763 0 obj[762 0 R]endobj -764 0 obj<>endobj -765 0 obj<>endobj -766 0 obj<>endobj -767 0 obj<>endobj -768 0 obj<>endobj -769 0 obj<>endobj -770 0 obj[765 0 R +741 0 R +743 0 R +745 0 R +747 0 R]endobj +749 0 obj<>endobj +750 0 obj<>endobj +751 0 obj<>endobj +752 0 obj<>endobj +753 0 obj<>endobj +754 0 obj<>endobj +755 0 obj<>endobj +756 0 obj<>endobj +757 0 obj[750 0 R +752 0 R +754 0 R +756 0 R]endobj +758 0 obj<>endobj +759 0 obj<>endobj +760 0 obj<>endobj +761 0 obj<>endobj +762 0 obj<>endobj +763 0 obj<>endobj +764 0 obj<>endobj +765 0 obj<>endobj +766 0 obj<>endobj +767 0 obj<>endobj +768 0 obj<>endobj +769 0 obj<>endobj +770 0 obj<>endobj +771 0 obj<>endobj +772 0 obj[759 0 R +761 0 R +763 0 R +765 0 R 767 0 R -769 0 R]endobj -771 0 obj<>endobj -772 0 obj<>endobj -773 0 obj[772 0 R]endobj -774 0 obj<>endobj -775 0 obj<>endobj -776 0 obj<>endobj -777 0 obj<>endobj -778 0 obj<>endobj -779 0 obj<>endobj -780 0 obj<>endobj -781 0 obj<>endobj -782 0 obj<>endobj -783 0 obj<>endobj -784 0 obj<>endobj -785 0 obj<>endobj -786 0 obj<>endobj -787 0 obj<>endobj -788 0 obj<>endobj -789 0 obj<>endobj -790 0 obj<>endobj -791 0 obj<>endobj -792 0 obj<>endobj -793 0 obj<>endobj -794 0 obj<>endobj -795 0 obj<>endobj -796 0 obj<>endobj -797 0 obj<>endobj -798 0 obj<>endobj -799 0 obj<>endobj -800 0 obj<>endobj -801 0 obj<>endobj -802 0 obj<>endobj -803 0 obj<>endobj -804 0 obj<>endobj -805 0 obj<>endobj -806 0 obj<>endobj -807 0 obj<>endobj -808 0 obj<>endobj -809 0 obj<>endobj -810 0 obj<>endobj -811 0 obj<>endobj -812 0 obj<>endobj -813 0 obj<>endobj -814 0 obj<>endobj -815 0 obj<>endobj -816 0 obj<>endobj -817 0 obj<>endobj -818 0 obj<>endobj -819 0 obj<>endobj -820 0 obj<>endobj -821 0 obj<>endobj -822 0 obj<>endobj -823 0 obj<>endobj -824 0 obj<>endobj -825 0 obj<>endobj -826 0 obj<>endobj -827 0 obj<>endobj -828 0 obj<>endobj -829 0 obj<>endobj -830 0 obj<>endobj -831 0 obj<>endobj -832 0 obj<>endobj -833 0 obj<>endobj -834 0 obj<>endobj -835 0 obj<>endobj -836 0 obj<>endobj -837 0 obj<>endobj -838 0 obj<>endobj -839 0 obj<>endobj -840 0 obj<>endobj -841 0 obj<>endobj -842 0 obj<>endobj -843 0 obj<>endobj -844 0 obj<>endobj -845 0 obj<>endobj -846 0 obj<>endobj -847 0 obj<>endobj -848 0 obj<>endobj -849 0 obj<>endobj -850 0 obj<>endobj -851 0 obj<>endobj -852 0 obj<>endobj -853 0 obj<>endobj -854 0 obj<>endobj -855 0 obj<>endobj -856 0 obj<>endobj -857 0 obj<>endobj -858 0 obj<>endobj -859 0 obj<>endobj -860 0 obj<>endobj -861 0 obj<>endobj -862 0 obj<>endobj -863 0 obj<>endobj -864 0 obj<>endobj -865 0 obj<>endobj -866 0 obj<>endobj -867 0 obj<>endobj -868 0 obj<>endobj -869 0 obj<>endobj -870 0 obj<>endobj -871 0 obj<>endobj -872 0 obj<>endobj -873 0 obj<>endobj -874 0 obj<>endobj -875 0 obj<>endobj -876 0 obj<>endobj -877 0 obj<>endobj -878 0 obj<>endobj -879 0 obj<>endobj -880 0 obj<>endobj -881 0 obj<>endobj -882 0 obj<>endobj -883 0 obj<>endobj -884 0 obj<>endobj -885 0 obj<>endobj -886 0 obj<>endobj -887 0 obj<>endobj -888 0 obj<>endobj -889 0 obj<>endobj -890 0 obj<>endobj -891 0 obj<>endobj -892 0 obj<>endobj -893 0 obj<>endobj -894 0 obj<>endobj -895 0 obj<>endobj -896 0 obj<>endobj -897 0 obj<>endobj -898 0 obj<>endobj -899 0 obj<>endobj -900 0 obj<>endobj -901 0 obj<>endobj -902 0 obj<>endobj -903 0 obj<>endobj -904 0 obj<>endobj -905 0 obj<>endobj -906 0 obj<>endobj -907 0 obj<>endobj -908 0 obj<>endobj -909 0 obj<>endobj -910 0 obj<>endobj -911 0 obj<>endobj -912 0 obj<>endobj -913 0 obj<>endobj -914 0 obj<>endobj -915 0 obj<>endobj -916 0 obj<>endobj -917 0 obj<>endobj -918 0 obj<>endobj -919 0 obj<>endobj -920 0 obj<>endobj -921 0 obj<>endobj -922 0 obj<>endobj -923 0 obj<>endobj -924 0 obj<>endobj -925 0 obj<>endobj -926 0 obj<>endobj -927 0 obj<>endobj -928 0 obj<>endobj -929 0 obj<>endobj -930 0 obj<>endobj -931 0 obj<>endobj -932 0 obj<>endobj -933 0 obj<>endobj -934 0 obj<>endobj -935 0 obj<>endobj -936 0 obj<>endobj -937 0 obj<>endobj -938 0 obj<>endobj -939 0 obj<>endobj -940 0 obj<>endobj -941 0 obj<>endobj -942 0 obj<>endobj -943 0 obj<>endobj -944 0 obj<>endobj -945 0 obj<>endobj -946 0 obj<>endobj -947 0 obj<>endobj -948 0 obj<>endobj -949 0 obj<>endobj -950 0 obj<>endobj -951 0 obj<>endobj -952 0 obj<>endobj -953 0 obj<>endobj -954 0 obj<>endobj -955 0 obj<>endobj -956 0 obj<>endobj -957 0 obj<>endobj -958 0 obj<>endobj -959 0 obj<>endobj -960 0 obj<>endobj -961 0 obj<>endobj -962 0 obj<>endobj -963 0 obj<>endobj -964 0 obj<>endobj -965 0 obj<>endobj -966 0 obj<>endobj -967 0 obj<>endobj -968 0 obj<>endobj -969 0 obj<>endobj -970 0 obj<>endobj -971 0 obj<>endobj -972 0 obj<>endobj -973 0 obj<>endobj -974 0 obj<>endobj -975 0 obj<>endobj -976 0 obj<>endobj -977 0 obj<>endobj -978 0 obj<>endobj -979 0 obj<>endobj -980 0 obj<>endobj -981 0 obj<>endobj -982 0 obj<>endobj -983 0 obj<>endobj -984 0 obj<>endobj -985 0 obj<>endobj -986 0 obj<>endobj -987 0 obj<>endobj -988 0 obj<>endobj -989 0 obj<>endobj -990 0 obj<>endobj -991 0 obj<>endobj -992 0 obj<>endobj -993 0 obj<>endobj -994 0 obj<>endobj -995 0 obj<>endobj -996 0 obj<>endobj -997 0 obj<>endobj -998 0 obj<>endobj -999 0 obj<>endobj -1000 0 obj<>endobj -1001 0 obj<>endobj -1002 0 obj<>endobj -1003 0 obj<>endobj -1004 0 obj<>endobj -1005 0 obj<>endobj -1006 0 obj<>endobj -1007 0 obj<>endobj -1008 0 obj<>endobj -1009 0 obj<>endobj -1010 0 obj<>endobj -1011 0 obj<>endobj +774 0 obj<>endobj +775 0 obj[774 0 R]endobj +776 0 obj<>endobj +777 0 obj<>endobj +778 0 obj[777 0 R]endobj +779 0 obj<>endobj +780 0 obj<>endobj +781 0 obj[780 0 R]endobj +782 0 obj<>endobj +783 0 obj<>endobj +784 0 obj<>endobj +785 0 obj<>endobj +786 0 obj<>endobj +787 0 obj<>endobj +788 0 obj<>endobj +789 0 obj<>endobj +790 0 obj<>endobj +791 0 obj<>endobj +792 0 obj[783 0 R +785 0 R +787 0 R +789 0 R +791 0 R]endobj +793 0 obj<>endobj +794 0 obj<>endobj +795 0 obj<>endobj +796 0 obj<>endobj +797 0 obj<>endobj +798 0 obj<>endobj +799 0 obj<>endobj +800 0 obj<>endobj +801 0 obj[794 0 R +796 0 R +798 0 R +800 0 R]endobj +802 0 obj<>endobj +803 0 obj<>endobj +804 0 obj[803 0 R]endobj +805 0 obj<>endobj +806 0 obj<>endobj +807 0 obj[806 0 R]endobj +808 0 obj<>endobj +809 0 obj<>endobj +810 0 obj<>endobj +811 0 obj<>endobj +812 0 obj<>endobj +813 0 obj<>endobj +814 0 obj[809 0 R +811 0 R +813 0 R]endobj +815 0 obj<>endobj +816 0 obj<>endobj +817 0 obj[816 0 R]endobj +818 0 obj<>endobj +819 0 obj<>endobj +820 0 obj<>endobj +821 0 obj<>endobj +822 0 obj<>endobj +823 0 obj<>endobj +824 0 obj<>endobj +825 0 obj<>endobj +826 0 obj<>endobj +827 0 obj<>endobj +828 0 obj<>endobj +829 0 obj<>endobj +830 0 obj<>endobj +831 0 obj<>endobj +832 0 obj<>endobj +833 0 obj<>endobj +834 0 obj<>endobj +835 0 obj<>endobj +836 0 obj<>endobj +837 0 obj<>endobj +838 0 obj<>endobj +839 0 obj<>endobj +840 0 obj<>endobj +841 0 obj<>endobj +842 0 obj<>endobj +843 0 obj<>endobj +844 0 obj<>endobj +845 0 obj<>endobj +846 0 obj<>endobj +847 0 obj<>endobj +848 0 obj<>endobj +849 0 obj<>endobj +850 0 obj<>endobj +851 0 obj<>endobj +852 0 obj<>endobj +853 0 obj<>endobj +854 0 obj<>endobj +855 0 obj<>endobj +856 0 obj<>endobj +857 0 obj<>endobj +858 0 obj<>endobj +859 0 obj<>endobj +860 0 obj<>endobj +861 0 obj<>endobj +862 0 obj<>endobj +863 0 obj<>endobj +864 0 obj<>endobj +865 0 obj<>endobj +866 0 obj<>endobj +867 0 obj<>endobj +868 0 obj<>endobj +869 0 obj<>endobj +870 0 obj<>endobj +871 0 obj<>endobj +872 0 obj<>endobj +873 0 obj<>endobj +874 0 obj<>endobj +875 0 obj<>endobj +876 0 obj<>endobj +877 0 obj<>endobj +878 0 obj<>endobj +879 0 obj<>endobj +880 0 obj<>endobj +881 0 obj<>endobj +882 0 obj<>endobj +883 0 obj<>endobj +884 0 obj<>endobj +885 0 obj<>endobj +886 0 obj<>endobj +887 0 obj<>endobj +888 0 obj<>endobj +889 0 obj<>endobj +890 0 obj<>endobj +891 0 obj<>endobj +892 0 obj<>endobj +893 0 obj<>endobj +894 0 obj<>endobj +895 0 obj<>endobj +896 0 obj<>endobj +897 0 obj<>endobj +898 0 obj<>endobj +899 0 obj<>endobj +900 0 obj<>endobj +901 0 obj<>endobj +902 0 obj<>endobj +903 0 obj<>endobj +904 0 obj<>endobj +905 0 obj<>endobj +906 0 obj<>endobj +907 0 obj<>endobj +908 0 obj<>endobj +909 0 obj<>endobj +910 0 obj<>endobj +911 0 obj<>endobj +912 0 obj<>endobj +913 0 obj<>endobj +914 0 obj<>endobj +915 0 obj<>endobj +916 0 obj<>endobj +917 0 obj<>endobj +918 0 obj<>endobj +919 0 obj<>endobj +920 0 obj<>endobj +921 0 obj<>endobj +922 0 obj<>endobj +923 0 obj<>endobj +924 0 obj<>endobj +925 0 obj<>endobj +926 0 obj<>endobj +927 0 obj<>endobj +928 0 obj<>endobj +929 0 obj<>endobj +930 0 obj<>endobj +931 0 obj<>endobj +932 0 obj<>endobj +933 0 obj<>endobj +934 0 obj<>endobj +935 0 obj<>endobj +936 0 obj<>endobj +937 0 obj<>endobj +938 0 obj<>endobj +939 0 obj<>endobj +940 0 obj<>endobj +941 0 obj<>endobj +942 0 obj<>endobj +943 0 obj<>endobj +944 0 obj<>endobj +945 0 obj<>endobj +946 0 obj<>endobj +947 0 obj<>endobj +948 0 obj<>endobj +949 0 obj<>endobj +950 0 obj<>endobj +951 0 obj<>endobj +952 0 obj<>endobj +953 0 obj<>endobj +954 0 obj<>endobj +955 0 obj<>endobj +956 0 obj<>endobj +957 0 obj<>endobj +958 0 obj<>endobj +959 0 obj<>endobj +960 0 obj<>endobj +961 0 obj<>endobj +962 0 obj<>endobj +963 0 obj<>endobj +964 0 obj<>endobj +965 0 obj<>endobj +966 0 obj<>endobj +967 0 obj<>endobj +968 0 obj<>endobj +969 0 obj<>endobj +970 0 obj<>endobj +971 0 obj<>endobj +972 0 obj<>endobj +973 0 obj<>endobj +974 0 obj<>endobj +975 0 obj<>endobj +976 0 obj<>endobj +977 0 obj<>endobj +978 0 obj<>endobj +979 0 obj<>endobj +980 0 obj<>endobj +981 0 obj<>endobj +982 0 obj<>endobj +983 0 obj<>endobj +984 0 obj<>endobj +985 0 obj<>endobj +986 0 obj<>endobj +987 0 obj<>endobj +988 0 obj<>endobj +989 0 obj<>endobj +990 0 obj<>endobj +991 0 obj<>endobj +992 0 obj<>endobj +993 0 obj<>endobj +994 0 obj<>endobj +995 0 obj<>endobj +996 0 obj<>endobj +997 0 obj<>endobj +998 0 obj<>endobj +999 0 obj<>endobj +1000 0 obj<>endobj +1001 0 obj<>endobj +1002 0 obj<>endobj +1003 0 obj<>endobj +1004 0 obj<>endobj +1005 0 obj<>endobj +1006 0 obj<>endobj +1007 0 obj<>endobj +1008 0 obj<>endobj +1009 0 obj<>endobj +1010 0 obj<>endobj +1011 0 obj<>endobj +1012 0 obj<>endobj +1013 0 obj<>endobj +1014 0 obj<>endobj +1015 0 obj<>endobj +1016 0 obj<>endobj +1017 0 obj<>endobj +1018 0 obj<>endobj +1019 0 obj<>endobj +1020 0 obj<>endobj +1021 0 obj<>endobj +1022 0 obj<>endobj +1023 0 obj<>endobj +1024 0 obj<>endobj +1025 0 obj<>endobj +1026 0 obj<>endobj +1027 0 obj<>endobj +1028 0 obj<>endobj +1029 0 obj<>endobj +1030 0 obj<>endobj +1031 0 obj<>endobj +1032 0 obj<>endobj +1033 0 obj<>endobj +1034 0 obj<>endobj +1035 0 obj<>endobj +1036 0 obj<>endobj +1037 0 obj<>endobj +1038 0 obj<>endobj +1039 0 obj<>endobj +1040 0 obj<>endobj +1041 0 obj<>endobj +1042 0 obj<>endobj +1043 0 obj<>endobj +1044 0 obj<>endobj +1045 0 obj<>endobj +1046 0 obj<>endobj +1047 0 obj<>endobj +1048 0 obj<>endobj +1049 0 obj<>endobj +1050 0 obj<>endobj +1051 0 obj<>endobj +1052 0 obj<>endobj +1053 0 obj<>endobj +1054 0 obj<>endobj +1055 0 obj<>endobj +1056 0 obj<>endobj +1057 0 obj<>endobj +1058 0 obj<>endobj +1059 0 obj<>endobj +1060 0 obj<>endobj +1061 0 obj<>endobj +1062 0 obj<>endobj +1063 0 obj<>endobj +1064 0 obj<>endobj +1065 0 obj<>endobj +1066 0 obj<>endobj +1067 0 obj<>endobj +1068 0 obj<>endobj -1012 0 obj<>/XObject<<>>>>>>endobj -1013 0 obj<>stream +1069 0 obj<>/XObject<<>>>>>>endobj +1070 0 obj<>stream x+ä2T0BCs#c3…ä\.§.}7K#…4K=3cS’¢` g`NÖvôurT(ÊÏJM.QpÉO.ÍMÍ+I,ÉÌÏÓ Éâr á ä«endstream endobj -1014 0 obj<>/XObject<<>>>>/Annots 58 0 R>>endobj -1015 0 obj<>stream -xÍ\Ûr#Ç }߯˜·8U5÷áä%µ—8Ù*ßbɵy•¸c‘THj×þûœt£1$ѶèU\µÅ3g Ñh4f”ÿ¾(²ÿYWfU›]-^ä“WøOÁ¾ÿ¯dmÝãßEVõ“.€»ìâ…ƒ‹¬kGœƒ‹¬hŠIã¶Z5“)„vͤ€BÄÀ¼œôŽeò~Rc\“Àq¤šiõ,zF¸ÈšÓÉ9UjˆLœƒ‹lÚBÛÄ95‹ö%Òc°Ð4êÆGz ¶¥‰n¬Ã‹¬Ì›IåØŠžkÚ^<×”|ª1%A1êS"Sàã`J„4…S•HÁ–fÙ±ÓPÎŒcÛu“Ò±jJÓNZL¦š" ™8ÕÝ8£)Æ©)a•…:FzLe+<Ù±ƒ•HJ¬*‹[yª¬€¤làT;ãŒÊ§Ê†qE.3k¤ÇP¿'Öa°mCÏ&ÖašÒŒÆª)UŽ!ÑÉ”À©îÆ9M1NM ㊢£gôêTC1±ƒmd &Öa¬†¢åZ1Öc°UÇÅa¬ -e˜ºtÎ$C§–ç`4Ô854Œ+òŽ¦é1 Íé÷Ä: ¶-è¤Ä: ¶cÂu¬ÃL -“‚õl]ÐIƪrz=ºA@rCàÔnãŒn0NÝÆeECô˜nè©Nb¦Z¦›Ä: ¡‹Ô”X‡ ’9íJø¬îsI(=Óµê ÄbõŽô˜ -s5¥¡ƒÅS¼`ÁöŒ67ÖaÎL=bUa¤E&ÕP@R8pAA#=V…Û¬N, ˆ˜*qŸt¬ÃP©dþM¬Ç`!©ñ¬Ã4‡š»±ƒmkZy ¶/GÏ• ­Û:%%¤‘“¨Lœƒ!H'AÇy M$1æ1<‘s eñ‘Ã…(_‰uì´ ë0 Åâ€ûõ,R–×Êc°-cÙu˜.d -O¬ºªYº«$N}fœƒÑ…Æ© øàB#ƒ #‹ù†Cë0œÔM¹äë0c´FBs¬Ã0Yn°±ƒÅ¶çŸ«n€_-ÝÕ’§vç`tƒqê†0.¸ÁÈà†ÈªÙ‰u˜n`2L -yÌHê¸ÜÒX‡é‰Qc=‹BÖõ,§®Ç(ë˱dÁ"ê¼dÁN§œÓÊcÔèHÑXÆz [Áh,K º¬q;ÕÔ€L]‚˜Þ¢7’syTÖ¹!ç \&)$=‹Z‹Ñ†z¬“SŒÕäj™É›ç¬EA"Øa -fæX‡179‰ÁU?•T¨‚%ÁÆVÜêë0ˉK¬ -F$0AÁ‚œàÈ"•ãH˜X‡1¶eìX‡iϘõ,Tô’U©®å”䔊,ÎQ°'±S)…c‹8˜zÖaªÌ#Pë1Ø‚Ʊƒ•²Û±ƒmâ‰UsÛ ñ`® gndQÇuYe¬­p• 74²(404±Ó-²mb~J¢p‡#P,h„X‘<9'ÎAšB½é1X©Éë0X„æÕê1µe ’XÉïgù]Õ•"?rZp½Ü)¶0»hÝê`60r’VîL‘¹íìW -H‡=­É'V¢ åAKÊ;ç L,¦HÁ¢Dƒ:"‡CUl£•# ‰ \c¤Ç&ÖX‹ §_U¬€$6pAŒ‘›XcU¬T™Q¬€$6pAŒ‘›XcU,¢•Î\¥u–Ä.ˆ1Òck¬ŠEBNS& ‰ \c¤Ç&ÖXËÝKL|«ÀÄFNÅ$Òã(6±*¶Ó“ŠÄ.ˆ1Òck¬Š•Z3j+ ‰ \c¤Ç&ÖX+g²A‚(×ceÑìX‡Á¢œè«‚+=;A‚œàȪ Ä:l‚•TS”®¢V@¹’j"×µPš7’s–2Û&Òc°Ò"K,s1¶&îXB…þ¦Ì„B"–»D¦å0F»FF9ˆG¡Ê«’@Á‰Ó¸¹ý±1ÎAn~Ü£— 8´€§‰gÊÑ(d_ùm® Ì”TcdL«•8\~Û˜Ààv4—y™„`–ÔCF9HÏWpG⇽ ½å(ÒAºªÂ“— LFÇÑÉtœ}6N<ŒK–ä7 …é+ó.a QýÓnƒD.Yò–ß&.2Cײgg”ˆC±Ì8Ô½€¿M\d(@~›v)Pö‰zuùâüËeVvùÎE© ëêìòZÞ5àòÕ—Ãû»Y¶ú½^-·³åvóçËÿ쾎Xßdç_6Ø/)ç,:+)è‹‹—_¿zÉ1X)]ɸ˜}·^ýgvµ•ëèÖ}¸þfuõ°ÀS†í|µ$Ëã_¥ääóü¯ ç_ÖfÎ{ ¬d¸íØWm°ãr6,8ãtZVý÷½,J–—Ù4•ùzù~³]aj¦“®yfÊï›#WJzû¬…Í–×·Ãýv¶&Å<èÖè+&¼„pUøÏÕ'™+çñŽíJï˜ôEˆ¾ìír³îîD -Ñ<^–×2:ŸÔÓ2H¼œm$¶KtBM€­œþР訟`$Xj!ŒŒ¥aÏW]r±Ý‹Uå¤Ê§ábþW^Âa:]ú~6¨õØÚ8x{;“qxë£Gƒ,gìÅ­]»nf’N¸Jú0úæ÷D—Å5g|óWŽRåbß!¯æw×óå €´]¶1È9åÕ|9¬çê„.:–êé{PlôZ!#TGy Ü÷Àe˜}œX,"ºAδ6_ܯÖÛa)ë'⦌{À&Äž˜‰ÇƒšŸæbôÏŒn…ÔG¹£ÚwÇëõlØÊz@ÑSÇýáP4lïeÉ¡\vaÉ]­–æ7kÛñ:/â‚ü0¿›©^pvÆœÆ-“ɔʱ+6”æ(ÏÔûž±$ésÂÏ«Éף̩^àóÑ HQEóy¯Ôj˲ŸæÛ[q£Ï\[äãûa-[2Z_'«è*öO\ µGyªÙ÷ÔÅvXoCRÁ!«±ðø…0Ò”Œln7†M -G†¶ -åH¶\¼7þqÛ‘º wìÝ€ÐĵüppjuŽßY~Ñ9Ö+­ÁêIaFÏ—³íõ„Å AÞA_è”±ìív7tŸ$7ùýnÔ¼¼CM³DFø8oà°Qö1a FI¡"9]7ô¹äÙédÚÆ4ÈÖ‹Ý­å"Wq¦åí “Ž©‹òßJ"Æ­¹]º¼EÈIvÂ7H)jÞ¬–Šã»xúz·Zÿø7*]á+» ó)òÓ12‚Ýãà‚5º¡ñ}JœÐ7óáf¹ÚÄÕ„®xgÝd˜…˜\ÃŽX -£ÄァnÀßfì¡[”7ââju/©°ÄKÛ&޾ѽǸ¸½ü^µ~Ûø` ?rÝD=Ïx[^ß®l:ð"®G¿J—Þ¡ª -S´]]­îj8-æqŠ²¯fgrm\ë0ü6íg Oî¨'oàwëù2fo_õf“Òß¼ý·,$¿ýY$-ýäõ:esEãý»×”†µQU'9™DWà#½ÉÖ3‰÷ÅW««cÀÓíÃGLÚ[ -íW¡í¼;zHðª=ÜßÕ‘RÖøµÅrXhÑ‚ÎxwÚJvÇ -µÀ·}å…𣽷ÐY‰©o'+"ZŠXzY=åN›añ^p´3¤" »€); -Ÿ£Ü7×ÐFwsZî÷ÖÞ.·ëÕõ -+­!c—ä4 -þJ©jÏ>æ±×{¹Ù<,îi‚¤þF:Š'+ã~¥8ïqVÎðòÀïi(Aw«>ö Äwûµ;õýÁ˜q‘A[öÍ[*²Á£ÁÖ„¶Ñ©õ}D~4ïâ;³>hŒäÍgdL-Öì£qæb*;hŒDé³7F ‹GO<#cšƒ3£•Á£ÆÈàgoŒÖ -ÓÒÏÞíü¾ðº>ÆCþNÅ^$£ž~@e# ž‘þàFиâÑÉò'£ú¸ÏBuF8'ÌnÖèóëÛd´ùS§þë æt÷†4C¯ïzõIjÙ'bëuã}Ç'ôÈ"‘Þ„X o©¬›qáÎWO^0’îÜY möQKZüaIì"¼¼™-¯õÄ—ÞfŒýýy‘… `Ç’½Ó78ªsÒÐ9³#jöýl³º{°“ ¾!±.Ô|)S쿶Øk½Ü?¬U&žn¯€~@Ëýü«ùòAïøã‰ô:‘p¿×èã×*Oí¿àþý•?}±Ä'ërŸ£é|~» -g°:DþS+t´¼ ù¸+C½Ãád¬7^­î>Ú»Düqo|yyôŸèÆBߦõPÕÚ©x8ˆŒ§ÃMmœÜ?_3LG;5üŸÈ/ùšp>·ã‹|ØâêÒç„ñóÁlïsÁŠß°Øñ£Æë/æ\C¿|ñ¯ÿœözKendstream -endobj -1016 0 obj<>/XObject<<>>>>/Annots 103 0 R>>endobj -1017 0 obj<>stream -xÍ\ÛrÇ}×WìC”BØûâ)¥‹«Ê’•ŽR•Ê‚$,Ë dÿ}N÷ÌtŸ@‘4uqREóà`f§{zú6KýïQžñÿj™% ¶mF±aâ²Æ‡Ël¢œY1Ap“Q5Î9”åNdAF–*yQŒLZ2PLJp™uù€#(êDC61Øj,t–0ئ”q–0ØI%Úu–°hWÖí,c°u;X2cØJ>U46hw<Á‡I» -\»‘ËóFj$cg,ªp–0Øn2d ‹8“Á̺¤[[¤%`KJ\X‚“ŒñÐv +#–°,©ƒþ íJ=PjVµhäò²‚,N2Æ´u;u6LÛLÜxk>mäòB ÍIÆ2m7`ôµìHܵZO¹¼hñ'cÚ¦°z*êªTcÐc€LKp™áˆbVý¢p1i!¦à$ãðÈ1³XBÂ`»BöÌ&f C«êe,fTÆ2[ÉYõ™ƒUŸC,a°“!–0Nf.ˆe,¾9M˜%¼Ì*øIìºIÄ,Œi0³8­º·V¾=‘ks±mº=¡bœc&ƒ­KÙYÊX¶§ëv–0Ô4nEMÆ2[H”"–0X8ÇÁXÂ`; E4–°¸´Îô"â2[%b ¶Õ­µ53Æ bóŒ Ç.oÉI(§Ÿ¹è‰Œd 5" Ag±Ïil'L,aŒèö±„e $èùXƲ7ˆ%,JnåüØÌŒEÉí`ÍAã’›WEäò¢’%ÉXì­a% Îúw–°[Ê‚e îÂ:KXTÑ Ç[©%ûXÂ`'…¨ÂYÂP¶€WÅ,fⱌÁjŒñ™UÉÕd A¢›À”œ¸¼ªp¸œd 5ª7#–0Xâ–dž°c h>–1ئÁKXÕ`ëÕðRµ¢Ûè¿q4¼$.‡›ÌIIvÅZ²€ŒÓd7qšÝ:Gb"ñ)ã,21ØRÒÊl-vH,aQ‘®V×'33«I¢e [ ùXÂr膫b,Ö¢gcƒzËVdЧWoäà=‹¬2Ž DU³v’±¨IÜ´³á‘8á–FW -ü‘‘˺aFF2Æ´ú56L›çd( -|ÚÈ!«Ç®G“"ªÂˆŒd 6l¡³„ÁN$[ð±b€%ôd€¬G 0qjqÎD%!®Ù9‚8Û²iÎ9¬ÅIÆb|¢:g‹ñ•ƒ±ŒÁÖâªh,a°ˆ;¼(Æ`‘å<–0LvÂkÖ -‘–H §¦€mhârä(zõ›Bª,‘ýš @8¸‰“êõ›Bꎕ>ÃjÄJJBÄb¤>vŽ Ö~Øv‡Ú/Aì -b6tg$c±®fÈ ˆµúX²g’;Ël%u7±„Á"5ØÌŒÅHÞá,c°H¹X¢°g¨ÍÄèÞ)„ñJ%[G¢â€ÁˆŒd,j¯@,a°8p<1cQ„¸"Ël#I±„Á"ÎblUŒ¡ˆ±\gƒE¤à±ŒÁÂ`¡D›9(qšAk -\‰‘CHÆ3#;leS#( -.DIF2‹$NÇYÂ`¡”ÁX¢~=ÿ>–°°¨ŸXÇP0ªYž™±lÝð¹ª$ɪ,Š`JJœš–s± Ä÷Zs³&“ŒÁµåĆG"^X*R(ðGF.<Ã8‚öH#ã#ãÈÙ5ä,aŒÕT–X¢?©œU7(É–µDåªL\(4œdŒ‡b,Iç‘¡aZ”|rÄÃ< -|ÚÈåÚ¡+ŒdŒiµq6(nÖ¼}¡À•¹Á«Ìœd,ê•ðD,a°e{!–°H* 1±„E½²ñΆ¡¢§´Pà Žœ,p‚áòM!㡃ˆ% :ÄC},a°ˆ.–0œ«86–±œ'ñÀ>3c°è0 XÂpX°4fƒ*rj -\‘‹¢ÉØTálPEDw–°©ÂÙ Š86Šn,c +€…;K,Z€Ø>g Cp¥8tÆJ -‘ÃÙZÒ€hBSˆÄiÎàA*‰Ö΄œèLD2[IBãC‹Ž$Á"–0ä„[ΉÕMÍÛP¬«}`›š¸Px9¢—kžY½ÁöÃ<‘˵mà¤z–\ËæèY'ª£I\Ž2¤‚°òSHÆkn‰ Ó¢k~PÚ¯…Ž ÓFN - 4’1¦…ÄC%,ºÕMs–0t‹ÐÆcƒEÊlX0†˜‡•ÆÐFv’1–¤Y±„ƒ8Ö&ñcïà,c°È a¡6–±ˆ“‹™ÄAŽnw1’°w$När¤ 5ŠÉD2Æ‚‘ã¡Î‹ ;` ‹8r“ãcƒ…ŸþmfÆ`qÞ!Ž³„ÁjŒXÂâ¤ପ×2V˜èïfß‘‘¬ÊŒ"(›*Õ½sÁi²åœCÑ€tpÓ3ª.2¦éú»íÈ`¹•\f…Sæ‚Û#Š`Z"í”ä¿ñPëï&sdr-:"ˆ áópý$S„Ón\«×i‰SסæÖ³­¿ÛÃ"ü…QeB‰mÎ9%ê}‹L/S§®×ÆéB¡Ìæõw[HdB¦eA,ö-­ˆxR‚뤼7N†–‘™•þn‹LLëäkBÄ„Ð.‚œqÁ¡¯ð˜¸g'ž¼ÄwÇÙÉ™¦Èc܃¶Uvrª—ÍøxöødúþržõgÙó~µ¯¶›¿žüº{½>Ïž¼ÄqÏež#ɵ1ÑQ!=~~1½ÚÎ×2J¢&L{ú8+Gò†ø -“Ÿ¯§ÛÅê\>‡ò'y¹×ÇúUœû4øÝbuÚÒ¥ ;Ò6i–Õ|û©_HœhœâÓb{!“À4ëb?<ž.ßOåÓ'/á3ââ‘5“RHpÆBñŸQ¥kÅUZ|þ“ùvödµÙ`ÖÙÅhÖ¯Îddú‘}»ÿåyôš[¼ä¨\i¿õ¾™.ç*?¶&ïâ‡ëù¦¿¼Þ.ú•P¢Èôõ©jµ»oÂõf~ª3 ¶µ.t4âm×4qâ¸a0³*ÍÈ;Gj3ÄKÛŽ¨]a–‡è°«V -øFØ í%BaØËÊ…=¹PÕ ºèê´Ü7óí³W?«ÝIñ=>ŸÎÂ8XhR<|ù·Š^ä*Ÿä„;âwï§×?þ||¢â¡å2îÚ(ÞÙâ2è–SG3¹u1_è EdBB²»gÁœÑ3µå#}¬÷—þB½ÇZÝý¦)J•E=ÂÀú¢'!I^¼Ñm`á~êû×W2šŒßÂœ …€AD¨÷,ìÝ« ƒø;A$š|“ï%F"Gé<#lîÂÓ‰ÿ±ÿ$Ç>xÔx¿F‰®iàήW3ñ›2`¦+õ’¸¸i,ø\Ä©Ñ°0G²íe(\J&O»WV¸+ä -rs1 Õ&Ð]÷ãNZ¸ß—¢Îp)æÅ$ú®Æn2±ƒÚè?­æëÍÅB;RèWõ÷k­Eùp#Éòí5sî'_(î¹Ù}ºXÏgÛ~2[\¤fÄî ÂYþRÕÌç6º —~/¶â@Iñ]úÙ ÝÕ†“O]®Ï=÷ËsQ$F E’ýêþÅ`¸M³+Uõ-ö!é#ínº¾|¿ÖŸ.Î~O;bݾÃGí¦ˆÄxüµ3ü²z„X0”{¯â–ë¼õT“2wb*ë±Ù]^þ2u -4è|¢›¹Ö†*Þöô‹«Ã>v¶žO·!]Å-×8µƒ–ÓÍuû¸R´ÊájºÆ֎º¨}“t`í®ïýª9hlÓm¬öE;RhX곜^]%›…Þ›dôñÄ”»]Ž÷­·&‘Qw)‰|»Fo5­ -WónÇ×WWý:”Aø“9»¶úÐZ ™›pë%£dý¦F‚÷ª¯ž“ÿHZÙíhȹìquÀ|Öýi¨wôhÅLdgêïKè¯ïÓ@%³+Ä~Ykö? Q -´†{7­U¾«{.N'Ù$gëÿ¹kýËõp!}~¨ƒùCZÆ拾ìb)´lÈ~´=žo“ RY×áÅzö~Háñ7VL¤"_ŠüðŠ¦¨AëBnšýTÓý!©nT…{ÿ]Ÿ´ûmprƒ+ä½|þrº>A ,~um—Ü/9py f$—^èÃéaù«øNÞ¢Ú9|û—ÎOOOÓ.aKS-ó&ÖGè:Ú;"ƒÃûYý¸PU *ÃCAœ t~ñã@ùôí;õÁx9°¾O¡xPQúoMìècÿÛ£m‡ -î¨=ÕüÝ·ˆ?zFð–ÿ$u'.ì‹~Xisæh?nì•|'ÞryµTëÔuK‚e­’“¾¿ÜÌ5 Â4ßÅw¹ž¢èÁС>ô&Ï»‹©®Y®²­²Pñp5æ¤$÷ßdñ*mWÆdÑŸùõK[‡¿Œä'nä8çÃÌMö¼¶š)^úLåëÛéì.f†#Õi¾^w<‰×Ò‹i"Û¾+¾—eÒe3Þ-Nà×ß­ø„$ÕðÍ‘kßÉ” ÍjܘÙu5«³ç— \¨©Ä?—ò-ߘ Rá„ÄdHÓ—:»ô^$þŽN&kðÇèz-yüôõ³§ÙÛuÿ+%Ù‹~v½ÄâM.ùÓÂq‰­oååÒÓÇ‹…ÈõÃÉ£<ú?MÇíendstream -endobj -1018 0 obj<>/XObject<<>>>>/Annots 147 0 R>>endobj -1019 0 obj<>stream -xÍ[ßsÇ ~÷_q“'w¦¤y¿É‡NG‘ëÔ™Èq-yÜWŠ:I—<åHÚÉßÀ.€#eÇULÙíŒGß}Ü]‹Åb±›ßž¤ÉÿO“:Kò*Y¬žLÆ|¡RúçÍô%©Šþ]%ùlœ°LΟ8¸JÊÉ€sp•Ì2í„Ú9¸JÒ<g®SÁåuìt2Î}[‡WI6)"åI‘—ã)T)³q‰ä ÄQ¯üCwF"„vi:WŽô˜”)Ƶg[Õ㳃…Y`]ÖcR&´õl6UIdž´É -â¤1 J&-p2KÊ9y0"4UÒc°˜ÐX‡E—©cÙô嬂ÁôÔô‘KÑa•) §9»ORÉÀ.°ž‘Cô“yÖa°õl šbÒð¤äÕž:«=BR¦‚i­¡Ç`aøÚ³ƒ­RˆëÚ:LÊã;ÖaŠ²Õ ­Ç`‘‚®­¨ -Ÿ`ÇfݘªÃ†¼Ê9HªRe¤Ç`1W›z žûë0ÄÍRDpcEÜ:•åÄâ20q7¥+WÎA^øG9,ü!r>X^IÁbË€ŒulEAñƒÕÞôã’KF ¶ Eg=ÓBÌ‘…iÎ'@bäxåç û.ÔæN¨|7BÒ“vA#= ý!6õ²¦´nŒõ,fpÀ: ™ì«={ vJÛ¹cÆ6ÀI˜±ƒÅîê{GÊiêãg`Ž8DØZ9i—ÊIBk8ÊáJJCSxoåNXÃÀa1WI®œƒ°|Fíô,ÎR›ÖtËàÞ´ó¦ÒUé1X„…Ú³ƒEž0u,ë’a¡râFºP]"ÇËÎ8Ñ)§&FzLCÒ™ÃXÑ¥’SE‘Ó%²åu™±£cDšë0¹gFvж“{Na`cE¨RN,A(FN¨Èæ)Bdf¬Ã -3#ë0†E¾îÛʰ؀ɕ°ŒÜ°‘åÓ|f¬Ãè™ôQÖcÑ–RV†Íäì†eä†,ûif¬Ã¹(h -Œu,?hk¬Ã`±qWžu"#ÃQµ­ˆœÊ #ˆÌȉYxh’²„úå¨  ±Ÿ@% c†–t˜yÖa´EL†´-k“"èÑ^-Ú2m”E¸+`,ú-±Ò”CmÊÈ5,œ?…”TZSleEh£«˜ RDæG5ÉX‡1,¶Ü³“²Ô§µe §UQ‚…HláÈ¥HKøý’HiˆbŒFvªÔ¸©ˆy«7’6U:!Òª‚Óà ¸Oƒ†2Xã\%(JÁìÚÎAN; ¾rˆËB䶵#=&Ë‘TÖÔc²\¡=‘°Sð DÂÚzL€v)Ç:L€ûŽu,˜ë0,ˆHãeæi¤| -$7á¿u6“býåF9=QªãQ_Pÿ࿵ÃÀ¤iïPŠU.±ç¿µQ`¤‘RB -¤F(ûQllƒà*Z°Æ¤yH¡»r‚ƒ­ÇB­4%ç¿UÈÀ 1¡B ~EŒ!‘k\‘rD¤ B›91° ¨zºt"“kç 8艚š¶3NáÛ„‹àØ@u¨0žƒà°c 4¡œApõ ÈqlC‚l»!žNz"‡hD§KüPfN!Ì‚d'lå ‚›¥Î ÔC¾@'ÇЧƒà¦ì»ÆËõ¶ï®v‹èepAÇ_ ˆB#$j%²}%†3…N÷ŽÖbX²ˆu\Šw~¢ g9Ol΢¢É¥Eîç'ßWíÝíœ|·tÒ³VìfØ­ó8iÉ•¬g¦ã -I£ÀïÓ<,ÚÛùûæŸô=Î&Á>ÁQ{RËëºÎ›mŒ¥8Y€ÜÝ‘plÕ”§z1çïØjë¸ö’ùúŠ‹­bèlìåY˜ýdÓôï›^ÌŠÉôQ¬SÔ$Ç(­!óÀå¾/üØ]E&NäõöïAT+Ã$¯ü ÛmïvìIT[ûê‹<*¬t¨tõp¥7Û~¾¾iÈ8q•iÜÑLud u‚ø£»üˆÌ4¦É…ä=Ønýfþ'4ÏtÕ¾î6ÛóEßÞIö€4L7# qìâX!UÌJ¾ý®jú\½Ÿ¯ KŒM2/b–á·U\K}½è¤¶‹3v঳}7}ÓÌ—³vå3”Ëé£æªÆþÅŒDõy.Ï?M‚Î1Æœ7‹]ßnÿ ®(ÍÕMhÙ¼o–D)º‡ÉÝáÑq95qF5Ø…[äóûSúM§F¢Î^j„Cä¾g]Ïq?,ºÕݲÙ2÷–]52ᨀûWÛ2»k2 ª]•6ΰ`-Aq.€,øhÛMœSËôqÃŽI…²ŸLôQh`],&yM -Tâtóøý§É˜ú_u«¹œ×càeTØpÿ#à¸LóGÛ…ËlÏ÷©àï÷]ª¼°I²¨ç]»GŸÁt¾fË¡X­¹Ô« þ„s§nWϽ•ðº,XéC»½¥ßús`bGÝáÙ’eFù,ççc… ±Î(Å[xªîÌ°‰¬&µÉý’Þ—^¾k×WÝ9nÁ ˜ÎaȘÅVò[TzbUàXÚR¿eN³0â‹ü¡ÆrþPßÝrxÔZÖ™ÄÝ,ÙÞ†H±µXq‰Ì]N^œM³ñí­¸nÖ­’à—ß ðòÃ%EÜFBŠÎ€ªô˜kHÌä¶IºŒúœðr°•¼]·×­d<¤žî§î¦[³=qŒ³”¦ûÐ4¼Ò°³bÔ°~¼[ád]% +em=¯¤wDš)¾}õò¿4ñ8Øn½Û„eŽYš¦n¤Kø0ýWù,lúŸï”å~-"Ç„Bžê CÎÉ%eð 9¤ Y¥?È#ÿR4ávÉ/LÏP‹o8kÔµ r¸ÊoÁŽ§îÃÔ$(w½o‘3°SáÆ/–/<ÝÅè Épn°M±vîÌ›\Ìû›Fœ ·7± ôv#jàU@\CÃÿCŠBþ„HΆSôïNˆ¾Bû‘z×õ¿Êô`Í{#ý”}‚fHº÷¦JLÑY»è»Mw-‡]Ük®ñ¦Yu’·RÀ¬ãYŽˆåNRÝÁ™òt¾ gÜì¡LÎñO ú.ÎÚ‡¨XjåY“ÐàïÕ|%é8RJÍ1ÏQvjR¸@¥ZÃý9ò¥'Lx­‘¡Px áïÕ· 5)$ÒÓ%ñÂ+õz‰:9Ý­ðvá®NvÛ[ܳ´ ½|À¤Mæ -ÏË=p½w$÷ŒºÌŽ¬*¯‚ßî Xùè¾ü“$ZÛVúò9€RV= Ÿ,—iÏľcNcJLx›¼·Ù¢"v°ÎÞ4›ÝRB¡ Éé|qsܱÇÅw¯§ícÔ„þ³–aP=4G}¹Þl±ÈÕÅpM¯Ô}s‡Ë¿ëöfgb¸Î=–ï}Ä:Q7dgºFÃŒÂnÛ>Òÿ1?Ù§ûsrëÞ4¿íÚ¾YÅ›Ö꘷@ÉÕ®Ñav€+þƒ%qÑlô¾o 9æ&´ d#¥}$–––’:žœêYÆ|Ä¿ƒRxÌ<Øs¤|®kã§vÕnye°ìniQ´Ïl§Æó¨¡7II\µÀŠ],qN‘ûëoM Þ*Ý!‘ŸØAŸ?-BÉŠÁsù˜N[^‡¨ ~§ôVt‹ñ‹w[Ô»¬êbõ‰½G¼-Ù8sv†õϘê&üÖ­8.Jñ«y/µ]<1‰Y²Õu¨H¦­é=Eß-—²{¢jø°Ò}Å›—{Û#›òžGõÃLøußôe6­$…x”£wî JòWqsµºÏvÏ/ùCQmD¯²‡ -í¿Ÿ/~½Ar!Gï˜F|IIØWP`pvDa`8Ñ5ƒÕñúÀ< ™`pC«šÃúÒŸ9J¬ö㡓ዾ‹y JŸhVÉ–‘!‹lÐX -{÷ Âkx냤1WJÎ8‡’ŒØ—p.ú݆3.¼I±óËÉb9—IxÏc>|_ó±Òìé²[íàª\cˆí[÷M†3ûîÞj®kŽ2z6ôð{xóõNîËÏNÙšá™’·æ=wÁÀt«ñe²ð¨u6u»09Éa6ôÝÏëÌ>z±üã;Zx©9CòHŠ#â—á\§$8øïöù/~0‡—¶á5’i\.$žSóÌùÉÙ÷'T(ú¥Yl“çÝbGù &ë9íB¨.Žjz¹wõ´m[ã_Oþóä#[znendstream -endobj -1020 0 obj<>/XObject<<>>>>/Annots 192 0 R>>endobj -1021 0 obj<>stream -xÅ\ÛrÉ }÷Wð)q,sî3yIùºqâ[$mù1EQ#‹YQÔ’”íýû »3äxW–,oRåÒáa÷h4€F÷×ÙdŠÿg“&Ÿõd¾|0=˜âù'“’O&uÙáßå¤è².&G.'UuPGp9i§%q—“.?(ˆ#¸œde~ÐÉlÓ´ÌÛ•ƒ‰/'ù´>èh,c°Y5P”1ت¨Êl·Ã†aI–¹ÉżE…!ò4?È#û2[4bEý®²„ÁV…å,a°m1œ™0X˜ªâ±„ÅSY›™1زC[Ô¢PžCøDk@$&ˆ‡N3™V¿”u ¶ôy”% ¶.EYK8¨‘Œ "M;X/‰¤ÀEŠ\WȪG“j#‹¸2»e ¶­Åm¬ -Tu5–$ -€ ”¸VÔtŽ &Åt‘ŒEÜl0”q—'q[Õ°ƒ?–1Xì2fƒ2ð' ºÂ•W&rª¯sE\q'‹¸­<Ò¦e ë4e–0ü3¯±2>V7\UË.ÄPÝp©—[×ðPb ËIJiœe ¶®c# -À÷yl -f—M…RDB%6á,aÊØ(T›cy` g c,¤€•% ‘sbƒ-ZÔÇ2Û¨1læà2eá²Rà.¹ád CÁ!à46”±˜¢ËlYÉîq–0Xì4˜ÂYÂP'Ÿff,¦ÈÄ6–1XD*–J²k•5ºy4 – ˆ%ÙÕ9‚1»:§Ù5Í©éÔ9‚°_¦^¨OWG# þdS–0XlØ‚b ¶ÉÄ~>3aXÏa–1ØZüÂÇ2 Wâç2–u+ĺö\Æ°=>g–1ØJCe¼œ”¨XfÆ`‘˜ >-4È„˜¨À3cQW×Ne ê:u¸% þÏ23–È$écƒ1*Y 3†"2FbÔ ®³„Å™<ÖYÂb ÙvÄÛJÙG,a(¤¡ÖÙàÈ(|%{‡ @$&¸œ4üKã⑈?pd#ƒEœƒªÎ ű²Î[·Ã±„¡ b Ål¥e3Uñp+¤K®jäZIÛÎÄáJ²œs!,Š(j“2‹@8` 3`ÇúX˜!aa[YSbƒÅÞÌLXŒ$…« NŠ“Ðw¨"rÒĆê,aŒ-§b'g «kC¬c°m#ã,aYw±Œe]kÙuÎÛÈ‘ÚY©Š¶Ò-©@¢,ÁX8§õ@‡úÇyDÆ„&8¨5D2MJØÙ‡2 ÌFt™Jzð±ŒCî°p§„%2I%Bc ƒÕXH,aäÞLÍÌŠ áS"°}“8=€8§û­@±ý€‹\¦Í'Ã@Ô–\ >0rö?D3’±¬Œ¤gb ƒmtQmlx(2£! þÐÈaË×°¯|Q8‚˜‰¦3’±3aQFŠ”A–è‹ æU ÊÄ´81A#%aJt7Á³à` -dÁ˜0Ó„™ÆeH{Ø,61žX©W;Kl‹<ΫIÆYUSª s±lÍ'"d°¡|SHÆbñkb ‹ÀÅÙðP$sÉ&­Î«»;@ D!Siª $c°°gÁ,ay¨K}bÆ`QÕ—Ä‘j:Éf -Ü‘ë$ú8G“–²lN†IÈ-ŠI/IÏÈE½Œd,zŠq|(c°úÕ˜œáÌæ'ʀªI²2VëQb ‹6j^IÇÛ”²¦ÎÆnÒŒÁb&(dcƒEG%É(Ïe Ç lœ‡3cp¾p‘C†é å‹Â„2ÈhPÆHÆ`µ'B,a1“˜šXÂb&];›9ˆ;¥ób¦ÀÅ\Ï8‚&®‘QÜ82ñ9Kc°¥œ%,âJ™D,aY7UÆƪ2¸š±Uÿ6U"£¢ã(éaTP#Ž -Z8§J$NevÎaÒÀ9U ŽË3iÛ§âkˆ…šþmâGêtbŒ#< -ý§Ö)‚àP,gÄ9‡ÈTçꆊ8‡àlˆSñqž·zDÿ6ñ#£ãÓ©øF‡{NÜšÉä2!AphÍáÆÐ8‡ðܧ""³IrѤ©ËŒŽÐ.–ûIcáQ8H?îY‚à4©8çPÄÐ{ª4NÅ@ HÒ>Xÿ61"2šQÅ’ÁŒ{züàñKI²“ã3dŠÛʦœŸêU5>ž?<ž\ô“ÕÙäÙêrÛ_n7;þßîmöúãäñKìÆLæy$a¢G¹LôðÙùìjÛ¯e”Ô 0íéC,Û|†›>ùçê³|‚îF“>Ú®ô;yYÇAŒ³ÅÇëu/ \®4æh¶<™É§8Šgeš‰BçðçÌT<¿Ê»8©ƒ'¤Aï׋ålý› „•uüÚóÕr¶¸ÔOQÙh±Ìzuq´|ü 9X"‡kV] “È!Zã¡h‚©â¸ö´Çýkµ¸\\~Ü“}{®ZÂFY—'ý/XùjŽCŒ©i–*¦müæØh×;yšÅ¯|÷ÿ5™HøHn °˜¬¥Úç¦Îj¹\“Í4­òûõ -n·Ô•B"r¥f—§23"`]”QÑëõj­_ÅÕ”yØw×itÂF½ >+Í¡¢õPÑ£ß6Û~¹·ÄïW‹ù¢Wé±$UÛD¥Æ…UÎñËpòdQÉîãæÐe•{⡲ÍPÙç³à¢ØuMÚ=+8¤Æ슢J[í¼¿¸’IQZÔæäó™ºVÙ|tòJ¾…«Ûïûí?t$r}rJmΦŒÆÐÌ>Þ­A›þiJÆ°!“ ²u²ÓÙJ­„s»ÛîÃâòtõ9m†Ý—Ço^è ¸ÑJ»çkßýó¦ *ã¼¾ãíPL•æ°–Bõl»[ýŲ‘W£$¼ºÜl××sá6—iÑ¢±Àÿ¶ß~^­‘‘­pœƒ^¯>âëª0ÊÕøéõjZU -÷؃@…tð=5:ê·ÛãqÒFr f¸VïG‚0ÝW³eü& -Õ©E„Ÿ7qûà0™"÷d'$Ä]u‹Dµå$"vßnÇ}ß½yòê퟽{{|øîõÁö‹ní =´¦N¹&,àAkÉçkûöXŒ&µïãoÜÑ pÕaÏòÄÃp3ËML ßi5€SùR ´ƒè!ò÷ -˜Ç¿¹€y2öëÈ­oP’<Í ¾"¯„diC¸ñpíòµ’=!ßB¡€AbvÜ+P^]hõƒ#»·3XVýhbFdð-î¡ô“ÂR]ÞW¦­d-©`*Qw ^:ãûu¿î½^lÛPâÝ¥œyØÏNÓƒWß ým¶–:‘}†3T²sp à›mŽf°Œ~NíÀ"ד©äšÛy%Ø]÷úö©´­E„ËlÇQöÓç‡óþRåÆÑ2ØBÓ9Þ…õL7¶¢ïŸ?Ó¡hßÚ¡ç²ïOûSUA±ªîí8ãnµÕ&üp_—Ãñ,”°ƒ%òŠ@«OÂ!ëfÛbÏ(ú£TLQâ·ÚFÂ?^Dß ¾®ÓíÿJkWÞÙ ;Ǽñ} Ê;y¯Äßô!W–ö ¦=kÛùéógj97W?î¼<ÕªY(áF -æ[ZiÝ_á9 QâmžŽÑci³<¹šm6Ÿ÷Óµœ-ƒ…ða“êíc0²Õ“•Yyƒrûk¬°©¨Æ:Ú®Ö)ÅóqY—ü¯á€„&Kª'R4?~3›Ÿ/.u›¡ß×ØiâÉ|ŽÄ«.&=1ÛV‹KœÁ–{ñ&¾åŸ±òIƒz|~†{ýüÉ{ñn\§ûF¾X÷sÈúJÈÍïGÝV&T(¡Ü‡ ‡!çýõújµQ5)Ü–áOAŸGáœÇzì”D¯¤vŽ†bÄ´.ªðááQ…AQ”:zÖÓ:º¾ºZ­·½î°AñbnƒŠyÔQ¿þÔ‡þÊm;ÖüXmÛN,EÑî+/ÎN^;šŸ÷K¸Ò®²æÎX»ê°¿Ð=´9_è!×Z¾CnØ°<|Ò>f:1çÅTƒ 7Šá÷‹/´q•bEæ ­‚«»Á¾ÛIn©ÏãZÞYOEŸÛs±7ò¦­÷dÌ9î ûM‡vÓ°òƒü„WcGòÓ»«þ2I‰ ?x¡¢Ô¦¼‡L¼QÅ,tSAnõ½$=^àÚ]£ýúóf …~SþÝŽ 7R*)ç·ÓAŽîš€ný±½÷Ž”W¡QFâÉrv9ûØ/ã 6dÝ~CËèFÊŒ~© ÷ÞÞÙK;ã£~~½^lCóïMY·wLÉÜøð®GNýñ‡þ.^ÀwtÛ駭ƒ—0=úo®úùbv–jQ·Ûõâäz‹èz!1Ö!f[èdxŸâ¾7jŒ—ÈþºÓ7|ñe¶¼ºÐrdP]½~þê¥?iíô9?]ƒpÏiLÕ½zŸu—™qÛ\ÜWðé - —òÛ‚aÀÁ 6j•ÎÙÏp·•nLqñúC6ÚèîÛý°+ER*ÆñjÈ Šñö¨µ¼Z¯>Å:—»¶š'k\V¤6n/íÄ>R=ëâ‰>/XObject<<>>>>/Annots 233 0 R>>endobj -1023 0 obj<>stream -xÕ[Ms7½ëWÌ-rÕŠžïSJvÖIªìRb©Ö_hrd1!9Ü!%'ûë÷u7€nPÔÚÙÚ¢¸I•¤7oÐ@£Fcüϳ,Iñ–4yRÔÉlu–NR<¡ýxÿ#=Iê²ÃÏURt“Ìer}fà*©ªIm8WI—NZøJ²ª =P‹Á¶E$¶¨é墂ùM+7ÌsHó hCÇuͤLêÀ59õ‘vx¡i>Éâ± ¶l©)¿K,7­ºM|SAÚ4°g•Ö`´m* BYŒ™!›È˜*FF°góŒ+k0¸Âà k0ض„¹ kð*É3Tl1ؼ˜t¦­Å`›rR–­ZÕZUéÃVõ<§I”3ÃÍÉ+”¡U­¯¨PÇA…îK/g ÍnA3HZR çFê¸6%ýg ÅH)B‹”Eôe BǾYNÚe û´c í×òÌÎ@ a‹@ŠP¨VXÅ@…:®iɳg iH MIZÂ\aõ B=«å $¡-üQIÚÐz]a¥c4%jà*i[ØB9ƒÐÐP„Ö%ÛB¤0P¡Žë2L[8iNSM Eh…FÊ@…:N†8!Rò¤ ¤-6”Œ” -u\–Ò:.i1ÄbÍ—†±9ÙÁÏ*ë8\à „PÄÏ6))B³Ì˜Š -uœH œ"HZt­šJ@ê¹®€þÊHBiûQR„b…S T¨ãZ -¬Ê¡Y8¥$í¡(M)ošH¦nUŽ÷PߎחrRÚ µ,¢Wëúç.i+,Øì.† Ž£ˆçZŠ,Êñ¶S´B(o}‚¸KƒÁæ5LmXƒÁ–eÌLÃ¥lÁ´5lWÑÔò(¸_ƒiÛÉÈÔµ,6貃…ºV²Å`»æ3’ †Q±÷`ªB¿ƒ­òhTƒ­Óh6,‹Y·c¶˜Ø¡Íôkð*)Ó&ê×b°X£V_‹ÁbT¶_1~&y 3>#c|ÏŠ±•58_Y1¾o+ÆVÖà`|eÅø®­3v`-ÆWVŒïÛb`9+k0Úb{€y•5Fà`§¬Å`ѲëÐÖb°5m_†5,r˜WÛ Úc¡(k0 ˜±ãÖb2~Ió¦’WgHaáëŒÈ¼LæäÎb{AjûÀr~iXƒÉö´…Ö`°Ø/;ËL¶§üÈ´5‚ž–µ˜lOŠi[‹ÉºYÜÖ`°Ø.*ÛÖ`ØK¾0¬Å`ËÖÕ~-[Wq[ƒÁÂǬFƒEfd5²˜l_G3)DlÐCLÎÈг¼X k00ED1¬Áb^L•J†y=&óR¼1¬Ád^VHÛ #à8uk1¶?ÃŒ©â™²ƒåÈmXƒÁ"üÀ¼¡_‹É´Í+Ë£¨äXÆûz΀&Ù@·Í+ÇÛ¼@ÌöQ¸Lhh1X¤'²ƒ…ãFm Æ,! ÄhC[‹i†é¼lXƒÁbEm –ù·ýr•Cåp„@Á †ç2œ!áNü&Ïe&9<.hCǵ´¡*g fÎï¥PC‹Á"ða¬,‡Yƒi©Š¡¬,œLŽ{.ò1⦜òäž…ÖX¯Ê ÁH`8e +ÎXé6•¡ë–‘éÖ³Ò²‡n••n}[>qç%ÿÍ9ù±Ã - N tþ«û¯o—¥4ûJZŒñ \ZƒDª .€ºdOñœxŠ’Ò°”³Ÿ¼É@:{b°E/g FÞ¢¤-äì'B¨PÇaëÉ  ½ÈB’P:+)B± ÒB„2P¡ŽÃÐ03BÿJCŠP¤wa…e T¨ã䬧¤Å4V:ûÖ`éjÁ4ÁÂj¯²ƒÅð[Ãò€áåÁÎüw®cð«Lóêæìå$irs‹„Ô³Jê¦Lnæ\¡ÄãÙùÍôÓ²O†Ûäõ°ÞõëÝöÅÍoûEÌñsòò L’‘œ 'è"'Aç¯ï¦›]?R+rqô±ósh7¡gøåŸ\OWŸ¦übVéŸnúñvWÓõ¬'ÇpR'c±ÝÞ÷< Ę%V=9Ò°4èåØiNA»Â PI JB¹ŒµÌÝÐ0‰«Ít\l‡5uziÌOuãt¹@œÇŸÇã¿Ú,‡Ùï<ö‚VáQ'ü©Á»ç^Ôöu+PYÏ»ÕÕC?>,ú/dA” aµçSÅ+ϺÊ<ùvØoû‡~™ó"u[Ö,8vTÅѵñ:d)Umb5ŠGj\-ç¤)¼A¾»þÎ+1°®éÚ„¢Ä þökŒ"c¥Än1¬ù1ŠuíÞ¿ 'ô^éÌûÍØϦ»ž;ÄI±ª]ôøŠ7}+ˆF}^äÀ±â¢vXú×X8ýŽGŒs^ç#°!EdE“"ýߎî[µˆßó:µmdÉ2Žïû)O*òù¢òfÜ.þÅVÄ]û &äu‚«Xï¬bÞMÿ ¡ÞÐen%¬l6JZ·âžI‰¸[d~ìz{*ÉÆüî-ün±þÌŽwz!Ûi@û 5K›åún:JpÀ>¢Þj˜»Ý5ºgˆy±5òFÁ‰v/hcÞl“µÉÆGµ%…wv@”DòîèQü FüЫµçk]¬Ó‡Å\Ì„XØø˜¼\¬™°ª>ßF«‡Ìš—Îð±ó¡ÖÏ6hð\¶¡ƒ¡nœröpb‘îi­\*ªZ}»Ç«JÕ:™55Á¹ÁÙ -'Â=c¹ UÕ:h,dóÅÌç (›…FìGD^§®‹B{Þ÷®_ ãŸôÅÀºð©ÍjºÙøÀŽ“UæÖÛ50]yeðû‘…\Þ º^¼t(s©ÛëåÂ/©äÛžD À8Ç\Iîû˾¢¢üÂewÿJ¹ÜA•«°CâÊÂgtÉî~í]é·ÏþŒ?ÿÏ`ª8iÅgûˉ—ÂvêwØä}¿½_JiƒjN¹Û¯DÜ#®‰h춶‚ú¥|gðŸª+¢µ©®\]ó±‘2[¿'jÜuí…ütõáæŠ:ÆÅ¡?ŸÅ;»(¯åØ,Z…¸|ó7—¿úrÐsèOSˆÒ\»…‘ë?¹‰KBÀŸM×4#ä¹™/ýLOð)@8­Ì†õíâó½¤Ë0`—ú“æÕõKqu?LÇ ‰@-k}ŠRߺŸÉYWZAöÀe<|¢‡£oÊÅ26 äTS¶T$Œ«Ùâf¼'øñ…33 -‚<ø¤/d™\=üžã ÞtzŒöÓ^àëƒýy\`yÖy/høfŠ>ž¯9zÚC‚³ÎÇ£×éâ5÷©öAkàî•ß´Õ|ZÅ3¨Õ׶Í'|6AÄMüEDnNl‰™}úÎòdR|‰!ü±g-¶èÏ‘ÃÖÖ.eÍÐ4îè•ìîzwðÄÕ^x:]û-D³±^¥9Ê!¦BêzØo¾Üõ¼”ÆÕƒïã¹ë [ë}(^nQ5úø‚:D!VÏÄ YU¸9ð¥Šä~+ů¨¨ñí«OÖO¿?ˆnY–ÑHàc›dv¢­±ùÀþ¨•ØäQdû,Õ3*ª‡H°¸•ày§‹¯ æãsÄæÀ¼‡h9¾¬—ƒ”­è Bë—a EñEšƒv’Hµ•ÉBÔõw&Ë­ÔÞÝ­×ÎTøÔÐ'øý8£¨…¡Nâ‚Ÿ¸P ¾Ø/‘u“½»µËÝn:»sq!ʾl_Ž‚ãý:”œ0!>M6ã2|ksÄk ¯8}ïb–¨“ÅËî—énv'W 8ˆ`×8 _ôqЩƒûw‰üÒƒï‹øÃ|±VþÍ}=„ªÓõå»W—É/ãðªÉÃì~…ÒíÔW׋ ïeÈmú²h~þ@þñ÷›³_Ïþ Eºßendstream -endobj -1024 0 obj<>/XObject<<>>>>>>endobj -1025 0 obj<>stream +1071 0 obj<>/XObject<<>>>>/Annots 58 0 R>>endobj +1072 0 obj<>stream +xÕ[MsÉ ½ëWÌ-›ªˆšïæ’’í8q•íu,ºœëHI\“…¤äÝ¿@7š´äª˜TíêÍ#º4 ôÌþï(KRü?Kš<)êäb~”ŽR<Ѽÿ=IêrŒΓbéW±ØM6€Æ7¶WÙ†8þŠ’û~ÜÊ'/¿ªëþ–€â±jƒOÒ¿ó#ô¥i|ô¾ïÄxdß*¬²¾éù‡õe^w¼Gq Ôú춻î9#PèŸ2zØÇ8ÅÜfÝålÛÏËéâš,¦F«Žyk—žMÝr*F#q¥òd[&šLm½e¨]FçÛFO +£,ÔU[É.&‚d:¿–ënÁ[åx•Çä½²‰ò'[øèTù ØöÁóeß­9ÐqX—1›ïZõÕüœ¢ƒŠ©¶ ûábX\M¯ï–zz¡ŠH³¸­®¦³~Ä{n‚ÌžSBKóÓ-ßcÎ(·¡ùÎïï?†»%î“ NQZôÅl0ŠZ͸Ÿ§ë›0€¥œ5Rëm·ä3{(yx¿î‰ÞA!ý˜{ªm÷œ­»å:$ Ü¥T_ É©ØšúÃpÈàŠ°.B‘,æçñ‡?¼rþ§¨V8¶­íب:qˆ?¾ê«å ÕP9ÊÔÐé¢__Ž(r(ðª¨i~èéŒ-¿eñÏeßRZ•úõt¶î— ìóûžý€<Ç4€ŠÂ£r™“S&Ú–:&–ŽOÊ‚¤#oàå“úé²ëçR ã •#{Ùcšû7÷õöf˜,ÿ áPžMWº?Ðv=xˆ®nºe8BñÓ")Ý}7Q¿Á1‚¶1zN<âÏ¥‰iÕ/ï{ÉW¸—/¾û©”¥â2¼9Çùð‘Û|›×°#hBb¡t=Av§Î…ÙÝbú;)†JÕrìÅlŠÎŠ£SDSÇ¡¼—@’Aƒsp¿òˆgÚÿÛ3;3ÌÖVzñëÙßØ~dë°‘?^}¼æg´¹ŠXæ}œ.Æ¿ëã2Ö»xüv"Ç£ ­±$<Î?mÿú׳“œŸ¢»¶Î°__À;¬î™òÏ‹ƒO;¾¾8Á«^ÔúSëãM'këG}Ź•¾ÀhâD“D§ĬÇ‹añ‘G"ŽMÐÇaùé¤*Z£* °ÇxÙ=tŒ"Ü‚¸öbÚ]/†UÜ%¸Nöw Hs¶Ù=õéîá÷ý4ãnû\ âb¸åœæ/’W/ä<À ¦xDì[½o?˜zßÝó›A×÷äYL*;»EÜù¬‡‹aF…”t]’×ý}ÏOáŒ:îªoUì;ü.Ø–yËÞ-§‹˜ƒ)5TqOìÌ4Þ¾ú/ïvémƒí²­ŒôÜròxT—1£¼{N£áûí-¾ƒ™ÀdéAöz¸øK\.”ö}f<¬ä6 7?›eÜ›îö6êíï?  Xts©4ðrP›×#ÿG¢¾¿=Åë9 +Äx÷E¢£D‹#­x8·ÈY´êæçeÙÝ•AÔ{†Xþ!îš$+(¼ýE¤Q÷j±^—w(‚¤ÌCLÂ%‡zlƱh§ÊŸ®Vwó[R“y¼JÙå‡'z&î?†fª4µú¬nþ@åñDêúiƒêå¦æœ,[¼Fˆ…Ÿ¹x‡o9ýðw°ÅßÆl™Á©í€Í(IcdªGÌàmòó›ÁÖ°Õ·­ÿìç7£&k~3øºú€Í`7?¾Åù2íç7ƒ/ÀØ y¹ñh•–_-è}íz¦B&fà ËÈÖ(MÉ¡B}„g멼OÆ]hQÆ—?7Ý}ìGðy˜¾-E{‡ËŠß² ƒŽ÷›æ¬'øKÖÇ÷$ø>Óµ$(Ïûë%.¿å)>]ÁˆîÂÞœñ"òÛ7éHp;v9|æâ’.ùõ×ÿŸq¿ {1 ·œø€.ÞÝ$gÚ×àBœm¾É8£ùÅßbž^÷‹ËÐf^_Ü"&…Åæ[´¾´>h.ó:†æû~5Ìî´×ÂørGÖnÊï÷ñ~â+ŒÛ»¥Œ‰&M_|ÀôÉëé⎯¡é[$}é…EŸÅÏ ÆñÛŠ=­dp¾¬5œàöäfý}•tp­e\9ÖM[V/I†Ù½¾6«ñŸÃˆú™¼=6•&o«ÊÕ}Ë÷``‰Ê'/ÛðmÇ)>äsã·]ñ[µdëÛ´ÿÕTI·º Þ˜áçSÚZÿœýçèO ÿ…endstream +endobj +1073 0 obj<>/XObject<<>>>>/Annots 103 0 R>>endobj +1074 0 obj<>stream +xÍ\MsǽëWì!ç@û‰Å)¥+V•%+!¥*•‚",Ë eÿ{¿×3Óó@‚ч)JV•Ä‡‡™íîéééîúÊbŒ?e1©Šº+æ«ãÑŸø_ÿü;?)ºfŠ¿WE[ª.ŠãW˜bÔ'pU”åto b°];ªe¨b°}?ꕼ*ªªqùL$ƒu‹!Z×£IÑ"YwünU:]Ň 'ÇÔ7“ŠÁVãÑTYÁ`›šòúÄŠÁNŠ”YÁ`§5˜YÁеî÷DV vZŽJÛš% He'Æ ²ñв¡ÀN*vu2Ô‹óR<ÔY{h;í°Úñ¡øCWV-¾“IÅ|(×(³aÚ¾6'´õo pZ8î`¢L†ÝÔÜaÂåo ˜<Òœ<“a`Û™«ô”l Ø3äÀéi>ÖÂH4{;Á?p @ŠÊ5ɤb° EXÁ`;Î/¬`°}»?³`°X½±‚¹ŸL“Ÿ"+ Zy®b°0°j¤xUÔ˜ö™ƒE¼˜(+ìtÊeÍc¯Š¦®ög¶…­Çæ„m‰½Ú°%ÈpU@sØØ90SÝÐLN*æLiˆÌ +æôtîÌ +†™°[T$Å\€ro¬b°™ØgV vÊP™Ÿ«FÄ>‡}¬b°po•Y1LŒ}… écÃö('°{Úçhb .mäzn½È &Æšû@š8a°­m³Ì +æ0¼ÉXÁ`'zb+fBtªÎ* ùUä ê˜Aªš0U3ÄCË’â;©˜,#±²ƒmÍcòXÁTgLu2+,B!Ôɬ`¨ƒ0osV1Ma[ ³‚Á¨:³bx f†¡|¬b°µ… +gÍŒÍtl~ÚÐŒ¡N]ÂM3©,b@¥¬`°pâ½±‚¡¶V#cƒE¤ k¼ã0CnŒ4@™5ö}‹ñm¤,B&âØÉBö8®3jeRqФWš$ vÒRŸX14«M„UÌEÍRP(Å\6¦Nyæ`¬%½#§ˆ¶)pUô —Ô9;Š;&EæÆ< Fý D%H+ÔœÕÉ0³ÙáÊÐÒàÀ6C ÄXÞIÅ`¡$¦Í¬`°¶É3ËÅ®!%C˜DÀg +DŒl`ðErá?5”Ìœ@*™ŸÀŠ)Íxo¨b,&âr/+[MöDR a°Ö±‚Áš³g‘ÍôµÅF¬™ÍkÀLÏX\#dq=a=˜È9Ó 4ªG« ˆ)+*âœ@ØQ¦uR1X¬u£¬`Úi–Œ JŸ<³`Ú¯Þ«,J,ªUL]¹M2ì‡i'¦éc€†˜dW±YqÍQk'ƒÅ†Ä#3+˜Ê˜!œU ¶™pÙ2+˜ªf måSUFl+[¦ì¹x>³b°ØáX¼Ì2w«Ç¡~³|9>U bQOyí‹äš aç`Âa¤’ya&ƒ…Ú黜V1 \ÂÅe¬`²æKþXÅ0’Ãy¬b°a§úXó– +‚ÛŽ¢ñ Læ-‰CÑW 'ÕL4óÀ0)ö§U„6© çHDðÿ™LF˜¾>•AÖk¥û#ÿår! ŽžŽY³3Qr¦(N™)ÚPqسŸM+æü=R1!ÊE´GœËšgèS$ÎÖ°”û™3Z¦–p%J&|Í–!&lä³ aK]ìçÏ>adJœ*8B%ÒódwîñɃ‡ÏXÇÅÉ8¤ÐmÑMšâäÔÞTàãùw'³7‹b8+ž ëÝb½Ûþõ䌂ۗu‡UöÝs|çíf¶[®ßò{\ó®Æ‹PÅ‹c~„„´jã'¯—ëÓá½ÍˆöȤãK~s½Ø½6ï‰÷ËÝ9'Šm5ÏVofA*¸}” +±¯'Iæ|¸ØÍ®·[Ì0?͇õGLàMQ˜ÑWü¯œR˜#&Xmùålµ0eñq×Ge7‹ípqµ[kR´Z2æÌÌ÷™–ÉâWÛÅ©Í€`íÒ†K¦cßuqâ¸:p›&ͨ˃<ÆgˆË“Öx<šÔU˜ålXÍU-–897C ¯XÂCƒ¼\ì?ÿÉ\ +ªn%(Üjðæ2YíÉl¦@«¼ë¿ÆŠW¥©ÅfåûñÅ?Ÿ˜bÜðý$*|¶¼V@,GÅîÀÞŸ7EU™:=oßc.wÜ|a¡Dnw¡Ï{è]ªjS]"l"×âéK³}•êÇaxwuÉo2Éú¾s‹ÞIüý¨ñúy”-!ß,¢ú¸ÓoE‰¨ZRbÿ†÷46rÁºOqÿÍÇDŒ7{»ýìj=g0ÜrÈ3[[èC¤óããܧÎñb7p(¦oªâtqy1ün+ŽœÈ#ËvÇ£ÐdëGGÃC ‹õiú:ê…¾ù *WIAT|­ïz?ܹ¦} Ö×¢j(ÕQDJÒÑòI+^ÜÒ·‹ùÕf¹ J#©¤ca¸tó"ëC"F£CZ¤yyø.ß^mÌ”læŽÓVse‘µe»Ÿ ["´³]¬íb±ºXlò#wj“\Ë”€Ä/öËNU̇@ ~øóöæ¡ó ‡äËÕ]öwï„žÙAŒ$%ç8³«Ý9ò¬åYTPÝƱh¾ùuaA‘Ú¶1eºîŸ«ÎŒQ•è7‰5^ÌÞׇ,M:’¯—åb¨Õ|Û­«7Adܳ˜LÓèÁR°™ãÏ™üV¿>V³˜¡ºmc}ØŒÉ\(sÔ\H–÷|¼óP|‹ÍîØ5ü|©¡šDit·@áùBX Ål‘|+§Œ,b]ªÞ€—#äZù’–-¥¶Ø½mJ¦_=zAÅ±ë² §Ð„4ÜÝút¹Ým–o®v!÷F7§9ð©EͲçØì›ÙÅ…Å^„ÃÊgZÍÖ³·at{sÁs3BðUVª‡DÝü±²òãá3¯ž*²²ùÝgy5)Z:’‘ðu¤%€)ÄýZÐðwªô||º¿R详SäÑÍ|ËÑûEÅN“ס&*“eU’­ÑxD¥’íäÀùìÀ+¼Iª«CÀÛËu¶«7^ #ò”+=úþ­­4’M‰ÖXÞ’? ÛÔM@oɽª°S&—ïÅ‹å|3l‡3Û`M?j»´˜×–ß+ųXT¡QšÍtüûv·Xq£â‰µ§»Í"èrúäá„æ ¯¤}· ‹™bÝé.¨­ðÒ½ŠŽ·:õó5ÂÏ•$ÅîÕ÷°”ÿˆ Ç®¤ˆG¿v ;ÑßùªW×t ñV4"õùùåóÛ9¡õ׫ÅfµÜòt$…#!g·—¡¥Æ–¸gý1´Ò+ûn5u×fYL4ûÑ8Å£ù<æƸ§›Ók‡Ýf¸0ÇF‹ØóÒ“Ù'Ø{wæ°µÕ%ê¬H±ÕYÿµ\¼g-ï°x½wèh™ŸÏÖos ˜3âdqÞ¡«SSðÒ-nš¡)›ë»Ã•²nZ¦Ä=@/ù$ñ·g”ËÙÅðÖž«×ÍgdæÁ^Øû%ý¡Šø@Ùú+Œiž‡›Ãž{{÷E ‘[uˆÑ ï-Rð¼‘ÌktË^¼=Ÿ…z;·oïÐ…G”h(^2Ñ<å6w:h„áýz±Ùž/­µƒFªgz‡yŸ&µp£áóÕ +Ų¶O—›Å|7lB†‰쩸¿¾IЇùRUÃóÕ¡ìæ…l éHf··L’暶³——f¾Ç¢¼T-ÙÓkÇ+㘠ÝT¤nîÑæ7,“a?µ|1œ.Ï~OÁ/D“_‡·ÒŸð9ä§ã{Ê­ëÐÚàÛyu8¾³ÚÌ,cbøÄ;ÜΗË_8áz@ª¨‹C'šƒhøm¬çˆ·vùÕÃáx9ß,f»M¢T§ô}5Û¾³Žwïžµ_Î6xƒëãÆòÝØ+šwsóûkØâ KÍv±ˆ¦9âæle5»¼Lž CwêîÝpùÛ>¨{>K2;þâwuê¼Ú »˜ÒÜ3IëP_]^›Pyà +ƒ¿ÇôzkŠ·£¡@Ëî ÝTtKF¿ÙÂãOû5 çúz/àZÑ Ù §¡¾ Àßh£'¨q¤óW;7«cv|ï,ݽͱ>éó(9nxÈyò„á"yž&Êÿ¹¤Oþ忶KðÊ;¡ŸôÈ;ÿrú×ÅãÅÎuÀí…Ô*žn–èh‡ÄMgOáSsMûþßÿ†Z%QÁ÷•íÍ4 ®h¤RêÎuÛŸ°‰¯uq>º—I4Ø{z#•¾˜mÞ†3=BW{}åÝrí>è–ÛÚ'‘DáwMïÉ—ëB•h™iÚóèô4­Mêx¾Œ5 .løÛøkk•Oº_—f£½ìÐa«¥°^L8P®=zõ:ÆÕ~üÙþjß@Ѹ™(ËŸ®£|¸Yʽ_Œè ¯W8Kl;ð¾}ªÿo<û‹ÐÔ´Ü/é"Ÿ¸Œñ|e¾hB3ûñNÄÉ0\lv2¢(îÒ‰ùÅeÿ¿h¬-qt-<½>Ÿ™œ¬`«Tw,M%\ô€R$]ÿFë vÁïcÝ׶»]«¤Rx‘.=ÝzlÄh§†z^Åö1®ð%#¼šÍßáEDX]¤*å=&(Q±ëEâ'9ává¯LñÛ®_ýˆŒ*íß9¨Z¹x1ä½|ɵŠ'K¼7âJá6Ÿ¿–¿ÝA¾ ôyø ÷UíòKÉÿûM\½;~ôâñ£âÕfø]ˆâé0¿ZAtתÆ÷Ç5èd<åM½å’Z}òàþ¥æBendstream +endobj +1075 0 obj<>/XObject<<>>>>/Annots 147 0 R>>endobj +1076 0 obj<>stream +xÕ[ÛrÇ}×WlùÉ© +à½/ö!•¢¥È‘Ë´‘*å—äÚ–ÆEŠÿ>çtïô4 *.Y¼ÄN•Ãƒ³3Ó=ÝÓ—Ùõ¯Ï²$Åÿ²¤É“¢N«gé4Å/ö¯7ßñ—¤.[ü{•í4Á29{æà*™¥ÓÒq®’6ŸŽsp•dys0Ðc°U>ÍÝТ¦8E5A¬ÅqKf\R$ç &Í*.i¤Ç`˵Œ¬Ã`›|ÚzÖa°³’âƱ¯’<ŒñÓ²¬’*6I-€ò:(ÛW;Û ¥³ˆM¸AU[C ¤MDnVˆ-!Y›TÈ9ˆI³†³é1Øš²FVlRխؤâÿ)="„8”*rbR¨ydô˜Õ0§c[–Èƪ@UmZ%uÃEp^Å°¦qp ¹dËIôl1ãÖFÖa°uf3‰2ƒmé¾q¬Š[êôÛJ€ì_„«¤)§•ã„*3ªiãTU2Gê‚E*>RÉ +â‚#§+ç &…Áà#Fz ±{i¬.)n_? KFÈiKœ¾ÊH9-ÏfduÚ´á Æ9"à´°f€˜Í¸çFÊÀçƒ."ò(0y—¥Œ‘äi+kžò1*à8 ‡ƒŸUãƒÂñX–Øk†Q9– +"W4¢„œŸR€ÈÂó£{ÃØIÁVtÇ: ¶®©‡Mì1#SIùŒõl‘Œ•=È2ñW )’R€èá +êpÂ_EXç Ä ˆjâD€Ð£È`³Hz VbudÅÌE˳HÀ#«€¢:q2ì]ä„8ŒÚ‘sâ4pÈHz ÖôKz ü`¬Ãš,j7³ª2«ÄƒêŠ" U"”Å8ã°³bɼ¥žFzLqé׎u˜âÖˆ‘UšLÝ–I¼ n¡D`¬iœœ …¶æç Ì +ji¤Ç`‘d¡XdÛT%²ƒÉÎGÖaì<’‹Ÿ™î^” 8ò%ÔU î!Â3·"rª.PTfá@ê0X9õŽu˜º048Öa°ðdzCû`ëz ¶bžw¬ÃÐ5ejˆ¬±€‡ û N€lã[”iñMAäGY³©fÈ9U° 6ÅHÁ–¬"# çL“\Š!øQßTÀiä´5–Ž¤è‘7cÝEOU òD(¿v66@LŠÔ†e(Ò ÈJÝ%³ ×FÈ%W4Òc°ˆ<˜6²3&0ÚDV·  ºÛ“ -ˆÓÂ¥±YFz 彪Ó"Ñ`Ð#ˆ.b ä„¡Ž' Xü-Ö1å`ìÇ€î¸ÃïÉÙþövØìø;v0¯y]Æßû5BƒÒb‚ñÑùêb. 2—Õø+j¥éøë7/ËumIJ¬!+TÌvÚ_oæ»~9Ë0ßn—(ÒÙ8ÙÕfXñGœ7„ÚÖÅ­P›Ûº©®‹g› ÌSš|˶Ðô¡ÿ)+Ý3GŽ°Dk°ÑÃŽ¼è.ö××£AxV½¼¥èÓu°ÔëÍ‹¯ÄÎ(vqm¨;ñЪ|zþ²9²;«YØÂìþj½Û —ûE0=o:GS}zÖÇgT‰Jg˜t6 yËÃÔm¨<ºƒ´ ºõBµÞ>•Êe›dyq`Žw7s9èøy–G¡Eq+„¤¢ +géR§L¡àg…gÅxoæóG¸u›Ž3>¾ýtÅ 4²œÌÌxÖí,ð!é"Šª2û[ +ŽeÁC̺˜Ëï¬ Úf|t¾¾”gž-(Éâz1­òÑÒɶۼï6º—Å´QöQ¶¤l)ŽÄ}§þ÷Ã…È^MÑÈúl‘.þ:Êžç!â¯?²÷°ßÝîÅcxÉùÿrpG=ÑÌü!5·»Í|}ÝQ}óUROTiØÂñ£XîÎEªTÍyRßÌ?ˆåÒiV‡cøzØîΛþVÓx3mg!›h¨÷E'R£ ï¿sÅGùñj\¾Ÿ¯ŠWUŽék_¸@³§Ž2¶I£"‡nø¦›/?2Ï¥ÏõlÅfc`±¹žô*£Ä¾rD“Á,j•³n±ßô»ßøkÇàDɲ{ß-%Øá§U„OªÌ'¯rÕÑ*T h–$þ$…Šªq\¨œ gi}1¬n—ÝN¼2‹EÊe·•P1VãèbR®¸M,ú-Åo½ññÂÇŠãç‚c=—$LóÁIäÌë×ÿF•Ð +…ˆx9¬æÚÜ Ççiˆ¡ŸÑïH·“¡icÔ'|î¡®Ê#ŸÎ²4–=ßý:ô{h|ÚPÕ͵¯Ãu€•2?ž‹ÕÑD›Õ_øMÂKœ±pøÐïnø¬o¥’3k Û39rئ"t0½!SÝ‘IÖ¤¾40ùðž -ƒ*wÕtïúõåðA,|:`»ëKIƾÓÔÒg]ßüà:rJšËãJïÝDhÜãÖ©ô" .%Òs’ÝÍø#ªYkâ/P$kCƒH ßݺ æŒ÷ÑI‹AN^$V!wk5, ú¤:{”âC7Ç¥³>èÓÙÛuÕk¥pV„*ÿ‡ázXË~¡ Š¶æC×éÍ ]„"Ú; .vìâd§¿kDf±7|?é…2>~-C/öTŠLÑ’0°LŽ_[ýЯúx³ÈÝÿé$½cåZ«‘Î,³¸X¢_µÚÁ½cüÓýTK’p-š|_dW9¡Ð +­º½Ôy9’ñú4Þ\X·ŽÀ®$¼w”ªT 繘6CšŠmÁPxWÏ«ùFšjô]xŸ­#ãÝÿ»Í×ð›a¹ÔL«XKxÝH²qoØñ[<~¯7݆ñbÛkÍÆr¨ m-®¤/Cæq^÷ ÔL¡úL𕸯t¾/~¹F ½®vE²ç_°Ò½E?êÙ‚CŽ;`ÞØë6j£óÅ›´è¦þÒ,ºî&ãÃG®…ÃÅͽk'lÆ؈‹£]6Ââø ®(ìžéTÊ­Pý%Éùf¿ÕbŸo[q²XÀÈúÅ +^öäÿóE«¿ÈôGúù²É‘ßØ…Æ7±hsÎ]p[ý%o•‰+~4å²÷é|½×Aþ¥[ò\¶o Íø°*TøŠGÄß»ÁŽòn÷¡ŠáQ_~(ïôýê§õ›endstream +endobj +1077 0 obj<>/XObject<<>>>>/Annots 192 0 R>>endobj +1078 0 obj<>stream +xÍ[]wÜÆ }÷¯àS›>H&—ß}é±%;uë¯JÊñcÏjEYLvEe?lçß÷^ ÀJ[–"¥í9Žï^ÎÀ 8þõI–¤ø–Ô“$¯’ÙâIºŸâýãèGþ’TE‹?Éd¢`ž?qp‘äù~;>HÎÁEÒû¹ã\$YÖî—Žôl^m½Òc°E³=Öa°eµßø™Û¶ûÏ: MómÖc°m¶õÞ² y‰×AÙj¿ á ^šNö+Gz 6ŸP$™‡C=[ä|©±ƒ-ÛýÚ³ƒmk®ŽŽ VÅúU¸®)½¾ÕA œd\:%= +aZc[§û™cÃKÓæY$UC+ àKÄÀT]I)RAë0Ø*Ûbå¥e[Á°‹6ið_ê –­Ä¯Æ9jI"E$Ë"›Ó‚6±Ç`Ë ì`l·É±"X˜ŒœYƒ©¦.JzL‘ò­¡ƒ…µ!’uÎÒ‚ÆŠs—M‡¡Y 7 HtulMu¬Ã˜8+¶Æz ¶L·Æ†×"dé¢ãk¹×F6¼ÆX‡©OM[(ë1X8xæY‡ÁV½ÂÆ: ¶‘50Öa$D¸L¥lXZ-Ý?+¹Ä¥ QÈa² ×±†©PΉ•õ8(‘…Bƒ…Ïcéul+«k¬ÃP†ô2{ÌüÏd3sß(3Ž L +¨¬ƒã¾$'ûF£@t™„œƒH "ªr"p¸Ù8éJÚVzLË_c†i¹­ˆÃ`3É +:³Ç´$c‹u€ë0Ø–¨c£a`Á¢¦åu¬Ç`ƒSËÜZÂ…d¯âþ Ü„)&>)+ÃE›J@6L‡ƒ¾ ÑÁ U3ˆISF¹‘“m`Ï[T°‚c+6r¬Ã° f†ô*”Ç\ÚÓ±ƒ­¸y+™©LW+¡sTÖÁEÒ2Íç U-9©Ìƒ­rÂX‡Á"sÈÆ:LCTpÇ: ePcx=ÛÐýmlPµÌ`;ì)Õ@‰„ª)gUÎAªZQ\%=›§×X‡Ábßñc%‰9ó.y0q4ƒcfœTaq*=Ì)“pœƒ¶¦+(é1X¤F?Ôc°M¶%Ç´<ë›9¨OãW2t +¢ŠA)à Ê¡*ˆ\MyŒ3ˆ5™lqRM‰%è1ØŒ Ô¦õ˜Fà¦ìX‡ÁÖ¬º .”±v‰Ñ"€j†h9¤襜ƒP¥¤*Ê9ˆÂX1%=+–cÆš +!¬Žõ,2 ‰[ZŽÂÁ€ÅlF@M”Eɇ5Š0/s$1X$ëÖ³C<ëYÁJÑä£HƒÅ&ˆCžH/¬ÃÐF²‘±ƒE m)Ë ‡2¥H @ !D¡WKÈW0c"@Y–äÈ93`®é1Mȳƒ •@ÊåìqRŠ*€Ó:ˆW2îs“2§é1XÙŽë0Xø1VX_ê1Xä}¬š±ÓÇr˜ÊXÁbý½ÈAUœ˜%sc͈ ⥨±0PIÁâ½Æ:Lu˜l¬D0=B’Ìâ[C2W' h#Ï’•¡d)âåÈPJ“+[°20VTÔá´(i.ŽtNÆð7ÎA¨"‡/#= ÿÌÝÐðÊ*œkºàD€¼Ò ^É#qbR¸FáÈ0)"ˆK†-“ +à¤b z˜UIÁ"öSÏ: VN½n¬Ãð"d'?6ˆ„z]â·Dþa{£‘31\9BIÉQ¤qdH´6ÔcŒÅŽŽÕµ±“+9Ö0ƒ‚nocƒÀ“pD± +  ™”'¨*y¾‡M`z¤ÄšÑ sz|Ÿô¬ÆŠ4ÌÔ\QqÐÄM¨FäÄ/Œs“r12LŠ¤,kÂãÓãšÄ@œ¢KGz § +?Ôc°8ŒÖnlxiJz¼.‡#ˆ&9-Íldˆ”)›ºˆ'@Ä@´i0PIÁJÞ1VÒEoåbJq€LËm#rRJç e¥ƒé1Ø’îX‡Áb&˜O$àK=¦[R2c=f”Ñá 6Âé[ŸU%›g©'Š¥®n‡º:Bp̧6ÎA‹ü “褃•ž­±AIÁÈCò~TÓÁ(ŽrAœq\†°ƒó)é1^)âX‡)¬ uÖ“ÍÈÆŠ¸8Âqãñäï*ìȈpÊÂÛDR¥Œr'bŽ3)!#ײy£œˆˆºEb€ Hþ.¾ª/C;-3ÊAp¨s +Ǥ¬yuJÁ®¸2†0Ý„Õ›R‚« ØQ9yl"©TN2ü»è¬ƒ$|ä1RÏOž<}ÙbHNÎe{JÑl¯‹ääL¾‡àçÙ'ÓÓy— çÉÁp¹î.׫¿üŒQˆˆŒ£ö¸«aØÞ„Ã~øçð™üd‚O,€Éz ÄY£Íòñ'ÌsÞÜ,;2h€ÊO§SþŠ}>9>ï2£0L:à8å¤?ñ˜=>ò~Ù/¦Ëßøk«ÆLJŴ¿”_‘Üu4U[óy·$õô%2̨[ây -y’€BÿúËþò#Cq›·ñ}ë QÝ°¬ºÌ{Ø‹b+ÕGM’§Í(Ö®Ñ&*¬QWã£ûñ¿:§Ð²²XبúÁ°X Ñvm—óýr€ƒ,dI°µ™RÓË3N“!›çŨè‹årXÊ£„µãKIíí×ÔU0¾Ö8l…UQh¬† ÀȤy­s>ˆm8GûÐ_ž Ÿ£Ã[bk¿<}óBfÀ¹)ãc[¦Au-jóç˜d§ë>Ä,Gõ„Ÿ¾™•_]®ÖËÍŒÜêïŒíŽÈ·Ýúó°ü…?c£`ö ¿¿>âqÑ»1¢ÿx…š4hƒºÃûî=:îÖ똳±b£ + +mÄÑÞTõ£aºŸDÓ3Õhÿi5†:¡êù[áŽ"ù~ÉlT{ÒT¶ˆ‡ïÞ<{õö¿ïÞž½{½¿þ"ÑËÚÄâ/,ß~£{ÉïyçÛÚc-T], k˜»¡¬´…¿Èhè»lÃFEØŒ±ôÝ.ÑH>v%Ežó›ÌªÙÛÖÏfÁ4¸À þz‹*áùtöKð¼±É¢§›]Пù½*=U{W¨)Xæ¨wI!ã+TBy…N¯…Ð C|ÀöµZëÖ‡ÍMk±ä›7CÍ‹©>œj`;vœéQõwÜgzRæÀ×Θ6n(u§š†Òí±×çÝúÃE'µ~žÄ³@ÒËnœ!GéNµkýވƅÓî²ëκ3ÑiD3úD¾û QYÜù²e?‹LT$Z¯X’DCS÷©Ópä¢ÅJ;¹á +.Ãc+Óòö›¡"–a|â– äÀ»+ùÕ‘ÑmcØíø\B©7 +ïUö@\ÄÒ¿YâÜ°ÐnÛ>?<ðäZþ U|´ ÝïRw4Ͳ»Â9nv6&ÑI<½îŠ—ÕâôjºZ}¾¹÷òx'fA¥ÍÆÝñ«ë{/²‘ÂÞF¼Oì+£ãõ°Œû2¾nåq¿–5ýk8¡ û+³„uìÓ7ÓÙE)±ƒFU­õÒ³Ù Û¦øD+ý%A ˦ø²§þµ«î gDtôõúðÙ{º/ŽÖ½‡ý²›AþУApÆ$ÿ=&kå°àËt`¼Ã¼ß,¯†•(›?Þ‰ì{Tà³A=H¨»ß+v¤Î¶û?­dFɯU2Ç›««a¹î$‚ÐMÆ…ÃxˆŒ®€ƒzÑq·üÔ…¶jã?k3Š‹Öf´÷^–¥¶dz‹n!©“—´w²« tÔÍ%VV½œ/qÀ"á–½¿£—aÇÆq3V>Ü<¤\ø£Å<»ÿâ¶B|Å­0jsŸÿŽ–à-USñ(>fœNê:vï&Ÿûõ…–©5+8W¸´ß;¶•¶òo xíÞ]u—Q4¸µ‚PúIßZ3!Z*Elƒ~ïËïù|”=+ÌGoµ,ØÏ5{ßS†{ âã3‘/rGWûþµž?wÅÙ8ä]…v”ëµ&‹éåôc·&Ó<î°ÍCú@äj2?îf›e¿§|ѯbù±K±¿‚ø¨Æžÿ'ž¸[éÎ L2Ó'ÆšøV¤¯®ºY?‡%AkBû¥ÓõzÙŸnÖáè†Æš»Ú«^™ ×!|£–¸eç“Á‹/ÓÅÕ<”¸ª?X$¯_½”„†£¥žG^`ËŽß +|‹g—’7Êp¯5gÆ%œ‡/XÚñ;n…ù8ä—žø¥÷Iâ~s€€¡­´÷]qŒk¼T"ÖƯWËáÓX‚ “¨­þÓ%š÷±Ë‹ïuúanG1+«Âå@]¢Ý¾Pæ–S¶×»xühíWîê¨O}'ß`hyÍpN-¶¾ÃnÙ÷/ªkéßR;<Üã}6×›|îW «¬ÕÆ*Ô™²@®I£ iņ.$R–6Ào/×÷ä¨a†h^Åñ+ªh‚{*ªá²[ óMüˆãKé?N¤;Î4j‚°»ÍRMgËaöT“zè\mNÑ^ ¿ã +AÙmù¦¦mè¾!úÅÙÝuØщT·¾¥ei]©›lÅŸßã×·­I¤í€?|`4@vmôŸÐpµWD~ïÚíë·Ç¢;.)kO}d*þŒ‚4}‹o.Ï<€ J1pÜ ÛZlrÑãöoe'|'ŽŸd’iè¦uÞýûÇ£w?I×oµÄxU㔸ÑTÆ…)º¤qø¨Ið)B;²Q¶‡üo–æAoÞuŠ¿–3ë¢Y¯B÷ üësÝGøè]}ÅÅwLÄéqk2fø‡TøÚܪ??Z1ÿfúËwh¿ãžÓî/%[Új òšHq™9,µüãx=‡½B ·Z´Ý˜LO‡t=qÛŠydçéÙ +&žŠžz¯ŠLÏΰ+¯ÆÓ n™ÇËn¥ÌŽy‘&‚~×–r3_÷ñ¼‚h ×Óz\Ý[žOg*t2;&ÌŸFEž¾Ä-b¹rÇkpõRþîª?{óüY‚òègt‹“Ãa¶áÑD{09KZs¶¼ÚÒ¢]^œ<ùÏ“ÿ–]øñendstream +endobj +1079 0 obj<>/XObject<<>>>>/Annots 238 0 R>>endobj +1080 0 obj<>stream +xÕ[MsǽóWìMRUîì7N)‰ŠlU™%Ed‹.+`AÁ°È üú¼×óÕ !Y:H€’*›oz¶¿¦g¦wüŸ3“¤ø¿Iê,É«d²+ˆ}f¡¼cÎÊ!êLF±¯ì³ïKÜÈY¹’ðïßç8“rš´‚y-Ž©s_  ‚È +S"J‘´‚˜œnÖBñŽ“H³rÆ(ψrŽ*8‘ËÇõ ßÊU"ò rä¬\SZÏx- ï‹­ RäX¾r±Ë•/ (&åËs¥¼[~(CF(AªÝ ä39Ë8[â ƒ- ¬µ¢(Åk «i.@†ajh~ ­ 4fB•,µ¹Ñ5BèZò…‘cáÉ-ß5ßkåwkÞ÷gH”Sô†¼ƒj ÔhVa°(áˆc”U…6ë‘5[púEYÁÖÑnj¥1ò@*c”Õ˜,×ÍFÌ’d :kL¶aF+6b°¨žÚƒ­Íž½/“Zi_ɪ•§v µ‘ë8ÉÀ)è9‰³“s ¤Æ!°‘µõ²6‘UÁÁsL™Àj 6ceS¬Â ¬a.FY…Áâ=ÈþÈ* ) Õ,æ BY…Á"Íõ{5‹àDY…ÁÖÕþÈ +#°†{•(+ÍPmeÿÃíˆØ<ÎôÈ)ˆð.‘Ôl>ÞÕlÅâ¬d‹mO£Y…<.÷QVc°WsÅ* ¶¡«0CË¥F± +ÃÅp¢–Õ,RHk¥1XlÝ´Eƒ•=U|¯ ¶:ÜȼË„yg! +1wC‘SPB?9„ÎC†Že ’ƒÅö +ÊQÁb›µÇ* JYŠ²ƒÅÚ‡‘5+U± +38,NŠU˜.÷,’µ,«ìN›M„F€¸0B¸‰;ºÈ)S±õÓ‚  ¶„Ü9¡(À÷dÐ1h½Ç)ˆA1çá¿ ¨1_)ÊEVa°XÎáƒÈ* aa€ºµêbò„_ÂNTWA ›r}¤Æ`‘ÙZÕ,ŽmP)² +ƒ…?+Í*L…k*d­Âx˶o@…¤J\“"©1XY'«0^ŠÜ‡Âa`ûRÔ²8ÙHP¹™ÉgPÚ¡Q 5¦JâüÈ*L•$#kÓ3uç ¹yi„Ä’Œ"H4=ÔH^[=gR.5‘ÔÃæ "®X…Áb“ÜhVaÚ£C”åî×Tö؃Ìj¤ ;.ÙŠ¶<=y9®Æ!’ã30ŠjL}¸b)Va°ðU®Y…™ ÙžÂÖ½…=‹á(‡· + N–Ëíy«äOŒr +"s™`‘Sê ,•"5[¦tJVÜ‰Ý Žìº¾RA+ï ¤Æ`¥ GQIy“ÚƒœG@Öqn˜@jŒaåü`Ç¡(ë)çœVÛ¿ID„,`A_‘ŸÊÚ·ÑÝòw`p‘R›"åo2¯CÎÕ‘Ñpb½Ã’ŠC/ÿ¦LDaÅŒÈ`®ºÖ þíÞãd¤yæÅÍÙÅ+ÎÊäf†˜áàS&U]$7SikáñäéMûaÑ%ý,¹ìWÛnµÝ<»ùRHTC©s'vžQìéu»üÐòXòq‰~&ën˜õò]M:rU>B‰wÜ|³Ùu2(ÎëÚ>óèX#13¬‘MC¡5­¹ì—ëv˜oú•hS;;©³~·Óÿܪ³^ô“O¢47'¦´7À+6TŒÊßwÃý¼{``d',™å…Žüo¯³(Tþ­»ï™LöÂev¢Ã€C{šŸ@Ƽ΄Úë‹)õdžÁOå'³ö“LbtZ«Š-qNðÞ¦Ö1§ø2Ûy¿r>hªÊýþœOø»Â=˜vë¡›´ÛNÞ‡Õ#­\øn¡E½§çXXcš]c†t[>Ï°_)²`Í°Sæô{ëöMF{CXVUìÞu­8“P×m 6óÿIô°âUÅIVo ›Êš«ö‰ +Zd•›1É˹ öâ)U@48%Çó²l¾º#uÒ•Ø*oU eíúc;Ø +€MM¨jË~êVqÌ›ò$jššD>¥Ê¨ßz י̗«K¶äY>*³ñO”R·ó©/ËMæËìb¾rAÁ +´“›!8Úù…P…æ`éZYüO¹r9cö+×í0ßþy¾DkNo¶pâ„Èqq<¬ÛÓùįò8àšSZW¼8Žé»ê–ýð_©¿8<6~²l×k_—Ñ‘4n©Brœ?½8Å2¼èe>py÷Š&—‹¹?¢ñæ ;ŽÖÞjL*ó]×áëC† 8ÏÝ~ëg±Ãú^jÔ„³ïv·ò)…ó> ?©"²Úº’¹¯ßhS[…“wÝf·°§¶uü’y ÈÇz„æ?½¯zh aU‘¶ïg{íÊî’Ñ´iÂvû±$’pËØÜ._¿ºvH&{3.5Ç=#çÍ‹W¡sÁ¸ZY¯ÚÉ|µí7i»‘áˆã ù; ö’ÊãZâ“ÈYtŽ>¿2ã͵؉o4¥×ÓÕ> 3v±ôãœÂ¿½-htéÅèWWÈÑùô;™´rhÆf'¤Tòš¶!dÆŸ&ýj6¿ÛÙÝ8ZÔãÔ'ð›ë q¯’…C÷m;¬½{¿ãEWoÕMä…Ïqì^òŸÆáu_?hÁ× ûïO­œœ÷“&a=ªr¿öÚüóúùð%èòJQYûm­4m¢âqñÅDõ>Ïñ5IŸ'êôü‘Þ?]õö$‹*T? +ÍûgãÏq»%nì†ÛNù%fEðïŸÑ~S +ÌÜæ2:T¾åì6¶m…âlùúœ—LF»©ø¶55x_Öþ*³§½d>ø)ù§brgÛ^N¨ÉzÀbaWBl'Ó0§ÃâP;¨iÿ°Zô¶ëă@ÝC?„~‡.2‡Òì`ö'4ë/ÎùC9éžy§1Òa+};_Au‰+:¸±¿tH½[˜r7ô»µüœ_lð‰àh[:oî•è‰ö¯L)´6Lèü-Ð\ÝØ"ƒ{°¡ÈÜ\¾½xýV²ßBCw³m'Ÿ$Àz²Í†~)q 9÷j>úM?“±y¡õ{7¼Ñü~«­~Ù-:wÒÆ„õUt´~°¿6Îæ ×1£*¬3íÌ%:'qXG×ífƒä•"ØX&ÛÕ8W¾o +#+êùc‹±xïmbŸ÷vv+B„¥þ³ÆÀ–)ZE¶‰soõCz©Á(L"]¿.[›½¼;öCZEÛL•9‡ï’4sogáÍ´óøÿ…%˜Vàb„Ú¶~®Ð<—OÆÒmEAÍóâÿ/TÉHyK0Õ¾Â\ïó=.>‡…æšßíìw_6’ÃÿÖ]KdÓŠûÕz•¸ìÍ\RÇG^È`ñÈ_ßÜÞ¼áoxÄ—ýäùdÒm$Ùp7.–Žø%wÈ}K,Ùô»Á9ûÑ°©˜ {.óU;ã~.›d¬Èñ¸yùïk÷»“ÖèY§Ä%vaå|½Úýtڸ1‡Žý—³áÜ*t÷®D™ ÍšÏÄrk·Oøe8÷oxÑaÔR4Ýõô>Ú(kp©¯ô `Ì«¸Óƒ3º’Û8ò¥Gm|zkp TÏo°fr/ó‘ûŸò¨¦„Ôó(Þ›ÁÙ^Õ–wݺ¶nÆ=£*|å|±»kPTÑ#Œ{"àÕ£2ñè£áOR(ìÏG…â—nÕ ­l"ÑùlŒ?BÍW3© ¸Æmšëëâã…³E-Û/»;©WÜdÄ„üæi3 ÿm ní4s0™‚lê†U‰?7'Ý0ôƒ5¦¿ó¦ü ¶ŸhŒ|¼x… ©r©Œ·;ü‡žr‰œíéçW/ž'o‡þwôã’—ýd·Ä·œÖYã-ýÂàÔZ§cÞ¹¹ç„ûÇÍÙ?ÏþCÜÚendstream +endobj +1081 0 obj<>/XObject<<>>>>/Annots 247 0 R>>endobj +1082 0 obj<>stream +xÍUMSÛ0½çWì‘",­>¬czhI‰™öj\fb; N§ý÷Ý•G½1Ó¡%™±çi÷IïiWò÷™„Œþœ´Pµ³Ld42=n.y¬öôlA;á"ØÀz–À +›ÄÐ2ȉç¼Ð0/-øŒç ‰K Åriì[DIƒ)¦¨“Óú<í(G)ÒØ‚õ,5Ž±Cã­PBI¯Ú’ #LK ­G³a sÒ:ìÞ°CÀ$Å;J1ÂÃŽ1´]Äsô2p,-äJÈ$ìÌ‚‹¬3æ-‹Ùé…•AqÒP% X§¡ø +MÃÕIQÞmjèïá¬ï†ºžßOÄ2 %³æ‘6WL;¹©·ýnhº΢&°©‹(ËýC¤ê‰*C|.‘ÄQÎbÊêñ@F¹Žä¡çù¤˜åq¨äZ9»}×E.yöŽ˜Þîúª~kS_h‰ø“Ò³Z2ª…3´gÑðªªÇz”öd½h¢ö¤âÖÃ\Yj@ÚÝË]¿ß²7:’:gÜò¶ÜneÔ¥ãW×_ŠkÎÖ†öÁ£/RñjIRecig*ÍÁØŠÚ¸¼k6Íð+ö\¸àîÕ¤üåÄRIVzzq<_øG·]­n¿r†rt ¼U+ÑÅ<ˆœÊú,´ Õ}Ô·]ó3Ø¡››î­·gè`Eëã‰?ÿôa¬A¸Þžæ؃S/åñ®–™ˆHOG.:øëÅÇåV»þ©®8ï«}K‡rhúŽ‹‚tW{¾ê\æ9ýGãï‹ÙçÙo¹¶”endstream +endobj +1083 0 obj<>/XObject<<>>>>>>endobj +1084 0 obj<>stream x…ŽA‚0 …ïûï¨g;æ˜Gˆz3Ѹ?@ÆH$"ÁÿoN^LÓ¤é{ïk_ŠARŒÜ sˆ"MpÙA[XŸËl¤Ç„f ió+”Aí/GBh„årPC8$›¸yײÀmÚ'œ†øîR?UÓsè·¡ýFÙ.Ñ]Æ‚õš ©ê‹ójqÖéùÀ?®õ¤½·òxyÆœƒº«•ã;Òendstream endobj -1026 0 obj<>/XObject<<>>>>/Annots 274 0 R>>endobj -1027 0 obj<>stream -xY[SÛH~çWtÍË2U ¬»ÌË.M†*&a§Ø‡y‘í6(±$¯$‡ðïç;§¥î#Öb\©2ùøtî—n™ÿøj†¾J&jUžÌ¼~C>}üñéÄ÷C/Qñ<ñfªTŸzY¶êžWqàw¥J/ê¥Bz T~ì{¡Š—yŠ’ˆ¹Ð‡´D Xª(ô|Á s$îä,Õ<´H§€ðÅà‹”Øx:lx±Šâ™‰0"µ H-L°TYB®ZN@2é[-$(1Ø õR!*1ØhNîZŃM©Ž5î†)JÆ‚ œ»=gü³œ€äPBJ-)19xÈc›…Tˇ‚­18ÄÀ9ÔsÆË ¥³ò‘%%ëÏ)Žl“»Ž˜ÜM(»–5î¢\u—s·çŒ–Ê(–”lS†+0Ø8¦Vq¬À4~u™e%‹¬#–å`ÂyÆcÆÍj€ fàØ{Ç ‡f)’áH‰)˜¬À`“ê&XÁ¢wGš ¿çRV`„ͪÓlBÍ"7¦!jÏ™Ø,' L¢ Bå% “±d›$cV`°YLîZ³SUi¢‹]›©0õyˆ©yCFÄPŒæ¨c‹¢£:ŽìœÖ„`¦ Ó~u¬q*&g jœb$œØ0"§+0™QÙ+0ÌbJVb°!mY'+1¹œQ@V³Ä`ãdä•Ä`ç´¢œ¬i¨(†3ýÞ -¸†ê9ÓA–¡Î8ÿ–”,Ò“Ž,6>‚q¬À`qæ"ŽÁ1ue%ΩU+0Ø$y%1¥) F¶²&Ma V —¦ž3y±œ€6M–ìÓÔKÒFDG8V`ÈâÖ^s¬À`qò£‰+0‚ÁMÁXVb°‘?ÒlBåÕ>tjÏ™Ø,'  Õ’}¨½dªcM¨›fä®c†fØA"+0…RGXVb -5¡;V`°é|,+p )^|VVb°èZô©c‹w¬À¸üÍ|êDËJ 6àa·,¦•ÆEn>X´ òÈwChå‰CG IÄÍîZRb°1]++0 ¦ÓÃÉÎS‹ ¾»HÒL-Öü•~³:½Z¶]“¯º_ßð\‚¦4ÏCA€'Oïò¶S_wë¼Ó晨æT]ªÅó^]ퟰéѯ—QvÅêúfA£ÐÓ3uŽè#Ò³x.Zµ¬ëï -?sµª·[½êŠºRõFýöåqñ¿^¯õZuµzÈËe®Öõj_êªËÍc?t£ºg­^uÞ´žºU]óJëªÝ7TÞ©|»ííò$Ãnjµoè9SË}§ÚºÔ]Qê–•±3Û¼y‚òoõ’´À£J«nZ8·,óN•‡xµ*k$¤Ñ+(Tp©íCèßÓƒÿ¬d©Õ¦ÞWk•s®ù;#þà/Žš'uªž»nwyqñòòâµ”¯nž.X§ý–‰%øaøFÉøåF&éµËŸ´§î·:oµj5ìí¹vˆ¶«ì¢FC®¾é¦yý—µ=~Þšöú0G•b5µBV׫@ÂQQ„Ý×îÓç¯ê“®t“oÕý~¹-Vê®@*á쟧ŸîïþüÕæ4ðÔÚd÷J ‚P{«ƒ¯e1˜*ªÕvOóRtÏœÓ?m½oVÚy‚JYTW[’º:ߨùTiDŠD6í†+Ô{Ò^<í¶^÷óMy‡´‰Q¸~Öè›3Å馰.>¦bð†É—[M±_×U‡fãîè -ßTÄ6ÉPÙSõ[ýBr[µ&Cåh‡…Fû>\ýþáêpyñ½¦íß›VýÐéš]ª?tŽ‘¥¹@F©ûÌXgDüÎß`ÒcVë_ªûb».ª'Vý¡¨ò¦8Jsø¾æ€v -då®nºSÜ"”ÃÉ…ÇÝú}Õ᥺n4Ö$»Ü–K4oµ)žö™‰M±Õo4ÌMüæ!WMÎM„¨„¯hîÞ‚"ÕÜüãf:UžÜåMy8º‰fJÞw ¾T]ÞtCq)–:«Â÷^þÆB.LlšºÄ„ëníQ>Õ ïf£‰5°ítS¡2?ô% §À B§Ó:×e]¶u>Ž&}ßV‚rá˜ÚbÚ„=ãL‚•y±53^™j¶ºÁrØê(Âì}›©±‰tUtÄbˆìbÜWÅOµÚØ'GØ™¿o'û?;\¬\Ý|y8S›Ç'|Õü'ÿø¼àÁ÷3õåá"8Sº[yžw¼7¸g}v“ñHgÿí³h[uSWÿèÔcÝ|ÿçXb¸q ¡xº#oŠü©ª[Êâ}Sc%—Ç,8za˜ôö§šV·7G*š^i×ϵñŒö/¼ëj\«Ôþ¡Í-èý% §WÚ}ƒ;Í%ýúùö¿täêš{GÝ_Nì¨Ma`z™ÝÕ«ïÐœšé•ô{¾Û‘›_1€XIz”’é…•dG)™>.XÉü(%XãçÞÔØŸé‰"ãzãçÞª™èÚ‹Yç•ÌÍÛ«|MŽ2|’Ex™Æë%÷í¿'ÿ9ù «\>”endstream -endobj -1028 0 obj<>/XObject<<>>>>/Annots 326 0 R>>endobj -1029 0 obj<>stream -xZ]sÛÈ|ׯ؇<8¦ €ŸO)Ù>ç\e霓§*•ˆ„$œIB@Ëþ÷éž%v:B¦SW¥s«¹³3=³³ÔÏ7Ɖ›§.›¹Õöl<ã7ü‘ðÇï?›¦£©›-f£±Ûºy†ÿy°qWg·.OGs!ƒÂª°‹Qêfót´€ÕÙ˜S U˜q>Z -'6S8)¤b°³¬gV1ØÅ4xÀIo]šô§õ"L—£Ü],è’ŽôÜd6š“3@N ¦ÌÆ(ŠÁNRYÁ`!_¦¬`°HäŒc#˜t -ß"«ì4ë¹¼\RµŒax6 ˆñx2e*1 OÜÌP$Ç3Ëi²LhÖP §ËÌL“¢ñˆ¤I8…XABÈ™„—¤6Ð>IR1%cî8T1cÉ ¿°‚Á.'JXÁ¬‡¾EV1%œ@%ao] tÞ%šÎæ^à„ Ë# H0œš² … ‹*š%+˜.Ï‘ÈúiáS—øi É´ “p*²‚9mÆë ›ô 3¶‹©!3,ìdI뇦s+Š…Ò Œ¡S*°~h2±’IPá©›òC#ÆP4¨X_mãÄ07³8R &Kf.Ši–ÝKXÁ`)åcsép}EV1SgõÆ*‹e‰#+ì| -5… U­>+F¥NluËŠÁ.Ù ¢eÅ[7Á’Öyƒ&Ìm°l)˜ ‘²gK¤Ç¦@ SÀ'’ŠÁ¢ ΔÌpC’±‚!º—ZV 6!}q¬b°Ùu'¬`°Hu¦¬`ȘôçU {„F¤ì+†c¦9ŽU g õJ1«ªï•½€»q2™ÐeC&¤`°è—˜6²‚Á.Øî…Œ€¼a¬b°hp9²‚Áâ 1ëûIÆ®iÇF¢ËÏåʳxzÐ0b …0YÁ`±Èa8²‚é1w1aC -4/DÆz§ÐC}£å¦’²x°Óv˜Ór;V0XÄãXÁ`qï†S‘Ìü°Š#«ØשÎ˺í0X„‡€‚eÅæ' ÚÎM‹*{Bà"¤# O‹23«‡Pì$ݸ××g¯ÞqÕºë[œ‘ñm×Ü]¯íë´±»^½€v£¿^ÿñôK¶úνpWm¹Ù¸ûük¹»sm]ío6Eó·þ§qX;|ú%l¿ÄÃh -ë/²A“ïwmqWç--^\¹Ïån]=6nW´Uý¥qe{ï®òíM~|šþ,Éà<çwÅn=`c¬Ž¦ƒ&.ómá~/šj³oËjçÊËÝþ.ܧ]ùíÕ‡r·ÿæàõf}Š«xy¹þíÛLH÷ê‰åçÅ«¢]½º¯š¶é´S9¦òIé©Ækôu´ªv·?9Evêôÿÿ™`r껦A¬îOšäIa—¦åÛäñùηoŠµ•$rÿçjE —°_¤è–ƒ5v}_¸Ë¢}ýþ·+gó¿ÉW÷Åq«½Œc¡=kôÃů¿]]_¹Ûrsš¹a]~ÒÐp;y{yå>TÕ—ýÃINüüþ–žä|Ø¥_«GwS£±Ýîw+®ôÆ廵»ÕVn]¼¸?¥D¯J†×ï7un+ÕßeXŠ8<àÀP¯E²ª‹¼-К›/î!¯qÍÀ˜S›†vÊ´tÞ6 -Lÿð-Žç½§éð´k6(èÕþᡪ[Þ‘üî€ÇÛÑ·ã¶uÁãû“çbª«µïzÇ-INðÞ>h¨··Ô÷‰wµþçº«Ú ÷†ÉcÈÿ~`ðùOÿƒÝEí‰kÃÎ]­™{[—8C5¶ÿò í’s˜¾§ÔÃî)]vr·Éë»ÂíöÝéÊb8u‚ás¾^ÓÝK´ÆÎe4ÊÜú°n -?Ÿ¤Öð–£ÕÇñ#Ên`í<)âa}x {¿5-w]U›¦h;Ú¯“çnvŸïs,‡&Øx6éÕÉs—ºPw/÷1_}Á o@‚'æO”àÄó<¾Ëzf×1QqnÁ1ÔŸÁÞlJKëú$UÕvQÚë¶\ìÅ·uµ ýf<úÆß=Óx^½ã3ßÁøü=^ào——Ÿ«®Î/^Ÿ£r«?°/º·Õj¿…§æ5Ý}Ég:~üå<Å›ÙúÅù Žchò$'ü{1Á_¬óÝ‹¿ùåúìgÿšñiendstream -endobj -1030 0 obj<>/XObject<<>>>>/Annots 378 0 R>>endobj -1031 0 obj<>stream -x­Z]oÛF}÷¯ôa‘Ö -I‘U`±pœ´ë"v²¶‚ìÛ‚¦h›­$ºÇÿ~ϹCÍ\WŠŽç~Ï;£ü~›b3KÌ47Õú$šDø ¿ÄürýóI1IL^ä“ȬM6ŸÌ°27' -®Í|>™*NÁµ‰ÓÔI‘…É$3ù,™ÇIAž„ìœd”Nb“ "©1Øél’jVa°E“"™eT)@ìñö¤”êHnÝ,K%[éŒ2p‚Ȥ8å8«/$ävwf‚¸Ð’ÉÌgŽ°fÄiLŒÚñ¤Æ`gSÆÕ-Õ,j_ ÖU™$“™Z«1Ø,ëE1  ,F“ʈ3® ªö:NAÔól´NA‹zFÔÝBÁ¦^Uj 5GÝZìUd)Š%Õ¨@„HW*H¥Ü™žÔ, -rK5 ×P˜žU,:Üñ¬Âì9#áXÁNÙÒ=+î¤B #Ød¸ã!ÝáÉâIÁflRŠUìl¥ŠU˜ÅÁ`ÏZ“¤âÑq…@“sS“:Öï¡59’æî1X9…«0™3~­Â`¥´«0œ‘¬{Vc°)ÏÏƬŸÉåAšÎQ/ÐU¶ Ï)ƒ¤ÇyRc°y>«1Ø‚U­U˜Î$ šØG“4‹–€{Va°Ø7£µ -ƒEÐ4ksžÒÐjÁ  VËMy,Ãà˜Gp*È“h7¬_„ SQ“3J«Û-á9…¾!óÏ4e… -¢àXa¬…HœcÅÞé<“¤bÀÉŒb’‡4‰‰÷¤Æ› Š“¦HÛdŒã¡0‰I -ƒEG€Zù]afâ˜tÏjÌÄ#Ö†bšÏmü‘d¬dCá1ô"Œ°Ê³ -ƒEÒçšµevrq*`Æ$’†U˜s Ù±[›+Ç6§Ãøšp œ -É -3’Ì”b‹VkVaz$ùô’†U8’#½Öú‹aTæfd9d#é1õzDÖZ»$?µ‚d©ÂXjSäY…i²¤È³Ö¨È¸q.& ÉÂ&h­Ü_Lo†½K¤Ø™ýlSM +MÕb:ÄO± -ƒ-x7ñ¬¸›ävÀã€37Q°%Q6B -²ZQ' T³[àH@NA´[ΞS' KÒs -ÂÔd¼Pc°¨¸éTj Mp¦Y…ÁJRkF5EÙÈYkÜñ~­Æ`çÜñžµ”Žµh©0YDPašœR°cíRdÄ^ …ä2Ãm.Ž™)“MŸÛjQr¥*íïÚ¼±‘¸µH}ª×*ÌP°qúµƒE-Š‹c,\Ëæ¨6jU&aŒ©1X í#Va(•+²¬1Xìr¸ãÔj yN4«0XبõjŒ -‡^-Yc°èt”Ó«1Øœ· -ÏÚ®ã -''-JMLj†ÜÜ«0XÔ¬òk†G¸­Â*Çj V^«0lFCB™¸µƒÍ’cèESdAb³Â³§zVc°£ ·Vc°È ^\<«0Xôý«0lƸ€ ºµƒÍxq±ÃǾ¿v›ÈÝÒbx„í‡,xVafAlö¬ÂÌ7¶Z«0£Ákg5+ã§gÅøxj'Õ8âÎ" ³ÂP‹ˆäËï -«0XRäY…irÎô:Öª‡¹P @¹ˆ1ì8>ùÀ$GjL“8Ó(Va°x;ÛK¢`«íVž|86ÆÈa+í!ÊÈ“ƒ/«0Xt)(u‚5&+qP¬Ç`ñ†;V Æ“;·ä{‰‘C´‡g¼£‡€Šó­9Q&Ø4sµNÆX'…9å+ÞP×rCî8ÁáÆ¢9¹ý9ù¸uv'a+Êy# -Ðuök›Àf₇äXÊsádŠ§ 8ûVņ,.xH÷X~‡tåâ8ÁaàËÑ SAp˜iÔ:¹âÊQBÏá|OK<†1Ç úx/‚¼ùpsŒGÃû°c^´d ö3î -üžz\±ö¶Hma«ÉðnÇ:qÝC¸n‡¼=÷nqòö'4éØ,îðáC^ÌÌb)Ÿ9DfQ½)&_üúòsˆîÞ¼1ïëÛÝý}³¹7Ÿ»fÓÛoÚÛU½ÞŽ—à,ÁG§Rg‹%ÄÆAÁ›¾k—»ªoÚÍaI‘”y iaÝ™Çî5Gb§A±_Ê’DâÖ,[saÊoõ¿Ž°5 -½©{ áîÑŠ®ÊGSn–˜mÝ}«»@\GfgA ¿´·³éÿa6­iwýã®?ÂâüyÛ¾+7÷õñBgA¡×å“ùÜnû›ªk÷Q^ag¸NÏ–ßÊMU/]™!m6°.Wf¹/ýâNu¥‡EÝÔÕ®kúg³ª¿Õ«@rÇ¢þ¢Mƒ–tð²íjSµëÇUÝ×ðt+™ÀV4íêç“GîãÊ2’|) Ä û'6Ѻl6oÊõmi’É÷ñªC=¢Ãñø¥m6lIåÆ\-Ì{+ÿ©éœ†ä°µ›xÍ Zo åýÚl–íÓçúœÕHæXökæÙ4[Ó?àË-:WÿOTÄlGôœqÂAú²iîìŒí}»UOu½q!pôïËÕÅÍnËhÂÕ[x{8rºTqß«=»eǨþ¸ý@J8ê˜àý'˜Jièƒkèí·e”ÓW¼\”Ý}Ý›/Û¬—Y -ÿnŸö¡7_Ûî·ãŒÃE4èòeSuí¶½ëÍu½n±Ñá6zä{ÿ¼\…š‘®ßx‚©%(ÿª\×æ§VSá_ì»êáp@_Š géó -ãF‰ùÂœíúdMUrD0—V¡ ¿”2ÕI½ÿܵ8…/Þ›³Õªµ:Ž³=|ö^×ÛݪGh«l£ÃÒ^–CXÚÅfÛ#IÖ{îÐóvs×Üï:ùÉaé/6' ‚¹û³ wç ¬ëú÷]ÓÕk¤+P´ãáÙ3(kQoeDZ0†[ó)4¿¼ dx„ùج›^‚v”qá± ¨Vh‘¡ulR8\Üè}ëò‰­3‡‰)·¦ä³.»çýyµ•W«º;"éÉ+)ÿÜÕ3µmÐ -®ër¬R.|lLÖ»²úí)tXŒå„“¾/mž>ØõC@†óüü+ oýó®F@Ã¥lÐÚ,ºÝ¶7gUz{l?Pœ¯3ÓD{¬%G…ÿÕ~\nv,­!vÖ:lËaM/ çå‡O›SØ}úÓêù‡¿L]8}û¨1T6rÇîåv ·Âóv½F¸pzÉÅS2õ¡ëÚ#îJx w†›çm_¯qY5USÛ -€’»æ¨ƒÏÖÁ!ÃF‹xtæ¡^=š -sÝ…Á¤˜åÆ© _sÆ[Âܵ›ãæßß^~8\8£cŸ ¾Ò#ö;Ñ;<ƒ:{Gßþh®êþ sÉ0HVõÒ‘p¾¦IÝ“¯ÛrÍM+÷ëÉyYPáKÙûO—gWÿ;ÿtµ¸þôqÒïÍ.þ&1tó7Û{<ÖÞ$C×?«zÛåÙ;1Œ3Š&ÏûÎ i«ç¡v¬0Ä݉^Z?Þþ„PäшoßQç×ùOGonÎ.ßqGþZá÷mµãéïF“S¾Õò×Og ^˜–oôm Åÿù)ŠïP RFõÃâä?'ÿú¤“ endstream -endobj -1032 0 obj<>/XObject<<>>>>/Annots 430 0 R>>endobj -1033 0 obj<>stream -x•Z]SÛH}çWô[²!ú–õ´E ÉR‹™âYØ4±-$‡Ìþú=綬¾bh·¨rùpt?ûöíÛ‚?NBà'4ydâÌ,Ö'Ái€ßð#äÇíדtv˜l–ásmÂ09M´2óÌ£ÓÈYÂ'S‚Qrš)Rc°qtZhVa°yxjVᵉ¢à4V¬Æ`ã©SƒMƒÓHË* ¶ˆ§^ŸN DˆRDmÃÕl2;Í5«0Ø4£fÑ$² -Ãn3É#«1#Š¯c›dSY…ÁÎ\´«ñÚÄÈ•¶Úx¡!a¼1ÊÂd‚Äg…oÀ5r¬Â6^øìXÄ»Ç`g²¾ŽU>c}áÕÈÚzDÐœÊ Z@Ÿ„Ú0ä¤Æ`QXÇ* V~¯X…Áf³©¬Âp8È'Ni 6›zeÃAŒÜ^¡ -`8 -®M‘2e#§  -BVÛHj 6̦¬Â 5Àú*Y…ÉJ;Í -ƒÅNœÈ*ÌD„ÜóNÖÖSI·ö‹ ©'»Ÿöl\0ŽUv“” àX…ÁÎr.¼c¦WÒFVc°v':Va°(0t€‘ÅF™m‚ ;¼ãQ ;ƒœ}PÖA¸›²Í8Rc°E„ÅS¬Âp(ɱŽÕ˜Ápñ«0ƒ‰bÅ*Œf€ÅÒ²ƒEt: ©âtÆJB¥ŠO¬å²\6l²k¦‚™rI+˜TIÁÆm:Va°ð^ËZ«èB<™°YÀ  ^!ˆ# jGRc«6Ó,Ìì1Ø™,“U ØfÁF,Å*  ÆÂŽš5FúCfÚ±6Ø(—:´gt*H²(g¶Åpƒp«0XédŠUlÁòW¬lèú倦n‘ØU…×@žµkË£(E‹`ÊB•u˜vÙ+á&ØS¶hxzXd; QtŸX³ -Ól6•U˜.³lœfk6OlI±‹%hµpjÑ`!8’ƒE‘dŠµjq,°‰ (¸+€j¥oXÈXx;Rc°Ò{«0ætiT¬1"•ô;Öº$%ˆÍÃEOH¤Ž.äàÒ ÂŒ:Va:ÌQE± -ÓaæY± -Óáˆy5gœ˜’8µÅ²uY$Á.DìkƒÐÀ § l¢ž‘à‘Ô,º½Õ,Ž ”á(kS°Œ­âÂ$‚Ä#Úc*fR¬Â`Ó||vð801Z˜ ¡¢È"§xdqhÆóÂ*LÅt(Y…ÁbT +ñÄø¥tø%Poá 1©ÁÁ‘´‚«¤õWòwÏbMpá³Ö_‡!›³*ºpmÁ–•6 ãƒE"«0â²+VajN¦¬Â¨5œJ°+v¨Yc°I%V¬Â`¡ ™r² -ƒE’´¬MUboSèyX;´ª ÓÈbs¤Æ`Q¨ZTc¦‚³¢’U˜©à6q¬u)²WëƒçÒÀ .Œ¤ÆP‹Ú‚ZÇ* };Va²5ë0ó0œQÖ:Œ,u*z8‡npp$5v¬ux/kt¬Â£ÃŠ‡Yž*X»‘µö>ƒc%-@vjqf#Ò‘Ô,ö62ìX…ŽìfÇ*L‡yê(Y…‘aœÊZ³8öÆRp‡Z ;H‡9ë9Rc°(í@³ -ƒÍ9Ã+Y…áæŸT±Òþ#œò‚'tI¾=ÇV µò$I™ŠU˜y`þkâÓ6bž@‘ QŒTï1c-(êXžH|ùÀ"•›­”T‚ØèȯR"”ÙˆoÚ†rtˆqÂ)Bã“|ÈeßGKÃk&®"{J„ÐKÕô2Ž'v˜8¬ Z÷ž1Ìë’ -nù.¶FQÿŠútwòñ ê"4w|›Írs·”×±¹[¼Ç¹þãî÷×oiÛ'óÞ|*?žÚf·YNŸ@Ÿ žÌÊC!õÄ^=÷ÏeoþØ•«ú±®:Sš‹f]ÖsÞlú¶Y­ªÖ4Ó?WfSõ/MûãŸoÛƒÿSƒ¡×ä¿š³lÄØ=v}Ù×°ñXo–¦î;pâÁbôÀcòuˆþdÝ?WSwÆÍÅ9B©–ÕÒ£öëPo çåÆÌËõCi*dŽK²Ûþ5;S÷S¯›.siºª7Ð_6?]œ{4¿ -Èß+o«íª^”}%IêÖÛ²ë^–X•Uå1óFpkîOÓ¼oÚzódÝ~יߺªýxU.žëMeÎ qoêÍcÓ®m% üÙog7æ¢n«äÿ<¢ê’qÞìÚmÓUokÑ+míMÖ%·Är·`¹£É¿ëæ»í¶iûji£œWíϪíŽÑy Í‹çj]"sKs[­$“Ýs½5}#KzûåãAä¡þ5¤ý‹þÊDx¬ŸvnqÍKÝ?KHo+ž&Nð v½­6RhbDz[ítýpvyWð/¿­pÚpê{yDãDÚ¿¢o;³.7åSµ®6ýÛÚ§îæ^ÝójÜöŠîŽ}æÿXµ™W­dµÛV‹º\Áï¾oë‡]vŒ h´™£ê±ðÚùü«\oWÊáò‹ùŒ­Ãó…6ʉ•cr„ƒ}ú˜üµRÎÁófÍL{|.¤¿’/×Û¶ù‰íøÐ6/›zäbjwºN -ù`c_ÿ¬«Ó<ŽºßV©«âP Ú{ØÙò7žNÕú;ÒMÛ<¬ªµi«®YíŽëp¸œx×et³\´M×™n÷€³L¯Òy¨‘ÃV;¦ÖpB1¾óê•9Ì«¾gÈi{ù}Ž³—ú˜•ó÷ -¥uÌ:s}ûﯷ׿Ý£ÿP¿½žê¿¸¾:»ü~Œr×øÒ´ ¦D6ÏŒ<œ -×e×—§¸*(ÕP:L€Çë>Ð ¾7˜iʇf׳JÊå›r¹D¡w•§§›XžæÎuŸ«Ýª¯Ùäê ²ðX.|§è@È8¹….NC›4wÝΧuRÐxméõ]r[¶u×lŽˆo¡¼Š®·«fñãä•;xå×3ôÅib÷íUçŸÞøýùVý¬V‘9èÖkmþ&x½ZšwåÊ46Îwø"—“fYm1Šb@ö\¸^¯°ßÊÄ(o5{R9õÙßfo«riºú¿GL¶øó‹w9®Ê_æ׺>b`É Cß6ò1kz ‹=—-ÚJ³ôý45þŽõ­y2+–Ç1þø›Ó}½¬Ì -W•£Vê@#’¥jË—cÜ9Ðrî1VæX=þ#î ¤—õ‘÷ôM_Uk\Òpl·GVÞàM3áºê|…7ç«Ú?×}ü2Þ›ðX0ÿÊ1ßuÌÏ®> 3¿ãÚˆ«øbÇép¼;|ñ¯|wW¼cY¾?{èú¶\Há'ø†Ù,Á«)û|wòŸ“ÿúg¡Úendstream -endobj -1034 0 obj<>/XObject<<>>>>/Annots 452 0 R>>endobj -1035 0 obj<>stream -x•—ÛnÛF†ïõsi1Ã%—§«BNšÐÀI$47¾¡)ZV*‘)IÙÍÛ÷Ÿ]Š;t½®ƒŠ?þœÙÙ™Ùÿ^( -ñOQQœRuX„Aˆ'ü£øçëûE ¥y„t < Òö´Z<ŠÂ ¢5Ì¢ ‡aŠRl( 5œ;Ñ&†ÂˆÆ©3¢C* çé$ª˜Q§†aœà? l(ðŽÆ¼Èš@8 Ó b’spqD û¶À†*Œð8ÅÄ99*Jx|CF Uk¶uª`¨I8· µH‚LÚ ->PŸ(ÑäY2TÍl%CE ‘ -g+jÁEª`du“3’ÌùW3[ɬ³ùJ†ŠFA+MQI†ŠžQI>³™gÉP£x³d¨é<æ±¾èîá±¾†D}Oª­§SOõuª­ïÉÖÖÓ©‚§úNêXßÑv¬§Sm½Oj’p7;U0ç©d¨Ø^ä ’9Å|U¶‚‘DeR<eŽå$á›L!ÂÔ™ ŸÙ‰æE7Þ ,°†Tbr£¦“Ó›¦Ã-¸Ó»F̳áë†s<6jÄW$¨1o5‰!c+*GäÉ©‚¡¦aœj® n;f XO†„ç“j=9U0<#ˆÊ©f -!‡[_#ìW ’˜p OšÉ¾Fc¸ì[bC+f|7ÃÅÏNm€5ˆFñfíDkhÎ`†È=¡C6äi8ÑêÜäCD¤ Œ#ž†8´­!î†<òUWbKÉ<&OH¨‚Ù17¾PCE.1QçY0Ô‚OR§Ú pørr±Ï¤8Õ8&Þ+´âsYcu‡ÄÏ»šn—ëÅëw)¢¤õ-ßåÓ<£õÆ\åCZWgH5Éùúûã+~·¥3ZíÛú£Ýîš~þŠùÀ+!]`iDpi<¥^Ooö»ºh86»fû"_™×קŸôµîûÁÔæéÂòû¹ZE4ÆõáêÛúêé°9SÞ°Þ-¿xú ¿“HxU6ô‘ª¶¹Ým¨âÕêuDßÊî½i›¦®j;ñPSÙSI•Íð-´Uy¸){z:²b¸ã‘w>χÓõYÓ§®Ï_Ùàñ>cŽ1 -þ¡_'öƳD*†»¿eó“Zþ“v}¬{z¸«;üõ‹÷u×ïÚæú/б¯72E/LŒö‰ٴ(ѶèG·kD²évÏš}[nè¡íþB«›ù›ÚúôžÑ/ð©íz6÷ÍJ˪ªûÞÖ™úöØU5úeSÓý®¤7®ž.ý¬ sÔ~þšù²7Ëþc3tíæX Èáü§Ö=îe^OˆåìÐRÏ}´gxî]^¿cÆé>Ô7/ Ó¨pXÝ{–ñ¼F…7¸¯õ¶¸ø—Ç­Ç×l®Å33ýµZÏÔâ}ÝÔ]¹§]sÛþºŠÀ¿ßÖ7Ç-íëûzÜeŠÀ¿”0»ºkTÝum÷"gþÓj9 euÇyG¯•Ô>l°B[^-/™²ÿüú\Õ]íqòú]>ž° -ßNaã ‹Ù³ÕòÓå’>wíw޵߶Õñ€S°<­« ¾wñëè,œÆ›³åM?te5p¬7Ò<×8b!¤üä÷õâËâ_ÆÏA«endstream -endobj -1036 0 obj<>/XObject<<>>>>/Annots 455 0 R>>endobj -1037 0 obj<>stream -x­VMoã6½ûWL·6bÚ²ìØÎ-)ºÛ=´‹n|é‘–(‹µDª$¯þø¾!åÄIÓmŠ †-~Ì›7oÞèQFSüe´œQ~EE;šŠ)žðGÆ_>Žfë…Èh1_‹µ”¯¯D>üjèŽ÷Ó"_‹9ÍWK|Ÿáß)ªâB–Ïqè……|&®ž?¿ÝŒ&Ö4›Ò¦¦«åŠ6e„‚'Åŵì‚r€E?ÙKŸŒ²iHš’6ʺ»ùùöæûÍïñžl™îG ›ò"8zTGÓkú¢dI¡VÔJCÜ)ŸÎÍ)ˆs³%0âÜæ|•Ú§·}P%t¨SP*¬ Rjlðd+꽪ú†´©,ÂÈ€½@Z«¦cä;èh{~‡‹}ªø7C˜Ò8ËA—Ö¼´7ȶN;Fý€˜ñ -îHÞ¶*ÔÚì¨Ñ{uRAR¹B}pãwi%VÖ"_€i,g«ŠÆ|µo·¥XÑŸÔZ§ž’2ŽƳá¶Ïˆï»w…ŠIs¶®•A[C"è¬6Ì2Þ#Ûw²ÝJ:¨-yÔeLø©àÜŽ.¨¡»žL‡ƒð|BX·{º7*{Y1ç•Žifb6T:»¦Û^7%SÃÕ¾ÕF:ýZ±-•\1í/©Ò¢r=8ÆÑÎÙ“mbd10xAb‚ÒWz×?'ëÅAŽSE°î(hƒëÉ׶oJ’}°LY%YFwI!ñvY&Žl§Î )ôAµ'Q-ïõ¦÷½lÈ(Uz†`¢ØZy„ -}Íå@R)‘D⬠ߦՓPò…XJ9Ë—ÆctÚzjœqÚû ’D"Bz¥èÀà;UhÀ³ ÅGl„§ŒÜ6ŠÙ`õU=gøa¶rÿ\¼Ï€Å†,ÐQAÅ2miúl -E:¼GúÒöèäX›¶Ó äÌË€Ñão@yDûz>7ì{2zº•ËÝKÐo*¯: q( þ§“èèÑEzÿ6šOa@àë¹À§ÿ¾üõ0¿ØXQ(MGWVÔwhÞhÜDݬîµí=Ý+çÙ¯à٩ɸº­ÞÕ!z)7KtàhâìM;bÓc,gÊ;NJJž¿U˜‡F¶§y!éÀï ñ  Ç~¬ÝF)‹=å‹þ’Î[(DÒÊ…×éH«4¦*ûà)Y†Ù'a7î›tËΛÎ;»æF&žÏºí¬ Ò õ1}ŸFu§9{Rªm’ÙtüŠ€2ó÷³Þ;+ž‹eçÖŽU·k(æ}±?^âaŒÓ` »:F“…YN‹“fcèɇ`@f¸Œ¦“Œ9Ük¼ĹŽâm“«Ç >ÏÓÿ7oAóÕT¬Vó4á— ðÇÍè×Ñ_Vì÷#endstream -endobj -1038 0 obj<>/XObject<<>>>>>>endobj -1039 0 obj<>stream -x•V]oÛ6}ϯ¸ëK]¬‘?ã8öÐvi MºÆÅ4Ã@I”ÄF"’Jê¿sIivÔ´À8v,ò~žsî½;˜Ò¿S:žÑ|IYs0I&4?:JV´Xãó /+©fG‹döÔƒ““o/¼^ŒßžÐô˜Ö|,WSZçû“ ­³Ñ4Y$tåå†æ§ôÆJá%ùJ’kRÊŒ.TÙZá•ÑT¨Z&/Ö_`nASXas‡³ãd ƒ£u%ŸÀˉfSË'.;R:Ø–_ÃG®MseeæÝöså¼UiË>:Ç™²”ÎÓÖ´¨€ÈÙBÃaÀùtŽ:Ày¿E[×[r&Ì„&'%Uæ!x46ç¨4äM)a²¿™W™Dp˜Ónpq#JTÚXu½;$Ï)/“E—29ÅÉ"¼ÖqOdM¦­sJQÓÀ³Ò%Õê–Ý)wë9¡“¾œ‹h›ºŸÏemRQÿÝ'T*«º2 ¤h €¥ÑõÐ’tKBo–ô |…Ï$²Ì´!D´8iï¥}‰ -sé$¡yø£,Õ¦Dµh$Û‡ÚaâYHõ zÈVÐép8¡›Ñ… @5`ã¤wõôž^‰&¤PaR¡òúãåŸWçïÿÕü2pré…ªÝÍ‹¾bþsÊßßu4v„ÒΣ>ñYO±Êjãûç$(`ŽÀÕ„¹:¼K× Ž–Ä1”E‚«@'ëd] Aýž#q-xÌ„Û´±(½‡ =SAtI›Z ª|Ömd¦ -G‘æƒ Ù04 òfļËe!Ú9¢[}5·|nâ\V„ Ó»ãÖÙqm2QP*ƵJÇ'7/†i¾…¹Æ K¥a¹‰ -'Rƒ|ÌZ«<´Dzȹ dÇrëx/œ -Æ#„…Ó0YÛH=Äħ‹ó¿þ¹:{óéãùúš1ÓéèN–çñ§ÉQ§Ç‹SZwÂg;]‰å<ñxH%|ĺ^Ïýsn³1Ö )€™ÛÄC¬÷¢V9çi -ïù –1†HFN¹bjJ+hv±ûÒ¶Ú :yù;»×ÜÍ킪ȞŽ©. -¸ï–êF“´–»'ƒP»Ã/ì³w‚?¡yl€Ípo? Œ5Ì-RL¬T -è«5è‚Îÿ¨KË®KG§˜žÖ¦`½IóàOãÃãÒíMËk4¢i‘wV>à>Eß]ïÅ– ÙðCâ…5]×wú¡´ôo£„~3ú9rÆl…ýÜPj|õEEËá¡Ù¾y‚hÁÇ“:Ãå­šƒ41ôòKÌS̾m,Äã}ÉÉ1BÃðÕövÙâíF×#”>3MpW#R¶õ„VHŸm–¹xÜ”k¸DâwZÞO£}'ƒxº%#¡5k(Ï •µµyY.Ђ~}¡ØŒbóÀ¨Äî3ïeË‚76Ê¡&H¡yI Ý“Ç RäBõ¬`Àef°±4¦E~Qà=äæßa“‹ƒ"1²‡Ç¾ú¨›ÕÌlwh‹ÔÌìb0×WS‚sää6(Á œVºz\­ÊÊcÉz}תìÿ œ€«ÒÊ+Ö®n¡€Ã;^`vÜÅ®6Õ9V]Þ°%Óž½b¾HßCy /_¿¸\ŸýBk¤V^f˜øAÇPó\ÐRAS¹³tq~ÅhÄÛχý~»'uèèÆu¯º©>]bï_Íi‰÷°ó]½zÿú}°æ V'p;Nš0¹¸r‡ý…Ãã6{Îóoö‹öËÕ{=î¯ØêÙúàƒã4ßendstream -endobj -1040 0 obj<>/XObject<<>>>>>>endobj -1041 0 obj<>stream -xWkS7ýί¸Ðu¦xýÀÃ72IZfBÁm&3™éÈ»2VØ•¶’ð¿ï¹Ò -?0%)a¥û8÷Üs¯ÿÙPß:Òјòj¯Ÿõix2ʆ4šœð{üZIó½·Ó½Þ‡ 4ãÊxrBÓ‚p¼ß§iÞùݘ;ž–¦±ôfú ‡a7îô¤Ï{NÚ{•KŸ%CŒ>/pM9*ä\iY°‘ÚXOƒ£ÓžÏëŒ.æ¤_(}»~Ì/¤&Qà<•¸‡—;ɶûÔ!üiÑÁwý žïÇÙˆŸjégʸ®s:ùÚŒ –ÒY§*U -[.in,NŸôš¢æ\É-LS´÷’„&©½]†X^w¬]²ô¢ßKùèIê?pEî¾Èr£ç›V:à ÿ`DŽœ©d’Ñ¢5|útëÚŽ"<´õµ—óVŠŠPTæA ©4~RUcDʽeæm£ -™µÿL$»ü4}F7¨QëƒD œ‹edS‹­‡Òµ`ý °¾vÐ\L¾VHërcå×7Eå;ûð‹i¶¢¬ö©˜“ðìúd×ñ0ñé“7T‰ÀJYøì”óÈy7JŸ4ë%jŠC• ­X‰%H¥ÆED”öÒ΄ç€Lí•áÚ0CËðQWË\Í—À‹+î+]©5)á^æ•pwL  r+Ó]7:æsœDÔœ›RÝnç)\ìÌPaôÏžîÐGôÀJÈuœY#Š\}è"+NðÿŒÞ‡äd-@n‚mO‘/H±¡ô„"‡m4yUÉCš5žæB•Ž ËýodDÐÉ< †ç^:Ï2ÌÎv›õÅ ļ’ÓL…)Líªîïï>¿¾¼¸üïè#—6öâ‚êŠ<—5B·§cª‚“ -q3d¹©@ˆ"Ýê¿H»Œ¦˜ŒÜ˜•h¬•¼s…˜Q®f"=)ûœrQlímS²îÙ¿ºî -r¹Uµ? Gq0°å9ž¡¹5U¬f*u'JÊV‰·a¼F`ø{®R-íBÔŽ¾q›; ð˜ôÛŸWaærüa¬) £eÉ£SPAëî=7“iÇÎ*ÎLäaÍSn¥ ŽÞ©²ŒRŽyeÙrý”×¼rtq4 ²q6ÌèÆËšŽg—`‚^ÝË3 -â!Ô… -!+£7ƒ±!ï/)ú?•X¤µ~k½ˆ9´:›ê¸k˜‚¬è©„+æ 6,-m=’¯-ø†mF×iS}(ÿ´gì"áùÂl}y2wß™æ˜~än˜¹íÝõµðiì‚Ú,ÑÐsJ>ʼñbVJzÀ8‰Ù®“/*hÆ/±Ïààbµ;ÛP( ƒu¨Ø¶¥ð¤ÏPmc aq—íR6ϳY–µ8@›ÀWäGÄ?ºÕ¢ä¡ÂÒP[µpiå]廫CݳdžKz ÆZqeÀ‚̽•fÞÍ_×#@¹ÚJs„aFFÌRÆý{a»¶s¼ÑbiKSU—Òõܽu²Mý ‘´k·Â…ÔCÑoxÿà ÀÓLGËíI;'c|ʘáóÄ îk7çßžÓ•5ß0xèɃ¤¢¹cwÓ…îÉ<ŠÎÿƒÑ|ŸŒ +0rÊy½Ÿîý±÷/Xlä¤endstream -endobj -1042 0 obj<>/XObject<<>>>>>>endobj -1043 0 obj<>stream -x­VïOãFýÎ_1=µjˆ'!?øЊ+G…t@¯I…ª¦6öÆY°wsÞ5!ÿ}ßìÚ®=µ™¬wæÍÌ{3óù(¦.~cõ¨?¤¤8êF]Ž'Ñ€ãž{ø+%-ýÁi/ŽÆoôOQï­ƒ¸?y}ãýì¨s9¡xD³%¼‡§xg–|w»4KZq4Šhê䚆g4+·”+ë”ÎÈ­$Ù•(¥%ñ(T.¹$£ikª’¬,ey<»‡uÄëíÞ(ÂzëÛp×'“¨ -ç8°Å"É•ÔŽÚ)¼Ô¯_j±á•±N‹B†£A}ÔöÚ½!R#¿› -ÈL•§”IG ‘<ð¸É,ÿ sDWKŽR£¿w¥&k -éV´²¤tbÊR&.ß"LW­#Ó¥vÜGÞáþÆ8‰{‚/ã}¾jRJ„&‘[C I••)9ƒë’6üb“GTw/—îKú(ôµÐ"ÃcHŽ¥yËVÉŠ„=ð}·¼ËæÇ ¢&!uDÉÊë½—”ËG™@R•ÊmC˜u!¶´Tð×T Î}®¤u¨3­…µS¦ˆbi€V9Ú¨<ÉØ8!.ðÖ§ËÓ¦ ´«ö~9[@¡á*×MI©t —4#äDâëÄ;G™l¼IâF!ß•Û»=À%Ò´¡°Y;Ö¶ûŽ+ÂvSÀ -ÃZF4ãúµA°¦|ÀnEÚèvHOງ(žÅÔî!¡ÔZC£ ¡Äh 1oŒÝVZ=Õõ †þnÂÝh¨ÓAÒvºéF«’¿Ðl»V‰ÈAp,öšª½4Ž¶Î÷X§,8~fÝ‚ê”á*mìË4ØcDýÝÎ(—àˆ·ÃhAŸlñ……f•ú½ç•x”`( *ý"À&Ý܃"hyÜRåÌ´@N‹¸ 1ªÐ0î+Äèí úc…–aÿdyz)¬5N^ ü‚»C _B òIktÙà˜2>µàèZUÄÄõðr“!<_.K„Ë™rÛµ<{…¨i_Ñ;ï®Ãvƒ†öu/~¦þ¤¦þøõ—¥) Ó‹Ûé qã§ғ§6ˆõºA=øòfæÏz't;íôNHº$Š¢=¹4„á›õ˜áZ¦Ò^h©²h"2ûrà?ÍçwW7·wÓùü‡W3£Æq4©‡”ÆPAõ)=£9~‚þ9ÓáùµºÂÝÝ|bXëRyXÿ+ |íâ70­É÷dß°°}ì+ã÷Ø1%rùÆ(>4)s¹(…“'[ z¢+ZTæÊÚ”î›}þ |Ï܉»Ýñ ÂC#Ö™¥ ?–ïЇ ߨ;ÞF³ö›6WP¡ë”Üç•~ w›•¡Mæ5T²FH¾c•Â®ÞqoÐtE¶Ê2Œ?/ŸC›w¡‰L@_óL×|mæ¿?™“ãÁÈšC+-°Nlô¡¦ÑØü¾D…ÊVù>/XObject<<>>>>>>endobj -1045 0 obj<>stream -x…V]sÚ8}ϯ¸“—Òp1!@:³ä£;̤”-î²É‹l pcKÔ’!üû=W²“à¦ÓÉ„/KºGçœ{¤Ÿg!õñÒx@#JŠ³~ЧÑà"Òp2ÆçþKIk÷àrt‰¯o<NúÁà­á8|{ÆåU0iO¸ŽÎ>|RR´ªÑdLQJ@ÔïS”tºÌÓC–Ê.M…8Æ -©•$™I[ah›Y:ꪤ]©ã\$Têè½,Œ¦Ìô]W”è*OIäX«Âd»•´Z­ÞG?ÎúÔ /°Ÿ(í˜Ìâ‘&“E±H)3¦’†ôÚÍ0¢ˆE/Í6ÒØ ž;=Ì]m¥b,´ÎžÜàÒâþnº¼## €xTíRa±.j1’T'U!•6ÓŠ:ºÄ°ªL$`§òá=3`·Âòàd%Ÿ,ídi0ñå9Ê£h‘Âd²t(?|º¢ ™æÞEèñ†AØ€n3±QÚdjC O¢á¯¥é XšÎlíö·{ЪŒyî×;Åv˜ƒ °jòkÀlNÞÎílú÷üËr¶ ì“=]¿ãX(üæÀ3#õ’€?h™è¤Ùíï@_)•kQå––¬«oHPœ õ¡ý쀢mf Px© R Åú sŠÊXo ÇÀÉ-Qf·Õl•Ëé ÔóÞ¤´êðÔ±}œˆJÊ´Ît¼SÒÆ™6ð;2E$Z­[uõŽ дÙÁâÆœ.è óŠ°2^¤µ,ü†³L¢ïžL‹4@Á›é3Wæ¢\t³ÕÞQ\ ®²:Ñ9Ý˽ÌOµ‡½·" \~¾fÝý`îîB(¨—‰\&Ö`Õª,Ñ$`Ó+iªÝN—ÖÐe—° Ên¾|½ëº×Åý·e—î§óÏÓyØmñ临˜Ga»•]^ Þ†¤w^!ž²¢*^‚ªšåk[þµF/ÝÔÇsÉ~CÛ×Æñ@áи.g!~iô™S %i/ð¥?t™Ù#§'—†)­#i¦Hç©, ah` —cž;v2Y‰f^ëÊg†’‰4Fø^ä˜d>™I7ÏŠÌg)L¹Õ-r‘ܺ…6¬V,‘ -HE™ÂW‘ -c0×ʳG‰n±gó¿î7 -U#¥G¢U~l•-e!2ÅnéÝ&6’‰ivÀe]öºË`›¤Âa‡åð\­W¨+,÷œÌÐ' kì„1h‹ÔeÌ«ãÂéŽuÓvaÉËøíûêBié ëâ€Âú>nž+€,äÎT)öÒÚ#@]6AÂûdÂêHa´çÍ" ö×9ù8`{º »rm¯G˜ÉIJÖj&¯1;ó—k øX!E8aì¶.‘gèPƒ#Ln>rJ%î‡vÿ­ê`GL ¾]]>¼o#[JL7}ôÐÁ `U•È! äe(³•J+²üÿϵ•)ziÔ]™!†V²bÙ9<¹êþff}RúÄŽnf ‚°LtÓ¶ì-‘¼öl§€>¡ã¾6YæÐ\rÛÍ‘é²ÊÚËÂŒ&Æ”GWïmÔZµêº:æh¬,–¾ÑØÏU!bô˜ð«#ú÷w‚a€ÈOLͺÔ}›Ïþc£ ºqjÒâ†K¿dÚKŠ7œƒŒpóˆ=ô $W&°4íÅp?Nn·ÒÂá¬pyÚ"6œ'G!Ž¡ÇŒ´7ÞØŒqSŠÂßø0PQsÖ÷ǧIÊlgé Îó€¾J$ƒ¶<®¬w㾩‡<[­Uú7Æ‹8¸iÜ}SÐòûò_2öøuqGLªÝµ"ÙzX|"#>/XObject<<>>>>>>endobj -1047 0 obj<>stream -xmVmoÓHþÞ_1Ê—+RëKÒ’ô>ð¡¥EB-GÃ!¤êN{M–Ú»fwMÈ¿ç™Ùu B¨icÏËó23_f4Å¿-çt¶ ²=šSš?Ÿs:¿Xògü÷šjùb¶¼(ã/®VG¾ú‹fç´ªkq!ÎtJ«òxV̦Åó‚Þ¸òÑØÏÏV_ðø9ÍféñÓùßYMÊkEÛ)7\«£iu Rõ?¢wýºÑd5)PÁ‘¦t:_œðxµÑ¨1(nÅ]‡·\=<ãZ­+ŠŽÖš:íkç[ü¾Þ‘¢û·W´ÿ¦}AEµñ!rº‰×¥óÕh’ÓÎÎÒ¦zUÓ¸m@˜²1ÚFNÁeâ^ÙÏš Yï"*2s¶HÐè”* ­8WDâI¥íŽZWé0ÁT”žB§KS]ý’¡”ãy ÌûŸêG“­²Ñ”z[iO¬ùί¢óU¦®#:¨½kAüaëù…ÆVh¶ µÆY†yTÕ½j× - ` Íi£¾ú0*­Z þ^—66Çϵ„]ˆºñMÛ¶ktË%uíùQQ£Ìk·<5’jI¼ èÕ½–Ê’u‘eP÷M³#´‰^#U=*sÀh¨©T@ƒ™&©$‰‚‰ªUGÙ]”Ä€„¢Ô|ÖË!‹£ï8çü¿³99Ÿ‹óª4˜¬àrV°Êº»—bFy·ì ¼€†BßuÎÇ ²Ky@øhVÐ=}3 Á°½PG†‚c€žP³9¤f¯¿ö:Œ[Vk -QYc ƒýˆR‡„w$_!°o ˜®ˆ;mb¥£`”d¯„0Òjf‘D¢!NŽ×1Q¢ófÇ`¬ ×5©¬HÏB(ÇÈðg Ý 8ÖAª±øÄ&¿OO‘JmlЛBȲ£Ü9€ø1y  K„vë…‚Ÿ„Xæ]ÒàÞªÝ/ Âqe(‡ãÂÆõMEåFc@Á¡9tv++ÇÂê@~ë t*^„Ó )03ð^ìá_†|kâ†{õƒ‚¬½uþ1cÀîû#Sr´x"¼õ:¤!軲`*°$*UMppQëà?Õ 4/«¡ª P¯ -£äÙïiv²Brß ®6Ø rSÐå0Ù­*Èäe¼¾¹ýôÿíÝíÍ ÉÇ÷7—×ùãÇ÷¯W7¼Ýä‹Ë7o—…hI¬\åhsmó4JÃTÀéÕË+1©üråÈÏ^£§ØKrʺ(è-dª>àس -fzã—ƒË.K‡Ë°Ã"ë5½5¬åw/Ó”`Ór‘’Y…èx¼ðöt¸A3=D€» °eFÅ 7å½N÷Qh×NÚw&u -w$k«Lr«ù’ž-p­_œÑó³)Nt¦÷—o¯.éw_ø°¹veÏG”(ˆ[>^8]Îq§W¿»ÓÏ—çÅrq£ž¿Ÿók7«£Ž~.{;endstream -endobj -1048 0 obj<>/XObject<<>>>>>>endobj -1049 0 obj<>stream -x•VMsÛ6½ûWìøÒd&¡>kÙ™ÉA±åD3¶äšLÓLÓD‚j`Њþ}ßdê°é¡c{Æûñöí[üu2¡1~&´˜ÒìŒòúdœŒi~q‘œÓü|ÿ§ø³’Êp0™Ïþ}ð.;]_ÐtLY _g‹sÊ -‚Ÿ1¾É_\îE㥅#ºRâA§ôMkɉz'ÈIû$íËìÏàf²ˆn^ÏæÉŽ^L“IBkí­)ÚÜ+££åœ&“ÎrºHÎØ2Û+G¥ª$åF{¡´#A•ržLI^:ï8,åBS#milMÞГ¨T!¼Œ)¥ÏRBXO¢r—«*^>ì…'¿—ðû(«#ç2¦×“YÌ5­“!,kv•¬ I©’”§R(xúHF÷V0w^6±‚M#œ“0ª*Ž‚Ó˜7þ×ì¾Ø­ØUG:û()”Jˤûnz–̘ϨÚíM[TZÞÜ„ -‚çW¤tødl&Áê ‘ íÅb[% Æ(V–m… ùÞÎjÂLàl—£Ñ8Gýƒ„rшª”W¨ V%;í¢Ja+Õ{¦ D¸_Nê‚j àHÖ€´92…NGa¤Ó?ù€Å),Šp#$¯ 7Ue\Sƒ førY´ tÀùv@ñõšÓÚÆ*Ç—€E¿¸Š[6&rfú?çm}š€ñKçÚºaÖ:3ºþm×:´›9 -ÖÄ~¯ ø§.øÅÏ„ðý'øåÅ'_Œ2ÎQÓ ._^É•Å í¸€*ªU%l¨˜1) (‹ZrpT{7tñ=^Ü©Gm¡‹Z w¸ Ί'p .í1FÌü@WïèTɸæýîœL4u]75úº9Mè3"²˜‰¢þáËî"‹íŽ|ÂãVÆQŸ õ±ß°ãÑõ˜.z)GÅøþ裎¡ùP´¶®¹ÅoAÒº1VØc[GCËF€oi/Ã#+EýƒT¼¥£üÁTD)ÿ°JW›)-ÓôãíŠ@òt½ÝðB‚Üoïéf™÷ÛkÊ>¬(]Þ¾[Rúq­J·°¿ÜÞÞ.7WiŸ@'Ñé‡í§ ]­¯h³ÍhõÛ:Íh½¡ÕòórßGéoõ -zWIÙkÀIá=@`®AYi-YKçÄøÂ<àYƒ¨³Þg‚S€‡eäy—D.’ò¬í$Z4H¹Õ%„XÀŒwU* 9Ë÷2üæ‰Öw¨g¥3U²„ÓÜXdäqßIOm“|xC·$¾E9ÄIŸ‚—§ÀÒ¸W£0\xˆ7wWË  F~ÅÎË{Ë&J:ŒX_ƒ°]mÒî @"Ïb˜ÀaMlÀ³rz”ãW¼ÂHªèy³G9m…ô1§X_™†Ú`˜2¸Ûñ‚8 Ç¼ò:`~ƒÆ²67φÞï)ÇûõŸÁ'¿9¾™`+ðûèõŒù63~Ú°M¢ÕwÛm°¸ÎBqÿ æ ¹ö*ßG&à«nõ…J_±j†‹<²¼z 'VhÏFðt€^`-woHÓN²ø}Uª‡ÖFÍ O.€T -À{ ]Ÿÿó>›_DQù/Áùbž,ÎÎ@˜Ì8±UvòËÉßžgdÛendstream -endobj -1050 0 obj<>/XObject<<>>>>>>endobj -1051 0 obj<>stream -x½WÁNãH½ó%_–‘ˆCB”0#Íf…Ä2ì­4—¶Ý&=ØÝ™n›$¿¯ªm†Ùã!‚Ý®îz¯Þ«ò¯ƒ ã3¡Å”Næ”×Çé1ÍótJ³Ó¾Oñë5•rc¶˜¦óáóåÁøëŒ&Z–ˆ5?]в Ä9>¦e~xãý‰~¸ÖS¨³4w¶¤ÒTšjµ£LSårÕè‚ŒýD–? ç‘X‡cÝäñRþ¾ùwW¶Á9R5ªÎÔ¸2Y|ò#Mfñ`£“IŠ¯Åá4=I§)-uhhú:þ1¦|üÃï­¥f¥)wu­lAÉÚØ:¿úóîòû?—ß*½«eÅí½,8»¸¾º¼YîÝn­ÙRæ¶)]•´s-ÎþÑЃnxgì7ÁaxGEOª2Àkgƒæà–Ÿð´¼¸_ÝRpe³Q ò®ÁÙ¼×ySí€HhTUé"í‚Nç1UT#[oLU‘Õ»q„'|CŠ’ÂZ#›u“ÐÆØÂmÈÅä‘z@ÁÙcwù D©uêASP;*Y9€Ë‡,]k‹„Ø7µ©”ßËëËÍÝKRXÁ|ùÉ+$æ9Àé%ë ›v \díB0ʪ;±”òiV®mˆwÒ¶ñF#4vbjƒöOÚ yyep÷ˆ2,½"B[뎬Áî+õÄE!À¿‰èu­ ‚º’·`QdaˆÜ€Ya•×*êÍj'SmV@L™Š32R/žJü,c[¯7`ûº”Õ…T÷ÈõºR[>Âàø¾­€ ªÀš‰,oœD14GÁ¥_-ŽŒïG´Ö~¥Ö²a;‡Úx •ç`:V¿êÒmfîþ®myc>lŽÊ×ôd” oÖåF5WÞƒWuzÿW¿þF¯'^OâªÞ~¯WxMd•F×ûºíJûE–Œ]@‘T‹¥\”.TO BqI…T7Ì&SùãØW’ÐÞ£ÒzaÀ÷c(ŇZdœ«‚Ö(8•àŽHžQÉ°õŽ¤Þ4ªX*ütµ7€Vô"MÉQ”_ BÛH/‰ÖÒ¢äC‚Á˜oé=ùˆ%*W¸˜h(W¤Å2–)]¬tþ8Ø{ÓÙ‹§7O¶A’d¬•¯[£ëµóʤÅ8JÙ]f©´A -HHölÜ¥ƒs'ƾÉðê^‘“€ óä¢÷ºD(ÀÿÚz…¦:+z£à~ÅP guR|öôgÿ%òœp7El|o Ö…áî'-mñ™âj÷~|ž©P@Nôk)gRbÞ~X¨Ýa¢Ó½¬åüp²Ì¸0 -ïÐX·ñ¯¯î–—7Ü$Ð@:±˜ÿ§‘Jþ³ð“‹ˆÀŠ™ˆ£1¾’½À­·ž¯ÃS{>$k$‚V(<Ñ:âú½8€8Ó\h­-áð¶¨Põ²—A'y–R¦sžÅ×EV}Ñô=^t:Uµn i’à_”¡úö5ظTh¼²G¥ki7’ „ÞÜ&Û®ÙN ´"¥³*¸Ž0C†=6sØ‹ñþƒt©°ƒglIŒ$HðÁîÉ@Y¬Dó êr- ­"oœ´½ ,„û3¦#zÔ¾ÎèTžŽù³Ó£œ"Þ‡/åi>Ù¶Îb‹ ,¶ÔÍÊä+ÉR&»È-›J¡aÄp@øº.`é8kÍ“S€rvå A$Æ@”«`Ü?ØRŽ;,`ê;S]IJköŸ8O”»p:‹ƒu?qÚ`£¤Ïtv}ÝòPöz™xÖm·Ûtïw¼Ûýæ± ÓNj*ú&€ç}¦±™ìOÍ£éœ÷»Š-YepÅ#¸MttesN€N¬ÑjU`ìšHQ´\2 ¨¶q5Ú:†bìÚxeCÅjF÷¬ý‰»é³rnÍT¡Ö¨ü-`‡&S¼à3[…iï¬+®ù|¥,¿ÈÍÂù¿p—ãEŽ÷GÁò‹£›oK˜—Ž’÷ÈHÐ|;½c c@•R¿V UÿxNߪ»¬ ‚dS™f'ŽÑéíy ‘öÑÍÞÝ%/,bn3¥ÞÃmÈU­´&\âËq!_o}.Ô¿žvoI“9:=¡ùÇi|‘¸;ûëüŒn½û íÓ—c˜…p<>ï¨`´˜âíסÙb–.æ§x—ÃÝÉŒº\ü}ð/”“Dendstream -endobj -1052 0 obj<>/XObject<<>>>>>>endobj -1053 0 obj<>stream -x…WÛNI}ç+jý‚³‚Á7l²o@È -iÃzÁZi%$Ô3Ó¶;ôt;Ý=8þû=Õ=¾d DQ$c{êrêœSåoG}êá_Ÿ&Ž©¨ŽzYÎÏ'ÙˆF¼à¿“4ŒzãlüÖƒ‹A6hp5;:û<¢~Ÿfs$_LhVôz4+º…5FAYã3zìÞÙ ÿ °”ÔÉ•)I™ Ý\Ò“5zÓ¡•p¢’x“J9W…’¦ØÐz)Q -´VZ“±„ÖvMÁ)Xûaöõ¨G§ý! -•]mí*Å3‰²tÒû G§ê»,É[k?dÍCƒ1ðÀC—H€„ˆ^UÖP!j/ÉÎ9<^„µ%éœuž”§¥xQf@¨yɯ„vR”rµ1ü7¬¬ Ô~¤>¸É;öMÙ0e4“ÀaÄeÊðtÀ2ìÞ×)"S™áë ,4ñ\¯èôŠ®nÿ|¸¹ÿ÷æžžž.¿\]>=u2úÏÖä—¶Ö%-=*c@¶˜˜Q­¶Sc^ºè†×ÖÔm|ŒJkŽcHC¨$2}7`¡ ˜§µ,F^•Â@\ÌÅ(–ªÈ¨Pð½.W[•NÚ•ÿmÀ˜ä+gÁ]èѧ\€”kfqªj…O¤ Q˜¯ˆ -h3~kgkìsÓíH4dt;oU 7‰ÃðƒêP'K¢€¹ éY#OùIò…S+†l†¾ƒ†1¾S‹eØÛ)Ä€®¸øÕ½¯¼O°ó†`ç?!X -˜B‚ô­óftyÈ{º]^ÿu{s7£ãß_Gk¼÷ òM¯ý!#»€ÓðO(}ã²ó°fí7PO¯12žÇŽ_-°wjŒ.ª¾¨ƒ­`ˆº*–Â(_ÁéØ@žhj,¬f&òûJ: -úÝÊ¢³¿;dW|`ñ2¸RÒaƒÖ`µ5¦¶a'œ«ŸÈàôu²§T4Dƒo‹7ÀŒBàl›ÍbuÙEW‰4o 7“TÉk¥‘7VmS=ÞÄqIôK ã=‹¯ÂØÞ±¦„íz“Yb±^T"|\QZš¸[·Ô®‚ÝrgmòuÝÌžö{9‡ºPwsœñ¹Ò&g´§æŽ>û|ѸŒ_Cü"ÀÂÇH<1hêìW\côÉõnaòLO·œNøéPv_8£É(›Œ/páÓ~\I7³£Žþ’Å&Fendstream -endobj -1054 0 obj<>/XObject<<>>>>>>endobj -1055 0 obj<>stream -xuWÛnÛ8}ÏW ,Öj9v\Û-ºz]ضÙÆ»‹y¡%Êb#‘*)Ùñße§IÀ±È¹œ9sfôóbJ—øÒrFW JÊ‹Ëø’«—ñœæ«%>Ïðg%eþÁÕlùøÁ»õÅäÓKšÎiÁÖb±ŠW´N –./iŒfñU¼Œi-]MËgë8>§é´=>ž-qxô­ÑTç’S–B§í©áÔˆ\¹I -%uM“É»ë?o?~û÷ã·ÉúóÍ©¹QLßMC.7M‘²=MI•5eUË”2cIP%œÛ›ú³|ÿ’ÆÓ«xÆa„›“>šî(™Ìÿ/’Ä4â'¨f»…]¥kãŸ7Z=ÐÆ<Ð^ÕyL×™?¹¸Â'~BBgÏœwÖ}Ü"õ ÐøzhQÊ×dªZ€Õz”:í‚ ÐQ¡´ŒIn_= â™ßÉd£¶NÚ´“º¬àò‡Éujdk`X«Ê˜¾˜Z¾¢ëš”£Ê8§63ä*™¨ìpŠ(ŒÞ¶ys…­åLH8¤(ÌÞ=)Ê}ÛYä}¤¿9™XY?ðWH_ PHÚÓø¸˜¡î[‰B!Æ|{âôuLþÝ?×(¼¹'Ñ–Ö‚W¥tNlüuv¤ªÉ‰ƒ£Hé(TJZÖàß=1 -ûk©ÏP3B "F$A?X+“º8“uSjœ†å†ˆ£³88›…Ê€r½¿H{²üê^Â^"P Ç4öð£ûÇF$; XDjöÞÆÑÝ™:ƒâyþöÖÉ\-Ë»g´ijJUÊ@•/²kªÊØÚ7 ò-ñÇ=v^¹ñ]?†0tÝ8‰á›ah–¢Gf’‹àGgjÛXáû¸)Pó>p*”B…zcý>OA¥z@#'ß7=tÈs†¡à„¤àyÛ–Qª;YD][‚‚rµÍC]:WR›f›“?Ü…Õ=»:FÖUÀ“°Š?"ßÐÅPsæFŸcLïs™ÜsÕ½´°ÈT–Ÿûüè¡sʹw õ¹HØC«/ÃBZ)êVo?¿Ã-@ô÷2ÔùÄá‹ÖáxöâX:߃(–Ÿq™mfdYA:å bæØêäÓq¤ÊwiÕœ5ûˆd`Ȫ [Ç;¹,*z,¾n-v¢6bNòW**íjÛ$L'w2P¤×7Qp÷xÐë>/XObject<<>>>>/Annots 288 0 R>>endobj +1086 0 obj<>stream +xm˜ÛrÛ8†ïý]s³ž*›æQ”|³ëØ›Œ«<‰w¬”÷bn( ²™ð %©8~ûý»A-E•ªX??4Ð'€þwQˆå1%3Z×gaâ‰ûï¯OgQ”3ʳ ¤šâ(棪è‰ÇS6ñ¬¦|¤£p(á5EY$”‰šX:Kí”!¬­`{YS‘bJÖ4K`î픬 ÅŠ) _¾xC­AÓ0X(špÜiÆNÕ”¥ÌD°«JÂÙS²¦…¸ãì”dwæH›ŸTkP¤ p¦Zƒfó SÔ:›ä(Øä¬ïìȬwŽ)Éå<©ƒZƒÆIkª4(ª ©u(NáäïÐȬŽ)‰bÎ8Ž)ÉΆ쬃Zƒ¦3¤BQ¥ÙÙü`bël¡u&gExgGf½sLI”zÁþ8¦$Œ2ÎŽƒZƒb}4­§Jƒ.æÜ_ž*ÍÛRšÈQ %ÁÞ|Ò¦V¸P&&¾{¦$òžcEÏ”äPx›x¨5h!³Š* šN¬5h¾@Í”­Ò4Ž_Om óÔoÏD„td62ǔĒaÆî:¨5(–L4U4ÍQ5e«4(Ö»~f¥A¼[<ÍcÔ+É#Ù¾ I°FIÊ™aG2Ôš]â®WTiÐœOE•æF‡Ý²Ö%3¼­"¼K#ãS"¥ÄA­±è,æH=U»ä€* —,Âq¶ZÛ†@8ž¢:“fº8ðJkPÛÎÖ6Sšù á›idÖÎ1%±køáí”D 8àœ3Ô4‘FóTi›Â¹¶E +'ÍI’º9[­9 !·°§Jƒ¦ ·°§Jƒæ §ÐQ›$¼‰ýÑ"Â'id6+Ž)9%É1›¤Ñ.J2ΠƒZ# 8<Ð ž* +g‘O•]d¼=Uš“$=ê¨ «{ó'"| #³‘9¦ä¨c6ÐÑn ÌA­9Pi]O•Å» [ÆS¥9Д“ä©Ò(_U<ÕtØj ºãÎͬ5®k¸­ ýŽj Š†.ôTiP¹¤)ªtMix˜ [œÛrÓYpÿŠâx‰kÙœó䘒HSqk;¨5hÌ—+E•æHšœ­”1nv|Pò%)A®X±GZ³)çÁSkŠ×ß;ðÎÁ–J‡óBAkˆ~“+v”b>ÒB»¦Ò0EeRM••ó^Ù* +'ôÌvÙÌ^úùÕ“S,JBUš—囯¢JƒJUÚ:…hýÌpjÒ óðpf¥Ñ¦h—¹²ÕÚn€™¢6 „ï˜X^d±(ÈBl),nXˆV”D«4ÇÃßh<åï>1¾>É}’Ïv+ØP¾M,O$r6Úñ]+Š²ùõ+Ê>ðÔJ܉¹#¯/‚-…E¸=óy6CYx†ÃR¶¿où$ “p©Æ+@"u³Á$¥ua'yNk'×!0(‚™’“cÖ.±_í@Þnbâ§cÖN¾>Në‰ðv;ǬªÎ±ÛõDx»‰‰cb‡ƒÕ¥E>;«‰°‘#b3·ß0d)ùìl&Â6Žˆ Ž ))§Q>;›‰°#bƒ{¿”šmä³³™Û8"6¸¨»4Ègg3’(Lq…qHŒp0º$Ègg4käЇåÙÕGlå–[üü0Ëç´Üȯx²>¿YõCW¬‡ß—ß0-Ùq—˜ ÆÈó‡¢èënS ÆŽIÇ1çtMË×=Ýì_ðþÄ1|ίӌnï–¼bÒ¥l_̳|-{ZµíwÂß‚ÖmU™õP¶ µ[úãËóò o6fCCKOE½*hÓ®÷µi†Âûa:^ ½›¢ëº§¡{çÁ¦é÷**ªj\W61Ö-€Öû®Ã<´ÚÔ·µÊÚô2™8SÝ &ÿÖ®xxÔÚ™®‡skȺ(áDÙˆ×PÝ"!YcB‚Ký€øŽ–žü—IV†¶í¾Ù¼|†ÝõÕÕÛÛ[Ðs¤AÛ½\aUñè·;öo´+^L@•)zC½Á {©üoüfºîý_nÊàT &§lRþ¦D”È RÿÆ$úü•>™ÆtEEûUU®é¡DÌðáïóOÿA=wï\IèÈ)˜Š–*›uµç¿•Ã«k Ý·ûnm¼'H©›“ àr×6—U‰âү让Ê*£Û~+ù×í¯^vU0üœ,¦~¼}5(ÞIÎØ嫹ê~~q׫Êp\·m3 âRâƒ}2yðGûÆÍxßôš +ÔiiÐ)O7~¸áùñ›Ÿs÷i0; +¯é/S ß¹©%ú¸…d`tMöeµ)›ü¡lŠ®<=6æM‰Á…²ÞµÝP M{,wT™8¹¦ÛÎ`gË´}½B›mù²ïlwlËÊLM4Å)†)VáàÞQ¸Ñ†x°ö0™ç4`ä®èjû|:b.UõdÎìšž†¢¦(á6 ÒØàÃÉf…2Ùvm3Ã&à Øà×%Vh«j0]ƒø~˜k$f\°ÄÑÁÇÒ¦0uÛˆñ/õš!hœ8ö‹óñÇ ì~ee;¥±9éM‡³á¤¹N6|¢¦n7ì›ò'­«ƦÇšÿb)At÷åé‚ž·Ï/ø¿l?åÏç¥ü‰¿_З§«ø‚Ì°‚àôüÏ|xÞoÑ;p¨§»¶ùÇ@Ïm÷ýŸìˆNÅ]Y¼4mÏ~?v-vGýKÏâ,0t'Ïu n_[kÈã¡Å[€Ìs|h?v8qy ðëçûÿòÞ*èVrC·Géyh×ß1üèéŸÅnÇ“|E5š'>óKüüîö¡ +FZYŽN²Sñtà÷Íе›½¼³d"Už›¾ß×;~M'ƒ·‰<ÓSÉÞ‰Ž¼•‡Ó[sÚmò0952=õ0;õpvêa~êáüÔÃÅ©‡Qxò©Ätõq>¤’kùUG©¾i¤ø1Ÿ§¸HÌÿ^žýçìÿ¶ Üîendstream +endobj +1087 0 obj<>/XObject<<>>>>/Annots 340 0 R>>endobj +1088 0 obj<>stream +xZËrÜȼó+úàƒ|Яy”´ò*BäÒ;”å‡à Hb53 Œ(þýfVcºX‡íØ-“‰ª®Ê®®.@ú÷Eêü—ºeæò…Û.’Y‚ß„?~ýëE¾˜%n±âŸ7ÏgËìÝæBàÁá‘B8—æÉÈ+¸Å2›­à³XÏæ O·XÌÖ „Ï4z¡¡b°óläV1Øe1ËıâƒË’ñ²^‚ùz¶@¸ þoa€«z®`îàRfi€œ@†›2 @*›Q aƒÍS +mƒÅ6@¥È +öÉ ÕÀ2¹3›L'°Ø,”çx„Ë®b>žÌ(;Èå’–†" çÜÓtQ° r¾ÎMÁtà!Hš„óU%ô€œIxæÒd¥#©kf)Ü +lQ@~a3™;'¬`°ël–*+˜ΡV´U vµ­kÎKxµ"g€É +Ä¢82…ŠÁÎWÔ0˜*»b‘FÖ/:/lãü*⢗æ<Œó@*梋Y.¬w[p7A&snŽ!úU ›xëM3–ÐÁANph)†¦Q ½aÊò‚á’»fÀ #„!ŠúÒWY’šðH+ ¡@&’Pƒ@*[°ˆ… va©D[Á`W<¨b+ìÚê(Ú +FAhXÅ`ýÎDV0Øå|³âƒË3;UÁV1X#+ìz=ŠJ1:{În"¶¼D +ÔŸ]%¼<°-ˆûšc{"'2¡÷åB*æ,°yÑT17`>ZT1d²vmƒMWh +»ÈCnLG1Xl¥&«"âfÐŒƒµ‹,®«'¼È"kÇ£@÷â‘D@Ä“@Hd!T ƒÅ-¼PV0Ežs¢­`°ËÓ‰¬`°Ö;… ¡ÐÖ +±U ¥£QùdqEXá\`²ë±(JJR1Ø|92UÌtxxÄV0XŒ9ke#`´µU „ó¢R ¿×˜ƒÅí ‘£­`VT1ŠJ1+j•—± òH(]0dCÔQ1XÔ–¬`°uYÁ`½p‘Œ„Š”!V1Óå Ykæ…]¼è¼(=`ÄO +ŒOüŠ€ Â`t†·´šœ@¸ä8íRöéH*¦\YXÁÈ#‰0 ÅÔÀŠ)„¤˜›Ê©,zö$œ0yΩžúˆ6`ñN ÂÅ6Hsš£]ñH¡–S´x:Ch¹Ò®2+"œbpLöa˜ñ"’ŠÁbOeƒE•ãM%8æVçÈ9¬b] €k +äEÄDìAr‘¤8XE9CÅ`mk£[Å`¡[®¶À|ËòÑfé|’b†žµØ*‹c¥Qyéqã³â}ü˜ªí¼ðoZ— ƒr¦:#·:ãÅ›ßoµ@”%ƒ œ@›À zà°ÂBtÉý ¤bª—0šÈ +»ä¨)¬`Dk/‘U ÇH×ULõ8âF[¯º»Ÿµ™ÜÀ B¸5oéÈ D¸¾Lƒ¡b¦ÊQ4š*F@¸ }°UÌd¬Œ"+˜ÉX)DV0XlÕȳ`ö“±gÅþ’И½Lh_>HN ÂÀ1Ò;E…³“{§¢Óó^'N1¢Ørz¡¡b°öº+¬`°ãWbk]ƒ#¬Ýk‘–I„tËcIoˆùÂlÉ™!‹SÉÃtÉóY/”a­øš–°5#DqjŠœ@8Åu¶R1X»³¢©b‚mYXÔ” /ͨ2P„p‹Q‹R1X\çÈ:²‚ÁâCÉÈV0XôShmûÚT[ÖêƒÅ{ƒ†¬Çoë•OêÙ{ƒeg &;pCrT’¬Oölë“‹¬àld}²ƒm†âIÑ+!ƒRÌd­´"+,^P2塤´¬n$¾Ý +ÄQ, ¾œ@T(§¢È D&èèj¨,.àBLMút5|Ñ`‡ô`'…‡•¯,šüîÃVį‰é€H*æ’Ûý³Ñ-€»&S1d¦‚ÁâàZYÁ`¡ó\YÁ`ñâŽe£gÁØ|@ȵÞÁ·yn Ëj…ʼn|PƒµéIXÁ`1µÁq´ — ä¬`°è©¨‡È +FÈÛ]d}ÈØmkw¸œ²!rÄp SYÁ`q rd3(K(²‚ÁÚ9[ÁŸÜn°U W7ö>²‚Ábʧ‹ÎÁjäýÒO7b°øÞ—)+ìœã¦Ø +‹ù*Ïv@ð™À^èøUß~æšöid`ð?a"b,ƒ‚‘eo¬}›Éígº‹FX>wÈðÙ…gñÆeukçЀ‰!Ì0³ð¯Î%!8Í"!«Ž4p¶2gÍ¡:ñ©’?sµˆàpøn:P¿}<>›™C|øµ‹—íçàp`ض0¼ñ1Ë,BFÏs8Û0Ô·½Ø…ÌŸÍa@6 â~:3˜w8ΘΔ@pøB€{ p2 Nä"‡o­¸ƒ]„£'Gœ!Èww—y*ÜÝîL´Kw·³¿KÜÝöͦ¯÷{÷T~¯®o›Óý¾êþòç»ß.Þâé·öš~·{óéØWmÙó©ëûZwÍKçŽUÿÒ´ß:÷R÷OnSîKšªåÕcuÜÙoß&ÑßMy¨Ü¯U×ìO}Ý]}t¥{>µ•ûr¬\~®§®÷;ú»üˆãwÎ ÄtYõÛ˧¦ë;>#ÎhéüûlÛ,›)OÃÀNÉc×!£íSx j8’ÅÒ°•|eçN]µ39Ò•‚~Sîž*wSõï>ý²qæï}¹}ª&)ñ¡Ï×?ÿ²¹Û¸‡zo´ê9f$7÷¹i¾ž'¿~1£´~n^Ü}‹ æv?œŽ[îQçÊãÎ=ê·«ž÷Í«ëúõb~Ã& ¦'sÊBÂeºj{jëþÕ5ÏX†»W?²,̉{hZ×UÕ5Ú¡f†šlŽSM¿t•Šsç°3%jìÔ?UǾޢ’Qu]Õ~¯Z«–×å·óz¥;T‡ûªuÍÍ%j¸ ïšCY[ ’áûIèÿ+=3°Ýî!D·à&œI­¹½º6Ivu×·õý©GéáO·EŽm¹ß¿ºCy,ñÛqâS¹¼¸Ü^xœÊñAœ_ôã“’1£9gíõÅè÷áMj¬³nRºëzÛ6]óÐ;]ê#ªÜm^»¾: /U•Ã~…JRA>‘üÉ—è4±›¦¯¼„øG¡q|¹ùôw[µ‡º£Æî]Ýûâ>·5lîÕvËC>hŠ{÷"˜#]ùïuõÂm pÛ§òøH`Οƒs6þuçF5S—ûæqÚ¹xðpº¾Ã±óXc³A÷T¶Óþp…½Á5/Ǫížêé‘?Ôº]ÝVÛ¾i_Ä;•Ðö!Š5øCð1yf´Ù×Í®~x¥>Àÿ²¶/¶´õ EDËA›iwƒÛ¶*û +uÞ}sÏe‹k6Ó ÿGXÙ矟¯ÝóÛm‡‰lNÏÏMÛóæòÇ'›e³Sõ°rÛì|u’“ìFGej÷žiq™>sÁ?ýkb¼©z£?´5:Xg]à§(RÚXŒTáqéöeûX¹ãéÜÚlÁ@;áÕnG7¨Æ³OÔfiŬgåöë4>/XObject<<>>>>/Annots 392 0 R>>endobj +1090 0 obj<>stream +x•ZkoÛÈýî_1ØE +Ԋć …ã$[/b'µ¤ß +š¢mîJ¢—¢ìøßï9wÈ™#% Zl`ûøð>æ¾æRÞ?N&nŒÿ&n–¸têÊÍÉx4Æo—ë_ø7Oñuã²ùhуµ»9¸qóù(NàÆMÒt”™RÝt–ŒæPº˜@¥žË£)¸yFƒÈ „ÒÉœJ©ìtr êÕfÓQµ¤ªw¦ð*rir ·"©˜ìŒ' jƒÅï•õY`6n:¥^tH b0f`'J“CR1Ø”QŒ¢ŠÁNÓÑLYÁ`–Ï`Ö» s¬ƒÜbkÀâáÆÍòÑÄM'Ðjé jd€08YÐ@zƒcfc0h ì9o!p©tLT 6›Ðd`Íd¾H­ôòß<0“Bpœá‘T 6Cmd½Zä¥7[à[n€jÒÛ9NI/8¡X‚)¾åÌŸéON­d–ò<³\y%('e—ÒÞ—-äÖ–¹(—Ì|l”3`¾DH_Ôk$ƒ…±\YÁ`§ùbÅ—ŒSž2˜U 60@µL2 zšQ­;K„˜i9ƒ8Öz*‡¬ s"a 98G-Рb°*J+ˆú”Œé>R² ;()îp`FN Ü9”ƒéŒ¾¥ŠÁæVu‘ u€„EV0S2?p׎’¡¯9%Ì® ;J„8JŽÓFN L&=‘TLwS(V0ÝÍánd½C3¦-dœ:$Ðœº,pð}€p6£?ƒ“ÍIÅ`SV—°‚Áâ¬X™kùYÁˆ‰¤bEW§"ª,.¿LYÁ,Á M5+‹ËPe3mÜTDV0XØ™*+åëh.¬b°°‹dYd,¼Ù8¬ÿ‘Ÿ¤GcÁ w ÿ¬±‚ÁârÅL“±‚ ®Ê‘U Ù;`ƒÅ5‚@Í6•8eýTbÙydfÑ»†SÖÀ +‹ŠG¤L“É +†YÌ „&°ŠÁÚï…ìs€PYï2® ¿?p—ä¥2·}š/}†S s!¬`FÙ\Ž²‚ÁN9¡DV0Ø×qaã@h„\XßAxãFË (tØRHÅ`q¡m#+˜.YŒëb#fÛbñ„ChT }sR1]​¢ŠÁÚYoI` ØŠÈŒ$–ý»NäÐuHT/ÇQ†sAÅtˆK¡°‚Áâü²‚Áâ½4›»xKeõ£'2¾Àú³ˆ …T(ô†á bÁ᳇‰p‚³9ÈYîPCVÓx3Oß…RŒÛ{ä"d“pÁá'rfÎ^ç Ò̈æÎôG.B¨´Á8àl"G.BpöʹÙëöi!G2}Èi›á×AÎR—÷[{6Ãé Ø"Äñò…p2š4å"„›xÿâG'ÈRñ7Eùû=‚í+Tˆ!^¬ad®÷¡oÅC“*ÕV8-D.-/•[¶û]çÎÊ&:8L Í}¾®T•¼êã#\Û=æÙ¹éõ£æûª­Ä“Ÿ>nO¡öôýúå§ÿQ\¤é˜÷ó[7rvÞl6p c7˜ô]Û6ß\7/»®Ú`̯벮|D uW÷Ý ÝcßÀ‡Ö=TëGWbF]8ô÷ñ­u˜w×´a"-¾¾¾|wÕ!¹¾=Ø+­¿]w?»«ª{Æpè'%%.?”«óº)6¬ëçƒÓi¾ýxyvqõŸóWËëFÝ×ÎýüŽs¿/6÷_ƒ–hUÓ·ËYÙùö`IcxÆÝÁ̓i¶~é˹W½Æ@ÿ~ùý·zý¯ö¶Øðõj<çÿÓ`½yusvùæŒeð[Þ6åž“# S¾ññÓÙxÁçõÈø—Ãy†] DÆs¾[žüëäObçªæendstream +endobj +1091 0 obj<>/XObject<<>>>>/Annots 444 0 R>>endobj +1092 0 obj<>stream +xYËrÛH¼ë+úæÙƒd¼ ž6ô°¼Šµ,­¨ A°%aD´<ûõ›Y v)oìÆDx˜Î®ê¬GW7é?Obá¿ØÌ“¦nO¢³ãÿxøz’g‘)JþÙšr~VN`m7Kð—­Éçg‰)S°5óùÙ\q +¶&ŽÊ³X‘ƒÍŠ³T³ +ƒçg¹fnMÍl5›Új ¶˜¨B\H‚*êœ;ÀP„¤8?›)Rc°IÊLˆšj ¶ŒN`f8Ãñ¬Æ`ãôÀVc°™T'Ø*Üš4Šl]°ÈtÆ`gŒ\€ G3fÉ“»`!8°~ÁfR÷À*ÌTÌ(ɳ® Ó=†VËèG€´Z€hQÑç9)7bzRc²%ÖlÀ”›Ú*L¹É$‘ýôP” &Á9c0›I€`kfÒžS\ÁN +\€¨Y|À)È0¥A½¡Æ`ÑFÚ­ÆLB6Õì±$93ÚŸÒFr„&.ÆÿQlOjLI %Va°hä/° +SRÌî ¬Â¨‹;žÕ˜g¦`Å=ËråóT&@š U`4 +¢01@à„t‚6Ô˜j¹c0Õ˜]!Õ˜j“[Á¢Ëöê)Xc°ïz_1ÒÀ¤{sŒ&NŒ ++@!Û3¸“.Äž‡òÈMsGäÊ‘†˜ã(ƒÍè=°NNI—á„€@· +Ê寞Ã]¶‡Îi©Hn²Ç`17cÍ* v–ãìǃ—¬šßVcdX(VcÖ%?`]¨ÉLZPîâ\€dW³ƒØ4Iœ'5+£K± +3œŒ-êmå2Ècþ%s„;Ä]5+Ï„À:S\.ì†÷- +r¦ƒÍK*ö¬„š•¥4 ŽEjªˆ&cŠ§ œ¢sµ¡Æ`ç¼Oƒ©ÛÑs\‰ôL€lÉQæ ô5ì<‡éº‡.ŽR‘ÎiKÉ +^Ñ™:U†}¦HÁÊà ¦ƒ-xö«0º(å‘ ¬“„ÛVÎoFI$ν$ON’&Ë~°i`†m#ŠU˜‚9L«0;<°NpšKá¢ÍL&€‚ź3E&`&€”‚8ü9NaàD=9P§ ”&%µx§N ^ +Ò$% Hòœ¦MàdÚ8§ò ¤8M¥uÑyôâ€wºçbÃ\‘S+OT0Õl>CŸÖm*éĦ¼õS²i€tˤ3Äû˜§Ú©ÔN\Œ÷w/\IRc¸ÍrT2°râR¹§P> ¥‚0”v 5¦[ž#Å* ÆšUó­l5 OGR”Æd9€버d£|6¥h© …S(p +‚có).@¦Ê@jÌ4°©ëä$îû‹Û_@3qnÏ)§h08õ¤Æ`±š3° +S«bv™G0ÞÖÉE98£œ\AîÄ9}žSÐËõä$w²œäÖÉݳN^`†g¹:RÏ:¹‘ûv‚úZå*ÈoÙ@j Çùõ¦3¾«0ØŒ—‹b+/ËÀŠàQpnâ€ÆÉo€0ĵ+Rc°èÁT³ +ƒÍSøŽ5‹&°` `q¹°bsvxÊ·qŽX>F# ö‚ÎÙÉ\@ÃòÇ$7㸟‚b—(ÎÙ¡Q¥ë8,Ø¥®$Ž‹ÝÛ EÄ @bP.Hìç9g‡oöŒÇ… Z„ÞD;Ü®>tù,VŒ|bð.ˆÝg2bƒ{_Î)WÉgo31ø_±)øTGixnä3mB—¹¸°Êï“󹇸|öûL +P”l”No~7•Ï4B?Oˆ-+œýÃDŒ÷'^I<éûú{„”óôxæâñäó5R›ÇgþxZ”3ó¸’ßN#óXÿvQÕo/}·Û¬þöøÇIdN±e‚¿=½V£ùsW­›çƦ2W][5sÙmƾ[¯moº_­ÙØñ½ëßþNØÁ{øG÷nVØ>Æjl`òÜlV¦pâ°öÅÃé»1Í »Ü_]b'»²+·LïtYmÌ¢j—•YZ(eL»íGÁb¨Ü;æÆ v40¨&'W—ÿ%¬íívÝÔÕhEÕÐ.·Õ0¼¯ÖÚ:eø•Úç`1v}³yqŽ? æ÷ÁöŸo«úµÙXs^×HühšÍs×·.;È0‚ùvu~o®šÞÖ°ÿë8±÷»~Û ö¨`7¬ËjW3ÉGÔb·ÝvýhWÎñÂö?l?/ª_m[a÷•y°kQ3¼6[3véÃõ%Ú™lÝüœ¤Ó….šã¹yÙ…Í{3¾Ê®\ªkv·µ õÙñ:”ÚϤ +á_ÑÉÛÁ´Õ¦z±­ÝŒ\®*¾°5ÄÉâ£QëDØ°µuS­áyûf¹ÑÊ(”ÑvÇIüò³j·k‹ˆo®ÍT„g‡FÕÙÇ0[ªo§:º›vÛw?P¸eß½ì$4ˆ  ½ò%ýÑØwÓ=ûÅGÑ_ì} ®|©èïûn¹¶-Z}èÖ»}?é:{OUÝwÃ`†ÝS@äkM~èU^áÔ0OóÂŽ##•ùtó}óɆ=ŠF-órxzÌÓÝÃ?¿>Üý~ÿÿ\ÝÝžß|çjãu××”!Ùæ)Àlá¸k«aü æ¶zSk±jn¿\ü½Ãô¨–Ýnd.ªU ¦Z­ïÁwÔín=6l©fƒmŸ«Ú­8蒅̾-hΑMÅðs u=.»v[õÍÐm\§©šßm×]ýö¡‚û®:Jå7û´«õÊ|z®Þ¬éœÓOø £ÿÔ¬ìC ÓS®›Ã °?æ°[zœ…[­ÌÐü[†ž®ÒmõÓül›ãƒþ ÎP#ًתG»Õ”C%ú[÷bÖŒêÈä©YY³Æ´þ¥¢¾z?n›'Ìk&Bm  øUó« }k[ zôÖv;ÉÖA.Ö¸J/×Í~D|¾.§O²¨Ä¿2•ri/Îo/Î Îï¸9pÖ;Ž•0YcüÊÍ姳hÎKþ|9Œ}UKö2>/XObject<<>>>>/Annots 479 0 R>>endobj +1094 0 obj<>stream +x}˜]oÛF…ïõ+æ®ÐÈüI]ŽÓ$ÞÔn¤Ô½È MQ6[‰ôKRvóï{fVä)@Q4ÀñÙ]RÿŸ…à¿P²HâTÊý,˜øËôÏ—³8’æúï^Ù<9Š¬f$÷² æ!1g—Eóvi4_JjBíHÂ.Æ#ž9»ÅržêzER¶ž—{É<♡$E|{‰–ºœ 5#¹—d9ˆ‘ÜK¶8a$÷¡æ79e GÍD]q ˆ4Òª™ÐpHÂ0\ž@gi6H?ÑèAèI:KÍs²#‰`pè`Á ÚÎL0z’iÿÐS–iP¼}"gOIƒ.,¢‰:ÇvíMŽM‘ã‘:Gž’†m¬Ÿ +ÉDu+ÄK- Þ?tvœP·$ñ¦7®g¶©cû^±cv&ÔÎ1ÛrØBZ‹Ø„2’ÇãÜ3g·pß“é×@lBíHÂ.Få'¨,B.ºWqôeG¡>-”shŸèÚ +'ñÝ®éa¸±ž µ³Pp#`@ñb‹°ðWÉvön=»ü"tYoõ‡ˆ4Ïd½±ß!Y—«]û*ÿk릳þkö6·ö.¼Þ\\ïêªd84uó¨Øçïò¥ê»ÁYÁñd¶*ö…ÍFÚá©êäúæÃJJóe󳟋²n†¶øålÛU$.lú q—E#7R¶Í¶~< ÝÛÕe$÷E÷,×mÓTå mGL¤è¥8.%[0‹ÕÖäÄÿÛu,ß.šv—øöæg·nÓŸ%D§á7šÿsæŸjw…Hµ2ŠôýX¤ºïU/¯OUã¼}»PøRu}Ý6ßÞHÝË¡¯6œÁy­4ìM‹‚>/XObject<<>>>>/Annots 482 0 R>>endobj +1096 0 obj<>stream +x­VMoÛF½ëWLÓq‹ú¶$ßl IshƒÆºä¸"‡âVä.»»´* ?¾ov)[v¨ Á‚Èý˜7ïͼñ_ƒ ñ™ÐrJ³+Ê›Á8ãÍÃק÷ƒéz‘Mh1_gSjh¶¾ÊfýSMw²Ÿ³u6§ùj‰ßSü9¦2.LfsúÆÂlš]=»ŒÞ­i:¦M LWËmŠoò‹_í‚¥ÆUפLAöîn~»½ùyóg<ps* ªÔ=Sg:ß©š sႉåÓ¨#êÊWB0’J‰|Cvgmø1­ž¤Ÿ-²e¯ýY¾4J‰¦­§V¦½²'Ò3ÓAjÛ·œkÀ³­Hï#¶¥ÄFmkv˜ÿ漓 ÿ#ÌFퟗã3`±ÅrôHà(Ó¶/Œ>šœI‡·Ð¨ËQ¬½µiZ]£@¥0ºöèPÑ‹^¦Äõûž€Œ†þ™£eô¹Gå¹U(âï¡Ž}¡ó¯£ù¾œ L÷à À_󻊢ÒtôÉh.]‹æ6 M¤ÐÍ|¯mçéž‚ §&u½«BtGi–è©Ñ–Å,š¶?$6&XÎUvœ*)¹ø–1ÑŒjN@Ñ› w¼A‰6ûQ»¬Oå{ *}RFÈk(DÒìÂËôõ¤•#R|ð”,HÃ4S°÷Cºá{¦;½–&™³ºi­ Ê ë1JŸk§¡yR(4ÄŽ“Yu°Þ’C^É£ó\—cîÀF  ?Ž +§Í>îp}ÐMWGcÌè=‡èB¤“Q…å÷YÛéæ¢âÒÕq:ê3 +Êaxçûã%^Æ(Ñ30¶pªcôWøD&iI2ý KÓ9Yq ÚÇ…+Q~Ño’'Ç€{1G8Š·Þ­Çñ|–Æñ¿þ 3_³ÕjžfôRPý²ü1ø* åyendstream +endobj +1097 0 obj<>/XObject<<>>>>>>endobj +1098 0 obj<>stream +xW]oÛ6}ϯ¸ëK]¬‘¿'ÃÚ.-‚¡IW»Ø‚f(‰’ÙH¤CRIýïw.)Õ®švKÛ‰.ïç9‡7wGcá{L'š.(«FÉrIû[â—ÍǧÉ)Í–'ø|²Læd%°áô——Öv:Ÿ|±À¾3¥É|œL['_=8]|{àåúhøú”Æ'´.áb9¦u‚h V^nizF¯¬^’ßHruJ™Ñ…*+¼2š +UÉäÙú<Íh ìéxr’,àk°ÞH¤&ðãD½­ä#‡)|ËÏÁÄ‘kÒ\Y™ycwÝÃ\9oUÚpÌ„.`S–Òyڙŋœ=Ôœ‚§É„ƒgˆ[4Uµ#g‚a&49)icBD³ewŽJCÞ”.,ÇÛZ‘y•É„V0æ²kÜŠó0–DUžÅsÉ‹dÖ–LNq±H¯qœÁ#UÓƒiªœR4ÆÔˆ¬tI•ºåpÊÅ~Žè”Û9NfÓ üÏ“%ÞQµ_Ëʤ¢ú»+ˆ:| «coKkš-ýJo¯ß¼¿úð®5žŒã€:_xÿ¸A&îÞ`S6\•¹…?m¾–a(F£ùé ÇmIÓe2‰%=lT¶i{‚þb>@™Â|Ò ½3ZÒƒò|&‘e¦ÑÈ$BÇI{/ís´›û(a„IâEYªL‰‘jQK2¶Ë¸È“Pñ. ”½`ìÁ8¡›Á¥ ¨x0䤆û¶ú ž®D +R±H©ˆ¸yùþêÏÕÅå›Äö½¸Œ¢\z¡*wó¬H Ÿ/AùïÃ×ó–S`èPÚyô'>ëø6@[€Im|÷œEÈN äÄM˜¸ý“¾t i)Á"CYd» +ܲNVEáo9×€Ô̾m›ÒEŠÐѬ—´­ºÊ¶n+3U(Šœï%ÉŽ9¡~’7&a. ÑT¨Ó2˜«¹e»¾s[‘6\÷üg‡•ÉD5DB©V*ö‚Ü<ë—ùîjƒ*•†ç:ÊH êu2k¬òé= ç‚0p’-‰ÈmXô ÂIp¡`3uW!SöõˆBHŸ m–‘øz8hW ˆto¼»ƒƒôòi÷Œ„Ö¬œ|K¨¬©xË"t ¥€e”˜$Ö‡Xy'Îؼ±yÔ“pÿ€š÷”ÐÑQÌ @.t/À +¬1Q\vKK-àZä÷Ð^uÀûàø퉱Øk#»oö-Ðí Í|À‚‡±HͤŽ iýÆànàë8ÒqD ×N+ÝÖ=®RåÆcÃ*}רì¿ €«ÒÊ+6¯v@À;Þ^ö´Åº–Õ)Ö^œ‚®ÎÅo‚¾ïÀZ>wyµ>ÿ…Ö¨©0¼»0ãƒv¡Ù¹* ý{RAGy¤ty±bâíç@Àn·=7ŒrëÚT—í%>^à_ƒå”óÓd±˜‡”_¼}ù‚ÞYó »h¯–pUqÓŽ»#Ç'#ì’m‰ÿ{¥Ÿ-ùŸ”z]²ÃóõÑGÿ|Õê^endstream +endobj +1099 0 obj<>/XObject<<>>>>>>endobj +1100 0 obj<>stream +xWmS7þίXè‡:S|öù|#“¤e¦!)¸Íd&3ùN¶¤üïû¬t‡1y)0‡Á«Õî³Ï>»þz”Rß)M4œPVõ“ÙŒ¶»Â}§ÓdL£Ù¯‡ãdHVÒ¶}œ~x4¶ƒi +ƒh;€}czÈm::KÒÆt4ÁË`ûj~ÀsïíˆÒ”æK„;™Miž‡›û4Ï:sCÂÓÆÔ–^Ì¿õÞ"§`ÜéIŸõœ´·*“.¾×:ê$ôqcÊQ.—JËœTÆzJ‡g=ŸU ],I¿Vzµkæ×R“ÈaOÎáq#ÙwŸºé0 ¸θ—ñ¾ô!ðî`’Œø]-ýB×uN·w=Ž žZ[§JU[lhi,¬§½:¯8WrkS9­Å­$¡Ijo7!–ï_¬]ëéÙ{/å½'™«oàŠÜ}ždF/{é €€ü 9r¦”HF‹vðéÓ×5MFÃÒ'3üH´÷µ šóVŠ’P#ÔçN HkŒ§^íl¯0™(zN” Ñ[(Ýså"§ðà(¹Fà÷·.8ùÊÂ=ý皇ÇcºM:ÃY2ˆéÌ×’ä½È<¹öâžÌò YŸõVX%-¤¿“ `­Õ½t µô+ \•60-•ÆO[¢@ÑBÐÐtU«\&Í?[Æ]¾Ÿ¿yI×(Xs‰pç›H5æ{ulŠò/0ûÜA«peùX.­ËŒ•Ÿ_p›lÊO¦Þ‹²¬¨¨bnÌÈŸðGhšCæ[`⻪@ÞP)EeI ·SÎ#çÃ(½×0ÖÔF¥ }YŠ i 9§ÚEDN”öÒ.Tè„Lå•áÚ0-Cÿ°©«d¦–›àÅn+]Ь]áÆæ¥p7L  y[× ]Õ:æ3nÔ’;T­öó.6 +n(7úWO7h'ºcYä:.¬y&€>D’å'܇û½·í%;r/ìßù‚s J@O("î°µ&¯JyJ‹ÚÓR¨Â€a­x ÷µŒ:™Ôðþ‰—γ&óe'‰Íbcr†ÊžýŽi¶…ÉMРýª<¿º¼¸ü¯è—6öâ‚‹,“B·§1U:ÁI…¸²Ì” DTïõŸ¥]BsŒ FnÌR +4ÖVë¹BÌ(W1‘”€ïœrQyíª.AYwÊìßg¹ÌªÊŸSçæìÝmhiM«Ù–º%e¯Äû0^¡@pü#GO©’v-*G_¸ÍxÌúãïasüaÆ) §EÁsÓ#QAën=7“ifÐ6΃LäÉÍÛÝK½QE r'‹¢áú¥˜Ý¼t‡w ×^V4^$t^€Zxu+_RÈ<0Y  ” Yý1xðÓ™£ñÛ y‹|vOíV/ƒC`Û©`)š©sû V—¦­ï0,Ü z]§ÉùGGó/ÇqÒ®[8Ÿ™°ÏÏçîë ÒÙÏœ “·9»]Ÿ_œ…ªjÉ{™Õ^, +Iw*1õ-o²u åøí>Öå 6\¹fû"eàbð-Û÷ô ¸´àI +š£9c,!,£ÊfIØi×h'p(°¹…öñO§VZ>/XObject<<>>>>>>endobj +1102 0 obj<>stream +x­VmOãFþί˜žZ5HÄy%/|hÅ•£Bºƒ^“ +UM?l콇½ëó® ù÷}f×NIàÚª-0YïÌ33Ï33ŸOÔÇ÷€¦CM(.NúQŸ&³y4¦ñlŠç!~*Ip>D³×FçãhøÚÁ`4yãíò¤w=§Á”–xŸLÎñÎ2!øî÷iwN–4¹ eµ£\Y§tJ.“d3QIKâQ¨\¬sIFÓÎÔYY=Êêtù †Î î§Ñ†;_‡“As2Fçð‹[¬ã\Ií¨ûžÂK£æ¥ÎŒuZ2›£®7ÐN%ùÕÔ@fê<¡T:Z‹ø„ÇMfów˜#ºÙp ”ý­ã(5YSH—qÐÊ’Ò±©*»|‡0]]F ¦OÝÁ)‡û[ã$î ¾Œ÷ùªI(šDn ­%ÕV&ä ®KÚò‹mQ؃\¸¯è½Ð„)Cr,­:¶Ž3öÈ÷ýæ>]¶ˆÚ„4Å™1Ö{¯(—2€¸®”Û…09êBìh£4à1®…(Ötû\KëPg*…µ[S%ˆbc€V9Úª<ÉØ#8!®ˆ´9í]Ÿ·¥}µËÙ + W)hn*J¤½l„ !'ÇÞ9’È|dãm· +ù®ÝØÝ.‘$-…MéXÛýå®Û‰Mÿ kÑ’kècÔÁšêÿ¹Œ´ÑÝžÀu»: Qü©£îhéå3 ò‰Ö »÷vØc­ÕSSÚ`ãßI&ÜÝë…z=äk/™ž` *þkí,w¥ŠEn3°`qØì¹¹pÔ*°ƒÌ°Þ@n¾Çe­ñ3K,—` —Oië`_&ÁÀšÏöF9û/@¼FÒd‹Ït(4 Ô‡ì=gâQ‚L`7Ô§ô³Ûtsû‰P Íqp•3Ðý8¬ß*ĨB¯øT#Fo_Ðoº…ýµå™¥t°Ö:y†ð îŽå{ È'Q”h°Á! 0e|jAÏ5dªˆ9ëáå&Ex¾8ÜT—3*äv¥¼x¨íÿ 1÷zÞ]í;-ã›6|ÀúÙ Öo*S@œWw‹3âv…ßJÏŸüŸÛå›DŠ†ý œ ÎènÑž‘tqEJi¹ÂWšáÂe*L­½ÆeÐ:dú嘸X­îon¯îî«Õw!¤v2ÍѼM£…§ä‚Vø +ªç$‡ç— +w÷S‰a••ò°þW@yé¯`*Éß°{ìÆï±c6äò•|lRær] 'ÏܵÌDC´®SL“ÒTî«Cê |-mîyð`b¡ñêÔÒ•Ã÷è»ß‡+¯To£9ûÍ ƒ*HÐj* îëJ?Лmfh[…ù i”Æ·©JØì 7M7dë4ŸóšI0¤y÷’HDµêÀtCÑvÞû“Õ)9„,4ôÏëÃV ÝÌïGT¨4sÈ„à9‹)Ç8®n.¼½[Ü,"÷„é…øèúòã~#Á®4ìź;Çë@+~±ÀŒä¡âÇ¡ñ«×³N£åÖ¦•©KDóÐö¿Ÿß]^}x÷|Ìb{hÆ~&ÐY$¯?uKk75…}ÿ&¿à˜Úªõ‹•rÒ÷àÞõ¬™ƒ VÖÙˆ&Óf7Z\~x{I?Uæº#j×–=Á’³Úm/t§ý9ïRÿañOÇÑt2 {å Ïæß-O>žü³gkšendstream +endobj +1103 0 obj<>/XObject<<>>>>>>endobj +1104 0 obj<>stream +x}WÑrÚ8}ÏWÜÉKé ¸@H;³„¤;̤”-îf;“Ù Æ–XK†ð÷{®d'ÄIv2!€%Ý£sÎ=Rþ=P?élDiqÒú4žEçt~9Æû!~KI+ÿàbto<8¿ìG÷ ƃ×3®â“O_Ïi0 x…ê£Ë1Å¡r¿OqÚÙ›2Ïö*“]²† +qH$ÞÒhI2·’6ÂÒF9:˜ª¤mi’\$tæ˜,SŒ&å"úe*JM•g$r¬Ua²ÛHº»»ûÿ>éSopÜqÖ±Êá‘!› +M‰HHY[IKfågXQ$¢—©µ´.ªçG` sï6R3Z©G?¸´¸½™,oÈJ@ ÞUÛL8¬‹ZŒ$3iUHí„SFÓ}Ç”V•©ìLÞdÜF8Ü‚¬å££­,-&îUž£<ê€)¬’¥Gùéëg$ÓÜ;¼×J¬µ±J¯iȳ¼ô±$½!KÒ™­ü¾6b:µu"ÏÐz‡Øï} Œ†Â0“—µs=›ü9ÿ¾œ-#÷è^®ßñ»/üǃf&ê%߇½LÍVÒìú=°WÊäJT¹£%«Åj[”äB?@Ø0;¢x£,äÁš7ÑÔ™½¥Äè¶ø _}*ÌãA»e}. ÓSÞ†¤=wX!UQÏAQ ægÙÚ?Öæ¹{:ðt.ÙghïÚ (<ßÍ,À«†N-µ@’v +ñÛ”Ê8…8¡‚ Li=3M&ÏdI= Cø¼ +ܱÃÈD4ïÊT!´L¥µ"ôÇ!óÉL¼¹*TÈ"R˜rgZäzùu cY­D"~2ƒŸ¢†Úc®µ”«‰~±'Ó÷ˆ…Ǻ‘2 1:?´Ê–²J³‹E¶C—‰µdbšpY_†=î³Ö$6­px¡39$ïVwk¨+­,wœÀÐ' kl…µh‡ÌgËѱàuǺi»°Šäå|‚öÆ}õ›!¡4 †uqaý3O@rGê {ií Š.› å}2au”0ÚÓfP‹Fûã”B °=ý†}¹¶×cÌdâ^²Öj&¯1;ó— øX#=8Yܦ.‘+t¨ÅQ%×_8RÿE»ÿîê@ÇL >}¾¸ÿØF¶”á8nú较AÀª+‘CÈËP +f+“N¨ü•ÿçÆÉ/?7ê¶Tˆß+Y±ì Ü õa_3³!!CRÇÓŧق ,Ý´m#{K¤ =Û)¢¯@蹯M¦Â‘™Kn»9²\Vª½,ÜÁhLyðõÞFmt«®¯cÖÉaý\"A‰àð¤Z{¢ß<ûÌS²*MA?ç³Ø`‚¦^EZL¹äs–=§ws y¨p¾ï4˜Fì  Ê#±”ÀBв—Àõ8E¸ÍÊP‡±Æåhƒ¸^º]üð¼8qþla¹Ö®Y'Ÿq'®KQ„«ijNÐú‚â µi©¶ŽN1Ï>臈2¬ÅãÊ*õ.nœz{­Uùÿœsp×ø‹¥ å¯åßdÝDÔÅ=C™ñ÷‰t`ñQŒôÿõqÖT ëÎkŠÃVG’á|åû¦s¦?˦a¸W”Ækîh"1•{:ø«-¨;Öþ•$~-o€ +¶øŠÖ溬/zƒþM¸<£Ñø’¯ŒËÉ·« ß~ãH§ëãë-¯Ök†÷ÆýÏ<þËèùø<.qmŘÁ€§ÞÄ'ü§% Îendstream +endobj +1105 0 obj<>/XObject<<>>>>>>endobj +1106 0 obj<>stream +xmVÛnÛ8}ÏW ü² k}«í<ô!iR Ø\º±»E`´DÕl$R%©ºþû=CRŽ«EY"çr朙ù~2¦þi1¡éœòúd”h¾¼Èf4[.ð<Á+© &Ó7øù›ãùôõ«õÉŸï/h<£u 'óù2[Òº ¸hŸÞšüYé¯gëo88£ñ8N8vú % +í¶*ß’3µôª–ŽrÑ:üñÖ´›J’rTEC[Ñp2G0°°ÞJ„äw†ü¾Á-Sv§“]-eAÞÐFR#milß›= ZÝ]‘“ö‡´Á•Ê:ÏîVæÆ¡Ar;žfvãUevfòJIíÙ‡‰V诒Ùì="RïL#5T2ºrp  öåáxPH½§ÚÒ ðBø“kd®J%‹WîaJcl€-÷yü%~$Y íUî¨Õ…´ôI«Ÿ|™ï©Pe ‘AiM .§ž.|Vº@²ý#­SF3̽¨V¢Þ€ €%H5¡­øºXÄÏР¢!U-¼Âû2×¾z:}:ƒÄâöÎË…¯*>¬ê¦’5‡ÔX¤g{AõÎX†Öw +d:dëÏšà⢇ÃûoJߧÔÓâ˜Àõ(”Ü5b¤ýÊ=¶Ž} º/oÑw© C˜hÀ…~‹œ˜àÌÑo4…Ñø®¯r}ã‡0Ù‘åÓ©k±@h¥ÀsOg ·ÐÐöá!J² %‚•¾µ-÷haèáAâºJ Ø±+´‡ì#Møxø«Ù]!ø¼ øÑV‚ ÃñÌmqò&ÃUåú†Œ:ª Uö¼sð&Êõ".Ðm­°Wíx‰8,D"gÑt]:ìf“S5x*´4­ëT­0AÂNA—] dµ +:GÏãõÍý—ÿîîoÎ)<>Þ\^§ÇÏÖ7<݇ËÛÛãa¸Œ\nåHs£*åÓÔsÃ¥€4‚¥÷ﮂHÃk G>{¼‡1—Âzx¹DŸ°äiÍ2ž|µˆb(@]qaéf—gžÆ[Ý8þø.v®^*awäj‚lÜVxjl€€ž+ÜY€›0åJvLévÉ•Œ{‘«7VÂ’g%5û#·iT¨Ê¥—iƒϱ¸/§ôf: ÷éêòîê’>Zóšk“·¼<æpÊÃîÂp1ºàö6¶?þ6[̲Å|‰õïÇ~u³>ùûä#4dendstream +endobj +1107 0 obj<>/XObject<<>>>>>>endobj +1108 0 obj<>stream +x…VÛnÛ8}ÏW ü²-ÐÈ×ÄN>¸ÓHìl¤n·Øî-Q67©%©¸þû=CIi*X$q,q®gÎÌðß³1ð3¦ù„¦—”–g£hD³««hA³Åß'ø³’r,ôãÃîñ€ãÅ8ºhEg—Ѹ“ÁlÔ}´²ãÙ(ºê›}Ÿœ o®h2¢$G$—ó%YÐÅ›ôÕµ{mœÒ{:™Ú’åN“öIÚ×É?AwÊâıŒè|‘ÑÄ—•ƒ¯ S ç$„Š‚½à´‰ß5›€-6+vʼnŽÆ>Å^¹Ò2jßM.£óY»ƒ©‹Œ2CËÛÛA°ü†”OÆfÅ8˜£F,tOðm•Ì£TX™×œ¦c8ª0€³mŒFãù÷JE%vªP^!/ÔXål´õ*…-Tg¡6áz9©3*%€#YB0æÄìÌH§ó‹$² ‚׈›¢0GΩÁ 3|©Ìj4@Àzñ¶@±úÅ©me•ãˆsÀ¢@]¨BË6Á„˜™î/)@_:W—Ö±‡áÍ/»Ö¡ÒLO¦)õš@ùrî!A/Y‰bây¿þ¯þX=„´ÝèN–n׫MB;㺗ÓfoM]Q²Š“ÛÏ÷\ðÀóÖ3s€ÌÖZ3ÖG¥3sDw°^ÃÀ„H¥öèº +Ô¹ô|–*µÆ™­“VCUó"}ŒhY€>Zxõ„^zÓÀ +Ç¥81öó/­ó« ‚ûî ~{õÉÀ£Œ³ž×8Ì”o¯û¼Jšæli€,*U!lȘ1OØŠ\RÐS{×7ñ3^\©GmŽ¡ŠZ vÐ]ÅèŠ^è &}`Ž+wFTθZýw¦um5{9 |Y "ú +<ÇD–ÿð²Uä¹D»ŸpḔM„'Cï·lxx3¢+ž¢ãh6Ðùä"Zà?FÆ_ðówç;‚ß¡ÀeÉ…~ª–•±ÂžÂ¼uÔ—¬ˆñŽ†°Ò?²Rd€˜ïè${½qÞ2ñPÿ´ŠWª1-ãøóÝŠÀùx½Ýð"Ãàß>Ðí2AloÂ/ïÞ/)þ¼NVÅ[ÈØÞÝ-7×qI;¬ãOÛ/º^_Óf›ÐêÏuœÐzC«åÚç¡óÒiu³ô¾°E…÷@ƒ©‡É@KkAÐR:'ö Ó‚[ìã'ÿO"8ŠXKž·JCÀYn½DÅz!×:ÇHÖÀcãí¨Ê•Å`K2}|¶Dë{ +L´Ò™¢QÂhj,"òÐwÒS]E$÷oéN€3˜tÍ`ëùJŸƒ•§@ÚfÃVF¡-8ñà¥Yßm"¨0¯ +¬ùÛ·ß;KlT¬f¸Cˆ'm˜s×›¸½HS ²ŸEÕàEº =ÒñÀ«Qa${Yt´o¢G:uðу ×,…ïÌGmÐ[ ÌíxUQc^~-°€¿aä xTWˆÎî€ýýr$|ñx>ÅjàKÑù”©ËôfGãæø§Á‡Xœ[¦¸f͆x•šêãU»Šº(BvoxpEîWÞ‰¿7 ´c ¸ÙC,0•+Š›GCÍvjñí*WûÚ6c7\¸L.é){x³øq;ÃòbzÁéüßÍo6ŸEóK\IYx<åxVÉÙïgÿjendstream +endobj +1109 0 obj<>/XObject<<>>>>>>endobj +1110 0 obj<>stream +x½WËnÛH¼û+¼¬X”õ°äÈÁNœ…¯ã…ø2$‡ÒÄ$‡™!-éï·º‡ôƒJö¸6,Kä°U]Ý­ŸG:Åï„–Sš-(-NãSZ,ñ”æçK¼ŸâÏiÊåÆ|9‡7ÎÏé4î_Ü`r¶ˆ—ÝÑÙY<{1rö>>ëmÌñV¬_®Øby~ñ—9M&´Êââ|I«LîŸÒ*=¾µþ@ßmëÈ—IœÚ*§ÜšJµ§DSaSÕèŒLõÞ­~¿ &±u<ÖM.õæé«ûåÉÖ»1[*Æ^•‰& O¾§É<6šMb¼ÍŽWÚ74}kø”FSŽûø[[Q³Ñ”Ú²TUFQmª5]^ÿyõퟫoåΖrâøts}u»zu»­ÌŽ»‹é:§½m)³Õ ­uÞáo2wð¨èI&¼¾¶•×l¼â'­>ݯïÈÛ¼Ù*ÀoÈVJí½ZkòjÏ@E p9ÈܶU‘í¦4…r¯òú|{ÿ’N0Ñc~Ò‡ÒypzÉÚ릭kÀÔÖ{“ žºˆ…äÓllÛ{ÒU㌆ixbj½vOÚ yiap÷„½&å}[ꎬ÷zâ¢à,:]*£6gL"ŠÌ‘»0œrZy@½Ýì`*ÍzÄ”)8##õâH ÄgðP1¶¹qz ¶Ÿ¡‹YVHõ¹NjÇ! ÂwmQÖL`ykÝ#Š¡1—~¶ïO¨Ön£jOÉžà΢6Ö¤ÒL‡êW]¾M*˜{8†Sµì˜ã÷ç¨|MOF ú¦Î·*+¹òÖN•ñÃ;>=þò;¡ÎÂí¾ü^¨è.NݼlWÓ/zdÐ<ª£ÈX¨á fÁœzŠkÉo ·a‰J‡Œ¾Ñ‚v%Ö+®AU0xRu(BȥʨF¥}ÈwDë G×{’BÓ(_)QÓÝSšüD'Awž2]íEsQè)-jÝGH€bi*}>amÊ•53Ï C²¢)Ö¯ˆéÓF§ßÛ®¯8:x²õ’$W­\‰Ê]ÖÖ)g¤b¡$Uíû˜¥Ä) !ñ?pÜ¥ƒ¸#Sdx ·7äDà£B×äjw:‡)Àÿ¶ç +Me’õ‚'C)Õið¹™?7^2¬§Aœ€»É¨;$Xg†ç4g„Ïû_ÛWà™2äD¸¥LJ°ÀÚ{ZÜËYΑ%Æú‘÷h[ÁþÍõýêê–§&GG#óg©è? ?òè Xé"ÒÊ_É^` =·ž¯£™ö|HÖH3ÄSybf„ó¯&ßâDs¡µUŽÖ^eª^|Œg)%:UàYºÈª/š~¸‹.P§ªÔ „"Óü‹2T?·Žs…‰+> +]Êœ‘l ôÆà†L׶æv¡e1]Þv„‰Øx2ÜÌÑfŽ{1>¼“ñä÷è;’FâÅøÀ{4P+‘Á|‚ºl‹€‘6VæÝ-„3ö!zÔ Ñ),š9lK…'½C¼’§yëPTµe†[˜\a–n7&ÝH–²Ën¹©d¾­‹˜`•J^˜”³Í "0¢l6Áƒƒ[ªEa´¦~$õØ,»)ÿíñùž·>l|³)V»³øÿ±lQ÷– n—ô‘.nnú(°“…s»Ý.~õ7ÞïóX‚e9 ¦r…±‰4Ðù>Ò÷0R^¶åQßRâD|×a4«MòÍ'4xU¥ƒYc\”*ÞX¸‰F sIÈN ÚÆ–ïØŠá¾qªò‹îCï¶ÐÂÚš©LÕ( üÏÐ=M¦øvß ÈÃò(´È˜g™±Òª°â˜wÖÑÿKƒˆï÷„Ch?[ºýºBk“X)úIFs× °±| Y©î­ñF®<Ȫä!„óîûËdäÎgø–6‹—3.«û‹¿./èÎÙ)}¶)ÖMžg?:êŸ-OQ¾¯¿©Ì—óx¹À×7¾<™óé«ÕÑßGÿÓ}Åendstream +endobj +1111 0 obj<>/XObject<<>>>>>>endobj +1112 0 obj<>stream +x…WkO9ýί¸›/Ð y‘À~JWH[6 £•VBBž'qñØ©í!Í¿ßsíÉ£SZ„Âd|çžs|ùz4 >~4ÒhBEuÔïõé|<î i|1Åç!~¤yübt9êßúb8¹Ä{­×ÙÑÙ§1 ”Í‘dr1¥¬$$è÷)+Næ¢PZ…Í)YGë¥D_å…VҪĆŒ”%K¢(¤÷¤m!4yé^U‚pȈJ¢8ou”5‡§ùyí +ù!ûrÔ§î`„–²ò¤°ÆÈ‚_÷=z:¹·AþAa)©“+S’2A:T&=Y£7Z ‡,xH¥œ«Å›¦Zh­´&c ­íš‚sáÛÊ®­]å¢x!Q–(Ч9ÚQßЬ·Ö<}è5‡†€’¯ð zU¡ËBÔ^’sx|kKÒ9ë<)OKñªÌPó’? í¤(7äjcøoXYh0º<%_KžE•‹V©O' +È`"ÅïŽÏ­’ å6òÓÆ}ŸP«IÕB¡=ÍDX®­{Ú7K‰Î7˜JŠÐ\st®Û(åcDgnÃHJŽµ ZA¥@â”0B¯V¡ >0.sWûàÏø· ,i#1®Ò•õ^åZ6 2{æBéÙ(»}ÌhÄ탞&²Ä×9š==f¾œqó¹³¢,„GÜ4Ö”^†€NP9â*SXç@ÁÍ´˜`q Kb +ÄgÀöT¤»]5|9£ë]²ý³ÇTÕgTõ«ÔMâXxLçÎxp+Ö¤¡:(²‹ÜR©im=SåqT‘œgŸ.in²¬»£A¢i&À˜óª¾;dÕŸ<Ô)s˜që ÄðR¯¨{M×w>Þ>ü{û@ÏÏWŸ¯¯žŸ;=úÏÖä—¶Ö%-€9Jb$¶ÊÁ|˜J­~SGl +­-¦»xŒJkŽcHC¨$R|7€  (§µ,ÆZ•Â@UL¨ +Ö¨Œf¶e«¶ÄÚC51Zù £4Aôº\må9mWþ·U’¬œi!DT@@Ê5³*UµÂ7°ÐÈ VÄFDßÚù\Ät;=º›·ª†DgaøÁqÈ’µPÀU‚„欑]>I¾pjÅ¢;`ã;µX†½Bèš‹¯î åfÿ„Y)R‚‘Ó[çÍ­sÂÓÝóìê毻ÛûŒŽ?þ1Zã¶o°nvã™i ˜‡DŠ¥ëËÛyX³ÚŒg7˜bG¬Ê;ýE¥w£ëÉ2>áT Øçˆ×^òB൳fÑ& ªÛ6[ZSÇ‹òUÒ«ôñþ‘Câ«„c~/¬ƒN ¹Åщ¿3¦ÉÀ¾e¿SIÃ_(cB…« ÜhÃóF;ãVN¾*[ã6¦¼†;ï_†hqàÝéÂæk^Ô¶>ÛšTã?=º"SW9l£¸—!WÖŸe73 ¹´>ìäµµóÆÉ0…•5ªÐÞ¶X¦Ë7-<p!ßÉZ·Ò6óNÇ=Ö“f0‹«1ž’™à®=`±—Xn˜;ÖâUPd¤Ð×Z:,± /;Ta! é[™£B½„¡býŠ­½A¶è[¦-8… ¯*¥…ã hƒï÷c‰$Ük4'ö}¾9ÓÒðÎD0tU_ÔÁV°À]Ka”¯àmì9 O´1VT3ùm%…½s«‡Î~ì]ÅõR™2XHÒƒÖ`®5¦¶aoÈà„uº§T´@ƒ×ˆ7ÀŒ¡l6Êæ*uÙ>;‰4oV‘ˆ 7“vÑfgÞö˵©5b‰ÊxȸºâUXùÎg<¶EÞ}Úõ&9²Äb|5‰8ðEéšÄzØZ›vì®sÖ&/ÒÍìy7s¨ u7{o&‘œgŸ.Lð?Êň&ÓaZBâö@3g¿`ⶨww!¯»=Ðö/y/Ù/-ãé¸7\`£ÁãA¼mn³£Žþ DÅendstream +endobj +1113 0 obj<>/XObject<<>>>>>>endobj +1114 0 obj<>stream +x…W]oÛF|÷¯X(*‘dÙŽäi€8I MâÆj‹~9‘Gñb’ÇÜ‘’õï;»³Mž°½’Vš*g‹ªÖ ¥Ö‘¢Jy¿µ.‘³|ÿŒÆ³ ä‹0ÂÍÆk‰¦;J6•ÿUÛAìàD­Ü®×°kÊÚÊû¦4´²´5u6¡›TNn®ð €ß*-‚sGÎ;ë·J$ÿMoËRú Ùª6`µu™tÁè(7¥ž^¿~Ä#¿Óéʬ½ví¦uQÁåw›•‰Õ­a­æm)?ÛZ¿¦›šŒ§ÊzoV9³ä+›twˆÊm¹nóæ +[Ç™ò(HžÛ­>R”û ¶£ÈûHñ:vº~6à/e¬¥ v‡ñq1CÝ×…BŒøö6 +Äéë˜ØòWy_¢ðöT{X;^Ú{µð7éQ¦&¯vž"SnTn*u þ=£±¿–ú\ƒ0#Ô bdAôƒs:®óy]7¨Æi8nˆIlËTÚ >•åz+•ôdøÉ̓†½X¡ži,ðCz#ŒH¦6°¨ÄnÅÆÓý™z‹â {ëäw¾ÖÅý)­šš“0PàceÀ „웪²®–D¾>cÆÃÎ+VÒõcèK׳ ñ1|2 ÍQÔâÈLòü”©Y7NI_7SÔÄnCŸ’ÑùÞXg¿ÏSQaÑȱBã÷MÎ0œ.xÞ¶eÔŸÊõFçQ×–à„¢Ì¬³#èÒ6ëŒäpVÆÅ>²®ŒBÂJA*~‹¤¡ÅPsæFŸã„Þg:~ઋ´°ÈTÊÉýrï¡sʹw õ¹è2v»V_†…tZÕ­ Þ}ºÆ-9 ú{)ê|àðeëp|þr_:éA«Ÿq™mfdYA:å bæÙêô÷ý HŒ#îÒª9jöé:žÐrWÙÚßÉt^ÑÛ`ñMk±µs’?PÑ”¾vMÌtòE‹¾©œ»G@¯³ ª¹€1‘:­Ñþb¨ÐÍHq[rÅ'iËýÎÉ×OBÄ€<ýŸÁzuxœ%Aë—V\nß‹?Q·€D{ad‰6Foé?ý=4ìÖä9dŒ{ÁR“ ¦³ÂA4¼¢(±˜ 2y#¶1Èmk0\¶ÈrIW +4V`;¦$€Ter¡TÈA©xèA›ÛAõÝcLÙ|Vd4Ey4)ÔË0ë¨Um_œ^D+S žlÞtRÂÌZmÊ5¸ÅY¡ä ›Æ7-#XOZíòŸY樄®áª%lGÈCÛý›v€gKÈi»_´óΠ´œŽ-Aµ€óˆqf-ÄjêûDÈSóˆ™Á¨qÇ׈U„’ͱ֊> „¶Ó‡nÿ¸¹%< ¥žÝþ¡˜>Ô$’Õ9³C•l†.WSS…ñjxû^ê×ûÿ‰6·Ú>1WžÖfc}ø|Çxà µ €d<ÐÜaÆù¡Žò"³¾»y”=~×µ »_ äÏG?è ‡tKÊÁ¨ö¼'¡ˆ<§« +\À΄twlw£„‰]IcËtÜf&ÎD}Ãênyu—üÿ L+TœÉý ØicuäQ“”H·ºëG¨—H•Ø¼ÞŽgÆ@?2RÜvÆ¢ÑÍÒ óWá«ÏlŽ/gW4ŸÏ'W¼ÆܽûtýŽnýŒèƒ›;í ¥Ã…ñâìŸßëº\\Nó«ÐñsNçãò䯓ÿ¯rrendstream +endobj +1115 0 obj<>/XObject<<>>>>/Annots 487 0 R>>endobj +1116 0 obj<>stream +xWÛnÛF}×WLõˆiI–u `´Nb~°ëÚJƒ¢.‚¹”6&¹ wiEß3³”,1î%AJÜÛ9sfü­3 >þh2¤“1Åy§õi<šESM'xâ_¥)•£Ù _xq2D£—^ ‡'/š‚רßü¸ûØ™ £! N§0’Ó`2Åð)£ûÎÆãègrŽÇѤùÄo9àAÿ…¸ÞÍ;Ç—# hž"ÇñtBóDÜöi÷®RÚØš–ÚSו:6©Ñ Å6/k¯+2Ž +ë‘z¬Í“)–xúVkç]—lEÎä&S8婬ìB-² åZŽüJyüд²Î7V^Ï¿vút48Aó¤Û«Øã’¦'£ÈÇ%9]=™X»ˆÞ¯tüHÞâ+M&=°UÕEÁ±ðu¥ÊRWî ©"áƒÎ’J|"]øjC¦à»-ß•‹T–Ù5¥¤Èu¨(Î îÑCÓ«…öoHû8zxÍ&Ž/g¨y¨äÑ ƒDæ¨ÍÂëçB ¹Ð½»ZüsEsDN6pôö©vš¾¿¥üywõñþâî÷‹»‡‡ùõí¡É^D)·²u–ÐBsÉóÒ-^Q©œ[Û*át 5e+{eg¤u›xéL³WǨ¼Kë,Ût£sj©#A˜[£ݾGS¿VèÐñ­ÀìMá<Š +c¶j¹•âº|öôà^D¹zÔp{rª+è ÓX-¼Ü4KÊL¡Ù-í¬q$MQãv8Ø\ùW–@ŠÒ:g˜k;j2Ùج*^yBåÉÖx`æ’Š +•ã´e¿ò“’*Ps¾GJ.³]Ѐõ¼•6S‘ßrÐÔ³gô ßœ__tÙ:¿ýÓçå_`zì-È‚ÄÛB­‘8.>ßh¼±%Ž¯åNªàJ[$ÒÁúŽ¨.ùM©A•?¥MãW0ššï¨*‹¥“Lsµ;%¸u¨ÊGZnmÉKíÿ¹C}¾µ¯Eÿ³EòEfíc]ÒÑ5Í/îçï~ýÔî ÀÆ…Ú½Þ¢"¢ œC¼¬, 1Z)óîU¾P"B€Ÿõä3êcלwè¸Ì²è؃>ävZ(–*x¸ºeí©Ð: "“+Ç2º¨`ÿ£S[~…»È~ oPçÄ2Ea/h‰Î¦@¸ei¥ ‚ŽÙÏ +j¬(7|O@ñ-`þZC«šÙáXü‚MȤZ*S/L»4Λ,ûh¥”ÓÙ¶PAŒ 5R/I²å@‡@£•zBo£H{ Ñõ~Ç#ü'!òñå³0–•N5tEsO¾š‚žÑF»C>õ8Y]ˆŽH€<¶•Bê+ ÙD¨¨Ê×å±uph!A¿„ꆙ=‡B¢(\Œõ ,ÂL‘}R5êÍ3‹çfÀ³¹™`Þ3«¬Å•MÂxb~YÈ +7òóèÞ«óÃëªbdÈ°E¬‰­Y +1ìÀ\H›Úk•–ߎ4D˜ÛHÝ +Ò EÜ["0ZLñ¤2“ìR—$FZ4Ì¥Dt)<³vow‡–Ûí˜GÞÌÅ{à0˜Q;æÙsÑwM+Às;Ì…¸ÚÈ€Ü)`¬Jµ0™ñ <¯ 2GXÜZ®3ý¤3äºâ³¹Mxrp%VØÚ fWK·ì3wwë¬Q¶ý,{=:¿ù¾Úcûvv7¥>kÅÓèЗ›ù—kC¤›~Ù®=¦’ðf79x­yÃKš.õ«áèür~q'+j‚‚2wê²´U[xÃxÉÀCOÚ”‘` +q[³_/dˆm [ïG'£0‘ïEMÐò‚ äDt?ÖHš-ËrÅÍ%BB ÔÃpÖk'b.9B9¥­2ªá…‘C`®0icæF4&8wNššØàhèÏò‰ˆZuoXxÝ‚Ýx…yÈÂ-ý‹üŒlµ”•@F)/¹¥Õ‚ƒifÚŠµ±Ô WÖšŠý›[Ù€Ù çL­õmµ„}O+ïË·ÇÇ»(ÂS“Àvÿ9çÕg_¤Ã*•ØX¨Ï–ïEŸJÌ0þ)ß;ä÷…Á¿üLOèt: Kûýùõ»sº­ìWÞˆ>ظα.+ÿ|óh{áhÒŸîÆ£É(šŒ§ ¶âÁ„O_Ì;¿uþ EFendstream +endobj +1117 0 obj<>/XObject<<>>>>>>endobj +1118 0 obj<>stream +x­VÛrÛ6}÷Wì£<QâEûMMãif7mÔÉ‹_ Q“K€²õ÷9 ^LIé´Ö;AìžsvÞ„4Ç¿VÅKJË›y0§$Žƒ5%ë>Gø­%íýB<_|oa½¦yÐÿ©ø‚}á:ˆ{Œ$X´ ?lGðúìᎢ9m÷ˆd¹ZÓ6óëx’N>j'µpJèÓúªtf^,ié^LýléE¹œ¾ˆr'n·Ü0R¸j‘¦qDÀšlRgÝrBaØ-G«`ÉË[C*“Ú©ý‰\.éYžhßèÔ)£EA¥Ls¡•--™ýwBàÀœ!©Å® “UaN% yÇÛœ¦aÜF$, í1å«C€Œ#t635˜ª +‘^dü¸Es0ç6…9œÎ¨Ñ2H8‘¯lÉWQ*-ïyš뢔À¶¦h87RQT Äý]«×ÙÏJ7¯´}ÿyöñ3Ò9ªÚhN‚a¦` rd“0 þŽ¯C2—°H®±2óÊàˆkÑØftù“y¡] ¡™„^ ¦3ʱ¾[’É:O;/à ëÌ* [0H0¤_9ŠÓÊ´©•;‘©˜¨³sS£÷êÀ¤yTÚC/+eYHkÁhgV£Ï2L®{ßáÀÙ¢÷ {%Û†“ÔÙTFKœUeݢσx´ºˆî„öÑ ÍæŒÿÇ-ÅÁë,Au)f¦P©”宇í¤Þ] 8Q8YkD}„Ù  <:àÇiºÚE= +9mñ§ñ2X†KZDè,pØ¢}üVÉÓhAS´"_ËÞl¿ý‡ÑŠŒ)š=|¯Þ»ï•lØ+(H©¹ð.q¹²L“×GÔm9ÍÐ+}ÖLºt–ël{hÚ½3]ëŽÌ§h¹ò•ó†à¥<†/ÎcÀ‘ýG$ŽæÿÀÑ֢æù?Æ +)D3ڣ묃ðŽ¦qØ6§KŽÎ„aÝÙ)p"wFøÝ©” +e}E;Úd¸±Pˆ+]£‘Ù€äÁ× +3zÇGâ¤8ÂÁQøÔý„hõ8AØ}/L* +fˆ†OÿÔSÏÍ#í å. +Â%²êpvê°3¯ 2Y T¶ðísB¥(a¼rîÄiæʇ‹0·0$Úpe¬äFоÞûlòWÄMþDVµ9b~6¦eÜ߇ÉEÖÀÎÂq_¶”ÒÆa‚ÂçÎôÉv“©–m' .zÒ/Íc;|©é³tˆ‚±Q"(žy(!?«üdèé‡5¹¯25x'¼ÊÊFã'}HG%ÎÎ¥]ã§Ïhrâ&cgÛ×yZ’vmÒ”ûo×múÈßšó§Íûþ{Àè#+!b4úA'‚ev +É ô ©.¿`†Ç9ºSÅIaGKb/hÄÈÛ›¦¦§Iòt‹A”ª’Ón¸§žÑS $€ »ôÊ ÂÓ!V²V&{ºõ–&ï1öZv!ôžSy bâzÕía–€uÒ"‚ëXq¥G‹Ëeê å¸-\|‘¸•£¨SÜNîË‹p?À§A|žõ¾©¤²Aéå„ÇÇXŸµ&Už"±ãe6(ʼnv¨ CãáÈ¥Á gÖ%Tž¡VAq¾ÛÛ\UÀp/Rb¢éÑŽ–ºñ©ïPÈÙ&Í!³U'ò~t.CÔð@ÆP4S6­%~KabâÎÐÆùÒ(¹ùìÊf;ÊŸÑÝiGeá/N<£jùF([ß3ͳ‡õÛM6^«xÁ½êßÝ–“U¬–¸»óÖp͸¶7¿Þ|í:¨Gendstream +endobj +1119 0 obj<>/XObject<<>>>>>>endobj +1120 0 obj<>stream +xWÛnÛ8}ÏW Ú‡MZ¾Ä±îSÚl›n¶q±/y¡%Êf#‘.I%ñßïR”%ÚK.9·sÎÌøçÉ”&ø;¥åŒÎ”×'“lBóÙy6§ùj‰Ÿgøo%•áÅ V/_¬V4ÉÒ»Å/0¹<Ë.ÒÑyvÞ¿lÒ~IgÏVdzGÉb°Ýq<1²ù$[F«×ÝÀðøóœ¦SZ—Èo±ZÒºŽ'´ÎO¯/?‘( ++Sz›Ñ­Ò¹¤ÞSé¨nœ§¤me6¢ªÔhõ³‘ïI肶RKžZY ¥•êIT‹÷‡wë'Mϲüžî…õ*o*aIi/m)rØñ;Ilu-µ'Sâ&}¹IQ-ڡüÖÔ$HKÿhì=^i±•áÚ^Z·—¹W2¸½6Îï`ÕhÙ·œã2‹Î5lô“ÏèœoëÓÕÃÝ[U {èÙâ4”8V.&+Ì!xzTUÅN­ôÕpªt8tùíÏöÕ!E?[€{(Ú;©‘rãWÎMÀèQh†rS×%^¼ߡ~QZ”'ß)¤C6Þä¦"Uï«P2á•Ñ„²6Ày•¯½I6´¨åàÍ΀ñW$ˆ»¦z@ä9nHL0B`HL§s£½5U…ó›Ç5ð»þt3ô8Vªmccˆí%P«’.£5Ââ‰ïŽ?Cbݧcéó1’9Òþ”à˜‘wM¾ 7_-1gÛchÈO +é¼Ò1ŽŽ³´—B‚Æ5j\D`b‰s(Oéøã +ÿ€K4HW`¼*C%úÌc°w/ìVú£X2¶IÎCzPÀ¸l©õQh 76 +×bàtc(rUðÀjéwñ1A©£ïW7twú9w%¼ØZQS2|÷Ž±†9g+Ñ `ŠÑ±»qÅ_Á·2¨M'_'·A» wŸ0Û˜þáúµÈèk«öžqECW +Ë<Ü„„@Ð)?ïhFW‡?Ù‚¢uÛÐ:¡s_ãâ'á—å‡çÿ"ƒXi/ò{ û’fx®S‚î™Éè’Á|/&'º|ÙWÊ:>–vÈÞ5be§¿%… ¢4.­G Þw­žÆ+ÝÈŠUÈÄÕÅ#C>©0!ÀaÿÂÌ£¶÷FI½bb#Ñ°9ס*±©â¼žÒ ŸÇôèl{hi±ÃfÜ#ÌÇy>šñ¯4¼j[ætqž-Χ´X®²ÙEhâ·—×/yÉ +‰^™¼áÝ($ÊwGÓ>†®Îh´œ€y­j³a¾œgË>…òéßûk}òïÉÿØï®>endstream +endobj +1121 0 obj<>/XObject<<>>>>>>endobj +1122 0 obj<>stream +xWmoGþî_1"JTûàÀR¥•ì4N­Æ/‰òÅRµÜ-°ñ±{ÙÝ3æß÷™½àj”´‰dnvæ™gfžÙûvSÿch8¢duÔ&Úþ° |èÓYGgt:ãïx2ÂßVÒÆ}o~TÆÃxÅ•ñ*Ó—üøyå6îGãÒöbú‚çÞeŸÞÐtNqt:ÐXÎFš¦@Ÿ¦I—ª¯^O¿õédG#4ßç¹uúKmF‰YåÂWÆÏÞãWtžyiµðêI’ÔÞ*éhn,7Ʀ$ +¿Ä•ÀÆhVþrÐÙ~ì22ÍUŸZ9ÊR‘ÓZé™Òén)R³þAô kŠ|k»Ÿj›—¥qÞíoa¥Ú@s˜öFZ¬$ŠéLV|Ÿ›ýøetDÄ€œŸi G*¥tVåÑÐu–~mìc“SÜø­2j³ QLÛœ =œ9À@n7‰Éê#MŒö6Ov8þ¾'í“Jdí~Oïò”â˜Çᤜ‡“Á8Ì:øvš +ëä1I‘,ÉÌ ©9I+™,`®Jó­P¨žÏIäH(·JxL¶HT¦<7¼Ði=_ƒá&‡wkeâ³Mé0ðè$FÏÕ¢°2jŽGÑ)?¹òä–¦ÈRšIÒÆË´ \h ‚PU°€K:ß[ák±äÍ„3svLÓww½«»ÚçÆa†´0­Y NeY[ºRœq®€wÄD²:Q¹È˜!—Kñ¨ô‚ŒÎ6´Æ\# ØwÂnÚÙÜ‹ÕLк…Ç~±ˆ­U–‘HSú¨tñL®Èsc}Ð ùì¥fS°m×a:*JÉ­•G•”ž[á¼-ɱåVœ*†³à<ÉRveL#f™d×fæ…Ò»c‡Ä®ïé DŬÝHqu{†3`—çiŠ6pÒE45´àó~©š¹ªâÎ ð tņÊüµ”ið¬g¨C +H~¹×JÂ.@7£­r_‰Ç`¿BgÑCW•šÙ»<«ú¹KlÑ*¥†p3K½LÍð÷ßPJ9ÃVÛIè>¼Fhe$Tdž‹ s‹Ö͇>×ÜM8íEÆxCº’JGØma¤º¦å›RŒKâ œ1pž˜£è´æÂBú°8Ð>[~ÐÜòeõ;¥Þu€N3–à¬@ú¤Wgñ`µñ°4¡ëyx!n¹QÚ“òuO´QçTÕ%9#ôf·3VÐ 3ÛÀÇOÛN©¿ç†=æžÌ F1Y6꧈ÏuWº•Ibˈ³_/:}fÐ#üÌ…9ª½Ô´î4lýh&9nÃÞåŠÇ,|XðÃÓR^nÚÛÆQáªn¿;+û|òma\Þ^´&æÂÆ2ÇbfŠR6Ã(™­ÁÂr+ƒæ^ÄßÁ¿µYkzV™ÂýK:ºœ>ô*¡ôêúðºdÆóU„¦B¦cêÔÁØ;ÞæV_Í”)ðçûë‹V}Âá œßØ ++)ÊnDe (¨è¢œh®–|Nd–9T…n½W…Mpkú)2Ö¯­Øµ—i§7°a8DjV,@Œ«œäV§i¢N¾Ni‡J+1ÉúÊ‹B`¬8>{hÅ ÊT6 ‡ª De°LÂ{/-¹Ø—IŽ!Ÿ¯;ŠqE^bÀàr<¹X= ¿,±Æ#¿lÅlŒ¹} JØèÛŸC‡‚#Q†cñðüaû>‰¬`ö1aîÐq®^Àˆø$3|‹èª¼vò•µBï&Qùb n.^ÐtÞ¬ƒš +&Á™•ðÊÜÖöå"ãÛD½¶ü&/A¶Ã.OŠrÂ\—ûªÒ·íe:…ÁÜd™šBZž‘tÖàc\á0nCü°ÆeCþ.ܹ[o'ƒ³h‚·„ûüg­¾Öš—8-bôÛwÿú áúüÝW7ïoί߿í÷£_éžKhÃ/FÃe-´fä¸ ì˜×¤´^*^tÝ~¾{Ïóïå¸^ãÚN.,îÒVÛ·ëüBB?Äú6Lš@ÉNK¢»0ú­ÕŒÇ¢ÒœüQÝÛ8ÙIäÁ[Z‘½õ¸S2³@YKöš+Ñ’îøLÙçGÃ=¼ÏMðÑ»œT÷ŒxtÎb¼Ë£É,µ´{~}qNwÖ|Åe'áòs:‰GxŸ édÜÇËpÚ­8Ù¾gýàæ;ŸFc¼>ã½9íúìûýô诣ò××ÿendstream +endobj +1123 0 obj<>/XObject<<>>>>>>endobj +1124 0 obj<>stream +x•X]sÛ6|÷¯¸ñ“Ó‰hI¶%§“vÆNÜÖÓø£–2éC^ “€’õﻀ”BÏd¦MÆqe····wô÷£ ñgBó)Í(­ŽÆÉå%í¿˜5þgL³ËóäŒÎ/çø~r–ÌÉHÊqvŒ§û/ñìt6K.âÙ)ÎwGi6MÞ ?¿^þ1¦w´Ìi’œŸMjž\Ì.i™ù«Ç´LOhðß—‡§¿ÿ|zøüø~"§ßè¶vÒÔÒѽ¨$=I«Ë4öÍòn?§É„¯…ûGÓ¹³ÌNnÙB·eF+Iµv2#WG¢,é^ºëÛ‡U"-T--ÒX+‹08"•!½­©F4KÂR>&±Ò™Ð²P–øoMaÃ#üY2EV'©®ÁÇä4-?<žÞ>â u*œÒµ¥m!ÁÎdŠ?Àv”ìñ+Y¥j@1ÂiC[°™0|*9$=•.=-´u–´ÄG>Þ/(N¬„•‰´c:ˆ-¬Õ©LÈV¹‚$H àYf¤µI¼q:KÎ9£Î[ƒÀ†­jG:§´Få*õI y~ëQ†ú@Q¾>'{Ðá]áN(W%@Õ\I ÜÈT›ÌR¦¹nÔ½Q™$ʇ»2rnäv 3”kST¾Úw ú¢êLo-0+Yƒ³L6Ñ4ÈÔTj䀇q›¿¹Yi6*åÏÄ°º•Øy5I™É,¡«šä‹¨àÇs. +ÃÓ]ˆQ|¹k$G¯pÐV0˜=|+¡êAž¥^)c’&!ˆ:G:!V´ãn_C†#âC>ŽDÈÖÑjÇšf¢T½Æ¹Rë綡¯'%H âw¯ŒY +e}Cx”dÝV*…†}4µï&Ï|!6²ï+ß|hþP¿¼Ÿ¤¿ƒAG~ƒ˜F~o%z]†ÂpöP˜(5d†CFº‘u ÒaÃ'%z‰ñí¹‘6¡/…‚æ%(DŽ)€dƒçŒl ™š±š‚™9;<Ì«ÞYâ„Ïùx«ÍóÚè¶9FÏÒq(õ1"xH¡¸Ì#o-_/^íë‰äXhPddÕºö­Ç't>Hâð]‰;¼…`0mr;Žçd +¢hå¡6a³Œ”] Û¡CäñrÏÈ«Þ`„Q•0;ä|x¼’Ù(£ëŠ«éqÁ–¼P)ÍÈéÿ‹öä !uô õ³€m{j/7Tà\ ìU­Ð‹,O ‰>Þ¥þÖ{ÌZÖP-›®m!§T˜AoijA;}k!‚aC4ðOp”¡_žk‹¿®žnèîáãMã×7>… +6’¹¶³vÜòìt‚Bè0ۆʶЬ gtyXŸ¿ŸVÁ‡v¤ß)^3µîÑP|Þ@j£m  +¹ú£Ÿ7Oÿ€ã=??Vã ”ìö-÷à÷VÎ"’'øäÏ%àŽÇíš: +‡£æÀ$XñRA„ÆÀuã(ì«Ô5lo\y×»zéëmd…ÑßYÓ ; x+Ö-J +\Aõèo§S0 øpÌ ÜˆïÞ‚é.>sÉñ ,î®áˆÁ‚q˜ÿò@`‘ã¡ÐÍã ò}\@ú`_Oð·] «R¨¿i=´ŽÿYøÝ€Õ= CÖ©hl‹Ý¢õéÓ ú¤×°aÇ|Rõ3}Bè>øˆsë=¦!ª-¯VGÈž †qóù~D}óâ`“2dû™…à׸\¤r˜‡(­f÷3-& ,^ý/nîÖ>&…a<ŠôKàÍKZˆz[öøѾX«Ý ð=î ëÞ˜Dp ÀÈ^0.j–þ?!×ËAh(‘YZ†e¨«›Ï/„û‰øûÎFVè›T³¢^àÝû|ÉH—­Ÿ¿•dN”­0Ú~rlñ\1ø±*‡¼ÀLRÞ©ãó÷ L††ÁÂ';J~`‹þîûéïh‚1Ç;Æè û7o‹<7ºdïyÚÀvéÕ¿ßÕq|:çÃW¨ÍAÏ÷iKä«1«jÖe@)«6Ï¡^¨@f±"#<]È`Ü·ƒ‚Äõës µlà;ð ‡Oú/¯Ðø¯ÚšÇjG˜/#Ç…s8šŒG“ Â2Õ:^.n‡[# "I2ÇÆÌ;(½rXö8Çýjup(7ºòÙñ’ZBµ`’Ñ–0@5­5>ÀZ±.¼ï½6^)ÔÃ>û™j"UÝÊËÛcdžTè%‡D™óˆü‡ó´’¼«0,ìۼЀè`&þ`!øU GäK£hX-/[[jŸ¹¿Ü·§J8¼#… '£0ÒhÉþmæ‡êùÉk±íêvð>êT%GšËRìP<•ÈäW”Ð3ŽH`Uâ“qs¸MS¼¼…`YJýèaÓç—›°·à]¿VFcÊ î@Ø‹6`Ø”øÊPz˜B!ŒH!`,¸˜p¯ÇèÕCsYÈA§Á6JÞ=YoüzÄo2 +‹[\èù¶Ã®Šòƒâ<<®W/¶î8ŒÍ…¨VÃU‰W‚(Yñëçàùjˆ;Žvrß'3ü&âòŒfgÉtvÁN±¸º»¾¢G£}?ê/5‚,“:êÍÇømÃÏlè|~žÌñˆ1›Nøé›åÑ?Gÿ\¦Ÿendstream +endobj +1125 0 obj<>/XObject<<>>>>>>endobj +1126 0 obj<>stream +xXaOãHýί(…/Œ™$0!ŒV'w‘ ÑìV²têØí¤§ÛÛmr¿þ^uÛ$p×3·7Œ ±ÛÕU¯Þ«ªÎG}êá§O—:Rº9êuG#Ú_ì +z4àr1ºÄõËpØ‘•”]/°¼o,ÿ|wEý Zä°;áÌ?ïÑ"=Y¬%Ý?üíÛ|1§\òÓâ÷£ÏwÔï‡õgƒK¬Ç2åüsÂïÚÕ¢(vT˜TT2#¥éaNß•ÎÌÖÑlApÊXôà ›ˆÉÛ<¹ùš$ߧ³Ù"Iæ¿Í“‡óA’Ü>Mÿ1yš'ÉdqóÞ‡:ã[=:ëŸwìNjt%”vTÁýé#³ÌJçx¥¿µéZiIZl${°Uº†§¥PÖu‰ƒþàTƒÁÇ­*¥ÍÝ 4Y]O¿Í½ÙU†ýQ–J¯‚’u›Õƒa—á?™VTíJ•60šgG…z–_[§®ü~÷â|@gƒ/Ý~ã-jþÓ)wV­Ö%'iò‰úWW#zP©5Îä۲ݲæ¼{¹uüã} ‚Üâ¿ '6%â>ä’ü–;ï~'$ÝÑMÁQ•ŸèæEZZÜ<~ž>ÂiW‰ô™€lK«QìÍØýà³OÒ;J4ø;2ùAZ$øb˜Ÿ©Ù”u%-ÓÃEm¿Å_ýÊ.ÑÄ"kwäÖ¦.‰¤gYVd4Ø®eêEeЪe4 ž‚„Ù+ ‘M1·s𵂿E½Ñ€ª(Ìö- QÇSc¡†ÒÀpð0Ø@ý–¥­ZxEƒFÔæÞA'Ka½îÁQQ!\4P›+á: ¿Ë°Sç¸CéËSØÚçVRKëÕày†4eR›Jzº(;ä`&\Ý®9Ê×ð+£ã‰\JÀ–|Š&#êØ»ªÇ(‰J-!Œ­ªÖr»ÏèAh±»Ý׆áTlÖÆUq·˜¶¡d™<—6³cΛ|­¤v˜/ \ý>J6ê¸/ÇO“Ÿ¬¸ýöðõ—ÌlPKÿò“¥ÓÙÍý¯·ú…Ýf9üì…ëÉ_§³Žï“§Ùxñ3O&³Ûÿum’ô^µF¹ÑFŸ•VéÊÓ¼¥¹º,­’O±ˆb÷éÎ Œ­ ½kdŽî„Øæ?½qÚQ‡aî€EA©{£ÖùÅP:@o”Ò‚—"óbÇ~ìûUŠ#»t½ƒrQÕ©M1YlÜ<ä²7yJ˺âåhy–+·ÑhØ"‡ )Ûa•†ÍP(P\X?” U¸?/’CКø¼>8žÎñ!Ã:( «€”pΤ +U„ÃŽ"Ðz³ˆŠ2#S•«P[ör½áÞ%¥•£µÙþÐòÒbT\ ³Bôøô¢R`¼”kñ⧆ЩÓ‹²FsÝáÙÁ´(GÝæÈYúá·P³P7’€Ó)©Š®–Ø× ôÐ@—,#µÏŒã¥¼ï2¾›´Hø^lÅεŽ)QThW«5ïè© +¶D탛(÷[MÛµ ìßó’­¿(‰.ôç™2÷‰Û±¾:ÇÿYOa @áØžînÞF.4ãëE\ÒÄsÏ–ù\О½=SöU˧܋‚±˜xrŠü´xÐ-º¥QØ·,A¿ÎnΖ‚uÆHnt_G¢ §LnQ¨ᥦS„ \’yÄÅSž,<=¥bN˜(áÓøþûø7̧‡„*­ÁD"a£Jyäb|æ4W܉:Ëâ€ZPlùÕÀ¼6ƒòZã›ÄGô;x¦fÊB“êåÓÐ!f™¯Bì˜C-Gñ(ëe¡Òð|W¾†±Ô·sòû¨ð0êù½ÐhÍóà¡xRÉ©3«‹bÍ¡ìÍy/ç716CŒN&ÚæÁcct¸ x&*VŠpüx—OW§,ï[厳Ukì5œ$ÍöIâv®’›$Ik vºâQךÂÉ +š²•$…СC¦’„g´D¹wI¢±µ Ñzdã#Iƒ´•+ eáî\á$€Æzô–Ž&ÿÌÜ ÎŽg7áI=c‚Wåñ»!cõn‹” ¨³šð¢R|,i‰µ‹ypq¹æ¬ A+kêJªÌJ²¯]£¿;æöù—Ò¢Îâ2Ø7yOHo–·ð&þŸŠx§4½§ôßG‡‰Bsr³”Y˜Z£Qí¢„cƒ]8?\ˆX@‡ÇWÖ͵R>/XObject<<>>>>>>endobj +1128 0 obj<>stream +x•WïoÛ6ýž¿â|˜$²%;qR`’ØÝ $n«+ +h‰ŽÙJ¤*JNòßï%ù×â-]ÃfÈãÝ»wïŽ?Ž|êáŸOÀúgG=ïò’6Å~ôhÐ?÷®hp9Ä÷à"ð|*$-°¹‡ãëvs0ôúífh·R?¸zûþ•ï ÿ}â-OpykÛïã3~¾áJ÷c®(\ï ú]Àùó‹K +çq¸CÍ'E½­I›R”Êh* Ù\ÆjñJ‚–ò…V"­²)ð[}–J—J?Q¼…ˆKYx¿†ßŽztæ=ܲ1~hÂ%[LSó̆ä‹ÈòT’JÓÊ–…(¥%‘¦dT.¥•ØPJmáýpÈä¡uò{w>ð®ðÿÐ],•6mütòð8¦“ѧûZ–ϦøÎÑ ~ÐSaªüK£ÛwÇ5lóXä¹™$‡«?8^_´õåÄ,RÂf²²XÉâ=7}¶‘›¼JE±e®ŽagÁšªˆåOØö6©‰Ej‹Õ–-‡ÏÖo†F&2q„@vHé8­y(€Cëtr3þ}2ýûú.?N¯Ãñá“éíÝçшFQëaåÕÍ™ÛÊ6»äû¼M#rË—)—<[9B0K6ÝÏè‹Ò‰y¶4 i€ÞŠ~ôЄQµM4sg³sû!Š¾L¦Ó0Šf_gáø¾DÑèqò×øqEãÐÉùƇ3½ µïìκ9C“ºN’BZ”o–XuœÒÃL”ñŽæBÖ£ÉN5ÐüµN4·X1iÅvïF¥…@ó«â²âÌé­O)‘90gÊ€eKóì †·]ø&õJF3 <¸¾PO°‘x`ª0)Ñi^÷.~µ{òG¥ÐêÙJÝwé³V/Ý;¥«—}„»²Œ»kÙ݆ò 6 Ç}‚aMgtçÊ£NÙÛ4ˆE.æ*Uåën< +ƒßÄmeYå,f¢ýCÓÁ×ÔÍBÄÎò²X\ ¹ƒ„V=œœnå +ý£’(8v¦žYpžý€VÆ +Ó‰.e@íy© ÊÖé ¥Æb#$SYÞL>Íö.žš!½æ°‡q*“,;iDÅztM›}¸¨G™èP[jÌÒ¼€pÇàEhEAŸG{w­·D¿ºhÀÖÒ)v«±ŽÐNùàÇh«ù7;J`úc×òÆÇYW¦BI4‰i=á}{7ÇPFé2à¬/ ÍîMàÄ)ÕúÀÕuwß|GàHüyŒÄ!Û,].]ËÓPÊ·q{÷À`BóR¼e¦×:GP‹ÍÜ ÆKfÎm–›X絚n<=mÝ\«|£¥5Æíi ÅMqO#·ªÂÝþŸeq]{uZ œhÐD’)§¤öañ,©j¦ròê’Þªèbû½žßÅG°ÕÀ§7Ó}VF6™;70»õÔJ¶D›©™ÂI¯š„ÖÂzéþö£HQQO +ݺĂ(Z9ßçIªœŽÕ-§Ò—ÂbÀšžÔ +Ÿ0›Jf»Ñr'¹vs‹¹¨å'4kih"› Î6†xà h‚bè6“MUòà‹Xë ÏÀøΛ9~s5ýÇfsU¸^n5®ãÚŸ{¿ì½Ï΂sïï4d;hãY„ «ÊsS”ô}•n¾ÝmÛañÞä7Ð7cc}xWpn*¤f´oʹcÛñË&HÿâË>] {ÞU€ÇfÒ™]ßß\ÓCaœ`ŒL\qKrÌHœµGΆ=·w& ÞT¼N“NÐçãðèÏ£Õ ŒÉendstream +endobj +1129 0 obj<>/XObject<<>>>>>>endobj +1130 0 obj<>stream +xW]oÛ6}ϯ¸èS +8òGÛ°‡diÑëÇ`}É %щtE*ŽÿýÎ%)YQ ؆¥]DÞÏsνüu1¥ þÒrF× Êª‹I²ZÑéG½ÃÿLh±¼Nnh¾Zâï³9þZKÚâì·»íÙëÕé,ηGéÃ<™¶6Úßßm.ÆŸ&ô6[š&óë-àäf±¢MîMOh“]Rüç ´%Ûì÷¦vô'}5ï7?/&t5EÀ¸08'ëgYãØËËKÒûïŒ?Íi:e§WÁëÕlé½ÃÈ¡9œšÅS—½ûlëµKR–\!éá;‰<¯¥µd¶þ7?¾®ÉúH’péM—ìa_Ï“9‡ýÙ(­ÍÁ*½£m£3§ :§Ÿœ¡\îKs$ëDZJþÀ¶`a6 ð]êÜì 5ÞÜZT©x.ß[& ö|‹r:ádN"5ÏrD_ÖôCé±P%²BiiÑÀ²¥DŠª¦¯ÒÝ=|[“>>^ªD&ødã ÿ…¶¦& 1Òéu2c\ •Irǽ$¥Éìe-8ßÇ÷d4GƒÖ6û„nKkF$†r™å‹ÈUÒ&§ôH‡Be"@8¨p0;pïÄ‚Þ—!àx.‘W…,£˜Džˆ\çSêÕ#+•ÔnšI"K¥Ô´SÏø)¨×éωâ|eÿï/Ÿ¿­7k*yjöŽÔÜÂ|Ĩ-Ý;\Æ~Å‘œ5eÃ{uCºÌŒ›» xÐ>…LXÉ®jÎÎç­M?^eù¶r ¥ƒÄ'üéëÅïa$7Zríÿ½ÿ>H9œº„6Ü…x±®7]øÀ5w³4™(ÁêTK7¢F—LŸ¶6¸ßXtgK€°‹4°ãaè;–ZÚ„½m «\ãfÉsöµyV9â€Ïz’d™/‘±!ëJÑinD¦Òò8ÈVéŸ2c)óñDZ.T@ c•q²O-dz0õÈHÊex ­ $@¾£½¨fôñý°µ?|#_ŽÑÀ¥Ç-:‰Ü1TYq‡¸¬»Ê1‰d­ß–½k®è^dOÒYÊ„æÂÔ¦ñµrEcÃu Š5$Ò±ßòVßHdµA§ãõXÛzlA|ßÔ¬Š—× Ì#p/KŸ©à³crGn#±¬–€êV!_p;tÇÓ‹œ&È.Jχݕ/èbBßà Rv"bì[hEÏG€røbO©†ñ›J@ò^GX2@U<Ùi9« ¢„£ £[P'+3TÈñ;o<3ÚÕ¦dü#_ápÖóÀ§¶( HÆ.ƒÔ²WŸÿÙJ>^nX/ Â>ñY/…Эmmª–É÷ÓØjá$_²Bèß鳆ÝBjAb/ Pb”• MÇ †—å‘L긾qWûÌ9‘°,ÙvÓÍ݇¢EŒ²Ä„>z—ÓéÕô†0"ò×ß +YziêÆHE}L ü!ìeˆ»cp.\á„å¡Cw†ËZ‰ÁO."k µ+$(Ýìª0ÉQ8x¯ NX©¾‚FÎd¦$äiÁ!IZY¬X»|t]<@ãYD Éû—™˜"ʶÐ}îUµmY™|Ú(+KçˆÒ†Yiýòƒå¦íxª©*ô£u $zFxØ%†çž㹿«OS#ZiÅçV™[µkÂ62-)¤âé­¸ßcÔµ#-&´ËªŒ ÀcÊ~äDk^2Á)#(ì/ø:ˆ¿Lߣ<ÏvnX :úaÓVg¢¹~xaÅz#¥aüÅõ™ÇßÉp ŠÍcìQg…ÑÊúÑÉuîwÏj7"ñõvíl‹6Øxo¼ñÈͱUšpµi«J¹ï«ÔNnõ Hþü95”œîæo;ty­†¥Zþj˜/½¼BÖu—vŒAn·3˜´VùB€ùÝÖ›%3HÈÀ¹•<Á¹]Ø0ü˜«½¤¡à¸Ç};÷À ’ö0§ÂE)ö·üÍ$ÐXf.Ïž TR ~a$³6}Ü\ùßô§Û˜zµ8öx9UŽ®Xíƒ:¡ž5a"xn¢íSé´ÑŽü‹Àçý(·#¿þ¬…qàÖä1gº‡0âÝBÎðŽ]#BaÉ +µ<6BžHÊV\¥˜w~vDŸNfmUŸ¡ÐØÙGññˆwµb^Ž±œ H¯åðOoÏK¼oP%HœÑ^:ÇŸVñÎt§öêš“y2YÜðËi}ûå׆Nº7YS!-ÏO6{Õ^¹ZNðœþ_¯J~gþî9_Γ%Þçö1›³ë›‹.þÇoendstream +endobj +1131 0 obj<>/XObject<<>>>>/Annots 494 0 R>>endobj +1132 0 obj<>stream +x•XßoÛ6~Ï_qè“ÄŠå8þ1`É’¬š¤[\tòBK´ÍF"]‘ŠãýõûŽeGi±-œH&ï>Þ}÷Ý1ߎRà_J“!)+ÉoÚ??JÃd@£ÉY2¦’ÒÑ8™5O=>ãÛÙ«ÂZþvL§°?ª›ÆªI’Òh:ÁïÃQrN•¤åQšŒh˜’!¼L‡íƒw‚§t6ÃgIÞø«Ëy2œœÞÌ(Ð|‰³§)Ís¤ͳÞí}Q:7[KVfu¥ÜŽÌÆ)£- ÓÚlÉÊŒ^ªU d¢\ˆãù×£õ‡`˜ç½¥©°[–…´–”vrU 6ÁËNo>Ùy8A<°áÀkV(©¥R쨶’¤ÎªÝÆÉœ6ÂÚ­©r±x¨™% ÊÖ¢(¤–+yZI»PI¢vkXQ™wK¥ÉeÑ`LÏB¸|ì‰ä) ÝÍ?Þ>§ÇТ0ZžðoY!EEN¾8²®RzeÉŸJ•›B¶Ph!,½v—ÐlZ›ºÈi!‘=Q¨dÞñïÖÂÑV¹5*=Ü^Ò¦2Îd¦ð/âaIñY-{1ψ°XK‡8<‘Än¼Rš6…À§G ìmÈNhQ;ÒÆu|/ Üò³¢|¯J~«¥³I³m8iý‚˜î·A@>Àä +h_Â6ηF¦Òïr²Â‚ÅÎ;Åbà¶ÆÍÖÐVìì/ìåÖ~/4Ý^ØØšSΨ?ß}øíþê:>¶Ñ +¹Jh¾†uüÒf«™/¼énîmøcÞd û“5òƒÃñ„Øûž¤þË~$ÍVZ_02@R˜œ¨‰z³Á©20âÄ— +\"3"Ï9wÈ\UƒŽai:B$œ´ ЀšñòžN²Ìj¶áÉr6òÁï>üÈì¯D†à†ò´›B9²–>¢çcZàÕÕõ=É<˜uŠeO÷®+•½£©÷AÏ¢¨%#dÛºp¨JaŽ‘ûjZú(ô­Ð?lLâwbÛN“tFýóa2åðÿmêX7•\2ÙÏÛ§¦ðé:h”„Ï Qðäwœë÷÷_æ÷Ȥ c©ñøJbæÒ UXÂ;Æ«´–U'Ä\M\âÍëù@•fç(OÙmŸUÆÈž(=¡ƒ ¨`½Pž%/žÍ A“ßl?CB‹®*yÅ eÍ¢ÅinùÖU™‹¢Ø»ÄÂ0¾ø–«õZB[lÚDnõ&ô5ÐÔ)‰žQÃ;„q)À®&8ʽÏP0‚y\ye6æNÔ­”öŠÚh–{‘P9¤•U6P©tÍ4ÃS€G²z1â„z-ÎÉrƒ¶Áuˆãòìe“W +P©ºaÆkeòèd~â·„#€î}iXÊ"x²°ékµå£¡ ‰l o™Ù a‘Šñ‹Ð#¯<ô[•UÆš¥c*#n¢¼O:³ÀcC8ŽX3Å‘b¯ì?zlû@t %(c)ú¹Ä–UŠ]Wr¥ D;ø®Ð|qAá"8㣢rÏÌÖ[‹¢Ûm6œyBf¸ÎBOò^E{¤†t˜ÆJB€TÉ„M_+´D!“ +Á­diðÕë¢èœšË‘ ]°\Û ÷¸%> œBW¥•“ÅÎ[´2&'•KÁb¢øt§ˆZçèt¶ÎÖ˜0ü Ó%Ç©•ËymsL@e1N€Ý¾Ûø @T¦ÆPÆéSÖÖ^/âø6{i\ì[ärÑÈo—Ö<ÜE–ÀÈ…*ª@“R9¯üp‚Ž™Ç•&¸>“¡f¦×iñg<½ÐŒç>L²gCt÷ódŠŸÐ}vë';*äsÔzôkÓˆ‡aSÏ‘AµZK˜ 1ûÞõÓ&âÚp&à\¶b†ÛÀ=HiÓÝ}¸[M¨ær„£Â˜§zÓ.Œ³È,xbäâ)L&ºêow2F"ËVÌ_t)3O<îüµÏËÏ3·Fcô…Üh|àúœ†Ýg;qcŽžÞ ›±§OСn›‚ý ÔÛÓK¢Â¸‡H•†¤KŒ&]¿ÞÉžPh¾þ á„õ¥ÃîR<µbRª–OŽN‹;ÎG‡U©Ñrd‚Õ¯;Àð‘¸Ï‹ö³/d¥QmNhRÛø?øûÝøÅbù™ø•µu\¼VúáŒëµ/ª¬KÒu¹`ÔË}™Jý¬¢íZeë¶qLN‹Ex9Ü£ ²œýŽ« +$«|#–1„æð÷L­ð +Ÿ«@,?2Æ ðü5ì±÷xì£ÁA ZBÅ€ìKðB°0 •†I® Îv®oÚzv4è/|¸Ob¨«LÙæ–³£no–%™GU¶æüXáÁ)H_ü}Õ«Ïž åS‡fù²vþþÈt ïâ Ú ì¬™Ü1½4âæÈsÿ@ñ¢Q äØAèm.vý{ÌÚ7S_fÊ…Ò/nrÇdN›´§cÜë§g4O“ÁøœUóáâöò‚>Uæ+æº2Y]BÚ{v?néOÝWwìÿq³÷uö£»üh2J&cü ƒíÏ9 ×ó£?Žþhs—fendstream +endobj +1133 0 obj<>/XObject<<>>>>/Annots 499 0 R>>endobj +1134 0 obj<>stream +xÅW]oG}çW\ùÉšÏWòƒ'­¥Ú¤5VT©’5ì0βCffÁüûž;3 fƒª*RÕ$&à¹çž{îå[«KüíÒ¨Gý”²U«“t(MûxŒGxíáÇHšãÁxL‡³À‡ ÓA2ŠGûä_ŸíÀlR¿Ä³ƒn'¹üwfûîþè Mº'ÍþñKkÐï&Ê£^’†=†L†ÉŸôq*å÷ñÁ‰è†Ã}"ûœo¦­‹Oêvi:LéxDÓÜ'Ö¡iv>]JšIëH¯Ò%9M"Ç{R–ßËRÌ +I¶Z¯µq4׿ÊÌnídNkaíV›ÜÒv)°ÜHCb5|»²2OöñDùÓô¥Õ¡v·ŸôÀ¹[))Óå\-*#¼ïµ¶VÍT¡œ’Öûªýêù)·?³Í‹O—Ô„äÚJX²’îé‹*s½µô0%aI”$*·”¥SYph¥AÈÁÊ¢v!2Hb%ÝRç¤Ê.6 +×OŽui añ/æº(ôV• b®HcqÅ?³«YÂYÒ\2Ü¡KŽeï÷¨Ý&cüÿD„ßà{EJ[#¿=meVåvtE‡|éƹºZñŽŸ=Hws7y|.ô³ž?¾ýpvŒF»räƒõ°Ä‚’ÛjÚŠ‡Aå ë|Ç € @ŸRjG‚™`Ø*p ²S÷-mD¡òx:¡I)ù‚‡ºÎ8rÆÈu±°`á*2Æè \ç\^`‡Š4ê¼’ÖŠ…/Ñ>¼÷µÑ>Lïì¥B pxÒÄé\&Ñ{/Eã…Ä l*Ûƒ#&Nò‡c&só01DæðF„ÆÙÊHa™>¡U¶ª(PøÆ•FÆÍš šéEå{ë€hýËýaÎC Œ\i‡þõDG<ªðmmä‹ô¡y¬½©†çïK…èÐ@øW€ß%ðßÈ}ö±üu__ÔP¤½| Z@V!${rÃy¡³¯¤+Td_`P&訲Z͘Yh'¤Âu?nháœ\­£¯Y#mU@ÎJOCbÓ°l›Õ}‚bxò¼©iÃx®ÁJ#¿U +ŠÆÔÁ«†x">뀗09=•ê•D–éª Eg UÃŒƒéø¨‘oXagÆÁ!)X]ˆ)LzÁL™í(d*ß*[V( ÙœTÂ{ñUF¢ ¨Y ß±èãžœ¹^iðíØø'MôzˆÑááûN ÿ71<$rB 1¶¾.Œ®Ö,ƒ^›=`—¼ž¸UÓµî§+zw ÔI¹äú×àœ½;Ã0\T+..ê|Ö0yH› ¾cý(Å)ðB e˜K!@–g0vÐ `¶`npJ”‚ɱ€¾‰#ƒ a®¡²[J±éaÚl‹;”Õäð“ß38NDe ½å cQcJ)±àñ‹†qv|<ˆDã ©ýt‹Zï#„ª‡ÙjýäÄv×®ÕxrÊö÷àT–UŸ£x x\¬)9ăV"èàãŽm@ù6?Ðŧ,.TíQ2îR½ÔüÕKGtÌÿ|õƒ|uï‰×,Dô›*«W²; Í"ùŠ1îê aÍŸöO‘œÚ†0ŸŸ®ï?Rû…n'÷×wþcðx–»üüD<íÞ8é^pü¯uéätVljÁä­xü—Y x]Š%Š?“Sðñúþæš>íŽ[yéó‹ûl×7Ú£–âØÜ#|{KñµŽo÷R6úqÚú½õ7 =iCendstream +endobj +1135 0 obj<>/XObject<<>>>>>>endobj +1136 0 obj<>stream +xVkoÛ6ýž_q‘îCT’%9–Ü-Òç>4I·¸(†vhŠŽÙJ¤+Jqýïwøíxq‹.d%&ïóœsï—“”FøM©È(ŸoNFqYÒîÑÞâÏ&qNã²À{šgñµ‚8<Âõíc8<*ã4Îp!}Èn6)âi8Š×b8ûÙìlºá;fÓ³4³ùn}#ÚtœÅåa´Ïf'É«)¥cš-PŸI‰—Êe:¢ü\«…¼íaõ†5sFÌSÄún)T'9ë¤VdD{'ÚŸgŸ`jLiêMEYSgKi¨Ñ• ½8¼X‰†©ÊP·dnæ8§ì;½SòkòFªþ+™éDCsÝ-‰¹/Èt›Zã\÷ªCXÖûˆ¢43ëu-ê:kšùŠ³®!·ZèÖÙïvL³àið1XäH±ÔšÉ +û¥—-ÞQ­êµqàT(ÞnVÎ8‡º­h-ìÀYå<ß\>#^K„rPŒ8Ë&hè¶n¢[j¸Wwº¾¨}UIWrÔÒÖh¡ëZ¯¥º…Ç–5¢-ª©ÝwÈ;æh-d-žúîŒhj›ÌäEÙY\âÎ=¢U-˜Hs!PoÂ÷üí‹çôûõûÙ5ñ%Cz-ÕÌ>¥¢¡ Q0ÓÙvs„%¸ ÔV»Ñhl%:&ëmŸÂ·µž³úïC~BE·õ4tN‰C#Ãi#xßÊnƒC¶¹GlVºa½Ö·Z}ÛÞ/ë×7T‹;Q[øæ9 é ËVpÝ4BU¢:âJ›p÷WÙ,'¶V®^ÎÞ\¿¾¾:–ûŠíç”݈õ’µ"‘*±½L<Žøl«<@ÏiãKµce4t¾p@¨pŠnzZX®zÌkÝ~ÞòÍSp ‡ÂòV[ls¸´ ·ãKWü'–' ‡o†I/oè½T•^ºš%ÙZØà¾TÂór‡nÓµ=ï¬ ¹º{&:Æ8ñÚ*Né¹óÝw Ùem˜uáÜj‡Ÿ†mhÕê; b´DÉ©Ûy§¡f©ûºÚKõ0¼{*eAaUí Y4ºÍ +šé dÙ ‡\T6+[ WFKe+°^×B†ÇX;àþ‘KÚ@‘¡d˜Ì™YRTQb3IN-duJQCÃû]àáÎTÐÊïœ#z©¬¼µÊ +=¥_Wëß‚Ñâ;£; ŽØ÷B8nz×ë-Ž§Žïa‰.=ŒèÂ×ñ8 ÿ=Û›­¾;q_c¾…‘Ä9õ¶£‚x@W»ÖŠ&ÈŸÿQÌŠyÅDc‡JÐï‹áÿîï‚ÕÛ6¸w‰ê1dNuþQ˜§?þ4ø=ÖáèGîÜk …Ñ=oÖ•k&þCØì#vÌ@d°Eðº7ØèDáõÐÏšÀA[êE-¾Ê9†|#„Z£W¢…Ò@YâØ•‹Ü«o:Ð.bµV"¬$Ñ•&³\‚uÌO$ôÓª ë þcáÐAÆîiƒ‰iϨÍ2ÚÛ1@*¬=˜ «ëÙV>”èœpºã‘\˜'. Kï 7NçÂê|áßÌ› ‡à y ©ÙÐ;˜÷&1ö#È~Ã>»UÃëØö˜áo¬—" oXnP¤Ž:8Û»d“1Ûô_€-«^TÄeJùÔ÷ñ#6]·$¯Êp Í˸œæ4çq1uÛÍÍÅå³ zÛêOÐXz¡yAê¸2§Ø‘GeNQ1ÂÆâô#{è¸ÇÅë½½›ÖäËÙÉ'ÿX²ŒXendstream +endobj +1137 0 obj<>/XObject<<>>>>>>endobj +1138 0 obj<>stream +x1OÃ0…÷üŠË׎ƒíŽ)…­TK,,®ã@ªÄŽSàßsnʈ„,ßpwᄃ÷Q0 øÈ +¸;”P‚c­•ÄZáºb«‹õC Œîò®Pt ¸O)h»j<ìðÒû6|N𨓯uêÉÙ9öéÚ0šÞÃèÆ£‹äFŸð ½,%QÙ‹nW¯•°Lq—aÉ8©ò’Ì\ô&õg)€ù‹½[wÁ§†áŸXu5Ÿ"jÃß.àC³ß6ðÃÉÙ»`çÑù„.‚Ï~K&01Å¡”t“"¶ëßfŒï`Æ£3e§fNï(ëíEˆñij‹Y_ËšH¡–*•[÷ºx.~ ÆrPendstream +endobj +1139 0 obj<>/XObject<<>>>>>>endobj +1140 0 obj<>stream +x•WÛn7}÷W àU€du·ä}HÒø©\X}3àR»”ĆK*$ײòõ=Ã]j×òºMe@²¸s=sf†úv1¦þÆ´˜ÐôŠòòb”-—Ô¾¹-¾Œh2]d×4[.ðÿx>ËÆä$m <¢ùßš'³i6­Ÿ|\ñCØ>½ÁÒðæš&#Zmàòj±¤UŸã$|²f£¶•SfK·¾ÐÆ:*”N­« Â;åÒ'´>¾Yý}1¢w“L JaÄ¢ +;¨\e ‹°¿ñ¢ö÷n:Ë&,~'ʵ a +vSKÍh©Êµtd7ô§QOä>ÈÒÓý@nßÓ]eèÎjᔿ󖄧ƒÔš?=áõñî7ÚˆRécôõ»2ÕÓ[2ö@UPZ}—,Ùä1žÖ¡Ýêj»k-éó\è‹-*-Ù9b¾Ã9l„#K{gU! ¸œA€¸`Æ:õ="ãpÒÛÊåçžs d­&/ݣʥÏèÖ)Tö9!ÅO‹*g`DãTÈ\y>‚Xå‚AA:H°V®‘£½ðþ`]q–s!‚X (ßêb€`±ƒ¡ ù0jEáM*Ól¥ Pí[¥ÀDŽ1â£A€0|¤£‰­¨a؉pÂÍˬ ‰S©-wU¾C²ùΙƱ2V#Å×"yÏŠ'§Â¿¯œ§IÛ­jˆzÊíí¹P//¤Ý¡×Ú$¥<³ýÉU{‡;-æP€]‚J™ï„Q¾¬!BÿFæ!òEJ`µimœeiI•)¤ÓGôoã#¹}Þ—ÃçœTfãºܪœíò·q ­¥‚u0qçlµÝ‘5< +-RãtΖ2cÕúY´Áý Óµà÷úH²P‡Ž2…B#UBGû KØ¥-F +"QæU§ç =Çy€6Vk{ˆ®€µ!ù$Êý¿$R ûøq‚¦îi†"£Õ˜%{;YºÛ=·«§µ”‘*“۲İä¬<s±sÄx +hä80ÊT DþÕFì‘3TµIŒç8rê„Àt ¿©4¤8©fPœ1isb¬ÑgïyfóPAwœäÀh-y p@ØBŒš1„­’,–‚|Êå>D +æ0ƒºÙçÔèä½åÃþP¬3ßÈ$Š bÁ†7#ºæE0ÎfÓ öË<[âëàògóÝ8¥Œ°!ã9 —‘´‰±mYâÜá”ÿŠ9ÿ’†ë¹‰³ïÜÔy53®HGœClC±I„Sl"úuccD/•/ãÆHž(Í×g¾ «Úÿ·nM?tSóâ¸K¡ôKÍ ¹©y°;´,æg°!ô<·• »›WAvÜUÊ÷Ïôú“µ…yý¥W_©ú5/A†®nXsuzðåi—ÖŽûÜæ«3U îøëô °´ ø3ÔÛMŒŽ¨e?Ñ(<¿Ñ…öàã«Øɽyœ)e}áyeùºð:ÄÀP¯Ças]P&×U!›ùZ_þDõ2CtýÉÓzz‘jùvðÀx17Iœ²¯Ï´*UHBqØwªÍJ&ß?0]£&8düó3¬³ÖUŸ•nqb,[ì¶n4lYãò§{ ²'£¶‹›ŒœµÁ~m“b+'ëé¨ÇJ!Mûœ5”÷wIB†Ïš¾mŽz¬ì¥rkt'«ÅXêö{ÝÊi´$¶j¥Ë×-±´]ôÖK=à[ ¿ÃÝüTÕ:– +wú6É+Ò<¶ÏÙ¯.D·D1£Ò†¢•ê±âD¡ªä:âR®¹ñNJ|Ʊ0?küz¬vRòÜŒ)µ‰‡mFõe¢=VpCwqõ%t™d5ÅXšÙÔ˜Þ,›kj÷ù2›Ž¦¼ÿ>ýŸ_m|xå—Úl1ËWøáÉF'×ýçÕÅÿkqÂendstream +endobj +1141 0 obj<>/XObject<<>>>>/Annots 502 0 R>>endobj +1142 0 obj<>stream +xÕXÛnÛF}÷W Pq‹º_ Òê"­Õ·íŠ\Š›\f—”¬~}Ïì’"Eˉš¢@›¾ˆËÙ¹œ9sÆŸ®Æ4Âÿ1-'4]P˜]‚ÕŠÚ/f‹_F4[-ƒ¹û:¢å +?I1ÎŽh:_Ó³O&ãq°Â“Up{ún Fõ—Úþí2XÔF&0ÚXïžüõÇ«Ù"ÓtL(£ñ|„{Ý/)=\½Z_ ßÌh<¦uŒ€«%­#wψÖáõ:¿:Mõ^å[’"+RþÄP‰'©Þªœ +£·Fd¸¼HE(­{TYI:v?~·þ€;,wÇu!²ß‹}´ ¬öOšÛ¯)ÓQóûD… Á‚3ŇF4Oáþ:º¶[ÊŒ +aí^›ˆ"QŠÀmï¯{ eݹ¨wÑ ;jéýEG·FWEïäûïh¯ÊÄ…ì9½¤§ÀföíLNç‘mD¦ê¼*÷¹¾W¡ÑVÇ%Ý¿ž‘ÌCs(JsÄ~tnO„M¤ h(ÛÚÅ϶Ô¯¡¤Hó$K•5ÃT‡"ZvjXµ¥Ö±ìŸäùÙ ¸Úx#ϾL@|9µqݾDÏ_L‘,d1huîJâÒØË„b4g©,Ž1¬º2ô[®‡?©¼z$7N–ì{òù*ÖXFZÑ;!±›C]Ì4ö¼A¢MáCŠœš€Þ–Šœ6’B*õl!C82ÔÈ'gÞô ŒÁAÇ5¢í1]p¬M&s2Už³%—œÖŸm:µÀ-VÛÊÔ÷µÖlhTQông@ +†,f>ŸuæO­ºþ¯kÞ÷Íç솬”®f‘«¶<ÀÂ1â3>ZT.”høcoõÍGÊÈ?4ÌäÂ&ÿ"EÊ–Fm*NOÐø|Ë´8fÓ &ó`…ïà o¾}ww?#>Æiï»ÏLð ó «…âIóÇš/¤Ù©Ðe´k¢gRT ”Î?#?U#j>ê„ *¡\G2‡¾‘0ÔU^6¿Âè˜AûÏŒi»6s¹'í”Bâ}=–î;êÁÍÙN)´pBŸ)ƒ5šR…U* =íóHÆ¢JÑ} â˜gQ‰fT'—àü@ûWaäØó+`t’òaª6C+Ãʨòàz§Ž„ò +Sÿc(òÑD…Œ<® m;+éžµÌ.´vó¤]h§1‹æ¾Ô Ë=ÅÛ[?RZÈ5ˆqŸ]£`΂¼Á²™ˆÀgšCæqâµÓWîpŽç¤Œ +ÉÕ¶IL-|˜ 0ªTè8% ‡ +"  ¹-žF$R°F†»“ ²K^…šÈ#Ú»ÓeRY¼y×Pk‡ô[7›\¢±œñ0ùTÙz õnø?⾎ö"½Pÿ-˜? ðªïûš*àO¿Ô?ëR¾t,ëÄòQ„âŠÁ]°R&2Êf5`h‡ÓBc¤l0+ÆØ©zذ•NSvPÉúJ@çžák™U&Pä[ˆoíŸËDzÙ&¼lpŽ:z—J^ŒŒ¡që7N¥§×}Nv¦F½†œQ‘„ß©…ù­0Nr zÙ†ÖE!6*Å\Ázƒ ‰Ç”sQ¹ Ó‰Tæ;etÎÝ®3Y*¾ó¨ŠšLzé‚÷…k’×[\š3«Æ1{¢ô4àØ z¯–54ŠÐí ‚˜ PÈΑR Åó¼h~ÎY&:"æMËáB&Ào;­O½Ñ¼gÞä¹@Ô1æ?”Z¡Ì"Ê眾£;(` ‰£m…b  +©Š™¢J7Nv÷{:ï%%y=5 öŽc Ѫyyñh/ ¶x&¿®$\ä'£¸2€†¡D¦E\ÁV;× zKcì㼘¦³`Æóu#SÁ¿w']æëÞL-¼2á?ÔòHز*e7 ÈÍ^!z#Eªþ„€2:ƒ³M´Ø;6*¯Å|ü·öŸïM»™à°=Y Óèôl§Œ=äái\×Xôy?Hʲx9º›—6Û¡ÛÂÕq¨‘D×oReîî8Ñ 4= Z¹À$»iÕ¿‡ÚðͪީƋe0ZMi±œË[W‚‡»ûWwôÎèX'èuwIa_Í+ƒåû×J6[΂å;â£S·Rü°¾úåê/E°7endstream +endobj +1143 0 obj<>/XObject<<>>>>/Annots 507 0 R>>endobj +1144 0 obj<>stream +xUM“â6½ó+ú¦*̇ ›ÊÉdrɤ6ª½Ì¥‘e¬,9’<,ÿ>O¶™&‡5ÔÈ­î~ïõkóÏ(¥>)åsZd$êÑ,™Q¶Ü$kZ®sü?ÇŸ“TÆ®¾ýõÛ(ÍÉ’V›<ɨ¦׳á¤i7º>×4Ÿm’ÅUôúŒh6K6×Ñ,KrZ¥kÔ¯i1›Ç>Ý)V¾>#ºJñ*zuF•o¢WgDóü¦r¼»\­>’ܦÏKJSÚ—Ð+[ç´/:5f´ãÖK7mØû“uøÀ^R¨8`C¬½¥ƒ$Ü+èpÆYÓçí ½Žåñý®LûíõøÄPºqöè¸öĦ n­eOh_)ÿ°ÿ:šÑ$]$s@³slŽ²–¦ïTñJ° J´š>ScC rñÆ&ðQz¶Æ 9©Pd‡‹lI/J8ëmh+‚B¡'å¤Öïºî¤{SBÿöiäÊ–ìˆ=ÜR´H·&–<©Bš1 ÎßÄ-:àëXQp\–J$±ÃôyC)”OKŒ £N¿XSªcëú”Ø­>$û¬ïƒ™Ì£ ‘µ¯$´TQE²M‡æ* CÑ؃„@\³Nu¨;ax«µ=)sŒEJgëN(k&ZI•Ô ®8<ü0’ïív_¶ûŸéæYOç ÈÓŽëcµæ±xäÉÁ/–¤áƒ–9|Û4Öˆ¬™PO»Úyp<™ÄéMþVƒñëêè®eC€ßÐ&8«8ÿœ*‰q8cÃÌW¶Õƒ:ÿ¨(„m£‹àI/½Ó­ÙÀNóŠÎ'pÌ ^!Knu€åáGeÝ]SU,CÇ3Ê(´„y‚ü†·þ°Žm‘¡ŽÆB&6x2BîG< ýÓCw{áYŸøì‡rþÄ]gø%› 'K#ܹ µ_sO?ÓùB÷$ûØ4:¸¶E«ã:_fÛ5¨¢±ÄS¸°Á¢ƒá­µåk,‘,àÛZƒÀŠðîy¾<¾½ Ç̺-Ãn]ÌøÔÏéSÌž>¯.Þúï½_cû›ëáfšá'b½ ù2¾¡±v»íËã–>;ûï z²¢þèÖ6fN. “|¶ù_˽̗Iž­ñB@õE‹üºý9ú™7 0endstream +endobj +1145 0 obj<>/XObject<<>>>>/Annots 514 0 R>>endobj +1146 0 obj<>stream +x­WßoÛ6~÷_q@æ¶bÉvìè€d×<ÃÅ0ï’h›­Dz"e×ÿý¾#%ÙÑ æN$ïÇwwß]þÄ4ÁOL‹„¦·”•ƒI4Á›îëןø ÍçqtK%ͦѬy(èipõXRÇÑüê0YL£˜f‹WJšNn»'¾zýŒÓÙ¾7MÆ›Ç$îÇÚ$%v +¤hQèLiÀ·UÛÖt›œ{©Y ×Âf>2‘W‚¢V‰G`ĺÏÄY¬d0Œ~l²%–«ÐˆÞQÕ'½ ]4¢ >ý@7¯[_[2à8˜ù=Ë…”1É…>Ë}%ŽJèS•'ÓJçÌ„wsv3™`X5™i-¼—•üŽyT㓨=tQ}hjµ™>x +N„†óºnVºã©‚É9M0šæÑ¿Ád¯h͸4Í⛶.0SYäУö^Só§§ÊXÒhGzKO÷î_õÄúƒ zîfMÂۛʷö%;ÚzK7`[S¹Hrs¾`éÒ„;7«–Æ Óe”‡ô”wSñL'€$AÂD#oÛ­×cýIÇþ1ú—¡ÞŒvþU8›Ó)v¢9V‘å_ ô¢hdÇm…ü‹6 &¸¬ás÷¾UkirZÌçÿ§«…¦±¥gsïÛyùÞƒÞlS-¦ßæô3ýž:õ£Ð1?t/¼¹4`ÔÕNy voê"o „‰æ «RY^OÂzü±@íÊÇ/GW•Jôûå…ýбuÆS»—ÑÅ™}¸žíÄʛ͌ÇmVIÌ°ÆY¹H~ÊÕöì™/4„˜>…5¤ „¼?øÆ’‚Áðwõìbc“scÚÀ +T¨R… Ì„¥1`ýG¬"¼ö’8ò­Î>BP!cÃ÷±‘”©ÂÌõáÒÍ…Xù¼ó¥¡®å¥y¦Øã§snÿ°–_Ö•Ùb-nñOkš&äëÁ/ƒ¿\àûïendstream +endobj +1147 0 obj<>/XObject<<>>>>>>endobj +1148 0 obj<>stream +xu”ÍnÛ0„ï~Š½Õ"Å’\K9&M}kÑ".zñ…&׋TI*‚Þ¾CIN[#µa€àÏîì·³þµÈh…oFeNņd³X¥+ÚäEº¦uUbã瘎ãÁÇ,Oó˃ûÝâf»¦,£Ý±6UI;Eˆ³ZÑN.·ÚˆÓi Ϻ–BÍä‡æ`OZÒI›OÁRkµ q ‡Þºòµpìi°õ„kF‘ÂzÍA¤W»çÅŠ’|µ;µüáÙy²†Ž>=“>/XObject<<>>>>/Annots 517 0 R>>endobj +1150 0 obj<>stream +xW]sÚ8}çWÜÉ! é¾¥™¤›™NÚmh»y¶ÚÊ’+Ùaù÷{®dc’N3€ìûyιW¿Sšàß”–3º\PV &ã ~iÿ|ý8˜-–ã÷4?/¨ ÙÕr¼l¾izt¿t9§Óîwœ.­%~nh¾¸‚Ý9¬Nh†ÿNÒ&\N¦|||ða5¸¸{O³ ­6ˆ{±¼¢UÂÅ/ÙðÛÃý_ôEºBy¯¬¡ªò$LN?”ÉíÎÓÊ®³Lzÿnõ÷`Bç³9ÞÞXS9«é“òU8aÓeôq~9Ïø©ïJî”yö²­0Ïü%x,[žjÏ?W[ _ÉÉdÜx™ÕNU{Ê•Ðö¹ñ4§é´ñ4[¢ðô w¤L0ò(ŠµàÂÀ„“Z +/Iùp$ÖJ³µuÝü2­¤AÚ•E,’ŸTŽŒ¨Ô‹¤6/« +q¦2L/cŠ10ZÛøõ$²-l®6ûà´6¹tzÿZêã”î"¦û`+v/*üAÈ)\|Ì„“›Z“±8³”Ù¢t= Ñ‚´›à2”xk}E±0àjc8kF!@_)­÷)»–{xÕ:Ù(-éÐ'XВˈèDcWä…2@€*š ƒHª~R÷¦y:¶„±%Ö¥åŽçr#j]ые¤&üR8QÈJ:â/îfM¿‡dà;Óäë²´®Š§ CÚ +Ok) ¬Éœ6¨Q|„MIÙn„ö²oµ=~aX¹ºÿÔˆ¼¥BUÖ(kø¡R>À­vàl ôÆ,CeúD 8ÿÃîZø„º·°ƒTm¿Žf>6 ¸C®è,óuˆ˜F¤hº–çøšý¤ª¶¡ìN=o+*,Ã}]W§GÔண™¹r2CW÷L«^0•Ì9xN…ÌEƒè^ýöpC¥¨¶cú±E3¸Í…45•¶ôçu9âØ â(æ³h;üÅYT²R²Çõ!¢ˆ&pA[]$À°ù»ÕŠ´vLYªË…±®:¦ú4~ma +¸±J] dÜ/@2dÀòJ¬A•«W‘Ê–À‡ûKuqwHï±´ã6Çts¨ âÆA”½­{É|qøÛåG'…;(jÏøÉ£×u®XËúϱ0ôÍ~ÞéüV•½‡OË}ÒÊ7Ü$À…¼2Á”À%°ôJ瀠ãF/DSæè”Æ!#"{Qa¾=GÅ€Œ½Þ˜¦›‰ò0ç›Úd,A¢/æ뉸A:"wð^¥ +‰)½X£÷<öxºDlØ{l÷o-/¯czw¹m„#ô‘‚Qí"Ì5U"ÙŽöšÂm€o ­f\›·e1íQ”^GbG‡â{-…³Ëg=0'Hä¢EAìRk6ظµdw&ÖîÂgB3¹7ÐM±—­Á(‹FºÍ€ÃþQÐïÇ%æ<š5àìñöë÷Û¯OO°OÃO¬2lçé]/òÎKÐZ,‚Ñf;0£¡~¶ †¿¬>Ü~ –SdQöРéF}kζB¤!Õî +~Ýmû¬lëÇ}ëH/ßp™KŸ9UÆ-­b¡'•Ø»ø3gØÔ/ê>p¹ÁüÊ›=‘­v”âãí J±Q,*ÝJáýκœrQÆ.ùôîH¬Oˆr£íéZÑP˜‡ ÄÝMˆLNJšºÅêÍ%è¿w ˜ÅÆìŠeK‹Ïðõu' èÃZ¬ú-ú”TRyè~R…NùÎn˜½5²Ða?;Ð$–Œ i%~Júü:»‡‰š­ÊDma*"Ǹè…^îñ ŠíCBNxÏ:/õ†ž†aóhB…ý±“Cp‘+_j Kc€€×m-°ê\5+HÇ­¬£}­ŒÃs`Ù*M'ìÇ,“ëP€Žß€J†j|͈o(aí\…ÇöúÄ6rMÓ›ûaHÄXoârŠŽ/a è¸/Bi±æuG@ 7öæ°¯8kOÖlN|L׸”ðÎÒT3ÛÀ< õps„Qµ°(ã­…¯€qï?ΠÇÅÔ8Nµ*‘ÊMm1ûµ=¬h\b¶Yv£ž…Žq%1øšisu¸\òuwÈÿ¦“ëï|9/W¸`ÃÐ场] þü ¦+@endstream +endobj +1151 0 obj<>/XObject<<>>>>>>endobj +1152 0 obj<>stream +x•XÁrÛ6½û+vt±2#Ë’íHN/;±;î$Ž«I¾@$h¡&-«_ß·)‘”“¶“ÄCàb÷íÛ· ÿu0¥ þLi~B§3JŠƒÉxB³ÓÙxFgçs<ŸàŸ•”……³É)^_Y˜¾}7>ï/\.Ž¯Ïh:¥E†CfçsZ¤„&Z$ÃÅJ°r$4Ý.(Y™µ¦Ä…Ð)ù•ð´VyNkcŸðäWt/Š¥Àî”Dž›5 ªœ´qí"-”VÎ[á¥Òªg•ËGùfñçÁ„Ž¦§ãœ=LŒÖ2ñö >áøŒ`éÆ„#kŒçõd%ô£„'’à™´n¥J2e°ìÈhZ8%(7‰ÈÁõ}\Ú8/ 2¶w¶•…ñ’ +Siv 쇫чË1-V€ƒy*Ë\²?¥°žÏ…#lòøzVC:¤{™äjÿ·zÈ`:™TVù aÙ +»¡5Þ¼„Ï›ž[¿" ņ.ò\9ÄÏ©½ZHQŒZÎdÖB(]ïÉ|INy9Ž^¼£)²Ìé>:=¬ý«’k¥8€…Re‘§Ji åœ2ÚucÀ×'sP_ƒ%8RÙ”–•÷ððl‘x»Ebp·³5èÖ_Žé}®’'vf`ÓÑÒâÍQU"©¹yDR_°ò9ð;8Çõy-"µ<„ÄúýöæÈ”EfJ'bÎpÍ&Ž#U®ÌÅlœl"3¶ Ÿ¢ûMlŒÅ,"9¸¿úòõêËÃCàýÃð£A,ZòáM/æÖGßB™E›' ^ÑP§-ÝJyóù>XnB‰4E2¢ž5vç;¶‚§ìbc( ëveø£ª(³Ü@•Þ;©ówŽL¥K¬*=*Š œo•JíU¶ágƹÆOnHɸW8+&¡çÓ/WïE¦džvB(…s¦”RáÅR8ä ”@ ù›P³\¿ˆßC\zÁhO"ÉÉUei¬%'ƒÅ¨tÒa&rW+Á®æUM¡À9Ö«(ŸK€”J¡Cvéjq¬‘ÈÁdpc´ì1j¸åy›ûA¡ÛGÀüຂl¿7Ú[“ú ,àCÛBD¶S ©Ê2¨’ö!36ªj8¾‘%݈œ¡›Cœó '8¼µ@6‚Ö½Œ +t]åeÊ:¿/(V¯i,¹k¶u·Ó–n–8ÙÜÔ‚J9 +0bKñãGkªò4yÀÄ’=47‰Fg­t¥Ñ)“r`¥H#°NK~/p<þ hÝ¢,¡#ËM-ËJ‡çWVJ’¹,'çþâýÇØ0¬C{8¢Ã5~°W‡/‡´TÞ5¶‚ lëÁ×u&[HG} ñÇ [km7Óô˜›ehž Šè¾Âʆ”]ø‡#T.1r ],4ËÎÁõ¨kÌMð­åkh-Uê˜êp%f—®ÛÃVí +TaöG¼úEœ!¶§ïƦ!…™*hš´P¯ÆÜËSÇíŒÒ–¡» ûuzÁ<Л¸ug “’}è™'ÐLž”0´!:p•ÞAÑ FuOo²9¬IÞOa¼Aœ»öä'TÇ×-{„¦5P²Ó;…µA#/U{†`’Û +eie¦^vdb}ßâ™À¬@I"Ûó³n壙ÀÉ>¼—Æ[3V\¸h{*6‹ ]+K›Ž‹aâ…gÌaFB•T¹¨ úY`±ô¨ ʾ‡ÐÏtƒ1Ϧh,Ì tOð +«ºh, …&+`Œ³€AŸÈH›¶²—Ç…xêkÇçfŽÞCuIx(¦lÇí»mcÍ^ôWž‘ãÅl{³!¯6À¯ ^7ê¨ +€£Ïþ‡öÊË Vkão +Ž–YöÆY¦i÷àêdžÀ?„¿M%ïúx3As;ßž‡Î¨a×!œz=Ž|{Iÿò­—õ–þ£’ßäÍõìQ‚6Η»V&ù"žd8>ǃ0(¡ÀyøüÃÊh;áàâ»DÙÅvÝ™êèû}µáLàJˆa£fm;)u½!Š|ËÚÚthí½QeXPˆèO@ú•”î!­4î#˜qÒàÃ; ŒÛOÐÃVþ-@p'ÄÞÜ"צÂxUÛ­ë༖§3üãü”fóp™¼¿øtyAwÖü‰fJLRñ\$< +Œ=j¶Í'ïþ×Õõl~6žÏÎqíÅ0xú–]-~;øÇIzendstream +endobj +1153 0 obj<>/XObject<<>>>>>>endobj +1154 0 obj<>stream +x}WMsÛ6½ûWìè¤Ìز¾"9½9u=ͤ±ÛFöà ‚"b`Ò´þ}Þ‚”DƒJ'c #»owß¾]}¿˜Ñÿf´žÓbE²¸˜N¦´Z-ð¹¼YãsŽ?§( /æ‹Ùd¿ø¸¹¸¾_ÒlF›¶V7kÚ$;Ó)mäø«(¶‚üÞT™òÚ+Oü H›L9]©„Jå +í½¶ÆSj=lh»‡ÓªvF› OÂð··¿þÁ—韇OÿõnQaõnóíbJW³Åd÷ã* 2ª¡T犤S‚}Áp ȘҞ|&^cëwvZ”ï»Âéñó[ÜcÚÖUeÍ„~·zQî’ Yœ°\ºU¨Y—ëÚ+‡„«¶´Å¹†OÚôåKHäÞFˆ´©”²µÒè* ø +Ç…KºBØA…ðÏÌ…OeÉaؔ¨*§6 …g ‚}Iä¶ÏÊ€|@J[›*Tuž¯Ú:J’R8Q(`¤63óC® ¸%sòuYZWÅicV©Šý·oÐ_¡7Æ)ð0§~³#ƒ˜ö„*Êp¯{%kôÇbQ£óœR¡ó(¤$ÏmãxP»ä-öB>‡ïÏL+k¤ +÷2&;T(‹¶Œ"òÚÑAÚ¢´Æô¹õíTî$Ñ·4ä¨GntI£fÚnô:¢­®ð:Åÿ{3zœ’Åù0þÚ×v_Ë y‰pîT…f!à]àñ•äas¡Î]5À ½3ÖáM Ù ºEE9Œº8¼ÙT¹b=ìÓw}X8`€·PÖpDÙ? ikyè°)ß6Ô6Ö—D¥¢Î1t:J‡Ñ†A€Íƃi,ÓÒ|D4 ]ï™(€2ñCQC…k#3Å49Óp+¬2žžý€½z…˜sV˜ƒu4÷AçŽý±Œ]ZÙm$ÃÖ´{\”¶e¿Çâ`;cæço’TI µøHå–&!#bOÜez—åø;N»ÞnyºÉ“$ð“ü±.RÒŽÅ ¢aMeNGðЖM¥’XééÙ`‰‰zá±1˜§™..O5ƒ ŸÖǶ›®ï{ Ããà.(yL†JB ÎîÆŸNË\ $§„¢]®ÝÂÃ×aŸóÈÇf}\µ~¾>/XObject<<>>>>/Annots 530 0 R>>endobj +1156 0 obj<>stream +xµXÛnÛ8}ÏW úH_%w}H±í¢Xt»»õc_h‰ŽÙH¢*Òq¼_¿gHÝ̤vZ` ÅÛÌ™9g†ùv1¡1~&”LiSZ\Œ£1¾t¿þùýb>DcŠ“i´¤‚æÉ ý(§Ï¼žâÅ›(ÆÜ4ŽæÍ€§¦Ëy4¡ÅrŒ¯ͦ³(iF<;cvÏ.¦ÑŒÓÄ<[.º‘Û;äùœ÷ºµ<;³ÁÉѬ·j>_z«& lô#wò` «âîÌƘ}Í2“dMá-Њ›ûvuqó~N“ ­6À;^&´ÊÌcZ¥£Oe*IÐÎÈšÒ\¥÷æõê+v,š#zõéWþ[{ʈ¬&QUùìVR%ëB£tiè³(Ö‚ +Q7u§dy´@•¼×ÝwsWë]u³×užñcºžÌàÂ*Õ7û›G²µªrIFÚ+eÆ'–´WyNéV¦÷î†t+Ê;™ݱÑ5®Ø(ìwB•Æº¥ke FªtcïÔ´uÔÈtW+{L)„¹ݯD- +ieÑmy w°Ý +K{YKçMr_>”Úº{áùåäÒ_¯ u§/ÊåÆ’Èu)[ûØÀ˜ÔQ3å2½3F–V‰ø%œÊŠ¶®3TÄ´¶,½wµ8SµL­®l¸"¡€aE/Ä_ —ÜG ;3iÒZ­¹ø¬õƒj‰|LeeQ8Í‘ÒA :Mq ÞŽ“rË EÆÅ.@òÔ6_Å‚ úîÞÀÒþ¸“$ø¾=/ˆl‘gò©3¯×Œçƒ×õáÙˆ]Ž\脵ålAí® +8}_Óý…ÑÀXΓÖvjÂ럪c%k»„kW`K_YÏ)Y³±%ánx(È}C@Y:ã}åœ{$Q¾E‡ªTÐ. +S*JN[ßï›-4ƒ«‘ÊM¨ +ÆrÃî:f+?4pk'¥œ4ƒû] åFÉõ­è¨…‰ŒÊtÐ;8Uº~ŽmÚUܦ²5p»Ýµ¦¹t³ã—ƒæV*g ë+åsFÀ=|Vµ{G@ÊðÒf²’n–2-MyiY§øI…wøbUºËEÝôÌè:\á +íŸï¡äû7š›:†¨£÷}¼ˆ£yó/¼æ ×5?¦XGphóe´øòÚ¯êßhîýÓÂè11•LÕF¥LÖYúÅojÛ]ˆy›2½2ñkàW×Yåí‚s¼0XÕÂt°óÌ‘Ïm~Ô¶öÞ +Æãæ3Ó7ÚŒïÕÆëeè$N¢ñrFq¼Äÿð”ú|ûñí-ýU므‰~Óé®ÀÓÊU&vîºÝpŒßðú®áæÐ9ÌÁ‘Þƒ>·Ý;ižàñqì›%|Ü»ÕÅßÿfdGüendstream +endobj +1157 0 obj<>/XObject<<>>>>>>endobj +1158 0 obj<>stream +x¥•_oÚ0ÅßùW}¢Rð§„>¶ëªi릦Úúâ8†¸Mlf;E|û; i÷PM‰`ûÞs÷\ç÷`J>SŠg4_/Ñ8¢Ë8/i±Šñ{†¯´ óËh<ë/Ü$ƒÉzFÓ)%ÄZ®bJ2Bœ(¢„¹Ì *™}9OžfËñ[†m¸ v]g¢·žI#¸ÓæðïÃ-ÍùÉzq”rÌ´(¡²"#©¬,#½!— Ú1ÃJᄱ”IË+ë÷äØ=öZ&ë+š¢_Öh¾¨Uß)lgÜI­h/]âXÇTÆLF¬Lmd!ˆ9gdZ…Úw;©¶uÈ®¼˜¢>T²%«KÑŠ»½èI¥³ô4´ωY:V”¡ŠÃÙÓ9Êr:yüv÷‹v”ÒZ(´>V­gLI.mƒx:G‘¹ {@|8S”B6q­6…äOn/„ªIcRPb…£WÉêꯌt0d…ÞX¼w¦—ÛGHaãû¼B:~¹W‚öÌŸ6¨µ¹ÞSµ#<ʶLÊGi + #ƹ°–à¶Kï•0$šWÔ†8% +ž=±Þ,Ç&ŸÊ?–¦ðM]ý˜r¹JÁöE£¶¡!<‡Ö <0çq;_ÖK Ê^z‰²Ú7ËgìÓùécÑøÆz.!àø´uåN”²´a{ÑZK} æÔSèÉ®;rá“*ú–4n€¯"4¸ §•èŒüÐaa™š®¥};3ó˜dü¿¢oo±ÕùŸÎ뱤vÑC¶ÁC˜çwUø¹ +t—ɇùv°6ž<誇3QÜ€a³”ˀŸ˜â¢xÓOÃP§Ÿ2ÆçäÈûíÊV¸zG1Ôº“á_xô«0Ff™PÁï“õªqÔt‰·ÓjNóÅ*\¡×_o®é»ÑÏxeЭæU)0Vþ–öÕÚí£8ºòûÿï_Ä‹q¼\áµ€Pó•Ïð9üüñNendstream +endobj +1159 0 obj<>/XObject<<>>>>/Annots 538 0 R>>endobj +1160 0 obj<>stream +x•WÉrÛ8½ë+úƒ]eQ¢$kÉÍY<“Ûq"¥r呈„‚”ì|ý¼Y–íÔLÅq™ zyýúuóg'¦>þÅ4ÐpLIÑéG}ÜÙÿúüGgG:ïÏ¢14èO£¡¿ÊiÞ‰GcÜM‡Ñ€ŸŽgQì¯ø)ìÐà|MùÞ™ù«ý³Ñ oŒ¦~ÿ+IëÎ(ãÏá– +8í.øЛE§w +}Z¬÷x2¥EêÂÅää¶RºVzCó¦,MU“Ò4ÅJÀú º;]|wÇãI{¼ »8ù ëʤMR+£Û—FÇþ¥Áâ¥7r£´fë;UgTgÒYå¨s)¬<ó®lëÛº7´¨ÕVÒW¥S³³t³ 2ÄXÈ$ZÙÂ’*Ê\R×2e÷}êÆ (œn• ëy÷óí[Zž¨HFÎêüöãÇ«ùœ´(dJ¥*åò4¢ÛJn•i,mee‘‰%³ö1ß“ '®„¾zÊ‘ÏDä¹üÍÁ8q ¤+ÒT1D"§u£Z"Wõ= ™­Jaxußf-wbô^QŠ$oRi_³ap­,‡Z­MEIçF¤Œ²Jâ^+Z«\S³ÇrvÞ›M{7‹Þ Ê&¹~–šÒhJe!têRè]&¾”ÝI4eº#™å`OÈþEx†,pàÆ!Ñ®I"­¥·†%"§+eA2Ôöí×Ö÷êfVßeRÛç\ÿ7Ê1AÌ=†1pÕ€õŸl$Ôªlò:«L³iu¨±’{-í(È šŠZ¬ JÖaiK°î‰¸|7«C€Ÿ‹ý7¬ê¦Q<£nn‘I,YVRj²¦àòA0MbôºaM"±2MM» õ‡Ì  ÊR!Ä +‹û%šiùÆ@a6ªr +Éé±+€Ô +…Óˆ»¶5<Pöêu03Ö S¥m¯°÷´_W¦Øw¶•ˆ.hÕlŽÜÊ;pæ͘>RPh™B¤‡ñX£|:H(0¥ÛeeÅBW‹²qÚ[¨ëñ@jèeÅçÑ‚ÄÏZÝÇ;hN à¡ôÙ>¿cñLÀ æÇ”(ÀQÊP4G'-ËÄcÐqEäñwIaFµâø'»°_ K&0¶*’w™Z)Ftuä7(íì.è>/XObject<<>>>>/Annots 550 0 R>>endobj +1162 0 obj<>stream +xW[oÛ6~ϯ8( +ÄbÅ’mÙ^P`½,CÚ]â¡š>Ðm+‘D—¤âØßwHQVܘ‹:¦HžËw¾sÑ·³˜FøÓ,¡qJYu6ŠFxÒ}ýùëY’D ¥óI”REÓq4i%ÝðiJgãhL“ù ¿ü×’ÖؘÏ!&|é ˤñdÍÚ£ñ<¦þp¼ˆ4Æ÷”5$Ý‚5ô–ͧöâ85ãQ +ýÅé&úß쯱»áTo··®(‰ÇѼ·;gQÉŒíÂÕxŠM¿r‚{kìŽGQÜßí­ywôzw{kìNÓNKž$ Ï«Š&ð}Þ®ÜnoÝ”±ôgy×…‰Îù*Ëõ wó¸ÀS¾çò^oYÑl@{½%Œ%pô¸ÉFBé(„¾ çÛå)‹þËkŽi¹æ;É(‰¦Ñ4Ó2wtÑ2™ÙBÕ¤Öd·…¡\eM%k½ZÞ]^/(ž°„a+b8@ã"ï´¶¨7ôe§‹Ú¾üêo#Ü™ñ¹®s©É*2Ín§´…*IÍ®T"gÐíDàL®‹üY¥4tP U±Xk|gª^›lî™­À¢•Ì;+œáPz93—PÅ':ý%¸ŠË9dæ¸\Ôt#ª•87øi¥®EiÈ(g§»Œã°ë@EÅö‹ÚÒíÀ»MØbwŒÔE&„žöÆ@úê@Ÿ‹:W{CŸ–ÞUw\j\Ux ŠZpÖJŸâ»5£uû*¸—¤  Ðý™­jÊœ*•ëCgŒÔðÆT«ˆaóxA™ÈswbSª•(i'4°Ç†DE‡Uº3kU–jÏâxœxæa¼ x™j´‘,À,‚éA” Ó4Ù–„¡ó°ÛsâÈ ½*¬À••·n¬$JÔ®Ûv{¢W쀠g#½hbÀ@M¦°òöÕOžˆ#Z0sãh¾ÏÛ/ÞuGWŽJ&Iø\Q%«ƒáÒı"¯@ŽVÍ®g Xñxt¿EØÓØcj¤íÂɦKm i‚Wnk¥,ó ,+‹¬°%€^œ^H +gÊù ×ôskv{4‰Q™àa?OOçàâecôe©2Q^N‡ËVòSÖnTKê×Oº³Ò ¼d¤ž=ªå¤j¸ùœ+ĴΘŽ€¥ËÜ®äL¨Nʳ¶¦=â&eþPW ç^ƒ%TÆžGDï¶2»÷lÇÉŒ•!HUa +£ËÐJÜwô0ÃÅÈÙ&2dÊB&jäÃîàRÆ]vÅ ´}ðUöIÓØAiA3æÕª::´‚[ß +Xˆ +¥H~‡OJ.ÿ‡:G0‚À› VÌRdÒÝʧ×U&i»Ìà(ìñåsÚUBvkŠç2l×h!ˆ†|%Ë=º­Àž—ŠÇÒpu>6“f—£ïÛrï:8åBêÑôõ,ÃÛÁôöUˆÔNl0:¡|T +,jü¬`÷C£o7¡zþ™Ó +Ì@hù­)´äÆÉâ¼ûÓ€ ý˜+Gd”ˬs ´ƒÒ-Àéjã¬yÄôaŒ êbY +å¦AýFq@©´ê | Ìl1q}jŒm)åè Ežs`}#Ûæ½?™…ú¦±[Åýå“ò8úÕ%Fé”KcÃLvR}§¨pkfw³×½kܹÅ~ +è¶E†€»~Š¥ïØìô°×p¹ ƒE·ƒÐnFšJ€7¾´·×w;ACv´Ûr”\JPˆ*‚ÞR0¿:uï˜ß©Új´I¨ìS³T†Û=L£Jô¨{OŒÀm¬,j3M1¢ßºÞz¢º핾÷IÖ…Vµ£ß~+ ONw<9íyV! "—bütEݵVÕà€ÒúÀ+^0ëp¢­KI×¥eÖ ‚Z:zÎ%Tß³ˆ0¥œ#âh+Xqè¬Â4º.¯ÕHK®€ü´V/î5½EÃø 1ö·Â¬‰ã>ôvDÙµˆê^–eDQÂ1‚´Ð45Rƒ9#ÆŒt9ÐÍB`̱£µue%‘×ZÑŽ6„* þ7›mDÃá€ÎÞóäC(W\cÄsS % Lì0í±* "ý™˜gɪ)m±C,³²@R°ê^mÑà2 _1uÁT7A·ciV9 +Uf•ÆâH s´xùÕ%YS``Ë@iP™Üp(ùÙèDmk?ÒÅ[…Ù®gj0Ï`WÔvnç˜WQôC„Zya®ý$¿£™gÑ`5æ[r¾’ÜE¬0Õ´Óí¬ìëwé°/̶‡t[ãž[8†ü ¾öz?‹ÿ?“¿ç)ÿn?Wô¢—îßçé ¾{y—J÷&§Ó(ò«†²僛7ß¾¡ßµºCXè}ûþåºßE5Åkþ|LÃÙí3ï]“^Mñj‡wº|0ñÅ_–gœýßôUendstream +endobj +1163 0 obj<>/XObject<<>>>>/Annots 553 0 R>>endobj +1164 0 obj<>stream +x¥XÛnãF}÷WT„ÆX´î—ÍÃB¾eز"i’]¬ƒE‹lI!Ù +›´FA>>§º›4¥d˜dŒ±-’]—S§NýËE›ZøjÓ°CÝ…ÉE+èí[¶Å‡ úí`L½Ñ¿÷A›2I<ÛÂéêÛ⻋îpt©?J¨×é}ÿ)¦åEý3îú0äžå»o†ìoÞs¯Ë¶œç¼[Ç7«‹ë‡iµ¡vÐëvh€Ðúƒ­"P‹Vá%ù¿5œÎz­ò#ÿü–?ª4ÒCãþõxÔx¿úù¢EÍ62‡úÑngò8ÿ0©N׎ÎV4‰÷;ñ¿É¿ç_´ð4/+uç°°èµZ­/žžÏoߟžëƒÌæ·öüõCŸÚmÆ¤Ó +†ƒ15;£`4èsB“Õê~¶š>Ͼ¡Åý÷§‹û;šß/ž¦Ë%..9ý뇞?Þd$A˦¤³Hf”k +‹,“iID Jå¢L½º»G]ÐR$kA;mò+Ò©$½¡ü€ƒ:T®tj()LŽâˆò¬ÿd× ^³3zéj'I„¡.Òœ +#ñ”=Ê0ç_sÜ~óá‰Wœ¡BEì®E/—*®dZ祱—÷.É°LrŒ˜ýpùÒ é{³Ùî¿Óš#Jd²4ŒÂv:Þÿå>SiŽ»"JTzêý’beòàkæZ·¹äÆç 0/2#¯¬oàÏÎ[[“«8¦½6F÷øPæênT,íŽÝëHe° 3…«k™J‘ï8@抇é¿6¥üÐBúÔó@àƒ­‘Ù‰ §ñŒ´å|—Iª¥ññ­É(b—y³Ó :­6RB1Ðâ(ÔsJb–í¸â!ÎrF_&)_De p½*<.RälŒ•}ø4‘+2*كαÞ"Š:¿Îrcs(VaTº-™õr©³¯©êËû +ýM¦˜)E:Ð Z×OÆ + Ðó^¦Ô˜I4Oöé,–™TÛÝÕÝi5ÐÔx:’–æ±@6ñu‰ƒTã‘Óƃ,cVXºT¯Îœ¦âUmñLÙ„¹ã¯ ‚ 1$" ÿ 8f§ t·‘ >©}/bËhÆÍà™r1;‘‡;fÊXö„#ÊY ‡JQb2²š øNS +Ðìb,0c–2ÏÙë)c‘¸ÿŒæâ‹eìçMýpº3,»þKÑ«ô Ôw¦2é¡÷—ekªARàP¦èeÔT[Î*×gé$ ›ª)®¥ÏQ˜ï”)Õ7‰¤ƒ0¾¯\FƒRjhöLóÅt¶º_ÐÝbú~L~˜L'7÷ôð¼ Õ‡©µföÏŸbsÐ#8zÁX5w"ÝÚ&D0¬4ûøøH&;¶öBëƒ +jŽ N ™o1M 3¾h…_EÆÅ=ƒa¶ºî`BúÆ0Mò\&{[@ø{UAuêì3½—YÎ*Å´à‡ +w¨3sRSXÖáÌ»­4 ¢Äð³#™e°›@)ÅÖ¯ë‡iæŽà;iå:Ç¡ +Ešba.DÊìcq”Q@+ØóD({Ôìe¨6 +–LA°|R¥&‡’ʈ+$Ë쵎evp-}û©¿;måó 0\ž7iÓòa¤úð¯Óš×rºUø ª¤§`Dhp(K-«séxà fHå òÝÿ«ÒÁ.b‹ƒ8"®³”\iPI¢eY |–°ï ¨¯™p@2zð +`Åj]ä9D¤€ÛdJ›Î`¶à^?ü••a)cÞXª ­às0{½/öV Y +«¢úäÀï©LTØò”7 +Q&þñoíÓ/‘AAÞpšºk7ŠˆÛIØv3GƒÖ3¤lDu¯ÖhL°Ï£Aãê©”ÑY%áЊ×d‰]Ñ \¬Ë ©Œ¢FbG-›rˆc +lM[ëÍ-Õ‚c¹vºûÕ¢±ÑÜ„b}$Ñ‘Ú}>âÜáùŽù˜Ü>b‡×£³wËS×kýù¡Ól cm7‰P' ZÄnOÐÊ +µGË»›)Ž„=Ùl¸vËáZh7d|Æò }çËšª3ç~pW3Ê +#/e,3vôBšÜ’iè(_NÄ'n&N;=måx²S’cfóVœÊ@ÎÆ;vÖaMØ1ÿÏñÒ€Vó&„<ÖÜæ vâ„wVû¦si’u€åvã.—o0—@90iíÊ-Ýø7*²)KÆÙ®"µuÌ‘Ùj›~IÛåÓM¥Ë6¦+‚š„­CãÏvUr«3w4dz¬,pM}`5×üòäͧes1¿emDˆÏ­ô¼Ï@.hxþ3§Ü¾ƒÝÌC®’÷{‘Ù^±oaƒ…UËd¢±ÜYßvuæéë¾~Tù™ EH¼Î9ÜG¾íþB0êÒ`Ø ºc·Mžn&àœþ™õðN‡ˆ<Í!(nÒãEÓi[xŸÿŠ­7ìá-¬àS½6r¿ºøþâwr%Cãendstream +endobj +1165 0 obj<>/XObject<<>>>>/Annots 564 0 R>>endobj +1166 0 obj<>stream +xµXïOÛHýÎ_1Šît©DŒí' qRôÊ©Ž¤íII?,ö&qk{}k‡Àýõ÷f×›˜H=©GUè²?æÍ›™7“þu? CêGç¾çS4Œ¼£!þ⯖´à Ý~»ûí ˆ/¢Èp8§0èã§]e49h¯±{<ò‚önkSßzýÖ®ïF°å¾é%¦~xÇVâ½—€¹Ã~è¸Ã·~„£Œå„Í‚ñ¶–9áȨµ×Zæ Ømû +_l¯± ÖÚWÛkвCRkÝpø RÀ¦ùx8;lV|·½Æîñäس¼Ë„ƒn`ÃipÀlú x#æ‰fo·d´'¸¿Ýk-±¾ wï|zpôt4] ¡¢Ñ¦‰IŸ¦qWTUº,dB÷Oô9-µ©èzJµ"A¥N‹ZjZ¦²¢z%©sË¿êP)užâ¦*ð{e·.¤~R…ìÐFfYï[¡6-µZ—Þ›éW€a ¢×@ç4éNÖe©t [™ÐKIÅ:¿‡Aµp¶+{u‡¿2þîM! Ö¶EM+Q‘Ði% JÖ€¸4ù 3U沨©ÄÉOD~/PVÎj‹Åñíg¶R©\n¦Ø|Ûm­‰'c=K«Ú£«å +5g +‡ìu˦ „À‘õÖP%rIí!¿e©Bª™PwI—qœ¥pX+Y7~Å*ÏE‘<çµK1 ßóë ²6ðšKȧ¢–æ^ Ù&­W„«iQÕ"ËpÙÞðhŠtY¨,S&,ÈG‘—™‰ÁJmð:~«u†Ô“$bà*AÆJ&§›O'œ-È”~H½ðØá'ðñ~wë•j©¨÷‘´RõÏ•Œ5°÷bêHd“ESuø +Ætñ*iq6»ß]_¿ÐÍälö±H¿ÐDjDÿl¶MÏï‰ ÙÓÿÒ¼²ÈàY+УÈm;¦RG6®Š…¢À¸ÖÂAüÕœ¸F8Oiöî–Þ#UõïðbàCÙ(EùÝNœàGX‘Êÿ¯…Á$=Âß¾àÁ +eS?4–.X&‹L,«Ó™ÿ8í¾ïè~v¦à Íæøº½ùíf>_•=ƒëÅɬb–5dòtfÏïß;¼¾¡‹»«O—w4þ4¾z?>IooîhúîjB·wW×ÓË»Ã_çBFqŸÎܮˋïbu>ß+‰_mY™ÊÙ©…óæóÎ뙉ÍYaŽñÉ:ŽeU-ÖYöÄ +F[4k[Ùô:¨½®Ók„¤á +É8IXš®å†šRªè!F÷Zµ gªÚM´iBçO”È…XgõaÓVÔb!5ZQ–¹FÕ +ª]ñÁ”ÛlZžÞb°:]å÷^¬ŠÅs#]>¹k¹xÕó¼+j"µGã¬RPT4£®… &OzÐ&#®ö¬ksm’ÄyŒžÿ7w¤¬fsÏÚ¤pª\±P«ì§Ñ^ÙÖÍúŽK…ŒÑ¸oh¶$î¡ð¦™¶B'e¼®!òÝ”²hȾ|œw¹pŠ;«ÜK’<-à–5Ú0»ÕkµÔÚCšÉ%wSOzFô -Ù²‡aÊ’jŠÌs{ÌÎß4©7§{ r ~FýçÌþÖsʇÎÈÆrxFOro^é&±I“W,cKº-³nÚé…ÍOv”_a6Ð?Ì=³áÜ›LáÈíSÏ0wƒvE“©–u37ì9Ûm¹¶—V¯Ìùºâì¶yþ ²5ÂÃYRjµÔ"§•RßÈœ­Ú…Íæ˜#Ç&@ò²zªj™7a¶t%ÓJˆ#YÇGæf,ʽ8sZˆֱхÈœ +y†éç»kpAHphÐO&i`ÚÀç¦ÍÝ4Æì/´ÊÁºQ4Æî»d1z€é)\¨ÚÖð¡E¾Ý  ÿšÐLQºRb†ì¥mʃGþM‹Çè+ac´,…æü±¤Û'ÏÝפ‰ó¨FtJ ‰Š23½ ©€–:«ÆQ3Úšp² B!ö B¿ 5LD#‡¬RkÄÃzgld„.d‘ʤà +ƒén­YIÈ–l®•Á€)ûen®=MrZÇ]áA|y^5ªm+LÍÁ=è]-kFÆFžËß¡qÃ¥K +ÑVx¶]õ~þLWÒ0 ó¯änŽ<Ûk"3 ×­¯“?–h™«îxÈÌŒ&©ýܶ×D¬ÏøHl$3ˆðŸ +#|ÖÞ(²ŸÎÆÎÇèê+Dž.T¼6yžá»=w¥7ô1ª粒Ápà #ü/_„üÒåôàƒR„óendstream +endobj +1167 0 obj<>/XObject<<>>>>/Annots 567 0 R>>endobj +1168 0 obj<>stream +x­WmOÛHþž_1Â5Õ%~K⤠…WtÀåÀÒ©ºØ q±wÝ]›$Òýø›YÛiä´À•)‰½;Ï<óâÇ_[.8øïÂ؃aÚr,ïl>®o¹ÞÄòÁŸø–)¸Ã‰5¬®¸im_§à9®åm­n_ãêhˆ%Ù:Öd‚¾êõ@ŽÁ ­1 'cü=rkŠÃ}“X½Ùó-·Úì¡Ùz´ì³!¸.÷?C™ Ân°@<™$r‹ˆ50|ÅÒ,áð>ø‚¶^eÛeQ™ŠE΄2M™ˆÊ5zt¨â,·à<Ü­!Gt–eJ¢Ë9p‘«˜ã}YZb€¯¾;ÀdQ×æyh7!ˬD†,iz¹í† &8³±`IßkY€à<º}1D|^(ñ@ òÞHÁßáæ8\P¤´™G½"l(ëåBbyÈ5ñ…¥TVÍú€’éZÃ}odMð©ïýbßÅÂÖ‹ +Ïs±Wè>ܘ¼L,4W˜ô¾Üd“Ò²Æ%\ßœˆa_ šh} ··A,å=(4ÆÄÊÔG¼,HüÄVwͽèÃFÙ5®KM+”$¸ˆE±Ú… ‰!}ßÁ°‘Bÿêë£PóXŠŠ;¹¢ +Dü)ÑsŒuÀêÑ­ŠÒ.¿Ø¿« VµeS“KöÈAù’SÎ ~ͤl¬k}ľÂEmâ7½Xs@z÷º:¿>¿ +>ÌæÓôðV%OfÁéôsDÏÄoûŸöÓý¨¿ÿqÿrÿæsób>M²Æ½ëÓ›`vLÛØJ&GIFý®s¦òvµw9üÁy†ýÊlÝÀ 3èÔœ¿ý²:D®±uføôoÕ€zycÜØÌÃ…„vþëßÑÑ {x‹¯àPGSû‰)[gR&6fÓîxϺy hºš:‡i‚zñ,X¦×€&ÙÔ.´²M/Úš¥wÌ07O†ÝY™‡ß’óȺ1rYà1Ø~­ bçiVÊx¬[xG¿ºªcÑ—:óÿ´f™>F±‚âì¸NecÖ/ï¬I¾´sÏtqÇ¥ð_‘¥£ÊÚ{“õàMÖÃ7YÞdíÿœu§:Ù~Îz®d^žé1Í ñ›)ß(OÙü;½ŸÄw¶Nï¬PŠû†Å^ó>UzƒNÂRlà)ûÄ’‡ð]‘Ã9°DÍÈH”8‡”3¡ŽØšMðò%¹Rçµà+Äpˆ‹}v€ú“tH¿"Ï7t.4¯ôÚ'´WÛZ°ï‘ìþ‹H.5\¶çà3dΠÙÂê'­ehÄ+çü2ÎÀÕ8¶ Xpœ Bª”%Érš­4+p”§4»/æ{Ø«3X ½^âM8;¿8Å/T}–eAÉ<-4J¤DK¬ffÄ¡aUBžåH÷¶¨E8ý‘,õàxMšIÞ)’Íä«|cf뽫gÔIíÒÿvÖÚÈmkt'zÐkó´&IÔTcÅMäUŠbRE¨yJ»%- Á(†)ÀZ’âFë¯E¬xŠ:¢« &1Þ)»Å>›TZÙõñe`2Œ/>vÖ{vy<ƒ¹’_x˜Ã‰ ‚2¢Š’Þ¯Múc•ë³ý1ã ‡o"´o8 óÓ õWë_§7µcendstream +endobj +1169 0 obj<>/XObject<<>>>>/Annots 574 0 R>>endobj +1170 0 obj<>stream +x¥WËrÛ8¼ë+¦rRj#ÚzX½lååĵÇ›0å=ø‘„„´¢|ýö„LÉrmÕ¦ü*‘fÐÓÝ3þÞÒ9¾†4ÑxJYÙ;OÎñdÿëÓ»Þx¶H&4Lñ»¤ÉxžÌÛO}æõ4“¿›âOø°5cÛd>ò~jI«Þht3..æxP"î–„OqÛÅhˆGÛ8Ôx1{|ž1%ÓS;FÃÉã¯ÒÞÙ儆CJW¸ÿt>£4÷×>§4ë_'Ém„£Ï¢\ +Ê´¤#ÛT•©ÞIÊŒÎdåȬèÙM­´“5ÝS(½~Fþ£E±#©°ºN(Ý(KøÞn¤&A…Y«LÏÓ¯½s Á4ïWíAX'¬Uk-sr†Ê¦pª*$qt~…V¦.9xaDNKQ!4™šVBdî´=}ĵÃéW+Ú™EøÞ(TÂßðè襤\®ÇE²¦”X/¬Ñ/ˆO;»]9Ÿ¸ŽÀTs$èÇn[]G¸ž¥A§è°öîyBWšìè»pŒD‡<匭ªª’ÞØ;Õp¢FÃ*¸…rm£¤ÚVªö* +JÀc®®/©}Ä`²3þ!i)Ùˆ–»`C©ô´=¤]« lx N¬äë¡òÜà1'–lÃá¤ã)ÅŽÛÖ÷FÂÜrºWh<7€äé}šÞP)³ÐÊ–6¡·"ÛU(2=„}Ã_piÃ3Ta­É”Çé˧¿|Á˜"s | FóxÀ{²`€´ 㧣ÈL)µV,Êú‡B8ýwº¹y×Jó¨)CIjÅ5ÀÅÛûè¸ðX E»çqÆa/,¥ÐÞìÙvÑôb5™÷cÑ%ö#L}Ù†wò`ËÀ~Óø¾–&—iÁ…éŒs14‰ŽpÐN™Á{;­ô(ò¾±vgoQGtÞJs8Åÿ|ó1Mgþ_Ï/?¼z‰)×|ÅlEoºã$GÄåƒÙù"öÇ=4|2›$³é>/XObject<<>>>>/Annots 577 0 R>>endobj +1172 0 obj<>stream +x•X]oÛ6}ϯ¸ë“ÄŠ¿?ú2¤kƒµ[·xè ´DÛl$Q#©8Á°ÿ¾sIÊvØÚÂŽ*‘¼çžsϽʟCàïæ#Ï(+/ÉbAdzÅÅ€¦³A2§ÉbŽŸ‡ÃA²$#iƒ‡X~øˆGóÃÃ#,8÷è¯.Æã9ö™Ï“)•4ñßþ£ »‹7«‹ë&8ŠVÄ7[Ìi•û“´Êz«¤µ°*#UY'ŠB8¥+ªÎ¤µ¤ð¯¢n Y'kK¢Ê©–¦ Lç’oï¨k™“0º©òËÕ77ÇõÈ–ë¬P²ráFG÷é>kêìì³Ixp@K†0L&ãõGÓdïUÞÛh#E¶£´g›ºÖÆù`²r2s gL´U²¢Üàˤ—¼å€úÈÿ‚÷ø«sMüg˜bzM¤#‡l®ÑµQÂIjêB‹œrep–6OtnÞ )åµF–ˬ4ˆâܳ#œyÈÙkú-ìÏKCä´Q…´çVŽŸG{km#™.ºÉó/FUNšw|/½¤Ïwý_¿¼íìów¼ “gerfËç;¾L»‘Ó$rˆè©³3§ MÀÎX=Ž‡:j³ß2;÷ ãüŸ+IzWèu!KK²Ê 3,ËûUeP˜ª¶þÑÛÒooŽ.jG{ [‰¹¯EÆÂõéYK·—²j£'^QÂ(ÝX:ê)è?ÊÊ&ô„%pE_U•ë½¥ŸV¨˜¬hrÎ~ËŸœÓ«›vû$ †¯j5t{‹å¿ÓÃt˜,^ùRkw]N)C^Qδc¹H}nP‚Qa{z¹á«xäh–L˜×•§À'”+x§÷LÝ}…ïýN8Šhö¸/àHS”;„’Š4&t¨Ö5`ç²WEÑÁ éËr{Ž`:ZlÈX(¾5ÌÅ)ä.W¢Ð[NñtLh O×ÐF<¿ÅÏIF,sÿlTvO…Ö÷ìds'ðTûg+ùVY‡Ñ«ØžƒgöÛÄ}üñÓç4½ó Òômc t÷VWÎèâN:üWø9M= 4}_=(£+–'‡u;¼§Ý”s…Ó¤(BnNò"Š½x²ÔX$„CGª"ÙìjÇm à ñ— |ãXìyQå`¡ ­›“gêz‘dVcCJè£Þ#lsEw¢\CëUÚÁ Ü1N¨€Þ+vŠ„V;T38E±3xÖ“nô̤6^³€ËG‰‚÷ä;˜Ì¿'·)Æ 0'.«P˜èdu° À)T©\èz¸B!Ä8‘ŽÒœä^l:<­µÛqÌà·[:DÔ‰†»ÜâŒn¿z÷ÆwÒP¾}úÞLºì=:‚†Ó´³Ãip7»lÂZñÀçgÖþ‰‰éL/½“HǸÄmÏ ö3Šï¢°l=¥ðó¶ÁPžÝï…²2]Bíj­ +åàtàË/Xwm†‡KT ×_`æÑQ)¾ëï¬Æ¦£0ÿ«Æf~Œ¥4´Íæ@Çó¡€'^¸¸‰´Óh4i/†æóÁ99é%+GfÚØT>Ëàe®×4ZO&sÌ€¸a˜ng$$^ൄ§JÞõHJ›)RÛ + † +xµŒŸg¾N íÕ« 3X Œ>/̶±ükÒÆËà¨1mÝÊ:uº°ÿ®ÐËþ²ô²0Ž„‰Éê¢á9ÞüD®¡Áµµ¥æpóå+WBK/oè@mW’ÇÒƒóúу{5\ÏfFÕgªÃVÀw¬ˆÃëM¸q¬þÿóJHw £<ôæzPL;¯cq®~}}Íí ‰³‰…&3ž6¶2©¤»æ Nùgñìø±þ,ù-·'ä·èúÓd¹XRvx‡¹Év®©¶ß°‹hïÃÉ¿ÑlŽ—ž%¿‘÷în>¿¹áø^%éÎqˆ=‹1õç¼ç½ÿÞê'óI2ŸáWþnÊ»½_]ürñÐAÄendstream +endobj +1173 0 obj<>/XObject<<>>>>>>endobj +1174 0 obj<>stream +x­SM›0½ó+æHxù†=nÔÓV­‚Ô ƒMâ­±©í„Ýß1U6½ôP¡ˆhð›yóÞóï Ÿª²ú1ˆI Ež òºÂÿ)þ ‡!Ø7Á×’šÒ”¤qe]¢¬¡a€¸8†¦›žÖRêY¨#ìš„á„Ú±#½VÃZ¾v a¢†ŽÜqcâ4‚P øŒ/ë¨”Ô œ±ÒH7v(@”–$÷°É…t€qÁ× $‡6üÚîVH¿A¢ŠÔ^BD´iYmë^.ߙܵlÃÃì&5ªƒ+!Él{?*b’=&¸:ÒÍͼ…'zá(1WàfÔ•»õˆ1¯çŽÅ„àã}´A„ó²Ùó4iã@ï‡bò +íÍÔ°Eø“z:ÑNHáÞÿGSB&,íP};i-ífÙ•|Øî–@øÑgëç…°im7ÿ, 2?…bz¶ð­yH}V{)¸rö»­G·f+¿öÚü®4Œ›ž–p-IfÜöFt˜QÔ ?Ãz„Ú°@ò#U(ì‘/[øèoë2èÞîH0>гtd_o LJ¼¥uIQ’º,|OÏû'ønô ïÞŠþ<â¢K<<6ºB¢*~ôçŸÅѬáñ&=~ð kÞáWÍ«œTxß—Àç¥/}n‚Áf;Úendstream +endobj +1175 0 obj<>/XObject<<>>>>>>endobj +1176 0 obj<>stream +x¥WÛnÛF}÷W M‹ºX•Þ€¦Ñ<uyHú°$—ÒÚK.½»”¿ï™]êÆÄI€Ú‚$’;3gÎÌžY=]Li‚ÿ)¥3ºYP^]L’å’Žov‹ Í'ÓdJóeŠï‹4IÉJ*±vB77éáÉlžÜŸÌæ“dÑÛÜ.’—‡'ˆ˜Lú·½ÿ4™õKgp¼¿Z]Œï^ÒlB«é’VE0ÅüÅï2k×kU¯éÞªÚÇ/&Ó²r߯‚é4¦£›9ܯŠojoMÑæ^™:.šÓtÚ/š¥€‹E«r„— ·1ÖS!]nUÃ6dJÚ˜yƒ»OÍ>tcchÚ)¿¡·¢ÊDBÁS4Ϥ;³äèMo"°sóƒ×Òš +8ÞþùŠr­dí92®Ù=9i·Ò^Smp{#ÉàÍÒNt$¬ië"¡;cÃ+±ÐIXH¾Ä–EÕhéƇ°…²2÷ÆvI¿t¶HæLÍ_×ä u¦Eœˆ&} +‹t,´tÿ3~QÖ1R®{¨¥,ØP΋º`ÖýFøÀ˜na@!ç*rß +­;*ÀEÝk ¼“º¼&åé¡E(,D¹•* +4†¨)“~'eÍÙžVη‘ÿ©ÕÇ£×f®s^VI_°$Õ°˜þRi¼qÁø +®ñQS#œ;]ê'?zik¡é2°7š› +H‹Ë„Þ‹žú›¸¥SmÃìõ°JLönc'š97ÜúZƒòÖqLhh<«ÉUY‚çe,Se@•Zn¹Âûe^ì6*ß„øØ­.Hó8€HðÇùï}“Þˆµüð=ÚRþÀã» ½äM7Mæ73Ín“%>Ñ_þÞ¯µÉ„þwïjt|HBØb„ÎFE¬A Ø5ê9p¡›§£1æˆÖÒS°¢§V¶ÈÀ ß)á}ú‰[{³Êl%P<˜ì³Ð߇j£×ŸÍL@;~¦ñVØq€2ÖM1v¼Û#o{µí™KƒA´Ð|¨¯ÙqqÁ4Õ*Gz¬!X"3­ÿ&ò)¦ßî²}׊½i\ŸAZâÖl}6ßÞ••®­N|¡Z^@W¿äk|÷|ª¯£^}c6ä>Û:;ÎT j-ðº¿jèêù:Ÿ6Ê™õS輯XŸvÉ™5€Ô`ýð%òÎëлp8æ»@A¾ÖbýÔ‰›ßa·X)œ©F.¦a)Z ¹-ãÈAï²Á¦ RÓËmOò]#¯)k= µrõw*,”ÝšŠ“оËJ¿OªŸ‘mÍUÄæ„h#°ßÐâtñȲƒ° @›â +I+Om…­ïÇcõKhÌJLevR¶(ƒx®‘¹*³Á¾¬E%Ý5“(oEiëÂ@Š0 z¹±<8éþ×Õ´º•n¨Íïx(ðôë ZÁDnñ%“ý+ÂÛ)­ç‘eƒ§1VØqšŽ"Ì_”ÛÃĆ„íQ«pÄ99d0ð£A8%¢˜¼¿H #V™BDLÙ\KQƒHä±ß8q2  •Uáœ>jx: þKLÁ˜-ºäGzS.¨J¦#Y•Zo<Ô@µ,=dÖ­ã CÎÑ”(¤3þ-ÉÅ"@÷p,A§C•)$àVªæ©*é’ W·U&í%šÂ©5säÍ l8fD bƒ¬‹Ý‡Ó°7Vð{õ‹–~ +~Y‰ÜwÉå Uthľ2V6ZäÎœ¢Á!¡„—}ïá€fZ>JÌ}‰3!‚ 0^9ž}u9uÇIrÏsŸñ÷8Ã!'T:’•C<Î7Ì9¯‚–~Ù× 6Ûz¤Íuõðœƒ3Æãa;±g..º´A£r˜ñÝòx¸¿]â'G8ÞåwÃ<'é?øÈ1OÙÑëÕÅßÿýE Fendstream +endobj +1177 0 obj<>/XObject<<>>>>>>endobj +1178 0 obj<>stream +x•VÛnÛF}÷WL‘¤v€ŠEêbvá EÜZEQÄyX‘+i#’Ëì.-»—ï™]R¶n-ÛâeîsæÌ~=ˆi„OL³1%SÊʃQ4ŸÓÝ?³Æ͈&É$šP:Ÿáz~%d$­ ;¢$žEÇí›xšâº{ÃѨýך§ tƒ™1”[ÑÇ<Æéq4ïì&Ѭ“Ñ4Æ]°¨îByÄß$‰â¾»7‹ƒáûcŠg´X!õé<¦EîCÑ";z+—Íz­ª5ÕFUN|ëe!Kûzñš)ÅP`ÍÁxM¡{ô±’´·ä4å¬4ƒ‰ JÊò[ë„q´¼E.u!2–pi%eº,E•ÓN¹ Ù, +²™QµƒÚF8ÈgÚä,ÌAÀuœDcv-̺)e9VÇ{˜BÐü@¯ü½Ï‚Vª“Ue]H’7Â{ĶUÐ7ÕÚR©ÖÄ)OBÊ#:æŒã(MÆÈzÍñ çÔþ]§4te=´âZ†¯jzå‹Ç%‹CÉXóÅwÃ¥ªî»Ô¾Îú ÚI*ÅV’m€_ <þZ’ñq6VšGt‡5ÞÊiPÓ™ +‘E>ªG¼3ÓTmCG¸¬œŠ(цJi­XË.¥øA¼¡³A¼«ˆï*÷F(¢ž‚p˜ X»Õ!{k,‰iŸDQà÷âeL/Ç4>;ûþÛ„îÐ9èš5óMC³Y±³N5†YêkÆ£rý©x^1*|Í9øÐ̯l$URæÑKtÆ麖9©Š€QÌ ]öÊ‚.†À5¯Þk¨Õ½|m›ô„þJÇÿÐ+’ÙFÓFµ=ݨ^á‚dÂ’¶\f…Â<ÐpXèLmÝ°Ø¥=‘ç>ÌûJd’T}Š¾ò'¥e&¬ënÇ“ U¥°ÛS\EÝߨgîBX»C5N¨÷â­.…ªN?_.Î]|¦—§Ÿ~«ÔÍgº”æZšÓO—¢\ +9F³Ï=e$sBWWgm+|ÿ¿I¾nœãFòćID¡„E¹ñl’¤tuÄ´½]íÕkÜÛhö,>åÕ·¯÷2¥Çž’– üWç«'¼?U& båžÈ;?aá}Ái^ŽNÀl9Âì)ü›?u&Z³2ÊÆcîÈåXñ™!£Ãç!"WƼåpžÎf‡fàça*=ù3B±X[È‚˜-•ÛBŠœë¡™ž”ºÚ=À#‹ôH/A†-[uô£Pt ¢ò…Ö[Âba‡y$'Ì0íxù°Œ‘¶)xËù”ë¯Ê¶EËðIª[@~ò +ôDè Ï“ ç˜/¢+l-ª¥æõ´aÂíÖnÐBjÏòmÒC鲡·”‰:Ä B­¥A½¬Òv`E×Â( ¾¹G_¡z÷ƒ$Å ƒ%焽¨4–rM|0?>lü½ÝßKÈêývµ©ì!'°6¢d>Ì62Û¶ÄxW—p¼¨D)=1óVk,¥â¿®ÔŸ`%à“B¿ðï‘l»Èðˆãå í‚ìR¥¥|˜ì·«$P{[K´°Ø7AUØi¥p¨>­Œ.»=ƒPÛÛ¶*aË° ‡õÃ[é¢Ð;N¿öPlw'yãŒÈœçí½×ÿ“ü@<גּ/Ø=ÿýñ#¾Ïÿ0”nÞžãé$šNbš¦i4û³âåùÏoÎéÂè/2sôVgþøæ ƺƒxŠ#ö<¡Ál„CWþÌq4¥ÑlŠó:‹¦s¶ðnqðËÁ¿mp…³endstream +endobj +1179 0 obj<>/XObject<<>>>>>>endobj +1180 0 obj<>stream +xWmoÚHþž_1ßH%py HýªÍµU[媻J‘N‹½À¦¶×ÙµCúãï™YÛ8$§žªB0»óòÌ3Ï ÷'#â߈æcšÌ(ÎN†ÑbA‡·Á‡!ÍGÑMsü=šDsršÖ8;Äíö¥>;žÛ³cœ¯¾dv4žE“gfß._°üúêœFsZ®îl1¢e"ž‡´ŒOotYš|CUA…3y«‚Tž„äµ{ÐοZÞ¼¾šÒwÙÈ`àDýù‰ÅéXü¹—l[hÒĨD:ýP‘® ìÀqZ‡RøR¹R'PÇ5 Dö'ú MµAEÁÍ'ÌèØ>Í9µŽ^Š.pbåâÚrS¡»Ÿ1AÜø +ém½´JÊm¶cŽUøB\:àóõ·V3çÙD/-bèºÓ*yÖüÐzc[‚3^XÍÌkÔ¾C¾†°/„)ROAÞû¤Ë8Âë£AÒl~«  +4T×.3ÞC"¡:K|ñ,ò# %x«ãŸÈe°î±èý.òï›È –9Íom•&˜—NÑÍÇ?>|¿&o6¹J öæ³àÌ$HRÀQN´mÝ!@ Ÿ4nÝ(‡@H9™†éöÉ®8‚²ŠVT¢M/Nz^¨>G&SbíÀ(©EÁ µÕ<ˆˆóäÅ@¢frñήú„|ÌÚ4Óíá1íвMp S¼~½V(Ú9U tP9‹™"6;u4Ù Ë\ŸVA£AV6Þ¦Hkg1­q¬Ö»c½âìƒØ(¶¨.÷ÞÓ¦àˆ¿½¿üüùžM½CÕ…sf³­Å4²íbnœÊ3bŠÞÞ¼Ãh¸³×5=0èù¢ñ•Ù/„)£)"ÀúÝgÁ¸?˜íq¼ÆLͺõ® +vpS›sé8JUt‚ñË]£Ö ò€Y<ßwÛ}½d¤nq¬ )‹…DÏt¯­7Mþã;”[`§˜ýöÀ'NeÇ›­Pµ^©A&ycg#ú‹W>¦ U˜ 96“ ¼õ–t”—J2“ã ú2ìÜB„£wb¥%‚PEÚNš^¦8$Å š9€ª0{k\9ü#×>/XObject<<>>>>>>endobj +1182 0 obj<>stream +x…WÛnÛF}÷W v‰ÖÍ’ì7'n€È¥‰Š¢€Q`E®¤É]†»´ÂÂß3CR¢%± ›âîÎåÌ™3ë/gcá{L‹ Mçgg£h¹¤ã¯b‹#šOçÑ”fËž§Wx,4m°w„Ó‡_ÍÞ«å27{'Øßl=ev6YF‹fëxŠÇÖ,M®çÑäÔÊ ‡“é,Z~ëiÍæÑìÔÂìÄW«³Ë73iµ$óå‚V‰d7¢U|±qE¦©8”*M+2þæåê3ŽŒèšOŒ£ÙtBÃÉU´ÄßUrAøŠº|TÅ¥ÏK/Ó<¹Ì cƒ.°ö‚ä-%¦ÐqpEEnC²LŸÝÚ³ñ Ç(Ek-õlóô× Ú›ðI<¤úÔq~OÉæv4gÕÎùPÇߦ¯‘@Ì@뼶µ7iJ±³ºxrFÁ‘j½ª–¢(M§yÚ›°«!Ò*C`À‘™nÏ´Ðöøõ½û).LDÒл:¹çTEôKW¤() äðšykâÂ}#u"z×ú«ÊòT¨´Ìû¿½¾êyÆá–)5¿~:¬>ÔƒÉ?5ôNeúéþâ£Ùî½NMüpÿòÔâk4¶!7/¹=Ý&ÌÂäégÜš‚gnïEp ÝñÎ9NoÀéסH‡wÂï<‡L¡Ö,îhˆ „ý€¨B³c}'r”¸a ˆZÊ\Åû&õâ’Ââ3Úc2¡ùèß;öǸÃ9S„¹ìˆJ ω(+OÇârdê2 ea3™ªzÎcU"M® ˤJE–Lüþ|ú¨öo¸ŠŽv/,‡ét„©‚{§%i$ zƒBœ¨Y}'aL›™1Xw»­; |3HêÁæ6½L¶:qÍC£VîF-ñÚ`.ñVÁ—-`¤ÉD—özÖÞ€ïj +Ö¡yêGÏq· ,ù(Y]“H[*:¿mÕŽ‰ïswRQduÎ=×õúýz´|'i•†h'KñÎá"ÒŠ3ñ• qзŒÑ†TˆqkbAcëYØjM”0 ¯Y(3âb´~©«Ä÷ Œ_š×‚G‰8ñ; ª×]Šþ¹s\ØÚ‚Š!y!×Ê£Ÿ*0ÒDù׿Úñ-7¬gŽq-„åžÛÚO=Bj=Õ¸ÿÈáHŠ&ô¦•„¡Ê!öí%F®×IoþãŽA.ÜŽh@ŽÃöœvo|b3.ß,›«üxŽZ–Sš_M£éµÜ«>ݾ}u‹ê¹Ï,Åw..3ˆ«@Íæ‡í‘áb„»ý/ˆ³Å,ZÌñ/o¼ñùßVgžýù?Lendstream +endobj +1183 0 obj<>/XObject<<>>>>>>endobj +1184 0 obj<>stream +xeÍnƒ0„ï<ÅÜšJÁÁ@1µ•z¨Ô6~~BìLU޾뒞*k%KóÍÎî~? #ÉPA$"dq!R¤¹âÌ5Úà ƒÝs© [¶d¹„nÀxA×›*/h¨š»®7ݽ>3B2äé0V"c~óÒÂee¿hÅáúë„Æš;‡]®[ åR;Ã5pÕÈћߜƒn6ÓÓ29àƲf]àHäÓ9S&"ö™ú&¹o·Ú{ÎëGª±ŽšßF•/'¼žÈ½÷¸=ìñ6Ú3ãx´õ>/XObject<<>>>>/Annots 584 0 R>>endobj +1186 0 obj<>stream +xuWÛnÛF}÷W ô°iëf)òÀIkŽÛX@¢¢X‘K‰ Éev—Väã{f–¤h:E€Ø4wçr朙á÷³ ]ãß„–SšÝP\œ]G«þ³;<\ÓbyÍh¾Zâ÷éY†ã—³y4Å…ñ]é­IêØg¦ ‡æ4™4‡¦Kd†CªØ*ruUëù=@1ynY¹#Sñ]üÕÈ‹]n¶*'Wl£Ø”)UʪB{mƒõkzÍÆßlJ—S¤Ÿpñ%Üû'œš†S×t9A‰ø½kòyfeLoè‹Û+«ÖNÛÍ8Ñ©ªs¿9ÿ™˜BeåO•¸Æd›Öeëz)!Àô_¹VNÕTÛ6‹.üB•HaÇ [ªÿ–•ø½Pœ5©2i¯$&® ]zº}¸{÷ñßû÷÷ïÞŠö¾È9hÎe0gSim£¥­Š¿í¬©a'Ñ^e¹#˜ ÑSaMmæ­ûç¬LÌÁ¡î äŸÚnµ5®=ß•‹C¯›C \6ç”á¦v±Í¶:AZR¿··—<|^?HäQúô„V©R[ó¤/hÔ9|ƒ0퓶#*´b2앧@«ÖŠó 5o3Ïþm]–Ì"xq %ômk?MžVy~D5œÓ@)M ϤjàXú,±ú{­û0(ŽŒû†C˜Œ%;ÇáÌŠ¬’$ã’ª!niÄ®Æ&M²ôf­L&iX þÂ:¹.ÿ€b%*ì‘e«»< +Ðá0ñëŽ×MdR¥\AvT´€#ŽWj›k GºŒí±ò¨z›ÒíFëR~n3ý¾!D¸7èB±)ªÚnX$€Íw´è7ŸV€È­í+oéñþ] ¦×9È‚54! å¼²¾®èÀt:±MÌŽèƒDˆ Í€üÁtmi$ý!´ÁÑ KVo G°Ñç}ï9ÄžÀ†zYk` ¾¤©Ž›NxPÇþ‡l†SLÁ;õÀyæÎÓˆî<ä‹Ó +%`cìQ«à€6c¡ñ‘vàŒ'ýÃê.ÇÔú}Æ +±ÔÂÛô­4Ù3=f9oU¹ƒŒ!6Æ2ED¬ÃCæ÷½Œ®wIU•5* ƒ²Áx)åÃ|±Gx`ó}¨¼K¤5b`¼ä9·ÇAþ'\/ä,?7®˜Ø¦ ̉^(ð¢žÐ)…Ì\ÂÃ^ã²Ë ã@ÐÌA'Ãv÷ +Û¦‡†ŽkRûgÓÌ: ðpSÜJ¶¿:}ʸÁ´ÓH1Wãá4ø;ätƒ¹‚Ž*7+•mcob“S©w†‘„‘¦[1˜˜iHMâ.1V¸V¢€„¼5ÊÊ Å±®<·«¿‚lð +fqjlðª5ÆÚÞfÜ;ØÿG‘ËAœ6A™…qS³=+ e‰VR¦÷ Â!ZàNÙ´uoQnŒS–•¹ sž»Ü+9Ér„»QHà*D?âi©Ê†¡Ý#Îò7vEï²\|õE’|èÛ6¦d<‰ˆŸñØ j¾T€òYÙdß‹DÌúԚ♥i°„íæäÿ. άCèv/¢â4Ã,ó²¯B·1Ò©KƒçÜ)`»׎ÃQKOæ#o5·jÁÕ¡°Ä Tï`8Kr­Ò’:ŸÌ™³àÃÈÌv{ÈB¸Î³Grx|™Q𓶌>^¨Tv•ƒ•8eÞšT;¿(­À¶—A CÁÉhç=€[zƒfƒ=æ}eÊ„åM;éæÀ{Að<°ÎšG×—¾,ºã®¿c ¼½•.W‚Š[-Ž®ªòv’d"ðÕÍy㪕Ä÷ (ö Ñ÷†$€ ŸÒó~õBtØBtB3,Ì4XॠÍû(Æ5O 1Ôֹ݄1ûú]³k>*7`² "¹ü‚ÃÀ D&*Øœ g»1 +ò„ŒièÇ[‚‚«©4"nšm·‚@äAÏ„ò;‡aw +Uº8ÄÒ®+Lt»f¹fÔ4öÞÊìäK‹{)\`ÕüF,SYº {MÓb‹1xÄ2Ð_ÜdGÉsš³é!ýüÔ#z4)<œ´E^ø í¶3 ÂED\Ø1»Uëp`ත#>/Ú ' 6ÂåP¼ç“7,"•ƒèŽAjšd™ý*ÏÅ{]ˆr¯>¬z­«h2[pG|ù <_âÃûþü~1å¸ß¯Ïþ>ûÀeQ®endstream +endobj +1187 0 obj<>/XObject<<>>>>>>endobj +1188 0 obj<>stream +x…VMoÛ8½ûW tjDñ×ÚΡ‡Ý=ØE  ôBK”ÅF"µ$×ÿ~ߌ>+[$ç½yóf¨g šãoAÛ%­6”Õ³y:§Õý=þ¯w[ü_âã5³‡ýìîqM‹í Ùì¶´Ï ÛçsÚgŸN¥Æ6ÉRÔí­ªõ]£B89ŸS,U·ÖÆRÛh2u~CÖElOB©ües’~ÞÿšÍév¹I×@ùô¤ì™²Êà`  m.gtÆYüŽm“~Õ–L GþU{¦b°Î±©Âz……¬õ&žSÚ—ú t_«ª:1_Ueò{±J—Œ=¤B‡6â ¥ô¬êƒ‚8ò Àܸ¸Š*"¹‚’Æê¡ÒãzHRú„m—Ø–U¢ÜiV3‰^kÊœµ:‹H9aU©œ‘].pœ>+ϸ"…dogŠ7Äá¯?9»¢­¨p~‚_:ÄÈ ²‹Î~~&ź£œdätÎ3LÂéKB¡>¤`Z`Ýj‘yTŒë½–²Rg/ýÙÖÛ ²:*c!¶þP»ïd©UÌJZ¸Ô$4séô#¾5)†‡ ™êÔaÆŠ’Þ:bd3úå;M\uí$†¥ Nè×½nœ‡O¥,#›ÎÿÒŒ)LÒ¾Û)×g"™ ^׶GR¹™7ª•G“øîð©¨^`%š 2‘õŒÜn0!×>F]7]f•;råÙy\£¡Ë; :t-eì‘ôo•E´Ø{l¼tÄtRD:b4ÞÕÑ)‘ +/JöZw.Þ»Ö¯#œeZø¾K{$ V(¬”O]v³æÒs¬)Ð`w!¯‹%À¨==?=ôv™è-ü@±©ÿq-—k+ÈÎŽ¸ºËfÍ1ß qT^& há© 7ÔÍaÞÑKuUu„{7¸c÷sQæö„ª±7ãœyƒgBÛt^×6óç†g“”KbWQ·ßc^Ó0±D{8ËÕèD¢½è3Æä© ̤É“;¿†BʤïY 0Ïê”XÄR½B8žzuc0»ZŸ>Á¼¤@Ú* kL7d(âR¡Ul½¾s߯1±">È'èFyÜm<…È0.#²-&¨!ž±x!>æeXˆîèUSâÎä»ÊÔãHäþƒ€¡b@é•Öšß°Å› |Ebßÿ@cÒª",w,Ù`¸2ùÚ | Êx¾$ ²µ²ê¨kÜÅ0Ék”í~=9HñÄj³sš^Ѐ“”!S8ÛL÷¸ëß(¼mìV´Ä»‡Ü»Ï_Ÿ¾Ò_ÞýÂDß\Ö2¤bqÀÛáÀív~Ï÷ôs?ª;GÞ³Þ®Óíf‡·¬ÿ±âGîgÏþœä endstream +endobj +1189 0 obj<>/XObject<<>>>>/Annots 591 0 R>>endobj +1190 0 obj<>stream +x•VaoÛ6ýî_qÀ0@bŲ;)ÚIÓ t«½}™÷’hK$z$Çÿ~ïHI¶åØ ­DÝÝ»wïîøÏ ¢~"ši2£¤ŒÂÞt¾þ2ˆ¦³pNÓhŽ©¤q4oš§‚ƒñü:œP4…SœN®F8õO|z3#šÂkœEÓœ¹>:zÄÙlÒ~ÈgwËÁåÏ74Ñr x³ù5-S‡ +o’ÀȤֹÝÓGJU)òŠð»e,h¾¾[~sÖÑÜ['S _¦Á¯*¯òjC¢¢§%Ý{Ë]n³Îvìm§EíxÎØöÖ˜º”´W5eâE’èl^ÉHý"59O‚ž¤½{ø² Jà{µ&ï;—Áâó×?£Ó0¥$´¤o'›ÜQ2=u3¢a4ñYÝyì¹» ]–'€àüíþÓ„Oø¸çÌa³;E±HžëmKx¢*«€iã½7i³õ8&Áô)@œ»ûOß%á4ËÀÙ«J@ae<ƒèPœ‡Š”NQ«…d3Ù½ u®%cÕ–@dS¶TÈRU Äëºr‰*K<¿?Å€dÚ0Z)ûƒ?šrN®Âù +¦Œ·Â˜]JÃoà4ÔüÓ?üÃ[¡O¼nÓR4V «ôÎ øZñ ½ï.:Š¹ƒîŽTrÈÒÅã\øG\+‘ Û–kð‰ªŠ=•"ÉòJúc–È­ÇI"ƒŒâ¨‚GA·” ++baäêå¦É/¤%œ{ôãÿ“bÀ>8@¡6è`×1È¢‡ ¥Ç%…ÞRUWöHä좒Œ_è=muþ’rƒ‰4m3æä\4ßW!=¬ñø5µK]½àÜð»º1’)“=±‘o«¤ÓÁ{â#Ó¶ƒîåÏm‰´…ô +E“Ò‚V©Ú…´hâvnWÁ5ȇRi Ž”RA©´"/L¿7P"Eù +ÁñøKå‹,Ô¶”à0Q©£‰fE3qx’©Úò¤cЖh) G@«]£¯Úb(×C=òX‰±„e†²²L€Ã…t”fj+Á84C/@/âB’Qp8ZJ£X‹*É0F\Åy†Î«k^Ú(|h3­êMv·Ú©)&ð·ÕʪDüuå›Á‹²’;ZVVïz©µ]tæÖwù}Ô솼b-b!?¤Æ<Þi®e‚°ç·~j£°]­A/òNÕEÊŒa¤i¨kH•Ò%FÛžÞåemôe¡°J.7—Ü$¨(ûþ® u¾:r×£…RφŠü™‘›&lÛúGªþÀ{öËãíÃ=Ý>~þɇëvaÓ­aðÁs¶ðûô Y€÷71CêýUž} ××ë[Û¢²Æ÷O#éób¢^hAÅÕá¢Ü¢„"V/ò@ +u5ñ»úí:ð p7€s`G´‘?æ(P“SOëXB¥Zn ‘ øÍcy©.yðatÜf´3㚥}fp‡ÒҚЦñ)¡ÁwûË+Ýën+X6jÇÓ-Þ/F÷@+üߤ®•q&ª=)è]S^ÀеíЖûÓ‰<,x21š£ýÓÝõ¸±Üˆ4{ceyáÌ)ß ¶ŒX’~®€/A&˜¤˜–XÎزŽÊ~ŽOjwÑŒ* ‡4´•Ü§^“í…÷AɃO¦¹õxz¢F󆸭WÁ•Ÿ‡þ +|y Éî*7>‹^â0ƒ²v&·<ô‘òcl€,;¬G’ÕuVkMýA»t1î7§úצP±(þƲKlŽ)Œë«§¼É‰ëÅÅm~Õ,û#é5À}¼ë׸ָKÛÙ—ŒÂ“Ý\â§ói8Ÿ]ûëÕÕ”=}^~ü =’×€endstream +endobj +1191 0 obj<>/XObject<<>>>>/Annots 600 0 R>>endobj +1192 0 obj<>stream +x­W]oÛ6}ϯ¸ËK½!Qý)ÛŠ!ëP`N»ÅE1,{ %Úf#‰*IÅñ¿ß¹¤äÈrÖ§¡­Sšäý8÷ÜÛogêãÏ€¦CÅ”ägý¨oþv6GCŠgqÔ§œãþa•ÑýY{ÝÉ(×gýîdM)îÇÑŒïÎgѼ^ùÝÖ:§a<>Þĸ;‰§ð‡»ñ<šÔ+·µÆÝÁäp–wÛkìÙo°Ä»ÈŽF£>dz)>‡øg$­ýÆ`8A°a„(Fc„9@0 ïëeÉ{óã½Ã{Óy4z¹w½<{û~Lƒ-×(A<›Ò2õÈ÷i™ôîä³£d+Š$·•ôãò+Îëó=Úió¸1º*é]ØjLõ(S…$Uøko2½Ù?deâ”Æ—¹Šôçpirð9ŒQºeÚk¦Û‹cã}:œ”%üåø +‘KÒkÿÿTçþw’pýªU¡ŠMÄ–Z÷ÿÒå•u$2«i+žBž¥0°ä¤éf,‹ÄìKG¥°1¦ö8²2tœ]øœöÀööòä BÃ}xXkC{]ª¬4HC“¨KáT"œ¬ãpé v9Ï»%}º½é&ó^"Ëö$Ò”z°›ëT­÷?’è&Ò$€€Í¢øŸëwbž«ˆùÇõíÍ þ9<†¯U˜åVÚP9η4*fO¢Hi%’G®.o¢ gt–1t÷"_ Ú©,#áœÌQ'àÅ'D☋ðï#쫵m98nÙ‘"ÙÖC„>°¶~AàÊI¹ØÓN>pݘº‰ÀÔLpÍ…ÓÛ’{ƒt…»È½ÅnLcOäºØ¼A—W8\§ž$óB­}h>,›¯Òšlh&¨C)“>çÖe×>P´Ómh¥6ÖH1y; ‡{qÀÂ7·ª\_Iúïþ?åÏOß¡ +¬¢[·:½ ÝV¡<;è‚bb¤U"SÆ:p"Åè,Ó»†/u&ò$œ·eÉ% Ÿ²9¾®“%0ÕÒF´ä”‚s’ +— ­ J”ë,Ç(Y´ß—w÷” +'V°5Åç¬Hý +›îøl! Vl nÖu ~#­Æe ɧB‚6þ6)fÙÞËO’)èמ•Ü ¸ÊB+›  Ú•QnÿC¨Àœx$øµ¸Ä[äÕ:Øg»_ C;ìã´é(÷ø4ŠYÌ¢ØS)u™É ½Â>¢ZFn„I9_ ä~óNÞ ü•Ê C™qUÉ'5P>uß Ô(hˆu9EáÄ +®aˆõ”¨d¾B kQ„׎ͺNº”=ƒá6Wψ¥Æ¢+¯Í{¶1#¨Ržh¤5 F7¯¤ÛI^ÉD™¤ÊQ¶"e˜t€â[¥pQй÷rîsšÃG‚š2äP<¼8¯<ÒÀ·Iu«¡3‰`/dwÊ%[ĉlÏC ÁXDW¯?!$¯ 4H!eÊ=µnÐîЭ…çLá]>×Zwh«`8¢k›µ¨2‡~|Éx…äÜ:u[•¥6'­(Ýõ‡÷‹»åçt«[h”2¯’=5d·\ ½áÌü¹6A˜°š`ëŒî+lYêÚä¾s8d˜}&dc£¦ð©Š®Ãl +Š†ËçD–~LCÉ= Ùáù}дb#Í9­Îy£w-(Yf‚wµïÂ[¸Âð‡ëŒNœÆ«úA¢ë@â—ž{N‹Å †—…JŒ¶zí(8d˜qª°:“˜gʬ‚NyPß¾E‘¾l÷a&D +è1žäIÆZFïêÿ%ˆZ3·¶Ôé¦2Nùݬ±?\IƒŒðP¼qÀBJÿÒyP0FzõÂì…6e¯+}.Ôóˬ Ñœ°é ågža0jÔ–ü„jzxtÄÜ×½X‡È7»Ã'F®‡D˜§Ú«°Öø‘Å4Fš<;Q…”C 5¨ÈbàïCbD7O†Å N;W¨š2)<(k•I»G;äun'R†uOVå*¨d‚uÆãsU]WßÓ*ó\Àá†Ã;]e©á~{Ùl9”€Î¬Ùø•¯?Q< /ÜÕâúŠ>ýÔÅáFéðè‚ï]6Ç/§ý9?mÁÑ÷^Ä1~£Æ3<£8>™°•_—gœý s’«ïendstream +endobj +1193 0 obj<>/XObject<<>>>>/Annots 607 0 R>>endobj +1194 0 obj<>stream +x}VMoã6½ûWÌÑù3²] ‡d½)4ÙtãEzè…–(‹‰ÔŠ”ô×÷ )ÛŠŠ-›„"9ófæÍþLi‚SZÎhSR&Ñ_Î?¾þ>X®£)Å‹8ZPIÓٿê çAwÝÅ2ºîìÎã8šÐ|¶ŽbÜ]Ìæ°V|^h> vg|1,x«³Ä½y´ììu–%­¦Ñº³×YÍt¿£Þß$Æ·Åj ß3ü¯%eƒÛí`|·ÀyÚfÈF¼ZÒ6õI˜Ð6ŠÆåR;•§ŒÆ•´Žœ!A/J§æhéqKVÖY“Ò„ãdE)é(ÞIØαõ5™ú|i½j/ý²ý>˜ÐÕtÍàyx4M‘FíÇ'Ÿ +)¬„÷ Nà›Àû¨>f0­4~–(° +²ïÖÉÒƒmœáDòj¯éÛãý_Ô¨ agÏ8ÓƒÓ‰q °A¬íÚ4•h›+K‰I%á·8Uˆ]…¦Tdaª¤]-t’KKF3äA”†÷F=§»ÆÑQíøÄA¦B-CÎv¬1ºŸ¨-lŠô ´{É·Rúª` HxÒÔʽ3N—·zfÔ?»S!qƒ¢û:÷Pw áÐקO”äBkø…Mù&‡¸?ÐÃcºC _}8 åÚ¼–RhKϢܡžže¶çW›#HP£¸ª.ä=”ÊÕ ¸ŠÄyNØ\Uö§XÎ$¶ìþï¡Šd4¢wÓP„"M†žï¬úŽ¨¥5MÈ6…žW¹8 \—­Ô&DÍjS‚­ýËO›OžººçS$‰i@¨P&±> î=`Å;‘\ÎÆw×m—/Dø­Ó„èR¿·YO…,2tTèó€_¥¬<1¨râõÁTÔð ÚG݉^ï[·¾ma«0øÄ6™”­¿BXwn.” ­¹û8‘§œqWɃJjcMæzÎÏÅõIz c uƒÈÐn&ëtîżüþBB‚O2:QnŽœÃ‘ìÙÛƒ¢dÝðÉk“ÆÕߢð^$XÔ:ÙA×"ÏÒZÚ0ß.) ciù‘&Θ©ØÏó%:F×xÌc…0ç.ûgJÚ>Ãn ˜™Ò¬¦pˆÚãn[/þ%7¾ÿ¡½;ˆùÇà]†&r`}3sAþ ½{¯eÅþ™] ½tÌ%鵚TÊ,;°î”°M’ÞµgŸï7Á^¡ &ë¥<Ú{Ñ¿XßAàõžÛaDÒ%Ý@·O„®#¯æȤ* Eèwùæ¤N¡–mî²Æ5˜ÊAMz¾K0T;Tx +AÎk]åÁF¢ª +…)ÃS#•A<^HôÎÑ7­ÞÚ1vš2g^yúô<Äþè^¢¬,²ÁƇÙéeŒvoUn'’× s|€Yvd†Š¶B}IïÔY¦#*Å+ÓE|¬2ÔWEƒ~xp p­8J}PµÑ+<±{‘žGêø.>?‰®N¯Ç/ÛÏ¿ò®R>0…YÉ¡žáo”?5Iãÿ-œ©|ªšx•_êý"wn/þQZÒJ7o/¦.Ò%ýP+ú 7Æ÷òøxÿ<%}}|‡ŽïV-ìiŒWÞjNóõo><¡žonoè©6ß!Õ´iÁùÁÈ!].\-'kÞO\Nìé 4›àu¼ñ“Õ×k±\DËx…G#Ì_Çlåóvðçà_“!Ÿ©endstream +endobj +1195 0 obj<>/XObject<<>>>>>>endobj +1196 0 obj<>stream +x¥WMoÛF½ûW zrP[±YrzK‚0Ð8n­ =ä²"—âÖä.Ã%Ũ¿¾ïí’M§(ÚÂ6l“»óñæÍ›Ñ׳¹\ák.ë…¼ZIRž]Í®äz~=[Êòf¿ø©µdáÅâj1[M_¼Ýœ½|ÿZW²É`kµ¾‘M*°s…'Éù'k2£SùÅíœõ²ÕM§µ•ÏƦ®ór·eSùtwûû‹ÍgWr¹XâþyëÝñÔù†>æëèãòÕr¶à©7[ßÔ*iâ¥ÌçýÅâÀ­mô®VqV\ÜLR;ï²fH“×®Ý墤íƒ.´äŠq#è˜T×HGɹ+ã¦ø¡}þ*†epG7ºv;mµk=.–UÛ0#m÷¦v¶Ô¶ñ’¹† +‡ç)õL>k©jíñ2f´ê3:—nŒÄèù®Ó¶³¸Â›\˃*·j‘oM£y BPµ*½ '%Þ )6.\}š7În ]"¬è\Z¯y‹ÅSVx·¸'„»'‰* +!÷E»Û)•7-BµIâõ.m $“¸S%2ÑõÞ$øÝ™&É$̸nT³‰ÓÔ• +à#ÎÚ‡ãU¥0†QWið@3ï<ƒÔû|J•äÆ¢›Üx©ŽKª}R›-’fH£€¦C­ýÁ7º¼ý­*à›5æᬵ ‘U…ib¿wbŽ ð^À§ÌìZð)&Þ¿é\ýèÅ€º5î‡Y$ÃSþ‡.½k <ÅC5ØHC_. +y´®C±sÕüC+äj¯%5Y²ƒY¥KuùZëž¡Ì” ÝIvè£ + €ße¬/+€Ã#“NrëÐ`𲎄ê!ïB)2ôwhÁR¥šÀ1,“´Eƒ +O3¶»5h:'±¼ÉHäG.UZb®pÑn¡ °ˆpÊ ,‰-H?An4bÇ¢9êèqzõÏåà8÷Ay¿#ãhò¢œŒ¶„‰<‚ +@0úïvÃ߯ÏC`7<¹ïÇãSÂŽ¦Øp0:é‡8³ñªW\J»Ú…åD¶¡Â® °Gõݺo¨MÈ?k‹by©Ë-ðC^Šj\+fòÑbi¸à;ÅÒu*8v\ò€¦oX€{ª +Ô˜Òa¨bP²¿£Íät,çÖà ˆò1ž˜¥!åx+[®H$W§8Ýð?0¾»}ø‘óäÄ!©‰»ô{é,æ×x?ji¤‘6TN_X æÉH d{ ¯¸_ræ1–± b†€ê|w1&ÊL +ç±4`÷ÆôšD ÚGÝãt½&¾¶3< ¾å¬G÷œ(·|”›RÞc¯A5âG“~kDét¡`´1²™¼Õ‰BpGÊæˆ8¬iqw~–çrßa\íu!_Î÷F…ØïžÃ ø$aì[\‡YVFðN +³­U}øòÿwŒEŒÆ°ö;ž9Ñb”+Ž²M1¬5j ±¾ÂlµMß•7§OLËë?¸ý‹Ïk¨î“,×ËÙzuçÏõš~ÞœýzöäÁÂœendstream +endobj +1197 0 obj<>/XObject<<>>>>>>endobj +1198 0 obj<>stream +x…WMsÓH½çWtq2U‰cçÃ1GC–Z Yb +¹´¤±4Dš3’µæ×ïëÉv”TmdÍt÷ë÷^·ŸÌi†_sº¹ Ë¥ÕÉl:£ëË9~^-oðóœ¢Møàr9›^¼õÁÅâzzõÖËåë×'矯h>§õÁËZg„À³­ÓÉw¯œ'k¨)}¿ÿò“*N m¥j½¢ûµüåˆMF¹³mM†+剽ÜQgÛ2 o¾3Üè­z/ oM߯Ìèl~‰ôÖÙd-'äú´°¡.q“·¸‰›x|¤2Jv;³ë‰$ëHm•¡ÒæxÖȹQê’¥kÍ(,Ç”~žýÐ&³yå½Få¨# é^,€rL•;²ÉVÛÖŽëUÔ2îKðŒ´§Di“ á¡ 7qkøY…¼7ÖU£î8æV3 +?Po²ÙN“2/#®ë²OÑÇ¦\s¢KÝìÀòr‹ðÂXÄñŠìY˜´pÖè?žš½ï¬Ë„MM§Àô˜%4¢£ôùè‘Šo,z 0^õ'r`RÚ§I/õWÍ~zúsþùÍA{ñŠ38ST»\5ôŠ‘ÒŽýäìBüdr$&¼,¸4jΨ*´OªÆ£‚·(ÁúWûFʶ ‹`æ˜c:¥M‹ÚB‡{ŠÁ7FÐvÚƒzè^‹ôĽܳoú€ ­p7Ýó«Ó€/HEºkå(ª©K» ×£_Þ馰‹‚¤ $!ÕˆO1ÂB+Ü Ò4µ­iPÆqU½ˆs§¸±x]B™1 +Ê ¬p|•,Ê)g›˜©D]{À-07¢{\æ+% , whÝ©Ø–ŽwB¨ˆ|§Ð¯Ö±‡å&jotÁBSHÕ±pÓ¡ó›˜S $ ¯B³`%â ŸDz 2”¡Ü¥vÈ*´Ò‡,ÝéÔYo7MÏ•Hc(´YÀ‹0У|G°¼â +Ž¬Då2‚ìE¢û´# åQ$éA*`”ÊU”Êß,ƒ~HVv$˜éb+]?9z‚iÂùt.ƒ1ea®Li©ìy$2c:7è´1¥”îcÖ° †ºîgýx„¹”½LaB« +E– •2!Á£áŒúAÙëÑÛôâïfX2 œúÝ‚&¡ìh)„1í?[Ê•Q"‚0żûÇÇÐS¸ç¨±H1ýLŒQŽy‰ÿ— 1çx*‡ÂXÙÀ t;zˆ–T…cCýÀ }S>u:Á+ 5æ"ëÆÀ<´rìzž}^Ðòƒ$–‰)}BFouVúú ì)ábjÒN±ó§¤6À LÄ×Ñ`åDhØr¶ìÂrñÈU´+©RU"ÛŠÊTj35¼4½H‹QdíÿäÙw÷øíáÓ~úõftà`@Rú\YTÐËkÓ©2tÖÖÒbhæ0­@¬W^Œ½ß%E\iÙf±¬ØpÚt*Ãvñbl F{#¨­-q¸_Šÿæî3…"@]6¨l…”¬,>˜×¼ûöÄØküÁéJö§Û¸^~Úo>£ÐØn¯MkÂöÄa–ƒH¡Y§²|b%–ØVeš1%6Ãθ¡Ð¹è£²ô¶)GÛ­[W[ÌÖ1Å>~h=…Þa{¥8eÚ*ˆlŸfÔQXã?ñ¢MÂhŠÔ2@U€bT-'2ÖdÉÅ"ÖÂÐã•H7Þ8¥¯€Ó½Èä¸0üÐÌðÝ¡·’CnM 6y(î°ÜLéãŽâΊî ÜN(Äâ°bhK0$¹8xGün‚a;ÔvºwŠë±×OZÏèá~”¦êèîÃ7šóÏËÞjç |y[^Òb>x\Ý}\‰[ü’‰ykS´‹¨Dª>^?»™}“àåzuus5½Y,±€á®ë¥ùk}òÏÉ@ÌÂ)endstream +endobj +1199 0 obj<>/XObject<<>>>>>>endobj +1200 0 obj<>stream +x•X]oÛ6}ϯ¸ÈS$Nœ¤IÚ·4]>$ËfÛÛ@K”­†U’Šçýú{IÚ²œ¢Š ŽLÞÏsÏ=Ê÷£)]àß”n/éꆊæèbrA—7W“kº¾»åÏøqšª£ó£óÏïizMó +Wnîð¡$¿¸ yqò¤M3í^ëÿ¯ëP¬~™ÕkšN㕳Ë[\9™¯4½qú”¬£§Ùì”jOŠ*­BÇa¥?éœöºÅÇ–ÕnèëÓ—¿ÈvÚ©P·Kòtã'ô%2Æ®={¿ ³éÕ䒽Ƹ^Y×àŽmÉ÷ÅŠ”§•õ¡Eøþ¦kƒûµòA´%õ^»½KÁÒB£"ÞšW]RålCe]UÚ!º±OÛ»B#¨ÏHMÿ£šÎèSäæL+c[ÓX[÷‚gT£6ÙzJjϽøƒíjDh+ªŒ»­jƒï|°"Ï€‚[(CòTjB÷ÔêÀžqh@U;:”´ „”S¾oD4JYâ8Cº¨""h©°­ï ÌÒÓ—•*¨ÊLèÇa•ñLѧ§'úŠð¡Ü¦‘ÇAG'é«ËÀ7#m6#Õu¦.b};g—N5 ƒ¦nƒv•`#dh]·‹šãµ;¼¯MÅ0AÕ¥Ÿ\õˆ¦GBkÎ8V= ZK‚3©ÉÒÙ¾6þL>ñ­G¡õmX±xƒGí"¨ºÍ(TlªòéižëÖ{öþ8ûãùœš}­K$ ¬I©¢°=FL·}#seÛ\Ѧ¨.T»µÂ#¬¥Ãq¢bÞŒKï7ªX! r}Û"ÚQŽ¹% #¯¥S‡Æ@ +@ÕœJ‹n©3=ûÚPp=h¡ÌÏÑÄ°²ýrÅ!mh™MƒÁ­3{LMzW«ÉÚ¶ÁÙ8ZSPó_9ÿ jò;9ס8o½bœ`ªx ³ã €ÀI5"¶Q/LF@Ó÷^c,ƒ•¨´øÖXûÒwRëÊ-ᇌ§ÿd£Ü—õªO‚3‹• T ¸˜ææÓ`Ãæ¥Puy*†õIpÇBÊã}#(Z"âp3xHñ)MŒ´Ê2YõÝ„æ<'\ÅzŒ Ùwº`~Œ¡×Ì» èY@XS¶ +s §á S2­°j)Ó‰š­yóXWj‡­RIð1öäXª3jEí?ľ¾l½ÄFñò‡HÂyì£û*s—P&Oή›ëÚ0ΘšUˆ“[ö†ÇÍÄmí œã¨û[ˆâ9»•|‚îð®Ä݆΢Á}Cƒ%Êæ²ÉÔÔC£Üƒ°Ë ú6fƒ×˜zfRxň~ªØúÌæHþÓÂ>èÛ‚×%Z\ƒ3ãŽËF@q|4X[œZÂä„~kº»'<­Û}ÎÏ·?ðα1‡ˆà]Æ®ðÛ`\3cæ> +R…¶Ë&ñ/Ï4vÛ†´ò #ì}ÞryÀò +ÓËË úklpÀA€Üj]2³â Kfcä]ÆIàH{ØÉ·˜ƒñ±¥..ZV–tœLÇ°ã¹ ÆP£Rqݪ ÁìØÖoLb`È +˜e‹0Ê–Ï#¥H£†Šöìjeóé—KµÀ`Ý÷l6díð(ã&{b7D<³¢kv ÛÜxK/­]£Zžžï“ÖMÚ”Û¯>8lcm«}ïˆT>`]ýoT6A«Ö»ó±¬·ì$³Du´õ¾æÜ ¡Éj³Ó¯c—†@ ‘\o%o–„ƒˆCi·•zåDàÊéÂ6„)ƒ?<>‘(R©zUõ๗[—ÚP§Ó娳wq|öJr(¼Eûª5›m5^xìz”'‹V‹¨¹¬}‘·Œ¦­¾NÜ%¯P&™Lˆ,ÒÓ:xcRKY¬Û0Ï([áÉã_ ”ƒE_YdÆBC%Ý‘œö³ÔÓUi¼°Ë ŸF"‡t1v9Ȇ×ó_OðWã%ÝyNbìSÔQ“ÞÜs[t̲T0V¬T»(Ö@ 4%ãxÂ`>Æb#]#×½"`l€êà¤w¬G‘J˜w‚Ô:ë¼äÊú[± Ìm%e\‰è|tf±.ØØXYvª™”¼Ì„2سYr1D˜–×#ò1@V¥¨Û>e1ŠÊ4 +ïÐ\ÜÁ‹Õ-,¾NSò0–‰¼:D*ò•K=ÈŸ‘Xj¼¦abYŠB’ Ö¼È >‘Öð~ŒÐ«Å‹îùj¬Ü]’fÓü}ãîŠnnïøeqvÿøñH²ß¸·Ÿl— $ùÞY>~v{ñžÏ?½ýëÛëÉíÍþB‚3ïÞóÕ_çG¿ýæGÊ£endstream +endobj +1201 0 obj<>/XObject<<>>>>/Annots 610 0 R>>endobj +1202 0 obj<>stream +xuW]SÛ8}çWÜ7è 1ùjžviYZv·¥ é°ÙQl%Ø’+É ù÷{®dcètÚ¡Xº_çÜs¯~hˆ?#ši2£´<&CšMfÉŒ¦‹9~㯕´¦ïÏ“é[&ãQ²xãŒ'ÃæŸÛOG£ñûäœÆ³s˜/izFºæU‰¶JP›ÝIyp—™´.QËXI®`iì«òH/Tá’÷9¦ÀÁd¡~ßqŸ¬©+º¾¤ Dáy™,23ê'÷@pÖ|^7á" H­ ™Ôd`83³sôuÉð(Ï`²]¤ +* r  v¶À c^¬®þ8¹½¾üñ.ò©WDØr…Úä¾ØS¦Ökiqaûþõú_Úå*Í)(-Y¡7’Ìš­¤m(Jîb½—ûŠÝ0(e¼Þw®ðw¸òw ]{N´êØуYq\`í )‡8UvˆŠ†À)'âêöÜ66Ù<¬­Õ¦¶H%Å/6¨¦JÀRe*xq7"û¯5ȵ§Ô+¿¡šÈÁy0«‹(›Gaöý:˜Çðu¦Ø"\&(‡·VÖ0UÊÓ˜B/Ùgšði-Ÿ|Ìɬ­)ƒ-ÓCRÀª²&•UU¡bïucic¼A‰£çžÏ¶À;ÁÉØXÂ3ÿï%ÕMûÀ»¦ÜoàGì:n›Yì5Žõ¨ ï"XÀyDC™3ªP[å¢À¤Èz×¾æjÛÜâ@¾C¨äÒ\Â2# "6{ wòg-5üDÑ WJe´Ú³’e¦¯Ú¤Ñý°%ôý¥*jоŒ +m¥¯­†;˜ôíòcègÄÕrPÓr§|ŽS½pz´…ãº<›å,`8 +gÿ2»S"ÍC#úìP{Ù‘ÜBG=U +І +÷Òáˆ,´èt7—DèùMM •Ã9±,!Üý=¸ ìF{㬘¤Á=À“æ!¾@ƒ¾Û˜P/ëL¹T`çA4Ð@ÌM´qøðÙe¨BÊ }1Š]a,c°ò^5˜L£T\#CˆOdûøØøM¼Ö®1a0ceÃhþÂèaÒaÖüirMK‹6‘=`9á~wZT`)ÀNPÔ ÌЭ +kWêóÍýò¦l$凗µì 5÷x4“.µj…˱À éÇ®°ã9.gbk­Yñp¬éèC”o|í,ˆØxÌôA³îMméo¥ë'Z™'œ +æxÛC—q@–ü …ÿp…šÿ4v;â EDJ¡«_¹3…°\€J¦ yú]Ýß±¹3~h.Ðc¼ÖB¥ÿä_‚wÒÆÑ.´W5ú™çÄV9TýyR´û2ÁTB'[™ ¡a÷í0ï™Výmïš7Tè(ãù2Ž@"¦PØáû°2+ÂÍÂ.aUîÂÜC0•{º•Ùg¬ïs<2¢ø÷³mª¥°+,ãèág:¾Í ~:´Üá½¢Õ±Ë Ï‘6h,¦¨¨†r÷IîŒÿ +2ÌŽ­ÜÔ@ûlt=…öc—„„¡g4øŒ­"å+ì‰Xó$0à‹‘Qí¥6½gRz„Åp%±«íðÀpB è8Öh²fªô8ŒŽ'&bÀ¢¹fÂÇ·B`º€jåPjˆn¬jó´— ß(K0–tZi––(\‹µÁó¿°pf’`äÇë: ž¸í;bÖ¼®ð^=,7÷ùž\nj,%×lÍã-ø[äXÚÌ“¿vÁ²ãÙ¼éŸEóu„·èâ|B³Ù"j`,í7kP ºì>wØî`4Ãëx1¡Á|xÎ6Ãèe…ùôöSf:Ÿ&óÙ"0²?–Gÿý¯Ôýendstream +endobj +1203 0 obj<>/XObject<<>>>>/Annots 613 0 R>>endobj +1204 0 obj<>stream +x¥X]oÛH|÷¯èÃ=¬H”(Ù’Œ{88Ùø6{òâ—!9gMr´3¤µú÷[ÝCÒ4“Üa±b[æ|tWUW7ýûEL ü‹i³¤ÕšÒòb-èj³ˆÖt¹Ýàç%þ;M{~€¥ý—Ïÿ¹Ø\G1].VÑ’JŠñýºýTЗ‹ág<½¼Š6çƒÏxº^GÛáÓÁg<½^D«ÁSŽpµˆñõÛqÔ*ºüöÁv‹Ð»/îÀyÐrÅáK’ë ¢“,ßîƉbõüö’â˜v{Æh½ÝÐ.$´K'»ÜxREaOžê\Ó—›»·7¤²ÒTÆ×NÕÖQmqzq&[ÉÕ`aU›TÕ¿*uš+,.}·àÓnþÕTËov¿],h3Ä»lòðó;Úóq¸ft†ÝSfKeø´2ÑÎGÔBÇgª,¶:hG•Ö‡”«gM^‚Ô|Õlp—JSÛTuRH '=kñâùíºe°ëknÉç¶)2J4rV™©ˆe6mJdýï°¹C”ï\®Áò(¹ÿº»'Þ ½9T•Sög_ëò5¬ÈñÞζ!îLy,4_À7†h­¢½)$¹A”! RUF'ãsÆâq²WÆ"­¼)ÎoÈTµ>02¤ÿ‘|êѽ³%_±Ž3#Ά¸M}†œöG´ËUM^™lJH•ÌÕ§áéÃÍ®?jWOÉ[ɵTgä„ÐÕè¦D×5ØÅ.Î?°11“ÀF͵×T+ÿä[Ó–ÃÙ&ÚÆ´^3 Ëõ†Kר\Öýl¹âkš]oSŸõïq·Í'ÓÉ2i©‘)$W&ŠR[íÍ¡ª¬{fˆ õŽÃ´q ‚†Æð()mBooÞ}¤;úïÃ?^ß;iµð"•‚åw„ZðŒê4ìî$<¡D¥OÔ™Á6÷e Íd®ët~Te”7eÀ EŸ9³‘ûD%µVýTÃ($**U†¦ÄÚš2㟾‰çîæãûQì÷ŸÞÓ§û¯£+õs§=ÃQ×5AÐßÁÜSªàê ESà ëåc±;aJØ)(þ‰õ]ª47•:ýÉÓ)ÃÊžTUó¾j‘ôYTS8 ÷Êa|<‹ûØŸ¨´ dí´¢Z.n™@ƒ÷ý†‰ÎD}#¸p!c`9˜Jäk.füêL'͆Q‘ öqÐ5í]#n ¿éá“Bæ<6,k’þ5{|Ó^õb\š +œîk‚=z7 9”þã¤ûÕ2Â?R°Ô=ۆa_y|3EÅŸPZ4p=6­¦J¹FðáT ê=£LéÒVR3{(Pîìµ{ Øæ, \Ò dp`¦ F,â¬a'L,¥…EAÔm¨¥qŽ½Ö'ö&S’Fá>0Â7³§ª°Ã£“àÀTCo™îbìñ q‡¤ŸC +‰ÙQ‰)LÝùôÛ†âs $ ¶ ?eÜNº(øûÑr­‰–ŠS2ú’IµxÑ›£³Ï&¥É9ä0i%8{}œ‹æpÉŽš*4Ùàn4ƒâ`a{]Ã#p,,™/¯äØ0}¹|€ \ha~§;FYó|¾pѵÍà—51«(§¶ˆ “8å *È•öý»CŸŒèôÁ›xágýÂíE:¨G§ÛDñ´çWU©fŠ—ZU~\t0‘Ù"Ú\ΖKNôeš„kÂjŠ©ÀQ̘†\Ç}S°:U6ƺy’]¦Ÿuaܸ¡Óô Rõ\šáª¾ò9Yú£PÂú®_A«¸*—† .äû¦~û§4¬·šŵr¼¡M…ÉN Ž3ègB,=„n÷{–´¤D…ÐU)ˆj*)ß–'‘(F'úØnç(RÅa!®«ÎìÈ—IÛqzŸkÛÄËšê;k¸jÆgu&ò:÷ g‡²á¦€‘·; ß²;KÃd¥C¹È¹3zé ¾f¼w”¯-³„i•)—IÁµ,óÈ‘u¢ÄN¹IsòÍ£Š„Óõá^ã>Ü£‚Úõá`XˆIàÌ•…ÐÕT[}bíHRL‚e¦Nlö£`î‚Bú7Ó¾áG°&>* údãݳîèž“nå ¶9ï)•ì ¼5!5Ï8áöˆðRÀ­€’ÆìGâæ(– @t³6·P*]=0~Cy)-Ç–7…"èìì0ÅÄ…7 æì?Ræ°—)•ç–ç‘HÚ©>G| Œ|Œ%þ}çôGÈóêÿeôùᎭE¼§…`~ ÇÙ‚m`ã];¥†y¤ËT0~Í*ïé_]¸ó §[ÖGئÝ~ @ã?:PwFY8ey ~¡¹Œç+4^ãÄøæºÑG‰éŒù€ùÁWÁà½W?3}Ô•¼k5GÎ)×àNÞxc_‹¸÷ÙØƳ›‰„˜á/2šCWÒ`DóÛ]óÜ]-‘åU´ÅwLõë? +qX²Zµ?C÷´ŒAÇ‹œ0“糯ßÿo¿øIŠÆ×BÃ_8Áuãn”bʸúTþÂ1Ѽ£RÓlÆã ¾HåýÔþÎÞN¶áŒm«Ùx…? \áµm»ŒÖ«ãœàÁÙßðb‚q+¼s‹yï,ÆŸ:ÛÍ6 ГMÆ/r—›Ëh³Æ_Køá:æ=ïw¿^ü «~Yendstream +endobj +1205 0 obj<>/XObject<<>>>>/Annots 628 0 R>>endobj +1206 0 obj<>stream +xW]oÛ6}ϯ¸@QÔEcÉ’¿‹m@º.CÚn‹÷´ %Q6IôD)®ýøK‰²ìØk;±MóòÜïs©¿¯á/ yHãÅùÕÈÑl6Æûd1Ç{ˆÿRRŠÅ‚o勧s/hEÇSoìdG€õÜ[+NglÖIYùß~¾ +Çà˹·¤œÂeàMÚUFw̯18˜,œႆ3o +  ya»b fs4±Zàê‚»èöcàäd·ì÷ngxs‹8õfdÝÖtdñ‚qƒì¢Û +—/&Ðe¼õfÅ!?‰– »Z¥ÈÍl1§Ub£9¢UŒª¡³ln-¼DžZ} +n™‘³ ¨+ƒâ0§²=g CS gè6K˜åÕú4±ˆÁÛ¬¦Ÿ+çV;²*•K®¬¼d*™ãÊ¡Ø@©Q]1!þ©ÀNI÷G\…‰.^0ѵìoOÜ¿lg"vù\.ŠšÍîòåFx7MÎ6¶o0}ç + éZ—rÛOß!Ê=¶7¦[sZtÇÝyñ(Tf‡-¢ê*Úö†Œ7ÚP$â„â"ðÿk±É£3-س÷N>ÊRd´¥È%â‹:Ço‡jËÊÅVkG†«Rg6›‘܈G¥KÐvãÔ'¯GÝM¡9Ñ—îãTžÆiµ‘˜lb"M\ªÈV"åÚþR!ˆn”¸ Þ( +Ô|\ãÞó”.é²$°†mèñM®•¶×UÄYœÎVGdmøþXg:ÙŸddÌ…®Ïs‡wjûñçy?œÛxpÎa…À Y¡™»„ ¶@^QQÕ†^¼zqÝðÙÛïoÞ}xå¶0œب ƒÔöÆ3 ïéKû¢–Ùž±"ªU‚&e¶Fxq„öKŠâhb6ž} §ŒÏŠ,ÂÐÿ/•ë¯Pi™ò¢N |ƒÎflÉ7p„š/หtæ³o‡qvQ%·™±ìí^Ú¯½yà0­ìÁƒžð¹,¬ÕãámC Ê(%ÚÛl$¸ü~  0¸kî”ûwOh_°Ì +Y‘ˆùÖxÿ’cÒO(y›qqm𑨮 |^û°¶¨üçoýç¿óAÿÏmö '/¼Ù4 ÙŸK~f4O1¿”úšÞöŸfl¦ƒžpcÎGh\ö¥áyK ÖbmècmGÇd>ñæ3<û²ÈÌÞ\~Z]ýzõ/•óa{endstream +endobj +1207 0 obj<>/XObject<<>>>>/Annots 631 0 R>>endobj +1208 0 obj<>stream +x­V]oã6|÷¯Ø^ââ,Y’mÉ P¹|Rà.×F‡C)‰¶™H¢JRv ôÇw—”GqRZ$“\îÎÌÎòÏQþ„D0‹!¯F¿\Âӵƈ—sóe‚ŸÃ™Ÿ€â°Â½ž~üóûÇQ´ôç¸9öc¨ æö(ýWÂÝp{:Y`<:Âý}dX`°ÅË…cé…‹à1Fœ¤…tÁã¨_øÉezÀ)¤+ fV‘ø‹x iaK ÍdžWMÉ ½áeùSz?ÃÏ0ÍD=͘ÞÐÓëSCŠãu¼èÔL‹ñ¯RÔ`6îÎ?}8ÍÕ–+0Ò~÷åò +Y1Q»8ó.N€‘b„Ï_Õ†öc€•,K¹õrYU¬.(JÅøËð÷ý¥OL`·á´»(ê._Þ~:¿ùüüö1mc֬ⴄé "JG®`/[ßD]Èî²Êfù¼¨D-´QÌHuäÖŸmLN†i`O§Ä–C£ÄV”|Í58é8ð|ujY8@OIi~t«‹¾d˜¶ZMK™³rªY•1KfÍ ¨& §ó¾ÂU\“"=’ ¢¸nd­‘GqÏ•Þȶ, ãgðŽ4Á‘><å +bw”•wßÉ ñ4€ËÅâµÃ¬W.CŒß¦ ´Íõ†R/ +(¯dm‰6\æ‡ë1ÍnymZV–û ©v¢,aÇjc+ ±Ú;é*M×ám:W¢±;Xk°'Œ@‚Ê=ò¾•ÆÉ ŠC}»N“¬‚Ãj@½vG×L k)ux#µY鈢Š$.Ý·øxé®Â]ʬ{%”6>¤Òå‹ð ow@Ù9×@ ^í\T:IóÌAøŸ„Ûƒò*7'°rÇöX3S¬–¢°4–‚`í,D·è VŽgHq‹¿jëMÇ÷¿³Ë ãð7¬oz<‹W³L7xå Y°¥Š6çÄLƒä¸„qßÄj˜¬Ë²#¥7ÏY-à‚3ûû,‹ƒöý,wX¬3Z*Hä0jO­Ñ´¬8Š7‘6©2R aF†R«¨Ñ9þZ±íV¼ömÄ:[á9úgÆò`‰y5Èê[gØ/rõáëæ1œs|7¶XªêqÞt ö# w¸GñÚÚçE ‰“mäâêöý ÷DÐC|iôëY«ŠnªV>¶ˆñÁ‰{ã1+¢Áþ•™õ±©¾¡>D{ÿŠ,=Óë“Núi}›m…l5× Î#œ@ä•TûÞ©O°®Û?ø ÷8L{ÓÐœíøØ;ybé@~ Eæ¬Æ¬šp&ák}‡H4ø×J¢Qjp¥de¡èþ…ƒQºWÏ,BÃÇGN1>:w×®Êî©äÙSÏX¼´/7*õκuÂÿeËøë²BèBL¯—Ý8ã…/Bˆ“Ä?­òœáQòžç.eÞVèŶi);/Ä÷b°œ—(Ýbœ¢Ôe´ z­á¶µ:š's?ÁÇ (žÑÉ«tôÛè(#Eendstream +endobj +1209 0 obj<>/XObject<<>>>>>>endobj +1210 0 obj<>stream +x½WmoÛ6þž_qÈŒÆÅbÉ’ß CÇ]±æe±aXö–èˆD:$×X÷ßwGJ‰ãØ]°·0,ñx¼{îyŽç»½ÚøÁ †N’b¯ ‡ðø¡oð¡ ýnDÐð{¯Œ@s˜£mw?|T¶ÝA÷Á6FûÊt›Û(¡i/ŽƒÄÑpÍ/à»6tG=\é ‚ž÷r<Ýrf8iæsˆ‚n'†>ÙëašºÐÚ0Mš'§ߎUÁ„„%­Vyεy=ý´×†V„Ù¢µ3:áÚÂe9˅ɶ[\%/¥…Û<œJËõB ÃwÛ¼Óª\À¥ÊE²‚Í™U.–²:1œt!Š(£–O©\jä4CàK™X¡$ÜpË¥=€„Ij 3¥á)X¸¥s˜5 æ0S6ƒ\%,&S¸Ÿ½6î醢2Lõ +lÆkt:ALèÌ3µòU¸û ö>T2î]2ÕJÙoüj¯ZmR<*,˜1ËÔ/ÖY®mýE•`2Uæ©K€¹Ð1f1lukðù–ÃJ•žß ¹MÂmÞ›Þ‡Á˜¹ì õtðé/â‚9 ’/É3ñ¢Ê¼©9„÷™©‚C*4O°d‚{àR>gen1pžç&¨¶×hPÅ Ãm6sèa©°L©’XH,»GêjtŸf·†Ð×Àu¾üÎÑZY†¾,ñ™r!… R0–i‹44‰ ë¨NF^It^×ïú dùÙû|R/*4¦æWËŒ ™ ™nT¸ )ã2Vrž¢§;ðx6G½P\›žL1{æi·i&·˜ùð8Øzt)%⎴VÀäî‚´MÅxPoUgËÌí!qËEIA*sO— ´HLŽ…fe,/Ð{ÆWî>/XObject<<>>>>>>endobj +1212 0 obj<>stream +x­VkoÛ6ýî_qj3D’%¿[C'@Ñ¥Ýfcûw¨,Ñ6ItD*^°õ¿÷’’?¢6fÃ2HÞǹs©ûš‹6}] &¹ÀE†„±J !_ñgG=ð%#ïn½hã£C“£´5®B®tMÈTÄòNÌ–íÕÓ’)¾â"Á¬µöÕJža#Ò»e*²õVBªz1ÓÚ„ª1¹¹$†*÷Ýô4¤šŒaIÌfÇ:O§ºå))ÙDÄE!_&{]/¡ï9"ú ò¹¾ÔÈ"{ÀâÄØg±0ƒ‡Ê[Άª|•ƒï8Uoߤƒ:D¬„,— ®¸à·Çº8Ú¨s=,¿ÛïÙýž‹þ``G=Ö&7—ø5_X 0A3š‘ºŸ´®åöé%jH7ã Ms1lM™4¯$S=<%>ffàt]{@ïBô¶ú=­y5­ýVû€ÖŸÈendstream +endobj +1213 0 obj<>/XObject<<>>>>>>endobj +1214 0 obj<>stream +x¥WÛnÛF}÷W Ò¹°HIÖÍ ‚"ij4@ƒ¤±Š¢€bE®¤H.³KZÚþ{Ïì.%Š܇:€#“s=s梯WCàßf#ºR’_ ¢ùœŽ¿Ì h:¼‹&4žÏðy6ÇG#iÙ´¿²ƒè.ÈŽ ߈Òd<‰n/½¸L¢Ùù‹KŒFã£q+çÑ(ÞÂÞÁït|ˆçøâíâBøñý€îh±¢a4¾ÑùN¦sZ¤.Ë-’mU–•F'´SÅRiz½ør5 þ°A–E^½ +ÏFÃhÊϾ¼>—’ÉFӋ߬XË—Ë*‰U¡ª(­È—"²ÒuífƒÇietÎÉw+rˆþT³´çÝ„Ø{ÎkÏ“ŽížèRy¦qÜ¡Ž¼²à©aû-P™²V&µQÕ>ÆFôÍ¿§Ï2ý}f÷ e~ãºÃ ¸]œ©eÜØy&C~Й0 +ýÃfà¾Pc¤ †ç,7$Z¤M\[óœß0—([5ºXí¤$®o˜.Ï:µ§ ^Ã:i9ùEõ·øÞHùöá]ß–2Q+•ðô;§h9<;ç:6µóT3°!Õ"⑈Ž‚|­Ñh)æŸ4TXŒÉMÒ ËמB}¶À>˜á&I¢kÌåÿoô¸Ïw:ƒy:ŠÀ>Pû=³ eñM#²ÌíÉkGl³x)Ý•À ‹€Ü>d.Úä"kò Ë5Әτ ÂØ Vc`>ö°Naöçnx[i-¶Ìã5šBf…¬Ð»PCð¾\Ue$*c&ÅÂF…ßïnÒ†p¬;4àŸ*¹ØcT¬ñfyF¸ °åŒg.4_^ßâIÏ÷ˆË¡!L{ëxy^ƒþíáz¼Žš‘2‹†Œ±í€åP”;j|â°3uRး9¬ÈD 6œÔ…T2øþÏDbq'8Fú4›†®ñš â]ÝGIºú<÷—û'”ë5ˆrª|Î×*Hœ\Ý­V<˜Ú{ Ÿãþ=¸Ö¢Æ·v7Ÿ:¥4ÙÞßUn‹ MÛ+±ÆA4w‹ášW¸‹j\Í’eÎðYÄE #Jjº5ŸH{xÃ=€F­Àt•8é` ÅÅÎaì°Å±vÊLTî„´–…4­Àin#œ$Þ½uN áßÉæ·ø®‚ ‚Š¤½‡7Þ¾¡OFá[øNê¹ɺýF¥?8ù.|¾$q´kKkw(gãh†/?øÖ“ö¦SÖüiqõëÕ¿‰;‚endstream +endobj +1215 0 obj<>/XObject<<>>>>>>endobj +1216 0 obj<>stream +xµXÛnÛF}÷W â>È€E‘º«€:m øÁh륀cE®¤I®²»´Ã~}Ï,©‹)ß*;2 XÖî\Îœ™9Ì÷£ˆBüD4êRoHqvã1mßÌB zÁ€ã(ÑhŒ_¤9ΆÔ{ADýñ¿GQL6_ÁpÖoµ™^—ïV‡»¸P[yÊc—¿¯O†“µÙÏSvڰܹèÃ5MçÈd8Ñ4ñžCšÆ­ÂJcš.¥•‹œf’¤°*-ÉJG…Uù‚ÜRÒÉôÛQç‚s`C-›Í‚XçóêÏkû-Z¤z&R’¹3eõÝ`}…œÌV©p’–:“‰2»©Ý}ÄØBLM¯éâÎJdAÒ™»Uã>ÍUºÉ!^Š|!ršDšêzPùLå á‰8–Ö’ÊIP&ò\²*S©0|ž³µ"›‰:ž¨t96ÐUy@PÂÒND©Öw”ª; _ÊþZåÒ„‘‚~¯ Áÿ­(Ü’ª—‘ß e¿:©šu¬Œ £\ɠܦÊ:¤Õ¤öeÌ­W±BYŸô\ƒXý¼‰W‚·NÄw0€xͽŠå™--rhsú‡]Ê4µO„Ǻð¹ÐÁ™mM|\f´T:çò¾Óè¶çÛkF<³^m¬T/T^QrÛÖOµV.…Á˜¨ÛEÒƒ(ºt”£Û˜áö'PÜó]:W>QÓmŸ\Ó7›(rõƒÉŠ&º+cÝíJX{8OùsíKùR[êŒÔÖÄ;‰Š­èç Cø  ·3úq-µéŽQ½rèX¬<~íÏdìH«±7ªÉøRW^æ~` [yJ—$’„÷×RV½¸]£~!ìnßéãq¼uÚBGæÒ¶ÑLεŸYá° ÁägÜqÒõþÛÔ„wM³wˆ™¾—Ø@§¼Me«l´v˜ .–ð=V-öl.*~‡¹±…ß¼‹mÊÛl×-VÇ´Ÿûó¹"ã@bîª0š¿Œgµ€62*!='è]²JJt1K}µv@[­œ% Mk~[¯t:“jããôZò\kheÛv%c……K,±Ô¢0‚IV…¹ÊþÚZ'm„_ª2±&Ä\-;áè¨Äêî–ÂQVÒ:D•*`!ˆRaÍ4ÔGªcÔ°oð?`½2›œLQÉ`ŠŠÎ5Ë-ÆC@½r+·8Äž.!¸ü£ ¯6ãÂ:©«“¬ì|~ÝÀî +õ)uá•â¨53È{Ê Fž¶€;”Ã-5+Y/ÿ˜æ±@J,õ8pÍ:ßa '$!¢O¥YÙ UŠèñ^kdª²•ÆnF=®àr]ÄçdÛñÚ@=ÜŽ$ÔÓ§ßnZÇ7'›T Š/êóð˜L:ᤠéúêòSóvó3ý®W¥Q‹¥£›V|sBÑd2lãmrJ×ENW*6ºJÈbšä±—1\ÇCçÈþ+[°ôêßÜËdïОÛ/çWû¤Ü5»wãK™«Øs˜õ¶XH.]ód㳀ŻÍìÁŒ-¬ÙoûÇ-»ÐÛÍüry}îut=Bð؆‡˜õî…ÿûL'J¤·œ«ö›2u.{ àÿ!òv3D šÊÙmàR=²øb©6ŸÃ¸a¹ Aâ*  s1®E£á "< GÁd蟲®Ï¯>ŸÓ£¿ÉØaÆSt3vÛÑðãµG!Óðp*­ã!7]âÝÒ_…§sÔFCüÿŽ8™?§Gý¹„_endstream +endobj +1217 0 obj<>/XObject<<>>>>>>endobj +1218 0 obj<>stream +xµWkoÛ6ýî_q C +Ô²e;²²oîºÁš ›½Ç‡-Ñ;ITùˆëßCJrRÅËp‘@‰-òÜsÏ}ðòË ¤1~BšOhQRÆAÓÃCeø0¦I4 BšÅsü?›Î‚sRœ6X<Æöý£]ÆqpÖ.ž`ƒ_úa5]ŒéœV +ƒÙtBÐ΢˜V©‡Ó*9MM!3Q³&Ǿ/V(žÑÈj5*Äz¤yb•0»ÑO—ËŨfå­Ä×@KÐ3jw·J›»šiýnõy0¦a_`âô¤÷Yé¸ôK*—Úè;ÇÍì!J“sÕ!j»ÙˆDðÊàîhoEµU + ç`~¨'´HiA±dËx ¶=2}Õšè@µvã#7½šOãô¬¯}8ﮆ{°gîdÁu÷烠MýǹÔÃìë°ÏÓãèЇ;ŠA¬Ã>ç£Cî(:=²'´äZ Y½¾”:ZºÝø¨Ô–¦'tƒN¸•*}=¯“Ž˜k¢~k¯ÈßXãOàzŽ>…{¹SÓ©öýAñ¬*‘´u-•¡Tô;Wk®¤¦¿ÏüI)f\ oOm•ÈÒ5M2’¬æûÕ·ï^2¢s²vx¬@ÔŸáÿŸZŸ½æ˜k»Ÿ×å¸È]?i{ó°Ð¦Ê@îsoÛÕ^ ×ßiÇöˆX]Vƒ×¾|ßv`ˆ]Ì( ÝÜ6l·ádî8LU—Ä +-‰¥)Æ4ÖÛL…¨8±ÁX„ÙˆFžæ ª&㆔HInˆU•Ü‰*£TÚuÁ©V²¬veØ)? &n”ë<ÓAûb3÷âZn14jÃP½;i-Y¹fô³ãE‰¬*žgÁäJÚ,oÖ°º.ºš69ó;ÝâȬ;%0:ò˜c÷­·9º8§pî$Á„‰qØ[ÿ$Ja|oð³çƒlXÅ"ÇðŸf꣜iÈUÙÝÅ9_<ìuüÆœ«\oQ¼àLƒÈ=Wþ„ñ$·œrYs×y$^ q·qc H÷ôjô/î{LùÃN¯ŽØ[+v$+<Ø=sap]ÐùÿITö+Á¤‚‹ÐPï´áå{Äßä^L×3µçãçàýÊ™f¼Ç­ áÊ0áìÕ§'Ìt{Ú&9¾jñÖ Üë÷¿ÛóóúÊ­Cx!¢£‰Ø#§z6÷\ZÖŽ¥n»¼ÛtÍ Þ’«{‘àïV˜gUJ7…Í2¯Â3ÿ£Þ%S‹ñ³g¦u- UEñ»æˆ‹«”Î[87ùëå²Á_\Qöddô×õ忈v•JÕ¤øè"é*pÄ!MÏ›lºDsr$rÍ¿žMšKÏ +ΕHppÐN!<•[XÑŸ—}´¼1‘z¾•tW5[d·¬¼Da. FÊkPŒ¯‡žë˜0Èðd› ˆg+g9‹SQa‹¢ W7QלW´ÞíÛ]:«;¨E©p·&[øUA=¤¶ kãã÷"„m7x$BܪNã >ŸRÍ‚qä‹s¹¸ú° %?£ÐG™XwpûjuàÃ0ÂÕ6žÒp>Æ5=íól> 渫⒚žF±ÛòÛjðÇà_´Ð¼endstream +endobj +1219 0 obj<>/XObject<<>>>>>>endobj +1220 0 obj<>stream +xeSÁr›0¼û+ö˜Î|tÒf¦gÜ–N{èE‘Vz®$âúïûö¤ãŽí±@Oo÷í®~/rdüÉQ-q[B‹,ÍP«´FQW¼^òÏi´ÓÆ]Q§ËËûfqóX ÏÑ´±IYWh¸Q–¡‘WƒØïí<¨…3 +ðýéóOðò´Ó"ìÄô’lÆò ~g<ŒmÉ "²àGIÎû ÈAiµJ?4/‹$C’ß2ÁF]=ŒÎiúãÔø`ì³± +Ûõ©‘aiKA¼jaVBJmÀž¼7Ï\s ÷êà -øxO“fÐî4y9z';âYóW[xÀ3àS ƒÇSƒÑkç'Ò7ò$]R¥uŽó¿–e…só¸BΊ¶H–uš¯UZN3’•ýèt®;{ÀÄ–§’†U=ï>èášù9»Ý$ óˆ¶DñŸÄ ñM»7#ùÿ`‚Ü]cÛ]'¢ë‘‹l0r–c3©è¯Áº\ˆÁv;Ú;#‚ÆÆHGžÚ€¯ÛHÑ÷;ñ¦Á+:°‰#ëEàoFiVJ ½öÑô ;7C1¿÷6ï^ *85³°`—IJyèQviìC ‘@ç4»ä´'×pA¨£Çf24³”äÃÛÑNÌ}9ð”æ˜6ÖêSs²¶>Y›—|•ê[äw|#ÔÕ·õæ~­£->’–vš6N•œË“*[ýotQiUÖ|m¹U¹Š'>5‹/‹¿ê?0“endstream +endobj +1221 0 obj<>/XObject<<>>>>/Annots 640 0 R>>endobj +1222 0 obj<>stream +x¥WÛnÛ8}÷W ú² P+¶|ß·\Úm°mš6îv,hŠ¶ØJ¢–”âúï÷ )Ù²ÛÛAlK"93gÎœýÛÒCšÅ4š’Ì{ƒh€;û÷ôæÃ(¦ÉtÍ)§ád„ïp•ÑC/ £áþi<Ÿv®s gÑ¢³Vh2™às<Ÿá3Æ¿U´îÅÓa4¡ñ`†Ol›Ny‰¿b“£é<Óh1ŽFx:ŽÇÑ´¹â§Ýk<O±*¬õO;×x:]ÀÝÃÓ«eïâå‚â-×@e:›Ó2ñ`àŽ<{e¶Tº6ÅZojxú ò•€Û1 G‚î­Î…ÝÑÉ….ΗŸzêÇcœq†=•5Y¦,ßf#ÃY0Ò±Kî­²êßZ;])z¯D¢‹MX<¦á°YÏ,_©µ;S“ÄѺ¨ ó{HT¥Ú‘LEY)ûœÊL §(Ÿ9ö»JEå÷ +\H“ã¬J¬2E[]¥| öi%œ–M$ÃQpt­3åÈ)û¤%~ÀœËWï"Q$””TáOä;"Éu¡|¡R8·56!UH»++m +>ÀÑ2U'V[œK-݉åàîpJB”ŠB`°Gè¬õäñlòx~ŒÞ(J±QÞË*UôâàCƒ™uÀîÕÛË·È42&ÙÉ(œuœ6ŸÙ+!?o¬©‹$,™6®Ä Å`ˆü/¢ÁÈ'ø²®Rcstg*õû©sKNYbd«¢"üœ™•.„ ŽÝˆ'Е( +Sà”göÝß\“÷øÇÆ'ƒxmºšuwˆ—ôòòݳˆ® RÝÚƒ50ÁÕ¥²N%@wµ 8˜BùÐûûpfÑ<„óÖǘWJ«å +±*0Ž+# €·’‘¥XéLWšÓlHÈ*”ÎG]$f h–4F±³’Ú€µDgýñ<¢LÜ= Ñà9m‘gÄT"5‰7ØêB*¸»ÖRÄ[‚øöc×~ßU»Là˜øª¦Ìl8èµ5ùÉ.Ï«ö x•™F2›j+-Qd¦®2]0à ª¢tT(T’cí€3'v»å" bssÑ­gÊa7 MÅ"'Ùg.à°ƒ‹•«¯MΡ L4^ÂnƳk€ÅÌÈÖ–Ö^0üé…aвÌlÁ”CM\¾4?ÜÝþýÏíÝÃòòõë(­òì;*tbzf½²ÀYV°Viü´¥˜íh¤‰•J±HFt RlÙ“€|§ Ñ^p#N^X B›ÀêN•,Bˆ‰!9 +ž\jê,ñò¡`µ¯^ôË~pA¼*Þz¡®ÿ>—PE.@nÐ-,¾¸¿¥ÅäOeWÊšP5¼}£YÍŒÝ};èï‰Á)µîCŸoš¡®õh¯ +Üv±@ Ì€*‡/ž~¢e ÷?ÌŽÎ÷òЛöš–:ɧmÐa/7ÙÊH“y„Û¶zp¥)©† MõòÎm¨RõD¯×8“ד»åø„-Ç›™Z)R°RªØ7tÓØFõpPÎä€Eç{±o©rÛm]ÊJt?òŠÌwø…™Ë#d-¦Ä' =Û#Òm¨†ýØÌ ì #éc>õIF^ßq¹×ôk€ï9• ™b0%ŒÙHb`©m>LР]3Q°È²€Ê‘8èÇ“# ˜¡OB?O¢*¡3LòµL™Ï¾y´rúüTŸ“ªdE„· 4¼VÀ¼U´ôj‡ù–ÓáŠ+•Ô˜¹üv€…Mæiµó'AéDÅSÅ¡‰@– …W‚0Ï`$ª 3ölu–'dñ“ FׄLÁyD[ã›9Û òóÎ+Õ$š&Ü}ìý®#l~<G³é>/XObject<<>>>>/Annots 687 0 R>>endobj +1224 0 obj<>stream +x•W[sÚV~÷¯Ø—NOHÂ’h&Óq.NüPÛyéÄy8HP¢[¤ƒ ýõýv„¸éÔ™€V{¿/ßÏ\šàŸK¡G~@q~6q&D3gJÓ(ij‡ÿµ¦%#@ºÿøôáÌŸùÎ%Þ$9M'3'l¡ŒΆ0°—¾ã±ØpêD¬áNð.'¿X, ftõŠm¢™ëÌZƒ§aMb²çué³9Á›¨XŽÅyãºN@—ìqSxÇú&±@‹XrN.|æ@1Ô#CO„‚Œô¸ÀCkÌT€çÍD¨U(ÀçÏX….ÊB=2˜ö +}zœïŠ!Á`ó¢H„Fl²@{/|ž=ΟZ>&ñØã\d‚œ2‰z\4>‰¶+@ f½>W€‡Ä°óV¦=ν´|œAW€7¹”€Š®{ܬ G@žã ÷B”"í1JF½™7*o|=#7¤ù-lÈ<‘™Ð<>[Ëtµ©ÓbEf­éAå EïÊ\¥iê2Ëtýbþõl|=…ñVÐ::Ÿƒg™Ö¡ÆèŠÀ×Z§h[ÖßøÉ +½÷–Ò†LI›"Ñ`QE":+U«\¼¢BǺiT½cIM¾pbØçÐ mÓ,c#&4r¹d¡º( )ct^Zë‘þQel7;2ºÖh4Ík½#…ç¼Ä‡Y+ð'úûFí(.Ÿ@—°bæï”S®Š#Å•Zi‡®Ë<Å“.R]Äúå‰Võ¤i¡uAYZ|ƒàmjÖB¤b³QY¯!ÑM\§•IËÂiU¡~¦ìãG6ASé*¯2M6‡’ŠóÎNûºËÐ9-aI"ÀOˆþo댓ˆð=y¨|C×çUV.Tö¥5A†^þ^ÑÕ¤15ºFðeXpÔ×ô¨#.´Y¤%òˆ„2öœ^·{$ZÏïï>ÜØÁåé U\/«ºÜTϳÞ^}º½¹:`Yõò¹·u‹ì­ËM–pÚÄSbKšk.+c„?W¨Øšu¹…[,õÐx‘é'-UÇnS¦X[Õz©k.+ª3z§%0ÊV÷‘ í:ö¬ŸŽÑ¸f·Ï=žç´âáe‹}-ðã‹S;’Nóñó³ÚPäõ®2p·RMƒT%(+n,tÞ÷MZë\Æ–Û©¶V@ÏÞ©mö¬ÖfSUemºôeåª,ž©»6Â=š3ö3¹[ +áa «êr™fºùýÔv Ëͺ3ú¿Ü>>vL€6Œ{Ö «ûX4ýÚкÌ5%ˆZ ý˜J(KKÔVnjXØ †l.xxm +΂2ÿjgR§Oûöû(m?d}a†¾0lÛû§ž4•ŽÓ% ¦•.t™`ÅÙ fÓŸeâåqXÌaHÔ:âÀ¼¸xw÷pq!áåIÎã÷3&‰Hþ‚^F™±©‡ý9ÔÛ9"ïœ8OøÅQ&^ –‹ˆcÛÂÁ lºA°z;N-–ÃxÓÔciàqÃ+tœ¥‹qç³dbA&TÙ®3ûtblÑ׋£‘28¢…QIžÊb_ã²ä~âoï%9o‚ƒ2?²êsWɲc}à)¶,:rŒÅ3.LËt$ëÄâ<¢+Ŭšo]&ÁdrDÕ7Èah ûƒdć²l³P¶VÁÜn}P1V +6g¹¤ªL #7Ά5vÚßX¯vá«Þèr¡2ÛmŒ_£n¿fÊÄE_êB-2ØÃ@.ŒD•f Rvßre'\Üió#«o:Û“æýíÛOÝÏoînµÉ3¹Æ×q»ëG8e]êΟG/Ûݵ®9ÑÌÇ™‡ë,¸ä•úpõÇ›+º¯Ë¯˜4¸ëâ iñŽu\N"ŸFáE”üŸ{…~ç0_貸÷ó³?Ïþ£öÁbendstream +endobj +1225 0 obj<>/XObject<<>>>>/Annots 692 0 R>>endobj +1226 0 obj<>stream +xWÛnÛF}÷W Ü‘‹ºÙ’Ü7ÛiÚq’&*úPÅŠ\YLÈ]ewiYýúžÙ‹.ŒœI“KÎåÌ™3Ã/'êãÏ€&C)¯OúYw¶?>ürr1fC÷ÇÙ”jº¸œfýxUÑG~ž.¯FÙgÃIv/øhﲦËËìjïÌ¿6ÁäÅtCü3’ÞÞàjòõÁÍì¤÷ê‚š-8ÖñtB³Â‡Ú§YÞ™-%Yi¥¡º±Žl³Ziã¨Ðµ(UúA+KB$èlö Æ·7ÖùKIçÏÿÉK‡ìRnæñé.bcÔfEç~8žD[éØŒ€hÇ4—äf ©Ö!Ú¹ÑkNR›¿,´¡?KUà6åU)•#§‘@.\x?¦)ÇÖ§­Ã—·½¯¤°h.` /²ÇGaJÝXz+ÝZ›ÏtÃ>Kõ€Pò¦†áJ­B^5…,h]º%^,-¥u¦œ7þ‘µÒ‰²²Ù1Œ†ãì☺Ãi6¸¢îå…P×–>Šz.Àƒ!b’–”v¤œ‚ \׫J"ù’ÿß…«ô`t³¢Z¬VœÍéI©¶è½…|Ý[‘ÿ¡Ê§tzßñ¹"]#EUmèKSÂ÷[2ì)ŸVS ˜Áä²+‘Ëû³sÚè†o5Uq|(u˵(jØ¡ÛzžåZ-h%Œ¨‘d¨©€uª‚4sÄå8ÃÓ—Î×lž’u›J’ÈsÝ(—ÊpEôÆ$íŽ.B n“;‘/K%if¸I®ã‹¾/~Ó¥b·žs6r'Æ>ìCÁ(w"=ü ×Ǿ¨Ep༃ZKœn¹¥p|¿±^Ñ€©Êy¼¹èùÉÜ}ÇœƒÑKÁøã-s†[Ø2Û•B—dôzÇ  Ø4z}sè ÿŸ•^Ã"xz ¦5\ƒLvšÒ\žÁüJX‹.*ÀO¼“<ÌWä!ž÷"R@œPE绿6P;ð«n'ÌÍ{NÒâ½Î¾ÕÊ]UÒd4ãÆôˆzC¥ÛÐü`“ éÊÈGÖ ÀÔ(U›ò_@œÝú±à+ÂÍëwIñÅÂ躅ç§H +N$ÙsåÀ\A1¥õT‰‡\—^ v,´Íöû‘xØÇŒ õõåo¹L jÏ "´µtõ´5Ph‹Œ~•*—ç¨HÒÎí3Œ•(¬%0*©–õWzÑò,RŠs™ dB%ϨF+m-çúLÉ᩹%Tv‰Â+ݪûöTË3$ •7ž$õ¼Þæóþå-ú]Ä#ÑdÛ‚àÄêĵJ |¬à›Œ®c_ÀÌ9-õš9[Ñ|Çü$Æ¡$HtRb˜üÄ&0–»»¸CFDOEŠÏ“ÏÏ4æ>ì0qèPwÜÞ@Ú½m4ºDÖ÷´·« {ÛMð½>žú׊ðD’¨Îý÷M҆ŚÂ6»D–´‚þ3‚íŽÎ¸4éŸ]vpä±Û•V7Ž?[lÜfàÉã ìQ:L±Ó“.ïM-0¯ßþFúáo!&UE0(˸5°¹îPJÙõ£E¶W¢ç½ð7¥´ÙýYˆðp1ú iè®Â¬@9 XX°K ­ÅÆëHŒç¸|Å2°¥UœZet£ýæ²-4Êú<ðÞypXÐ|ƒÆUÅÑ2ÿ¿uïôê‚9ÝEµ9Ý iG»£Iy%oæ:Ï>æÀ^D±‡°.ýºW@WB±q;MJˆ‹u¨*ßBãÙ2ŠÝàãgŒä!$/}Ø>–º@]¹Q¸¶{ξa-6X¼¶Acâì¥ǵ/Qµ9 +lj½þÁö‚µq%‰;" `GŒ¥¾õ› 4Ó÷îè2h™:I ùKÁ/ã‹Òð§“+Ö¡Y¬³çDÕSóðùþW]ÝB.I ü…À¶ŸÏ÷Xñ9¤ÈûZÃëz0p™¾[è±\­³íà‚ÐÐÒ¢ð’f^øE#L§°r)Þ-™iP<^m[!ÇTr} Sä F|Ö0^AÖbÁk¹_l½)UóDs|{˜ïÜÅN¥7Z»Ú™õkzv^*ü" gÒ} Ö†nA½B>öTëæÓQ‚ä4µ֪ϼÓø®÷j‡Y×Rí.Deã§]z{ïÑÌ?l¢Ûá:•‘ù—ã™ɦnÕõû.¦1«ÁŸÈÓ/á»òãõÝÍ5½7ú“ÌöŽo8®›^èNúWLýÐ3¨Øñ†ñÃïøö¿·Œ^L.²Éx>}'Cvôóìä÷“ÿplendstream +endobj +1227 0 obj<>/XObject<<>>>>/Annots 697 0 R>>endobj +1228 0 obj<>stream +xWioÛFýî_1uRX,ê .;mØ®ÛuÒÆ*Š¢.Š¹’6!w.iYýõ}³Ü¥ÛAQuDîìoÞü|Ô£.þëѸOñˆ’ü¨M&´ýS,ðÐ¥QÜ‹†4˜Œñ»Gc*$Í!ÛÅíæχø !pF9FÑÈ?dt{(ìÇýQ4ñŠû¸ìôƃ ~öûÃh=±ST?±¢ÝgœÂ§±—u§;Ï9 zø²½» ÌýòNôú}HÕÑÅÃ(~2º ñ¡ÃÓ£Îõ€z=šÎçh2¦iêéÒ4iM—’^M?Bè9™VG–Ig%¬]§õI¸Ý"©ËbCk•e”)[R‰Û¹H–JKÒ"—8*—$èøå1‰ÕJêT¦§´6ú¤¤¥¸—8rŠMÁ¯Y ¿e+]j#7}øÖ¤+œØ¥Ä_¡SÒ†–ÊSUȤ4Å&¢kS|ù*c».¤t’šÕjs³U–z³ú?¹ãHm¦>IªìyÀ錡ìEƒ¸Oma‚ᶳúòüá|Øâÿžï“oyÿÖ*ùÄPí)kwRyßá¸Ï;3¥;s‘Y/Ðo‹cgßÌ̽<õ‘õCúž6´´(šf@Mo(•6)ÔªTÈŒKß°rN“L!øSR‘ŒNéBX™ãùÒ䫪”ETû,î ÖØnÜÚ3k2\Ï6”Wà|`SïdyñöýmmßÌwÌSiX裻R~`ñÔäB鈦ø –P'(Ü ·¾`ߊ|&j:jS¢Â³ÐêŸ:ë$ìÃÊ®Ib*]:T€ºÆ€ùðάᱨ‹$1E!íÊèTéý¦Õùk ¨E˜RSRHQr½pœZ>”dK¹"e9ŠúÐÕî†ëHÙ?|½N %F—€‹mòÛ5*ªýI›µ&¼,•ÈšÒq5>…"eœaßS&5(óÊzm5 †Mgiê×泺{ܵ&w¯j±- “ç\ÔˆÚ.Ù“¥,dSZ¡M5(Æ”/öMµ¨±@mAíÜW@ü¨±p'=k¶ûlí<ºÙry†žâ'v¹5!?¼½"Oa-×A´AH.¤–gù góÂä.E¿mU<Ï_€{Œˆ~·æC/ú 5ãÔyì©<—©‚Ùf?;\É£¨;2o„®D†juÔã¤oí>[%_.Ë¥IVòs¥îE†ÖÁ°<§çŠ@l£aðw¥S³ÖSúåêrK>:¾•Å½,^Š…,Ž1„¥Â¬@Ý­—*Y:‚Jelù’ mÂÝÜ^óàqB "÷uóq3)Y +½õëP-§´1U¤»¯2Nþ # ù@V˜¦UŠ ؼ{½Uì€îf+»aÁÎö½ax‚Sš)®K¤Ð勳“ÏdaGwÂq³Ø2¤dªF3Q,°\¯æ@~*n“‹R!7ÁVÉòÀf ™èSÕ£×µ¶µ(ÐÿbáÎõõÐ çà«çmܼ=~¯Ûˆ°}mŽé’û!›‚ù¿dL¹ÿÒ›ºãºlî.7¨fî”1BG—¹kq¯áŽÎó6r÷ŠÖb³GG_Ñ5H¡X-sØ*,@ÙÊ2×Î¥ªGw·MçÜá´”° &¢½sæ<£ úÉ©æÁ äVéD’DèÞê“ž":”¦ ²ö|Ë8e"ÕÅÉC^T%i©®ðÃ:ÜýÈØUð»²uS°Õj…%!}¸ðºñ¨ÏÕ¢Bó™ã°EšÖª× 2X9W¥kB„Ísg‘@‡XU-ÐL?¶]¦ž×.~ N̉¦ðú 8 ~lWn·ðõæ“ òp¢_H&¢Eí†åÓIdú#:Î ìÏJWd7˜Ý¹ïÓÝz û[³1þ¹ÈÌLdóØû™¾Dô‚¾‰¢¨¼ëpƒ@¬D²ÇöeqòÝã+‡KÊËÛ$/Ÿ·SjöLj/¨‡o¤¶¥íÆIíúºòS±©Sï8Ê”W^xÈã%ì—nU ôÊ­gûYã¡ÛÔåª0‰L+þ– Cãs÷ÔøÎt/ +^7¹µžV~0x„G~ôã;±ÙÂèèw»ÝÚ¡ÄKµ1'ùã‘ÜõGcîÄŸöâI49‹ñ8‰FC,ïiëöÍÍ:la>âûƒ®LRñ:ì(Κ14ññ9‰©=î:ùÿÑÆãA4áó–ícVûýôè×£ _—oendstream +endobj +1229 0 obj<>/XObject<<>>>>>>endobj +1230 0 obj<>stream +x­WÛnÛF}÷WLV +‹ºX–ähaËq!ÝXQ@/+r)mLr™]ÒŠþ¾gvI™bì4É /;3gÎ93ür4 >~h2¤³1…éQ?èÓèlŒi4àç!þIñÑÕâ¨w3¢Á€1?;žNhžï÷iv62£b#©´ÒLdXX*4}ÖÊ_%³‚/ Št*TvJ*‹ôÖRntšãùX‰0Ô%žYD¹°v«Môvñù¨OÝÁY0DÜN±)~S=©D®etÌè’îEº$¢TeÊFêIî,;*Á)2ª«»Ó7¶‚­‹çˆ–´¯Ì¿‹²Ÿ¤Y¾¥´´­$¡Zi×ÿþæ Ñ¹äðÚV% ÅB%¤b®ªL˜C¯µFÕ®‘|Ð0׸8ÌŠ nÖÏÙ.“ˆ3°²Æ[Å1²¤û×P¢Ë¾ÌZ*Q o¾Ó»;\Ë;=Y„=÷ºëÅ3:\©ÙºL¬ K£ŠH#¬ÎlÀ§tѸá8qã8w+­eåŽtì ùn›sIàO†P¡ÙåC~› ƒ* •­ù˜V1ûb« ©7*“TnQ…—‡óÅ[¾M2D5 ‰ÎºˆÒT«M+Z™Gî!tTáôïD;’_A;Cïf\Ù r- w-±&fsÑ+9˜:¿Td¥H\vžšó½Q± +=ífhúZZJeVz~¾€š×e"•§´* ¨•2?ÜÈðÑ5k¥¿ÒñÌaéÌ ÝT§ËJ=•à¯Èƒcšs. h(,Nü¶M"îàËâMxÊ¡¾÷Oj—P%÷ª!5Õ¾ N…½ÖÛŸ„ØO‚}µ80+3e ¥Œ¼PV.Çâ¨é5d›®ín§KïR¶Ìód÷l.Ù +UÛË–Þ¶Œ–oÀ{7aÅìî$˜ðó4˜²Ú—Ãñ¤2’ `bÄp‚i0¸€“ŸWVþ¤0ƒ;£W‰LYå½7Fg¿Ï¢ÁÐé'˜L8w2eLJ•…IÁÑéäÍ þ‡jn0«ìjQ5|è’Nšºw—b—C+P|ÜëñGü¯e/ÖQlª¬DžË,’Q@7FÊ«ûk>™õ]³e‡kÖh¦!Ü&»³øIluvéÕZsõq´—š2N­®ØF‰ U•:C«+mâòÚˆt/¬T<Âñ|eå: %€Œ Wxæï#F­41¦z² è^ïSjײÏPÃ9øDî —‡Ñóz¢Ð“Ê·þZÝ ‹RFˆÙHFDŽÎßù°€nMÚntRåíA¯Om KfÎ'ê¹Zm‰­†¯!-´©ÌÔ—RÒ'Þ]æ×ô‹ÏêÔC?Áœ®ýÜ‘¾;èŸ×ì\»É‹)|ü/bÔ³`#x÷ Pg€ä ˆj¹†Ê*ƒn ÑÏ<¹Ýîä½Íù&—í ]$NM9)+Ø$N¢kŽ™<@ JàìÅŸõr8ûrÀ*piã8my{a1þ¹”=MkeI1¶X£yöǨvˆF³wËåÃüÇÅrù»è™ô8ΑîW굩Æ7¥Aæê;ý€ËlµZÀóR™®@Yp*]]æ'¨ÚoÇ\½e7r–„E/xBµêå.2|Õ˜Œ+‘Š¤Ž|Óm¬ŽÖ<ÊSlpb-ò…;—Arñ}4ôÄêTbòi™`ô·BBä‘Æ2Â6žŠ‚7ˆ-ò>Åê¸Â¢­­af‰5>^ž3£sÿ9ðº&ϧ½Óù*4ÑkWh²ìÌ0 ûƒ‹+L4üòM«]©Ñ˜¹Cˆ·‘=’dË0q‰¹á&s1e‹õÎÅôÌäñ‰àV߃µ7Ô˜`sòè:—l*»Âú”ŽÜΪá”î,à¼êòxgÙX $[&W½ÙÔjJãCI›Ê+¸7ø<ã>¢©@Mûn4WÔ³B‡Xþ­7˜>÷pT[hþBÚZ4þ€ÃÚÜ{¸ýøןo?ÝxüþO¯Ð­®Æ‡!“ÈŸö¬@›®ZÊë( ¬«…þ•‘±ÖÐ5؈~kWX#v ÷a4V 1³›V±ñaþwfL«ñ7ÀWöôâŒÎ§ÕÔ¸¿üûê’× Ï a‰5½p‹;ÝŒñA>=£î¤Á;Ð÷÷¦ÑdLÆS|ÝãÑɈOx¿8úçè?í^ +Cendstream +endobj +1231 0 obj<>/XObject<<>>>>/Annots 700 0 R>>endobj +1232 0 obj<>stream +xWmOÛHþž_1ªZ5•ˆ;!/ýr¢´¨z +„T­í Ùb{S¯MÈ¿¿gv×ؤPU!ÎÎÎË33ÏŒõBá_H³ˆÆSJòÞ(˜Ï©ýUÞáû`DÑx,h2:ÄïhR)iá®?ý‚0(œM!0™Ïøþ¿$zõ¹7sZ°ÚœÂqŒÝCF×½Î#Φ‹ggí#Î`dѹ×>æE‡pÃ`Gœ!(oÜžµ8›‡Á¬s¯}ÄÙb„³ö1§qxLÛ³OËÞðtBaHËc;Ïh™Z´F´Lú±¬¶Rô K£taª`v@Ë‹Ï$Š”ªµ¤/'GÇ—¢HÖ”èTÒm¿ÐMtžË"•é퇀–ÔE¶£­ØQ¥?,öF4ÇAƒýD—¯¬¾M©ãLæ¤ ä ÆTÉaKºTwª¥:ª ë³c|‘\?8 dJ­JóÅ=c^ˆý/åO­Š€†§SCÇ/ö:ÉZÐ_Ö¦"‘$ºfÝ0\­á#¢ÜÔ•,I*˜*á›4ÄÈGyˆAˆŸqS£›·×à{Ñ4˜07k€}SŒ±o6pïñÝI‡QMâNÒ›®ƒÿ˵=,þì蛀nÖ¢zoh[êâî/¹ñvÉñwÒ•ˆÚÈ”b8ܾÿmã^‹UÜ‘ S«J ü— èlE;]“@¶kÃW Åe&ú=3"M!¼MRªMåäDû”Ëj­QŸš’RŠJ6yCM1Ä6s[]g)©"U KTˆ”TEkáòµÕå½Lm®:qR˜Ú—cSGiŽ49_v¦r•Ë—Bs»Aì(C¥¢R­ Ú€­—&__¨ßR¡’rQÔ"ƒ°÷[îà ªskºøRÔ¡m¡lgm:.Ÿ‹{ ð­×‘1¶*8Ilf×ÜõEýJ‚€™<Þc¶)­©myî•ÔµÈcÁÙo3š‚8€& >¿¢ ™*´7•§ÜPøê)÷ku¥2UíÇý~;·‘u-"—–B:|!«Og—×d϶hWåû·ïIl6–§¸\P·}RkÒŠMŸÿàÛoÉs@Í™bĆh,šÀ)ÖP>”U2ôp5dùÀ€®5ÜÜH½Éöò)*åF—•‹³HÀÁ`&7SÇØ æÞÀ¼ãiFÀáÖi?‘ôÅ’<)Z½®S÷g›Â·s@{UÍ1"ÞŽL‚6T¯›£t†=Å%¾q£!…‹9“Üm4‘k؆ríñ +C7< Š +Ý´ãiÊ4˜Ÿ?ß±–â],'Ûè+qÛ™ +ý¥‹ð(Ó¥8²±®Øn/ì†6cÉý—*Ãåú¾ÜOM¿N{(û£s • |¬ï¸g\>¢€G'Æ (Ó´Ð#¤ Ága@—Ü{ΙÐ9&+”Y]´ƒ„Ì1܇K @.ó˜IÑfß°r. ÏTvda%ÒY¦·vÏ–,KžV3TäqöÄ%œÆ¨äœ?ÉG|úáQ»íGÓùíŽû#}¿øzqysA'WW—W–L¾Ã‘{fÞ1U¾ó_6˜a¢ªÒ5’ô«ÑOv^p|ÉÛÄ4Bﲂáé¡/°~‡,’Zm +ûÀèÛq\æ–TS]ȃ=ÿ¶< ˜$›ÉQ4´õĬ×gæ{ÊÄ¥mé¡?°0Õu£Kðè€;g¥îšñáhF[ßç¾mîT¥Îh• ®&wŒõÕnlzòd“éÐ0ïë±|Éæ’olR†§#Zðæ“q„? æø‹%ÿãBIÿªU‰jõ?\Yæª +ŒÝåZ˜^ÙxDN™Ÿë[ÖPX×xy‹Er¿%.ÔU¥bËð,`ý·›æ#§ÝSEsÿ¶‘bÅÛŠÈœWÝ)¸Ñnùb ¯iݦñoñôíî +Þcî3L×h_T‘›Ý~S{Ea]¨ÇßÂIw¹2åo»€•s äý5™Ùß/ä¤W®Ø8½/rn4™óéáï.ðþÉDó \ð,âNêÚí0ßt¦^@˜Ó¿•š ˜çEÅ”8ÃÛêå¼Æòo}ÁÐ-0rËÁTÀ[¯[gUŽ)‡7‚Š^²q¥íšø}þdÉÈ>›î”»g4´#ƒŠA~ø3¦$¥'SLé‚VFa XVtƒÅOo ˆ“&xÿs +úoÖ–l±8Úôt̲±íZ@Š¨:kBb; J²?„°gJ<•Yb³Óë\%¥6zUÙü1¨þeà‹ìV^Ås_d M73¯oOWyk'7ï:ÆmNwtbw.»ÌOŸOh¼ô=›ÏsO4!ºy¾Ót5Õt}tþéˆcþÉ/nÇ:©9µ6í¶¦C¼:æcÌFà˜´ÿRÎÄøÂd6 fS¼Ö³ðì¿:Yöþéýø‚ë(endstream +endobj +1233 0 obj<>/XObject<<>>>>/Annots 705 0 R>>endobj +1234 0 obj<>stream +x¥XÛrÛ8}÷Wô›<[6uµ$çe*{×µ±“‰”Éì_ ’0&.ZÖßÏi€¤(&µ;S—/"ÀîÆéÓ§ùÏŘFøÓbBÓ9%ùÅ(áIûãËß/&ãi4¡Éd(§Ù|‰ßáSF«‹ñÍ2ZÒx9‹f¼:¶Ÿx†h¼˜Esš-ü¾KIÛ‹wë‹áýŒÆcZoÙó|¹ uêh\® %¥N’)I¦ÊÑOëßñ +ÌùW.µKŒÞª]T˜,,5Ö.éh*Ê+먲’Ü^ÒÓšV²|‘%}6™JŽt‹¦¼ +/Þ46 ¶ØW$_eßæa¯’=)ËϯGtíAY§—J'Y•Ê”Êí;Ž6• &æ­umoøfÊgë„SF÷œD´ÞKÀ£,‰óHÉh +€K‹"2¡ˉhÒXʲ®<Ò³<"&ñÝñÀ³Òц—%§““íd^d ’èæ Aƒ+¿¼UlK“û'’øÊJÓ^…ÊŽ$µ‡“àsÖ9(ç$¢qZâ´ë–¥B]QbòÜèH¤y/ï°úÝ›¥µûÁÞˆ|òÁþ©•ÔŽœ¡¤à»ƒaÛøþÆ6(IïÅ—¼‰cï)Ž•ÞöÃj8OOKv°QZ ¡Ì˜gO4,äTi iL†œãIyPVF½hž *ZdÖ ZÁ!ãGªJ™ ÌéÁ^¥©ÔƒæÅɺ‚2[ÃwÃ@$ªÎ,+ˆÎõÂ6Ïk‘Ãež©DÒg‘<Ó”âKFš¹PÆ?ùÐO6{‘Bí"º{u¥H´Âʶu’ ¼p¢E.iøÚCDdä;¨ëíôö“›Ùb.°ãõ¯ú(kÄh.¼N°‹®AòW”!a¬„µ&QÀ늩y_z2 =@~7’d€›…¥ƒÌ²š˜=}^ +c­bUS¡!:3‚“öJ´vÈêõi»Eæn¾8v(j*Žd¶Ý¶4¢üzÂzí83‰\¦ŠjöýoYz›æJ³ª„õB‘Ä‹PY«¢MÀA(URk¶Î»Þ7êÞ©¸÷ÐCÐ +:™šVd>g'®¡öƒöRéOµ+MU4 ì‘™ §`4Ø૯t +`Og'd2¢\Œ(>o^Òû(ˆà¶Ñ£N”qìŒÉl—Ò>+ÇZ:(…Òq\‹ÖyÄè M ç®Ck +ñ%™¤Í±Ç‚ÔTHÿ5–“gÔO_…¼Ax¾× >Ø9ßz°ï¸w1ªŒb6¨2Î,¶½s[¿€/ ¤z¡œÑW x]¥Á{½Ûs_…³1ÍS£áDwc…\${…Ç^½Ð›lHFÏ‘g6§ÿê¥6ãÛ^úØÍ î€ì°”‚²d«ÝNZüþ;Ž³[©/ÒøRúÆ÷M¬¡:[S´T«r:ø«:† äç²Ø•b³AUú~8”.zs5Ï“zŠ¹^DË1þ桲Oæ‹:›M%ø &¼Ž~ËUðÀ ÁWè= +-v²øŒ X ;9âÓ,Ò)’´]ÂNÊ·ZNPu„™ÎÔÎks¸¢}×/ƒvæÛWT˜‚ìÀÏ=¤úaùêíDÓªš¤Ca&c +Žb1ÖÕÅÃ'×%aÒòµÂ¼Á +”|ìo3sCöh¡¾¶¡L£hkœ!ãù¦nt¾•`xn¥äÍf›¹ñ8M§˜ö}ÞnFuÞš±¹^nÛn²º€ýVï0´8úUɃôôÞÿÙø®q¹ÛÚß³šP˜LN}Å—ˆ(Q¡/LfŒx´uÅ›á?£¼UoÌbÃdÊê˯ëOŸ>¶§éà*¶~ßâªÆ×±ëÉ2ßâ×ø?°åi¡£îeV€Ï:”t¯«q…,p×Ã+€Œˆï\è#YS• Jr 7e¨ßB€§>q¼Ä›pAÉXïXœì}¹?Ÿš¤ÊA!ÿ~;uú6@»9`¤Xžš½ùFœÊ•«#´ãfâ¥}gLŠ¡´¬úXwRËRà"ûøÕ‡ŽÂ’Œk ð•×ñº)q5BÀµZ6ZØ­M¢¿ p\©;m¬c“¡®<¬þª6ËMÔ> —µÌìqQ 3yHÅÊÞcD/¯ÓÓVXÈ<ßæ½´Òû»¿T§õÛ)ÍñÛOÝ«·ïÞÒçÒüŽ >t±gw×ã9.õË)]/F·ÿ›(3üGÀb¾ +´˜³…»õÅ/C¯©endstream +endobj +1235 0 obj<>/XObject<<>>>>/Annots 710 0 R>>endobj +1236 0 obj<>stream +xÝX]oÛF}÷¯¸/…œB¢>(Kv_ +'Ž»ÆÆI7RÐˈJ“3,ghÅØÝÿ¾çÎM§(Ú>uD°HÎý8÷Üs/õëÙ”&ø7¥åŒâ%ÅÙ$šàÊñããg³å2šÓ|~‰Ï‚âËøø-§ÕY|1‹.h_D3Ü/æÑ¢ùÆw_¯ÏÆ·sšNi±ƒÅå’Ö©·?¡urþAK2¹½¤­´ŽR%vÚX§rÆä–2SQ*·õn§ôŽÊÊlsYXR–V¢Ø +RÎÊ<‹èSS"4ÕVzk£”Lé”ѯ֟Ï&4šÆˆož³½­q{²Å6%¡SÒü‡3dK™¨ì‰{áhà}R.e> \8ìU²çǪZG´’ÁK¥ØIKF{‹Cv7êøóÖÙ üE‰Ñ™Ï¨0•$¥L!8H>~Ê2n#Z–N >ÁJ褬2M{¹mÎÇTf¢ÎÝæG;Ðæ|ŠŠöpÖL•ÚÍ«¨12[ ¬èZYÑ^æeVçTH·73ëôa;1E©rIÖ¢¶\ e{ãÛ‹¦æç´KíÂÕ– ç”åbÇ ÂÔAå9ÀHò:õ‡;è…ä»@)È¢´¨pghEž›=ˆJ8'P©]ºåo *¦96_ñq¨7ˆ”H ˆïú*Èþ…!ÚŸoz¹¥2—Nú‘¨ŒLµGôÖ³Iä\,¯h[§vªVŠäÔ°ZeºžEò'­¾x6~R:žÑÃȽò‚‰Ü{¹)‚ó +Üq™{E‘/ú¥¼…]W‰$0Ÿ~^àÝ«¤2ÖdŽàÖ-eHïA@¨ +Ý­΂è""€^ ž>Cá«í}²{Ã# íV­¾¹ #ö~ò‰‰Æ§ eã77mG¢"+|„qÔ±S¡ÌBxì^•¬ë )ŸöúÜŒr‘QÀÛc« ýDÈÙÏ”bb‘³ŠŽ=ÑNï2oA”Œ† ª"«L$•˜o~Š *Ù~™0ËM/?£¡>|XóµààÁ÷Ö9ªÊš‹½¥‚„ƒ0ç&9O–fîòmÚ$Ðãcéý#=¶ÞÂrD¯!zá…p¶Tó_Š°·*in`s±IpF²õß.Únïðþ•©¡»c©mÀ2…à?F†âH˜«/œØ÷ýi½ƒ“V|î¬&À£M®Y3.!È¿Ö=Â×%Zš¥ÄɲÙ}2Ó­0Ü ?q©‡’@…èç96×(ž_ › ÝûžŠ§žxÉ{óƒòÅ3}7ÏAÁ±À¯v-Àl©sT[‘* SASÂFuä`vĹ/º_a{ÞüÔUõ+ëo FËeDƒ}æEw«øü‘¾NÝâŠgšŸU'ï u+ }¶ÐÚ¯éLñkì γ‡=¶2Ì8‡]óë© L¯œÀ<! Ç“ÌâÏ7˜‰•ÉéG¡eŽï-Eù¡êQauÃÅë4e{~¨­0Í“°©ý~Z~Tç*yàö|øç é±?;Qßx[l¨YÐŽI>Kþ/z$ÀýºØ3ÚºBð{¿ó`«‡ŽüA¿/G9;Åœ*±XÿM‡z}âŒûD~QX—¡Û¡xõ/Šç߬~Y­ßÞüðaýÍf³z‚&ñl³Ñan¾¾ 'Ú}å,;¾Ö]Å §A˜WÞä@æØ z>±,+»Ùô,…¤Ù^KìëØÓEõD7ïÞ Âhãó,Uá>·4ê(o³lð6È^‰(] 5|¯Å3u…7o)mý|Ë /ÎGÁí´ØA}_‡ýßkK§»ÙJÛ +]ÌûfiÚÜï?ü|Ç~‡M>æ¿G«7 ý?5x·&¹ËGñ,Z.—Obü¶ãß°´ò^6;/£Ë«˜â%ÿJ„gV×÷¯¯ñ:k>³ÄÞ˜¤.0ü[²'Öt±Œ&—1–“+~þï§_üªsÇ/Ò~ɘ/çÑrq^W–K¶ðv}ö¯³ÿg’ß?endstream +endobj +1237 0 obj<>/XObject<<>>>>/Annots 727 0 R>>endobj +1238 0 obj<>stream +x­XÛrÛF}×WtR’S"x/òË–.‘£ªÈvLf]®å> €!10Ã`Q܇ýöœî(Š²½©µKU’€™éËéîÓ=øó¨O=üôi2 á˜’â¨õðf÷ëÛ£þ¸h4žD*h0Gýæ)§ÙÑdõhÔ?‹ÎxqrÆ‹òÄ‹ýÞ$šÐÙtŠ=¼Ú‹†Í¯ú=ì>Ù)V‡½1ï•'9;>‡Ú3(ó*Ô¶Or¶7â糩èžOX’<Éêt c‡ç£pv܃†ð$«ƒ1N Gc±j8’UyâÕËùQ÷æŒú}š/“ñtBóT éÑ<9yë6”¸õ–ªLÓÒäÚÓ²t…<¾ÓL—º$céÇÙ§Ùüç»ïÞÍ\,f[_éb8X,¬® +g‹Ÿ¢Ÿ¨r¯æõ¨ÓÂàyzòw9+Ê>ºòÞWª2xV6%¯+Zë²0Þã•'åiëjJµ.”¨õºtëÒ¨ +¸’·•äM¥#ú„“çdµNI¥…±ÆW%´¢«ÏäŒ"öÕØU‹Nƒ„,;{¹®!Žä›”é|½¬súýïðÉà€eI¹±÷þ5‹Dî´AùÅÁw·¤™*b%q§¬ªÖ¯»]Ïo"W®"ú¨)Sˆ¹¢Â”%aµ’L¡X^÷&iJ¤ÓïG½á,‚x/£…õ¶„šå]†Ã‹°aÜ8¡ký s·.éçgO_Róû6é‚ÍÁ$ÓÄë\’ÆÈì8×ED·KòˆÜC±=£¸ŠT%!OƒºxÈ‘6(i* ÃKwÛ‚ýŠÇ-Þ3 ,‘ ³ÄUÝé²äó¦¨sdçãåõÅxÎøC‹›àl6›Èß›õz!E»ˆmýØõEÜìÊEYUäßnëE^e®^eZg •Y–©hxJÕ–©EÑûë«Sº†Í)]*k–ǽÖk5HÀ.Žé^Ö(iœ‡Ät±qžI3žŽtZGªÉH+ÇÉÎ,…bÉ@·´Õß!&wÆ'¡<¸H¯nof ª§ú=¬‡nb–¾’óÿM|ðåµ+J\ÜùݚǼÍ3€%q?J\Ñýo~Ÿä][¥øÿÛ´ÞÌ߇g]ž‚fw—ä×:ñ¯i)eßQa’Òy·„ ÐÙDÙMËU—Ñù[Vt†ƒh2™PÿlºÙb0ž4tÐVû$šöÑî&ÜÖA¿ .@‘·´B÷b{¢z…cÏçÿñœNmuZç²Udë"†ƒ;n+5WXJÏDEôœìZìwœwJIn’{fa&<í¥÷Y¸¡C&Yp¬Ý +Žv¤6«×kW¾ ´ÿ}NXù³–?Çàä°ÙÞ ÂÖ0YÚ¿H`üàj`ÍùÛ7(§=×…QX]§²+¦ý.Ýr¡{<+µH~B”/Û^êì1ff‡'½*vu4vX#Ô'%LZ9×CÀÚÐd¢õhïÁ,ÃYéY,JÒ:×Êã],ä!:žšãª6)o´`šýï"ߨ­‡{…–tùRxpym+®pÊâA{H2ëà±ç5Ü¢1bNàÐìqܪV¥â³l:ZRZ'œŸkUV&íc®Ðªª9i«çï+S` »°˜/ñ_ã+>ŽYZ!¾þ˜µíç$ÛÃ2wáJý…>ЖÌWzÖð<ÔeƒQÛZ7Ü)á&O–\^R4)6­ö¬˜}S(&¼ò2ôJÛÀŒhñê§Ú‚ÂÔéÑwò”ÁŠUœo%ÊU$²~˜p“Ú0@*Íle—2¤2”œÒÒrëpIø¯Uù¿!œÁ_.!–›ùP±ßÞ-fÜ452”4éß`‡y$$¸‹+J+”æƒQtõÏÙn”á4Oy<ß0ÅpEäpìЩ$ÓÉ=dŒGõwhŠó9Ž(êm–/mYƒåxüãŸ4zyŠ±™oKüµ+0§³\-̵í/”ž"xx{öX£¡6Ú¢BËA9WaçÑœ~@§ÜQ 6¤mâRHoÁÓâ¤A2Á ç¡AL\£t—Ž³ÇüÓ?Œfy‹Wß!Ê!’|ùÙ‘&²fYméøö¸àV’¹Ü`dòÇðùïŸ"Ê•£ÀD§oÏlûÌçü6+¬…°²~ƒ&÷¼§ñ©oRà<xa_ÜøÆ\Ž±+Éø¾ÁY),$×f6¦~üå¼ð ;)ÿ ×KmÁ™&“I8ð©=ƒ²•tdÔ rBCÒIfM¢òˆîÈp­2„—àʶ„FàëØ'¥‰™k1b'2„#$V³©Õ¶œ zP `bÜàÞ-+mYÃ>õz\¦X¸Ì¾,é©k±*º\ðP£!8ØëªBS­r¼å{'RLàº<I~ Z6ª …nezDu~!ƒG|ìøúUl,£×'°J¸ ›äuúâZ&ÝJålËÓ‘T<æqùî±) éÜÃR×Öø&%Ÿ"8-pC«‘:ø;èEô>tìÏe„ׂ•FW1c1RO[¹Œ@ÖŠãÎQBATúŒ·”Gܦ8L!jþ ˜¼¸¬µ“Ꙍ½IuÚŒpýá4šži0•³‹»Ë z_º?˜j®›{©ÜÔ%'úø@Ö›©3é3þ¹»„k¸ÌµÌS2æÊ(Ëß¹&ãi¸5O¦,áçùÑoGí„óXendstream +endobj +1239 0 obj<>/XObject<<>>>>/Annots 732 0 R>>endobj +1240 0 obj<>stream +xX]sÛÈ|ׯ˜‡TENQI‰_wWII¶ì¨*’‘w¾½,±€…w¤ùïÓ³» !Ä©ŠÏ¾‰ý˜ééîèÛÙ„ÆøoB‹)]Í)­ÎÆÉßœþ÷üél>N–4[Ž“kªh2›>•´>›^]'W4›/’)žNgód?ñSœC³É;®— ü<Å?#)?»Ýœ]~¼¦É„69ß=_.h“ù{Ç´IÏ_Ο´µj[_ÞÑ}NGÝR!ö’¥ºjJé$ÕÒUº&gD*éåœr£+r…$ÝÈZÕ;Ò¹ÿبF’ÓþgiŒ6ôòîÝæëÙŘ.&Wˆ{“óù©¨ÉÊ:ó ÿ–¼¿y¢\•¸ÒÒA–eÂ{.?¦1è‹É$_]QwÂËt6¦°¤Ë+®¸˜Î.y*¥°¥Põ+n32oËòH[™k€"œ)íc¦Ó¶’µã°•¬„*z¯k«2i¨ÖñBNÖÈRîEíøê^B0Î’ªcÞ[;<*i­ØÉ„6ØnEµÄçó¥²ØµV¸—Šv”Ûj‹+e#5€!¸!zˆãH¢,Q™ù5þ6 jÈVÛ$ÕuŽ`8`eb¦”)#S§Íñ?G¶ƒ­‡ì¼z¬æ º¸Z%s†öŸú€¸èžvÒ!ÖPø7YÅKºÚªîüÔòÑÖ¢bL+½G&žQâ'"F\ (©)™„Ì¢C,ô±Ô¤œ§N¯8Ÿ<À…sÍ/——óÄ×!Ñf7¢´Té+Ù! ¢XG•òÔŸõiUÀn9§uÛ4Úx:üPØ9Xäyý¿öõµ°ö”¯„o@ —už'ôd”¦…t$ÒH^ÓC7’>Óõ_5š3 ü³&ˆìÕ3ZCþ£¨±¾¶XãŸä0Š¼[*ÞØ)Qd³°„¶.ùW\mtÊrPûAF«Q¸ƒ8&I ¡'nXÖ„VÓ Û—)¨R_ÑF•ƒ<Ëd²‚€DK&à  j–¨3º$(š¾¨:ÓK«ï—wo‘›N“éx‚SVðo@¬Å\—¥>0 ÂP`tãp¬¥ªM‹N¿Ú¨ªEI>?ÜÜ?&î» FÕ¹WºµðU§e›!σrùŠIøÐ;²B©Â‘ÊÒ•1ý ›§sÏFôkȤS"×È”·ÞeŠcÑï–Sðw¾Íú|DÛ#=«´&ãGoX‡/郼8Áƒ2xn n0óXÐA›×ÑmCÉï"uHú¤FvØ÷i*˸¡WðÚTƒùe*d é"qOÁqõ¤šœFm['¶Ü +ZÜQ;• +_žLàk¶tìÖjàÀ’ñ˜³‰sÄ#Ï´E¤¥FåH¤ž‰Þcc` Ý”Vþëò䶠ò š;Ä°3ð}܇ƒZ+ ìÞûÞ‘lë—‡öÒ‹ ì˜N8¯Ã¡Ôؽ—fpûËùã&>ñö¡‘;ìüh¨'šüXdƒõHeGÜ63-Œ#î{.0‚6Ÿ¨Ö‡—wO6 ¬nÙØØB°BG×àfë_àXîˆßÁ:ªàë&?zNÑgûM·Ñº-Á Ó ›å‰8=¬X~ª†Ž¡ üœÐã€B”·µW©(•óí.„ÈñCQüÍkÊļ‘M‰º ”`Çíóç/ëûÇO¬ë„îÅÈQðZ£Ü£@ÔŽÉž¹Ú¡û"ã +®'ÔÌbiCQ†hß[Û¢8Ëc¹ˆ—ò"ìì4SéL–^hCÚZ¶ÄÉUîŒ*‰Å àÊ3÷ÙúcÁŒîà`jTã˜0ƒyÌV̓¼.ú°>)ìáÊë{OWF›í©7p ó[Ó.ÑI#gšcÂòÎð&pGÉ/;³­GK–oG©ƒ²¢>/XObject<<>>>>>>endobj +1242 0 obj<>stream +x•XioãÈýî_Qñ"ˆ°i]Ö |îXÛ“‘f'ô¥E6Í“l-›þ}^U³)™v2»3°!ñ¨ó½WÕþý¨O=üïÓd@Ã1ÅÅQ/êÑŰߣé¿ø©4¥rc6‰†ÝëW‹£ó»õû´HÙÆx:¡EB°ÓëÑ">YdšâÜ貦:Ó%%V;Rô¨ë//®VŸ®~µÏ¶„—ß7ÚÕ§´ÍLœák]ý ã5*U¡É¦òyƒWþæ(ç·>,¾õè¬?Œðzââʬ눯ž!¢py_•³Á8ñ“Ý°b[–:®áÍŠÄçÃr™BþªLÈiUÅJm…g ÒÀU“’© _R»ÁW¾«’V¨ä´ ž ‰ùgõwojÐj'~}©"ºLkí½œ\§Ä¸6Ò´²Å;±¾É~ôãì.“¦+ÜŸu}_¦6´$Ôw¾é +ñðßñß4$³è‘”«éáÛÜñd¯ûRJ!וMM®]DsSÆZ VÚ­méð¥mÆ{a ”J[JR+SR±‰³ŽÓ¢{Œ w‚ ®%Ž/¦œý»Aª£‡Ïó’t&ÑÃÁIŽ‰©[íÚRT]ìK=œEã?´7q½‡µ6ü&dàÃ1ìêMU:²›º‹³Ý ÝZÇ&õÐzÇ÷\:&übì®UEt„ëïªXçú”–øç[¿\¦•N–˨ ã>åzŸPKÕ–©#¼¶Z@tò¦~ã×ï]¼IíTªˆ6ýÖÝøsk_<ůŸïîŽ>>ýê)¸¶¹‰ óxèžÕ|Ô?mt€iï•áDƒ"M|¢çw3êCRÓF3׶LÍó¦Rµ0Þ—®®61vgáÜÚê…DG¿—_´aÀê+êV0#“¦ºÒL¬^Ô`Eo®%@E}b·Žfß½œ‚˜Lq&ÔAÈ°ÎT; ð­„~TÎ!”„`¾Ú­%V<Ê„d-IaÖÿt#í?¿‹›áq6‰¦<ÿr0žˆdïs“›­Ðï?¸mY›Xñ¾¶Îiç¨PqfJпڸšTC¡k÷§¼ž ¦Q¶Ïc£ÒÐÐBÑ\+_Í­ÉsR¹³ðOL«}„¯JÛx¿hr ¢AÇÒú†yP™zG……ö0% åx¬*tJW– õÆQo|Ñô‡ÿPª·ècÁL“©V¨Ñ2tŒ' ”Õ@VÖäX¶zÈ-Oˆ$GÊÅŠñ¢J‰^©à`tønœÛÈxÞfü¯òÁ0ðƒÑ¾°·)Ý”MŠtc¥À{]Ù<Ç›À¬;¬Ô-vY +<– @°¾Èîqòy~ûé5N$²e¾{mµÙ1¤m¨0*A\g¥‰U+Î1ýÝÖÕü—ËO·_Ò0¾vPœJ`{kàæéáòþ±k»Ýõtûé·7iylãBÍ‘äW:}S•ñÚù˜?\Éð£ÛTÞÖA€È‚Ñ,D—q½a¬u0è[Š‚ê8<`‘ù–´(QÌW]÷´(8lAò¨o³r§D ¬E) Ê­x®,€ ³%Ùµf,Ÿ=«n®#ú’A[…BD¡[ˆÞ˜úf…Û¯§:>•ƒ{y¢dÛBú§žfâÍH|à²j¢àÄ——0D×pôµ¦tƒ+,ÑËa0²º®Ÿ­ÅΘhÅ:Ñ0©]f7y‚&ºX19¡¶R8µÔ±ÒÏð)w4yìüÔ_ñ,¸ºšËvÌP7"‡Ó äÈxÇ”53(“_5Er3½ùQ©p3®ú¼Ÿ7Æeí4Á+â6ÃEl=\ù]B åéŠ%ÙÑÖø%o/üšÛñÑßÀLã$ õÑni¥bQ~¥U `I:¸·„b#}¨¢¨ªH +W¹¤ã–Eÿ–Ë`o´½“YfiT4øð\»h5ës­$@ÎZ½ý¦r“p™y[a#|ààßœ|œ¬%ÝñË,¤”'‹CÛû F¸ +e³,OøÛñ: hÒñò½”<îe)V+ì>©^éøõ}à¬#šÍþÎ_µ)0þ¤¥>ŠPø‚Ü=ˆ;uXOh™Dž]§Ò Ð¿x·špŒý´ÂQ©ÆiÔÅŸO‰å‹ÕòDN–*ç…m'óîN©2ÏYýÏå~© ¸«@‹‡CÌ­ì÷ XÍÔh‰´08Å¡/Ñ©)à€G®ß'¸ãîö:ÁÊÉâ…kæ´ßExÝoDDå[µ;À¨£e +Õh2HÕj®­YMöi³› a7¹~µ¾ÞK纙†p²ªàZ|fœlÎwœÉùݸ»÷L£‘ß{Ÿ·ñ…¿&œ´–Ú…۬׶H/¸†vãøÆŸM.ÓÆ]›õt: ñ¸MƲgÍ/®.9º¯`!ÝØxÛ’LMétŒ?L‡t6éÍxµú¹¿ÝÉG“Mý6;í±ÅÛÅÑ¿Žþ ’aœ endstream +endobj +1243 0 obj<>/XObject<<>>>>>>endobj +1244 0 obj<>stream +x­WïoÛ6ýž¿âV h +ت­8²]`šnÝtY׺؆º(h‰²¹H¢+RUóßï)ú‡ÜuÁ°Mlét|w÷îÝéÓÙ˜FøÓ4¦Ë„Òòlèj:ŠšÌ¦øã-)ÇÙŒö¿ê5¾Œh2ŸFWéø2šÛÜFáWg{9gƒ¹“i4{ Ûq’ìlÿm2ߘwXÀé°ãhÞÇz½8{úrBã1-rd-™Mi‘¹8G´H/®e®á1S&mŒQÕš6º%«)ÕU®Ö îÕZ”|c[ë\Ò HYR†#ó¦`[#¥{ìwUÍÿ Qe„O· J %+kž,þ:Ñ©Žqö…*·…,qƒìF”I +‹sLÔÙÅI4a;ï­ó3àVЭ´ïŒ¬’ö¦Ê5’ñ©‘ž4;ƒQýYÖüm-{Y?6;ìTèTX¥«ˆ~Ö­„ñ€ì!˜­®-ÓÒP¥-mÄgN„. é #·¢Vž:¦\É"®Š{‡©C°Ñ%ðmD-#Zl¾RŠÊÀBØÞé>îmÂÓØZ¥VfÛJr9Tuâ>SµL­®ï¿’Ê}9Rùöù/¯ôZWôæõ‹Ëµ•n˜V(@,Euï£âÒWiÑd|þA\Èœ™^$\’pÒù!ÞÞI2È4Û­®­Kt°bºe*ÏeÍ´áô¨æ~úr¾ãù0žíX”éÖâÑQÚ€¡6Æ0Ðn>wŽX̱»Þ¯ ½Åä1e*qd¦\EÜ1¸æy—ë¢Ð-çiyÁxåÁ´_>yæÑœrM.cÆWÑ Aú•c+솾§%þ…8fï¿2‘vßØ|¹<·\–hæî ¾xä0œ6u§â´ +”É\4…Ϫebê­‹ +Ÿøüó[ï¹ó: J”Ôæ{F”+á{n¹džó½*.­tv·ç칩?«´ßl8'­!à¶h¬.QT8aåûç=wŽál»§#ºÉé^7®/§X`"qè~N73/dnàÌ?–±{-Åt¶®1Éleª@æ,”ú «,’bUHǵ8ŽâÑ•ƒæûʽ/îÒ‚âD4ëyBCj¡‰¬,­BÃñ1&x(Ñb¸À$vÜ —Š +ݦ\ßÁ„ª:Šy}ë¡ße†ÉÀWÒ¶RVè¹5×çÿ؈“@·¿.8èÚKÿJ²Hº>ÖxbòD<}BS w1ÏCÌ!¨þi.<Ö…îkäÐŒ+É#Ÿ|®þ#à©A-+ëˆÞºZo s‹o®¾ Ã3@XzTɾ¤ÂçSiu}gZY7¯”ÅÐzÄÌBøVÿ ]‚b\ß#ƒÜê̺=ê=hÝ©okù9¤©| äã†ÂèrƒãDÙÃ0½n,µBÙï¸Ù˜ŒxVÜ9Ö3£àg×4§òô QC—Õ{ec^c›<ïAÖ¹Ÿ§¼u£µ)ø&¹HœËÛÆnGâ-Í«O[·-¸{”ßï +­Ñ#…‚>"‹½³÷:é&„+²“ÝÃ~ùæH>Z&Bó™Îa8J¹ƒWÓ·ÑÉúɃ¼wæì8 ‡H]’ü…^ ,ƒâI}¹ŸåÿK3ð^Œ”¯Ž~îž%÷ƒÛ¯,ñ(š&sL Y4K®ØÁ8¼¯¦™ÞA[.i`%u´t[-+æPuœ ‹ÔQ¬@Å®Š³n±O&x¥Š)IðwŽwŠì;äõsz]ë¿0«è6¼Ûïv¬á¯E£Ù% §#¬<ÙÅQµé¦ÂfÛ¸=Ê<£·]™š-½éÞ:ÞAÙ»{õà L¦Ž×:v6ó¥g¿ý  0xSendstream +endobj +1245 0 obj<>/XObject<<>>>>>>endobj +1246 0 obj<>stream +xXýoÛ8ý=ÅÀ¿8l7IóY`qHÓ.¶Ø&Í]ÝÛ[¬‹‚–h›DjIª‰ýãïÍP”½jwq8E?$rfÞ¼yó”ߎ鿎éâ„^œSQ¼š<ÿñŠŽi¾Â“óË š—t4;::¢yqø‹±¥{ tõº÷ne*Mtl›gó/8wÚŸ›žœÏNqò𗶤¨ ÚÓÊø©rë@Æ’³´»mBq£ñîãWg¯¯çd^«¨Ë ©@ÊãW•Ú}ˆÊGºÕ¶M8öM_ÌN8âèµÑ5£ ãÚ«:ŒHÙ’Fw:nœ+G3šotÐT¯‹è¼Ñ¸/ ã©p6j=šª¢¥¦Zûµ.ñϸ‘4+W¨jõ+Ò2Î +¸/£Àâåbñ˜ðZ,š„VX,¸>«jÍ„vôï-¢1,Æà Œ]KœÚ.dÈWÞÕ¤U±™Ñ¯®—D­FØè?9ýÛºrKU}"×DÉlÔxí¿j*Þù¶:0Haã€å÷&Ôäí m0ÑàðƒàÖ¤áøµ26â7¢4&ªŠ*#7 ÿ%¡ŠØâÊnÉ­$×ÜßY"“ÝÚÑBHÂ=B ´ -bê0ªãÀU¬´×¶ÐaFoW´u-úÐ7GÚ®œ/4ØtäÈ{/O€³4E(0¨°g¤„NûÙíõx Ö”…à\MÞDÜ_ zàˆqó!)ÖÅ{+Y÷pØŠ±zBkœstƒ½«è^Y]Ñø3„GçËDÔ +W®øˆÂó,"¨ZÎ0‘ütPƒäÁ5P¾DK¾âV@ઙn{PÌpçÿþç -ÛH¥£ÏÖÅÏ µ{”˜…«›=åD½^:¥À)T#OáñŒ8üÏÿ_3Æ%? ú›ÊÈ8O·¦ð.¸U¤îq ?8ÒtOPÀŽ ¿sk9¤|7§×Ži:!°P#´—¸Q Ô{ojå·„38‚&Žw pý6ܺC0É +nˆ#ÿ?A˜Y’ œžœÑôìdvÉâöÑò”íh3ÙµžõÚl+§J´Xƒ›þ§Zú¡Ø(Œò7¡³ƒòö +§;ÖT=îcíDä,o22ֶ›&ö":L “éóX•|žúL¡n|ÿ2Sg¤MßM'Kø‘ð?z@ú2<úÉ„˜”a©•Ç…ð '{5rò=T‹+m4/õ=|1]<.=—†”1ˆ ¬eJÓûƒÐñ¤*ìÖ¦ÁbꉋgY©@ŽÁiñºè@6í=º-8Iú¸¥† ­Hûª­ª-}U•)“;aD3¯z)OeÞ:µ,"I|<ÇËýµÖok`³ZjœÔc)p+È×òN yŒsA;åûG·hŒ=?þË +÷ò.’ÊBÝá‡Úùw†§LŽj"`‡·UɾH-a× §ú‰—H¬7O`%`— ×–B£ ³2¨´cä(5¯Qq3°T`[ÍŠ—m§Óû^ïï,áý÷}`ö$#-îç.4 –)ÛϬ*v6*1#x» ëcòm#¡G¶ÁüP:RÆvE‹Ã®Ÿœ€G(R9Ä §jlYUNE¥x K/§‹gâÍvÊ"ÒJÕÀƒ´×Àwþ.VlÊ^Œe¼Ã3¥>hšT+X*È^­ïôÞ˜öŒé&ä™î÷«kêAûž§Î@îYb«5$9×Á£¼+dg’Ùá [ø6©´´ša–bòEÏŦ…=œ»fî e·ï’§Ä"\ÃFjï¼m¿m¯ÎðuÆŽÙ‘(ÎIóßZÈ”…7 rÝ@ª0L; ÓŽâ·™8^×æ²CF¯T€ŽBˆúýÕ b³ŒwzÍj¶&ÍûoB qñ a>Zó”¾ÃíkÒG 'ý‡‹ß˜†¼Yol‡P—Ñ ònÒ3&ùÀ>¤×$\ ©»¯@v©2<]<ЖQ( hØÐç邬'ä:ÕÂ+(O U°Ä–>6ÎfC¾SůK\fÉê§þsUz¿í7YÄ !bÞ -Åî^³ž Ü’Oúâeë7’€ûŸ{ë{ïh+k,ðÝÞ/Â8±é:à;+¹ößøJ/÷Ìw®Ï·I¼Æv1q¦Ÿ„Küuœ”ªrìú˜íËO?¿ùõó»÷7×ï>ß^ßüôöîÍbÑ­ŒÅâ¦õølŠÿNß¾‹Å}úÈ}‡À×p>ùžÎÌ>ÿñ²ûÁñéÉìèòŸÍÎ9é×·¯®ÙÎ~áO›×®hkÜ­øÛ5]v~!¦GWüþ³+³n½¼Aoa†|[È—îKþ™DÂ4ô¯î ç#‘.A1¹§§³‹óË„Øå Çx3?øçÁ8¾°£endstream +endobj +1247 0 obj<>/XObject<<>>>>>>endobj +1248 0 obj<>stream +xXaoÛ6ýž_A–¶â؉gŸÒeÝ4AÖx†º(h‰¶XK¢JRvýï÷î(Ù²Òk‘6u$ÞÝ{ïÞûýìR ñûRLGb<q~6Œ†b<›áÏ«›)þáË*±:{??»øp%./Å|EÏNn¦bžU"6…Ç+Žžð©vb£öbqžéÊö±TïæßÎC1¸G#Ä>o‹¢™[,Êp*¾£@…ÌÕâ]ŸN.D¢2UG¡C[ñ9;ŠnÕ÷J[•p–BœÑ$º¢8Ÿÿø¡='iÕZ;”%T¢½±_øÉ‹“–Vn¯wŸžžþ¤“Ž°‹Ê"*䤋õOjÇ‘JŒó÷"C8d¥ ~®ùâœQP]ˆZYü„¤ÛÐٹЄ;àIåV¿½Ðyi¬—…¥™rÂ!#äb8mQ‚ÛxS +¬‹²†œ„'œ—Ö‹\UÔ&á”êv¹§ærCI±”ñ¦*)CÊ‹IRR°ÈJ%*Y¼ë²8'Q±B¹Bb]­VÀ™´*7Û†ŽÌÄ2ƒö¬’ÉÀ_ª“Br{°‘säÅ» •û»yÍŽ¶djEÙì ‰ zSü¨WÙë‹^¡|jLBßÁë¡ìDôpÞÚÊÜõ Ú,QÖq…tätb ÊŸ f£ ]§¤EóQRDê_ˆž_?ŠR:·36ÄhOªm¤ÖRÎIH¤n'íñaÉùÕ1x£‚̬.ë +Ès£ŠÙµˆ3N?}ûúíÛqªbÖfÇ”h-a!àÉ)%zˆeÒ'=Rflõb•K³e# [>@8DÄé²Æ?y¼{ +h´që‹Ÿ²1ŽC5Mí“PÐ`t-ãY4!ˆ `°¯2ùJ¹>àŽ!3üÛÉ|)AM¢–ÕÊÀ—ÚâÉ`}~§ ¿1 ár!¡œ ê<[h ¢`QVÆŒ餣FWA¤»¸Lªœ»bËM©*˜³a¥P—)kéxE”ÖrDB~¬"Ž•ã4aúOsd·äô[­óøÈ ô¯52'Õô¹cÈ„ùƒû§;œÃ¸¶íQnàN'c¨`Äü ³Ã(¡ïKH¹Š£¨[ g€¡šC€P:Ih—Jvùp‰†KXU JAþ¯³{`dle)òüœðŇÙq$ŒnB+¾Ö€Ð¯ÆnÐß^£Ü«hHS¢…ó+a(¹kk(“ã5øüç'2ô È(ô uø‰ %s˜AÍC§^2%N,ŸKø©Ù WªX¯4Àó©5Õ:e39é¹RBs³–¢Ñ64šF7cÖŸ³Mœ‰Ë¡¬Ö³)æ \t ´áãå~ƨ_à÷à ˆi±HM®ŽC>p–h£»i&ù@ +ä¶êT´T±ŒÉ {P<ë6—ºðø +ŽŒÑT`$/ȃXþÌ¡¿—2ù©F%ZøZÿ^f/&-b!)ˆ£¥ +mKPG#HtìœÏýó¶Ø_>Ö™>T‰ +ƒPeDÇÑ~Ó©²¦V¬¬ÉßfV•Á[^ œ£©©j +žøŒ¸—[8•\¢ŸÈ Ǧžë•ë¶qßÄê­ê‘¸ð®KM•%¤ jTÛKo{œq Ot”…}‚Þ®Ûñð.âñúb¾UE`æÐ…Ú5¡‰¥Þ±‚Æ6šU†…ô0 х輦_‹×W”î ÄÐ,x>U|C¦®›6’ +ÑëÇAÙ)“ÐÍœiº/(1…ï_`\X{N aˆ\"F1$ͬ!%Œž +>ÊzÙYe¶T6׎Þ#h÷ÌúªÊ²Nø:_ Ãã’fé(lG?;M ÎÛ–]qëÔ݆܄R¨W2:¡û€(w¦J¿©D +í´¡ª\¦ãžjݘm 9ÑâDs½ôÉá *”«r¨fYx:á‰E¯h‡&W þ.¢†Ä +£ ¥.-îŠÅþǼÄæúHú»Ùu_$fLp$\@¶htÐW¦ûNxé±/–¬þE'ño9GH¶} “`ÆbƒE¼€Ô~kx>ý8´vkj<„ÚÐ~  OS/äáDN·z‘$h +lf‘xð‡zwe™ézÜK/Ãj¨W±¸WÙNͽûp/ öé¸Î¾ð]àwz…{„uödo§²a^ß7€oèÃÖ(kÚ»Y¶p‹ä V–%ö]^FÈwÂ…ÜYÞ-,¨ L”•-áá1®,½‡«bï+š8ü‹¥‡Æ"¹ ù.¿ãîjM&že¡2¶)÷È:ì÷ xˆ†6¶zKª—WÐòWÇ[n‘[؃‹È’ +‘`½"ƒÀnEÙÄéã>s˜àuå?Í’÷$Þšø@fÕ ~ju@)¬r­íÅÕÿ¢íÙW¾ˆ™¼]ÂÅ£gÉ7[(šÑ½øpS¯J—ü‡ÃÍXL¦ãh2¹¦…ùåîñý]Ø¿Q]÷&F¯cZ“çP~ƒæ•Át8£çAÄJ¯+\é¡À]½â™ánÅK½h¬Oõ"ú fœ~¸J^M¯¢éäÿ%‚ÃnÆãùÙßgÿ€ô¥"endstream +endobj +1249 0 obj<>/XObject<<>>>>>>endobj +1250 0 obj<>stream +x}WkoÛ8üž_±0pw-+¶ãWôCÚ´@€ÆÉ%.ŠÃùг–HU¤âøßß,))Šúh µ(îîÌììúûÑø;¤ÙˆN§gGƒh@“Á0šÑx>Ãï#ü’6þÁx4ˆ&?{0L£Óîƒ÷Ë£“Oci¹¡Ñ( †4O¢ÉtNË„i0 eüæßt§4ˆòñlF}R¤S±$·ŽKújŠuÂ)£ÉÉ4µ”U•#e)1{‘(ýH‚òÂlTŠ” “‘x»üv4 þð4!蛚=¥Jï"Úo¥ÛÊQpþ‰Ø•"Mø@R,¬<&S´NIÀ€cÖ xlôF=–EÈIY[â´°tŽö[K½ÓÈï8T“‰´Ýš‚Þ=„ô)‘Ï×hYP&œãŒ ­e§°BZ“>É俨z0šFc®8 ;jоŠl-(QÒ:TSàõÜèDê˜ËF¼ÒâÔÆ”:Aa:ÁñhùÊ‹L&ÇUÕ¯Lª?:‹æ§Þ/¾* wñ{ïEË ¾¸ú¼î³%¼Ä·)7 +óB­39A4ds«ÍÁ”F.ÂmQ.ܦj‡š€5×–š8˜ +ázì_uæ “èQ¼ØPlÊ4©#…ÛùÂQ…t˜h¸¨x%0oty…¿¿~_õƒ÷´Ô°­²,‘/žuÂ"Gîe[æ¹)ÀöO¤é9|™A›sºßŠ‚A¹ žmA§ÛK©éëÙÄ»@ÇýÇÑ 0y=Vú£YÍØ­q,q¯mÈ ìsÉ)ím.v좲À`έi_Sê;f ¦vÏ+”ÍfÜ 4ôÚ<–h·5´¼O’§%2•H¹†t§b–——ËÕ[Žð"®&UЉ7¢Lx/^2+üùcŸ/÷K{OÁÈr´º¡¸¨Œ&è☥Þ!¨Ç—y?é®V+–™Œn/ï{¤6m¢TVa“ ˜ÿÍ =ï:þŲø ¢Ðup¬®vƒ5j ȸOB{9nù,²<l¿ ¼ZUÂîy„*a´æî/púM-Í•øé4òövÆ]Ê˲-áÓ°ýªÜÚ®Œ€OÓ^hOŽ…Âl’î(]K]Ò ]J»c`Ûf½ûžþ9.½ï:(ÿšÝ¦ž½^±¼˜· V¡_“Bì×"ÞÙs,^ALpj²[tsÌÓÄðÎ¥¥‹ä³ìýo%P#,ÂPQê0ëYFñùjµWZ;ð`q¦ÚÈ4 +MÕüŸ‘6ë'eJ œ±4€Ëg…-…m«S;ÜùlÒ7ç·ÆºæÒj8©Xñêë¶ÒQ™‡'vé¡ûfçËöº°ùiÂëOk¸ðôtXEQ¡§µRb'¹¦0/”f´4Ý_-fÍÐÄuÐ +ëů˜~© †Õ.¥½ëbD´†é1[ýZ¬ƒHÓIÇËÌ©Lž°%b É0RTð0¿é¡"¿p7sŒhé7µ¼òÑPuk‹!¿Or¬öªÁÐlTÖ8b¸7ìê±ÉUhz>ÃÓ.m/E͸zA/È©rlŸ®|­¡=Z¦[c˜ÁŽ#-êBh» €r_vETÞy™ÿÖ0ã/*OŸNê‘rys}qµxøp³XÞÝ|浒Ωµ\šL ¹œœIéÏ*+|Yòø=ïÚüÙɧÆÖY4‹Æ­±V1w7õ̺®ÆTxs^ ¼áxÍç#šÎ&ÑôÌï(÷×ï/x„~CAtiâ’÷.¿Eð»ýá_äæ§ÔŸ Îx¦!ÏÖ——+m]QÆ~a=§{édtÈÿêm·{Ýó…ãÙ8šá;¾¼%oæcþèãòèï£ÿRï¨Ûendstream +endobj +1251 0 obj<>/XObject<<>>>>>>endobj +1252 0 obj<>stream +xW]oÛF|÷¯X¢#ÉŽìæ¡€c'­ÛÚN-F½œÈ£y ÉcîŽVØ_ßÙ;Š¦ übñãvwvfvùõhAsü-ètIÇ+JÊ£wñÑë'´XPœÑr-ç Z½‰Þ¬Î(NiÍçsŠ“Iœ+K¢®e•ªo´–´QªEÑ’h\®LiÛÒï:¯è7Š¥©­3‚tF.—´åVàª(IT)á0U%E“â¥\I™6¯âÏG³9ÍÇѱ'µ¶NåÚˆï¼þ°ê²œuiΖ§ÑÙ±ôæ6~OoÃcûb&#.N(é§K] +UÑ…®œÑE!ÍO> dm%Y‡<œ&åð+“†ÿו$[ËDe*¡RâÙ”‹áZeåT"œÒ‡¤ìrá(5U* #SÑúú¥>~Dßåa©6Jûx÷ªJõÎÒMLki‘Äq´ ƒcuá±}x¸±£ ‰.kQ)‰þÙ­°¨EW|ð#ê"ùÍÉÊ"WËUq/þ<¿¡kQ‰ÄX"Fm´Ó‰."ä ª´Id: +w­£­ÎܬGg'Zð!£T¡åjÛ8U=øHEˆCÄ(Np’Ê”ty{}~u¹oŽ)€dEY(Eg£°¹Þu$b|kaÐUsh,ÞLŒäOhÛ'(l.˜ÿ‘Ù$—%Ç8ž…‡­|)hÖçמ’xl¹ŠN˜«Ã»¡yœå–“³áè–¤â$¨.˜Ž™*¤ïZU9VÜõÍäþöî_ïn?}¤6_ð>3 5Ž Ïo^qõ8\ìð$ÄR1Að v¹•fJ*…i÷Ï%½R¾ûN$_šúû'7¯"/9+JÔ ¶™Æëšnׯ—t/LÝ{J—°ÀB…Ë}?YUªBŒ‹GAFg§4™k»\%¹×Ú Ôg*…w@~ÀîqûbM¥¨Zª¥û¸ßð¶ë# $k,x=…©î%ز¤’B +(ÂÊŒO~–¶ƒÈd[¸Z‰ö¶kº™û^ùÀbjr‰¡¿Ì ‡À)蔵Ï]$•6}=@F9% +õO`“ª ·2üÏÂcT™P*ÁY› W#¿6pïO|ÿRÈF‚,=ÉLSydÁ/¼0Š>„¬•ÑU‰£Eú2D4Ÿ­ð#%Lœ¢³Zàž¹„ŒÖ³)ù –9Šš¶•(ñ¥B‹TlÑÏBm ¬³C‰s®’g5µ®"º‚Eâ¦|ë0Æ‹Õ± Kî´Ëƒõa €OáW)Zªd0_*Ø2‡Þ¥AÄ@ÌÕzœùÿÀ‘1•âanì=9 i\ŸY<@¾ 2’<˜5êåäð.Áö”}¿¬9Q̾¶Æ½n‚bAðëÀÀß.Þn6÷W77ñfó #þ´3Làú†^¬=­ï´v/6›ðãx¹Ù°lÔC×£½Yr!J5ߧá)¸ZÀ?:Õ[f;JD!?œë8S™äú ÓgòBOÔ£ôóŴКN‹žô­n`-v ­„¾2P®P0o3LQ~mß"vÿ· M&š ÍŽx»'7îw+’•IÓo?ƒV€«¢[(†(N©ÌC„ÍÃK,l>Ø8g§‘OƒÎ9s ¸QzÌ‘õû‹OwWñß]a®Çƒƒ¼?ž1†°Ï2@ãÃ=qÐ¥JÃÅïÕ fF4}ŽîÏ–ä ƒÄLhx¶wQyبԩ,BŠ–÷“>Ù§ø•iTjï‚eEvßÕÒÊâÊÛJ¸¦¿ÒzŽ‚b€˜RYÞ¶(ƒº<šOu;H“j¸Øw† ì[h<µRý(yB²ý„€‡£'FZàk÷€ ùËÞ Ô¸ÿ úð–ï Ÿ'|•×¶—cëËí˯ ¹Æ¬‡ÈÄiÓNéÁh¬a©°¹ª1¯‘̧kvV8¸„Dá»#ýýجÄxÜùÑ€þû Óh§@BO3å Û]Õ›øÁN»öÏ óĉ¢[Ô×{2u1 ¿n‡ ¤ +mã“÷vW´†{ ³Žg¦›ÛxÄ3΢Àó“ˆÇlÖ Œ~6öAB¯à²xðY>ïþi3 {X)» +ÇÈÆhê!WÀ’<•‚à1ôûjÏlvÿ|ûT¸wxIý¾Îâg¶Œj¨†¥0h™ß5>¡˜Š~Θ">ðèõÍDEø\€lð!µ÷¨ï7ŽþúÃY7¶«Óh~vL«ÓE´Z½áõ†öî;®þ ¢bsMÞEú/¸Ùþ•Ùéüg~þ­Ƅýè +;< C½Åëü÷ x~§aü©ZœîŸ“99=‰NñOçtrö†/½þ:úþá7Úendstream +endobj +1253 0 obj<>/XObject<<>>>>>>endobj +1254 0 obj<>stream +xmT]Oã0|ï¯Ø· Ò¤”6ðÖò!ñp…£9¡“xq’Mkˆã`;ôúïoì´GÕ;5•{wggvìAB1~ MGt1¡B â(¦Ëd¥4N§xáo˜ªÁ< ïÇ”$”UH™¤SÊJBxSVœˆÂIݠβ¡µ°ÈúèØ:.IZjÙ(éüÇFºµlÈ­™j‰5KºÂ—p!óBü”5¯Ø¾žF§ÙÛ ¦óÑ$î$CÖR¨\c¡óɈ×eW 2°¬¥Ûöå +ÑPÙ©6@½È¦ÔK‹Œ–³ï$§Éª¼ÖnJª´QÂ]“eÞ&ÑÈÞ-nž=e‹Èýv>¹}¸§‹ç«ŠhJ¶]>´¾Ãa» èÙêÎPÃÂ@Ž]ûJƒZ¨tèuÙш([CºJ=+¼Cܪ«)ï^£åL,¬¬·~¯$Ð’ª­Yq(05ÜÖ²a8Øìų[ÌEÙcu÷"y–/Ú¼¯ŒîZ{Fûõ«Ë3ò$÷ßÓ‡YÊÛ°·dóÉÆúö¨ÆÉB¶Â1T#qDõV+eËEgüÔú®úák¡gt]ƒU¾=Ä„ÁD0M°@ÎÜ Þ.”@f%WárÏp?ÎY­4fÀÈßRÙãod]÷Nz\ÜÑ“‘J`s×Ü; C¯'O·7°$=8ïè’­4"¯¹o˜E±>¬xÄ5´ ×–ƒm˜æ¢xïÚÿâÌή¡õÑ@ÖÛú‰§ŽŽ LP +'ra™¬>èöˆ¢lVGMÿ¼ô¥‹¾á%TíËZµ ¢Âáö§ÚðJZg¶aÃûtws$Ü*é%iÜiô7ŸAvý†áAŽ¢óÞ ŽòíœïΧñ•?‘˜Hnoé‡]¸{ì5-Ù9Ððý=k¡üëO¡z…+Åú‚ãé8šNR\a(–NüÒ]6ø1øl©yendstream +endobj +1255 0 obj<>/XObject<<>>>>/Annots 735 0 R>>endobj +1256 0 obj<>stream +x•W]oÓJ}ϯ‰—"%n¾Ú¤Hµ”^xzI¤^ ú°±7ÉÞÚ^w×nÈ¿çÌ~$©Óêê +Q°½;gÎœ™>vÔÇŸM†4:§´èô“>Þì~üø«3M“1M¦IŸ +ŽÏ’ixÊiÆçéì|š i<àÿCü5’–ø0ÂPüaVl×ÉE8::KFñì3§áìàb”LŽÍö ¡D;wWóÎéÍ û4_"£óÉ”æ™KoÒ“ÏzCµ¦Ë´&aIЕHšŠ®u!TIuYçÒžÄÛù¿>õ†c˜8¹mŒÌ·4ÅBìfá*e¿ƒ‰÷Û_3ÒÈÇFYUKú!E¦Ê•?<¦Á N’s>|%— muC)BQe#Œ»ÃÕke)]‹ª–¦KU.…•TˆIÁ᳨Ý]‡T°U‹E.i£ê5\ªUcà—Ù`äƒôIÝ^dP2iS£2ó.¥O¹‡¯½Ïßïæß“—ru1˜+£›2{5Ã;ŽYˆcÈ?Зð©éZ•!!>ÌI j¢´”&×+]—ÇFÚÚÒÒè‚6Ú<ØZÔJ—ö°v1Ã;UfzcéÛ<8Nèn-Kù{‚ëÍòUöCÇïö–»€hî_0¨¥Lßâ¤A—èò˜S¢Ìðƒ¥µBÄk kÆ™dÿ¥($2̨ÖÂG¶ûBõ¶òÕàòkcà1¡9Bñ.Z~Hld•+i=€«I/‘#˜Q8¬­nê§.á Éߢ¹ÜÛ*)RF þ™#µT½T8¡lË·­ÁßÌãä.›<'—<3|ü:¡K¼ut> éy‘y¨§L€È »7lu/hRDzÀg—_7¹eÏ!Uh(€„À¹ê¦À2Ç¥ávgrŒ¹q*`ÔóÇÞÑ%ÝU³=¾ØÊÿ× Úä×[WG Í‚;ú5™±ôëäŠoøzrrãC‹@)€U‹^Ç»jËqó«ƒ,#ÓvLßi6#!å + ¥äT¬þ;Ó% ¬cˆ™fîj4´”!V²hBvˆ QÏWSôÝþ¬¥Yk}ŽÂÉ[O—PÖv’`ø¿6bKÊ«DЦø–“m©‚ëµñAFSíõtDSVÍ8W¢+Ä“P9ËLB×^"…V¾µB‡–V‡pœVik™6ÊFx‡'KÚ£×%°™@ƒ–?ô¹TO>Öhɉ]¾Mö™*Ñ«P4 Ća¥—K•*øØbNT¦DÞ<$<åÒâRÖ;ùûõ(kÛE?¦yG×AËEö1¸òn™É@µ–¿yÄÚ¦€þpÀÁ# ›X2¦òÕ%λW;‘£¼ê¶±¨„Ám´…z6ýs•ë…Èï{Êȹ‡V±Å"á±3ŒÎ•õ;¶zzÓ§ ¿ƒd<B1°Îà_hë;O±ŠÞûcXbø{H$´æ{ÚÊQžŸàîNœÞÄ‘ß‹N'Î9ŒÎx‰œ4òᙀ)m)Wí‚~®‘¶½wøâ©”µ³|Ovͼ¹ÕŠ-ãŠìð¬1âÝÌÇ#–Xâ3RA¸cFaüCïÖ‡šÍþ(3Ì=®©‹É†ºnë9ZÞR ãž€šg:E¹Ëúõ ÁÿÇFäjÉsé…- ö²äB|ðµŠÀ±´‡]é|o‘wkU8–è]ò¡pŽuQÙŒ\)'±ŒÎ7Y_}ù>#_}æh (wõÍ õèò•»/ßf@Ý Æê8/P £EÁ¸õ™kL, +9íµÞ•.†àÚ¤å°)¶œ]`nŽ† /ám»s¼5ЛÁÂk> €‘.Ø,‚Òò÷œÛHcƒãÐ'ÂVÌB„åg êÏ å–ÊtØ.Ê­‡-r‹íÑ^Ñ•]Z„Uã«J¶zY·¼_{QR¼}0üŠâÖgÄ}¨"¡ùB€¡µÖ–©È „(Ï(vvz3ÝoÝÓ‹d2:ã–þ_¿Ðÿ&0žŒ“É9~íaãÓ {þ4ïüÝù­†Iendstream +endobj +1257 0 obj<>/XObject<<>>>>>>endobj +1258 0 obj<>stream +xWMoÛ8½çW °‡¶@¬ØŽc;½ùhКva/Šr¡%:V#‘®HÇuý¾GJŽ¢$ÝÅ¢j[ä|¼yófôã` }üÈd(ÇcI˃~Ò—“i?Êh:Áç!þ*-Ëð`tz’Œ^zp|2z~ã|~ptu*ƒ‘Ì—p2žâC&pÐïË<}ûÉn%³Ú‰’o¶ºw^ùÜYæ&“Ü;<+Un$µÆW¶(tõáÝü;,Žd0ˆ{à ,¾=“›¹l[&p˯tc`vöùü ?(/[e`XIaSUÈÆéJ¼•…µÁãóTyÉJ9þ"y4Dï}é Ž‘)¼>Æ%K[Ið’ȵ9ùUîd±Ã—ÜÜÁãöç×_fbT©åÇFW»p‹Öï*»YÇÁȃ”v:î”s›`…<´JWb—!ËŸsƒ'¹—;ô*½—eeËð˜¾r>eÞÏ °Seð¿ÛÂÞYÓñ\iØpÞ%2·b¬»ÖFœN7Uîw²²Ì/¬_í:Ð83tºÐ)½};ÿrùå½°ôˆÏ./$]Y§Íí»Žß‚mUI"0Q%r¶ô,%KL›í`9‹žXî7NÒJg,µ*âa™X“ŽoF¾䰔ݾ#h÷YD‡¢Ü= L¨õº²ªHh«MüÞñ]Ê|Çš¼¿"q£Jö­yZ? /™É‹PÒ•2wZzã!âÃך¸ tftÆ«P»=Ÿñ/t“nÃV7æ+´­yº`þ %þk. +×ã/_*Çò¤v½ëÀ\Sæ`§pì/•‚Ïu +‡‘cåÆoTQìž´l 1Ï5x4"ñXµ¨w<Š%¹÷gª\¨ rŽÞA3^Fé¹ø­ô$ãPÓÄG•µk˜ Ñ"1={ÐÔ&ä ]”O¼M-¸R8ÁžÚi@å†ÉååºÐ%hª³`¬ƒ[Œx®UI:±n,,oL†P<èd‡JÚXŠEDsºa¿Ôy +Ãèøsr·B“ç­d®@s8~Dóš*Š¶—Tr”YÉ9¿%X!øò·¦¢ fAå+­â§ý'Ç{Q=¨¼P‹¼€æ@—k’D™‹ðÔdG)VX<ù=È:Å!Z”}}xÈSE‹²'Û¦á£ã•M(¶5¯S,Î9¹n<©:òRëGZÍØù˜Q(¹«y‚ëÎ~Ï80¯÷ÀÇZf×—- .Ž3à65²ŒX$i„RóÎ[¤Ô#t™Ýœ×Uþ€)yôùìâÓõÍÇþj+>/XObject<<>>>>>>endobj +1260 0 obj<>stream +x•TMoÛF½ëW Ѓ bDJ¦èCØù@}hêÖz(rX‘Cqr—Þ]YÕ¿ï›%ÅØJ.…Y¤fÞ¼÷æãq–Ò)­3ZæTv³ERôýÃíð° <Ï’5­Š5¾/¯’%9¦± dOcìUQ$é›!þJ«å™ÈôÃíföæÓ‚®iSSš¬–å¨r•´©"ö‚6ååÁºo;g÷=½%¯º­zµù:[Ð<S^V¶SÚP§|`‡cÐÚ5GöñæÓŠÒTjχâólIx¡aúg×Ú­j¿Ì=—A[C¶Žï}·MJkêÓóí‡÷ míÁâûƒwdM{„;© ¢QÓÃÍï·7¿¤å‰ç2ÉDÈA‡&¦þ}÷ù<»'v#,¥ÞÙmË©¡Â ,Bˆ¢Ïnïþx Á¯äÇŽ• &sÆ¢[žrEÛ#uMCĆž²Ñ†…S¯è‹Ë?š~Aµuå3ñÆJ¹ ýLìèÁ–.‘¤hoôãž'‘>˜;Ž^TR úsït§Ü‘> oMp¶máÖÐ×kJWÒW É­o³ª,ݬou©‚hdB#{åýغåw/ÇéÙZ’ÿs^NÀ³Dñ׳ñ:è'xu¨‘Y‚»•ØxhØ0ÚI%ŒÝ‰I6Ö‡ ¤àw§*Žäe®ÇÎ|Dü‘öÐ~áa=XZWR0ƒúR)S=c0I®Neã¼>œÂ)N›ÝOÌ¡HÇÖT7Œ^{táD;˧o†á§8nקKDƒõõÞxJmÒº¬)Õ>qf«=ííjK×'cigŒà ù~¼Ï‘ +ŽÃÁ“³mxS;•BåùQ®Ð)ÇSï5ùb[)ïéf°ØÜPfrÑcMð?ÿÛT-{V)Ìù?GÚ+ì¡­ò&¡¦ÄŠ¯U™r‚mvá¤-±e¢«‡Ê´=|°î…œƒDD¯=¦Ä¥y®ÓˆÞ#üÂ_½@ …á»/Ì)‡šÖ¨QãT6וÌh?¤*× +v:ƒ%¤›óÙ<·öÅã¤øF´éhÊÐGÅ>Vº”(F´¯ëê_ãñápˆ,~ÍSUEÖíÆ|dü>i«=ZF+nyœÝLo—V;,Èâ¨+yÊU©ë“—Gzi83•ìˆ°Ë'ªÒQb‹ñ)kÿåÑtÅwçÀ~³µ%þøÃ'm!OÍ67]±ct5Bªí“b» Àˆ|>úZtŸ¦4PBqho’}[dv½Ô);‰Îêbv:T!U°o3ÒÊ18›¢ÐnˆžL¥Ü‹m ÖK*íºEô¶q ÊLêH•³¯âäVÓ^çUÖ䤜tc¿¤k”]¨`ôôðnÄÅýûãçõG*”)küö·GzÜ•*1–ÞÙ¦Òª¯þY™Ùàok*ÌYbNá¶ç†Èœ-èñáçû†RÀ[Ú!#Ü}þ”j§¥Ûšw¾pûYVœÙQ/µ!(Aëƒå`à{Y; xGff×¾LW¡l;ŠëÀ3oy쑯M›„£y p®[Gv}ú¢Nº‰à‹êjðA}°ì.Ç¥PPAwnwh¦ÍÀBÆ™’•,Û9ÌyÏ}¤”Pi9éf ˜.`Œˆ–ÜË…­ÔÁCÂæ†Z»ÍÍî"TÎt–‚ªÑÖÖu®aäE<@¦u§$ô™õ'J­SN+÷0 ê/û­{ª_‡MìF]D®Á” +jÛŠÓ%ÍxŒú;±YL1“ÉìÁ BJR&Êmò†‘P¼K·<›`rºÊMÂt­ÎcƒtœK3n)¡É²~XÒÅ°*Ú~`(ç:ÃPFý¹Åp‚o›û–Ô|h„E×ñäü±L6ƒxssÙ"çåfï÷ßÛJÇ’—œ¶¢#øe_´ÔüM‚ì©G]ïjqgFÆ.WðŒÉÍÖç¡ \(™&ÆÓdFèî^ rŠ,9 ¹Ð/ÐÚÓFU×(nÿH +Ãe¡Ï“Æ ŽÕô—Ê´ŠÄÌ6dăeXï?éR…&xL¹o3ó•ŽoŸZj¸Ääß$ªS’•÷ÜQó&—ô Y˜ÐRLh‰<ÈئÂøÌ2¯Z•B[ÝH†ásàÒ6Ðoä1¥fÕ1å˜ØR)jY—ïŸÛ F!ýp'ÁT!Ìnc¶ô>†¯Â– '!Ûö€.±WEºEyéL6ƒÊéWˆåò^èÙ*aÏqå8çáNÐA¦2ò–X£Nƒû»?ž©vZ3-Óc+”x‚M£ÙˆQáx˜mªÊº:Ðâ^‚§[•¼hàt3ÐÑ.jÇÔi×u£ËLjg\l¿l<à$üt¹¿N·_oÇóÂÿA'ˆØž¢¤“]Y:Ô|ƒoäPžùÕÆ”aÊ$ox +E¶¿mþ;¶<4­X †›è¸÷61 7¦:°œ= í—)cÝ2ôfÒ4ÎoÄÓl.ÅÁƒ)7õñ¬¢Çx…@áÀ§Ç6gt´M7®öÀ‚Œ¡å¡ÈšHzãEºúDÁ¯7DeŠJ°‰Á¼>Éu8x-“áÉA³X¶‘ÏÎU[}XÇcATå¹ÿîüÎÓù §õRѽ½þóå>/XObject<<>>>>/Annots 757 0 R>>endobj +1264 0 obj<>stream +x•X]sâ¸}ϯ臩 +© +ÌgöiÙ0™Í½I&7ÚÝ*^„-@ÛòZrþý=-Ù`ØÌTmÛR÷é¯Ó­ü}Ñ£.^=‡ÔQ”^tƒ.î>^¾\„½0èÓp4BJ©ß7ÕUBs^OÃÁÏ“1¾‡x’Öᨋmƒa xÛd„þŠ· ºƒ`tx:˜ôƒIã)  B^q*´L&@W†Já¸ôª¥ãI0ôz77@önp#Åš €ø« +wÓÎJҰǘOuþ¶¸èÜ ¨×£Å¾MÆ´ˆ‹º´ˆZ±ŽÊTfVX¥³àjñí¢Kípe‹¸µØJ8Cð›ÖrG¹V™5d5[HcH¬tii·–ìVoïÜ…•²V»½SvÛNb‘‘ú‡5’ÅZÊ´¥¼Ðï*–A=̦ÏdÊ<×…­ÐôúpÐr-‹BƬ_eN¡Ý*A ŽbU%e,a)HŽƒQSJ¥È é5m %ßU¶¡ÒÈ‚Dé2³¾ÖEê\BëB§$2úCe±Þ +»È°idÕ»¤™*ddu±'ì~—…ó_ç.ªÐÎP`_†£qåžÚîa»6îUžˆˆAu¤:¹0fÿ+ÑípônŽ&³cŒt“²2¥ö¬T˜›æ‰2[8uµ‡X©‹ÀÓ|£czž>Rªã2‘& ‡/Ï3 RÅù17ò,J‰Z^5µ½²BeÐà<ù<=Ð\¯íŽÓjÙÚZ›ÿÒéìv» qQgyÐïz'¡êÚ…9–‘8•0b­6e¤gŠÊEô&6ÐÎâWrÏ6ã ™Hç’c~’2•Wo¨‡ªàòh÷>õç>ÛùcîâkXe³šÚáUî+¥J]‘Æ+Št,9GÀÉg+  ÈŒb˜”Gì|k¥±øê½Î¿æ2sÚ˜…|F¹…Q¢P¡gæüìë&½Z³Õe‚x"¾«Dr±ìtñF\Šô$­‰D./M#w½m M4Ÿý÷3½qéd"Cßœ;agÑ´>\e€Ø÷š‘pž)€Aýê±ÁƒU¹AJ-8ƒ¨‚Ìd€Å[Q¸}kõ= ûõ™þ½.]l¡+œ3ëšòD +ÈÁfSB=”¢€‘apt’ 'l=|nZ‰vuãWwh°'#útû㽟䤥Âíy‘‰£ ³U9Ëç0¾ÜÝRØïŽA—F}ŸzNùaæÌQ•(e)Äd2Å +&¯oÍ„]§y‚,ó²ÑÇ·äwª–¦Ã¹Ôñ6z§ ZÎBä|ÍAËÖ“¶ðž§s0kSñ!‰Aj­¸`‹ˆW#¬ßsY(×F’š¼eÜ¿wqƒ||E„\àˆüYdÒÊ]¤Wß@­Qò# Ù€n3âväø¼s×¥®Ø^0è‡ ºa0Á_bsß²…çý  ñà=H¼èiúø™.›*/iþúŒæ4_¼¼Þ.^_¦5BôlNü3û<¿¥K¶ +íåGë_ç •*¦OTàsyõáºé_Äë¢ Ë’ô™é^#s?Qfù.~ÆÎ¥åez£³ép’[µ^ûeô¦¢7}¸‚´[‘ÝnE¶ ÂåciìáÁÞ%bc~*?VjÿÄÔó‰Lºú]»o[ü™Ü q7*T;@>PShNbõà±ôÛÐg°‹[ó 0ã‡`‚ •¢2¾ºÌïg¸ëMö>>rt»Î±Ë”Šª›EA®®éí;?óy©y¢ýz?{rwÑ;îjè›\>Rð°׶U“ øߔі9‘‘0S€«Ð 2”G^®|f¶#æ7[`@±øꪪÐï3âS.§Ù¼&À3µ¦\¥ÊOfÇ¢mp ` OŽ èŒþ*Yõ(ø¤aÛŠHû¡Ä»V¥˜¨X†Á0ÄÏ;‘÷Û*Î]"™ X%>d \Èm5†ÿ¤”Z„}Åþ=æÌ@hvx˜BO‰Ã!‚é€tPíÖ¾>Ýÿé|4ì4õ¢âfƒ.Oiâ˜r­òâ>eëYÈù‡y0VyËŠ°¸ž%—ïWÍÔð0„Äñ&±C@–-l&šåUåpå‰È}¦°š½èx×D™œÑ¹¸qq¢Ãrü"¹Q‹jó“Á}Fà(ŒÌ‡ s£åÀ~äWЛó;wYW(À uŒë`ö5» *m¢!W…ÝUo"–ù#ãÐó¡ÃÇJeþ€sœ+‘Ä\H@Ÿ~Lu˜|~ž)õ|p@xWÂí=e1·äg³=¢ž`j­Â³‘6ße"]¶–W×$m€Ù$ðfsq6û“Ô™nO.p.¢J©«Äyµ Xv¢yd¯« h’TÁîY—Î+:ã9-Ò8BE6ÙWAæDäy³Ü™Òf§â}‰³š6FUc¥/vŽ»Ç‡¦ñÓÜÏà®1îÙÊÑLÔ|" öè™ÎˆxºŸs^ó4 k3iÝD ¯9¢Ä˜ámCÂàœZs (Ð1‹2² +«qnRÑMÿèNú4Œ‚ÉhÈÝ}>}ümJÏ…æɃfÍS%Ãl×[Úã.f¬ÿáa0ãŽú¼ì¦Ç»?/.þwñ ý,Yendstream +endobj +1265 0 obj<>/XObject<<>>>>>>endobj +1266 0 obj<>stream +xVßo£F~Ï_1RB¤ìØÎcr×T‘Úܵqß,U ¬í½KØåÿ÷ýŒI¬öŽHŽñÎÎÏ׋€&ø hÒtNqv1ñ—K:~”[¼Lh:[úSš-øÜÎü€JIã5Xø·íÑ|æßuGÐìO܇ÓL–hô„¸\kyX]Œï(XÐjgæË€VI}wB«Øû¤óÚV¥Ê·ô"²HÐ^Ùýöùþëõê[suÖ\M'þ—½/…ÌY€bwYX¥óF|—x“‰·Ò¤ò8­I¦* +]ZÚè’ìïlï>Žu•[ÒÑ7[È’È©³¨¿êò@F–ßeyCU ËÅu°Ñ ‚©²±Z£oâÌ$SIV“IE‘\™So©Óì7Žs®[Çç>BN¼Rk{ٜ޺Sâ¢ñ»µ2–6kd$MD1nLßç©|–oö¦K'áÔúI§Z¼& $hx…ãó¹ƒ >­ÎdÂV¨ÜÝkÖ–*ª¬4|¿—ÍýNÅ;J$‚K¨*tN—Ô˯il\U*¹:*"epm£r™pAþÆÚàÄåoà2ŠŸ|P׫D™"‡g‘Éóv>H' =ÛB–FçgL2N|z@l¤7lÜHÊ*€,’m¥’Af" \?^¿mw ¶ÀŸMC…·þÿ¹ËKꤸ(N4$„d¿´öb¸Ô¢(åkö$¸¢Jíúº=ˆÍµÌ¤ã30_SiÜSí4ôÜÈ¥L`†YÝgôO› ƒùƒîž«úO¨êw”÷¡Wy¬³L¢}ÙRžÂ0© tE{Á¿¢û¸¦ÇXùóñS8,P«ç§—õµ+à Q(ì°,Ö$W¦è2|<¬süØ6ãQ‹³E7þ –!Ò¸Ïå³;akÇ34ndtÆHT, üõ{ÃÊ4øQ¹©ÒôÈ{sƒü×jjltšê=&K¡ëÒòMdE*oêô@š ú»(6C™À¨`sï§Cœ +c ²ö¸MÚ¥þ¢ÞÚ9‚“¹úø×RÈ0´—iº¾þ/Ò“‹lÒªu`DúëF&ï@9”onÀÕ!€mòÕ õˆÔB¥ˆþÞJ‹ø‹}.²µ÷mY!zT”ÒÜtZ[Æp—p,’Vm$Š}©’³ŠqÖSÜéìyÚÇ=·K‡yžhÐoy™8W”cözuƒJ…Â:àt³¹-Ø ¡——MJ‘ç*‹0’øé=߈mÿŸXœ÷¢>¯-“lñ/—£Æh½aÕkRKµiØRí݆ÅÁ¹ÉÄm%4ˆŽ1Tˆ³ÎbngU|*&fÕã,úë}­Ñ¶[ÊhÄ¿Žx%ŒN zhMœéz'Kêëmz?Ñ +…^æ6BÇ•¥S̱§.§4ŸOü»c,ñ^¯¥®W¸Ï:®¸'v[ᨽ2ZLjùw)9]:g‹™¿˜cQfÝw!{÷Ëêâ‹Ð_9endstream +endobj +1267 0 obj<>/XObject<<>>>>/Annots 772 0 R>>endobj +1268 0 obj<>stream +x¥WßoÚH~Ï_1 +º ‘‚Á@ œ”ª^Úžš\®ðvÜÃb/àÄx}»v)ÿý}3þA´§*‰¬wgæ›™ofÖÿ^øÔÿO£>  +·=¯‡'ÍÇ—ƒÀëQ0æÏ-ݽIµHhvq´ÜR0ñG{¥Ü¨ï9Y䪽ñÐ (höJ¹Û Öödq«öÆ·^Ÿ‚fïh¹¥É˜q6{¥Îaà ²8è¬öÆ š½Rn0€¡‹,rÕÞhâù4{¥\qlädq«öF·l¯Ùó}Žïíd Îû#ZËKö¼ñ¹©?ìšEý^àh8á÷ÈjZ&²:ì#0~u¸9ún~ѽ’ïÓ|Å4Æ#šG‚ÍÃv©ŒœK®çÏ8V;#oÌô™GíE?Q¹[«‘ÍŽÏ‘ÃRƒ¶_µ}£m㔢ôj\±ZÅßÞ¨d'ù›ÊŒÍG§ N¨Óg2#´óvšiÚx©#B„ò&·]z¡IW‹öí⚶*¥L­q6ÈÚÅIB©Éi©AƒL«’mµGÍN#U7¤È©m–hØ£&µbBÀ5c©†]œo œ>¿Ÿ>Q[æÆî)4E‘Ê`Á’r¥¯=š0Ù|o8è×[oŒoxÓjQ·p¶›˜P%]_ªn/»µÅª€ÿ½NÌR%ÿœ<&þs:,lœïéŽÑ ïØ…JRŽè4´û,GXœÛ9œÝkˆ£}U#r4Õù26ŽRµÕ85ŸÎ>Îÿðç9ÃÐô²¶¦ÈpîqúåñÓ´:õJa‹¤(¬N$ð™²Ð :µÞBrWqª%­ï)7eÄ7:¥eœFqºægœôCàá4’Xë{åx‹@›ÆmÉ`¾‰A5>™¹+™T‡Þ#ú¢`ÁR,„= f‹¶…69¯=2¬+ÈK|#êìª&Ñ/³ßFŠ¬Î³ǧ{_q¢}Å®ˆ}vè\„[=ÛXÚÕd]ÎË£¥Ðp?­$"—èºq\ÒW•M’OÂnTºÖî‚DÍ‹ªV4hR/ðÑ;í•-à2LïfLczP)ªÏÞ˜â.ÓEu…wÂpþaìúòn+tèr& p3*gBuÖÉàúÀÕñ0C1muZÍÎúÚÁm{T¶í©“¾±Ò~`H–‚¨ã-¤¢„û• :ÂyC{SÛÈôÚšˆ+Ÿèo±c¾×a¨n8Ò^°c•GnL"lŠ´JÊÉøÊÊsŒê"×®î"õ<PœtýØ2c¹Í¿Òö +ö3wá$~Ñ'îõ8Gó(²P!ì ¾ªæŸ£‰Aí(Ì—Õ +—„eµ&³!©'nE.S¡þí8v¨ºCLÐ2Üù²DÅ鳑vÈ]°@2DË´³ÈSÓ5¿/“Þyôbpb”/BñºथÇÙLøô4}‚Xž¡¨°Ö\ 7u«èê<ìr…É]Š;žè)óÌ Åõi?¥4“žé®¹´û^ßðPÑ¥SGü%·w¹ÞrmqˆÐU(3.þV¹ïaTco«ùÚ–oT^©Þª—Ó¸Ž¯wÈÛåcV{t^›š€A0 :5ô8ïc$â5¢C!*åE‹CÆqíÞ«·?À{ǘßûp± +äF:›>¼›Ò“5\óôÞ„שċe;µHgÔÃ%0jÿ}GCoà݇O¬å÷ùÅ_ÿ +(?·endstream +endobj +1269 0 obj<>/XObject<<>>>>/Annots 775 0 R>>endobj +1270 0 obj<>stream +x½XÛrÛF}×Wt)/ô ó&^\¥EŽ7©’e¯É”ZîÃc3ôÌ€4ÿ>§g’‚MöR¶,‰$ݧ»ÏénèóÕ€úøÐtH£ ¥åU?éÓd:I†4žMñzˆo+)ç 8zúñîïáèÍ`–Œ©¤É<™R|SÐâêâmIƒþ8™]\ì'³,5?ì†ÍÒp>Onj§ãI2ø¦×ÓÙ~2oüqyõüÕ˜Zæˆi2›Ò2 ˆû´L;…IEAkª[=Kž-?âøœ8ÅÇ{£1Yf…L+«ü‘„Îȉr-îÒÔTÚÇ;ÎzÃi2á;–[‰ |ûƒ!UîŒõB{Ú¥½#oJ)˵´tØJM™riåœÒò[I®qhò'þHjo•t¤4Ÿc÷€9¡4pš)+So챎dRŽ*ö†“Ê£ÜKûvXØê`á»(ß +çÆfd,iz'ÅN ),yùÅ“ü\)ä Ã%Ð&E¢Ö’1g\~PàH'gc¡ƒò[SyʤUûš ­«6Jƒµ®ê¢7.¡W(Xi@:¥scKáQÂvI/T¢åôðúù㲿 äÀl8ÞòúÓãý»ßÞ.yóHéV Ð–í°Ù«¡÷ó›÷Ë7½{S `Sy0³aÝ2ò=;†{re?s\9WÉn¸r]dbGÎ×äÊu’§¥d—™ÌEU4òA~YbšhÈWó®~Õ‰L»©yØiœÐ-’¯5¥î¬ž¡ k‡P­õðJ +r0/i-דð”…(zÏ¢Ž†€ðÍNjF ÷ÑxC—”'åàÂY „aF„œ4¿^X¿|XD‰bRgà’b¡cO ]!RÊ ‹„~ !^´ –!›©pÈúÑT¹àÑ›â:‘©¬ØDž¢1‰h x§¶ôoSšç_å4Èí‚&Ð^ø!§fA;k¼IMÁyÈä­ ÚȸÓåbbׄãÃû²ñu"úÙ¸Íu[ùf¾6¥ B­­°Gr^;ß« *vÕ.Tú ØL1ø·5È5ºqę̀{jÊ²Ò + Ydké%O ÅŠo9c#0õ3±&Ø4…rÁ1:6÷ G¹5%m¸‡p®Ý›øz 'ãÄÛ„–\ߺGeF³á†Ý9dmüîîþëË‹!ŒÕŽ+Ä. ZNZzÑœó<$ãÑ-á&™á7†À?Pìè %*?öõL_“HS ‘.aÞ€ úH\Ð#“…;µ'l l)æLñŒr·çÖ=ϯ&þúâkð]ß^§ú6ô1ºã¹Ò5ÕíNš]!»Yz 9)ýÑ„×Æn®é€M   1ö7.Q¸xÞ#zuࣛÀ3r'S%ÐOceé.׋À£Ëær¿xr’Ìú#ZoZ`(±€ÀNôn±MŸkxvw*O¬ãå–pN`»¤Q°w¯ïÏ,Lzë#Í“‚ÂÊH 2} +²¬h×C)'ѤÞ^¶ò ˜ªÃ-N´ •ç¯žîͲs±B4LŒ+D3sžVþœÅ΋C{RÄ_ÆOˆ[±ü?ðïÙƒp~![[&ðsÓÀ)7H¬W%¿©›˜Òhÿƒù´G‹+±ISç«•Öá?JãÅ@9SŠ¼ö‚„<ÞýÿV?ˆÚ¿*Ħ%„³ËÔsOãÞm±Ê‡©a»Ïïßèòé'‰¥áŸÿ:“›ìó +Oyãã""W¥[fð¯´êp‡]=ëÒûUKñ'ÌŸ|Xu4šs³Ê/;G1_äžÿr…<ÌÏìôxñ_²¹0£—¨u,ϹÇb¾G"„¥œð b¡2 òJy?uÚ^Áb<]ÁÙcžW—ŸTúé{û„Ìî…¾ß +½ù~¹…ÓוóßÙëÖ”ò%ž,¾ŽÓñ0ÊùÁ2¬|† +é¹qc¨¶ +rÀ‹Ë9øõñ´÷èõõ}OÒ`þÉ#è…¢¸ee—vKÄÏDgõþÊO.týá&mxˆþÀóŒ½Ö€ê‰EP ½«Ÿ]¾E÷oLŒY½» F³d6Ñd2M†“Þ%w¯¼£·Öð<¥—&­Êfj±ñÞGû³õ¦}¬5ò·ñtœL'øËŸœÙÀOË«\ýÔlH/endstream +endobj +1271 0 obj<>/XObject<<>>>>/Annots 778 0 R>>endobj +1272 0 obj<>stream +xµX[oÚH~ϯ8ŠT-•‚kƒ)H©ÙtªvµìÃ`àÄxX_Bòï÷;36‡v›î.(àxfÎå;ß¹˜¿N²ñvÈw©Õ¡`ub[6îl?>½ç;äùžÕ¥9¶gùå1Ýé5·k[.y]û\ü¥’æXèv!¦úH,“Ú=«]îtڞ嘽“ºVlwé‘ãÐdÎvuº>MBm–M“ ‘/%Æj¡ +ÓèQžÒZ¤b%s™R”/g«™¨d>m´§oi%lYÀ2•ÒJÁÄ(ÁåJä‘J¬·“û“w—€A볩é´àÑ$ldA­ó"_š-•I>MXÇv™Ö©ZË4¦l-ƒhÉL[±ÆQRs}]d2ý%#c¶9zFÖðf„Ïñ×ñ©”µì©·.šG±´Œº<’ðe&))âØÜ×J¢ `ÆðçQR®´ÂD楲¥H!ã“œŸr±„ÏØqZSü ”h6}«ëÛ±<têv|:„[¯7[=«Ã€#;|ò´Á°¥+%°åQÆ`<Š¸VB£E™ðŒ‚ˆ˜Ä,Sq‘ËÞçKŽö}þu¨Ux=õjÚ^ñ'¡ã¯ÔJ;³Kž’©K,Œ¢T¹JŸ„¬|€Âí NÎ*†Z“®æ„A¶‚ÛPózNZ-'(!"™ÌI$á^†“½Ë™{f¶oufKUÄ!S]Ç56÷’ƒÁßãÿªÈr³´ß¨ôa»*ÿ8ßiŠ|x”)¾9-¦Ó­—G™Ss”]+ytœìòë9q¤² Êo&PÛEFq„¾Àý,×µÍ?`C§EÀ…²ŒY™(EšÊ$Ÿ©H ",k⡨½ßIáªh¦QøB+s'Jr¹€ÞT®S™A™6°ŠN™ÄÛ…ØÁ…4¥iãÓõhúö_˜´N£•HŸß§ªX_ŽZ÷Å•‰¥Z°˜ê¦Î#ñû`U½£év-§Gͪ$r#Y‰{•Fè¦Udr×Ï2II%Ä…6K™ÐXÍç"É-AàŠ>Ž†|I¥V]pÚH÷ +>›¸—=ZBGšW·_&·º/†2QœA2qÃÕ•h´(`€Ñhô0idÔ U’§*Ž‘Qo•†9ÖÔ†­œ«55Gž¡èî9–¡*±k×tî«ìÞ T‘ä dE¦‡j²š“‰Jš¡œ‹"ÎM±Ïúì#¦…-´ñÇ¢cºQEå]ƒM„eè¼ëg?cƶŒ¾ÆŠ#<¯þGø-º|1ÁÈ'±ZÇ-7Ë +t”Éàîj2~KKP)ÉftÞÒ,Ü1™;E¾¹q¹]Nr|Òíé\Wó7¦Ó7…ÙVåXƒ6"ã[{ŒW¢,CfDyVBÕ¸X—c¦¯/œtBw?J0g†t:“ÁÃó©1³ž™¸LæiIne¸™ÄØ²GuƒåÓ @„sÛª°›Nµn‹Ð`u¶˜¾¿ -ɧ(ƒ‹å$¬¨Æi…çZÌ™*Î×RqÂà\g_¨tqÊ~l')\è¾@Wj#Ñ>ÏLJr ª2…Y(ä, aHjŠÙ`ÓqÊ©ø‡aÚ›I)U$×±0Ýš +µ‰ÐŸuµÜ  b†¾F³ VÍ°íP3À›ð2Cäʘ‚Lž†0†³ôªMÒZX:R7·¿—QÚ¶­9x†™ãa«ÙòÌ0<6ÉAF×—4F™ã§ž´ÄA4UÔÆy×7³òÚwÕ•#A<ø°Z䶞FIžtª¦µVYôTX5»Ç\ÄHQ]AùI¨Ç¦:–×r¡®muñÖ&}bâ, +™å.Fä}ê Qr¯4Àž +^<òÑOQYóÂ>uýî¨k;^Çî G·×ñýç/N«Ýºúµ£ëMxƒánÀ²O®ƒ‡Ñn«ã½ØwÐäû丶S¯vV´ÛnÏví–s1{Ð>µ.¼Vû¢íx¶7׎Š"ËïdÉ6Þ~Ïq½Ú&ä“h3íÚ’Ay¨Q~^.S%PÀ·Oàš„‡(xPó¹ÿMDä—±Xd}úãóWª^Ö„±¥ÿ( “œíÙv§v` ERED»º2›o|Íÿ%QÃPÓÛ™ò 'h;Cné¤:˜¸|‹±²âl·,´N¿Ct[Ôñ[V§ÓfîÝ n.ô1UÌsŒ-:Q9}²_ÍêHÓ·Áû°ñŠ¼äßEü~éàs½6‹ON~;ùIª:endstream +endobj +1273 0 obj<>/XObject<<>>>>/Annots 781 0 R>>endobj +1274 0 obj<>stream +x…T[oÓ0~ï¯8CZS;vn•&Ñë@bÖ €7qÓtIG£ þ;ÇYËDVF"Y¶ÎwÎwîßþ˜I9 NÂÓ¡3|à^àxÀÃï.'x×6&¨þç8‚yèDG0*œ‚Þ]\FœXäãY#‘^¬¬i`CÙõhhFKÄ g.øè–燧/âä,­ÆÐæéE–m¤>Õ^ÔRÕ…øÇïkÏ\ÛHýÖÏDïkókZ_¹rÞÝÿÀ´õr ÿP‚ç¢ë¶\K=†ˆ~ž,ß‹éUY^­¶²(Æ0ZçÕh-šmÁ–q³y¬£KyÀCæó Êòôè}æÅ}žÜÿßDý¾YIƒµ"ø¶vGÛLБnU)ç¹Ær*½Ç`ì{d0#35:;dœ‰j¶Uv¢GQzÕ6æ(þgè•yªe„óPî6Ÿ¸‘αU)óØrÖem´Œ€vì†s7d^7823U–²2z´ä@©ÅáL¹ãÛ™º-¤h$”"/@$\™Ði^e`¶yon>Æ7`ì¤Öû×]Ï:8¢ÄVœª¤íˆàA4€ýo ­SadŠ:Ç”3ǵ”Zn +L+Ú•°²½®ã: ;_œ/Ô{t7<¸K}\o!ær‡ûÜÚXM®¦¸ÕÊÎÌìÂ䪲ºÃ£Ê0 ¸þÎvœàZÂ}”žE¾Å/âÁûÁo\€›endstream +endobj +1275 0 obj<>/XObject<<>>>>>>endobj +1276 0 obj<>stream +x…WMoÛF½ûW |± È´üQËÉÍnÀ‡È)¬¢‡º(–äR܆ÜewIËú÷}3KÒ•¦+ÖrgæÍ{o†ÿ]Ò.iqE×·”ÕGódN7w·É-þ]àóþzM…|q9_$wÓ/VGŸ?ÐÕœVîº]ÜÑ*'Ü3Ço²ÓǺñîUç”z· Æ®ÉX +ªNÕÙêoyòrŸ<¿¾I®ðìéÓ«ö¯FoÈãSñð ]^ö‡¯È‡Ÿ¿<ÕíÆùo|93¹¤¨ÖY©¬ 5¥[Ú”&+)«Œ¶m LYRY¦Ÿ«Lh9T­²ÒX<ŠÕpçŒ$Ï9_^Çì‚;ÏTU¡¢c)IËÇ ­Jâe™³­26¼_Ù–ª% ½Vù–Z‡€…öT˜J“²ù…óHÝØ–׎ÌäL[jÏ•ï„³Ü˜éŽ ¹r +Òo)w¸Àº¥dU—ë÷D"ÈÄž´”uÚjK*EÈ*w’2kUø’Ið‚íM(¸ÔêÕà†.pqSU÷¤‡:¡Ÿ-̺óª5Î2ÎüíH†RJµ¶Ü8äPãTF…›V\­é™YÃ|˜!®Í2cž»¬«QÇíÕmrÃÔx·1Hjù´"f ™‚¬Âu^Wu’Uá]MKÝ><>=Ë—ÿãWRyŽchŽÍø¡ 4™–°Lè· ¹NE¿?.Ÿ<*³.Ž¹ùæ +ƒÀu'<<$óÂ9ÛMjxL1‰ñÐ ×Õ®Õˆ¾fh†v«R&ç±ø«Ý6dðÜôIË2aØR=‰Ù«,6ÜnÉ1Q!8Î#ù ¼Òöˆ]¥ïw(tMã<óu×¾'wá€u*º +`ö‚D}³Y=IÅlÂp$ÒÓÖi΂cêª*8b­z'z{]ÃÕ³L*æ…:Mp¼ˆª}9 úýw/§?½œ½œM))í vã`ƒŠjZ¶È_ ;×Þu$ÈUj*Ónå{ñLî߀UîjîcåÖÈx’.W2o˜*e¼Ô«2ë<¡g$þééËýã2ißZ¹½v0§]€{~Pè²¾¼þ¡¾°höf #Tƒi‰J3´B·lÊX—“ʪCø¸],$Ü«ƒ·î=ˆoKèöãóî˜Ù®.D€¯ì)pTˆPêí$|­Ð ÃüaZ¾zÆž‹Ï{ÊfÇO!ŒHhiéÖu~ŒÛ·ˆ)ÂKÖ¯€ƒç(”®«r‘cÐmï…¨: ïÃ>å“ÜÂV+4fó‰2§D_®è“ë#3ñÖqFuÇsÓB„›JìœÕm& hp„íW>› êõZù¼ây ûØ”yúÔåjÖWË"ÍF ‡÷ \ +ýÀ Mê‡êá?Þ!_`OÖ8O,8†(vÇÆg”vhµt›ç«Õ¼D(/#=4:3…áí@æáÐùÀpM'ÚÎ¥ -W÷ϲ”DÊ싱ۘ7d‡^qe€Jô.Ö¨í«ñβéO@F;1’X"÷,LîÇr—[ÌeÊŒNÂÞPËT-Êè ú:X–8§óH’÷Äþ7&ÓˆK’ù?Ѷ#»ü9méÊÑò¦û¥ }®Æê8q}gÇ »Ð©*vUüg83T~ì òÎ"m€Õ€ðØrZLð8–tœé5ƒ8¤¼pôï/q&¹Š›óÅç»÷׫ëy|ÛùñëÛÍâ&YÜÞáµëö‡ûËêè×£BÉÆNendstream +endobj +1277 0 obj<>/XObject<<>>>>>>endobj +1278 0 obj<>stream +x­WÛnÛF}÷W Œ•I%Y’óRøÄq][m^+r)mLrîR‚|Ï IY¢ã¶(ªØ/»;3gÎœ}? +h€M‡4šP˜ ú:ŒûϦ¸â·ÐË‹áø‡/f3ô›?Å +7ØÇ«#‚Á¤?«¹œó90¹ûƒå§ŸÆ4áÉd6¥y$ï4;wÖkòkåÉÄd7Ü<ÉNæߎÔ Fý!|èÄ&Ñ©ÊÔ +ëÅÀöuæq«²ˆö_×f#ãòD=‹¡Ä8O6&µQ&7ÜZÚõk+ÃIÌV-<ɵÍáhlpî²°[g²ÅØèD¨J'Î?#zŽ}­6U0«Ä.UBÇ«RØ +C[fþ1zŽYÑF%&jž7†›ðtªÓ¥Ät›Ûû«Ÿ(´Y¦Col†gxÁq8y]ùOƱ‚žØí +~]:É@ZÂñ°±/«ZØÖ¾6>5`\$Îâê#ü¸Oó5¢ô… Ÿ8\`™Á!΂ËU¨9)~«á£fs‹ ðíÎ<-:zõ‘zÑG;¯UĶ{ 'Ý–yÙüj…Ïé] +®½»Ú€ëÓÞÈëÄVÅA Nf·`KA©ÅMbžtx,â. +¤7B,ÔGѲ ®©(TL¸¤¬T¨®KÎÂuœŠ÷X„¸á@€I¦a¦u¤£v +ç ÖHÕŠšÕ™^0¢Ì,,2XõêBc~¤Ê=ªûöžjo8Û‚‹ŽËuhb£ÛYÜ¿–$.Ó˜suÜ$‘¸t) ^œ0§ŸÎ)€Ú°ìôFãª/›êSaa#W.ᎫֿÊTo8…B¢|¿6& h`ÄyyTéRQÐ?ïÓEG%ùZ°ZÚ^œÔ ÖП%³¨Ì#å5èc!/"ܸ2Ïm!@µòVè<1¡âÁ HgžKõÀqZB"Uð'´ˆdW´uU©ŠºrB…k£EbÌN®ÕÊpµ@DÚ……Y‚k0=fåáÚ‰µò%ÈXæÌ ÈıiD¼8øÍÚ‡ŒBˆ _oïaˆ{«ÃÁ ΰ㇮±Š›Òö—·¿>J›qoŠ=Iì–µl£·Gv¸•¹¤J0Þ “‰æ"ÀÈòVL¹¶é{©‹g&ª©í¥Úîu4$FŽÙµ;°ý~}Ù +Ÿ7S(Œ¦ìQëP,¨‘|† :XÏñª}Ó¨Ô6È\î컎U™x(<ºó¿Œ¾ñÛw9¿ +›Šw?#Ò¸Ö2-|M5ÐÄrxQ/“ÞÀ‰­8E[žXä÷fh MêNËó‚hîþ~… ,tÕ-ìEà"ºF•¯}ÕKò7¸+XJ1Ëžâtˆ:ïT½‚±q¨Ë®ÃgúŠ)#Ÿuw×wó6 ‘µJ§*V»Šû»Ñb‹ ×a~WfýOè‘r^AüÏW¨O©.ë6¢å–*i¡ÂíÕ¬J”+‹“þžŸ‰&á +Ž" +$ª[Wÿ}as]x(Y— iÀ DQAóyVËnëȦÈ'Lš²ªU3ø Uã“ö3Q‰'HŒÿ–ö'X´n W{íãu ¢R>/XObject<<>>>>>>endobj +1280 0 obj<>stream +x}X]Oã8}çWÜ7@j3¤-m‘V+QV£] + Œæiä&.õƬíÐe5?~ϵ4 eŠÒؾŸçÞ{ÒR:Á_J“ Ç”­N’锶ó„/'4¥IJ£é÷§ã䌌¤%öâèÙ°Y™L“Ó°2{àEˆn.ôéê„ÎèaIi2h i§ã)=ä~Û =dGÔúü$²Õ¢”Ž­§¸O‡Û§?~œP?…á1ý?ñԇ뭅wRa>íkü…6‹í›-ï,¾Ÿá:ó× œÄ—Ë­@šy?ò¦xÇýO/é¥õêöÿãÑ·/óûÇcÞúéjDiÊ©è‡\ôŸÄîB—VY§Ê'ÒKÆh[z|ö:ÜVûjlêЇ}…Àî3:ÊÙþ.`b¨Á€ž?þö¼±q'»ÖhU.¹ ŠÊ­´QN8dåÐ×lå±Ë(×±'fÐÒ«îMcÈ¡c!3Q!⎲"K?Ú>‚ Ë{'±£|]!™Û€ùÁQ{ö« +dt¹Uå³/èÐÈ‘ù¡GÝ!Ú²Z*±(#­®L&눧q„^·†ghÛuíAn(š½µüIaÐA˜æ´Y!aÎÄJBïiÏbä¾v›)Oú/Wˆ½+ÞB(k.PãÚƒ¹ã¬–ºìïf¶ö§™ \EÈÓ‹V~„×à‹#¯Ðú™[Ó3““2T=+iž¥7]arWEÎFñ<ÇS÷¥NòJ©žV mVZ礖þ,+‚Å8ˆ®ˆ2íV\gÖàœãÙ`ð²ÌéíN“)È/ÆÝ} @[†6 ƒ<~¢¿PMµY‘Ørº=²Ësñœ7tÎ=éö'$Û¯<=Î1ÓÒï3½ð×Kýe Òd¼µ¹ÅÇqÝ +c:‹“ ³þʲ¶¤cWJ‹¿û¡¹â)/N‚ïú+KË áü˜¹ÎAÂ=ÈÄÔM"ôöÐú¬Äƒê!UMÙㄯ|‘ ¶*Ê·ºéÆ£]dÎõ†ä¿b ªZÓ» ²šñaQàÁŒêñ¸·õQ ¯ÀjD=f ¨óË;Ô x–&ûVf+£Kõð ö×*OO¹úâ@À1<}¬ÿSIóëy‡ë=q¢ÀÛ#Ñ /·½"ÏÑqku¦»Üëð>Í[l¾ÝÜýùÇÝÍ×ÛßÓÙo±Í2 ¤ QÓÄðê€þEG×.ûAI3faóH¯p‡¦nã0²’À»Ùº)ÁšÄ\+ŒÖÚ©H#½é¨‡T'‹Â³!ßAî,{3‰øuœ àÁ[,âoe™søEä÷çe©+ØåßN^Dö ¦}½¼EÃ3ŽÒá}†|6¡¯Û¼nÍiÑeB9ú%kBrî=¡ÿ\VëÈAQĬ¯Ø•½¼ÎC ³ô¦ˆÂ«A õxîCÙqØ„|¼YxÞh:Qm†3o¹ötw_4 Ãf+™W`ì ק«i|{MÇøAb:¤ñd¤CߠίgçtkôŒx•á%l˜ßØÈ~}¢?9ÁOù‘ï¹>L¡æc¡óÞÑd”Lðû~˜ÈÎÎøÑ燃¿þVAVÁendstream +endobj +1281 0 obj<>/XObject<<>>>>>>endobj +1282 0 obj<>stream +xíWËŽâ8Ýów #H嚪ÕtiF4›’I IØÝqÕ|ýœkçAG5jºf5šÉqü8÷ع÷\û[/ ÿ€¦!E1%ÇžïÍfÔÅ/>M¢Ø›Òx6E=Ô I; ö)Œ#ï¾îšŒ½àª+D5 ‘ëY¬yÌ6ŒÜ=Ž)h½›x6¥ujû}Z'}óª’¬Ð*ÿK”¹V@ùv’¦¤RS™I2R¥² ½Ã›(é«H^déÑ|W¢u«ËŒ:†اZI;[è‹‘tÈMië/=ŸFAä… Ð?hý‚ŽI¿rÏÝ£O÷Ì1ðÆQH£pâÍðÄÀϧ­’%µ¿…ý$ ³ ú è58v—çŒì¯B®¡*ÑεÎg'h'=›eûF„÷ùË…-—¶\ÙòaH´ë‰oÖŸÂÍü¹ÿËóáfÑV—mue«2\#n÷#lAyzûž@v ¶džáfõÓü°Úš –ÜV~ÁÆñ~°yøgªQKî)Ú¬Ú7P,ÕÈni´aªÑ]°,β0tÉáo‚¬!Öá£GëqJ«‘8•™.òž|–¤ÄQ¡ZÿÕÎ5µNG™ÃÕ³ÜÐW«’N†í°gæjO¹bÎ ‚û]tñ‚g¾Ï¶ºÈ´N Áb¬g„¸.(¿Ã#Iàé¢ÇÇPŽ•aý ªpÖŠ*„’q´:¼Z°c¤/µu»B„U{cöŽ5G-–Ž¹ˆd•H^y–ª4à„ÖIr*dJ;p¶ž£ôÅ5ÛÆö::ºs1 ¨MRÔYÈsŸ¿ÚóÀ£?3©(/¯TAº÷ÙFª;Ü1(ö»ƒì%8[‘áñø4ð‚Že,«Èa¢å I¨KÕж9¬EËz`&Ì5ÅÔ±‚å¥|Î1b—ü;&¿[M#b•£}h˜“³F# îsiÁ·5–‘ÚàÜåÍ>/XObject<<>>>>>>endobj +1284 0 obj<>stream +xW]oÛF|÷¯Xø%NaÒ’,Ér°ãðC·ZMQœÈ£x ÉSyG»ê¯ïìò(ÑtŠ ™&û1»3»úóhL#üŒébBçsJÊ£Q¼XÐá£ÞàÍç“ø‚¦‹ \ŸÏâsª5e8;ÂÛûpvº˜Ä³pv‚órôfutv7¢KZe4Ž§çšÃØl¾ U*&F´JNè[ÿ–“?®?|÷éí)áòæpùîpy+—oWŸFMÆñ.Nuý¤kGÏÆç¤HŽÊ¼®Éçº$…(+[Eªñ¹­WÞ<áŽ*µ‹ÙÔÙÝ”ÆcŽ>jÃ&’ÛÞUI^ÛÊü·låh­ý³Ö[¦Ô–ÊTT*Ǿֵ}vø­ª” +›¨bð€, +JlåMÕhò–l’4õ)­RŸÇNÉçÆ‘ËmS¤ðˆ¤àA¥;üR^“3¾‘p$|FbOùµûŒ4@@µm8¦ŸÆdñ9¡L™ÂIЙ- +ûlªMŽ„ð=»Gì -²¢-·l T¤U’Ãyªù `*•$Ú9³.(±õÊjµ)uåC¾ŸQòø¯SÊŽrƒl ‹h”ã.-×î¦ÅCg´Òf“¯mSçÖ^ã|[»…ë@ÇĆqgŸÇµ÷ºÜ"€ à+x¾Dìný!Q©ã%…i£8äAe=W¤Ö¥}â|j[²ÓUèâ`dþKÜ“×q£¶ÚÃ|@]‘4ðgâY‚ûå~ùHh0ÖnßÐÁäÊuŒ¦F+™ïv§ ÀŽ2u.„Û½î ÄúmSص*Üïx#«»É·XÍ‚,öÂaj¶[[{úvZšè%¬AŒ~†jˆd¢¾-²ÛZ?ÛÇñeŒâåŠsD[oU ’±f¥:SM!<…ù˜À†$WmUíÈ)N±âël[_€oÕ{"‚,©Z¾5\³Ùhˆj*¶›í¦V5”#ÄÅÅ_ƒá§ÒÐÂåŽ +ÍÏ•Å­çC0ô¦²o¸( +š£Ð›P‘V¸z˜~h. °ã—ØŸ| ñ“ã–ñ_´æ†gidF±Û>?ºÁ3]#g™”ª<…0Y ¾j åú…•áÄù• s*0Á²ò|\¾‡nÑ¥˜n--?®:Üè$zˆ–ÊQ±F‚n‹¼†glF¶ºðŠ×Œ@ŸÁÒ•Z(fÈ»`OU“hŠðD·¶\ BImÒð”I-H¦S°@K/-¦¸h_O_Äp+2PydWëmaøˆ@f¯EyÔ¶àŒÄÀk‡ ¿i ƒôJfy¡ÿ +‚Nºz2`‡Óµ£&©­³™‡ã¬A¿ÂB—Cèà."oàv[[o‹£­âçI‰õ¦†}t¸áMb¶œN+AðгÇDŠnmØ'‚PeoÚzC^ÅWtÕºüz©‹ Ä©†°ð"»Åsn°Ë`Š–ývz9î’n ¨¾j,r½”… <ÆûMÙ±EäŒûéø5Á…=É>è +xÝ-º‡Î„<æˆmÍ{*³‚­ÒÉ`Ñ•;@ +è„©W$ a¢`½kô+<ö¶;Eá¡…M@vGÑõ=]tÝIyý"R¨ò`òžò@+º PÀ8îfÛýÃÞ_è–ã‡Ú” +:ÝcÓ1ìi,Òai=~‡ ¼¶ÅÀ惪t]Aí8Ûèê¡ëèèjõî!ºza05ª°Ç1v ¾œñ¨èþZ®dð‰|µkÁLÞؘXÔK#ÄØCí+kOhf'¿æøaŒíï–ƒA–¼*8’àìnæûxŽï~‹s|ÅÓùL–¨ë7× >óÊ|Û—2¶u¯D#|ïãï`ÿ¾tMç‹x>›à»(ŽGc6ð~uôãÑ?ˆþ§Áendstream +endobj +1285 0 obj<>/XObject<<>>>>>>endobj +1286 0 obj<>stream +xÍWÛnÛF}÷W òR'iÝ%m»¶ £ð¥1ƒ<4}X‘K‰ ¹«ì’Võ÷=³KR"-¥íS#4dîÎåÌ™3£¯'êãg@³!¦å'ý O“ÑÏñ|†çÿ¤/æsÚ=ÌðzØFÕÑñ4Ôgû4³W/®Bv—ÍvÎo'4P˜ ’é|FaìÞ÷)ŒN7©²d¥y‘†~¤Ÿ”È%iCwO$âØHkx~>9¿7ΆÓ` §›•Dà‡®PjI¦ÞtýðLÞpâ>¼Ã*Ÿ¹ˆV©r>ÓÂîù ØoŸoº¸- +<`>ãK÷žCzx éꆞoBJ•³oóEi•P’f°ì>‹|!j¯"*Rµ$a»ñTN£`È)"$™%Ý%´Õ%n´ÐÅÊÝzã©¡­,×km +@¹•¶ÜéÒë"ÕŠ„Š¿a¡U‹ú;ÀU‘Êq'âMše”ˆ4£B“-„)º@†®l¥+6šÖÚÚt˜l$•0©¶” þÈÔ!T®)28B¶\(ÎÞètÁ ð5¶ XðÇ,:x§`m‚Í6_å‚ÅEù˜ªNèbÒ#_4Æ«þëCHe¸v`'¢tÁ’tY£¬ŸkÀÀ<ûf®u>+q=þ»Lšì9ö*ò*Š*þŽ_ë½XW„óÛ  ý¸ÏFcßEÏ;Ô®*p™Çõñý¯¿¼üðÄFÛ 8 ¦ÌÎFMŽÕè( €ðƒË ÊBv|ö¦BKȵƒ’›iæƒÐèÈV—yÃNÖt/lMpyâ÷§Sn¿©Ñ×ïÐÎï:^Ù‚eaB¿ +z2i.̶B–~sŒÎ2iz$²b¥ËåÊ%£¨ßu›³PËÍ:[ë{—¥ýôÖ¡ã˜_yÞø2‚z.Ça$€x‘cïÂå!=C$ÔÉBÌ£sÊt$²ÎEëJƒFu™¹ÎêRÖq{%^tMxb§Qº®5+±ãöY]®›ÓÓQˆ:ÑV[ÀVì+áé¤[§%¡ÉuÃot™ÅÌ¡®æDcj|ö¨T‚Õñ€mkÏ>G|†^*¯PÒf:~…5fT¶‚»e*Ïô{.¾H{X”vbÆ&vav%ðŽ5x×`$ÕKj´Ê¥âé"Û 5îóbÇH´XÖy9‡¹ZeÛN‚¸Ä59œÕè4€º9 *6MÕvæ;à ^Ç'7%ç’€S~YOŸŠ7¿/3½Ùè^ CZ5'ÛÃó{¶º¿?4ó¸Äy·7»Ã£˜Zü™Å(22‘Æ€O[†™ƒ?Ôñ® 7jG+Äob Yè¼_H´‘ÛŽbëÕá_¡Ò§ óA0 ±¨L‚9~C—©úw"3Àž·²•gƒåƒFèÁJŠ¾u³>/XObject<<>>>>>>endobj +1288 0 obj<>stream +x½WMSãF½ó+:œ *hmË_›JR…ùÈr6‹S{9Œ¤HG3Âñ¿Ï뙑, ¼ÙS€’-©§»§ç½îÇßGCàwH³…SŠ‹£A0ŸÓîR=áf@“ñ4i<Ÿá;¾©’”Âv€Õí¥± gÁÌÛŽ`ïMßs†£Öô¿ÜgóàcßíbyôázLÃ!-Sìc:ŸÑ2±) hŸ,W’Žs‹œ +¡¬Ži-*QH|%‘çj£éA‘ £HĆ„&AÝU0’U@Ö׺’©¬*™´þbQk©O—ÏG:†Á œ”E”°ËTU±„Gï„d.c“©’ð§¨L½&Q”óTšrù*ónŽZš&ÃUö´"YªZa‰0”™^`½RužÐ&+áwû&®¼ýhŒ9Ñ›”¶ª¦•xEš%Ý-±¯x••’3ä¬t•Ò¸hl¹ÉôŠwIûú½Rñ‹Òºá2É´ˆrÙËÓ=­TO±*²òé@á)Úª`Ø‚Jß©5—RöÊ/þ|ÊU$ò¿`íkœòó^`]DA¬Ê”Ò,—ô¿ýp= ŒŸa0Gt6šs|¢:äUDq¢_¨TW¥k¸WŽoØõaô-Ÿ ,`3pé~¤!`žn.ápb?‘ðƒ/`µ`Ür™ +ty{~sç–ïèr6šÓ ¨*’„W¹ð_e¥-;èkV&L€äÒ¤=è¢ÖU1|RĘÞ[oYÕTÌ3d¿¤-É[Jd*êÜü'ˆŸ«¬Õ¶‰|¡JS  18Æt•à6e qn)Ò?}oå²a%{°tâÕˆ BÌ"ÏÁ$)^(Kû[«äSÆ5ÿÞV{Ñî¤YÜÜ?MõñÄ̯ÃÅϧeVôõæ"!eALŸ//úÔ½FÖŽš‚Û=8*(ð 7-Ÿ%gÖ-åå…eg!,³ø¼öOMÐù›û@5ÎJÇUÉíQ¡h/ÜìºÎp»Ç‰¦äŒNë›{¡p›þW6owm¾Gûwè|ظÃçé„÷¹` ¡AKîD»þÜt]ק÷+œb.¸b¶ÓÅÂÈ7r€Ãwr¦†oçÜÉ›ãçcÀìéUüÍ$BÏGßÊìSU9xpì‘Û½©=v©ªÆ€o›‡¥˜#·|ù] ãàmKÜšªºd<ÄÐ/ž$Ïý‘…–.x3Ž¯ï¿\ÜÜýFç·‹sZÞÓ⪷Ñå§+º=X^}9Æ(Âû<ëŽÈ‹ö·Å鲈¸xÊú‡êCh4LuÝ…‹Å+t‹Ý—¥—˜È7b«yÐú}³å›¹ê±`'©/|P8PåÛáo;FÕ™¹½ ï’µ3ñõÐô}Ÿ¡“V°5BÄW«3b÷Sz‡gxÚ!To@B‘…c't™˜‹£µçŒ ÈUØÑËšÁøuÅR‡Ñêüñ~3?æYÊ -QO‹n ‰PLjù 9³C‘îf/’TU…)jxóÞׯ÷ÿ ‰n% -|b®<®ÍN úðå–>ñ†uÀ×.:t~’ñ@z‡Ÿä‡ -X*Êܸìæ‰öDøAeOD/¬€¿Þ@Çh8«[R&¶ãu Eäq]UàV'¤{àIÛÍÔ3^ð6æñ_0Å«§Ø€|XP4„ÛÖ*iÐÏ©÷è¦Û¬O4jó?̾=Gñº9ÈC-f¶ÒÝ= ®»Ùõ¶pæ93š»†éî—%/•™Hxg‚hzd;ÜV £¯–•?ê“ã±Î“b°ë†$kç]Qœ¥-j¬!|˜î>& -7»òí‡ä>WIîE8lð†7xŸÿi¥Hr¿HGvÇXyôÈù”H·Á˨——*oóvx;¥ùÀpøⶠ1ön¤µ_…7 éïb«+¼\Íão3·o?¿{K7ÖüFôÁ$M‰ÕvÐÒáÂx9 ÛÏÙ;Ø|9—‹Uhügõq}ñ÷Åÿ®n’endstream -endobj -1056 0 obj<>/XObject<<>>>>/Annots 460 0 R>>endobj -1057 0 obj<>stream -xWïSÛFýî¿bë/qf‚°ldžÌ0-I Ã(¥™NédÎÒɾDÒ): Çÿ}ßîIÆVèŒdÝíîí{ûvõmÒ¿!-&4SœÆÁ˜æ³Óà„f' \OðWiJåÁìô·Ï<˜ÎÃ`ö܃Édú¬)x ÆpÌw§“`BáëÉ)\œ`¿Ëè~Â8–Î^cMN“ù4­­«[+/£/ƒ1…S JF±-j×ؤéÑ(ªã’œ®M¬]@ïÖ:þJµÅWšLz`«jŠ‚cá›J•¥®Ü+RE %•$¸#]ÔÕ–LÁ{{¾9*¨,³J Hqä¡¢83ØG#>^³,týŠt/ÙÄñå)rî3y4e°qI0 NŠ:õ«žò}4á|î ƒ›#P¿êu‹Êˆà†§éûzÀÏÛ«÷w¿_Ü=u!Øú¥le/û ¸¢aži¶âš¸´É²íh:§V: ð„‰Ð­èöRÖ…²KLÛ -4©AS¸¹…1[õÜJŽ]¾ €~z°/ \}Õp{²j( ‘€4t-¼!ì4+ÊL¡Ù-í¬q$mAëv2÷]Õ/,¥uÎ0åv eαYU¼¨ ™ûJ¶ÁTT¨«-û-p>I©C£=nr˜ô‚¬ç½c3#ù)MC1{FñÍùõÅ­óÓ?ë¼ü „kc ²àr—¨ ŽO;Zol‰ã빓,¸Ò‰”‰·¾#²Kõ¶Ô‰ Êw©AíÔkMÍwd—ÅÊÉIsµ;%عTe‰%=·¶äÀ%÷ÿX(ḭ”pÌ»÷¥é–J¾Ì¬ýÚ”ttMÑÅ}ôáî×ý|œ°ÝãÁ‰åÃ0Ô«ÊÂS¡waà½Ê—J4 4`yù„<Ù÷*/³¬Aö ¹¬–Š• ®nYŠ*”ƒÉßäʱª.+XÁTlϯ°rÙ4öbX¦*ìyMÑYË(—.­€T5 üIAœ妀žïé)¾Ü_hÖR3Kk¡· ÕT+e -á‡é§ÆÕ&ËÄ>J*åãt¥T#C­òË!Ù²§…§ÓZ=¢Æ‘¤½Â èz¿òþ£úøòI ËJ§ú"ʹ'cmBÏh«Ý!ŸF|X]ˆžH€ÜºLáèk ùD¨ªªnÊÿ`mر6<ô‚P¼À_B…}+¾C1‘¤!x¬}¯4Â4—}rµjέŒÛ©ÇµÝ™`þ%3«¬Ç™]|×bžYÈ öSGßË÷ÃËÊ¢…HF¬‰mXÑÁ`H›Ú+™ž_) ßMºHÝR …Ü›-ÐjLñ¨2“ìÔ(ZJÕ÷©DtÊ_³–w#EÏm×ýQŒ7‘x÷\CÇ|{Jú®x…\s"®¶Ò0wŠ«R-MfjŸ§é+,v=×™~Ô tSñÚÜ&Ü9OØ+4pm3€«¥jö¼ÛuÖ* -Û~’¿ß¼÷_í±¾ëåmªÏzñ´zôù&ú|­bˆv[7Ýø1b* ov„§W<»éBPÿ1ŽÎ/£‹; $”¹Ó”¥­úRÀÇsFR®ŒSˆË›ý‚xþ„¢0ñ8z4uCÔ, {‘Ô¿ÀmÝχ‰’Š æNÏ?tl½q¢ìrPà(«4#£UF ¼0|ˆÎ&õÊÌdCßF™sù¤©‰ –ú"Í¡¥ˆ¨—|ñ†©g0Ø×h’máqþi°¯V4ò–~{­¼­Ý2YËËdªnÌ3HnQjÉ—>&çše‘7KW¾Û$ÿ[2K³Ζ7µÑKTâ -ö=¨»Xä]DB^×uùæøx³¿’,ìVw‘3*í¬uÎcÖ~#ðc[bc)+á^´¯DŸD?y|ñª#¯(áï['SšÇþ=áþüúí9ÝVö O_ïmÜä˜Ð¼ó¨Ûp´˜àæ™q|¶˜‹ù ؆§á‚7]Dƒßß]endstream -endobj -1058 0 obj<>/XObject<<>>>>>>endobj -1059 0 obj<>stream -x­VÁnã6½ç+æèkÙ’ÛÉÍM7èMºíºØK.´D[l$R©$þû}CJŠìlÑí Xù8óÞÌþyÓ1­Z,)«.æÑœÒùu´¦t½ÂïÿI{ÿ!YÇï?ü°½˜Ý]S2§íXËÕš¶9gŽ7Ù䶵“ -"ú¤<4Â)} û/ôUéܼXÒÒ½˜æÉÒ‹rÅåö‹9M“ “/¢Ú ~ÃÄ«pÀt‘F ]DqD›ƒÔy·&¥8îÖ$«hÉk¶†T.µSû#¹BÒ“<Ò¾Õ™SF‹’*™B+[Y2ûïÄÄ‘:CR‹])=@.ëÒ+@òŽ!@„/BXÂ’°ÐS¾:È8Bç3Ӏ̺ÙÛYÂ|9Ä£MiǨ'by*¾JÐS–$_E¥´¼áÏPlštßD%mMÙrn¤4¢¨[H÷»V¯³Ÿ•n_i{ûyöé3ÒyVÑœÃLÁ¤Ê' “Ÿñ8$s‹äZ+s/Žx¯";ÁLÞcþd^h×@y&¡¤éœ -|ßd²ÎÓÎð†uf†­­$Ò@¥§1ŠÓʬm”;’©™¨“s3£÷êÀ¤yTÚC/+eUJkÁhW½FŸd˜¾?î¶ÃA©CŠ¾NHØw²m8IOEi´ÄYͳlúhÀ‰ªõ3ŠÝ@‘±À£~ ¸HÓ5¦,{ìQÈYÀŸ.–Ñ2^ÒUß@…]…×oíkM¦>/XObject<<>>>>>>endobj -1061 0 obj<>stream -xW]sÓ8}ﯸfˆ§™$eŸ -]f˜YØ.„Ù—¾(¶œˆÚRä¦ù÷{®d;Žf—¶t¿Î¹ç^ÿ¼JiŠŸ”–3º^PV]M“)ÍÓY2£ùj‰ÏðÇJ*‹Ùrž,.½Hg«—/Þ¯¯&甦´.àd±ZÒ:'8˜NiÌ -»Q^Ø#K¹r™•^Í”&-|meB·žüNReœ§p*£R>É’DY’–þ`ì#e¦ªj­2Á÷yñ(íK‘IªÒÛ7ëWS§×Hl>ß~ ‘çV:~™Ð7¥q²÷·«šýIÚ–fWG‚ýŸµ|KBç´•ZÚðÔÊJ(¸,Գ̩@"BîöÂz•Õ¥°ÈËK[ ®·!)¶º’Ú“)p“>Ý·Q’pR;ÔßšŠD—n%´ØÊpm/­ÛËÌ«'™ Ü~6(±ßÁªÑ²o9Ã#d#jØè'ŸÐ_8ßÔ§«c°·ªbtNQrÊ + €Ó­„àé œâÚj8Â|èöë=žíËcýl‘Ì£vR#åÚ!8®*œ› €ÑAh¦º„y¿Cý LZT.Û)¤C6Þd¦$UíËP²ÀBYÁ®aä!T¾öªµ¡E%_q¯vLÀø_$ˆ»¦|Bä7$&‚CRÇéÌhoMYâüæÈq *¶þp?AQq¬PÛÚÆ›K V)]Bk„Åÿ$¾;ùˆ¶ 5šHŸM8¸Ì©åF옑wu¶ 7/–˜³=áÉ4ä'¹t^¡ÑN'ÎÒN8`\r W¨q‰%ÎÐxH'_Wø|\¢Aº*ãU*Ñg^ëš°•(\Û,˜s­‡N·±yé+£P‡(ïm:6(\‹Ó5"Ï@4VÁ?«¤ßÄÇ(!RGßïîéaô9w'¼ØZQQkøá c~䜭„À£bw‘rÅ/à[Ô¦k_'·¡wƒ4…r³ô7ׯEB_qëgÑDp\U(,ópoR>W4£ËãïìN¡£º´®MY×ú¶m‹âÝùïHÁЬ´Ù#Šº¤žë¶@¡ï™ÉPÉ`¾'º|©+e‰>>•vÈÞ5be§ÿ«B々©uh <ð¾kõ<ùSéú™š>„ {@ÎHŒ8þ"¾®ê*jY“Ó m.`;¨ß<‡¾Ã²×sàÝ°,3hµ#v -5€Õ#†¥¤GÍÀ±Ø)ý+Ï­ü1\œ1KÆN–û ™\éFëjO¬aò‹³É - à¢ÆÅîâ‘!ŸU‰hÀ¡~aæQ£½±¥.˜ØHLiÎõI¨RlÊ8¯&o(…àóŠ0¾N£öcLã§A7mÞG¡‹º›°RFðOÆxÆÆ蔵—eGÑ0Rm¬€ -¸wl«Ï¸;̪pºBÃó©ÒAÑRX½md7kôx¼LV¼V!’‡ÙbÙ$ÑF^v{Hëìaä .ðÈũGŽÀ¸©K ´eíñ{ˆy„ ›í “Þ±ÇpÍXBoÿ¬E© -%óOº1øfA NúkzžK»5ý2—µë› yµ˜Ó]¬çæ×7iŸ°¾ÄL+q iºÇ(lXJ@´*‚ñb‚´"å­Ð.6*:Í<Öû‹p\H¡¥Ý»kzCã9ﶹw}™{\ºóÚ âFæu“¸w¨>LcT»Û¡*‰ÈÏZ z Ý-$‚©×Á¹Xž¢À²'ó„>…Åb8ä2«E«‹@_šÕ"6‡±9æ]'6Ã^aÏa÷ʃ ¨ÇqÏ,ðÊy[g¼±c쇮b]¾i{6Mͯè2,-o7Jw&+Æ =VÕ¥W˜¨‘•m)¹Þ*”‹,t§YP—Sô›fB÷¥X¢­,x%cÉÃçm%: šØ𿢶8/‰¡Uº0w~)SóËTÑÎA¥³Ý&tt9 ÕUäea Àq'êï PÞËšÎÇhßüEˆ¿ -Ðÿí'‘®ºÖQsøo¨^G.¾Hi¤¸^GœV¦ |A®®ùË/¢ÿíöóû[Þ§B€w&«y -S–oŽÛ ãå,èg3†½Àgçø].VQgÓ~ôÇúêï«œJ¸endstream -endobj -1062 0 obj<>/XObject<<>>>>>>endobj -1063 0 obj<>stream -xWïS7ýÎ_±ã|(LÁ?)LÚHCÊ4œÉf:òl+ÜI‡¤Ãø¿ï[éd›kÜ6…a°ï¤Ý·»oßJ{êãw@§CPVîõ»} úÝ!ŸâóVÒlïb²×»ìÓkšÌ°ãä rÂê~Ÿ&Ù>5?¯èZ”’î¤}Rþ/•Ï”=SóÚ -¯Œ¦™*d÷`òu¯OGðtC›ýÍóá {²ý¼Î-ó7É ,–•ð»ŒÐyá¥Õp÷$Ijo•t43–‚csµ_à…Ê"$aå›Æ^úŽžCŽ´rT䢢¥ÒS¥ó6ÜBäfùÑÏ­©«ÍÚ—¡¶ó²0λ­ÅœÛ+×nšW;ÓÃÖHs­t¦¨C¹þ17/ýGïðƒäüH R9åÓ&Žuºv¡ÓÒ/}XÅ)^Ûm"jgA¢˜v½ƒ‚÷°gG*k¼ÉL‘¶¬}ìXo«l+ÇÿnßEú'ó/ñô.i0ˆmt4 ,¿™!;µuò¤@¿˜!"'©”ÙB]éP‘ÇZ¡,x#<¿&Q!ŽÊ*áÑŸ"S…òÌs¡ó¨ž0êëÖÊÌ«à Ž¶K)óÔÓî1¿¹òä¦.ršJÒÆË<:®5'ÔÔ)à’Î÷J<s@®Á!ìqh¯Cš¼»í]ݦÅØ0Õ¾ -8Íj´XYë¦7±Ç¹ÖáÁêLU¢à ¹JŠ¥çdt±¢%Ún2FaWíhîD9ô’° »¬jKU$òœ>*]?“««ÊXdB>{©y)²mB®CS4)%UMé™ÎÛ:ó5‡Å+7šÔd¸ƳB!d}"9bZH6m¦^(½Ýml|G_ %féèZú‹«›»Ð“ ryžç “®KCsÞïjÝNßY­3n_V¬(Ư¥Ìƒ `Cr@ò‹TvŽt3Ú&öR<„õ%˜E÷û*Jeïò§†ÆûÄ+Z¥ÔÐkÖþ^¡¦øü'ÒuáU›Ø¿?@ 2ª ÏÅÄr‹&òçšÙ„Ý^Œ7„+)Âè -´ÏnZ¶)G»dÞÀçŽé0ŠN i%,óôÙäÄ`ÊÇêw¢Ìu€N3–`¬@ú¬—¢îrcµñ°"õܼдÊ(íIùĉ6*ãœjXRqb„^m3£„N0˜é -6~Ø0%=gÂ2' ÛQL–ôþ¹îJ·¼r’X}à âè— =šp„ß¹ÐGÉJJëaÓ«©d¿¡ {—¯ipÚèÝè8Ê˨;êÆ£Âö¤qT»†’HòÆlƒrØ›éAV^¦ç‰ái<7lö&íárÚ­ÌYYàFLM•4twPÞ„+ç8‡øÿ ÍRÓ“°ÊÔîojz¿ÏDA8”ƒ„@pïbòA>n¹:ð µéR'9cëü}WpØ<š*ð÷»ñE«dasS‚m ŠRŠHP "ƒ"Ïc“sås&«0Ö!4ìpc½©u†Ý˜,TQ°¤mô¯å8©-º`è°‹Ü”¬IŒ+6w„ÕYóªú±×á ´ÓJ4÷Š¾òì%ûg -ŸA¬"'ÙUJ *ƒ!a2…yÌÅKådòYð¤ι ô|\Ž›ÓhîëàÄ/Z>׋™>`+f;;Á€Ä÷ÀWäÈAg ë˜EÜ’ÈO¢¨9ûh:hy`œK3Ÿdç8’–Í™8&¯åz;ˆÆC˜3¹ÀcDºž)œ4†ôX ûœÛ´>Î6>`¤IæWUÙr 8[<)Ö@( ç:Ž°^߶çë f¦( j¯°Œ ‹5>Æ6óµ ¸¸âÀ…Ó÷ÖýâhØE:ñÖê M¹†¹¸é—ˆ´g|þî·«ë÷×çã÷oûý_èçp/Ðß5×.h­5cƱ`kyJGëvòMÃ#6üAjiUFãF–fe‚ËÑß|‡Õa€ûQè1Ú‘áu*ÚÿEýåæÓï>Ý|¾};˜2æ_c£Žq†õ ‹‡´ Æö û_J‚`§R5£wp‚kâÙˆo„QïÎÇçtkÍWL_8ÉÂi"Ðœ¥ G§C\óýï[rÎÖŽO»§'g¸‘ÂÒ°ÏÞOöþØû >"]endstream -endobj -1064 0 obj<>/XObject<<>>>>>>endobj -1065 0 obj<>stream -x•X]sÛ¶}÷¯Øñ“Ó‰dÉrm÷NÛ;qZÍõW-eÒ‡¼@$$"& %ûßß³ P’é™ô6¶‡÷ãìÙ³ ?ÓÇt~B“3ʪƒÑpD'“s|=½à¯'øï4-åƒÉdxÚ~5?8þ4¢_h¾„¥³ ü¬ŒF4ÏŽ¨÷çËýãÿx¼ÿüðëhò;ýFèZ;“Ѫ4ü¬ŒÚéœ/¤Ê’*]-´ód—´}óÝüÛÁˆãÑð®~àaœ±‡¶R¦¦¶Ζ%[;¦;J»²5Í´[ãÑÿo3g›76S%Ý*–®œÝøeC³i—kbêÚÛ²‹äøÓ)ÇÐÁÉg9 ä Û–@FSm -… -’¹šÞϨRYají·8âˆ6Žì¦¦øzRžDŒÇ¤v­‡4/Œ'þWÓét8L†'ì5cÐ𘂥ù‡‡ãéú€Ê¨`líiS Z„3¹áøàE¬û@S‘Ê+S£¤NëhcPÑ\#m<Õì’9Ö!;.¬¨²ëùOG>ÞÍ(WA-”×p‰´S:ð­¼·™Q ÈÆ„‚4@ Ä©òÜiï‡Éâɘ‹ŒîáxÙ:8vÔXS¦VV*g–&“¤ú8¿—(Ù Ó<–åhtü «×-M‰ j.&Üé̺ÜSn¹nÔ8»6¹î%ʇ»2rn^Fhi]£’jßÎè‹©sð 1]³\7Þ@eÔ¨/^†51€ÜÀ̵Éø™êW·R/Â&­sé²&ý¬ªñ㽈!pª)wäèM´QÌ.…|¹ïzyƦ㘴H½D:ÑWh‡Ý®†Ž’D„»(´ ¬à4eêΕÖ>µ }=ZEªç¿Ãxá¬Ê30ûë;«¤ë¶Ò`)8,ÞXzºnä µ~¥O ñ®P?ý -­‚pQéùtú{«ÑCè2¼U#°Hõ˜*âCN‡Âw Òņ'%z‰ãÛa£ý¾œ×€´ç9¥ÞsºgRàŒ'À‘dä8£]y@™7½3ïr>ÜX÷´r¶mѳtK}"•‚x,[ϦñE¨Ñ¾$ûBƒ"#oVµ´Ÿ°Ë^ ‡t%l#„@0k ŠtÀiõ>7¡®)«²Cû‘'ã‚È›Þàg*å^Pç}ûÉ((³6ÎÖWSâ/…¨Ön쀿£=9CP}³a,Û½T·tSHÊÕ@^ͽÈôD4IÇ»ÔߋƬxz -澺9žÒT@½e©ìˆì[ ô¢~£ýòTó Àˆ˜ýyùxM·÷¯·¿¾“*È4JÚNþYq_å›Ðé׻ᚆʦ°Ì žÆ{‰mó—)á tè…l#"œ©í6ŠƒO©6ÖG¨«ý<»~”ø{ïðy]½R²Ú·Üƒß[ã8‹žâ\lyV(}ôê’¶\Ì°N,4Hë°ˆw"Áór)_:y)@1”¡jkž®nRM™{¼ñGƒñÏ„ª ¼cLûË#BE -šô‹3¯¢(Ú²l}P·™‹qé$J\•â ÓI8Ò¤Ìr©yU=Pß.¾aõî=§ÁTz`9b]ªÏ õð?(¡ïgœ"b©7H¦=:Žã6ËpKxÂ2•¶ˆµ§çœï8q}Á•Bn—IŸ–û7"ÔÉ -5ÀU| &cé¡ …r*±çbl@„I²û3G {õ(y)°0åø–ăý-íõlm¿«ý@4ëEÀý6ƦŸ©jÑߘx3X«’/ñ1öÞ¯¸Ã¤*éÊ8>ÃoS.&tvþsü½Åìòöê’œ•"~´n 5\#T†tн08?±®ü£žŸÏÏ. _8}2f#×óƒ¿þF{Üëendstream -endobj -1066 0 obj<>/XObject<<>>>>>>endobj -1067 0 obj<>stream -xXmoã6þž_1p¾dÄk;A^E'qî $Þ\¬Þ¢€€‚–h›Dª¤Ç÷ëïRŠÜq·m[ì69/Ï<ÏÌ( i€‡t1¢ÓsÊʃëäàóÝ Ï(YâÍù%þ'§A0P’öOû£>%kI÷ÿü:Oæ´T…ü”üŽkg4†k'£ \;JÖÊù÷„¿׈¢ØRa2QËœ”¦‡9}S:7G³„Îú2–Fì -/ƒMçmÝ|IÓoÓÙ,IÓù¯ódòp:JÓÛ§é¿'Oó4$7ïc8"¡s~4 “!bæp2£k¡´£áOiœçV:Ç'ý£Rdk¥%iQJŽ u¶F¤•PÖ…¤?ÕbðÑ5CB•´KcK¤&ëëé×¹7û!¢Úp¢£U¥ô - (©Q¿==:ïsŽ¦5ÕÛJe-ŒæÙQ¡žå—.¨«ü³pžÚéÆT[«VëšÒ£,ýDë«KzP™5Î,k¼¶Uçl8è_²³·Ë]ÈŸƒ¨*þäDY!ã}F Ü@n±õÀî<¡ÜŽn -Ρ´ÈD=˜i)¹yü<}DЮÙ3ÓŽ4W—±›±ç!f_žwdh‘wd–{‘`Šaff¦¬šZZ&†‹Ú~˱ú“}¢ (EHÖnÉ­MSIϲªÉhð,ËÕ‹Ê¡ ”RËh¼âö¨²3V" jbV/ÁÔñM©UQ˜Í[¢gÆB•A,`ß~²ô?;ð‰¨Í]€NVÂzŃ ¢¦B -„h 3W!t–|-ÁSï°GÙÇ3ØÚçVRKëuày†2åR›Zzº(–`&B-ל /åkø•ÑñB.$`K?E‹ ì]¿c”D­ÆFÕë=¹Ýgô ´XÝ£þkËp*ʵqu<,¦mhVf¹”6´±Pc®›|­¥vœ˜oÜ÷>J6¸ûáãÓä'n¿>|ù)7%ºèÏ?8:ÝÜÿr;¡Ÿ8l–Ã.\Oþ1ý6¾O&O³qò£H&³Û?{6M¯Z£Ýh£O*«tíiÞÑŒ\SUÆÖé§XF±çtçÆÖ„Þ¶2ÇÜBìêÎ?½qÚQaîEA™{£Öùbh 7ÚFeÁK‘{±ã ¿ö“*C‘}ºÞBKÑõ±¿¦˜,6nrÙ™<¦ESóq ;ËÛhŒj±„ )ßÂÊ‚34 -4Ö-…*Ü_É>hm~^œOïpŸa=4†U@J8g2….ÂiG h½Y DE›‘™ZªÐ;ör¿áÙ%eµ£µÙ|×òÂbIÜ ³BöøéEeÀx!×âÅï aR!§eæ¾Ã[ƒéPŽ†Í™³ôÂo©æ¡o0$§cR5\-á× ÌÐ@ä9‰¨}fe?~ÊøiÒ!áGx±[× -¤DQc\­ÖìÑSl‰Ú7Ñî7š6kØ¿ã%[QSè¯3eî ·e}õÿ·Ÿ´"ÂB€)¹=Ýݼ-[Æ×I\ÒÄ{φù\0ž½Sv]Ë—Ü‹‚±Øx–ùiñŠ[ô÷Z£°Y‚~™Ýœ,댑:ܘ8¾DAΘܢPÿÁ¥vR„Õ  Ü’y¹Å[Þ,<=¥bNØ%ÓøþÛøWl¦û„ª¬ÁF"a£ÛGyåb|÷ö W<‰Ëâ€ZÐlùj`^WÁVyñ²ñѽÏÔ\YhR½|gš"Å<÷]ˆsèåhU³(TÖãÕŸÊ×°–úqNÞ€ -/£‘ß Ñ<ñŠ7•%õfMQÌ¡9´½9ûrÞ‰±9’dt²°Ñ¶¼6F Á;P±R„wõtMÆò^Âå¶ÅêYn¹Z†¿¨á4mݧ©ÛºZ–iš5XìtÍ«®5…“5^µm+M ¡K¡C¥Ò”w´R¢Ý»4ÕpíB¶ÙøJÒ"må -HY„;WøÀà@?z+G[æÒ ®ŽW7ša‚¢†5Á«òðÝ€µz»AIÐÔYM(xQ+þ,鈵‹}pq»æª @+kš -JªÍJr¬}c¾;ævõ—²¢Éã2Ø yOHo–]x§#Þ)ÍKï1ýÿUÆa£Ðœ€,2›B§b ªmðÙà@®7"Ðþ‡+ëæÆ)Þ0ù½†lÛ£løóÝeû­><¿è.Oéü -ŸîùÑ|üp=¦Gk~‡¬éÖd cí ñ½“îøÉÅ¿cÈ¿÷;†³‹³þÅù%~1s£_Ÿ$ÿ:ø/¿ä¿endstream -endobj -1068 0 obj<>/XObject<<>>>>>>endobj -1069 0 obj<>stream -x•WÛnÛ8}ÏW ’‡MD¾ÖN -ìC.î®ÄÍÆî,h‰ŽÙH¤*Jvò÷{†”|C´›&H`SäpæÌ™3£ŸGjã·CÃ.õ¥Gí Mý^;èRÿbˆÏ]üå’îA¯×}ûAç² O\ÏŽZŸÛtI³î\àCL°ßnÓ,:¥êç„°ý¢5iSˆBM…!›ÉH-^IÐR¾ÐJ$%\09¾k£Ï³\éBé'Š–"Q!óàÃìÇQ›Î;íà·l7­ÓlÉ“ĬÙ|i–HRIRÚ"…´$’„Ì‚Š¥´ -©-¼³ŸšL6­S§Ý >ö@t9tAçK¥M?<<ŽèäöËý'-‹µÉŸÙ!:ÁzÊM™ýféöæÆq Û<Y¦E*ÉáÚéo.Úùpâ a3Y™¯dþžº=¶‘™¬LD¾cÎÇ°·`M™Gòlw6‰‰DbóÕŽ-‡ÏÎw†FÆ2v„@vHé()cÙ@Ó:\þOþ¹º›'W³QóÆñäæîë툆aíafå>/XObject<<>>>>>>endobj -1071 0 obj<>stream -xXËnÛ8Ýç+.ºrG~ÄuÒf‘L4Àô1pÝdCI´ÅF"U‘Šã¿ŸsIJV&AÒÀ|Ü×9ç^ö×Ù‚æø^Ðå’.Ö”UgódNëÕ"YÑêê/ñÓHÚú…üÉè󛇳ÙÝœ>ÒÃ7­¯ðGN¸e>§‡lBñk¯´%ÛÖµiýI_Íû‡Ÿgs:_Ì“+í“ͳl°íåå%üð™ÙÝŠ‹`ì|¹æ³ûBÂ𸌋“Á1¾âõÑ )K®tÿDž7ÒZ2[ÿÉû¯²Þ$úH‹Ëhïb…¼ÀâE²Jè³ÙSÚ˜½UzGÛVgN)tN–œ¡\Ö¥9u"-%/ð…z9×`]êÜ/öµþº¨RñÚg>w™ø€¯‘J'œÌI¤æYNéˆ~(êDV(--Š¶SÖ!ˆS5ôUº›ûoÒ¢ÂâãD%2ùÃGOøÚš†$®ˆž..’%Ì Q™$w¨%)M¦–àxß“Ñì ÊÚÖ ]—ÖLIŒä\Ë‘9ª¤+LNéö…Ê -x€R°SÑápíȼOpº.\Àö\"® -QÆ{p%â„çÚ8Ò Y©¤v³PQ*àY*¥¦zÆoAƒrlF\Láç«ûÿþòùÛæaC¥1OmÍîHÍ%̧ìÚÒ-ÄifÁYS¶œ±W'¤Ë<ʸ¸ëŠ{íCÈ„•lÈæè|ÜÚ ý%Q–o3ZÚK,á_Ÿ×à(>Ç%¹Ñ’sÿïí÷Q¸ ÈaÔ%ôÀ%QðëkÓ»\s5K“‰ŒNµtSjuÉêrƒó­Eu°·{O;îǶcª¥MÑÛ°°Êµ`–<¨n̳Êá„x6@$Ë|‰´ QWâ€Js!2•–‡Q´Jÿ”Hé' Âbw!«Œ“Cj!Ò½iž@ž@RNû¸Mhm òÕ¢šÐÇ÷ãÒþð…|:F§jz·´W¨$6pÅeÅâ´öìÞ+Ç$’Cdtv;ön8£µÈž¤³” ͉iLëjåŠÖ†ã@kH¤ã°ä¾‘ȃJÇã1%¶³Øø¶mXÙ/¯ +¢•Z®+K­©¶ƒ½O$1d(Ès•ÕÚõÎ`-â´GßÀY–5#‹ÕªWŒ¥UmpÜC¢B±Ld ÕùxeBc¨Z)Œg/ m q’©·IÛQÛMa/–¸ðèl¹ tÃ8ùZóÈ`£Æ‰Õ Ï, D¤j\Ë-O%™ky€`Q½fƒ;¾ùÖ[38:jÙé>/øíT€lýÅs5lb7BýÆ ‚VoØ„ýaÏ*ÓÆ*i;Ó2cóaïrRL$fÓÖ_½ÅÈ.PwùO,צyÊ€ëUÚYêOðæžÃ)þ¿š‡4‚IÈýßõ­Ï•z†¨…¼ˆëBb®³ðå¥gÍŠ³Ùö»àx:¦“þ[‚ýp²Ÿ«åÑïGÿ¡Ên¿endstream +endobj +1289 0 obj<>/XObject<<>>>>>>endobj +1290 0 obj<>stream +x•WÑnã6|÷W,üÒ`ûlÇv’}HРõµˆ‹ À½ÐeñN"]’Šë¿ï,I%6ãCQ\.‰‰;»3;»ú{0£)þÍèfN×+*ÚÁt2¥Å|9YÐâö¿ÏñßJª›ÁÇO šÍhSá‘Õí mJÂíÓ)mŠ«{G|‘ÍLEs:˜®)©ß$)O[)<=WÏ;º¤g¥ï–#Úvž´ñ´ÞÜ?Mè>ü¤Ò´Bi*ŒöÖ4´Ô9™Žþ°ù:˜Òxv=™#úÕõ|’®ÌW@Œ+›Z"ä?ªíZêñr4_.³;+:šŽB{r¢Ý +ò†*c „$Yxe4áËya}·‘¯%>IÏ¿Ðpoe%­•œ£óÒiט­hÈìÓÈÁµÛ ò¨pt†|x”n8¡§ø š&^‹„'ר]íI”/@'v’Ì Ê`ÖÒÞx©½Bœ–¶Öœ´' ÄdqI_Ñe³‡&ô§“x%Ú +Z‰Dè |MN‘p¤b¡40Tç}¹:Ô2·c{Pºº[’±à2‹Œk¡Î_>pQ¹„ø(©1rqÝV£°[ä* \(18 +¥Kdì¥U¦T8¡‹U£tÇŸ³ðf¨ô{’A•±%2Çñ[YÀb|ÚyÅrÁ]”Ñ–I&!Ÿ??LÈѨ¹å`­Ô%TècIŠÆ™P„·ü³\â‘C†›ªÔm’”Òd¤dDßTçXXî!ÑCmˆ,mé×û5Ê‘…|ÆE(!Âæ£Jq±F̯‚FÌA³:EY A®i„G¢‘ëw… ÙçÔ`wŽÚu4Ë.ö(„ŽV€Ö ïe»G3žqv±è!Ѿ}àÞD6`ºRãá‘£nf@s‚PÄÅÃa\¸#6ç9Èðè̬¢'B»x.ÁKí‘–ÔBÐ^º é1â©Ðj§l §‘YY¢±R”G†Å½Œ›'v‡P ‡bG°æE•(ƒè~º£¦“ñõ"øoâ›Ò»”ýîÈÓ)4žßLV½ïŸÝ»ËíŽzb©'ÈÇóÁ5Ší Úo»Æ«=¤õé]z2ÜÈO ¦@®yfÒ$†`b ê/t1߆_dFhöè,#ڹתÌ1~"¤t®Ÿ*z8R)+àܘ']û9«F¯ù~L®1Dbrl8‰ÈõçM°§~^T=R`¸Ûo;kСDuJ ¹büð7\9ðõ†~Ã=‡ók Ù½¯‹“¯föÕçÌ¢üŒ,Ý!´6.$¬5̪V”yü®ÆÔˆ]ŒÞÔjQ•5íEsƒV  AÏE¾ÃàÁ…¸³0ÑøЗrÞŽº¨­Ñ +>}*¾¼ß)\3V9Ž¦GàØí$üëlxðÝ'+Y‚$ª‚p̨Lxk†1”T»×ýÇa@ñyéy›F©Ê§óGîpOÔ:>€‹ï.Ry¾obÄØæ$PÙdó_®”.š®|µ0Æ|£³I¹jçøAÏë§ô8çi%¦ˆ]Kÿðøù)Ë–•Šv‡?¤Sy‡2Úˆ‡‚«8‚s¼;3èu +dð¤Â6¥w.¶c°‹9,Öëqß~!ÇKÛEzŠóÑ"ÁàõY?÷K_\ÐRëÈx´1†=4Ë5í\§ëV bŒ¾…³ ñS¸ò +3_¤ÂP-ö{ q$²±4”lœ=¶ñÃâTÙQ;‚÷wxF×qt…t0ˆ°K&ƒŸìõÁS¸«G¯¾vV’žUÖxb6ºÐD?ÂŽú.»yÌn<_bÜÜŹñXâÀ&€×‘°}b‘–N5qAc‘öÿM0¯©É(΋°ÒÆ°˜1‚vW+wìrüº2 ‹XFqODï‚ÑdÒ>ϵ:iŽQLï’£r±šJ…Î ~ÀkÀž£²$ÊD€Fü.{nM)ö+ ½ô“Ä>~ºM¯’³^1o¯iµœEJžî{¸§ß­ùŠW0 Œ¢cÇÜ6: ˜­ð^ŠÆ7Ó;ýÿ½1,V·“ÕrŽ5·Ï¦ >æ—ÍàÁ¿AQ÷Öendstream +endobj +1291 0 obj<>/XObject<<>>>>>>endobj +1292 0 obj<>stream +xTÏoÚ0½óW<õR*4 è±ÕV©‡v›@꥓8à’ØÌvšõ¿ß³)-e;L‚òÙï{?>û× CÊO†YŽq²¤IŠbr•Ì1™Ïø?ç×JÔ±0-²dò¯Âd^$ùiáf9¸¼ Ë°¬z1ŸaYÒËrØo¤†@Ù(©=›”R½HÇ7•i…Ò£^U+kz'Ñ(ç¿@èŠåÎI á½lwÞÁˆ²”.lÜç¡4üFø·-Ê_,Ÿ££lLŠËjØ«¦Ai´¥çJ‰Ç»‡ˆùBX¢YéLó"céAú›»ï hÑJ˜zº$ÑëðŒíbïp¡ÝQ7+פ.­¬ Èö`¯ü&¶qþˆÆ—ø6êŒlWbÕ’!ÏÀŒò"‹¨çs¡¶‚û®ñ*ªÖŒ½ÍýÚÃI8rv!Ú• ‚nÏÜ¡åFiêŠÃÑÀÞ«wÐû\°Ö÷… >[|¢QKæÆqb–aÎ>öÁì¼2:dåÚU£ÂÁ7áÈÔjÝñ2à†6Á‚“x¨? §Ì4ÄSI/TãÞü™¿þ¬à]2#Ïâ\\ßß\ã‡5Ï’gð«)»–W€]ÏÑaùh–^ýßàNŠyRLsÞeØ,˜oËÁÏÁ ‡óendstream +endobj +1293 0 obj<>/XObject<<>>>>>>endobj +1294 0 obj<>stream +x}V]oÛF|÷¯Ø—"`1’¬ÈN>4A]híà¿É¥tõñŽ¹;ŠÕ¿ïìeÉLQŽeñ>fgfgùýbAsü[ÐÍ’®×TµóbN«å¼XÓêöŸ—øñLMz°XÜ«éƒÏ›‹wŸh9§Mƒ³Ö7·´© çÌñMuù¨ÚRQǾq¾U¶bÒ!ôÞoþNû7yßìzU,±óò‹k;åupv\³¢Åb\³¼0¬Ùì˜òÁýž=õm¾|£è(*ó’~cQe4ÛXÐf×Ò \O +õDÐv+«QC:1ؘ´2ì\ojA:§Ùâ:ãó¬Œ9P•`bo”S:ï¶^µâNEAƒLAµ,¢«œL­ „ªZã µWÚ¨Ò¤Ey?X¢Fã›è• ûÉí¯çK±RI;Âenô‰ƒR®éñÏÏ(NØ)Æ3–k¨ö¾feöÈ€¤¶J[ü®å¸nŒ~aRt¿‘㟚§íxšTf=ƒO;µXGµ©Ceg'èY'øoTFÎAÒƒ<4¸•ZuÈB” >Â5мպ3ö•\z¾ }µ#èžcɽ~~N¦ÚeÑ’·Ò pþ^]OYú-ûtÀÉV€4¶Î¿ñu  [Hé\ˆ&°WëŒ:溠¯ 8¹êh7úÞë¢'L•ðU£B„¤ÜÒýÝã)±w»ÃW:”=P+U×ܱ­¹¤ =`c;-葱C\ì:, W; )N6âÀÐ7—éÞíÑW‚ 9AÛû ê°É*TÁk!¯žT0¶<œ(r—0ÙiKɦÒ'Lƒó½ù•Bv*˜QêíV Ù¨*¨SDÊpöàþÌgŒU&³aãäöòõ ý!%Ô^£ô }Y IrÏã +™«PÐïXƒ¢²Ž`gÜŸo5«ØGô T.§ +‰uÄ)Rf’›øý ÚD‘¼<ϽԕqÕË)ñ¥äéìZÂ]û€öš)ôÃÝ›PLóöœnB.ú'……ä@ŽÁ@[N1×"‚5xh¼kÑVc†Â¸@ÃMU8"僎*b5(BpWOèFxÙ@6Á[(ýèºÎùØ[¢®ää´$˜ÏôgD"oã‘À¸[a,@Û„æÇ‘É ÙbRUU ÔÚ#´ ûR(©­—Å0.‚úTK­¢*èIDÉ>ÊX㡃‡åØ•dšÅžïöCe\˜ +NÐFú² [±[Œ<ñØùô++ŽÙ÷Ê •`ðlME®]¿(>‹[„!:a@³z^Aa¡O ƒñ)Ñ*!{o³éKä&7ª7ñê?˜ÐHÂãò¦‘>ØèžQy˜¥O„Ñ‚CqTàb`\cÐITýœÍùñlb3'Û"Ð/t§Læð­‰ÇuOBz©E e/Hú‚ðy<Èvn4C$‚ïŒ`€Ùj×*áÁ1 >Ë÷Ì­ØL”™ÖßaFÿ£[Å/Š®ç?‘nñÝžV|ÓÎШ9'Š…(IÖ-2õVB/®½2“ûÎÏ,±Y"ßùZR +·jkuìk&°PhÎx¡÷ ò–qfXϵWäÀ¬–MÓÿ›ç} +ºcDuÄ(>µòÛNÚîþßξ=uöê:“™):¸Ó þj}[¬?.1Æ0Àóµ”ùÛæ⯋T1endstream +endobj +1295 0 obj<>/XObject<<>>>>>>endobj +1296 0 obj<>stream +xWÁnÛF½û+ºÄ$Y’eI9ôà$N´®ÓZ‡P,É¥¸¹Ëî.­¨_ß7CJ–h(#—»óæÍ›7«¿/¦4Á¿)-gt½ ´º˜Œ'´˜]ç4_-ñ<ßהËÂ|u3^½¶0›½²ð~}qõ醦SZç²X-iL&´N/Ký¤Ë¹ºté6ÐO}£ß®¿cÓü¸i4[Ê:» …kÊŒB­uF©³i㽶‘Tšê(:ÊM©ñP(¼bë"¾«*gË=í¼‰Q[|6¤Ð¤©@ª®K“ªhœ¥ ý“± +¶1¡Ñôz<ãÐß.wKíùˆ•±Ýù4¾ûz×…=O÷&õ.¸<ÒCž›T·G|{ËÁ @–¥ÛJKƒ<8ƒ^X¯U6RÿG©J pµAŠ. +PÎxÜRöŽ¦à‰y]O[ÊÀ×›\mõã7xtG”éÚk$¯³—Œs™.U•(ĵÀ@îÉ1CJö´ñÊF¦Lu§Ó®Ð%õxÓæ„Ëx§ácúœÓÞ5¨Z¤³%ˆh¯Ã€O´ò !ê²ì€‰HP‚Jí{‘ÕõÊÜw¤ã,!š2•dƒÂ˜¶-õ ü Ñ;« ÕgI,ÑF(¨È±•™îIqJ[ëv´3u›èNà +÷®b&»$úÀ!(Š¦Ò’·œ4vSb6Tk2TÊB„¦ª½{Ò7”—{ÎÆK#„#·šsy\´N5Ü'¯õ +š«¦Œ¦Æ–ƒ Aî3þCÚ&&¸'0rµ(( ?ÂgÙmP\¡ù/Ç8Øß@Òå¯%tUBýKU³“d&lÅæÕ¸[h»³ãþlEŒ–+©*×°c7L/•DK"˜µ÷°ôuà) iu=ùxÿþà¾]v#øÅðøôUï9•Ä«.#¦ß›¥ò4Á–ŸTÙ°ùþÀÑ%zc,„‹ F¬ˆ]'E”*Ð:èÒg²sW8h®Fñ`2Îp^/㎫C›ÂIì î¡th“ ²;>/XObject<<>>>>>>endobj +1298 0 obj<>stream +xmWaOã8ýίõË•Õ6Û(å$>Àí"­´p{j¥ÓúÅMœÆ‹Ûiéýú{c'´„ + ‰gÞ¼yoƼœMhŒ¯ ]OébFiy6NÆ4›ß$—t9¿ÆïSüXIyxp5ž'³S.æãÓ&³q2=ub~…À½÷˳/74¹¦eT³ÙU2§eFÀ4Ó2>ŠWz-•?_þ›—4™Ä7GÓk¤_fÃ;OΠ뛚|!)ÕJVžD•‘“v+-Urc¼^’ A)^Uٔ䭨ÂÈ©ÿägÚ*-H+|äBþ˜LŽÓÂê= ­iñxÏ(Æ4š\ BäNMY"“KèÓP**äôáx—'„ñ…ð´åZÐN!ÐQãTµ Y(”ni@¦öÊT¤ª^BW®“ÔTyBO…À¾PŽðÍÕ¿K ô€ŒV¾4Ò1¬÷(DšÊÚ¦uã©2ï`÷³2m.IŸ"ÅŸb-1JBË÷+S©¶20Ì7Æ›–‰õ> >êW`¨—º0•i,‡¡=IûÆtÁ¢ß=e2æÆš]]AÕë½—ŽVÃ#NVç±TåKmœSkÝ–åLÙ)ÇÃ=ÕÒæÆ–´–ÞCB;å =h®„(ð°“5•ò Â[¡Á:+HKÇø!ŽéørÎɵz–ÐЦ¢q HB§’jk€¨t*¬¨4h`*"rImÁ]××ÜÞ(™pöØQ£‹ËÈÓ“>qÒG÷û·°Qª™A6†*kÀâæ9oUêIÇP…JÛX)²/;« È”² +í Ól +Û™Ê dT'·Ê4®Ç"*wº['ô=§=|$+Áé%[ £Y½Ïoi/Ý`uÎÄTá<70WA²Ñ5yŽN‰–鄶٢J%Œ²‚ ÜÞùí`¥÷[sÿ€|ÕÐœ°rëéaþ5•—`A 1lTcjñ—†é+8ƒ*ì¡éBƒL÷r²É‹B@H¥Édàùd£,öZ4õˆ&SËŠu²°Ð˜=9mvìmüo“{ [˨ZH›µ8p‡œJ‘óMf(Ö›^ y£ÁÎANAʃá]G¯óõ1ÿ‡à +ŽÎÜB¦ƒfèÄF|˜œ,åBÎ ·-–·DªM±p†!D)aØ  Õ'â„`F¥Qì"íLõ›'Ì +h‡å…áœú -˜1F`^–H>SÁGÇäŽÜF`Y#;ä?¬B¼àv¨Ž§#87 L]”Øž«+_PÅ„¾Á¤ìHÄX?¾¡=ïÒá] -ˆ=†zDn*É{íI`ÉUqg¯å¬6ðzŒT ŒjA¬Ì!wÀgþòÌhט’ñxE„ÃIË#›^Ø‚£¸@2vù2H-[õñŸÌäãd Àzö‰÷z)„nmSuL†¼ÛV'ù’BïøÌ5lR {Ùƒ€mü0Ê\(:V4^–2©ãü -ø]Õ%˜s$aYŽ¢í»›+ªEŠeˆ }ò&‹óÅB‹È_C|+d饩o#± 11² „°•1nÁ¸p-»&ˆÝ*,%?šˆ¬-Ô® t[;U¡“#ÿ04²^ì°R+¬‚FÎd¦$ÄiÁ!I:{hY¬¹¼w½?@ãIDÉû—o™è"ÊvÐud¹mY™|ØH+Kç”Ò–Yiýðƒá¦«xª©*ô£MzBxØ$šgÍŠñ<ØfÇ®oéÄçZ˜[µkÃ44-)¤âé­¸ß3äµ'-:´ËªŒÀmÊ~à@2Á!Ã)Ì/Xù_¸¦×H$ϳ Ö€Ž¾ÙtÀžxO‡\ß¼0b½‘ÒÐþâèÌío d¸ -Åæ6ö ³Âhe}ëä<Š³'µžxz»®·Å;øòA{ã1‹c«4álÓV•2rßg©ëÜ,êA‘üþSj4J#8Ý÷ß®éòX›ù«e¾ â -Q7}ØѹÝÌ@bÒFå;úw—o–Ì !#ãVrçraÂðm®ñ’†„ãtl÷]ß <6HBØCŸ -S¥˜ßò7@c™™<¹7PIø…i!X ôÜéýæÌÿ¦>ýÄ4ÈÕÈ°ÇË1stÎj €Ð9­ð¬ ÁsèÞKljvê_>~ÌG¹úñ7`- ˆ#³Þ!9Ó?œ€¯¨b†uÌ -h -Cf(TÈåI0rGR¶â,Ÿó“-ú¸3ë²ú …ÆÌ>/H¼†ýór2Ãp>+ ½–Ý?¾;'xß K8£½tÎîN>?$Ãá±ïøJ?z'vbÕé~÷> Ôç·„•²ò6ÔIîŽo¤ÙÝUtw±ÆÛüê‚Ök>/XObject<<>>>>/Annots 467 0 R>>endobj -1073 0 obj<>stream -xXQsã6~÷¯ÀôÉ;+¶ãØÎÍôas»¹vf³Û»¸³íL^h‰¶ÙH¤*Jq|¿þ>€¢ä(¹ig³ND‘|øøÏÑŒ¦ø7£Õœ®–”£i2Å -Ìøã?ÿͦódJ×óU²¤‚f‹erÓ>åô0:ÆÛ›5v…½ü‚h¾¼–“klºW׋d ¡+Þ1—‡øj±J´X¯ø þWšv£ÛÍèònA³mv°z¹^Ñ&c§´IÇ÷ôÝØÌ=¥¹Ñ¶öT¨5^“¶iu*kQ©¼?º*ó¤<ªšÜŽ¥•çÚê½¾¬´/Å!ÕÔH1©ª³T¸Lç6Œ¦4™]%sè?ŽUò”¨„¾n¾Ü?Ï?«HåÎê þ+͵ª¨Ö/5ùº2vïi‡eoŠ2×)´U–½V—ÐÏ8tpMžÑVãþ*7ÿÕÙ@}P5M} ˜J÷·TV®v©Ëe!^– ßÕ³÷¬a6[]ÃO¤qKÆR™+|Šµ0²sÙm›š¬«º·jù„yU¼ñW¥ÿltí“öØ|‰€ÂeßáÓ^xçÄ1F¬àˆn²q¿"µÕrªÖ6lO¢›a·?ÆÖÕÉÿƒÕÒ“¨÷£¥ûO và³Õ¿~ýùŸß>}Ž·B¬Ú ?OÖ-ã…}݈ ¹Öå]Ú¢q²JÖœKŒ‰ùrE¬½Çª¼ì@³”NħÎ"( ÎÚQS–¸U -D\²Xbw•*Ë8vˆ\ÕŽaëlOÔÚ·†«Ù^>3–‚XË2,×á _üë¯_¾0ú+•Â¹ˆtú275°âÑë%m±ôéó=é4¸èuRM?joÒh-:èYåf þÉkdÍ Ž-—l€µôEÙ{eÿ¿ccßñíd¾Nf74¹žƒJàþß]ó¦Ò;»c‡ˆ•¯¹­ÚÓ˜~iù€>Š@¦¿Þ*\([á%Pˆ¤JÍÈøéÛ÷Í7DÄ‘ -Cpn0Ît­Lî ¬Á·3Öêjà&Î=&„v9^ðŒÃn®‘Ìz?›”“>Ñì‚ÎvŠŽ‡Éž®’‰]»@ æ›ãW>ä0áÇ@Lq ŠCNú˜ç½Jl<3FRug¸#_üÙÙf÷o|àv>#ž¨‚w -ˆ2È™ÒÈóõ þ~¥°+«\Y2Ò"ËHáß–Q°](Åd bŽÛlJ…± ƒOÁܨ8²½PT˜GÕµ.JÎZ\—_°$YV(@^Û¯yL¬ÓÙ… W@rL´¯Õ67΀…EŸIk<_ EK¥hK]yrX4=âJL¿7iå¼ÛÕœðˆ‡°KôrtF؆°±/FŠ=ÅZY?ÜÌvõÁCÙÒS¡`*Ž82§ñÙJï hëÝ*ˆ$ø0çÄ+N— 2û僢‡¥‰£ @fˆ çY¨`¢UuWjAça¬4èÊd XÈ”\¡™L¸j¥ ‡W¯“bpkNWpDæ$ÔÌÎs]9íüyûÌ1P -^ì5µÎO"AÑÞ¹ŒL¦_ˆ".(îãÐi蔣.ú&=ĶhŽ B2—ãÚÅ‘'£ùº¥6I¿ *ׄº[}#|Û®›—VE_ÆX"§‹E|‡°æZ£=²¨L -SKFP„¿¥¹i+‘ IpÖa½K¸ã¿¼›ÒMh'óEèHØé )×Ï¡ÅÓm Ÿ‡ícck4‡Ââç2fÓPuâÿ¦ˆ¾ËŽå¥oÐ^Η\Én;¤UlU$øµm$…:Å­ÿZ8³Ûá¸Ü¹§¦ì6Æv WÜtrFå.UÃ’àOÜF*Mk´pt«SMÜ1ýÖ‡“9é™;dgÑ=ƒƒ,>°†âg!·³³k/ã1p/ïæmç4Ž7๋Eï™qMΓ -#"f<¯ÑÝ ýl@6^ô(CE–;„‚ëw5Nê©c˜Â¼0§²w:»ßKU‹:‘!L‰Ãˆ¯ÄÅ_uIŸˆJKå Õ†¶Eö_€ú]ÿÅ ú;þ+_sF{-ýsp¡^LÑd›bËVïúÜÕ@3Š\EǃI!lË6ܳIXŒ3Ù˜órtú.ÓÓ&SÿÀFlcÚË{`h…%Ð@f°¤ëŒm Ì“IîqüøA¼ÁNFt€ŠésñB°™úQÎ ŽöÐ4L€ÖÃò(PfFÏ“È®rE[ŽvD÷W=ó4w»,=4øµÇCmÀƒ>/XObject<<>>>>/Annots 472 0 R>>endobj -1075 0 obj<>stream -xÅW]oÚH}ϯ¸Ê[²R’¦ÝÔ„îBT­´R4Ø8µ=tf áßï¹3cÀNV•VÛ4à™ûqî¹ç^~œÅÔÃOLã> F”g½¨GÃËËhHÃɯûøÕ’–üGùOÌþüíl8ˆq,îp¤ á¸»œfÎP÷£ ?ðA÷æð¨7`OM7ó³‹ÏWi¾DX£ ^¤ÎiæIg]FqDFÒýŒ¾eeªv†æ$ ‰’Deײ´Y"l¦J2Ro¥þeþ ›ìÝÛìöÇ°Ù™¯3C…´k•RVnU¾•†pDšf|ÝZº–*ÏÕ.+W´ZàŠÔWÜ3S,¢D•KZf¹üÕ»êÑUíiˆ¬á‹Â?Y&z¿±°cÌNéÔÐúK¾Ö£nÜT'§L*Ù=3yã\m-œÂñóio§á>©åÓ×Ûç¯qy$ª+ðkwŠvbïòÎRÆq¹ç¬wk $5)M¥²$¨B8l§‡\ð"Ó¸oh+ò, §#š–’/8lëDQŸ]k¹É÷@r©tá+¶Ñj ×)×`Ûº­ÂÒ±rÑ*Á›÷®Ê…éœ=W‘"<©5âNT*£àluE™£Ö OÙ5ðè1#p’ßpQ³U¥}\xÀÔXŠÄâ…°„w¨–Â0_f¢XÚeyŽgð+­ŒÛ¥´P«Ê4­?<æ<2ÏE- ee]é¥ÈrD¦ÐŸÏÒ…æ°vÅiy~]*D‡ŽÁÿ„.‘çV²å¯ x¸¢ÀÆiDßÀ -€L†ìuÈ-ç¹J¾“ªP‘%|áF"µh¡²*Ì,ôRáº7;XX+‹eôQ‡¬–¦Ê-÷.–«,˜ FC<ľÅ%Q -& Dø&Žxî~©‚ºî2P±Á¢‡y»îPG —cn}0ÊÐ9Ë^¿ü¬¡RJÌ'<~V0ÎŽ›·Å¬ˆæÜÙa˜wBÍ=}Œ‘Ø3ºµ -Oß²ýœÊ°Ús37ÔÑ¥X!°°"èÜf§¶ <ÍÏtñ9 kAwMbŠCÐ÷GcjÁ=?Dý _ì{BspD_²²z!³7Ð*’/˜ -¶^.ƒùaQpI©« ãøéáúþuŸévz}÷àÞzÍ°ö¤7âéö'Q|uÄñ¿Ö;¦§gU-X±Ìd+&oÅc¿L<ÁëR¬Qü…äQs”vh"± ó¬Þän?Õ·½’¶þ¼®z· ’!S%k^3Œ´–¹éÄèV³–ážõ¾&Xyëí±æÈ…´É…/©?So˜‚&è}»¯›“åqcßw·®ÕjxÀ` cL=gƒÂ‡ÖDŸaž`Å°òfk?×+êðŠ¼À–ÜpŠµx›Éûø°Õ»ûîV²ÔÎ6¼ý>ý6ŸB« S ¯Æ¡yŽ{zc< "ú¶§ÃŒúÉõ<,c'Ôá½>•Æ3/ØÄÀ"ŒoLÛÐ<±/-¹À¨’n”»Ï2!Újµãƒ ña]9ƒpúáÏ$•Á oû&_ÝVµYÖû…ÛhU‰uñ¶ª¾àüaˆ¸M9©ó<»¿!¿œöѱ“@Ðx„¯l“®À×´3»¾¿¹¦¯Z¹õðV%n`¹5ŽƒèÖǻ㾚Ÿý~5£ñh‚olpÚ±íOó³?ÎþËnŒ”endstream -endobj -1076 0 obj<>/XObject<<>>>>>>endobj -1077 0 obj<>stream -xVÛnÛF|÷WØ}p”HE—´)àÄNúKnÍ (â¢X‘+“ ¹«p—’õ÷½P–d«—Ø°-˜Üs™33g¿ô©‡ï>bJ†”Õ'½°GƒIŽi0ásŒŸ†ÓÂ>H£çÄÉ ŒŸ;1š<=ð&=‰Þ ¨ß§täÃñˆÒœ¸×£4;O‹RQÍu!s*ÅJV+®ˆåy©K)H.H¨GV•\—âž–¬ax›7Š´´ÏT=3)´(+þêÇô Òõhâ²ñ  ßùÙ-+ÎG{ Þt‡oY=gtsù–~}Jg”l‰àT1ó»dâõ(è÷И £MÁ -â™-q!ª%@˹fe¥N|¾¯äœUü›üY³Yjô¥ÔZ6¹¢×ô? Ò½­xÖ6¥Þà¥VñæHÌ\Ö ¥Wò^ŠŽ÷1A³[ªøŠWì$¡®tÙðLÖ59Ϥ’ÊŸ}£þ¸ VŸ§Wé‡ÙûÙôXïK¦ t)YóuÁ•"2SŒÔFi^ÉÙp–“•Aaã Ú%XÛìpbˆf>vfžd  €þJŒ>Šò\*bY&[¡IpŽà9§ ™4ÏmβÂbþ‚˜¢5¯*ó×Ä6OºJÈ_ßÒ§Rär­hšF±az·JÁCJ÷è¬tÓfº{,ÜßÚ²áyhÂEï&[Íñر8 _†IØé#¦oIrй{íÂVºíIL£€ -¹*sŽÖ @N9’eZ6R…l«|§çÃ:?”¢ÝbeHÁD¾%©ï$½Y–³T2ºEÂŒç¦=ƒ”ÅÓˆ¤óxûVŸêµcü™m~@¢h‚Ì™*(È)2=D§Fe~JAMÝçn^³¡¬Èò{èJõßxI¾¢Ÿ—ë_|ÐŽÜAá?>nÀ¾?ôÁ¸ ‹Ü°ãöèD׎Itá{œ`ìÎL¥áŽXN5ë‚ rÆÒ¿ÜP™‘· x©nŒ½5!ýþÄ+xeà¼#íö صÁï˜ì‚U(ØŒ6ç«H´ÐØ©×Í_®zw÷C—ñØlƒÿsfot†@{ÙL*;,,³¹‚Än’$†ôVŠ¬jVÔ3øœÿ9ˆ½æ À‹Š?”óŠcÝ13LF.y‹þahÃV†u*¾ÕYÀ*)8æ+2 ©$µäY •1·0Ec[˜£„èŒÛA`ˆîükÏ TH;AM‡Ùn~~.‡h:K·v!¸¶ŽiŠ-¤Ì¸zaÛ0röþb m·«œéú²]Änx>š‡êGê¹óVcóbÀækö•Û`Öïým`Gîĺ(á΀¡’Æ|Ð:p8H¶sÈ4£43Û;rõy²fÞqÜ{ú”LÜïâáÈÞ½Ö>^ÆîRp!$š„Ñ7©íºöÒªy=‡¬±ö“á.”ŸÍÔ ™Xo(~„¥±ÒΦ)u¹/Ý%DíÔü_ÒŽ=ýdŽ' ã‰#ãíÅõ› ºiä¬ º”Y‹{ÃÐÄ úC\Ç £Ø¶âÌËèdQÞ›àÔ`Œ=´˜ÐØöåf` Fƒp4Cl@#™]¥'¿ü ï¯$yendstream -endobj -1078 0 obj<>/XObject<<>>>>>>endobj -1079 0 obj<>stream -x•W]oÛ6}ϯ¸@6ÌZù#n’ØCÚµO+Ð!Þ[€Œ–h‹‹DºüˆãþúKJ–¬¨[¦ICñ~œÃs量Íi†sºZÐÅ%åõÙ‡ÕÙôó;ZÌhµÁ›Ë«kZ4Ëf3¬ä“¥Øyii™ÑG£7j¬Ò[úzó…6ÆR¡œ·j¼,?_­þ>›Ñ›Å>&¹ÔÞŠª:P-´Øb‡¾Ä¢Ê…WFóf=¿J¡ß\,³.³yF·¢^ ºàXië’æófëâ*»ä­7¤C½F~fCjõDî༬ÝMäö=ÝM·¦V¹»W¯I8Ú˪âßH„žð|¸ý6¢VÈ’cý®txzMÚì)xU©ï’w6°æ)¿¯UØnź’tsˆ¾˜"T’ƒ#ç»WpœÃ‡?7´³æQ’@È€ä7ƪ˜‡•Î›#甚Šœ´*—.£¯VáàŸ)~[„œÙeFœS!såx Û‚C -YàP5â=`2NÌÑN8·7¶`.„kã»I: ˆ(Æd*}>VÑfú¹=¦ Ø›Pdå· l¤2ñ³A‚½4\Ô³¦¶Và })ü‘7'sHÏyuL܆¼ؼ4`¦ ¬ô£©1’?àƒ -÷>|Û¤ÊlU£Ö#¶×ÃM£ <Û…ìö£®P5­¼ÀgÖ \\f±”¸Ü9`¬e^ -­\(BBZæ>ê‡Ô’ÕÁÚXû%]H[PÄ&O‹szªI¥7V Ô¡­`%d‡„”#„-µ-¼C‰¥5a[’Ñ’6 -%’xª¥ÎØ4½k9íQp7éU-ô½>,”çΣt¡PHATÑ£uU}™(ýàC…y^ ©*³¡Àµ&ù$êÝ¿)¦cú8R“jš©ÈhU‚³Ö_)Ð!w³ãru´–2*£GCй©ktLFåø0×h;´'BŽ­Lyr^äŽûì3UÉ%ztl9 ”Ž¦á6¡Â.Õ4ŠX&GdƒŒ>9Ç;vsNº$GkÉ“€ÂàbÖÌ!|Õd‚ì\î|”`87s*î¨ïwûb¹fO+‘I<°éç½kÁ2UÈùÏä›y6k±Ì2d“s.£\[­v;ƒý+¢ý¥m«Cƒ¿¹2¨÷4Ý­h—8ûX€ÒûCÁ5½Ä\›˜Ñsãó8+ÚHÔvÖ“ØŽ)ìþÛ6 uÔ<œw-TõÜò%)7çEºÆô¬‹·Úzž› }.Òæ”—½ð^Õr$ü‰Ý8èž\z\;ˆ—_ûŒÕ¸å9Äз#«BGÄ9=Oøü8ESà±°¹EÉVŠ5ŽSôöðëÅ€°v¿ ùëÝ ‹xQ↲3{¯˜½Vî*‘Ç&R§{ 7(Ã÷ƒG¨ ¾u‚\êÍý@é¼ -…l†äóBü‰¦k¥§(ð)ÐMÛIô [}9po~<,¾gÕ¶pÓZ¥jåÛM±¯÷Ž—t¾»g}FK^°ÀàÝé&WjÌKÿ4b.[Œ±~6ì¹Âe76ò˜ä¢®lDÖo:PìÅs=.x)¤îÞ³…r.pY´ÌðZS¨ÍÒˆ—´`®±b‹~Kb³˜Kª·{9ö’Ö¢Ó|2Š¹<”¦Æ|¶1ÚX.©—w®Ä5üxª)—€ë{rÄ‹ÔÝ{Ž[¢DQm|ÑíñbE¡B:òR¯¹ÒŽF¼Æ¹°>#^ö¥”Ü(#¤Î¢Õa‡è>Ý ±uÄ .ã6N¹–ݽ°ºõÚ®Å\šfÔ¸©ožrÝÍ¥½cð'¸ã4ç‹uSùøNáWüA€nÀÿå y¶6{†ÕkŽ]Ð ¥†AûRáê ÑU2¿î>Ò..ÓGÚÿû†¤—|7.¯–ÙÕå5>X1ã×úÓêì³%œ’Ëendstream -endobj -1080 0 obj<>/XObject<<>>>>/Annots 475 0 R>>endobj -1081 0 obj<>stream -xÕXmoÛ6þž_qÀ0Ôb9vœ8)°)²–¡[¼o6Z¢,¶’¨’”ï×ï9R²d9)¼¶ ëx¼—çîžÓç³)]à{J‹]^S\œ]DøwzÍi~³Àß3üI)?€(ÿšò¯_<›_GSºšC  éÕEtþÉéñìÍòlòvE´L¡ÿúfAËÄŸ¾ e<²;ëdA•°v«MB‰pb%¬¤£ï–q”mࣣ‰tñÄË%áI«ttNωÚL$z{’èÚèºH~øŽ¶Êeä2I…Nê\^rAãée4ƒ3£J¿ÛbŶEVôÐ6SqFµ•ÖëzÅJtn†§±.PexP±ÑV§Žîç$ËØì*'“}Œø‚Þí™°™´-3e;½øÛ:mpL•$áˆ4GQª­™ä:ùIJQ“ʨprÒø²=Šó‹ð¹ J^éŠ}µ@™,ÉÔeÉš¼Y¯lm ¨À-UëÚ4÷uÚllTå"z ³   C‹Ï&ò‡ZûàÚbvNVJŸ³DÇu—`aïñ36Zd.–(ø}m Õ'ÊÈß‘N;LP8H‰²Î¨UÍá‰Z›oCÏæèj¨Üo¾}÷0FcÐEtã?÷Á3ä*„ªÒæqËé\¯Uù -},û**EfÒû2òs ’ö£ž£h"TêDæb7TǺ.]{íø+” 1\ÿ™’}ÃnÔœnIŒg×n®ÆTç¹Þ2zQcÞ/D_ §â:†Ž ;‘©¨s”›FËð­€»o‹v´ïj›¬Ž{÷¿„ßî¾71žäj5±2®r;_&TÖˆä§Aæ ‰±xN'êöZZÕm=\¨íy÷ u¢žÆÅ"¹ -InÊ1ì]Æä“àaÚ:°/LR´gôÑB$x¤yh{‰ýLëæ«Ü@Ž' ÈŠŠÉ§´GC ¸â1ŒTì{GD5xF{J9OHä¨v '+dìšÃ£fmDA¢Lhë¥]V[A¥°ÜàÂÎÌ6„¨$¯<ÎD¹F¯©m3h7ü¿€ÞøyR›<Aÿ-\;HøˆGÑ÷Ó -|)âO_@ýÏÚÉ×¾zÄ0#ñ'Fæ!:©Œe 0I0ô`ÌJcV¬¸P´‡Ì!!X1i•ž&öØS wLná qr8ötZ{€—òɵðÂÞÀˆÞç’W#S°ÖæÄ!y@¡ Àï™^o,4‹Å3œ0‘0;·P¿ÆsJ.¹@ÄPʱ¨ÄJå`ì;áMT~„ô•åF]2¥AuëB6³ˆïÜóœ65zçCºZÎgæxµ!r™p¡ì}õ\¤²)ù–ãù @W>òÃX#rJÁd^¦Á/Y#]¦â>iÙ]ßúÙ8‚ ´Zã–°sŸäÁGÔÞîwHµBšER(àÆyÆFwà´{ 4ÚÉ@r•rKf(z°¿?´ïAP -ñ‰7.ƒV>ÖijAC5¯h´;Ú -(ž€¯O 'ùa”ÖÐ0”ɼJkØѱá¦cÞÒû,/¶ãˆSÎÁûé¾eŸhºws $¿?¡Ñž ëj'û±@€¶ -!0RäêOÐ$£ X܆’‘‹ub¥Ê†£§k­9Öt t%G› CÙ^»+ãC¿FØßAûùÃÁÛ³¦eÎU¯'0ò³3Òf=9÷YܯâˆÁ~î‘D£XåÊf\f¾›µÀÎwHp)0ìλàì&¼K8xçàÑÉKZ;”!ç÷<!CäÃH®_‡*‡Qb+°"5C…‰)-ª*o~³’{ŸºwÂÅÞn¾)÷-›…ùª N‰dÂë÷EÜÀÁ)gb‚ÖÔ½)¸‹‚¢ûv% -Ù¸iÉé5ÞßÜ\Òõí4ì=woîè½Ñ±AÑ}/ã“ãöÀx1Ã[šdt¦ç‹y´¸¾A%@~vËj~Xžýrö¿3¿?endstream -endobj -1082 0 obj<>/XObject<<>>>>/Annots 480 0 R>>endobj -1083 0 obj<>stream -xTMÛ6½ûWÌ­^ R¬•¼)zðf›ž¶Hk¹ì…–FŠtIj]ÿû>JvVë ŠÀ° j¾Þ¼yà ­ðK¨L)+¨î«xEEYÄ)åëï)þ–© ¸†Gÿ±HŠ,ΩHs¸ô”À½8ŸmósOéê.ÎfÖùÖbßÍ­E—t›çñ™³UŠ:Ó)džŸa½ž¹uv†™_YggXËòUæà›¯Ó·ÍßW‹÷ŸrJªZðU¬Kªš‘UõrËöYÖLOËÍÃö醤&g¨–„{ÍP{i4™–Ž²a–iöGc¿‘|ÇÚËZŒ>ÞŠ¶•u|S}EÉ;JP)”Œ²P«f™ÇYLŸ7ôÑèVî;Å…’ý.®ñq -}A¥a2­:Æ(¥#,‡±Ü,Œj¡7!újÖvOK2;>ÑAôèÇy+ÇŽÜkç1,8Ç„RÔ¥ÌQê}(ÙZÓ:%£#%5SÇê‹rÊCQ’z}·ý²©~«P”_ÀmE¿Pg’‡®LÞk±S³›Èk¸ƒò´ãN>/XObject<<>>>>/Annots 487 0 R>>endobj -1085 0 obj<>stream -x­W]ÚF}çW\)%x1ß)•v“Òä!ªÚ¥ŠªÒ‡±=À$ö ±!üûž;cp’ª+••@öܹßçÜ»÷bá/¦Å˜&sJ‹Þ(á ÅüõÛÏü†f³8šSAÓI4­rzê]=Çq4»:/&QLÓÅW -šŒæí_½~Æét-jÙpºŒ–4ÝGc¾;]BGxò§WÏ8]Æ7§ëÞÝêžÆ#ZoÛ|±¤uæC›´ÿf/¥´4‹èq¥Ò;ôA¥Ö8³-é­r¥UIUÊŒV*—/ןz#Ž§PÒ:»RTZ)ÉhzE"X€íÅ‹`o8™ÂiÏ¢8¢÷ꪴTF» 9E¢jÉñI…äz/¿²Kµ­MßXz»u›—t°æ¨2éào!…vd¶ääAXá£(¡%7;•ŠœŽJžøx‹ ¯3Ê”•ii¬’Þ„O‚Ÿå^”T9i´IÚZƒ¡K¤eU‡ýÙy¹Iaq°b8IV:SÙ& ¾£ey2ö3â.Iä¹99ÚÂÿ½Úí¥­SÙØG¡r‘¨\•ç¹Âh°äà¤ØI’_ˆöˆJd”ˆ\è”Ë%Ë4¢ÔÆJR -ï‰ÄT(áÖ àÚÊJãÞö´Ý¡-Úð/¥ÏLZR—^×í=ÜëGuã9zΗN9j.²Ï¹PÈÐÞœ`?y`‡Úžô»V_¨é^iI›>çCqˆ&Í<€¸¡Ä"}u¯¢î$Ï·ÞWÎ’Z$¹¤§ÃD8ôðÛÕ“/¿0 Ôè­ÚUœ·’NªÜû²±ò»Õ¸îÌþpÈ'ÃÂeÛNÓöɸ"úE§’’Jåå¶H¸J,:ꈤBS"p†–ò©¨’3ú­l[w—”˜cr47ÝæßsòådHnëã…·šZÝ­¨õ‰ARH†½ -"Éy,ö]‘Dœšðº¹w )¢?LE ÚiQr4nÏ5ŒH®±E ‡jù¬†Ó\åsÂòyU·)ø×°"zh=ð×.ýÝÿÜ2–Ïœóò¹ÒŸ]“Æ‘ç”s‘˜\¥N=?ŒÒ%we R_[`(¿ˆâKôAÇ´»Vä+z·jSþ©Òž‡?úˆ_Õ¸7Ÿ·ø¶ýÆÉÔKP`)¤€aE µ 6¶ù¸—š:8%ýà#)ˆ,(j”ø X÷™¸ÒVÃÀRÁ&¶jÈ€ö¦º,›ÚàÓ tó²ñµ!ŽƒgŒ§U-bV x­~#+ôŽ¹Ñ³÷G¥3¦Þû»9F] 洛?ð`eùâ…YÐXê~næ\oÀ•íuq!ï›16 \ø‚Öœ‘J~ö¼j:b„qºü3 ü¯Îkª?‰2Ž4ÀJ¯ééáÃãÃwD=µ¬DÏíXó¦Â¦²­ûžƒñ½¦;ðµ±å$ºß±täÅÎ…[À“yî} –ŽÖvòžé„ìH0Ä05 V„u`Õ¦ìØ9°Ø4 -{ý"œÆ5•M°HÍ0ß4ûV„Eà û_µa¦é@qoÝ{®ÖÂd´˜ÍþOWsMCG7´òà‘Çtýà“^¯m =Ïéý­úAÉ›ö…7—„5ƒ¥kŽçŠÛ›*Ïšan9H[(Ç+PXá,i{…öñ ØUgý"{áA?‹\•ò€Ç~gt~f®FZ;ȲzûãIZ‰Ñ6À”Ë1.É/Y™Úž=Ù$ø©€“;CÚ@È×ó‡.É æ>èªc[¡´L‡øÛS® -v.¶oÄ€ÍI±Åð~MâhøÖž}„`?Î ßÇ2S$ -£Øg—vbåóÖ—š­–—­{2ap<ó߀fo(±]x¦‹i´˜/â&~jý´îýÚûþ -=endstream -endobj -1086 0 obj<>/XObject<<>>>>>>endobj -1087 0 obj<>stream -xu”AoÛ0 …ïù¼-j7¶³Ø=¶ërÛ°¡vÉE‘˜Zm,y’\Ãÿ~O¶ÓmA— €a‰äãÇÇüZd´Â7£2§bC²Y¬Òmò"]Óº*ñœã瘎ãÁÇ,Oó˃ûÝâf»¦,£Ý¹6UI;EȳZÑN.·ÚˆÓi Ϻ–BÍä‡æ`OZÒI›OÁRkµ ñ!½u/äkáØÓ`;ê… ×$Œ"„ ô(šƒH¯vÏ‹%ùjwjùóód =}"z“>/XObject<<>>>>/Annots 490 0 R>>endobj -1089 0 obj<>stream -x•WMoÛ8½ûW rrDñ×ÚéÞÒ é(Ònã¶{È…–h‹[ŠTI)^ÿû}CJ–¬$ ,Š±EÍç{o†¿FSšàß”V3š/)-F“d‚_øcÊ_?ŽfËUòžï§É’ -š]­’UóMÓã¨ÿ½ ùt‘L{Oûßñt¹¼L¦ }Wr¯Ì.Msavü%¸-n=Õž®rÙs8I‚K/ÓÚ©ê@™Úîw šNw³JwrOÊ#¢Ø.L8©¥ð’”ÄFi¶¶µ®—$¥ZIƒÜ+‹X$ŸTŽŒ¨Ô³¤c^Vâ ! $ÓyÌ3Fû¿þŒ„C¶…ÍÔöœÖ&“N^K=i뻌é>ØŠÝ‹ -¹ ¦ÂÉm­ÉX<³”Ú¢t ÑvAÚmpJœ[_Q, ¸ÚÁšó ¯”Öû6»‘xÕ:Ù*-©ë,hÉeDt¢±+²BÀÀ‰ -M…A$Õ0©{ÓœŽ-a€‰Ei¹ã™ÜŠZWô,t-© ¿N’Q<¥›ÛÑåݬAÀ˜ ¢I5ùº,­«NÏŽ†ó-bÆ” O) <ÊŒ¶¨#¿vy>·°j+²ÚËø´3úŸ¾0®\=ZN£f7T¹C€ÈF ÈG?Â:´¼À×ô'íU•‡þ8µË+*,óbSWçGbx ë™r2EûÌ¿6¼`*™q }®8f”‘ÐZ¼úíá†JQå ýÈÑÆC!MM¥-ýE]žslñ(æ³<6þ‹³(g¥ä@Æ.#š@"mtÑ"‹Í·øl{¼fªms›ê2Da¬+„Ž)‚gŸF„˜ëç\ŒX¥¾ÜÖîA,À ™ -2ƒJlÀ)%nP‘Ê–‰ûKuy×¥÷Ø(ßiÇ Ýt5AÜÁ8u°5Âc/™XŸ±]þüEá:éqôºÎ‹Þð+ÈÐì网Îçª~Yî­|ÃM ¸W*‚¸v€^éT` ‰¤k(ý¯Zz`ŽJ  Øį¨ëe.uÆ c|E´ƒBeš¢,¥p¤¢~ÂþŽoó[ Êu_êν¢ÅÃ>WiÎÇ0±Ï˜¡PQPž¼ždC^ˆ¦Ì! Ð (ÓHD¢Â ÜEÙ€–½^BÓÍh -y˜‹mmRÖ!1TýÀõ–¸A:"wð^¥ -‰q½X£<y El³÷Øîߎ¼¼Žé]Þu‚ÙGè#73Ý!E˜kªDC4…Ûß‚͸6ÿ¥ónÛˆÊô:{:ˆGâkyœ}6@t‹ËN3ŽPk€ÔšÍJæ–ìÞÄî ~&t”ñä) ¾HdäÜŒCl+ý~ZgΣYÎo¿~¿ýúôPû4þÄRÃvžÞ "ï½ÁÅm‡i44Ì–qÀÕ‡ûÏÁrYÔ>téYºó¡5ç [!Òja ¿îó!5õã¾Æåe÷IÎo¸Ì¤O*ãNW±Ú“ÊBliü7gØÔ/Š?À¹ÅËš­’­öäâãí J±U¬,ýJáýÞºŒ2eÆæùôîD±_°åFÛ— FÃZ7%4!Ò¹•Ó¶û÷Q±NW¦Þ‚ôr?ê3f±±1ÅbÙÚhüúâÓNéŽaG¬ú}j¥zÙu¿•†^ùÎn˜ƒ5rÐñ0;Ð$ÖÓZü”ôùuv[j¥& - S9Æ•/ô:p§UlêrÂ!œu^ê-=ÃúÑ(„Š»e·ø™ò¥бv°ðr®〫f àâ8°šõð¨åðX¶nG¶iÖÊM(@¯v• +ÔøëßgÂî¸ -ÇËÛ<ɵ)Øó»I cljk*¶8¾>„] çV< ¥Å†w>ž1ÜØ›niqÖ†2õ!Ɖ't+ /.M5C° ÌÃdçË&Ø ‹2ÞqøÂo § ¸Ø6ŽSm&K¤rS[Låam»=K Â6oÔ³Ð1®$¦_3r®º«Áœ/ã¸qÞü¯‹4½uy^¬Éjy…›:lÎçœÛízôçè_+Óéendstream -endobj -1090 0 obj<>/XObject<<>>>>>>endobj -1091 0 obj<>stream -x•XßSÛ8~ç¯ØÉ îLÒ@ïå(ÜpÓR®äÚ{àE±e¢b[>I&¤ý}+ÙñÐÞÝ”2’W»ß~ûí*ïMéÿ¦tzL'sŠó½£ÉÍOæ“9ÍÎNñ|ŒÿFRêfG'øøÊÂôí»ÉÙpáb±wx=£é”)™ŸÒ"!ptD‹8Z¬$ +K¢ ÛÅ+½.(Öy.Š„ÜJ8Z«,£µ6Oxr+ºùR`wB"ËôšUVš°vžäªPÖá´¡Ò¨g•ÉGùfñm'“cœź(dì$ìk¼ "ÂÉŒ`éÆ„%£µãõx%ŠG O$Á3iìJ•¤SJaÙ’.h©á” LÇ"C×÷aicÌI›ÁÙFæÚIÊuU°~?\ >$pXNh±ŒÈ³P™Xf’ý)…q|.a“‡×óÒˆîeœ©eøktÄ`ZWF¹ aÙ³¡5>9 Ÿ7·~Gò g™²ˆ)œS{µ"wœIÎ=¹PE½'u%Yåä$xñŽ¦È2§ûàdXú|2›Ð%תxôJ”A"4<+¥É•µJ¶LŸ‚‡0ªà\eZVÎÁM`´…ãíŽÑ]kkÔ7ÕoNè2Sñ»3°iiiðÉRU"—‰™~Df_°Z;8Ñõy6u<÷¬Äúóöæ¯@—J¦K/bNsM)Ž#Q¶ÌÄ”¦l"Õ&§_‚ûMlŒpd,F÷WŸ¿\}~xðäˆ>hÄRˆ\>¼ÄÜy髯µ`ó¸Á+â ¥[é.n>Ý{ËM(«¡RÆ4°ÆîüÀ–÷”]l y”Bñ®4¿ÔAµæ“ë©ö¡Ü'õbþÁ‘‰´±Q¥CYTó­Y8•nø™q®ñ+7ôdÜ+œ’0ðé·«K@‘*™%½Ja-ô)¡D8±9ðuÐAþÆ.1âwP˜A0…#gd«²Ôƽ•^ -¤Ú«i”ŠÌÖrÐ>¢ª)ä9Ç¢4t ¼¼BN8t(D›®Ç]A 7ºFE[žw¹ïeº{Ì®+h÷¥.œÑÙhÊ>t-d{Ũ4…4ÎgÆiõÇ7Ò¡¤“Õt³“B¾á‡·È&CÐ9cQÖÓV^ªŒu­‚¡Î‚‚M[›NèšMÞµÓO眜+ëÀ[bl™~øhtU‚-àY²¸ûF'ÑôŒ‘¶ÔEÂÜ)’јF¬Ù’ä ä?‰'XDç@\¹(KÈÉrSK´*|·s+#%ÉLæ@•)p~ù!4OÆlßìi_ìÕþË>-•³-oÛ(ö‡ÉàAæ|ü!èÎZ×ÍÆ4=fzé)y¨º¯³áfþhŒæ± DÎ!¡£ùÆÙ;¸Þ‘ ¹ñ¾u|õ­Þc°õ¢#N=S= -¡²üÓw;êÔY[§ -sˆ?âÕ7Â<±=½¡"ò/2UÐ;¡l¾4^y§žÛ¥-CÛ ‡åzÎ<(6akk S’èbß1O <5a€Ctà ¾…°Å’êÖÞd3ªI>Lá¼Q˜ÁvT( W‡×{)ôf5Pöê38…%¢@^*¯ú A’Ýêeidª^Z2±ÌïFqL`d ó8–ÖîøYwt€QkçäÞ‹ -£.O+.\t?z†—°ˆUèž‹~ú…gÌaáÇCW™¨ íÛšgO¡ô¨ Ê~€Ð¯tƒ‘Ï$è,Ì õOñ -‹»h, ¹†4+ïa #F»È´Hšî²“Ç…xjǧf¦ÞAuI8(†=IÑz¥À¡ˆ\ŠÂwóÂÓñáwÊHîž(Aæ_5H[?˜Aø€v%ž›yàv±ãö§ß ŠLûzT_Ãî-Ð`pŽue,:F5<áfãp5ÐOH9>ú.Sã>xÓaá„>jVépðw ¦i®ñœŒt¬”oè˜Mó}„ð -RøóFv<¡÷Ûáûî_»Y³Ý–'æpWÛ^vȆÛ`Dàk ž×m;ˆPé…µ@¾Ùò2cÖYÅ0<@„ƒf2ø½a²išÿðZ™¥cÐ(à§)趫7ó47÷íyhìZ„S¯‡p'÷Ÿ¿’ßi(hë6YscûID£›ó}¯ÓI¾ˆ˜çŽÏòXÌ‹¯sEÿÃè2ÞÎ;¸ /Q}¡k÷¨:ºÆþPt8¸%bæh i¡í&¥.;D‘mÉ[›ö£»7ˆ ‹êm -H¿’Ò¤UÛ FdxÔc‡¿qò²ØÀÊ_ xw|ìÍr­+LYµÝºÎêÑy:Ç×g'õ×ÑýùÇ‹sº3úz*½×qÅã‘p¨3vô Ù~pzŒo-þïmvv:›œÎÏpÆ«'3¶xµØûcïf…~dendstream -endobj -1092 0 obj<>/XObject<<>>>>>>endobj -1093 0 obj<>stream -x•WÁrã6 ½ç+0>yg'¶;í-Û4Óí&mãN{È…–(‹‰Ô’Rÿ}(ÚR¨äÐÙ‰Gk‘Àððÿ8™ÓþÍi½ åŠ’òäbvA«ÕŸ—×k|.ðg%eþÅb9Ÿ]Æ/>oNÎï.i>§M[«ë5mR‚‹ Ú$ÓGQn¹½®s锓ŽøA’Ò¹´ª–)UÒ–Ê9e´£ÌXºßÐv§ucµÒ;Ž„æoo~ù/Óß÷_þÜ¢Ò¤òÓæûÉÍ—³ÜOë\Ô$HË–2UHJ¬ì †;@FÔrärðZÓ)\&R½ÈÛ:¿û‰æˆ„C:[^"lX]Í®fôͤ*Û30o€S…›µ±û(×éór¶XÏVl$º/tú¾:„îTY!<%¹Ð;öË9H•« -±Ò§8*~) -³£­y=òÂÞ’B%ÏÁN‡ò*ToJ_ßâžÒ¶©k£gô›iå‹´§ì㬪Tµ¨}áBÂ'-².S”ÙÐçZ>i²SÔ0%Q8!Rº–V$•VÕ¹ÀÕ8.lªÕS„Jáž™)žªŠÃ0Ý><’¨k«€Ö3 Õg ‚}Iä¶ÏRƒ„| IL£k_v{±êŠý%óH*aE)‘ºÌ,¹Ò XRkªÊØ:NSKÖì¿{ƒ&ó 2̀ǃé›fÊŽ4bÚs²¬ü=¾îdÒ IÞ‹ZU” UD!ùä ÝùëK:¹IéÝJ­d:‰–x'véÑo@£LY(¹çŠ!mj´-÷/² ÄcGéØ|GŸ3 „¶Fk -¶Q:fŒC!B¥¡7HÿÓTÕÝ™‰B•Ö¢ïtXAaøV–Œ¸²&‘i&"$Ä`¥*å H¾"͵ŒSóôiFÖˆR -H“{o˜Ñdt±0•B«ª) 3œBá¬G8¾ó5MuÞ •é¹ì|fÔ¶Á1Ú¢æ=ôÉ‚ô?è%µ²ˆ+q€Kˆ*÷;gxoyð^76sáÞ¡¼\#4kÏÓT¢/ÑË)ù`N ð=}bRp²_JfMé!ê; 7Ä )ï*Ê ëßÕÔòžFu}øW)c¨,¸Ìé Üaù©ª¬gùœh3ˆÍM$ÔgÅ©TÎ-G¨< …I‚§¡;"ÙFå1|§‚–ðýûÍ8¦QHY!vLG©t DM¦&±E²$) -Ó:îÕ.}Ë°­Hžý÷ïL+£éïåMv¨ P–]Eä5Ð!1ee4"ŒésãºÑ$Ñu4ä¨'vrJ“vâÛnò:¡­ªñ:Ãÿƒzœ‘Áy¿µo ì®Irä%Â5¹•š…€tÃW O|˜óuÕ'ÔN‹7žd‚2„mEZŒº8¼ØT¹f=Òw}X8`€7PÖpD9< iëxh¿"I×5Ô6Ö—Tf¢)0t¥ýhà ÀzãÀ4–i i>"ñ„ö[šƒ…®å×L”V@™ø¡l ÂNrÉ4y§áþ’X3’xzBôòbÎYñ`FtöÖÑÜ;ö?Æ2>heØHÆ­1j÷¸(]Ë"~‡ÅÁcæo’îUIŒµøHåŽ&>#bOAîrµË ü§Ý`Áìoò$ñ|?ÖÅQJº±èEÔ¯  Loqx÷méÙTÉ+Ý(=,1Q/<´ó4WÕÈe_3z¿>vÝt~7XFwAÉc2dêkðÁ‚¼éúÎó’óBÑB×íã~™ ,xîc=>î[oÐ÷<Ö=ÕýÊÓõ,/Wì -|bÈLÛhK½A&Ú²¶¦ÀAôÄ`÷d1=LП»D6½ÁVtÔ$ÞBÀþ&CNûý’ÃFylÌÁ©ì¼w6X<¿»Ëä|…Ÿh×Kü`»š]sòo¾}¾¡?¬ùñ£[“4%TůèŒöìpál½À³ÿÿƒær}9[¯®ñ›——Wló×ÍÉŸ'ÿ뤈Cendstream -endobj -1094 0 obj<>/XObject<<>>>>/Annots 503 0 R>>endobj -1095 0 obj<>stream -x½XMoÜ6½ûW rñpäý”6zpФŠ4m³Ç\¸åe"‰ŠÈõzûë;3¤$.½vœ¢((æ÷Ìã{3Ãýv1ƒ)þ›A6‡E -y}1M¦ØCŸ}þúõb9Ç¿ ÍæÉjXf üßµ*øDó!]½NR›§ÉÒ7hh¾^&3X­§Ø[Ãb¾H2ߢѰ£«ôtt5O°šg¼ñb½Z¼6h£IË%­å¹4¶ÉàìdÔYµ\®U³ mt-Þ9h£UéÏ Fƒ6Ž¾NOF ŠY6Kæè-¢•úmûfsqýn ³lJÄ;]g°)æ)lòÉÇ&— `ody¥ò¯æåæ ®Xùxññ·®¯ßeVƒhÛêv'¡•]­ŒQº1ðIÔ[µh ݪ;ÙœLP ­åó®o;½o¯º« -:` -¯f taSLºëÃõ=ØNµ•#툦 8¨ª‚|'ó¯|B¾Í­,NÎ(u‡G” -׊[¡cyêVYC›j¸Ígžr®»…ëwóÞu#ó}§ì12®æëéZ&-¯!jE'jie—ÀMs>Üî„…ƒì$:àÌæ¶l¢s9»t&*Ã.@“*YZ•ndï9™\Gâ‡Xë[cdc•¨ªãü-;íÌ -ð8ã=Þ¦ów¤Ñ„ûðƒ~I¼&),^0ˆ:á«ËÞ]鈥<©—Là ¹K¶…[¢Uú€ÛX9ä°r ×J‚Ãî´¡ïp -bÓïáŽx_HËûù®,³øjlx´·Ák„;Qí‘MŽÕlßSÄÉ‘8¦ÇøyŒ(t`Ûé;UÄWšëºVmU…lDØÚ<¡wإ쎜´è€Rä~Zêët±Ïe‘ÀuHpõê€{­ UiÒ€q(Ùà,ºñŠ»rб-½ȱi†Á0¢ãïòÞzGXÐÝ^£+þ+Eã>îz]zè .ó¡’ƒ¨4ˆñû’Îu×IÓjŠZ^ežR«›só9èÅp¨÷\0 Äûˆ£¡Þož¡cYÖDÊt QÍíi@„A˜;Š ÕA]aÔ¸ÔÍeìáÿ£N‡M¯ÑgP`„á*ñŠ…gj4L—?*Ñ}$Ö¿’¨ d(¦ØÜræfz>”ít_Òc"Y°mÔ™TA™;šÿ#ìDê`p£jCqràXäb:ðm>¸d(8£rÕ]Ù׃֧Àw\ª“¹ÕÝч.*0à aõô5ö`Ø¥º\H“wjK‰n«ïd“ä}.[‹¹Ž¤€´.jTZ„Œv< !•0R”X£žZæ2f´ÀA?œY:nçeq>`i}d׃B$ð%>¾Ooç/ÃÇƮȖ1C/’ù…½ßSŽ…)Á P6l¼«‚}OB”+–±Ò(jÕ(Œ]% ¹hh¬:©qï³Ã˜AKU&Ž -ÆÒ‚+R+=|ðÔ!”i‚ó9ÍRÁÅ52VïA1‘1{õj¸v$›ö-•Äd :Œ«ùXã-÷ô’ÑT’UÂÆlzÎt»UÇï HMüfꙬ$B¡¥i.-Å)zâáõbU¾¯Dçës¬L¸Òàd|Eû;(éüRSqH 2£ú‘&ñm%?Ö¹¦Å7¨e9Sot±ü>/XObject<<>>>>>>endobj -1097 0 obj<>stream -x•OÓ0Åïý£žºÒ6ýKÓ=î²TB´EpØ‹ë¸ÙÄ.¶³U¿=ÏvÒ‡EU¥¦¶gÞüæós0£)>3Jç´X/ÓdJoÒi²¢å:Åï9¾FÐ>,,æ7ɺ¿p·L6sšÍh»G¬Õ:¥mFˆ3Ò–¸Ì *™}¾ÚþLi<_%Klíµá‚šu‰Þz&àN›ó¿w¶Ôç'›e+¥Ít(¡²"#©¬,#½'— :2ÃJᄱ”IË+ë÷äØx-“Í ÍP/k¼XFÕ«$Mè½ÂÆÔŠNÒå!˜uLeÌdôÈÊ£½,1çŒÜU®­m£”ìx”ê³t§ 61vY²ºÞû‡Çß!i'¥§‘­xNÌÒ¤Q™*Îç+TêtõõÓûït¦”ÖB¯õ±¢º„¶¹´5õÙ"™ûÌ¥`Ø8@Æ™¢Š ®Õ¾ÜáÉ„P^3*±ÂÑ‹d‘…à•‘î ¬¬Ð™¿éåövç°ñ’x…¶t,ô ˜?!mPks}¢êHx”M™”ŽÒ@FŒsa-Á€!—>)aH:´²(¨ qI<{b½Ú–_Ê?¶ÛÁJ±ú„¾*är•Â$µÚ „†@°!Z'ðÀœÇí¬—j”½ô!! -dµo–ÏاóÍÇjÑøÆz.!àø´±rž3u1[×(0+ -ÅÖÒŠâ{ºü* ûÅž4{ÙükâðÎs0Údó¦Ï > ýÉß#;"¤GþÞ~¡l…«'p„C;þ…×I¿cd– ü>Ù¬kGÍVxa­´Hoâ%ûxûñî–>ýïº×¼*ËßÚ¾¾qs`œÎñªÊFÿyµ7—“¹L—IºZã…x‹Ôÿõn;ø2øLŽS\endstream -endobj -1098 0 obj<>/XObject<<>>>>/Annots 511 0 R>>endobj -1099 0 obj<>stream -x•WËvÓHÝç+jÁ"9'–-Ûñƒ]d†™$l‹ ‹¶Ô¶š‘ÔB-Ù _?·úáWg8„œèÑõ¸uëVéûIL=ü‹iܧÁˆ’â¤õp‡ÅüëÓ'ã8ÓEo¨ ~o üUN³“x8ÂýádõùéhÅþŠŸÂõ/&Ñ„Ÿá©¿Ú>NñÆp2æ÷ð¿–´<ú80ÂRAÃ1ûµ|èÍü¤{ +=š/÷h<¡yjÃÅäô*U#kGt_«²QåŠfmUéº!UÒL GýèñlþÍZŠÇÎR.ú°u:ŽâˆÞ—M­Ó6i”.Ý›CŠcÿfŒˆðæ¹ReÉ.6ªÉ¨É¤5ÍYäRyîý€±o”¢QkI_T™ê¡»9U!ÐB&™(•) ©¢Êe!ËF¦ì¾G˜†Óµt;ë|º¿¢‡SÉÈZÝøp3›Q) -™R¥*ùpÆȵҭ¡µ¬ 21¤—>&]æOäÉQÞŠrÊ‘ÏD义üÍþ(r s¤+ÒT1D"§e[Z´D®š'Òk•ÂðâÉe-7bô^Q$oSi^³ap¯,‡‚-uM©ÌµHe Š›Ö@°¦¥Ê%0Õ[,§Ýé¤{7ïö{ n’+àg¨­tI©,D™Úº×‰/egM˜þHæ¡?Çѽ…¶·°®B€ð0À‹špõ÷Šz™¦Žô‹ú!ê庼ÿòpFÈŠ_~_X3œÎÉȆÝwö*ýpZË%Ž7Ú"Ø–õŠN)kšêu· ²0…Ldt['°­dT:ƒ»n¶ñ10ÃezˆC ØO¡x©<œˆg´'¥ …«eIŠ% C³FÔÍ[Üs¤²>§we[ü¥æñœ“l’(ŠÑLJFÇf¼#ýíìí¨´Üh TTX¼véY±ÚG¥0i*©µÑË&JtÑ=Äq 1Ñ - íQ%þ,œøð5ôÖ—÷ïÎ^3`õS0¬j Þ>ס—I"¡+Íú“Ó2`0ˆsuÃÄñ -NèÅ7™4æ%×ÿÏÌ>½Fƒ†nd lí`ý{+[IèUµ¹C£ÉjÝ®œÈµF²@/l-¹ûSш$ÏX,MJ?S®oz±ðK±ÿ‚ƒþ$Š§Ô ÀÍ3‰‚e ÖBÊ’Œ.¸|P#D“èrÙ²à‘X趡M&‚†¡ ÊP!”r€û%š5•?xùþÞªÚÊ/§cY³ãbÉ© »6 <PöêE6ÓÆŽ]§¶·`o›dYëb+^±"º¤E»:r+Á˜?˜b=¤ Ð`…H÷ÕçP}:H(0¥Ý4²f­´AÙ8í5¤ûxÚ©õšåshÎ@âg©cŠ-´ºL0VB•çÛüŽ•9ƒ˜KS®¡G)C.-<¶,*‡ ã0ŠÈ³7 n“Ât*³‹“]ÌF%˜‰5ÉÇL-#ºx:òd|ú†JÂŒ4fÊv²§Œgêø4Lˆuåm F@Ú6¶ï 7»ÂD ¬Ÿgò‰XÝ6*W?ÔDĤöc40ÄTTžë ct;£¿ßÀN£’‘ˆEÃÚÉd^‘ZÒ“n­¯T¢ì8ea ™ïP;ž»×#?4OéO½ 3i×{óÎ8[wš>£¼JÉZØ݀ɻï¦ñl®íF0†aHÑ:¯VGºîïvÿ]t}Ú¦û1žL»q·w]ÎîáçErý³kÍË!ëïR­ÚÚjî^_øüûØ{1ÃâŠÁ ÿDzíÕWZ›ˆÜ…¬_}uÇÂ6aû(ê.øÈ/³ZbRaÌñò CeÀ»ŒYáv»Ïn¾ šAˆÄ¿B«( »MyW߯°hÔk…ÞLj)û·%Ùñ•‘eÌŸ²æmi´ÿvxì¤ÄN£½ýEä ¿DcÝÝšÚà”Ë/Š¢+ÒŽÝJ…›¼T•èaÌÊÜ9ÖQÎqc -ñxÕ -»ã³Õ –оs«:Q¶–þ32ï² -³Ð%ÄŠ'ÞoåsÈäS3·Ü ?KV*—låøŽà° õ[쎑À@ß8W>ã¤mpèûy&!ªÛpÍ9xÀŸ ìê×Eàσg‘‡2ž[í[H6“Ê -Mçä­ÀdºÍ!‹|(˜Xâ{Æ%[itþ5ˆòò‰‚ò‡Ý -b̪ëìƒðn¹çì9ΗVÙ[µÚiÐî…€M§L¥ÁE÷¬1¿÷)<£ñh⾆èÝüäãÉÅŸ¿endstream -endobj -1100 0 obj<>/XObject<<>>>>/Annots 523 0 R>>endobj -1101 0 obj<>stream -xXYoÛF~÷¯¬-RwÍÑyHzØEZÄyX‘+‰6ÉUvI+úãûÍ,/)JQ9V´ÚÝ9¾ùæ ¿\„4ÂOHóˆÆ3Šó‹Q0Â7üòÛ¿\DQÑl1 f”ÓtLêEF·|šfóq0¦ÉbŽÏ~­¦õE¸ –4ÆÕ1_ŠÚ_ê-sZLöÂ0‚‚ñh„¸ÎÐêW|³¿Æîrñ½ÝÞ:§(‹Þî‚EE‹(˜³àpŠM¿Á½5vÇ#¨ïíöÖ¼» ýÝnÝé¬ÕÃ’'ÑF†óúršÀ÷E½’ÝÞ»³ ¬ógyW§KA~ÂrýBnvK<å{r÷zËœæsÚíõ–0vÁÑnóÕÝiü톮ßâ~Hwkb{F!Â? ¦³Ý%B”Ýŧã25Å󻇞¡$ Ȭ©Ü¦ŽW¹.Ê€^¿]R8aÁÃZòp xÆ$æL èµÕªL‹ }ÚÙ´(Ÿ}ö‹F¸:çãï -26Ñ–JC®ÚíŒ-¡QSµËŒJXL8“Øô ÿ­ÓL»+:˜ŠòÊ•X[¼Ç¦X§› -,Vr‚ÜVaQ¨\'­b?”ƒcbíTñ‰ÖQ ãr™ .§ݪ|¥.>–Ú*säŒØ)—qv(ÍÙ~U”t?ðn¶Ø§íSk¹Ó^9H_ècZ$fïèÃwUŽk‹«_˜§4„œµ±§xànÁhÝ?oÜ‹fàÐý¹­©²„r“¤ëCkŒ¶ðÆå«€aóxA™J9±ÉÌJe´SØÀcGªÀŽ¡˜ÃªåÌÚd™Ùs„8'žyï^l*ëôk`Ö`zRYÅÁtU¼%åèr§Êí%qä”]¥¥UÀ••×n¬4êÔ.S1Û§åöD¯Ú/@ÏFzÑÄ€*–\Zêûç?z"ŽhÉfN‚ð ª[…=¯_kÇ%»ë0Õ.Aeh€©{€´ÐM¢-\ -èVK‘;6S+i‹Má¼LïŸSŽØîÔÆËmýoœHÊ ‘(F9ì‡2ükèÚÔPOdwZÄZ«¿T©ÕÜ‚YÜy»®ßN¤éL~cYîDït‘ó Ûî¶dr$Ku0Wu‡ò›e„z¼©Ð&P‰P‘Ks‚­„ð4iP£,íj\YóWrŠ<Á‘b•®GÆ¥fÒˆæͤñ²*·†ÛØãcÚùÃelŒfS®oŒ§Hõ Y¡œ®™WÞÍ^ÿõ®qû9r‹ýTÐüÓ’¶¥ Øé!ë¬Åݼ¼4]Ma€Ê˜èûHÝß}S…ô}!ò–³3ãºu€B”,´°”Ûª{#bN@~mŠÒ¢CeŸì™Ù0Ü~N鹈`:“¡ÖØ{ª4Ùâ€U‰BɹƒÞЯm ?Q ]ŠöÆ>ú.¨‹§ÔšB(ºßj ÈÚh{‰`ƒÈu¥ƒH7kœjÅKfN´µI.ÀŽ+”ëCíAKÏ.…%éúž„aèG¯]ÁŠCk†ÑÕæG“çý|Ê`>×´Wð‚^¡_ý‰¨Ëi*@ÇK”5_fšaLù›ûÕ^gY@ïÑS0 ÕðUfc‡‘Óά•>/XObject<<>>>>/Annots 526 0 R>>endobj -1103 0 obj<>stream -x¥XïâFýÎ_Q‡"-+  LîCÄÌ@‚4Ã`“;Ýœ¢Æn 3¶›¸ía‰òÇß«n IVJnW; ¶»~¼zõª¼¿Ô:ÔÆß |êö)ˆkm¯+ü£Ã?ßÖºƒ;¯K·ß»¥˜zþ->Ý·ˆ–µêwÜíßzÊ]¢^Oö†üîã_*iS»_ÕZ“6ÝÑjÿý!~ ­Û6­‚~kþ8õÚåWþü'ÕTI¨†în[wÃúÇÕϵ65;moÕ£]ô4ÿnt:]9:[Ñ(ÚïÄO£Í¿háy:_ž Tâ×n·¿xz>8¾:=×™ÎìùÖä–:ÆÂ÷=¿Ý¡¦?ðz]Ÿ­VãÙjú2û-Æßš.Æ4/ž§Ë%..9ýÖ¤Wo2}¯Ý¿å£Ó„tÊ”2MAž¦2É¢#‰0$A‰tLIIÌij"ÀYΈãKå/9â ©ŒÒw…ÇE‚œÑ²_&rCFÅ{P>Ò[DQåàUnlåËJ¶%û^:-¸õçu>·^ãõã ýMªc˜)… -ZÑóÚ-ÿ‚H¡ =zÙË„ê3‰Kß®b™IµÝ­QÝÖaLõç#ÏÒ<(cÝ&¾N!ƒPS<Â(› .°ŒtpÂÒ¥zså4ïj‹gÊF­Ï£çyuxˆ #ýÅ1;CŒdðI%ÐYF3vh˜¢@.fG,²`ÇLC€e—8¢\Er¨%Ö s ­fÃO¶&wÔÌ°J4»§8réÑRf;´zf, ãÏè1¾X&⌔=#þ ­/%¡’+l?˜“É:p›YÒ&\e¦…‚¡jËÉeú*kÀ{tê Z¤Î©µá\™R¨K:S´—˨_jÍ^h¾˜ÎVã=.¦?àcôÃhú4ºÓäeA«ï¦v\ðŒ(zºxþ›†GO BJh c…?؉dk{Á°€ÐìÓÓ™ $ÙÚ Q¤(?.8ÙdÚE4‚ÚE@Gü*R®ñ ³UËÇ0-úÃx4Ê2ïmáï]aZU´Oõ^¦‹³_œ?ìT°C-˜p œSœÀ²WÞmý ]Ð&†ŸÉ4…Ý‚)¶nÒµ&%ÒÌbä=J«B;ÕP ’ƒ #$Tf‰£ =ZÁ^A„²UÍ^j£iÉË'Ub2ª yC¹Ì^ëH¦WWÒ·±_ú{ÔVEsà&mZE‰>|sYóJN‘ -Þ Nº~ Fˆ>‡Ž²â²H—Ž÷š†T*ÛýY•vgsX–Û$®+Ⳬ ƒïÆÕ•ã³ ðBJEû[ÁZçY!©dï6žÒ¦óŒ-²­ÉßY-–2âÍFœjË¢ÏÁìõ>ß[Ed9àÜäÁõží=æ˜>.hxþ#§ÜE»‡\%ïø"µ¼c)ß !ª–ÊXcÁ³¾íúÌ£׋Bsª˜P„XA£ñÚw府¡¼ÐWRâ¼KS´Å{%Ç°T¬SÅCdo±_ñ¦Y§ƒŒ¢æ¦RBÛTç{[ÛÖdXP ÓÇÿ »Ô¿ëyƒ.omËÑóý4×?³?ê`%4Ìmxv'šß¾'þÕE±7€§þнdöÚ ÁxUû¾ö?Ü!eƒendstream -endobj -1104 0 obj<>/XObject<<>>>>/Annots 537 0 R>>endobj -1105 0 obj<>stream -xµXaOÛHýί¡;]*c'Á Hœ´œÚÀ‘´œ”ôÃboˆ[Ûëó:î×ß›]oâä@×J-Q7ëÝy3óæ͘¿÷òñ/ ~‡º!EÙžïùŽ½õ}ü¿ƒßRÒœ7ð(üqûv//¤0èááŒ:A×ëÔ«”Æ{Í5v^ÐÜm¬3êú}¯ÛØeÝàŸ; º!Cò­Å°ÃvÁËŒoÐØk,3 -zŒ{s°¹Æ.Ünm®á‡ïg›kìvú[ºƒÀ;¦ ?À™Œz8Û¯W ¸¹ÆîQÏ;jìr ‚°,Ø Z»àƒAÀá::Æ—À{†Y˜½Í’ÑÃâz¯±Äâu´Ùcs½Ò~6Ù;¼„=šÌÁ”0äÀNbß&Q«ïu¼®GãeQ¨²"A©($åËì^–¤æT”I^ÉR¿™|ÁU= -{U»ÓÇE­ë\R¢õRRµ-„&Q&Zæ/qò_KŠå£LU‘ɼ¢H¾x,²{‚vpÞ<•KS¥H×Xâ2y†X­òT‰Ø ð©mˆ -ËsURàû¿é&J>jgõ.ÉqVÓhBÛ;¶¢U&W S¬¾®Di­‰gc=MtåÑÕœ2…‚39©\²× ›u0ࢤåÚ|4hø.sh»ÞÊ:¼?LðZTQ”&ÐkYÕžF*ËDo75kŽ»Ø·(¸{FPLVÆ…ú¡µŠQI{Ó&b«¤ZŽ&¹®Dšâ°=áÑIš«4U+"%ŸDV¤&O µÂíø.RË4f»"Ò[ÈøÄò§cG ®n¤çâÖÚS*Ôƒ¢öG*•ª~Õ2*ºѾ×,½o\`ß°´u®2‘ä§ÓÑðvt5üL×ãÓéÇ¡é»z"—À‹žE¢Djº; À°ÐÑ®…Þ89Ä^ðà»RéôâGær+óT<è“©ÿ4@Ø}ß…{뙜“4áçæúíõl¶(Ú׋ÇRGeRT‰ÊO¦öùÝs£k:¿½útqKÃOë÷ó÷ty}K“wWcº¹½M.n^¼‹…~2u»ŽßÕÙl§$~·ee*g£Î?šÍö_g&6FVÆË(’ZÏ—iúÌjFk4s[Ùô:(lö¨v"›ÆÔóhÇ,I#¹¢º4=&Âè]£²!ðö'’¨^۠ΞÑ~æb™VuËQó9úA]s#½€¢k~0É!‹In¢|x‰n[g÷^¤òù¶‘?É nßaó1ð0¶;¡aÖuÊe„nÀý¢dKâÊnm#qòIFË -âžÓu!óÚ¡‹§Y‹Ë'¡·³7°Ê=$Î’n•¢B‹f·ÚÛMò1Iå:k%žôŒäÚµf!TS’€d®Û‰ììMMŒ¨~º¹. ×üg°o®3íÑ|˜¹Ö4JgÀœXÇÂÄI ªÎìÊFõ”ž¥-Ö-û¥ž;C¾x’1Tz&ª¸µ†¶™–ÚŒÏÇ›´\a¶(AN÷Ó:Èagw7= \¬¡cWÔl¶™1sÇÿ¤Õp‡Œß<{dKÍcÞ#`¯ëåQ¤K¤™ÙV”ê¡-”úJæYÝ”Àqt9€#¼ÔϺ’YMËWz bÊ*:4'#Qìð…é% -XÇ>Fšƒ|Å<õ͵<' -”L”φ|¬!u!Ý-0Ñn&>ÎмTb`縟ñ„;φbFW0Á¢rUY-8°È7à ´ÅLj¾´lq»’äÙCŽÙœHþ¦ÑF"›rJYˆ’9fƒn¯tqn½&q̵ -Ù)0d*JUÄáeH94ÙY5ŽšñÙ¤“åJ³:Éâ@ÔB{Àj#˹à ÁþÐÈË<‘ñ>+fÄeÉŠ\C¶Áöh¤ Lò/ÇÆáÚP“Ó:î:Dœç]£~ÐÈÜÔ%܃nVò©bdld[FŒŽ. ÄWX•ãÙx™W»ü™,¤‰†ggÉ3wƒp-<ÿÕ°V,S g] éÝHßKzůG¥ÌÔ#[13β7/6,—A-¸Aˆ? ð^P~gl‡ΆèIê Ú «hÉN (ÓÙÚî@»ß1Bø]¯–½~Ï뇼£ÂR/`(“½?÷þXÞ»endstream -endobj -1106 0 obj<>/XObject<<>>>>/Annots 544 0 R>>endobj -1107 0 obj<>stream -x¥WMsÛ8 ½çW`rrgbÙ–Ûée§_i3Ó¦ÙVì¡Z¢m¶’èŠT\÷×ï)*Š’v;M˜" àááúq2£)þÍhÓ|AYy2¦Xá|z{2_^D ŸOñYR2_E«ö[AŸy?Ï—QÌÏøå¿tâ%Ž%«%¶Åø_KÚœÄñ9îH¼PÂî9oqß±ÄïxxŒMͧ³Ç÷ñƒx¶ˆCCü`6[=~ð2=™\^Ð,¡tƒø+ü‘»°§”f#„GôY”kA¢Êé¦V••5ÝèÚšgé7œNp³?=Ž—8=ºUU®†®ÓI<t{>CFÖw²6$ŒÑ™V’ =n¡ƒ²;’"Ûù²Ž(ÝI#©Òu)ŠâHV|—dw@ +¤7ôþ&=?cóSÏæf_}ü€Eº¼zÿ¿¤Í¢(x^6Æ’(Œ&ÓìQ¾-ÓU&÷–/䵞k¹w -úp#zy¤\nDSØ3ÒUqØÖ• {Ý]gT‰Rætê‘ë£v -ß~*sºæh¬,ƒ£¹–q[ÐÃEÞB¤*ÒuØ­vžQ-PMÊ’B8ý£Qµ,%pGt!!Y¡°b¢öŽx¸kdØ°mž;'~Öé}8ºPÕö”'*ç±D6} -á ~;Éaz«2Q<å=ûí°WÛ -YM%`Vû¶iÁ!õ…9­E!ª ¦ m„*Hƒ[ø®6tÔMÃG8¸z-9­ŠíÂ]J†ÞèêŒØ×É%× ³{dÊuÆlür ý>#ùNºðêF½¥Ée.‘USº @dº,Q^Ï£h¡|þÞÚa§P(™¨®7ÆãåC@}‚Y(N$dÔÛZ”>è­¬$â\,@=\ }Ÿ…>6Èê˜å`œÒñí¬Ý?ŸLTndtSg¶2ª¤<©Ô²(ø7¢x˜ë¬ášt>¢h²¢É‘A'€{°²5Ê‘«Z­‰áG™™ñ7œ¢)Ø·®•tôì‰"*³Öyã¡´ØÌF -ÛÔH¤!`âj§ß Æsî/H$§~Ñ-ëþz"ó¼=<÷B”é¢h=†1¦ñ…æe˜‰Èm5Äîðè¾ã L7Ž.¼KPàj0»–¨8eu}‚]Ʊ¼AxkAܱ.Î'«NœóZA)h/²ïb+Û–µå9^F+žÆ×x±l Û=ìºÍ½k€¬’”@À3øE„Ä•oè`q厴øÿ?O ª2:ìæõ̚ᳶ̈́qiwq] ƒ[B×õ4îœø㡹?EèÏ=HÃÀ1ŽWÑì‚ÆIâEƒ¹Gô* ÍkŸµ›Y yq¢$Ã9`jwøÿrfèZ5°à ™Lï%Ÿ³\g¡Téë¨ÓÃÈþôÓÄ—Çíì—±cF©1ýõÈûõYDW™ÚÝËx°4`‰¯©í/µßKß+î§+jtÅ‚‡Nq¨¬–fUHƒ1A‚Pœ«ëKj—˜ -(.œª¡Ñ¼H•”,Kk ^Àå FýY,†Â~¿‘‹´_~'GÙ?¹°bÍJÞ>scJ)ŽÜþ~4Š—ÓÂe€Þ¥é •2Û‰J™ÒDô“å Q¬(¬".ÎÎÒÚtsjN_>½wyc8Df¨ÜŠGÆÙqÊg§·¾ ,3³ÔVq‰Ñ‚ÜÀÃî¿­š›·m¡š;äJm8ÐßÖDgÁãFïÏÉð“èÀ¦ãoÍ[} ÷äj±ùXÚ}†aTá1Ô/…B!-<¨ÈŠéárµ‚žÔÔÊ)ÛÉì;gŒëBæ&JÒŽ}ÉzåFÔ‡v»ÿ0¨›žèsè]`OPÖát‡I‘ýj‘ðV€×kšá¢±÷füîãmú1ÚÞwF¾ZW½ -3RÛÆ1ØÇҎݨÿ”ËÀMš³vÐÌ?°Ù»¼js4[àmr5Ç[¿Ù¡k}~ñáå ¼£éohºôº?nðÉq80^Æ®Ëý÷ë]²L¢åbå›bó-oÒ“¿OþæJÄ"endstream -endobj -1108 0 obj<>/XObject<<>>>>>>endobj -1109 0 obj<>stream -xWÛrÛ6}÷WìäIžÚŒnÖ%/çîIܦµ:éƒf: IˆH‚@ÉšNÿ½gPÚyhãĶBpoçìÙÅ÷‹uñÕ£qŸ#J‹‹nÒ¥þ`’ôi8óïøg$-/^Ï.^¾R¯G³%ŸMÆ4Ëç»]š¥AV:ÒKJuQˆ2£\•’¾H““Mªœ½œ}ƒ‰4š¸'ö>Ë:óþhLáiãÀ?¼î ú0ûô-„•­Œ¨Ö*9©ÒI³©$§É­å¹ë꺾îO’Þ”®û£dÈÎg0¬JëDž §tIi®déhÞQ%-´[ÓR›ÂÎ/©2z«2iIP!Ei¹ßkiöª\ùøîŠÊ hK™p‚³AÍÌV¶@‚+Ð¥CÒ…péšßÌ•õ…Ý”zW‰O› -ÉœJQ°?K;™çü³qŠd8žk‘£3ðadFÁ)Â+m¡ly~ÅBø·¾ªV,ý2 ~c¼6‰oœÖù¨´ñ*…‚¤ÒZRø["ÉÚu²B”ˆÈã“" ~¼¨ÀF×e¸p™Ò![,BÑÆ$¶Ó>kªôÙ³>ä—ï»4e£ÎýaÀµ—"]O[W•6·Ò;™ºš¹ÏàÐ -5+)”n~óïu“ säïÖgâ?½„èÍ+ú€ö`’"Q£¢p’êÊ”)_Úì}0¢]o‡¿*~7ÀQxÎg>ÕzEûüjˆœ–*—¾Û^çÑÞY[3³JºÍ²/so=oæPýþáú÷/oZü?÷{Ɉ«2|Æä¹Åw'Ö¸‹JŽFÛ·,s RÀ„’q.±øÐQ“RïöWè:/Ô‹\–d™‚X €»[HUTx€>~Ò›NkHÀÚ¡Ø÷ÙŠuF…ª,¤ÛIY6AF•Ú -£tméH£¨ÂÙdz>ÉGÁ\ÑI‡©2Íë ,öœÑ‹Û -G[Î>C=ÌW’º»CƒþIÛ›^2yá{«±:½!eŽöƒèpϳ~ùڠ碓`žž|]ž69¨Ëå–]ë#ƪ„’ -×èb0‹çb+i2E–#“ÐI½„nY¹\ Pm†Dv*Ï[y‚ñ²Xà™c G“4)ò?5ÔÄ)6S"×+ôK¾‡æÄ‚ðØ»7¢ÿ&.2biùý^«tC¹Ö–®–ß!†¢ÝCÊ -D¾‚<£s…c ,0aDz:…ùøéóý|þà_˜ÏßÔÆ€wotéŒÎ¤Ã…ßçsŸÐ|þ®Ü*£K¦g0Ú(Þ‰Q®¼o%¡¯ÍI]D¾{KµEA8t”ê„Q ÍÖ¬ÈO_4éÿrH‹Å¢™ÅŽr ØÚ59cד"ÃYƒH(¡z‡°Í…9“i8*µ „A¸-$b0\ @¾—,œº˜¢‰˜Š)¤j¯kNú™œI-=g‘.»93nèG£Ì~ŽžO BrÃXžë]U ¤“«B¹0æð ã ` D:Lûá $±BÒ‘Ÿa‰xšø’ÍÏÐÁԜ޼œNZóÔ“àˆ4‚:$Õ7ÖÅ 8¥67?qŽ“¡Ø¡{…õÊo9ÈhitA˜%å8(þ?$}$­¤±"gâ ¤kQ® óÎN¾ -ÒŠÝHoe†á‚†ƒÂ'Ù¢mdÎI{EE`‹%>VP@>¢$(x]ň=9–:ÏÁËÜCÏT­!ÆA"lq®hkô «,YÍ­—¬ƒÏWì»ïa7¼[zÎeÚ³ -A×xö•rwŠœ/FÓƒq>\ñ;~Á+¥Ì<…ÓP(¨èÓdÒJ´‚…6ÀÒ¤ÍÆ{³,a”óõºiÚnØ Õc";&ÊNlP•l‹@Äj!Ó Eíµ/@óz(X¨Äô1æͶramâJy¬®|*Àcƒ4ùÇ›A£«†M2¹ 97êØñÛMB_yÀc Â:é Ñ¸zpN¹Nytˆ¨ ÏvÜäuööµŸ©K¡ü õS -9éÊoØlº¶ÍqÈÍ{.K°V§¼ñùuõúDNpÎ/½¦…”Ž»o(þŠfŸÉØo+~ˆÜ²¯Ú·¥t³Ì lW •+Í^þ…ÅS¥-¸¹ÿ2Ž -ñíØÏrì¦vàrl䷲Ȱæ"íq€ã|=à•zn¢­5FŽ¿r âšœù%3G–Ú8§T /ïº7Â5}2 ëqß_¦YËÿƒŒÇÃd<š„‹øpÀ&ßÍ.~»øŒ½'Aendstream -endobj -1110 0 obj<>/XObject<<>>>>/Annots 547 0 R>>endobj -1111 0 obj<>stream -x­UMo›@½ûWLoD*k¾ vo‰ÚF9¤Jk¤\|Y`±7–î.qòï;³@â89ôPYFf?fÞÌ{óügB€Ÿ²âÊv°WèÒã×õ"Ž3¶tµa)´d[Mo lé<$¸C²Îðw„_- ^\å‹å÷Âòšb§ë òÊ… /½›žÕGÞY° -Z¹×Ü -àˆ'i¬ìöp‘?` Dâbx½–Ú°JÔãÖÞƒZ6p[=èÄŒ°CÿÙ½–ƒÖÓ¨®y£šÁJÕQ„ü0fâò¤!ƒîƽì*u4ð#‡Ë»{Ú‘±¼iÜ.®VZ>"„[¹¥ÍÓ¼Ä ?`° )˜RËÞŠŠ²ù'郎E¬æúÀ´EÙHDz^f9?«ûòó ¶b¬á¦u 33tNUÃx ¸ËqF¶Þƒkû/Ë¥œn3£]ŠZé½`°KòzÏýÂ{§µáÙ‘FÞö`#òrªÒÏØ:„˜Ä„]ßEi6Ñ<·Á_±Íz~š±$vÔ\–;tûOo»â2¦,HW(GÖkÕ4êøp°¯¬TÝ;Ñô\óV¤€£fñˆ‘•Ð)UD^%z-JTeåx>Jä—µhÕ#®¥:_tjìæ«š&µØ{'ÆI=Ž3Ö½Ž†¥,¡*&…ORE½ó®wõ§èM瀮Á/º> ¹ó¶ÿ1Z£°;¤ª;O¬¿ -X¼ ÁîH3Qxà[,:°Gì+Žñ)GUEýÜò¶àè3ø!žHm…°È"˜¡ï•Æ9¯_ì -^þ>r]¹ÆŸÌ`É{^ÈFÚgÄÿ–¯’†h)¦Wª1e3xowáA©Ý 5¢Ù f+@ÃW'YFê8æ}F” a8Åç¼` -6â;AÀàJÙÕŠŽ‡¶¥zbbTr%Èw -Ô(ö‹ qœÙÕ;o…à[4§žïÉmQÚ(ý©Ü -Šç3èµ|hì4ÅëI´!Ng°Ž!J6l“·—·W—p§Õƒ(-E9´hdNÑŸoøYä„‹ÓÍàÖ™> ˆˆÔª}îËOt?É–¥kü¯Â\IBKßòÅÏÅ_!Ûò†endstream -endobj -1112 0 obj<>/XObject<<>>>>>>endobj -1113 0 obj<>stream -x¥W]o7|÷¯X0šöIrIéФ1š‡¢.¢"Ixw<‰6<“<É÷ï;KždéÛê8¶t"w‡3ËÙõÝÉ„Æø7¡ù%½šQQŸŒ³1½~-hº˜ãå%þ;IÕÉÛåÉèê ]ŽiYaÇl¾ eIX=Æ“âÅ»µh‚t´Èèw™·«•2+ºvÊ„ôÂæZÖþåò&F™ÌS”‹WÓìq^,²IFLp¶l‹ ¬I+§4™ô+/çÙŒW.×ʾùµuJé §ÞC¶¢µÝR°x - Ôìò7.姭 -kú(ê\d#¥í¹ôG;9û˜.&¯ºãíû¨•³5p|üó-ZI83ÞsxòÒm¤;'cñx-É⇣­èH8Ûš2£+ëâ'Nb¡—Ø!ùý ·¼u£¥íÓ–ÊÉ"X×eýÒËY6ejþº='o©³-ò$4qÓ×°(BÇBG×ï˜ (¬œg¤,G0R–¼P.S2ëa-Â`:niA!ŸU¡ZwT‚ Ó=h ‚—º:'è¦E*,„Š,d­ÊÕ! å2l¥4 €‘íhåäühù£îâû6÷²ÎzÀ’TÀbú+¥ñƒãw_†áýႨŸ¼G!¡é4²7HZØHËÓŒ>‹”žú‡‘¸R‚©¶aö€z¨“½][À‰dÇb.,—¾Ö ¼õ¬€Ï ù:Ïðy•dª-¨sRË +¼[öåÅv­ŠuÌkÑê’´µ·耄x|þ]LbÒ±’_^¢,å¼at5¦7»K7M•EñëóJÛ\èwaÇp ”]úTðÓ Ô4¤‰ýH®o,Ž¾WrB7w{.SØ ZÉ@qݵ²ö B„oèW\}álÕv#âÆæß„þ9êŒ*ôd®ñ 6Â"”‘nÊ‘ç{ž;ô©Þ¥PmÔnYMPKFPÜÒ­C‰Ü¶á¶)·\P»‹œÛà4=h‚‹¤[éùæûPNú¶>ˆy‚€…>ktõÕÙÞ'Gz~BµCúZïF¹2 ÏѾ¯Ï:{\ÉÃR8Ú}kë™Ý‡up´€Å¸ûæ)¶Ž‰ïCø„¿H<”øß! À#EÔ7’tŸ=®“Â[#ÐJÑà*Ñj8h•ºj¤” n[tÞA“RèyNyØ{•7?«Pnc;˜ú.?eóÞ¥o{­añÐWÙõ£·¬.Š.-nÙI–h[À/áR¥âFì“WõÒ{îÔlIB£ý¡ÑrªEäó,T¥`‚ .œµôçÜ!’c•9ܪ‹=&Á€Öq/¤ëß–ÐFèVú¡Ý~bŸç†Ö[L€O¸Å‹\ö7©Œ­i«´Fž[ö ô’Æ:á:äi:ž.˜¿ä û& oÚ¡Vqj9˜øƒ¹Am2ôE4S¸Z¢…H§l©@"g¡¥0 ‘xìïK2{.º‡òQN±Ç9à3¢Fôd€à¿â -^KTÉOô¡Ú¿¡J(™NdÕjµ°mÕ² -ðOM[à Ó×ñýòäï“ÿ%ƒËendstream -endobj -1114 0 obj<>/XObject<<>>>>>>endobj -1115 0 obj<>stream -xVmOãFþί˜êŽ†“'NLBʼn;é*UÐ&UUÖö$^b{Íîš@_þ{gví"„øeÞç™göþ „!ý†0ÁxIq0 †0ŠNè4›ò5}4Âʽ˜DÁ¤ûüóò`ðõÂ),Wdj2 a™™a™Í‚Q×ëµ,×PiYZÔô­â óiyGꄤÅêýÑ”\,Ó£Ëa+žÀ*HYÛkz^¤á·Æ -m!~¢(«\$,a34‰* -Q¦°•6“ažƒI´¬,©eÂ’|¢tʹÇÁˆ] ½® ,IŽÕé=™¢ ùZ¹{—¬dŽœƒ‘E•#à£pßN†bÛHÒö7åÚ@!×ʼn§>å!œ´GAÄn¡ùñÆÛèç0°E50âý‹Ã -]Ù¸X¡/k~øaËò»`›Ô0˜µÖ?À¡SSO]è‰p×ÚEXÔoèj£™B¿‚3E¸¨ÞPpÎt]6ô½à‚r*î!j­4hŒXc›Rø"^ßS/ÞVÄõ“»¢"¢"$QÂFÉÚ“ª5˜'c±x#¦]y¥¡OWCø8‚ÑÙÙ¯z‰K‡Êe†%ûðhá0àa¢…z`JÀ_$U€W WjŽÙ÷ð¾Æ¡DL„cjˆUU…)È”4 Œlì"“-x]B½­=@W_¢;ï…WÂ?Ñè?8L2™lš˜ÉN¥¼ä˜%M'¹$èÃ`«Dä™2vo£ŽŠHS<öJ$²šS#ù7‚8ƶ·£ãc( a6sº -ÚÏ°cîJ³¥:œBçÅ…*„,ç×ç‹åùïË[¸\̯ÿ(åã-,P? ž_/D f­`zÛQ¦dNáææ¬i‚kø«ä«ÚZn!·=*”0T®~8=Gpsʼnææݘ5Á— ¯y¸Ï«k\çe8ŒNÜØ›áw_­¯Žð.þD” æÀÊ‘/n¤üûœÓ D898%K)ÌŽÂ;lþÒšhÌbºÏÆ[îࣴ¬øöTAχף HeBãÜ°4Cž“ØR<ÒÓh ½30‰ùY†ü4H%êKKŒkr)—A1 I´‘7LÏ3JYŠ‰ôVjiFÕ–°Ð®€Ò]äJm€V;|É/~haËë…e4š:ç=¢qŸëûZ&›¼¡ ò ²]1nËñ’s„çˆÍ±çã.€Ëí%¨PñʘXÛÅêµ(¹có&éÚdà,%¢òqqV¨©^Fª’¶\ BKEóŒ¯|õžïúþ¸Y]³`ÀŸœµ“Gm UðÍEôóë¦7+¾­>mW­5ÝVº4=Îb­EÁ,˜d˜l:ü^Š(EŽŽy…Õ†+Cõâž.åßÄHGÝꥌ›}ý“3À( 8ö²'Ïe^›$¼¨äë4ÝÆð|Äæ×HÍ%0ìJ/KÚX…°TsXiU´ë„bkn›2øeÂ6,mÖJå¹Úr¾ äèaÛÞv{bÁG«EbIï¼¾/۾؟pç ²«Ð3Þ¿îØ@#½Ë¼çk5kN}á„š³1L¢c>©,Îý|WZÝabáB%î0æÊÄzýV¼?Ñ 3}Ï 3šFÁt2£ó%ÉG6óeyðÛÁÿóYèendstream -endobj -1116 0 obj<>/XObject<<>>>>>>endobj -1117 0 obj<>stream -x•WïoÚHýž¿b¾‘JàBFê‡Tm®­Ú*×PÝUŠtZì6µ½Î®‚Ô?þÞÌÚÆ8ÑU§(!˜ÝùñæÍ›áþdLgøÓ|Bç3Š³“³èŒ&óWÑ”¦‹9ÿ_§i}òvyòòê5ç´\ãÊl1¦eB8~vFËøtM#ºÑeiò UÎäe¬ -RyÞ×îA;ÿbyKSÃ[MæÑ ¶NØŠ2µ§\ë„J‹ó%[ò6Ó­9Okëho+G7*[)ò{_êŒW^Gô±$ãÉ—Îæ›tÈc›e:OØâV•|“ýÃëø<š°W\ÃGÈPÅ&5¥ÑÎìƒá+«½|$¹/¬MµëDv_é -ÇÛ 9]“#ÀL•ÆæQíi2šðvú¾2×´[GªÍ\oœ’|àuø¸kš–[äÙ‚Üùˆ¶ÊsÔ½4CTü3zÝ`? ±å*Ó¿Tj”‡—IE¶àLÞ<¨´Òxîw‹'¥»Bè*ͬ/ñ’†¸˜¡:~x€ ØÕ€² -§WšP¡Âz msTÌ®a¡Øª¼Ê´31cR¡|ÎÇ4ü3èåo•Sq‰ 3¥v +Þr0vGÛ}±Õ¹§ÛÓÁhpû‚ÐN§iD—9N cæŒâÿa'Gí´À!\cnÎÚ ¹Ô=ÿrMìPNÓ*Ö`a"Ø•°?EƒÀÄr@je«²‹H„j(Î^A -Ð#ƒ=S›MÜÞ’*{þ9<ð›qKMŽcèýXò£6ræ%gUZš"Õá`Ÿ4ðUø•~Ó*ÃQÏv[–­ ž… £†Ö…£;.e ’ ÇAŽÐà†ät¿ÇÛ¶é -8vtIIêqt}òìõ/{ºf‰i¯L+”H -Úà^ƒ~dðü9ƒ~{|Ñ£@;‹ÄÙ*µM“78Q¿?²é{š! üÎÜs¶^[£É«Är¨DZûP‘nßïÀqZ‡RøR¹R'Ã5+Tõ'ú MµAEÁÍ#ftlHŸæœJG Å8±rqm¹©ÐÝO˜ n|‰Ö¶^Zéä6Û1ÇÀ*| -å­ƒ -ðùú[«ólb1„Üi•Œs i_­2SBSZLö˜xiÚsž[éèÏw¯ÿcåàÆ]×J>/XObject<<>>>>>>endobj -1119 0 obj<>stream -xVÛnÛF}÷W N™ºX•d¿9q ´@.MTŒ+r%mLî2Ü¥þøž™%%ZQƒ:1@ï’s9sæÌ|=ÓÿÆ4ŸÐåŒÒâl”Œh6ž'Sš.æxžà·Ò´–‹Éì*Yœº/Ƨ¿˜ŸøàÍòlx7¢+Z®á{¶ÀCFð;Ñ2}EøI3>ªjèKçòa^fò26è -w/IN)3•Nƒ«rk’kúâVþõòËÙˆ.Æ#ºÌÄZîÙæ韗´66ã/ñëSŸó9eë›Ñh\4[ç»ÞMi<Ž\Lfìê/W“ߺ:ϨPš| ÜÂVj\]Å‘¯ËÒUÁãÊxZ»ªÀ>õÞôº •Æ*…,i«<ëƒÊs‘êÒ¼L&ìû<€PÒy´µ3yN©³º -8A 9‘àHu^UYV_ª€KøèÇ™Ä,¯hC×…º$ïÖaÇPs\ª3ðÄ‹¸äÎVͳ -eëµJ^Ú;î:¦h‚­½&9ôHˤT´m1¬EGÚÖò´3a) :*’6àÈL¿I:hõÍú9­LD¿P¹mçTE4H_š(« DpÌÀ¼3iå>J‘º ÝÁµþ¦Š2ת-ýOc¯~>òŒ;¦D~]G:žbîÇ8üSû@ïU¡Ÿî_}2›m ·¹Iî_„šBlÆkÈÊKVO7Ù#ó/{ú² /Qu·ó")Pètëœ‰× ñÛPå·B貄¡¸¬áà?»„„7Bw`Ò q¿Ò8ÊÜ€07Dejâü„8l¸†°øŒç@è6úû–ý1ÐpÎœàG®3¢ƒÃs¦ªÅSÉÓ¡š¤¸ÎƒAØL¡š#穪‘&XW†…På"¼êýh Íú¤v=—­¼ˆ\>Ðí:`Õ¿×x‘´©AÎVT+® l;Ÿ1íbÛ8ÄYÇÛyç—[¥{°Åø‰kž Q [iıÁøáWdÖ±€É%Ó[šêY+x–7(4¬X‡–‰ÛÅ‘ã~UXÙQ ²:2I[–':¿é4ŽÛ‡w’[)+²:çNë{ýQQ u„'é•–r'ëñÞaóèt™xügÒV0äèýnL*lrýÄé¥T?bבíàÀŒ6ô¶©„¡)¡óÝÂ"+…ÁþèÍ?Ü;È…­ÈqØ#§ýOBlõx·h÷×ñ kþâ’f“«¸A}¾y÷æµs_Xƒo]ZPUš_t\Ì'XØÿÇ>8O“ùl]oOlä—åÙïgÿàÈendstream -endobj -1120 0 obj<>/XObject<<>>>>>>endobj -1121 0 obj<>stream -xuËNÃ0E÷ùŠ»£H­‰“(v–­‰Pÿ@“4Uc—ÄAäD–%KsÎÜñ|F1 • ÍQQ,bäI!2dZñ;á;Úè`¢‡çRÁ´¬äZÂ4`<Žaê…À•4TÍ]×ÛîÞœYÉ ™ Ê.Q"gióÒŸeå¾hÅáûë„ÆÙ;]®ÛX åR7Ã5ðÕÈÑÛßœƒn¶ÓÓ2yàDzæºÀ‘(¤s¦LE2Í­ä¿ýª÷œ×T{7.bUßF•9ÿ\§P…ÐÁ=î_{¼îÌ8]=d}é{gƒ¸ûãw*á]4ÿí"S™P¹æM0“A}2Ñ{ôˆ£nendstream -endobj -1122 0 obj<>/XObject<<>>>>/Annots 554 0 R>>endobj -1123 0 obj<>stream -x…WMoÛF½ûW t‰ Ø´$K¶\ ‡¤NZ£pÜÆrˆŠbE®$Æ$—Ý]Zß7³$EÑn‹ ‚)îÎÇ›7oFŸŒi„cºžÐåÅùÉ(áþóÇç_øšÍù3§ée4©2z<¹œÍùål^Î'Ѹ~â·ãLÐlr]áêd:‹æõ¿eƒÓË9ÞMç×ø{‚ÿVÓúäýâäâã MF´X#¶«ë9- ßÄß·ªôÚÒMD:®lê÷”ég¹ÓÅ7¹9¾7Ï/§ˆv‘ o¢qDw…·&©bŸš"œœÒx\Ÿ”qòQå+E®*Kc½#¿E@&ËÌ.-6dJ¾‹o¼Ødf¥2rù*ŠM±¦RY•k„¬è¦1>¦Æ×pãO~/ˇÀl7tñqÒÞn¸:Á#‹CzK_ÝVYý£rÚ.‡‰^«*óËÓ‰ÉUZüP‰ë9O⤛ôûø=ÓÊi@¿¨ujmN¹*׆Q°T9þ+-ðw® -REÒ\IL\åºð¯'7¤Û‡ûwwŸþºÿpÿþÃçhëóìødáˆÎÇL2DÆ>וE,­Tü´±¦‚ÃD{•fŽà?äK¹I45XE´@Õ¾¤Ebv,‰Óv¥­qÍùæ¨\ q¼.[Ô3\žRŠ›ÚÅ6]éùsõƒoj8¤w·ç¿>|Y<üGŠÃHnÓùä*ãa-„R+ó¬ÏhІ÷IÙgm”kÅÄÛ*O¢V× 5g)p¯ß¦ž£µUQ0cë€9"‰hU…ò’U±¯T–íQdç40]¯ Ϥ*äXø4u¶úïJ;öaPs#éa2òì‡S càŽJ’”™¢ú(·ÍBv½36©“¥·ƒhiRI+t›Õèµ^X·ÀåßP¬¤ã;ÔZé6ºåhãp˜øuK¡O‹:²3©R¦X} -ÍÙãx©V™r¤‹Øî¡M‰ É)Õun]는Ÿ%®+T¢7Ñ$¢{ŒM^f“šx¢<ì£åFWòº=Íb‹ÞyG÷ïD½ÎÐ/¨ZÍ\Î+ë«’vÌ©åÄ쀎h$…˜ 8äw¦ÕÁˆPßA/UV†À`1¢/Û4Þr -ˆzÆ:Yk -Ò¬×:®¥w§öÝ38ŽÞ³)N1 Ýx`uêÎÖ|ŽÇi0–P2ö(Xp@Ë¡pyOÇ“þîÁwô:ÇÔø=¢†Xjà‡mz*ÌÇÁøTFO‡^Î[UlÐËè8Ærˆ¸w©ßv2º&U–Ö¨€ÊƳJʇ©f÷ðÀÌ÷ÑJ _"²‹‘ƒy–ex\í{àp=“³ü\»bv›00':¡À‹z†¸ -£¹„»­Æe+­,““@˜Nú*v÷Ä°À5©ý³ëÔ: ðp)SÜJ¶¯>dÜ`Úi¤˜«Îñðqüíó}ƒ™…!q(7·+ÛÆÞÄ&£Bo # #µd1˜œHMâ.0ǸFš¤:öðÖ(+ƒǺô¬!VÙàÌâÔØàEcŒ{{•²€°ÿOM.qVØ„ÎĘåˆëšmXa(M´’2õ¼‡.ì£îµ¶{‹rcN˜¢¨Ì9˜ó,uo½žF×Wó ü³‡ÿaqòÇÉ?Ëb¨endstream -endobj -1124 0 obj<>/XObject<<>>>>>>endobj -1125 0 obj<>stream -x…VMoã6½ûW tʉâ¯ÚΡ‡MÛ{Ð"Š{¡%ÊâF"U’Š×ÿ¾oFŽ•EàÀÉyoÞ¼êßÙ‚æø[ÐvI« eõlžÎiõð€ÿëÝÿ—øxMÅìq?»ZÓbAûG6»-ísÂöùœöÙÍ©ÔØf"™@ŠÚ ½Uµ¾oT'çsŠ¥êÖÚXjM¦¢ÎoɺˆíI(•¿lNÒ/û³9Ý-7é(7ÏÊž)«  -ÚærF‡`œÅïØ6 é7mÉÒxäß´g*ë›*¬WXÈZoâ9¥}©Ï@÷µªªóóMU&ﱫtÉØC*th#ÐQJ/ª>(ˆ“!¿\À›«¨2!’+(i¨*=®‡$¥¿¡ƒ°í›À²J”;Íj&ÑkM™³Vg)'¬³ª‚#•3²ëÀŽÓgåW¤ìñíLÑãã†8üõ;gW´ÎOðK‡¹AvÑy£Ã÷/¤Xw‚“ ’œÎY`†Iø!ýšP¨)˜X·Zdãz`¯¥¬ÔÙk¶õv‚¬ŽÊX‡­?Õî[Yj³’ƒ®5 Í\:=ňïÍFŠááB¦:uØ“±b„¤·ŽØÙŒ~ùÆFW];‰a)ˆúu¯çáS)ËȦó¿´$c -“´¯ÃvÊõ™Hfƒµí‘T®CæÍ‚jåÑ$¾;|E*ªWX &¨Lä“F}'#·LȵQ×M—YåŽ\yv×hèòN‚„]K{$ýSe-ö/1‘Ž …wµ@tJ¤„‹’½Ö]‡‹÷®õëg™¾Ò ƒ -+åS—Ý㬹ôk -4˜ÄDÈë¢C °ªCDO/Ͻ]&z‹?QlêÇ\‹ÁåÚ -²s£#®î2‡YsÌ7h•— ZxjÂ-us˜wôE]UáÞM'îÁØý\”¹=¡jìí8g>Á Å™Ð6×µÍü¹áÙ$%Â’ØUÔí÷Á˜×4L,ÑÄÎrõ:‘h¯úŒ1¹G*s#irÅäÀ¯¡2é{h̳:%±ToŽ§^ÝLà®Ö'€O0/)¶ -ÃÅ Š¸Th[¯oÅ\çwÁkL¬ˆò ºQwB!2ŒËˆl‹ jˆg,^ˆù@G¢„;zÕ”¸3ù®2õ8¹ÿ `¨Pz¥µæ'lñ.(_‘Ø÷?ÐØ…´ªËK6®L¾6_…2ž/I ƒl­¬:êw1LòeE»Ÿ@OR<±Úì܃¦W4à$eÈÎ6Çß?íú7ŠÅo»­óîÞ}ùúüø•þôî® úÝe-C*ö¼Üm—xÉo~+UÑz¸˜û©Ý™;ðöõvn7;¼¸`ë/ ~ôÇ~ö×ì?~ õendstream -endobj -1126 0 obj<>/XObject<<>>>>/Annots 561 0 R>>endobj -1127 0 obj<>stream -x•WïoÛ6ýî¿â€a€ -IJe;vR´’¦2 éV{û2ï%Ñ–IôH*Žÿû½#%ÿ`E 'É»wïÞÝ1ÿö"â'¢ÙˆÆSJÊÞ0â Eüõõ×^4™†3šD³pD%¢QxÝ<4ïfWᘢá0œ`u|9ĪâÕëYÑt^a-š\cÍ=ðÒÑ#Ö¦ãv#¯Ý.zƒûk i±¼é슩C…7Ið)+5ü„ddRëÜîè#¥ªyEøÌE …¯ïßœ¥hæ-õÇD±HBúMåU^­ITô´ ;~›Ûloaä-L(Š £Y8e 7ÆÔ¥¤ª)/’ÄþÌ+@éàs–=I{ûðeN•À~µ"o;“Áüó׿¢S7¥$´¤o'›Q2=53¤~4ö±Ý}y옻 m–'€àüýîÓÿ„KØÜ1æ°Ù­¢X$Ïõ¦¥=Q•Õ -À´ñÖ›°ùô8&Át)€ŸÛ»Oß%á4ÊÀïìd% °ñ2šB†HÎCEJ§HUŽB²™l€^Ð*×Æ’±jC ²I[*d©*Ðâu]¹‰*K<¿?Å€`Z7Z)û“_štŽ/ÃÙ%4 ¦Œ7˜mJýoàÔ×ü‹éïÿéO¡r¼nÒR4V «ôÏîð›Zñõ½í½w$s Ý©ä¥óDZð+ö¸R #¶M×2àU;*E’å•ôË,‘- +úíIú{Ya,þüƒÂ/¥ˆ xc4†\¨¼2;À]eÛ•µÙß<Ò3î':ÜG>x«ëÔÓ²OÄÓŸËo¿Ó÷X]X$¼˜1Í»ÑËK*fG]h ´ß^A ×°¢Øn•²4 [%7Ÿz5d7ômþ>ðyè®Ia’”â9ì1ŠmÛ€©\`ÒÚ„’²¤G¼¼Áª,@P´[*<9ÿ~˜ 4²•šExrúµ;¦»§éî@XZÎÐ3:Sä1Èäºi£ñzáÑÌÛ>,rFyX6oë½Ù`;[S¼º­ŒÃDíf)Ý^Wsݸ¢ÝóŒ.ð 0ym\¶6˜¾»´òµÖóZ¾Âš—®–¢y{_žÌp±Ÿ_Ь»¹.îïïè§5¿àIújÒ†|ˆËÔº£ëñ ß²®á—3üKp5Åu&ã9ø¶<ûëì$¶ÿuendstream +endobj +1299 0 obj<>/XObject<<>>>>>>endobj +1300 0 obj<>stream +x½VÁnã6½ç+¾4 8®í¸vrÈ!A[`Ù¶‰ @.´D[\S¤BRVÕ¯ïRN%Ù=,P hÈyóæÍ>ÌhŠŸ­æt¾¤¬<™N¦´œ-'sZ\¬ðÿ¿NÒ6~X,.&Ë÷>œÏ§ï˜M§o¯ºYŸüüû%ÍV´Þ"ûòbFëœy:¥uvú rIZé?­¿"rA3päÙ|…4ëüt]H5]ÜÞÈVAYCÊ“± I#6Zæ´i)—[Që0¦MHm©µ5åÊówRO·ÖÑF† y™ÕN…öñ…Bš[Š–Q ÷ì• ·¯·[ ª¤ÃáR˜LR»”SÞêƒ2;Ú* ¥ôb°ýXm½g¤Zz/ `v° +q@U;šœ2‘áÔÕ u+ýhLM¡²âX*€kœ$º^ˆ=;_L ùNŠœœh¾Í§ë¢˜MéÄ‘Ð\zµc˜Á‚(&’]*/ó1iÛœi¤ÉÚX2@ªçóº«î¾Þ™ÖzÉ×È×UeXD¯ +ÛHœ™ YN÷¢ÜßKÿÄMõñ2X¡Á + &(7áE";UDÆXVËÄÓgCÞ–ì{$Ë´’&xÊ­ù)P,ÐL/+¶ÔH­#L‘…ZhÝÈ´ ä~ÓkÏ€€,à"–×PV|,qK3kH«pꇨïmRªÚȬö‘ÒlÏXé +"L/%$¸žª’Ʀ3áÈ@wÖí'ô9P™®â"ÆÐ ZM ]Ð(0 YHç{ÅNè"‚ô‹ÎP0zÅÜ°õ±L0|òû:mŽa?$ÔtËÿ£ÔWˆ¿)ÕÁ/ö¶éÐi —`ŸäáÂøaXF½T>©0 +ΰQiŠ_ÇìTÉDXèG›Ãìø‚§1ƒBwQ¡¢÷¬/¹ìÇ ¼ãᯜÌUÆU~h7i¤Y¹Mê~9Ä‚ŒCh·<&t{ƒi(a³9¼tJ) a”:Ÿ`S€O`ŠTÊ‚”‹ 8߬…É´0–|ŽIÁˆ7BEݲÉpœÁÑ> æH8§2 —°hþ•EJë†ÉŸj•í¡ÿ†ãžïŒ9|ª1(Ýo†{.°×w;«¿Ó&ô7–§O>}¯íL$Í~Ö+âí1”Ñ‹‰‹ôE0½xä´<Å5|žã…Ö1 [€!À=ð%ãÀáÍw¯µ@¾°µ†:„ *«µp¸»º¢D3o¯Ø#Ž¶ûˆM‹='<xâGT›®úeýœä õh ‡¶ÛA³£5{(^G€ÑåD,a3I±A清b9¢`ìÜƤ—£e“(mm°ª*™©­âͺ™Èöê_€ìf„mTèF´>!L)@ëlOm3üÅÕ¹p +/†47ïìñ[ P-¦½ª`¬)ì×Qª©[¨)?ûpêàAa™¾º‡Y²g£¼ýž]… êk­ãÁƒ¦Á6ØÚXcvPQÏÿǬ‹[¤‹mW7ïø\ñÓ ÜÆô`aó†GtLc[ð•×ˆè]Ø1rÑ=gK¼L/Îi¹êžd÷×·7×ô§³_yýj³ºÄòŒ/Fyv>/XObject<<>>>>>>endobj +1302 0 obj<>stream +x…VïoÚHýž¿bÄ—¦Rq1PBNê‡4!'¤p(ê]N§Å^c7¶×·»Æpý½YÛù᦭‘YïÎ̾yófþ=òi€?ŸN†4šP ¼Mü7¤ñôÏC|µ¤È½O‡?x1à½_ÖG/Çäû´Žàd2=¡uHp0Ð:8^+’¹Ø¤’ªtßXì$YÊŠoV"Ûª“%õ/îV³‹³%©Â&*'|øÅåÕÙï+J“\’ŠxåýúÛÑ€úþñ®Ãã…x” zÍúpâyýZYxŒ…¥LfJ(E‘ä[J L§* Ù ÆR!süÖRðbzø@"yo®l½uspñôÜ-ª^'XЂ#÷h—Æ];؇¡ïc@L’dÉÀ&À&‰Ü01·g/pÎQ?-ÐçŽß\õÜÝ?^ž’LòŸìQ–lcK"5Šb™¿`À•‚§À±$u{H0ni¦ [¯ÄÁPXºÒuÆTJ;Ї­M2éÑã(ïß$ŽZ€×H©W´gR¹“i·jª$M[* 5¸ªqRe=ú +í¨áv×l…ôî.Ï)ЇÂöZµHjµx¥oVD] d˾~\‘•9©© +¢BÌ2 +@q¤Þâr\ +K +\uqÑ·ÏLgPNîEV@éî!ª2Ž†÷J?nµ* ›Íu8¦œ[vQ²±• êåµ>_rb%yðÚ­¤ÓZÝDC¡ +j‡¡´"I žS!4rR‚ÚÀw'ɱȦ.3UjTË%ßé>ºß6È:Ö¼Ð[r?¿¾¸¹_Íÿœ9šce5û}1»^»%ÉÙF…ÞBÚ²d`©ýÉΘÉÐÚF³ÊX“ãçŒEª„Œ¾R¤ ‰2µ·Á®FÅå‚ÿk±BH£4AAx}³m¬¾®Ö³…7¿ž»@°”ݽ‘×Ñ]s ]f2n4g±b­UþÎÒcq­âC[´mëYHU9òûByIºÜ÷á6€Ïi+Ñ¥Ê n“ý§ºC¶PîDŠb|8ö'£é¸Ë]ã­!›tƒ,êW¾Vu‘\±X××5(]ŽÈ• ‹ ä`˜aÒ,>5‰Ž_TuþÜ3Ú’ µ*yA’ãy4ZØ ‚U¬úNóÔ€|êŸ 휥EmÐ#Jôì°‘ ¦† ¶è°‚ˆÕ œÉl…›Pñ{Ú¨ýó@Ò°]9°`«¡ +Oݤ.Á5:WA¬à> HrDµ<iÄP«ZH芘WyÀԃߵ`D*Ôü&Py¢¿«ÜüÖ ÚrhŽF! ®‡è2eáÉ=¦5žpUUyYhe °¡!⃠+, 4;ìòlîŒ + FñŸ#*m’&6‘Ýú®âDløþ³Š=Wy”lK´‹ÆÁé'V©ùdØ&Æbäjš£ké\M¯ø]ëŠ ƒh‚´n1.@ÓT†Ž-Öw«ålvá ¨#DÕ`2S‘› )—hkp¦ðÝ €·Tgöéªu~£D¤¥ÄÉC—3Ðqܶ÷Ú§»ßvãzܳ×#†ó퉻ßfr!öŸn1…îÜðÚÇØŒ19<ö=bwøù4ÍÞB[ßÚŠÒà­/§ÍÐí1¾OG½›9xu¶ørFK­¾ñxt¡‚’'+7òɾ?Áý“Á);ïN†ãÉÔ›|6‘ù>4[ýqô?Ö5ì…endstream +endobj +1303 0 obj<>/XObject<<>>>>>>endobj +1304 0 obj<>stream +x…V]sÛ6|÷¯¸>9™Z4)êË~óg£i”¨‘:I§îH‚"’`вúë»RŽÍd¦öØCQànwoßN" +ñÑtHñ„Òò$ BŠÇÁˆF³)ž‡ø3’rÿE_àcï‹ëõÉùýˆ¢ˆÖ9o2™Mi6 +CZ§oë?¯§o•Mõ£4„‘òíúëÉ‹“½‰âÏø8ˆâ`ȯ°ìºéî.ä­t2u?]9úqåZ•’ÖšÞ«GIw–½:mü?kôîãrEñðժɫ>ÜÎéF¤[I+õ¯¤ðUü´ Ç4N(Šš“3Jfô¨ŒkDQÿHçä°‡r²´TÊÊ)]!HUþu¦Ó†_’¨2ÿBWX‡ÚoUº¥Rd’e*Ï¥‘U*Éi칄ßáÜ ë[î¤#]ó!6 ¹#×>N7ŽæÄq‰tDé<§½r[þBT‡_ø§Ûõ¹¤( ²F L.WckÉ»¡&#*‹œÎxý”= +£tc±ku1¦´P(ËúºÝ~&†‹k²Ò°Røp½BR#êú@¯T—µp +ûmt‘ÑüöŽ2ÃÜ?¼ù]¢´‚EÄáÃÛ€ÖÀù˜á" +6RXí…B¹6…”+×A¯Úûù—Åß"W›ÆH¤nä%-ÏoÀt!ÿ¶(ŠotI©0Ù%†á`4 +w×ç–Æa8ÛçeÄù{ ^„÷ª/°8jŒð<îžo¿ŒÓ#„—OÃA©†¼Ó­ªäOÄÇ\6u{]ù<‡”Ýl¶A^úÏ2ï–rŠ¾6\=‹ lxŠÐuVÃ@:uö5pE•ÜiCÚ‚–qsµ,Ê·¶ÀKì¶`ÂY>›m“üD}]n‹öè^Úh]öðÁ{—ˆª};f4 Ã_}Æx·‘®Ÿè{­wŒ§pd¬ƒ¹_/„G»œ}_P¢Wh$¶9bÑÔà(³Ü8s²M]kÌ–EÂ¥ö ÿH0ê¼Ëzvk£Nu#@î*‡Ó°½Š¼=;ÚäûÆѦ)©–&×¥`KÛûðDÒ·6Ém6^[¾ìóû Š0urL“AJÿœÞP`èy£ã¶àO ¹´>W5™î¼CoáQÂÓóÂÝxÀ-¶Z#Ê«ÅMïÈ»¨ ¢ ÍWW Á’d+ Ïm…éÇŠÏÉ5¾秨%ãA²=2Á2hôOéãgUezßÝ;îïÅj}³üX¦‰–…•*ŸD Øs èl#Ï!÷$Shƒië'tï¼LYCÒ(±ß}s/m8ö& ¨Ìw#ÍÀûfKzªëêk£GGïrÊz@ÿàîÅÑ­{»lAëŸù1ç®2Vžq¨‘ÞC íÚFÅ nÛR˜_€ÇºÙãñh8ɵ®Om0E- ³½ÆÚ.¨¸‹'‰ +|úÀŒgNðôa}æsÝ_І[åqY ¡öâÐJÝûFÛ=­:s]­ëQÐOÐÃ7‡7<½Kùð–kˤûú¨&ð *ÍØPÁ¢DC\ q€¯ÌO±Èx*²Éç™opž™8Ptn3ën»ÑWäYLc\˜ý¥uuµ¸¾¢¥Ñ_ý}µ3 \PtÅ™£Ûƒixá/¹¯>/XObject<<>>>>/Annots 792 0 R>>endobj +1306 0 obj<>stream +x¥WÛn7}÷W ôbVÖź䥰]»_)q +¸+JbÌ%7K®½ôÛ{†\I¶( +C‚vÉáÌœ9s†þvÔ¡3üuhØ¥Þ€²üè,9£AoŒïþhˆï.>¥¤/`ëîëÃoGq2¦óÑ QNçã¤W?hš†cúƒŒsê ±xé|” ëÇœF]Xï×Ø{¿ßI0ëàäNý´;²×áýo#ëž÷`ÐëñQ9õ‡Ýä¼~Úš!¸ò¹œµoÆÔ=£Ù †#šÍC‚x“LEž +fNÖ¯dIW“›)eZIãÝéì+lûÔéDÛVw”ta}2[)GÙJ™5^(ƒÁªå +™©…ÊH™…-sá•5I]S‹œ”|쵺ƒèw¶’òÒyRžÄ’ðô¨Ìܮϛ»ßw³€Ž 8!!ä›H*UZù )ç*ŽëÂð#¯rIvAëRye–ÍÚk§ ᬅ#á Q:@Cä,épb2ü<#oã;ªŠ¹ð.H¼¥Eª‘.hQJIˆÔh+æx²yp¾Åf-Ó¿NᜧŽå.qdCù +%°t”JihYJáõ†¤Y “Éy3¤Kt‡À'­–­…úe2]Íåüé4”÷¸Ä0éÛZœZmì×6¯òBË$ ôpÏEW3¡Ÿ‰QvøMψ2,¼›|¦\d+#]ˆé0ÅÚ ·ð…å²Ì°ØÐu’ŠÒΫÌB­ÁŸ­ì²2Ø:PGe™Û¡(ÁËý«˜ pñöÀñžÁ@lkåWà'‰ù$°A¸ª(lé¡0ß*U2þ&Tlg뿃{€?ðz'ÀŠå¹ºxHèqVÅ~¶‹B¡ÛéŽÆul¨#ã ²g±D¢ac€@€Ò €øqë"ÆŸo›ÑW à½2Õw0l/$\¯V*’uçeîžN_õá¶#VÞïÚíõz€w.AåÚšû‚ZY+“¬|®9V±äã~Ú¥Øú»-ºVï,ÊÆï¨t& MX©jY÷Óv—EYЕ5Ffžùþe?¶Y4¦ãžP¢òÏ„Š/"„,Z¢í„qkô@ö,›ß ÌŠSŠ‰c+_C5™(­N¸Kª‘Ýþ[KY­ÛAÚk 9ì¹Ká‹Þ¦xm¸ËýŠ…‚#A@Ðßq˜¯Un˜ú\·‡ÀøZHŸNŽ'—·ô eyütÁÍêIÐ&#¨Hö©;R\ÝΉ°ØÚÖwvõО<€Çâ ÑS±þß±P²zàrr?%Ë‚5h^BuJvˆ7—×'ÿѹÎxу°BÌCÇ.T‰AÁêíR²,Æ~Ç/b¶“- [¬ý5í¹´‚R-Ìóö X ¿35RQ ˜Œ[–ÕÃ"¦:¡É"R•%ZhÈó|¥šgVsM¨²eÙ׺ÕË!lྶ%ÄaEø›I൯©Ôh€HuêAu}@ƒlú•[¦Ž¼1 íÁë«¢ÍcåÐÂÁ- 1ÖÓ\º¬T鞈E é× +H¡ˆã:kPŸÃDæ6«v&¡©àÛ‡Ù4¹þ|ÝäëFöÌŹÿãÕCzPkÄû‹‡i#xÜmmpK°L`vw= D¼ÿtýaGDÄvüPZo3«Ý1 <’ã8y wxá&µt|U•%”Õ(xS6±Ø egÓÃûÄ>²+Lë¥$Så©,cØ˜Ï ŠŒN¸#ÔW è6ŠÄh«ˆÁßaÍÀ;fuœ(<eùtÂ*^ Øa‚–¤-t´JA²(>,·¶ˆ³U $h€y=[ñ¢”Î…Ä>Üaí¢7ÀÄ¢ÉLß+çM–êxÇÄÉô8¹›†){~+ Á „|Ì$ằÄ}¸¹Â¥¯Ì•±Ú.7û›ËV®x¾™ |GÈî›AOíþÖ…ëû_WöbÉ1§PÒ%È8~H·$ ŠæÁò“Vïs©C7.of31u1&@‘‚'¡8í›Ñþ2>¿F!»Ÿßàù¿ŽÁy7êu§¸{=;úóèZß bendstream +endobj +1307 0 obj<>/XObject<<>>>>/Annots 801 0 R>>endobj +1308 0 obj<>stream +x­WÛnÛF}×W üR–"u±À(ìDnÄŠk©1Šº(VäJbBrY.iE/ýöžÙ]Z²£}h0¼ìÎœ9sffõW'¤>þ†tÑ`LqÞé‹>Þ<_îâ74ŽÆ¸æ ÏDäŸ2šw¢ñDŒŸ¿Çcqvðµ/&Øj/Õš Óhp.BNÎp?ã¶R´ê„ý·£~àç<#ÿÄ~ö€ì·4<ï‹so)‚5gh8ÄaÄNrŒÎÄÀ?yC48¾ßÆÈÂÁ^²g{W‹Np}Ná+P5žà&± õiŸþ¬·Ë‚n(ÖÅ*]7ñiDô «’ôxZèšÞé¢Pqýø¦ë>†"êRdº¢H|£•®Þ,¾túÔ Çb§s™/åü2¸R:ï½èŒ?þ¦ë´1Šê è«”¢Û4®´Ñ«š>^ÎèVr­ØzÓ»,UEÍ^œûU¥óÖßlÁäª.ß®"oíˆXçÁUcæ;8 &€éÛË™ø4AsxÝÔvc,+‰mZÑNý¿¿â4Àãµ¼xwÜÜ¡Éø«ëÛÏçÑ—*„7wˆåÍ íUÏQJp¸{"dÂc¥-`WÉ +„â2´A§Ï4¦ ¦0Æ31ñ¥Žñ£d2À!?Æ#q~y{u‰Ù®y:Ñ{79ŽÒö°Êqá¼î¶ôÎú8&ÿßï7Üìøò¯¬Q„DÁAØñtÑù¥ó¾Z,Hendstream +endobj +1309 0 obj<>/XObject<<>>>>/Annots 804 0 R>>endobj +1310 0 obj<>stream +x•W[oÚH~ϯ8êK©Ìý’Jû©¢&„ºR¤Õ`aÛãõŒüûýÎØ&)aVQÛ3çþïœþsÑ¢&~Z4hS§O~|ÑôšÔow¼.u‡<·ñ/“ºƒî íõÏtݳPî5Ë_óo­nßP§Õö†S»Ùòâ-¢…³Ð^áìœi¾{òýfyѸíR«EËQô‡ZÎb“–~íAù™6:´´ADRHH%~&c™XQžn2H²šìVªŒ–£YãnFvýFYzÚ)ÈÔ«ÌŒGË­¤HXil¥Ž|¨[Ë/Ë_Mª·:^.ÔB'é¤ÔÚ”Œ²’„%<{qå˜çëø’"íCg¯¨‘ÊL§æ`;•zgi¾Ž”ß°~ªÒÆ.ÜÙNÛ“{é|A]”91 wò4€>ÏîaMEˆl+qÓna=ÆÏÔZþHi¦×‘Œùg;¾ª½ <šÊ“5œª(GzVwÓÅãè»7¾¿¿<1¹œÜO'KoòsrI+w©3ì_ÒÓôf鹧Õ9-—óëÑd^^†Ôby]¾ˆ$8Ñ ùêØã£ÆíµºE­ë ŠTQVdÖKwQé±­Ì(Æìt¿ÉÆè=VêmÆJm®6häC  ¹9Ð/½¦²Û£”ýšQO—%âµÐIñáx‹‹-!ËœÙsÜXŒ5Äâð.—.û܈ñí…Æ (7%6uÕ_’|•èÚB«å#t¦ ¸pœNä©/€CBΔ‹Ñjt}t µI4/ŽVœƒt:+ç"Å"Ò®ãão¤“Pmrh‚‰7]]!onß8ªÄÝÒµ$’ó™Å TO1.Üp‹—üÂHe^è¹æþ Ÿ¿V·+êx @w`¤€¢ÄpŒ‡=¤§ä4ù9»žŽéúëóóõøán:ºý†Þý›Fø€.?®¿L˜öŽ  N k(UÂyñi†D|R‹‘ˆÌ>Ñ'°É'zIÎPEÐUÈ\0-(¶™Žh«wÄq¹ ÈЈJr ¤ubkVuûHø®¤õ—À“k碽rVÔÈH?Ï”=Ð ¹¬8>C/#ŒŒÂndýèM!ò¡²«‚·ñ•Î^6™ÎSN³ûPV2oåïZ"— Y4%WÌÍ!|ÉЃý`&9=?nXo*0c¾v«óÍÖ£ÑVú/®@&^cÔ$ás­ì¨6ca*©“ÓÌT¶(BÓE¿GYcïL*}hÇCL˜ œp:‡Œˆ×‚ \A·ÚìÀ’Ç$@ˆòÙ?¤õ­¹ÀÉ<ÈënÁ#U2?_õŸ¯†¿;Ã|3ÀÖÁ4ÎêrÃ%ªD®zô8y Å¼í2êŠÈŠéˆÎCÚÁ :Æ`úÂ%|Y8·ÑµdmÀFPJ5Ügn éãrÕȳ2Ø™/ç‚ã†àgG*:ñÝ”*ë[ëk ·Ëf}³S‘hÁìfÌ©$a²à:C¼Ä ŽðŸÝ÷è/lY(³ ŸK8½íB+¹.–nbt 'õÝꂶȠ)^…Š¸×ÞLk'+ |â­È¡(|—w—/,“Çið]f‰Œè‡[K¾Ò÷ùôþÇlÌûÛ®ƒ½°®µ–GüŽ×ã5ãܪýWšÝM¿jšcV¶ð<_ž“ë|”+÷¾JôénvN°ûQp.«Y|´û4ÏÏI÷ +éz»÷–žëÈèKn€ô˜Û{­_Ü2¼³©ÌÕµ¬¨1÷x?)m`¦îKnÅ“›²Æê´¨Vì(ñ”1ÃLÇLlN±ƒ˜=F%÷¸Ji×ü¬‚;•S<¥«Q.à:¯ +øF³c¤ªPa#¶ äé ¸\Û ß—Æõj"-V´ÌqµÙ®u¶Õ0ÊÄ}¦d…aIÙ­>þ72ìP¿×+vìÅõÃÍ5aòüâ6k?w =wC«R >h^ýÏE±Ûzý^»„e«Ëú&Ë‹?/þ¦bendstream +endobj +1311 0 obj<>/XObject<<>>>>/Annots 807 0 R>>endobj +1312 0 obj<>stream +x…V]Sã6}ϯ¸³/ 3ÁÄ&_ì ,-3» Ûd¦M[ÁZlɵl(ýõ=W’xËB†€eݯsÏ=Ò߃˜ÆøÄ4OètFi9Gc¬¾~ÿu0IâhFÓ©¤É|-ÂSAkì_,°¿ûªïؘ&É4Ši²˜ãÿÙ<šS-iß÷ö&“Itö&Øï¶^l'WgÏi³G‚³EL›Ìå5¦M:üCéÌ&ñj/p)Ëb!í&—äŒh×6î)ì +Y¢à¢ BÝKÔdÒ´­IíI5ìP›& +>“Y4áb®5™:ó儵Ø6‚vßpõ³Â¶CÜ“©Ð€Æ‡èvu¹=ý/Œe ðrñ }_§¡¯CÒ ‰´ ÛV•©:GÚ~K×ú!‰,“§Ä@0ðdsî¿ognÐSRmDÉÉt5EtÍè PÔrÔÆÚYw½òd¼MB'=Ä©)«-$±3h¿“®p´s=ç(„§ípéWR+™mz‘…Î(­¥h$•mѨ +žRS)Tƒ®£‰FS¦ì=­n¾,¯¿FÌ>Ìt<¢× Ɉd“FQ´=Š0GHhØr¥Fï·Ãé¡K¡©w€ÓÔT€™ÉF¨‘ ÀeªF0vYXÃå²OÐŽÞÁ~ó*Q‹R6àÜ£°®L0Aw…Ù‰¢Éón@]ËB +îmU+¤ Ý€Rñ'XvÔÞ07LQ˜Gî -†“DÅQœÌo)VÄÂÈå;ÊM_H ÷èG?bÀ6ØA¡Ö¨cW1ˆ¢ƒ ¥Ç…ÚRUWöHäl¢’Œ_èmtþ’r‰4m#æàœ7_W!=¬ðø˜Ú…¿ª‹Žs.ømÝÉ”I‚žXË·U²×Á{×pdÚæbpÂÜ·)>Ò‡+$MjHCpZ¥jÒÜûu°N›µ^S@{oËàjùît—ëëntM v– -J¥yaº•„Db„ÈWÈ“›e*_d¡6¥ã‰J©Ü¦ÐYšþÄ}OÕ–û"ɉ–’rtµjÓ5ª°MrסšuK(Wf‹ -8œK—€Lm$òÇPë Ћ¸dŒŽ–…„.)Ö¢J24W/Eq¡³êJÖ -m¦U½ÎNà¶@÷ÚK€ üm´²*QÅï®|éx WrKËÎÁJ“ˆCnkî̬¯S ò3¬™$yÅÊEçB|y4O&ò…‚Uœ®eù*Ê R(bõ"¤Ð>'~²¿îî¾p숶#òGìjrÊáÞK¨TËM!$¿¹¡,în!Õ·I4š»CGwÇ8gi—Ü»´´&´i|JhðÝúòÊEõºF€» F“ÚV°ïˆÇ¨{ þÄžÔ•2ÖDµ#½kªQ hѶÏrwÚ¿ûw&Fs4­ö÷C.,×PÍÎXY^8‡}ÊWƒm#Fªï+àKÉú.º%F9f²£²ã“Ú^4­ -è! íZ%ש×d{½àéQrã“in=ø¬‘î÷2G9‡¸]­–Áå[ ýPƒO56¹¿ÜÀ•´CN…¸@kÛ·[®ºÑá¾Í­n€BŒOLzGä[À÷õØÚ£§[Û1tŒºàÊ„)û{]¨XÿðåÞæèæ¸4ûÔ5LpÞY$M¡\6WŒ£8¸n‚cƒû«ÃN\¦ÜUñÇþ™˜Ì&álzå/x—îúyÑû£÷C}÷`endstream -endobj -1128 0 obj<>/XObject<<>>>>/Annots 570 0 R>>endobj -1129 0 obj<>stream -xµW]oÛ6}ϯ¸ËKÝ!Qlù3Š!ËP`I»ÅE1,{ %Úf#‰*IÅÑ¿ß¹¤äØrÖîehêD&y?Î=÷ðêëÑ€úø7 iLà %ùQ?êãþðÇ¿MGQL“Ù$êSNƒQû”ÑýÑî3VÇÃhÔìõ«ã8šÒ¤?‰f|ö|7O~uç9§x2Ú_Lpv<™ÂÎNΣqóäÏî<ãì`¼ÝË«»ÏXÙo°Ä«ÈŽ†Ã!>G³)>cü7’–~alg!îÅp„0¦áÁûzyäµóýµí#Ö¦çÑðåÜåüèìfDƒÍ—(Ád6¥yê‘ïÓ<éÝÉgGÉZ+In-éíüK·6fEg7qc¡GmWFW%½Ûßì«é7·îz”©B’*¼é¿V™^ˆìo²2qJãK ¢ä”‹š6¢ð! gŒiŒÏˆÛ8$-¹ÇHW8‹ÜwÃ-˜i¬‰\«W è²æ"C/©'ÉÜQKšËæ‹´!$Ž zQÊÍ“³°k(Úò:´ä.ÖH1Á; ì‡{²ÅÂ7·¼_Húw9äÏß  -¬¢ë×:=¡ÍZ¡<è‹bb¤U"SÆ:p‚MÐCY¦7-_šLä3H8oËr”KYes|%\'K4iª¥hÎ)ç$Z”(ÖY¨£dÑ¢ŸßßÝS*œXÀÖŸ °T õ+lvºãsY°b‘´®[ð­Li0.¨OH>´A0ð·‚”1Ëj/QI¦ I^Ÿr…à* Ímƒ‚øWF¹ú‡PsàBâ›é÷žWý®þ¶eØúg¤ÄÇ} -<ä«`MXönEQS)u™É äÂ>¢fF®„I9 _½ä®ó©¼A •!&¢úª’w v`}è¾Å©ÕÚ–1ß@b×0Ä*âÔ3_ XÂkÇfS-]JƒÎAˆp›«gD‚‡vcy–­×övœƒˆ„©@R´Ó@£§Òm¤ wn¢LRå(^‘€8L=@ñµR8(èØ{9öÆ9Íø‘ © 9t÷ -ö«p‘Ñi›êZCmÁ^Èn”KÖˆÙ‡@ƒ±ˆ.^3~@K^h“BÊ”;kÙ¢Ý!+:ϙ»|noÛ\ÁpD—,9KQe]ù’ðÜ /ˆºu,í¶*KmRºË÷î=wóßnŸžÙ;=Ã@£”x•ÔÔRÞr%Pô–3çÏ ÂL×rzíÇ•î}íU¢©MîûÇ“§µüX¸Ë¥WAÖÉÒ†`SÏw±«˜|ñ˜š 6MAx2ÚbéƒÓAŒy<`B¶6 -jÉ6á&̶  h(°|Ndé‡>”ÜÓ߇M+VÒÓÒèœG–zׂbà ‘e&Xvu‡ÞÂFIŒk×`tâ4îÖO]_鼬pÙcº½½Â˜s«£­^: -fì*¬Î$&Ÿ2« VÔ³›×uiÑçuæL$‚Nãéù<Ôz]£wM§ÿnwi4êª2®ùm*°= ª6òŠû x〈”þÖóÐ`4õ†9z …Ê4nZúT¨ç—¡ˆA¯97 ÔÁÌÏ#<Ï`ìh,ù‰2Tv{ »¯:² ‘Ov‡UŒ_ˆ0ÝOµ×8`Åñã‹i´yv¢ -)‡N8j’%ÁŸ‡Ðˆnž ‹—Ý\¡m>H`ÈÔð ,U&m¦È›Ü lMVå*¨dšuÆãvUSW–`÷þ›+^xz‡Åßßؾõx¢àä‚鮲Կ2 `¼Q­ÖxÀrÖ¼ ðbÚŸ ñÞ6æëíþâöò‚>ýtÇeqG¡qmè‚϶ÛO§1^ïÒÞ½KGxûžNf¸†qh>/XObject<<>>>>/Annots 577 0 R>>endobj -1131 0 obj<>stream -x}VMoã6½ûWÌÑù3¶S ‡d½)t³éÆ‹ôÐ -Q67©%);é¯ïR¶e)‚Ø–HÎÇ›7oø³7¦þÆ´˜ÐtNiÙ%#¼á1|û½·¸IÆ4ŸÍ“•4žŒðŸ -z±:[$×­Õé|žŒh:¹Iæ8;›La)>ñYx¡é8ÚðÁøÀK­Gœ›&‹ÖZ뱤å8¹i­µÍx¿g£ÁßhŽw³å¾'ø·’òÞݺ7¼Ÿa?­s 1_.hF´Nû¢ö;©½J…WFãÈÏZ:OÞ ¥3spô¸&'í^ZRš°œ(%Ä; ×ÚvsMÆžÝ,›C¿¬ôFt5ž&xîL]dIórÂáåS!…“ðžÃ |ÃIØqY/»¥>Ûß .ªD%íå¦PÙ°)G J㳌i!3AîÝyY†Ôjox%EÁI8µÕôýñá/ªU†”`~Ë?¼éßBd €£2Í kêÊ%´Þ)G©É$á[ì…*ĦÀƒ¦LîeaªxÓÆ -î¤#£9 \KÃkƒŽÓMíé Š‚6¼c/3NÁÊÙÉŽ3Fwa]æÈöB{±•|* A_Ê“ÖVùwŽÓïš:|à¨?:S8ŠVt¢n¦oOŸ(Ý ­á6å›H=ò¾ SˆAèÝWà€”op-¥ÐŽžE¹A=']ǯ6p⸪>âKåm f¸À ·S•û0–å»ÿ»¯™ èÝÔ”"B‘e1†Žï&"X ýc¥3µMeaàÕNìQ ®Ëeã5`‚¨¹5%ØÚ=ü´ú¨«;>Ešš„Še"lë²à!¬¸¿ ’ß±…áýu£ ý3~kµìY4úºØ÷õLÈQÆŽŠª°ƒ áW)+žT9 jb* jœÛù¬íìõ¶qKܶ°U¼b›LÊÆ_!œ?5JYî>²åïˆw"ù¢RkœÉ}²SqCERÃ8P[#3´›É[{v€^þ¿X…ðQtûÚ™c8övBŠY²nðиšÃ;>ˆDt-p–Î Ô†ùv&TdKÓ ¤˜1S±ÿŽçsv]B`+Ô€9w^?QÒuv ÁÌ•f5…CÔg›ê„QQrã‡Ò^´w+b>Á9—±É£¸ÐÌ\ÿ†Þ>‚[Y±æD[ h+=sI­&•ñ¸Ë¯=%\î"ϫh¯PP“w ¶AôÏÖ7x½åvôiB·ÐmÏ¡í(¨9ЂTÅH‘:Ä]¾y©3¨eƒ]^û3<ªIÇwɆ“j† -O!ȹErÐUl$ªªP˜2<52™t DÂOÒ}†}ô]«·fŒ§Ì‰W>Ï1â°u+QVÙhãbvãÛ‰7*·ékÔ9ÞÀ,;0CES¡®¤·ê,³•â•é".« uGâUQc…¯®'À1®G©÷ÊÍC,<ÊÍMPá‰ÝÉô4R‡÷óÓêêxgyüºþü+Ÿh+å¦P$+yÔ3þFù3“Öað l¹²àSUoÀ«Ý¹Þ/rƒä¶â¥?¼þü¡týöbl‘…`O¤óÝ''æ Àâ;­ûØÊ„ÞCž‡ t¨ïÆCãï— ã9®šË)ÍF\>/XObject<<>>>>>>endobj -1133 0 obj<>stream -x¥WMoÛF½ûW rrP[±dÙrzK‚0Ð8n­ =ä²"—âÖä.Ã%Å(¿¾ïí’M-ÚÂ6l“»óñæÍ›Ñד¹\àk.«…\^KRž\Ì.äj~5[Êòf…¿ø©µdáÅâb1»ž¾x»>yõþµ,.dÁÖõêFÖ©ÀΞ$§ïrU5º–ù|&Ÿ¬ÉŒNåW·uÖËF7ÖV>›ºÎËÝúåúÏ“ 9_,aâTÙT>ÝÝþ!­7vËSäú›¯¢¿óËålÁãpo6¾©UÒÄcK¸í-VÇnm£·µjŒ³â²è€ž>˜¤vÞeÍ(iòÚµÛ\”´}èC—\1z„ž “êI)y‘»b/0nŠ}&óËœÁ ÜV[íZ‹eÕ6ÌKÛ©-µm¼d®†¡ÂáycJ=“ÏZªZ{¼Œ]÷J7ÆcHôô ×iÛY\a‚M®åA•5‰È·¦ÑÍg7….VtŽÒhÞ -e2e…wp;€;ñxDø÷ûw’¨¢ðgr_´Û­‚QyÓ"TÛ˜$^ÿàÒ¶Ð8Áâ0‰;U"]ïL‚ßi’œAÂŒëF5›8M]©>â¬}8^UZcu•4óîiÆ3H½Ï§TIn,j°Î—JḤÚ'µÙ i†4*X;ÔÚï}£Ë3Ñߪ¾YcÎZ›YU˜f/¦!ð;p)æÈà|Ê̶Ÿbâý›ÎÕ^ ¨[ã~±ŸE2<í‚Ð4è‚ÅL@òøñè@v×Ð Ác§‹B­ëPò\5ÿйÚiIM–òàWéR]DÖÖºç)ó%ÜÄxRŒ-º©B`y«Ì:àðÈd£“Ü:´™Èl‡­z Á¾P ]±T©&| Ë$mÑ ÎÇDŽM¯C%šÎI,1%錧=Wï¥TÖê: L°®!…V³¯JÐãÐ"‘Wð–ªýQÀɤÖô…â>£`bÁÞ*pIײÙakã°ì |Žú,Hã„®–ç}ŒzjIfÐX¼SÕ€@PvÏQyih É øÓDÐ2YíJAdš¸»Nït ’¢ýÓ”¥¡°AQ‹ý6$è5³Ímè(ú–TŽI’ÜaØÐR¨Q­RÞ£RœÇÛZm 7`«]n ‰²Rh…›,®M ÜÖ|,ëeëIÞÏþ%#ήÄB:$dÈm€làt:5lçPͪf¸üp@Q(³µÖâK46ºfˆõgˆ™|dà¦éÕd ÅÝúÐh˜:“ÖâõWï“~\œ¯f7œõ`ò—ÅõJâÛAÂ˃~…uxóÿÝð}_GIre·ä áü?öÏ7³ùë#F·©¦¼ÉHäG.UZbºpÝn¡ °ŽpÖ ,‰-H?An4bÇ¢9êèa†õÏåàP÷Ay ãhò­¢œŒv…‰<‚ -@0úvÃߎ°KlFàw>¹ïGåSÚŽfÙp0ºê:s±«×] -¼Ú†EE6¡Î® àG Þ¸o”¨P@!k‹b|©Ë PDv -;«Äc&-“†»¾S,`DzÓhgÀ(€ú¶ÄÇÚ@FMk/F+Ɖ;ñ;ÚRŽWÁun@Ì€Xâ‰IP R¹²åºD*qŠ3ÿã»Û‡Ÿ1ON’ ¸K¿çÎbŠwÕ©’La[å †Å`ž¼ä¨@¶{²‹»&'c‹!& ϧq/cB‘§Ì¤pî«öpÌ°I” T?Îس`âk«1ÉâN 0uljrûÇçPAß±/ù=t´#~Xé7H‘N× -F#›É[(w lŽˆÃÊ÷ègIy.ú†ÖNòåtgTˆýîá!l 1ì°ŒOÆÖÅÕ˜eeï¤0›ZÕû//ñ?pÇpÄ€ ˱ã™#-F¹â(›#[£¶Ðë+LXÛô½ysüô´¼šñcÝ¿û4Þ“– ÷MÊl–«ålu}'ÒÕý²>ùíä/ªÌøendstream -endobj -1134 0 obj<>/XObject<<>>>>>>endobj -1135 0 obj<>stream -x…WÁrÛ6½û+vrRflY’eY=*q3ÍÁŽ+“| ˆDL @ŠU¾¾o’’iw:Iœ„"°»oß{»úu6§~ÍéfAW+J˳ÙtF×Wsü\®oðs?NÑ.|pµžMo}°X]O—o}°^¿>ða{vùiIó9mw¾ZßÐVÏf´M'ß¼rž¬¡:Wôíþó*Ešk£(á¡¡Æ+ºßò_Ž„‘”9ÛTdD©< ÏÔÚ¦áÍwFÔz¯ÞÅËÂ[Ó÷ÛŸg3º˜_!½­œlù_Ÿæ¶5´Ónò7‰:^'>R’’Ç–¶:dÂÉ:R{e¨°žÕ|n”:gé3 -+bJ?.¾k#mK^y¯Q9j§út+ Ó@Ål²×¶ñ„ã:E•5¤Œû<#í)QÚdŒCø_(èMÜjñ¬BÞ;ëÊQž·_î6ŸïŸž†ƒýƒü”¶9á·Q)*îÀèšDQØÖÙ©jåJnfÈÄ)©Jcâ–Ä(nrjMílQ ÛÒ -S£¤ *áj6…pß>ƒŒt›ë4§Ú5žßìn°pj§œ2©’c\7RjÎy·´+g÷Z2µÐ™­5Á÷:íŠÉ‘·¢ëÿCÑd™H -E›‡F5ÞYÙ0Ûž&›»§÷äHºduqÇ1÷Z ð#ñ¦0ÂiR†ãIUUt)úØQÐTT"Ñ…®`y±Gxf,âxIv‡,Lš;kôofO%¼o­“̦ºU`zÌÑÀ‘û|òKÅ×½¯zŠ0)láÓ¤“ú«f?½ý¹üôÍA{öŠ 8SPÀ|>½šÎQ›p™ªé”Ã%žúÊÅ‚}er"…:¼ÌøÔl&P]h#WG¹Ø£Cêík.'‚…Ó3Èìœð UZ7¨1tº£ücq«=(ˆ.6H] >ûº ò2wàtÓg­ŒA2Ü XÜ(GVOUØC¸níôòV×¹EXÄe öªšýJ ,4#jTš¦¶15Ê8­ªs攨a0^— ÒNG†Œ‚ - %+\%‹rr%$ó'fÊÑ_×p Žèž–ùJ‘Æ èšw*¶¥&VD¾UèW `D¹‰ /Xi -É:Áuèü.惩Ø÷¡û™°a…O"=z9òp.S9dÚ ‡,ÝéÔYowuǵpc(´Y;À‹0Ò“|G°ö¼%œ!XŠÊd(Ù³T‡´# ùQ$éQ2`”ÌrÌrJaÌô’øιqð‘l¦«~È´ÝéL  -ÔA™ «”ð^F:ã1fu~@!SÚ@çà&Ÿb¨ënòO€J˜Ròe -’B•(µµ” žŒj|ÐÍN•Þ¦Ï°€VÀº‹ç‚S¿%ôD8r2­YRÃ'lR™2Š¥f:Cxÿø: /õ$É#@²Mò˜Ã1Ïq0 x^ôô9ÑÀ!7–·ð=—LV”*q¬¯˜¡{ʧN'xÔÆ”º1> }×ìGÖ}nPö'(Ù¢>"³·:Ìýý¹.ð4Qé „óç¤vÀà?LØíÑhåXvØ}öÂ…•ãQ”‰ -8J¥*ÞÙPœT©•ªi¢ð,T¬K‘Ãÿ“7&âÝãׇÃLì¬éÈÅ€(÷»´¨ Û(¦SEè°­¸ÕPÐq†AXº<Û|·a²ÔÒ¢‘Ì#±,…Yh×9w;Ç‹a΄Eìl¡²¶À=Ð@Ánœå¸ eªuÞc >°’²¼aŠkð,2(þÁé’·ªÛ¸t~ö¡Qh췌׮1a§aƒP¡Yç¼’ålˆVÛƒV…Ý%Vb“ÜQè\tU^…{e€£ W«,&í˜ê½Ÿß·žBï°Sƒ€\œ2MÄÖS3ê),‘ñŸxÑ&aPE 9 2@1ªV$<äxõÅzÖÀÞã•H7Þ8¥/€Ó½Èä´0†üØÌ𢳔cnµMsa²0^Üqå™Ò‡ÅMÝ…'¸SH°ÓŠ¡-Á˜øâà!ñ Fo_Ûù२ƞ¼i{:±ûcø€2ÂŒÝ}üžsùiÝYî|…¯të+Z-ðÝKN7w6ì?y~ÞÚ-šÀ*áª/ú×/n3~ÿ?–®åÍrz³Zc=Ã;×+>úçöìï³amÇ…endstream -endobj -1136 0 obj<>/XObject<<>>>>>>endobj -1137 0 obj<>stream -x•XMoÛF½ûW |r›¶dÇrrsœÈÁ®[)hoÅŠ\J“\fwiUýõ}3»”(ÊAPAjw>ß¼yÔ÷“ ]áÏ„fSº¾¥¼>¹Ê®hz{ÝÐÍÝŒ?ã¯ÓTž|\œ\~~O“Z”¸r{‡áøÕ-ò³É$»É¦=©ZÓ\»W“ãß ùú—Å7\½¡É$^½˜Îpõl±Öo>'ëèi>?'ãIQ©Uè@X«ÀOZ§½nð±¡Z5[úúôå/²­v*˜fE~냮}F_©ª²ÏÞ¯èbrMÙk<€ë¥u5î؆|—¯IyZ[„ïÏaÚT¸o”×¢)¨óÚ\ -––•ñ¶zÕ•ÎÖT˜²ÔÑ}ÚÎåA}FjúU·•>Gn>À´ªl£cë^ðL‚ªÕ¶·ž’:p/þ`A;ƒmIe¥ÆnKSá;¬C€È3 à•ÍUEòT*£{jt`Ï84 4ΣŽ%m!å”ïR–øÎ.ªˆÊmã» -fééËœ -Ôe&ôã¸Êx¦èÓÓœ}EøPߦ‘ÇAG³ôÕô0î‘6Ÿ“jÛÊä±¾­³+§êšAcš ]©ØÚ˜fi8^»Ç[ðº*&¨ºô“«ÑôãHhÃǪ±'A+cIp&5Y9ÛµÀÆŸÉ'¾õ( ¾ +oàÈ¡]eš…ŠM@>=-úºuž½?Îÿx~  ‚N;šI›AR*Ïm‡ÓMWË\Ù¦¯h?E_Å^į+bZ•Y:å¶Ñ>¦¨ÎU³³Â#¬¥Ãq¢bÞŒKï×*_# r]Ó ÚQŽ}KF^K§Ž€ªÜP[uìkKÁu …¢Ž&†µíVkiKÌl n͘1ØcjÒ¸j©%kÛgãh LAaÌW|åò3(VÈïìR‡ü²ñ^ˆ1Ã(”ñ@ÏŽgC&ÕdˆØZ½0Mß;± vT¢ÂâÛÊÚ—®•Z?Pß~ÈxúßÑH&0Ê}Ù¬ xœ™¯¡ZÀÅ4¶­7-…ª‹s1”¨O‚;mªPœAÁÐ×€›ÁË@ŠOib¤U–ɪk3ZðœpÍ/²ouÎüC7Ì»5èY@XS¶ -s §á‰ª`Z`ÕB¦5Ûðæ±®Ð[¥”àcìɱTgÔ -ã?ľ¾l½ÄFñò‡HÂý:8DöUÏ]B™<9ûnnLÅ8cj®¬BœTÛ¢«xܪ -qG[{È—ø Ôý-ÄŸyAÎ~%Ÿ¡;¼+qw‰a³hðÐÐ`‰²¹Þdjê±QîÎQØÅ}WÕ6¯1õ̤ðŠ%ý -T±õ1˜=>Ì‘ ü§5„}Ð59¯K´Ø€3ãŽë€âøh°¶8µ„ÉŒ~kºû'<­»}ÎÏw?òα1‡ˆà]Æ®ð¿Á¸öŒÙ÷Q*œ°[6‰y¦±Û¶¤•aïó–ë×,¯1½¼ ¢±ÖÁÈÖ3û(^º`6F~°ÑvaŒŽD±Ç|‹9;êâ eEA§ÉÔi ;žÛògÅ1J!×YЭ -ÌŽmý&À$†Ì°‚½lFÙñy¤iÔPÙ^\CʲlI{ÑsÕ­Vj‰»ïØ|è5Ä£Œì‹ý0ñ슾ýÙ5lõÊ[ziìUóô|ÿ˜4oÒ¨ µôÁ)`ë[zG£*ñëÌ¿Qá¯[ÙåE€Èe'=[˜¨§­÷†s4„.Ëí^ÇŽ]Ö1D6r½“¾½4ŒBN Ü­Õ+'WNç¶n!P4üáqTQ­Rô¬ìÀwG.wt.µ¡V94¦«”£ÖBæÅ1:(ɱ ÈB.4´26ܪüÙÍ(O¯QsYA"sU;8(J_¡z¬ázZ¢{ÃI½ì')ú¡&ùFÙà–‡Ñ²æ™HÒ}L6=y ²HS#èàÍI­d -ÃîÂ<—ì¨ -®YB1=Š -¾z± !L•ôKDrÚÓRO?T§ñÂ>/|‰AÖåØå ^Ó+h=~MÁ‹œÁ˺óœDÙ§¨¢6«xƒ/nÑ1ËSÁX¾VÍJ h€&hKÇñ„À|ŒEGºQF¯}yÀØÕÀIïZ?Ž"•°ß îQÇàeWÖpÜŒm<ßI˸ÑùèÌbm°±±ÂlUGüÌ„2Ø·½ôbˆ1.¯Iä3b€^¢n‡dÔ‹RT¦Vx§€Žàâ^¸®œhnñuš’‡–°Tä"êU‘±\êAþÌ…Æë&–%)¤Ù`Ý‹âiÆÝš¿àឯÆÊÝ%‰6¹Åïw×øeã=³ÿüþñã=d¿qo?Ù/CI:ò½‹þøÅlŠ@Ò¶øñ 7³›lv{‡_NpöÝŒMüº8ùýä?ÒïÎóendstream -endobj -1138 0 obj<>/XObject<<>>>>/Annots 580 0 R>>endobj -1139 0 obj<>stream -xWMsÛ6½ûWìÍÎŒE[’-ɧ6‰ëÄmóÑX™ô™DB"`Ò²þ}ß.H‰¦ÝiÇÓ&1Ý}»oß.þ>Ó9~Æ4ŸÐtFiytžœÓl:Kft±˜ãïüç5­åÃÅåUrñÒ‡édœ,^øãÉ9ìóÿ¾¼;O.“+šÌ®`¾¤Ét‘ŒÛt'Æ‹óç®ß,În.h<¦åÑÎsZfbùœ–é‰ó™ö -sÈØZûµJ5•ê‡¤²ÌØ )²zKª©smk“ªÚ8KAûƒ“kçé›±+c3zÐ~GZ…Ý)©¢ :W5®ê,Píh¥_-ïÎi4ž&„p’9« ^ål?»` õ¤Rå_Ûh9 .~ìpœP鲦û©«ŒÎØÅÀÀYaVgA§7õîlh@!`öúùõJ­½+hm -À$>Ü ÕëB?([w¨‘”µ©2UGπ랥èÁ(êÐÖ{w™K›¹Œ™ä –Î?K®•)Bã¾¢ñE,àh:¿1þÄ}E)ˆÑ¼ó®©èöš^#šX¦§ hÂÕ?ù†J¢¬ ß„÷\D)R¯QcA -.kæ¶>.¹L¦æ¢²]@%€Àƒ ^Èj‘1?ÖW¿Ÿ|¹½þþ*òjLØ -…Ùäu±£Ì¬×Úã—ïëÇÛ?i››4§\!Åä•Ýhrkv¶Ò¾¥Š¤>ļ·.w%€vmQƒ*u¼>tn[ð·¿,øCB·5mKvèÞ­8.°Ì® „ɧÉöQ±Séœ -*!ÎîÀmk“ÍÃÚÚlH)~±Aî,U -•))¤8ð*nHö¡žj+×2ÏüJ6!Ô`X¿¢l9†Ù=ú5<ôj¨opÅÂe¢rxkã -fJ}! Àh§­~¬#"€Y{WŠ )-ÓC“Ôªò.ÕUUaböcébü„GÏŸ]‚·“+°±„)f*þ=Õ‡½ç]›îÞ7ð#v·Í,öÇ‹|4Eb±P?v$2‰Kš3ª[jð7h5ËmÙ„j¨• -šr]€܉u¶¢î×ÿÒ6Ú¦í¡"7B‹²ëf¨ËÚh«vÿ!"— }PôV¥9°prûC£•×5•V; +)°¶ÚC€¢pBaIåžYd¹ ç~4zléÀ¬¥#9ê­ó?Ð`Td -a{µëKnuT ¾%T -i®á€š›½ƒ¦ýw£-üDñ Ðµ2ZíXÑ2WªgíÒÎåkuõ Žô/£b{]7ÞÂL)ú|ýVúñÄ_u\T…ÃôÜš:Ç©A8úª"p^f G^fwÆB¬yˆDŸ=Šo!?šûDÙ¨‹{‰85=HÌc5Æ$…²p~a0ÔYõcePºSÉðGä9á E¯Ë95 ÂÀoêJ¨Ω JÀRÂ*0(W+…ý($°Î“,¸‡ò¤¹Ä'4º€¨3R…Ñ@ 1?ÑJ<Ö‘àCÁŸ Ë…”{/f\(vvvƒ1Ë{ÖhŠáÜŽiô×-pBŠ"ØÓÛv Èoâån¹‘1Eƒú× ’ý!“çW—[Zz4‹.¯†‡%Ñoè„î±Éð÷ŸƒUoiXïñ§ÇåŽgQ‡ø>Yõ8»ï?}[~jÅÀ±@ñÂ'Ÿ(!¾Å£™©7+teŽ%ùÛèzß­öÄÀ©eܾ±–ÕÇÚnƒ¦DéÇ×Þ’‰ýŠG”Ä}XÑà;×xúÝØæ‘Vî§Äïúnï2îÏßÐ……7¯±”óOk·'ìPS@’N |åÎÊs*¢1Ò§Œ°ÃmK]8«1ìä/íåú’Wã‘d*©kö{Ö“.Žn)¾i š' ~9ƒeß'³yÛG‹öëïÚÅÕ”fs~-ãLLígïî‘ ºî?Øîh<ÃK{1¥Ñ|"6ÿï³èb~‘Ìg‹Èå‚mý²<úãèo;endstream -endobj -1140 0 obj<>/XObject<<>>>>/Annots 583 0 R>>endobj -1141 0 obj<>stream -x¥X]oÛH|÷¯èÃ=¬H”(ÉúÀ=œl|Ž}‰yñˈ‰³&9ÚÒZýû«î!išë,°X±-s>º«ª«›þí*¦þÅ´žÓbEIq5‹ft½žE+ZnÖøyŽÿNÓ`)‰ùË×ÿ\­·QLËÙ"šSA1¾o›O9}»êÆÓåu´î?í}ÆÓÕ*ÚôŸö>ãév-zO9ÂÅ A¼!ŽZDËáƒ÷»«éí’â˜vNsµYÓ.•df´KF»ÌxRynÏžªLÓ·›»÷7¤Ò”ÆWNUÖQeC~![ÊUcaY™DU¿*t’),.|»àËnúÝ”óÏïv¿^Íh3J»tôðó:ðq¸fp†=Pj eø´b¯¨=„jÏTZÊmyÔŽJ­S)SÏš¼>)©ùªIï.•$¶.«.¤NzÖ.âÅÓÛUJo×÷Ì’Ïl§´×ÈY¥¦<"^@”Ú¤.õ¿ÃæQ¾s¾ìÈO üåþûîžxƒöæX"TNÙ_|¥‹×°"ÇOºØšDfŠS®ù¾1D lL.Éõ¢ Y*S:Ÿ1£ƒ2iåM~y|G¦¬ô‘‘!ý;ˆäSˆœ-øzGLŒ-q ˜pÖÇmè2äÄ°?¢]¦*òʤcúDª`®¾ìOnîpýI»jLÞJ®…º '„®7íuU]ìâðÓ+3 l$ÑL{M•òO¾á0i8œ¬£ML«Óð8_­)°´Eñ±î'óMoi²]¦â8ºŽæ}Õ¿ÕÆ ìþ5¯L+ʨ¡HĦd±W”Øò`Ž5Ðeý3C@´\&µs`tÔÀGÑ@q#zóá3}ÚÑÿþñúÞQ£‰Éä,ÃË,Ô„gtÇaw+åíUòDõ‰™l0˜7¦ºJ¦'UDépS - ú…3«¹ÿATRsåO C¢¢B¥¨eÚ[[QjüÓâ¹»ùüqûý—ôåþûàŠ^ÝiÏ°AÜÄDô˜{JüB=¡x*¸‚bý£Œ,vï™vŒ# -b*ÉL©ƒ^òtΆ°2gUV¼ šc$=AUνrÏÁâ>ö)*,y;í¨–‹&Ð=Ä…ÿÀDk&¾\¸1°ÎM©rò5~u¡³fã(É9ꊮ׆ïtðI!!ó#ŒŽ–5Iÿš<¾k®z10M9N÷Á&=‹Æ,àqÔþjŽÊ™“‚µœîì ûËã»1*ÿŒ€’¼†û±yÕeÂ5‚§§Ü£îSJ•.l)%Ñ3µ‡eÏž{Š!g‰îuçuGzä¢:ë=Ôq ®Õ-•N-K­ƒH1–‹† ± (É-ʧjŽ(ŒsìШ²£™Ö6w©=—¹mûúL4Ô™ê6£Mx÷Uú9t¶ÐǘKµ7¹©ZwƒÚ›P|~€äæâÇŒòYç9?Y®Lƒ#шq -BF73‰çê!yröÙ¤Àþò P5‚‹)?ŽNy}<ŠÀ­ -®q7ZH)qx]ÁQp,Œœ//åØ0]q}‚h\Hdçî¨[þ¹Bø|á¢m¶Á]+b  øš’ÏÍÞ)g€PAF¨Ë·ïÝ5¢[Ð'ã…_uú 7%é»ýqÅãŽ_U&šå*®]hUúa‰Âr&³h½œÌçœèË5 -×ìY@«Î+¤ÿ1C2ŸuÎZV9šë -äIv©~Ö¹=q»‡|“'(Øs!‡«:Ÿà déB ëÛ. ,â^ƒ[Àé&F.ÿûºz »®´¹÷ÚÕ•r¼¡I‰IßC$È€‰±ôd‚=XÚ’JÆCøF[Û ¬.¥è¾Dª¼ès³£èI‡…¸®[‹$_ì›>Õ¹cÓ\^Ö”o¬áêžÕZÏëÜGœʇ[iûBìϲ§K›eÅCÁȹmÒw| Ìxï ^-šf)Ó2U.•ÂkØæ b *E©3“däë §íކݻC}·íÞÁ¸“ ÕÃ7X2 ¡­­¦ -¥! I1 –›:s‹hS”êÐu¸wõ_‚EñQÑ— k輦”‡@wœ´+{±MyO¡Äh{eF¨ ©}Æ ·G„W -n ´¯Mξ$®ÞuôÀ&·P2m]0~¿y)@¶Fݾ—ÈÜÞÓu/>-Ãè'3–÷…"hmí0ÅÄ…÷!ŒõìCRî°™1—†çHšw‚ ñíaèC,ùð·HÐ Ï«ÿÌ*èëÃ[ŒxPÁôÎ! ÛÀæ•sÄ}h¦Ü0Ï´9K½¿æ—ww¯@Ü ûÓ1+%ì Ór7P`p89xA8eŽY¦¡¾…èÆI+pš+HŸ<Úþó3?²„å{¯0¾¦ú¤Kyg«O°žs¦Á¢¼SðÆ®*qï³±µg_11×ßd´‡Â¤åˆF¦·3Úòûg¸ ø8Œºÿ ùÇáábŽ'3~W@'µœ}ËìÈóI<Ãk>ÖüÙ~ñ”M°)†æö¿p‚kå(Á|*@uIü…c¢iK¢¦É„I|‘êû;©ý½­tÛF·ñb­6 Zmy$º¡=8û+^h0x…wvQïœÄ+ü]&ë¹0ö£Áåz­W›@ëõ–÷~Ü]ý÷êÿ¤uíendstream -endobj -1142 0 obj<>/XObject<<>>>>/Annots 600 0 R>>endobj -1143 0 obj<>stream -x¥WmoÛ6þž_q@QÔEcÉ’¿Û€t]‡~h»-Þ§e(‰²ÙH¢'Jq ìÇï9J”å·uÙRÔ MÞÝsoÏ‘^4¿€f!§çW#oDÓ韓ù Ÿ!þ—’R»Þ,În@‡7‚þøåÇ«p<ñÆŽFÞœr -7iWÝ]…¬67›A0Ç¡fµß-¼’ó)»èöjê¶ìßÝÎt -½9áÂvÑmÝÜX}A¸€°]t[ã±Õcز‹n+ -þ`âˆ]ðÖ›å•ÿ°Z¦Ýt>£ebýÑ2,×ÊÐVeÙ5E;Jd*ꬺ&U˜Jd¿ýðæ+z¹ü =„Õ3ðkSú™ŽEæ‘G¢ÙvfÝIIÕZR. ÜhIt\粨D¥tA*¥®YnDCxÖ`+ŠŠ*}dÞè\n×i•™‘½¯,b™ÑÕ*K¬©­*"U$ É/2®+e’D‘P¦¢R”J¯A¹è‚1 çˆ"ìwãƒGßë"U«¶šÃó¸0f«ªxíÅ8q¨h`Í°·-„½Éæ ‹ < ¹F`q‰Ó0*¤L$¼ÐTÖ;ÓÈÝ8ãNqr¨o@‰9‚Y­K]¯Öä@Z…¬.’ëjtC¯*iSê,YQ/ðœJN‹¹&£#.×=Ð¥ÖÕ³chñ†<¯©ß躌¥ï`øðÿцÅCºø«C'zúß7)Mu´© -^ÄÒQîØ•\<4%•ê,ÓP¹"³Ë#©‘,^? vVÐÐX8Pž~í…‘ß 7­ÃXI:¥;¤Òè ¥gþ6Ûc*:BMûÛò‚Ã0Œƒ°Ü ¢;›?º³];^6³Gp˜ßcóá$ðæ£ðkæ÷êN*Æ"sjN‘™¿œ¡z{MÂÇ€™§k™ Òƒ6ðewUÜëx×È.Hð£ÞRmdiû…Üø©¦í½GeÓPZêü´­{ý縫Á±7Óô·GvO‡˜*Xδ~@{ØÖÓ‹´\výÓU墙 CŒ"KNÔþlH/ymW¬'…åX†Éèy(¢®Üy³‰ÞöÏ_8hcÕœ£Åýq¾¼È–˜W}Îm©gÓž¨+ƒÓ0¢²§ó¤R qgø5K˜ÖÕê8þ±ˆAÔl¦_*çM;­*•K.¥Dd*™ã⡺À¡Q]1!à©ÀNI÷žD\v‰.^0³µto%î_¶ã»,—‹¢fØ]‚ÜôîÆÇÙNö æŸï\¡á#ýE«RnúY; -®F@ÊüjŽ«ì°£#…ÊìœET] ÛfñZŠDü@‚BüÆøÿÕ<îÏ`“Ggº¯71îä£,EFQŠ\"Ò(qÌîvž¶„ì´ØRcÈuUêÌæ5’kñ¨t ÆnÜûêÐíl$z“Ò]dœÉãˆ-×Ã!&ÒÄ¥ŠlMR®í7ÂÙN´—ÔýMµ\Ñ ‹òý`~ÿòð=i¡~‘®J§¼q ™e‹­0VçþF–ëD¥íýAqV'ÇCØ1^ìßV™ŽDö;ó¢«ác’qÁ>—|ãyÞwç6žA-çºBÑÞ°É}Å\ ÿˆNµ¦¯^\7”÷öÓ‡Û÷_¹íÃpÙÛ?ÂÎöDÖÖ°3¢í5i@ßÒ«CYêa_زà3CµJÐúLúÁ?\sx^à…ÖgTM´ùræ¾V *ƒ±:‡VáÓ`­þ,KÍOÀÿ W3Ee§ÒÊ/\:§9FûéúX¬ÐÖ…•á¨íd#~šm{vïwÿp—šÊøJ=î¯þ6­ ½R‚–ÌZbÝtäH)eÞÙh­$³BV$b¾è7ô¹ -ŘÙd\þk<ŠÕ¨Ïkq+*ÿù[ÿù¯¶2ö¾vr’˘Ï#f}¾ŽüwxëÚ_0Aæcš.¦ÍK­yÒýTêÏhszÛÚ±®a0ųÃYh¯ží ‹–ÒðÕƒðî,V†>Õv¨Nfo67×Äéˆ5ü°¼úùêoÕˆendstream -endobj -1144 0 obj<>/XObject<<>>>>>>endobj -1145 0 obj<>stream -x­VÛnã6}ÏWL·q±–,É×ä¥È:Iá»I±Z,úHI´MG"U’²k ßRÊEq,ZÄ SœË9gÎ诳"ü‹ažÀxyu…Ìá&‹9~Oð_sX»ƒé$ “þÁ§ôlt{q écÍæq¸€´ŒEæƒ8§á8œ„ð»ì–Ã׫ϟ®Àp½ç¬r¿Ý_/¡Pò—t‡!'!ƒd†õ¤ÅàFZz¬UYªƒÈUU1YP”Š=ð×áw]Ò§C8l9vå%m¢ÁõÝç«Õ——Ù Œ‹)YÅé(‚ # -XŽZÃQ5¾ Y¨ƒi«ª¦ùª¨„Æjf•>‘€uwÄ‹S°eØÓ-±çPk±%ßpÆ^9¼Ð‡GR[BÑÓJÙŸýé´kFÑ£Rå¬Vel” 9’Ü‚®spйà¼Ó¢Ò‘”"=µV56¢¹©•4HŠ§¸ãÊlUSñKø@šàHÞò ô±;ÉʇdxêÁåãñÚbö$â YxŵچðÕ2m¡©]¥¨<Ä©( `¼RÒQn¹± ìOáSêÝsiV–Ç!é¢,áÀ¤uÚU…X½žL•¡t˜ÍäZÔî ÖXœ+ªòˆ -Ø«Ví½bzm¢ÒýÌ)„XCa  rÛ¤4CÈ*¤^+cDVzʨ#…G»¿Cm*|J[}¯…66„Tùzž~v”u‘s3ÄàÍFÍ“H/=„ÿIÂ(o²±:¯€•vÄž™fR‰ÂÑX -‚µ5Ó K8izž Íþº‘í' pÞjãðl4¯;<‹7«L·˜²768\E“sb¦Fr|ÁøÜĺ_¬¯²%¥›Ðq”LáWˆ¢K÷yQųAþ¢ØZ­·\jHäC°úHmÐ&Œª8Š"mÒ(d¤ÂŒ¼ ¥&½¨ÑCþZqìÖ -‚æ}ÄZƒá9:iÆò`‰yÝ«ê{kݯj áû泪.ùV®Yêêqó´ vË óºGñ^ø}$o%Ë›»¯”¶Iäöå€Î³F¼,»ÐÏN~kù¿ïlÀœ|z‘tf7§.¤fEˆÿ ù9#m¶»l/TcÈ©V¸ŠpùMP;“>ÇrÏÝÀào>Êãí\Âpš¬Óïüã¹›œgzû=1g38ùà:â(/4]dÍni×·šÛh…Îø\tk­*w Uö&Ïö_ Žq‚Ôà;J18¹­Ø6¾¿È_ -Ü­´]»×¿Í ’ÚsücGñ;çKUἿb©¤Õøjtú¡%G0ï› GWË4º]´¯ñ _÷c˜]$ጠñ â^«Ï-\«¼©Ð»ÝS‹Aw!˜'ÂvUBŠB%²ÐºäÆÀ]ãT8™OÂùláÑžÅá&=ûãì_è!endstream -endobj -1146 0 obj<>/XObject<<>>>>>>endobj -1147 0 obj<>stream -x½VmoÛ6þî_qÈŒÆÅbÉoµÅ4ÉV¬yY#l–} E:b#‘IÅ5Öý÷Ý‘Râ8VÛu/)RDâñøÜ=Ïsâm«=üׇɆcH‹V/êÁha4àßü5æ­Ã¤Ÿô`’9îOñÝëA’v^Ÿ{™f¢`pÀ ©ìóä}«Ý~/šb _?VN˜…‘V4Ç|ot¹€ Ët¯`N8_*a|Æødý~€ÐŒ)s’!ºR¥Nj»× åv!e -”^ÂL@i§— Tr.ñ1—ÖYÐs˜i—A®S–S.Ž^S¼±þéšÀس—‰º¤a4 ƒç:ÏõRªkHuQàî—@=ZC(Ôhí¾ «/ªÕáA¨°`Ö.yX|T\Øú«.ÁfºÌ¹/€y舆9„­o,>ßXéÒÀãã;±pi¼-{'äø±3_p]0©ªò—û‚5KJ,)3‘YU^Jn÷àÚÿŸéB—F¤È”¡q\ÌY™;.òÜFÕöÁ8”DŒY†Û\滇T!M\+$Ù]‡AÝÝÇÕ!š:ݧšës…ûk´L~?z £q'òU RIq°Ž‡:´©‘ W)o¿Ö~w0ÚØßà­Tå‡pÒ#+‰†•òQ73©øïàL¨c%·$Z -›£yãf&[ÌždA1n†©-aá0¤ nJ¥ »–¢¢è’€¼·ržcöfçQÈBs9"ÚèYÌkÓ®¬fÏÄÊŸGžs(>Ôq€ZÛ&è6cqaµîi)¢7kj|'ø˜…ìû©L¬˜±§¹àHÌ$SQE5UÃ8¯5ç)êN£Å¨5=hRËÂè…0p¬¸-…JE§« !…G‹t rØBâÞfÌ÷¨ê͸&iÍ.<ì°á¡ß¥5±1ºrÆbf©›¾ÖìÚé«ÊóùÊs -»žø݇I\µ(8h}TQï'eõ5¹w”ÏrÕ¹z:¸ú€@õó㛳£W;—§‡; "Í4t´w.ÉÅ4aÚ´ p¬ßÉTؗдµ2_¼¥!¤Dm<÷èü"ys~vÙpü»ãä烷¯Úß5¬¼†¥PÚÙÿ^ Úxî•6øµý¦^Sÿÿ#êÖ ±EQ±áW•õ´ÃvèŠ[¼uYýbðäÍ°zó;<{†s¦L3ˆï˜·ÞMlËŽHR|üWW ATë7DáJƒêaAÒsà -¬kÎ~p#ìB+NFÂû -]…𳔕¿ØË0kgùL·¨®%Ÿñº^ükVG<ÞêÓ—úýFæ9ÎðêñÛ¨Ž¯ÇßñóçñÇ'ÓêÓãÅ|:„ñþ$\®/NàÂè÷x ƒ#–2ÅèFL„wë ÝÉ/ë¼SÝ{ Ö7-¡{˜…óÒQøh2Š&ã)ªCÇzuœ´~jý -ýdendstream -endobj -1148 0 obj<>/XObject<<>>>>>>endobj -1149 0 obj<>stream -x•VkoÚHýί8Ô*¶±!@ZE«D$RµÛv[P÷CèªÆ‡ilㇶýï{glSu7ñ˜™û8÷qîø¾å¢Oocƒ‚¤Õ·û8÷톓1ý÷è“3D­Ëy˹îã óˆ4Fú‚¤û}̃ª×ã,ÒdÏ¿´ú°Ü¾=!á̇«ùÇ‹?¼óîo ,X‰†£ß_¿ž·ÿâé’§a»AHëÃJÑmÏV…R<½E(Ö´ÖÚ,à“/Ѥ¿ b]úùy ƒæ@nÐ-ƒ…Åî)k–_ox;ƒjçž?GžÀŠà<ø¹‹àΑÅR>JG&ËŸ…Ün -(gªÈ)þÌž‰ozí\ŸÕ¥µ¼‘®–ëÚ§öÀÙž™ˆýœËRp×-› ’|—B–'xRÆB(D„â1C` "U>Y§„%L­tgÆüŽ‘—/kOÅ,ohu@Ž>Ù"R§SâÜÊÚÎi%î¹ÄbÒçnð V™`âÓžEªQZSxû·cT(sŠªY¤Š5QýÃ՞͈ïá¨iµè-Žñï®}f’•ú ¥]&å¢ÇäâxÏn­˜ñðüs‘“Iâ¾6ÈìmÎ2XktÝ'*H‚DÖ¤ó7ðÂqŽªl½øÜàôí.lãÙ9Úmb›8õ!!±®Y3ÝûŽT"«³Á$Mâû‚ç„&yÕ«ß™³¥ø’‘w·]5ðÖÑ‘!ÍÑAZš W!Wº&d*æ)y'NË‚öˆäyÍ_q‘bÑË|µ’'X‹üî6Ev‚•ê½˜QmBÕ\˜½¹œî%†*÷#¢éQH5™Â’X,u¾œæ熡¤d£J¾Nö.ˆ·O¡/9"þåP¿ÕÈ"{ÀêöÃÔg‰0#‡Ê»uÉX%Æ;õÈ;LÕ«W{é ÙaƒPJk7Üî›c]œCG›ã_Àò¢ì çzRÝJ&ŒÎNËé8»xsy?sñ… -S £!«ÛRC°jkìÑ“Êæ^ÃœIód0×SXâ]aæ×p<´Ç£ ÝÕ$:h WóÖûÖ¥yOendstream -endobj -1150 0 obj<>/XObject<<>>>>>>endobj -1151 0 obj<>stream -x¥WÛnÛF}÷W Ò°HI¶%9AP$MH´QQ0P¬È•´ÉUvI+BÛH$­¦MÇ wçræ̜ᗋ1ðwL³ ]O)+/FɈ¦·3ü¼™óÏ þI+÷âönœÜœ{q};Næý¯éýˆîh±‚é¿äû£-²Él£éÙ¯V¬åsJe¥ªRu’§V”K‘Xi¥¡?ÉÖÂÔôþ×;úûÙåâóň†ã\.r6ôâEï™´"ãGéý]ô?œLùôxœÜ&×Éÿèé,«jíÏÞÐxìƒ ‡ß®è äï#¨7Ò¼ dËeÞ½<¸êŸ©Îœ!Q…{'[{U-U•÷íQ.d©+K¢¦z£,í´ªê+™Ýè¦Èi)I, Iµ¦LW•ÌpRã° —¡ºN&œ¼Ã•®)×¥P•²\êÏ­ Ï•Ï{/QyA…ÎDA ®%>µ»Nsâë,¡tµRë7óùpªôñÕû.Lˆj2õwÊñ(©¹$] ãÓÜVzt@ÄÈõé¸Úk³E‘õZ"m“P0º•ÃѳÿÁµ3úQÁ¯hp·ªU&j¥+ZiCš­9ÄT&ím¥Ü"‡·„I;Q2è.çpOÒR%eÎÆ—}Ç¢¨kN€Ý•ÓÖr—ÐÃàÊÛB5p¹[IK‘m›%íª‚˜ŒZ« -%ñˆ¢}k®ƒNò„A+Žè{ƤÒ`N®q œ<\†‡±2¿ƒü{U>ár-uÞxªÓS=öªÞ0ã𬋣҆kÎèšér‡  -¡­b&­*%Ijuc2™VÖÂG¶ñIÇVP® ø®Í–`ú¨=Pø(mÖ²³3Z×ßys§&tˆG_)Ðü#%±ºëºÅà•Ñ%'߯È1úîÍVОCþu qð-¯âbÒ©ñ3½Sži÷ª#ï‘,xjØ~ T¦¬•YcT}…± }À8`&æ?¡Ïì´,¯&«°Ï#ØA²‡“ŸFÈ,Êò¥A»åü;ÿé`âƒPf[´J™/=‘†l­3 ƒn‹,Ó ¦óÿ7šÞÇqÐA¯;‡@=ðú-S uð#ŠÂ ‹duãùEµ±êëë&T€œ,2‘+mJQÄ´‚ÆÙ |Â`5Úõa-„Á_ºÉm¥µ˜‡Kt„,*Y£qq Âb¹ªw?” ÆL‚ÈÊ˼³!ëö Æ5ÀK)˜jeÈSÀ‰3 -$9Ó]¼ƒ}Uˆ'*".‡È¶äøó¬þm,Æàá’w,7Ofɘ1¶=°ŠrOÑ'V<Ód5¶‡«£>fµá¤Î¤RÀ÷&’zˆ{Á1ÒÝlZºN‹A¥ûfˆ’ôïóÐú  -õé^;´/Žûñ±ÙŽw®3ì¾›Z$ÁtÖnâMf'Mqðk“[Q #t* *¹U «¦ÂÚÓ`‘ˆʬେË6CÍô«& -Þ€ð¹G²3!%66h±m£K;Š4TeWˆÚíª‚Ö²’¦X˂ûgðZeqÁ8É%2t(6 Œ/UÐ/5ævÀ§ƒ[zr†Ÿ´.ôÞ¹!¾N§Eà('€ø»u8¡qÕô#rñÔkk\Ÿ£ËxÈ!Ìg.£Iqq‘1'1-¸úÛ=öQU**ŸçR9ýêAÅ[BBïO”[ -Œ¯¬ Šå¾Q¡õ– -…E”×Õ ó°tŽ§øHœ_Óôn”¸ï«O¯Þ¿~EþÌ_!otÖ”€×í$á0^Î&ø <~ÑßX\=,‹ÕÚÒ‡Æ-¨7³›d6ãóG§7láÇÅÅÏÿ=yendstream -endobj -1152 0 obj<>/XObject<<>>>>>>endobj -1153 0 obj<>stream -xµWÛnã6}÷W 6}p€XÇñ¥@€zÛðCÐíÚ/4EÙÜȤ—¤âU¿¾3ºY–“:›K‚1DÎõÌ9£ïü aÔ‡Ë!ðM'ðׇÁx„ÿ÷ñψ;Ÿÿ&€ ,b¼1ã?àé €ï²Ô­¡ø1â{*ˆòo~"—¾<5Òeþ–mîi],áY Ò‰Íuj…+”בPÐÃk_8îÇnK-h%Œ¹¶)çBDç‹ozaà1„¦g›Æ±äR(‡¾=ï¤ZJ¡ãçMœÞ:Æ(r ëQrqm3‹9ô(ý×]‹$±O„ŹNó\àÕ™íM¼_fVX+µ¢þ¾Ñ¨3€0,Õë©‹µª$a­xÔͱ€Ðñ"?Ñ+©ŠÇÕÍnàLÁR_3µBì)ÁL’Ck–mìXæÁÌÒ;H´~°ÈÏ¥ýµrWB»×xƒ²NåIÎeO4q?¯nâ‹M¤Jþ tâÔÜÇÒXw¿eÖ¾˜v¥ó&>Q©=V_]©½‰S{yjTÂ6Ägïgôýf¨A… £zëpDYBCúr­¬Î9øp˜ÐX1†3•ÏŽ•0E8U8NÅù«j6!'þF¿NÑî~ä»8‚JX`7Öý,S,A?ãŽr½DiBž¨[Aš’ LcþšNØR? -Tš p"iY’ ­² ªË# -1…ý€DÑŒ‚µSÞg[MVÓqîÏd3Dª°Øa´ÝÊÖÑ=Ìj%Ž)¥3©Vét™äÝjmkôfë,`µ¡‚µõ -‡“JÚÿ…¡wå]z#¯ïÁ\'ÌHÛ³[Á%Š, ‚b¹J #œ*F®AD\^“7]À -‹ÈR#öTMÕ®X›è¸ sÄ€[3› þÐ&qnDóØ6TŸ¥Æ#Ñû™!†Z­Ø¡¤²œH°«Ekê<Õ†áBCý.Üâ!ò4ƒ ‹„÷Ns'<µNoä¿ÅIRŸ<ZNÈî{•éÔ´Ü–¨Üà -b/͘§Ei Ö¸µ¶{ŸKÁ¦˜…‚¸³.Ÿ6„*ì$FŸ†À%'Pl¥¨µ\ÊÍV£c³óº"®Ë†Ö»Z-hgÕÕru:“¸pá®ôé·»îÙÝy$@è…bŽÉÄ&~8„ùíìSûvû;ü®·™‘«µƒ».¿;‡p2öðcróTÁ­äF©XäÅó@ žU<0ż¿’ _íX"::täöËôöŽM³G7¦¨¨˜¹ä9z±ñŠ­5­}²õ=' ,KNz5!Á¦Öÿáà6z¹™_fói¾5—Dâ…àLÖÐö|Wz›éH²äž2BI>i¿ !Sær$?W‘—›©+bpœœÝÞjÕÅÿmUmñ¹·,·K¹¢o,Á™ ØØâUí4ŠëÒœ(6R1òa9{yüÙ¹80ó¡%8ƒi¹*ξ3.7›pˆo¿ãKN® -5œOo?Oá‹Ñßw(J<%¨å¯W]èúøFuKõ„…°ŽDg±ÆO ¥9É Fo4ã›4^Äþ\tþîü&„ê7endstream -endobj -1154 0 obj<>/XObject<<>>>>>>endobj -1155 0 obj<>stream -xµWÛNãH}ç+Jbµb¤‰'! ûÆÌ,Ú±›ìå uìŽÓƒíöô…Lþ~Nµí†VÊp ÈÝ]uêTÕéò׃˜øŽi:¤Ñ„’â` h8™âs<ãÏ!~¤UX8>‰fÝçý³ÐbK“þI VZ$G‡ï_Ô‹8¹Hr©’ˆD’h_:²~µR‰’ø7|õ½5ý\-ûV&Þ(·íW¢¸Ù¨r©Ê4²úsF~õÊ*'kkôÔÜ/çóÓ`Óè\ZXŒbz‹Q#ÓÆæKF}©¾=k³ËCêj&öÄC×Ü^xxÖèžyÐn- ˆÝ]s{ááY£{æáæÒZ¥K*D)2Y #:eÙ-¡–m†X÷ëJX»Ñ&};®ÃXÕí4ùÓ¦|±ÇŸ˜ëúÔÜ®ÇØŽ©kYÞ­!p ¦î-¶^I 2é«JG+mèi–ÒhKÿ»BZU"'úúÈ—‰.8Óä4y+w»¯ß½æÄ4òÁèuÅöDŽ6zÿ­Y×ÒäÌöf¥Œu7œ¡®§F¡/ûµÜêI££?ÁCS*?Ár{s}íz ñ]¦[´{´ÕVõ>píÚ÷£§ÕÕ?S×óAo8á1àœDn5‰4EÓ‰ÎÊU)I¬nt Ýßþõ -š%“ŽŒJI¯H”¥Þª2£Tûe.©2º¨œåîk ECvÚd£fa8‰Æ¼p©7ëšv«½¡¹(–‚~e\”è²”‰cnm´ÏÖõQUyÛÊn-ÂIÞ¼R™g)Á˜Ãà!m? >ûg'O&FãÚ{G“ˆ>«B¹ ¡#s6kÿÖc­…i¥/ -LA~–Ý*DáÉ°°™KaçNšp½¨Ik]I–¨äƒ+ï½ÃZcÁþÆÏ1#"ƒ5îÚyË·¤K|ˆ;¡rÁÉ` d>«ÒƒPIƒÁ¤ÝZ'‹÷¨·”²`Ú€ÛT»³¦>‡è1’&Ò8¡Ø_¥quÂ]Dgðg}²Æ£ÆÞ À/¿'ÄÝH}@õÌ-@’A"ÃD ²:>wXÔŒÒ6χ.Ø›Ks§üÝ(÷¢Lé*÷YX8},ü:õ˜=;nšÐ"Z¬Á(~–ya² -ÍÑâ¦À¥Ì_ÎçµýÓ Ê@ÀŒÀ†Œþ¾<ÿÙ.SmêBïŸ%Mûõ¦Ñ,¦ÑI]M×óÃè{_ka½w<¬gõ‚+PæÀ`™!$<ÕXÐ_çŸB¶‚3•¼¥vØž¢sóLct_hœËd¤²$˜ ]Ñ ãrŽH6kò|É^Q³¸ ŽÊÐwUu+eIËíN蜽nÁ¥Šß%|®SöPڜ֎·‡!±† Mm´¤êrX)”0š—ˬîÎL‰¢.ê+œK_ã+´À™BDŒÞÊ´éöÇÄ·óCâÛÌ|¬›Ôq}5òGWÈwJR'-1ßNÜrç"„v€n{0´ÝBÒ¨ÁÀ½Îä«¢Ë+ŸQP8]"§¬d ŸK¦ÚBi¹‹$?¤åÙãFiD8kj/Í¢ÙɈ&£I­ÆóÓ‹§teô¨+}Ò‰çI(àå„õb~ ¨7âM2=zV&ÇÓq4Ìð≓ ü}qðçÁw¶æendstream -endobj -1156 0 obj<>/XObject<<>>>>>>endobj -1157 0 obj<>stream -xmQMÓ0¼çWÌq‘Ú§UŽÝ$­ -W¯ýšxIìâþ=Ïí"¤Šb[ÉŒçÍÌÏB âG ­±i æ¢*+4Õ†×m×òZóë §â¾/Þ~|Ñ¢?1¥éz †Wzu'DÙ–xpVM)gßôÏŒßB0,ã×u[6̸ëGÂb쓱áwˆ4¯GïÒ0òNHàN×ãA΄Gò£x_LTã -Ç) ƒ|š»Äx’‘±w:MVVguÖ›²Îšò|öî쌄½QÞwŠør|€’Ó0Ê On!Í :0áb4!œùÖc# þ&Åóý»æ;qKÀ¡¥ªÝ,͆|(ñõðéû‹é9O!M&ðÏÁ“ŒüE'uõÃÔœ‡Ô³±&Ä,ÍS*bÎÇ'k˜7›_ôÚðUˆsà¡`).Îÿ(ot/ˆ†Ûí6UsËèq·¿ßáèÝ3©ˆ÷N¥™Ã½úÍÌõ_º­¹pýß·í¶l›Žëf@ÓfÞ‡¾ø\ü±‰¼³endstream -endobj -1158 0 obj<>/XObject<<>>>>/Annots 609 0 R>>endobj -1159 0 obj<>stream -x¥WÛnÛF}×W òR°h‘ººo¾ÄÑÄqb¥éƒbE®ÄMH.»¤¬èï{f–ÔÍ1Ð$"‹Ú™³gÎ ÿí„ÔÇ¿& Æç~ÐÇ/üòÇÇ?:Ó0ˆh4SÊ) ð×?eôЉanW£it¸º÷œÓ œç{¶ðB£ÑŸÃéŸþ;M‹N4ƒ û|Âl<æ-òÄ.ãi0¤Áù0`u ƒqóÄ«ûÏXŽ±Ëï•Õ½g¬ŽÏînõrÖ9»9§¨O³PO¦4K üw¯RUÖÚQôÆ®©¶te‹…Y®õƒÊç -)D¤*R'³/>õ¢!èÞ;“+·¡k›+S°Míl–iÇ»Øa8ñ{ƒ!ìaa@÷N;ýïÊT¦ÖôQ«ÄKo2¤0lL¢ ҇ɥ^X„±±+ŠáÀ+ 0ņà´NME±Oà”ÊL«JS®¾jª8ú:UµØ*<Ä6ÇYµšgšÖ¦Nù@Éþi®*7é…îÂdº¢J»'ã ÜUù<`+REB©ÇJr"ÿ¢’ܦb0KUUkëÒEì6emlÁœÍR]áÄzmviâêȳ÷ 8%>KM²ãÄnIg7 ´`Ömc{ìŽOw ïew‹p ¥ZjɤNõ¡Ô ºôz~óáÎöè.Ù…¿7ï?ÏÞƒ `BÌilpL!èÊ]ªøëÒÙU‘øã&¡«ýd;ú¡ÏŪN­û­¢;[ëßýî]B3¦BbãU®‹šð]ñÏM¡|„w­žLEa œòjÇíûë+’¸_1’!õZ4ûîf-Óo.>¼BÜjýÁV­Jí*àÖæ†-´ÐÛ¦3 ¦>¿°øTŒœ¥tÆ:®?§=“¹îR•à²Ü‰d«RÍMfjÃô±¤âZ -“>›"±k@3£!då°6ÚU*=v‘úãI{d³$èŸÒÜ@N%®&W€mUÄá.Ll Ò-QP„ª:òß«êMæ9µÃ1ñ:‘Ù%'½p6?².¶‰D}Ètœ\fÅÃêj£xíªÎLÁ¤À¼ÖeE…F…V¬Fæ(Ýý2÷²”èV˜²³¤©zBæ„âýÊÂà-X¸ªÛ 29´†‰Æ[8 œväv°˜y -·µ§…‘œ^X-ËìLÙ%ÑäÅ%/g=«ö.}º»ýûŸÛ»‡ÙÅÛ·AZçÙáÆm5¾ …G!BUèRcmU?ÁWçP¾Ù†æ^€AƒXk–ê€. -“¥µ ¨ZáÐBÔøE9P'(äòh÷6z©ô™¶gØãÅpKUjWY"×Å! bDÐõ{Ñ =äˆxÏØzvÀ5Æèì&nT¨‡råaÇec4 ÓU&} qaž“b„¬E4‡ø$~Dö[Fží¨Ï l 3éa‚–KÅË ?ãq«éW_8•«8ÅÐAR˜»b Cµ§Í‹©´k¦YöáQ9p€qWž£Ñ._(HÀDð]ú x]+“áíc§Ìgi­œž+à)é:yCƒq§Þ„ZzµŽÉ¤åìzUêØ`ž“ o »Ì×8j#'AéTÍË®‰@– ×?+a€ˆuéç5جM–œñžG™š0'd ¾G´±þ2 -rmg7Ó½×ÀQ0Œ¸ûþÀ[êÑô{ôf:œ ƒÉxêo|<åè^Ï::ÿ,nÞendstream -endobj -1160 0 obj<>/XObject<<>>>>/Annots 656 0 R>>endobj -1161 0 obj<>stream -x•WKsÚH¾ûWôek‰+$a 6•ÚrÞ9¬í¹lÅ9 ÒJôŠ4˜xý~Ý£A€¬íT€V¿ß­ï'>ñϧ8 0¢¤8{cŠ¦3oB“iŒßþ7š–Œ)øüñéýI8 ½3Š‚ H -šŒg^ÜA9]ŸìÃÀž…ž¿Ýƒ'Þt+Føc<+(à¯Hø^Dgá4ðeÄ (({ °ÃMfgxXPÄê,Ð㦑é§ðg"PŒC:ó™Q€b¨3 Ç…cj -°Ã…3VT±PŒÎz…¡=. Å‹˜IBv¸`ƱCd$²@‹g=_ @ #ËÇ Øáü™upÂj-Ðã¦\ ]´}z\ì÷ú|z\`·2èq~lù8ƒ¾=nÌvþùìpH.'~ÆÜò›1â -/‘†DŒF½šŸŒÞÍÈi¾DDˆò”æ©ù˜æÉÀ¼Ð£×U¹ÌV›&+WdÖš®U±Pô¦*TV2Ò4UžëæÙü+ÄM`°7”Ò›§ƒ9x–YÓj® LI£•aqŠ¶UóY¡Wo^SÖ’©hS¦,ªLEg­UhƒGTêD·­jîXR[,¼öyô‘¶Yž³c¢¢x2(+CÊ]Ô†…6z¨Ô9ÛÍŽì ]kô¸‚æµ¾#…ßE…³VàOõ÷2:¿£¤º] -Å¢çp 4+ˆXgÊÒõöÔj¥Y‘ Ì°zô®j ¡¼Õe¦ËD?¿g£ºÕ´Ðº¤<+¿ÁŒmfÖB¤³Qù.”ê6i²ÚdUéu ¸l‘ì(B¬JÒ?TQ皘bôcM7pæÛÇ.ŸZÂ<(’´Ÿ«?ëÌ¥œG´|^åÕBå_:å2¼ð˜ð÷‚^©6K¨Õ ‚‰/Ã"[¡¼PvCÇ^j³È*TJéô²3õÎ ®.ß_Û丹ÒVMµ©f½8ÿtññüÐ —ŽŽ(ZƒäsçÏVS»®6yÊá銈RÛ\¿y• 9…Bõ7´hª-\?Ô# Epè.<Íõ­–šfW£‰p¡šx#@}Ýè¥n¸ ­pçضáì);kþlßÒca»Ü¸ <‹V'æn—Wº´þNãa‡})ðͳDŽÁ19ƒXÒ!ß/-B+5wµAjÕ¶(‚ÅËÍŽið}“5ºÐ¥±ÅÍ%}(ùáÄt"{Î4øGÆjS×Uc\©äÕª*Õ]6{®Ž§éÞÊÀÃHl :ÉNÝTË,×퟉(GÌÚ9ƒ¿ß.nnœ@›CI¿Ì“µˆ'“Xó{KëªÐ”"C lÄTF+Y¢®Û2#âû*·ãeÁÃ{SrÆ•y‚/i“ÝîÆÊm¼Iº^³þ²Iûþ2lÙ½mkdK8E+]êóÐ*°sÛ–cžK$Ž{ÙziÖ•D«Ñ9–)VÃéé›ËëÓSI -o;^qŸ13EòÌ(”ýaB.ï}Kœ³òÌKŠôPÀO2úboI‹Zq¨+[¬¸½‹a/Ľ­‡J¶r¿ôF›¶Éðµ|œŒòl1rž‹°>‘8=RªÊüιæ§'Ùb‚i,ÙV -ìþ–)J‹ãÀ…âg»â…M€D‚›Ž÷èAÛÙùÙõ‘]¢»‘òˆhàÆÁ\a‘JÓ‰9’~/ -euD!7ZIµß\¤ÆÑx|DÕ·çaÜî¬î£ã -·>"Þd8y$ËXN°¢q•TKª«¬4r â€[ãjø§‹=ÝÔ§_Kr™¢þ»KïpCwê¼}`òË.„ХZä:µG—Üz©6*Ë[”Ï–û'åÊÚçXX³x"¾ï\r‰Ø;7ß^¼þôÏÕüãå…·6…=Fwô.9ÉFï’îàÆÞÔ'w±ÞQÜ5ÓŽÀÇËÞtR„÷Ùû×ç½:§«¦úŠÑˆC<Ùð“ °‰C?‹ë4¤aàŒOŸ~ÆóëhMñNîhÆBßÎOþ>ù²Y Lendstream -endobj -1162 0 obj<>/XObject<<>>>>/Annots 661 0 R>>endobj -1163 0 obj<>stream -xWÛnÛF}÷W Ü•‹ºX–ä¾ÙNÓ¦ˆ“4Qчº(VäÊbBî*»KËê×÷Ì^taä¤(’8æeçrfæÌáç“õñg@“!]Œ)¯OúYwøÇ€¼ÿùd4fC÷ÇÙ”j]N³~¼ªè¿O—WÙφ“ì2^ð£½Ëš./³«½gþØô&GÓ L ñÏHZx{ƒ«É—nf'½—# h¶àXÇÓ Í -jŸfyg¶”d¥y”†êÆ:²Íj¥£B×¢TTé­, U ³ÙGCŠÞXçO%þWx¼tÈ.…‘áfßî"6FmVtî‡ãI´•Žø‡ÝÁà í˜æ’ÂŒ!ÕÂ:D;7zÀ AjSà—…6ôG© -ܦ¼*¥rä4È… çcšépl}Ú:|q›Ñ»J -+æ¶p=> -SêÆÒéÖÚ|¢öYª„’75<Wj…òª)dAëÒ-q°´T”Ö™rÞø爬å°N”•ÍŽa4g£g`ê§ÙàŠº—C@][ú ê¹@ “´¤´#½àåº^UÉ—üÿ.\½ £›ÕbµâlæHOJµEïÍ,¼àëÞŠüwU>¥§÷Ÿ+Ò5RTÕ†>7%Üy¿%Ã^0òiUq+á¯@gpsÙ•ÈåýÙ9mt÷šª8Þû<œ(ó@Ø­ˆDQôÏèðœGÎÖó,×jA+aD HB·” -•©C JŽ,ãqú"4ÿ5[¶§dݦ’$ò\7Ê¥¢]Ñ“´@Kw/F¡bƒa6Êè6™¹ù²T’f†ë:÷³ô«.{ºõ}jcFÃ~°»/DÁÏv oà‡±/>ê8ï ÆG(‡ˆm‘n¹¥p|¿±¡$¢Aw+çkĦ%™»ï瘂¥àšá”¹?C)[Àó„„ö “•Ñ«]c€§Á›ó0ðÿIé5,r€§·èΆ+ÉN -±ÿg0¿Öbò -ô4Τó¹ƒAëÖOBC-güÚ€!Ñ“u£8aØ8§’vï±Á­VÎ誒&£³GÔ*݆è6‰*­Œ|džLbPµ)ÿÄ)Э‹®c¹yõö)¾X]·ðü›‚q\Ǽû€áá^A1¥Eš:=äºôÂ$ÇBÛl†ùð°mêëËßr™=@Ôžˆkkéêik ÐL0ý"U.ÏQ‘Ä·Ûw+P˜`TR-ë9®ô¢åY¤,æ2È„JÞ9‘ÁVÚZÎõ™’Ã3RsK0ó…W:,œmÝ·°[žA©¼ñIbÜëm>ï^ÜbêµA<C¶-èNÌh\«Â{ùÀ¬¿Éè:ÎÌœÓR¯óh°Í7̯ÑdÂ8”‰.ДX@?² ¬òî.î0†± ¢§"Åç›ÏïAî}ØáÆ¡×BÝñxIðývÐèYßw06½]mØÛnëïÍ XÕ+Âi—wîÏxn7Ä (Ö¶Ù%B°¤v#Øàè^LêàYù°ƒ#׈ݮ´*xpüÊÚbã6+Ðo+_`ÒaŠžtyïhj€yÙøñ7Ò  2©*‚AùXF¥Áæº{@)h×/Ù–QÏ{#àoJi³û³ᡘú - I(\\…]r€± ÊB†Öbãy$Æsœ¾è2tK#ª¸%µÊèF{µ³-4Êú<ðÞypXÐ|ƒÁUÅÑ2ÿ7‰xúVuÑ9ÝEµ9Ý i×vG“òLÞ8lwÞ}Ü{Å‚j\zíºW@W‚±q;mJ“u¨*ßDã»*4­ŠÝâãwŒä%$ Eh¥.PW®íž³¯`X‹ ÄÚ6hlœ½Tà¸ö%ª6GMã±7?Ð0š 0IÔ•ü]é…Ì £Xò[¯hÀØÂwGEMhÏÄHfÈ_^È/JßN®˜R„±f¼Öž#Wߢ‡ïÇ"|1Ý-åÀ_lûÉòü¬ÅUŸƒp¡¡Û–úÁÀeúæ¡Çrµ>̶ƒïÂ(€S…§6óƒaKé¥XirÇùX·BŽ£¨äú€®°ÐÑ ‘ø™ËXŠ(HjÁ’Þ A¯KÕ<Ñ_/Åó|ÀÜ©ŒÖî»vf½Æšž— -¿HÙthùÐ-¨WÈÇžj@tÝ»ûivòÛÉ¿aÛ"Wendstream -endobj -1164 0 obj<>/XObject<<>>>>/Annots 666 0 R>>endobj -1165 0 obj<>stream -x¥WkoÛFüî_±uRD,J¤dIvÚqR·)š¤UE]'ò$]BÞ)<Ò²úë;{½œŠÀvÈ{ìîìììòãIJ}üKiœÑ`DyuÒOúxÿRþõî~Cçé(™PE£Q2 -%ݸ¥Av‘Œi8c[†ŸZÒüd0œðc6I85pÇüÛÆ*ŽŽÃ^·º÷\Ñ0&{«ìMšõ“ôØäÕô¤w=¤4¥é!&cš.’>MóÎt)ééô=öà¼ÛÓéÉ&ï­„µë¯ÄÓ’º©7´VeI¥² 58]‰|©´$-*‰¥fI‚NŸ’X­¤.dqFk£Ÿ4´wKîbSók¾†ß²•>uÓA’Á·Ž ÝbÅ.%~ ]6´4¸¼PµÌSoº65É{Q­J¾sß…‚žfµÚ<Ù¶,‚YýŸƒÜsÄG[ª*{qºðPv³a2d‡½Ç—÷—çýsü¤acFnc'x÷·VùéàšÎe¯w=Žø²7Sº7¥ ["îp)±¡ç3s'ÏB(YÌקï‡;” M3À¤7TH›×jÕ(¤Âåk9‰y©í©D>%¬¬ðüÂT«¶‘uâ]Ž÷ ÚÚÞƵ³+fÖ”8^n¨jAøÀ¦ÞÈæêÕÛoßÌ÷ÌScxÓ{:üÀÛ S ¥šâÿ ÕWâÅ‘lñÔŒ âQÍ„çŸ6 J37 ­þñi&a÷(ÕÔpýȨÈsÓêÆ¡ârãiðƬá±ðU‘›º–vet¡ô‚~ÓêžÂ10Ò"L©)¯¥h¸@8N-ï²\‘²…_tKÞÝx);ò‡ûRnt¸Ø&¿]£„º´YkÂËF‰r[+.°­O±*gØ”) 꺵á6gõPëõ®Ï·â²-a[ͼ€Üv&·O:uwTÉMUq¥»do—²–Ûz‹Ú…*ðH×Æ4øÖñmmRWP· -U2xP%˜º—Â5Ûýl}=8Ùq¹Ρ žØv{Ò¾{õ’͵\Ç­[äöBjY3Žò:¯MåÒøÛîŠÏó*iÌF–%Y?…rŒ“ÉÀéêO¨+w]àÊA‘ª*Y(xQn<²1;\í£¤?:gz-t+JT´£'c§¾‡ŒŠ´A|•l–¦ˆXÉ­º%ä…aùÜ=GPDò ƒ¿+]˜5°žÒ//_ìJ§7²¾“5ÁK±õ)úD„°Qh ¨ÍõRåK‡B¼RÙ#[¡,£”¸“»c<)Ô)rïÊ5ª|)ôBú×±¢ÎhcÚ:îz`ì®-9ù3ô1äJ­ÐbÛA°xÿ¸Uìî.»aÁÎ#ö=gxŽ‚Sš)®¤Ð勳SÍdm#G÷Âq Ú2¤dÚFKQ/°\Ô¯æ@~* EªD£„`Û|ydÓCfúô¾;ù[‹:ÿoî]_PŠ^:_oYämš%Ã$Kèô­î"Òîu¹9¥¬ln¼È”µšž{uvYÝŸ|P Ìà)cÁ‡ÚÜvXsXýÁ}UnŸÒZlh*Ûƒ‹Ö2—­Âô‘µ²tÒ/Ccq=é}I¯Xé´”° F¢p³põ';`5jàÒ¹$‰ÐƒÕOzŠèPnèDÈÞç¥ãŒ å‹”Ñ6hºÊ¹Òsépíå ­ÁïÖzq°íj…¢x†¸ðzëPŸ«E ­ ™CØîþ]¥C¢(<¿üÄr¸-ö 3`Ò¼a7Äî(è ö¢ªuB§Ûi“ŸZhÉèBRòì ¨¡t@Œknj ªáüÜͲèj’ãYáJ2e€ *>αzz'‹¡S#ÌÂ?+ÝÞ“Ý`*¨‚º÷ýLÉ-+ Ÿ.J3å_Ñp$ 9=¢o’$©%ÏO,(¨”•¨!˜è,V¾{xätú–z­­{–S.v^ï´Y©» ŸC]K»á•º¯éë6tÑX×Ø3ÀçEÑqÕ>/XObject<<>>>>>>endobj -1167 0 obj<>stream -x­WÛnÛF}÷WLf -‹ºØ–äha+q!ÝXQ@/+r)mLr™]ÒŠþ¾gvI™bœ4É /;3gÎ93ü|4¤~i2¢³1EÙÑ ÐùÙ4Óùt‚ŸGøk$%G׋£þÍ9 ‡´HøÙñtB‹˜ðü`@‹(xØȜʤÊJC2•Qi©ÔôI+=J•ÌK¾$(Ö™Pù)=¨<Ö[K…ÑYçmHä$¢HWxVä1ÂÚ­6ñëŧ£õ†gáqƒr#JRü¦zR©\Ëø ˜ÒÝ‹l%Hęʕ-(Õ“ÜX*”á)2ª«»Ó7Âv‚­Ë爖´¯Ì¿‹²Ÿ¤Y¾¦¬²%­$¡Zi×ÿþæ Ñ…äðÚV¥)%B¥¤®ª\˜C¯µAÕ®‘|Ò07¸8ÌÊ n6ÏÙ®Ò˜3°²Á[% ²¤û×P¢Ë¾ÌZ)Q"o¾Ó¿;\˃¾,£¾{Ýõâ™ Wjv§.+£Ê¨rÒ«sò)=4n4Ϲqœ»•Ö2 -rG:qÐ|·M‚¹$ð'G¨Èì -‡!¿Í„A•¥Ê×|L§˜}±uLD•K* ·¨ÆËÃùâ-ß&¡†Dç=Dé%)ªÕ¦­*b÷:ªpzŠwâÉ/ ‡¡3®Ál¹‘Àû…Ç»‘X³¹Çè9˜&¿Lä•H]vžšó½Q‰Š<ífhúZZÊd^y~¾€š×å"“§´ªJ¨•r?ÚÈèÑ5k¥¿ÐñÌaéÌ Ý -T§«Z=µàß:‘‡Ç4ç\@ÐHXœøu›DÜÁ— Ä›ð”C}ïŸÔ.¡ZîuCª}6œ -+úVozl`? 6öQ`ÔáÀ¬Í”=4’2öBYi¸‹£¡×ˆmº±»®¼KÙª(Òݳý¸d'Tc/[6zoØ2^¾vïßD5³{“p:ÄÏÓpÊj_ŽÆ“ÚH.iˆ‰‘À ¦áðN~Q[ùp^„Ì¢ –pgô*•k=¦wÆhãLøY:=½Ñó §ÏA©œ©©ò(­bø:¼:ÁÿðCæqc#­–]ÑIûA÷î2(wÁͽ*Ä;&Ãa å¦ÎJ…Ìc‡tc¤¼¾Ë'³Ê›‘¶ ¸f–Âm²;[‰?ÄVç'`£87b[G{Á)ã4ëŠm•¸àaáQå©s4¼V(.¯ÈöòÊÄ#ÌÏ׆®óHȪ…£a -?bàJ“`¶§»îõ>¥n-û 5üƒOä¾py¸á½hæ -=©bë¯5 -Xš2FÌV2"ƈt.χ…tkšèüÐv£Ó:ozsj `33?U(ÈÕj+ì6| i¡MU®>W’>ò3K¿ø¬©}9òs¬ÅìÆÕõ{ÃÁEÃε›¿˜ÅÇÿ"F36‚7ŠtžHžƒ¨–k¨ 3 á™îñÌ“ÛmPÞáœ{rÙÎÖEê´Ñæ´‚Yâô$UºæˆÁÉsˆĸäNÆŽQ|ñY/‡³ñ°/¬—6ŽÓ–wK—²§i£¬ƒ#)Á®çÊmn«ÒÊ”· ¸oµ¯Ø2á:D¡©˜bì€*AlAv#ÐÓeçw³W¸Ì]¿aܽùŸè4Õ[®=‚óppÞÉ:!ÌØHa”Ë’àƒµšgßxŒ‡ha4{³\>Ìß¿_,—¿û‡žIãé~¥~gjpSdn ¾ÃÐc¥­ x^&³( N¥k£«âUû™«·ìFÎ’°.ðO¨N½ÜE†¯6€q%bR±À‘oº½ÕÑšz†=N¬%ÌÛíî\ÉÅ÷ÑЫ3‰ù¤eŠ "5V¶ñL”¼Gl‘÷)ÈÖmìæh 3K¬ñÉðò´9¿ðßÖäÅ´µ}:_åÑႦzíJM–Á cr0¼¼Æ\Ã/ß´Æ•Z™;„x'Ù#I¶Š"à‘T˜nm S°Xï\LÏ\nq -n>X~# 6'®sɶ²k¬OéxÁíü¡Né.ÅÎ /yB²UZrÕØžÝI¦´>—´©½‚{ƒ4î#š -Ô´ïF{Q]0+t„Oë ¦…Ï=Õ–š¿ˆ†‡¶MÀŸqXžû·þúóÃíÇ»ÂðôŠÑx†¢ùEdEú£˜§µp9|‚ÏC&‘?íY6[u”¨J,­¥þµ‘±ÖÐ5؈~kWX#v ÷a4Vk1³ûV¹ñaþwfLëñ7Ä·öôòŒ..Ç~jÜ_ý}}ÅkÐ' Œ„¨Â²^ºõî Çø,ŸžQo2ÂwwüÈöt>9'ã)¾ôñÂdÄç¼[ýsôòß dendstream -endobj -1168 0 obj<>/XObject<<>>>>/Annots 669 0 R>>endobj -1169 0 obj<>stream -xWmO9þž_1ªZ5•`“MÒ¼ôˉpE¡©ÐIH•w×!.»ëtí%äßß3¶—lÒR•ªÇö¼<3óÌøG'¦>þÅ4ÐpLiÑéGXNfшFÓ >ð¿’´ä å_1ÿºþ§3žDSŠû}ü.(¢aXåtÓi¯±;žíï¶ÖØ…¦Yûnk]Ð`ð>zßÚm¯±;?[ÁzÛkìNãhÒ¾ÛZcw6‹âönk]Ð0~[»Þùˆâ˜Kk<Ð"sôi‘vi7R–ô(+£tiºhrD‹ù?$ÊŒìJÒ§³“SJ*Q¦+Ju&é®[j €S]²Ìdv÷.¢Nê2ßÒFlÉêw‹ï>ÇÃh…ÝTW8o¼u¥“\¤ ÎAŒ±ÁbMºR÷ª9eºª¤›‹S|‡#…~ô'ÂFš+YZZVºà‹ÊÂ!¶¿’ßµ*#>Ð;0‡–]lu!Ò•*!¿ª%‘¦ºfÙPlW°^®k++’ -ª*Ø& 1òIá<Žá¯qS£à[Ð×à}ƒ1’8Ü®öT1FĶ9ǃÅt/=F$‰{I¯Úþ‘iXüÞÐWÝ®„}khSéòþ¯p¹±vÁþ·Â•ŠÚÈŒܾœþíü^‰GUÞ“ S++àþ¯èbI[]“@´kÃW ÅGfðsdD–áð6i¥ÖÖŸkíR!íJ#?5¥•V6qCN1Ä.r]ç©2S)Ÿ°ð””¥•ðñÚèêAf.V­Œ8+Mұɣ¬@˜¼-[c}æòe¸ÐÜn;É‘)¥°êQ¢ÔÎag¥ƒ)äò·RȤB”µÈq8Ø-·0ÙÎK¸4½òЕP¾u:[&_Š ðÕp‘1v"8H¬fÛÜ IýB€€™"Y c6-©]z¤Ô(ÁÑßE4 °MB|EI2S(oªv¹ ðÕsì[Új«re·G€ãá°œwžµ5”¢ŽBZ<—öãÅÕ ¹½ ÊIùöõ[ëµã)N$À]—Tä‹´…bSçßøök -œP ¦…¾Á‡&pJ4„÷¤M{®†,÷ŒèFÃ̵ÔëüÐ-¢J®uexœœe -«0¹™:)Á…0ê=O3”Hû™¤ç -¤èäúJ=œ+ŠPÎd $ø[60 :WƒlöÒ+—†Â=F[EWšM™äîã ù‚m(×mâØ·ƒ@ƒÂ¢šÖ`lDŽ -©dUâH8“ÝpùÄ‘ìиÙýRDUñ€"roN»ñ­µŸ·XÃKR7Yò“#]7®‚ê˜î 34*‰ãÛuÎ^X—êég0Ò_.¥Ì84m39[Ž¸´w‰ÏÂ9ë ’ÀdÌ„fpÒKŸ_Ñ_Òì`4> YæŸÀñ¬ -›7B 1T#ƒŒA|ø3#÷¡gUÌâ8Ý…âˆPÐ-f=½1àJá èFôjݬ¿bVtái©ee›¤€‘øΨýgcuO]ºh×Þ.UZi£—ÖE›C^ Ÿd;G1+n|ü>’š"oš,ÞwÏWy¬'ß[6¹ ØÒ™ÊÜ´ß;ßoáxî5p<–ÅÃi4 i<Á2ëÞœ\~>/XObject<<>>>>/Annots 674 0 R>>endobj -1171 0 obj<>stream -x¥XÛrÛ8}÷Wô›4[6e],ÉyÙÊÅÞumìd"e2»¥ˆ„$ŒI@C–õ÷{ºAR“šš©Iʲ%€ÝÓ§O7ôûÅ®ñH³§g×Ñ5>á—!¿|ù×Åh8ŽF4M¢kÊh2ãwx—Òâbx3æ4œO¢ ¯ŽÇÍ;^…!Î&Ñ”&ó?‡Ÿ\ÓæâÝòbp?¡á–ö<Ïh™ˆãkZÆý¥£8תÐärÒ‰)è§åoxæ䑾-bg7fí]–jk}:º’²ÒTzMÅNÓÓ’:Ñ9}v©‰t‹.¿ ÞÔ6 ¶ØW¤_u×æagâÏŸ_]Ó•€²LúÆÆi™è„¦Øµ­Ë"˜˜6Ö­+xÃ7—?ûBÆÙŽ“ˆ–; xŒ'u)9‹ž–O0L€{`¯/M¡Ö)l ±Ûn\¦Œ Œ–rÑè¾ÌZ~I*-v®ÜîÃoÆ&þoo:¡ÅÊÒZð:ƒGL¦Dn;ç„l\òA&Mù(t. ŠÈ„‰,ǪNc®·Æù‘žõ1©ïŽ¯ž×­yYs:9Ù…Îö)¨ä#ú·;hÐàR–7&…ƒMî2y{"‰„”—–vj¿7é‘´8 ’³ÖA9'ýŒ³§ X7,mê’b—eÎF*É:y‡Õïž<k‹ìèA’ö¿hk´-¨p´)øÄÅÁ±íV|ÿ`ŽŠ¤wâ‹ß¬Vâiµ2vÓ «æ<„–ì`m¬B¡Ô¹g!2*-Ðô&EÎñI~0^Ghž*Z¥Þ!ZÅ!ã%1¹ŽQGætog’DÛ^ýàh -]A™-á»f Ue–‹Dçza›çµÈá2ÏL¬é³ŠŸiL«>#Í\ÈW?Iè'›H¡vݽ¹Š´ÂÒ7u’ ¼ìáĪLÓൃ$ˆéHŽÛ«êíôôS1ñû©ÂŽ×<*QVˆ=ÐT‰N°‹¶AòW”!a¬”÷.6Ào«Š©x³ê ‹™‡ ¿kM:@ƒÍÊÓA§iEÌŒ’—½óÞ°*©Ð›:ÅŠÉN;%Z9dõú´Ù s·3)Ž-ŠZ¡€öGr›öƒ5[jQ~ =a½rœºX—©"B;ÿ§sGo“ÌXV•°þ(’zQ&mT´8Å£‰sçݦ—ƒûZÝ[÷zZA'׈ì?ÏÁ‰«©ý`E*åTÛÜ•û”2“âŒ|•J7 ö´vB&#úÈÅâƒñæ9½ÿ€‚nk=jE¹ZÎ¥~µÊµ6Åjeu¥0vµªDë¤äôM¬¡:´T«r:ø«HC -òsYlsµ^£*¥tÄ\Åó¸šb®fÑ|ˆ¿yèƒ,¯FÓY•ÍºdÆ£¯£ßr<ð¨÷:Fʪ­Î{’± tëCŽø4‹´Šdm×°€’VË *0ÓšºÀyë—´kûeÐÎ|KE…)È÷dè Õ Kª·M£h^ƒ™Œ)H8ŠÇXWiŸ\c‡IÈê×ó7¬PòAr°¿ÉÌ ù£‡úúš2µ¢-q†`Œç›ªÑI+ÁðÜHÉ9šÌ&sC ôã1¦}ÉÛÍu•·zl®–›Á¶¬6`Ïꆖ‚~1ú …žƒû?ß. ·`[à{V -“É©¯H‰¨úÂdƈ'¹=¿Õä[êӦؿ ðe¨cD, î©Yï>Þ-Ow¿~]Dw¿Þ[’K,µxÁYªs‰)…oLç”øþ°ˆ'Ú¦±ÿvË—R=qñÅ(>”Tðy¨r•ûk‡^|ùeùéÓÇ?8w+uApìŠÂ-n|ûÍ£á-~ oq—‡£hÑ7žÿB«ÞétB±A+:í’!žá‰1C‚ŸLÙ#yWæ1j}ÍÃåY¨©2|*Œà%Þ„›OÊBʪç/éËýû^è‰‹Ë Ü”ç› Žë -Ä4$ѧ)«l­N:ÀåÙ¼à.%=cë\‚i 7ô¬J¬[mu®pC~|‡²F«b­ÇýRII·¼®sܹp%õȶ‹^@”›Ç•µµÎl2ƃÀ*w(”‰^—¡$ᘺ-"Þç($°R±AË*p€šfUzšÒ ùç¯ D[šž€/ä¶>£_ÜŽi:¹ ãüâíã»·ô9w¿aô§mì…äÃ)¾-˜éj6½ú3t™à{†Ùtn6a;wË‹Ÿ/þZ (|endstream -endobj -1172 0 obj<>/XObject<<>>>>/Annots 679 0 R>>endobj -1173 0 obj<>stream -xÝX]oÛF}÷¯¸/…œB¢>-Ù}Y8qÜ56Nº•Ú €^F䚘œa9C+Æîþ÷=w†”(º‹EÛ§],~ÜÏsν£_/¦4Á¿)­f4_R\\L¢ ®ðÇ”?~üþb¶ZE Z,®ñYÐüz~ü–Óúb~5‹®h1¿Šf¸»X.¢eóï¾Ý\Œï4Ò&eËëmoB›øò“–dRr{I;i%JdÚX§brÆä–RSQ"wu–)QY™]. KÊÒZ;AÊY™§ýbjŠ…¦ÚJom”)2úÍæËÅ„FÓ9âÛ$—logÜžl±KHè„4ÿá ÙRÆ*}¡Ã^8xŸ”Ëg™{ïù±ªÖ­eðRÀc)2iÉhoqÈîFÞ:»¿(6:õ¦’¤4‚)ɯŸ² Ûˆ6(K'Ÿ`%t&)­LAÓ^nÛK®c"SQçnû†£Nh{9E{uÖL•Ø훨12[¢­(ЭFudE{™—iS!ÝÞ ˜i'@T¶cS”*—d}#jË Â«lo|Õôü’²8¦Q®¶H¸¤4'S•ç(Fœ×‰¹S½|·PJ°(-*…ºsiEž›½ˆJ8'Щ,Ùñ7.:¦96ßñqè7€K‹?ô‚ª ûW†Ðhÿ~ó¢¯'®}ÜêødoãRUÅ™tÞsç[,Ä“‡M¯m@…–1à ¢*DÅÁÆ®ÊG"w£DæÒIŸgføNb¨AH-1…@Evæ+3ÂÖiªb%µCÓÙ\ -놌­¦-ʆ@*¤/ܘö!‹<™Ô²ìœ¬x¯ëbSÕÖÉäÎûµÑJŠÔÉjØO¹—&GêðŸ{nJ µ‰}~Œ;  ú"áÓcǹŸ×¾m(’´¶.î„ëùc<ìųÔG „@óü…ìÞT¸Ä´W ðËE05fm†"”È$â+»ÍÊ O¾!Z»ší±Û.ãÝKÉÁ"¨ jC_g–(†fƒRF/ªà”®eŸˆkƒÞ@Θ„b 'cÀž!™*ôtö‡µÐxü-ÝNKZ Hhƒ•Õ³¬þõûœŒf‹èf¹:‰ó­¦õã[’Z@å‚EëÅ".“º(åâY¨œð"È{#«Êè’öΕßLJÃ!òï–‘©²ñùÓþ=~:¢÷{"çÖzýóOž"Ë 4°ñ€dµJShKêOZ}õØý¬ô|F{Œ.;ô: Ü2Ss#¤Âz}îÜO×~¨ÐZP@䘽ÇO±6‘µ}¾G®q`>ý,‚zTqe¬I!8Äb¡VCúpC±èÑhåð.Hô$"BC £Á³ -ÿ¦tœìÞñx•«£ÕwwäÏÞO>1-À+dRÿî®e;º½Æ×Au½’wº‚ƒYˆšÝ«’gÀo{íoÖ„«Úd4ú…³ŸW5„Ê"gùÖneÞQr5|‘ X²JEÌÚ—BÙ¸6µ£‰Ùé'ô1Р  ¯f)ëåg4´È‡k¾<¸Ô:GWYϱUQ#ú¹‰EΓ‡eŸdWd1´þØzÿHÏŸ­w°Ñ[êAx‘E9[à‡ÝBŠ°*ÙoÊœcKáRŒ{ëuj|¿l•¤3TþŠ1œz8¶zðñmF@ÿù46 0GÀÜ|åÄþÂÑŸVG8iÿ`ÄÅj<Úäž5£bÿkÂA/Ðøº„\°L9Y6{Ujxk`+\ ærƒO\êUI Côó q4_Ü ›m$…}Å'^ã¯ù!ü꙾›ó¢àµ€¯våÀܪst—* A¶vÄ`z¬#j>/XObject<<>>>>/Annots 696 0 R>>endobj -1175 0 obj<>stream -x­XMsÛF½ëWt)Ñ) ü?”Ë–,ÅŽªV¶×dÖåZîa ‰‰€ˆâö·ïë€)ËI6.UIf¦§ûu÷ënüvÒ§~ú4ÐpLIqÒ‹zxÿúüëãÛ“þ¸h4žD*h0Gýæ)§ÙÉdõhÔ¿ˆ.xqrÁ‹òÄ‹ýÞ$šÐÅtŠ=¼Ú‹†Í¯ú=ì¾À™)V‡½1ï•'9;¾Äµ¸|Ì«¸¶}’³½?_LåÞáå„%É“¬NÇPvx9 -gÇ=Üždu0Æ©áh,Z G²*O¼úz~Ò}sAý>Í—ŒÉx:¡y*ôhžtÞ¹ %n½¥*Ó´4¹ö´,]!ïæ4Óåƒ.ÉXú~öy6ÿéîãû÷óï‹ÙÖWº ««ÂÙÅâ‡èªÜ«ù¯'=:ï¡ð<íü‘CÎÊeŸ\yï+U<+›’×­uYïñÊ“ò´u5¥ZG—¨õºtëÒ¨ -¸’·•äM¥#úŒ“çdµNI¥…±ÆW%nyÐTšUVyj±{„ TÖûÙª¨¹I†9s$ $¾“ |XÑ'cS·ñtù("Ú-Œ(äl`A˜© ›Zi[í~ròúæȬEg±ãʹÜïÐ~Ñ<Ó¥&`¨ÔؼG¹K€C -««Lp –PZÂä²ñpcòõ ™%Ãut³€e,°,‚?°?Cœ›ÔA¨ñ]!f±­Æ®Zt$Dˆ`yþ$6`Ü•çnÃ'ÄÎa•2¯—uN¿|ü;ìC08`YRnì½ÿ‘•E Ÿ·NùÙÁv·¤™*b%~s¿\Q‡²ªZÿØízÞ¹ru¸OX‚÷EôIS¦!Š -S–p›ÕJ⊾ã3Ý7I“Pç}ÐÊpÎAt,£…õ6ášå]>Àæ°aÜèÐ~й[ˆ‹Ã³€Ôü¾ Ñ`aPÉC5„/ñ:§Œ=ò ÎuÑí’¼;##"Ÿ`ÞžQœsª’IƒºÔˆ¨Ö…i*qÚssÛôþŠÅ­wfX"vf‰«*ºÓeÉéèMQçˆSŽÞ×7×kàm8?‚ÆÏœ÷ĆƋ›Í&ò÷f½ÞFñ.b£~ìú">Çm•‹²ªÈÏ}Øû7à|ìÃ?aÔU^e®^e„j–ÏÀM*/‚7S)`ó”ª-3–¢7×gtãRz­¬ªÂG÷Z¯ý »DÙ=s®Á8ÿ»XŽóLÑЄóu¤Ó:Ruˆñ징ãŒcªDÆfà|Úêoàê;ã“£Ì×·of`ˉ*#Õø‹IÙMÌÒww·®{‰4ñÀî7®P $±ûk¯x¦6ç\%q?J\Ñýo~Ÿä][¥øÿðì_WïÍüƒ0—(çòd7»{M~­“@xû0Þ+º6Ãï¨0Ié¼[BY(×$tÙMËU—Ýðª{>D“É„ú£P̓ñ¤!¸–¿&Ñ´ p[ -ü™ŽqK+Tofñ}©c<9ì˜ãýßÀ}_‚ìnù"”5&"E¶.b ±ãöR3g¤t *¢·¨I¡ñxF»<ù=Î?£$7É=3­0)¾ö’}OkVS¸$¡"ÙÝ¡`ÎhGê³z½v¥ß[Ù‘RöõsRþhç!bãÖä ²ù·*K³$m$b¨ówo‘÷¿”Ð*kq^ÙÉ‚§C·ÌvÔ J-wÃ7RVž·©³§èç˜"÷ZªØÕUÐïœõƒ²@‡Ýk ]šVE£¼Ä̱Ũq¸'ÈD¡ÖÞƒ2Y†³Ò°(9Hë\+w±P¥Ü±oë-®òÚz˜Wh Å—ŠæƒËk[iÔÐ3îG[‹ˆ¿ —-Úô`Â{¢_ÕªT|–UGOë„c­ÊÊ$(’èÙ´ªjNˆêð}e -´¸W½;þkLà‹OcÄ­ þ”o{Á¬ Ë88 -Wê*|›Ž_©ðÃËó Fm#²á¾fr×Ω+™'žbÕjϳ²Ï¡ÃGwˆW^ -©è¿-^áT[°bèè=Šož2X±Šó­xY¼Š°×ÃC -H>£17Ú¥4Àg %Ç„4@ǹu8Š ü×*Çù¿!œÁ_.!–+:ùß¼[Ìij¤…k¿ÁÝ[pWH¤VHä£èúŸ³]ãÇažòè³aBâŒÈaرQI¦“{È0h&ëoPëç%b^,Ô=º¸Ú´'r³Ì‹qiôò # OYKüµ+𬳜-Ìãí/å"…óðöÈí±FÜh“ -é\i¸Çúu}G-Üô‘¶‰K!½aO‹Nƒd‚¶×ã81q9”>º ºt=æ?˜¬ 4Ë[¼ú^žäÁrGNèÛÈšeµ¥ÓÛÓ‚ Oærƒ¾ÑŸÂZÄ¿ß{”3G‰ÎÞžÙú©ÏñmVX ;aeýô°^ò©çÔŸè~àÜqxa_ÌK<â2—£›L2žå8*……d¤cfcêÇ_Ž ²“ôÏ0ºk Î4˜LjÄ‘Mí±”¨ä\:° 'Ô)dÖ$*èN ×Ú!BH0ÂWÖ%_Ç>)MÌ\{ts!v"BØC¢5«Ê} ·íÛ*kÎâ@j¨SmÉÙ æe‘&Ætü~YiË7<¥^A•…ËÀ’öU‹¯b§ËðŒÝÁAÏXW<˜j•ã-Ïô0H1ëòL$ÙlÙ¨2$º•vÙùBøôõÁu,mÝg°JMò:}6ÄJµR2p=íwr‡1C¾)mJC :×°TÇ5Až;å3‡æÙ¡ƒ¿ƒ^DBÅþRDx-Xiäyeà3¾#Fèi+d­Øïì%$D¥ÁxKyÄìÉn -^ó/`ò,Ú.xˆxÆ“.xÚ4|ýá4š^ipÉ×:³«»×Wô¡t¿2ÕÜ4S¼|‘˜èããco:¤óÉ@æ—>úl$טð¡C:gf+i¤¥Yæ/‰“ñ4|i˜ŒYÎOó“œüäî:Ûendstream -endobj -1176 0 obj<>/XObject<<>>>>/Annots 701 0 R>>endobj -1177 0 obj<>stream -x•XÑrÛ¸}÷W܇ÎTéÈ´$Û’¼í´cgÔ3µãµÔfô‘ ˆ˜$”¢¿ï¹(ÓÜô¡ÙlÆ àÞsÏ9÷BßϦ4ÁSZÌèrNiu6I&ø„ÿ™ò?/ŸÏæ“dI×ËIrEM¯¯O¿•´:›]^%—t=_$3<]Ï“IüŸbºž.°âj¹ÀÏ3üo$ågw볋OW4Ò:ç³çË­3î„Öéh3zÖÖªmyÜ| ‡œŽº¥Bì% JuÕ”ÒIª¥«tMΈTÒfD¹Ñ¹B’nd­êéÜÿÚ¨F’ÓþgiŒ6´ùðaýíì|BçÓKĽÎF¼*j²²Îü‹I>Þ>S®Jié Ë2á5ŸÒôùø\^R·Ãfv=¡ðJ—W|ã|6t8ä¹”Â"”BÕ¯8Íȼ-Ë#me®ŠpN¤x´CŽ™NÛJÖŽÃFT²ªL裮­Ê¤¡FXÇ/r²F–r/jÇG÷j„q–TóÞêìØáQIkÅN&´Ær+ª­ ÞŸ7,•Åª°Â¹T´; ÜV[ ,©üÁ ÑCGe‰’ÈÌ—¨ñ§UC¶Ú&©®sÃ+3¥L™:mŽÿø9²l=dçø³«äf¾ óË›dÎÐþS=ÐN:Ä -ÿ.«xHW@Õí¿ÖZ>ÚZTŒi¥÷ÈÄ3Jü£qĈ %5%“Ytˆe‚>–š”óÔéÓí3#ì+ö^mfG#*œk~¹¸ðµH|}mvïßöå·Ç”–*}%!Ä/Á+ë¨Ržé"й>½ ¾Ž8ŽhÕ66ž=o‚t^ÿk]h+O °P8 öòpV‡ø(¡/ ®4…h,„&ßgäÝ&ä/ÍàY—m¯hQK™®ÿì¨Ñœq µí¤ÎøA»¯^(*ëÊ:uRàë·ïø'9œñG¹ˆ-êïã{³‘e@ÖÂiÚºä\!p´Ñ)ÿ’CAXŽ[ >Ä1I’à3=Ï€Néfì`3ƒF74…ÿåàä2™ÞàLpsɼžÎ’eB¿jàZ³þÑ%Á.諪3}°tóãâñþ=гY2›L±× Ê» =×e© †…êøQ:lk©jÓ¢3mÔNÕ¢¤_¿<Þ><%î‡ .عWºµ0,U§e›!Ûƒryx†÷XñØÛ²3ŒÂ–ÊÒ˜1Y ž×JÏ£ôkȤ“9èÙÈ”—ÞgŠcÓ¿-§àÏ|Ÿ5”°=Ò‹J a2~Ô×Û -62ÈðŠๅux€™õ‚Ú¼îŒn‚”Hþ©CÒ'©³}ï¼™ISYÆ ˆ×ÐÖ "xœ5S9H%kø÷dW¥ 5jÛ:±å>ÓâŒÚ©Tøòds¿Àja­¬09wŽxì¹€‚¶ˆ´Ô¨‰ÔóÑx ,¡ÛÒêññA$a *_Àý¹ B;ƒ¦‚ó°Qk¥A/ñ¦z$Ûú×CïêÅŒvL'ì×ቈPj¬ÞK38}3zZÇ'Þl4rG¯8Z'ê‰&o/Ù`TRÙ1÷äLK㈛ª Œ õÓgªõaó¡ããÉã¡€ÕãÛ û3V˜Ð’¸ÓÅúØ–Ûí°Î…*øºIĆBôÙÄfÖ-´…nKpÈ4ÃN|"N+–Ÿª¡ch?'ô4 åmíU*Jå|/ !r|à@ÇPT³Àšr1¿‰ÇȦD]PJ°ãîåË×ÕÃÓgÖuBŽbä(x­Qîq jÇdÏ\íÐÚƒq×jf±´¡(C´¬mQœ®)àu/åyXÙi¦Ò™,½Ð †´µlˆ“«ÜU‹À•gî²õÛ‚ÝÆ1ÀÔ¨Æ1aó˜ ›§:86\ôqu2Rþµ‡+¿ß{zó{´Ùžz—00èý0r¦9Æ7ï ïÒˆw”ü -±3Ûz´dùv”:([ ÊÔ -Êh‘¥Ìv#¿`ˆ•£]1<3ƒùäÊà5]óà;ÊÈÕÄl¦$é›Þtö <g*<ˆiƒÆBa»f ËÂ`keäš¿È*…0ˆcšÃ,e'²)€B2óŒCaѯy¶ç©æG^]ÖµÊ0í#ãÔH×ÃÞõ%ì;#X è3€ïRyÜ P F^dŒI•mæí%°8•=D–!&§|êXRYYî ìçj•ªº ] +㮆™g$‘<€Áê3êÐ,}oRíšš-ßb•´Ô8–»í^ãôèüцŠ m¡¢_äýÀú1‡Ý¼¯~65Ñþ,#®rßÓ0Ž¥ì•ð|% ¨ý5,íˆnZðsPÛ­p ¿¿'˜Ðà°c”}'HVF–º‰ù5œŒ™"¶HÔ'“öÕi4]¼¾žèêv˜è]¸,•þq<‡ïj×ë஀½õʵwìd¨³+ V¯ÔšC´_•“ øq*Â4È“+6Xû…ŸãÎüv€šb9)•ÇÅßÃsOÀÝ0¯¨¶Ý¦¦ª¡Á-á_¾F±‚!A\¸²ú{" å5w_Väo1a‚ûÛ4ý;·ÉþãR¥ FN ¶GÞ5àîp -’¸µI°ç;Í‘ý#|1»hÅ¡q ˆ8x<;%·@¢6ø³ºùÏý‹/9®×Ô9å4ñc2>9Ý÷ÖoXãT?ËÖг÷Kß²Ç\*8q2„yÁû-2µ~ó; ºýd‹aÞÏÿŒ†/Þ‚w;¤}NAwßÌBП–ñ®5½Â·ËKš/–É|~ÍÓýêöñî–žþ†Ø1å‡K¿'0ù|Š¯UxÉùb†oEþŸÛÀÕâ*YÌ—øjË Þí~}öÛÙ°ÉFendstream -endobj -1178 0 obj<>/XObject<<>>>>>>endobj -1179 0 obj<>stream -xXkoÛÊýî_1uQÔlÚzXEaÇö­k;”¦ôeE.ÍI®.—Œ¢ß3³\J¦Ý¦m‚8ó<ç̬;Ðþh:¤Ñ„ââè"º ËÑ?dz)~ñ¯Ò”Êù4õ¯_/ÎïÆ4Ð2e“Ù”– ÁÎÅ-ã“e¦)Î.kª3]Rbµ#EºþúâjõÅéêWûlKxù­Ñ®>¥mfâ _ëÊèïx¯Q© -M6•Ï ^ù££œßú°üvtAgƒQ4„×WfSG|õ …Ë£ˆø®œ 'јŸì‡Û²Ôq oVœ >–ËòWeBN«*ÎPj+¥þøÖ¯Vi¥“Õ*ê¸O¹ÞgäRu…eê/Ä;âм©ßäçõ{—oR;•*¢M?¥u?þÜÚOñOw÷¿DŸž~õÜØÜĆù¼FtÏj>ꟶ:À´÷ÊðN¢A‘¦>Ñó»9  G)„é’ÎÆc™Á0šEƒˆ>Ú25ÏM¥j¼/]]51vbÝÚê…D¥g±—a´cÈ*,*W03“¦ºÒL°5^ÔbEŸn>J ŠþÄnÍxYA™êL¬ƒi©š}Aè;)ý¤œC( Á|µÛH¬x”‰Éš²$°ëF`p~·CälÍx.!þÕp2éÞç&7;Áß~þpÛ±7±â}cÓÎQ¡âÌ”ªq5©8†R×îòz6DCæûœ1>*9z(Z¨bí«¹5yN*w^à‰éµðUi[ï—mÎÃa4¼àñ„ôF~”a.T¦ÞQa¡ALÍB9ž ë -ÒU¯åBÁIt1¹lûÎC‹ÿQª·ècÁŒ“éV¨Ñ4tŒ' Ö@^6äX¾~È.Oƒˆ$GÊÅšñÂâJ‰^«“à`ôxoœkdLo3 ¨2Â0ðÒ¾°·)Ý–MŠtc¥À{]Ù<Ç›À¬;¬TŽ-öÙ -<–-@°ÆÈròeqûù5N$²e¾{mµÝ5¤m¨0*A\g¥‰U+Î1Ó½ÝÎÕâ¯WŸo{¾¤a|í 8!•ÀúÎÀÍÓÃÕýcßw»ïéöóßߤ屌s|5G’ßèô]UÆkäcñp-CrlUyW" F»]ÅuÃ6Xó`зÕqxÀ> #s-é Q¢˜¯ºîiQp(؆äQßfä^‰ZX‹R •[ñ\YfK²Í2X>{VÝ|Œèkfl -…n!:xcê›5n¿BœêùlUt îÕ‰’­ éŸzš‰?4#ñËʉR€W_^ÆQ\ÃeÐךÒWX¢WÂD`dõ]?[‹Ý1ÑŠ#t6¢bb»Ì6y‚&ºX39¡¶R8µÔ±ÒÏð)w4yìü~°æYp}ÿ´-™¡nD§2È 1a)ëfP&¿rŠ6ä6fzó£Ráv,„'Z]õy?7ÆeÝ4Á+½â¶ÃEl=\ûB åéŠ%ÙÑÖøeo/üšÛñÑßÀLë$ õÑni­bQ~¥S `I:¸·„b#}¨¢¨ªH -W¹¤ãŽE–Ë€oµ½—YfiT4øð\»h5ës­$@Î:½ý®r“p™yka#|ðàßž€œ¬%ÝóË,¤”'‹CÛû F¸ -e»¬NøÛñ& hÒñê½”<îe9Vkì>©^éùõ}à¬#šÏÿÎaµ)0þ¤¥>ŠPø‚ÜZ=ˆ;uXOh™Dž]=§Ò Ð¿€wšpŒ=µÂ‘©ÆiÔÅŸO‹åËÕêDN˜=*çÅm'óîN©2ÏYý—Õ~© ¸ «@‡‡CÌ­í XíÔj‰´08Åá/Ñ©)à€G®ß'¸ãîözÁÊ â…kç´ßExíoEDå[µ;À¨£c -Õj2HÕi®­]Mö›i»›Œ°•úÝDöÓáÞOº¹†€¶ªàš|a¼jÏ{œÑùݤÚóËh6DMgÑØ»x|ZÞþÎ?~¹pÒêήÙll%d=.Û”f­·é NF4ÁÿÓ‰l[‹«‡ë+Ží¸H76nx_’Ù)ýLðËوΦCYLÿ¿ }<ÃáÌï¶Ó[¾]ýíè_Šq endstream -endobj -1180 0 obj<>/XObject<<>>>>>>endobj -1181 0 obj<>stream -x¥WkoÛFüî_± `Ä$F¢=ôCœ6­ÔMmÁ‘<Š“<…w ãßÙ;R”)·)Ú$ò»³3³«ÏgSšàoJËf Š‹³I0¡§ËI° ùj‰Ï!þW’R÷b¶^Oz1]†¿˜ONŸ_mΞ¼œÓtJ›—/VKÚ$„‹'ÚÄW2Õ¸1Q&®QåŽ2ÝÕë2U»ï*- -~±¯tªriF¤,)Cµ‘ióZ#¥Ûö»*×(§› Ź’¥5—›OgOgAˆ»/T±Ïed3i­÷˜ ].‚9¯ó§µgà+èFÚwFV?I{]¦`}®¥ÁIšâꋬøÛNºã9Èê±9ÄN¹Ž…Uº ègÝH,ñÆA„f¯K„–hi¨Ô–2ñ…Ð.„aä^TÂÊÓƒ)U2OF¤ËüÎÅÔFéñe¢’m2ÀWHQ¬vp»Ï»C›°i[©ØÊ„s‹$—C•'Ç'ª’±ÕÕÝPöå8‚òíó_^é.éÍë–#j2gL+B,Dyç³âÒ—q^'|ÿ.eFf —¤œtzo—Þ dêý^WÖÝ­bº%*MeÅ´á ¨æ~òr}àù8\yMÃ`„Á4à-‰n ‰-¹8èc‰Œ;nÀì6ìíd\.ïw¹ŽDþˆÆL*ÎÑQÀÚÁ3ÏÀTç¹n±íG.¿ -Àöò™¿xBk/Íq8÷!ç®${a3úž¶ø×ÁàØÝe2¾ñòíöüÝv[@Ðí~ø@z¬® j“ÈTÔ¹Ô2'õÞ¥O|íù?°=lD¥($XÍïŒ("áå¶Ý2ÅùÝ!®ªtënÎù €Q}QñPg¸'® ~ÐZÔV(G,rÜyé¼gц×íè:¥;];IÔά@BÄ­€ð_&]ØÈ-ÿXÔÆ~p³·Ò­uš$³—±“®¶GEˆ*ÐFŠ(—Žfa„“)Ãe°š9G{ŸßÆ9… QïÖ S;dÃ`WÕðÎc Ô…2vö‹BSNrX •-§¼µ ¢? Ãà#i)KÈmÍzüï/bèæ× ']y×$û£KÙÅÇöNÌ™àƒgM§§ñ!çu—s««°×¬ÿ¿è -ÛZ|µ\œËç‘/óà"«@2+«€Þºªg‚ݹAòÈ>/XObject<<>>>>>>endobj -1183 0 obj<>stream -xXïoÛFýî¿b /r‰±GvÇIÑ ±ã»(×+ª X‘+ic’Ëî.# èof¹”ʤÅáùArgæÍ›7oýûÉ9á×9]ÎèÙœòêäÕâäé/èüœk<™_]Ò¢ ³ìììŒùéù,»ÊfÙEF¿˜º°;O/þC÷ήM©éƒmódñ'\ô'Lgóìgœþ²Õ5)j½v´6Î*íÆ“©ÉÖG§M(l5^ÀyüjöúzAÆSî´ -º˜ò¤^°e¡§Ñ‡ \ []·£ Ç>£éù³lÆG¯µ¶Mh„7NU~Dª.ht§ÃÖÚb”Ñb«½¦Â8ëŒÆñx9G¹­ƒ®ƒ§)KZiª´Ûèÿ [I³´¹*Q¿"-ckOçáe˜¿\.w¯å²‰hùå’ë«U¥ß®¼þ½E4†ÅÔ8¨So$Ne2äÇkg+Ò*ßfô«mÁ%ÑZ#l°ŒŸ|ýÛ¦´+U~"ÛÉlÔ8í¾jÊÞùöÚ3H~kå÷FÔäm¯ko‚ÁÇ? ‚×v$ítè ǯ”©~#Jc‚*©Ô!pÓð_*o-þ¡ê=ÙµäÚ¡“ú›u!‰Ð­-„$Ü#Ä@ÛÐ"¦£:ö\ÅZ;]çÚgôvM{Û¢o}³¤ëµu¹½ùèå p–¦öŒ”Ðb—Ý^ß—`M¡Q¾«hçLÀù9¢{Ž¶à0$aÔú±x_KÖý8=lùÖÔzB|gé:[Ò½ªuIàOïwÖ‘¨^— ®ñ…§YDPµÊ0‘ütPƒäÀ5P¾@K¾âT@ପ˜nGPd8óÿó„Vm ÂÒçÚ†Ï µÝIÌÜVM‹žr¢N¯¬ Ràú‘¦ð<#Nÿóÿ׌qEɨþ¦42ÖÑ­Éõv¨{ìéŽ4=’p`ADƒÆïì†G)ß-èµešŽEê ¨á[ÈKتê½3•r{Â7øM2àúm>8õ€`”œ Fþ‚0±~!œÎžÓô9˜ÅícÍSv ÍäÐzÖGhs]ZU Å"Üô?ÕÒÅVa”¿y ”wT8ÝY°¦ìq‹hG"'y“€”±¶åÎ4¡Ñaj˜L—NüÀªäÒÔ' -uãû—™Ò8á mún:I‡ ˆ„§™£é hE+HmXa"! 7¹F5ÙluFù¬ŠTEê"Ô:bPcxÖX–}K&”qee ‰ÂýÆò3¡¦€ šÌÜý õA«‚súÒúá¼>ûªïͺË]÷ªZ±2îÍx$‰.O1e¢ÍxÑ¥GH_†G?¢2¬´r8pôä¨FN¾ç€jqdLÎKý_ŒG—KÏ¥!e âk™Òøþ tG<© -»µi°Ø°jÂòÉDD,cpZ¼.:P‡M{n N’þîc¥ác|+Ò¾nËrO_UiŠèNÑÄŽ”Dz oJ‘$>^àåþXë·5°ÙÀ­4¾Ôc)pËË×ÒNóiŒSAåûG·hŒ=?þË -òΣÊBÝá‡Úùw†§ˆŽj"`‡·eÁ¾H­`× §ú‘—H¬7O`%`— מ|£s³6¨´cä(6¯Qa;°T`[Íš—m§ÓÇ^ïï,áý÷}`ò$#-îç.4 –)ÙϤ*9v6*1#x» ëcôm#¡Û`~(G©c»¦åi×ON (R1Ä _Uزª˜ÚAVâ5jz9]>/ivP™.P¬¤u8¼óϘp±bSöb,ãž1õAÓ¤ZñÀRAòj}§Æ´gLÿ0Ò Ítï¸÷X…\SÚ÷Md="ש^Ay5¨‚%¶Òð±)p2rO¿.ApXMµ~쯫Òû}¿É ãØ€Ìð^h)v÷†õlá–|â—­ßH_ŽÖ÷ѧ­<®e°À{¿0 -ÀˆM×÷¬è:Øã¾^œ™ïTŸk£þ8íbB¦…K|;ŽJUZû€Ü_v}Lö姟ßüúùÝû›ëwŸo¯o~z{÷f¹ìVÆryÓ:\›Â¿ãÝw¹¼—Üwp| ç“ÎéÌìÓ¯ºŸœ_̲³«g4ŸÏ³9'ýáúöÕ5ÛÙ/|µymó¶ÂÙŠï®ñ°ù¥|0½œÅ"ã%ø¦´6›ÖÉ›ô¦Èµ¹Üx_òÏ&‚§¡u7lHºDÅì^\^d—ó«ˆÜÕÇz³8ùçÉ°³ìendstream -endobj -1184 0 obj<>/XObject<<>>>>>>endobj -1185 0 obj<>stream -xX]oÛF|÷¯8(ê-ɶ>Ü'§nZáÖ*Œ" -‚y/"yÌÝQŠþ}g÷H‰¢óÐN…¼Ý™Ýó·‹‘â÷HLÇâz"âüb Åõ|Ž?ofSü9Æ—Ub}ñ~qqõáFŒFb±¦g'³©X$χb_L%ö:ËÄZ‰…P…·‡¾X+”ŒSQ9eû¬ų5k©géÓH<¯„O•ˆMáñŠ£'|ªØªƒX^fz«²ƒðF¬Ô»Å׋ÁP F×ѱ/ã»århfï–Ë2œŠï(P!sµ|ק“ ‘¨LÕQèÐV|ÎŽ¢[õ­ÒV%œeDg<‰n(Χ߾kÏIZµÑe •hoìg~òê䆥•ÛëýßOO¿ÓI'Ø.ÅerÒÅæµã?‘JŒó"C8d¥ ~®ùò’QP]ˆZYü„¤ÛÒٹЄ;àIåN¿ƒÐyi¬—…¥™rÂ!#äb8mQ‚ÛzS -¬‹²†œ„'œ—Ö‹\UÔ&áœêv¹çærKI±’ñ¶*)CÊ‹IRR°ÈJ%*Y¾ë²¸ Q±B¹Bb]­×À™´*7»†ŽÌÄ2ƒö¬’ÉÀ_ª“Br°‘säå» •‡ûEÍŽ¶djEžØì ‰ zSü¨WÙë‹^¡|jLBßžÀë¡ìDôpÞÆÊÜõ Ú,QÖq…tätâ:”>ÌÇA»NI‹æ£.¤ˆÔ?;=¿þ)JéÜÞØd£=©vB´‘ZK9g ‘º´?Ƈ$—7§à -2³¸¬+ Ï*æ·"Î4:ýüíÛ·oÇ©ŠY›oP¢A¶„…€'§”è!”IŸôH™±Õ+ˆU®ÌŽ€lùáw¦ËÿÏÇû§€F·¾ø ã8VÓÔ>  Æ·bp=&Ñ# öUæ _©3×Ü1d†;™¯$¨IÔªÚ@øR;<¬ÏïôwÍB !$”sEg« R¢A,ÊʘÑ!tÔè*È€t—I•s×Bl¹)"õ]…3c¶¬ê2e-¯È‚ÒZŽˆBÈïƒUırœ&Lÿi!€ìŽœr+¢uyþµF椳š>wª™0pÿàtÇs×–£}”[¸ÓYÁ*1ßéì0JèûRn£â(êNàD¨æ ”NÚ§’]¾\¢áV¨R¿ðëì;™Aʼ?'|õa~ ãYhÅÑ8šEãJ­{I¼»E§{Âo¢!Å>Í‹⯄¦äþ­A`Ž»ÕàóŸÈ$4p£ä£êá„$;Œ–H,` 5#ÊÉž8±Ì®à¬f/\©b½Ö€Ñ§ÖT›”må¬ûJ õaàZ†b<ŽÆCÒxÍ®ylʶq&FCYmæSLD àè@¨Ä7Ì¡¿Ä/îŒAÕr™š\Æ}`/Ñ.FŸÓtòDÈ Ö©h¥b ” -@¡xVp.uáñ¼CªÀp ^ñý‰C.e¤ •¨âKaü¸šq¼¢´ÔŠÕ¤ ŽV*40@½ Ñ©ƒp>wÒÛbúó¸Øô¡OT€ò(#:Ž6N•5µbmMþ6ó°´ Þò!à|MíUSðÄgĽÜÁ³ä -E¶H86­ô\/_w'VïTÄ…w]jª,!‘ Ú^z×ëäŒy¶£,lôvݘÇw!óµ*3Ç^,Ô¾ M,õN4Ò,s¨2¬¦Ç™ˆ.Dç5=ør\Á¾ tHh8†fÁó©Êà 7uÝ´ãTˆ˜ˆ<ÌN™„næLÓ}@‰yüð ÃìpJCäé4”!hf)aUpTÖËÞj¬µ¥²¹vôA¸gÖ×U–uÂ×ùœ4EHGaŸ89Ûy:XuÞ¶ìš[§î6lïä&”B½œÑ ØGD¹3UøM%Rh§ U岨0'ÌPëîÀlKȉV(šð¥NŒQP¡\•C5«*ÀÓ O,zEÛ4¹bpzA5$P](ueq«P,ö¯8&'î ¤¿ŸßöERaÚg@Âd‹F]p`zè„—›cÉêïPtÿŽs„hïÇÈ!<f,6XÉ Hí—†çóCk·¦Æc˜¦ íG -ú4ÿBNät©WJ‚¦ÀŽ‰G| w_–™®gÁƒô2,¤†z+Ìi©íÔÜ{7ÚfŸN‹í ß ->âVP/¶p°Øž #àíT¶&Ìë›ð }ØeM{7kËʲÄæËk ùN¸ºà’;Ë»…µ‚‰²²%<œ"Æ•ÅÈ÷Ð`Ulá}E§±‘±þÐX$¤3_ÂÕàWÜb­Éij,TÆÂ6åY‡M¿áÑÐæÁVïKõ ZþèxËrë{tY²B!,Zdز(›Ø }ÜlŽ¼®ü‡Y’¢±ÍáÆÄ»@“ßȬ:ÁÏ­(…¥®µ] ¸ú_´GûÊÂ1S‚W¢K¸xôL"ùŽ E3ºWfõÒ4šàG³küŒá&šLniu~¹ÿøþž®î_©®£×1­És(¿AóÊ`:æÛH½l ²Ö›Êwz,p{¯xv¸;ñR/íïz5ý‡4¢/—7Ó›h:™á‡$Hb6¢X¿-.þºød„¨lendstream -endobj -1186 0 obj<>/XObject<<>>>>>>endobj -1187 0 obj<>stream -x}WïoÛ6ýž¿â``[ ÄŒíøg€~H›°8Yã¡æ! %:æ,‘ªHÅñ¿w¤äjZ׶\›âݽ÷îÝùëÙø;¤Ùˆ.§”äg1 É`(f4žÏð~„W©h¾bò½/†ƒ©¸ì~ñ~uvñiLÃ!­¶4‰ÅhDÓùDL¦sZ¥„Hƒ­’7fû$£á@VÏ‹õI“±^'ŠüNzZ®è‹-÷ÎK¯­!¯²ÌQ^©=iG©=˜ÌÊT›g’T”v«3¤\ÚœäÛÕßgê/ÅA߸Ì(Óf/è°S~§JDÁø'_É,;âE‰têœlÙ:¥Ž9‹à‰5[ý\•1'í\…ÓÒÑQyØoE¬ÌÞ ¿óXM.÷ÊukzB -fÿOptN0¤D!_kBdI¹ôž3¶´QÂJålö¢Ò¿D“Àh*Æ\r„wt‚Wnù'ó¤T?+çQN‰ç kRe®+‡S[[™•™/à -¥—¹JÏ;¶jð4xy3£ÒšŽ:.î~Áõ•É”sÔs*©Jíô.„í…€=äR‹h ÏB:w°eêpø¨\Öoœb9€q¦ýãòÃç?V·÷Ká_ýú-“ØC×!šË(~Ú©èéBÈ46NÝŠ£­Êåêt”RAu€Æn9 §È¬UGeMAsœ¤ŒÌ)w‚T™$ ô409Vö¯×KÀÈgWCX› -Ü9¢ù­|xžÙk„Ðh_ÿ¢Lè#cË<¨½T_+]â¦Í±“ Ø/)É”,û^½úo¡¢ÆÀIGb“¦ƒs h›çæ`‰Ò&É §•\…\¹×€nxß4ïS”º{:ɹ©‚Ñ D?å•óO¬°…àú劫7×+p~²ç–1©ô¶<6AÏ›sw×ËXÈŧEmRýÚ¥ú£…˜_ÃŽÄ\ŒÄTÐm`4¡yƒ|ßoׂc[ Ë-ÃÔ[çmAйB%z{ ^e•ô;T£ã/3½Gu€«ÌlýØpeî—¦¨1ÄÀIt+ìh)±U–6‘âí|a. C:Ì9 UþKkÁó$òŠÍþx÷¾n`o™e‡e…"_|× ‹¹«]U¶ñßQi óà Ú<ÚT ôLÐãN– ÏC4rŠýA)C_“à ‘0ƒHŤ¦q8˜`¶Lq÷¬¡ñÁz~PMtùÆ>WèÁ ¾“/ŠG¥*SG{—ú¬–†ò -µ~ËúßIÌâÉ­¬2 <ƒ¢ Œž5þü´ÄëwÁ]Ô‹Ñi0ò`))ê¹)z;aýw¸êñeÁeú‘¶õš5fd®ÄÃÍcô¶-WÔÊ‚´÷÷qéµøx×AùÿÙ=ÕÓ£/^AÍ;«Ñºi)™ìÝÖ±(&ø7¹;ácy3Ê õªº›@„ˆw¨na©¬L\XFÉÕz}ÐÆxðèpN{’©ˆ]uú?#m7/ÚV8ca8®^5Vv°Ní0êŤo Îï¬óÿ™Vëá¤f%tj¨Û)OU¡ÄgÇì[ø>L°ØöâZF ïD­‰Ã# ÐaAE…ÖZ‰äN…¡L°–Žçm£ª·µÓ(ÅuÐ -ë%,žaՌƅ/ -¥½cZ´Fì9»þFn¢HSÛI'ÈÌë\]°%b, É0]t4±°þ¡¢°†Ÿ†+1*¬oEí£±êÖnCaÉäXíU˜¡Ùê¬qÄxoÜà[èØô|†_Ö^•N“ëzQ&Hc%õ¥äk-Ð2Ýã8öô”Zå°f—Ò¸-\蔇²kª°µò"Ìü·6ƒÿ|é7L]Nš‘‚µtsw}»|úp¿\}¾ÿ•WNºj¯ -76—Hñ§h³:3üŒ -«ùÏôÈk8zñ©™^£‘ †ÐÄB âò`ÓÌà}3¹îêaŸœ7so<ó9ÿÈšŠé"¬/×wï¯y’þ²èÆ&ïda­àgûCl<ƒù%õg#üKßÔS˜ómýÀ¹5ΗU–Ú+zTÞó|F¿|¶2ç·ÁÔ%t_<žÅ ¿óÂ¥óôquöÛÙ?ü¶¯Èendstream -endobj -1188 0 obj<>/XObject<<>>>>>>endobj -1189 0 obj<>stream -xW]OÜH|çW´"EÙH¬a² N‚@î¸; Ç¡“öeÖ㠶Ǚ³ñýú«žñc8]Ä ëéîêªêö÷íãoFGs:XPRîœÅ;{_i6£8£ù<šïÏhqü)ú´8¦8¥ýhŸâdçÊ’¨kY¥êm„%mÔƒªDQ´$—k#SZ·ô»Î+úbijëŒ ‘Ë%-E¹¸*JUJ8LUIѤx)—FR¦ÍÇøÛÎtŸ¦³ƒhŽØ“Z['rmÄwö¾,º,§]šÓùQt|ཾ‰/è$<¶-fB1ââ„’ÞëR¨Š>ëÊ]Ò¼óY k+ÉÈB8äá4)‡_™4ü¿®$ÙZ&*S •Ϧ\ ×*+§á”®8ä e— G‰¨¨©Ri™Š–Wg”úø½ÊÃRm”öñîU•ê¥ë˜–Ò—ôJy÷L$MýúÉÕÇÈKΊuƒm¦ñº¦›åޜ;bïÒ9¬°ÐWár_£‡ÁãOV•ªãbÁQÑÙ]šÌµM®’ÜkmPê•ŠBƒŒ ?`÷¸}±¦RT-ÕRƒ}Üoø[‡õÐG’5¼Þ…©îز¤’B -(ÂÊŒO¾@KÛAd²-\­D^ö¶kº™û^ùÀbjr‰¡¿Ì ‡À)蔵Ï]$•6}=@F9% -õO`“ª ·2üÏÂcT™P*ÁY« W#¿7pï» -¾.d #A–žd¦©<²à^EHBVOÊèªÄQ"}¢šoÖø‘&NÑY-pÏÜBFëÙ|ËEMÛJ”xƒÇR¡E*Öèg¡ÖÖ١ĹWɳŒšZW]BŒ"q»|ë0Æ‹Õ± Kî´Ëƒõa €OáW)Zªd0l ™CïÒ b fˆj=ÎüàȘJñ07öŽžœ…Æ4 -®Ï, _ŠIÌõrrx—`{ʾ_Öœ(f_[ã^7A± øu`àoŸOV«ûËëëxµú…Þ&p}Cï—žÖ·Z»÷«Uøq0_­X6ê¡ëÑÖ,¹%ˆÇšïÓð\-àê5³%¢ŸÎuœ©Lrý"Ó7òBOÔ“ôóŴКN‹žô­n`-v ­„¾2P®P0o3LQ~mÛ"vÿÐ&MŠ…æîŽx»%7îw+’•IÓo?ƒV€«¢[(†(îR?˜‡›‡—XØ|°q¼œF>K :çÌ1àFé1G–Ÿïn/㿻 \;+x{ïþy3 {X)» -ÇÈÆhêK®€<$y*Ácè÷Õž&Øìöøö©pïð*’ú}ÅÏlÕ6P KaÐ2¿k¼ø„b*úq8eŠøÀ£×Wás²Á‡ ÔÞ£¾ÝX8úÞ—ãnlÍGÑþñ>cçÑbñ‰×sÚÙ)v\ý DÅæš4¼‹ô_pÓí+Ó£9¾vÓÉlGóˆ?1¾ö¤Kìòl8ü-u‚]ÖùïðýVc`´zˆÅ;?'uxtáKÚz|À—.â¿vþ\©9Jendstream -endobj -1190 0 obj<>/XObject<<>>>>>>endobj -1191 0 obj<>stream -xmT]Oã0|ï¯Ø·+¤M)Màò!ñp…£9¡“xq’Mkˆã`;ôúïoì´GÕ;5•{wggvìALcübJ&t>£B Æј.â$Jiš&xŸào˜ªÁ<Œî§Ç”UH™¥ e%!|<¦¬ŠÂIݠβ¡µ°ÈúèØ:.IZjÙ(éüÇFºµlÈ­™j‰5KºÂ—p!óBü”5¯Ø¾žD'ÙÛ`Lg“Y4Ü0CÖR¨\c¡óɈ×eW 2°¬¥Ûöå -ÑPÙ©6@½È¦ÔK‹Œ–×ßI6N“Uy+¬Ý”Ti£„»"˼ŒÏ£‰¼[Ü<ÿzÊ‘ûí| rûpOÏWÑ”4j»|d}‡£vвա†…»ö•4µPéÐë²£Q¶†t•(zVx‡¸UWSÞ9½F;Ê™XXYoý^I %U[³âP`j¸­e!Âp°Ù‹g·˜‹²ÇêîEò,_´y_ݵö”öë—§äIî¿!¦³.”·aoÉæ“õíQ+Œ“…l…c¨Fâˆê­VË–‹Îø©õ]õÃ×B7Î身|{ˆ ƒˆ`š`œ¹A¼1\8(ÌJ®:Ãåžá~œ×µÒ˜#Ke¿‘uÝ;éqqGOF*Í]s7û& ½Ÿno`IzpÞÑ%[iD^sß0‹b}Xñˆkh¯1,Û0ÍEñÞµÿÅ™œ]…Cë£ 2¬·õ?N;+˜ NäÂ2Y}ÐíEÙ¬Žšþ;?xéK% }ÃK¨Ú—/´jA)D…ÃíOµá•´ÎlÃF÷éîæˆg¸UÒsŠ/ãþH£¿ù5d×oä(:ïÝà(ßÎÙ>á,™à¢)‡ñ$J£ID˜Lroí‡X]¸ƒì-Ù9Ðñ}>k¡üëO-¥ÂÕb}ái2’YŠ« EÓ©_ºË?W£ªéendstream -endobj -1192 0 obj<>/XObject<<>>>>/Annots 704 0 R>>endobj -1193 0 obj<>stream -xW]oÚJ}çWŒÔ—T¤RU壹ÍCÛÜ‚”+¥}XìöÆö:Þu)ÿ¾gv×`œÜ«*JìÙ™3gΠϽ˜†ø‰i:¢³ %yo ñ„ÿÄüçÛ_½ølé|:‹†”Óh|ͧŒælOç“Y4¢ñlŠÿGø­$­Ü‹øbM^{1‹qIçÀÕ¢wz{A£!-Vˆi2Ñ"u¡àIrr½¥•Åg}Ò[²š.K +‘<Õ%Ýè\¨âíâßÞ£1ŽŸ\ëÂV:ËpP°¼¯+™íh.ò¥ ýË´u”cˆ§>†ÁÙ‰á8#º¯d%Ÿke”•ôMŠTkövz;¦8GFS¤Œ#Wr¥ÄN×” UÔÀ¸3ŠÝ(C‰Ï©Oe&…‘”‹'I!âµ°î¬À‡Dç¸ËŠe&i«ì†/\©u]Á?‰/Bt¡úÔîo®šTš¤RK™z—ÒÙW¸ZÓ‰Çc€CƒO__ÍØ,òÉãã`fç‘+úÒu‘zÃWPy༹ˆjP} »ð*ÉF6æÄQoQ˜- -™éµ.€ås-5´ªtN[]=+¬Ò…q•v)РAåA©Þú²Ž#zØÈBþÄ}‚jã¯å£ì‡Z懛û( *pxÀ…(d‚ øTÇ¥gc+AÄŸ¢(O†6 -o$n«Ü•ì¿¹t¥0>Òý²»ÒW)£« -#Z ”#Â7©îY]£2SÒxÒgI¯#Ø”;¬­®íÞSŸð†ä/‘ƒîi™‰)#Pÿ™#5TVz¥`¡L'gcÁùÔãäMWu–‘Ë ž>~Ñ%žºhƒôü­\-6§T€üh±ÑƒD ¥ËÐéMâóËÏŽ¡ÜüHš !pî!»ÕôFàeiœ8Àݘ›­6L9oöŽ.Ñù*ÕîåÁNþßOÐCßߺ:j0hæ¬GÕ¢„¡ï'W|Âד»–Å*J¬\Ö¼D—;Ž›µ²lß39¼§ ZŒ„¼k€Ö.*JÉ:è`õ(i`CÌ4sG›‹–’R¤ÓIMÈ4êùŸ)ún?jiViŸ£p’8Ð4¹›$þ‚_[±#åU"hS|ÇÉvTÁõZø ½‰€^{:¢Î +mœƒ+Ðâ§PËLD7^V…N¾V¡C‹V‡p83¬ÔÆ0mZÊÒŒðÚ–Œ%ÐëØL AÇú\ªŸ>Öæ&'v!ø.Ùçª@¯BÑ TƒxÆœ^­T¢àc‡ÙR–˜$ nTzÐ ¡à)ÇÔ—ÂîåïêQXÓG?&YÝŒ»VË5:9bW`Èÿ¹g&U+ñp6uýဃG@6± ¤Lå«KØ»G{‘o†:xÕï b4*PŠ -§ÑNèùêÇu¦—"û10PFÎ=´ŠÉ—JИatnŒ´ïøÖÓÛ!]4#{ìÕ‚•çWIï}lû!¶¨IH!4å{ÚÉ=EŽ- n Ç ‚[æ"‚²ïl/•yA¨š#[#h•\+§¬ŒÑi¯î¾ÎÉ—ž©ÙË}'c>òp÷eì+Èí%êQi‘B^0e½4fƒŠBN‰wlBpÝÑqX -ËÍ>07>CËWƒðw;;^èM¼ôÒ†9Ï}_IlÚ€ÒñwLl¤±…9d‰°:³þ`gã‘0O¹“R–ŠbçŸa­†ÊbiÁ"t]4cŸ–aÃø¬’J½²ï7^‹/Ì&¿™¸Mq·Å#t^0ttÀÚðþÔð‚çÊÄ£‰ÞÎ úÅÈ/è×ú…¢5¯y1ù“/ãé8šNføÙ˜s ½¿{¿Ö“LÒendstream -endobj -1194 0 obj<>/XObject<<>>>>>>endobj -1195 0 obj<>stream -xWÛnÛ8}ÏW °Û¶â[l§@QäÒ yhÚE¼(È -Q6‰tE*®÷ë÷ IÙŠêd‹"¨m‘s9sæÌèÇÉø7¤ÙˆÆSJË“A2 ³ù Ñd>Ãçþ*I¹09?K&ÇŒÏ&¿Þ¸\œœÞœÓpB‹N¦s|ÈZ¤o†ãdœ úd¶”iIÐ7S=Z'œ2šr¥3RÎâY)”¦ÔhW™¢Õ‡·‹ï°<¡á0Xîf°üæ‚î´m™À-·–û‹Ï—øA8Ú -  -“Š‚j++r†–’D Ú©T8™ÑZXþÝGr0ÄÞÔGø#özˆ‹rS‘÷’Э 9¹µ²´Üá‹Ò+x¼“îòöË=iQJúQËjço±õUeêMxàü6LÙNÇ°¶.–ÏCŠtM&÷Y–ø¬4ž(G+‰ô–"}¤¼2¥̾?å¼”ÀN…Æÿv 4 -³2ºã¹’°aMhaHGf#5Y™Ö•r;Z›æ—Æ­½¿vØ8ghe!SöáÍâËõ—w¾ôˆŸ]_Qº6Vꇷ¿G‚mU‰0Q%t‘;.%—˜m¶c€å,xârÿn)­dÆ¥…E<\&®IÇ7G¾ä°”=¼e2°Ý_"ê‘°\`f€Øl*ó$Š„mµ ?¢{@ÏüQBßÀ5.Ûü -´DHÙKôæÓò ù‰ÀØ@b„”®…^IâšX{°‰¯‘À vf´$tUtåk¸ç5|ó…nòmøbƒ¾@ßÈ×%ãz2Þä$q;ü…TKa¹L©Ùì:pG*ÃìûL¤àuL¡¸VÖ®E±{ÖºžÎ|®Á£Á˜0‡Ò@8X›úãɾ4“„®Ð ÷¢\ -¯ t‰NBk^!ºzUˆ’)Wø›B V–•l”Œzh˜’†º=IV*d eÝ,6| ¬q&5 ãZàwØN:D’ä5§¨ÊM!KVfÞX½ñBŠ’IÅÕãBÀr­3„â@f/B¬«¥P*Õ8¬5wO´à)Ä¡pà²k´3³¾•¬G˜Ž¦SFó–5É—n ç¬ë(¶ KÐ~Ë`ùà?Ð_’õ•óš_Ia?Ûq¸‡Å“P…Xª -±Ì;FªÑ ðDJ‚©,]X<ûÝ‹ úÅ"Z”ݵxR© ’ˆ‚¤mÓðÑñʭ쉶կí¬™}@'ú1ÀrL¹îY0·P$½ŠlA ±Ëßq4˜å{øÍ\\cõ„¹vúùâêÓíÝÇäþöš”×Àœ'ƒ”-*ò=À _‘R®@#“*P°Ç“FÙNòU?;Q66˜sgä²ÆÅ _ˆ3(VFbQàz{Ûñ X|îÛ¢ÕtuÇ#°ê‘ ÊÜNí` J£˜¦Í,äE)ÇåX£4®ýY2RÃ݇ÑtFìð°oøçýñy(£û§V?ƒ&g‰¥°íDìN§ëÊhõ÷+!J‰ñ Ø0¾š9ÚÉõTºôÔ‹À¬þ{X¼h4ªò¯yâGÚt•BYÝó<Ô -‡m°™ìº’«éÞ0˜÷‹»Û{œñ*ÉÃÁòaîwlU¢ãŽ/Ø‚e/œ'¸óB¶®Q)ážO§…‚Båê"óZ‰<¤6õjÍChïË?ï8 rFb Â0‘¦ÒòÚd;5䥓ké…Š³Ì!6uÕLç„9%sVþ 3õƒég?šöœ‰ëê³^µå2–û@ç×ËÛI– ØÅrIKô¬«Tú¸CÏHäx´ü‰¦Æf†)t´šU÷ÅÜšn¹Ð;Xs~{$»fªü×°™1Ð+Á¢ÀÃNV{VÂ`³i¥6¨;ŒÚâé‰dÛÆ°Ýc„óvÏÓÔŒ$¬aþ0{°;Þ-ì'õQŒŽ`ÔÍ“á9õŠÜ(Íø•Ë7Ä£Ü`Vóû‡ÓÚ¿üPDÛÙà:Äap¸§7:o^‡â2Â8¼RÞä5\{lìÔ÷h£ã|=-½Ç>âåþôfÅr8Å;â|LÓ¿ÿþ~¤¯•ù>acJñ²‚½©Å¶ûÍ…þl„—À¸ -ÿï—À ÜΦs,p05Ÿ²‡‹“?NþjYªendstream -endobj -1196 0 obj<>/XObject<<>>>>>>endobj -1197 0 obj<>stream -xTMoÚ@½ó+Fê!4*bÜCU…|¨š¦©‡ª‡e=ƛڻÎî8Ôÿ¾³kCí©B³Þ™yïÍ›yÄ0æO ó LÕ`!™&Q³tÎÏþZ„<¼˜¥—Qzúb±\ÜÍ Žas®$Ã:Î3ÃZ•*~lK³åÏ‘CIÊh0y8wÕ&’Fçûÿ‹›ëÖ…rP‰_èÂ>£Ë–l•#´áT‹ -auõyqõ&–o׃1Œâi4áêâ"\ú¾¼_CûŒ¶OË™µÚšM‰ˆ®Â«\ÀWÜ#-–_V°µ¦©!\ BY¡ÐdNŠnð3Ø´PVŽƒ˜¬Fæ# ¥ÑÃ@¨…eøžÊYf*Á"U"0ûÀèÎ 7V‘×Æ—;d?©Ûk°]¡dá) h´zjð@"Àg䃙/ôy°ª¶…›ĵÑdMY²Z¾ÈÅÝ{ˆg]_GÓ8âÇlÈ_FqŸÌ2KNZ—J -ò\¸¡µpnÇ5T‰»4/öM¼=†ßú˜×N8 -ô:;ÔN‘zfÍ–…ï•V9órî -ÔÈmÉo½X&Ôg5@°î•È08²Å-ßo¡a η€Q›õ |Á¸7ìk tv„à@9Û— ¾]ZbOéí?ÄÇä„ÚW×È=wÜ=ìIÒ)~Õ™ôO ±q˜HéýCø›^8áS£žE‰šÜ;PUãˆE^>–•Ø ¨¥mkb«/£ïÝNÙ¿4ónÝ GïDëÉ:äàú¨ÍŽ<Ô¹5UÈôÀ#Û7ÄO/³ã,|xÙ*ñ8»V˨û)ô‰¯ýuçzC“ÚÕÆRÎ9,sÔ1 -˜¸„k‚s¿.ÎûÌ!4gŠ~+˜†Ø°¬ŽÝ÷ÄÛ!`mk>/XObject<<>>>>/Annots 717 0 R>>endobj -1199 0 obj<>stream -x¥XÛrÛF}×Wté%T ¼ˆÔVíƒÖŠU9±b1ñ>ðe ɉ 2ˆæßçt@@”ì¥RQ šKßNŸÓã?.b㿘šÞP’_Œ£1þÂ?bþñ釋ÛE4§ùdM(§I–º(Fbëu3» h_Uå?®¯‡Cd±9KUY·»~½_û¯ß' ,F‹hÉl#ëÉÍ‚xYµ•4™*tu -çHO!_ç•)å`„Ã>Q¥Ž›_Ÿ²þÿ¹8š,£ø¶KÕ϶Òš×× -íI¦>~÷I†âc½ÉŒGî^om“4`¶A©íj“ârÚ‘;âéè+Ó]š›Âx@‚C{“ìqè…NÅRét@Aªà­Ý’VŽ›£Îsí† •ñD0ÀÌÐ@`u°¤Ò¶“—DÞÖ.Ì‚É\©töEœÜhÚë¬ÜÖ)'lЇÔj¸ç+Xž=Þ¿1æF?~ü¼úø­åÊþG§nŽô°+Tb,½³u©U-1üoXƒ{ôóŠr³CN™™¤¸}·Îæ¯éJûpÿý݇¿^íª)L‚LÐÙff±”«Bí´0YèÔƒçÌN¾F_5BÚ™‘N¼·:"-*‡îE/ƒa¶fW¿z{M¯ÓZoaòåipØ—®3-÷ v$èâäËpwɺÔEâŽeEÂÀÖ¥žþIGí/¿•?DÛ*XðÄHË4Ž–.„w;ÂçÃW:!wwùì“iȸ—í…Êõ>üt ´îq?í…@Y1à/%{U z•ÉùÏL´­m3µƒž)4ÂFkI]¯Š,c½¥'Ia±ÕÐQD'`ÄPòz¡2HˆWé‹B+ìÐŒÂê¬a%š:Ä“™¦ÚÎ)Sn×Ê Œ¢Î7P2fVWOëL·ÕÞÖ¡úõ•@쬥‘r!W@{–Qfís]zÊk,€JíxºÀ•^ÿQc0,Ìý`^œVn›ø$‚/³ˆ?U{VÀör\Š‰B:"³;´ëz` Ö56<Ìd0ç=w2R@¥©¥Ë˜½`:‡1–@аäžÏl¥n,1Ma¶Z_ á.BåL·a)¨é bˆ&xH¹o·æÍ\±|z¸o¨á“‘¨V}ZTÞqGa¸¨³Š¹ÉÂÄšbbM TCÆXÆa`–y%תÚjŸáqÐ.mƒ yLé€Ù=ELFÕTŠÚK+ÿÝãC3ÑÀ(† ¸“`Êf 7‡g‡ô>†ÉÜ '©›ö€.±WyºAyé­3¬¥Ó/ËäÕ³+Tž%2òËq. -Îà/‚ - ä-±F2ï~{¢ÊiÍ´ ÕnƳ 4|:b&Mîë²´® -´x†—àéF%Ï8]t´‹ši|ÒvÝhÄò1âáÛÏ8 :ß_¥›·ÛñÜràÐ "¶y‰§—(iëd[–5ŸÃXÁ9”'~Ë2e˜"ÉjžŠ‘í¯›ÿ†»ª®, dKÖ‚a€Æz :î½M È©,gHûyÊXÇE÷ƒ ½š4îå|zkHqð€ÌLuìÔCô¯2(8ðô˜Äæ-mÝŽÏ=° chy(²&’^{‘®>QðkQ™¼lâ!^žˆä2¼”iòäॸ „!Ÿ!˦ú°Ž§Ž¨Êú ôßüƒÂl1‹7Ëð\.Ùø÷«‹_.þßX‹­endstream -endobj -1200 0 obj<>/XObject<<>>>>/Annots 726 0 R>>endobj -1201 0 obj<>stream -x•X]sÚF}÷¯¸™1™1ܧR§nm×5xÒÎð²H l,iUíÊ„ßsw%ÄIÚ8`ÄîÞÏsϽëÎzÔÅOF!õ‡¥gÝ ‹oø­ÇoOÏÂ^ôér8 -BJ©ßWÕSB3ÞO—ƒÖã>‡x’Vgá°‹cƒË0ð±ñ þ‰ ºƒ`¸_ŒûÁ¸±ÊBƒw í]]ASØe-)…£1„û§Ú–¾“t|ê—ùYçf@½ÍWðv8ÑÞ¹ +e­v{«ì¦Ä"7"õ‹µ%-Šµ4”iKy¡_U,‚:º›NÉ”y® [YÓëÃmXSÈ•, -³~•9…v£ 5\8ˆUY””±ü‰¥ ½{§&”J‘Ò+äÊJ¾ªlM¥‘‰(Òef!}¥‹Ô…„V…NIdôIe±ÞDȘDV½JšªBFV;ÂéWY¸øun¢*íQ0fŒÁöE8Uá©#àÛµsGV剈بŽ´Q'Ælãÿ%ºŽƒÞÕÁe¬‘‘ÎbRV¦ÁŸ%’ -wÓ?Üþå xkT hâ›R- -ı™ "=¦‘$[G´ÆÓÖ“œ‹3d¬0°—o:Ãâz>Ìü}ÕÖ g@(9‰Ý@Ô0dÑ’Á:`"Z¼¯®±=¹‡Ǩ٥ŽìÃõõs¦mt8np\ðÿQ¨Uµþê^s›8 ÿ>éÜò9±oÅôçâΈ«(Ø ul×Þí T"DC ï:I»+ó:E,ó[Îaú€ŒAK•ùëÙaΈ¹â`5F)¼û!ÛÙäñy¢Ô;ðÆõæU w -ô•Å<ü\“ŸwÈz‚)ºJÏZÚ|›‰tyû‚¤ 0%¾GÂm® F³¿žèö,„à"«”ºJL€«sÝøÊŽZ±Ê`M’€S8<«2ÃmKg<1FÀÈ&»*É D¾`ªÌÏþ<ûoÜFìendstream -endobj -1202 0 obj<>/XObject<<>>>>/Annots 729 0 R>>endobj -1203 0 obj<>stream -xVÛnÛ8}÷W ‡8@,[²ãËcÒnŠ»i·ñ¾XP"m³+‰ -IÕñßï IɲmÄLòÌíœá¼ b˜à_ ‹¦sÈŠÁ$Â×xÍa¶\às‚ÿZÀ–p+}ÅôõíÓ`:§õy4ƒîfÑÊ?çð<8½0_EÓÓÊÃz0~\A¼€õ Ï—1¬¹ƒÀ:¢á»>¨r+wµ–åžY‘28H»‡??Þ½Y÷30šNÐÕ5÷'ã¾T¢¤f¥*ý±FŽ%è®È2Ëk.ÀÔU¥´…­Ò`÷øNvï³LÕ¥•~™Å½ÀÊ“.5þªôŒÐ?„¾…­ÔÆ¢åêHdt£x%dÌ!F&Û‹‚áÎ\€U`rVñksî-´È‘wœJÒ8NùF4­”½ò«wauYåýn¬Œ…ÍÆ -3’sV½éñÛ\È'ñjoÛ„PέŸEpŽ2ôa‚úG(¾ˆjÑ;ÁúB–q³e²4` -˜µZ¦µ†Îw²yØËl\`pêJ• Ðc üo㺖üúÒà±­,§‚öüÍ”Á•¿žËX|þN]¯¹4UÎŽO¬—í¼“N4„ìÙUBU^0I<‰àcµ%ãF@Q#ÉRÑTŠ÷2“ -ä0’ë×ëײmÕmæÉvu=*•Ë’Ä^†¸³[Ø 3t¦á#¦^‹—uÃ!=RXÛÍMÁ$Z·MÂéÓ3ïD4î@„Ž¥Íž»ZþmS=^ÑÝKõþ ¨n/yz]fª(6.»Ç”çh䎪†£_±ï„vG,ùöø!™NX«§ÏÏ››PÀ^¢°°ý²¼[“Rš•;̈ðC˜ãÇnv½û3¶Vb†÷šªf÷Ì: ìÔ À¨‚Ïe&  ÚÝ»— -Q±­óü$ts‹‘ÿG‡œ¶*ÏÕ¯”&°Ð–Å++ª\ܺ¬THì&ØЙFŽ(Þ dîíuåÌܲR_¨”12Íô _›‹WzæÜò'­Ð3py¾¹¹¬;ø"Æ’5©hû°0]Mµ÷^ܽ˜=ñî2ç<ÊK¼„Må4ܨÒwÂbäÕ¡dÅføŽN ÛëI§Pian[ÔF"Ôã*ÞÀ¦¬:hÉ/ãZ¸ÅìxÚ%:uÆ@r†íÏ`k¥ùáR9NÙëT%£%–4P¦½†›RõzuåSŠxª‹oú´Žž‚÷Ûv?·-+;Q_F+Yü'äÈu£U;Ñhåç¢ä™Šb9×¢‰°!´RŠi¼Õ,ÞP@Ie?˜ÌYŠ£ )²HÝÅŽò@Ú» Íc&Í<2ѯ#>Eç‡ØŠ(Ñnúâîx“Ý Lì•ÄÞf@'’Þªw4µŽÜ Š±’!0&w@í¸êÎàÎñc-"œ;qàäÃM2_„`Vãé2Z®¦8¸&þN{¾ÿëá¾jå†À*«©·¶så(žã ¼œÂh‘8ÌŸbg‹Y´˜/½+'Õ?Öƒ¿ÿREm§endstream -endobj -1204 0 obj<>/XObject<<>>>>/Annots 742 0 R>>endobj -1205 0 obj<>stream -x½WmsâF þίЄiCfÀ` :“Üär/sIÓƒo¥{ Nl¯»»>Ž_Ik›—r7mgzÉ„°Þ•ôHz$­ÿlù0À_&Cf­7À'ôáÓÇçw­Qà ˜Òg·coV-RX´Ž–LÇ^p´çä&CoÚÈñâ WíMo½!ÍÞÑ2ƒÙ”ì5{Nçí ÕXxqÐYíMGÞ‚fÏÉ|XËñâ WíMfžA³çäF#XËñâ WíMnÉ^³çû§AÀÎûŸ´òŠ$1¼0ÄCO'ôÿ´„¸õfy½þÃ|–1e(˜N`q‚° ;i$ -0R‘úfùr$Í)dé°’îM¼)¥{uVÃ`§ç9Û'ÖøxÏ'ßQ„ ‰(KrˆòSÑÿÅ”)ã8ùú ÅIjHð -¥íñçÿÞpêù3è ‰Ç˜“åV ©Iêd-#ÀüØ­<µSç¶&[{¡ÊãUçvusz¨Îb2‘C!6¨9À(Ø%i -¹²°–HÓB -‹v¶RKÞ«DêuA€Y‘:Ãশe$¸ÒP"â]b·¨>ÝÏŸ!J´ ­Ò{U™F -´ A‚×ÀŒ¨?@¯ÇÎëvú¥ÑýT…"í£Ùµè§Éº_Ûb·Âkƒôû&Uk‘þqöèÇÈ°Ô‰ÝÃártä#2õ¾°cvJGÏî%ƒ#L>v"4ÂGsi׉2‹Lâ©å|ñ~ùöݯ— £¦×VeçžæŸŸ>Ì«S' -ÛÀU§eÊ!/„FÍHÖ‹ÖÛH‚8É%¥îŸÀ*ë­ÌaäQ’oèíBî:G­¯{Ó¤Wã6çÎnCªñ“è`0kŽquè=€Ï-hHÕÏ‚Ù†¬4Ì##ñ߬k”çøFÐÛq_ê? ]Þ;˜"-m±£ø4lè\“+l¿aûßL‘Æb«Î¥uÏFk&$ÂýsD®NÚÛ|iÙ$ù,,áVäiº(ˆ¨yQU‰Ä€ 4®ôÑ»”ü[H€«0¿[áQäXwº«Ê»B*,§nÞ1Ãé‹Ò›«Ë4SÈ0‰÷ì W•Kìµ­2– ¹ê ?D™ZC©xh«êgÁc„Nâ[±ö…‡.#¸?po±øª°‰ÊaGäÃ~“c…_âߥè´aÕ¹Vq|ÝE^X¡-ØÔà{ǵʯq·òcuó=ð&EäüeÐGCÍ™âBí©bKGcÈ“Æ*G/ÀIL¾]ÆïÈdʯ¾ƒ’­ÞÁh:» ð8­k"òY]ì”á–#{\Ö—`¹”òP%Êý[†md.µHSG±*®=9TPØš¨7¨×KªfVC«ÎÏ«N™Dw?•˜ÊŽZ¿ K«ÖQ~â@È‘¡«¦}ÿa>Þ~xŒxâ*ð :hx^½£®jh†a%e2ç>t¡Ô³'®gÏ 7}s†ð NR'ˆE¼Õ%—¿2G »°W%˜-­LET~ôD~M ‘½ŽAuâ«îhÁ•a•J™J‘©ˆ'†„µ8ÏK+MÝBê¡ÿ((ãò°y´R?Ñvû…Zpš¼Ê3÷¦yb±s”Å™ Xä þ«:¿År  Gàp‰c¼äXNZJP1 q1Q2…å/DZÒ;3Dìty¤¶W¤"É_÷Bj à êÒN"ÏMËü¶yãÁGŒÁ™Qº%›)€NjxZ,˜OÏóG&ˆ¦ŠôGÊš’ -¡[÷‰¾´aŸÊ‹oVÔîXË3Ý{V7ç9üÂ>ŽvIu=ô†Þˆ&ŠtNñÌÞX™QaQ ˆ»Q¡LòµrßÃ9{™¤ÛšÝ -[©ÎÄëy\KC·:ÌÙaåcV{ð€6W;ƒÁ@Õ¹‚§eïj £ânY²³¸ò5­ÂZE¢ÿ0­ÞIüߦ#|­Á[^ÔYÌßÌáY+jp¯Â’*˜#IZ{õñÞdÈï1ÿ´þÇ“±7 ¦îågæ“®·ËÖo­¿?ÌLdendstream -endobj -1206 0 obj<>/XObject<<>>>>/Annots 745 0 R>>endobj -1207 0 obj<>stream -x½X]“Ó6}ß_qgû:‰ÉÇ’d™Ù‡íRÚÎ, %a ÓôA±åD`KA’òï{®dçÃ@‡N;»$‘¬ûuÎ=Wùx1 >þh2¤Ñ˜Òò¢Ÿôi<½N®èj:Áë!~¬¤œ°• ø×ë_ÂÖ'£A2¦’Æ×Ʉ⛂f'oKô¯’éÉ"›õù𖉟æŸ_Ó`Bó^ÇOðÜ< Vû4O;ƒ«d’ÐL¦•U~OBgäD¹·ij*íÍßã€+ â½áÎͳÎ|-ƒÀßRåÆX/´§QÚ;ò!–²\JK»µÔ”)—VÎ)½"¿–äƒ&?³GR{«¤#¥y›ïSo0J†l4SV¦ÞØ}ý×~!Ͻá Æž¹•öÜí|áS·p¶‹ò•pnglFÆ’ö‡wÂcײò’¶¢¨à„ÁQH UZêÔî7^ftÿìöÜG(F×n¤µ½I2åêËÅp<¡s'Ãâ!”/º)ŠÂìHÝY‰ TNÚË­’»çû7¹ÖÔµ7œ&ƒëcQ\'iÓdi->ÅN ),yùÉ“üX)ä Ã`“"QKÉ>g\~@Î-NÎ:ÇB;åצò”I«¶5Z56V­”˜r¨‹^¹„ž£`¥è”Î-…GÿØ@&½PŠ–Óý‹Çó¶ÿ]  ‡ð ÛƒÕsþÙjw(ÐÏw¯ÿx5ÿíå¥kÒP)^á‘dû3¦Mï×—oç/{w¦(€Ô"8¶ç<#Û‡gre?’A9WÉnX¹,2±!çŠKrå2IÎ¥„'ˆ5UÑð …`.j§Ai ÐVnÉ'5`;ºAãZƒ‰ÎâjÖðµ6z[ÏA¹Àk8æ"­y}`(‚²`OBo™ýñ xør#53¨å·Äø@—”'å` [ÀŽaè„œ4ÿϼ°~~?‹\¥Î:ÀEDÄæA›B¤2àg ýB<©±‘ÍT8d}oªq€ÍèU±-ËTV¬" ÑÁDph ÷ýëSšçŸå4ðò&ðCø!§fFk¼IMÁyÈä=$ʸ%æb Ô€ãÍÛ²ñy"úÕì¸v[ùf¼6¥ B-­°{r^ߪ twÕ&TD ¾™¬%àomk´íÐÂQ÷Ô”e¥œd6.¥ßI”<-·†–á /®‰9|™†¨Q‡{ÎE.|°Å±Ç©P.Fkçã(·¦¤µöœk71^oùÄÉ8à6¡9×·nf™Ñ|pƒî´6;~w{wÏõˆå…~yì¸Bl²ÀÕ¸pàÒÓfãu#£WQ­~øbÓg'"çcëÏô%‰4…Ît ’è=q)÷ì’,ÜAûAÑ;q3çˆeÌÝU®{”¸&òúâ?K ]ß\¦ú&t0ºeééšêf#ͦÝ,½‘”~oÂkcW—´Ã°Ðv 9ìG.NX<GsO?HÌ -þu!÷0œÏ#>哈\•®ÁohÑáƺxÔ¥·‹†æ."˜?y·èhôäfN”Ÿ6**0/r«¶ÀÌd3[<úoÙ(ÌÊè9jËsl­õ„0´.2,ƒ~Wžgqû9…Ú#zŒó-æùw5ùA¥¾·MÐìN軵Ыï—[}Q9ÿ­®M)ŸáæñyœŽÅ(ç‹g˜xÒsㆢîÖ -tÀ‹39oxópØ{ôúú¹@¸püÙõ„Qܲ²ÓsKÄϦãõØÊ7º|÷2.ÙïXÏØjíP­hñ°èTB¯ë» ýwb–Ÿ» ܉Ö/áws‹¨í5÷‹Eç fþSú3oÐâö]ë‹nôæD¦õD4M“éõß; ã ~vûâ§[ze ‹5=3iU6’<Œñ%ÆtD½É0ô¾ž¸šà+Œñ4Þ»¯‡|ÌÏó‹ß/þ['X„endstream -endobj -1208 0 obj<>/XObject<<>>>>/Annots 748 0 R>>endobj -1209 0 obj<>stream -xµXmOÛHþί!U—Jĵ÷H|I(Håè•Tíér6ö&18Þœ×nàßß3»v^LÚ½€ÆÞ™}æ™gÆüuâ‘‹o:>5Ú¬N\ÇÅþðøãÓ{¾CÍnŸ+òܦÓ)þŠéÎ<ó{ §‰{¬ðñ“JšŸ\LNÞ]†G“9[nw;4 a—&AMi´Î>Šlùvr¥Íbi­O“¥¤ÝcZ§j-Óì‰ôZÑ<’š2¬Xc+©¹¹ÎµLÑ«…JŠ­gä oFøŸ‘JÙ‹Ku¯áøˆ£æ\ &4béXwY% -DB3IIÇö¾qi)YôMR¦ŒÃDf…³¥Ha㓜˴|xºÇiÅñZ¤b%3¬ŽcJ¯fN ’ù´Öš¾¥"X‹T)­ Œ\®à]%Ž…*( ªwœ®G~àãDS¿Ý!» „Ý<¯7zN›G>ðQÈwÐ - lqÎØb+c0¾‰8—%V EÚxFIDLb¦UœgòÙé³%gë>ÿ:4®ŽƒÇÀŸâùëÀªxûÏ CŽ®ÔÊæS—x0ŠRd*}z Yy…Ûœhæ3CmHW9„E¶„ÛRózNÆmÊ”DF´ÌH$á^… -ÍÃXfàÚ™]¾õ©—*C¦ºÉ{¬ïƒ¿ÇÿU®3»´ß¨ôa›»²þ˜¡4ÅÎðM¦øÍe1nOy”9•ƒòÑ -çùõœøi•õñÝjùN— ˆ3ôÇ×™©Fÿ€ -.í"gE¡äi*“,~¢<‰ðhCPÂ¥j¥QøÌ+s'J2¹€ßT®S©áÌXf§(â­†E!V°¦4­}ºMßþ‹Öi´éÓûTåëëÑÑè~ภ±°B 6SÞ4a-J^¬²wÔý®ãõ¨^J"7’•¸Wi„îa[…æÆQˆŠ&”T™A^h³” ݉ÕLpM!“Ü®èãhÈûQTj% ÛÓZº'øb¥k¦ 4Õm³16ë0R¿ºý2¹=\ovb}ÍH~(3ÅQ¡d7ÜQ¸7D‹‘ÚÐl@uÙx†*ÉRÇ(½·Ç4dŽgjÃÇ™«â›A­gPç=4ä‹1ˆÐU™RšqÊ“ŒÀh[d›­aµÝ™¨¤ʹÈãÌvÝçáÝosp /K£m[%çw“Àk¨phÃ4ä]ãû'alõö5Q!$ø?ÂïÐå³QG>ŠÕ:–èÍZçh=“ÁÝÕdüþ–– R’Í$x¿¥Y¸£<·”l)2{äV9¡s–écçFöß|˜NßävYYŒ5ÚÍ·ö -\‰° %eº2­ÔÊI¨jÇŽi_¸:…i“”`„ -ét&ƒ‡§S†B;šÙ=3$¶–ü2p;—qÜU…`GÕ€åã ÀŒs+±›No‡Ð‰MµØa—Z’‘Æ‹!ÏPŒÓ< -Ï™3•Ÿ¯¥â$…Á¹©<¾Péâ”ϱ¹pa]©DŸ=³%ÉbUV4 -U(Ô,``H*Ž9`ÛšŠñùÅ0m¥“Òhf‘Éu,ŒÁV¡6¹‘Õ ”33üí´žm²*mÇ…Rpì¤owÀ£FædLÁ&M˜–Ùz©AÓštŽÉÔÍíÅïE–¶ý­G^Bæ,ͦš½¦ÓshlK„>Œ®/i ±ã— ÌÄZœJ‚Ê߱£õ1ì4–óA<'q¤ÆäVU£$ˆsQ¾ìqk¥£ÇRfÕìcd£PŽò T¯Ø/“>1q¹Ô™YzŸ:HC”Ü+C#°§„×µóK‚×-­Xاn§;êº^³í¶‡£ßkw:ƒfs|9ð­Æå°SÙºÞ„7˜‡|!ûä{ÍN³Ûh7Ÿ­;˜úäù®W1¯vQ´Z~Ïõ݆w1{ð>5.šÖEËkºÍñ¸²Q|:»“,»øîô<¿YYdŠ|­¦[ydñ|Ÿ%–eª -øöÉ\±ðj>·æ¿‹‚‚ì2 ݧ?>¥òëÏŠ1Žô§¶0òá°=×mWvŒ¡HÊŒ˜£î¦Qæ¦yé{ÎÌÄRÒ¶tæ8øžÎPR¦–?w€ïQT¾€¤HÍëÇÏXúî²[ˆ´×Æ¿º j÷<ß n.ô1U\wt°b¼e<êåòzÇ7Sá«ëDv:í.4Þz 6:žœüvò7ÍØ) endstream -endobj -1210 0 obj<>/XObject<<>>>>/Annots 751 0 R>>endobj -1211 0 obj<>stream -x…TKoÓ@¾çW̱âì+~äDž‰ÒÒ6öÆqj{Íz­ÿY'¡Âê•-¯æ›÷|óu@à¡0à>$å€x„Ï<Dà?Ã×(Ø:B݇ºÏýõ€qâ (ñ”ÀIä…§[ëÎG¢ohF+Ä[tí‡ø“v† ÄÉU¡3]Åy©&@^Äû!:s•æM]ÈÃ[é„×ÊÈ"…¹4V™°(ïdÓ2*r_=Pöý+Š‡>/XObject<<>>>>>>endobj -1213 0 obj<>stream -xWMSãF½ó+º¸UF؆ÅìÞ`7[Å!fS8•CH¥FÒÈš¬4£ÌHxýïóºGFì&) -0h¦?^¿~ÝúûhAs|-hµ¤ËkÊê£y2§«›ëä?Wø¼Ä·×TȃÅ|•ÜLÜmŽ.>¿§åœ6l]¯nh“ìÌñŸìôc©šV{Z¼Kè¾n¼{Ö9¥Þ킱[2–‚ªSu¶ùK¬,VÑÊùåU²„S\[$ôð¬ý³Ñ;rÅx7^¹¢Å¢¿²\!j\yüùŽ¬nwÎeìÒä:¢Zg¥²&Ô”îiWš¬¤¬2Ú¶2eIe™|®2¡eWµÊJcqaªÁæŒ$Ú9/.cŒÁgªª×±$¦ÅÀqB›Ò„h,s¶UƆ“m©ZR€Ök•ï©upX§ÂTš”Í/œGèƶ8wD&gÚR{ÎüÀýåδ—pdˆ•Cè~K¹ƒëZ¤’U]®_‰8 {ÒRÖy|h«=©q ªÜIˆ¬UákH&Î7pv4!áR«g ]àJÃRUפ‡:¡ÎfÛyÕgg~:R¢TR­-1Ô8•Qá¦YWkzdî°#fðk3„̘ç.ëjä1D»¼N®˜wïvA­6Ä,!SU0çupU'QÞÕ´ÖíÝýã<øï¿Ês @s„´èlÆ—&ÐdXfÀ2¡_ƒæ<ýv¿~ðd¨Ì¶R8æjÄ›0@® ~׃ppyæ‰ þtvÔÄñbý¡h7˜«]«á}ËÐ åV¥LÎÑcñg»o4È๨“–Û„aKõÄgße±àvOŽ‰Š†Sà<‚ŸÀ+uaÕ8ìw©ú}™ÐX§Ð5óÌÚCø^Ó ¬ÛQÑU€´¿*õ%çVè©*†#‘¤¶Nsn;&°ª‚#îX狼Áa×0,“¼¹N¡N/bï>ýò¿§ÓwOgOgS"FâFÑ ˆè8ˆÈÐKµ -,š@¤aŽn½ë =ªÔT¦ÝËsÑO®â€Uîj®f嶈x.g2oH2e¼Ô³2w{BüÓÃÏ·÷ë¤ýÖŠõÚA¢i&¼rð/™1Œ*ëÓë/õ‰IUÞ&ØKf¤Ò%½š¡ -ìeiÄÝ9ɬz —‹Û  xP¸QÇdkK!Ÿ÷ÑÄÈ»CÚ𙕺ŠÖ€”z?q_+TÃ0¸S-›ž±òâó«þfÝOÑ‘ÐRÒ½ëüèjöZ(¦¯¹‹Ü£Pº®Ê¥)ƒn{EDÖi ø5ìS>‰\¡1K 4*óqJôõ†> ±>( 1ßÂ:#Ž¨îxzZ4¡ÆئR;gõ@›  >› êõVù¼â© Ù•qúÔõfÖgËM2JŽè¿NŽ ™KÜ­²ò`Î žc[ÇC}áá2 ºÂhB“ŒÉsÅÁRî¥Ð¥Ø•Q#¦î„odKz&ŽB–5©ÉÅúIg´j:ß8lHàÅ:,GšY‡óÌH¦ dY{¸ñʼnSýMÕÍ0ŒŽûe°såõe¼bÅ¢¨¶ZûÑFq™Ð—¸LìTì÷âówV‰û‚x¹D² ^òx1² vK¥ktÜ18LÙ$Œ£_˜Rêªl½Ê¾ÂÀ.®äý:‹UP”ë´ÛNr¯ ˜(jAK $ºXy¨ô¯1¼ £ny®¢|ýà(úµ}ØäýEŠÁí±ë´˜ãq8é8Ùk†rÚ–òòÑ¿ËÄA˜ä*nÑŸo^^µ.çñÍçÿ¿Ü]­®’Õõ ^±†¿ljÿ´9úåèоendstream -endobj -1214 0 obj<>/XObject<<>>>>>>endobj -1215 0 obj<>stream -x­WÛnÛF}÷W ŒUIeY²óRøÔq][m^+r)mLrîR‚|Ï I™bâ¦(Ê8/»;3gÎœ}= -h„ÍÆt:¥0= Gt6š §49Ÿá~Œÿ…¦X>Œ'ßùp5?:ù8¡  yŒ³¦ç3šG„sF#š‡½{ë5ùµòdb2ž"«]ö³§­-ž)¶ílÙÇñ¹µ-“ˆœ7IBKMj™`»%¿ËùMN]P¦R|t´Àõtûøçí#™ìÝüËшÁép z±Itª2µÂz1°†}y<ª,¢öçÚld\ž¨JŒódcReqíU¡Ý°¶2ž'låÉ“\ÛŽÆç. »u&[QŒA„ªtâüÑsìkµ©‚Y%v©:^•ÆTÚ2óLjÑsÌŠ6*1Qó¾1Ü„÷¨S.%6 ËØÜ=\ÿD¡Í2zc3¼ÃŽÃÉçÊ2ŽÝôÄn_ÐðëÒIÒ®ˆ‡}YÕÁ¶öµñ©ã2qçQb»ÀF+í=ƒ²4Þ#×Ë -ä¼°HpÊ8{k ÙÚQ® -$Yr$1h„”âK„Pà6–fé2êøc2ä_ûhˆðã!Í׈Ò&|æpe‡8 .W¡æ¤ø­†ŒšÍ,6À{ó´èéÕDcí¼VÛD4^¼ëwÌËæW+|ÎàJpÜ×Üîõ–@^‡Ü ¶*bp2»[ -J-ó¬ÀcwQ •xb¡>ŠŽ]pME¡bòÀ} e¥¢Du}r®ãT|Ç"Ä ÇL2 3­#uS8gH°®@ªVÔ$¨Î¤ð‚efa‘ÁªW³ð#Uî™PÝwT{ÉØXô\®CÝÍâÖøµ$áØp™Æœ«ã&AˆÄ¥KIðâãpòñ‚¨ ËÎàtR•cp6œ 骩AÖ9råN¹j׫X Æ3(Šøsc¸Ð‰Rœ'•.Ëa0[ôT’¯U 0«¥ÝèÅ»zÁ*´d.•y¤¼‰,DFrƒWæ¹-®Nö -'&TB?áàüsÁ8NKC¤ -ù…6B‘òŠ¼®*XqpWN¨pm´Ù‹V£R®–‰H»°0KÐc ²Ç¬?\A±V¾%Ëœy™8Ö Žç\Ìûc›òŸó^}ˆPe—Ñüúá|¨s=l8‹i®<ÚPØR@6W¢™+äqO¶’¾PqlB$…›ˆH¿Y‘QÈ´ãóÝý qa8xÄvüÑ Vqkº×þêî·'i6î›’O»eEk¯bôZ”‡[™Kªã ú™(/Œ,oUÀ”+œ¾–ºØ1éPS]/жÕ×9fcÔþÀöÇÍÄ+|FÜÐM¡\p:c:‡BfA à3ÐÁzŽWµM£^» sѳï:Veâ¡óèÑÿ2úÆglßçü*l*ÞIüŒHãZÇ´ð5Õ@ËáE½L:'¶âmyj`©oMPB›Ôý–§QÞö~… ,wÕìHà"zG•¯6ƒê¥ ù›~Ü,¥˜eÏq:D£÷Ú^ÁØ8Ôg×áÎŽ>c–À Agýýýý¼ËBd­Ò©ŠÕ®âþ~Àhqä:ÌïÊl¸ -=RÎ+ˆÿë5êSê£Ïê—h¼¥J:¨p“5«åÊcÆ¢Çä¿g¢I¸ƒ£ˆI翪ÍÖÕÿPØ\JÖ'hpƒ‘FTPÄ|ž„Õ±Û9²i2ÊI“–€±¬j A«%CúêÆã'µ3R‰'Jœø…-¶çY´n×­6òºÑ)žN*G F* uŸg0¯L&„F¥ž S»ágˆœ‡ˆßñŒ2«gäà“alì;á:Èwùp§†!d -C””‹È¿B-ò\p¦&U5ÑU¼HÔŠûê=âL8žVÑÿ|l ²ñëŽi–ŒªõA ¤%ök¢±•K¥Þ€’Çù†$€eOöî°qIÈ0 TÓ@¿J·¡–%Öч*'#º¨;®{=ýøZôn>]Uã+èhxÎÙ<ØwüuY½ÀÝUó ÷×õ=noZ¯o¨¾w½4+©}Û¾o­ —7Ïü·ëÍóÜ©å2xõõàîm¯Þë÷kß|¥oºóò“GióøýùÍUãÃËãøpúß<:è:/ÞFHŽ©ñeï[Wýöôõ•sòñ¼þõLñ“ûü”¦³ú·å姫K‚d~á!áƆeŠñKT—‘4³1~lG½¿“Ùd8›žc`Æê‹)r;?úýèoÉ>ÔÕendstream -endobj -1216 0 obj<>/XObject<<>>>>>>endobj -1217 0 obj<>stream -x}XmOÛHþί˜o€”¸yသN'%PNÕª~Aª6ö†lq¼©wMŽÓýø{f_g M%'Ø»;3Ï<3ó¸?†4À¿!h|Jùê`úpðáj@éa§çøQÐ  ôõßýÿ¼û¼óàøáûÁ€úÃAvŽãqêno÷n…CñåvloñÝôÌÙèÛ„ש»^` þ¸ÄWüÌƼüÀ¢ð‹ºî^Rzj|Øù~<úúyvÿxÌK?\Ðpè±ëN9¸ ]e¬ªžH/hL¦™WÒz<öhÔ£ñã1庪dneAóW²Mµn¬¬yÑVÝ°¦Ov)¤BS¥-­…14¯µ(ra¬ÉèÞKÃèñ8±ù¥0ô ­D¾T•4¤+R¶œ ñã“öqû`œ<ÈhbL³’´Ð5ûA+½’•ÅOaI”¥÷-1ݵäê©©£Õ4—¤*w8u£ëç'ļFÀlÁ¨ÕºT¹² -.ñ,3ºö1Ðløí‚ãð@‚»Ê$†;¶Þ¥^ »L²¦i­7ßGJfÀ‚6 -îçº,…•Î#€ŠT"i¦·õpÇð)1­L7RXgn ¾À¦¨Ši X·ÀÓ[ˆjù° UM3i§Ÿoî©^NÛejÙfáÎè4;áÔOL´†pv’1ךÉÖ¬{$KO£.Ô•ÉCþ9p,@ëRä’a—H3™Y`—µ”‰ß-cE‚uŸ»‚µN{¾J“Û( ÆËUaòhLýÄ(œIc|®ô¦"d Ô¹(¿³,È®EmUÞ”¼s5”y7¹4N(^DeÅ36± -·*®k,d4öêÆÉë@8PÄH ðùï½äLy³uBaRšÞ6µ¾ß›^,@#³5;Ë\T¹ãˆ<|A(e„ñšÉÌt'ðfs<"£‡Ÿ„툊Ôñ¨–¹T/®È¬Ö2£\г”$±º."Û"‡ÑŽ”œ­{"FÇžá×0ïöç}Ÿ¨¹@GŽ§zF¸¥]é:qÁò9h±tô-°Ûó¢ˆá=Ø#ÜF»jlëÐA‚>ˆBàp¼‰qö?%\ô5ÐsÛßãžs6¬äðÑ*$·áCÑØ¥®•Y9tõZyè2Ê&þ„ zQ"нMc€6æ2 2,":ÈŠ¬Üh{.|Þ›ã«ÉÜæGŒìgÈì²ËÆe_С­qŽ,ëÑ–ÕB‰y jitSç2"> #ôº3<}ÛŽµ‡s}Ñì­}ðOŠdŽiN›%0ðs&TzO‡|#÷%m¦<éç ^¡€½-_=”Q D^;ò!wœÕJWýÝÌÆxÚ¹ÀU„<­µr#<’/Œ¼RëgnM ÌDLBLJ_õl¤Sx†^uƒÉÝ”;Åó7êØ—’äUR=-çº^j]Z¸½lc#º"Ê@t[qÌl}ŠgƒÁËgvÄitâݽ—>[M6õ#<Œ|¢¿PGÑ¡ 9½ÝnÙ¶¸Ï ’=ÞÎp»ÉI‘íŸ<7&˜fÃoSw½p×KwýÎ 3' ýY£íf¯Twþæ³ _Ý•ÏÚÊÝSÆ],Z;Ö¸Ø ë®| -Vx ßHÕT§´cuK‘Ø|3÷½ÎHÌMH¦rÓÖ9v¸Ry­!OEõ»lØšRq¦7$ÿ+hÓ¨çF¬Èh&„ñÊ€'1š -$§#àÞ^ -1Ÿ¼Œq®ú©ÓêÙ„•&óZåËZWê_r¯SNceôÙBqcZºŠ:ÿÑÈú5ðŽ¸{<âü@¨eAŸo»¢(Ðb‹1:WÀ®p6\L³Ž¼£¯7wþqwóåö÷áô·ÐWY÷Ñ@D]èßÐP½„HlíÊÔ0SαptwtéoÀÈF¼@L³uSA:ž²¸ò³4aÐ3‰yœjeY:ùãZ&ˆÂ­do&_Œ'ÞV€¿‘UÁð‹ è'U¥øå^GÖ"†´B‚¾\Þ¢ÃÕ–†ãs4~ಠ»xwØæÝ‹inAóTúhl ɹw -þSÕ¬FPe²â£âPö -9G18̧·Eäß¼ŽÇ}e°›9¼ùð¿Â$¨¶Ó˜—\;}» Ø0ùRM § -k TJ®– 8æ,jƒOe´¡]rÑ"Œ“¿˜Ì1 ;Hº`c¢Ð¨gÞß©§ô%Í™RáÕâWŽþÃÕyxsžžeƒó1~ó[Ìýäz:¡ÛZÇÌ9^C¡ÇÙ[Þ×Ëûg#üEq4ü%;ÉükžËžoE¡ÿðŽ“³“ììôÿ»ÕÏøÖ§‡ƒ¿þ$Œc4endstream -endobj -1218 0 obj<>/XObject<<>>>>>>endobj -1219 0 obj<>stream -xíWKÚ0¾ó+æIó ÀöÆc÷Ô®Z©$d‚Ùxì®í€¶¿¾3v‚ÙˆªÝöR©$gb23ßØão&ü¥0Ê B±ïL·7 \Áb‹ Ç(l ‰“$EÑýR­%·®©VGÃá#3–kœþ Œí-î; DiQ¹¹+¨€Ÿ¨Gœ'©¥ãý¤Aé6]ÍÂ>Oú4NÝ8sãÜ×}hY;W¼(ßf«É²ûfÙCÙjÄYçN¬-gi<¤Ø<Î,%õð„8Ѳ7êF™­æ/ƇÑ6H0ä žð¥+í§«ëŸC͸Û|5O5wPs·¤ùŠ â퀹>pmà(l œ#`[Ú|[ò=0ÍA*±Ê–J ˬ8à Ûs“©·7HSŸ\QæÖpbQUø¦„´P2¿SêAÈ;’Ì - ˜uG¥ð.îʵҥRPŒKHƒ¬4dk·Ã90¼£&Ê/¾ºV¶ì7+ŸÇíŸ÷v²ymÁ’%wOÎXËG¤Žw&|6ŒdtA~1bÔ}¬¸,8¨-ð—Ö &fAE¥ù¶ˆÙ%ŒTG?iÜùÛ©‚í`ïÏÕÚ2†¼ȲK›µìÅðµä„ó$‹R+)¾sÞìðtÖ{G>6jÏp…[NÐ¥[ŒÜq|Ÿîl1[ž1,-ÐEXÄ´LnPC!3„é,†‰K—x%3ç7>£ÐóÌ)DÁ"Ê4Fž[.ŸEC©‚=ð:¿NÜe¿ÿ=i²¾fäóSQ&*hHù ˆ'¾¡d#¬wæ¿ãæ¸]\¾óIw–êÒòÛÔýò ûãö/óyÃÆ—ù)¾Å ¦’k$¬~]DΨçwh=”b¯¬ëÊb-³· þFHtþÔw¤x‘¨‰Ù½=,JH¨ÔTôjÈËÀîˆx]ýÏNg,­k¡suNóB`Yq(öÂ*˜¾ÞAMÊ1ÔP!r¬ŠœË;5¶Á†µ™#6±Å ±¥HãTÀ5ß«Ö' -¢¬Ný\í_m· Á~ÆÃÒ‰Œá=íÍY'ùÊÆØ÷y"m²ö•ÃGÂ9e^”ÿ²$ýißûÊóMß>®ûöt8Š“qÃÑ°þš|œNà“V÷¼°0WEµGúÁÆ_IÊô¨QˆF~Cnºé»xÔZZb,Vhe°ô>/XObject<<>>>>>>endobj -1221 0 obj<>stream -xWÛnã6}÷W ò²))¶ÛIÑ ½ÈÃzÓÆhQ} %Êâ®$º$•¬ûõ=C‘¶¬¤è¢âÄ’8—3sÎŒþMhŒŸ -¦t1§¬Ó1Í.&ø¼¼ZàsŠ_#©½[Îï.i2¡U#ó«­rÂãã1­²ÓÇ]“•F7êoá”n,­¥{–²!WJÊu-TCµ°NZýlñW49U:Õà†¥gUU”éÆ©¦•ä4é,kÍ­[÷ÃêËhLÉä"Âÿ©+•%[ê¶Êá‘ÁƒÈwø#œ$«\ëÃIñé<½äc÷I…È ÝrL¿LHãsJ…P•õAºªô³j6]8>„Ù€J¢¡¥¨¥%] ÚzË–ð¥!)²ÎsÉwÕˆ,“Öªu%©2Ú|¥ÂˆM-òEøŒ’ï̩@8²­4¢–KU'íL{Ñh#Õ¦\ëÖ”Z^eõÉ'(\m’Æ•}·ÎÉz‹P6€odæø_ÄnÑõUb¼|aº(<þF£WÄÈZ?q>F×ì49*ÞŒï‰{ú2nR7{˜ˆ¢+²ÖþÂ{öÁýv¿|$4Þ“D+)ÊÚT;ß9\dÜÕ)<æ‹©ÜË2pÓÚv БûŽZËmÒ]H”Õšýh´È3ô<-¥{wÿù‘ÀDð@Ë$Ii…ÞE´- Ð̪ZU Aå])8ðÅ» -Qr¼ôaŸÕ¾Ð±;/:ÀÎï®iº¨÷Œ’ù8½bLfé,¥Gé@³ µ[ØêAÄô ŸLéœ}ìˆ#èQÔkžÍJt,ÓçU“ƒÜ´\Á.½¿] ³•Î{Bº}g@Bs‡«Þê ûèùz’÷¤n©n²Ès_æoõ–Q}L¶^§hm4„B©ù:À·²ø(VtáÞëÑ@¯?6•^‹Êþ‰™·ÝUH¾Ãj¶Ç=­ §v»ÕÆÑ[ÚIßJÇ°IúÚá…UîÝù¤të99I¯S”°œ#š{+ z‰•+—…h+ÏV˜O Œ`HJñ9lv¤«O¡ÑúÛÎàÀ)³×&Ѓ…ÕAÑ7 ˆm7 iͽív»1â†r„¸¸økðüÌ·‚´p¹£Jrÿseqiàù ½iô.Š€òãQ¨N¨H'_¨HlêO]ñjº’NŽ±?ý/ÄOO:Þ•’ž’yÅnû,µ é÷¤AÎÞ‚ªÏ ž,Ð`1ȆiÈ¢}de8w~Ge´ -LЬ?Ÿ—á„[Å“&¥š–ŸW·ÿ“dè} Zk ô£a¥Ý?x ÷"Α.¼à5#Ðg°oŒF-3äÆ]°§ªÊ$%¸#»F[®¡ä:kyúyí‘Ì%fa…–^jÌr¯€=}ñ†;‘Ö#;#·•Êxì#?5€Ô£¶Ýg$^#.|Òé…Ÿè•üddó¤À1¥[KŸTf´Õ…ƒã¢E¿ÂBÌ!tpŒ´¸Ýít¦±it@ü>/XObject<<>>>>>>endobj -1223 0 obj<>stream -xÍWËnÛFÝë+.¼©ÈŒ$[²\4â棈“Æ ²hº‘C‰ 9£ÌQõ÷=w”ÄH)²jmøÉ™û<çÜË/ƒ1ð9¦ë ]Î(«£dDÓùe2§«ù5~ŸàËH*·éàÉË+)-pe6¿¦4'(ÍÎïu#©Y‰ßJKU©$½~ÿÒý›”n_ÐË”J…‡’l½H2­ -*ÊJ’.Ü?D½d¥ù* ‰¬)Õ’„u>ÜÝ?„'ÒOƒ]Œ/“ ¼Ÿ—•U‘Ð]A[ÝâLC ݬܭ3>ûäå4D|¾)•%Û®×Ú4ô”¶Òú1¥ó3Òë¦ÔŠ„Ê¿cÁGø”~U¢–¿œ²<©z‘÷"Þ”UE…(+j4ÙF˜& '&³äŠsJWõøj6šÖÚÚr2ÙL*aJm©Ð†3uj×”Ab ÅÙ½±(]B0ƒúÛP.øÑãwzF Ä… ØÜhó™Ð.QÜ”¥Êá„n¦CòMãzÅÿÞ§T‹l…îsï€NDé†-å²52G[{>×(ã@ì›y®kxô‰X‰ëù¿eÒeϱ‡ÈC!þž_ë½Xׄ'/oh T3¼/.¯|;ÆÓd–Ðîv·¡ÄŒfüæÝï¯Þ½yÿ–MïóãbrÌ\?ÑgtæT§NÖ¹+#üà2à²=ŸCWY¡N¥åH¡$JÎ`óAhðò€kÞ0óÒׂ^ Û€ƒ.OüüxŽöíSì~ R?îye ”`Ö -zkÊZ˜m´ùðctUI3$Q5+Ý.W.E]眅:­+±µžÑ¸,íÇG=ÇüÈ£'$Pû’‘âEŽ¼ —‡ô8‘Ð(Û€NF×TéLT@®Ë<\´®5 «ËÌñ«\‡ð•øŠ¤#ì‰Á\fåZ8‚Éc-n× ÎéïhDLô€°•;ì‡xzéÆ´$hi¿Ñm•3>„BºšÍ©ó9¤V Ö‡>´ž}Žøª‰Ryž60ÓóËUXi¥²¡ÜQ†¢ÏúZ|†•¦¤±‰]˜}!¼c%ÞŒ¤úZ­j©xÆÈÃ"uîë’Ç•8@9PçEjäNhUm{ â÷äxVkT§+(±ôŠ©yµ3ìùdRr.Щ1¡–qÜü¹¬ôBT½‰µ0-GèÏlu7ê ^q˜qdêíMOÖÔ°À—¨,’‘…4xÚr™9øcäqS -ã™ôFí`…øMŽJ6ºW4r»Ã©¢Ø¸@üPUFt$}$Âljâð~1ÂþƒYOdØUñÈÁP°/hÉ÷c–WHºÂ62›úÆeĵ%l'Y‹®¢ùíÒ4¤ÒïGF~iK#ûD»—7C¿@ùFƒâÔhæ·“™ˆ:/‚q` -æÎfà+V7ÿƒšEÑå{guÄJè´h·CP@ó9X®H@hKn™Š›ÇÍ4c1³º!ûЫFªþ&1\‚}F.4榑².prHÀyÙüdÝxµ-tVÐRëœÊ\ -VÑ–M²a7‘4î+®ìW —u¬ÇuÕðƒôçÚ•;ô×é‡k Ùèo-½8„®pC¶±Æ˜ àÅCšß+6«Íüv´¹Ý -ÇZGJŸ.)Îí÷öŒg>&oM‚u܆Ù¤|—n›¡³¾hœQ&€°þæ· 8”1Ú"†dg”–ß(°-v¯0Qcöcèb„«{˜Tnè‹Ë¦Ö@BŒ'·:ôýÆåyÞ´Æ3¼7Î/ñ†xÉ -öðìõí3ìƒúÂÄ>˜µ<Á±i··^Äã×¼Hæç?²p_ÍæÉl:Á¾ÎG#üE:øcðŒcÉ—endstream -endobj -1224 0 obj<>/XObject<<>>>>>>endobj -1225 0 obj<>stream -x½WMSãF½ó+:>AÕZkËøƒT6U6  Y+Å!ä0’FX i„×ÿ>¯gFF°E.lk¦?ß{Ýüs4¤¾‡4õi4¡(?xŸ¼S:MñÚÇO))1üÑôõƒEpôùò”†C -ؚ̦Ä;ƒÑñUB;UÓZmñè­qhíc Î p".‘6kÆ˺bݾ栛‡wk^l³V×{‡Þã(Êû -&8ê&4eGÔ*’ZSmæ/º"â‹(tj®Ó‰ˆž ŠN·Ñ;*jÆÃkÏJL£u -{çx… uŠd,‹HÒýq˜ -Y"h­0•õZÕYl;» uü6a·‡¯Y­‘¿ hÇZÐvÃȪÖ5O ->Ô1«Â#o"T5~;F2ÓòšmEQ9whö¹¶-Æ¿±ÖÌ è–Õ£Ù-Ï- ÿý0€$•Dñl ßÍÖyU¡‚fÍ0<úÓô -»Ô֔ˌ²´2ñ0›_òSL'æÔÎM]½Ã¤ÎQwù=’›ªù”ש´=©º?q.ÌY›¼Ðn¿E(Ñã»ä«1ÊM:¢åå•kÌWÍÍßFƒDn=2=4Þ‰fä7Ui â¹øžæuþÂ1 Ý»i5s4Nð?ÇlD“)ÖeìðFkoKõˆq„(ªs‰åƒwoöÙoŽ÷§>þ׈?¼«žNfÞdìcËå[ƒ![»Žþ8ú³H%–endstream -endobj -1226 0 obj<>/XObject<<>>>>>>endobj -1227 0 obj<>stream -xWMoÛF½ûW t©HŒ$˲] mÓÂ*Œ¹¬È•´ ¹ËrI ú÷}3»”IJ.Ú"‰cQÜùzoÞÌþu1£)þÌèfNWKJ‹‹i2¥ÅÝ,YÐâö¿Ïñ¯Ò´ _,“åðùÃêâã§Íf´ÚÀÔòö†VÁÌtJ«ôòqC×Ð^Ùš¼*ÖŠjGW¥š”%ë´6ÎþúZUuSŽ©Þi|Ò5ÿB£²Ò]U:£BùZW#Úæn­rr¥œ4x·X'©³˜þ°úv1¥Éì*™#ŒËÑAûQBÏâxoò<ß©W¸'Ÿ›í®&•½":µÕä^uEn+*]­mmà'¸¥uåö^WΠ&ÖÕtŒnàxp(¡?¼ÆIã©T•*4¡½©w”ÂÒ˜”' -%¡Õ{G;çkO_/÷;-áÇAÜîÍ -Ý]“«èi5ðŒgR篸¨\B|Ô”»¹øfmQØ5r” -KgJ Œ¤tŒRWÆerÄ`3Bµkcþ

    )¤¤tÞ›5‚AjÜ9fÛ€ÐL»ˆŽVשºÖE‰fìaö~¢mZÇm+®€ôÆTˆ0@0 <5%šÍ @™g't7Bsöƒ”£oa*Ú!ÚY»¤‘鮩¡kíB¤‡Ï­âTÀ‚e¡ë™™¥òJ«ìÀaüžwÆͺC™œ]±"TîÕd(ƒjjp¹6)›56S6=ŒÉï\“sšÒB!íÙø:EvÀß}ütG3ˆ2«óäjúivÜ%ôY}7v“b'†»Ò>™ß@þÑŒ«á›¡Ç|él`>u9xÈæÙpˆŠrâ†(š¼6%Xê ½()/ò©ãÁ¥Èx˜Ÿ®÷š„Hàú½Ì/ê{Û˜*Eã°R2¢õ;^¢èÆOÄ£‚Œ¸kgKBÊôF!pnÏNïC„zuk™ßj×FIHŽe'Âùôe%âóÜÎijÜçB*Ú»êû¶rè)Ñ.¦.bñ7x¶ƒƒ¡0ZwÂÀÅP˜'s”ÊSý7ö‹Æ:ÐOÕõ-A7Ðdjm¸3Ùß"ÉDXŒºmáƒÓ'Š -˜W®xræí-[ê¼À£6µ="è#K88;ôµe!Æx¢ÁÂ}oÏ„äÆÿ.ËÔW„UeûŒ†QY‡ -W¼ìÍèµ9@ñ¹Q¡µö Gkn?ÝIœÝš,_®2‘EÕÑk)ð0´A¿ o¹FUÿ0x§ºRñ ãeNUGmx¼Q‡#º Ø%ý*pŽGõƒ¦Â©àO§¯F5Äñ±qi¬Ã|ê›ÃöA[#ó])*kšXßú0ð>rC'°#z;ß/ÖmL©¦ të_mÚ¾.•Ìy·+È|{Žxw÷p‡¯Î>QðÁVCG&¨È•./ ËMÊ‹|6÷¿9c†|òÇ®dÑ>³o³_—°ûendstream -endobj -1230 0 obj<>/XObject<<>>>>>>endobj -1231 0 obj<>stream -xWÑnÛ6}ÏWÜ—¡)«–ã:é€=,ÁRØÒ1—¼Pes¡H•¤¬ùïw.IǶ: CÑƵÈËsÏ9÷Pù~QÒJºYÐõŠêîb^Ìi¹˜+ZÞÞàó¤6>(Ë›b9}p·¾øðð‰sZ·¨µº¹¥uC¨3Ç7õåýVôA:*W=‰®ÔK×Z× SKRÞÒ¿_ÿk”7©ÆìzY,På›Ê‚îm× §¼5yå’Ê2¯\Ü*V®·2—÷ÒípÞ१õý7 -–‚Яñ'ÕZI -ZoOª¥½H ÃàöÊlx•—ÀÕ’ -¤žF©u\é·vÐ ãÓ¬¼N(Zï©Ž0±7p•ÞÙ§°Ñàƒ$/:É‚­­f’:ë(B ±J‹JÇEi?¸¢Vá›à„ñ­t“Óßês³ÜIzÂa,Nt‘ƒJxÙÐÓwhŽÙ)rÅ -z‚½/‰‡Q˜ˆ=H@¡ ~zÛÉ°en´z•$èqÍåŸÛçM®Æ™HϨÀÓVìÖR£|ìäP5„Äš z©"Hü“•áÚ$}åg£w¬R'öIˆJ‚O$p ´ojÁ „}#—^.ýPoIxz”¡’ƒzyN¦Ú%Ñ¢·â P'´j¦,}–FºxÃIV€4¦IŸ¹Û“W¤t.XØÀ‰ñMFò½”MA_@qtÕÁnô}PDO˜ªà«Vxž%Hnèñá銄Ø»Ùâ+å Êî©ã®ÙKÓx²Q0ºÇÆnÚГÄ¡q°ía°(\c ¤8NØ£„¾©=0Hv‡y¸bÑ Ê<®Ñ‡‰V¡^óiõ¤ƒ<øp"Ë]ÁdW¤ E›òœH­ó˜Í/ä°SÃŒ¼Pm6lÈVÔæ@Ÿ,R‚³Ïðgª‘»ŒfÃÆÉé[áš‘çƒ[hœBëžç²a’øœ2Æ"W¾ ÏXƒ¦’Ž`'ïO'gÍjéæ*WÓ™DT@n3ÊM#ü~†ÖGQ8AOÓ/N%ÒoQÐ×^Ûúõ˜‘xÄ9;»æN¹à”üŠ†vJŽÜö‡‡³ˆäe¹LÊ:¦Ó£ƒS!…¢§Œ¡×!–Xií0d9Qac IQ'j”ˆ©d¡ªX Â#‡Õòe&xPOpÚÁtÚ¾·. Fù j®üŠ…IŒ„ˆÅnòg \P:bÆ(à ‹f™z¶¬¨k ÔáÚËŽ}1¢ÄÆñbر}ì¥AôÌ%W%¬aßÃÑ\6£â$Âè˜Ó½àÁ|¨µõSœ´æ)­Á†M! ®AvÜéX!dZ’- ó!¢#*Æख1²mž²øT”·ˆFÌňÑu“ƒÆüãS¢!UDÂΤ¨¢²ƒWÿƒF.–·-O ÄÆTÈUûYüD¸hP¥¼ á .o\{\?'s~<¹¿ó ”láéz:qxnâ¼î™ Àduˆ·äÎb0>5€lkGÎ6$øÀn0[o;áð*€8Á¥Î:ãn¸ãïXvl3VfÚûoÕ‰À~t=ÿ‰T‡ïv0`ųá†FÈ9RÌDqÎn°o°"zvm„žœwZ°Øf‘|ëÎ,߉Qah$ÁÈ€…FSâ3å8oäwŽÃ:Ù(vEŠÏÆbÙô.øæä.Æ8H —}…2ÍD -z× -¼džßá~î4ý1 ý´–m¤&°€Š™I£•¨_ɸ§â…T¥´ -{~â—½ä*¼‹1rä>Ñ zÆÕù+ßœ÷çÐAWä@{ìÜêUql£¦w~kµ¶ãIð¾Ej™^‡bð"z‡‡ôâ<Ö8˜‰1¼,A“‘˜CÑ‹ÜÎ \ÄB/—üžôYw°+&*ñåòäJgª™aîÝbäªý„À<°4cûFÁ}Wµ5lC={Žß‰KJû—÷Ð -Ÿ]’Qp ’#}>Ñ@ûÃÙÿ9á·Ç _^'Rÿï/ËÕm±ú¸ÀÇ—Û|É-ÿ¶¾øóâƒo'^endstream -endobj -1232 0 obj<>/XObject<<>>>>>>endobj -1233 0 obj<>stream -x•WMoÛF½ûW t‰H´¾,+‡ìÄ)‚ÖuZëŠ%¹×"¹ìîÒŠúëûfHÉ­ŠÀˆ@jgÞ¼yófõ÷Å„Æø7¡›)Í””ãhL‹é,šÓ|yƒÏSü9M™¼˜/¯£å¹Óé™w«‹«Ï×4™Ð*C’Åò†V)!ÁxL«ä²Ð/º˜’­ ›l<ýDÁ5úýê‡æ‡C£éPVé¥ÏmS¤äk­SJl•4Îé*Jí=K™)4>ä -¸²ß+K[;Ú:‚®ðµ!ù&ÉIyRu]˜Dc+òÚ½˜jM>ÇQÏ Æ4šÌ¢)§þ~itÔ½jã#P¦êâStÿí¾K?z O&qÖÛ,Ðc–™D·!¾¿çä ‹Ân=%…A\A/­Ó*©œÿ£D%¹FºÚ D›…öh -Wµ”}  xbžG³IKÙdM£YDàí]¦6zÏõ;|²G”êÚi Ó·Ìs».ŸT+䯀׃ä£0CŠw´vª -Lê¢Ó6×Zë𤭠õ¢¿™ud+¹Ê êGá ÑÙ¢@?ÏPT_ƾ–íñŽÓ"ú’ÑÎ6è^ “WÓNûG¬ä,ˆ ‹¢K³&bA+JµëeVkèÀ(tבXB8¥*(© 0]µ-ñ{­ÞW*–T}Ö™Äã„ÆŠ,[¹˜é> .iSÙ-m g`ýƺ:ÈÊœ-™É®ˆ>p‹‚)µÔ-¼ÆiŠÍšjíІRU£)kg_tÉC„ ÀÃWãd ü[͵€f‰í`a?hr TÃÝRŒJ`§{nYTG#ÑK)Òê9uAK!tHÿ¨ Uµ›ø åê…•çfðb<Â@ç¯[H®¾|%T²a’<ö)”ÞËëÑQORÓíÇ_Žöåó˜Gôï[oþ‘iù/ßØ[á@Šæo:cèzªf?I߈åû+q:ßÎhד7bºÜOUÚ†m§±lzÅZÊÁÞõ¹ƒÙ`º=o\¬›Ì§‡»½/xú~Ù]–à^x!(†‡Oßd,ñœK‰Úâ‚búZ(·†Al$àúE Ë‘ïTÜÙ]¬×¦BptÁˆ7bݱF+eŽr fFC©œÜæÊ«ÑBØ„¬6ÄëUÜquädVø Š=Â=”9í!°’dOv‡ƒ—0£lŒ(fµqý½Ä‚‡øv`Á¶'7¹æRyª9ÔÌ÷Ÿ–¾«ÊuM4Àî·ÒÝZÅÓMi@ïuÏ‘Ä? -\WA‹–]ÓuŸI`g6&ÜÇ°¦^[’P©{‹Ÿ:SØÕ]+q~²˜-ç­=ž€ø¡Æ…W^1ÿa)çݱ»[CÒ’7Ë›·„E%Ã~掊„¼¡Iñ>&ôµÊ’‹Ë‹‚•JAr -[n“ßùÀþßÚª]D·]Ü Z\_ãg B×ÖT`Ð÷…ÌÉ%v¢°UåŽô|çK0•º´ÈÙT4ê½r¦Ø wWŸ—Ýo’É?‹–3Z|·×ˆ§Û‡»[úêì3ï‚O6i\qå£ýÑÍ¿{ÒËÿ-Ÿ/–ÑâzŠ»=_sØûÕÅïÿž¶€eendstream -endobj -1234 0 obj<>/XObject<<>>>>>>endobj -1235 0 obj<>stream -xuWaoÛ6ýž_qð—9C­ÚŽ­¸ú¡Y[ Àšuˆaƒ¿Ðe±¡D•¤ìx¿~ïH)vI€ÄïÞ½{÷Žùq5£)¾ft;§›”²êjšL)]½K´XÝâ÷9~¬¤"r!L¦Àiaõ‘„ÖôðõŽQLi2»AÈ™ªB&—Ð?¦¥LÔÈéÃñ>OãKáéAT[A…@'D­Sõ.`d¡PzO#2W¦&Uºj›d¦.º7((ö¥r„o®þEZ d4ôG+Ãz‰Bd™lüÚ¶žjóö0+sÑå’ôk¤ø×XKŒ’ÐúÄ}ÂÊLª½ 3@Çñ¦cb{ ˆÏú¤.MmZËÅ!@hOÒ½1O![ôà‹§\¢ÕÜ8Cér mo^:ÚŒÏ8Ù\ÇR•g,qNmuW–3U¯ÔH[[ÑVz ”/I  ¹ -¢ÀÃ^JÔÖʃ{äžî…ë¬ -ã‡8æÓÅŠ“kõ(¡) ÍDë@„N%5ÖQå^UXSeÐÀL8Dä’º‚û®o¹½Q2áìù\Mn‘'ŒSšÐ&{<.åâ4ÝŸƒGÁæ9YªjŽ[è¼U™'Ct*†ÇJ‘¿=X]f<.›±Ð¾4í®$pž«rFr¯Lë\¢~Á»ÍuB_ -:bšd-¸?ƒd›q™Ñàó÷t”n´¹fzêpžÛX(Ø@.GtmQ _¢ã{¡k¹¨3I%£¬ wtþBSXïÃ#a¸¹‹@~„vhNX?ˆuÿù]lk/sÀ‚&bبÉÌ´:ç?Z¦¯Tà š¨qp€¤ 2Ýc”ÉÏZ}›ÐC) ªÊä2°}±Ý,üF´öŒ,ÓÈš5p²ÈО#9m<çøߦðÀ·•QÁ9ëräN9G”!5¼Næ(Ù›A!E«ÁÑITAÖ&qŠ€Þ£c'oEÕAÁ Bð^ ggÞC¬£fèÇN¼rQƒ€~!jPÜË#Ó&r,œ1„¨$†7Èh3Ɖè<ŒQo{ISÿâ ¾±È`Ô9a¾í t%·ìœ>pÇ9à MLÍÌDF e1Û¥ç<âx—ÇlÆ,¡ÏÆ®j¬§¦Ñ*¼4‚×`Þ GUÐÞႆØð}äùfØ•`§‹rD ±HäÄa ³ýüa2÷2W.)§RŠ½jý…•Œ ™3c±<0ëÈ øÛÁX-¼ªXуNšÀ 7±žgEË{>¾×"¨™z4tÐ5B ÚA#ct&w+³WÖ5rúYò.ÁÅJ-Ñn´Vcup\׿÷¯*ŠÉGP0ôµ{éïd süö;…_*ðÆhX]¨¼6À½eß—uÙŸgd0¸«èp7y5[}§î×C"îÿ\ú¾ÄêÂRá% Oï ˜VÌŽº`h ´ß]G ×°®xÜrªde` {%· f3æiŽù3øÀ穸2'©ÄcØi ›·S…€ßZØ—äå,q|”a6X•%¨Šn7°€C…?sÁ/¼”²—š¥xÑ»}ÓßÜt ,0gèý© "årÛvÑxÕ°Móþ«±žÏóªA‡vØ×Ö4¯/sgëã䫽£réݶЭ+»ÍÏèþkãâ…-Ø0úý5–/¢àÚò êp ëˆZu7èYŠ ÿê†Òù"Þe>|½û@߬ùŽÉ¤&kyÙ‡¸Lݤ?0¹ãzž_¸ž/Rüðœã2ϧ)û´¾úëê¿Üûendstream -endobj -1236 0 obj<>/XObject<<>>>>>>endobj -1237 0 obj<>stream -x½VÁnã6½ç+¾4 8ªe»vöC‚¶À²m‹¹ÐmqM‰ -IYU¿¾oH9ÑÊÙôP ÐóæÍ›7|¾Hi†Ÿ”ÖsZ¬(+/fÉŒVé*™Óòzÿçøµ’váÃry¬Þú°˜ÏÞþÎfçWÝm.~üõ#¥kÚì}uÒ&'džÍh“]"ûÇ„¾¨\’V•t6_¿¤a5_#Ù&¿Ü’&mwp2µW¦"å¨2-ÉJlµÌiÛQ.w¢Ñ~JÛÆ“ÚQgÊ•ãï¤<=]­ô^Zr2k¬òÝÓò…¬Bl):FÜéõ ·kv; ª¥ÅáRT™¤w© -|9£ªÚÓNi (¥KˆÁcµqŽ‘j霬³‡Uˆ#ªÚKß攉 §nF©;é&Sj •§RôTcéz¥÷j±L– ¼¦³„¤ÈÉŠö}ZmŤJ+N¼æÒ©=£õ|‘¨ç¥r2Ÿ’6í•^VY*Hõr>¡[k íœÏ¬0ÆI¾¶2ž\S×Æ‚L´¬0­Ä™ÉrzåVàøAº— îÝdˆ—Á - Š”C@¹¯rñÙ‹#ÇêZEº>UäL)чd™V²òŽrSýà©Hg;j¥Ö¦È|#´î}dZPò°÷c@@æq«l¬.>ƒ¸³™©ŽHªqêƨM¬ÚȬRl/XéOL'%t$¸žº–•# FÃRù{H蓧2^ÅEL¡´š@8º4¢Q` 2ÏŠMè· -Dxé<¡`ôŠ¹ñ`ë}µ¦°Œ¢üw¹¶§°ÿ¤×xËÿ#Øo¿«ØϯvvÞ{ȵ„g°kòŒa -13“A*ÅtW±mi -_§ì[ÑRXï'Óù‚‡2ƒP÷ÐR¡‚Œ0zîû}œ÷®S[™«Œ‹ý®ùÄg•ä&jýõË3Œ¤ÙñÐÐãýf£„÷æ0Ø6›Ap)J}ïlp ÌôˆQù—·‚rágà›µp>Z†4X ¸ÁÀ·B³åp\…£CL•°Ve.aa#Ô­('nTvÀ4´÷rgÈiåsƒ±éo<õ šÁ  _dÃE—ПØpœ>º^pÁ®·”è¦nˆWÊXMŸ /ÐÀ â‘ÓðL7p}fŒ·\Ï4Lö/Á—pŒÇ7?Œ:å -ÓhôNX¯²F ‹» ©kŠ4ó^pŠãdÂOX¿X~ÂÑä þ„š*‡Ç~Þ`iGC=ÚÀ¯ÍnÔì`ÔÂ×`ð<JÃŒRl‘9ì¤PŽ(;·1êådà$JÓTX\µÌÔNñ:ÝŒd;õ7@ö£Â¦*t+:ŒÆ 5=ÐV› qu.¬Â3"ÎÍw–û"¡{ lf¿®á¶1ú—S,­ß²›släQaÃ~së²d#G#x%¾x ûAÙ’Çc½ƒKl±Ê±Ų̂°ÁR˜²l nµP0VLØç¼øsÅÏ*¼ p³„-ÎkÑ!qˆí@[Þ bpaOÌuÿHLWx»^/ð´\ÆçÚãíýÝ-ýnÍWÞQ?›¬)±Qó†Q^\­çxƒ†·ÒÙt¹Âë÷§9^ 0[óÁ_6\ü>˜Ûendstream -endobj -1238 0 obj<>/XObject<<>>>>>>endobj -1239 0 obj<>stream -x…VïOã8ýÎ_1ê—e¥mhÚRÊIû…²ªD¡G‹ÐÞq:¹‰ÓdIâœí4íýõ÷ÆIøQ`O´(uì™ñ›7o柟zøóé¤OƒÙAÏëÑÈïy}ŽOðÜÇWKŠÜ‹á¸ÿÁ‹ïÝ;ñmypt9$ߧe'£ñ -C‚ƒ^–ÁáR‘ÌÅ*•´S¥ûÆb#É*ø TV$x³ÙJP•Ø˜l,©{q·˜ü=›ÍI6Q9áÃ/.¯Î¾/(MrI*â•ÏËŸ=êúÄ» gâQF0è5ëý‘7äõkeá1–2™)½£LE’¯)10î¨42d'|K…Ìñ[KÁ‹éî ‰<ä½¹²õÖÕÎÅÓq[´¨:{À‚¹G˸4îÚ™ØÁ> ½1I’Q$››$rÂÄ8Üž½À9Gý´@_÷üæªãî~tyJ>òÀ é†5 -þÈó‡-RUÑyšÈÜ>þ2yÝþ‰7bÄn1î`€I,  (”¶ÀÄh¤µ§¤Ðʪ@¥œÐó›ÛÉüênA¸{,5oÎéêìzvvݧ5g]P¨Ed‚½ÀM!a=É`n#3„F‡‘Vù½Ç#ÃÆýc~zø¼ŸÛ)™§[Ç#MóóOçã‘Ùú#Z d÷á3U( óÈ¡GJ“C=VÔ"äªLC -bYyôlYI²$úݨë3+ ¤B3Zx^¤ Ìé8u2±¥m–XúJýÞpÜùBIn¬cZ¿"_ï#Û^¸%ù•ÂEÚMµ“ü+;”%ëØ’H¢X¦Å¯‰pÜáJÁáÇwt·†ˆÒ ²¨_øZãE¾s5GÐc]_× ‚9"W‰ ,.ƒ`†Iw°øÔ2öü¢¸óçÒ–L¨UÁÈ Š|ðσÐÂf¬âà:€ƒýÓþÿC;e…Q+4Î…Ýb4ݸ‰¶‹Y³sxè{ÄîðóiĽ…¶¾·¥Á[.ÇÍ$î1Ó4:ÖÃñâlöíŒæZýäaéB%ÏYnJå“]„áº'ýÚùûãâp4öFÇý&ÀÞ˜ÏN–¿üaKñªendstream -endobj -1240 0 obj<>/XObject<<>>>>>>endobj -1241 0 obj<>stream -x…VÛrÛ6}÷WlŸìL-šÝì7_M£DÔI:u ”‘€–Õ¯ïYr&3µÇŠZ»çœ=‹¯'…øhS2¦´< ƒ’Ñe0¤át‚çFR’K|ì}q³:¹xRÑ*çMÆÓ ­2ÂFaH«ôl¾úóºqúNÙT?ICxëB¾Y}9`b²³$ þŒƒ( b~…e7…Hwou!邏©ûéÊá+Wª”´ÒôN=Iº¯ø°ì»ÓFÿ³f@o?,–”Äß­ÿ¸êýÝŒnEº•´TÿJ -¿‹Ÿ´ñƒxDƒx @QÔŒœQ2£'e\#Šâ@øG:'‡=”“¥¥RVNé -Aªò¯36ü’D•ùºÂ:DÐ~«Ò-•"“$(Sy.¬RINcÎ%üç^X¿Øêt'隱͹Æðqºq4#Ž[Kç@”ÎsÚ+·å/Duø…º]_êAŠÒ k”Àär5¶–¼j2¢²Èéœ7ÜKYÑ“0J7»V—#J …²¬¯KÐÝçx0SÎoÈJÃJáÃIô -I¨ë½¿Y_©.ká(öÛè"£ÙÝ=e†¹<û]¢´‚E$á㛀VÀù˜á" -6RXí…B¹6…´V®‚^µ³Ïó{¿E®6‘HÝÈ+ZŸß€é"BþmQ”Üê’Ra²+Æá`8 w7–Fa8Åíó"âü=¯Â{Õ&—Xµ †xuÏwŸ‡ƒÉÂŒ+J&á ™¶ÑI‚ç‘î•1óÕy-Y !-ä;¶Èí5åªàêhŒ@‡“ÏοꨊŽ/9¬Å`4siªS‡ý30SY•I£ªM¯&ÖúÐì-E¹¤ÀASUˆE*,ÊS>©†¼Ó­ªäOÄÇ\6u{]ù›m³þ‰úº,Ü;íѽ´Ñ:»êá5÷.;UûvÌh†¿úŒñn#]?ÑwZïOáÈ:X'ò°Z -v9ÿ¾ µB\¡‘ÚæˆESƒ£ÌrãÌÈ6u­Y0[N —Ú'ü#ÁH¨ó.ëÙ­v:ÕŒ¹«NÀô*òöìhOïGG›¦¤Zš\—‚-mïÃ×’¾6°I®h³ñÚòe_<\R„©“cš ’aëµÑ8ˆàÁó}lÅÉ°~›TˆŒ'Á˜]yÉ|×R×p‘½€ÓÂ@­”l UM¹–ÆrE0Ù£jÇH({µG¸ÀÎ byÃ~Ð>Ó±}fuø.ïÑzü§üÓ†’³ÏûwZ“Kë Us­éÎõV%ýtñ9¹Æ7äìµd0ê™<½_ûÇ\7Ç´áVAy\ÖšgQ{h¥îí£ížV¹À®Öõ(è¦(èá ÈãñR>¾aÅÚrÝ}}Tx•fl¨`aÑZC\sq€½ÌN±Èx8²×Çšop ™8Pt¦3í.½Ñ7åiB£IØÞ]—×ó›kZýÅ_[;ÓÀ=EWœ9:°]0˜ÄþúûS«Ž§Áx·ä(¼ä•÷«“?Nþ4™šáendstream -endobj -1242 0 obj<>/XObject<<>>>>/Annots 760 0 R>>endobj -1243 0 obj<>stream -x¥WÛnÛF}÷W ôbI‘’%9@P؆Õ/‰Ô¦ô²$WrWÙ]ZÑK¿½g–¤/jã´¨ Ë&wvgöÌ™3ã¯GõñÑ8¦ÁˆÒò¨ôñ†?"þøøóQ|6Ft6šC*i8Žƒ³æ© 9ÛS|>„Åp2æ¿ñc$­ê…h„Ç’âá8ˆ)öO¼)Æa£æGŽFÁøÙjÔ‚ˆÎÙ+¶žGðçZw“A09ôv¹8 -§ç÷i±Â…Fã -2¼I»W±uÒP4ènÓU‘KåèÝݧÅÝÉâ³ß뽧ƒ!‚]d]GM/>ØG“akÒGp­ ŒÞé¥BÑŒR­Vùºwó0¦OÂléJ+%SGÚ<{9$aIðÉ}:2p7­ãZÁr.ÊDüT{R5žcD™u/¨Ôp‘êr[H'I(»Ãõœ&·É-}­¤u¹V>¦ÙЕÊH+ïíe‚Íšº´qnû& SatìreƒêAªÿ,¤¬v¡åXÂîl\Y¼<Æ“… šËÄ#0A^ -›§¢(ö=Ú는”Â3²Ž[+dÀ¾á=`Þi»i±‘4Í ¾RF÷&G–šd-»Ç³Ëº—Ò/Ox_8M`NÇÁ„© ¯Ëx4¦zµ…Í/žFƒ:­‹«ûpvO|œ'”td«íV÷ÿŽEà[é.gwsÒÈFí¨C™Éùñæòú×ÙôsO‚èü ¢™²°æj 8‘ÜÜXGn‡ÜëµÄC»ÜmüZ"¬$½•F86·{ëd " ¤êKûœ‘߶…Èr”+¿—©Ûd´…®ªE@³UMì S¸0Rd{J¤TØêC“Y’ÊÕiGiìÒr6Ëþxà¾Óæ‹«†¿G¢Å¼væ²@ùDj®BÖÍÒÉg.°&òμ¾ç\ºjÛq‘IsÈ΋,k|5m€FiG™´©É“'xj,ìaîjo€‰%–+Ýo}Ÿ[×é±°Û­LóN¦O³Ûy×|+ ~ƒù˜IÂycǧW*s¥ ½Þ/OZž¶57Åá/ºki)öžjÊôNZàŠªm&и<žÄ’cN ¤k†qüPtI…|·¡(õ!§ÚW#íd²È$S‚ "O| Üt£Ç®ÕÂïgü£®8:œ´¦;.OzuwŒ‚¸N €jË­¦;ÆÁ7µW[〇³Ýh x†kÜä©ÑV¯½¿¸¥¡pƒY%NÛîÂùŽÍ¼ô~ÿÖ'¹O7=dåû%>ƒ²=9@3/+ í ëŽeC8»¹¸ 0q„/|ꙌòË5?wý«¶ ‡ -½Ö’®Ä&t?8ä - ¥¯1fÄ ’´ò̼¬áC]¡ ‘wh>7 U9»‘EÑ#™L̤7ëåwd©iØhíüf¹Dk³o*¬F;!m¡ƒ¹ŸWšRô³0ÕóA8íÓy;ÿ kŽÑÁWÜkYîùí±tûõPu`‰!ñ-7Ÿ/hU:bç«ÖYÖÚ†Óv®! 5 @¥ox-Š N ÞEau•ªŽÝ#1!†E•¡šn¯ã>FífLHd*|À ô“j½ÞC©ŸW›¶7soçÏø>…»ôÄÜ4Ó=k·Uj‡Œ -Zr¨²Ü~°ž$høMõOž&SÿO°ÍÚCþÏâzZ‹¢>ßæzqôáè/€ù®Ôendstream -endobj -1244 0 obj<>/XObject<<>>>>/Annots 763 0 R>>endobj -1245 0 obj<>stream -x­VÁnÛF½ë+>)€¼%YR '…È×qm"FÑÅŠ\J›.¹ wiU—~{ß,ÉZR[a˜ ¹Ã™7oÞÌè[/¢þ"ši2£$ïÄoøñåáç^4]ˆ1ÍÆ31¢œ&gs1iŸ =²=-^‹MsÜñ_)ÊÂÁd2Óル¸7¼~Mє⠱g ܤ!äˆâ¤ÍE$&‚.áÅo®²Ø‘å[ÒÎÕÊÑv£ -úô8Ó—>>«Êi[|yªJI:’¯â¯½F3`‹Ó~b´*üOüvx=¥(jŸŽç|úÄ.w¶¦Ô’¤»eLŸo–Od+öÇ8èäZÆ’Ò}¥ Oï‚?zPÎÖU¢èª²[§ª“–e¾’„G†Fnc·T—¢C4Ÿˆo7‘­À—þ°W;/¥O6”U6ö‡õ¨ÖÔ§÷åùp˜ÈʱՅõ³…þc”ª·CÇчp)6>7‡^BiÙ‹ Y5Á¶ÚF¡‹ÄÔ©J€ê°Œô¨@K5Ù¬ÉQÐ'iœ €uJl]‚(45++»2*wr5òBeÊJ13ºX“±¸d ¶y[Ø£ØvõU%Ž!„´’ë5hbnBMžlõWi$ØÜ(¤àmx½Ï~ }_o§“šýAhSAPTý†ÖÊj‹<ÓJ#U¼ßÆÊ”¶ˆÄ€3("(¯‘“û‘ž®uåü€’J6°â6œ@"þßïnîâ÷Ÿÿ\éYµðoÒSX§l zgËë±ÖÂa¦§XÁäÎÂ3Ä‹U,/ÿ ¼:ÊkçÉù¶ÂN•²$Tý‡Ò -¨@^§u[éµ.¤ œæÆÕ ¨¿°5:·=þN0\®Ìanç¼Ê»À4 E¸i0軸£=cöן¶(A±P¤l`Çå+‘Ø" }SAD(Þ€N¬w¾rYÒ¦hx=~éú¨íÁN{A7ú'],HŸ¡±¹R%:ÓMŸzìÿÀÏ€8<{`sS&Þ¶ªe–ŽJÙò¬Ð8™5Cæ¼µê8¼À4Ú³|Koèbþú­¸HÕ³F£„§)±çôážn%zñ#”v‹ïn/——±8<9 -øæ$Ï­|VЗñš;¾ÁɲG9(›™ù®êYО-Ì®euˆ BÙKåEqLÛ^ƒ¶*,é¡«Ò³~ÿk×`ZøˆÑ w™øªÞÚ3PL©U Wˆ¶×å¾ò>/XObject<<>>>>/Annots 770 0 R>>endobj -1247 0 obj<>stream -xW]oÛ6}ϯ¸èKS –#Ùqœ¿½È–Y2£ëÙ2™SMól™Ü O=ð~ºÆ»Í—7øácaa>¿J²ó…Å,¹¥Ì-a.KSìˆO£¹Yv #gæfé-îȲ|³ ‹O|ì·ÕÅôþ–²+Zˆgq³¤UÂÀyù¦­W–ÒeBï>=®>ѯR*çèAÔkAÎtV*’&W¯Vß/®h’Íqþr§½ùúÀïØzz­Ofs\Žu˜KzßxkòNzmš¸uNi:l þbk¼H;ÊÕNU¦U9é†DCøÙjvÚš¦VOè÷a‡uÔ9ÅзË7¦‘µØ@_•u¸J7zØ;¯êo¯È›Áñt]{!K%·ºy³¢r†¶éq¡£ÒÔµö/pªQýiìI„㥣°Út.ܽ¶¢1GÞ®‰€ü:g—ŠÆ4ûz<Ø9vÑ— -‘:o#@ €ºŠñûˆÈHN2³ü¯åFvŒ -á· ÚäºÐ|u„€Lñ£ýÂtMNÂsOÅl7tI¥÷íÝtê˜ùÄØMü5•;—”¾®ž ‰€cçôA–Œ5yC³lgzÿŒV¤²Ô:î&Û5aÛ­+-«ý€²^WQVµÆioìž -c‡U°Â?‘/#â +b 4Ñ -¹å^ƒ Yu9sœ}MÖí -æô]{¤ÉºÛ$7‘Æß8 µöbïø‚¨€‘\Ö§Sw’iàv‘ãÍ¥q>@rœ¡“Yi "‹‡”ëÕú9çþ6]Pbtâ‡øùüéL…ØáöŠimM'9,VRUá‘÷1„'–¤i<ÔÆQž¡›\ïtÞ‰Š -¨×qö²´OˆaCªÁfe̶ì4',áêÀ oŒIˆ}›é¹ù1F Qs* ·* ¤CAÌ2kå{…b"š}àlHØ?wu´>¦Ú”æËçtÿ™¼‘=Yë†3g ëØ;žäͳ”#sN(‡ÿã;D«6ûz*z&]Pcl z`Šd¥C) loô|1Ùu'Khš‰¶¦"òå%·3ÆsC½öåó,Ÿê'TZÓyêKƒtóVáV¦z«TËVjêð×P. JvùèðÙÕ,œtƒ\¡XŽ¸µªPh9ÕÊ—&?¦"é"ÁÙ*e·7ÆÓ÷Îy,HáX¿c. —Ž"XÁ3´ˆÊˆ<\WÁMc8O°~M­Ñ¨ÇÀÌŽ–F¡ÿŒ|ú¾OäüÈQNƒ±ª¹L‚ë¼k õž¡ÃX¼|gzÆr£‚‡/‘Í6Öb U{8]øžA;É|êíÇ/ôöÏÜ‘ÀC÷ÿö*¡”ø2&,ƒˆÏóetcE[j ¹îE90¯¡¬Ö”¦à¸ X)[Lð–}pìéÚ¨á˜@†Œ@ ç4u83^˜±C3Ü& -kê±¹=Eù<ÝÁô†ëùPøBö:7óÍcûZ.”¡SxÕBŽ÷è=\áIý+ê—êØ™C—fÙAΦ^@"çÓ4íž5P8Ÿ»FÛŠ Öí©äŽ5V¡Ç £O”¶ëÖ(¾ $rr#Kd~h€Ôˆ:Lyw'£ößc@ASs8ÈãÆè+Ð@ -Geöì15ñðÂÝzÜÅË¡( -»¨O0bŨ˜Ë‡Žü¹‹uyÈv^žÞ_ŸŒŽÃ Ä–'9ݵ±ËÞáù—ØqÇå×$9Z‰©rœ:&<ÉVK´Ð…æ‹a˜#¨ÎõÆ‚»}«‚‹ÓûtðᦣWãsyê:ÃøŽ¸PÆǸ ~ñLTfqóô~9Ü0É®1 \a¤ÇÉŸÒCõDÚðÍóþïq (§¿ûcuñ×ÅIrÿêendstream -endobj -1248 0 obj<>/XObject<<>>>>>>endobj -1249 0 obj<>stream -xTËn£@¼û+J{rÀ{}Zç±Êe•¬‚6—HÑx L;3ƒ­üýöNœd+Ëžê®ê*^&1"þÅX$˜eí$ -#Ì£4Ì.|ðß(”“‹|rþsŽ8F^úÚl¹@^€ë£¹œÊ½EP`µ³Êì•Yñý+ÚÉlWç|kˆ$¡z–?3^:â‚$ SFœæUmq¨›Ò(áŠÚ(éȼBŠ¦QÅÁXÚ‰Z×z W)4\lÝøÎRg¤â’BáqZ‡*ìkn®×W¾5÷‹gaâû9±Ý2¤Ÿc„–ÕãYˆ~Ù£´k¸-ñ•Ý‘.,õH3¦P{ÕЮå"8£Tè¡O¹\þ¹A•ñ~¦¡±Q ŸŸ›o^ÑÙ#Ašd”f˜ZM!tÁ­Ë¹€-3\£©Y*Ǧ_™ö…öØ¿¤Ž¡H÷„¾]½³ù†Øò|eÿ¦_j[»¾¤¶åcF½t^r^˜£OÍnýùq1 ëmT£„örT™º†P(H«J”Ô4tðºø†L»ø݆'®ùû÷ë_ë§ä)ù—O¬ñP)Í¢¼R‡ƒð[&´Ê°4õ ÚH­·™¬„Þòž;æçýøez”†Z¶¶«†ÓŸd~óújXû1rŸ¸v»ÂgƒÜ …oYâˆÎ¾s€ÙÛiˆáårtSœr —3ÄÙÜ¿ï…À¡gήHvÞËÂÕ¤ý¹ ÎøÀåÁ"áÓËJìë/CÜÜ>ä·XK©¬Å½O:NC·¯Øþ&Í–a6OøCÃq<óÏ®óÉïÉ_{;_Þendstream -endobj -1250 0 obj<>/XObject<<>>>>/Annots 773 0 R>>endobj -1251 0 obj<>stream -x}WaoÛ6ýž_q0ÌRÙ²'-Plëºvöak ú…–NJÔH*ŽÿýÞ‘’ã¨éX¶¥ãñîÝ»wô¿9-ð—ÓÍ’V*š‹E¶ õâ&[ÓúöŸ—x9¦JÀT.¹\>~¸Èó®òëlC å×7ÙjøfèSt´Ül²åÔÑÛíÅüý+Z.h[aïÍÍ-mËèwŠÙ¯µê;Ê_eô‘;ë‚n÷ô¶ßûÛ¯qe~“V¾\­á}[Î`šgôGœ-û"hÛ&Ó5åù`º¼A0ÝÖLÜ(mH•¥c全ŽvýIÊ^ž´'¯šú9^3ëöâlA/—€Vž)¨;\à.è ªÄ ¬¯´aÚ1<3mO¾ß5::Û'£_Œ·WÔ%gž™tE0ª•§¢VížK¸æ˜ öÚ1[Çq¿"˜˜u„eZ$PIL Ɇţö ©@ÞJ¸ˆ9{>/…¸¨´â¼é‹ZÞ%‡Bµòî<›J²­Ùtœ*î`|hÇ]3ú$à Š@¹ xI"G$_r© ¸öóÙ;Ûwd+êØ:Ô–î­éÛÀ ²Ñ¸"Þ+òwÚOª-‰+ |Fÿ0€/X߃£ÊQ#˜§úîlÑ€Ü'd0Ù¹³ÞëAp­?°Ã6æZ+xS)ýZïk„!,QÂY2q(ûAJë̈¬G€tYò=Û±›lY9 #s¼<+‘DÈ0ȇÅÑ_@2>L+ôÎRkÁ#ï{©¡¬vF&’h*<ª# ÛtYçl°…5>óÍŽZ>øîˆlDJbt\‡ê”'aGnë€&2í}ÇEÄ6DZ6Ún¤ð1ƘßP¤­ô¾wJ:ódˆ[)€çÒñˆÛ ‚R3; @JÌ’âŽ!ÇÀ#Ô\áõe&88l ú|yA× H• @ËÎHhŸÚG!ú¯QÌ)öŸÑbÛÃhé}KÆÚ;ø³ý¾Ž ÛðUåŠìD»j-ý„@È=·`Bòt<½bMROixGÚ3Ø‘¡{=ŸŸ*}šËB‘ÖsŒ’\fô[vÊn«ïüý3ù6ÉV’¬(½ç²…>`t¼ÁPÖ¨ŸŒ9;gZòOAE'¹Dû¨‡Ihíî^[¼AÆ’Ì$ÕXšÀÆÄvŠß°ÕèÆFû‘FÐÑ0(-ˆ+ZàzÀÆ>tÊ5Rùü4DÑcÑùÂ:”x„2=LKü»´=öKkÈR*k òéôs{šQ©Õ¾µ^§,NqFŠÁO´•i€ÿ{vGÒ Õ~ÓÖCOé¶0}ɨ² QhNØ¡#C2zv!\+Âï{0 -i«}•þ‰ øAB°ƒ…äã â¥ï¨0BI!˜´[ÒÜ(¶çŽägo Wâ0¢ø=Ö­2zdz=&ø3¬âW,eªö˜Ê‹´0Šb6© v q–V*¦tH.Ú0Cbs:®z/vð†fGB¶ ²õ#OEþ¢JAâdÕƒ|T½‘tà­<m>]Ä<¥zÃì¦U¤h¾ _Û–=³õèaT¢7:§QJœh@Éñ^”$θ’1[Í ½9Š¼!W›†V©ýùNß ù­hlªoùXY-Íß_G¦ÙY6oÒ£±l³So§û8ÆSÖ &“&˜gôù\;+$>*õ’Ä4ÅÁÙg@@økÖ¶­Œx¨*Þ…žwÌœ o„ýð’´†a2Úe„ÄÁ¤x<ÃίÇÐ_çÃu:Üb 7”/Æ@™œQg#GðlÞ{77¶PfÐ^£wø¾Ï~h&‹Æ¶þΚ´aáSMŽGV!,˜ÀH.±˜ÆèàŸ æäx€*­y,â!ŽÍËáé¥È”ôA«p´ñyLd8wê…D{ < *’“7Ì¡ñÜÛÉÌo4îÑm”)#п«¨ÅP§ǽÖ3´û†u©=&A%¡¼¢´q6+cì!m†ùg0!kQEJ]U-|õ\ôNzôÌg´]<+ bE -QÆ‘s“àù»}ü©±’O`ËÿÿYon³Íõ?€`šçkñþÛöâï‹ÿŠ€YVendstream -endobj -1252 0 obj<>/XObject<<>>>>>>endobj -1253 0 obj<>stream -x•WÁn7½û+¦ºTbY²eÙ)ЃƒØ€&Mµ@_¸»Ü#.©’\Ëúû¾îZ†lŠ @Â%93oÞ{Cý{4£)þÌèòŒÎT¶GÓÉ”³éäŒæW—ø÷þMµ|8»¸œ\½õav±x}âÓòèôvN³-kY\]Ò²"˜NiYŽ—+MÇ˟؃dÏ8¶Å¤ô®ÎËÃÑ1i—Â./^ {Éú†¬~Ô–~?Üo"Åón×ú.ÒÖ¤%D{óšJ]óÎ=i¥­T¤BkG]ÔGÞV:pÈ)ÌÎQ÷²?êw‘|MßU[(R›ù¤q LÊ8¯} B•ë­ -U¤Ò·•La¬I;>:@µ±:Nú g‹Éœƒ\G.ãàð¨l§9 ãÊ ç¿ó±)•>T¤(šÆ™Ú”Ê%»vrÒd%5¼d -h‘²wCr·¨¬õ1½Øí7:ÈÞ(a[µ#ç9<W§Äw®L³Ò•)GçúªU@ -)¢1ÀË…¦€ŸK¤°.B¦³éœJ|`ôF…rEÿÜÜÿ «B£éÑÛ®Õ 7S¨RII-§·iŠ2WOÎçòÙÇÉ|Bw.éà”%‚1w` 'vŸ]NÜ »Z -m4’¤ÑÝ×åÍý×ë?èæþþÏûµ:F…ø º$ºô™LÂGöá2 …Ò;§Ÿ6ºL(„¥ìAñÛ˜B¡sX"ÓÄíÞ_¨‚QÊM ÞK¨Vå[£•^•:01±3ÇWŒ9'˜sxw<”öÄ]©G¸ß·ƒBBBÒÝŤ[Š¾N¼ôpÜŸ8 ˆXŠ¥B'êàq¢-*þä aèsè¦*E+·‚ë.@ýå -œCVä&Çtì÷/Ÿž€÷Ú<æk8æ„–+QHí:ä çë½î,£!äc®V~‹ÿ!ÎÍJ´±¬¬ƒˆœí*ôýèÛÍÈ‚“>¤A:&? É¸òå¾DßWC+¿¥äùLðUWBûÀÈÔ´ñ1¤1¡o’µjÍ»P«Ý;á@ÆFWoEeIJÈÚ€Â>WbÃgZ©ÍjV¨„æBØÅ®¨  L@AIœÚ~a Ak‘ÂZë°ýŸ(ÉúËN—› A‘=ß&üì[¼·b¯TÑAÏÍb°ÙÞ*/üÆ!Oo‡Á2í}´©ŠL7.(ïz)æ~—ª*n90~ŒJèºJ+dçóiÖ‘`…–ñ•ìT=Žº…³TÞýÊCráM(ù´£QU<˜|Ú`ÃóŠIÇòpjàŽ\/@-Ç Ä#Î¥›Yè )LkË-à#U}YvÍd;r„Þ dm!§CÂô­‹@90'FݲÍX嚎­ ñã²T&âûh GðÜ^ÓûyÑÃœ6‰§Õ+·¦ -¨ ×ä@‚SÈàì?bJ”˜ ÌÜôp,ŽÇ˜­­kB.¤ŸTÉïuB `!¯óÝz¿6$iC’¾sBÒWPàÍ#*Gþ™€ÜrÆi‘$ WèäL5[NnôÞºÒ¿,éÈ{sêbB× $w®T SPÂÅ_3½[óTOÅHô°äΙ'¹%¬É”†gþÆêYãº'Zc0j2¼AX -ÿêÚ Âï}¸0“Šk~N–ˆÉß U©0ºLƒÊ#1ä‡c¹ÈaxÏ¡Mi3Áú¡ÃØ—b£}³•àÁ`pø~HDïÁ·ѳ7|»û<êÉÁ÷òLÇÒó¬‚ÜR³~E£RÔˆç+xŽW«´O£Tæ ,'$ X9¸¬YpåÞ½úûáPª„YÇ»öƒ-³BºÌcXà³Îs¿ß~Ô,03ø6ý>+–ˆSh<è”÷•A 1ËÀèG]DÇkóôËà{Q¼¾á™¦“ UÎkðå1æF]ÓI——#³ßã¥Ùkê÷67_ŽÇnÓÞ‘>Dak`™ïF+çá&ô…‡'„-ƒ+ä)ÂC É©$ NcÐÊó€_û½·ñM/¬"âm‡aÍý· Ä$N°÷Õÿ\Æ!Ç<›Oo¯ú7³~z]Ób>ËÏÐï×_>]Ó·àbäÒg_âÛ?ê8úÉpàäò ¿­ªñ»ÏÖùâj²¸8×wÍ.øôÍò诣ÿ/Ù„îendstream -endobj -1254 0 obj<>endobj -1255 0 obj<>endobj -1256 0 obj<>endobj -1257 0 obj<>endobj -1258 0 obj<>endobj -1259 0 obj<>endobj -1260 0 obj<>endobj -1261 0 obj<>endobj -1262 0 obj<>endobj -1263 0 obj<>endobj -1264 0 obj<>endobj -1265 0 obj<>endobj -1266 0 obj<>endobj -1267 0 obj<>endobj -1268 0 obj<>endobj -1269 0 obj<>endobj -1270 0 obj<>endobj -1271 0 obj<>endobj -1272 0 obj<>endobj -1273 0 obj<>endobj -1274 0 obj<>endobj -1275 0 obj<>endobj -1276 0 obj<>endobj -1277 0 obj<>endobj -1278 0 obj<>endobj -1279 0 obj<>endobj -1280 0 obj<>endobj -1281 0 obj<>endobj -1282 0 obj<>endobj -1283 0 obj<>endobj -1284 0 obj<>endobj -1285 0 obj<>endobj -1286 0 obj<>endobj -1287 0 obj<>endobj -1288 0 obj<>endobj -1289 0 obj<>endobj -1290 0 obj<>endobj -1291 0 obj<>endobj -1292 0 obj<>endobj -1293 0 obj<>endobj -1294 0 obj<>endobj -1295 0 obj<>endobj -1296 0 obj<>endobj -1297 0 obj<>endobj -1298 0 obj<>endobj -1299 0 obj<>endobj -1300 0 obj<>endobj -1301 0 obj<>endobj -1302 0 obj<>endobj -1303 0 obj<>endobj -1304 0 obj<>endobj -1305 0 obj<>endobj -1306 0 obj<>endobj -1307 0 obj<>endobj -1308 0 obj<>endobj -1309 0 obj<>endobj -1310 0 obj<>endobj -1311 0 obj<>endobj -1312 0 obj<>endobj -1313 0 obj<>endobj -1314 0 obj<>endobj -1315 0 obj<>endobj -1316 0 obj<>endobj -1317 0 obj<>endobj -1318 0 obj<>endobj -1319 0 obj<>endobj -1320 0 obj<>endobj -1321 0 obj<>endobj -1322 0 obj<>endobj -1323 0 obj<>endobj -1324 0 obj<>endobj -1325 0 obj<>endobj -1326 0 obj<>endobj -1327 0 obj<>endobj -1328 0 obj<>endobj -1329 0 obj<>endobj -1330 0 obj<>endobj -1331 0 obj<>endobj -1332 0 obj<>endobj -1333 0 obj<>endobj -1334 0 obj<>endobj -1335 0 obj<>endobj -1336 0 obj<>endobj -1337 0 obj<>endobj -1338 0 obj<>endobj -1339 0 obj<>endobj -1340 0 obj<>endobj -1341 0 obj<>endobj -1342 0 obj<>endobj -1343 0 obj<>endobj -1344 0 obj<>endobj -1345 0 obj<>endobj -1346 0 obj<>endobj -1347 0 obj<>endobj -1348 0 obj<>endobj -1349 0 obj<>endobj -1350 0 obj<>endobj -1351 0 obj<>endobj -1352 0 obj<>endobj -1353 0 obj<>endobj -1354 0 obj<>endobj -1355 0 obj<>endobj -1356 0 obj<>endobj -1357 0 obj<>endobj -1358 0 obj<>endobj -1359 0 obj<>endobj -1360 0 obj<>endobj -1361 0 obj<>endobj -1362 0 obj<>endobj -1363 0 obj<>endobj -1364 0 obj<>endobj -1365 0 obj<>endobj -1366 0 obj<>endobj -1367 0 obj<>endobj -1368 0 obj<>endobj -1369 0 obj<>endobj -1370 0 obj<>endobj -1371 0 obj<>endobj -1372 0 obj<>endobj -1373 0 obj<>endobj -1374 0 obj<>endobj -1375 0 obj<>endobj -1376 0 obj<>endobj -1377 0 obj<>endobj -1378 0 obj<>endobj -1379 0 obj<>endobj -1380 0 obj<>endobj -1381 0 obj<>endobj -1382 0 obj<>endobj -1383 0 obj<>endobj -1384 0 obj<>endobj -1385 0 obj<>endobj -1386 0 obj<>endobj -1387 0 obj<>endobj -1388 0 obj<>endobj -1389 0 obj<>endobj -1390 0 obj<>endobj -1391 0 obj<>endobj -1392 0 obj<>endobj -1393 0 obj<>endobj -1394 0 obj<>endobj -1395 0 obj<>endobj -1396 0 obj<>endobj -1397 0 obj<>endobj -1398 0 obj<>endobj -1399 0 obj<>endobj -1400 0 obj<>endobj -1401 0 obj<>endobj -1402 0 obj<>endobj -1403 0 obj<>endobj -1404 0 obj<>endobj -1405 0 obj<>endobj -1406 0 obj<>endobj -1407 0 obj<>endobj -1408 0 obj<>endobj -1409 0 obj<>endobj -1410 0 obj<>endobj -1411 0 obj<>endobj -1412 0 obj<>endobj -1413 0 obj<>endobj -1414 0 obj<>endobj -1415 0 obj<>endobj -1416 0 obj<>endobj -1417 0 obj<>endobj -1418 0 obj<>endobj -1419 0 obj<>endobj -1420 0 obj<>endobj -1421 0 obj<>endobj -1422 0 obj<>endobj -1423 0 obj<>endobj -1424 0 obj<>endobj -1425 0 obj<>endobj -1426 0 obj<>endobj -1427 0 obj<>endobj -1428 0 obj<>endobj -1429 0 obj<>endobj -1430 0 obj<>endobj -1431 0 obj<>endobj -1432 0 obj<>endobj -1433 0 obj<>endobj -1434 0 obj<>endobj -1435 0 obj<>endobj -1436 0 obj<>endobj -1437 0 obj<>endobj -1438 0 obj<>endobj -1439 0 obj<>endobj -1440 0 obj<>endobj -1441 0 obj<>endobj -1442 0 obj<>endobj -1443 0 obj<>endobj -1444 0 obj<>endobj -1445 0 obj<>endobj -1446 0 obj<>endobj -1447 0 obj<>endobj -1448 0 obj<>endobj -1449 0 obj<>endobj -1450 0 obj<>endobj -1451 0 obj<>endobj -1452 0 obj<>endobj -1453 0 obj<>endobj -1454 0 obj<>endobj -1455 0 obj<>endobj -1456 0 obj<>endobj -1457 0 obj<>endobj -1458 0 obj<>endobj -1459 0 obj<>endobj -1460 0 obj<>endobj -1461 0 obj<>endobj -1462 0 obj<>endobj -1463 0 obj<>endobj -1464 0 obj<>endobj -1465 0 obj<>endobj -1466 0 obj<>endobj -1467 0 obj<>1<>6<>7<>12<>18<>23<>33<>36<>38<>43<>50<>55<>57<>60<>73<>90<>93<>100<>109<>115<>117<>119<>]>>>>endobj +.(DëèàYóÑ'8¦3Ö•8šœ&Жi´À_L…Ÿ?Cÿê„6¾|ßí«çœNä?Lß“`õŽQ×tÞžÓx6¿c©Z¦©Ÿ¨ 6ówmÞ,–¶7j3¯Ž?Náq‡ÔÜ!æu„a9ÒìZ}Ç–¿äžÖϳèíè)¡VªyólZ« +åGòÐ17á6AAi0Uû‰÷„ðRö‹¥õõj„ã sóÉA¼lò:k/Æˉ3¦¬Ó‚jॠ¼^~¹Xn·Náᣥê_˜xqÍÔ~s Š…¶°´«;íÕʨwÑoÏkÐ$}Ê‘9‘øÐ ‹sÂbNûl¿lÊŠ]Ád‡S¶:¹zKUýÛgA=LYÐj/qV8NÐw-@%¯­Œ¶NåB¨çã·VÖOëÐËÕs+›Zh Å´¡NÅA¨ƒoL´•ÐP`/ €´¼üÜç@83ÃŽ:¼_é´hÁ¡×ð…!z/û@®p¾Ñ%8T›Â}r5{qÉ6_o6Ÿè£?®™Ô™Aç݉çÎØ·ÈÍ·V§0Öè§iùà¤TÑr·”•» +¸‹„um=¹Z„bܱƋSšLÁõÙ”õÆ‘’nkóÛ7🵙 >îLŽçcZöÞj2[D³i‚ûöÆñ”}|Ú ¾ þ©q»endstream +endobj +1313 0 obj<>/XObject<<>>>>/Annots 814 0 R>>endobj +1314 0 obj<>stream +x­V]oÛ6}ϯ¸ÈKS –#ù#O뺥-´[ã6К¢,Ö’¨‘”5ÿûKJŽëÛ†À±d’÷ãœsïåŸg)]â/¥«ŒfK’õÙer‰_ÿ>½=Ë®³dF‹e–Ì©¦yv\ o=ð~Z,²dIóë+²EŠÿÅÇâûyu6½»¡ì’VòY^]Ó*iàyñîããê#½–R9G¢^ r¦³R‘4¹¢ôæËÃËÕ·`%½ŠV&3Ž~•_¼o¼5y'½6MÜ4§46eWˆ›¢Yí(W;U™Vå¤ á±!Õì´5M­ŸÐ/Ãë¨sŠ]Ó׋7¦‘µØ@_”up¥› =ìWõ×—ä {¾¤I:‹AËRÉ­nÎqVTÎж1=::—¦®µ?Ç©FõÇ™&1ùŽvÂjÓ¹à{mEcŽ$¢]+'Ä\NœŠÆ4ûz<Ø9Ñ— +™:o#@ €ºŠùûˆÈR´^Ùd0îæŒØŠ×r#;F…ð,¨6¹.4»Ž)~´_˜®ÉIx*½oo§SÇ„&ÆnâÓTî\RúºŠTÝÐ1ŸÁ1>ˆÁ:ûŸ¡v… k!Kݨ§Ýd»†Cn»u¥eµ`Óë*2jUkœöÆî©0vX!Ÿcõ!EAX>b¸r+6ʽ¼²êr;ûŠ¬Û7âÊé›ö€vÝmB˜¨<ï †üz±wŒa¤td‹ówÊÂ'™ñhwBsiœlqQ¥ÀŒ‹j2K#otCÕôjý pÌï¦ ’ŠÎÈ›ÏïQ…Tˆ¾´WôøøHkkzÇé°$ª +¯¼¡;²$Mã!Îî$xÝäz§óNTT@†ŽË5zDj6+c¶,¦¸e§¹ò®s¼1Vöm”§æGUuyÈškR¸mdŸ ë‚*˜eÖÊ÷ +]A4ûÀÕ vØ? u´>ÖÌgô Žôó§{ºý±äFOÖºá8ðòÏ bç¿Ñ‰½“]k—9Ô[m˜"YéÐây½üÌ]ÝÉÅ i2oÖTdX}¼„¦sB`n¨×¾|ž´c9„h:O}iPuC`Þ*xeæ¶Jµl¥¦߆rqÈOŸ¸f®qÒ êƒ9ãÖªB¡5çT+_šü©¢H! .:qèü¨vxoŒ§oóX±GiNGNWˆ ­»2"î*„‰c çÖ¯¨5}˜ÙÑÒ¨ÛïÔÐ÷}"÷ B&Hgš„`øu yäËÙ½xgzFg£‚ÏPi³MÂd@þÐD…ï9G4^ÐƧÞ~øLo»çრ+¦ê×— }0Ù—±¢|žïo+ÚRKà )*ÇK ­´Ö †Ô§]È^ÙB`j#ZŽÁð¡k°]#0î 8¼G"§­-u83: Üï0¶÷ïšz,®ïá<­Gp·áF;t¦P‡É ò€çX Ã,´p¯ZìC[/©¿DÝ©Ž3Ð9ÌCäúèH?ÃÒ´ûq6†‘p¬”Ѷ"Ïöxé© j 04rá’Åêº5z”ï‰\®Ð½ô'²&5¢V¼„«ãdTó{\еÁò`c ½Æ +geöìq?ákÑqcõÔHÍLØ}@}‚+nsùEš;Åëá2ô©‹s¨_^žÞ-Ž.iÕƒ-Orºmãø»ÅûO‡ùËmÓ”-z½¥2½¯ À1Åǽt¡»Çö<µÂ¹ÞXp·oUqz—1\ÀtŒj4xqH +·g¾®^dOy-ÕòÎJwïã`XÇÄf1‚éÝõö$[Ðd17Üÿ~‹ž/¯“å"èJ—ìñ×ÕÙïgìðHendstream +endobj +1315 0 obj<>/XObject<<>>>>>>endobj +1316 0 obj<>stream +xu”Mo›@†ïüŠW=90`;>ÕiåR%UPs‰­—Á&‚]gw±•ßÙ·ùP…@†¯÷™¿FR¾2,rÌ +È.J“糌Ÿóå‚Ÿ9߆PG—e4½™#ËPÖÞ¶X.PV`û4E)'å®±86m iH8‚@Õ’N›7HѶTÁŠn# µr¢QÚÂí-[7žYÝIlRž&MBI°¹½^_•/QŠ8›%9'ž8±ÝrHy°Ø¡äîé,A(BöÆr-§ÕüË,œ‘f¬§¢µzß±œ!J|è˜cçE2÷±ü~ƒ’…æ" |,CaCÐ_?'ß¼¡·'>Èô& Mb3|8!›@¨ŠS׃r%:V¸FÛ0]I¿* †ö”¿Ö=‡Ò*úvõOÍ7ìÅ–ë«ÃÉ@ûHØÆ…4Rw»zí=rn˜ÓŸ’ Ú‚ÿؘœyjIØ¡/'ʺo™¡ÒŠ>’¨uÛê£çâ²ìxzs>²yGÚ·/®°Ú[22+~ÿêN´Ù®¦üj´v±ÁÃúçåú9·aùÈ÷Ýh<îH1ƒ7Ýã(|—5:2Œ¦ Ò˜ÉP[îsÏúü<~©µÑ¶Û ÞŸˆ ˜ÿÎúj(ë?Zû}åwƒ%Ç÷ëy³fIáçož`8\ŽÄ²9ïár†,_ î~á Õ–½Ÿfá­¼gœ¼¼ì/Ò ñöî±¼ÃZJ²a ߯ڡà¡÷®ób™ç9ÿ+°[–-ü·ë2úýX—Eïendstream +endobj +1317 0 obj<>/XObject<<>>>>/Annots 817 0 R>>endobj +1318 0 obj<>stream +xuW]oÛ6}ϯ¸0,ù+vÜŶ¢kW`[k`(ÐZº’ØP¢FRqüïw.)9®’!±,[äý8÷Üsé/4Çß‚î–´ÚPÞ\̳9ÝÎï²[ºÝÞá~‰—c*å–ž.Ÿ?^,+<\-ÖÙ†Z¬ï²ÕðÉЗhh¹ÙdË熶[/®«ôz‹ÝÉåjÛèóÝnê«g^ÓrN»o+bXø&¿úÌuA·½ë+ÿj÷ýBV/îÒê›Õ-ÂÙWŸÚàlÑçAÛ6-º¥ÅbX´¼C>X´«™¸QÚ* +ÇÞSiíû +±‰OÚ“WÍ^ý¯™u•›ÓÍrü`â/ÃÊ3u ÌÝàba@øûKm˜ö ËLGÛ“ï÷¤Îüdô›ñöšºdÌ3“. ‹jå)¯U[qáÀ“&æé8îñׄ¥¦F±2m$¦§„䛆Ţö ©@ÞJ¸ˆ9{9/…¸¨°b¼éóZÞ%‡\µòî<›R²­ÙtœÊï±øÐŽ^3ú"à Š@¹ xI"G$_p¡s¸üŽùTÎöÙ’:¶€ƒµ¥kú60;±«qE¼×äïµ1žT[—@7øŒþaŸ³~•£F0OõÝÛ>¢¹ NÈ`â¹³Þë½Ap­?°ƒs­¬©”~­«a€9K”0––Ç8Šý(¥‹ufDÖ#@º,øíØM\–Nc‘9^ž•H" däÃæh/ ¦zo©µà‘÷½ÔPv ž‘‰$š +êÈmn›.ëœ 6·Æg¾ÙSË?À‘H CŒŽûa@€ò$ìÈm2ú4dÚûŽóˆmˆ´ 8Ún¤ð1ƘßP¤-uÕ;%yZˆ[)6€çAJmÉ ‚R3; @JÌ’âŽ!ÇÀ#Ô\áõíJppp ú|{Eë9ôÍÊ +@ËÎHhŸÚG!ú¯QÌ)ö_Ѳ4¶‡ÑÒû–Œµ÷°gûªŽ Ûð#ªÊå5؉v=ÔZú ‘nÁ„ äËsèxzÅ>š¤žÒ>ðž:U1Ø‘¡{3›*ÝÍdãT£d}ä–2¤Û2;ûð‚4¾K‚•Ä*Êí¹`¡½.04*§WŽÄÎY‡füSðÐI(N•0I¬Ý?h z7ÈUÒ˜$‹ؘØHñ\ýŒ>l´ %õ‚Æ‚²¢®`ìC§\#õûC%…Ï­Cq ~GhÒã´¸HÃÃ_2XC†‚ZU­õÚÿB;Qvü?°;’ndX¨öY‹ý¡ÛÜô£b.DÑ8¡î +uŠñI¤…<­ˆ¸ïÁ$¢Z4´Rz!nàG• YÒô)ôŠ'VpI¢Ü½„,Ò:I?£pž’G‚½ôˆÁˆË‹ zÏ­U&ð BòbQVÊSí1• + a Ä<™÷ ‰•`S*Œô'š£“c‹9.{/ë`b +åŒBc `“ôÅõçDÄ¢Ö ±ã|Œuƒ”½Éè=ÃZq×(_*šˆyJ݆ L«H·Åœ|mØö‚ëѨ'¾èœF1ëi#Ép%z'UÁ˜æ‰jE¤«M£§Ðþž|§òg£z'J™*[<FvK`³ëáàsu–ÍÛôh,ÛÕ©OÓ÷8/ƳÒæD& 7YžÑ×s,uê¨Ôg HJÓgÇ–iÆï=ÚÔ¶2¨¡xbÞ3w0‚ŽÞÃJÒ Æ’q]FHLŠ‡,x~3†þZNy‹ìvµÄ1mmñŽƒÚ)zK‹ù©ãÃxN{K³Þ»™±¹2ƒŽ½Çç*û©™lÛúöŒÐ ŸTöfŒ Gð›ð—rŒUäšHMc2C^Œêäa@.íyªé!ÎÂËáé¥è•´E«p^q?f4&™ˆŠ¢=¦FaÒ“2‚ÔÉ o4ú‡ž6 ª–Άáu”YÈTƒ3\ +ë>#aê–IP‰T¨¶Hn¸Ê{HÎ!?â`…!ô-ŠJ¡Ëê…žóÞé€@>pƒ¡‹.Œ A»ˆC.9RpâynÐÁíÓïüÈX¯ÖBœç¿Fn7Ûl³^â— /[±ùûîâï‹ÿ¼ºU6endstream +endobj +1319 0 obj<>/XObject<<>>>>>>endobj +1320 0 obj<>stream +x•WKo7¾ûWLu© IJä‡ìèÁAlÀ@㺎Z €/Ü]TI®eýû~3ܵ Ù>A€„Krf¾Ç õïÁŒ¦ø3£‹:SÙL'SšÏ¦“:»¼À¿Oð7hªåÃÉùÅäò½³óùû'æïø²88¾9£ÙŒ5‚Ï//hQO§´(Ç‹¥¦ÃÅOìAb²gÛbRzWçåá蘴Ka›χ½d}CV?iK¿ïï7‘âÖy·m}icÒ’¢½{M¥‹®ùàž´T‰–*R¡µ£.ꊌ#o+8䔎f§ÀcQŸtˆÆ»H¾¦ïª-)‡Í|Ò¸È&eŽ×>P¡ÊÕF…*RéÛµJ¦0Ö¤- ÚX'}“ù䌃\E.ãàð¤l§9 ãÊ ç¿õ±)•>T¤(šÆ™Ú”Ê%»vrÒd%5¼d +h‘²wCr7¨¬õ1½Úí×:ÈÞ(a[µ%ç9<W§Äw.M³Ô•)G§ºÓ* …A 0Âr¡) Æç©=쇋élú §X½V¡‡\Ñ?×?ȪÐhzò¶k5ÃͪTRRËñÍgšA¢¬Õ£Ó³ ù­K:8eI‡àCÌØÂľ“‹Éœ©¹­¥ÄF#=ÝÞ-®î®þ ë‡‡?FÔê"C<À?H\a˜LÂG݈Բr`„¢;§Ÿ×ºL()Rv¯ìÍ¡Ð9't›˜èuð…*?àÛ´P¼@µê,ß +­°TêÀ’ÄÎ_1Úœ`ÎáqÜ9(PˆÛ‹»TOè|ßÞ¤ 0“n)ú:ñÒãanP/ bX” +ÔÁãD[TüÉ1¢Í—*À£*Å%·‚ë.@ýåjCVŒzcÚKöû·// xmžò5sB‹¥x£ö òF +0ò–^w–ÑÙ±J+¿Áÿ?çf¥NZ[öÔ^DXÍv¸=ÝŒ,ÔèCL3`ònŒKßYæ%ú¾Zú %Ïg‚¯ºêßþD¦¦µÑ ÝKÔªïBìsïD]½•Í(!kQˆúú–•Z¯áC`… hþ ‚QìŠÊÊä<Ä©í6°²+¬´^‹Ú÷ð‰ÒÙy¹Çe$(²çÛDŸ=É{+Mó-@ z&‹ÁæÆVyÁà7y|3Œ +¶ißA›ªÈrã‚ò®×fîw©ªbÊAðë`Të*-‘ϧÙG‚(ã+¹Gõ8êVÌÍ òîW° oBi¬§-ªâyÄâÓnžT,:†”ÇRƒ¾Èåñ\ÐrÜ‘@<â\¨™žÐE©ÒÔ2|dª/Ë.€Ld–ŹVt3ˆµ…öÓ´rlå œuËmÆ*×tÜÚÏ1þKe"¾qß¡Ïkú8/zCÓ&ñœzÓÝ­)‚jÃ59„à28»˜%f+7=JÇcÌÖƇ!ÒϪäQ÷6!°wÆ«Én½_‰’Фôxý„Ê‘ SÎ8í ’„Ñ:9ÓcÍ-'½k{¬ôƒ/AywB]%ÐÕ4\£æs_¢¿Õx?°þæIž:qŠèÑŒ;gžud2ô’); Ìü{§Kdëži…‘¨m¼è +¢Ot®®]#ü®ƒÖ`RqÅO¨ýâ0íÔ™ +s+—9Py¤ ­øñPì-FÞp ("m–V?nõRhO³< ßǽè=8ðã6zé +÷·_G½,ø^žæXz™R0Zêbv®ørTŠñd…ÂñÒböi” +Àì…å„ +—5k®Ü»ó}?J•0åx×n„ƒ2+rË +Fó{qxæû‡Ì=ߣ?Öà +çÛ€ïN—2a`ýx‹àº6Ï¿ ½.j”Ž·6ú$‡éG#ƒ”3zñ³¢®é¨ËËCósÇ»²÷ѯk¦]ŽÇnÍÓý"}"pÂÆ M~­<Û 7¡o<0afV!OdHN5x ¨ÃUžü¶ïûßôª=D¼ç0 ™y ¹ÀFâþ]AQý¡ 9æy||sÙÿ”™áÇÓôò”æ§Óüèü~õíËÝÿc–¾úÏÕþ!ÇцGÓÏòø|ûH=›_Næç'xÊâq:›}æs׋ƒ¿þAÐ…eendstream +endobj +1321 0 obj<>/XObject<<>>>>>>endobj +1322 0 obj<>stream +x•WßoÛ6~Ï_që‹ÀVl9Nœ¼ ÛúcźtC=òBK´ÅD5’Šãÿ~ß‘b, Y·¡¨[K<ÞÝwßwwþëlN3ü™ÓuJ‹+ʪ³Y²ZÑñÃìð<™Ñb~Ìér¶Lnh¾H®ÉHÚâð æ/8Œ/ts,èruÿ¦øëOþ¸>»xCéŒÖ[8¼º^Ñ:÷¦x’?Ý6T‰¦QõŽ~þüuýù|ý“KšÏƒÉ4]%)ŒÆ_œ0Ží•+苨6‚ð#ʦ”NHP-÷´;¹rÛÖ™Sº&eI< UŠM)Z’²ÖY;ª¤+tN÷ãR=Êò@Ns3š"_ï8+D½“÷çxƒPk±“ä`ïY±wœé +osÊDYÊ<¤±ìÒ“­6Þ@æʦ8N:éUrɉrp[e¬#UU8/œ˜Â" DÐÚžûèðNÐoošp<®ŽCÆëJ(Ì+|úh‘Þ†' F„?¢€’L×ÝXŸ1û«5`×µÇ_a@•†öÂr¼9ǽSO!ðRY‡Gxn,•puµ+œ%N³Êt¨Dÿ{m­\L›ÐGç/·º’À`§2²®ÝnCêVU +Ép´iå*¯GŽ,œIz’/eYÒVBÙšR>“•®mì°Ÿ$„äsS2t2Upͱp w닯é/ί>?äâÙŠ\’Ø‹CB_ Öˆ¾,™ÀÁŠíÅ I¦r¸$èLdcô R8iÉçdÊ*&t§ø +Ãxô—Xá´±£p*áó¨…¸F +ž7þ®à 1êI•r‡¬ ­Ø¨R9V ]ø§9s”ov +hU¼~T@XÔ>“ÖBa w©™ÀZߟ0m]3:¡þ3*‘*0k˜ÒÈS(诒Õ0i&ÀðÜiê®h‡™T]H£ÜèÆH"bòm!¶Ñƒ–ÇBarÁF¢Œ€ÄéE5Èö´þ¹±N=I'ôÎË2@mu•|=Œç@ÙÓ2Æfò-FО…Yêݮǻ~PŸØ˜ÿÔ- Œ5îw{]ç  ãžºW +ñºDìÝBÕ0¢– Ô×sä2ü{Ì*áF–'@ :`|Á1¶§1°À>0®­Õs:ÔÖÚÖ› o±“‹÷±«/¤Ë.^÷ç*%»ã)Æ­Žy’Wl?ÅHÀÐÎÇóÄ߇¯/#RäžV®ËB5¸ú!mO­ªÅ8ÛH:M/¡÷h `:·`R7ôu eˆkò  tH4•J˜Ãd€“Gã­üä‡Ýi•Z?úŽvq¹á]cž\.R€ºLVø‰†ÜoŸo—³ô6F4áh‚]‚ÓyêM7É,X¦Gˆ–Ø"®–|ݯ¢Î€P¸7Å}÷›£Ú÷«ãJ4î 7Š-“ÁîÖ.¥¸x`‰$éo 4ÍèDâö MÛ^±î¸ìñŠEH Ñt™&¼Ë!Š4ñ9ñUÃG¯l^/œ/Šõ}×U4^þ)Ž˜·½ÖÓÑiŠ'kp¡ñCE˜ÂhCùÿ8r2äs·%„༕(mPè€E|ºgÛb4ï±sâÇu×6cg½õ~ŒÈâT7Ða>64µËX³½ª7ªÎYqœÛ^·eÞÙnY™›œeÒ8Æ0WFf˜ç~÷¶€}S(Ãqä W‹ K Wxëõ&H°]ÿG0`Nq #Óþ+»B' +÷M]· G¹ô8ëÃ;¡Ÿ¾OÂ(ÝvUÇríwA.ºÿ€5Cl0£â:¢:iü+ÛŸ‚`W½µv¶Jæ ¯Ë'¿^~„\^­’«eÚõ¼tÆW¼[Ÿý~ö7£"2cendstream +endobj +1323 0 obj<>/XObject<<>>>>>>endobj +1324 0 obj<>stream +x…VaoÛ6ýž_qÀÄdÅ’ÇÙ>mI³hq° óPÐes‘H•¤âúßï%'©šv âXâñîÝÝ»G~>Jh„ß„ÎSO)«ŽFñˆ¦éY<£ÉìßSüYIEX˜$³xúÚÂx4~mÇlF£øða7x€CöØú¾˜Æ“ÖùïKö(O°>½¾ tD˧ç3Zæao²ÁÂX/ÖªT~²ü÷èôzBIÒšÓYœÂxp+ªµ ±ŽŒ&|U¹$+ôF’)¨.…/Œ­­O~+Ii/m!2I¢,Ûg›ÚšGÞ®iãa°{Ç¡G4LÆmÀÌTµðj]ʘ–[Xf[QÃ%eF{¡´{Š9tµÌT¡2Äd ØÅ×HØ Ó:§Æñ7Ç©Äm¦”œw™Ž'( 2}»¸»ÿ¶ çèUX¼²{ÚXÓÔ0sI!E=tñ…Íi5DÚîRQ™(Ñ2áŒv«NS‚~gzå>©P¥„×Sé³Óö §K³Arù×PmÇ!*ªÜͯyCº©ÖÒº®Ü%®cD×z•V¾Md5X0Ì>°ö˜Þç©‹"òŠ;²ÛzÐf쬩¥ƒA…ò?¼„ =ĽЫÁ–KöåF:}ìóí¡^HÇóM­rÎlc˜p†¸‚\Êú™ %˜Cª…m9Ÿ6É„½iŽÑ6Ö}´´œªð¤˜`ÚÊ(*¢¯Ñ=Þñ(JÀš_E0SÙ–*)Pð‘MÛâðàôbþ=ŠctêÓûßîÿáL†î™'e5˜c+j‰nLGø¡¬±,,÷<‘oûûnTj+³²ÉQþaˆ?=;O"ŽÜ‹Ù¸<Öfmòý1ý¢„ÉÀ ¦,( ü¼ Tƒ¤ÎLÃ3Í 0|Ö`4«{à?“–KÂÅÚÆ +hAxÃ|.D;„¨Q¯3(™m0­LJ®"ô  úi¨vÊoÌ¯Ê ‰1;™·zÔO ¨ ç&kxjaŸ ôíð5W T«Ñè$9ùDüµæ «…s»|5˜€[ Õôḽ¼¡;­¾´/5´®’!_M¦Ìé)³XAB»˜¯Äž´Zæ·Ûªš…Z{Z^.Nç  òÙ°y,Z}†%Kt¯‚™O2ð$¦¿P>ÖÅÐ&Þ=…zn0Û7µ§\xAïŠgÕxVÏYr×Ù]ð@£àw7WãÙ]­žó¼²ŠS¦Ûw·1Í‘’#ñnp‰ +kªPh¤¯c—™#Q®½±ápzqBÀIÔ*"5&G$ Ý:<•ÞÆÔ±«óïK=/†Q²ãÌù@Ù(¡ã?oÚç áŒF‰•Fg˜û\ 4ñ›&A:º¶¼&¿hОv,¥,<“IÂm ¸.¡Žk+pØ°_g* IŸü×XÛ.w>/XObject<<>>>>>>endobj +1326 0 obj<>stream +xÅUMOÛ@½çWŒFŠ¯¿S© !JE­„„6ö&1¬½awÝŠÏì:NŠS‹c)¶wfÞ¼7Îë„B€_ +YQ +E= HžÃáG­ñ!€4¡dqžá}œ +ŠÃ +}ñ)›ï-4 +Ir0EAFò]Hv°„IŒŽÜÁr±°ˆÈgÿƒÙÏ®˜Ãb”ÄQ)RHÒ¥s `Qx°û<×[wWp¥¤:]¢¿œÌ†ÐÙŠ¶J–máÒî(uifRvçý€{Àšò_ókS|?¤F­VtÃy F+ñ²áHWo7· ª†÷›rywó¦’ È•óz`õ’Á-{ávü’­‚Ch?q ò§†5 ¤|-kŽ«ˆíÕ‹•^éO6¬CþêÊîî ÁÍÇÒï>²ëëíX(nÄ ±B?I>-Q$–ãîûÓÕÍåg¹VJÖyX¶.pßת)D[rM6!ßÍMñ žGøÖÎIšà{µôÎo/Îá^Égl\Ê¢­ycp ¥Sî÷!~8ÿ{© [V¢2o;N-Rˆ"ˆEÃО]-&?&ïu– endstream +endobj +1327 0 obj<>endobj +1328 0 obj<>endobj +1329 0 obj<>endobj +1330 0 obj<>endobj +1331 0 obj<>endobj +1332 0 obj<>endobj +1333 0 obj<>endobj +1334 0 obj<>endobj +1335 0 obj<>endobj +1336 0 obj<>endobj +1337 0 obj<>endobj +1338 0 obj<>endobj +1339 0 obj<>endobj +1340 0 obj<>endobj +1341 0 obj<>endobj +1342 0 obj<>endobj +1343 0 obj<>endobj +1344 0 obj<>endobj +1345 0 obj<>endobj +1346 0 obj<>endobj +1347 0 obj<>endobj +1348 0 obj<>endobj +1349 0 obj<>endobj +1350 0 obj<>endobj +1351 0 obj<>endobj +1352 0 obj<>endobj +1353 0 obj<>endobj +1354 0 obj<>endobj +1355 0 obj<>endobj +1356 0 obj<>endobj +1357 0 obj<>endobj +1358 0 obj<>endobj +1359 0 obj<>endobj +1360 0 obj<>endobj +1361 0 obj<>endobj +1362 0 obj<>endobj +1363 0 obj<>endobj +1364 0 obj<>endobj +1365 0 obj<>endobj +1366 0 obj<>endobj +1367 0 obj<>endobj +1368 0 obj<>endobj +1369 0 obj<>endobj +1370 0 obj<>endobj +1371 0 obj<>endobj +1372 0 obj<>endobj +1373 0 obj<>endobj +1374 0 obj<>endobj +1375 0 obj<>endobj +1376 0 obj<>endobj +1377 0 obj<>endobj +1378 0 obj<>endobj +1379 0 obj<>endobj +1380 0 obj<>endobj +1381 0 obj<>endobj +1382 0 obj<>endobj +1383 0 obj<>endobj +1384 0 obj<>endobj +1385 0 obj<>endobj +1386 0 obj<>endobj +1387 0 obj<>endobj +1388 0 obj<>endobj +1389 0 obj<>endobj +1390 0 obj<>endobj +1391 0 obj<>endobj +1392 0 obj<>endobj +1393 0 obj<>endobj +1394 0 obj<>endobj +1395 0 obj<>endobj +1396 0 obj<>endobj +1397 0 obj<>endobj +1398 0 obj<>endobj +1399 0 obj<>endobj +1400 0 obj<>endobj +1401 0 obj<>endobj +1402 0 obj<>endobj +1403 0 obj<>endobj +1404 0 obj<>endobj +1405 0 obj<>endobj +1406 0 obj<>endobj +1407 0 obj<>endobj +1408 0 obj<>endobj +1409 0 obj<>endobj +1410 0 obj<>endobj +1411 0 obj<>endobj +1412 0 obj<>endobj +1413 0 obj<>endobj +1414 0 obj<>endobj +1415 0 obj<>endobj +1416 0 obj<>endobj +1417 0 obj<>endobj +1418 0 obj<>endobj +1419 0 obj<>endobj +1420 0 obj<>endobj +1421 0 obj<>endobj +1422 0 obj<>endobj +1423 0 obj<>endobj +1424 0 obj<>endobj +1425 0 obj<>endobj +1426 0 obj<>endobj +1427 0 obj<>endobj +1428 0 obj<>endobj +1429 0 obj<>endobj +1430 0 obj<>endobj +1431 0 obj<>endobj +1432 0 obj<>endobj +1433 0 obj<>endobj +1434 0 obj<>endobj +1435 0 obj<>endobj +1436 0 obj<>endobj +1437 0 obj<>endobj +1438 0 obj<>endobj +1439 0 obj<>endobj +1440 0 obj<>endobj +1441 0 obj<>endobj +1442 0 obj<>endobj +1443 0 obj<>endobj +1444 0 obj<>endobj +1445 0 obj<>endobj +1446 0 obj<>endobj +1447 0 obj<>endobj +1448 0 obj<>endobj +1449 0 obj<>endobj +1450 0 obj<>endobj +1451 0 obj<>endobj +1452 0 obj<>endobj +1453 0 obj<>endobj +1454 0 obj<>endobj +1455 0 obj<>endobj +1456 0 obj<>endobj +1457 0 obj<>endobj +1458 0 obj<>endobj +1459 0 obj<>endobj +1460 0 obj<>endobj +1461 0 obj<>endobj +1462 0 obj<>endobj +1463 0 obj<>endobj +1464 0 obj<>endobj +1465 0 obj<>endobj +1466 0 obj<>endobj +1467 0 obj<>endobj +1468 0 obj<>endobj +1469 0 obj<>endobj +1470 0 obj<>endobj +1471 0 obj<>endobj +1472 0 obj<>endobj +1473 0 obj<>endobj +1474 0 obj<>endobj +1475 0 obj<>endobj +1476 0 obj<>endobj +1477 0 obj<>endobj +1478 0 obj<>endobj +1479 0 obj<>endobj +1480 0 obj<>endobj +1481 0 obj<>endobj +1482 0 obj<>endobj +1483 0 obj<>endobj +1484 0 obj<>endobj +1485 0 obj<>endobj +1486 0 obj<>endobj +1487 0 obj<>endobj +1488 0 obj<>endobj +1489 0 obj<>endobj +1490 0 obj<>endobj +1491 0 obj<>endobj +1492 0 obj<>endobj +1493 0 obj<>endobj +1494 0 obj<>endobj +1495 0 obj<>endobj +1496 0 obj<>endobj +1497 0 obj<>endobj +1498 0 obj<>endobj +1499 0 obj<>endobj +1500 0 obj<>endobj +1501 0 obj<>endobj +1502 0 obj<>endobj +1503 0 obj<>endobj +1504 0 obj<>endobj +1505 0 obj<>endobj +1506 0 obj<>endobj +1507 0 obj<>endobj +1508 0 obj<>endobj +1509 0 obj<>endobj +1510 0 obj<>endobj +1511 0 obj<>endobj +1512 0 obj<>endobj +1513 0 obj<>endobj +1514 0 obj<>endobj +1515 0 obj<>endobj +1516 0 obj<>endobj +1517 0 obj<>endobj +1518 0 obj<>endobj +1519 0 obj<>endobj +1520 0 obj<>endobj +1521 0 obj<>endobj +1522 0 obj<>endobj +1523 0 obj<>endobj +1524 0 obj<>endobj +1525 0 obj<>endobj +1526 0 obj<>endobj +1527 0 obj<>endobj +1528 0 obj<>endobj +1529 0 obj<>endobj +1530 0 obj<>endobj +1531 0 obj<>endobj +1532 0 obj<>endobj +1533 0 obj<>endobj +1534 0 obj<>endobj +1535 0 obj<>endobj +1536 0 obj<>endobj +1537 0 obj<>endobj +1538 0 obj<>endobj +1539 0 obj<>endobj +1540 0 obj<>endobj +1541 0 obj<>endobj +1542 0 obj<>endobj +1543 0 obj<>endobj +1544 0 obj<>endobj +1545 0 obj<>endobj +1546 0 obj<>endobj +1547 0 obj<>endobj +1548 0 obj<>endobj +1549 0 obj<>endobj +1550 0 obj<>endobj +1551 0 obj<>endobj +1552 0 obj<>endobj +1553 0 obj<>1<>7<>8<>13<>19<>24<>35<>38<>40<>45<>53<>58<>60<>63<>76<>93<>96<>103<>112<>118<>122<>124<>126<>127<>]>>>>endobj xref -0 1468 +0 1554 0000000000 65535 f 0000000015 00000 n 0000000250 00000 n @@ -3377,1254 +3498,1340 @@ xref 0000024834 00000 n 0000024938 00000 n 0000025042 00000 n -0000025145 00000 n -0000025249 00000 n -0000025353 00000 n -0000025457 00000 n -0000025561 00000 n -0000025664 00000 n -0000025768 00000 n -0000025872 00000 n -0000025976 00000 n -0000026080 00000 n -0000026184 00000 n -0000026288 00000 n -0000026625 00000 n -0000026678 00000 n -0000026765 00000 n -0000026819 00000 n -0000026905 00000 n -0000026972 00000 n -0000027058 00000 n -0000027161 00000 n -0000027265 00000 n -0000027369 00000 n -0000027473 00000 n -0000027577 00000 n -0000027681 00000 n -0000027785 00000 n -0000027889 00000 n -0000027993 00000 n -0000028097 00000 n -0000028201 00000 n -0000028305 00000 n -0000028409 00000 n -0000028513 00000 n -0000028617 00000 n -0000028721 00000 n -0000028825 00000 n -0000028929 00000 n -0000029033 00000 n -0000029136 00000 n -0000029240 00000 n -0000029344 00000 n -0000029448 00000 n -0000029552 00000 n -0000029656 00000 n -0000029760 00000 n -0000029864 00000 n -0000029968 00000 n -0000030072 00000 n -0000030176 00000 n -0000030280 00000 n -0000030383 00000 n -0000030485 00000 n -0000030587 00000 n -0000030900 00000 n -0000031004 00000 n -0000031107 00000 n -0000031211 00000 n -0000031315 00000 n -0000031419 00000 n -0000031523 00000 n -0000031627 00000 n -0000031731 00000 n -0000031835 00000 n -0000031939 00000 n -0000032043 00000 n -0000032147 00000 n -0000032251 00000 n -0000032355 00000 n -0000032459 00000 n -0000032563 00000 n -0000032667 00000 n -0000032771 00000 n -0000032875 00000 n -0000032979 00000 n -0000033082 00000 n -0000033186 00000 n -0000033290 00000 n -0000033394 00000 n -0000033497 00000 n -0000033601 00000 n -0000033705 00000 n -0000033808 00000 n -0000033912 00000 n -0000034016 00000 n -0000034120 00000 n -0000034224 00000 n -0000034328 00000 n -0000034432 00000 n -0000034536 00000 n -0000034640 00000 n -0000034744 00000 n -0000034847 00000 n -0000034951 00000 n -0000035055 00000 n -0000035159 00000 n -0000035263 00000 n -0000035367 00000 n -0000035471 00000 n -0000035575 00000 n -0000035679 00000 n -0000035783 00000 n -0000035887 00000 n -0000035990 00000 n -0000036092 00000 n -0000036194 00000 n -0000036619 00000 n -0000036722 00000 n -0000036826 00000 n -0000036930 00000 n -0000037034 00000 n -0000037138 00000 n -0000037242 00000 n -0000037346 00000 n -0000037450 00000 n -0000037554 00000 n -0000037658 00000 n -0000037761 00000 n -0000037865 00000 n -0000037969 00000 n -0000038072 00000 n -0000038176 00000 n -0000038280 00000 n -0000038384 00000 n -0000038487 00000 n -0000038591 00000 n -0000038695 00000 n -0000038799 00000 n -0000038903 00000 n -0000039007 00000 n -0000039111 00000 n -0000039215 00000 n -0000039319 00000 n -0000039423 00000 n -0000039527 00000 n -0000039631 00000 n -0000039735 00000 n -0000039839 00000 n -0000039943 00000 n -0000040047 00000 n -0000040151 00000 n -0000040254 00000 n -0000040358 00000 n -0000040462 00000 n -0000040566 00000 n -0000040670 00000 n -0000040774 00000 n -0000040878 00000 n -0000040982 00000 n -0000041086 00000 n -0000041190 00000 n -0000041294 00000 n -0000041398 00000 n -0000041502 00000 n -0000041606 00000 n -0000041709 00000 n -0000041810 00000 n -0000041912 00000 n -0000042337 00000 n -0000042441 00000 n -0000042545 00000 n -0000042649 00000 n -0000042753 00000 n -0000042857 00000 n -0000042961 00000 n -0000043065 00000 n -0000043168 00000 n -0000043272 00000 n -0000043376 00000 n -0000043480 00000 n -0000043584 00000 n -0000043688 00000 n -0000043792 00000 n -0000043896 00000 n -0000044000 00000 n -0000044104 00000 n -0000044208 00000 n -0000044312 00000 n -0000044416 00000 n -0000044519 00000 n -0000044623 00000 n -0000044727 00000 n -0000044831 00000 n -0000044935 00000 n -0000045039 00000 n -0000045143 00000 n -0000045247 00000 n -0000045351 00000 n -0000045455 00000 n -0000045559 00000 n -0000045663 00000 n -0000045767 00000 n -0000045870 00000 n -0000045974 00000 n -0000046078 00000 n -0000046182 00000 n -0000046286 00000 n -0000046390 00000 n -0000046494 00000 n -0000046598 00000 n -0000046702 00000 n -0000046806 00000 n -0000046910 00000 n -0000047014 00000 n -0000047118 00000 n -0000047222 00000 n -0000047326 00000 n -0000047429 00000 n -0000047531 00000 n -0000047633 00000 n -0000048058 00000 n -0000048162 00000 n -0000048266 00000 n -0000048370 00000 n -0000048473 00000 n -0000048577 00000 n -0000048681 00000 n -0000048785 00000 n -0000048889 00000 n -0000048993 00000 n -0000049096 00000 n -0000049200 00000 n -0000049304 00000 n -0000049408 00000 n -0000049512 00000 n -0000049615 00000 n -0000049719 00000 n -0000049823 00000 n -0000049927 00000 n -0000050031 00000 n -0000050135 00000 n -0000050239 00000 n -0000050424 00000 n -0000050477 00000 n -0000050564 00000 n -0000050589 00000 n -0000050643 00000 n -0000050730 00000 n -0000050784 00000 n -0000050871 00000 n -0000050904 00000 n -0000050952 00000 n -0000051039 00000 n -0000051086 00000 n -0000051172 00000 n -0000051219 00000 n -0000051305 00000 n -0000051346 00000 n -0000051391 00000 n -0000051478 00000 n -0000051523 00000 n -0000051609 00000 n -0000051642 00000 n -0000051697 00000 n -0000051783 00000 n -0000051808 00000 n -0000051861 00000 n -0000051948 00000 n -0000051998 00000 n -0000052085 00000 n -0000052118 00000 n -0000052237 00000 n -0000052323 00000 n -0000052366 00000 n -0000052453 00000 n -0000052496 00000 n -0000052583 00000 n -0000052624 00000 n -0000052670 00000 n -0000052757 00000 n -0000052782 00000 n -0000052828 00000 n -0000052915 00000 n -0000052961 00000 n -0000053046 00000 n -0000053090 00000 n -0000053177 00000 n -0000053228 00000 n -0000053315 00000 n -0000053364 00000 n -0000053451 00000 n -0000053499 00000 n -0000053585 00000 n -0000053650 00000 n -0000053713 00000 n -0000053800 00000 n -0000053858 00000 n -0000053945 00000 n -0000054039 00000 n -0000054125 00000 n -0000054227 00000 n -0000054276 00000 n -0000054379 00000 n -0000054422 00000 n -0000054508 00000 n -0000054556 00000 n -0000054643 00000 n -0000054684 00000 n -0000054771 00000 n -0000054815 00000 n -0000054902 00000 n -0000054946 00000 n -0000055032 00000 n -0000055097 00000 n -0000055143 00000 n -0000055230 00000 n -0000055255 00000 n -0000055304 00000 n -0000055391 00000 n -0000055445 00000 n -0000055532 00000 n -0000055583 00000 n -0000055670 00000 n -0000055721 00000 n -0000055807 00000 n -0000055861 00000 n -0000055947 00000 n -0000056004 00000 n -0000056054 00000 n -0000056141 00000 n -0000056191 00000 n -0000056277 00000 n -0000056341 00000 n -0000056428 00000 n -0000056469 00000 n -0000056533 00000 n -0000056620 00000 n -0000056645 00000 n -0000056687 00000 n -0000056773 00000 n -0000056824 00000 n -0000056911 00000 n -0000056958 00000 n -0000057045 00000 n -0000057086 00000 n -0000057135 00000 n -0000057222 00000 n -0000057270 00000 n -0000057357 00000 n -0000057399 00000 n -0000057485 00000 n -0000057526 00000 n -0000057569 00000 n -0000057656 00000 n -0000057706 00000 n -0000057793 00000 n -0000057841 00000 n -0000057928 00000 n -0000057982 00000 n -0000058067 00000 n -0000058116 00000 n -0000058161 00000 n -0000058248 00000 n -0000058305 00000 n -0000058392 00000 n -0000058488 00000 n -0000058574 00000 n -0000058615 00000 n -0000058677 00000 n -0000058764 00000 n -0000058789 00000 n -0000058838 00000 n -0000058925 00000 n -0000058950 00000 n -0000058998 00000 n -0000059085 00000 n -0000059135 00000 n -0000059221 00000 n -0000059265 00000 n -0000059351 00000 n -0000059395 00000 n -0000059481 00000 n -0000059531 00000 n -0000059617 00000 n -0000059667 00000 n -0000059752 00000 n -0000059801 00000 n -0000059885 00000 n -0000059932 00000 n -0000060016 00000 n -0000060097 00000 n -0000060145 00000 n -0000060232 00000 n -0000060280 00000 n -0000060367 00000 n -0000060417 00000 n -0000060504 00000 n -0000060552 00000 n -0000060639 00000 n -0000060688 00000 n -0000060736 00000 n -0000060823 00000 n -0000060871 00000 n -0000060956 00000 n -0000061001 00000 n -0000061087 00000 n -0000061130 00000 n -0000061216 00000 n -0000061257 00000 n -0000061343 00000 n -0000061392 00000 n -0000061478 00000 n -0000061524 00000 n -0000061610 00000 n -0000061655 00000 n -0000061741 00000 n -0000061793 00000 n -0000061879 00000 n -0000061929 00000 n -0000062015 00000 n -0000062061 00000 n -0000062147 00000 n -0000062190 00000 n -0000062276 00000 n -0000062320 00000 n -0000062406 00000 n -0000062449 00000 n -0000062535 00000 n -0000062580 00000 n -0000062666 00000 n -0000062704 00000 n -0000062790 00000 n -0000062832 00000 n -0000062918 00000 n -0000062961 00000 n -0000063047 00000 n -0000063085 00000 n -0000063171 00000 n -0000063213 00000 n -0000063299 00000 n -0000063343 00000 n -0000063429 00000 n -0000063476 00000 n -0000063562 00000 n -0000063610 00000 n -0000063695 00000 n -0000063896 00000 n -0000063946 00000 n -0000064033 00000 n -0000064083 00000 n -0000064169 00000 n -0000064202 00000 n -0000064251 00000 n -0000064337 00000 n -0000064384 00000 n -0000064471 00000 n -0000064504 00000 n -0000064619 00000 n -0000064706 00000 n -0000064731 00000 n -0000064813 00000 n -0000064900 00000 n -0000064985 00000 n -0000065072 00000 n -0000065105 00000 n -0000065160 00000 n -0000065247 00000 n -0000065303 00000 n -0000065390 00000 n +0000025146 00000 n +0000025250 00000 n +0000025354 00000 n +0000025458 00000 n +0000025562 00000 n +0000025666 00000 n +0000025770 00000 n +0000025873 00000 n +0000025977 00000 n +0000026081 00000 n +0000026185 00000 n +0000026289 00000 n +0000026392 00000 n +0000026496 00000 n +0000026599 00000 n +0000026701 00000 n +0000026803 00000 n +0000027180 00000 n +0000027283 00000 n +0000027387 00000 n +0000027491 00000 n +0000027594 00000 n +0000027697 00000 n +0000027801 00000 n +0000027905 00000 n +0000028009 00000 n +0000028090 00000 n +0000028143 00000 n +0000028230 00000 n +0000028284 00000 n +0000028370 00000 n +0000028437 00000 n +0000028523 00000 n +0000028626 00000 n +0000028730 00000 n +0000028834 00000 n +0000028938 00000 n +0000029042 00000 n +0000029146 00000 n +0000029250 00000 n +0000029354 00000 n +0000029458 00000 n +0000029562 00000 n +0000029666 00000 n +0000029770 00000 n +0000029874 00000 n +0000029978 00000 n +0000030082 00000 n +0000030186 00000 n +0000030290 00000 n +0000030394 00000 n +0000030498 00000 n +0000030601 00000 n +0000030705 00000 n +0000030809 00000 n +0000030913 00000 n +0000031017 00000 n +0000031121 00000 n +0000031225 00000 n +0000031329 00000 n +0000031433 00000 n +0000031537 00000 n +0000031641 00000 n +0000031745 00000 n +0000031848 00000 n +0000031950 00000 n +0000032052 00000 n +0000032365 00000 n +0000032469 00000 n +0000032572 00000 n +0000032676 00000 n +0000032780 00000 n +0000032884 00000 n +0000032988 00000 n +0000033092 00000 n +0000033196 00000 n +0000033300 00000 n +0000033404 00000 n +0000033508 00000 n +0000033612 00000 n +0000033716 00000 n +0000033820 00000 n +0000033924 00000 n +0000034028 00000 n +0000034132 00000 n +0000034236 00000 n +0000034340 00000 n +0000034444 00000 n +0000034547 00000 n +0000034651 00000 n +0000034755 00000 n +0000034859 00000 n +0000034962 00000 n +0000035066 00000 n +0000035170 00000 n +0000035273 00000 n +0000035377 00000 n +0000035481 00000 n +0000035585 00000 n +0000035689 00000 n +0000035793 00000 n +0000035897 00000 n +0000036001 00000 n +0000036105 00000 n +0000036209 00000 n +0000036312 00000 n +0000036416 00000 n +0000036520 00000 n +0000036624 00000 n +0000036728 00000 n +0000036832 00000 n +0000036936 00000 n +0000037040 00000 n +0000037144 00000 n +0000037248 00000 n +0000037352 00000 n +0000037455 00000 n +0000037557 00000 n +0000037659 00000 n +0000038084 00000 n +0000038187 00000 n +0000038291 00000 n +0000038395 00000 n +0000038499 00000 n +0000038603 00000 n +0000038707 00000 n +0000038811 00000 n +0000038915 00000 n +0000039019 00000 n +0000039123 00000 n +0000039226 00000 n +0000039330 00000 n +0000039434 00000 n +0000039537 00000 n +0000039641 00000 n +0000039745 00000 n +0000039849 00000 n +0000039952 00000 n +0000040056 00000 n +0000040160 00000 n +0000040264 00000 n +0000040368 00000 n +0000040472 00000 n +0000040576 00000 n +0000040680 00000 n +0000040784 00000 n +0000040888 00000 n +0000040992 00000 n +0000041096 00000 n +0000041200 00000 n +0000041304 00000 n +0000041408 00000 n +0000041512 00000 n +0000041616 00000 n +0000041719 00000 n +0000041823 00000 n +0000041927 00000 n +0000042031 00000 n +0000042135 00000 n +0000042239 00000 n +0000042343 00000 n +0000042447 00000 n +0000042551 00000 n +0000042655 00000 n +0000042759 00000 n +0000042863 00000 n +0000042967 00000 n +0000043071 00000 n +0000043174 00000 n +0000043275 00000 n +0000043377 00000 n +0000043802 00000 n +0000043906 00000 n +0000044010 00000 n +0000044114 00000 n +0000044218 00000 n +0000044322 00000 n +0000044426 00000 n +0000044530 00000 n +0000044633 00000 n +0000044737 00000 n +0000044841 00000 n +0000044945 00000 n +0000045049 00000 n +0000045153 00000 n +0000045257 00000 n +0000045361 00000 n +0000045465 00000 n +0000045569 00000 n +0000045673 00000 n +0000045777 00000 n +0000045881 00000 n +0000045984 00000 n +0000046088 00000 n +0000046192 00000 n +0000046296 00000 n +0000046400 00000 n +0000046504 00000 n +0000046608 00000 n +0000046712 00000 n +0000046816 00000 n +0000046920 00000 n +0000047024 00000 n +0000047128 00000 n +0000047232 00000 n +0000047335 00000 n +0000047439 00000 n +0000047543 00000 n +0000047647 00000 n +0000047751 00000 n +0000047855 00000 n +0000047959 00000 n +0000048063 00000 n +0000048167 00000 n +0000048271 00000 n +0000048375 00000 n +0000048479 00000 n +0000048583 00000 n +0000048687 00000 n +0000048791 00000 n +0000048894 00000 n +0000048996 00000 n +0000049098 00000 n +0000049523 00000 n +0000049627 00000 n +0000049731 00000 n +0000049835 00000 n +0000049938 00000 n +0000050042 00000 n +0000050146 00000 n +0000050250 00000 n +0000050354 00000 n +0000050458 00000 n +0000050562 00000 n +0000050666 00000 n +0000050770 00000 n +0000050874 00000 n +0000050978 00000 n +0000051082 00000 n +0000051186 00000 n +0000051290 00000 n +0000051393 00000 n +0000051497 00000 n +0000051601 00000 n +0000051705 00000 n +0000051809 00000 n +0000051912 00000 n +0000052016 00000 n +0000052120 00000 n +0000052224 00000 n +0000052328 00000 n +0000052432 00000 n +0000052536 00000 n +0000052639 00000 n +0000052742 00000 n +0000052846 00000 n +0000052950 00000 n +0000053054 00000 n +0000053343 00000 n +0000053396 00000 n +0000053483 00000 n +0000053508 00000 n +0000053562 00000 n +0000053649 00000 n +0000053703 00000 n +0000053790 00000 n +0000053823 00000 n +0000053871 00000 n +0000053958 00000 n +0000054005 00000 n +0000054091 00000 n +0000054138 00000 n +0000054224 00000 n +0000054265 00000 n +0000054310 00000 n +0000054397 00000 n +0000054442 00000 n +0000054528 00000 n +0000054561 00000 n +0000054616 00000 n +0000054701 00000 n +0000054726 00000 n +0000054779 00000 n +0000054866 00000 n +0000054916 00000 n +0000055003 00000 n +0000055036 00000 n +0000055155 00000 n +0000055241 00000 n +0000055284 00000 n +0000055371 00000 n +0000055414 00000 n +0000055501 00000 n +0000055542 00000 n +0000055588 00000 n +0000055675 00000 n +0000055700 00000 n +0000055746 00000 n +0000055833 00000 n +0000055879 00000 n +0000055964 00000 n +0000056008 00000 n +0000056095 00000 n +0000056146 00000 n +0000056233 00000 n +0000056282 00000 n +0000056369 00000 n +0000056417 00000 n +0000056503 00000 n +0000056568 00000 n +0000056631 00000 n +0000056718 00000 n +0000056776 00000 n +0000056863 00000 n +0000056957 00000 n +0000057043 00000 n +0000057145 00000 n +0000057194 00000 n +0000057297 00000 n +0000057340 00000 n +0000057426 00000 n +0000057474 00000 n +0000057561 00000 n +0000057602 00000 n +0000057689 00000 n +0000057733 00000 n +0000057820 00000 n +0000057864 00000 n +0000057950 00000 n +0000058015 00000 n +0000058061 00000 n +0000058148 00000 n +0000058173 00000 n +0000058222 00000 n +0000058309 00000 n +0000058363 00000 n +0000058450 00000 n +0000058501 00000 n +0000058588 00000 n +0000058639 00000 n +0000058725 00000 n +0000058779 00000 n +0000058864 00000 n +0000058921 00000 n +0000058971 00000 n +0000059058 00000 n +0000059083 00000 n +0000059133 00000 n +0000059220 00000 n +0000059270 00000 n +0000059356 00000 n +0000059420 00000 n +0000059507 00000 n +0000059548 00000 n +0000059612 00000 n +0000059699 00000 n +0000059724 00000 n +0000059766 00000 n +0000059852 00000 n +0000059903 00000 n +0000059990 00000 n +0000060037 00000 n +0000060124 00000 n +0000060165 00000 n +0000060214 00000 n +0000060301 00000 n +0000060349 00000 n +0000060436 00000 n +0000060478 00000 n +0000060564 00000 n +0000060605 00000 n +0000060648 00000 n +0000060735 00000 n +0000060785 00000 n +0000060872 00000 n +0000060920 00000 n +0000061007 00000 n +0000061061 00000 n +0000061146 00000 n +0000061195 00000 n +0000061240 00000 n +0000061327 00000 n +0000061384 00000 n +0000061471 00000 n +0000061567 00000 n +0000061653 00000 n +0000061694 00000 n +0000061756 00000 n +0000061843 00000 n +0000061868 00000 n +0000061917 00000 n +0000062004 00000 n +0000062029 00000 n +0000062077 00000 n +0000062164 00000 n +0000062214 00000 n +0000062301 00000 n +0000062345 00000 n +0000062432 00000 n +0000062476 00000 n +0000062563 00000 n +0000062613 00000 n +0000062699 00000 n +0000062749 00000 n +0000062834 00000 n +0000062883 00000 n +0000062968 00000 n +0000063041 00000 n +0000063088 00000 n +0000063175 00000 n +0000063200 00000 n +0000063248 00000 n +0000063335 00000 n +0000063383 00000 n +0000063470 00000 n +0000063520 00000 n +0000063607 00000 n +0000063655 00000 n +0000063742 00000 n +0000063791 00000 n +0000063839 00000 n +0000063926 00000 n +0000063974 00000 n +0000064059 00000 n +0000064104 00000 n +0000064190 00000 n +0000064233 00000 n +0000064319 00000 n +0000064360 00000 n +0000064446 00000 n +0000064495 00000 n +0000064581 00000 n +0000064627 00000 n +0000064713 00000 n +0000064758 00000 n +0000064844 00000 n +0000064896 00000 n +0000064982 00000 n +0000065032 00000 n +0000065118 00000 n +0000065164 00000 n +0000065250 00000 n +0000065293 00000 n +0000065379 00000 n 0000065423 00000 n -0000065471 00000 n -0000065558 00000 n -0000065632 00000 n -0000065719 00000 n -0000065787 00000 n -0000065874 00000 n -0000065928 00000 n -0000066015 00000 n -0000066083 00000 n -0000066170 00000 n -0000066244 00000 n -0000066331 00000 n -0000066379 00000 n -0000066466 00000 n -0000066523 00000 n -0000066610 00000 n -0000066691 00000 n -0000066746 00000 n -0000066833 00000 n -0000066914 00000 n -0000067001 00000 n -0000067034 00000 n -0000067087 00000 n -0000067174 00000 n -0000067199 00000 n -0000067255 00000 n -0000067342 00000 n -0000067411 00000 n -0000067498 00000 n -0000067549 00000 n -0000067636 00000 n -0000067723 00000 n -0000067810 00000 n -0000067866 00000 n -0000067953 00000 n +0000065509 00000 n +0000065552 00000 n +0000065638 00000 n +0000065683 00000 n +0000065769 00000 n +0000065807 00000 n +0000065893 00000 n +0000065935 00000 n +0000066021 00000 n +0000066064 00000 n +0000066150 00000 n +0000066188 00000 n +0000066274 00000 n +0000066316 00000 n +0000066402 00000 n +0000066446 00000 n +0000066532 00000 n +0000066579 00000 n +0000066665 00000 n +0000066713 00000 n +0000066798 00000 n +0000066999 00000 n +0000067049 00000 n +0000067136 00000 n +0000067186 00000 n +0000067272 00000 n +0000067305 00000 n +0000067354 00000 n +0000067440 00000 n +0000067487 00000 n +0000067574 00000 n +0000067607 00000 n +0000067722 00000 n +0000067809 00000 n +0000067834 00000 n +0000067916 00000 n 0000068003 00000 n -0000068090 00000 n -0000068155 00000 n -0000068207 00000 n -0000068294 00000 n +0000068088 00000 n +0000068175 00000 n +0000068208 00000 n +0000068263 00000 n 0000068350 00000 n -0000068437 00000 n -0000068485 00000 n -0000068572 00000 n -0000068620 00000 n -0000068707 00000 n -0000068756 00000 n -0000068797 00000 n -0000068882 00000 n -0000068907 00000 n -0000068951 00000 n -0000069038 00000 n -0000069083 00000 n -0000069170 00000 n -0000069214 00000 n -0000069301 00000 n -0000069345 00000 n -0000069432 00000 n -0000069474 00000 n -0000069561 00000 n -0000069609 00000 n -0000069696 00000 n -0000069761 00000 n -0000069809 00000 n -0000069895 00000 n -0000069920 00000 n -0000069973 00000 n -0000070059 00000 n -0000070084 00000 n -0000070138 00000 n -0000070225 00000 n -0000070250 00000 n -0000070329 00000 n -0000070416 00000 n -0000070498 00000 n -0000070584 00000 n -0000070659 00000 n -0000070746 00000 n -0000070819 00000 n -0000070906 00000 n -0000070955 00000 n -0000071033 00000 n -0000071120 00000 n -0000071145 00000 n -0000071208 00000 n -0000071295 00000 n -0000071358 00000 n -0000071445 00000 n -0000071499 00000 n -0000071586 00000 n -0000071627 00000 n -0000071674 00000 n -0000071761 00000 n -0000071786 00000 n -0000071820 00000 n -0000071854 00000 n -0000075683 00000 n +0000068406 00000 n +0000068493 00000 n +0000068526 00000 n +0000068574 00000 n +0000068661 00000 n +0000068735 00000 n +0000068822 00000 n +0000068890 00000 n +0000068977 00000 n +0000069031 00000 n +0000069118 00000 n +0000069186 00000 n +0000069273 00000 n +0000069347 00000 n +0000069434 00000 n +0000069482 00000 n +0000069569 00000 n +0000069626 00000 n +0000069713 00000 n +0000069794 00000 n +0000069849 00000 n +0000069936 00000 n +0000070017 00000 n +0000070104 00000 n +0000070137 00000 n +0000070190 00000 n +0000070277 00000 n +0000070302 00000 n +0000070358 00000 n +0000070445 00000 n +0000070514 00000 n +0000070601 00000 n +0000070652 00000 n +0000070739 00000 n +0000070826 00000 n +0000070913 00000 n +0000070969 00000 n +0000071056 00000 n +0000071106 00000 n +0000071193 00000 n +0000071258 00000 n +0000071310 00000 n +0000071397 00000 n +0000071453 00000 n +0000071540 00000 n +0000071588 00000 n +0000071675 00000 n +0000071723 00000 n +0000071810 00000 n +0000071859 00000 n +0000071900 00000 n +0000071987 00000 n +0000072031 00000 n +0000072118 00000 n +0000072163 00000 n +0000072250 00000 n +0000072294 00000 n +0000072381 00000 n +0000072425 00000 n +0000072512 00000 n +0000072554 00000 n +0000072641 00000 n +0000072689 00000 n +0000072776 00000 n +0000072849 00000 n +0000072897 00000 n +0000072983 00000 n +0000073008 00000 n +0000073061 00000 n +0000073147 00000 n +0000073172 00000 n +0000073226 00000 n +0000073313 00000 n +0000073338 00000 n +0000073393 00000 n +0000073479 00000 n +0000073547 00000 n +0000073633 00000 n +0000073708 00000 n +0000073795 00000 n +0000073865 00000 n +0000073951 00000 n +0000074030 00000 n +0000074117 00000 n +0000074174 00000 n +0000074256 00000 n +0000074342 00000 n +0000074417 00000 n +0000074504 00000 n +0000074577 00000 n +0000074664 00000 n +0000074742 00000 n +0000074829 00000 n +0000074878 00000 n +0000074926 00000 n +0000075013 00000 n +0000075038 00000 n +0000075086 00000 n +0000075173 00000 n +0000075198 00000 n +0000075261 00000 n +0000075348 00000 n +0000075411 00000 n +0000075498 00000 n +0000075552 00000 n +0000075639 00000 n +0000075680 00000 n 0000075727 00000 n -0000075771 00000 n -0000075815 00000 n -0000075859 00000 n -0000075903 00000 n -0000075947 00000 n -0000075991 00000 n -0000076035 00000 n -0000076079 00000 n -0000076123 00000 n -0000076167 00000 n -0000076211 00000 n -0000076255 00000 n -0000076299 00000 n -0000076343 00000 n -0000076387 00000 n -0000076431 00000 n -0000076475 00000 n -0000076519 00000 n -0000076563 00000 n -0000076607 00000 n -0000076651 00000 n -0000076695 00000 n -0000076739 00000 n -0000076783 00000 n -0000076827 00000 n -0000076871 00000 n -0000076915 00000 n -0000076959 00000 n -0000077003 00000 n -0000077047 00000 n -0000077091 00000 n -0000077135 00000 n -0000077179 00000 n -0000077223 00000 n -0000077267 00000 n -0000077311 00000 n -0000077355 00000 n -0000077399 00000 n -0000077443 00000 n -0000077487 00000 n -0000077531 00000 n -0000077575 00000 n -0000077619 00000 n -0000077663 00000 n -0000077707 00000 n -0000077751 00000 n -0000077795 00000 n -0000077839 00000 n -0000077883 00000 n -0000077927 00000 n -0000077971 00000 n -0000078015 00000 n -0000078059 00000 n -0000078103 00000 n -0000078147 00000 n -0000078191 00000 n -0000078235 00000 n -0000078279 00000 n -0000078323 00000 n -0000078367 00000 n -0000078411 00000 n -0000078455 00000 n -0000078499 00000 n -0000078543 00000 n -0000078587 00000 n -0000078631 00000 n -0000078675 00000 n -0000078719 00000 n -0000078763 00000 n -0000078807 00000 n -0000078851 00000 n -0000078895 00000 n -0000078939 00000 n -0000078983 00000 n -0000079027 00000 n -0000079071 00000 n -0000079115 00000 n -0000079159 00000 n -0000079203 00000 n -0000079247 00000 n -0000079291 00000 n -0000079335 00000 n -0000079379 00000 n -0000079423 00000 n -0000079467 00000 n -0000079511 00000 n -0000079555 00000 n -0000079599 00000 n -0000079643 00000 n -0000079687 00000 n -0000079731 00000 n -0000079775 00000 n -0000079819 00000 n -0000079863 00000 n -0000079907 00000 n -0000079951 00000 n -0000079995 00000 n -0000080039 00000 n -0000080083 00000 n -0000080127 00000 n -0000080171 00000 n -0000080215 00000 n -0000080259 00000 n -0000080303 00000 n -0000080347 00000 n -0000080391 00000 n -0000080435 00000 n -0000080479 00000 n -0000080523 00000 n -0000080567 00000 n -0000080611 00000 n -0000080655 00000 n -0000080699 00000 n -0000080743 00000 n -0000080787 00000 n -0000080831 00000 n -0000080875 00000 n -0000080919 00000 n -0000080963 00000 n -0000081007 00000 n -0000081051 00000 n -0000081095 00000 n -0000081139 00000 n -0000081183 00000 n -0000081227 00000 n -0000081271 00000 n -0000081315 00000 n -0000081359 00000 n -0000081403 00000 n -0000081447 00000 n -0000081491 00000 n -0000081535 00000 n -0000081579 00000 n -0000081623 00000 n -0000081667 00000 n -0000081711 00000 n -0000081755 00000 n -0000081799 00000 n -0000081843 00000 n -0000081887 00000 n -0000081931 00000 n -0000081975 00000 n -0000082019 00000 n -0000082063 00000 n -0000082107 00000 n -0000082151 00000 n -0000082195 00000 n -0000082239 00000 n -0000082283 00000 n -0000082327 00000 n -0000082371 00000 n -0000082415 00000 n -0000082459 00000 n -0000082503 00000 n -0000082547 00000 n -0000082591 00000 n -0000082635 00000 n -0000082679 00000 n -0000082723 00000 n -0000082767 00000 n -0000082811 00000 n -0000082855 00000 n -0000082899 00000 n -0000082943 00000 n -0000082987 00000 n -0000083031 00000 n -0000083075 00000 n -0000083119 00000 n -0000083163 00000 n -0000083207 00000 n -0000083251 00000 n -0000083295 00000 n -0000083339 00000 n -0000083383 00000 n -0000083427 00000 n -0000083471 00000 n -0000083515 00000 n -0000083559 00000 n -0000083603 00000 n -0000083647 00000 n -0000083691 00000 n -0000083735 00000 n -0000083779 00000 n -0000083823 00000 n -0000083867 00000 n -0000083911 00000 n -0000083955 00000 n -0000083999 00000 n -0000084043 00000 n -0000084087 00000 n -0000084131 00000 n -0000084175 00000 n -0000084219 00000 n -0000084263 00000 n -0000084307 00000 n -0000084351 00000 n -0000084395 00000 n -0000084439 00000 n -0000084483 00000 n -0000084527 00000 n -0000084571 00000 n -0000084615 00000 n -0000084659 00000 n -0000084703 00000 n -0000084747 00000 n -0000084791 00000 n -0000084835 00000 n -0000084879 00000 n -0000084923 00000 n -0000084967 00000 n -0000085011 00000 n -0000085055 00000 n -0000085099 00000 n -0000085143 00000 n -0000085187 00000 n -0000085231 00000 n -0000085275 00000 n -0000085319 00000 n -0000085363 00000 n -0000085407 00000 n -0000085451 00000 n -0000085495 00000 n -0000085540 00000 n -0000085585 00000 n -0000085630 00000 n -0000085675 00000 n -0000085720 00000 n -0000085765 00000 n -0000085810 00000 n -0000085855 00000 n -0000085900 00000 n -0000085945 00000 n -0000085990 00000 n -0000087128 00000 n -0000087289 00000 n -0000087458 00000 n -0000087651 00000 n -0000091401 00000 n -0000091595 00000 n -0000096208 00000 n -0000096402 00000 n -0000100424 00000 n -0000100618 00000 n -0000105295 00000 n -0000105489 00000 n -0000108864 00000 n -0000109025 00000 n -0000109259 00000 n -0000109463 00000 n -0000111991 00000 n -0000112175 00000 n -0000115562 00000 n -0000115737 00000 n -0000118870 00000 n -0000119045 00000 n -0000121911 00000 n -0000122086 00000 n -0000123648 00000 n -0000123860 00000 n -0000125016 00000 n -0000125204 00000 n -0000126725 00000 n -0000126922 00000 n -0000128358 00000 n -0000128573 00000 n -0000129938 00000 n -0000130117 00000 n -0000131659 00000 n -0000131829 00000 n -0000133376 00000 n -0000133555 00000 n -0000134989 00000 n -0000135168 00000 n -0000136881 00000 n -0000137060 00000 n -0000138608 00000 n -0000138787 00000 n -0000140477 00000 n -0000140671 00000 n -0000142391 00000 n -0000142589 00000 n -0000143950 00000 n -0000144148 00000 n -0000145832 00000 n -0000146020 00000 n -0000147693 00000 n -0000147872 00000 n -0000149972 00000 n -0000150151 00000 n -0000151924 00000 n -0000152103 00000 n -0000153783 00000 n -0000153971 00000 n -0000155826 00000 n -0000156038 00000 n -0000158096 00000 n -0000158309 00000 n -0000159876 00000 n -0000160065 00000 n -0000161340 00000 n -0000161528 00000 n -0000163054 00000 n -0000163257 00000 n -0000164983 00000 n -0000165186 00000 n -0000166036 00000 n -0000166248 00000 n -0000167758 00000 n -0000167938 00000 n -0000168696 00000 n -0000168917 00000 n -0000170715 00000 n -0000170921 00000 n -0000172803 00000 n -0000173000 00000 n -0000174586 00000 n -0000174797 00000 n -0000176366 00000 n -0000176554 00000 n -0000177456 00000 n -0000177687 00000 n -0000179554 00000 n -0000179766 00000 n -0000181714 00000 n -0000181945 00000 n -0000183955 00000 n -0000184177 00000 n -0000185990 00000 n -0000186212 00000 n -0000187950 00000 n -0000188148 00000 n -0000190047 00000 n -0000190259 00000 n -0000191158 00000 n -0000191337 00000 n -0000192800 00000 n -0000192979 00000 n -0000194295 00000 n -0000194474 00000 n -0000196096 00000 n -0000196275 00000 n -0000197772 00000 n -0000197942 00000 n -0000198286 00000 n -0000198489 00000 n -0000200392 00000 n -0000200552 00000 n -0000201675 00000 n -0000201905 00000 n -0000203429 00000 n -0000203641 00000 n -0000205430 00000 n -0000205623 00000 n -0000207029 00000 n -0000207218 00000 n -0000208909 00000 n -0000209088 00000 n -0000210834 00000 n -0000211022 00000 n -0000212929 00000 n -0000213142 00000 n -0000215027 00000 n -0000215267 00000 n -0000217360 00000 n -0000217572 00000 n -0000219173 00000 n -0000219379 00000 n -0000220540 00000 n -0000220728 00000 n -0000221926 00000 n -0000222105 00000 n -0000223111 00000 n -0000223299 00000 n -0000224926 00000 n -0000225114 00000 n -0000226383 00000 n -0000226572 00000 n -0000227880 00000 n -0000228050 00000 n -0000228522 00000 n -0000228735 00000 n -0000230550 00000 n -0000230763 00000 n -0000232341 00000 n -0000232563 00000 n -0000234382 00000 n -0000234622 00000 n -0000236345 00000 n -0000236552 00000 n -0000238397 00000 n -0000238628 00000 n -0000240518 00000 n -0000240740 00000 n -0000242686 00000 n -0000242898 00000 n -0000244947 00000 n -0000245150 00000 n -0000247484 00000 n -0000247706 00000 n -0000249950 00000 n -0000250157 00000 n -0000252137 00000 n -0000252316 00000 n -0000253874 00000 n -0000254044 00000 n -0000256044 00000 n -0000256232 00000 n -0000258319 00000 n -0000258507 00000 n -0000260317 00000 n -0000260495 00000 n -0000262345 00000 n -0000262505 00000 n -0000263289 00000 n -0000263483 00000 n -0000265084 00000 n -0000265273 00000 n -0000266934 00000 n -0000267104 00000 n -0000267926 00000 n -0000268148 00000 n -0000270284 00000 n -0000270497 00000 n -0000272551 00000 n -0000272773 00000 n -0000273995 00000 n -0000274208 00000 n -0000275805 00000 n -0000276027 00000 n -0000277850 00000 n -0000278072 00000 n -0000279804 00000 n -0000279998 00000 n -0000280725 00000 n -0000280895 00000 n -0000282572 00000 n -0000282751 00000 n -0000284566 00000 n -0000284735 00000 n -0000286578 00000 n -0000286747 00000 n -0000287736 00000 n -0000287915 00000 n -0000289563 00000 n -0000289751 00000 n -0000291242 00000 n -0000291430 00000 n -0000292855 00000 n -0000293025 00000 n -0000294693 00000 n -0000294863 00000 n -0000295420 00000 n -0000295599 00000 n -0000297205 00000 n -0000297384 00000 n -0000299054 00000 n -0000299224 00000 n -0000300773 00000 n -0000300943 00000 n -0000302243 00000 n -0000302413 00000 n -0000304039 00000 n -0000304209 00000 n -0000305796 00000 n -0000306000 00000 n -0000307587 00000 n -0000307781 00000 n -0000308949 00000 n -0000309152 00000 n -0000310725 00000 n -0000310903 00000 n -0000311589 00000 n -0000311792 00000 n -0000313470 00000 n -0000313658 00000 n -0000315387 00000 n -0000315446 00000 n -0000315549 00000 n -0000315714 00000 n -0000315796 00000 n -0000315904 00000 n -0000316083 00000 n -0000316200 00000 n -0000316334 00000 n -0000316469 00000 n -0000316616 00000 n -0000316764 00000 n -0000316941 00000 n -0000317067 00000 n -0000317205 00000 n -0000317365 00000 n -0000317513 00000 n -0000317699 00000 n -0000317855 00000 n -0000317968 00000 n -0000318085 00000 n -0000318220 00000 n -0000318361 00000 n -0000318476 00000 n -0000318587 00000 n -0000318764 00000 n -0000318867 00000 n -0000318983 00000 n -0000319132 00000 n -0000319231 00000 n -0000319344 00000 n -0000319457 00000 n -0000319570 00000 n -0000319683 00000 n -0000319796 00000 n -0000319909 00000 n -0000320022 00000 n -0000320135 00000 n -0000320250 00000 n -0000320351 00000 n -0000320464 00000 n -0000320655 00000 n -0000320752 00000 n -0000320937 00000 n -0000321040 00000 n -0000321163 00000 n -0000321284 00000 n -0000321395 00000 n -0000321590 00000 n -0000321705 00000 n -0000321828 00000 n -0000321945 00000 n -0000322062 00000 n -0000322166 00000 n -0000322354 00000 n -0000322576 00000 n -0000322714 00000 n -0000322876 00000 n -0000323012 00000 n -0000323114 00000 n -0000323331 00000 n -0000323435 00000 n -0000323566 00000 n -0000323686 00000 n -0000323892 00000 n -0000324019 00000 n -0000324103 00000 n -0000324308 00000 n -0000324466 00000 n -0000324613 00000 n -0000324740 00000 n -0000324920 00000 n -0000325029 00000 n -0000325143 00000 n -0000325287 00000 n -0000325450 00000 n -0000325599 00000 n -0000325779 00000 n -0000325882 00000 n -0000326038 00000 n -0000326148 00000 n -0000326292 00000 n -0000326433 00000 n -0000326582 00000 n -0000326698 00000 n -0000326861 00000 n -0000326971 00000 n -0000327110 00000 n -0000327236 00000 n -0000327352 00000 n -0000327481 00000 n -0000327657 00000 n -0000327760 00000 n -0000327891 00000 n -0000328020 00000 n -0000328162 00000 n -0000328286 00000 n -0000328415 00000 n -0000328542 00000 n -0000328664 00000 n -0000328769 00000 n -0000328933 00000 n -0000329036 00000 n -0000329171 00000 n -0000329351 00000 n -0000329478 00000 n -0000329614 00000 n -0000329748 00000 n -0000329954 00000 n -0000330054 00000 n -0000330172 00000 n -0000330337 00000 n -0000330428 00000 n -0000330589 00000 n -0000330715 00000 n -0000330842 00000 n -0000330982 00000 n -0000331118 00000 n -0000331226 00000 n -0000331400 00000 n -0000331506 00000 n -0000331626 00000 n -0000331738 00000 n -0000331855 00000 n -0000331957 00000 n -0000332164 00000 n -0000332276 00000 n -0000332392 00000 n -0000332537 00000 n -0000332746 00000 n -0000332881 00000 n -0000333036 00000 n -0000333162 00000 n -0000333294 00000 n -0000333428 00000 n -0000333560 00000 n -0000333736 00000 n -0000333872 00000 n -0000334026 00000 n -0000334172 00000 n -0000334398 00000 n -0000334510 00000 n -0000334626 00000 n -0000334820 00000 n -0000334964 00000 n -0000335081 00000 n -0000335227 00000 n -0000335385 00000 n -0000335503 00000 n -0000335723 00000 n -0000335822 00000 n -0000335940 00000 n -0000336068 00000 n -0000336226 00000 n -0000336397 00000 n -0000336513 00000 n -0000336624 00000 n -0000336760 00000 n -0000336891 00000 n -0000337039 00000 n -0000337184 00000 n -0000337285 00000 n -0000337462 00000 n -0000337574 00000 n -0000337705 00000 n -0000337829 00000 n -0000337996 00000 n -0000338113 00000 n -0000338243 00000 n -0000338383 00000 n -0000338520 00000 n -0000338656 00000 n -0000338792 00000 n -0000338929 00000 n -0000339041 00000 n -0000339216 00000 n -0000339319 00000 n -0000339470 00000 n -0000339572 00000 n -0000339694 00000 n -0000339826 00000 n -0000339946 00000 n -0000340061 00000 n -0000340175 00000 n -0000340288 00000 n -0000340405 00000 n -0000340520 00000 n -0000340636 00000 n -0000340751 00000 n -0000340867 00000 n -0000340989 00000 n -0000341110 00000 n -0000341229 00000 n -0000341347 00000 n -0000341467 00000 n -0000341570 00000 n -0000341736 00000 n -0000341856 00000 n -0000342025 00000 n -0000342213 00000 n -0000342394 00000 n -0000342550 00000 n -0000342738 00000 n -0000342842 00000 n -0000342995 00000 n -0000343106 00000 n -0000343214 00000 n -0000343364 00000 n -0000343468 00000 n -0000343586 00000 n -0000343704 00000 n -0000343825 00000 n -0000343961 00000 n -0000344060 00000 n +0000075814 00000 n +0000075839 00000 n +0000075873 00000 n +0000075907 00000 n +0000080020 00000 n +0000080064 00000 n +0000080108 00000 n +0000080152 00000 n +0000080196 00000 n +0000080240 00000 n +0000080284 00000 n +0000080328 00000 n +0000080372 00000 n +0000080416 00000 n +0000080460 00000 n +0000080504 00000 n +0000080548 00000 n +0000080592 00000 n +0000080636 00000 n +0000080680 00000 n +0000080724 00000 n +0000080768 00000 n +0000080812 00000 n +0000080856 00000 n +0000080900 00000 n +0000080944 00000 n +0000080988 00000 n +0000081032 00000 n +0000081076 00000 n +0000081120 00000 n +0000081164 00000 n +0000081208 00000 n +0000081252 00000 n +0000081296 00000 n +0000081340 00000 n +0000081384 00000 n +0000081428 00000 n +0000081472 00000 n +0000081516 00000 n +0000081560 00000 n +0000081604 00000 n +0000081648 00000 n +0000081692 00000 n +0000081736 00000 n +0000081780 00000 n +0000081824 00000 n +0000081868 00000 n +0000081912 00000 n +0000081956 00000 n +0000082000 00000 n +0000082044 00000 n +0000082088 00000 n +0000082132 00000 n +0000082176 00000 n +0000082220 00000 n +0000082264 00000 n +0000082308 00000 n +0000082352 00000 n +0000082396 00000 n +0000082440 00000 n +0000082484 00000 n +0000082528 00000 n +0000082572 00000 n +0000082616 00000 n +0000082660 00000 n +0000082704 00000 n +0000082748 00000 n +0000082792 00000 n +0000082836 00000 n +0000082880 00000 n +0000082924 00000 n +0000082968 00000 n +0000083012 00000 n +0000083056 00000 n +0000083100 00000 n +0000083144 00000 n +0000083188 00000 n +0000083232 00000 n +0000083276 00000 n +0000083320 00000 n +0000083364 00000 n +0000083408 00000 n +0000083452 00000 n +0000083496 00000 n +0000083540 00000 n +0000083584 00000 n +0000083628 00000 n +0000083672 00000 n +0000083716 00000 n +0000083760 00000 n +0000083804 00000 n +0000083848 00000 n +0000083892 00000 n +0000083936 00000 n +0000083980 00000 n +0000084024 00000 n +0000084068 00000 n +0000084112 00000 n +0000084156 00000 n +0000084200 00000 n +0000084244 00000 n +0000084288 00000 n +0000084332 00000 n +0000084376 00000 n +0000084420 00000 n +0000084464 00000 n +0000084508 00000 n +0000084552 00000 n +0000084596 00000 n +0000084640 00000 n +0000084684 00000 n +0000084728 00000 n +0000084772 00000 n +0000084816 00000 n +0000084860 00000 n +0000084904 00000 n +0000084948 00000 n +0000084992 00000 n +0000085036 00000 n +0000085080 00000 n +0000085124 00000 n +0000085168 00000 n +0000085212 00000 n +0000085256 00000 n +0000085300 00000 n +0000085344 00000 n +0000085388 00000 n +0000085432 00000 n +0000085476 00000 n +0000085520 00000 n +0000085564 00000 n +0000085608 00000 n +0000085652 00000 n +0000085696 00000 n +0000085740 00000 n +0000085784 00000 n +0000085828 00000 n +0000085872 00000 n +0000085916 00000 n +0000085960 00000 n +0000086004 00000 n +0000086048 00000 n +0000086092 00000 n +0000086136 00000 n +0000086180 00000 n +0000086224 00000 n +0000086268 00000 n +0000086312 00000 n +0000086356 00000 n +0000086400 00000 n +0000086444 00000 n +0000086488 00000 n +0000086532 00000 n +0000086576 00000 n +0000086620 00000 n +0000086664 00000 n +0000086708 00000 n +0000086752 00000 n +0000086796 00000 n +0000086840 00000 n +0000086884 00000 n +0000086928 00000 n +0000086972 00000 n +0000087016 00000 n +0000087060 00000 n +0000087104 00000 n +0000087148 00000 n +0000087192 00000 n +0000087236 00000 n +0000087280 00000 n +0000087324 00000 n +0000087368 00000 n +0000087412 00000 n +0000087456 00000 n +0000087500 00000 n +0000087544 00000 n +0000087588 00000 n +0000087632 00000 n +0000087676 00000 n +0000087720 00000 n +0000087764 00000 n +0000087808 00000 n +0000087852 00000 n +0000087896 00000 n +0000087941 00000 n +0000087986 00000 n +0000088031 00000 n +0000088076 00000 n +0000088121 00000 n +0000088166 00000 n +0000088211 00000 n +0000088256 00000 n +0000088301 00000 n +0000088346 00000 n +0000088391 00000 n +0000088436 00000 n +0000088481 00000 n +0000088526 00000 n +0000088571 00000 n +0000088616 00000 n +0000088661 00000 n +0000088706 00000 n +0000088751 00000 n +0000088796 00000 n +0000088841 00000 n +0000088886 00000 n +0000088931 00000 n +0000088976 00000 n +0000089021 00000 n +0000089066 00000 n +0000089111 00000 n +0000089156 00000 n +0000089201 00000 n +0000089246 00000 n +0000089291 00000 n +0000089336 00000 n +0000089381 00000 n +0000089426 00000 n +0000089471 00000 n +0000089516 00000 n +0000089561 00000 n +0000089606 00000 n +0000089651 00000 n +0000089696 00000 n +0000089741 00000 n +0000089786 00000 n +0000089831 00000 n +0000089876 00000 n +0000089921 00000 n +0000089966 00000 n +0000090011 00000 n +0000090056 00000 n +0000090101 00000 n +0000090146 00000 n +0000090191 00000 n +0000090236 00000 n +0000090281 00000 n +0000090326 00000 n +0000090371 00000 n +0000090416 00000 n +0000090461 00000 n +0000090506 00000 n +0000090551 00000 n +0000090596 00000 n +0000090641 00000 n +0000090686 00000 n +0000090731 00000 n +0000090776 00000 n +0000090821 00000 n +0000090866 00000 n +0000090911 00000 n +0000090956 00000 n +0000092166 00000 n +0000092327 00000 n +0000092496 00000 n +0000092689 00000 n +0000095924 00000 n +0000096118 00000 n +0000100265 00000 n +0000100459 00000 n +0000104021 00000 n +0000104215 00000 n +0000108467 00000 n +0000108661 00000 n +0000112096 00000 n +0000112290 00000 n +0000112962 00000 n +0000113123 00000 n +0000113357 00000 n +0000113561 00000 n +0000115832 00000 n +0000116016 00000 n +0000119096 00000 n +0000119271 00000 n +0000122110 00000 n +0000122285 00000 n +0000124842 00000 n +0000125017 00000 n +0000127007 00000 n +0000127219 00000 n +0000128342 00000 n +0000128530 00000 n +0000130082 00000 n +0000130279 00000 n +0000131757 00000 n +0000131972 00000 n +0000133324 00000 n +0000133503 00000 n +0000135075 00000 n +0000135245 00000 n +0000136792 00000 n +0000136971 00000 n +0000138427 00000 n +0000138606 00000 n +0000140310 00000 n +0000140489 00000 n +0000142070 00000 n +0000142249 00000 n +0000143936 00000 n +0000144130 00000 n +0000145802 00000 n +0000146000 00000 n +0000147430 00000 n +0000147618 00000 n +0000149309 00000 n +0000149497 00000 n +0000151274 00000 n +0000151453 00000 n +0000153517 00000 n +0000153696 00000 n +0000155513 00000 n +0000155692 00000 n +0000157430 00000 n +0000157618 00000 n +0000159467 00000 n +0000159689 00000 n +0000161700 00000 n +0000161913 00000 n +0000163466 00000 n +0000163655 00000 n +0000165047 00000 n +0000165217 00000 n +0000165561 00000 n +0000165749 00000 n +0000167272 00000 n +0000167475 00000 n +0000169179 00000 n +0000169382 00000 n +0000170329 00000 n +0000170541 00000 n +0000172051 00000 n +0000172231 00000 n +0000172986 00000 n +0000173207 00000 n +0000174967 00000 n +0000175173 00000 n +0000177046 00000 n +0000177243 00000 n +0000178822 00000 n +0000179033 00000 n +0000180548 00000 n +0000180736 00000 n +0000181621 00000 n +0000181852 00000 n +0000183656 00000 n +0000183868 00000 n +0000185809 00000 n +0000186040 00000 n +0000188010 00000 n +0000188232 00000 n +0000190084 00000 n +0000190287 00000 n +0000191623 00000 n +0000191845 00000 n +0000193503 00000 n +0000193716 00000 n +0000195652 00000 n +0000195840 00000 n +0000196474 00000 n +0000196653 00000 n +0000198167 00000 n +0000198346 00000 n +0000199744 00000 n +0000199923 00000 n +0000201579 00000 n +0000201758 00000 n +0000203323 00000 n +0000203493 00000 n +0000203834 00000 n +0000204037 00000 n +0000205928 00000 n +0000206088 00000 n +0000207203 00000 n +0000207433 00000 n +0000208921 00000 n +0000209133 00000 n +0000210882 00000 n +0000211075 00000 n +0000212444 00000 n +0000212633 00000 n +0000214304 00000 n +0000214483 00000 n +0000216213 00000 n +0000216401 00000 n +0000218295 00000 n +0000218508 00000 n +0000220361 00000 n +0000220601 00000 n +0000222697 00000 n +0000222909 00000 n +0000224492 00000 n +0000224713 00000 n +0000225962 00000 n +0000226150 00000 n +0000227431 00000 n +0000227610 00000 n +0000228672 00000 n +0000228860 00000 n +0000230424 00000 n +0000230612 00000 n +0000232030 00000 n +0000232219 00000 n +0000233483 00000 n +0000233663 00000 n +0000234313 00000 n +0000234526 00000 n +0000236285 00000 n +0000236498 00000 n +0000238036 00000 n +0000238258 00000 n +0000240052 00000 n +0000240292 00000 n +0000242022 00000 n +0000242229 00000 n +0000244067 00000 n +0000244298 00000 n +0000246206 00000 n +0000246428 00000 n +0000248341 00000 n +0000248553 00000 n +0000250571 00000 n +0000250774 00000 n +0000253026 00000 n +0000253248 00000 n +0000255457 00000 n +0000255664 00000 n +0000257636 00000 n +0000257815 00000 n +0000259414 00000 n +0000259584 00000 n +0000261574 00000 n +0000261762 00000 n +0000263838 00000 n +0000264026 00000 n +0000265807 00000 n +0000265985 00000 n +0000267830 00000 n +0000267990 00000 n +0000268767 00000 n +0000268961 00000 n +0000270551 00000 n +0000270731 00000 n +0000272479 00000 n +0000272658 00000 n +0000273555 00000 n +0000273777 00000 n +0000275844 00000 n +0000276057 00000 n +0000278106 00000 n +0000278303 00000 n +0000279502 00000 n +0000279715 00000 n +0000281331 00000 n +0000281553 00000 n +0000283376 00000 n +0000283598 00000 n +0000285365 00000 n +0000285559 00000 n +0000286334 00000 n +0000286504 00000 n +0000288163 00000 n +0000288342 00000 n +0000290174 00000 n +0000290343 00000 n +0000292198 00000 n +0000292367 00000 n +0000293477 00000 n +0000293665 00000 n +0000295366 00000 n +0000295554 00000 n +0000297033 00000 n +0000297221 00000 n +0000298709 00000 n +0000298879 00000 n +0000300540 00000 n +0000300710 00000 n +0000301451 00000 n +0000301630 00000 n +0000303217 00000 n +0000303396 00000 n +0000305055 00000 n +0000305225 00000 n +0000306760 00000 n +0000306930 00000 n +0000308214 00000 n +0000308384 00000 n +0000309999 00000 n +0000310169 00000 n +0000311752 00000 n +0000311947 00000 n +0000313660 00000 n +0000313872 00000 n +0000315587 00000 n +0000315781 00000 n +0000317495 00000 n +0000317707 00000 n +0000318992 00000 n +0000319195 00000 n +0000320713 00000 n +0000320891 00000 n +0000321557 00000 n +0000321760 00000 n +0000323436 00000 n +0000323624 00000 n +0000325347 00000 n +0000325535 00000 n +0000327063 00000 n +0000327242 00000 n +0000328750 00000 n +0000328928 00000 n +0000329654 00000 n +0000329713 00000 n +0000329816 00000 n +0000329981 00000 n +0000330063 00000 n +0000330171 00000 n +0000330339 00000 n +0000330451 00000 n +0000330580 00000 n +0000330710 00000 n +0000330852 00000 n +0000330995 00000 n +0000331167 00000 n +0000331286 00000 n +0000331417 00000 n +0000331572 00000 n +0000331715 00000 n +0000331896 00000 n +0000332046 00000 n +0000332151 00000 n +0000332260 00000 n +0000332387 00000 n +0000332520 00000 n +0000332627 00000 n +0000332730 00000 n +0000332896 00000 n +0000332994 00000 n +0000333105 00000 n +0000333249 00000 n +0000333341 00000 n +0000333447 00000 n +0000333553 00000 n +0000333659 00000 n +0000333765 00000 n +0000333871 00000 n +0000333977 00000 n +0000334083 00000 n +0000334189 00000 n +0000334296 00000 n +0000334389 00000 n +0000334497 00000 n +0000334677 00000 n +0000334769 00000 n +0000334949 00000 n +0000335045 00000 n +0000335161 00000 n +0000335275 00000 n +0000335379 00000 n +0000335569 00000 n +0000335677 00000 n +0000335793 00000 n +0000335903 00000 n +0000336013 00000 n +0000336110 00000 n +0000336293 00000 n +0000336510 00000 n +0000336641 00000 n +0000336796 00000 n +0000336925 00000 n +0000337022 00000 n +0000337228 00000 n +0000337327 00000 n +0000337453 00000 n +0000337568 00000 n +0000337763 00000 n +0000337885 00000 n +0000337962 00000 n +0000338156 00000 n +0000338309 00000 n +0000338451 00000 n +0000338573 00000 n +0000338748 00000 n +0000338850 00000 n +0000338957 00000 n +0000339096 00000 n +0000339254 00000 n +0000339398 00000 n +0000339567 00000 n +0000339665 00000 n +0000339816 00000 n +0000339919 00000 n +0000340056 00000 n +0000340190 00000 n +0000340332 00000 n +0000340441 00000 n +0000340599 00000 n +0000340702 00000 n +0000340834 00000 n +0000340953 00000 n +0000341062 00000 n +0000341186 00000 n +0000341351 00000 n +0000341449 00000 n +0000341575 00000 n +0000341699 00000 n +0000341836 00000 n +0000341955 00000 n +0000342079 00000 n +0000342201 00000 n +0000342318 00000 n +0000342418 00000 n +0000342571 00000 n +0000342669 00000 n +0000342799 00000 n +0000342967 00000 n +0000343088 00000 n +0000343218 00000 n +0000343346 00000 n +0000343540 00000 n +0000343634 00000 n +0000343746 00000 n +0000343905 00000 n +0000343988 00000 n +0000344143 00000 n +0000344261 00000 n +0000344380 00000 n +0000344512 00000 n +0000344640 00000 n +0000344740 00000 n +0000344908 00000 n +0000345006 00000 n +0000345118 00000 n +0000345222 00000 n +0000345333 00000 n +0000345429 00000 n +0000345624 00000 n +0000345730 00000 n +0000345840 00000 n +0000345979 00000 n +0000346182 00000 n +0000346309 00000 n +0000346456 00000 n +0000346574 00000 n +0000346700 00000 n +0000346828 00000 n +0000346954 00000 n +0000347124 00000 n +0000347252 00000 n +0000347398 00000 n +0000347538 00000 n +0000347752 00000 n +0000347858 00000 n +0000347968 00000 n +0000348156 00000 n +0000348292 00000 n +0000348401 00000 n +0000348541 00000 n +0000348693 00000 n +0000348803 00000 n +0000349011 00000 n +0000349104 00000 n +0000349216 00000 n +0000349338 00000 n +0000349490 00000 n +0000349655 00000 n +0000349763 00000 n +0000349866 00000 n +0000349996 00000 n +0000350121 00000 n +0000350263 00000 n +0000350402 00000 n +0000350496 00000 n +0000350661 00000 n +0000350767 00000 n +0000350892 00000 n +0000351010 00000 n +0000351171 00000 n +0000351280 00000 n +0000351404 00000 n +0000351538 00000 n +0000351669 00000 n +0000351799 00000 n +0000351929 00000 n +0000352059 00000 n +0000352164 00000 n +0000352327 00000 n +0000352424 00000 n +0000352569 00000 n +0000352663 00000 n +0000352777 00000 n +0000352901 00000 n +0000353015 00000 n +0000353124 00000 n +0000353232 00000 n +0000353339 00000 n +0000353450 00000 n +0000353559 00000 n +0000353669 00000 n +0000353777 00000 n +0000353886 00000 n +0000354001 00000 n +0000354115 00000 n +0000354227 00000 n +0000354338 00000 n +0000354451 00000 n +0000354547 00000 n +0000354713 00000 n +0000354817 00000 n +0000354965 00000 n +0000355126 00000 n +0000355306 00000 n +0000355479 00000 n +0000355627 00000 n +0000355787 00000 n +0000355911 00000 n +0000356050 00000 n +0000356181 00000 n +0000356293 00000 n +0000356408 00000 n +0000356521 00000 n +0000356697 00000 n +0000356795 00000 n +0000356942 00000 n +0000357045 00000 n +0000357145 00000 n +0000357297 00000 n +0000357395 00000 n +0000357507 00000 n +0000357619 00000 n +0000357734 00000 n +0000357864 00000 n +0000357957 00000 n +0000358076 00000 n +0000358211 00000 n +0000358301 00000 n +0000358409 00000 n +0000358499 00000 n trailer -<<1ca9696980f269e0c25de21a8ecbd4b4>]>> +<<87d2ccdfffaca9782ac75b2582cbd107>]>> startxref -344676 +359159 %%EOF diff --git a/docs/docbook/Makefile.in b/docs/docbook/Makefile.in index b225eb97809..98b74e12eec 100644 --- a/docs/docbook/Makefile.in +++ b/docs/docbook/Makefile.in @@ -57,13 +57,13 @@ all: @echo "txt - Build plain text version of HOWTO Collection" manpages: $(MANPAGES) -pdf: ../Samba-HOWTO-Collection.pdf -ps: ../Samba-HOWTO-Collection.ps -txt: ../Samba-HOWTO-Collection.txt +pdf: ../Samba-HOWTO-Collection.pdf ../Samba-Developers-Guide.pdf +ps: ../Samba-HOWTO-Collection.ps ../Samba-Developers-Guide.ps +txt: ../textdocs/Samba-HOWTO-Collection.txt ../textdocs/Samba-Developers-Guide.txt htmlman: $(MANPAGES_HTML) +html-single: ../htmldocs/Samba-HOWTO-Collection.html ../htmldocs/Samba-Developers-Guide.html html: $(DOCBOOK2HTML) -d samba.dsl -o $(HTMLDIR) projdoc/samba-doc.sgml -html-single: ../Samba-HOWTO-Collection.html ../Samba-Developers-Guide.html ../Samba-HOWTO-Collection.txt: $(SGMLDIR)/samba-doc.sgml $(DOCBOOK2TXT) -o .. $< @@ -73,14 +73,21 @@ html-single: ../Samba-HOWTO-Collection.html ../Samba-Developers-Guide.html $(DOCBOOK2PS) -o .. $< mv ../samba-doc.ps $@ -../Samba-HOWTO-Collection.pdf: ../Samba-HOWTO-Collection.html +../Samba-Developers-Guide.ps: $(SGMLDIR)/samba-doc.sgml + $(DOCBOOK2PS) -o .. $< + mv ../samba-doc.ps $@ + +../Samba-HOWTO-Collection.pdf: ../htmldocs/Samba-HOWTO-Collection.html + $(HTMLDOC) --book --color --links -f $@ $< + +../Samba-Developers-Guide.pdf: ../htmldocs/Samba-Developers-Guide.html $(HTMLDOC) --book --color --links -f $@ $< -../Samba-HOWTO-Collection.html: $(SGMLDIR)/samba-doc.sgml +../htmldocs/Samba-HOWTO-Collection.html: $(SGMLDIR)/samba-doc.sgml $(DOCBOOK2HTML) -u -o .. $< mv ../samba-doc.html $@ -../Samba-Developers-Guide.html: devdoc/dev-doc.sgml +../htmldocs/Samba-Developers-Guide.html: devdoc/dev-doc.sgml $(DOCBOOK2HTML) -u -o .. $< mv ../dev-doc.html $@ diff --git a/docs/docbook/devdoc/internals.sgml b/docs/docbook/devdoc/internals.sgml index 79524347b63..982cfd2e108 100644 --- a/docs/docbook/devdoc/internals.sgml +++ b/docs/docbook/devdoc/internals.sgml @@ -26,6 +26,7 @@ telling if a particular char* is in dos codepage or unix codepage. This led to a nightmare of code that tried to cope with particular cases without handlingt the general case. + The new functions diff --git a/docs/docbook/devdoc/parsing.sgml b/docs/docbook/devdoc/parsing.sgml index 0121935d26d..8d929617f5a 100644 --- a/docs/docbook/devdoc/parsing.sgml +++ b/docs/docbook/devdoc/parsing.sgml @@ -196,7 +196,7 @@ terminating character, and the rest of the line is ignored. The lines <section> :== <section header> { <parameter line> } <section header> :== '[' NAME ']' <parameter line> :== NAME '=' VALUE NL - + Basically, this means that diff --git a/docs/htmldocs/Samba-Developers-Guide.html b/docs/htmldocs/Samba-Developers-Guide.html new file mode 100644 index 00000000000..f7a452bfc59 --- /dev/null +++ b/docs/htmldocs/Samba-Developers-Guide.html @@ -0,0 +1,7734 @@ + +SAMBA Developers Guide


    Abstract

    Last Update : Mon aug 26 12:41:19 CEST 2002

    This book is a collection of documents that might be useful for +people developing samba or those interested in doing so. +It's nothing more than a collection of documents written by samba developers about +the internals of various parts of samba and the SMB protocol. It's still incomplete. +The most recent version of this document +can be found at http://devel.samba.org/. +Please send updates to jelmer@samba.org.

    This documentation is distributed under the GNU General Public License (GPL) +version 2. A copy of the license is included with the Samba source +distribution. A copy can be found on-line at http://www.fsf.org/licenses/gpl.txt

    Table of Contents
    Definition of NetBIOS Protocol and Name Resolution Modes
    NETBIOS
    BROADCAST NetBIOS
    NBNS NetBIOS
    Samba Architecture
    Introduction
    Multithreading and Samba
    Threading smbd
    Threading nmbd
    nbmd Design
    The samba DEBUG system
    New Output Syntax
    The DEBUG() Macro
    The DEBUGADD() Macro
    The DEBUGLVL() Macro
    New Functions
    dbgtext()
    dbghdr()
    format_debug_text()
    Coding Suggestions
    Samba Internals
    Character Handling
    The new functions
    Macros in byteorder.h
    CVAL(buf,pos)
    PVAL(buf,pos)
    SCVAL(buf,pos,val)
    SVAL(buf,pos)
    IVAL(buf,pos)
    SVALS(buf,pos)
    IVALS(buf,pos)
    SSVAL(buf,pos,val)
    SIVAL(buf,pos,val)
    SSVALS(buf,pos,val)
    SIVALS(buf,pos,val)
    RSVAL(buf,pos)
    RIVAL(buf,pos)
    RSSVAL(buf,pos,val)
    RSIVAL(buf,pos,val)
    LAN Manager Samba API
    Parameters
    Return value
    Code character table
    The smb.conf file
    Lexical Analysis
    Handling of Whitespace
    Handling of Line Continuation
    Line Continuation Quirks
    Syntax
    About params.c
    NetBIOS in a Unix World
    Introduction
    Usernames
    File Ownership
    Passwords
    Locking
    Deny Modes
    Trapdoor UIDs
    Port numbers
    Protocol Complexity
    Tracing samba system calls
    NT Domain RPC's
    Introduction
    Sources
    Credits
    Notes and Structures
    Notes
    Enumerations
    Structures
    MSRPC over Transact Named Pipe
    MSRPC Pipes
    Header
    Tail
    RPC Bind / Bind Ack
    NTLSA Transact Named Pipe
    LSA Open Policy
    LSA Query Info Policy
    LSA Enumerate Trusted Domains
    LSA Open Secret
    LSA Close
    LSA Lookup SIDS
    LSA Lookup Names
    NETLOGON rpc Transact Named Pipe
    LSA Request Challenge
    LSA Authenticate 2
    LSA Server Password Set
    LSA SAM Logon
    LSA SAM Logoff
    \\MAILSLOT\NET\NTLOGON
    Query for PDC
    SAM Logon
    SRVSVC Transact Named Pipe
    Net Share Enum
    Net Server Get Info
    Cryptographic side of NT Domain Authentication
    Definitions
    Protocol
    Comments
    SIDs and RIDs
    Well-known SIDs
    Well-known RIDS

    Definition of NetBIOS Protocol and Name Resolution Modes

    NETBIOS

    NetBIOS runs over the following tranports: TCP/IP; NetBEUI and IPX/SPX. +Samba only uses NetBIOS over TCP/IP. For details on the TCP/IP NetBIOS +Session Service NetBIOS Datagram Service, and NetBIOS Names, see +rfc1001.txt and rfc1002.txt.

    +NetBEUI is a raw NetBIOS frame protocol implementation that allows NetBIOS +datagrams to be sent out over the 'wire' embedded within LLC frames. +NetBEUI is not required when using NetBIOS over TCP/IP protocols and it +is preferable NOT to install NetBEUI if it can be avoided.

    +IPX/SPX is also not required when using NetBIOS over TCP/IP, and it is +preferable NOT to install the IPX/SPX transport unless you are using Novell +servers. At the very least, it is recommended that you do not install +'NetBIOS over IPX/SPX'.

    [When installing Windows 95, you will find that NetBEUI and IPX/SPX are +installed as the default protocols. This is because they are the simplest +to manage: no Windows 95 user-configuration is required].

    +NetBIOS applications (such as samba) offer their services (for example, +SMB file and print sharing) on a NetBIOS name. They must claim this name +on the network before doing so. The NetBIOS session service will then +accept connections on the application's behalf (on the NetBIOS name +claimed by the application). A NetBIOS session between the application +and the client can then commence.

    +NetBIOS names consist of 15 characters plus a 'type' character. This is +similar, in concept, to an IP address and a TCP port number, respectively. +A NetBIOS-aware application on a host will offer different services under +different NetBIOS name types, just as a host will offer different TCP/IP +services on different port numbers.

    +NetBIOS names must be claimed on a network, and must be defended. The use +of NetBIOS names is most suitable on a single subnet; a Local Area Network +or a Wide Area Network.

    +NetBIOS names are either UNIQUE or GROUP. Only one application can claim a +UNIQUE NetBIOS name on a network.

    There are two kinds of NetBIOS Name resolution: Broadcast and Point-to-Point.


    NBNS NetBIOS

    rfc1001.txt describes, amongst other things, the implementation and use +of, a 'NetBIOS Name Service'. NT/AS offers 'Windows Internet Name Service' +which is fully rfc1001/2 compliant, but has had to take specific action +with certain NetBIOS names in order to make it useful. (for example, it +deals with the registration of <1c> <1d> <1e> names all in different ways. +I recommend the reading of the Microsoft WINS Server Help files for full +details).

    +The use of a WINS server cuts down on broadcast network traffic for +NetBIOS name resolution. It has the effect of pulling all the broadcast +isolated subnets together into a single NetBIOS scope, across your LAN +or WAN, while avoiding the use of TCP/IP broadcast packets.

    When you have a WINS server on your LAN, WINS clients will be able to +contact the WINS server to resolve NetBIOS names. Note that only those +WINS clients that have registered with the same WINS server will be +visible. The WINS server _can_ have static NetBIOS entries added to its +database (usually for security reasons you might want to consider putting +your domain controllers or other important servers as static entries, +but you should not rely on this as your sole means of security), but for +the most part, NetBIOS names are registered dynamically.

    This provides some confusion for lots of people, and is worth mentioning +here: a Browse Server is NOT a WINS Server, even if these services are +implemented in the same application. A Browse Server _needs_ a WINS server +because a Browse Server is a WINS client, which is _not_ the same thing].

    Clients can claim names, and therefore offer services on successfully claimed +names, on their broadcast-isolated subnet. One way to get NetBIOS services +(such as browsing: see ftp.microsoft.com/drg/developr/CIFS/browdiff.txt; and +SMB file/print sharing: see cifs6.txt) working on a LAN or WAN is to make +your routers forward all broadcast packets from TCP/IP ports 137, 138 and 139. +You will find, however, if you do this on a large LAN or a WAN, that your +network is completely swamped by NetBIOS and browsing packets, which is why +WINS was developed to minimise the necessity of broadcast traffic.

    +WINS Clients therefore claim names from the WINS server. If the WINS +server allows them to register a name, the client's NetBIOS session service +can then offer services on this name. Other WINS clients will then +contact the WINS server to resolve a NetBIOS name.


    Samba Architecture


    Multithreading and Samba

    People sometimes tout threads as a uniformly good thing. They are very +nice in their place but are quite inappropriate for smbd. nmbd is +another matter, and multi-threading it would be very nice.

    The short version is that smbd is not multithreaded, and alternative +servers that take this approach under Unix (such as Syntax, at the +time of writing) suffer tremendous performance penalties and are less +robust. nmbd is not threaded either, but this is because it is not +possible to do it while keeping code consistent and portable across 35 +or more platforms. (This drawback also applies to threading smbd.)

    The longer versions is that there are very good reasons for not making +smbd multi-threaded. Multi-threading would actually make Samba much +slower, less scalable, less portable and much less robust. The fact +that we use a separate process for each connection is one of Samba's +biggest advantages.


    Threading smbd

    A few problems that would arise from a threaded smbd are:

    1. It's not only to create threads instead of processes, but you + must care about all variables if they have to be thread specific + (currently they would be global).

    2. if one thread dies (eg. a seg fault) then all threads die. We can + immediately throw robustness out the window.

    3. many of the system calls we make are blocking. Non-blocking + equivalents of many calls are either not available or are awkward (and + slow) to use. So while we block in one thread all clients are + waiting. Imagine if one share is a slow NFS filesystem and the others + are fast, we will end up slowing all clients to the speed of NFS.

    4. you can't run as a different uid in different threads. This means + we would have to switch uid/gid on _every_ SMB packet. It would be + horrendously slow.

    5. the per process file descriptor limit would mean that we could only + support a limited number of clients.

    6. we couldn't use the system locking calls as the locking context of + fcntl() is a process, not a thread.


    Threading nmbd

    This would be ideal, but gets sunk by portability requirements.

    Andrew tried to write a test threads library for nmbd that used only +ansi-C constructs (using setjmp and longjmp). Unfortunately some OSes +defeat this by restricting longjmp to calling addresses that are +shallower than the current address on the stack (apparently AIX does +this). This makes a truly portable threads library impossible. So to +support all our current platforms we would have to code nmbd both with +and without threads, and as the real aim of threads is to make the +code clearer we would not have gained anything. (it is a myth that +threads make things faster. threading is like recursion, it can make +things clear but the same thing can always be done faster by some +other method)

    Chris tried to spec out a general design that would abstract threading +vs separate processes (vs other methods?) and make them accessible +through some general API. This doesn't work because of the data +sharing requirements of the protocol (packets in the future depending +on packets now, etc.) At least, the code would work but would be very +clumsy, and besides the fork() type model would never work on Unix. (Is there an OS that it would work on, for nmbd?)

    A fork() is cheap, but not nearly cheap enough to do on every UDP +packet that arrives. Having a pool of processes is possible but is +nasty to program cleanly due to the enormous amount of shared data (in +complex structures) between the processes. We can't rely on each +platform having a shared memory system.


    nbmd Design

    Originally Andrew used recursion to simulate a multi-threaded +environment, which use the stack enormously and made for really +confusing debugging sessions. Luke Leighton rewrote it to use a +queuing system that keeps state information on each packet. The +first version used a single structure which was used by all the +pending states. As the initialisation of this structure was +done by adding arguments, as the functionality developed, it got +pretty messy. So, it was replaced with a higher-order function +and a pointer to a user-defined memory block. This suddenly +made things much simpler: large numbers of functions could be +made static, and modularised. This is the same principle as used +in NT's kernel, and achieves the same effect as threads, but in +a single process.

    Then Jeremy rewrote nmbd. The packet data in nmbd isn't what's on the +wire. It's a nice format that is very amenable to processing but still +keeps the idea of a distinct packet. See "struct packet_struct" in +nameserv.h. It has all the detail but none of the on-the-wire +mess. This makes it ideal for using in disk or memory-based databases +for browsing and WINS support.


    The samba DEBUG system

    New Output Syntax

    The syntax of a debugging log file is represented as:

      >debugfile< :== { >debugmsg< }
    +
    +  >debugmsg<  :== >debughdr< '\n' >debugtext<
    +
    +  >debughdr<  :== '[' TIME ',' LEVEL ']' FILE ':' [FUNCTION] '(' LINE ')'
    +
    +  >debugtext< :== { >debugline< }
    +
    +  >debugline< :== TEXT '\n'

    TEXT is a string of characters excluding the newline character.

    LEVEL is the DEBUG level of the message (an integer in the range + 0..10).

    TIME is a timestamp.

    FILE is the name of the file from which the debug message was +generated.

    FUNCTION is the function from which the debug message was generated.

    LINE is the line number of the debug statement that generated the +message.

    Basically, what that all means is:

    1. A debugging log file is made up of debug messages.

    2. Each debug message is made up of a header and text. The header is +separated from the text by a newline.

    3. The header begins with the timestamp and debug level of the +message enclosed in brackets. The filename, function, and line +number at which the message was generated follow. The filename is +terminated by a colon, and the function name is terminated by the +parenthesis which contain the line number. Depending upon the +compiler, the function name may be missing (it is generated by the +__FUNCTION__ macro, which is not universally implemented, dangit).

    4. The message text is made up of zero or more lines, each terminated +by a newline.

    Here's some example output:

        [1998/08/03 12:55:25, 1] nmbd.c:(659)
    +      Netbios nameserver version 1.9.19-prealpha started.
    +      Copyright Andrew Tridgell 1994-1997
    +    [1998/08/03 12:55:25, 3] loadparm.c:(763)
    +      Initializing global parameters

    Note that in the above example the function names are not listed on +the header line. That's because the example above was generated on an +SGI Indy, and the SGI compiler doesn't support the __FUNCTION__ macro.


    The DEBUG() Macro

    Use of the DEBUG() macro is unchanged. DEBUG() takes two parameters. +The first is the message level, the second is the body of a function +call to the Debug1() function.

    That's confusing.

    Here's an example which may help a bit. If you would write

    printf( "This is a %s message.\n", "debug" );

    to send the output to stdout, then you would write

    DEBUG( 0, ( "This is a %s message.\n", "debug" ) );

    to send the output to the debug file. All of the normal printf() +formatting escapes work.

    Note that in the above example the DEBUG message level is set to 0. +Messages at level 0 always print. Basically, if the message level is +less than or equal to the global value DEBUGLEVEL, then the DEBUG +statement is processed.

    The output of the above example would be something like:

        [1998/07/30 16:00:51, 0] file.c:function(128)
    +      This is a debug message.

    Each call to DEBUG() creates a new header *unless* the output produced +by the previous call to DEBUG() did not end with a '\n'. Output to the +debug file is passed through a formatting buffer which is flushed +every time a newline is encountered. If the buffer is not empty when +DEBUG() is called, the new input is simply appended.

    ...but that's really just a Kludge. It was put in place because +DEBUG() has been used to write partial lines. Here's a simple (dumb) +example of the kind of thing I'm talking about:

        DEBUG( 0, ("The test returned " ) );
    +    if( test() )
    +      DEBUG(0, ("True") );
    +    else
    +      DEBUG(0, ("False") );
    +    DEBUG(0, (".\n") );

    Without the format buffer, the output (assuming test() returned true) +would look like this:

        [1998/07/30 16:00:51, 0] file.c:function(256)
    +      The test returned
    +    [1998/07/30 16:00:51, 0] file.c:function(258)
    +      True
    +    [1998/07/30 16:00:51, 0] file.c:function(261)
    +      .

    Which isn't much use. The format buffer kludge fixes this problem.


    The DEBUGADD() Macro

    In addition to the kludgey solution to the broken line problem +described above, there is a clean solution. The DEBUGADD() macro never +generates a header. It will append new text to the current debug +message even if the format buffer is empty. The syntax of the +DEBUGADD() macro is the same as that of the DEBUG() macro.

        DEBUG( 0, ("This is the first line.\n" ) );
    +    DEBUGADD( 0, ("This is the second line.\nThis is the third line.\n" ) );

    Produces

        [1998/07/30 16:00:51, 0] file.c:function(512)
    +      This is the first line.
    +      This is the second line.
    +      This is the third line.


    The DEBUGLVL() Macro

    One of the problems with the DEBUG() macro was that DEBUG() lines +tended to get a bit long. Consider this example from +nmbd_sendannounce.c:

      DEBUG(3,("send_local_master_announcement: type %x for name %s on subnet %s for workgroup %s\n",
    +            type, global_myname, subrec->subnet_name, work->work_group));

    One solution to this is to break it down using DEBUG() and DEBUGADD(), +as follows:

      DEBUG( 3, ( "send_local_master_announcement: " ) );
    +  DEBUGADD( 3, ( "type %x for name %s ", type, global_myname ) );
    +  DEBUGADD( 3, ( "on subnet %s ", subrec->subnet_name ) );
    +  DEBUGADD( 3, ( "for workgroup %s\n", work->work_group ) );

    A similar, but arguably nicer approach is to use the DEBUGLVL() macro. +This macro returns True if the message level is less than or equal to +the global DEBUGLEVEL value, so:

      if( DEBUGLVL( 3 ) )
    +    {
    +    dbgtext( "send_local_master_announcement: " );
    +    dbgtext( "type %x for name %s ", type, global_myname );
    +    dbgtext( "on subnet %s ", subrec->subnet_name );
    +    dbgtext( "for workgroup %s\n", work->work_group );
    +    }

    (The dbgtext() function is explained below.)

    There are a few advantages to this scheme:

    1. The test is performed only once.

    2. You can allocate variables off of the stack that will only be used +within the DEBUGLVL() block.

    3. Processing that is only relevant to debug output can be contained +within the DEBUGLVL() block.


    New Functions


    Coding Suggestions

    So you want to add code to Samba ...

    One of the daunting tasks facing a programmer attempting to write code for +Samba is understanding the various coding conventions used by those most +active in the project. These conventions were mostly unwritten and helped +improve either the portability, stability or consistency of the code. This +document will attempt to document a few of the more important coding +practices used at this time on the Samba project. The coding practices are +expected to change slightly over time, and even to grow as more is learned +about obscure portability considerations. Two existing documents +samba/source/internals.doc and +samba/source/architecture.doc provide +additional information.

    The loosely related question of coding style is very personal and this +document does not attempt to address that subject, except to say that I +have observed that eight character tabs seem to be preferred in Samba +source. If you are interested in the topic of coding style, two oft-quoted +documents are:

    http://lxr.linux.no/source/Documentation/CodingStyle

    http://www.fsf.org/prep/standards_toc.html

    But note that coding style in Samba varies due to the many different +programmers who have contributed.

    Following are some considerations you should use when adding new code to +Samba. First and foremost remember that:

    Portability is a primary consideration in adding function, as is network +compatability with de facto, existing, real world CIFS/SMB implementations. +There are lots of platforms that Samba builds on so use caution when adding +a call to a library function that is not invoked in existing Samba code. +Also note that there are many quite different SMB/CIFS clients that Samba +tries to support, not all of which follow the SNIA CIFS Technical Reference +(or the earlier Microsoft reference documents or the X/Open book on the SMB +Standard) perfectly.

    Here are some other suggestions:

    1. use d_printf instead of printf for display text + reason: enable auto-substitution of translated language text

    2. use SAFE_FREE instead of free + reason: reduce traps due to null pointers

    3. don't use bzero use memset, or ZERO_STRUCT and ZERO_STRUCTP macros + reason: not POSIX

    4. don't use strcpy and strlen (use safe_* equivalents) + reason: to avoid traps due to buffer overruns

    5. don't use getopt_long, use popt functions instead + reason: portability

    6. explicitly add const qualifiers on parm passing in functions where parm + is input only (somewhat controversial but const can be #defined away)

    7. when passing a va_list as an arg, or assigning one to another + please use the VA_COPY() macro + reason: on some platforms, va_list is a struct that must be + initialized in each function...can SEGV if you don't.

    8. discourage use of threads + reason: portability (also see architecture.doc)

    9. don't explicitly include new header files in C files - new h files + should be included by adding them once to includes.h + reason: consistency

    10. don't explicitly extern functions (they are autogenerated by + "make proto" into proto.h) + reason: consistency

    11. use endian safe macros when unpacking SMBs (see byteorder.h and + internals.doc) + reason: not everyone uses Intel

    12. Note Unicode implications of charset handling (see internals.doc). See + pull_* and push_* and convert_string functions. + reason: Internationalization

    13. Don't assume English only + reason: See above

    14. Try to avoid using in/out parameters (functions that return data which + overwrites input parameters) + reason: Can cause stability problems

    15. Ensure copyright notices are correct, don't append Tridge's name to code + that he didn't write. If you did not write the code, make sure that it + can coexist with the rest of the Samba GPLed code.

    16. Consider usage of DATA_BLOBs for length specified byte-data. + reason: stability

    17. Take advantage of tdbs for database like function + reason: consistency

    18. Don't access the SAM_ACCOUNT structure directly, they should be accessed + via pdb_get...() and pdb_set...() functions. + reason: stability, consistency

    19. Don't check a password directly against the passdb, always use the + check_password() interface. + reason: long term pluggability

    20. Try to use asprintf rather than pstrings and fstrings where possible

    21. Use normal C comments / * instead of C++ comments // like + this. Although the C++ comment format is part of the C99 + standard, some older vendor C compilers do not accept it.

    22. Try to write documentation for API functions and structures + explaining the point of the code, the way it should be used, and + any special conditions or results. Mark these with a double-star + comment start / ** so that they can be picked up by Doxygen, as in + this file.

    23. Keep the scope narrow. This means making functions/variables + static whenever possible. We don't want our namespace + polluted. Each module should have a minimal number of externally + visible functions or variables.

    24. Use function pointers to keep knowledge about particular pieces of + code isolated in one place. We don't want a particular piece of + functionality to be spread out across lots of places - that makes + for fragile, hand to maintain code. Instead, design an interface + and use tables containing function pointers to implement specific + functionality. This is particularly important for command + interpreters.

    25. Think carefully about what it will be like for someone else to add + to and maintain your code. If it would be hard for someone else to + maintain then do it another way.

    The suggestions above are simply that, suggestions, but the information may +help in reducing the routine rework done on new code. The preceeding list +is expected to change routinely as new support routines and macros are +added.


    Samba Internals


    The new functions

    The new system works like this:

    1. all char* strings inside Samba are "unix" strings. These are + multi-byte strings that are in the charset defined by the "unix + charset" option in smb.conf.

    2. there is no single fixed character set for unix strings, but any + character set that is used does need the following properties: +

      1. must not contain NULLs except for termination +

      2. must be 7-bit compatible with C strings, so that a constant + string or character in C will be byte-for-byte identical to the + equivalent string in the chosen character set. +

      3. when you uppercase or lowercase a string it does not become + longer than the original string +

      4. must be able to correctly hold all characters that your client + will throw at it +

      For example, UTF-8 is fine, and most multi-byte asian character sets + are fine, but UCS2 could not be used for unix strings as they + contain nulls. +

    3. when you need to put a string into a buffer that will be sent on the + wire, or you need a string in a character set format that is + compatible with the clients character set then you need to use a + pull_ or push_ function. The pull_ functions pull a string from a + wire buffer into a (multi-byte) unix string. The push_ functions + push a string out to a wire buffer.

    4. the two main pull_ and push_ functions you need to understand are + pull_string and push_string. These functions take a base pointer + that should point at the start of the SMB packet that the string is + in. The functions will check the flags field in this packet to + automatically determine if the packet is marked as a unicode packet, + and they will choose whether to use unicode for this string based on + that flag. You may also force this decision using the STR_UNICODE or + STR_ASCII flags. For use in smbd/ and libsmb/ there are wrapper + functions clistr_ and srvstr_ that call the pull_/push_ functions + with the appropriate first argument. +

      You may also call the pull_ascii/pull_ucs2 or push_ascii/push_ucs2 + functions if you know that a particular string is ascii or + unicode. There are also a number of other convenience functions in + charcnv.c that call the pull_/push_ functions with particularly + common arguments, such as pull_ascii_pstring() +

    5. The biggest thing to remember is that internal (unix) strings in Samba + may now contain multi-byte characters. This means you cannot assume + that characters are always 1 byte long. Often this means that you will + have to convert strings to ucs2 and back again in order to do some + (seemingly) simple task. For examples of how to do this see functions + like strchr_m(). I know this is very slow, and we will eventually + speed it up but right now we want this stuff correct not fast.

    6. all lp_ functions now return unix strings. The magic "DOS" flag on + parameters is gone.

    7. all vfs functions take unix strings. Don't convert when passing to them


    Macros in byteorder.h

    This section describes the macros defined in byteorder.h. These macros +are used extensively in the Samba code.


    LAN Manager Samba API

    This section describes the functions need to make a LAN Manager RPC call. +This information had been obtained by examining the Samba code and the LAN +Manager 2.0 API documentation. It should not be considered entirely +reliable.

    call_api(int prcnt, int drcnt, int mprcnt, int mdrcnt, 
    +	char *param, char *data, char **rparam, char **rdata);

    This function is defined in client.c. It uses an SMB transaction to call a +remote api.


    Parameters

    The parameters are as follows:

    1. prcnt: the number of bytes of parameters begin sent.

    2. drcnt: the number of bytes of data begin sent.

    3. mprcnt: the maximum number of bytes of parameters which should be returned

    4. mdrcnt: the maximum number of bytes of data which should be returned

    5. param: a pointer to the parameters to be sent.

    6. data: a pointer to the data to be sent.

    7. rparam: a pointer to a pointer which will be set to point to the returned + paramters. The caller of call_api() must deallocate this memory.

    8. rdata: a pointer to a pointer which will be set to point to the returned + data. The caller of call_api() must deallocate this memory.

    These are the parameters which you ought to send, in the order of their +appearance in the parameter block:

    1. An unsigned 16 bit integer API number. You should set this value with +SSVAL(). I do not know where these numbers are described.

    2. An ASCIIZ string describing the parameters to the API function as defined +in the LAN Manager documentation. The first parameter, which is the server +name, is ommited. This string is based uppon the API function as described +in the manual, not the data which is actually passed.

    3. An ASCIIZ string describing the data structure which ought to be returned.

    4. Any parameters which appear in the function call, as defined in the LAN +Manager API documentation, after the "Server" and up to and including the +"uLevel" parameters.

    5. An unsigned 16 bit integer which gives the size in bytes of the buffer we +will use to receive the returned array of data structures. Presumably this +should be the same as mdrcnt. This value should be set with SSVAL().

    6. An ASCIIZ string describing substructures which should be returned. If no +substructures apply, this string is of zero length.

    The code in client.c always calls call_api() with no data. It is unclear +when a non-zero length data buffer would be sent.


    Return value

    The returned parameters (pointed to by rparam), in their order of appearance +are:

    1. An unsigned 16 bit integer which contains the API function's return code. +This value should be read with SVAL().

    2. An adjustment which tells the amount by which pointers in the returned +data should be adjusted. This value should be read with SVAL(). Basically, +the address of the start of the returned data buffer should have the returned +pointer value added to it and then have this value subtracted from it in +order to obtain the currect offset into the returned data buffer.

    3. A count of the number of elements in the array of structures returned. +It is also possible that this may sometimes be the number of bytes returned.

    When call_api() returns, rparam points to the returned parameters. The +first if these is the result code. It will be zero if the API call +suceeded. This value by be read with "SVAL(rparam,0)".

    The second parameter may be read as "SVAL(rparam,2)". It is a 16 bit offset +which indicates what the base address of the returned data buffer was when +it was built on the server. It should be used to correct pointer before +use.

    The returned data buffer contains the array of returned data structures. +Note that all pointers must be adjusted before use. The function +fix_char_ptr() in client.c can be used for this purpose.

    The third parameter (which may be read as "SVAL(rparam,4)") has something to +do with indicating the amount of data returned or possibly the amount of +data which can be returned if enough buffer space is allowed.


    The smb.conf file

    Lexical Analysis

    Basically, the file is processed on a line by line basis. There are +four types of lines that are recognized by the lexical analyzer +(params.c):

    1. Blank lines - Lines containing only whitespace.

    2. Comment lines - Lines beginning with either a semi-colon or a +pound sign (';' or '#').

    3. Section header lines - Lines beginning with an open square bracket ('[').

    4. Parameter lines - Lines beginning with any other character. +(The default line type.)

    The first two are handled exclusively by the lexical analyzer, which +ignores them. The latter two line types are scanned for

    1. - Section names

    2. - Parameter names

    3. - Parameter values

    These are the only tokens passed to the parameter loader +(loadparm.c). Parameter names and values are divided from one +another by an equal sign: '='.


    Handling of Line Continuation

    Long section header and parameter lines may be extended across +multiple lines by use of the backslash character ('\\'). Line +continuation is ignored for blank and comment lines.

    If the last (non-whitespace) character within a section header or on +a parameter line is a backslash, then the next line will be +(logically) concatonated with the current line by the lexical +analyzer. For example:

    	param name = parameter value string \
    +	with line continuation.

    Would be read as

        param name = parameter value string     with line continuation.

    Note that there are five spaces following the word 'string', +representing the one space between 'string' and '\\' in the top +line, plus the four preceeding the word 'with' in the second line. +(Yes, I'm counting the indentation.)

    Line continuation characters are ignored on blank lines and at the end +of comments. They are *only* recognized within section and parameter +lines.


    Line Continuation Quirks

    Note the following example:

    	param name = parameter value string \
    +    \
    +    with line continuation.

    The middle line is *not* parsed as a blank line because it is first +concatonated with the top line. The result is

    param name = parameter value string         with line continuation.

    The same is true for comment lines.

    	param name = parameter value string \
    +	; comment \
    +    with a comment.

    This becomes:

    param name = parameter value string     ; comment     with a comment.

    On a section header line, the closing bracket (']') is considered a +terminating character, and the rest of the line is ignored. The lines

    	[ section   name ] garbage \
    +    param  name  = value

    are read as

    	[section name]
    +    param name = value


    Syntax

    The syntax of the smb.conf file is as follows:

      <file>            :==  { <section> } EOF
    +  <section>         :==  <section header> { <parameter line> }
    +  <section header>  :==  '[' NAME ']'
    +  <parameter line>  :==  NAME '=' VALUE NL

    Basically, this means that

    1. a file is made up of zero or more sections, and is terminated by + an EOF (we knew that).

    2. A section is made up of a section header followed by zero or more + parameter lines.

    3. A section header is identified by an opening bracket and + terminated by the closing bracket. The enclosed NAME identifies + the section.

    4. A parameter line is divided into a NAME and a VALUE. The *first* + equal sign on the line separates the NAME from the VALUE. The + VALUE is terminated by a newline character (NL = '\n').


    NetBIOS in a Unix World


    Usernames

    The SMB protocol has only a loose username concept. Early SMB +protocols (such as CORE and COREPLUS) have no username concept at +all. Even in later protocols clients often attempt operations +(particularly printer operations) without first validating a username +on the server.

    Unix security is based around username/password pairs. A unix box +should not allow clients to do any substantive operation without some +sort of validation.

    The problem mostly manifests itself when the unix server is in "share +level" security mode. This is the default mode as the alternative +"user level" security mode usually forces a client to connect to the +server as the same user for each connected share, which is +inconvenient in many sites.

    In "share level" security the client normally gives a username in the +"session setup" protocol, but does not supply an accompanying +password. The client then connects to resources using the "tree +connect" protocol, and supplies a password. The problem is that the +user on the PC types the username and the password in different +contexts, unaware that they need to go together to give access to the +server. The username is normally the one the user typed in when they +"logged onto" the PC (this assumes Windows for Workgroups). The +password is the one they chose when connecting to the disk or printer.

    The user often chooses a totally different username for their login as +for the drive connection. Often they also want to access different +drives as different usernames. The unix server needs some way of +divining the correct username to combine with each password.

    Samba tries to avoid this problem using several methods. These succeed +in the vast majority of cases. The methods include username maps, the +service%user syntax, the saving of session setup usernames for later +validation and the derivation of the username from the service name +(either directly or via the user= option).


    File Ownership

    The commonly used SMB protocols have no way of saying "you can't do +that because you don't own the file". They have, in fact, no concept +of file ownership at all.

    This brings up all sorts of interesting problems. For example, when +you copy a file to a unix drive, and the file is world writeable but +owned by another user the file will transfer correctly but will +receive the wrong date. This is because the utime() call under unix +only succeeds for the owner of the file, or root, even if the file is +world writeable. For security reasons Samba does all file operations +as the validated user, not root, so the utime() fails. This can stuff +up shared development diectories as programs like "make" will not get +file time comparisons right.

    There are several possible solutions to this problem, including +username mapping, and forcing a specific username for particular +shares.


    Passwords

    Many SMB clients uppercase passwords before sending them. I have no +idea why they do this. Interestingly WfWg uppercases the password only +if the server is running a protocol greater than COREPLUS, so +obviously it isn't just the data entry routines that are to blame.

    Unix passwords are case sensitive. So if users use mixed case +passwords they are in trouble.

    Samba can try to cope with this by either using the "password level" +option which causes Samba to try the offered password with up to the +specified number of case changes, or by using the "password server" +option which allows Samba to do its validation via another machine +(typically a WinNT server).

    Samba supports the password encryption method used by SMB +clients. Note that the use of password encryption in Microsoft +networking leads to password hashes that are "plain text equivalent". +This means that it is *VERY* important to ensure that the Samba +smbpasswd file containing these password hashes is only readable +by the root user. See the documentation ENCRYPTION.txt for more +details.


    Locking

    The locking calls available under a DOS/Windows environment are much +richer than those available in unix. This means a unix server (like +Samba) choosing to use the standard fcntl() based unix locking calls +to implement SMB locking has to improvise a bit.

    One major problem is that dos locks can be in a 32 bit (unsigned) +range. Unix locking calls are 32 bits, but are signed, giving only a 31 +bit range. Unfortunately OLE2 clients use the top bit to select a +locking range used for OLE semaphores.

    To work around this problem Samba compresses the 32 bit range into 31 +bits by appropriate bit shifting. This seems to work but is not +ideal. In a future version a separate SMB lockd may be added to cope +with the problem.

    It also doesn't help that many unix lockd daemons are very buggy and +crash at the slightest provocation. They normally go mostly unused in +a unix environment because few unix programs use byte range +locking. The stress of huge numbers of lock requests from dos/windows +clients can kill the daemon on some systems.

    The second major problem is the "opportunistic locking" requested by +some clients. If a client requests opportunistic locking then it is +asking the server to notify it if anyone else tries to do something on +the same file, at which time the client will say if it is willing to +give up its lock. Unix has no simple way of implementing +opportunistic locking, and currently Samba has no support for it.


    Port numbers

    There is a convention that clients on sockets use high "unprivilaged" +port numbers (>1000) and connect to servers on low "privilaged" port +numbers. This is enforced in Unix as non-root users can't open a +socket for listening on port numbers less than 1000.

    Most PC based SMB clients (such as WfWg and WinNT) don't follow this +convention completely. The main culprit is the netbios nameserving on +udp port 137. Name query requests come from a source port of 137. This +is a problem when you combine it with the common firewalling technique +of not allowing incoming packets on low port numbers. This means that +these clients can't query a netbios nameserver on the other side of a +low port based firewall.

    The problem is more severe with netbios node status queries. I've +found that WfWg, Win95 and WinNT3.5 all respond to netbios node status +queries on port 137 no matter what the source port was in the +request. This works between machines that are both using port 137, but +it means it's not possible for a unix user to do a node status request +to any of these OSes unless they are running as root. The answer comes +back, but it goes to port 137 which the unix user can't listen +on. Interestingly WinNT3.1 got this right - it sends node status +responses back to the source port in the request.


    Protocol Complexity

    There are many "protocol levels" in the SMB protocol. It seems that +each time new functionality was added to a Microsoft operating system, +they added the equivalent functions in a new protocol level of the SMB +protocol to "externalise" the new capabilities.

    This means the protocol is very "rich", offering many ways of doing +each file operation. This means SMB servers need to be complex and +large. It also means it is very difficult to make them bug free. It is +not just Samba that suffers from this problem, other servers such as +WinNT don't support every variation of every call and it has almost +certainly been a headache for MS developers to support the myriad of +SMB calls that are available.

    There are about 65 "top level" operations in the SMB protocol (things +like SMBread and SMBwrite). Some of these include hundreds of +sub-functions (SMBtrans has at least 120 sub-functions, like +DosPrintQAdd and NetSessionEnum). All of them take several options +that can change the way they work. Many take dozens of possible +"information levels" that change the structures that need to be +returned. Samba supports all but 2 of the "top level" functions. It +supports only 8 (so far) of the SMBtrans sub-functions. Even NT +doesn't support them all.

    Samba currently supports up to the "NT LM 0.12" protocol, which is the +one preferred by Win95 and WinNT3.5. Luckily this protocol level has a +"capabilities" field which specifies which super-duper new-fangled +options the server suports. This helps to make the implementation of +this protocol level much easier.

    There is also a problem with the SMB specications. SMB is a X/Open +spec, but the X/Open book is far from ideal, and fails to cover many +important issues, leaving much to the imagination. Microsoft recently +renamed the SMB protocol CIFS (Common Internet File System) and have +published new specifications. These are far superior to the old +X/Open documents but there are still undocumented calls and features. +This specification is actively being worked on by a CIFS developers +mailing list hosted by Microsft.


    Tracing samba system calls

    This file describes how to do a system call trace on Samba to work out +what its doing wrong. This is not for the faint of heart, but if you +are reading this then you are probably desperate.

    Actually its not as bad as the the above makes it sound, just don't +expect the output to be very pretty :-)

    Ok, down to business. One of the big advantages of unix systems is +that they nearly all come with a system trace utility that allows you +to monitor all system calls that a program is making. This is +extremely using for debugging and also helps when trying to work out +why something is slower than you expect. You can use system tracing +without any special compilation options.

    The system trace utility is called different things on different +systems. On Linux systems its called strace. Under SunOS 4 its called +trace. Under SVR4 style systems (including solaris) its called +truss. Under many BSD systems its called ktrace.

    The first thing you should do is read the man page for your native +system call tracer. In the discussion below I'll assume its called +strace as strace is the only portable system tracer (its available for +free for many unix types) and its also got some of the nicest +features.

    Next, try using strace on some simple commands. For example, strace +ls or strace echo hello.

    +You'll notice that it produces a LOT of output. It is showing you the +arguments to every system call that the program makes and the +result. Very little happens in a program without a system call so you +get lots of output. You'll also find that it produces a lot of +"preamble" stuff showing the loading of shared libraries etc. Ignore +this (unless its going wrong!)

    For example, the only line that really matters in the strace echo +hello output is:

    write(1, "hello\n", 6)                  = 6

    all the rest is just setting up to run the program.

    Ok, now you're familiar with strace. To use it on Samba you need to +strace the running smbd daemon. The way I tend ot use it is to first +login from my Windows PC to the Samba server, then use smbstatus to +find which process ID that client is attached to, then as root I do +strace -p PID to attach to that process. I normally redirect the +stderr output from this command to a file for later perusal. For +example, if I'm using a csh style shell:

    strace -f -p 3872 >& strace.out

    or with a sh style shell:

    strace -f -p 3872 > strace.out 2>&1

    Note the "-f" option. This is only available on some systems, and +allows you to trace not just the current process, but any children it +forks. This is great for finding printing problems caused by the +"print command" being wrong.

    Once you are attached you then can do whatever it is on the client +that is causing problems and you will capture all the system calls +that smbd makes.

    So how do you interpret the results? Generally I search through the +output for strings that I know will appear when the problem +happens. For example, if I am having touble with permissions on a file +I would search for that files name in the strace output and look at +the surrounding lines. Another trick is to match up file descriptor +numbers and "follow" what happens to an open file until it is closed.

    Beyond this you will have to use your initiative. To give you an idea +of what you are looking for here is a piece of strace output that +shows that /dev/null is not world writeable, which +causes printing to fail with Samba:

    [pid 28268] open("/dev/null", O_RDWR)   = -1 EACCES (Permission denied)
    +[pid 28268] open("/dev/null", O_WRONLY) = -1 EACCES (Permission denied)

    The process is trying to first open /dev/null read-write +then read-only. Both fail. This means /dev/null has +incorrect permissions.


    NT Domain RPC's

    Introduction

    This document contains information to provide an NT workstation with login +services, without the need for an NT server. It is the sgml version of http://mailhost.cb1.com/~lkcl/cifsntdomain.txt, controlled by Luke.

    It should be possible to select a domain instead of a workgroup (in the NT +workstation's TCP/IP settings) and after the obligatory reboot, type in a +username, password, select a domain and successfully log in. I would +appreciate any feedback on your experiences with this process, and any +comments, corrections and additions to this document.

    The packets described here can be easily derived from (and are probably +better understood using) Netmon.exe. You will need to use the version +of Netmon that matches your system, in order to correctly decode the +NETLOGON, lsarpc and srvsvc Transact pipes. This document is derived from +NT Service Pack 1 and its corresponding version of Netmon. It is intended +that an annotated packet trace be produced, which will likely be more +instructive than this document.

    Also needed, to fully implement NT Domain Login Services, is the +document describing the cryptographic part of the NT authentication. +This document is available from comp.protocols.smb; from the ntsecurity.net +digest and from the samba digest, amongst other sources.

    A copy is available from:

    http://ntbugtraq.rc.on.ca/SCRIPTS/WA.EXE?A2=ind9708;L=ntbugtraq;O=A;P=2935

    http://mailhost.cb1.com/~lkcl/crypt.html

    A c-code implementation, provided by Linus Nordberg +of this protocol is available from:

    http://samba.org/cgi-bin/mfs/01/digest/1997/97aug/0391.html

    http://mailhost.cb1.com/~lkcl/crypt.txt

    Also used to provide debugging information is the Check Build version of +NT workstation, and enabling full debugging in NETLOGON. This is +achieved by setting the following REG_SZ registry key to 0x1ffffff:

    HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters

    Incorrect direct editing of the registry can cause your +machine to fail. Then again, so can incorrect implementation of this +protocol. See "Liability:" above.

    Bear in mind that each packet over-the-wire will have its origin in an +API call. Therefore, there are likely to be structures, enumerations +and defines that are usefully documented elsewhere.

    This document is by no means complete or authoritative. Missing sections +include, but are not limited to:

    1. Mappings of RIDs to usernames (and vice-versa).

    2. What a User ID is and what a Group ID is.

    3. The exact meaning/definition of various magic constants or enumerations.

    4. The reply error code and use of that error code when a +workstation becomes a member of a domain (to be described later). +Failure to return this error code will make the workstation report +that it is already a member of the domain.

    5. the cryptographic side of the NetrServerPasswordSet command, +which would allow the workstation to change its password. This password is +used to generate the long-term session key. [It is possible to reject this +command, and keep the default workstation password].


    Sources

    cket Traces from Netmonitor (Service Pack 1 and above)
    ul Ashton and Luke Leighton's other "NT Domain" doc.
    FS documentation - cifs6.txt
    FS documentation - cifsrap2.txt


    Credits

    Paul Ashton: loads of work with Net Monitor; understanding the NT authentication system; reference implementation of the NT domain support on which this document is originally based.
    Duncan Stansfield: low-level analysis of MSRPC Pipes.
    Linus Nordberg: producing c-code from Paul's crypto spec.
    Windows Sourcer development team


    Notes and Structures

    Notes

    1. In the SMB Transact pipes, some "Structures", described here, appear to be +4-byte aligned with the SMB header, at their start. Exactly which +"Structures" need aligning is not precisely known or documented.

    2. In the UDP NTLOGON Mailslots, some "Structures", described here, appear to be +2-byte aligned with the start of the mailslot, at their start.

    3. Domain SID is of the format S-revision-version-auth1-auth2...authN. +e.g S-1-5-123-456-789-123-456. the 5 could be a sub-revision.

    4. any undocumented buffer pointers must be non-zero if the string buffer it +refers to contains characters. exactly what value they should be is unknown. +0x0000 0002 seems to do the trick to indicate that the buffer exists. a +NULL buffer pointer indicates that the string buffer is of zero length. +If the buffer pointer is NULL, then it is suspected that the structure it +refers to is NOT put into (or taken out of) the SMB data stream. This is +empirically derived from, for example, the LSA SAM Logon response packet, +where if the buffer pointer is NULL, the user information is not inserted +into the data stream. Exactly what happens with an array of buffer pointers +is not known, although an educated guess can be made.

    5. an array of structures (a container) appears to have a count and a pointer. +if the count is zero, the pointer is also zero. no further data is put +into or taken out of the SMB data stream. if the count is non-zero, then +the pointer is also non-zero. immediately following the pointer is the +count again, followed by an array of container sub-structures. the count +appears a third time after the last sub-structure.


    Structures


    USER_INFO (user logon info)

    Note: it would be nice to know what the 16 byte user session key is for.

    NTTIME

    logon time

    NTTIME

    logoff time

    NTTIME

    kickoff time

    NTTIME

    password last set time

    NTTIME

    password can change time

    NTTIME

    password must change time

    UNIHDR

    username unicode string header

    UNIHDR

    user's full name unicode string header

    UNIHDR

    logon script unicode string header

    UNIHDR

    profile path unicode string header

    UNIHDR

    home directory unicode string header

    UNIHDR

    home directory drive unicode string header

    UINT16

    logon count

    UINT16

    bad password count

    UINT32

    User ID

    UINT32

    Group ID

    UINT32

    num groups

    VOID*

    undocumented buffer pointer to groups.

    UINT32

    user flags

    char[16]

    user session key

    UNIHDR

    logon server unicode string header

    UNIHDR

    logon domain unicode string header

    VOID*

    undocumented logon domain id pointer

    char[40]

    40 undocumented padding bytes. future expansion?

    UINT32

    0 - num_other_sids?

    VOID*

    NULL - undocumented pointer to other domain SIDs.

    UNISTR2

    username unicode string

    UNISTR2

    user's full name unicode string

    UNISTR2

    logon script unicode string

    UNISTR2

    profile path unicode string

    UNISTR2

    home directory unicode string

    UNISTR2

    home directory drive unicode string

    UINT32

    num groups

    GID[num_groups]

    group info

    UNISTR2

    logon server unicode string

    UNISTR2

    logon domain unicode string

    DOM_SID

    domain SID

    DOM_SID[num_sids]

    other domain SIDs?


    SH_INFO_1_PTR (pointers to level 1 share info strings)

    Note: see cifsrap2.txt section5, page 10.

    0 for shi1_type indicates a Disk.
    1 for shi1_type indicates a Print Queue.
    2 for shi1_type indicates a Device.
    3 for shi1_type indicates an IPC pipe.
    0x8000 0000 (top bit set in shi1_type) indicates a hidden share.


    SERVER_INFO_101

    Note: see cifs6.txt section 6.4 - the fields described therein will be of assistance here. for example, the type listed below is the same as fServerType, which is described in 6.4.1.

    SV_TYPE_WORKSTATION

    0x00000001 All workstations

    SV_TYPE_SERVER

    0x00000002 All servers

    SV_TYPE_SQLSERVER

    0x00000004 Any server running with SQL server

    SV_TYPE_DOMAIN_CTRL

    0x00000008 Primary domain controller

    SV_TYPE_DOMAIN_BAKCTRL

    0x00000010 Backup domain controller

    SV_TYPE_TIME_SOURCE

    0x00000020 Server running the timesource service

    SV_TYPE_AFP

    0x00000040 Apple File Protocol servers

    SV_TYPE_NOVELL

    0x00000080 Novell servers

    SV_TYPE_DOMAIN_MEMBER

    0x00000100 Domain Member

    SV_TYPE_PRINTQ_SERVER

    0x00000200 Server sharing print queue

    SV_TYPE_DIALIN_SERVER

    0x00000400 Server running dialin service.

    SV_TYPE_XENIX_SERVER

    0x00000800 Xenix server

    SV_TYPE_NT

    0x00001000 NT server

    SV_TYPE_WFW

    0x00002000 Server running Windows for

    SV_TYPE_SERVER_NT

    0x00008000 Windows NT non DC server

    SV_TYPE_POTENTIAL_BROWSER

    0x00010000 Server that can run the browser service

    SV_TYPE_BACKUP_BROWSER

    0x00020000 Backup browser server

    SV_TYPE_MASTER_BROWSER

    0x00040000 Master browser server

    SV_TYPE_DOMAIN_MASTER

    0x00080000 Domain Master Browser server

    SV_TYPE_LOCAL_LIST_ONLY

    0x40000000 Enumerate only entries marked "local"

    SV_TYPE_DOMAIN_ENUM

    0x80000000 Enumerate Domains. The pszServer and pszDomain parameters must be NULL.


    MSRPC over Transact Named Pipe

    For details on the SMB Transact Named Pipe, see cifs6.txt


    MSRPC Pipes

    The MSRPC is conducted over an SMB Transact Pipe with a name of +\PIPE\. You must first obtain a 16 bit file handle, by +sending a SMBopenX with the pipe name \PIPE\srvsvc for +example. You can then perform an SMB Trans, +and must carry out an SMBclose on the file handle once you are finished.

    Trans Requests must be sent with two setup UINT16s, no UINT16 params (none +known about), and UINT8 data parameters sufficient to contain the MSRPC +header, and MSRPC data. The first UINT16 setup parameter must be either +0x0026 to indicate an RPC, or 0x0001 to indicate Set Named Pipe Handle +state. The second UINT16 parameter must be the file handle for the pipe, +obtained above.

    The Data section for an API Command of 0x0026 (RPC pipe) in the Trans +Request is the RPC Header, followed by the RPC Data. The Data section for +an API Command of 0x0001 (Set Named Pipe Handle state) is two bytes. The +only value seen for these two bytes is 0x00 0x43.

    MSRPC Responses are sent as response data inside standard SMB Trans +responses, with the MSRPC Header, MSRPC Data and MSRPC tail.

    It is suspected that the Trans Requests will need to be at least 2-byte +aligned (probably 4-byte). This is standard practice for SMBs. It is also +independent of the observed 4-byte alignments with the start of the MSRPC +header, including the 4-byte alignment between the MSRPC header and the +MSRPC data.

    First, an SMBtconX connection is made to the IPC$ share. The connection +must be made using encrypted passwords, not clear-text. Then, an SMBopenX +is made on the pipe. Then, a Set Named Pipe Handle State must be sent, +after which the pipe is ready to accept API commands. Lastly, and SMBclose +is sent.

    To be resolved:

    lkcl/01nov97 there appear to be two additional bytes after the null-terminated \PIPE\ name for the RPC pipe. Values seen so far are +listed below:

            initial SMBopenX request:         RPC API command 0x26 params:
    +        "\\PIPE\\lsarpc"                  0x65 0x63; 0x72 0x70; 0x44 0x65;
    +        "\\PIPE\\srvsvc"                  0x73 0x76; 0x4E 0x00; 0x5C 0x43;


    Header

    [section to be rewritten, following receipt of work by Duncan Stansfield]

    Interesting note: if you set packed data representation to 0x0100 0000 +then all 4-byte and 2-byte word ordering is turned around!

    The start of each of the NTLSA and NETLOGON named pipes begins with:

    offset: 00

    Variable type: UINT8

    Variable data: 5 - RPC major version

    offset: 01

    Variable type: UINT8

    Variable data: 0 - RPC minor version

    offset: 02

    Variable type: UINT8

    Variable data: 2 - RPC response packet

    offset: 03

    Variable type: UINT8

    Variable data: 3 - (FirstFrag bit-wise or with LastFrag)

    offset: 04

    Variable type: UINT32

    Variable data: 0x1000 0000 - packed data representation

    offset: 08

    Variable type: UINT16

    Variable data: fragment length - data size (bytes) inc header and tail.

    offset: 0A

    Variable type: UINT16

    Variable data: 0 - authentication length

    offset: 0C

    Variable type: UINT32

    Variable data: call identifier. matches 12th UINT32 of incoming RPC data.

    offset: 10

    Variable type: UINT32

    Variable data: allocation hint - data size (bytes) minus header and tail.

    offset: 14

    Variable type: UINT16

    Variable data: 0 - presentation context identifier

    offset: 16

    Variable type: UINT8

    Variable data: 0 - cancel count

    offset: 17

    Variable type: UINT8

    Variable data: in replies: 0 - reserved; in requests: opnum - see #defines.

    offset: 18

    Variable type: ......

    Variable data: start of data (goes on for allocation_hint bytes)


    Interface identification

    the interfaces are numbered. as yet I haven't seen more than one interface used on the same pipe name srvsvc

    abstract (0x4B324FC8, 0x01D31670, 0x475A7812, 0x88E16EBF, 0x00000003)
    +transfer (0x8A885D04, 0x11C91CEB, 0x0008E89F, 0x6048102B, 0x00000002)


    RPC Bind / Bind Ack

    RPC Binds are the process of associating an RPC pipe (e.g \PIPE\lsarpc) +with a "transfer syntax" (see RPC_Iface structure). The purpose for doing +this is unknown.

    Note: The RPC_ResBind SMB Transact request is sent with two uint16 setup parameters. The first is 0x0026; the second is the file handle + returned by the SMBopenX Transact response.

    Note: The RPC_ResBind members maxtsize, maxrsize and assocgid are the same in the response as the same members in the RPC_ReqBind. The + RPC_ResBind member transfersyntax is the same in the response as + the

    Note: The RPC_ResBind response member secondaddr contains the name of what is presumed to be the service behind the RPC pipe. The + mapping identified so far is:

    Note: The RPC_Packet fraglength member in both the Bind Request and Bind Acknowledgment must contain the length of the entire RPC data, including the RPC_Packet header.

    Request:

    RPC_Packet
    RPC_ReqBind

    Response:

    RPC_Packet
    RPC_ResBind


    NTLSA Transact Named Pipe

    The sequence of actions taken on this pipe are:

    Establish a connection to the IPC$ share (SMBtconX). use encrypted passwords.
    Open an RPC Pipe with the name "\\PIPE\\lsarpc". Store the file handle.
    Using the file handle, send a Set Named Pipe Handle state to 0x4300.
    Send an LSA Open Policy request. Store the Policy Handle.
    Using the Policy Handle, send LSA Query Info Policy requests, etc.
    Using the Policy Handle, send an LSA Close.
    Close the IPC$ share.

    Defines for this pipe, identifying the query are:


    NETLOGON rpc Transact Named Pipe

    The sequence of actions taken on this pipe are:

    tablish a connection to the IPC$ share (SMBtconX). use encrypted passwords.
    en an RPC Pipe with the name "\\PIPE\\NETLOGON". Store the file handle.
    ing the file handle, send a Set Named Pipe Handle state to 0x4300.
    eate Client Challenge. Send LSA Request Challenge. Store Server Challenge.
    lculate Session Key. Send an LSA Auth 2 Challenge. Store Auth2 Challenge.
    lc/Verify Client Creds. Send LSA Srv PW Set. Calc/Verify Server Creds.
    lc/Verify Client Creds. Send LSA SAM Logon . Calc/Verify Server Creds.
    lc/Verify Client Creds. Send LSA SAM Logoff. Calc/Verify Server Creds.
    ose the IPC$ share.

    Defines for this pipe, identifying the query are


    LSA SAM Logon

    Note: valid_user is True iff the username and password hash are valid for + the requested domain.


    Response

    if (valid_user)
    +{
    +	UINT16      3 - switch value indicating USER_INFO structure.
    +    VOID*     non-zero - pointer to USER_INFO structure
    +    USER_INFO user logon information
    +
    +    UINT32    1 - Authoritative response; 0 - Non-Auth?
    +
    +    return    0 - indicates success
    +}
    +else
    +{
    +	UINT16    0 - switch value.  value to indicate no user presumed.
    +    VOID*     0x0000 0000 - indicates no USER_INFO structure.
    +
    +    UINT32    1 - Authoritative response; 0 - Non-Auth?
    +
    +    return    0xC000 0064 - NT_STATUS_NO_SUCH_USER.
    +}


    \\MAILSLOT\NET\NTLOGON

    Note: mailslots will contain a response mailslot, to which the response + should be sent. the target NetBIOS name is REQUEST_NAME<20>, where + REQUEST_NAME is the name of the machine that sent the request.


    SRVSVC Transact Named Pipe

    Defines for this pipe, identifying the query are:


    Cryptographic side of NT Domain Authentication


    Protocol

    C->S ReqChal,Cc S->C Cs

    C & S compute session key Ks = E(PW[9..15],E(PW[0..6],Add(Cc,Cs)))

    C: Rc = Cred(Ks,Cc) C->S Authenticate,Rc S: Rs = Cred(Ks,Cs), +assert(Rc == Cred(Ks,Cc)) S->C Rs C: assert(Rs == Cred(Ks,Cs))

    On joining the domain the client will optionally attempt to change its +password and the domain controller may refuse to update it depending +on registry settings. This will also occur weekly afterwards.

    C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S ServerPasswordSet,Rc',Tc, +arc4(Ks[0..7,16],lmowf(randompassword()) C: Rc = Cred(Ks,Rc+Tc+1) S: +assert(Rc' == Cred(Ks,Rc+Tc)), Ts = Time() S: Rs' = Cred(Ks,Rs+Tc+1) +S->C Rs',Ts C: assert(Rs' == Cred(Ks,Rs+Tc+1)) S: Rs = Rs'

    User: U with password P wishes to login to the domain (incidental data +such as workstation and domain omitted)

    C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S NetLogonSamLogon,Rc',Tc,U, +arc4(Ks[0..7,16],16,ntowf(P),16), arc4(Ks[0..7,16],16,lmowf(P),16) S: +assert(Rc' == Cred(Ks,Rc+Tc)) assert(passwords match those in SAM) S: +Ts = Time()

    S->C Cred(Ks,Cred(Ks,Rc+Tc+1)),userinfo(logon script,UID,SIDs,etc) C: +assert(Rs == Cred(Ks,Cred(Rc+Tc+1)) C: Rc = Cred(Ks,Rc+Tc+1)


    Comments

    On first joining the domain the session key could be computed by +anyone listening in on the network as the machine password has a well +known value. Until the machine is rebooted it will use this session +key to encrypt NT and LM one way functions of passwords which are +password equivalents. Any user who logs in before the machine has been +rebooted a second time will have their password equivalent exposed. Of +course the new machine password is exposed at this time anyway.

    None of the returned user info such as logon script, profile path and +SIDs *appear* to be protected by anything other than the TCP checksum.

    The server time stamps appear to be ignored.

    The client sends a ReturnAuthenticator in the SamLogon request which I +can't find a use for. However its time is used as the timestamp +returned by the server.

    The password OWFs should NOT be sent over the network reversibly +encrypted. They should be sent using ARC4(Ks,md4(owf)) with the server +computing the same function using the owf values in the SAM.


    SIDs and RIDs

    SIDs and RIDs are well documented elsewhere.

    A SID is an NT Security ID (see DOM_SID structure). They are of the form:

    revision-NN-SubAuth1-SubAuth2-SubAuth3...
    revision-0xNNNNNNNNNNNN-SubAuth1-SubAuth2-SubAuth3...

    currently, the SID revision is 1. +The Sub-Authorities are known as Relative IDs (RIDs).


    Well-known RIDS

    A RID is a sub-authority value, as part of either a SID, or in the case +of Group RIDs, part of the DOM_GID structure, in the USER_INFO_1 +structure, in the LSA SAM Logon response.

    \ No newline at end of file diff --git a/docs/htmldocs/Samba-HOWTO-Collection.html b/docs/htmldocs/Samba-HOWTO-Collection.html index ffb6939e173..71e27a2e801 100644 --- a/docs/htmldocs/Samba-HOWTO-Collection.html +++ b/docs/htmldocs/Samba-HOWTO-Collection.html @@ -1,10 +1,12 @@ + SAMBA Project Documentation

    SAMBA Project Documentation

    SAMBA Project Documentation

    SAMBA Team

    SAMBA Team

    Abstract

    Abstract

    Last UpdateLast Update : Thu Aug 15 12:48:45 CDT 2002

    This book is a collection of HOWTOs added to Samba documentation over the years. @@ -73,34 +68,34 @@ CLASS="TOC" >Table of Contents

    1. How to Install and Test SAMBA
    1.1. Step 0: Read the man pages
    1.2. Step 1: Building the Binaries
    1.3. Step 2: The all important step
    1.4. Step 3: Create the smb configuration file.
    1.5. Step 4: Test your config file with
    1.6. Step 5: Starting the smbd and nmbd
    1.6.1. Step 5a: Starting from inetd.conf
    1.6.2. Step 5b. Alternative: starting it as a daemon
    1.7. Step 6: Try listing the shares available on your server
    1.8. Step 7: Try connecting with the unix client
    1.9. Step 8: Try connecting from a DOS, WfWg, Win9x, WinNT, Win2k, OS/2, etc... client
    1.10. What If Things Don't Work?
    1.10.1. Diagnosing Problems
    1.10.2. Scope IDs
    1.10.3. Choosing the Protocol Level
    1.10.4. Printing from UNIX to a Client PC
    1.10.5. Locking
    1.10.6. Mapping Usernames
    2. Diagnosing your samba server
    2.1. Introduction
    2.2. Assumptions
    2.3. Tests
    2.3.1. Test 1
    2.3.2. Test 2
    2.3.3. Test 3
    2.3.4. Test 4
    2.3.5. Test 5
    2.3.6. Test 6
    2.3.7. Test 7
    2.3.8. Test 8
    2.3.9. Test 9
    2.3.10. Test 10
    2.3.11. Test 11
    2.4. Still having troubles?
    3. Integrating MS Windows networks with Samba
    3.1. Agenda
    3.2. Name Resolution in a pure Unix/Linux world
    3.2.1. /etc/hosts
    3.2.2. /etc/resolv.conf
    3.2.3. /etc/host.conf
    3.2.4. /etc/nsswitch.conf
    3.3. Name resolution as used within MS Windows networking
    3.3.1. The NetBIOS Name Cache
    3.3.2. The LMHOSTS file
    3.3.3. HOSTS file
    3.3.4. DNS Lookup
    3.3.5. WINS Lookup
    3.4. How browsing functions and how to deploy stable and dependable browsing using Samba
    3.5. MS Windows security options and how to configure Samba for seemless integration
    3.5.1. Use MS Windows NT as an authentication server
    3.5.2. Make Samba a member of an MS Windows NT security domain
    3.5.3. Configure Samba as an authentication server
    3.5.3.1. Users
    3.5.3.2. MS Windows NT Machine Accounts
    3.6. Conclusions
    4. Configuring PAM for distributed but centrally managed authentication
    4.1. Samba and PAM
    4.2. Distributed Authentication
    4.3. PAM Configuration in smb.conf
    5. Hosting a Microsoft Distributed File System tree on Samba
    5.1. Instructions
    5.1.1. Notes
    6. UNIX Permission Bits and Windows NT Access Control Lists
    6.1. Viewing and changing UNIX permissions using the NT security dialogs
    6.2. How to view file security on a Samba share
    6.3. Viewing file ownership
    6.4. Viewing file or directory permissions
    6.4.1. File Permissions
    6.4.2. Directory Permissions
    6.5. Modifying file or directory permissions
    6.6. Interaction with the standard Samba create mask parameters
    6.7. Interaction with the standard Samba file attribute mapping
    7. Printing Support in Samba 2.2.x
    7.1. Introduction
    7.2. Configuration
    7.2.1. Creating [print$]
    7.2.2. Setting Drivers for Existing Printers
    7.2.3. Support a large number of printers
    7.2.4. Adding New Printers via the Windows NT APW
    7.2.5. Samba and Printer Ports
    7.3. The Imprints Toolset
    7.3.1. What is Imprints?
    7.3.2. Creating Printer Driver Packages
    7.3.3. The Imprints server
    7.3.4. The Installation Client
    7.4.
    8. Debugging Printing Problems
    8.1. Introduction
    8.2. Debugging printer problems
    8.3. What printers do I have?
    8.4. Setting up printcap and print servers
    8.5. Job sent, no output
    8.6. Job sent, strange output
    8.7. Raw PostScript printed
    8.8. Advanced Printing
    8.9. Real debugging
    9. Security levels
    9.1. Introduction
    9.2. More complete description of security levels
    10. security = domain in Samba 2.x
    10.1. Joining an NT Domain with Samba 2.2
    10.2. Samba and Windows 2000 Domains
    10.3. Why is this better than security = server?
    11. Unified Logons between Windows NT and UNIX using Winbind
    11.1. Abstract
    11.2. Introduction
    11.3. What Winbind Provides
    11.3.1. Target Uses
    11.4. How Winbind Works
    11.4.1. Microsoft Remote Procedure Calls
    11.4.2. Name Service Switch
    11.4.3. Pluggable Authentication Modules
    11.4.4. User and Group ID Allocation
    11.4.5. Result Caching
    11.5. Installation and Configuration
    11.5.1. Introduction
    11.5.2. Requirements
    11.5.3. Testing Things Out
    11.5.3.1. Configure and compile SAMBA
    11.5.3.2. Configure nsswitch.conf and the -winbind libraries
    11.5.3.3. Configure smb.conf
    11.5.3.4. Join the SAMBA server to the PDC domain
    11.5.3.5. Start up the winbindd daemon and test it!
    11.5.3.6. Fix the init.d startup scripts
    11.5.3.7. Configure Winbind and PAM
    11.6. Limitations
    11.7. Conclusion
    12. How to Configure Samba 2.2 as a Primary Domain Controller
    12.1. Prerequisite Reading
    12.2. Background
    12.3. Configuring the Samba Domain Controller
    12.4. Creating Machine Trust Accounts and Joining Clients to the Domain
    12.4.1. Manual Creation of Machine Trust Accounts
    12.4.2. "On-the-Fly" Creation of Machine Trust Accounts
    12.4.3. Joining the Client to the Domain
    12.5. Common Problems and Errors
    12.6. System Policies and Profiles
    12.7. What other help can I get?
    12.8. Domain Control for Windows 9x/ME
    12.8.1. Configuration Instructions: Network Logons
    12.8.2. Configuration Instructions: Setting up Roaming User Profiles
    12.8.2.1. Windows NT Configuration
    12.8.2.2. Windows 9X Configuration
    12.8.2.3. Win9X and WinNT Configuration
    12.8.2.4. Windows 9X Profile Setup
    12.8.2.5. Windows NT Workstation 4.0
    12.8.2.6. Windows NT Server
    12.8.2.7. Sharing Profiles between W95 and NT Workstation 4.0
    12.9. DOMAIN_CONTROL.txt : Windows NT Domain Control & Samba
    13. How to Act as a Backup Domain Controller in a Purely Samba Controlled Domain
    13.1. Prerequisite Reading
    13.2. Background
    13.3. What qualifies a Domain Controller on the network?
    13.3.1. How does a Workstation find its domain controller?
    13.3.2. When is the PDC needed?
    13.4. Can Samba be a Backup Domain Controller?
    13.5. How do I set up a Samba BDC?
    13.5.1. How do I replicate the smbpasswd file?
    14. Storing Samba's User/Machine Account information in an LDAP Directory
    14.1. Purpose
    14.2. Introduction
    14.3. Supported LDAP Servers
    14.4. Schema and Relationship to the RFC 2307 posixAccount
    14.5. Configuring Samba with LDAP
    14.5.1. OpenLDAP configuration
    14.5.2. Configuring Samba
    14.6. Accounts and Groups management
    14.7. Security and sambaAccount
    14.8. LDAP specials attributes for sambaAccounts
    14.9. Example LDIF Entries for a sambaAccount
    14.10. Comments
    15. Improved browsing in samba
    15.1. Overview of browsing
    15.2. Browsing support in samba
    15.3. Problem resolution
    15.4. Browsing across subnets
    15.4.1. How does cross subnet browsing work ?
    15.5. Setting up a WINS server
    15.6. Setting up Browsing in a WORKGROUP
    15.7. Setting up Browsing in a DOMAIN
    15.8. Forcing samba to be the master
    15.9. Making samba the domain master
    15.10. Note about broadcast addresses
    15.11. Multiple interfaces
    16. Samba performance issues
    16.1. Comparisons
    16.2. Oplocks
    16.2.1. Overview
    16.2.2. Level2 Oplocks
    16.2.3. Old 'fake oplocks' option - deprecated
    16.3. Socket options
    16.4. Read size
    16.5. Max xmit
    16.6. Locking
    16.7. Share modes
    16.8. Log level
    16.9. Wide lines
    16.10. Read raw
    16.11. Write raw
    16.12. Read prediction
    16.13. Memory mapping
    16.14. Slow Clients
    16.15. Slow Logins
    16.16. Client tuning
    16.17. My Results
    17. OS2 Client HOWTOSamba and other CIFS clients
    17.1. FAQsMacintosh clients?
    OS2 Client
    17.1.1. How can I configure OS/2 Warp Connect or OS/2 Warp 4 as a client for Samba?
    17.1.2. How can I configure OS/2 Warp 3 (not Connect), OS/2 1.2, 1.3 or 2.x for Samba?
    17.1.3. Are there any other issues when OS/2 (any version) is used as a client?
    17.1.4. How do I get printer driver download working for OS/2 clients?
    Windows for Workgroups
    Use latest TCP/IP stack from Microsoft
    Delete .pwl files after password change
    Configure WfW password handling
    Case handling of passwords
    Windows '95/'98
    Windows 2000 Service Pack 2
    18. HOWTO Access Samba source code via CVS
    18.1. Introduction
    18.2. CVS Access to samba.org
    18.2.1. Access via CVSweb
    18.2.2. Access via cvs
    19. Reporting Bugs
    19.1. Introduction
    19.2. General info
    19.3. Debug levels
    19.4. Internal errors
    19.5. Attaching to a running process
    19.6. Patches
    IndexGroup mapping HOWTO
    Portability
    HPUX
    SCO Unix
    DNIX

    Chapter 1. How to Install and Test SAMBA

    How to Install and Test SAMBA

    1.1. Step 0: Read the man pages

    Step 0: Read the man pages

    The man pages distributed with SAMBA contain lots of useful info that will help to get you started. @@ -1452,12 +1415,10 @@ TARGET="_top" >



    1.2. Step 1: Building the Binaries

    Step 1: Building the Binaries

    To do this, first run the program



    1.3. Step 2: The all important step

    Step 2: The all important step

    At this stage you must fetch yourself a coffee or other drink you find stimulating. Getting the rest @@ -1568,12 +1527,10 @@ NAME="AEN56" >



    1.4. Step 3: Create the smb configuration file.

    Step 3: Create the smb configuration file.

    There are sample configuration files in the examples subdirectory in the distribution. I suggest you read them @@ -1633,16 +1590,14 @@ CLASS="FILENAME" >



    1.6. Step 5: Starting the smbd and nmbd

    Step 5: Starting the smbd and nmbd

    You must choose to start smbd and nmbd either as daemons or from



    1.6.1. Step 5a: Starting from inetd.conf

    Step 5a: Starting from inetd.conf

    NOTE; The following will be different if you use NIS or NIS+ to distributed services maps.



    1.6.2. Step 5b. Alternative: starting it as a daemon

    Step 5b. Alternative: starting it as a daemon

    To start the server as a daemon you should create a script something like this one, perhaps calling @@ -1876,13 +1825,11 @@ CLASS="FILENAME" >



    1.7. Step 6: Try listing the shares available on your - server

    Step 6: Try listing the shares available on your + server



    1.8. Step 7: Try connecting with the unix client

    Step 7: Try connecting with the unix client



    1.9. Step 8: Try connecting from a DOS, WfWg, Win9x, WinNT, - Win2k, OS/2, etc... client

    Step 8: Try connecting from a DOS, WfWg, Win9x, WinNT, + Win2k, OS/2, etc... client

    Try mounting disks. eg:



    1.10. What If Things Don't Work?

    What If Things Don't Work?

    If nothing works and you start to think "who wrote this pile of trash" then I suggest you do step 2 again (and @@ -2052,12 +1993,10 @@ NAME="AEN174" easier.



    1.10.1. Diagnosing Problems

    Diagnosing Problems

    If you have installation problems then go to



    1.10.2. Scope IDs

    Scope IDs

    By default Samba uses a blank scope ID. This means all your windows boxes must also have a blank scope ID. @@ -2084,12 +2021,10 @@ NAME="AEN183" >



    1.10.3. Choosing the Protocol Level

    Choosing the Protocol Level

    The SMB protocol has many dialects. Currently Samba supports 5, called CORE, COREPLUS, LANMAN1, @@ -2125,30 +2060,29 @@ CLASS="FILENAME" >



    1.10.4. Printing from UNIX to a Client PC

    Printing from UNIX to a Client PC

    To use a printer that is available via a smb-based - server from a unix host you will need to compile the + server from a unix host with LPR you will need to compile the smbclient program. You then need to install the script "smbprint". Read the instruction in smbprint for more details.

    There is also a SYSV style script that does much the same thing called smbprint.sysv. It contains instructions.

    See the CUPS manual for information about setting up + printing from a unix host with CUPS to a smb-based server.



    1.10.5. Locking

    Locking

    One area which sometimes causes trouble is locking.



    1.10.6. Mapping Usernames

    Mapping Usernames

    If you have different usernames on the PCs and the unix server then take a look at the "username map" option. @@ -2220,17 +2152,13 @@ NAME="AEN208" CLASS="CHAPTER" >


    Chapter 2. Diagnosing your samba server

    Diagnosing your samba server

    2.1. Introduction

    Introduction

    This file contains a list of tests you can perform to validate your Samba server. It also tells you what the likely cause of the problem @@ -2247,12 +2175,10 @@ ignore your email.



    2.2. Assumptions

    Assumptions

    In all of the tests I assume you have a Samba server called BIGSERVER and a PC called ACLIENT both in workgroup TESTGROUP. I also assume the @@ -2297,20 +2223,16 @@ best way to check this is with "testparm smb.conf"



    2.3. Tests

    Tests

    2.3.1. Test 1

    Test 1

    In the directory in which you store your smb.conf file, run the command "testparm smb.conf". If it reports any errors then your smb.conf @@ -2327,12 +2249,10 @@ CLASS="FILENAME" >



    2.3.2. Test 2

    Test 2

    Run the command "ping BIGSERVER" from the PC and "ping ACLIENT" from the unix box. If you don't get a valid response then your TCP/IP @@ -2353,12 +2273,10 @@ this is done via the ipfwadm program.)



    2.3.3. Test 3

    Test 3

    Run the command "smbclient -L BIGSERVER" on the unix box. You should get a list of available shares back.



    2.3.4. Test 4

    Test 4

    Run the command "nmblookup -B BIGSERVER __SAMBA__". You should get the IP address of your Samba server back.



    2.3.5. Test 5

    Test 5

    run the command



    2.3.6. Test 6

    Test 6

    Run the command



    2.3.7. Test 7

    Test 7

    Run the command



    2.3.8. Test 8

    Test 8

    On the PC type the command



    2.3.9. Test 9

    Test 9

    Run the command



    2.3.10. Test 10

    Test 10

    Run the command



    2.3.11. Test 11

    Test 11

    From file manager try to browse the server. Your samba server should appear in the browse list of your local workgroup (or the one you @@ -2745,12 +2647,10 @@ for encrypted passwords (refer to the Makefile).



    2.4. Still having troubles?

    Still having troubles?

    Try the mailing list or newsgroup, or use the ethereal utility to sniff the problem. The official samba mailing list can be reached at @@ -2774,17 +2674,13 @@ TARGET="_top" CLASS="CHAPTER" >


    Chapter 3. Integrating MS Windows networks with Samba

    Integrating MS Windows networks with Samba

    3.1. Agenda

    Agenda

    To identify the key functional mechanisms of MS Windows networking to enable the deployment of Samba as a means of extending and/or @@ -2846,12 +2742,10 @@ TYPE="a" >



    3.2. Name Resolution in a pure Unix/Linux world

    Name Resolution in a pure Unix/Linux world

    The key configuration files covered in this section are:



    3.2.1. /etc/hosts

    Contains a static list of IP Addresses and names. eg:



    3.2.2. /etc/resolv.conf

    This file tells the name resolution libraries:



    3.2.4. /etc/nsswitch.conf

    This file controls the actual name resolution targets. The file typically has resolver object specifications as follows:



    3.3. Name resolution as used within MS Windows networking

    Name resolution as used within MS Windows networking

    MS Windows networking is predicated about the name each machine is given. This name is known variously (and inconsistently) as @@ -3226,12 +3110,10 @@ Since we are primarily concerned with TCP/IP this demonstration is limited to this area.



    3.3.1. The NetBIOS Name Cache

    The NetBIOS Name Cache

    All MS Windows machines employ an in memory buffer in which is stored the NetBIOS names and IP addresses for all external @@ -3253,12 +3135,10 @@ is called "nmblookup".



    3.3.2. The LMHOSTS file

    The LMHOSTS file

    This file is usually located in MS Windows NT 4.0 or 2000 in



    3.3.3. HOSTS file

    HOSTS file

    This file is usually located in MS Windows NT 4.0 or 2000 in



    3.3.4. DNS Lookup

    DNS Lookup

    This capability is configured in the TCP/IP setup area in the network configuration facility. If enabled an elaborate name resolution sequence @@ -3407,12 +3283,10 @@ lookup is used.



    3.3.5. WINS Lookup

    WINS Lookup

    A WINS (Windows Internet Name Server) service is the equivaent of the rfc1001/1002 specified NBNS (NetBIOS Name Server). A WINS server stores @@ -3468,13 +3342,11 @@ of the WINS server.



    3.4. How browsing functions and how to deploy stable and -dependable browsing using Samba

    How browsing functions and how to deploy stable and +dependable browsing using Samba

    As stated above, MS Windows machines register their NetBIOS names (i.e.: the machine name for each service type in operation) on start @@ -3535,13 +3407,11 @@ and so on.



    3.5. MS Windows security options and how to configure -Samba for seemless integration

    MS Windows security options and how to configure +Samba for seemless integration

    MS Windows clients may use encrypted passwords as part of a challenege/response authentication model (a.k.a. NTLMv1) or @@ -3657,8 +3527,9 @@ CLASS="PARAMETER" >password level must be set to the maximum -number of upper case letter which couldcould appear is a password. Note that is the server OS uses the traditional DES version of crypt(), then a



    3.5.1. Use MS Windows NT as an authentication server

    Use MS Windows NT as an authentication server

    This method involves the additions of the following parameters in the smb.conf file:



    3.5.2. Make Samba a member of an MS Windows NT security domain

    Make Samba a member of an MS Windows NT security domain

    This method involves additon of the following paramters in the smb.conf file:



    3.5.3. Configure Samba as an authentication server

    Configure Samba as an authentication server

    This mode of authentication demands that there be on the Unix/Linux system both a Unix style account as well as an @@ -3840,12 +3705,10 @@ to be created for each user, as well as for each MS Windows NT/2000 machine. The following structure is required.



    3.5.3.1. Users

    Users

    A user account that may provide a home directory should be created. The following Linux system commands are typical of @@ -3872,12 +3735,10 @@ CLASS="PROGRAMLISTING" >



    3.5.3.2. MS Windows NT Machine Accounts

    MS Windows NT Machine Accounts

    These are required only when Samba is used as a domain controller. Refer to the Samba-PDC-HOWTO for more details.



    3.6. Conclusions

    Conclusions

    Samba provides a flexible means to operate as...


    Chapter 4. Configuring PAM for distributed but centrally -managed authentication

    Configuring PAM for distributed but centrally +managed authentication

    4.1. Samba and PAM

    Samba and PAM

    A number of Unix systems (eg: Sun Solaris), as well as the xxxxBSD family and Linux, now utilize the Pluggable Authentication @@ -4187,7 +4042,7 @@ password required /lib/security/pam_smbpass.so nodelay smbconf=/etc/samba. >

    Note: PAM allows stacking of authentication mechanisms. It is -also possible to pass information obtained within on PAM module through +also possible to pass information obtained within one PAM module through to the next module in the PAM stack. Please refer to the documentation for your particular system implementation for details regarding the specific capabilities of PAM in this environment. Some Linux implmentations also @@ -4206,12 +4061,10 @@ PAM documentation for further helpful information.



    4.2. Distributed Authentication

    Distributed Authentication

    The astute administrator will realize from this that the combination of



    4.3. PAM Configuration in smb.conf

    PAM Configuration in smb.conf

    There is an option in smb.conf called


    Chapter 5. Hosting a Microsoft Distributed File System tree on Samba

    Hosting a Microsoft Distributed File System tree on Samba

    5.1. Instructions

    Instructions

    The Distributed File System (or Dfs) provides a means of separating the logical view of files and directories that users @@ -4444,12 +4291,10 @@ CLASS="USERINPUT" takes users directly to the appropriate shares on the network.



    5.1.1. Notes

    Notes

    Default: panic action = <empty string>panic action = <empty string>

    Example:

    smb.conf