From fedora-directory-commits at redhat.com Tue Sep 4 15:45:59 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Tue, 4 Sep 2007 11:45:59 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/replication windows_protocol_util.c, 1.30, 1.31 windows_tot_protocol.c, 1.9, 1.10 Message-ID: <200709041545.l84Fjx5a025177@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/replication In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv23522/plugins/replication Modified Files: windows_protocol_util.c windows_tot_protocol.c Log Message: Resolves: 207567 Summary: Corrected search scope used to find entries to sync in winsync total update protocol. Index: windows_protocol_util.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windows_protocol_util.c,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- windows_protocol_util.c 30 Aug 2007 15:56:35 -0000 1.30 +++ windows_protocol_util.c 4 Sep 2007 15:45:57 -0000 1.31 @@ -3028,23 +3028,11 @@ return retval; } -static int -windows_process_total_delete(Private_Repl_Protocol *prp,Slapi_Entry *e, Slapi_DN* remote_dn) -{ - int retval = 0; - if (delete_remote_entry_allowed(e)) - { - retval = windows_conn_send_delete(prp->conn, slapi_sdn_get_dn(remote_dn), NULL, NULL /* returned controls */); - } - return retval; -} - /* Entry point for the total protocol */ int windows_process_total_entry(Private_Repl_Protocol *prp,Slapi_Entry *e) { int retval = 0; int is_ours = 0; - int is_tombstone = 0; Slapi_DN *remote_dn = NULL; int missing_entry = 0; const Slapi_DN *local_dn = slapi_entry_get_sdn_const(e); @@ -3063,14 +3051,7 @@ agmt_get_long_name(prp->agmt), slapi_sdn_get_dn(local_dn)); goto error; } - /* Either the entry is a tombstone, or not a tombstone */ - if (is_tombstone) - { - retval = windows_process_total_delete(prp,e,remote_dn); - } else - { - retval = windows_process_total_add(prp,e,remote_dn,missing_entry); - } + retval = windows_process_total_add(prp,e,remote_dn,missing_entry); } if (remote_dn) { Index: windows_tot_protocol.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windows_tot_protocol.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- windows_tot_protocol.c 10 Nov 2006 23:45:17 -0000 1.9 +++ windows_tot_protocol.c 4 Sep 2007 15:45:57 -0000 1.10 @@ -171,8 +171,10 @@ dn = slapi_sdn_get_dn( windows_private_get_directory_subtree(prp->agmt)); pb = slapi_pblock_new (); - slapi_search_internal_set_pb (pb, dn, /* XXX modify the searchfilter and scope? */ - LDAP_SCOPE_ONELEVEL, "(|(objectclass=ntuser)(objectclass=ntgroup)(nsuniqueid=*))", NULL, 0, NULL, NULL, + /* Perform a subtree search for any ntuser or ntgroup entries underneath the + * suffix defined in the sync agreement. */ + slapi_search_internal_set_pb (pb, dn, + LDAP_SCOPE_SUBTREE, "(|(objectclass=ntuser)(objectclass=ntgroup))", NULL, 0, NULL, NULL, repl_get_plugin_identity (PLUGIN_MULTIMASTER_REPLICATION), 0); cb_data.prp = prp; cb_data.rc = 0; @@ -180,8 +182,6 @@ cb_data.sleep_on_busy = 0UL; cb_data.last_busy = current_time (); - /* this search get all the entries from the replicated area including tombstones - and referrals */ slapi_search_internal_callback_pb (pb, &cb_data /* callback data */, get_result /* result callback */, send_entry /* entry callback */, From fedora-directory-commits at redhat.com Tue Sep 4 17:50:52 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Tue, 4 Sep 2007 13:50:52 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/admin/src/scripts DSMigration.pm.in, 1.9, 1.10 Message-ID: <200709041750.l84Hoqij016396@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/admin/src/scripts In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv16379/ldapserver/ldap/admin/src/scripts Modified Files: DSMigration.pm.in Log Message: Resolves: bug 276741 Bug Description: 'Operation Error' encountered during DS6.21 to DS80 cross-platform migration Reviewed by: nhosoi (Thanks!) Fix Description: For cross platform migration, we should not migrate the nsslapd-idl-switch setting, we should just use the new default value which is "new". Platforms tested: RHEL4 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: DSMigration.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/DSMigration.pm.in,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- DSMigration.pm.in 30 Aug 2007 21:45:47 -0000 1.9 +++ DSMigration.pm.in 4 Sep 2007 17:50:49 -0000 1.10 @@ -101,7 +101,8 @@ 'nsslapd-ldapiuidnumbertype' => 'nsslapd-ldapiuidnumbertype', 'nsslapd-ldapigidnumbertype' => 'nsslapd-ldapigidnumbertype', 'nsslapd-ldapientrysearchbase' => 'nsslapd-ldapientrysearchbase', - 'nsslapd-ldapiautodnsuffix' => 'nsslapd-ldapiautodnsuffix' + 'nsslapd-ldapiautodnsuffix' => 'nsslapd-ldapiautodnsuffix', + 'numsubordinates' => 'numSubordinates' ); # these are the obsolete entries we do not migrate @@ -180,6 +181,21 @@ return $newval; } +sub migIdlSwitch { + my ($ent, $attr, $mig, $inst) = @_; + my $newval; + + # if doing cross platform migration, just use the default value for + # nsslapd-idl-switch + # if not doing cross platform, meaning we just use the existing + # database binaries, we must preserve whatever the old value is + if (!$mig->{crossplatform}) { + $newval = $ent->getValues($attr); + } + + return $newval; +} + # these are attributes that we have to transform from # the old value to the new value (e.g. a pathname) # The key of this hash is the attribute name. The value @@ -193,7 +209,8 @@ 'nsslapd-changelogdir' => \&getNewDbDir, 'nsds5replicacredentials' => \&migrateCredentials, 'nsmultiplexorcredentials' => \&migrateCredentials, - 'nsstate' => \&removensState + 'nsstate' => \&removensState, + 'nsslapd-idl-switch' => \&migIdlSwitch ); sub copyDatabaseDirs { From fedora-directory-commits at redhat.com Tue Sep 4 20:56:13 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Tue, 4 Sep 2007 16:56:13 -0400 Subject: [Fedora-directory-commits] fedora-idm-console/win/Bitmaps - New directory Message-ID: <200709042056.l84KuD0R008761@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/fedora-idm-console/win/Bitmaps In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv8746/Bitmaps Log Message: Directory /cvs/dirsec/fedora-idm-console/win/Bitmaps added to the repository From fedora-directory-commits at redhat.com Tue Sep 4 21:30:56 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Tue, 4 Sep 2007 17:30:56 -0400 Subject: [Fedora-directory-commits] fedora-idm-console/win Console.wxs, 1.1, 1.2 FedoraLogo.ico, 1.1, 1.2 Makefile, 1.1, 1.2 Message-ID: <200709042130.l84LUu7k019301@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/fedora-idm-console/win In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv19127 Modified Files: Console.wxs FedoraLogo.ico Makefile Log Message: added UI and graphics Index: Console.wxs =================================================================== RCS file: /cvs/dirsec/fedora-idm-console/win/Console.wxs,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Console.wxs 31 Aug 2007 23:34:32 -0000 1.1 +++ Console.wxs 4 Sep 2007 21:30:54 -0000 1.2 @@ -37,7 +37,7 @@ END COPYRIGHT BLOCK --> + + + + @@ -178,9 +182,15 @@ + + 3 + + + + Index: FedoraLogo.ico =================================================================== RCS file: /cvs/dirsec/fedora-idm-console/win/FedoraLogo.ico,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 Binary files /tmp/cvsF9PNFX and /tmp/cvsKPALUH differ Index: Makefile =================================================================== RCS file: /cvs/dirsec/fedora-idm-console/win/Makefile,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Makefile 31 Aug 2007 23:34:32 -0000 1.1 +++ Makefile 4 Sep 2007 21:30:54 -0000 1.2 @@ -43,7 +43,7 @@ PKGDIR=. WXSDIR=. -BASEDIR=E:\cygwin\home\rich +#BASEDIR=E:\cygwin\home\rich # where to find nspr dlls NSPRLIBDIR=$(BASEDIR)\nspr-4.6.7 # where to find nss dlls @@ -75,11 +75,27 @@ copy /Y $(JSSDIR)\jss4.dll $(PKGDIR) copy /Y $(LDAPDIR)\ldapjdk.jar $(PKGDIR) copy /Y $(IDMDIR)\*.jar $(PKGDIR) -# copy /Y $(FEDORACONSOLEDIR)\*.jar $(PKGDIR) + copy /Y $(FEDORACONSOLEDIR)\*.jar $(PKGDIR) +# directory should already contain the bat file, icon, and bitmaps # copy /Y $(FEDORACONSOLEDIR)\*.bat $(PKGDIR) # copy /Y $(FEDORACONSOLEDIR)\*.ico $(PKGDIR) $(PKGNAME).msi : LAYOUT cd "$(PKGDIR)" $(CANDLE) "$(WXSDIR)\$(PKGNAME).wxs" - $(LIGHT) $(PKGNAME).wixobj + $(LIGHT) -out $(PKGNAME).msi $(PKGNAME).wixobj $(WIXDIR)\wixui.wixlib -loc $(WIXDIR)\WixUI_en-us.wxl + +clean: + del /F /Q $(PKGNAME).wixobj $(PKGNAME).msi + +help: + @echo You must define the following paths: + @echo NSPRLIBDIR - directory containing the NSPR dlls + @echo NSSLIBDIR - directory containing the NSS dlls + @echo NSSBINDIR - directory containing certutil.exe and pk12util.exe + @echo JSSDIR - directory containing jss4.jar and jss4.dll + @echo LDAPDIR - directory containing ldapjdk.jar + @echo IDMDIR - directory containing the IDM Console Framework jar files + @echo FEDORACONSOLEDIR - directory containing the Fedora console jar file + @echo WIXDIR - directory containing the WiX candle.exe, light.exe, and library files + @echo Type 'nmake NSPRLIBDIR=... NSSLIBDIR=... etc.' to build the Console.msi package From fedora-directory-commits at redhat.com Tue Sep 4 21:30:57 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Tue, 4 Sep 2007 17:30:57 -0400 Subject: [Fedora-directory-commits] fedora-idm-console/win/Bitmaps BannrBmp.bmp, NONE, 1.1 DlgBmp.bmp, NONE, 1.1 Message-ID: <200709042130.l84LUvIj019315@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/fedora-idm-console/win/Bitmaps In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv19127/Bitmaps Added Files: BannrBmp.bmp DlgBmp.bmp Log Message: added UI and graphics --- NEW FILE BannrBmp.bmp --- BMZq ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????\ ~E ??????????????~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????t@~E ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????`~E ??????????????????????????????????????????????????????????????????????????????????????????????????????~E ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????P~E ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ~E ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????t@~E ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Q~E ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????p~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~E ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????`~E ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????t@~E ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????p?\ ~E ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? --- NEW FILE DlgBmp.bmp --- BM?  ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@?w ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????`?w ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@?w ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????@?w ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@?w ???????????w ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@?w ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@?w ?????w ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@?w ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@?w ?????????????????w ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????_?w ???????????????????????????????????????????????????????????????????????????????w ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????@??@??@??w ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@?w ??????????????????????????????????????????????????????????????????????????????????????????????????@?w ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????_?w ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????w ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~?w ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????w ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????O?w ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????qhe210''' # %"'#(abb????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????;7>%(, " %!'%,$)!'#(VSP??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????62<2;B/7;&-/$'$!!$ *&/5ipt???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????05<,9A-8?8>FEJKEONLW^nx???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????,3:)3<,5>26?9=BLZ^????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????)18%.7(2=.5<-/9,Tv????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????~q" +,4/6F:Md}????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????A45A2.)%463CG?;'', at Um?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????{stv?|}?jfh???u]\[r?\ir\TV6cq???????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????dXX???????????}Zhx*)+NKNk???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????}?????????????????????????????????????????????????????????????????????????????????????????????????lZ???????tl????yw?m`tnq????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????s??t??y??z???????????????????????????????????????????????????????????????????????????????????????????????na_rx?HFEgVJ?|w????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????g??j??j??p??p??u??y??z??~???????????????????????????????????????????????????????????????????????????????uchZ]??????pnj???????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Z??[??_??^??e??d??f??j??k??p??v??x??|??????????????????????????????????????????????????????????????????<-+LGW???????vv>54?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????K??M??O??R??R??W??V??\??a??^??a??d??i??o??x??|??????????????????????????????????????????????????????0 D4.ZNMPSS^mm+$( dUO??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????B??D??F??F??K??K??L??S??Q??T??T??[??_??`??a??i??m??t??~?????????????????????????????????????????z  TOM[NI6-+  A53??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????9??9??>??@??>??@??E??C??G??N??N??R??R??T??V??W??[??`??d??j??q??~????????????????????????????m  "81/#-  0(+??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????7??6??6??:??8???????C??D??B??E??F??H??P??K??K??M??Q??T??R??U??f??v??~w]M   1# G51>*&6$( ?{q??o?????????????????????????????{??u??p??t???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????0??2??1??1??2??5??4??6??7??6??8????=??;??B??E??H??G??H??F??G??I??H??L??R??VN3(:%"[>6J5/!0 XHAQ:1X?7J5.8*'+!H5/YEC?rk?qa?????|?????????????????x??p??j??i??j??n??m??q?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????,?}-?~-??.??0??0??2??2??3??4??3??5??7??6??6??8??;??A?????B??B??B??H??C??C??C??UU=2fK>eG<5%!      I?DiUQ?fW?????|??w??o??_??^??c??`??! c??b??c??c??e??e??c??l??~???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????)??&??,??+??*??/??-??1??2??0??2??/??1??3??5??6??6??5????ID.'-!     # %[JI|bV??}??x??y??s??T??Q??O??Q??W??Z??]??^??`??c??`??`??o????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????'??&??-??*??&??*??-??,??.??-??-??.??-??/??1??0??3??4??5??3??6??6??8??6??:]<*        $XDDpXO??y??x??}??r??n??H??L??G??J??M??P??U??S??V??Y??Y??g??y???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????"??-??1??2??3??6??:??01fRG??q??t??{??p??x??a??C??D??B??G??I??K??K??M??L??P??R??]??|???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????'??/??6??@??;??3??1??+??&??"??,??C??H??7??-??/??.??,??+??,??4tF-  "!%%#%,! ,' (" 3%,1$'iSF?~m??y??|??t??t??~??D??=??A????????A??B??D??H??J??N??O??`??~???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????1??3??7??D??8??3??2??.??(?? ????$??>??9??%??(??&??!??*??)?{&?|-?X? $(($#$! 3#$-!  0%! %! 7&-.!"aJB?|m??z?????y??v??~??r??9??8??;????C??K??Q??O??S??R??b??~????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@?????C??C??L??K??`??p????????????????????????????????????????????r??s????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~???~?????????????????"???}?z?x??y.rP at L=58)':13C=GYXX,#%#%''&&$&4'$"% %+"6)12%%?qb???????????u??q??????????zs?????g??+??.??5??:??8??8??:??! ??=??A??E??K??S??W??`??s????????????????????????????????y??}??! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????#??"?z?|??}?|?}?~?w.lM

59-*7'&;.0IAGIIO;32)+-,0"!**+)*6),$(%&,,4,37.)?}m???????????s?yepZP?????????xq?????`??0??3??3??3??1??4??9??7??6D=;<../" .++(*/#$6*-$&#"&+5-4A3/?yl??{???????}o`MEwqp?????|???????|s?????`??/??0??2??5??5??9??:??9??8??2??4??1??6??;???????'????,??6?uDiD;XJ>B835('0#!>0-:0/822."(2->=?UC at F7-)5)(,,(''1$%7**$( %$-??s????????~???????????}?~w??????????{w?????a??4??3??7??8??>??:??6??7??2??,??+??/??0??.??2??;??@??7??7??;??=?????I??I??G??O??L??T??d??s??~????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????|???????? ??????2??A??C??.????'?h?eF9Y at 8I=51%#4$$?4/9.*2-**%&."(2*47/A3-;GHEKIE-)('%1&%1#$&)"*&*J;A?gW?pafRIf\X????????????????z??{??????????|?????d??5??6??;??A??F??@??:??2??*??%??'??'??-??-??*??-??3??5??6??6??;??G??C??H??O??D??J??S??g??v???????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????"?|????"??;??E??4??&??4??/??'??)?\AW93W<2\H=@0+2! @2-;1*- 6//")#&0'+-$).!$=76)&$20/6*+/! +(4)'+%#&".%&\WV?wp?|z??????????ws????????~??z?zt?????w???????ea??}??j??D??H??K??F??I??H?????9??0??+??*??*??)??'??+??0??0??1??4??4??7??>??=??=??C??E??J??U??f??x????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????,??+??1??F??3????!??w }WAO5/P50XB9R<3?31=0,<52$8/-( %*"!#8..5..%0--6/05-,TVVG@@/! 3&%0$$7**;55><<|?????????????vv?nm????????~??y?|v?{t????vl????{vXR?????j??K??B??;??5??:??>??9??4??,??'??$?|#?}%??)?'?~'??,??+??3??6??5??;??8????????A??C??P??c??s??|???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ????' ??0???~?~?|?| ?r$oP at J2,L3-R>8K2-L/.RHB;10&."!3.,!"0)(,%%.**AB at 4..3**3++.)(+$$*""#mii?}?~{?lh|c_?g`?ge?{y??y????z?|x?vp??~??|?~v????_W?`Z?????r??=??,??&??"??!??"??!?~?}!?u"?x"?{#?z%?{&?~(?)??.??,??,??.??3??5??8??8??;??A??B??[??m??{??~???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????&??{??????|?`-cH=F/*G/*O?8G,+G-)M7/VLD.&%#8.,(! %/,+-''"953&&!!d^\?roec?hg?hd?fd|b_?}y?rl???????}u?{q?wm???????b^?ul?b[?`W?????q??(?}?x?y?y?}?|?y?u ?x?z!?x ?z!?~$??$??'??)??,??-??-??2??6??6??8??9??B??\??p??}???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????~?z?????m{M0cG7E,'D)&M?:@+'C*'M4.O! <8<,(@:4,$"4,,60.&(! /(')$$.%% '!"cYVujh?lh~hd?gb?ecb`?sq?zw?ph?????z?ys?vm??x???|LIxQK?}o?`Y?aZ????p?y&?x?y?z?z?u?s?v?w?w?z#?z"?|!?} ?#?%??*?~'?(??,??-??9??:??*'6%"=-+E@??L??O??R??X??V??d????????x??p??s??n??n????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????0??0?k3yrnM<3=&9!G1'<+#57<($@3-8!<%#7"!B635'$*);1-E@>(  *%$3-,/,-//-fPP_FBcPN?to{b\}a]b`|b]?qm?ws?ic???????wquEAxJCwDA?c]?ib|MD|LH?! b[?yo?TL?f]????????A?o?o?k?m?v?z?{??? ?? ?????#?? ??#????)??3??A??B??@??E??G??U??`??y???????????i??\??V??Q??b??u???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????2?k5???TLF8#8<*%;,%555"A4.89!:$ =+)>0.,-)2$"@765+*-&%#$!  ,()'/)( 224bONZDD_IFqhc?lf{a\{c^|b`zb_???????}y?^X?so?_XwG=yLCxGD?si?]T}NJzJC?g]?vj?TM?f[????????J?q?t?|?~???????#? ?????!??????!??#??*??0??1??@??D??H??c?ws?}???????????????_??U??B??D??\??{????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????m1/% .!#4*+743 1++ .**"988WKEUB=]GCeTQ?snvZXya^?rm???????ni?ZV?f^?b_?vn|PF}LByKG|NF?yl{VM~NBzKC?nc?ng?UL?bV????????P?{?}?}?! ~???????????~?????? ??'??'??-??,??0??2??;?~N?h[{dr?l?! ?{???? ????????`??O??>??K??o????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????|{zu{z6,(.8#9,&-35<(#8($456>*'?-+6 !1+4'%://$"#A;~YN?rg{NDPK{IE?sg?pb?WL?aW????????_?}!?&??)??!??$??+??$??????}??????????#??+??0?x;?kI{gZyhp?r??????????????????y??^??P??L??O??b??{?????????????????????????????????????????????????????????????????{???????????x??n??s??|???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????twyY]\-1:-&+/15!9*'0227 A2-:%$7&$1".;22('$ ) .%$(##3++/&%:55,&&!*" %?<??E??B??[??????????????????????????t??p??????????????w??h????????l??\??^??a??e??f??d??h??l??p??}????????????????????|??x??s??w??v?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????goqJFD,7*$+-..:*%0/44=))=)':##7$#0 5&(7,,#"%!5)&"#@851$$1)(.&%1**999>;;6--6//20.2*(HBCTBBQ;4X84! [75\?9?nl?a\?b^?c^?a\?xs?pn?b]?da?ga?a\?qg{JByKFyLDvJA?pg?[R}NC}MFyQI?~q?e]?_X??????????????H??D??7??(?????|?|?|?x?z?x?w?r?j+?a:u\Cr]KxgU?wh??{???????????????????????k??N?????6??8??2??6??V??|??????????????v??W??P??N??V??f??r??d??R??S??T??X??T??W??X??Y??Z??]??\??`??e??e??l??n??r????{??p??i??g??p??o??m??q??s??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ouv?851% (+.,6(#//236!;,*8"9&$8%"3A31,!!! 61, 3*'  *""1&'%!! 4')K20I+'P12V75X71|ji?ea?b^?d`?c^?kf?~{?fc?g`?f_?\Z?jc?c]|G?~NCyNCzQE?rh|RJ}PE~ND~UM?s?[T?????????????????R?~/??.??+??+??$???}?w?v?t?n?h%?_3rY?lWCp^MzgZ?uh??y??????????????????????????b??G??8??2??/??.??;??S??c??q??s??b??E??E??I??K??H??A??B??D??G??I??I??F??S??Q??P??S??S??U??V??W??Y??[??]??_??_??b??d??`??d??e??d??c??e??e??e??n??r??w??w??x??s??q??o??l???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????rvxA=:&'*)2!0!-.13:)%6#"8$"9##5##:*(8,,#%%".""/%")-&#* -"# "" 1$&G32G**J/*P2*S4,o\[?lh?a\?ba?eb?fa?}y?rk?h`?fb?d_?YR?qi~QL~LA?MEyG>~YN?qi{ME?RI?NF}ZO?vk???????????????????}>?6??0?~(?~(?}?~?z?r?p?g!?[.nT8iS>jUBo]K|iX?wh??y??????????????????????????z??Z??A??2??/??(??'??-??/??0??2??3??4??9??A???????A??@??H??E??H??H??K??N??P??M??O??O??T??U??S??X??Y??Y??Z??Y??_??_??`??`??_??`??]??a??_??^??\??`??^??b??`???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????rww0)$$&)-3$+/.07"9+'5 9%$9%&6$&A42,%"$!6*+$.$#(!-!"- #""!1"&A437C(&O2-T3.dMF?rn?_\?c`?gb?fb?qk?{?gb?hd?e`?_X?aZ?ja~KA?ME{IBwG>?f^?h`~NF?TI{NE|XO????????????????????y?z6?|/?z&?y?z?z ?w ?t?i?_%qR0cP9dS at iUBq_MziW?xh??w?????????????????????????????q??Q??;??,??)??'??(??*??+??-??.??3??1??0??5??7??6??;??:??9??9??A??>??D??@??D??G??F??D??I??H??K??M??M??P??P??P??R??R??U??T??W??T??V??W??U??V??U??Y??U??X??W??Z??W??W???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????\dd2*($'(2&!(+-/.:-(4" ;$#9&$8$$<++;..)' '7,-"! 4)(% " /#%.!"!$#!, @460=$$K,*R2-[@8?qp?b_?c`?db?ee! ?hb?{?ni?he?ge?f_?XP?tj?[P|JBzLD{KAxH>?rf?^WMH|TJxJC??|????????????????????Z?y"?w?w?w?v?r?m?cyT(eO4_N:`O>iVEsbPwgV?vd??w????????????????????????????????f??F??4??&??&??$??%??,??*??+??-??-??-??/??2??1??2??3??6??7??7??4??7??9??=??@??@??C??A??D??E??H??I??G??I??J??H??N??K??L??M??Q??Q??M??N??Q??N??N??S??P??O??R??O??Q???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Y^^?<8#%,#((,-,4!6'%5!:$#9%$9'&>210!#'$#0#$/"$ 5-,    /&%. "$#)C9:19! C*&M,,\93zfe?ef?b`?db?gc?fb?rp?{w?hc?ge?gb?c^?`Z?wlyID{KA|NB|MAzQF?xmRK}SJzLG??????????????????????????;?w ?t ?r ?n ?j?c?U hK,\J2\K9_P at gVEraPyiY?xg??u????????????????????????????????{??Y??@??)??#??"?? ??!??%??%??'??'??&??*??)??-??0??1??1??2??5??5??5??6??7??7??7?????:??>??>????????@??@??B??C??C??E??E??E??F??E??H??G??J??I??H??K??O??H??I??J??H???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????]``NQN#+*$()..6)&36" 9$#9%#=+):-+.&$$5-* "!3))"3&'+%%(E:<08B'$J.(Y70nXV?ml?a\?ec?gb?ie?ih???ng?ke?if?gb?\U?oh?`XxH=}OE~NE|IB[R?uh~NDyMH????????????????????????????z%?p?p ?l ?f?ZoL"\F+XG2YI;_O at fWGqaR}n_?xh??{???????????????????????????????????j??H??/??&??????$?? ???#??"??#??&??'??%??*??)??,??(??-??1??0??2??0??0??1??4??5??9??8??8??8??=??:??:??.-5''.!#!!$5*)!*!!-"$  2)((!#%"%E7726 ?#$J-&T6/eHE?pk?a^?dc?fc?fc?ge?zu?|v?jf?jf?gb?b\?VR?tk}OF?LB~NE~MFzJD?i`?k`zTK???????????????????????????????v ?p ?l ?b?R`D$UA)TD1[I7`PAf\LtdV?tg?p??}???????????????????????????????????v??U??9??&?}?}???~?~???#?~???!??%??'??#??'??'??'??,??-??*??*??,??1??0??-??3??5??3??5??4??5??4??7??8??7??4??;??=??7??:??;??>??=??=??=??>??>??;?????%$H*(Q2-\:5yhe?ea?c_?fb?fb?hd?ig??}?kg?jf?he?c_?YR?b\?lf{KA?OG}OGzOHwMG?nd??}??????????????????????????????????s?k ?`rJX@#Q>)RA-ZF5^O*)7))1!!-'##9-." 3(*!4--&"$$&"<125%%2;B'%N3,[;3p][he?`\?d`?da?fb?d`?zv?vq?hd?je?e`?aZ?WN?qi?ZS}MD}OE~OG{NDoKC??????????????????????????????????????s?o?\dCQ;#N;'Q>-ZF5aQ>maQqbS?vi??u?????????????????????????????????????????i??D??(?{?z?{?{?y?{?|?|?|??}?}?}???!????!??"??#??"??%??$??(??#??%??(??(??*??)??+??'??-??)??-??/??-??1??/??2??1??0??1??0??-??0??/??4?v,?|4?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????`ffQUUTWUJNJ!##+. 105! 6! 8(':))6(&0-(!,4') 6+- 7+*'"'(!7-.<*+5:!!B'$P2+^>7jSPykgx_V?_]?a_?ea?g`?mi????kf?jh?ia?f\?^X?_X?sk|PG|PDzOAuI:%,"(026" 6$#:(';+*4#"1 !)(!3**( &4'(!!# 7(*'!"%%$6))E655@'%F'%P1+[:5cFCzkj{]Y?`^?a_?ca?gb?gc??z?uo?lg?ie?ga?bZ?WR?la?f]zLCzKB{[P??????????????????????????????????????????????|YY;L9!K:%R@,]H6eWDsdR{i[?{n??x?????????????????????????????????????????m??E??&?{?x?v?w?w?w?w?x?y?z?{?z?{?|?|?|?|?~?|?~?~??~??!???!?? ??"??$??#??#??$??!?? ??#??&??%??'??#??#??(??%??'??)??)??'?x%?r&?t)?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????NRPOSSSVSWXV_cc:53'()/3 5!7%"8'%;-+6!!3 !+$$8+-"*/%&5*,% "&%$2 $C541;"!A(%H,'R8._@:xfcb_?`\?d_?ha?hb?he?rm??~?oi?oi?je?fa?_W?YP?um?QJuPF????????????????????????????????????????????????????mUM6 I8&SB-]J6hZJsfTm]?~n??x?????????????????????????????????????????f??=?"?x?v?v?u ?v?v?w?v?v?x?x?w?x?z?z?{?{?{?{?}?{?|?|?~?~?}?? ?}??~??}?~?! ?#?!?~?!?!?|?!?"?!??%?}?~?}#?x"?n!?o!?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ????????RRSRVUWWVUWUZ^^aii?=;#)044"7#!:)'8(&5! 2.$-'%2'(  1$&*7.-" $! $+E6808 =$#D(%L.*X:1nWQ~gb?_Z?d]?ca?gd?he?ie????vm?oh?kc?g`?b\?YT?bZ?jd?????????????????????????????????????????????????????z????`JI:(UD2^L:k`OudQ?p_?n??x?????????????????????????????????????????[??3?|?v?t ?r ?s ?v?u ?v?v?u?u?u?v?v?x?x?x?x?z?z?x?{?z?{?|?|?|?{?|?|?|?|?}?z?{?}?z?~?}?}?}?|?|?}?}?|?| ?t?l?l???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????QSSVZWUXWX[[Y_][cb^edJGD,,3!5"5$!;-,3"!4" 3!!/&7-.'! 4+-$8..%#$&%&&C7807 TE2ZH5i[GsdO~l]??o??z??????????????????????????????????????u??H?~'?w?r?q ?p ?o ?o ?p ?o ?p ?q ?q ?r?q ?r?t?r ?w?x?w?v?z?x?y?w?z?z?w?z?{?|?{?x?z?x?x?z?z?z?z?y?z?{?y?{?}?{?y?r?j?k???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????QSSUWWV][Y]]Z``W]]^cbmtsadb8,*/3!7'%4(%2!3! 1 0-9-/"!4,+! 6+.%#$%%&%G;937"!<##@%%J+(V61_@=yig?b\?b_?da?he?kf?kg?mh????ql?ni?lf?b]?pj?????????????????????????????????????????????????????????????aW??????bL9XG4eUDrcO~m\??o??w??????????????????????????????????????^??6?z?t?o ?n ?m ?l ?l ?m ?m ?n ?n ?n ?o ?o ?p ?o ?q?r?s?q ?s?u ?w?v ?w?x?y?x?z?z?w?v?v?x?x?x?y?x?x?y?x?y?w?y?y?y?w?u?q?h?h???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????QTRUWVW\\Z_^\baX^^`efgmmrzzw{{MFC1#5(%3" 1 2"!1 -3$%-$$!%!! #6)*!! %$7),$#$%&%'E<<6"#6 ;#"D%&L+(S6-[=6r]]?dc?`\?fb?jb?jc?jf?je?}x?|w?lg?h`???????????????????????????????????????????????????????????????????\V?nd?????s\I:gYGs_LzjY??s??v???????????????????????????????????m??E?}'?s?m ?k?j?i?j?j ?j ?l ?l ?m ?l ?k ?j ?k ?l ?l ?k ?n ?o ?p ?p ?r ?s ?w?v?x?v?v?v?t?t?u?v?v?v?v?t?t?t?u?t?r?t?u?u?u?o?k?a?d????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TUUTYWX\\]ccZb`\aaehhmpprwwz}}???gec?96.-1 1 !,8+*(!%% ""/!!2 $ ! ""%7*) $&&%&%=35;'&5?"#A'%H,'Q2-\:7jOK?ji^[?e`?hb?he?jf?kf?ok?x?tk??????????????????????????????????????????????????????????????????????`Y?dZ?ui????gSkZGp[F|jY??o??m????????????????????????????????r??J?,?s?n?i ?f?e?d?d?g ?g ?h ?h ?h ?h ?j ?i ?i ?h?i?i ?k ?l ?l ?o ?p ?q ?q ?s ?t?s ?s ?s ?t?u?t?r?r?r?r?q?q?s?p?o?o?q?t?t?q?m?i?^?_???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????SWWU[[W[[_cc\```ccfjjnrrsyzy~~??}????gfcC<91$#+-6*)%! 3')'#!""!$8+,%%&&&%:00>.-5: C'#H+&M/+Y<5cF?|li?^]?ea?gc?ie?id?e_?je????????????????????????????????????????????????????????????????????????????d`?i`?g\?t???tXEhUBtcQ?}i?|k????????????????????????????n??I?},?s?k ?g?f?b?b?b?a?a?a?b?d ?b?b?c?e ?g ?e?h ?h ?g ?h ?i?k ?j ?l ?m ?o ?q ?q ?q ?q ?s ?r ?p ?o ?n ?n ?m ?m?m?m?m?n?n?o?o?m?o?k?e?]?_??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????UWWY^]Z``Z__^dcchgjonpwwx{{z||z||ux{?????????lomKFC:/-,$!!!2,+##"   %9+.""$"%)%9*,E535: >%$H,'L.,R7.^@9tec~db?c`?e`?a\?pl??????????????????????????????????????????????????????????????????????????????????}v?ha?md?jb?????mhR at nZG?r\?r`??r???????????????????????`??;?z&?r?m ?i?h?d?b?a?`?`?_?^?_?_?_?`?a ?a?b?b?c?c?d?e?g?g ?i ?i?k?m ?n ?o ?m ?m ?l ?l ?l ?j ?k ?i ?k ?k ?l?m?l?m?l ?m?l ?l?m?j?` ?Z?[????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????VXZY^^\`a]`^abbgmjlsstxxyyy|||v{~{??|??|??~??}??nspNJG3((! !6-,"!!!" )9*.$$&%%)'2%&G573;"!?)%D(&J-)R3-_;7lXX{dd{_[?w????????????????????????????????????????????????????????????????????????????????????????ti??y?kd?le?mg????j at wU0x_CjX?sd??x??|???????????e??E?}+?t?q?n ?i?h?g?e?c?b?^?_?]?^?\?\?^?^?`?_?`?a?b?c?c?e?f?g?g?h?i?h?i?j ?j?j?i ?i ?h ?g ?h ?i ?i ?i ?j ?j ?h ?k?j ?h ?h ?j?h ?e ?_ ?V ?X ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????TVUY]]Y^^_aadffjmmntttwwyyy{||v{}????????~??y~w{yrwvnsqdicOPK;52( %6++ #" !+9,-#$%)'%%/"!G9:35= C$#H*$Q4,_E=tge?????????????????????????????????????????????????????????????????????????????????????????????????PI??|?|q?ld?ib?xq??u?m?i?e7gN?sZ?|c??g??K?|2?t ?r?m?l?k?k?j?i?g?e?d?a?`?`?`?_?^?^?\?]?\?^?]?`?b?c?d?e?e?g?h?i?i?h?i?h?i?h?h?g?f?e?h ?h ?g ?h ?h?j ?h ?h ?i ?h ?g ?h ?g ?d ?^ ?V ?V ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????UXXY`_Y]]`ccdhhknnrssuuuyyywzzy|}~????????~??x~~tyyosrinlfkfjmihmiab^OIF;/.7+*/!$   !"!*7-,  %*#&')E653:$"J21]JErgb??????????????????????????????????????????????????????????????????????????????????????????????????????qp?UN?[S????sk?ng?mf??y?|A?k ?j?i?i?j ?j ?j ?i?i?j?k?h?i?k?k?j?h?h?f?d?b?c?b?`?`?`?`?^?_?_?_?b?c?d?f?g?h?i?i?i?i?i?k?h?g?f?g?g?f?e?e?f?f ?e?h ?g ?g?h ?j ?g?g ?g ?h ?b?^ ?T ?U ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????V[[X\[Z\[beegkknqqrssvvvvwwsyy{||~~}?????}??z?uyynqohnkhmihjhfieilglmkkkifhcYXWQJGJ at A=768.-2'%. !)-6')&)//0! 7*'@51F<8`_]mc`{wu????????????????????????????????????????????????????????????????????????????????????????????????????????????????]Y?[S?VO?f]????mf?ng?xn??x?m?h?h?h?h?g?f?f?h?h?i?j?i?k?k?j?i?h?i?g?f?e?d?d?d?d?c?c?b?c?d?d?e?f?i?h?i?i?j?k?j?j?i?g?h?h?i?h?f?c?e?e?e?d?f?g?h?h?g?g?g?f?g ?b?] ?T ?V ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????TYYW[[]``bggfkkpqqssstttuwxswx{||?????}????x?uzxnsqhljfkihjigigdjggkhgiihlkglkklkomjlnjjmjikgfgdda^b^[b_]`][b_^gcaiheonjopnwtstts}????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????UJ?\Q?YR?UP?ul???kc?wl??}?L?h ?i?i?h?h?g?f?g?h?i?h?h?h?g?j?j?i?j?h?g?e?g?g?f?f ?f?g?f?f?d?f?e?f?f?h?g?g?i?h?i?h?h?h?h?g?h?g?e?e?e?f?f?e?g?g?f?h?f?g?f?g?f?b?\ ?V ?T???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????UXXXYY\`_affjmmpppppprssruwyzz|||??????~????z~}uyykrqhliimihnkijhhjfhligjifkidifdifgjgehgjkhkmjknlmmllponsrnqporqsrrssrpspotpstqrsqwxx??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????SM?[S?\S?\V?XO??w??z?ri?~r????o?j?h?g?g?f?f?f?g?f?f?e?f?h?f?g?g?g?f?f?g?h?h?g?f?g?h?gV?gJ?g?f?d?e?f?f?e?e?h?g?g?e?f?g?f?f?f?f?f?f?f?f?g?f?f?f?g?g?e?f?g?h ?g?c?] ?U?V ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????UXXY\\^abcfffkkmmmrrrqssruuyzz}}}}???????{??w}}rwwkooilhilfjlhilihmihkihliiliiigejigjhhifhkiimllkkilikonmoomomopmqpnpporpnrspqsqrrovvu}??????????????????????????????????????????????????????????????????????????????????????????????????????????????????{x?WP?\T?]S?^T?]T?^U????~t?zn??~??P?j?h?f?g?g?f?g?e?e?f?e?f?g?h?g?g?g?g?e?g?i?i?i?h?h?iX??????iU?h ?e?g?i?g?g?g?g?f?f?f?d?e?f?e?d?e?f?f?g?f?f?h?g?f?h?f?g?f?g?g?e?b?\?S?R?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????UXXY\\^ccfhhkllooooqqorrttuyyyzzz{??}??}??y??v{{svujnmgkhgkiikihljimhilhjnliljjiigiiiihhjhhmkkmjlmjknklnmmpojolnolonnpqoqspuqpuspuur{||???????????????????????????????????????????????????????????????????????????????????????????????????????????????????}q?f]?\S?]U?]V?^U?^S?oh????zn??y??y?l?i?g?g ?f?g?f ?e?e ?d?d?d?d?e?f?f?g?h?f?f ?f?g?i?i?hA?kS???????hT?g?f?h?h?g?h?f?g?g?f?h?g?f?e?g?f?e?d?e?d?e?f?f?e?f?f?f?e?d?d?d?d?a?Y?P?P???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????YYY\^^bgggiikkknnnmnnlppuuuxxxz{{y~y??x??x??tyyswvinnhlkhkjgkhhliikhhkiinjhjhijiijjhmjfljjkjmlkmmkmolnonloomonnqnpqpstrsvssupuwswysz~}????????????????????????????????????????????????????????????????????????????????????????????????????????????????PJ?`U????`[?_V?_V?`U?aW?\T??|?????x????zI?h?f?e ?d ?e ?e ?d ?d?d?c?d?c ?e?f?f?e?f?f?f"?e?g?g?f?g&?hT??k?mU?hG?f ?f?h?i?h?f?f?g?f?g?g?g?f?f?g?f?g?f?e?e?c?c?b?f?e?e?e?c?e?d?d?c?`?Y?P?P????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????[]]_bbbeegggiiimmmlnnqsstttwwwz{{y}|x?x~~w|~ryxmutgmkjnjijgimijlhilifjhillhjhjliilijkkhmkmnkkoklolppllqonqomolopmspnsupststuswusz{x~~}?????????????????????????????????????????????????????????????????????????????????????????????????????????????gc?PH?PI?rh??z?^X?_W?_V?aX?aY?d^?????????????j?e?e ?e ?c ?d ?c ?d ?c?c?c?c?e?f?e?e?e&?f(?g?e?g?f?e?h%?h0?g?eA?e>?e:?f4?d4?d6?e6?e6?d(?d?b?a?`?a?a?b?a?_?_?]?_?_?_?_?^?]?]?^?^?^?\?]?^?^?Z?T?L?K???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????1''_]^ddddddgggiiikkkooorrrvvvuxwtvssurjnmaihdhhfgfehgfheglhhkiknljlihkhkkhjmjinjjmknlklmloqmtqopqposqoolommoqnprorqoqrqtwuvyu||y???????????????????????????????????????????????????????????????????????????????????????????oj?nh?hb?d\?]V?{r?vl?[T?[U?ZQ?ZS?YP?[O?\V?VN?zp????v?|r?zn?yn?wn??????????m?h?h?h?h?g?g$?g(?g(?g(?h(?g,?e0?e.?e4?e6?c8?c:?d?d@?eA?eE?dI?eG?dE?dE?cC?d@?e?eA?eC?dE?cI?cG?dG?dE?dA?f>?d6?d,?d&?c?b?b?a?`?c?b?a?`?`?^?_?`?^?^?_?_?_?`?^?^?^?]?\?[?Y?T?L?K???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????!$+D<?c@?c@?dC?dC?dC?cG?cA?c8?d4?c,?d?f ?c?a?b?c?b?b?b?a?^?^?_?^?_?`?_?_?`?_?`?_?]?]?]?]?Y?U?M?N?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????#1&&SLNjmmqpoced[^]_babdbbfdgieklhjnjjolinmkkkjkilmimlkmljloknnkrpkprltrpturrtqopnprosurvtqwtrzwt{zw{}z?????????????????????????????????????????????????????????????????????????ro?tl?|t????{u?zq?|s?{r?|r?wo?tk?nf?g]?^T?wn????ka?f^?aW?bY?e\?h`?jb?kb?um???????????????~???????~;?e?f?e?f ?f?f?e(?f0?f0?e2?d3?d6?e6?d8?c8?d8?c6?c8?e8?e:?d:?d@?cC?cE?cC?c>SRQ\]\cdcggfgigikkjkhhlhimjjljmnkkmjnpmmolnomsqoqtpptqrtqqsoqroutnsvpwxuwxux{vyzw?~}???????????????????????????????????????????????????????fc?c_?je?pl?tm?wp?yt?|s???????yp?|r?}s?}t?~u?|p?un?oh?i`?`X?|r????vl?og?ld?nc?oe?si?rh?vj?t?????????????????????????d?d?d ?e?e"?e(?e0?f0?c0?c4?d6?c6?d2?c6?c5?c2?b0?b*?b,?c2?b:?d@?cC?dE?dA?c?cA?dC?dE?cC?c>?b:?`6?a,?b?b?a?a?`?`?a?`?`?`?`?`?`?^?]?\?^?_?^?]?]?]?\?]?]?[?X'?U#?M ?N"???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????"!  "700XTQgieijenokoplprnprpnrnppnopmnpmqqnsrmtqqqsqsrpuroutqsspyuryys{yt?|x????????????????????????????~}}igsXUjJHhIHkKJnMG?rp?b_?ca?fa?ic?le?og?ri?vm?zr?}s?u???????zr?~u?v?w??w?}t?|s?xm?pe?cZ??x????~v?yo?wm?vl?xn?xo?}r??w?????????????????????????q?c ?a?b?c%?c-?d3?c9?b:?c:?b4?c4?d4?d6?c7?b3?b.?b.?a.?a2?a6?a:?b=?aA?aA?bA?c7iGBpQJuSK?lh~fc`[?d`?fa?ie?ng?tk?vm?wp?}s?v??~????}x?}v?~v??w??x??x?x?{r?si?mc?gb????????y?|s?{q?|q?}s??y??}??|??????????????????????v0?c?c"?c+?c0?c1?d3?d8?c7?b9?b9?b?`8?`*?a ?a?`?`?a?a?`?`?a?a?a?`?`?`?`?_?^?^?]?]?_?^?^"?_$?]&?](?Z)?U*?L(?M,???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ??????????????????????????????????????????????????????????????????????????????????????????????????"         3+,"  &+ 2$'@//J=>\XXa\[VONRGGNB at J=-/=,,<*(A++E+,S>@O;;28A%$H+(H+'O0)V7/`=6hE?oLEuRK?fb?igyXR?c^?f`?kf?og?sk?vm?yp?|t?w??{???????}u?v??v??y??z??|?~y?wn?ne?ia??????????{?~u??w??w??{????????????????????????????o3?b?b'?b)?b.?c0?d5?c9?a#"K44L>>39"=""B'"E*$M1*Q7-\=2kE=sKFuTP?c_?rouUO?a]?ec?kf?nh?oi?vo?{p?}u??x??z???????|s??x??y??|??~????|?}t?uk?rg?uj???????????{??z??}???????????}???????????????????tA?b!?b%?b)?c.?c1?d9?b;?a=?a>?b9iD?mLEuTQ?^Y?wuuSP?^Z?ec?if?og?pk?vo?{q?}r??w??{????????|??y??z??|???????????y?{p?vk?rg?????????????????????????????????????????????????V?b%?b'?c+?c1?c7?b;?c=?b;?`;?b;?c;?a#"H('L1(R6,_<6fE?pNGzVQ?][?{yvWS|[U?da?jg?og?qj?wn?zq?|s??v??x??}????????|??}????????????????w?{p?yn??v???????????????????????????????????????????????h?b'?b'?b-?a5?`7?a>?c@?aA?_?b=?b:?c3?b-?c&?`+?_1?a-?b8?a>?a3lKDqQJzZT?ea?rl???rUOzXT?gc?lg?qk?wl?zp?|u??y??~????????????????????????????????????????????{????????????????????????????????????????????k?a#?`+?`-?a+?a+?b/?a3?`5?_5?`7?b;?a=?^5?^-?^%?^?]?_?_?^'?`3?a/?^-?`+?a+?_%?_?`?`?_?_?_?_?_?_?]?\?^?^?_?]?]?]?]?]?Y?Z?\?]?\?\?\?Z?Y?W?Q ?I?J??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????!      %   #/$&!"###!!##&&<0/)&&(*)(,2?%#C(#N2.^?6m]X?0/56 >$#E*$M/(U2/_=4lICuRO~]W?fb?qm????e`xVM?d^?je?pj?to?{t?~w??}????????????????????????????????????????????????????????????????????????????????????????????o?a?a#?a'?a'?`'?`+?`+?a-?_3?a5?a=?`??^3?_'?_#?^?^?_?^#?]'?^+?^/?]/?_-?`)?^!?_?_?_?^?^?_?_ ?_?_ ?]?\?]?^?^?^?^?^?^?]?\?^?]?\?\?[?Y?X?Y?V?Q?I ?I ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????!      #   ), "!$$"%$$$&&'>11)&&**+*.09%"C'#Q3._ at 8t[XK772;$#C&$F&$L-(Y7/e?8lJDyTQ?[W?e`?sm????smmJB_Y?he?qi?xq?}v??y??{????????????????????????????????????????????????????????????????????????????????????????????p?a?`#?`$?b)?a+?a-?_-?a+?`-?a5?`9?_3?`-?])?]'?]?^?^?_?]?]'?^+?_+?]'?^!?]?_ ?_?^?] ?])?^J?_C?_J?_,?]?[?\?]?^?^?]?[?[?[?]?]?\?Z?Y?Z?X?X?Y?U?O?G ?H ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????!     $"   /##*"##%$$"#%$(&%<00&'(&+,+-6=$$E,&S60bA;t\YN><4?&%D+%L/)R6-X:0b at 6hG?sRH}YV?d`?sl??????iHC|[V?gc?pk?xq?v??|???????????????????????????????????????????????????????????????????????????????????????????????m?`?`"?`&?a)?a+?a-?`+?a+?`-?_1?_1?^-?^+?]%?]?^?^ ?^?^?^?^?_!?_#?]?]?]?] ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????       '!  1'&#!#"%%"#$&&&&)=10%&(&))+.7"#?&$K/)X<3bFuSM|[U?e^?rm??~???qOI|SO?d`?rk?zq?u??}???????????????????????????????????????????????????????????????????????????????????????????????h?a?`!?`%?`'?c'?a'?a#?a%?_+?_'?^)?^+?]%?^?^?]?]?^?^?^ ?]?^?^?\?\?[ ?[  )" "5)*"$$$$%#&%%#$&*<11$''&*+,17 !@(%K1*Y;3eH;t]UWHG0="!D%#K.(S1,Y82e?9lH>sQK}YT?c_?sl??}???xYWxPM?d`?ql?}s??v?????????????????????????????????????????????????????????????????????????????????????????????????h?a%?a'?b%?b%?a!?a?b?a?`?_?^?^?^ ?_?^ ?] ?^ ?\ ?\?]?\?\?Z?[?[?Y?Y?Y?[?[?Z?W?X?Y?Z?W?Z?Z?\?Y?X?X?V?X?Y?Y?X?X?U?P?I?J?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????   &("-2%& %%'$##!"#'$%+:/,$('))(.29!!G,(S6/aC:lOI|]Wm^]1;$ B("I1)S50Y=4cE7mIpQK~^Ywgc4<$ C(#O1*U4/^=2hE9rJ at zTL?a]?me?xq?????????vUR?a[?lh?zt??~?????????????????????????????????????????????????????????????????????????????????????????????????rC?^'?_+?^)?_)?_#?^?^?^ ?]?]?]?^?^?^?]?[?\?]?`?^?\?\  .!&#2('*%&#%# &'%%'&,?00"$'++,,4C*'P3/]?6eKArTP?^[~kh6 :!!F)%N1*V80d?9jF at qME}VR?c^?mh?yr??????????_Z?[S?lf?yv????????????????????????????????????????????????????????????????????????????????????????????????????vC?^?_%?^'?]"?^?\?]?]?^?^?^?^?]?^?^?\?\?\?]?\?]?]?\?X ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$#   !-'#7,,!#!#$$&$%&%%&'4""=.,$*'..+1;" L,,X95bG at lQJ|XS?_]?vtD1->%!K,'T5.aA8jHBoLEuRL~[V?c^?mk?{u????????????|XS?jf?{t???????????????????????????????????????????????????????????????????????????????????????????????????`#?^?\?\?]?]?\?]?[?\?]?]?]?]?[?Y?Z?Z?Z?Y?X  (-'""5)'! #"##%&'&&'*3!$=.,&+)'+,3>#!O0+^?:gKEqTM~ZX?a]?wuL97>$L,'X81bC;kGEoMHwWO]Y?f`?qk??w????????????{ZU?lg?{s????????????????????????????????????????????????????????????????????????????????????????????????????]?\ ?] ?]?]?\?\?\?\?]?]?\?^?]?[?Y?[?\?Z?Y?Y?Y?Y?Y?X?X?Y?Y /" ,'$ '1%& # "$$$&'&(&''3"%8+*&(),017 D*&S81`E>mMGtVR|]Z?d^?yuUBB@$M/(Y90dD;hKDpNJxVO^X?hc?vm??z?????????????`]?lh?yr??????????????????????????????????????????????????????????????????????????????????????????????????u?Z?Z?Z?[?\?\?\ ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????%%"   4# -'#/&#,%$%! !!#&# $&''$8&$:&(#)'((.:#"J/*Z<6eHCiQLsYS]Z?ca?{vdPP?# P5-\<1gE=mIErSLYT?`\?kf?yr????????????????yw?e`?xo?????????????????????????????????????????????????????????????????????????????????????????????????c?]?\?[?\?\?\?\?Z ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????%#!   #4 ,'"  4(&)()&&$&&&&'**,(:('8&%%''))2!='"M1,\=6gFBnPNuZS?^Z?ec?ylZYB&"Q5.`@:jGApPJwZT~`Z?d`?ni?yt???????????????????f_?{r?????????????????????????????????????????????????????????????????????????????????????????????????[?Z?Y?Z?\?\?Z?X?Z?Z?Z?Z?[?Y?W?W?X?Y?Y?Y?Y )2,'"  8,+()*%$''&(*)*+,*<)*5'(%(()-6" A)$Q3/^E;hJFoUPz[U?a^?he?|vxdcE&"W:3dE>mLFrUPx[X?a]?gc?mi?zr??~????????????????fa?{q?????????????????????????????????????????????????????????????????????????????????????????????}??Z?Z?[?Z?Z?Z?Y?Y?[?Y?W?W?Z?X?W?W?W?X?X?Y?Y?Y?X?Y?X?Y?V?Y?W?U?V?T?V?W?W?V?U?U?V?V?V?U?U?U?U?U?T?U?T?T?S?S?T?S?U?V?R?N?F?H?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$$    ."0,&# !6*)%'&&$')')*'(),(<,*5&%%*((,7 F*)W:6bIAiPLuVQ{\Z?c_?hc?wq~njF*$^>7gHAoPKxXV~a\?d`?if?nk?zt???????????????????gb?zq??}???????????????????????????????????????????????????????????????????????????????????????????]?Z?[?Z?[?Z?Y?Y?X?Y?W?X?Y?X?V?X?V?W?V?V?Y?Y?X?W?W?X?V?V?W?V?V?U?U?V?W?U?T?U?U?T?U?T?S?U?U?U?T?T?V?U?U?T?S?U?U?V?V?R?M?F?F??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????"#"   1$"-)&#$4&&&)'''''&('+)*,)@0,3!$$')'-9" L.-]>9eIEnPLw[V~_[?c_?gd?vn?usH)$]@7hMEoSNyYVc`?hd?lf?sn?}v???????????????????mj?xp???????????????????????????????????????????????????????????????????????????????????????????g?Z?Z?Y?Y?X?Y?Y?X?W?V?Y?Y?Y?X?V?Y?W?W?V ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$   3"--($!)1##%*! )))('%(+)09"!+,A2/1 ')**.D,&Y<2eG>jOJrTPxZUb[?eb?lf?xo???U=4gI>pQLxYT`[?da?ie?nh?wn?w??????????????????????{s???????????????????????????????????????????????????????????????????????????????????????????W?W?V?R?T?W?X?W?V?U?V?V?U?W?X?W?U?U?X?W?V?X?X?Y?X?W?W?W?V?V?U?U?U?U?S?V?V?U?U?U?V?V?V?W?V?U?U?V?W?U?T?U?U?V?U?U?T?S?R?L?E?E???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????"    %/ *('$!*- '*)()()'')+5Q508#!+E21-)***2L/)]?8gJCiRNsVPzZV?`Z?fb?mf?tl???_DjLFnPMrXR{\V?_Y?gb?ld?qj???fJHkMHsWR}\Y?`]?gc?kf?qk?zr??}??????????????????????pg??y?????????????????????????????????????????????????????????????????????????????????????_?X?W?W?V?U?U?W?V?V?U?V?W?V?U?U?U?T?S?R?V?V?V?T?U?V?T?T?T?S?U?V?U?V?V?V?V?U?T?V?U?T?U?U?U?V?V?V?V?W?T?U?U?U?S?T?T?S?R?O?J?E?H??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????#    + /,)&# -" )'*)'(*''***B(([<5aB75!E522)---<&"U90cE at lLDoRKtWP{\U?_Z?gb?jf?qj???gRKiPGuYS~]W?c^?hd?mg?tm?w?????????????????????????oh?}u????????????????????????????????????????????????????????????????????????????????????V?W?W?W?U?S?V?X?V?U?V?V?T?U?T?S?T?T?T?T?S?U?T?S?T?T?R?U?U?T?U?T?T?U?U?V?U?T?T?V?V?V?V?V?U?T?V?W?V?V?U?S?U?T?R?T?V?S?R?Q?K?D?C????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????#   2# 1,)&" 1%"'&)))*)(&&)2K1,_=9eD at 9"!E40,&+),E*&Y=6gEAnLHoRNuUR{\V?aZ?gc?mi?um???t^YmPJxZU?][?d_?gd?mg?uk?~t??{??????????????????????oj?|s??????????????????????????????????????????????????????????????????????????????????p;?U?U?V?V?T?T?V?U?V?U?U?U?S?T?S?S?S?R?S?T?T?T?T?S?T?T?R?T?S?T?T?T?U?X?V?W?V?U?T?V?V?T?U?T?S?Q?U?V?U?T?T?S?V?S?Q?T?U?S?S?P?J?B?C????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????#    0$"2,*&   4(&$'(((('('&+>%$S30\=6hGBB(&F62,''*6 K-*^>8kFCnMIrSNyWT?]Y?c_?jd?sl?zp???|fdmMIvUQz[X?_\?fa?ke?pg?wn??x??????????????????????rl?zr??~???????????????????????????????????????????????????????????????????????????????W?U?U?U?U?T?V?U?V?U?U?T?S?T?S?S?R?S?T?S?U?T?U?S?T?T?T?T?T?V?V?U?T?V?V?V?V?U?T?S?T?S?T?U?U?T?T?T?U?U?S?R?Q?S?T?S?T?R?R?R?O?J?C?C???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????!    4&$1.+'#  6'&$((('('%('(:$"P11Z<7jI at D)%A66.*))6 G+%\>6dE at jLHqQNxWS?^W?c`?jf?tk?zo????kjjKIuWRy\X?a^?ea?id?oh?vm?w??????????????????????wr?{s??}????????????????????????????????????????????????????????????????????????????j?U?S?T?U?U?V?T?V?V?U?T?S?V?V?S?S?R?T?T?U?S?S?T?S?S?S?T?S?S?T?U?S?U?T?T?V?T?S?R?T?T?S?S?V?U?T?T?R?S?R?P?Q?Q?S?T?Q?Q?R?R?Q?P?J?C?B???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????"    7(%1.+'" $3$#$)(&&('&'',>%&S93`ChMGrQLwVR}[V?`X?e_?le?rk?zq??????mLG}XT?\X?c[?hc?me?qi?xo??x?????????????????????????ri??{??????????????????????????????????????????????????????????????????????e ?V?T?U?U?T?T?U?T?T?T?T?T?S?T?T?R?Q?S?R?S?S?S?T?S?R?U?S?S?S?R?P?Q?R?Q?Q?P?P?Q?R?Q?O?N?N?O?P?M?J?K?O?P?Q?O?O?N?O?O?O?N?P?O?M?M?M?I???A???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$    9&$2/,)'$"7$#6% (++(*(('(5 N1+^;5dE=mNEyUNtSKL83))&.E*&[<7fF at lNFwRN{XR?\S?aY?ga?nf?uj?~s??????oID}YS?]X?d^?g`?ne?tk?{o??y?????????????????????????tl??~????????????????????????????????????????????????????????????????????V?W?V?V?U?T?T?U?S?S?S?S?T?T?S?T?T?R?S?S?S?S?S?S?Q?Q?R?R?R?S?R?P?P?Q?R?P?P?P?Q?P?R?Q?N?M?P?P?N?L?J?K?L?O?O?M?K?K?M?N?M?M?Q?O?L?L?L?G?@?A???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????"   ":%#2--''*&;+)1#!**+'&$'(+<" R4-_=8fE at qMFzUOwUON;5&%&3I/+\>7iGBnPIvSO|XR?\W?b\?ic?me?vk??w??????mIF|XQ?]W?bZ?g_?ld?sk?yp??w?????????????????????????tk?????????????????????????????????????????????????????????????????????W?V?U?T?T?U?T?T?T?T?S?T?T?U?T?S?R?R?R?R?S?R !7#!0,(%&*#=-+2" &))(&$&(,F+(V51_?9iFBsMJ{SP|VPO;6&''6!K1,`?9iIFoPHuUM|ZT?_V?e\?ic?oi?xn??w??????kIE|WR?\V?aZ?ea?lf?si?yq??{?????????????????????????wo???????????????????????????????????????????????????????????????????Y ?T?T?T?T?T?T?U?V?T?S?R?S?T?V?T?T?Q?S?R?R?T?S?Q ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????("  #1,(%*(%&G210)%''%''&5J,'X71g@:jHBsOI}UQ?[TZA:'%)># O4.a at 8hICoPKySNYT?]Y?d_?jc?rj?yr??}??????iHCzYQ?\W?c[?ib?oi?wl?}s??~?????????????????????????zq?????????????????????????????????????????????????????????????a ?U?U?S?S?U?U?U?T?U?T?S?S?R?T?! S?R?R?Q?R?Q?R?R?Q?Q?Q?P ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????*$  $.(&$)'&(@-++($%$&%%-="!K,(Y83dA=jIBtNI|VP?_Y^D?$'.B&#S51c at 9jHDpPJ{SO[R?aY?f^?kc?tk?|r??}??????lLG~ZV?`Z?e`?jb?ph?wl?}r??|?????????????????????????yr??????????????????????????????????????????????????????????g%?V?W?U?V?W?U?T?T?U?U?U?S?T?R?S?R?R?R?R?S?T?S?Q?Q?Q?Q?O?O?P?M?N?N?M?M?L?K?P?N?J?I?K?N?K?J?J?J?K?K?I?J?J?I?J?L?K?H?F?E?E?E?E?G?F?E?F?F?F?C?A ?G?I?K?J?H?F?E?F?F?F?H?F?F?F?F?E?C?A?9 ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????433655977;87822-$##$&%&&&(B/.($%$%&(,<!L-+]80f?8nJBtPH~SN?\U?iaaIE$/E)$R4,c>5mFBqOGyRO?WR?_Z?c_?hc?oh?vo?~v????????yQK?]X?c\?hb?ng?ul?|q??z??????????????????????????????????????????????????????????????????????????????????V?T?V?V?U?U?U?V?V?T?U?U?U?T?T?S?T?T?S?S?R?R?P?O?O?P?O?L HBA0.* #%$&)?.-#!$%'''1E&#O0*_=5iC?9?8?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????111433876A>[JA. " ! " "'+: I*&U4.e>:pGBrOH{TO?ZS?`Z?oihKH/A&"Q/*^;3kD at rNDzSN?XR?`V?c]?hc?li?um?~t??y?????????~WR?f^?ic?mg?tk?{p??y????????????????????????????????????????????????????????????????????????????Z?U?U?U?T?U?S?S?T?T?U?T?T?T?T?P?P?Q?R?S?Q?P?N?M?N?O?O?M?N?M?K?J?L?L?J?J?K?J?J?H?F?G?G?F?F?H?F?D?E?F?E?C?C?E?F?E?E?D?B?B?C?E?F?E?D?B?B?@?@?A?C?B?E?C?<?7?8?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????111311654>;9NEAeTNye[?lc?nb?nc?wh?xj?zl?zm?yh{fWcNCE5--##0= L-*Z93hA;qKByRK~VS?]V?`[?pjmSQ4D(#O2+a=4nG=sNGzUO?ZT?aY?fa?le?sl?{r??x??~??????????b[?ne?vm??y??????????????????????????????????????????????????????????????????????????????????Z?T?T?U?S?S?S?Q?Q?R?S?S?R?R?R?Q?P?Q?R?R?R?P?N?M?N?N?O?O?M?J?K?M?K?K?K?J?J?H?I?J?H?G?I?G?F?E?F?F?F?F?F?E?C?C?D?E?E?C?D?@???C?E?D?D?C?B?A?B?B?A?C?C?G?D?=?7?8?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????111111655=:9LD at dRKybW?i^?k^?mb??t??w?rf?uh?wg?l_?qb?rchZjXLZF=WA9X?5\=4bB9jF>rIByQJ{VN?]! U?b\?ul~mi@"M,%S4)a:2lE>rJEySL?WQ?^X?d]?ka?sh?}r?????????????! ?????? ????????????????????????????????????????????????????????????????????????????????????^?T?T?T?T?S?S?S?R?Q?Q?R?Q?R?P?O?N?P?P?O?O?O?M?M?O?N?N?M?L?L?J?K?K?I?J?I?H?I?G?H?H?H?G?F?F?F?E?F?G?G?E?E?D?B?C?D?E?C?C?C?A?C?C?C?D?B?D?C?C?C?C?C?C?D?F?B?=?8?8?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????000222543<98H@=^OHr_U?f]?i^?tg??x?????u?nd?tf?iY?j\?m`?pc?tj?zk??z??????????????????????????????????yl?wm?rd?me?oi?pf?sk?|u??}?????????????????????????????????????????????????????????????????????????????????????????????????????????????????q?X?T?S?R?S?R?S?R?R?R?Q?Q?P?P?P?P?N?M?O?N?O?M?L?L?M?N?O?M?K?K?K?K?J?I?J?J?K?K?J?H?G?H?G?G?F?H?F?E?D?E?F?D?E?C?@?A?C?B?B?C?C?D?D?B?D?D?B?D?E?E?E?D?C?C?D?D?@?>?9?8?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????????????????????????????! ?????? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????//////333975D>;VJDmYO}dY?j^?{m??????????ui?re?hZ?fY?j\?l^?m`?xj??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ??????????????????????????????????????t2?T ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????///000322754?:8OFAdSJw]S?g\?yl??~??????????k^?fX?iY?jZ?k]?m_?{l??????????????????????????????????????y????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????a?V?S L?J?J?M?L?N?M?J?L?J?H?I?G?H?H?G?G?H?G?G?G?F?G?F?H?E?C?C?D?D?D?E?F?E?D?C?C?E?A?@?A?C?D?B?E?F?B?B?F?D?A?D?E?C?A?@?=?7?8?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????c&ZLF100322:76D>;TE at gRKkb??v???????????????bTbTcU~eV?m`??s?????????????????????????????????????t??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????u7?S ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Y?c?_CB96654=97JA>\PJuh`?u????????????????f[|bTcT}eX?pe?~q?????????????????????????????????????|s???????????????????????????????????????????????????????????????????????????????????????????????????????????????????]?O ?????????????????????????????????????????????????????????????????????????????????????????????????????X B?A?C?B?@?=?????;?3?4?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????X?X ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????X?X?X?Y ?V?V?V?V?W?b4?y[??????????????u?vj??{???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????f?[?Q?P?P?P?O?N?N ?V?V?V?W ?W(?W*?W,?]=?kR??l?????p??v????????????????????????????????????????????????????????????????????????????????????????????????????????????????{H?W ?Q?O?M?P?P?P?P?N?N?M ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????X?W ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????X?W ?V?W?X?X?X?V?V?U?U ?T&?T,?T0?T3?S6?S8?S:?S>?T:?T8?S6?T4?T*?T$?T?S?R?R?R ?V ?W ?X ?X?X?W?V?U?U?T"?U&?U,?U0?U4?U8?U:?U:?T:?U:?U8?S6?Q.?S(?Q?R?R?R ?@?@?@ ?W ?W?W ?X?X?X?W?V?U$?U$?V$?V(?U.?U4?U4?U8?U:?U:?U:?T:?U:?T8?Q4?R0?Q?Q?R ?Q?P ?W ?W ?W?W?W?V?V?V?V ?V(?V(?W(?V,?U2?U4?V9?U??1??2??f?>/?;(?= ?;?;?>?=?>?=?=?<?<?9?:?;?:?:?:?9?7?4~0?0?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ????????????????????????????????????????????????????????????????????????????????????????????X?W ?W?W ?W?W?V ?V?W?W?V?V&?T,?U,?V.?V2?V6?U:?R:?S:?T:?S:?Q:?Q8?Q6?Q8?O2?Q$?P?P?O?N ?W?U?U?V?V?V?U"?T&?S(?T,?T0?U2?T6?S6?S8?R:?Q:?Q:?Q8?Q6?Q6?O.?P$?P?O?N?M?N ?L8?K?L ?=?=?>?<?:?:?9?:?;?;?:?:?:?:?;?:?9?:?:?;?:?9?3}-?/??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????! ???????????????????????????????????????????????????????????????????????????????????????????????????????????X?V?U?U?V ?V ?V ?V ?U?V?U?S"?S&?S(?T,?T0?S4?R6?Q4?R8?R:?R:?Q:?Q:?P8?P4?P.?P(?P?O?N?O ?M?L ?W ?V ?U?V?V?U?T?T ?T&?S*?T0?S2?S4?R6?P8?Q:?Q:?Q:?Q?Q?P=?P?=?>?>?=?>?>???>?>?=?;?;?:?:?;?<?<?;?9?7?9?9?:?;?9 ?I?I?I?H?I?I?I?I ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????X?H?I?I?I?H?H?I?H?H?I?I ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????X?H?I?H?G?G?H?H?G?H ?K?K From fedora-directory-commits at redhat.com Wed Sep 5 16:35:31 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Wed, 5 Sep 2007 12:35:31 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/admin/src/scripts repl-monitor.pl, 1.1, 1.2 template-repl-monitor-cgi.pl.in, 1.4, NONE Message-ID: <200709051635.l85GZVoX018538@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/admin/src/scripts In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv18485 Modified Files: repl-monitor.pl Removed Files: template-repl-monitor-cgi.pl.in Log Message: Resolves: #273501 Summary: Replication monitor CGI seems misconfigured (comment #1) 1) get_replica: missing return value for the success case 2) support the case "shadowport" is not passed Index: repl-monitor.pl =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/repl-monitor.pl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- repl-monitor.pl 8 May 2007 17:22:33 -0000 1.1 +++ repl-monitor.pl 5 Sep 2007 16:35:28 -0000 1.2 @@ -441,6 +441,8 @@ } $conn->close; + + return 0; } # @@ -817,7 +819,11 @@ return $i if ($servers[$i] =~ /$hostnode($domainpattern)*:\d*=$shadowport\D/i); } - push (@servers, "$host:$port=$shadowport:$binddn:$bindpwd:$bindcert"); + if ($shadowport) { + push (@servers, "$host:$port=$shadowport:$binddn:$bindpwd:$bindcert"); + } else { + push (@servers, "$host:$port:$binddn:$bindpwd:$bindcert"); + } return $i; } --- template-repl-monitor-cgi.pl.in DELETED --- From fedora-directory-commits at redhat.com Wed Sep 5 16:46:01 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Wed, 5 Sep 2007 12:46:01 -0400 Subject: [Fedora-directory-commits] adminserver/admserv/cgi-src40 repl-monitor-cgi.pl.in, NONE, 1.1 monreplication.properties, 1.3, 1.4 Message-ID: <200709051646.l85Gk1AU019082@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/adminserver/admserv/cgi-src40 In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv19006/admserv/cgi-src40 Modified Files: monreplication.properties Added Files: repl-monitor-cgi.pl.in Log Message: Resolves: #273501 Summary: Replication monitor CGI seems misconfigured (comment #2, #3) i1) added repl-monitor-cgi.pl(.in) 2) removed "perl?" from nsExecRef, with which CGI expects "perl" is in the cgi-bin directory --- NEW FILE repl-monitor-cgi.pl.in --- #!@perlexec@ # # BEGIN COPYRIGHT BLOCK # 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; version 2 of the License. # # 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., 59 Temple # Place, Suite 330, Boston, MA 02111-1307 USA. # # In addition, as a special exception, Red Hat, Inc. gives You the additional # right to link the code of this Program with code not covered under the GNU # General Public License ("Non-GPL Code") and to distribute linked combinations # including the two, subject to the limitations in this paragraph. Non-GPL Code # permitted under this exception must only link to the code of this Program # through those well defined interfaces identified in the file named EXCEPTION # found in the source code files (the "Approved Interfaces"). The files of # Non-GPL Code may instantiate templates or use macros or inline functions from # the Approved Interfaces without causing the resulting work to be covered by # the GNU General Public License. Only Red Hat, Inc. may make changes or # additions to the list of Approved Interfaces. You must obey the GNU General # Public License in all respects for all of the Program code and other code used # in conjunction with the Program except the Non-GPL Code covered by this # exception. If you modify this file, you may extend this exception to your # version of the file, but you are not obligated to do so. If you do not wish to # provide this exception without modification, you must delete this exception # statement from your version and license this file solely under the GPL without # exception. # # # Copyright (C) 2005 Red Hat, Inc. # All rights reserved. # END COPYRIGHT BLOCK # use CGI; my $query = CGI->new; $params = ""; $params .= " -h " . $query->url_param('servhost') if $query->url_param('servhost'); $params .= " -p " . $query->url_param('servport') if $query->url_param('servport'); $params .= " -f " . $query->url_param('configfile') if $query->url_param('configfile'); $params .= " -t " . $query->url_param('refreshinterval') if $query->url_param('refreshinterval'); if ($query->url_param('admurl')) { $admurl = $query->url_param('admurl'); if ( $ENV{'QUERY_STRING'} ) { $admurl .= "?$ENV{'QUERY_STRING'}"; } elsif ( $ENV{'CONTENT_LENGTH'} ) { $admurl .= "?$CGI::CONTENT"; } $params .= " -u \"$admurl\""; } # Now the real work $replmon = "@bindir@/repl-monitor.pl"; system("$replmon $params"); Index: monreplication.properties =================================================================== RCS file: /cvs/dirsec/adminserver/admserv/cgi-src40/monreplication.properties,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- monreplication.properties 18 Aug 2005 18:59:03 -0000 1.3 +++ monreplication.properties 5 Sep 2007 16:45:59 -0000 1.4 @@ -23,7 +23,7 @@ root { -monreplication1 { "s/admin-serv/tasks/configuration/repl-monitor-cgi.pl" } +monreplication1 { "%s/admin-serv/tasks/configuration/repl-monitor-cgi.pl" } monreplication2 { "300" } monreplication3 { "" } From fedora-directory-commits at redhat.com Wed Sep 5 16:46:01 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Wed, 5 Sep 2007 12:46:01 -0400 Subject: [Fedora-directory-commits] adminserver/admserv/schema/ldif 21astasks.ldif.tmpl, 1.3, 1.4 Message-ID: <200709051646.l85Gk1w2019076@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/adminserver/admserv/schema/ldif In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv19006/admserv/schema/ldif Modified Files: 21astasks.ldif.tmpl Log Message: Resolves: #273501 Summary: Replication monitor CGI seems misconfigured (comment #2, #3) i1) added repl-monitor-cgi.pl(.in) 2) removed "perl?" from nsExecRef, with which CGI expects "perl" is in the cgi-bin directory Index: 21astasks.ldif.tmpl =================================================================== RCS file: /cvs/dirsec/adminserver/admserv/schema/ldif/21astasks.ldif.tmpl,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- 21astasks.ldif.tmpl 20 Jun 2007 23:50:11 -0000 1.3 +++ 21astasks.ldif.tmpl 5 Sep 2007 16:45:58 -0000 1.4 @@ -201,6 +201,6 @@ objectClass: nstask objectClass: nsAdminObject nsHelpRef: %as_help_path%/monreplication.html -nsExecRef: perl?repl-monitor-cgi.pl +nsExecRef: repl-monitor-cgi.pl cn: repl-monitor-cgi.pl From fedora-directory-commits at redhat.com Wed Sep 5 16:46:00 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Wed, 5 Sep 2007 12:46:00 -0400 Subject: [Fedora-directory-commits] adminserver Makefile.am, 1.32, 1.33 Makefile.in, 1.37, 1.38 aclocal.m4, 1.30, 1.31 configure, 1.34, 1.35 ltmain.sh, 1.6, 1.7 Message-ID: <200709051646.l85Gk1AP019071@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/adminserver In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv19006 Modified Files: Makefile.am Makefile.in aclocal.m4 configure ltmain.sh Log Message: Resolves: #273501 Summary: Replication monitor CGI seems misconfigured (comment #2, #3) i1) added repl-monitor-cgi.pl(.in) 2) removed "perl?" from nsExecRef, with which CGI expects "perl" is in the cgi-bin directory Index: Makefile.am =================================================================== RCS file: /cvs/dirsec/adminserver/Makefile.am,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- Makefile.am 21 Aug 2007 20:46:45 -0000 1.32 +++ Makefile.am 5 Sep 2007 16:45:58 -0000 1.33 @@ -178,7 +178,8 @@ cgibin_SCRIPTS = admserv/cgi-src40/ds_create \ admserv/cgi-src40/ds_remove \ - admserv/cgi-src40/ds_unregister + admserv/cgi-src40/ds_unregister \ + admserv/cgi-src40/repl-monitor-cgi.pl nodist_cmdbin_SCRIPTS = admserv/cfgstuff/start-ds-admin \ admserv/cfgstuff/stop-ds-admin \ Index: Makefile.in =================================================================== RCS file: /cvs/dirsec/adminserver/Makefile.in,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- Makefile.in 21 Aug 2007 20:46:45 -0000 1.37 +++ Makefile.in 5 Sep 2007 16:45:58 -0000 1.38 @@ -398,7 +398,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ -SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_FALSE = @SOLARIS_FALSE@ @@ -611,7 +610,8 @@ cgibin_SCRIPTS = admserv/cgi-src40/ds_create \ admserv/cgi-src40/ds_remove \ - admserv/cgi-src40/ds_unregister + admserv/cgi-src40/ds_unregister \ + admserv/cgi-src40/repl-monitor-cgi.pl nodist_cmdbin_SCRIPTS = admserv/cfgstuff/start-ds-admin \ admserv/cfgstuff/stop-ds-admin \ Index: aclocal.m4 =================================================================== RCS file: /cvs/dirsec/adminserver/aclocal.m4,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- aclocal.m4 17 Aug 2007 18:39:12 -0000 1.30 +++ aclocal.m4 5 Sep 2007 16:45:58 -0000 1.31 @@ -1578,27 +1578,10 @@ # before this can be enabled. hardcode_into_libs=yes - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -4305,9 +4288,6 @@ # Is the compiler the GNU C compiler? with_gcc=$_LT_AC_TAGVAR(GCC, $1) -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - # An ERE matcher. EGREP=$lt_EGREP @@ -4441,11 +4421,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=\`echo $lt_[]_LT_AC_TAGVAR(predep_objects, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=\`echo $lt_[]_LT_AC_TAGVAR(postdep_objects, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) # Dependencies to place before the objects being linked to create a # shared library. @@ -4457,7 +4437,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=\`echo $lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -4537,7 +4517,7 @@ link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) # Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -6373,7 +6353,6 @@ done done done -IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris @@ -6406,7 +6385,6 @@ done ]) SED=$lt_cv_path_SED -AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ]) Index: configure =================================================================== RCS file: /cvs/dirsec/adminserver/configure,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- configure 21 Aug 2007 20:46:45 -0000 1.34 +++ configure 5 Sep 2007 16:45:58 -0000 1.35 @@ -468,7 +468,7 @@ ac_default_prefix=/opt/dirsrv ac_subdirs_all="$ac_subdirs_all mod_admserv" ac_subdirs_all="$ac_subdirs_all mod_restartd" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE SED EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CP! P CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS PACKAGE_BASE_NAME PACKAGE_BASE_VERSION debug_defs BUNDLE_TRUE BUNDLE_FALSE LIBSOCKET LIBNSL LIBCSTD LIBCRUN initdir perlexec CXXLINK_REQUIRED_TRUE CXXLINK_REQUIRED_FALSE HPUX_TRUE HPUX_FALSE SOLARIS_TRUE SOLARIS_FALSE HTTPD APXS APR_CONFIG PKG_CONFIG ICU_CONFIG nsspcache instconfigdir dslibdir nspr_inc nspr_lib nspr_libdir nss_inc nss_lib nss_libdir sasl_inc sasl_lib sasl_libdir ldapsdk_inc ldapsdk_lib ldapsdk_libdir adminutil_inc adminutil_lib adminutil_libdir adminutil_ver icu_lib icu_libdir icu_inc icu_bin instancename cgibindir cmdbindir moddir modnssbindir propertydir htmldir icondir manualdir httpdconf httpdconfdir mimemagic httpduser httpdgroup admlogdir piddir pidfile admservport ldifdir admmoddir nssmoddir infdir perldir brand capbrand vendor WINNT_TRUE WINNT_FALSE APACHE22_TRUE APACHE22_FALSE subdirs MOD_ADMSERV_TRUE MOD_ADMSERV_FALSE MOD_RESTARTD_TRUE MOD_RESTARTD_FALSE LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CX! XCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS PACKAGE_BASE_NAME PACKAGE_BASE_VERSION debug_defs BUNDLE_TRUE BUNDLE_FALSE LIBSOCKET LIBNSL LIBCSTD LIBCRUN initdir perlexec CXXLINK_REQUIRED_TRUE CXXLINK_REQUIRED_FALSE HPUX_TRUE HPUX_FALSE SOLARIS_TRUE SOLARIS_FALSE HTTPD APXS APR_CONFIG PKG_CONFIG ICU_CONFIG nsspcache instconfigdir dslibdir nspr_inc nspr_lib nspr_libdir nss_inc nss_lib nss_libdir sasl_inc sasl_lib sasl_libdir ldapsdk_inc ldapsdk_lib ldapsdk_libdir adminutil_inc adminutil_lib adminutil_libdir adminutil_ver icu_lib icu_libdir icu_inc icu_bin instancename cgibindir cmdbindir moddir modnssbindir propertydir htmldir icondir manualdir httpdconf httpdconfdir mimemagic httpduser httpdgroup admlogdir piddir pidfile admservport ldifdir admmoddir nssmoddir infdir perldir brand capbrand vendor WINNT_TRUE WINNT_FALSE APACHE22_TRUE APACHE22_FALSE subdirs MOD_ADMSERV_TRUE MOD_ADMSERV_FALSE MOD_RESTARTD_TRUE MOD_RESTARTD_FALSE LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -3837,7 +3837,6 @@ done done done -IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris @@ -3872,7 +3871,6 @@ fi SED=$lt_cv_path_SED - echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 @@ -4313,7 +4311,7 @@ ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 4316 "configure"' > conftest.$ac_ext + echo '#line 4314 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -5448,7 +5446,7 @@ # Provide some information about the compiler. -echo "$as_me:5451:" \ +echo "$as_me:5449:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 @@ -6511,11 +6509,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6514: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6512: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6518: \$? = $ac_status" >&5 + echo "$as_me:6516: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -6779,11 +6777,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6782: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6780: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6786: \$? = $ac_status" >&5 + echo "$as_me:6784: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -6883,11 +6881,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6886: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6884: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:6890: \$? = $ac_status" >&5 + echo "$as_me:6888: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -8348,31 +8346,10 @@ # before this can be enabled. hardcode_into_libs=yes - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '#line 8355 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -9249,7 +9226,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:11669: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:11699: \$? = $ac_status" >&5 + echo "$as_me:11673: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -11796,11 +11770,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11799: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11773: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:11803: \$? = $ac_status" >&5 + echo "$as_me:11777: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -12328,31 +12302,10 @@ # before this can be enabled. hardcode_into_libs=yes - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '#line 12335 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -12736,9 +12689,6 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - # An ERE matcher. EGREP=$lt_EGREP @@ -12872,11 +12822,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=\`echo $lt_predep_objects_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=\`echo $lt_postdep_objects_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. @@ -12888,7 +12838,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -12968,7 +12918,7 @@ link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -13390,11 +13340,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13393: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13343: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:13397: \$? = $ac_status" >&5 + echo "$as_me:13347: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -13494,11 +13444,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13497: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13447: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13501: \$? = $ac_status" >&5 + echo "$as_me:13451: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -14939,31 +14889,10 @@ # before this can be enabled. hardcode_into_libs=yes - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '#line 14946 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -15347,9 +15276,6 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - # An ERE matcher. EGREP=$lt_EGREP @@ -15483,11 +15409,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=\`echo $lt_predep_objects_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=\`echo $lt_postdep_objects_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. @@ -15499,7 +15425,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -15579,7 +15505,7 @@ link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -15721,11 +15647,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15724: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15650: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15728: \$? = $ac_status" >&5 + echo "$as_me:15654: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -15989,11 +15915,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15992: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15918: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15996: \$? = $ac_status" >&5 + echo "$as_me:15922: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -16093,11 +16019,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16096: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16022: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:16100: \$? = $ac_status" >&5 + echo "$as_me:16026: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17558,31 +17484,10 @@ # before this can be enabled. hardcode_into_libs=yes - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '#line 17565 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -17966,9 +17871,6 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - # An ERE matcher. EGREP=$lt_EGREP @@ -18102,11 +18004,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=\`echo $lt_predep_objects_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=\`echo $lt_postdep_objects_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. @@ -18118,7 +18020,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -18198,7 +18100,7 @@ link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -18450,9 +18352,6 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_RC -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - # An ERE matcher. EGREP=$lt_EGREP @@ -18586,11 +18485,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=\`echo $lt_predep_objects_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=\`echo $lt_postdep_objects_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. @@ -18602,7 +18501,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +compiler_lib_search_path=$lt_compiler_lib_search_path_RC # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -18682,7 +18581,7 @@ link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -25879,7 +25778,6 @@ s, at CCDEPMODE@,$CCDEPMODE,;t t s, at am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s, at am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t -s, at SED@,$SED,;t t s, at EGREP@,$EGREP,;t t s, at LN_S@,$LN_S,;t t s, at ECHO@,$ECHO,;t t Index: ltmain.sh =================================================================== RCS file: /cvs/dirsec/adminserver/ltmain.sh,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ltmain.sh 21 Aug 2007 20:46:45 -0000 1.6 +++ ltmain.sh 5 Sep 2007 16:45:58 -0000 1.7 @@ -46,16 +46,10 @@ VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" -# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes. +if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi # Check that we have a working $echo. @@ -111,14 +105,12 @@ # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). # We save the old values to restore during execute mode. -for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - fi" -done +if test "${LC_ALL+set}" = set; then + save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL +fi +if test "${LANG+set}" = set; then + save_LANG="$LANG"; LANG=C; export LANG +fi # Make sure IFS has a sensible default lt_nl=' @@ -144,8 +136,6 @@ preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 ##################################### # Shell function definitions: @@ -337,17 +327,7 @@ *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - extracted_serial=`expr $extracted_serial + 1` - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" + my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" @@ -778,7 +758,6 @@ *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; - *.obj) xform=obj ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` @@ -1159,9 +1138,8 @@ for arg do case $arg in - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) + -all-static | -static) + if test "X$arg" = "X-all-static"; then if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 fi @@ -1169,20 +1147,12 @@ dlopen_self=$dlopen_self_static fi prefer_static_libs=yes - ;; - -static) + else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac + fi build_libtool_libs=no build_old_libs=yes break @@ -1742,7 +1712,7 @@ continue ;; - -static | -static-libtool-libs) + -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects @@ -2520,9 +2490,7 @@ if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. @@ -3218,7 +3186,7 @@ # which has an extra 1 added just for fun # case $version_type in - darwin|linux|osf|windows|none) + darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" @@ -3442,11 +3410,11 @@ fi # Eliminate all temporary directories. -# for path in $notinst_path; do -# lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` -# deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` -# dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` -# done + for path in $notinst_path; do + lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` + deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` + dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` + done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. @@ -3547,12 +3515,13 @@ int main() { return 0; } EOF $rm conftest - if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then + $LTCC $LTCFLAGS -o conftest conftest.c $deplibs + if test "$?" -eq 0 ; then ldd_output=`ldd conftest` for i in $deplibs; do name=`expr $i : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. - if test "$name" != "" && test "$name" != "0"; then + if test "$name" != "" && test "$name" -ne "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $i "*) @@ -3591,7 +3560,9 @@ # If $name is empty we are operating on a -L argument. if test "$name" != "" && test "$name" != "0"; then $rm conftest - if $LTCC $LTCFLAGS -o conftest conftest.c $i; then + $LTCC $LTCFLAGS -o conftest conftest.c $i + # Did it work? + if test "$?" -eq 0 ; then ldd_output=`ldd conftest` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in @@ -3623,7 +3594,7 @@ droppeddeps=yes $echo $echo "*** Warning! Library $i is needed by this library but I was not able to" - $echo "*** make it link in! You will probably need to install it or some" + $echo "*** make it link in! You will probably need to install it or some" $echo "*** library that it depends on before this library will be fully" $echo "*** functional. Installing it before continuing would be even better." fi @@ -4268,14 +4239,12 @@ reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. + # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" @@ -4723,16 +4692,16 @@ case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; @@ -4747,13 +4716,13 @@ # really was required. # Nullify the symbol file. - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP` + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. @@ -4840,7 +4809,7 @@ if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then - relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP` + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= @@ -4877,7 +4846,7 @@ fi done relink_command="(cd `pwd`; $relink_command)" - relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. @@ -5284,18 +5253,6 @@ Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' -# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi - # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH @@ -5438,7 +5395,7 @@ ;; esac $echo >> $output "\ - \$echo \"\$0: cannot exec \$program \$*\" + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else @@ -5624,7 +5581,7 @@ done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi @@ -5969,9 +5926,9 @@ if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. - relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP` + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else - relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP` + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 @@ -6180,7 +6137,7 @@ file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. - relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP` + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : @@ -6456,15 +6413,12 @@ fi # Restore saved environment variables - for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" @@ -6821,9 +6775,9 @@ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE + try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX - try to export only the symbols matching REGEX + try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened @@ -6837,11 +6791,9 @@ -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries + -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] + specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. From fedora-directory-commits at redhat.com Fri Sep 7 15:02:28 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Fri, 7 Sep 2007 11:02:28 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/admin/src/scripts DSCreate.pm.in, 1.5, 1.6 Inf.pm, 1.4, 1.5 Setup.pm.in, 1.9, 1.10 Message-ID: <200709071502.l87F2SHF004764@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/admin/src/scripts In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv4739/ldapserver/ldap/admin/src/scripts Modified Files: DSCreate.pm.in Inf.pm Setup.pm.in Log Message: Resolves: bug 281631 Bug Description: Pass in schema and config LDIF files to setup Reviewed by: nhosoi (Thanks!) Fix Description: 1) Allow multi-valued parameters in .inf files and command line. These values will be represented internally as an array ref. No existing parameters allow being multi-valued (e.g. you can't use Suffix=o=foo and Suffix=o=bar) 2) Add two new .inf parameters - SchemaFile and ConfigFile. The files listed in SchemaFile will be copied into the schema subdirectory of the new instance, so they must already be named appropriately (e.g. 60foo.ldif). The files listed in ConfigFile must be LDIF files with one or more whole entries to be added to the initial dse.ldif. These could be additional suffixes/databases to create, plugin configuration, replication configuration, or anything else. Right now, if you have an LDIF file that relies on custom schema, you cannot use the InstallLdifFile directive during setup. SchemaFile allows you to do that. Platforms tested: RHEL5 Flag Day: no Doc impact: Will need to document the two additional parameters. Index: DSCreate.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/DSCreate.pm.in,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- DSCreate.pm.in 7 Aug 2007 23:28:03 -0000 1.5 +++ DSCreate.pm.in 7 Sep 2007 15:02:25 -0000 1.6 @@ -306,6 +306,15 @@ push @ldiffiles, "$inf->{General}->{prefix}@templatedir@/template-dnaplugin.ldif"; } + # additional configuration LDIF files + if (exists($inf->{slapd}->{ConfigFile})) { + if (ref($inf->{slapd}->{ConfigFile})) { + push @ldiffiles, @{$inf->{slapd}->{ConfigFile}}; + } else { + push @ldiffiles, $inf->{slapd}->{ConfigFile}; + } + } + getMappedEntries($mapper, \@ldiffiles, \@errs, \&check_and_add_entry, [$conn]); @@ -407,6 +416,15 @@ } else { push @schemafiles, "$inf->{General}->{prefix}@schemadir@/00core.ldif"; } + + # additional schema files + if (exists($inf->{slapd}->{SchemaFile})) { + if (ref($inf->{slapd}->{SchemaFile})) { + push @schemafiles, @{$inf->{slapd}->{SchemaFile}}; + } else { + push @schemafiles, $inf->{slapd}->{SchemaFile}; + } + } for (@schemafiles) { my $src = $_; my $basename = basename($src); Index: Inf.pm =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/Inf.pm,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- Inf.pm 13 Jul 2007 19:51:48 -0000 1.4 +++ Inf.pm 7 Sep 2007 15:02:25 -0000 1.5 @@ -77,6 +77,7 @@ my $incontinuation = 0; my $curkey; + my $curval; my $inffh; if ($filename eq "-") { $inffh = \*STDIN; @@ -100,12 +101,32 @@ $iscontinuation = 1; } if ($incontinuation) { - $self->{$curSection}->{$curkey} .= "\n" . $_; # add line in entirety to current value + if ($curval) { + $self->{$curSection}->{$curkey}->[$curval] .= "\n" . $_; # add line in entirety to current value + } else { + $self->{$curSection}->{$curkey} .= "\n" . $_; # add line in entirety to current value + } } elsif (/^\[(.*?)\]/) { # e.g. [General] $curSection = $1; + $iscontinuation = 0; # disallow section continuations } elsif (/^\s*(.*?)\s*=\s*(.*?)\s*$/) { # key = value $curkey = $1; - $self->{$curSection}->{$curkey} = $2; + # a single value is just a single scalar + # multiple values are represented by an array ref + if (exists($self->{$curSection}->{$curkey})) { + if (!ref($self->{$curSection}->{$curkey})) { + # convert single scalar to array ref + my $ary = [$self->{$curSection}->{$curkey}]; + $self->{$curSection}->{$curkey} = $ary; + } + # just push the new value + push @{$self->{$curSection}->{$curkey}}, $2; + $curval = @{$self->{$curSection}->{$curkey}} - 1; # curval is index of last item + } else { + # single value + $self->{$curSection}->{$curkey} = $2; + $curval = 0; # only 1 value + } } if ($iscontinuation) { # if line ends with a backslash, continue the data on the next line $incontinuation = 1; Index: Setup.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/Setup.pm.in,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- Setup.pm.in 18 Jul 2007 20:37:11 -0000 1.9 +++ Setup.pm.in 7 Sep 2007 15:02:25 -0000 1.10 @@ -161,7 +161,23 @@ # allows the reuse of .inf files with some parameters overridden for (@ARGV) { if (/^([\w_-]+)\.([\w_-]+)=(.*)$/) { # e.g. section.param=value - $self->{inf}->{$1}->{$2} = $3; + my $sec = $1; + my $parm = $2; + my $val = $3; + # a single value is just a single scalar + # multiple values are represented by an array ref + if (exists($self->{inf}->{$sec}->{$parm})) { + if (!ref($self->{inf}->{$sec}->{$parm})) { + # convert single scalar to array ref + my $ary = [$self->{inf}->{$sec}->{$parm}]; + $self->{inf}->{$sec}->{$parm} = $ary; + } + # just push the new value + push @{$self->{inf}->{$sec}->{$parm}}, $val; + } else { + # single value + $self->{inf}->{$sec}->{$parm} = $val; + } } else { # error print STDERR "Error: unknown command line option $_\n"; usage(); From fedora-directory-commits at redhat.com Fri Sep 7 19:08:47 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Fri, 7 Sep 2007 15:08:47 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/admin/src/scripts template-dbverify.in, NONE, 1.1 template-verify-db.pl.in, 1.7, 1.8 Message-ID: <200709071908.l87J8l23014227@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/admin/src/scripts In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv13862/ldap/admin/src/scripts Modified Files: template-verify-db.pl.in Added Files: template-dbverify.in Log Message: Resolves: #236256 Summary: verify-db.pl (db_verify) does not work on a little endian machine (comment #1-#4) Description: 1) introducing dbverify mode to ns-slapd. 2) providing new script dbverify to call "ns-slapd dbverify" 3) fixing verify-db.pl to call dbverify instead of db_verify from BDB --- NEW FILE template-dbverify.in --- #!/bin/sh prefix="{{DS-ROOT}}" if [ "$prefix" = "/" ] ; then prefix="" fi LD_LIBRARY_PATH=$prefix/{{SERVER-DIR}}:$prefix at nss_libdir@:$prefix at libdir@ if [ -n "$prefix" ] ; then LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:@nss_libdir@" fi export LD_LIBRARY_PATH SHLIB_PATH=$LD_LIBRARY_PATH export SHLIB_PATH args="" while [ "$1" != "" ] do if [ "$1" = "-n" ]; then args=$args" "$1 shift args=$args" "$1 elif [ "$1" = "-V" ]; then args=$args" "$1 else echo "Usage: dbverify [-n backend_instance] [-V]" echo "Note : if \"-n backend_instance\" is not passed, verify all DBs." echo " -V : verbose" exit 1 fi shift done cd {{SERVERBIN-DIR}} ./ns-slapd dbverify -D {{CONFIG-DIR}} $args if [ $? -eq 0 ]; then echo "DB verify: Passed" exit 0 else echo "DB verify: Failed" exit 1 fi Index: template-verify-db.pl.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/template-verify-db.pl.in,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- template-verify-db.pl.in 21 Mar 2007 17:42:58 -0000 1.7 +++ template-verify-db.pl.in 7 Sep 2007 19:08:45 -0000 1.8 @@ -211,41 +211,48 @@ } # Check db files by db_verify -for (my $i = 0; "$$dbdirs[$i]" ne ""; $i++) +print "Verify db files ... "; +open(DBVERIFY, "dbverify $thisdb 2>&1 1> $NULL |"); +sleep 1; +my $bad_index = 0; +my $bad_id2entry = 0; +my $isfirst = 1; +while ($l = ) { - opendir(DB, $$dbdirs[$i]) or die "can't opendir $$dbdirs[$i] : $!"; - while (defined($db = readdir(DB))) - { - if ($db =~ /\.db/) + if ($isfirst) { - my $thisdb = $$dbdirs[$i] . "/" . $db; - print "Verify $thisdb ... "; - open(DBVERIFY, "db_verify $thisdb 2>&1 1> $NULL |"); - sleep 1; - my $haserr = 0; - while ($l = ) - { - if ($haserr == 0) + print "\n"; + $isfirst = 0; + } + if ("$l" =~ /verify failed/) + { + if ("$l" =~ /id2entry.db/) { - print "\n"; + $bad_id2entry++; } - if ("$l" ne "") + else { - $haserr++; - print "DB ERROR: $l"; + $bad_index++; } - } - close(DBVERIFY); - if ($haserr == 0 && $? == 0) - { - print "Good\n"; - } - else - { - print "db file $db in $$dbdirs[$i] is corrupted.\n"; - print "Please restore your backup and recover the database.\n"; - } } - } - closedir(DB); + print "$l"; +} +close(DBVERIFY); + +if ($bad_id2entry > 0) +{ + print "\nFound the db was corrupted\n"; + print "Please restore your backup and recover the database.\n"; + exit(1); +} +elsif ($bad_index > 0) +{ + print "\nFound the index file(s) was corrupted\n"; + print "Please run db2index on the corrupted index\n"; + exit(1); +} +else +{ + print "Good\n"; + exit(0); } From fedora-directory-commits at redhat.com Fri Sep 7 19:08:47 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Fri, 7 Sep 2007 15:08:47 -0400 Subject: [Fedora-directory-commits] ldapserver Makefile.am, 1.56, 1.57 Makefile.in, 1.68, 1.69 aclocal.m4, 1.49, 1.50 configure, 1.62, 1.63 ltmain.sh, 1.19, 1.20 Message-ID: <200709071908.l87J8lgA014221@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv13862 Modified Files: Makefile.am Makefile.in aclocal.m4 configure ltmain.sh Log Message: Resolves: #236256 Summary: verify-db.pl (db_verify) does not work on a little endian machine (comment #1-#4) Description: 1) introducing dbverify mode to ns-slapd. 2) providing new script dbverify to call "ns-slapd dbverify" 3) fixing verify-db.pl to call dbverify instead of db_verify from BDB Index: Makefile.am =================================================================== RCS file: /cvs/dirsec/ldapserver/Makefile.am,v retrieving revision 1.56 retrieving revision 1.57 diff -u -r1.56 -r1.57 --- Makefile.am 20 Aug 2007 18:33:31 -0000 1.56 +++ Makefile.am 7 Sep 2007 19:08:44 -0000 1.57 @@ -236,7 +236,8 @@ ldap/admin/src/scripts/template-ns-activate.pl \ ldap/admin/src/scripts/template-ns-inactivate.pl \ ldap/admin/src/scripts/template-ns-newpwpolicy.pl \ - ldap/admin/src/scripts/template-verify-db.pl + ldap/admin/src/scripts/template-verify-db.pl \ + ldap/admin/src/scripts/template-dbverify init_SCRIPTS = wrappers/$(PACKAGE_NAME) @@ -501,6 +502,7 @@ ldap/servers/slapd/back-ldbm/ldbm_search.c \ ldap/servers/slapd/back-ldbm/ldbm_unbind.c \ ldap/servers/slapd/back-ldbm/ldif2ldbm.c \ + ldap/servers/slapd/back-ldbm/dbverify.c \ ldap/servers/slapd/back-ldbm/matchrule.c \ ldap/servers/slapd/back-ldbm/misc.c \ ldap/servers/slapd/back-ldbm/monitor.c \ Index: Makefile.in =================================================================== RCS file: /cvs/dirsec/ldapserver/Makefile.in,v retrieving revision 1.68 retrieving revision 1.69 diff -u -r1.68 -r1.69 --- Makefile.in 20 Aug 2007 18:33:32 -0000 1.68 +++ Makefile.in 7 Sep 2007 19:08:44 -0000 1.69 @@ -170,6 +170,7 @@ ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_search.lo \ ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldbm_unbind.lo \ ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldif2ldbm.lo \ + ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbverify.lo \ ldap/servers/slapd/back-ldbm/libback_ldbm_la-matchrule.lo \ ldap/servers/slapd/back-ldbm/libback_ldbm_la-misc.lo \ ldap/servers/slapd/back-ldbm/libback_ldbm_la-monitor.lo \ @@ -849,7 +850,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ -SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_FALSE = @SOLARIS_FALSE@ @@ -1147,7 +1147,8 @@ ldap/admin/src/scripts/template-ns-activate.pl \ ldap/admin/src/scripts/template-ns-inactivate.pl \ ldap/admin/src/scripts/template-ns-newpwpolicy.pl \ - ldap/admin/src/scripts/template-verify-db.pl + ldap/admin/src/scripts/template-verify-db.pl \ + ldap/admin/src/scripts/template-dbverify init_SCRIPTS = wrappers/$(PACKAGE_NAME) inf_DATA = ldap/admin/src/slapd.inf \ @@ -1402,6 +1403,7 @@ ldap/servers/slapd/back-ldbm/ldbm_search.c \ ldap/servers/slapd/back-ldbm/ldbm_unbind.c \ ldap/servers/slapd/back-ldbm/ldif2ldbm.c \ + ldap/servers/slapd/back-ldbm/dbverify.c \ ldap/servers/slapd/back-ldbm/matchrule.c \ ldap/servers/slapd/back-ldbm/misc.c \ ldap/servers/slapd/back-ldbm/monitor.c \ @@ -2327,6 +2329,9 @@ ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldif2ldbm.lo: \ ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) +ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbverify.lo: \ + ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ + ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) ldap/servers/slapd/back-ldbm/libback_ldbm_la-matchrule.lo: \ ldap/servers/slapd/back-ldbm/$(am__dirstamp) \ ldap/servers/slapd/back-ldbm/$(DEPDIR)/$(am__dirstamp) @@ -4110,6 +4115,8 @@ -rm -f ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbsize.lo -rm -f ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbtest.$(OBJEXT) -rm -f ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbtest.lo + -rm -f ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbverify.$(OBJEXT) + -rm -f ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbverify.lo -rm -f ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbversion.$(OBJEXT) -rm -f ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbversion.lo -rm -f ldap/servers/slapd/back-ldbm/libback_ldbm_la-dn2entry.$(OBJEXT) @@ -4859,6 +4866,7 @@ @AMDEP_TRUE@@am__include@ @am__quote at ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dblayer.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbsize.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbtest.Plo at am__quote@ + at AMDEP_TRUE@@am__include@ @am__quote at ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbverify.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbversion.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dn2entry.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-entrystore.Plo at am__quote@ @@ -5563,6 +5571,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-ldif2ldbm.lo `test -f 'ldap/servers/slapd/back-ldbm/ldif2ldbm.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/ldif2ldbm.c +ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbverify.lo: ldap/servers/slapd/back-ldbm/dbverify.c + at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbverify.lo -MD -MP -MF "ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbverify.Tpo" -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbverify.lo `test -f 'ldap/servers/slapd/back-ldbm/dbverify.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/dbverify.c; \ + at am__fastdepCC_TRUE@ then mv -f "ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbverify.Tpo" "ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbverify.Plo"; else rm -f "ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-dbverify.Tpo"; exit 1; fi + at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ldap/servers/slapd/back-ldbm/dbverify.c' object='ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbverify.lo' libtool=yes @AMDEPBACKSLASH@ + at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-dbverify.lo `test -f 'ldap/servers/slapd/back-ldbm/dbverify.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/dbverify.c + ldap/servers/slapd/back-ldbm/libback_ldbm_la-matchrule.lo: ldap/servers/slapd/back-ldbm/matchrule.c @am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libback_ldbm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/slapd/back-ldbm/libback_ldbm_la-matchrule.lo -MD -MP -MF "ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-matchrule.Tpo" -c -o ldap/servers/slapd/back-ldbm/libback_ldbm_la-matchrule.lo `test -f 'ldap/servers/slapd/back-ldbm/matchrule.c' || echo '$(srcdir)/'`ldap/servers/slapd/back-ldbm/matchrule.c; \ @am__fastdepCC_TRUE@ then mv -f "ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-matchrule.Tpo" "ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-matchrule.Plo"; else rm -f "ldap/servers/slapd/back-ldbm/$(DEPDIR)/libback_ldbm_la-matchrule.Tpo"; exit 1; fi Index: aclocal.m4 =================================================================== RCS file: /cvs/dirsec/ldapserver/aclocal.m4,v retrieving revision 1.49 retrieving revision 1.50 diff -u -r1.49 -r1.50 --- aclocal.m4 13 Aug 2007 15:35:35 -0000 1.49 +++ aclocal.m4 7 Sep 2007 19:08:44 -0000 1.50 @@ -1578,27 +1578,10 @@ # before this can be enabled. hardcode_into_libs=yes - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -4305,9 +4288,6 @@ # Is the compiler the GNU C compiler? with_gcc=$_LT_AC_TAGVAR(GCC, $1) -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - # An ERE matcher. EGREP=$lt_EGREP @@ -4441,11 +4421,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=\`echo $lt_[]_LT_AC_TAGVAR(predep_objects, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=\`echo $lt_[]_LT_AC_TAGVAR(postdep_objects, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) # Dependencies to place before the objects being linked to create a # shared library. @@ -4457,7 +4437,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=\`echo $lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -4537,7 +4517,7 @@ link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) # Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -6373,7 +6353,6 @@ done done done -IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris @@ -6406,7 +6385,6 @@ done ]) SED=$lt_cv_path_SED -AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ]) Index: configure =================================================================== RCS file: /cvs/dirsec/ldapserver/configure,v retrieving revision 1.62 retrieving revision 1.63 diff -u -r1.62 -r1.63 --- configure 22 Aug 2007 05:11:34 -0000 1.62 +++ configure 7 Sep 2007 19:08:44 -0000 1.63 @@ -465,7 +465,7 @@ #endif" ac_default_prefix=/opt/$PACKAGE_NAME -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE SED EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CP! P CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS debug_defs BUNDLE_TRUE BUNDLE_FALSE enable_pam_passthru_TRUE enable_pam_passthru_FALSE enable_dna_TRUE enable_dna_FALSE enable_ldapi_TRUE enable_ldapi_FALSE enable_bitwise_TRUE enable_bitwise_FALSE with_fhs_opt configdir sampledatadir propertydir schemadir serverdir serverplugindir scripttemplatedir perldir infdir defaultuser defaultgroup instconfigdir WINNT_TRUE WINNT_FALSE LIBSOCKET LIBNSL LIBDL LIBCSTD LIBCRUN initdir perlexec HPUX_TRUE HPUX_FALSE SOLARIS_TRUE SOLARIS_FALSE PKG_CONFIG ICU_CONFIG NETSNMP_CONFIG PACKAGE_BASE_VERSION nspr_inc nspr_lib nspr_libdir nss_inc nss_lib nss_libdir ldapsdk_inc ldapsdk_lib ldapsdk_libdir ldapsdk_bindir db_inc db_incdir db_lib db_libdir db_bindir db_libver sasl_inc sasl_lib sasl_libdir svrcore_inc svrcore_lib icu_lib icu_inc icu_bin netsnmp_inc netsnmp_lib netsnmp_libdir netsnmp_link brand capbrand vendor LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CX! XCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS debug_defs BUNDLE_TRUE BUNDLE_FALSE enable_pam_passthru_TRUE enable_pam_passthru_FALSE enable_dna_TRUE enable_dna_FALSE enable_ldapi_TRUE enable_ldapi_FALSE enable_bitwise_TRUE enable_bitwise_FALSE with_fhs_opt configdir sampledatadir propertydir schemadir serverdir serverplugindir scripttemplatedir perldir infdir defaultuser defaultgroup instconfigdir WINNT_TRUE WINNT_FALSE LIBSOCKET LIBNSL LIBDL LIBCSTD LIBCRUN initdir perlexec HPUX_TRUE HPUX_FALSE SOLARIS_TRUE SOLARIS_FALSE PKG_CONFIG ICU_CONFIG NETSNMP_CONFIG PACKAGE_BASE_VERSION nspr_inc nspr_lib nspr_libdir nss_inc nss_lib nss_libdir ldapsdk_inc ldapsdk_lib ldapsdk_libdir ldapsdk_bindir db_inc db_incdir db_lib db_libdir db_bindir db_libver sasl_inc sasl_lib sasl_libdir svrcore_inc svrcore_lib icu_lib icu_inc icu_bin netsnmp_inc netsnmp_lib netsnmp_libdir netsnmp_link brand capbrand vendor LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -3836,7 +3836,6 @@ done done done -IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris @@ -3871,7 +3870,6 @@ fi SED=$lt_cv_path_SED - echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 @@ -4312,7 +4310,7 @@ ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 4315 "configure"' > conftest.$ac_ext + echo '#line 4313 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -5447,7 +5445,7 @@ # Provide some information about the compiler. -echo "$as_me:5450:" \ +echo "$as_me:5448:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 @@ -6510,11 +6508,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6513: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6511: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6517: \$? = $ac_status" >&5 + echo "$as_me:6515: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -6778,11 +6776,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6781: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6779: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6785: \$? = $ac_status" >&5 + echo "$as_me:6783: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -6882,11 +6880,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6885: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6883: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:6889: \$? = $ac_status" >&5 + echo "$as_me:6887: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -8347,31 +8345,10 @@ # before this can be enabled. hardcode_into_libs=yes - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '#line 8354 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -9248,7 +9225,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:11668: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:11698: \$? = $ac_status" >&5 + echo "$as_me:11672: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -11795,11 +11769,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11798: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11772: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:11802: \$? = $ac_status" >&5 + echo "$as_me:11776: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -12327,31 +12301,10 @@ # before this can be enabled. hardcode_into_libs=yes - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '#line 12334 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -12735,9 +12688,6 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - # An ERE matcher. EGREP=$lt_EGREP @@ -12871,11 +12821,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=\`echo $lt_predep_objects_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=\`echo $lt_postdep_objects_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. @@ -12887,7 +12837,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -12967,7 +12917,7 @@ link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -13389,11 +13339,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13392: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13342: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:13396: \$? = $ac_status" >&5 + echo "$as_me:13346: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -13493,11 +13443,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13496: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13446: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13500: \$? = $ac_status" >&5 + echo "$as_me:13450: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -14938,31 +14888,10 @@ # before this can be enabled. hardcode_into_libs=yes - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '#line 14945 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -15346,9 +15275,6 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - # An ERE matcher. EGREP=$lt_EGREP @@ -15482,11 +15408,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=\`echo $lt_predep_objects_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=\`echo $lt_postdep_objects_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. @@ -15498,7 +15424,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -15578,7 +15504,7 @@ link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -15720,11 +15646,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15723: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15649: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15727: \$? = $ac_status" >&5 + echo "$as_me:15653: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -15988,11 +15914,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15991: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15917: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15995: \$? = $ac_status" >&5 + echo "$as_me:15921: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -16092,11 +16018,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16095: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16021: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:16099: \$? = $ac_status" >&5 + echo "$as_me:16025: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17557,31 +17483,10 @@ # before this can be enabled. hardcode_into_libs=yes - # find out which ABI we are using - libsuff= - case "$host_cpu" in - x86_64*|s390x*|powerpc64*) - echo '#line 17564 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -17965,9 +17870,6 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - # An ERE matcher. EGREP=$lt_EGREP @@ -18101,11 +18003,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=\`echo $lt_predep_objects_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=\`echo $lt_postdep_objects_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. @@ -18117,7 +18019,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -18197,7 +18099,7 @@ link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -18449,9 +18351,6 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_RC -gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` -gcc_ver=\`gcc -dumpversion\` - # An ERE matcher. EGREP=$lt_EGREP @@ -18585,11 +18484,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=\`echo $lt_predep_objects_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=\`echo $lt_postdep_objects_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. @@ -18601,7 +18500,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +compiler_lib_search_path=$lt_compiler_lib_search_path_RC # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -18681,7 +18580,7 @@ link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries -sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -26020,7 +25919,6 @@ s, at CCDEPMODE@,$CCDEPMODE,;t t s, at am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s, at am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t -s, at SED@,$SED,;t t s, at EGREP@,$EGREP,;t t s, at LN_S@,$LN_S,;t t s, at ECHO@,$ECHO,;t t Index: ltmain.sh =================================================================== RCS file: /cvs/dirsec/ldapserver/ltmain.sh,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- ltmain.sh 20 Aug 2007 17:49:17 -0000 1.19 +++ ltmain.sh 7 Sep 2007 19:08:44 -0000 1.20 @@ -46,16 +46,10 @@ VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" -# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes. +if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi # Check that we have a working $echo. @@ -111,14 +105,12 @@ # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). # We save the old values to restore during execute mode. -for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - fi" -done +if test "${LC_ALL+set}" = set; then + save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL +fi +if test "${LANG+set}" = set; then + save_LANG="$LANG"; LANG=C; export LANG +fi # Make sure IFS has a sensible default lt_nl=' @@ -144,8 +136,6 @@ preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 ##################################### # Shell function definitions: @@ -337,17 +327,7 @@ *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - extracted_serial=`expr $extracted_serial + 1` - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" + my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" @@ -778,7 +758,6 @@ *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; - *.obj) xform=obj ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` @@ -1159,9 +1138,8 @@ for arg do case $arg in - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) + -all-static | -static) + if test "X$arg" = "X-all-static"; then if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 fi @@ -1169,20 +1147,12 @@ dlopen_self=$dlopen_self_static fi prefer_static_libs=yes - ;; - -static) + else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac + fi build_libtool_libs=no build_old_libs=yes break @@ -1742,7 +1712,7 @@ continue ;; - -static | -static-libtool-libs) + -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects @@ -2520,9 +2490,7 @@ if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. @@ -3218,7 +3186,7 @@ # which has an extra 1 added just for fun # case $version_type in - darwin|linux|osf|windows|none) + darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" @@ -3442,11 +3410,11 @@ fi # Eliminate all temporary directories. -# for path in $notinst_path; do -# lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` -# deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` -# dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` -# done + for path in $notinst_path; do + lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` + deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` + dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` + done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. @@ -3547,12 +3515,13 @@ int main() { return 0; } EOF $rm conftest - if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then + $LTCC $LTCFLAGS -o conftest conftest.c $deplibs + if test "$?" -eq 0 ; then ldd_output=`ldd conftest` for i in $deplibs; do name=`expr $i : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. - if test "$name" != "" && test "$name" != "0"; then + if test "$name" != "" && test "$name" -ne "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $i "*) @@ -3591,7 +3560,9 @@ # If $name is empty we are operating on a -L argument. if test "$name" != "" && test "$name" != "0"; then $rm conftest - if $LTCC $LTCFLAGS -o conftest conftest.c $i; then + $LTCC $LTCFLAGS -o conftest conftest.c $i + # Did it work? + if test "$?" -eq 0 ; then ldd_output=`ldd conftest` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in @@ -3623,7 +3594,7 @@ droppeddeps=yes $echo $echo "*** Warning! Library $i is needed by this library but I was not able to" - $echo "*** make it link in! You will probably need to install it or some" + $echo "*** make it link in! You will probably need to install it or some" $echo "*** library that it depends on before this library will be fully" $echo "*** functional. Installing it before continuing would be even better." fi @@ -4268,14 +4239,12 @@ reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. + # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" @@ -4723,16 +4692,16 @@ case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; @@ -4747,13 +4716,13 @@ # really was required. # Nullify the symbol file. - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP` + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. @@ -4840,7 +4809,7 @@ if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then - relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP` + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= @@ -4877,7 +4846,7 @@ fi done relink_command="(cd `pwd`; $relink_command)" - relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. @@ -5284,18 +5253,6 @@ Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' -# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi - # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH @@ -5438,7 +5395,7 @@ ;; esac $echo >> $output "\ - \$echo \"\$0: cannot exec \$program \$*\" + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else @@ -5624,7 +5581,7 @@ done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi @@ -5969,9 +5926,9 @@ if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. - relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP` + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else - relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP` + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 @@ -6180,7 +6137,7 @@ file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. - relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP` + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : @@ -6456,15 +6413,12 @@ fi # Restore saved environment variables - for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" @@ -6821,9 +6775,9 @@ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE + try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX - try to export only the symbols matching REGEX + try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened @@ -6837,11 +6791,9 @@ -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries + -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] + specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. From fedora-directory-commits at redhat.com Fri Sep 7 19:08:48 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Fri, 7 Sep 2007 15:08:48 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm dbverify.c, NONE, 1.1 dblayer.c, 1.19, 1.20 init.c, 1.8, 1.9 proto-back-ldbm.h, 1.11, 1.12 Message-ID: <200709071908.l87J8m9w014245@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv13862/ldap/servers/slapd/back-ldbm Modified Files: dblayer.c init.c proto-back-ldbm.h Added Files: dbverify.c Log Message: Resolves: #236256 Summary: verify-db.pl (db_verify) does not work on a little endian machine (comment #1-#4) Description: 1) introducing dbverify mode to ns-slapd. 2) providing new script dbverify to call "ns-slapd dbverify" 3) fixing verify-db.pl to call dbverify instead of db_verify from BDB --- NEW FILE dbverify.c --- /** BEGIN COPYRIGHT BLOCK * 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; version 2 of the License. * * 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., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA. * * In addition, as a special exception, Red Hat, Inc. gives You the additional * right to link the code of this Program with code not covered under the GNU * General Public License ("Non-GPL Code") and to distribute linked combinations * including the two, subject to the limitations in this paragraph. Non-GPL Code * permitted under this exception must only link to the code of this Program * through those well defined interfaces identified in the file named EXCEPTION * found in the source code files (the "Approved Interfaces"). The files of * Non-GPL Code may instantiate templates or use macros or inline functions from * the Approved Interfaces without causing the resulting work to be covered by * the GNU General Public License. Only Red Hat, Inc. may make changes or * additions to the list of Approved Interfaces. You must obey the GNU General * Public License in all respects for all of the Program code and other code used * in conjunction with the Program except the Non-GPL Code covered by this * exception. If you modify this file, you may extend this exception to your * version of the file, but you are not obligated to do so. If you do not wish to * provide this exception without modification, you must delete this exception * statement from your version and license this file solely under the GPL without * exception. * * Copyright (C) 2007 Red Hat, Inc. * All rights reserved. * END COPYRIGHT BLOCK **/ #ifdef HAVE_CONFIG_H # include #endif /* dbverify.c - verify database files */ #include "back-ldbm.h" #include "dblayer.h" static int dbverify_ext( ldbm_instance *inst, int verbose ) { char dbdir[MAXPATHLEN]; char *filep = NULL; PRDir *dirhandle = NULL; PRDirEntry *direntry = NULL; backend *be = inst->inst_be; DB *dbp = NULL; int tmplen = 0; int filelen = 0; int rval = 1; int rval_main = 0; struct ldbminfo *li = inst->inst_li; dblayer_private *priv = (dblayer_private*)li->li_dblayer_private; struct dblayer_private_env *pEnv = priv->dblayer_env; dbdir[sizeof(dbdir)-1] = '\0'; PR_snprintf(dbdir, sizeof(dbdir), "%s/%s", inst->inst_parent_dir_name, inst->inst_dir_name); if ('\0' != dbdir[sizeof(dbdir)-1]) /* overflown */ { slapi_log_error(SLAPI_LOG_FATAL, "DB verify", "db path too long: %s/%s\n", inst->inst_parent_dir_name, inst->inst_dir_name, 0); return 1; } tmplen = strlen(dbdir); filep = dbdir + tmplen; filelen = sizeof(dbdir) - tmplen; /* run dbverify on each each db file */ dirhandle = PR_OpenDir(dbdir); if (! dirhandle) { slapi_log_error(SLAPI_LOG_FATAL, "DB verify", "PR_OpenDir (%s) failed (%d): %s\n", dbdir, PR_GetError(),slapd_pr_strerror(PR_GetError())); return 1; } while (NULL != (direntry = PR_ReadDir(dirhandle, PR_SKIP_DOT | PR_SKIP_DOT_DOT))) { /* struct attrinfo *ai = NULL; */ char *p = NULL; dbp = NULL; if (!direntry->name) { break; } if (!strstr(direntry->name, LDBM_FILENAME_SUFFIX)) /* non db file */ { continue; } if (sizeof(direntry->name) + 2 > filelen) { slapi_log_error(SLAPI_LOG_FATAL, "DB verify", "db path too long: %s/%s%s\n", dbdir, direntry->name, 0); continue; } PR_snprintf(filep, filelen, "/%s", direntry->name); rval = db_create(&dbp, pEnv->dblayer_DB_ENV, 0); if (0 != rval) { slapi_log_error(SLAPI_LOG_FATAL, "DB verify", "Unable to create id2entry db file %d\n", rval); return rval; } #define VLVPREFIX "vlv#" if ((0 != strncmp(direntry->name, ID2ENTRY, strlen(ID2ENTRY))) && (0 != strncmp(direntry->name, VLVPREFIX, strlen(VLVPREFIX)))) { rval = dbp->set_flags(dbp, DB_DUP | DB_DUPSORT); if (0 != rval) { slapi_log_error(SLAPI_LOG_FATAL, "DB verify", "Unable to set DUP flags to db %d\n", rval); return rval; } rval = dbp->set_dup_compare(dbp, idl_new_compare_dups); if (0 != rval) { slapi_log_error(SLAPI_LOG_FATAL, "DB verify", "Unable to set dup_compare to db %d\n", rval); return rval; } } #undef VLVPREFIX rval = dbp->verify(dbp, dbdir, NULL, NULL, 0); if (0 == rval) { if (verbose) { slapi_log_error(SLAPI_LOG_FATAL, "DB verify", "%s: ok\n", dbdir); } } else { slapi_log_error(SLAPI_LOG_FATAL, "DB verify", "verify failed(%d): %s\n", rval, dbdir); } rval_main |= rval; *filep = '\0'; } PR_CloseDir(dirhandle); return rval_main; } int ldbm_back_dbverify( Slapi_PBlock *pb ) { struct ldbminfo *li = NULL; Object *inst_obj = NULL; ldbm_instance *inst = NULL; int verbose = 0; int rval = 1; int rval_main = 0; char **instance_names = NULL; slapi_log_error(SLAPI_LOG_TRACE, "verify DB", "Verifying db files...\n"); slapi_pblock_get(pb, SLAPI_BACKEND_INSTANCE_NAME, &instance_names); slapi_pblock_get(pb, SLAPI_SEQ_VAL, &verbose); slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &li); ldbm_config_load_dse_info(li); ldbm_config_internal_set(li, CONFIG_DB_TRANSACTION_LOGGING, "off"); /* no write needed; choose EXPORT MODE */ if (0 != dblayer_start(li, DBLAYER_EXPORT_MODE)) { slapi_log_error(SLAPI_LOG_FATAL, "verify DB", "dbverify: Failed to init database\n"); return rval; } /* server is up */ slapi_log_error(SLAPI_LOG_TRACE, "verify DB", "server is up\n"); if (instance_names) /* instance is specified */ { char **inp = NULL; for (inp = instance_names; inp && *inp; inp++) { inst = ldbm_instance_find_by_name(li, *inp); if (inst) { rval_main |= dbverify_ext(inst, verbose); } else { rval_main |= 1; /* no such instance */ } } } else /* all instances */ { for (inst_obj = objset_first_obj(li->li_instance_set); inst_obj; inst_obj = objset_next_obj(li->li_instance_set, inst_obj)) { inst = (ldbm_instance *)object_get_data(inst_obj); /* check if an import/restore is already ongoing... */ if (instance_set_busy(inst) != 0) { /* standalone, only. never happens */ slapi_log_error(SLAPI_LOG_FATAL, "upgrade DB", "ldbm: '%s' is already in the middle of " "another task and cannot be disturbed.\n", inst->inst_name); continue; /* skip this instance and go to the next*/ } rval_main |= dbverify_ext(inst, verbose); } } /* close the database down again */ rval = dblayer_post_close(li, DBLAYER_EXPORT_MODE); if (0 != rval) { slapi_log_error(SLAPI_LOG_FATAL, "verify DB", "Failed to close database\n"); } return rval_main; } Index: dblayer.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/dblayer.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- dblayer.c 16 Aug 2007 19:28:58 -0000 1.19 +++ dblayer.c 7 Sep 2007 19:08:45 -0000 1.20 @@ -2522,8 +2522,11 @@ } } #endif - commit_good_database(priv); - + if (0 == return_value + && !((DBLAYER_ARCHIVE_MODE|DBLAYER_EXPORT_MODE) & dbmode) + && !priv->dblayer_bad_stuff_happened) { + commit_good_database(priv); + } return return_value; } Index: init.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/init.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- init.c 10 Nov 2006 23:45:39 -0000 1.8 +++ init.c 7 Sep 2007 19:08:45 -0000 1.9 @@ -209,6 +209,8 @@ (void *) ldbm_back_ldbm2archive ); rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_UPGRADEDB_FN, (void *) ldbm_back_upgradedb ); + rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_DBVERIFY_FN, + (void *) ldbm_back_dbverify ); rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_BEGIN_FN, (void *) dblayer_plugin_begin ); rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_DB_COMMIT_FN, Index: proto-back-ldbm.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/proto-back-ldbm.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- proto-back-ldbm.h 15 Mar 2007 21:34:32 -0000 1.11 +++ proto-back-ldbm.h 7 Sep 2007 19:08:45 -0000 1.12 @@ -448,6 +448,7 @@ int ldbm_back_archive2ldbm( Slapi_PBlock *pb ); int ldbm_back_ldbm2archive( Slapi_PBlock *pb ); int ldbm_back_upgradedb( Slapi_PBlock *pb ); +int ldbm_back_dbverify( Slapi_PBlock *pb ); int ldbm_back_next_search_entry( Slapi_PBlock *pb ); int ldbm_back_next_search_entry_ext( Slapi_PBlock *pb, int use_extension ); int ldbm_back_db_test( Slapi_PBlock *pb ); From fedora-directory-commits at redhat.com Fri Sep 7 19:08:47 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Fri, 7 Sep 2007 15:08:47 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd main.c, 1.20, 1.21 pblock.c, 1.9, 1.10 slap.h, 1.25, 1.26 slapi-private.h, 1.15, 1.16 task.c, 1.11, 1.12 Message-ID: <200709071908.l87J8lFi014236@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/servers/slapd In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv13862/ldap/servers/slapd Modified Files: main.c pblock.c slap.h slapi-private.h task.c Log Message: Resolves: #236256 Summary: verify-db.pl (db_verify) does not work on a little endian machine (comment #1-#4) Description: 1) introducing dbverify mode to ns-slapd. 2) providing new script dbverify to call "ns-slapd dbverify" 3) fixing verify-db.pl to call dbverify instead of db_verify from BDB Index: main.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/main.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- main.c 17 Aug 2007 02:12:37 -0000 1.20 +++ main.c 7 Sep 2007 19:08:45 -0000 1.21 @@ -112,6 +112,7 @@ static int slapd_exemode_archive2db(); static int slapd_exemode_db2archive(); static int slapd_exemode_upgradedb(); +static int slapd_exemode_dbverify(); static int slapd_exemode_dbtest(); static int slapd_exemode_suffix2instance(); static int slapd_debug_level_string2level( const char *s ); @@ -374,16 +375,16 @@ exemode = SLAPD_EXEMODE_REFERRAL; } else if ( strcmp( s, "suffix2instance" ) == 0 ) { exemode = SLAPD_EXEMODE_SUFFIX2INSTANCE; - } - else if ( strcmp( s, "upgradedb" ) == 0 ) - { + } else if ( strcmp( s, "upgradedb" ) == 0 ) { exemode = SLAPD_EXEMODE_UPGRADEDB; + } else if ( strcmp( s, "dbverify" ) == 0 ) { + exemode = SLAPD_EXEMODE_DBVERIFY; } else if ( exit_if_unknown ) { fprintf( stderr, "usage: %s -D configdir " "[ldif2db | db2ldif | archive2db " "| db2archive | db2index | refer | suffix2instance" - " | upgradedb] " + " | upgradedb | dbverify] " "[options]\n", progname ); exit( 1 ); } else { @@ -443,6 +444,9 @@ case SLAPD_EXEMODE_UPGRADEDB: usagestr = "usage: %s %s%s-D configdir [-d debuglevel] [-f] -a archivedir\n"; break; + case SLAPD_EXEMODE_DBVERIFY: + usagestr = "usage: %s %s%s-D configdir [-d debuglevel] [-n backend-instance-name]\n"; + break; default: /* SLAPD_EXEMODE_SLAPD */ usagestr = "usage: %s %s%s-D configdir [-d debuglevel] " @@ -480,7 +484,8 @@ static int db2ldif_dump_replica = 0; static int db2ldif_dump_uniqueid = 1; static int ldif2db_generate_uniqueid = SLAPI_UNIQUEID_GENERATE_TIME_BASED; -static int ldif2db_load_state= 1; +static int ldif2db_load_state = 1; +static int dbverify_verbose = 0; static char *ldif2db_namespaceid = NULL; int importexport_encrypt = 0; static int upgradedb_force = 0; @@ -983,6 +988,13 @@ case SLAPD_EXEMODE_UPGRADEDB: return slapd_exemode_upgradedb(); + case SLAPD_EXEMODE_DBVERIFY: + return_value = slapd_exemode_dbverify(); + if (return_value == 0) + return return_value; + else + return 1; + case SLAPD_EXEMODE_PRINTVERSION: slapd_print_version(1); exit(1); @@ -1368,6 +1380,15 @@ {"configDir",ArgRequired,'D'}, {0,0,0}}; + char *opts_dbverify = "vVfd:n:D:"; + struct opt_ext long_options_dbverify[] = { + {"version",ArgNone,'v'}, + {"debug",ArgRequired,'d'}, + {"backend",ArgRequired,'n'}, + {"configDir",ArgRequired,'D'}, + {"verbose",ArgNone,'V'}, + {0,0,0}}; + char *opts_referral = "vd:p:r:SD:"; struct opt_ext long_options_referral[] = { {"version",ArgNone,'v'}, @@ -1464,6 +1485,10 @@ opts = opts_upgradedb; long_opts = long_options_upgradedb; break; + case SLAPD_EXEMODE_DBVERIFY: + opts = opts_dbverify; + long_opts = long_options_dbverify; + break; default: /* SLAPD_EXEMODE_SLAPD */ opts = opts_slapd; long_opts = long_options_slapd; @@ -1567,7 +1592,8 @@ slapd_exemode == SLAPD_EXEMODE_ARCHIVE2DB) { /* The -n argument will give the name of a backend instance. */ cmd_line_instance_name = optarg_ext; - } else if (slapd_exemode == SLAPD_EXEMODE_DB2LDIF) { + } else if (slapd_exemode == SLAPD_EXEMODE_DB2LDIF || + slapd_exemode == SLAPD_EXEMODE_DBVERIFY) { char *s = slapi_ch_strdup(optarg_ext); charray_add(&cmd_line_instance_names, s); } else { @@ -1726,7 +1752,11 @@ break; case 'V': - slapd_exemode = SLAPD_EXEMODE_PRINTVERSION; + if ( slapd_exemode == SLAPD_EXEMODE_DBVERIFY ) { + dbverify_verbose = 1; + } else { + slapd_exemode = SLAPD_EXEMODE_PRINTVERSION; + } break; case 'a': /* archive pathname for db */ @@ -2004,7 +2034,7 @@ exit( 1 ); } - /* this should be the first time this are called! if the init order + /* this should be the first time to be called! if the init order * is ever changed, these lines should be changed (or erased)! */ mapping_tree_init(); @@ -2546,7 +2576,7 @@ exit( 1 ); } - /* this should be the first time this are called! if the init order + /* this should be the first time to be called! if the init order * is ever changed, these lines should be changed (or erased)! */ mapping_tree_init(); @@ -2601,10 +2631,58 @@ return( return_value ); } +/* + * function to perform DB verify + */ +static int +slapd_exemode_dbverify() +{ + int return_value = 0; + Slapi_PBlock pb; + struct slapdplugin *backend_plugin; + slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig(); + + /* this should be the first time to be called! if the init order + * is ever changed, these lines should be changed (or erased)! + */ + mapping_tree_init(); + if ((backend_plugin = plugin_get_by_name("ldbm database")) == NULL) { + LDAPDebug(LDAP_DEBUG_ANY, + "ERROR: Could not find the ldbm backend plugin.\n", + 0, 0, 0); + exit(1); + } + + /* check for slapi v2 support */ + if (! SLAPI_PLUGIN_IS_V2(backend_plugin)) { + LDAPDebug(LDAP_DEBUG_ANY, "ERROR: %s is too old to do dbverify.\n", + backend_plugin->plg_name, 0, 0); + exit(1); + } + + memset( &pb, '\0', sizeof(pb) ); + pb.pb_backend = NULL; + pb.pb_seq_val = dbverify_verbose; + pb.pb_plugin = backend_plugin; + pb.pb_instance_name = (char *)cmd_line_instance_names; + pb.pb_task_flags = TASK_RUNNING_FROM_COMMANDLINE; + + if ( backend_plugin->plg_dbverify != NULL ) { + return_value = (*backend_plugin->plg_dbverify)( &pb ); + } else { + LDAPDebug( LDAP_DEBUG_ANY, + "ERROR: no db verify function defined for " + "%s\n", backend_plugin->plg_name, 0, 0 ); + return_value = -1; + } + + return( return_value ); +} + static int slapd_exemode_dbtest() -{ +{ int return_value= 0; Slapi_PBlock pb; struct slapdplugin *plugin; Index: pblock.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/pblock.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- pblock.c 27 Feb 2007 02:57:30 -0000 1.9 +++ pblock.c 7 Sep 2007 19:08:45 -0000 1.10 @@ -617,6 +617,12 @@ } (*(IFP *)value) = pblock->pb_plugin->plg_upgradedb; break; + case SLAPI_PLUGIN_DB_DBVERIFY_FN: + if ( pblock->pb_plugin->plg_type != SLAPI_PLUGIN_DATABASE ) { + return( -1 ); + } + (*(IFP *)value) = pblock->pb_plugin->plg_dbverify; + break; case SLAPI_PLUGIN_DB_BEGIN_FN: if ( pblock->pb_plugin->plg_type != SLAPI_PLUGIN_DATABASE ) { return( -1 ); @@ -1886,6 +1892,12 @@ } pblock->pb_plugin->plg_upgradedb = (IFP) value; break; + case SLAPI_PLUGIN_DB_DBVERIFY_FN: + if ( pblock->pb_plugin->plg_type != SLAPI_PLUGIN_DATABASE ) { + return( -1 ); + } + pblock->pb_plugin->plg_dbverify = (IFP) value; + break; case SLAPI_PLUGIN_DB_BEGIN_FN: if ( pblock->pb_plugin->plg_type != SLAPI_PLUGIN_DATABASE ) { return( -1 ); Index: slap.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/slap.h,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- slap.h 17 Aug 2007 02:12:37 -0000 1.25 +++ slap.h 7 Sep 2007 19:08:45 -0000 1.26 @@ -65,8 +65,9 @@ #define SLAPD_EXEMODE_DB2INDEX 7 #define SLAPD_EXEMODE_REFERRAL 8 #define SLAPD_EXEMODE_SUFFIX2INSTANCE 9 -#define SLAPD_EXEMODE_PRINTVERSION 10 +#define SLAPD_EXEMODE_PRINTVERSION 10 #define SLAPD_EXEMODE_UPGRADEDB 11 +#define SLAPD_EXEMODE_DBVERIFY 12 #ifdef _WIN32 #ifndef DONT_DECLARE_SLAPD_LDAP_DEBUG @@ -766,14 +767,14 @@ IFP plg_un_db_flush; /* close */ IFP plg_un_db_seq; /* sequence */ IFP plg_un_db_entry; /* entry send */ - IFP plg_un_db_referral; /* referral send */ + IFP plg_un_db_referral; /* referral send */ IFP plg_un_db_result; /* result send */ IFP plg_un_db_ldif2db; /* ldif 2 database */ IFP plg_un_db_db2ldif; /* database 2 ldif */ IFP plg_un_db_db2index; /* database 2 index */ - IFP plg_un_db_archive2db; /* ldif 2 database */ - IFP plg_un_db_db2archive; /* database 2 ldif */ - IFP plg_un_db_upgradedb; /* convert old idl to new */ + IFP plg_un_db_archive2db; /* ldif 2 database */ + IFP plg_un_db_db2archive; /* database 2 ldif */ + IFP plg_un_db_upgradedb; /* convert old idl to new */ IFP plg_un_db_begin; /* dbase txn begin */ IFP plg_un_db_commit; /* dbase txn commit */ IFP plg_un_db_abort; /* dbase txn abort */ @@ -784,6 +785,7 @@ IFP plg_un_db_register_oc_callback; /* Register a function to call when a operation is applied to a given ObjectClass */ IFP plg_un_db_init_instance; /* initializes new db instance */ IFP plg_un_db_wire_import; /* fast replica update */ + IFP plg_un_db_verify; /* verify db files */ } plg_un_db; #define plg_bind plg_un.plg_un_db.plg_un_db_bind #define plg_unbind plg_un.plg_un_db.plg_un_db_unbind @@ -809,6 +811,7 @@ #define plg_archive2db plg_un.plg_un_db.plg_un_db_archive2db #define plg_db2archive plg_un.plg_un_db.plg_un_db_db2archive #define plg_upgradedb plg_un.plg_un_db.plg_un_db_upgradedb +#define plg_dbverify plg_un.plg_un_db.plg_un_db_verify #define plg_dbsize plg_un.plg_un_db.plg_un_db_dbsize #define plg_dbtest plg_un.plg_un_db.plg_un_db_dbtest #define plg_rmdb plg_un.plg_un_db.plg_un_db_rmdb Index: slapi-private.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/slapi-private.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- slapi-private.h 14 Dec 2006 23:16:54 -0000 1.15 +++ slapi-private.h 7 Sep 2007 19:08:45 -0000 1.16 @@ -829,9 +829,10 @@ #define SLAPI_PLUGIN_DB_DB2INDEX_FN 228 #define SLAPI_PLUGIN_DB_NEXT_SEARCH_ENTRY_EXT_FN 229 #define SLAPI_PLUGIN_DB_ENTRY_RELEASE_FN 230 -#define SLAPI_PLUGIN_DB_INIT_INSTANCE_FN 231 -#define SLAPI_PLUGIN_DB_WIRE_IMPORT_FN 234 +#define SLAPI_PLUGIN_DB_INIT_INSTANCE_FN 231 +#define SLAPI_PLUGIN_DB_WIRE_IMPORT_FN 234 #define SLAPI_PLUGIN_DB_UPGRADEDB_FN 235 +#define SLAPI_PLUGIN_DB_DBVERIFY_FN 236 /* database plugin-specific parameters */ #define SLAPI_PLUGIN_DB_NO_ACL 250 #define SLAPI_PLUGIN_DB_RMDB_FN 280 Index: task.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/task.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- task.c 9 Apr 2007 23:02:41 -0000 1.11 +++ task.c 7 Sep 2007 19:08:45 -0000 1.12 @@ -55,13 +55,13 @@ static int shutting_down = 0; -#define TASK_BASE_DN "cn=tasks, cn=config" -#define TASK_IMPORT_DN "cn=import, cn=tasks, cn=config" -#define TASK_EXPORT_DN "cn=export, cn=tasks, cn=config" -#define TASK_BACKUP_DN "cn=backup, cn=tasks, cn=config" -#define TASK_RESTORE_DN "cn=restore, cn=tasks, cn=config" -#define TASK_INDEX_DN "cn=index, cn=tasks, cn=config" -#define TASK_UPGRADEDB_DN "cn=upgradedb, cn=tasks, cn=config" +#define TASK_BASE_DN "cn=tasks, cn=config" +#define TASK_IMPORT_DN "cn=import, cn=tasks, cn=config" +#define TASK_EXPORT_DN "cn=export, cn=tasks, cn=config" +#define TASK_BACKUP_DN "cn=backup, cn=tasks, cn=config" +#define TASK_RESTORE_DN "cn=restore, cn=tasks, cn=config" +#define TASK_INDEX_DN "cn=index, cn=tasks, cn=config" +#define TASK_UPGRADEDB_DN "cn=upgradedb, cn=tasks, cn=config" #define TASK_LOG_NAME "nsTaskLog" #define TASK_STATUS_NAME "nsTaskStatus" @@ -1486,6 +1486,7 @@ } out: + slapi_ch_free((void **)&mypb.pb_seq_val); if (rv != 0) { if (task) destroy_task(1, task); From fedora-directory-commits at redhat.com Fri Sep 7 19:49:53 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Fri, 7 Sep 2007 15:49:53 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd conntable.c, 1.7, 1.8 Message-ID: <200709071949.l87JnrMp017163@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/servers/slapd In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv17132/ldapserver/ldap/servers/slapd Modified Files: conntable.c Log Message: Resolves: bug 244475 Bug Description: crash at startup with new ldap sdk on 64-bit platform Reviewed by: nkinder (Thanks!) Fix Description: Use LBER_SOCKET as the socket type instead of int. There was also a place in ldclt where we were doing the same thing. Platforms tested: RHEL5 x86_64 Flag Day: no Doc impact: no Index: conntable.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/conntable.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- conntable.c 10 Nov 2006 23:45:40 -0000 1.7 +++ conntable.c 7 Sep 2007 19:49:51 -0000 1.8 @@ -62,7 +62,7 @@ */ for ( i = 0; i < table_size; i++ ) { - int invalid_socket; + LBER_SOCKET invalid_socket; ber_len_t maxbersize = config_get_maxbersize(); /* DBDB---move this out of here once everything works */ ct->c[i].c_sb = ber_sockbuf_alloc(); From fedora-directory-commits at redhat.com Fri Sep 7 19:49:54 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Fri, 7 Sep 2007 15:49:54 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/tools/ldclt ldapfct.c, 1.4, 1.5 Message-ID: <200709071949.l87JnsC9017169@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/tools/ldclt In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv17132/ldapserver/ldap/servers/slapd/tools/ldclt Modified Files: ldapfct.c Log Message: Resolves: bug 244475 Bug Description: crash at startup with new ldap sdk on 64-bit platform Reviewed by: nkinder (Thanks!) Fix Description: Use LBER_SOCKET as the socket type instead of int. There was also a place in ldclt where we were doing the same thing. Platforms tested: RHEL5 x86_64 Flag Day: no Doc impact: no Index: ldapfct.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/tools/ldclt/ldapfct.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- ldapfct.c 5 Jul 2007 23:53:41 -0000 1.4 +++ ldapfct.c 7 Sep 2007 19:49:51 -0000 1.5 @@ -586,7 +586,7 @@ thread_context *tttctx) { int ret; /* Return value */ - int fd; /* LDAP cnx's fd */ + LBER_SOCKET fd; /* LDAP cnx's fd */ int v2v3; /* LDAP version used */ /* @@ -623,9 +623,9 @@ } #endif #ifdef TRACE_FD_GET_OPTION_BUG - printf ("ldclt[%d]: T%03d: fd=%d\n", mctx.pid, tttctx->thrdNum, fd); + printf ("ldclt[%d]: T%03d: fd=%d\n", mctx.pid, tttctx->thrdNum, (int)fd); #endif - if (close (fd) < 0) + if (close ((int)fd) < 0) { perror ("ldctx"); printf ("ldclt[%d]: T%03d: cannot close(fd=%d), error=%d (%s)\n", From fedora-directory-commits at redhat.com Sat Sep 8 02:16:30 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Fri, 7 Sep 2007 22:16:30 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/admin/src/scripts DSMigration.pm.in, 1.10, 1.11 Message-ID: <200709080216.l882GU7t026856@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/admin/src/scripts In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv26837/ldapserver/ldap/admin/src/scripts Modified Files: DSMigration.pm.in Log Message: Resolves: bug 282741 Bug Description: Show-Stopper - Migration from DS 6.21 to DS80 Reviewed by: nhosoi (Thanks!) Fix Description: Added a new function migrateNetscapeRoot which will create a temporary LDIF file from the given NetscapeRoot.ldif file. The function will look for all \bNetscape\b occurances and convert them to @capbrand@ where that is defined as the capitalized brand name in configure. It will then import this temporary LDIF file and delete it. Platforms tested: RHEL5 x86_64 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: DSMigration.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/DSMigration.pm.in,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- DSMigration.pm.in 4 Sep 2007 17:50:49 -0000 1.10 +++ DSMigration.pm.in 8 Sep 2007 02:16:27 -0000 1.11 @@ -62,6 +62,8 @@ use Mozilla::LDAP::API qw(ldap_explode_dn); use Mozilla::LDAP::LDIF; +use Carp; + use Exporter; @ISA = qw(Exporter); @EXPORT = qw(migrateDS); @@ -253,6 +255,35 @@ return (); } +# older versions may use the old Netscape names e.g. Netscape Administration Server +# we have to convert these to the new names e.g. @capbrand@ Administration Server +sub migrateNetscapeRoot { + my $ldiffile = shift; + my ($fh, $tmpldiffile); + # create a temp inf file for writing for other processes + # never overwrite the user supplied inf file + ($fh, $tmpldiffile) = tempfile("nsrootXXXXXX", UNLINK => 0, + SUFFIX => ".ldif", OPEN => 1, + DIR => File::Spec->tmpdir); + open( MYLDIF, "$ldiffile" ) || confess "Can't open $ldiffile: $!"; + my $in = new Mozilla::LDAP::LDIF(*MYLDIF); + while (my $ent = readOneEntry $in) { + my $dn = $ent->getDN(); + $dn =~ s/\bNetscape\b/@capbrand@/g; + $ent->setDN($dn); + foreach my $attr (keys %{$ent}) { + my @vals = $ent->getValues($attr); + map { s/\bNetscape\b/@capbrand@/g } @vals; + $ent->setValues($attr, @vals); + } + Mozilla::LDAP::LDIF::put_LDIF($fh, 78, $ent); + } + close( MYLDIF ); + close( $fh ); + + return $tmpldiffile; +} + # migrate all of the databases in an instance sub migrateDatabases { my $mig = shift; # the Migration object @@ -269,13 +300,22 @@ # database my $foundldif; for (glob("$mig->{oldsroot}/$inst/db/*.ldif")) { - my $dbname = basename($_, '.ldif'); - my $cmd = "$inst_dir/ldif2db -n \"$dbname\" -i \"$_\""; + my $fname = $_; + my $dbname = basename($fname, '.ldif'); + my $deleteflag = 0; + if ($fname =~ /NetscapeRoot.ldif$/) { + $fname = migrateNetscapeRoot($fname); + $deleteflag = 1; + } + my $cmd = "$inst_dir/ldif2db -n \"$dbname\" -i \"$fname\""; debug(1, "migrateDatabases: executing command $cmd\n"); $? = 0; # clear error condition my $output = `$cmd 2>&1`; + if ($deleteflag) { + unlink($fname); + } if ($?) { - return ('error_importing_migrated_db', $_, $?, $output); + return ('error_importing_migrated_db', $fname, $?, $output); } debug(1, $output); $foundldif = 1; From fedora-directory-commits at redhat.com Wed Sep 12 00:59:55 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Tue, 11 Sep 2007 20:59:55 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/replication repl5_plugins.c, 1.7, 1.8 Message-ID: <200709120059.l8C0xtiU024486@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/replication In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv24462/ldapserver/ldap/servers/plugins/replication Modified Files: repl5_plugins.c Log Message: Resolves: bug 283041 Bug Description: MMR: Directory updates on same object Reviewed by: nhosoi (Thanks!) Fix Description: The problem does appear to be concurrency. I think the original intention of the urp fixup code was that it should only be run inside the database lock, so that the database could be restored to a consistent state before the next operation was processed. However, this requires the database code to know when the database is already locked, so that if e.g. a modrdn operation needs to call an internal delete, the database should not be locked again. The flag OP_FLAG_REPL_FIXUP is used to denote both that the operation is such an internal operation, and that the database should not be locked again. There are a couple of cases where these operations can be called from outside of the database lock: urp_fixup_rename_entry is called from multimaster_postop_modrdn and multimaster_postop_delete, both of which are front end post op plugins, not called from within the database lock. Same with urp_fixup_delete_entry and urp_fixup_modify_entry. In other cases, such as urp_fixup_add_entry, and other places where urp_fixup_rename_entry and urp_fixup_modify_entry are called, they are called from a bepostop plugin function, which is called after the original database operation has been processed, within the database lock. So the solution appears to be to move the urp_* functions to the bepostop plugin functions. One of these functions does an internal search - urp_get_min_naming_conflict_entry - but it does not appear that search locks the database, so there was nothing to be done to make it "reentrant". Without this patch, I can crash the server in a matter of minutes (x86_64 rhel5) using the latest Fedora DS 1.1 code. With the patch, the server runs for several hours (maybe longer, I had to stop the test). Also, to really exercise the urp code, I added a rename operation between the add and delete e.g. add("ou=test"); rename("ou=test", "ou=test2"); delete("ou=test2"); The server still runs for several hours with no problems. Platforms tested: RHEL5 x86_64 Flag Day: no Doc impact: no Index: repl5_plugins.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/repl5_plugins.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- repl5_plugins.c 10 Nov 2006 23:45:17 -0000 1.7 +++ repl5_plugins.c 12 Sep 2007 00:59:53 -0000 1.8 @@ -789,12 +789,26 @@ int multimaster_bepostop_modrdn (Slapi_PBlock *pb) { + Slapi_Operation *op; + + slapi_pblock_get(pb, SLAPI_OPERATION, &op); + if ( ! operation_is_flag_set (op, OP_FLAG_REPL_FIXUP) ) + { + urp_post_modrdn_operation (pb); + } return 0; } int multimaster_bepostop_delete (Slapi_PBlock *pb) { + Slapi_Operation *op; + + slapi_pblock_get(pb, SLAPI_OPERATION, &op); + if ( ! operation_is_flag_set (op, OP_FLAG_REPL_FIXUP) ) + { + urp_post_delete_operation (pb); + } return 0; } @@ -814,16 +828,7 @@ int multimaster_postop_delete (Slapi_PBlock *pb) { - int rc; - Slapi_Operation *op; - - slapi_pblock_get(pb, SLAPI_OPERATION, &op); - if ( ! operation_is_flag_set (op, OP_FLAG_REPL_FIXUP) ) - { - urp_post_delete_operation (pb); - } - rc = process_postop(pb); - return rc; + return process_postop(pb); } int @@ -835,16 +840,7 @@ int multimaster_postop_modrdn (Slapi_PBlock *pb) { - int rc; - Slapi_Operation *op; - - slapi_pblock_get(pb, SLAPI_OPERATION, &op); - if ( ! operation_is_flag_set (op, OP_FLAG_REPL_FIXUP) ) - { - urp_post_modrdn_operation (pb); - } - rc = process_postop(pb); - return rc; + return process_postop(pb); } From fedora-directory-commits at redhat.com Wed Sep 12 15:21:01 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Wed, 12 Sep 2007 11:21:01 -0400 Subject: [Fedora-directory-commits] ldapserver aclocal.m4, 1.50, 1.51 configure, 1.63, 1.64 missing, 1.39, 1.40 install-sh, 1.39, 1.40 depcomp, 1.39, 1.40 compile, 1.38, 1.39 config.sub, 1.38, 1.39 config.guess, 1.38, 1.39 Makefile.in, 1.69, 1.70 Message-ID: <200709121521.l8CFL1pJ025938@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv25908 Modified Files: aclocal.m4 configure missing install-sh depcomp compile config.sub config.guess Makefile.in Log Message: try to fix build breakage on RHEL5 Index: aclocal.m4 =================================================================== RCS file: /cvs/dirsec/ldapserver/aclocal.m4,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- aclocal.m4 7 Sep 2007 19:08:44 -0000 1.50 +++ aclocal.m4 12 Sep 2007 15:20:59 -0000 1.51 @@ -1578,10 +1578,27 @@ # before this can be enabled. hardcode_into_libs=yes + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -4288,6 +4305,9 @@ # Is the compiler the GNU C compiler? with_gcc=$_LT_AC_TAGVAR(GCC, $1) +gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` +gcc_ver=\`gcc -dumpversion\` + # An ERE matcher. EGREP=$lt_EGREP @@ -4421,11 +4441,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) +predep_objects=\`echo $lt_[]_LT_AC_TAGVAR(predep_objects, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) +postdep_objects=\`echo $lt_[]_LT_AC_TAGVAR(postdep_objects, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place before the objects being linked to create a # shared library. @@ -4437,7 +4457,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) +compiler_lib_search_path=\`echo $lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -4517,7 +4537,7 @@ link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) # Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec +sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -6353,6 +6373,7 @@ done done done +IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris @@ -6385,6 +6406,7 @@ done ]) SED=$lt_cv_path_SED +AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ]) Index: configure =================================================================== RCS file: /cvs/dirsec/ldapserver/configure,v retrieving revision 1.63 retrieving revision 1.64 diff -u -r1.63 -r1.64 --- configure 7 Sep 2007 19:08:44 -0000 1.63 +++ configure 12 Sep 2007 15:20:59 -0000 1.64 @@ -465,7 +465,7 @@ #endif" ac_default_prefix=/opt/$PACKAGE_NAME -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CX! XCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS debug_defs BUNDLE_TRUE BUNDLE_FALSE enable_pam_passthru_TRUE enable_pam_passthru_FALSE enable_dna_TRUE enable_dna_FALSE enable_ldapi_TRUE enable_ldapi_FALSE enable_bitwise_TRUE enable_bitwise_FALSE with_fhs_opt configdir sampledatadir propertydir schemadir serverdir serverplugindir scripttemplatedir perldir infdir defaultuser defaultgroup instconfigdir WINNT_TRUE WINNT_FALSE LIBSOCKET LIBNSL LIBDL LIBCSTD LIBCRUN initdir perlexec HPUX_TRUE HPUX_FALSE SOLARIS_TRUE SOLARIS_FALSE PKG_CONFIG ICU_CONFIG NETSNMP_CONFIG PACKAGE_BASE_VERSION nspr_inc nspr_lib nspr_libdir nss_inc nss_lib nss_libdir ldapsdk_inc ldapsdk_lib ldapsdk_libdir ldapsdk_bindir db_inc db_incdir db_lib db_libdir db_bindir db_libver sasl_inc sasl_lib sasl_libdir svrcore_inc svrcore_lib icu_lib icu_inc icu_bin netsnmp_inc netsnmp_lib netsnmp_libdir netsnmp_link brand capbrand vendor LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE SED EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CP! P CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS debug_defs BUNDLE_TRUE BUNDLE_FALSE enable_pam_passthru_TRUE enable_pam_passthru_FALSE enable_dna_TRUE enable_dna_FALSE enable_ldapi_TRUE enable_ldapi_FALSE enable_bitwise_TRUE enable_bitwise_FALSE with_fhs_opt configdir sampledatadir propertydir schemadir serverdir serverplugindir scripttemplatedir perldir infdir defaultuser defaultgroup instconfigdir WINNT_TRUE WINNT_FALSE LIBSOCKET LIBNSL LIBDL LIBCSTD LIBCRUN initdir perlexec HPUX_TRUE HPUX_FALSE SOLARIS_TRUE SOLARIS_FALSE PKG_CONFIG ICU_CONFIG NETSNMP_CONFIG PACKAGE_BASE_VERSION nspr_inc nspr_lib nspr_libdir nss_inc nss_lib nss_libdir ldapsdk_inc ldapsdk_lib ldapsdk_libdir ldapsdk_bindir db_inc db_incdir db_lib db_libdir db_bindir db_libver sasl_inc sasl_lib sasl_libdir svrcore_inc svrcore_lib icu_lib icu_inc icu_bin netsnmp_inc netsnmp_lib netsnmp_libdir netsnmp_link brand capbrand vendor LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -3836,6 +3836,7 @@ done done done +IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris @@ -3870,6 +3871,7 @@ fi SED=$lt_cv_path_SED + echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 @@ -4310,7 +4312,7 @@ ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 4313 "configure"' > conftest.$ac_ext + echo '#line 4315 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -5445,7 +5447,7 @@ # Provide some information about the compiler. -echo "$as_me:5448:" \ +echo "$as_me:5450:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 @@ -6508,11 +6510,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6511: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6513: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6515: \$? = $ac_status" >&5 + echo "$as_me:6517: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -6776,11 +6778,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6779: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6781: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6783: \$? = $ac_status" >&5 + echo "$as_me:6785: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -6880,11 +6882,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6883: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6885: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:6887: \$? = $ac_status" >&5 + echo "$as_me:6889: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -8345,10 +8347,31 @@ # before this can be enabled. hardcode_into_libs=yes + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '#line 8354 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -9225,7 +9248,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:11694: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:11672: \$? = $ac_status" >&5 + echo "$as_me:11698: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -11769,11 +11795,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11772: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11798: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:11776: \$? = $ac_status" >&5 + echo "$as_me:11802: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -12301,10 +12327,31 @@ # before this can be enabled. hardcode_into_libs=yes + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '#line 12334 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -12688,6 +12735,9 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX +gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` +gcc_ver=\`gcc -dumpversion\` + # An ERE matcher. EGREP=$lt_EGREP @@ -12821,11 +12871,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=$lt_predep_objects_CXX +predep_objects=\`echo $lt_predep_objects_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=$lt_postdep_objects_CXX +postdep_objects=\`echo $lt_postdep_objects_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place before the objects being linked to create a # shared library. @@ -12837,7 +12887,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX +compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -12917,7 +12967,7 @@ link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec +sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -13339,11 +13389,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13342: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13392: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:13346: \$? = $ac_status" >&5 + echo "$as_me:13396: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -13443,11 +13493,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13446: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13496: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13450: \$? = $ac_status" >&5 + echo "$as_me:13500: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -14888,10 +14938,31 @@ # before this can be enabled. hardcode_into_libs=yes + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '#line 14945 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -15275,6 +15346,9 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 +gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` +gcc_ver=\`gcc -dumpversion\` + # An ERE matcher. EGREP=$lt_EGREP @@ -15408,11 +15482,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=$lt_predep_objects_F77 +predep_objects=\`echo $lt_predep_objects_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=$lt_postdep_objects_F77 +postdep_objects=\`echo $lt_postdep_objects_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place before the objects being linked to create a # shared library. @@ -15424,7 +15498,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_F77 +compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -15504,7 +15578,7 @@ link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec +sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -15646,11 +15720,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15649: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15723: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15653: \$? = $ac_status" >&5 + echo "$as_me:15727: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -15914,11 +15988,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15917: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15991: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15921: \$? = $ac_status" >&5 + echo "$as_me:15995: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -16018,11 +16092,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16021: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16095: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:16025: \$? = $ac_status" >&5 + echo "$as_me:16099: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17483,10 +17557,31 @@ # before this can be enabled. hardcode_into_libs=yes + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '#line 17564 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -17870,6 +17965,9 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ +gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` +gcc_ver=\`gcc -dumpversion\` + # An ERE matcher. EGREP=$lt_EGREP @@ -18003,11 +18101,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=$lt_predep_objects_GCJ +predep_objects=\`echo $lt_predep_objects_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=$lt_postdep_objects_GCJ +postdep_objects=\`echo $lt_postdep_objects_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place before the objects being linked to create a # shared library. @@ -18019,7 +18117,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ +compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -18099,7 +18197,7 @@ link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec +sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -18351,6 +18449,9 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_RC +gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` +gcc_ver=\`gcc -dumpversion\` + # An ERE matcher. EGREP=$lt_EGREP @@ -18484,11 +18585,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=$lt_predep_objects_RC +predep_objects=\`echo $lt_predep_objects_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=$lt_postdep_objects_RC +postdep_objects=\`echo $lt_postdep_objects_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place before the objects being linked to create a # shared library. @@ -18500,7 +18601,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_RC +compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -18580,7 +18681,7 @@ link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec +sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -25919,6 +26020,7 @@ s, at CCDEPMODE@,$CCDEPMODE,;t t s, at am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s, at am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +s, at SED@,$SED,;t t s, at EGREP@,$EGREP,;t t s, at LN_S@,$LN_S,;t t s, at ECHO@,$ECHO,;t t Index: Makefile.in =================================================================== RCS file: /cvs/dirsec/ldapserver/Makefile.in,v retrieving revision 1.69 retrieving revision 1.70 diff -u -r1.69 -r1.70 --- Makefile.in 7 Sep 2007 19:08:44 -0000 1.69 +++ Makefile.in 12 Sep 2007 15:20:59 -0000 1.70 @@ -850,6 +850,7 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_FALSE = @SOLARIS_FALSE@ From fedora-directory-commits at redhat.com Wed Sep 12 23:05:27 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Wed, 12 Sep 2007 19:05:27 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/replication repl5.h, 1.9, 1.10 windows_connection.c, 1.15, 1.16 windows_private.c, 1.14, 1.15 windows_protocol_util.c, 1.31, 1.32 windowsrepl.h, 1.11, 1.12 Message-ID: <200709122305.l8CN5Rtb009784@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/replication In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv9727 Modified Files: repl5.h windows_connection.c windows_private.c windows_protocol_util.c windowsrepl.h Log Message: Resolves: 243227 Summary: Handle syncing add opererations that have a ntuniqueid present. Index: repl5.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/repl5.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- repl5.h 10 Nov 2006 23:45:17 -0000 1.9 +++ repl5.h 12 Sep 2007 23:05:24 -0000 1.10 @@ -63,8 +63,8 @@ #define REPLICA_TYPE_WINDOWS 1 #define REPLICA_TYPE_MULTIMASTER 0 #define REPL_DIRSYNC_CONTROL_OID "1.2.840.113556.1.4.841" -#define CONN_SUPPORTS_DIRSYNC 12 -#define CONN_DOES_NOT_SUPPORT_DIRSYNC 13 +#define REPL_RETURN_DELETED_OBJS_CONTROL_OID "1.2.840.113556.1.4.417" +#define REPL_WIN2K3_AD_OID "1.2.840.113556.1.4.1670" /* DS 5.0 replication protocol OIDs */ #define REPL_START_NSDS50_REPLICATION_REQUEST_OID "2.16.840.1.113730.3.5.3" @@ -358,7 +358,11 @@ CONN_SUPPORTS_DS71_REPL, CONN_DOES_NOT_SUPPORT_DS71_REPL, CONN_IS_READONLY, - CONN_IS_NOT_READONLY + CONN_IS_NOT_READONLY, + CONN_SUPPORTS_DIRSYNC, + CONN_DOES_NOT_SUPPORT_DIRSYNC, + CONN_IS_WIN2K3, + CONN_NOT_WIN2K3 } ConnResult; Repl_Connection *conn_new(Repl_Agmt *agmt); ConnResult conn_connect(Repl_Connection *conn); Index: windows_connection.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windows_connection.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- windows_connection.c 10 Nov 2006 23:45:17 -0000 1.15 +++ windows_connection.c 12 Sep 2007 23:05:24 -0000 1.16 @@ -83,6 +83,7 @@ struct timeval timeout; int flag_agmt_changed; char *plain; + int is_win2k3; /* 1 if it is win2k3 or later, 0 if not, -1 if not determined */ } repl_connection; /* #define DEFAULT_LINGER_TIME (5 * 60) */ /* 5 minutes */ @@ -167,6 +168,7 @@ rpc->supports_ds40_repl = -1; rpc->supports_ds50_repl = -1; rpc->supports_dirsync = -1; + rpc->is_win2k3 = -1; rpc->linger_active = PR_FALSE; rpc->delete_after_linger = PR_FALSE; rpc->linger_event = NULL; @@ -291,21 +293,18 @@ static ConnResult windows_perform_operation(Repl_Connection *conn, int optype, const char *dn, LDAPMod **attrs, const char *newrdn, const char *newparent, - int deleteoldrdn, LDAPControl *update_control, + int deleteoldrdn, LDAPControl **server_controls, const char *extop_oid, struct berval *extop_payload, char **retoidp, struct berval **retdatap, LDAPControl ***returned_controls) { int rc; ConnResult return_value; - LDAPControl *server_controls[1]; LDAPControl **loc_returned_controls; const char *op_string = NULL; const char *extra_op_string = NULL; LDAPDebug( LDAP_DEBUG_TRACE, "=> windows_perform_operation\n", 0, 0, 0 ); - server_controls[0] = NULL; - if (windows_conn_connected(conn)) { int msgid; @@ -588,9 +587,17 @@ return e; } +/* Perform a simple search against Windows with no controls */ ConnResult windows_search_entry(Repl_Connection *conn, char* searchbase, char *filter, Slapi_Entry **entry) { + return windows_search_entry_ext(conn, searchbase, filter, entry, NULL); +} + +/* Perform a simple search against Windows with optional controls */ +ConnResult +windows_search_entry_ext(Repl_Connection *conn, char* searchbase, char *filter, Slapi_Entry **entry, LDAPControl **serverctrls) +{ ConnResult return_value = 0; int ldap_rc = 0; LDAPMessage *res = NULL; @@ -607,7 +614,7 @@ { ldap_rc = ldap_search_ext_s(conn->ld, searchbase, LDAP_SCOPE_SUBTREE, filter, NULL, 0 /* attrsonly */, - NULL , NULL /* client controls */, + serverctrls , NULL /* client controls */, &conn->timeout, 0 /* sizelimit */, &res); if (LDAP_SUCCESS == ldap_rc) { @@ -684,9 +691,7 @@ server_controls[0] = NULL; /* unsupported */ } else { - /* DBDB: I'm pretty sure that the control is leaked from here */ - /* Purify agrees */ - server_controls[0] = windows_private_dirsync_control(conn->agmt); /* yes, or don't know */ + server_controls[0] = windows_private_dirsync_control(conn->agmt); } server_controls[1] = NULL; @@ -746,12 +751,12 @@ */ ConnResult windows_conn_send_add(Repl_Connection *conn, const char *dn, LDAPMod **attrs, - LDAPControl *update_control, LDAPControl ***returned_controls) + LDAPControl **server_controls, LDAPControl ***returned_controls) { ConnResult res = 0; LDAPDebug( LDAP_DEBUG_TRACE, "=> windows_conn_send_add\n", 0, 0, 0 ); res = windows_perform_operation(conn, CONN_ADD, dn, attrs, NULL /* newrdn */, - NULL /* newparent */, 0 /* deleteoldrdn */, update_control, + NULL /* newparent */, 0 /* deleteoldrdn */, server_controls, NULL /* extop OID */, NULL /* extop payload */, NULL /* retoidp */, NULL /* retdatap */, returned_controls); LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_conn_send_add\n", 0, 0, 0 ); @@ -764,13 +769,13 @@ */ ConnResult windows_conn_send_delete(Repl_Connection *conn, const char *dn, - LDAPControl *update_control, LDAPControl ***returned_controls) + LDAPControl **server_controls, LDAPControl ***returned_controls) { LDAPDebug( LDAP_DEBUG_TRACE, "=> windows_conn_send_delete\n", 0, 0, 0 ); LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_conn_send_delete\n", 0, 0, 0 ); return windows_perform_operation(conn, CONN_DELETE, dn, NULL /* attrs */, NULL /* newrdn */, NULL /* newparent */, 0 /* deleteoldrdn */, - update_control, NULL /* extop OID */, NULL /* extop payload */, + server_controls, NULL /* extop OID */, NULL /* extop payload */, NULL /* retoidp */, NULL /* retdatap */, returned_controls); } @@ -780,12 +785,12 @@ */ ConnResult windows_conn_send_modify(Repl_Connection *conn, const char *dn, LDAPMod **mods, - LDAPControl *update_control, LDAPControl ***returned_controls) + LDAPControl **server_controls, LDAPControl ***returned_controls) { LDAPDebug( LDAP_DEBUG_TRACE, "=> windows_conn_send_modify\n", 0, 0, 0 ); LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_conn_send_modify\n", 0, 0, 0 ); return windows_perform_operation(conn, CONN_MODIFY, dn, mods, NULL /* newrdn */, - NULL /* newparent */, 0 /* deleteoldrdn */, update_control, + NULL /* newparent */, 0 /* deleteoldrdn */, server_controls, NULL /* extop OID */, NULL /* extop payload */, NULL /* retoidp */, NULL /* retdatap */, returned_controls); } @@ -796,12 +801,12 @@ ConnResult windows_conn_send_rename(Repl_Connection *conn, const char *dn, const char *newrdn, const char *newparent, int deleteoldrdn, - LDAPControl *update_control, LDAPControl ***returned_controls) + LDAPControl **server_controls, LDAPControl ***returned_controls) { LDAPDebug( LDAP_DEBUG_TRACE, "=> windows_conn_send_rename\n", 0, 0, 0 ); LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_conn_send_rename\n", 0, 0, 0 ); return windows_perform_operation(conn, CONN_RENAME, dn, NULL /* attrs */, - newrdn, newparent, deleteoldrdn, update_control, + newrdn, newparent, deleteoldrdn, server_controls, NULL /* extop OID */, NULL /* extop payload */, NULL /* retoidp */, NULL /* retdatap */, returned_controls); } @@ -878,13 +883,13 @@ ConnResult windows_conn_send_extended_operation(Repl_Connection *conn, const char *extop_oid, struct berval *payload, char **retoidp, struct berval **retdatap, - LDAPControl *update_control, LDAPControl ***returned_controls) + LDAPControl **server_controls, LDAPControl ***returned_controls) { LDAPDebug( LDAP_DEBUG_TRACE, "=> windows_conn_send_extended_operation\n", 0, 0, 0 ); LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_conn_send_extended_operation\n", 0, 0, 0 ); return windows_perform_operation(conn, CONN_EXTENDED_OPERATION, NULL /* dn */, NULL /* attrs */, NULL /* newrdn */, NULL /* newparent */, 0 /* deleteoldrdn */, - update_control, extop_oid, payload, retoidp, retdatap, + server_controls, extop_oid, payload, retoidp, retdatap, returned_controls); } @@ -1264,6 +1269,16 @@ { windows_private_set_isnt4(conn->agmt,0); } + + supports = windows_conn_replica_is_win2k3(conn); + if (CONN_IS_WIN2K3 == supports) + { + windows_private_set_iswin2k3(conn->agmt,1); + LDAPDebug( LDAP_DEBUG_REPL, "windows_conn_connect : detected Win2k3 peer\n", 0, 0, 0 ); + } else + { + windows_private_set_iswin2k3(conn->agmt,0); + } } ber_bvfree(creds); @@ -1472,6 +1487,71 @@ } +/* Checks if the AD server is running win2k3 (or later) */ +ConnResult +windows_conn_replica_is_win2k3(Repl_Connection *conn) +{ + ConnResult return_value; + int ldap_rc; + + LDAPDebug( LDAP_DEBUG_TRACE, "=> windows_conn_replica_is_win2k3\n", 0, 0, 0 ); + + if (windows_conn_connected(conn)) + { + if (conn->is_win2k3 == -1) { + LDAPMessage *res = NULL; + LDAPMessage *entry = NULL; + char *attrs[] = {"supportedCapabilities", NULL}; + + conn->status = STATUS_SEARCHING; + ldap_rc = ldap_search_ext_s(conn->ld, "", LDAP_SCOPE_BASE, + "(objectclass=*)", attrs, 0 /* attrsonly */, + NULL /* server controls */, NULL /* client controls */, + &conn->timeout, LDAP_NO_LIMIT, &res); + if (LDAP_SUCCESS == ldap_rc) + { + conn->is_win2k3 = 0; + entry = ldap_first_entry(conn->ld, res); + if (!attribute_string_value_present(conn->ld, entry, "supportedCapabilities", REPL_WIN2K3_AD_OID)) + { + return_value = CONN_NOT_WIN2K3; + } + else + { + + conn->is_win2k3 =1; + return_value = CONN_IS_WIN2K3; + } + } + else + { + if (IS_DISCONNECT_ERROR(ldap_rc)) + { + conn->last_ldap_error = ldap_rc; /* specific reason */ + windows_conn_disconnect(conn); + return_value = CONN_NOT_CONNECTED; + } + else + { + return_value = CONN_OPERATION_FAILED; + } + } + if (NULL != res) + ldap_msgfree(res); + } + else { + return_value = conn->is_win2k3 ? CONN_IS_WIN2K3 : CONN_NOT_WIN2K3; + } + } + else + { + /* Not connected */ + return_value = CONN_NOT_CONNECTED; + } + LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_conn_replica_is_win2k3\n", 0, 0, 0 ); + return return_value; +} + /* * Return 1 if "value" is a value of attribute type "type" in entry "entry". Index: windows_private.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windows_private.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- windows_private.c 10 Nov 2006 23:45:17 -0000 1.14 +++ windows_private.c 12 Sep 2007 23:05:24 -0000 1.15 @@ -65,6 +65,7 @@ PRBool create_groups_from_dirsync; char *windows_domain; int isnt4; + int iswin2k3; }; static int @@ -245,6 +246,38 @@ LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_private_set_isnt4\n", 0, 0, 0 ); } +int windows_private_get_iswin2k3(const Repl_Agmt *ra) +{ + Dirsync_Private *dp; + + LDAPDebug( LDAP_DEBUG_TRACE, "=> windows_private_get_iswin2k3\n", 0, 0, 0 ); + + PR_ASSERT(ra); + + dp = (Dirsync_Private *) agmt_get_priv(ra); + PR_ASSERT (dp); + + LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_private_get_iswin2k3\n", 0, 0, 0 ); + + return dp->iswin2k3; +} + +void windows_private_set_iswin2k3(const Repl_Agmt *ra, int isit) +{ + Dirsync_Private *dp; + + LDAPDebug( LDAP_DEBUG_TRACE, "=> windows_private_set_iswin2k3\n", 0, 0, 0 ); + + PR_ASSERT(ra); + + dp = (Dirsync_Private *) agmt_get_priv(ra); + PR_ASSERT (dp); + + dp->iswin2k3 = isit; + + LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_private_set_iswin2k3\n", 0, 0, 0 ); +} + /* Returns a copy of the Slapi_DN pointer, no need to free it */ const Slapi_DN* windows_private_get_windows_subtree (const Repl_Agmt *ra) Index: windows_protocol_util.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windows_protocol_util.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- windows_protocol_util.c 4 Sep 2007 15:45:57 -0000 1.31 +++ windows_protocol_util.c 12 Sep 2007 23:05:25 -0000 1.32 @@ -71,11 +71,16 @@ static int windows_get_local_entry_by_uniqueid(Private_Repl_Protocol *prp,const char* uniqueid,Slapi_Entry **local_entry); static int map_entry_dn_outbound(Slapi_Entry *e, Slapi_DN **dn, Private_Repl_Protocol *prp, int *missing_entry, int want_guid); static char* extract_ntuserdomainid_from_entry(Slapi_Entry *e); +static char* extract_container(const Slapi_DN *entry_dn, const Slapi_DN *suffix_dn); static int windows_get_remote_entry (Private_Repl_Protocol *prp, const Slapi_DN* remote_dn,Slapi_Entry **remote_entry); +static int windows_get_remote_tombstone(Private_Repl_Protocol *prp, const Slapi_DN* remote_dn,Slapi_Entry **remote_entry); +static int windows_reanimate_tombstone(Private_Repl_Protocol *prp, const Slapi_DN* tombstone_dn, const char* new_dn); static const char* op2string (int op); static int is_subject_of_agreemeent_remote(Slapi_Entry *e, const Repl_Agmt *ra); static int map_entry_dn_inbound(Slapi_Entry *e, Slapi_DN **dn, const Repl_Agmt *ra); static int windows_update_remote_entry(Private_Repl_Protocol *prp,Slapi_Entry *remote_entry,Slapi_Entry *local_entry); +static int is_guid_dn(Slapi_DN *remote_dn); +static int map_windows_tombstone_dn(Slapi_Entry *e, Slapi_DN **dn, Private_Repl_Protocol *prp, int *exists); /* Controls the direction of flow for mapped attributes */ @@ -363,7 +368,7 @@ slapi_log_error(SLAPI_LOG_REPL, NULL, "Windows sync entry: %s %s\n", string, buffer); if (buffer) { - slapi_ch_free((void**)&buffer); + slapi_ch_free_string(&buffer); } } } @@ -953,11 +958,85 @@ int rc = 0; slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name, - "%s: process_replay_add: dn=\"%s\" (%s,%s)\n", - agmt_get_long_name(prp->agmt), slapi_sdn_get_dn(remote_dn), missing_entry ? "not present" : "already present" , remote_add_allowed ? "add allowed" : "add not allowed"); + "%s: process_replay_add: dn=\"%s\" (%s,%s)\n", agmt_get_long_name(prp->agmt), + slapi_sdn_get_dn(remote_dn), missing_entry ? "not present" : "already present", + remote_add_allowed ? "add allowed" : "add not allowed"); if (missing_entry) { + /* If DN is a GUID, we need to attempt to reanimate the tombstone */ + if (is_guid_dn(remote_dn)) { + int tstone_exists = 0; + int reanimate_rc = -1; + char *new_dn_string = NULL; + char *cn_string = NULL; + Slapi_DN *tombstone_dn = NULL; + + slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name, + "%s: process_replay_add: dn=\"%s\" appears to have been" + " deleted on remote side. Searching for tombstone.\n", + agmt_get_long_name(prp->agmt), slapi_sdn_get_dn(remote_dn)); + + /* Map local entry to tombstone DN and verify that it exists on + * AD side */ + map_windows_tombstone_dn(local_entry, &tombstone_dn, prp, &tstone_exists); + + /* We can't use a GUID DN, so rewrite to the new mapped DN. */ + cn_string = slapi_entry_attr_get_charptr(local_entry,"cn"); + if (!cn_string) { + cn_string = slapi_entry_attr_get_charptr(local_entry,"ntuserdomainid"); + } + + if (cn_string) { + char *rdnstr = NULL; + char *container_str = NULL; + const char *suffix = slapi_sdn_get_dn(windows_private_get_windows_subtree(prp->agmt)); + + container_str = extract_container(slapi_entry_get_sdn_const(local_entry), + windows_private_get_directory_subtree(prp->agmt)); + new_dn_string = PR_smprintf("cn=%s,%s%s", cn_string, container_str, suffix); + + if (new_dn_string) { + /* If the tombstone exists, reanimate it. If the tombstone + * does not exist, we'll create a new entry in AD, which + * will end up getting a new GUID generated by AD. */ + if (tstone_exists) { + slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name, + "%s: process_replay_add: Reanimating tombstone (dn=\"%s\") to" + " normal entry (dn=\"%s\").\n", agmt_get_long_name(prp->agmt), + slapi_sdn_get_dn(tombstone_dn), new_dn_string); + reanimate_rc = windows_reanimate_tombstone(prp, tombstone_dn, (const char *)new_dn_string); + if (reanimate_rc != 0) { + slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name, + "%s: process_replay_add: Reanimation of tombstone" + " (dn=\"%s\") failed. A new entry (dn=\"%s\")" + " will be added instead.\n", agmt_get_long_name(prp->agmt), + slapi_sdn_get_dn(tombstone_dn), new_dn_string); + } + } + + /* Clear out the old GUID DN and use the new one. We hand off the memory + * for new_dn_string into the remote_dn. */ + slapi_sdn_done(remote_dn); + slapi_sdn_set_dn_passin(remote_dn, new_dn_string); + } + + slapi_ch_free_string(&cn_string); + slapi_ch_free_string(&container_str); + } + + if (tombstone_dn) { + slapi_sdn_free(&tombstone_dn); + } + + if (reanimate_rc == 0) { + /* We reanimated a tombstone, so an add won't work. We + * fallback to doing a modify of the newly reanimated + * entry. */ + goto modify_fallback; + } + } + if (remote_add_allowed) { LDAPMod **entryattrs = NULL; Slapi_Entry *mapped_entry = NULL; @@ -971,17 +1050,26 @@ mapped_entry = NULL; if (NULL == entryattrs) { - slapi_log_error(SLAPI_LOG_FATAL, windows_repl_plugin_name,"%s: windows_replay_update: Cannot convert entry to LDAPMods.\n",agmt_get_long_name(prp->agmt)); + slapi_log_error(SLAPI_LOG_FATAL, windows_repl_plugin_name, + "%s: windows_replay_update: Cannot convert entry to LDAPMods.\n", + agmt_get_long_name(prp->agmt)); return_value = CONN_LOCAL_ERROR; } else { windows_log_add_entry_remote(local_dn, remote_dn); - return_value = windows_conn_send_add(prp->conn, slapi_sdn_get_dn(remote_dn), entryattrs, NULL, NULL); - /* It's possible that the entry already exists in AD, in which case we fall back to modify it */ + return_value = windows_conn_send_add(prp->conn, slapi_sdn_get_dn(remote_dn), + entryattrs, NULL, NULL); + /* It's possible that the entry already exists in AD, in which + * case we fall back to modify it */ + /* NGK - This fallback doesn't seem to happen, at least not at this point + * in the code. The only chance to fallback to doing a modify is if + * missing_entry is set to 0 at the top of this function. */ if (return_value) { - slapi_log_error(SLAPI_LOG_FATAL, windows_repl_plugin_name,"%s: windows_replay_update: Cannot replay add operation.\n",agmt_get_long_name(prp->agmt)); + slapi_log_error(SLAPI_LOG_FATAL, windows_repl_plugin_name, + "%s: windows_replay_update: Cannot replay add operation.\n", + agmt_get_long_name(prp->agmt)); } ldap_mods_free(entryattrs, 1); entryattrs = NULL; @@ -989,14 +1077,15 @@ } else { slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name, - "%s: process_replay_add: failed to create mapped entry dn=\"%s\"\n",agmt_get_long_name(prp->agmt), slapi_sdn_get_dn(remote_dn)); + "%s: process_replay_add: failed to create mapped entry dn=\"%s\"\n", + agmt_get_long_name(prp->agmt), slapi_sdn_get_dn(remote_dn)); } } } else { - Slapi_Entry *remote_entry = NULL; +modify_fallback: /* Fetch the remote entry */ rc = windows_get_remote_entry(prp, remote_dn,&remote_entry); if (0 == rc && remote_entry) { @@ -1018,7 +1107,6 @@ windows_replay_update(Private_Repl_Protocol *prp, slapi_operation_parameters *op) { ConnResult return_value = 0; - LDAPControl *update_control = NULL; /* No controls used for AD */ int rc = 0; char *password = NULL; int is_ours = 0; @@ -1097,7 +1185,7 @@ slapi_mod_dump(mapped_mods[i],i); } } - return_value = windows_conn_send_modify(prp->conn, slapi_sdn_get_dn(remote_dn), mapped_mods, update_control,NULL /* returned controls */); + return_value = windows_conn_send_modify(prp->conn, slapi_sdn_get_dn(remote_dn), mapped_mods, NULL, NULL /* returned controls */); } if (mapped_mods) { @@ -1109,7 +1197,7 @@ case SLAPI_OPERATION_DELETE: if (delete_remote_entry_allowed(local_entry)) { - return_value = windows_conn_send_delete(prp->conn, slapi_sdn_get_dn(remote_dn), update_control, NULL /* returned controls */); + return_value = windows_conn_send_delete(prp->conn, slapi_sdn_get_dn(remote_dn), NULL, NULL /* returned controls */); slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name, "%s: windows_replay_update: deleted remote entry, dn=\"%s\", result=%d\n", agmt_get_long_name(prp->agmt), slapi_sdn_get_dn(remote_dn), return_value); @@ -1125,7 +1213,7 @@ op->p.p_modrdn.modrdn_newrdn, op->p.p_modrdn.modrdn_newsuperior_address.dn, op->p.p_modrdn.modrdn_deloldrdn, - update_control, NULL /* returned controls */); + NULL, NULL /* returned controls */); break; default: slapi_log_error(SLAPI_LOG_FATAL, windows_repl_plugin_name, "%s: replay_update: Unknown " @@ -1296,7 +1384,7 @@ goto error; } new_entry = slapi_str2entry(entry_string, 0); - slapi_ch_free((void**)&entry_string); + slapi_ch_free_string(&entry_string); if (NULL == new_entry) { goto error; @@ -1399,7 +1487,7 @@ slapi_attr_set_type(new_attr, new_type); } } - slapi_ch_free((void**)&new_type); + slapi_ch_free_string(&new_type); } /* password mods are treated specially */ if (0 == slapi_attr_type_cmp(type, PSEUDO_ATTR_UNHASHEDUSERPASSWORD, SLAPI_TYPE_CMP_SUBTYPE) ) @@ -1469,7 +1557,7 @@ error: if (username) { - slapi_ch_free((void**)&username); + slapi_ch_free_string(&username); } if (new_entry) { @@ -1633,7 +1721,7 @@ slapi_mods_add_modbvps(&mapped_smods,mod->mod_op,mapped_type,mod->mod_bvalues); } - slapi_ch_free((void**)&mapped_type); + slapi_ch_free_string(&mapped_type); } else { /* password mods are treated specially */ @@ -1832,6 +1920,70 @@ return retval; } +/* Search for a tombstone entry in AD by DN */ +static int +windows_get_remote_tombstone (Private_Repl_Protocol *prp, const Slapi_DN* remote_dn,Slapi_Entry **remote_entry) +{ + int retval = 0; + ConnResult cres = 0; + char *filter = "(objectclass=*)"; + const char *searchbase = NULL; + Slapi_Entry *found_entry = NULL; + LDAPControl *server_controls[2]; + + /* We need to send the "Return Deleted Objects" control to search + * for tombstones. */ + slapi_build_control(REPL_RETURN_DELETED_OBJS_CONTROL_OID, NULL, PR_TRUE, + &server_controls[0]); + server_controls[1] = NULL; + + searchbase = slapi_sdn_get_dn(remote_dn); + cres = windows_search_entry_ext(prp->conn, (char*)searchbase, filter, + &found_entry, server_controls); + if (cres) { + retval = -1; + } else { + if (found_entry) { + *remote_entry = found_entry; + } + } + + ldap_control_free(server_controls[0]); + return retval; +} + +/* Reanimate a tombstone in AD. Returns 0 on success, otherwise you get the + * LDAP return code from the modify operation. */ +static int +windows_reanimate_tombstone(Private_Repl_Protocol *prp, const Slapi_DN* tombstone_dn, const char* new_dn) +{ + int retval = 0; + LDAPControl *server_controls[2]; + Slapi_Mods smods = {0}; + + /* We need to send the "Return Deleted Objects" control to modify + * tombstone entries. */ + slapi_build_control(REPL_RETURN_DELETED_OBJS_CONTROL_OID, NULL, PR_TRUE, + &server_controls[0]); + server_controls[1] = NULL; + + /* To reanimate a tombstone in AD, you need to send a modify + * operation that does two things. It must remove the isDeleted + * attribute from the entry and it must modify the DN. This DN + * does not have to be the same place in the tree that the entry + * previously existed. */ + slapi_mods_init (&smods, 0); + slapi_mods_add_mod_values(&smods, LDAP_MOD_DELETE, "isDeleted", NULL); + slapi_mods_add_string(&smods, LDAP_MOD_REPLACE, "distinguishedName", new_dn); + + retval = windows_conn_send_modify(prp->conn, slapi_sdn_get_dn(tombstone_dn), + slapi_mods_get_ldapmods_byref(&smods), server_controls, NULL ); + + slapi_mods_done(&smods); + ldap_control_free(server_controls[0]); + return retval; +} + static int find_entry_by_attr_value(const char *attribute, const char *value, Slapi_Entry **e, const Repl_Agmt *ra) { @@ -1858,7 +2010,7 @@ LDAP_SCOPE_SUBTREE, query, NULL, 0, NULL, NULL, (void *)plugin_get_default_component_id(), 0); slapi_search_internal_pb(pb); - slapi_ch_free((void **)&query); + slapi_ch_free_string(&query); slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_RESULT, &rval); if (rval != LDAP_SUCCESS) @@ -1906,9 +2058,9 @@ return find_entry_by_attr_value("ntUniqueId",guid,e,ra); } -/* Remove dashes from a GUID string */ +/* Remove dashes from a GUID string. */ static void -dedash(char *str) +dedash_guid(char *str) { char *p = str; char c = '\0'; @@ -1930,10 +2082,41 @@ } } +/* Add dashes into a GUID string. If the guid is not formatted properly, + * we will free it and set the pointer to NULL. */ +static void +dash_guid(char **str) +{ + if (strlen(*str) == NTUNIQUEID_LENGTH) { + char *p = NULL; + /* Add extra room for the dashes */ + *str = slapi_ch_realloc(*str, AD_GUID_LENGTH + 1); + + /* GUID needs to be in 8-4-4-4-12 format */ + p = *str + 23; + memmove(p + 1, *str + 20, 12); + *p = '-'; + p = *str + 18; + memmove(p + 1, *str + 16, 4); + *p = '-'; + p = *str + 13; + memmove(p + 1, *str + 12, 4); + *p = '-'; + p = *str + 8; + memmove(p + 1, *str + 8, 4); + *p = '-'; + p = *str + 36; + *p = '\0'; + } else { + /* This GUID does not appear to be valid */ + slapi_ch_free_string(str); + } +} + /* For reasons not clear, the GUID returned in the tombstone DN is all * messed up, like the guy in the movie 'the fly' after he want in the tranporter device */ static void -decrypt(char *guid) +decrypt_guid(char *guid) { static int decrypt_offsets[] = {6,7,4,5,2,3,0,1,10,11,8,9,14,15,12,13,16,17,18,19, 20,21,22,23,24,25,26,27,28,29,30,31}; @@ -1948,7 +2131,7 @@ p++; i++; } - slapi_ch_free((void**)&cpy); + slapi_ch_free_string(&cpy); } static char* @@ -1971,8 +2154,8 @@ strncpy(guid,colon_offset+1,(comma_offset-colon_offset)-1); guid[comma_offset-colon_offset-1] = '\0'; /* Finally remove the dashes since we don't store them on our side */ - dedash(guid); - decrypt(guid); + dedash_guid(guid); + decrypt_guid(guid); } return guid; } @@ -2004,6 +2187,82 @@ return result; } +/* Given a local entry, map it to it's AD tombstone DN. An AD + * tombstone DN is formatted like: + * + * cn=\0ADEL:,cn=Deleted Objects, + * + * This function will allocate a new Slapi_DN. It is up to the + * caller to free it when they are finished with it. */ +static int +map_windows_tombstone_dn(Slapi_Entry *e, Slapi_DN **dn, Private_Repl_Protocol *prp, int *exists) +{ + int rc = 0; + char *cn = NULL; + char *guid = NULL; + const char *suffix = NULL; + char *tombstone_dn = NULL; + Slapi_Entry *tombstone = NULL; + + /* Initialize the output values */ + *dn = NULL; + *exists = 0; + + cn = slapi_entry_attr_get_charptr(e,"cn"); + if (!cn) { + cn = slapi_entry_attr_get_charptr(e,"ntuserdomainid"); + } + + guid = slapi_entry_attr_get_charptr(e,"ntUniqueId"); + if (guid) { + /* the GUID is in a different form in the tombstone DN, so + * we need to transform it from the way we store it. */ + decrypt_guid(guid); + dash_guid(&guid); + } + + /* The tombstone suffix discards any containers, so we need + * to trim the DN to only dc components. */ + if (suffix = slapi_sdn_get_dn(windows_private_get_windows_subtree(prp->agmt))) { + /* If this isn't found, it is treated as an error below. */ + suffix = (const char *) strcasestr(suffix,"dc="); + } + + if (cn && guid && suffix) { + tombstone_dn = PR_smprintf("cn=%s\\0ADEL:%s,cn=Deleted Objects,%s", + cn, guid, suffix); + + /* Hand off the memory to the Slapi_DN */ + *dn = slapi_sdn_new_dn_passin(tombstone_dn); + + windows_get_remote_tombstone(prp, *dn, &tombstone); + if (tombstone) { + *exists = 1; + slapi_entry_free(tombstone); + } + } else { + slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name, + "%s: map_windows_tombstone_dn: Failed to map dn=\"%s\" " + "to windows tombstone dn.\n", agmt_get_long_name(prp->agmt), + slapi_entry_get_dn(e)); + rc = 1; + } + + slapi_ch_free_string(&cn); + slapi_ch_free_string(&guid); + return rc; +} + +static int is_guid_dn(Slapi_DN *remote_dn) +{ + if ((remote_dn != NULL) && (strncasecmp("agmt)) { + char *new_dn_string = NULL; + char *cn_string = NULL; + + /* We can't use a GUID DN, so rewrite to the mapped DN. */ + cn_string = slapi_entry_attr_get_charptr(e,"cn"); + if (!cn_string) { + cn_string = slapi_entry_attr_get_charptr(e,"ntuserdomainid"); + } + + if (cn_string) { + char *rdnstr = NULL; + char *container_str = NULL; + + container_str = extract_container(slapi_entry_get_sdn_const(e), + windows_private_get_directory_subtree(prp->agmt)); + new_dn_string = PR_smprintf("cn=%s,%s%s", cn_string, container_str, suffix); + + if (new_dn_string) { + if (new_dn) { + slapi_sdn_free(&new_dn); + } + new_dn = slapi_sdn_new_dn_byval(new_dn_string); + PR_smprintf_free(new_dn_string); + } + + slapi_ch_free_string(&cn_string); + slapi_ch_free_string(&container_str); + } + } + } } else { /* No GUID found, try ntUserDomainId */ @@ -2204,8 +2509,8 @@ new_dn = slapi_sdn_new_dn_byval(new_dn_string); PR_smprintf_free(new_dn_string); } - slapi_ch_free((void**)&cn_string); - slapi_ch_free((void**)&container_str); + slapi_ch_free_string(&cn_string); + slapi_ch_free_string(&container_str); } } else { @@ -2217,7 +2522,7 @@ retval = -1; } } - slapi_ch_free((void**)&username); + slapi_ch_free_string(&username); } if (remote_entry) { @@ -2280,7 +2585,7 @@ if (guid) { - slapi_ch_free((void**)&guid); + slapi_ch_free_string(&guid); } if (matching_entry) { @@ -2387,7 +2692,7 @@ } new_dn = slapi_sdn_new_dn_byval(new_dn_string); PR_smprintf_free(new_dn_string); - slapi_ch_free((void**)&container_str); + slapi_ch_free_string(&container_str); /* Clear any earlier error */ retval = 0; } else @@ -2410,7 +2715,7 @@ } if (username) { - slapi_ch_free((void **) &username); + slapi_ch_free_string(&username); } return retval; } @@ -2542,7 +2847,7 @@ goto error; } local_entry = slapi_str2entry(entry_string, 0); - slapi_ch_free((void**)&entry_string); + slapi_ch_free_string(&entry_string); if (NULL == local_entry) { goto error; @@ -2583,7 +2888,7 @@ { slapi_entry_add_valueset(local_entry,new_type,vs); } - slapi_ch_free((void**)&new_type); + slapi_ch_free_string(&new_type); } } if (vs) @@ -2627,7 +2932,7 @@ } if (username) { - slapi_ch_free((void**)&username); + slapi_ch_free_string(&username); } LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_create_local_entry\n", 0, 0, 0 ); return retval; @@ -2812,7 +3117,7 @@ if (guid) { slapi_mods_add_string(smods,LDAP_MOD_ADD,local_type,guid); - slapi_ch_free((void**)&guid); + slapi_ch_free_string(&guid); } } else { Index: windowsrepl.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windowsrepl.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- windowsrepl.h 27 Aug 2007 17:16:48 -0000 1.11 +++ windowsrepl.h 12 Sep 2007 23:05:25 -0000 1.12 @@ -51,6 +51,7 @@ LDAPControl* windows_private_dirsync_control(const Repl_Agmt *ra); ConnResult send_dirsync_search(Repl_Connection *conn); ConnResult windows_search_entry(Repl_Connection *conn, char* searchbase, char *filter, Slapi_Entry **entry); +ConnResult windows_search_entry_ext(Repl_Connection *conn, char* searchbase, char *filter, Slapi_Entry **entry, LDAPControl **serverctrls); Slapi_Entry *windows_conn_get_search_result(Repl_Connection *conn ); void windows_private_update_dirsync_control(const Repl_Agmt *ra,LDAPControl **controls ); PRBool windows_private_dirsync_has_more(const Repl_Agmt *ra); @@ -65,6 +66,8 @@ static void windows_private_set_windows_domain(const Repl_Agmt *ra, char *domain); int windows_private_get_isnt4(const Repl_Agmt *ra); void windows_private_set_isnt4(const Repl_Agmt *ra, int isit); +int windows_private_get_iswin2k3(const Repl_Agmt *ra); +void windows_private_set_iswin2k3(const Repl_Agmt *ra, int isit); const char* windows_private_get_purl(const Repl_Agmt *ra); /* in windows_connection.c */ @@ -73,22 +76,23 @@ void windows_conn_delete(Repl_Connection *conn); void windows_conn_get_error(Repl_Connection *conn, int *operation, int *error); ConnResult windows_conn_send_add(Repl_Connection *conn, const char *dn, LDAPMod **attrs, - LDAPControl *update_control, LDAPControl ***returned_controls); + LDAPControl **server_controls, LDAPControl ***returned_controls); ConnResult windows_conn_send_delete(Repl_Connection *conn, const char *dn, - LDAPControl *update_control, LDAPControl ***returned_controls); + LDAPControl **server_controls, LDAPControl ***returned_controls); ConnResult windows_conn_send_modify(Repl_Connection *conn, const char *dn, LDAPMod **mods, - LDAPControl *update_control, LDAPControl ***returned_controls); + LDAPControl **server_controls, LDAPControl ***returned_controls); ConnResult windows_conn_send_rename(Repl_Connection *conn, const char *dn, const char *newrdn, const char *newparent, int deleteoldrdn, - LDAPControl *update_control, LDAPControl ***returned_controls); + LDAPControl **server_controls, LDAPControl ***returned_controls); ConnResult windows_conn_send_extended_operation(Repl_Connection *conn, const char *extop_oid, struct berval *payload, char **retoidp, struct berval **retdatap, - LDAPControl *update_control, LDAPControl ***returned_controls); + LDAPControl **server_controls, LDAPControl ***returned_controls); const char *windows_conn_get_status(Repl_Connection *conn); void windows_conn_start_linger(Repl_Connection *conn); void windows_conn_cancel_linger(Repl_Connection *conn); ConnResult windows_conn_replica_supports_ds5_repl(Repl_Connection *conn); ConnResult windows_conn_replica_supports_dirsync(Repl_Connection *conn); +ConnResult windows_conn_replica_is_win2k3(Repl_Connection *conn); ConnResult windows_conn_read_entry_attribute(Repl_Connection *conn, const char *dn, char *type, struct berval ***returned_bvals); ConnResult windows_conn_push_schema(Repl_Connection *conn, CSN **remotecsn); @@ -102,3 +106,6 @@ /* Used to check for pre-hashed passwords when syncing */ #define PASSWD_CLEAR_PREFIX "{clear}" #define PASSWD_CLEAR_PREFIX_LEN 7 +/* Used for GUID format conversion */ +#define NTUNIQUEID_LENGTH 32 +#define AD_GUID_LENGTH 36 From fedora-directory-commits at redhat.com Fri Sep 14 02:41:16 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Thu, 13 Sep 2007 22:41:16 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/admin/src/scripts DSMigration.pm.in, 1.11, 1.12 FileConn.pm, 1.3, 1.4 Migration.pm.in, 1.5, 1.6 Util.pm.in, 1.11, 1.12 Message-ID: <200709140241.l8E2fGga014637@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/admin/src/scripts In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv14616/ldapserver/ldap/admin/src/scripts Modified Files: DSMigration.pm.in FileConn.pm Migration.pm.in Util.pm.in Log Message: Resolves: bug 288451 Bug Description: Show-Stopper - Migration from HP-PARISC DS 6.21 to DS80 on HP-Itaninum Reviewed by: nhosoi (Thanks!) Fix Description: 1) The temp file created to fix nsroot was not owned by the server user, and ldif2db could not open it. 2) The perldap LDIF parser/writer did not correctly handle the version: 1 line in the LDIF file. It outputs dn\nversion: 1 which causes ldif2db to crash. 3) The migrate script could not start the server because it wasn't looking in the fhs-opt location. The real solution is to just have migration start the servers after it migrates them. This assumes the old servers are all shutdown first, which they must be, in order to have a consistent database for migration. These last two were found and fixed by nhosoi 4) If we transform an attribute to an empty value, this means we want to remove it from the migrated entry. We use the remove method to remove the attribute. 5) The remove method in FileConn was not working. We have to make a clone of the entry that we have removed the attribute from. The process of iterating over the attributes skips deleted ones because of the way the Tie::Hash functions in the Entry class work. Platforms tested: HP-UX 11.23 IPF64 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: DSMigration.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/DSMigration.pm.in,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- DSMigration.pm.in 8 Sep 2007 02:16:27 -0000 1.11 +++ DSMigration.pm.in 14 Sep 2007 02:41:13 -0000 1.12 @@ -269,6 +269,7 @@ my $in = new Mozilla::LDAP::LDIF(*MYLDIF); while (my $ent = readOneEntry $in) { my $dn = $ent->getDN(); + next if (!$dn); # netscaperoot should not have the empty dn $dn =~ s/\bNetscape\b/@capbrand@/g; $ent->setDN($dn); foreach my $attr (keys %{$ent}) { @@ -305,6 +306,11 @@ my $deleteflag = 0; if ($fname =~ /NetscapeRoot.ldif$/) { $fname = migrateNetscapeRoot($fname); + # make sure $fname is owned by the server user + my $cfgent = $dest->search("cn=config", "base", "(objectclass=*)"); + my $user = $cfgent->getValues('nsslapd-localuser'); + my $uid = getpwnam $user; + chown $uid, -1, $fname; $deleteflag = 1; } my $cmd = "$inst_dir/ldif2db -n \"$dbname\" -i \"$fname\""; @@ -443,7 +449,14 @@ for my $attr (keys %{$ent}) { my $lcattr = lc $attr; if ($transformAttr{$lcattr}) { - $ent->setValues($attr, &{$transformAttr{$lcattr}}($ent, $attr, $mig, $inst)); + my $newval = &{$transformAttr{$lcattr}}($ent, $attr, $mig, $inst); + if (!$newval) { + debug(2, "Removing attribute $attr from entry ", $ent->getDN(), "\n"); + $ent->remove($attr); + } else { + debug(2, "Setting new value $newval for attribute $attr in entry ", $ent->getDN(), "\n"); + $ent->setValues($attr, $newval); + } } } } @@ -484,8 +497,13 @@ if (!$innewonly{$attr}) { my $oldval = $old->getValues($attr); my $newval = &{$transformAttr{$lcattr}}($old, $attr, $mig, $inst); - $new->setValues($attr, $newval); - debug(3, "mergeEntries: transformed old value $oldval to $newval\n"); + if (!$newval) { + debug(3, "Removing attribute $attr from entry ", $new->getDN(), "\n"); + $new->remove($attr); + } else { + debug(3, "Setting new value $newval for attribute $attr in entry ", $new->getDN(), "\n"); + $new->setValues($attr, $newval); + } } } elsif ($cn eq "internationalization plugin" and $lcattr eq "nsslapd-pluginarg0") { debug(3, "mergeEntries: using new value of internationalization plugin nsslapd-pluginarg0\n"); @@ -725,6 +743,10 @@ return 0; } + if (!$mig->{start_servers}) { + $inf->{slapd}->{start_server} = 0; + } + # create the new instance @errs = createDSInstance($inf); unlink($inf->{filename}); Index: FileConn.pm =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/FileConn.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- FileConn.pm 13 Jul 2007 18:35:32 -0000 1.3 +++ FileConn.pm 14 Sep 2007 02:41:13 -0000 1.4 @@ -411,7 +411,10 @@ return 0; } - $self->{$ndn}->{data} = $entry; + # The cloned entry will not contain the deleted attrs - the cloning + # process omits the deleted attrs via the Entry FETCH, FIRSTKEY, and NEXTKEY + # methods + $self->{$ndn}->{data} = cloneEntry($entry); $self->write(); return 1; Index: Migration.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/Migration.pm.in,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Migration.pm.in 15 Aug 2007 22:04:31 -0000 1.5 +++ Migration.pm.in 14 Sep 2007 02:41:13 -0000 1.6 @@ -225,6 +225,7 @@ $self->{logfile} = $logfile; $self->{crossplatform} = $crossplatform; $self->{log} = new SetupLog($self->{logfile}, "migrate"); + $self->{start_servers} = 1; # start servers as soon as they are migrated # if user supplied inf file, use that to initialize if (defined($self->{inffile})) { $self->{inf} = new Inf($self->{inffile}); Index: Util.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/Util.pm.in,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- Util.pm.in 15 Aug 2007 22:04:31 -0000 1.11 +++ Util.pm.in 14 Sep 2007 02:41:13 -0000 1.12 @@ -813,7 +813,6 @@ print $outfh "RootDNPwd = ", $ent->getValues('nsslapd-rootpw'), "\n"; print $outfh "ServerPort = ", $ent->getValues('nsslapd-port'), "\n"; print $outfh "ServerIdentifier = $id\n"; - print $outfh "start_server= 0\n"; my $suffix; $ent = $conn->search("cn=ldbm database,cn=plugins,cn=config", From fedora-directory-commits at redhat.com Fri Sep 14 02:42:07 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Thu, 13 Sep 2007 22:42:07 -0400 Subject: [Fedora-directory-commits] adminserver/admserv/newinst/src migrate-ds-admin.pl.in, 1.7, 1.8 Message-ID: <200709140242.l8E2g79P014668@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/adminserver/admserv/newinst/src In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv14651/adminserver/admserv/newinst/src Modified Files: migrate-ds-admin.pl.in Log Message: Resolves: bug 288451 Bug Description: Show-Stopper - Migration from HP-PARISC DS 6.21 to DS80 on HP-Itaninum Reviewed by: nhosoi (Thanks!) Fix Description: 1) The temp file created to fix nsroot was not owned by the server user, and ldif2db could not open it. 2) The perldap LDIF parser/writer did not correctly handle the version: 1 line in the LDIF file. It outputs dn\nversion: 1 which causes ldif2db to crash. 3) The migrate script could not start the server because it wasn't looking in the fhs-opt location. The real solution is to just have migration start the servers after it migrates them. This assumes the old servers are all shutdown first, which they must be, in order to have a consistent database for migration. These last two were found and fixed by nhosoi 4) If we transform an attribute to an empty value, this means we want to remove it from the migrated entry. We use the remove method to remove the attribute. 5) The remove method in FileConn was not working. We have to make a clone of the entry that we have removed the attribute from. The process of iterating over the attributes skips deleted ones because of the way the Tie::Hash functions in the Entry class work. Platforms tested: HP-UX 11.23 IPF64 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: migrate-ds-admin.pl.in =================================================================== RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/migrate-ds-admin.pl.in,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- migrate-ds-admin.pl.in 2 Aug 2007 14:44:10 -0000 1.7 +++ migrate-ds-admin.pl.in 14 Sep 2007 02:42:05 -0000 1.8 @@ -51,15 +51,6 @@ $mig->doExit(1); } -# if the config ds is on the local machine, shut down the old one -# and bring up the new one - the rest of migration needs to update it - -my $configdsinst = getLocalConfigDS("$mig->{oldsroot}/admin-serv/config"); -if ($configdsinst) { - system("$mig->{oldsroot}/slapd-$configdsinst/stop-slapd"); - system("@dslibdir@/slapd-$configdsinst/start-slapd"); -} - # next, migrate the admin server - this also registers the directory servers $mig->msg('begin_as_migration', $mig->{oldsroot}); if (!migrateAdminServer($mig)) { From fedora-directory-commits at redhat.com Fri Sep 14 16:26:19 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Fri, 14 Sep 2007 12:26:19 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/admin/src/scripts DSMigration.pm.in, 1.12, 1.13 Message-ID: <200709141626.l8EGQJOv006451@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/admin/src/scripts In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv6434 Modified Files: DSMigration.pm.in Log Message: Resolves: bug 288451 Description: Show-Stopper - Migration from HP-PARISC DS 6.21 to DS80 on HP-Itaninum Fix Description: Cannot start servers until after the data and config has been migrated. Index: DSMigration.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/DSMigration.pm.in,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- DSMigration.pm.in 14 Sep 2007 02:41:13 -0000 1.12 +++ DSMigration.pm.in 14 Sep 2007 16:26:17 -0000 1.13 @@ -743,9 +743,9 @@ return 0; } - if (!$mig->{start_servers}) { - $inf->{slapd}->{start_server} = 0; - } + # create servers but do not start them until after databases + # have been migrated + $inf->{slapd}->{start_server} = 0; # create the new instance @errs = createDSInstance($inf); @@ -768,6 +768,15 @@ $mig->msg(@errs); return 0; } + + # finally, start the server + if ($mig->{start_servers}) { + $inf->{slapd}->{start_server} = 1; + if (@errs = DSCreate::startServer($inf)) { + $mig->msg(@errs); + return 0; + } + } } return 1; From fedora-directory-commits at redhat.com Fri Sep 14 21:24:15 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Fri, 14 Sep 2007 17:24:15 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/admin/src/scripts DSMigration.pm.in, 1.13, 1.14 Message-ID: <200709142124.l8ELOFSA013602@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/admin/src/scripts In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv13579/ldapserver/ldap/admin/src/scripts Modified Files: DSMigration.pm.in Log Message: Resolves: bug 288451 Bug Description: Show-Stopper - Migration from HP-PARISC DS 6.21 to DS80 on HP-Itaninum Reviewed by: nhosoi (Thanks!) Fix Description: These are additional fixes for various and sundry problems: 1) If doing cross platform migration, just use the default db and changelog db dirs 2) If doing same platform migration, try to keep the db dir if the user has changed it. It will usually be changed for a good reason, like moving to a separate device for performance reasons. In order to see if the directory has changed, we need to "normalize" the path in the attribute so that we can compare it correctly. 3) Do not migrate the attributes nsslapd-db-private-import-mem and nsslapd-import-cache-autosize - just use the new default values for these 4) Do not migrate nsslapd-allidsthreshold - this has been removed 5) Add additional error checking and handling when migrating the local.conf information. 6) Change the brand in the sie and isie when migrating. 7) Update the Group in console.conf during migration. Platforms tested: HP-UX 11.23 IPF64 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: DSMigration.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/DSMigration.pm.in,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- DSMigration.pm.in 14 Sep 2007 16:26:17 -0000 1.13 +++ DSMigration.pm.in 14 Sep 2007 21:24:12 -0000 1.14 @@ -56,6 +56,9 @@ use File::Temp qw(tempfile tempdir); use File::Basename qw(basename); +# absolute path handling +use Cwd qw(realpath); + # load perldap use Mozilla::LDAP::Conn; use Mozilla::LDAP::Utils qw(normalizeDN); @@ -104,7 +107,14 @@ 'nsslapd-ldapigidnumbertype' => 'nsslapd-ldapigidnumbertype', 'nsslapd-ldapientrysearchbase' => 'nsslapd-ldapientrysearchbase', 'nsslapd-ldapiautodnsuffix' => 'nsslapd-ldapiautodnsuffix', - 'numsubordinates' => 'numSubordinates' + 'numsubordinates' => 'numSubordinates', + # for these, we just want to use the default values, even if they were + # set in 7.1 or later + 'nsslapd-db-private-import-mem' => 'nsslapd-db-private-import-mem', + 'nsslapd-import-cache-autosize' => 'nsslapd-import-cache-autosize', + # nsslapd-allidsthreshold does not exist anymore + # the analogous concept is nsslapd-idlistscanlimit for searches + 'nsslapd-allidsthreshold' => 'nsslapd-allidsthreshold' ); # these are the obsolete entries we do not migrate @@ -126,19 +136,23 @@ sub getNewDbDir { my ($ent, $attr, $mig, $inst) = @_; + my $newval; my %objclasses = map { lc($_) => $_ } $ent->getValues('objectclass'); my $cn = $ent->getValues('cn'); - my $oldval = $ent->getValues($attr); - my $newval; # there is one case where we want to just use the existing db directory # that's the case where the user has moved the indexes and/or the # transaction logs to different partitions for performance # in that case, the old directory will not be the same as the default, # and the directory will exist - my $olddefault = "$mig->{actualsroot}/$inst"; - if (-d $oldval and ($oldval !~ /^$olddefault/)) { - debug(2, "Keeping old value [$oldval] for attr $attr in entry ", $ent->getDN(), "\n"); - return $oldval; + # for cross platform, we should just use the new default location + if (!$mig->{crossplatform}) { + my $oldval = $ent->getValues($attr); + my $absoldval = realpath($oldval) || $oldval; + my $olddefault = "$mig->{actualsroot}/$inst"; + if (-d $absoldval and ($absoldval !~ /^$olddefault/)) { + debug(2, "Keeping old value [$absoldval] for attr $attr in entry ", $ent->getDN(), "\n"); + return $oldval; + } } # otherwise, just use the new default locations if ("@with_fhs_opt@") { From fedora-directory-commits at redhat.com Fri Sep 14 21:26:11 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Fri, 14 Sep 2007 17:26:11 -0400 Subject: [Fedora-directory-commits] adminserver/admserv/newinst/src AdminMigration.pm.in, 1.5, 1.6 AdminServer.pm.in, 1.8, 1.9 setup-ds-admin.res.in, 1.6, 1.7 Message-ID: <200709142126.l8ELQBSo013772@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/adminserver/admserv/newinst/src In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv13733/adminserver/admserv/newinst/src Modified Files: AdminMigration.pm.in AdminServer.pm.in setup-ds-admin.res.in Log Message: Resolves: bug 288451 Bug Description: Show-Stopper - Migration from HP-PARISC DS 6.21 to DS80 on HP-Itaninum Reviewed by: nhosoi (Thanks!) Fix Description: These are additional fixes for various and sundry problems: 1) If doing cross platform migration, just use the default db and changelog db dirs 2) If doing same platform migration, try to keep the db dir if the user has changed it. It will usually be changed for a good reason, like moving to a separate device for performance reasons. In order to see if the directory has changed, we need to "normalize" the path in the attribute so that we can compare it correctly. 3) Do not migrate the attributes nsslapd-db-private-import-mem and nsslapd-import-cache-autosize - just use the new default values for these 4) Do not migrate nsslapd-allidsthreshold - this has been removed 5) Add additional error checking and handling when migrating the local.conf information. 6) Change the brand in the sie and isie when migrating. 7) Update the Group in console.conf during migration. Platforms tested: HP-UX 11.23 IPF64 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: AdminMigration.pm.in =================================================================== RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/AdminMigration.pm.in,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- AdminMigration.pm.in 16 Aug 2007 00:34:04 -0000 1.5 +++ AdminMigration.pm.in 14 Sep 2007 21:26:08 -0000 1.6 @@ -216,6 +216,14 @@ } # now get the entries and write them to local.conf my $entry = $conn->search($inf->{admin}->{sie}, "sub", "(objectclass=*)"); + if (!$entry || $conn->getErrorCode()) { + $mig->msg($FATAL, 'error_no_localconf_entries', + $inf->{admin}->{sie}, $localconf, $conn->getErrorString()); + $conn->close(); + close(LOCALCONF); + return 0; + } + while ($entry) { updateLocalConf($entry, $inf->{admin}->{sie}, \*LOCALCONF); $entry = $conn->nextEntry(); @@ -468,6 +476,10 @@ return 0; } + # change branding information + $mig->{inf}->{admin}->{sie} =~ s/\bNetscape\b/@capbrand@/g; + $mig->{inf}->{admin}->{isie} =~ s/\bNetscape\b/@capbrand@/g; + if (!updateAdmConf({ldapurl => $mig->{inf}->{General}->{ConfigDirectoryLdapURL}, userdn => $mig->{inf}->{General}->{ConfigDirectoryAdminID}, SuiteSpotUserID => $mig->{inf}->{General}->{SuiteSpotUserID}, @@ -524,3 +536,10 @@ # obligatory module true return 1; + +# emacs settings +# Local Variables: +# mode:perl +# indent-tabs-mode: nil +# tab-width: 4 +# End: Index: AdminServer.pm.in =================================================================== RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/AdminServer.pm.in,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- AdminServer.pm.in 27 Jul 2007 01:42:46 -0000 1.8 +++ AdminServer.pm.in 14 Sep 2007 21:26:08 -0000 1.9 @@ -323,6 +323,23 @@ debug(1, $output); $ENV{LD_LIBRARY_PATH} = $savepath; $ENV{SHLIB_PATH} = $savepath; + + # update Group in console.conf + if ($admConf->{sysgroup}) { + if (!open(CONSOLECONF, "$admConf->{configdir}/console.conf")) { + debug(0, "Error opening $admConf->{configdir}/console.conf: $!"); + return 0; + } + my $contents = ; + close (CONSOLECONF); + $contents =~ s/^Group.*$/Group $admConf->{sysgroup}/; + if (!open(CONSOLECONF, ">$admConf->{configdir}/console.conf")) { + debug(0, "Error writing new group $admConf->{sysgroup} to $admConf->{configdir}/console.conf: $!"); + return 0; + } + print CONSOLECONF $contents; + close (CONSOLECONF); + } return 1; } Index: setup-ds-admin.res.in =================================================================== RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/setup-ds-admin.res.in,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- setup-ds-admin.res.in 27 Jul 2007 01:42:46 -0000 1.6 +++ setup-ds-admin.res.in 14 Sep 2007 21:26:08 -0000 1.7 @@ -103,6 +103,7 @@ registering_adminserver = Registering admin server with the configuration directory server . . .\n error_adding_adminserver_config_entry = Could not add the admin server configuration entry '%s'.\nCheck the configuration directory server access and error log for more details.\n error_updating_localconf_entry = Could not update the local admin server configuration file for the configuration entry '%s'.\n +error_no_localconf_entries = Error finding LDAP entries under '%s' to update in the local admin server configuration file '%s'. LDAP Error: %s\n updating_admconf_configds = Updating adm.conf with information from configuration directory server . . .\n updating_httpconf = Updating the configuration for the httpd engine . . .\n error_updating_httpconf = Could not update the httpd engine configuration.\n From fedora-directory-commits at redhat.com Mon Sep 17 19:18:33 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Mon, 17 Sep 2007 15:18:33 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/replication windows_private.c, 1.15, 1.16 windows_prot_private.h, 1.7, 1.8 windows_protocol_util.c, 1.32, 1.33 windowsrepl.h, 1.12, 1.13 Message-ID: <200709171918.l8HJIX9b019387@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/replication In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv19325/plugins/replication Modified Files: windows_private.c windows_prot_private.h windows_protocol_util.c windowsrepl.h Log Message: Resolves: 242551 Summary: Performance cleanup of sync code. Improve tombstone search performance. Index: windows_private.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windows_private.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- windows_private.c 12 Sep 2007 23:05:24 -0000 1.15 +++ windows_private.c 17 Sep 2007 19:18:30 -0000 1.16 @@ -66,6 +66,10 @@ char *windows_domain; int isnt4; int iswin2k3; + /* This filter is used to determine if an entry belongs to this agreement. We put it here + * so we only have to allocate each filter once instead of doing it every time we receive a change. */ + Slapi_Filter *directory_filter; /* Used for checking if local entries need to be sync'd to AD */ + Slapi_Filter *deleted_filter; /* Used for checking if an entry is an AD tombstone */ }; static int @@ -192,6 +196,8 @@ dp = (Dirsync_Private *)slapi_ch_calloc(sizeof(Dirsync_Private),1); dp->dirsync_maxattributecount = -1; + dp->directory_filter = NULL; + dp->deleted_filter = NULL; LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_private_new\n", 0, 0, 0 ); return dp; @@ -206,8 +212,8 @@ PR_ASSERT(dp != NULL); - /* DBDB: need to free payoad here */ - + slapi_filter_free(dp->directory_filter, 1); + slapi_filter_free(dp->deleted_filter, 1); slapi_ch_free((void **)dp); LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_private_delete\n", 0, 0, 0 ); @@ -278,6 +284,53 @@ LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_private_set_iswin2k3\n", 0, 0, 0 ); } +/* Returns a copy of the Slapi_Filter pointer. The caller should not free it */ +Slapi_Filter* windows_private_get_directory_filter(const Repl_Agmt *ra) +{ + Dirsync_Private *dp; + + LDAPDebug( LDAP_DEBUG_TRACE, "=> windows_private_get_directory_filter\n", 0, 0, 0 ); + + PR_ASSERT(ra); + + dp = (Dirsync_Private *) agmt_get_priv(ra); + PR_ASSERT (dp); + + if (dp->directory_filter == NULL) { + char *string_filter = slapi_ch_strdup("(&(|(objectclass=ntuser)(objectclass=ntgroup))(ntUserDomainId=*))"); + /* The filter gets freed in windows_agreement_delete() */ + dp->directory_filter = slapi_str2filter( string_filter ); + slapi_ch_free_string(&string_filter); + } + + LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_private_get_directory_filter\n", 0, 0, 0 ); + + return dp->directory_filter; +} + +/* Returns a copy of the Slapi_Filter pointer. The caller should not free it */ +Slapi_Filter* windows_private_get_deleted_filter(const Repl_Agmt *ra) +{ + Dirsync_Private *dp; + + LDAPDebug( LDAP_DEBUG_TRACE, "=> windows_private_get_deleted_filter\n", 0, 0, 0 ); + + PR_ASSERT(ra); + + dp = (Dirsync_Private *) agmt_get_priv(ra); + PR_ASSERT (dp); + + if (dp->deleted_filter == NULL) { + char *string_filter = slapi_ch_strdup("(isdeleted=*)"); + /* The filter gets freed in windows_agreement_delete() */ + dp->deleted_filter = slapi_str2filter( string_filter ); + slapi_ch_free_string(&string_filter); + } + + LDAPDebug( LDAP_DEBUG_TRACE, "<= windows_private_get_deleted_filter\n", 0, 0, 0 ); + + return dp->deleted_filter; +} /* Returns a copy of the Slapi_DN pointer, no need to free it */ const Slapi_DN* windows_private_get_windows_subtree (const Repl_Agmt *ra) Index: windows_prot_private.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windows_prot_private.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- windows_prot_private.h 10 Nov 2006 23:45:17 -0000 1.7 +++ windows_prot_private.h 17 Sep 2007 19:18:30 -0000 1.8 @@ -52,35 +52,6 @@ #define ACQUIRE_CONSUMER_WAS_UPTODATE 104 #define ACQUIRE_TRANSIENT_ERROR 105 -typedef struct windows_private_repl_protocol -{ - void (*delete)(struct windows_private_repl_protocol **); - void (*run)(struct windows_private_repl_protocol *); - int (*stop)(struct windows_private_repl_protocol *); - int (*status)(struct windows_private_repl_protocol *); - void (*notify_update)(struct windows_private_repl_protocol *); - void (*notify_agmt_changed)(struct windows_private_repl_protocol *); - void (*notify_window_opened)(struct windows_private_repl_protocol *); - void (*notify_window_closed)(struct windows_private_repl_protocol *); - void (*update_now)(struct windows_private_repl_protocol *); - PRLock *lock; - PRCondVar *cvar; - int stopped; - int terminate; - PRUint32 eventbits; - Repl_Connection *conn; - int last_acquire_response_code; - Repl_Agmt *agmt; - Object *replica_object; - void *private; - PRBool replica_acquired; -} Windows_Private_Repl_Protocol; - -/* -extern Windows_Private_Repl_Protocol *Windows_Inc_Protocol_new(); -extern Windows_Private_Repl_Protocol *Windows_Tot_Protocol_new(); -*/ - #define PROTOCOL_TERMINATION_NORMAL 301 #define PROTOCOL_TERMINATION_ABNORMAL 302 #define PROTOCOL_TERMINATION_NEEDS_TOTAL_UPDATE 303 Index: windows_protocol_util.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windows_protocol_util.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- windows_protocol_util.c 12 Sep 2007 23:05:25 -0000 1.32 +++ windows_protocol_util.c 17 Sep 2007 19:18:30 -0000 1.33 @@ -65,10 +65,12 @@ static Slapi_DN* map_dn_group(Slapi_DN *sdn, int map_to, const Slapi_DN *root); static void make_mods_from_entries(Slapi_Entry *new_entry, Slapi_Entry *existing_entry, LDAPMod ***attrs); static void windows_map_mods_for_replay(Private_Repl_Protocol *prp,LDAPMod **original_mods, LDAPMod ***returned_mods, int is_user, char** password); -static int is_subject_of_agreemeent_local(const Slapi_Entry *local_entry,const Repl_Agmt *ra); +static int is_subject_of_agreement_local(const Slapi_Entry *local_entry,const Repl_Agmt *ra); static int windows_create_remote_entry(Private_Repl_Protocol *prp,Slapi_Entry *original_entry, Slapi_DN *remote_sdn, Slapi_Entry **remote_entry, char** password); static int windows_get_local_entry(const Slapi_DN* local_dn,Slapi_Entry **local_entry); static int windows_get_local_entry_by_uniqueid(Private_Repl_Protocol *prp,const char* uniqueid,Slapi_Entry **local_entry); +static int windows_get_local_tombstone_by_uniqueid(Private_Repl_Protocol *prp,const char* uniqueid,Slapi_Entry **local_entry); +static int windows_search_local_entry_by_uniqueid(Private_Repl_Protocol *prp, const char *uniqueid, char ** attrs, Slapi_Entry **ret_entry, int tombstone, void * component_identity); static int map_entry_dn_outbound(Slapi_Entry *e, Slapi_DN **dn, Private_Repl_Protocol *prp, int *missing_entry, int want_guid); static char* extract_ntuserdomainid_from_entry(Slapi_Entry *e); static char* extract_container(const Slapi_DN *entry_dn, const Slapi_DN *suffix_dn); @@ -76,7 +78,7 @@ static int windows_get_remote_tombstone(Private_Repl_Protocol *prp, const Slapi_DN* remote_dn,Slapi_Entry **remote_entry); static int windows_reanimate_tombstone(Private_Repl_Protocol *prp, const Slapi_DN* tombstone_dn, const char* new_dn); static const char* op2string (int op); -static int is_subject_of_agreemeent_remote(Slapi_Entry *e, const Repl_Agmt *ra); +static int is_subject_of_agreement_remote(Slapi_Entry *e, const Repl_Agmt *ra); static int map_entry_dn_inbound(Slapi_Entry *e, Slapi_DN **dn, const Repl_Agmt *ra); static int windows_update_remote_entry(Private_Repl_Protocol *prp,Slapi_Entry *remote_entry,Slapi_Entry *local_entry); static int is_guid_dn(Slapi_DN *remote_dn); @@ -405,7 +407,7 @@ int missing_entry = 0; Slapi_DN *remote_dn = NULL; /* Now map the DN */ - is_ours = is_subject_of_agreemeent_local(local_entry,prp->agmt); + is_ours = is_subject_of_agreement_local(local_entry,prp->agmt); if (is_ours) { map_entry_dn_outbound(local_entry,&remote_dn,prp,&missing_entry, 0 /* don't want GUID form here */); @@ -447,7 +449,7 @@ retval = windows_get_remote_entry(prp,original_dn,&remote_entry); if (remote_entry && 0 == retval) { - is_ours = is_subject_of_agreemeent_remote(remote_entry,prp->agmt); + is_ours = is_subject_of_agreement_remote(remote_entry,prp->agmt); if (is_ours) { retval = map_entry_dn_inbound(remote_entry,&local_dn,prp->agmt); @@ -1121,10 +1123,16 @@ local_dn = slapi_sdn_new_dn_byref( op->target_address.dn ); /* Since we have the target uniqueid in the op structure, let's - * fetch the local entry here using it. + * fetch the local entry here using it. We do not want to search + * across tombstone entries unless we are dealing with a delete + * operation here since searching across tombstones can be very + * inefficient as the tombstones build up. */ - - rc = windows_get_local_entry_by_uniqueid(prp, op->target_address.uniqueid, &local_entry); + if (op->operation_type != SLAPI_OPERATION_DELETE) { + rc = windows_get_local_entry_by_uniqueid(prp, op->target_address.uniqueid, &local_entry); + } else { + rc = windows_get_local_tombstone_by_uniqueid(prp, op->target_address.uniqueid, &local_entry); + } if (rc) { @@ -1135,7 +1143,7 @@ goto error; } - is_ours = is_subject_of_agreemeent_local(local_entry, prp->agmt); + is_ours = is_subject_of_agreement_local(local_entry, prp->agmt); windows_is_local_entry_user_or_group(local_entry,&is_user,&is_group); slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name, @@ -1839,25 +1847,15 @@ /* Is this entry a tombstone ? */ static int -is_tombstone(Slapi_Entry *e) +is_tombstone(Private_Repl_Protocol *prp, Slapi_Entry *e) { int retval = 0; - char *string_deleted = slapi_ch_strdup("(isdeleted=*)"); - - /* DBDB: we should allocate these filters once and keep them around for better performance */ - Slapi_Filter *filter_deleted = slapi_str2filter( string_deleted ); - - slapi_ch_free_string(&string_deleted); - /* DBDB: this should be one filter, the code originally tested separately and hasn't been fixed yet */ - if ( (slapi_filter_test_simple( e, filter_deleted ) == 0) ) + if ( (slapi_filter_test_simple( e, (Slapi_Filter*)windows_private_get_deleted_filter(prp->agmt) ) == 0) ) { retval = 1; } - slapi_filter_free(filter_deleted,1); - filter_deleted = NULL; - return retval; } @@ -2724,7 +2722,7 @@ * and does it have the right attribute values for sync ?) */ static int -is_subject_of_agreemeent_local(const Slapi_Entry *local_entry, const Repl_Agmt *ra) +is_subject_of_agreement_local(const Slapi_Entry *local_entry, const Repl_Agmt *ra) { int retval = 0; int is_in_subtree = 0; @@ -2741,23 +2739,16 @@ { /* Next test for the correct kind of entry */ if (local_entry) { - /* DBDB: we should allocate these filters once and keep them around for better performance */ - char *string_filter = slapi_ch_strdup("(&(|(objectclass=ntuser)(objectclass=ntgroup))(ntUserDomainId=*))"); - Slapi_Filter *filter = slapi_str2filter( string_filter ); - - slapi_ch_free_string(&string_filter); - if (slapi_filter_test_simple( (Slapi_Entry*)local_entry, filter ) == 0) + if (slapi_filter_test_simple( (Slapi_Entry*)local_entry, + (Slapi_Filter*)windows_private_get_directory_filter(ra)) == 0) { retval = 1; } - - slapi_filter_free(filter,1); - filter = NULL; } else { /* Error: couldn't find the entry */ slapi_log_error(SLAPI_LOG_FATAL, windows_repl_plugin_name, - "failed to find entry in is_subject_of_agreemeent_local: %d\n", retval); + "failed to find entry in is_subject_of_agreement_local: %d\n", retval); retval = 0; } } @@ -2767,7 +2758,7 @@ /* Tests if the entry is subject to our agreement (i.e. is it in the sync'ed subtree in AD and either a user or a group ?) */ static int -is_subject_of_agreemeent_remote(Slapi_Entry *e, const Repl_Agmt *ra) +is_subject_of_agreement_remote(Slapi_Entry *e, const Repl_Agmt *ra) { int retval = 0; int is_in_subtree = 0; @@ -3342,7 +3333,7 @@ int missing_entry = 0; const Slapi_DN *local_dn = slapi_entry_get_sdn_const(e); /* First check if the entry is for us */ - is_ours = is_subject_of_agreemeent_local(e, prp->agmt); + is_ours = is_subject_of_agreement_local(e, prp->agmt); slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name, "%s: windows_process_total_entry: Looking dn=\"%s\" (%s)\n", agmt_get_long_name(prp->agmt), slapi_sdn_get_dn(slapi_entry_get_sdn_const(e)), is_ours ? "ours" : "not ours"); @@ -3366,8 +3357,8 @@ return retval; } -int -windows_search_local_entry_by_uniqueid(Private_Repl_Protocol *prp, const char *uniqueid, char ** attrs, Slapi_Entry **ret_entry , void * component_identity) +static int +windows_search_local_entry_by_uniqueid(Private_Repl_Protocol *prp, const char *uniqueid, char ** attrs, Slapi_Entry **ret_entry, int tombstone, void * component_identity) { Slapi_Entry **entries = NULL; Slapi_PBlock *int_search_pb = NULL; @@ -3377,7 +3368,15 @@ *ret_entry = NULL; local_subtree = windows_private_get_directory_subtree(prp->agmt); - filter_string = PR_smprintf("(&(|(objectclass=*)(objectclass=ldapsubentry)(objectclass=nsTombstone))(nsUniqueid=%s))",uniqueid); + + /* Searching for tombstones can be expensive, so the caller needs to specify if + * we should search for a tombstone entry, or a normal entry. */ + if (tombstone) { + filter_string = PR_smprintf("(&(objectclass=nsTombstone)(nsUniqueid=%s))", uniqueid); + } else { + filter_string = PR_smprintf("(&(|(objectclass=*)(objectclass=ldapsubentry))(nsUniqueid=%s))",uniqueid); + } + int_search_pb = slapi_pblock_new (); slapi_search_internal_set_pb ( int_search_pb, slapi_sdn_get_dn(local_subtree), LDAP_SCOPE_SUBTREE, filter_string, attrs , @@ -3412,7 +3411,7 @@ { int retval = ENTRY_NOTFOUND; Slapi_Entry *new_entry = NULL; - windows_search_local_entry_by_uniqueid( prp, uniqueid, NULL, &new_entry, + windows_search_local_entry_by_uniqueid( prp, uniqueid, NULL, &new_entry, 0, /* Don't search tombstones */ repl_get_plugin_identity (PLUGIN_MULTIMASTER_REPLICATION)); if (new_entry) { @@ -3423,6 +3422,21 @@ } static int +windows_get_local_tombstone_by_uniqueid(Private_Repl_Protocol *prp,const char* uniqueid,Slapi_Entry **local_entry) +{ + int retval = ENTRY_NOTFOUND; + Slapi_Entry *new_entry = NULL; + windows_search_local_entry_by_uniqueid( prp, uniqueid, NULL, &new_entry, 1, /* Search for tombstones */ + repl_get_plugin_identity (PLUGIN_MULTIMASTER_REPLICATION)); + if (new_entry) + { + *local_entry = new_entry; + retval = 0; + } + return retval; +} + +static int windows_get_local_entry(const Slapi_DN* local_dn,Slapi_Entry **local_entry) { int retval = ENTRY_NOTFOUND; @@ -3446,7 +3460,7 @@ /* deleted users are outside the 'correct container'. They live in cn=deleted objects, windows_private_get_directory_subtree( prp->agmt) */ - if (is_tombstone(e)) + if (is_tombstone(prp, e)) { rc = map_tombstone_dn_inbound(e, &local_sdn, prp->agmt); if ((0 == rc) && local_sdn) @@ -3461,7 +3475,7 @@ } else { /* Is this entry one we should be interested in ? */ - if (is_subject_of_agreemeent_remote(e,prp->agmt)) + if (is_subject_of_agreement_remote(e,prp->agmt)) { /* First make its local DN */ rc = map_entry_dn_inbound(e, &local_sdn, prp->agmt); Index: windowsrepl.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windowsrepl.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- windowsrepl.h 12 Sep 2007 23:05:25 -0000 1.12 +++ windowsrepl.h 17 Sep 2007 19:18:30 -0000 1.13 @@ -68,6 +68,8 @@ void windows_private_set_isnt4(const Repl_Agmt *ra, int isit); int windows_private_get_iswin2k3(const Repl_Agmt *ra); void windows_private_set_iswin2k3(const Repl_Agmt *ra, int isit); +Slapi_Filter* windows_private_get_directory_filter(const Repl_Agmt *ra); +Slapi_Filter* windows_private_get_deleted_filter(const Repl_Agmt *ra); const char* windows_private_get_purl(const Repl_Agmt *ra); /* in windows_connection.c */ From fedora-directory-commits at redhat.com Mon Sep 17 19:18:33 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Mon, 17 Sep 2007 15:18:33 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm ldbm_search.c, 1.9, 1.10 Message-ID: <200709171918.l8HJIXT2019394@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv19325/slapd/back-ldbm Modified Files: ldbm_search.c Log Message: Resolves: 242551 Summary: Performance cleanup of sync code. Improve tombstone search performance. Index: ldbm_search.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/ldbm_search.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- ldbm_search.c 10 Nov 2006 23:45:39 -0000 1.9 +++ ldbm_search.c 17 Sep 2007 19:18:31 -0000 1.10 @@ -818,21 +818,6 @@ } -static int -nscpentrydn_check_filter(Slapi_Filter *f) -{ - if (!f || (f->f_choice != LDAP_FILTER_AND)) - return 0; /* Not nscpEntryDN filter */ - - if ( 0 == strcasecmp ( f->f_and->f_avtype, SLAPI_ATTR_NSCP_ENTRYDN)) { - return 1; /* Contains a nscpEntryDN filter */ - } else if ( 0 == strcasecmp ( f->f_and->f_next->f_avtype, SLAPI_ATTR_NSCP_ENTRYDN)) { - return 1; - } - return 0; /* Not nscpEntryDN filter */ -} - - /* * Build a candidate list for a SUBTREE scope search. */ @@ -886,41 +871,6 @@ idl_free(tmp); idl_free(descendants); } - /* - * If the search is initiated by the Directory Manager, - * and the filter includes objectclass=nsTombstone, - * then we union the candidate list with all the tombstone - * entries in this backend instance. - */ - if (has_tombstone_filter && isroot && !nscpentrydn_check_filter(filter)) - { - IDList *idl; - IDList *tmp= candidates; - struct slapi_filter f = {0}; - f.f_choice = LDAP_FILTER_EQUALITY; - f.f_avtype = "objectclass"; - f.f_avvalue.bv_val = SLAPI_ATTR_VALUE_TOMBSTONE; - f.f_avvalue.bv_len = strlen(SLAPI_ATTR_VALUE_TOMBSTONE); - f.f_next= NULL; - idl = filter_candidates( pb, be, NULL, &f, NULL, 0, err ); - - /* - * If that gave allids then try (nscpentrydn=*) instead. - * The nscpentrydn equality index contains all the tombstones - * and can be used to resolve a presence filter without - * hitting allids. - */ - if (idl && ALLIDS(idl)) { - idl_free(idl); - f.f_choice = LDAP_FILTER_PRESENT; - f.f_avtype = SLAPI_ATTR_NSCP_ENTRYDN; - idl = filter_candidates( pb, be, NULL, &f, NULL, 0, err ); - } - - candidates = idl_union( be, idl, tmp ); - idl_free( idl ); - idl_free( tmp ); - } return( candidates ); } From fedora-directory-commits at redhat.com Mon Sep 17 22:48:13 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Mon, 17 Sep 2007 18:48:13 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd configdse.c, 1.7, 1.8 libglobs.c, 1.19, 1.20 Message-ID: <200709172248.l8HMmDBu017670@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/slapd In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv17638 Modified Files: configdse.c libglobs.c Log Message: Resolves: 293541 Summary: Allow server to start if descriptor related attributes are set too high. Index: configdse.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/configdse.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- configdse.c 27 Feb 2007 02:57:29 -0000 1.7 +++ configdse.c 17 Sep 2007 22:48:10 -0000 1.8 @@ -294,9 +294,25 @@ if (attr_name) { retval = config_set(attr_name, values, returntext, 1 /* force apply */); - if ((retval != LDAP_SUCCESS) && - slapi_attr_flag_is_set(attr, SLAPI_ATTR_FLAG_OPATTR)) - retval = LDAP_SUCCESS; /* ignore attempts to modify operational attrs */ + if ((strcasecmp(attr_name, CONFIG_MAXDESCRIPTORS_ATTRIBUTE) == 0) || + (strcasecmp(attr_name, CONFIG_RESERVEDESCRIPTORS_ATTRIBUTE) == 0) || + (strcasecmp(attr_name, CONFIG_CONNTABLESIZE_ATTRIBUTE) == 0)) { + /* We should not treat an LDAP_UNWILLING_TO_PERFORM as fatal for + * the these config attributes. This error is returned when + * the value we are trying to set is higher than the current + * process limit. The set function will auto-adjust the runtime + * value to the current process limit when this happens. We want + * to allow the server to still start in this case. */ + if (retval == LDAP_UNWILLING_TO_PERFORM) { + slapi_log_error (SLAPI_LOG_FATAL, NULL, "Config Warning: - %s\n", returntext); + retval = LDAP_SUCCESS; + } + } else { + if ((retval != LDAP_SUCCESS) && + slapi_attr_flag_is_set(attr, SLAPI_ATTR_FLAG_OPATTR)) { + retval = LDAP_SUCCESS; /* ignore attempts to modify operational attrs */ + } + } } if (values) Index: libglobs.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/libglobs.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- libglobs.c 17 Aug 2007 02:12:37 -0000 1.19 +++ libglobs.c 17 Sep 2007 22:48:10 -0000 1.20 @@ -552,27 +552,27 @@ /* parameterizing lock dir */ {CONFIG_LOCKDIR_ATTRIBUTE, config_set_lockdir, NULL, 0, - (void**)&global_slapdFrontendConfig.lockdir, CONFIG_STRING, config_get_lockdir}, + (void**)&global_slapdFrontendConfig.lockdir, CONFIG_STRING, (ConfigGetFunc)config_get_lockdir}, /* parameterizing tmp dir */ {CONFIG_TMPDIR_ATTRIBUTE, config_set_tmpdir, NULL, 0, - (void**)&global_slapdFrontendConfig.tmpdir, CONFIG_STRING, config_get_tmpdir}, + (void**)&global_slapdFrontendConfig.tmpdir, CONFIG_STRING, (ConfigGetFunc)config_get_tmpdir}, /* parameterizing cert dir */ {CONFIG_CERTDIR_ATTRIBUTE, config_set_certdir, NULL, 0, - (void**)&global_slapdFrontendConfig.certdir, CONFIG_STRING, config_get_certdir}, + (void**)&global_slapdFrontendConfig.certdir, CONFIG_STRING, (ConfigGetFunc)config_get_certdir}, /* parameterizing ldif dir */ {CONFIG_LDIFDIR_ATTRIBUTE, config_set_ldifdir, NULL, 0, - (void**)&global_slapdFrontendConfig.ldifdir, CONFIG_STRING, config_get_ldifdir}, + (void**)&global_slapdFrontendConfig.ldifdir, CONFIG_STRING, (ConfigGetFunc)config_get_ldifdir}, /* parameterizing bak dir */ {CONFIG_BAKDIR_ATTRIBUTE, config_set_bakdir, NULL, 0, - (void**)&global_slapdFrontendConfig.bakdir, CONFIG_STRING, config_get_bakdir}, + (void**)&global_slapdFrontendConfig.bakdir, CONFIG_STRING, (ConfigGetFunc)config_get_bakdir}, /* parameterizing sasl plugin path */ {CONFIG_SASLPATH_ATTRIBUTE, config_set_saslpath, NULL, 0, - (void**)&global_slapdFrontendConfig.saslpath, CONFIG_STRING, config_get_saslpath}, + (void**)&global_slapdFrontendConfig.saslpath, CONFIG_STRING, (ConfigGetFunc)config_get_saslpath}, {CONFIG_REWRITE_RFC1274_ATTRIBUTE, config_set_rewrite_rfc1274, NULL, 0, (void**)&global_slapdFrontendConfig.rewrite_rfc1274, CONFIG_ON_OFF, NULL}, @@ -2655,8 +2655,9 @@ nValue = strtol(value, &endp, 10); if ( *endp != '\0' || errno == ERANGE || nValue < 1 || nValue > maxVal ) { - PR_snprintf ( errorbuf, SLAPI_DSE_RETURNTEXT_SIZE, "%s: invalid value \"%s\", maximum file descriptors must range from 1 to %d (the current process limit)", - attrname, value, maxVal ); + PR_snprintf ( errorbuf, SLAPI_DSE_RETURNTEXT_SIZE, "%s: invalid value \"%s\", maximum " + "file descriptors must range from 1 to %d (the current process limit). " + "Server will use a setting of %d.", attrname, value, maxVal, maxVal); if ( nValue > maxVal ) { nValue = maxVal; retVal = LDAP_UNWILLING_TO_PERFORM; @@ -2707,8 +2708,9 @@ #elif !defined(AIX) if ( *endp != '\0' || errno == ERANGE || nValue < 1 || nValue > maxVal ) { - PR_snprintf ( errorbuf, SLAPI_DSE_RETURNTEXT_SIZE, "%s: invalid value \"%s\", connection table size must range from 1 to %d" - " (the current process maxdescriptors limit)", attrname, value, maxVal ); + PR_snprintf ( errorbuf, SLAPI_DSE_RETURNTEXT_SIZE, "%s: invalid value \"%s\", connection table " + "size must range from 1 to %d (the current process maxdescriptors limit). " + "Server will use a setting of %d.", attrname, value, maxVal ); if ( nValue > maxVal) { nValue = maxVal; retVal = LDAP_UNWILLING_TO_PERFORM; @@ -2753,8 +2755,9 @@ nValue = strtol(value, &endp, 10); if ( *endp != '\0' || errno == ERANGE || nValue < 1 || nValue > maxVal ) { - PR_snprintf ( errorbuf, SLAPI_DSE_RETURNTEXT_SIZE, "%s: invalid value \"%s\", reserved file descriptors must range from 1 to %d" - " (the current process maxdescriptors limit)", attrname, value, maxVal ); + PR_snprintf ( errorbuf, SLAPI_DSE_RETURNTEXT_SIZE, "%s: invalid value \"%s\", reserved file " + "descriptors must range from 1 to %d (the current process maxdescriptors limit). " + "Server will use a setting of %d.", attrname, value, maxVal, maxVal ); if ( nValue > maxVal) { nValue = maxVal; retVal = LDAP_UNWILLING_TO_PERFORM; From fedora-directory-commits at redhat.com Tue Sep 18 17:11:49 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Tue, 18 Sep 2007 13:11:49 -0400 Subject: [Fedora-directory-commits] adminserver/admserv/newinst/src AdminServer.pm.in, 1.9, 1.10 Message-ID: <200709181711.l8IHBngn007542@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/adminserver/admserv/newinst/src In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv7525/adminserver/admserv/newinst/src Modified Files: AdminServer.pm.in Log Message: Resolves: bug 295001 Bug Description: Migration - Can't Start Admin Server Reviewed by: nhosoi (Thanks!) Fix Description: The migration script was clobbering console.conf instead of replacing the Group information. Platforms tested: RHEL5 x86_64 Flag Day: no Doc impact: no Index: AdminServer.pm.in =================================================================== RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/AdminServer.pm.in,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- AdminServer.pm.in 14 Sep 2007 21:26:08 -0000 1.9 +++ AdminServer.pm.in 18 Sep 2007 17:11:47 -0000 1.10 @@ -330,14 +330,14 @@ debug(0, "Error opening $admConf->{configdir}/console.conf: $!"); return 0; } - my $contents = ; + my @contents = ; close (CONSOLECONF); - $contents =~ s/^Group.*$/Group $admConf->{sysgroup}/; + grep { s/^Group.*$/Group $admConf->{sysgroup}/ } @contents if (!open(CONSOLECONF, ">$admConf->{configdir}/console.conf")) { debug(0, "Error writing new group $admConf->{sysgroup} to $admConf->{configdir}/console.conf: $!"); return 0; } - print CONSOLECONF $contents; + print CONSOLECONF @contents; close (CONSOLECONF); } return 1; From fedora-directory-commits at redhat.com Wed Sep 19 18:08:14 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Wed, 19 Sep 2007 14:08:14 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/tools/ldclt ldapfct.c, 1.5, 1.6 ldclt.c, 1.5, 1.6 ldclt.h, 1.4, 1.5 scalab01.c, 1.3, 1.4 utils.c, 1.2, 1.3 Message-ID: <200709191808.l8JI8EOU025732@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/tools/ldclt In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv25697 Modified Files: ldapfct.c ldclt.c ldclt.h scalab01.c utils.c Log Message: Resolves: 294301 Summary: Don't try to dlopen ldap SSL libs in ldclt. Index: ldapfct.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/tools/ldclt/ldapfct.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ldapfct.c 7 Sep 2007 19:49:51 -0000 1.5 +++ ldapfct.c 19 Sep 2007 18:08:12 -0000 1.6 @@ -256,6 +256,7 @@ #include #include "ldaptool-sasl.h" +#include /* ldapssl_init(), etc... */ @@ -668,8 +669,7 @@ * LDAP session initialization in SSL mode * added by: B Kolics (11/10/00) */ - tttctx->ldapCtx = (LDAP *)(*(mctx.sslctx.ldapssl_init)) /*JLS 07-11-00*/ - (mctx.hostname, mctx.port, 1); + tttctx->ldapCtx = ldapssl_init(mctx.hostname, mctx.port, 1); if (mctx.mode & VERY_VERBOSE) printf ("ldclt[%d]: T%03d: After ldapssl_init (%s, %d), ldapCtx=0x%08x\n", mctx.pid, tttctx->thrdNum, mctx.hostname, mctx.port, @@ -686,8 +686,7 @@ */ if (mctx.mode & CLTAUTH) { - ret = (int)(*(mctx.sslctx.ldapssl_enable_clientauth)) - (tttctx->ldapCtx, "", mctx.keydbpin, mctx.cltcertname); + ret = ldapssl_enable_clientauth(tttctx->ldapCtx, "", mctx.keydbpin, mctx.cltcertname); if (mctx.mode & VERY_VERBOSE) printf ("ldclt[%d]: T%03d: After ldapssl_enable_clientauth (ldapCtx=0x%08x, %s, %s)", @@ -1835,8 +1834,7 @@ * LDAP session initialization in SSL mode * added by: B Kolics (11/10/00) */ - tttctx->ldapCtx = (LDAP *)(*(mctx.sslctx.ldapssl_init)) /*JLS 07-11-00*/ - (mctx.hostname, mctx.port, 1); + tttctx->ldapCtx = ldapssl_init(mctx.hostname, mctx.port, 1); if (mctx.mode & VERY_VERBOSE) printf ("ldclt[%d]: T%03d: After ldapssl_init (%s, %d), ldapCtx=0x%08x\n", mctx.pid, tttctx->thrdNum, mctx.hostname, mctx.port, @@ -1853,8 +1851,7 @@ */ if (mctx.mode & CLTAUTH) { - ret = (int)(*(mctx.sslctx.ldapssl_enable_clientauth)) - (tttctx->ldapCtx, "", mctx.keydbpin, mctx.cltcertname); + ret = ldapssl_enable_clientauth(tttctx->ldapCtx, "", mctx.keydbpin, mctx.cltcertname); if (mctx.mode & VERY_VERBOSE) printf ("ldclt[%d]: T%03d: After ldapssl_enable_clientauth (ldapCtx=0x%08x, %s, %s)", Index: ldclt.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/tools/ldclt/ldclt.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ldclt.c 5 Jul 2007 23:53:41 -0000 1.5 +++ ldclt.c 19 Sep 2007 18:08:12 -0000 1.6 @@ -281,21 +281,17 @@ #include /* ctime(), etc... */ /*JLS 18-08-00*/ #include /* ldap C-API BER decl. */ #include /* ldap C-API decl. */ +#include /* ldapssl_init(), etc... */ #ifdef LDAP_H_FROM_QA_WKA #include /* ldap C-API prototypes */ #endif -#ifdef _WIN32 /*JLS 29-11-00*/ -#include /* ldapssl_init(), etc... */ /*JLS 29-11-00*/ -#else +#ifndef _WIN32 /*JLS 29-11-00*/ #include /* pthreads(), etc... */ #include /* close(), etc... */ #include /* dlopen(), etc... */ /*JLS 07-11-00*/ #include /* setrlimit(), etc... */ #include /* struct rlimit, etc... */ #endif -#ifdef HPUX /*JLS 19-06-01*/ -#include /* ldapssl_init(), etc... */ /*JLS 19-06-01*/ -#endif /*JLS 19-06-01*/ #include "port.h" /* Portability definitions */ /*JLS 29-11-00*/ #include "ldclt.h" /* This tool's include file */ @@ -372,112 +368,6 @@ } - - - - -#ifdef LDCLT_NO_DLOPEN /*JLS 01-12-00*/ -int /*JLS 29-11-00*/ -sslDynLoadInit (void) /*JLS 29-11-00*/ -{ /*JLS 29-11-00*/ - mctx.sslctx.ldapssl_init = ldapssl_init; - mctx.sslctx.ldapssl_client_init = ldapssl_client_init; - mctx.sslctx.ldapssl_clientauth_init = ldapssl_clientauth_init; - mctx.sslctx.ldapssl_enable_clientauth = ldapssl_enable_clientauth; - return (0); /*JLS 29-11-00*/ -} /*JLS 29-11-00*/ -#else /*JLS 29-11-00*/ - /* New function */ /*JLS 07-11-00*/ -/* **************************************************************************** - FUNCTION : sslDynLoadInit - PURPOSE : Initiates the dynamic load of ssl library. - INPUT : None. - OUTPUT : None. - RETURN : -1 if error, 0 else. - DESCRIPTION : - *****************************************************************************/ -int -sslDynLoadInit (void) -{ - char *buf; /*JLS 22-11-00*/ - - /* - * Open the shared library... - * Will try to load the hard-coded PATH if not in the PATH. - */ - mctx.sslctx.libssl = dlopen (SSL_LIB, RTLD_LAZY); - if (mctx.sslctx.libssl == NULL) - { - buf = (char *) malloc (strlen (SSL_LIB) + strlen (SSL_LIB_PATH) + 2); - strcat (buf, SSL_LIB_PATH); - strcat (buf, "/"); - strcat (buf, SSL_LIB); - - mctx.sslctx.libssl = dlopen (buf, RTLD_LAZY); - if (mctx.sslctx.libssl == NULL) - { - printf ("Cannot dlopen (%s) : %s\n", SSL_LIB, dlerror()); - return (-1); - } - } - - /* - * Find the address of function and data objects - */ - mctx.sslctx.ldapssl_init = (LDAP *(*)(const char *, int, int)) - dlsym (mctx.sslctx.libssl, "ldapssl_init"); - if (mctx.sslctx.ldapssl_init == NULL) - { - printf ("Cannot dlsym (ldapssl_init) : %s\n", dlerror()); - return (-1); - } - - /* - * Next function... - */ - mctx.sslctx.ldapssl_client_init = (int (*)(const char*, void*)) - dlsym (mctx.sslctx.libssl, "ldapssl_client_init"); - if (mctx.sslctx.ldapssl_client_init == NULL) - { - printf ("Cannot dlsym (ldapssl_client_init) : %s\n", dlerror()); - return (-1); - } - - /* - * Next function... - */ - mctx.sslctx.ldapssl_clientauth_init = - (int (*)(char *, void *, int, char *, void *)) - dlsym (mctx.sslctx.libssl, "ldapssl_clientauth_init"); - if (mctx.sslctx.ldapssl_clientauth_init == NULL) - { - printf ("Cannot dlsym (ldapssl_enable_clientauth): %s\n", dlerror()); - return (-1); - } - - /* - * Next function... - */ - mctx.sslctx.ldapssl_enable_clientauth = - (int (*)(LDAP *, char *, char *, char *)) - dlsym (mctx.sslctx.libssl, "ldapssl_enable_clientauth"); - if (mctx.sslctx.ldapssl_enable_clientauth == NULL) - { - printf ("Cannot dlsym (ldapssl_enable_clientauth): %s\n", dlerror()); - return (-1); - } - - return (0); -} -#endif /* LDCLT_NO_DLOPEN */ /*JLS 29-11-00*/ - - - - - - - - /* New */ /*JLS 23-03-01*/ /* **************************************************************************** FUNCTION : copyVersAttribute @@ -1668,8 +1558,7 @@ */ if (mctx.mode & CLTAUTH) { - if ((*(mctx.sslctx.ldapssl_clientauth_init)) - (mctx.certfile, NULL, 1, mctx.keydbfile, NULL) < 0) + if (ldapssl_clientauth_init(mctx.certfile, NULL, 1, mctx.keydbfile, NULL) < 0) { fprintf (stderr, "ldclt: %s\n", strerror (errno)); fprintf (stderr, "Cannot ldapssl_clientauth_init (%s,%s)\n", @@ -1678,8 +1567,7 @@ return (-1); } } else { - if ((*(mctx.sslctx.ldapssl_client_init)) /*JLS 07-11-00*/ - (mctx.certfile, NULL) < 0) + if (ldapssl_client_init(mctx.certfile, NULL) < 0) { fprintf (stderr, "ldclt: %s\n", strerror (errno)); fprintf (stderr, "Cannot ldapssl_client_init (%s)\n", /*JLS 08-11-00*/ @@ -3073,13 +2961,6 @@ } /*JLS 23-03-01*/ /* - * Maybe we should load ssl library ? - */ - if (mctx.mode & SSL) /*JLS 07-11-00*/ - if (sslDynLoadInit() < 0) /*JLS 07-11-00*/ - ldcltExit (EXIT_LOADSSL); /*JLS 07-11-00*/ - - /* * Basic initialization from the user's parameters/options */ if (basicInit() < 0) Index: ldclt.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/tools/ldclt/ldclt.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- ldclt.h 5 Jul 2007 23:53:41 -0000 1.4 +++ ldclt.h 19 Sep 2007 18:08:12 -0000 1.5 @@ -222,13 +222,6 @@ #define DEF_REFERRAL REFERRAL_ON /*JLS 08-03-01*/ #define DEF_SCOPE LDAP_SCOPE_SUBTREE /* Default for -s */ -#ifndef SSL_LIB -#define SSL_LIB "libldapssl41.so" -#endif -#ifndef SSL_LIB_PATH -#define SSL_LIB_PATH "/qa/ldap/tools/ldclt/src/lib-sparc/ldapcsdk" -#endif - /* * Referral choices... */ @@ -409,27 +402,6 @@ } thoper; /* - * This structure will allow to manage the handlers for ssl-related - * dynamic loaded functions. - */ -typedef struct ssl_context { /*JLS 07-11-00*/ -#ifndef _WIN32 - void *libssl; /* lib ssl handler */ /*JLS 07-11-00*/ - LDAP *(*ldapssl_init)(const char *, int, int); /*JLS 07-11-00*/ - int (*ldapssl_client_init)(const char*, void*); /*JLS 07-11-00*/ - int (*ldapssl_clientauth_init)(char *, void *, int, char *, void*); - /* BK 23-11-00*/ - int (*ldapssl_enable_clientauth)(LDAP *, char *, char *, char *); - /* BK 22-11-00*/ -#else /* _WIN32 */ - LDAP * (LDAP_CALL *ldapssl_init)(const char *, int, int); - int (LDAP_CALL *ldapssl_client_init)(const char*, void*); - int (LDAP_CALL *ldapssl_clientauth_init)(char *, void *, int, char *, void*); - int (LDAP_CALL *ldapssl_enable_clientauth)(LDAP *, char *, char *, char *); -#endif /* _WIN32 */ -} ssl_context; /*JLS 07-11-00*/ - -/* * Versatile object attribute's field * - If ldclt should use a common counter, then this counter will * be in the mctx structure and will be found by the commonField @@ -578,7 +550,6 @@ int slaveConn; /* Slave has connected */ char *slaves[MAX_SLAVES]; /* Slaves list */ int slavesNb; /* Number of slaves */ - ssl_context sslctx; /* SSL dyn. load ctx */ /*JSL 07-11-00*/ int timeout; /* LDAP op. t.o. */ struct timeval timeval; /* Timeval structure */ struct timeval timevalZero; /* Timeout of zero */ Index: scalab01.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/tools/ldclt/scalab01.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- scalab01.c 8 Jun 2007 23:19:20 -0000 1.3 +++ scalab01.c 19 Sep 2007 18:08:12 -0000 1.4 @@ -91,6 +91,7 @@ #include /* ldap C-API BER declarations */ #include /* ldap C-API declarations */ +#include /* ldapssl_init(), etc... */ #include "port.h" /* Portability definitions */ #include "ldclt.h" /* This tool's include file */ @@ -521,8 +522,7 @@ /* * LDAP session initialization in SSL mode */ - s1ctx.ldapCtx = (LDAP *)(*(mctx.sslctx.ldapssl_init)) - (mctx.hostname, mctx.port, 1); + s1ctx.ldapCtx = ldapssl_init(mctx.hostname, mctx.port, 1); if (mctx.mode & VERY_VERBOSE) printf ("ldclt[%d]: ctrl: ldapssl_init (%s, %d), ldapCtx=0x%08x\n", mctx.pid, mctx.hostname, mctx.port, (unsigned int)s1ctx.ldapCtx); @@ -538,8 +538,7 @@ */ if (mctx.mode & CLTAUTH) { - ret = (int)(*(mctx.sslctx.ldapssl_enable_clientauth)) - (s1ctx.ldapCtx, "", mctx.keydbpin, mctx.cltcertname); + ret = ldapssl_enable_clientauth(s1ctx.ldapCtx, "", mctx.keydbpin, mctx.cltcertname); if (mctx.mode & VERY_VERBOSE) printf ("ldclt[%d]: ctrl: After ldapssl_enable_clientauth (ldapCtx=0x%08x, %s, %s)", Index: utils.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/tools/ldclt/utils.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- utils.c 10 Nov 2006 23:45:50 -0000 1.2 +++ utils.c 19 Sep 2007 18:08:12 -0000 1.3 @@ -305,19 +305,10 @@ else { /* - * Maybe strict ascii required ? + * strict ascii required */ - if (1) - { - if (isascii (newChar) && !iscntrl(newChar)) - buf[charNum++] = newChar; - } - else - { - if (((newChar >= 0x30) && (newChar <= 0x7a)) || - ((newChar >= 0xc0) && (newChar <= 0xf6))) - buf[charNum++] = newChar; - } + if (isascii (newChar) && !iscntrl(newChar)) + buf[charNum++] = newChar; } } From fedora-directory-commits at redhat.com Wed Sep 19 19:32:05 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Wed, 19 Sep 2007 15:32:05 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/syntaxes int.c, 1.5, 1.6 string.c, 1.7, 1.8 syntax.h, 1.5, 1.6 value.c, 1.6, 1.7 Message-ID: <200709191932.l8JJW5kR001765@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/syntaxes In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1730/ldapserver/ldap/servers/plugins/syntaxes Modified Files: int.c string.c syntax.h value.c Log Message: Resolves: bug 249366 Bug Description: rhds71 - search filters returns too many entries on interger attributes value greater than 231 Reviewed by: nhosoi (Thanks!) Fix Description: The problem is that the current code uses atol() to convert the string value to an integer. long is 4 bytes or 8 bytes depending on the underlying platform. These binary values are stored in the index as 4 or 8 byte values. Finally, the behavior of atol() is different on the platform in overflow cases. Instead of dealing with binary values, we must store the values in string format, and perform string comparison, string normalization, and string key generation on INTEGER syntax values. I added another syntax type to the list in syntax.h. The code in string.c and value.c was mostly usable. I had to add some code in value_normalize to handle cases like " -00000001" -> "-1" to make it work like atol(), and I had to add some code to value_cmp to handle the sign (e.g. positive is always greater than negative, no other comparison is necessary) and magnitude (longer number is larger/smaller than shorter number, depending on sign). Otherwise, strcmp() doe! s the right thing (e.g. "50" > "49", the same as int(50) > int(49)). One problem I ran into was that the value_normalize code takes just a char *, rather than a berval* or a char * + size_t length. To be efficient, this function should return the new length of the normalized string. Fortunately, none of the existing code cares about the length, but I needed the length for magnitude comparison, so I just used strlen for those cases. Which should be fine. value_normalize always produces a correctly null terminated string. I rewrote the value_cmp code to use a simple if rather than the switch statement. This makes it much clearer - if syntax is case insensitive, use slapi_utf8casecmp - if case sensitive, use strcmp - otherwise, error. I also found a problem with the ldif2db code, which I uncovered because I added my integer indexes online and did an online import. The db2index code will correctly clear the INDEX_OFFLINE bit after the index is completed, but the ldif2db code will not. Platforms tested: RHEL5 x86_64 Flag Day: Yes, if you are upgrading and you have integer valued indexes, you will have to remove them and recreate them. Doc impact: We will have to document this in the release notes. Index: int.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/syntaxes/int.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- int.c 10 Nov 2006 23:45:31 -0000 1.5 +++ int.c 19 Sep 2007 19:32:03 -0000 1.6 @@ -50,11 +50,10 @@ static int int_filter_ava( Slapi_PBlock *pb, struct berval *bvfilter, Slapi_Value **bvals, int ftype, Slapi_Value **retVal ); static int int_values2keys( Slapi_PBlock *pb, Slapi_Value **val, - Slapi_Value ***ivals ); + Slapi_Value ***ivals, int ftype ); static int int_assertion2keys( Slapi_PBlock *pb, Slapi_Value *val, Slapi_Value ***ivals, int ftype ); static int int_compare(struct berval *v1, struct berval *v2); -static long int_to_canonical( long num ); /* the first name is the official one from RFC 2252 */ static char *names[] = { "INTEGER", "int", INTEGER_SYNTAX_OID, 0 }; @@ -97,103 +96,22 @@ int_filter_ava( Slapi_PBlock *pb, struct berval *bvfilter, Slapi_Value **bvals, int ftype, Slapi_Value **retVal ) { - int i, rc; - long flong, elong; - - if ( ftype == LDAP_FILTER_APPROX ) { - return( LDAP_PROTOCOL_ERROR ); - } - if(retVal) { - *retVal=NULL; - } - flong = atol( bvfilter->bv_val ); - for ( i = 0; bvals[i] != NULL; i++ ) { - elong = atol ( slapi_value_get_string(bvals[i]) ); - rc = elong - flong; - switch ( ftype ) { - case LDAP_FILTER_GE: - if ( rc >= 0 ) { - if(retVal) { - *retVal = bvals[i]; - } - return( 0 ); - } - break; - case LDAP_FILTER_LE: - if ( rc <= 0 ) { - if(retVal) { - *retVal = bvals[i]; - } - return( 0 ); - } - break; - case LDAP_FILTER_EQUALITY: - if ( rc == 0 ) { - if(retVal) { - *retVal = bvals[i]; - } - return( 0 ); - } - break; - } - } - - return( -1 ); + return( string_filter_ava( bvfilter, bvals, SYNTAX_INT | SYNTAX_CES, + ftype, retVal ) ); } static int -int_values2keys( Slapi_PBlock *pb, Slapi_Value **vals, Slapi_Value ***ivals ) +int_values2keys( Slapi_PBlock *pb, Slapi_Value **vals, Slapi_Value ***ivals, int ftype ) { - long num; - int i; - - for ( i = 0; vals[i] != NULL; i++ ) { - /* NULL */ - } - - *ivals = (Slapi_Value **) slapi_ch_malloc(( i + 1 ) * sizeof(Slapi_Value *) ); - - for ( i = 0; vals[i] != NULL; i++ ) - { - num = atol( slapi_value_get_string(vals[i]) ); - num = int_to_canonical( num ); - (*ivals)[i] = slapi_value_new(); - slapi_value_set((*ivals)[i],&num,sizeof(long)); - } - (*ivals)[i] = NULL; - - return( 0 ); + return( string_values2keys( pb, vals, ivals, SYNTAX_INT | SYNTAX_CES, + ftype ) ); } static int int_assertion2keys( Slapi_PBlock *pb, Slapi_Value *val, Slapi_Value ***ivals, int ftype ) { - long num; - size_t len; - unsigned char *b; - Slapi_Value *tmpval=NULL; - - num = atol( slapi_value_get_string(val) ); - num = int_to_canonical( num ); - /* similar to string.c to optimize equality path: avoid malloc/free */ - if(ftype == LDAP_FILTER_EQUALITY_FAST) { - len=sizeof(long); - tmpval=(*ivals)[0]; - if ( len > tmpval->bv.bv_len) { - tmpval->bv.bv_val=(char *)slapi_ch_malloc(len); - } - tmpval->bv.bv_len=len; - b = (unsigned char *)# - memcpy(tmpval->bv.bv_val,b,len); - } else { - *ivals = (Slapi_Value **) slapi_ch_malloc( 2 * sizeof(Slapi_Value *) ); - (*ivals)[0] = (Slapi_Value *) slapi_ch_malloc( sizeof(Slapi_Value) ); - /* XXXSD initialize memory */ - memset((*ivals)[0],0,sizeof(Slapi_Value)); - slapi_value_set((*ivals)[0],&num,sizeof(long)); - (*ivals)[1] = NULL; - } - return( 0 ); + return(string_assertion2keys_ava( pb, val, ivals, + SYNTAX_INT | SYNTAX_CES, ftype )); } static int int_compare( @@ -201,25 +119,5 @@ struct berval *v2 ) { - long value1 = atol(v1->bv_val); - long value2 = atol(v2->bv_val); - - if (value1 == value2) { - return 0; - } - return ( ((value1 - value2) > 0) ? 1 : -1); -} - -static long -int_to_canonical( long num ) -{ - long ret = 0L; - unsigned char *b = (unsigned char *)&ret; - - b[0] = (unsigned char)(num >> 24); - b[1] = (unsigned char)(num >> 16); - b[2] = (unsigned char)(num >> 8); - b[3] = (unsigned char)num; - - return ret; + return value_cmp(v1, v2, SYNTAX_INT|SYNTAX_CES, 3 /* Normalise both values */); } Index: string.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/syntaxes/string.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- string.c 10 Nov 2006 23:45:31 -0000 1.7 +++ string.c 19 Sep 2007 19:32:03 -0000 1.8 @@ -73,6 +73,7 @@ SAFEMEMCPY( bvfilter_norm.bv_val, bvfilter->bv_val, bvfilter->bv_len ); bvfilter_norm.bv_val[bvfilter->bv_len] = '\0'; value_normalize( bvfilter_norm.bv_val, syntax, 1 /* trim leading blanks */ ); + bvfilter_norm.bv_len = strlen(bvfilter_norm.bv_val); for ( i = 0; bvals[i] != NULL; i++ ) { rc = value_cmp( (struct berval*)slapi_value_get_berval(bvals[i]), &bvfilter_norm, syntax, 1/* Normalise the first value only */ ); Index: syntax.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/syntaxes/syntax.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- syntax.h 10 Nov 2006 23:45:31 -0000 1.5 +++ syntax.h 19 Sep 2007 19:32:03 -0000 1.6 @@ -56,6 +56,7 @@ #define SYNTAX_TEL 4 /* telephone number: used with SYNTAX_CIS */ #define SYNTAX_DN 8 /* distinguished name: used with SYNTAX_CIS */ #define SYNTAX_SI 16 /* space insensitive: used with SYNTAX_CIS */ +#define SYNTAX_INT 32 /* INTEGER */ #define SUBLEN 3 Index: value.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/syntaxes/value.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- value.c 10 Nov 2006 23:45:31 -0000 1.6 +++ value.c 19 Sep 2007 19:32:03 -0000 1.7 @@ -78,6 +78,13 @@ ** of the form "cn=a* b*" (note the space) would be wrongly ** normalized into "cn=a*b*", because this function is called ** once for "a" and once for " b". +** richm 20070917 - added integer syntax - note that this implementation +** of integer syntax tries to mimic the old implementation (atol) as much +** as possible - leading spaces are ignored, then the optional hyphen for +** negative numbers, then leading 0s. That is +** " -0000000000001" should normalize to "-1" which is what atol() does +** Also note that this deviates from rfc 4517 INTEGER syntax, but we must +** support legacy clients for the time being */ void value_normalize( @@ -105,10 +112,34 @@ LDAP_UTF8INC(s); } } + + /* for int syntax, look for leading sign, then trim 0s */ + /* have to do this after trimming spaces */ + if (syntax & SYNTAX_INT) { + int foundsign = 0; + if (*s == '-') { + foundsign = 1; + LDAP_UTF8INC(s); + } + + while (*s && (*s == '0')) { + LDAP_UTF8INC(s); + } + + /* if there is a hyphen, make sure it is just to the left + of the first significant (i.e. non-zero) digit e.g. + convert -00000001 to -1 */ + if (foundsign && (s > d)) { + *d = '-'; + d++; + } + /* s should now point at the first significant digit/char */ + } + /* handle value of all spaces - turn into single space */ - /* unless space insensitive syntax - turn into zero length string */ + /* unless space insensitive syntax or int - turn into zero length string */ if ( *s == '\0' && s != d ) { - if ( ! (syntax & SYNTAX_SI)) { + if ( ! (syntax & SYNTAX_SI) && ! (syntax & SYNTAX_INT) ) { *d++ = ' '; } *d = '\0'; @@ -175,7 +206,7 @@ int normalize ) { - int rc; + int rc = 0; struct berval bvcopy1; struct berval bvcopy2; char little_buffer[64]; @@ -183,6 +214,7 @@ int buffer_offset = 0; int free_v1 = 0; int free_v2 = 0; + int v1sign = 1, v2sign = 1; /* default to positive */ /* This code used to call malloc up to four times in the copying * of attributes to be normalized. Now we attempt to keep everything @@ -221,20 +253,42 @@ value_normalize( v2->bv_val, syntax, 1 /* trim leading blanks */ ); } - switch ( syntax ) { - case SYNTAX_CIS: - case (SYNTAX_CIS | SYNTAX_TEL): - case (SYNTAX_CIS | SYNTAX_DN): - case (SYNTAX_CIS | SYNTAX_SI): - rc = slapi_utf8casecmp( (unsigned char *)v1->bv_val, - (unsigned char *)v2->bv_val ); - break; + if (syntax & SYNTAX_INT) { + v1sign = v1->bv_val && (*v1->bv_val != '-'); + v2sign = v2->bv_val && (*v2->bv_val != '-'); + rc = v1sign - v2sign; + if (rc) { /* one is positive, one is negative */ + goto done; + } + + /* check magnitude */ + /* unfortunately, bv_len cannot be trusted - bv_len is not + updated during or after value_normalize */ + rc = (strlen(v1->bv_val) - strlen(v2->bv_val)); + if (rc) { + rc = (rc > 0) ? 1 : -1; + if (!v1sign && !v2sign) { /* both negative */ + rc = 0 - rc; /* flip it */ + } + goto done; + } + } - case SYNTAX_CES: + if (syntax & SYNTAX_CIS) { + rc = slapi_utf8casecmp( (unsigned char *)v1->bv_val, + (unsigned char *)v2->bv_val ); + } else if (syntax & SYNTAX_CES) { rc = strcmp( v1->bv_val, v2->bv_val ); - break; + } else { /* error - unknown syntax */ + LDAPDebug(LDAP_DEBUG_PLUGIN, + "invalid syntax [%d]\n", syntax, 0, 0); + } + + if ((syntax & SYNTAX_INT) && !v1sign && !v2sign) { /* both negative */ + rc = 0 - rc; /* flip it */ } +done: if ( (normalize & 1) && free_v1) { ber_bvfree( v1 ); } From fedora-directory-commits at redhat.com Wed Sep 19 19:32:05 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Wed, 19 Sep 2007 15:32:05 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm import.c, 1.8, 1.9 Message-ID: <200709191932.l8JJW5AP001773@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1730/ldapserver/ldap/servers/slapd/back-ldbm Modified Files: import.c Log Message: Resolves: bug 249366 Bug Description: rhds71 - search filters returns too many entries on interger attributes value greater than 231 Reviewed by: nhosoi (Thanks!) Fix Description: The problem is that the current code uses atol() to convert the string value to an integer. long is 4 bytes or 8 bytes depending on the underlying platform. These binary values are stored in the index as 4 or 8 byte values. Finally, the behavior of atol() is different on the platform in overflow cases. Instead of dealing with binary values, we must store the values in string format, and perform string comparison, string normalization, and string key generation on INTEGER syntax values. I added another syntax type to the list in syntax.h. The code in string.c and value.c was mostly usable. I had to add some code in value_normalize to handle cases like " -00000001" -> "-1" to make it work like atol(), and I had to add some code to value_cmp to handle the sign (e.g. positive is always greater than negative, no other comparison is necessary) and magnitude (longer number is larger/smaller than shorter number, depending on sign). Otherwise, strcmp() doe! s the right thing (e.g. "50" > "49", the same as int(50) > int(49)). One problem I ran into was that the value_normalize code takes just a char *, rather than a berval* or a char * + size_t length. To be efficient, this function should return the new length of the normalized string. Fortunately, none of the existing code cares about the length, but I needed the length for magnitude comparison, so I just used strlen for those cases. Which should be fine. value_normalize always produces a correctly null terminated string. I rewrote the value_cmp code to use a simple if rather than the switch statement. This makes it much clearer - if syntax is case insensitive, use slapi_utf8casecmp - if case sensitive, use strcmp - otherwise, error. I also found a problem with the ldif2db code, which I uncovered because I added my integer indexes online and did an online import. The db2index code will correctly clear the INDEX_OFFLINE bit after the index is completed, but the ldif2db code will not. Platforms tested: RHEL5 x86_64 Flag Day: Yes, if you are upgrading and you have integer valued indexes, you will have to remove them and recreate them. Doc impact: We will have to document this in the release notes. Index: import.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/import.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- import.c 10 Nov 2006 23:45:39 -0000 1.8 +++ import.c 19 Sep 2007 19:32:03 -0000 1.9 @@ -1054,6 +1054,20 @@ } if (job->flags & FLAG_ONLINE) { + /* make sure the indexes are online as well */ + /* richm 20070919 - if index entries are added online, they + are created and marked as INDEX_OFFLINE, in anticipation + of someone doing a db2index. In this case, the db2index + code will correctly unset the INDEX_OFFLINE flag. + However, if import is used to create the indexes, the + INDEX_OFFLINE flag will not be cleared. So, we do that + here + */ + IndexInfo *index = job->index_list; + while (index != NULL) { + index->ai->ai_indexmask &= ~INDEX_OFFLINE; + index = index->next; + } /* start up the instance */ ret = dblayer_instance_start(job->inst->inst_be, DBLAYER_NORMAL_MODE); if (ret != 0) From fedora-directory-commits at redhat.com Thu Sep 20 01:01:23 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Wed, 19 Sep 2007 21:01:23 -0400 Subject: [Fedora-directory-commits] adminserver/admserv/newinst/src AdminServer.pm.in, 1.10, 1.11 Message-ID: <200709200101.l8K11NwT025668@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/adminserver/admserv/newinst/src In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv19540 Modified Files: AdminServer.pm.in Log Message: One character fix: added ';' Index: AdminServer.pm.in =================================================================== RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/AdminServer.pm.in,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- AdminServer.pm.in 18 Sep 2007 17:11:47 -0000 1.10 +++ AdminServer.pm.in 20 Sep 2007 01:01:21 -0000 1.11 @@ -332,7 +332,7 @@ } my @contents = ; close (CONSOLECONF); - grep { s/^Group.*$/Group $admConf->{sysgroup}/ } @contents + grep { s/^Group.*$/Group $admConf->{sysgroup}/ } @contents; if (!open(CONSOLECONF, ">$admConf->{configdir}/console.conf")) { debug(0, "Error writing new group $admConf->{sysgroup} to $admConf->{configdir}/console.conf: $!"); return 0; From fedora-directory-commits at redhat.com Thu Sep 20 15:55:05 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Thu, 20 Sep 2007 11:55:05 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/docs/dirhlp Makefile, 1.5, NONE dssynchhelp.z, 1.1.1.1, NONE index.htm, 1.4, NONE index.map, 1.2, NONE pixel.gif, 1.1.1.1, NONE tokens.map, 1.3, NONE topicindex.htm, 1.1.1.1, NONE Message-ID: <200709201555.l8KFt5xD022685@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/docs/dirhlp In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv22659/dirhlp Removed Files: Makefile dssynchhelp.z index.htm index.map pixel.gif tokens.map topicindex.htm Log Message: Removed online help docs now that they've been moved to directoryconsole. --- Makefile DELETED --- --- dssynchhelp.z DELETED --- --- index.htm DELETED --- --- index.map DELETED --- --- tokens.map DELETED --- --- topicindex.htm DELETED --- From fedora-directory-commits at redhat.com Thu Sep 20 15:55:05 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Thu, 20 Sep 2007 11:55:05 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/docs/dirhlp/help account_mgmt.htm, 1.4, NONE adv_search.htm, 1.4, NONE configtab_chaindb.htm, 1.4, NONE configtab_chaindb2.htm, 1.4, NONE configtab_chaindb3.htm, 1.4, NONE configtab_chaindb4.htm, 1.5, NONE configtab_chaindb5.htm, 1.4, NONE configtab_chaindb6.htm, 1.4, NONE configtab_chaindb7.htm, 1.4, NONE configtab_db.htm, 1.4, NONE configtab_db10.htm, 1.4, NONE configtab_db11.htm, 1.4, NONE configtab_db12.htm, 1.4, NONE configtab_db13.htm, 1.4, NONE configtab_db14.htm, 1.5, NONE configtab_db15.htm, 1.5, NONE configtab_db2.htm, 1.4, NONE configtab_db3.htm, 1.4, NONE configtab_db4.htm, 1.4, NONE configtab_db5.htm, 1.4, NONE configtab_db6.htm, 1.4, NONE configtab_db7.htm, 1.4, NONE configtab_db8.htm, 1.4, NONE configtab_db9.htm, 1.4, NONE configtab_ldbmdb.htm, 1.4, NONE configtab_logs.htm, 1.4, NONE configtab_logs2.htm, 1.4, NONE configtab_logs3.htm, 1.4, NONE configtab_maptree.htm, 1.4, NONE configtab_maptree2.htm, 1.4, NONE configtab_maptree3.htm, 1.4, NONE configtab_maptree4.htm, 1.4, NONE configtab_maptree5.ht! m, 1.4, NONE configtab_maptree6.htm, 1.4, NONE configtab_maptree7.htm, 1.4, NONE configtab_plugins.htm, 1.4, NONE configtab_replication.htm, 1.5, NONE configtab_replication2.htm, 1.4, NONE configtab_replication3.htm, 1.5, NONE configtab_replication4.htm, 1.4, NONE configtab_replication5.htm, 1.4, NONE configtab_replication6.htm, 1.4, NONE configtab_replication7.htm, 1.4, NONE configtab_replication8.htm, 1.4, NONE configtab_rootnode.htm, 1.4, NONE configtab_rootnode2.htm, 1.4, NONE configtab_rootnode3.htm, 1.4, NONE configtab_rootnode4.htm, 1.4, NONE configtab_rootnode5.htm, 1.4, NONE configtab_rootnode6.htm, 1.4, NONE configtab_rootnode7.htm, 1.4, NONE configtab_rootnode8.htm, 1.5, NONE configtab_rootnode9.htm, 1.5, NONE configtab_schema.htm, 1.4, NONE configtab_schema2.htm, 1.4, NONE configtab_schema3.htm, 1.4, NONE configtab_schema4.htm, 1.4, NONE configtab_schema5.htm, 1.4, NONE configtab_synchronization1.htm, 1.3, NONE configtab_synchronization2.htm, 1.3, NONE configtab_synchronization3.htm, 1.3, NONE dir_browser.htm, 1.4, NONE ! dir_browser2.htm,1.4,NONE dir_browser3.htm,1.4,NONE dir_browse! r4.htm Message-ID: <200709201555.l8KFt5t7022690@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/docs/dirhlp/help In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv22659/dirhlp/help Removed Files: account_mgmt.htm adv_search.htm configtab_chaindb.htm configtab_chaindb2.htm configtab_chaindb3.htm configtab_chaindb4.htm configtab_chaindb5.htm configtab_chaindb6.htm configtab_chaindb7.htm configtab_db.htm configtab_db10.htm configtab_db11.htm configtab_db12.htm configtab_db13.htm configtab_db14.htm configtab_db15.htm configtab_db2.htm configtab_db3.htm configtab_db4.htm configtab_db5.htm configtab_db6.htm configtab_db7.htm configtab_db8.htm configtab_db9.htm configtab_ldbmdb.htm configtab_logs.htm configtab_logs2.htm configtab_logs3.htm configtab_maptree.htm configtab_maptree2.htm configtab_maptree3.htm configtab_maptree4.htm configtab_maptree5.htm configtab_maptree6.htm configtab_maptree7.htm configtab_plugins.htm configtab_replication.htm configtab_replication2.htm configtab_replication3.htm configtab_replication4.htm configtab_replication5.htm configtab_replication6.htm configtab_replication7.htm configtab_replication8.htm configtab_rootnode.htm configtab_rootnode2.htm configtab_rootnode3.htm configtab_rootnode4.htm configtab_rootnode5.htm configtab_rootnode6.htm configtab_rootnode7.htm configtab_rootnode8.htm configtab_rootnode9.htm configtab_schema.htm configtab_schema2.htm configtab_schema3.htm configtab_schema4.htm configtab_schema5.htm configtab_synchronization1.htm configtab_synchronization2.htm configtab_synchronization3.htm dir_browser.htm dir_browser2.htm dir_browser3.htm dir_browser4.htm dirtab_cos.htm dirtab_cos2.htm dirtab_cos3.htm dirtab_role.htm dirtab_role2.htm dirtab_role3.htm dirtab_role4.htm dirtab_role5.htm dirtab_role6.htm dirtab_role7.htm helpmenu.htm ix.htm ldapurl.htm netscape32.gif new_instance.htm pixel.gif property_editor.htm property_editor2.htm property_editor3.htm property_editor4.htm redir_agtoc.htm redir_dochome.htm replication_wizard.htm replication_wizard2.htm replication_wizard3.htm replication_wizard4.htm replication_wizard5.htm replication_wizard6.htm sniffer.js statustab_general.htm statustab_logs.htm statustab_logs2.htm statustab_logs3.htm statustab_performance.htm statustab_performance2.htm statustab_replication.htm synchronization_wizard1.htm synchronization_wizard2.htm synchronization_wizard3.htm taskstab_bkup_restore.htm taskstab_bkup_restore2.htm topics.htm Log Message: Removed online help docs now that they've been moved to directoryconsole. --- account_mgmt.htm DELETED --- --- adv_search.htm DELETED --- --- configtab_chaindb.htm DELETED --- --- configtab_chaindb2.htm DELETED --- --- configtab_chaindb3.htm DELETED --- --- configtab_chaindb4.htm DELETED --- --- configtab_chaindb5.htm DELETED --- --- configtab_chaindb6.htm DELETED --- --- configtab_chaindb7.htm DELETED --- --- configtab_db.htm DELETED --- --- configtab_db10.htm DELETED --- --- configtab_db11.htm DELETED --- --- configtab_db12.htm DELETED --- --- configtab_db13.htm DELETED --- --- configtab_db14.htm DELETED --- --- configtab_db15.htm DELETED --- --- configtab_db2.htm DELETED --- --- configtab_db3.htm DELETED --- --- configtab_db4.htm DELETED --- --- configtab_db5.htm DELETED --- --- configtab_db6.htm DELETED --- --- configtab_db7.htm DELETED --- --- configtab_db8.htm DELETED --- --- configtab_db9.htm DELETED --- --- configtab_ldbmdb.htm DELETED --- --- configtab_logs.htm DELETED --- --- configtab_logs2.htm DELETED --- --- configtab_logs3.htm DELETED --- --- configtab_maptree.htm DELETED --- --- configtab_maptree2.htm DELETED --- --- configtab_maptree3.htm DELETED --- --- configtab_maptree4.htm DELETED --- --- configtab_maptree5.htm DELETED --- --- configtab_maptree6.htm DELETED --- --- configtab_maptree7.htm DELETED --- --- configtab_plugins.htm DELETED --- --- configtab_replication.htm DELETED --- --- configtab_replication2.htm DELETED --- --- configtab_replication3.htm DELETED --- --- configtab_replication4.htm DELETED --- --- configtab_replication5.htm DELETED --- --- configtab_replication6.htm DELETED --- --- configtab_replication7.htm DELETED --- --- configtab_replication8.htm DELETED --- --- configtab_rootnode.htm DELETED --- --- configtab_rootnode2.htm DELETED --- --- configtab_rootnode3.htm DELETED --- --- configtab_rootnode4.htm DELETED --- --- configtab_rootnode5.htm DELETED --- --- configtab_rootnode6.htm DELETED --- --- configtab_rootnode7.htm DELETED --- --- configtab_rootnode8.htm DELETED --- --- configtab_rootnode9.htm DELETED --- --- configtab_schema.htm DELETED --- --- configtab_schema2.htm DELETED --- --- configtab_schema3.htm DELETED --- --- configtab_schema4.htm DELETED --- --- configtab_schema5.htm DELETED --- --- configtab_synchronization1.htm DELETED --- --- configtab_synchronization2.htm DELETED --- --- configtab_synchronization3.htm DELETED --- --- dir_browser.htm DELETED --- --- dir_browser2.htm DELETED --- --- dir_browser3.htm DELETED --- --- dir_browser4.htm DELETED --- --- dirtab_cos.htm DELETED --- --- dirtab_cos2.htm DELETED --- --- dirtab_cos3.htm DELETED --- --- dirtab_role.htm DELETED --- --- dirtab_role2.htm DELETED --- --- dirtab_role3.htm DELETED --- --- dirtab_role4.htm DELETED --- --- dirtab_role5.htm DELETED --- --- dirtab_role6.htm DELETED --- --- dirtab_role7.htm DELETED --- --- helpmenu.htm DELETED --- --- ix.htm DELETED --- --- ldapurl.htm DELETED --- --- new_instance.htm DELETED --- --- property_editor.htm DELETED --- --- property_editor2.htm DELETED --- --- property_editor3.htm DELETED --- --- property_editor4.htm DELETED --- --- redir_agtoc.htm DELETED --- --- redir_dochome.htm DELETED --- --- replication_wizard.htm DELETED --- --- replication_wizard2.htm DELETED --- --- replication_wizard3.htm DELETED --- --- replication_wizard4.htm DELETED --- --- replication_wizard5.htm DELETED --- --- replication_wizard6.htm DELETED --- --- sniffer.js DELETED --- --- statustab_general.htm DELETED --- --- statustab_logs.htm DELETED --- --- statustab_logs2.htm DELETED --- --- statustab_logs3.htm DELETED --- --- statustab_performance.htm DELETED --- --- statustab_performance2.htm DELETED --- --- statustab_replication.htm DELETED --- --- synchronization_wizard1.htm DELETED --- --- synchronization_wizard2.htm DELETED --- --- synchronization_wizard3.htm DELETED --- --- taskstab_bkup_restore.htm DELETED --- --- taskstab_bkup_restore2.htm DELETED --- --- topics.htm DELETED --- From fedora-directory-commits at redhat.com Thu Sep 20 16:30:57 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Thu, 20 Sep 2007 12:30:57 -0400 Subject: [Fedora-directory-commits] directoryconsole/help/en footer.html, 1.1, 1.2 Message-ID: <200709201630.l8KGUvb4030380@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/directoryconsole/help/en In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv30362 Modified Files: footer.html Log Message: Use less restrictive version of Open Publication License for online help docs. Index: footer.html =================================================================== RCS file: /cvs/dirsec/directoryconsole/help/en/footer.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- footer.html 13 Aug 2007 22:28:09 -0000 1.1 +++ footer.html 20 Sep 2007 16:30:55 -0000 1.2 @@ -12,15 +12,6 @@ forth in the Open Publication License, V1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/).

-

- Distribution of substantively modified versions of this document is prohibited - without the explicit permission of the copyright holder. -

-

- Distribution of the work or derivative of the work in any standard (paper) - book form for commercial purposes is prohibited unless prior permission - is obtained from the copyright holder. -


From fedora-directory-commits at redhat.com Thu Sep 20 16:33:16 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Thu, 20 Sep 2007 12:33:16 -0400 Subject: [Fedora-directory-commits] admservconsole/help/en footer.html, 1.1, 1.2 tokens.map, 1.1, 1.2 Message-ID: <200709201633.l8KGXGvd030535@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/admservconsole/help/en In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv30516 Modified Files: footer.html tokens.map Log Message: Use less restrictive version of Open Publication License for online help docs. Index: footer.html =================================================================== RCS file: /cvs/dirsec/admservconsole/help/en/footer.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- footer.html 9 Aug 2007 16:04:03 -0000 1.1 +++ footer.html 20 Sep 2007 16:33:13 -0000 1.2 @@ -12,15 +12,6 @@ forth in the Open Publication License, V1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/).

-

- Distribution of substantively modified versions of this document is prohibited - without the explicit permission of the copyright holder. -

-

- Distribution of the work or derivative of the work in any standard (paper) - book form for commercial purposes is prohibited unless prior permission - is obtained from the copyright holder. -


Index: tokens.map =================================================================== RCS file: /cvs/dirsec/admservconsole/help/en/tokens.map,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- tokens.map 9 Aug 2007 16:04:03 -0000 1.1 +++ tokens.map 20 Sep 2007 16:33:13 -0000 1.2 @@ -5,14 +5,8 @@ ; This material may be distributed only subject to the terms and conditions set ; forth in the Open Publication License, V1.0 or later (the latest version is ; presently available at http://www.opencontent.org/openpub/). -; -; Distribution of substantively modified versions of this document is prohibited -; without the explicit permission of the copyright holder. -; -; Distribution of the work or derivative of the work in any standard (paper) -; book form for commercial purposes is prohibited unless prior permission -; is obtained from the copyright holder. ; END COPYRIGHT BLOCK + ; This is the mapping file for Admin Server online help. ; each directory is relative to /manual/en/admin/ From fedora-directory-commits at redhat.com Thu Sep 20 16:54:41 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Thu, 20 Sep 2007 12:54:41 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd libglobs.c, 1.20, 1.21 proto-slap.h, 1.28, 1.29 connection.c, 1.16, 1.17 daemon.c, 1.14, 1.15 task.c, 1.12, 1.13 monitor.c, 1.6, 1.7 psearch.c, 1.8, 1.9 fe.h, 1.7, 1.8 globals.c, 1.6, 1.7 Message-ID: <200709201654.l8KGsfAB032096@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/servers/slapd In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv31746 Modified Files: libglobs.c proto-slap.h connection.c daemon.c task.c monitor.c psearch.c fe.h globals.c Log Message: Resolves: #240897 Summary: CRM 1474928 : ds7.1 db index/vlv not handling a stop-slapd, hangs slapd Description: 1. moved active thread count from ns-slapd to libslapd for the task threads to use. 2. provided APIs to increment/decrement/get the active thread count 3. let task threads increment the active thread count when it's spawned and decrement it when it quits. Index: libglobs.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/libglobs.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- libglobs.c 17 Sep 2007 22:48:10 -0000 1.20 +++ libglobs.c 20 Sep 2007 16:54:38 -0000 1.21 @@ -735,6 +735,29 @@ } /* + * counter for active threads + */ +static PRInt32 active_threads = 0; + +void +g_incr_active_threadcnt() +{ + PR_AtomicIncrement(&active_threads); +} + +void +g_decr_active_threadcnt() +{ + PR_AtomicDecrement(&active_threads); +} + +int +g_get_active_threadcnt() +{ + return (int)active_threads; +} + +/* ** Setting this flag forces the server to shutdown. */ static int slapd_shutdown; Index: proto-slap.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/proto-slap.h,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- proto-slap.h 11 Jul 2007 01:14:05 -0000 1.28 +++ proto-slap.h 20 Sep 2007 16:54:38 -0000 1.29 @@ -203,6 +203,9 @@ int g_get_deftime(); void be_unbindall( Connection *conn, Operation *op); int be_nbackends_public(); +void g_incr_active_threadcnt(); +void g_decr_active_threadcnt(); +int g_get_active_threadcnt(); /* * bind.c Index: connection.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/connection.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- connection.c 14 May 2007 22:04:55 -0000 1.16 +++ connection.c 20 Sep 2007 16:54:38 -0000 1.17 @@ -402,7 +402,7 @@ LDAPDebug( LDAP_DEBUG_ANY, "PR_CreateThread failed, " SLAPI_COMPONENT_NAME_NSPR " error %d (%s)\n", prerr, slapd_pr_strerror( prerr ), 0 ); } else { - PR_AtomicIncrement(&active_threads); + g_incr_active_threadcnt(); } } } @@ -746,7 +746,7 @@ } } } - PR_AtomicDecrement(&active_threads); + g_decr_active_threadcnt(); } static int handle_read_data(Connection *conn,Operation **op, @@ -1948,9 +1948,11 @@ No bother to do so much calcuation, short-cut to non-turbo mode if no activities in passed interval */ new_mode = 0; } else { + double activet = 0.0; connection_find_our_rank(conn,&connection_count, &our_rank); LDAPDebug(LDAP_DEBUG_CONNS,"conn %d turbo rank = %d out of %d conns\n",conn->c_connid,our_rank,connection_count); - threshold_rank = (int)((double)active_threads * ((double)CONN_TURBO_PERCENTILE / 100.0) ); + activet = (double)g_get_active_threadcnt(); + threshold_rank = (int)(activet * ((double)CONN_TURBO_PERCENTILE / 100.0)); /* adjust threshold_rank according number of connections, less turbo threads as more connections, @@ -2023,7 +2025,7 @@ if( op_shutdown ) { LDAPDebug( LDAP_DEBUG_TRACE, "op_thread received shutdown signal\n", 0, 0, 0 ); - PR_AtomicDecrement(&active_threads); + g_decr_active_threadcnt(); return; } @@ -2039,7 +2041,7 @@ case CONN_SHUTDOWN: LDAPDebug( LDAP_DEBUG_TRACE, "op_thread received shutdown signal\n", 0, 0, 0 ); - PR_AtomicDecrement(&active_threads); + g_decr_active_threadcnt(); return; case CONN_FOUND_WORK_TO_DO: default: @@ -2102,7 +2104,7 @@ case CONN_SHUTDOWN: LDAPDebug( LDAP_DEBUG_TRACE, "op_thread received shutdown signal\n", 0, 0, 0 ); - PR_AtomicDecrement(&active_threads); + g_decr_active_threadcnt(); return; default: break; @@ -2333,7 +2335,7 @@ #ifdef _WIN32 LDAPDebug( LDAP_DEBUG_ANY, "slapd shutting down - waiting for %d threads to terminate\n", - active_threads, 0, 0 ); + g_get_active_threadcnt(), 0, 0 ); /* kill off each worker waiting on GetQueuedCompletionStatus */ for ( i = 0; i < max_threads; ++ i ) { Index: daemon.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/daemon.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- daemon.c 3 Aug 2007 22:14:41 -0000 1.14 +++ daemon.c 20 Sep 2007 16:54:38 -0000 1.15 @@ -352,7 +352,7 @@ configure_ns_socket( &ns ); } #endif - + return ns; } @@ -807,15 +807,16 @@ housekeeping_stop(); /* Run this after op_thread_cleanup() logged sth */ #ifndef _WIN32 - if ( active_threads > 0 ) { + threads = g_get_active_threadcnt(); + if ( threads > 0 ) { LDAPDebug( LDAP_DEBUG_ANY, "slapd shutting down - waiting for %d thread%s to terminate\n", - active_threads, ( active_threads > 1 ) ? "s" : "", 0 ); + threads, ( threads > 1 ) ? "s" : "", 0 ); } #endif - threads = active_threads; - while ( active_threads > 0 ) { + threads = g_get_active_threadcnt(); + while ( threads > 0 ) { PRPollDesc xpd; char x; int spe = 0; @@ -845,11 +846,11 @@ /* no data */ } DS_Sleep(PR_INTERVAL_NO_WAIT); - if ( threads != active_threads ) { + if ( threads != g_get_active_threadcnt() ) { LDAPDebug( LDAP_DEBUG_TRACE, "slapd shutting down - waiting for %d threads to terminate\n", - active_threads, 0, 0 ); - threads = active_threads; + g_get_active_threadcnt(), 0, 0 ); + threads = g_get_active_threadcnt(); } } @@ -1247,7 +1248,7 @@ snmp_collator_update(); prevtime = curtime; - num_active_threads = active_threads; + num_active_threads = g_get_active_threadcnt(); if ( (num_active_threads == 0) || (difftime(curtime, housekeeping_fire_time) >= slapd_housekeeping_timer*3) ) { Index: task.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/task.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- task.c 7 Sep 2007 19:08:45 -0000 1.12 +++ task.c 20 Sep 2007 16:54:38 -0000 1.13 @@ -73,9 +73,9 @@ static int task_modify(Slapi_PBlock *pb, Slapi_Entry *e, - Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg); + Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg); static int task_deny(Slapi_PBlock *pb, Slapi_Entry *e, - Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg); + Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg); static int task_generic_destructor(Slapi_Task *task); /* create a new task, fill in DN, and setup modify callback */ @@ -94,16 +94,16 @@ task->task_dn = slapi_ch_strdup(dn); task->destructor = task_generic_destructor; slapi_config_register_callback(SLAPI_OPERATION_MODIFY, DSE_FLAG_PREOP, dn, - LDAP_SCOPE_BASE, "(objectclass=*)", task_modify, (void *)task); + LDAP_SCOPE_BASE, "(objectclass=*)", task_modify, (void *)task); slapi_config_register_callback(SLAPI_OPERATION_DELETE, DSE_FLAG_PREOP, dn, - LDAP_SCOPE_BASE, "(objectclass=*)", task_deny, NULL); + LDAP_SCOPE_BASE, "(objectclass=*)", task_deny, NULL); /* don't add entries under this one */ #if 0 /* don't know why, but this doesn't work. it makes the current add * operation fail. :( */ slapi_config_register_callback(SLAPI_OPERATION_ADD, DSE_FLAG_PREOP, dn, - LDAP_SCOPE_SUBTREE, "(objectclass=*)", task_deny, NULL); + LDAP_SCOPE_SUBTREE, "(objectclass=*)", task_deny, NULL); #endif return task; @@ -139,11 +139,11 @@ } slapi_config_remove_callback(SLAPI_OPERATION_MODIFY, DSE_FLAG_PREOP, - task->task_dn, LDAP_SCOPE_BASE, "(objectclass=*)", task_modify); + task->task_dn, LDAP_SCOPE_BASE, "(objectclass=*)", task_modify); slapi_config_remove_callback(SLAPI_OPERATION_DELETE, DSE_FLAG_PREOP, - task->task_dn, LDAP_SCOPE_BASE, "(objectclass=*)", task_deny); + task->task_dn, LDAP_SCOPE_BASE, "(objectclass=*)", task_deny); slapi_delete_internal_set_pb(pb, task->task_dn, NULL, NULL, - (void *)plugin_get_default_component_id(), 0); + (void *)plugin_get_default_component_id(), 0); slapi_delete_internal_pb(pb); slapi_pblock_destroy(pb); @@ -175,7 +175,7 @@ void slapi_destroy_task(void *arg) { - destroy_task(1, arg); + destroy_task(1, arg); } /********** some useful helper functions **********/ @@ -204,7 +204,7 @@ int ret = 0; slapi_search_internal_set_pb(pb, dn, LDAP_SCOPE_BASE, "(objectclass=*)", - NULL, 0, NULL, NULL, (void *)plugin_get_default_component_id(), 0); + NULL, 0, NULL, NULL, (void *)plugin_get_default_component_id(), 0); slapi_search_internal_pb(pb); slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_RESULT, &ret); if (ret != LDAP_SUCCESS) { @@ -225,17 +225,17 @@ static void modify_internal_entry(char *dn, LDAPMod **mods) { Slapi_PBlock pb; - Slapi_Operation *op; + Slapi_Operation *op; int ret = 0; int tries = 0; int dont_write_file = 1; do { - pblock_init(&pb); + pblock_init(&pb); - slapi_modify_internal_set_pb(&pb, dn, mods, NULL, NULL, - (void *)plugin_get_default_component_id(), 0); + slapi_modify_internal_set_pb(&pb, dn, mods, NULL, NULL, + (void *)plugin_get_default_component_id(), 0); /* all modifications to the cn=tasks subtree are transient -- * we erase them all when the server starts up next time, so there's @@ -243,10 +243,10 @@ */ slapi_pblock_set(&pb, SLAPI_DSE_DONT_WRITE_WHEN_ADDING, &dont_write_file); - /* Make sure these mods are not logged in audit or changelog */ - slapi_pblock_get(&pb, SLAPI_OPERATION, &op); - operation_set_flag(op, OP_FLAG_ACTION_NOLOG); - + /* Make sure these mods are not logged in audit or changelog */ + slapi_pblock_get(&pb, SLAPI_OPERATION, &op); + operation_set_flag(op, OP_FLAG_ACTION_NOLOG); + slapi_modify_internal_pb(&pb); slapi_pblock_get(&pb, SLAPI_PLUGIN_INTOP_RESULT, &ret); if (ret != LDAP_SUCCESS) { @@ -257,13 +257,13 @@ if (tries == 3) { LDAPDebug(LDAP_DEBUG_ANY, "WARNING: can't modify task " "entry '%s'; %s (%d)\n", dn, ldap_err2string(ret), ret); - pblock_done(&pb); + pblock_done(&pb); return; } DS_Sleep(PR_SecondsToInterval(1)); } - pblock_done(&pb); + pblock_done(&pb); } while (ret != LDAP_SUCCESS); } @@ -283,9 +283,9 @@ va_list ap; if (! task->task_status) - task->task_status = (char *)slapi_ch_malloc(10 * LOG_BUFFER); + task->task_status = (char *)slapi_ch_malloc(10 * LOG_BUFFER); if (! task->task_status) - return; /* out of memory? */ + return; /* out of memory? */ va_start(ap, format); PR_vsnprintf(task->task_status, (10 * LOG_BUFFER), format, ap); @@ -308,22 +308,22 @@ len = 2 + strlen(buffer) + (task->task_log ? strlen(task->task_log) : 0); if ((len > MAX_SCROLLBACK_BUFFER) && task->task_log) { - size_t i; - char *newbuf; + size_t i; + char *newbuf; - /* start from middle of buffer, and find next linefeed */ - i = strlen(task->task_log)/2; - while (task->task_log[i] && (task->task_log[i] != '\n')) - i++; - if (task->task_log[i]) - i++; - len = strlen(task->task_log) - i + 2 + strlen(buffer); - newbuf = (char *)slapi_ch_malloc(len); - if (! newbuf) - return; /* out of memory? */ - strcpy(newbuf, task->task_log + i); - slapi_ch_free((void **)&task->task_log); - task->task_log = newbuf; + /* start from middle of buffer, and find next linefeed */ + i = strlen(task->task_log)/2; + while (task->task_log[i] && (task->task_log[i] != '\n')) + i++; + if (task->task_log[i]) + i++; + len = strlen(task->task_log) - i + 2 + strlen(buffer); + newbuf = (char *)slapi_ch_malloc(len); + if (! newbuf) + return; /* out of memory? */ + strcpy(newbuf, task->task_log + i); + slapi_ch_free((void **)&task->task_log); + task->task_log = newbuf; } else { if (! task->task_log) { task->task_log = (char *)slapi_ch_malloc(len); @@ -331,8 +331,8 @@ } else { task->task_log = (char *)slapi_ch_realloc(task->task_log, len); } - if (! task->task_log) - return; /* out of memory? */ + if (! task->task_log) + return; /* out of memory? */ } if (task->task_log[0]) @@ -359,7 +359,7 @@ static int task_deny(Slapi_PBlock *pb, Slapi_Entry *e, - Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) + Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) { /* internal operations (conn=NULL) are allowed to do whatever they want */ if (pb->pb_conn == NULL) { @@ -372,7 +372,7 @@ } static int task_modify(Slapi_PBlock *pb, Slapi_Entry *e, - Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) + Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) { Slapi_Task *task = (Slapi_Task *)arg; LDAPMod **mods; @@ -420,7 +420,7 @@ } static int task_import_add(Slapi_PBlock *pb, Slapi_Entry *e, - Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) + Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) { Slapi_Attr *attr; Slapi_Value *val = NULL; @@ -433,7 +433,7 @@ Slapi_PBlock mypb; Slapi_Task *task; char *nameFrombe_name = NULL; - const char *encrypt_on_import = NULL; + const char *encrypt_on_import = NULL; if ((cn = fetch_attr(e, "cn", NULL)) == NULL) { *returncode = LDAP_OBJECT_CLASS_VIOLATION; @@ -465,40 +465,40 @@ char **instances, **ip; int counter; - if (slapi_lookup_instance_name_by_suffixes(include, exclude, - &instances) < 0) { - LDAPDebug(LDAP_DEBUG_ANY, - "ERROR: No backend instance is specified.\n", 0, 0, 0); - *returncode = LDAP_OBJECT_CLASS_VIOLATION; - return SLAPI_DSE_CALLBACK_ERROR; - } + if (slapi_lookup_instance_name_by_suffixes(include, exclude, + &instances) < 0) { + LDAPDebug(LDAP_DEBUG_ANY, + "ERROR: No backend instance is specified.\n", 0, 0, 0); + *returncode = LDAP_OBJECT_CLASS_VIOLATION; + return SLAPI_DSE_CALLBACK_ERROR; + } if (instances) { for (ip = instances, counter = 0; ip && *ip; ip++, counter++) ; - if (counter == 1){ - instance_name = *instances; - nameFrombe_name = *instances; - - } - else if (counter == 0) { - LDAPDebug(LDAP_DEBUG_ANY, - "ERROR: No backend instance is specified.\n", 0, 0, 0); - *returncode = LDAP_OBJECT_CLASS_VIOLATION; - return SLAPI_DSE_CALLBACK_ERROR; - } else { - LDAPDebug(LDAP_DEBUG_ANY, - "ERROR: Multiple backend instances are specified: " - "%s, %s, ...\n", instances[0], instances[1], 0); - *returncode = LDAP_OBJECT_CLASS_VIOLATION; - return SLAPI_DSE_CALLBACK_ERROR; - } - } else { - *returncode = LDAP_OBJECT_CLASS_VIOLATION; - return SLAPI_DSE_CALLBACK_ERROR; - } - } + if (counter == 1){ + instance_name = *instances; + nameFrombe_name = *instances; + + } + else if (counter == 0) { + LDAPDebug(LDAP_DEBUG_ANY, + "ERROR: No backend instance is specified.\n", 0, 0, 0); + *returncode = LDAP_OBJECT_CLASS_VIOLATION; + return SLAPI_DSE_CALLBACK_ERROR; + } else { + LDAPDebug(LDAP_DEBUG_ANY, + "ERROR: Multiple backend instances are specified: " + "%s, %s, ...\n", instances[0], instances[1], 0); + *returncode = LDAP_OBJECT_CLASS_VIOLATION; + return SLAPI_DSE_CALLBACK_ERROR; + } + } else { + *returncode = LDAP_OBJECT_CLASS_VIOLATION; + return SLAPI_DSE_CALLBACK_ERROR; + } + } /* lookup the backend */ be = slapi_be_select_by_instance_name(instance_name); @@ -576,9 +576,9 @@ mypb.pb_ldif_exclude = exclude; mypb.pb_task = task; mypb.pb_task_flags = TASK_RUNNING_AS_TASK; - if (NULL != encrypt_on_import && 0 == strcasecmp(encrypt_on_import, "true") ) { - mypb.pb_ldif_encrypt = 1; - } + if (NULL != encrypt_on_import && 0 == strcasecmp(encrypt_on_import, "true") ) { + mypb.pb_ldif_encrypt = 1; + } rv = (*mypb.pb_plugin->plg_ldif2db)(&mypb); if (rv == 0) { @@ -615,6 +615,7 @@ int count; Slapi_Task *task = pb->pb_task; + g_incr_active_threadcnt(); for (count = 0, inp = instance_names; *inp; inp++, count++) ; task->task_work = count; @@ -623,7 +624,7 @@ slapi_task_status_changed(task); for (inp = instance_names; *inp; inp++) { - int release_me = 0; + int release_me = 0; /* lookup the backend */ be = slapi_be_select_by_instance_name((const char *)*inp); if (be == NULL) { @@ -639,39 +640,39 @@ /* ldif_file name for each? */ if (pb->pb_ldif_printkey & EXPORT_APPENDMODE) { - if (inp == instance_names) { /* first export */ - pb->pb_ldif_printkey |= EXPORT_APPENDMODE_1; - } else { - pb->pb_ldif_printkey &= ~EXPORT_APPENDMODE_1; - } - } else { - if (strcmp(ldif_file, "-")) { /* not '-' */ - char *p; + if (inp == instance_names) { /* first export */ + pb->pb_ldif_printkey |= EXPORT_APPENDMODE_1; + } else { + pb->pb_ldif_printkey &= ~EXPORT_APPENDMODE_1; + } + } else { + if (strcmp(ldif_file, "-")) { /* not '-' */ + char *p; #if defined( _WIN32 ) - char sep = '\\'; - if (NULL != strchr(ldif_file, '/')) - sep = '/'; + char sep = '\\'; + if (NULL != strchr(ldif_file, '/')) + sep = '/'; #else - char sep = '/'; + char sep = '/'; #endif - this_ldif_file = (char *)slapi_ch_malloc(strlen(ldif_file) + + this_ldif_file = (char *)slapi_ch_malloc(strlen(ldif_file) + strlen(*inp) + 2); - p = strrchr(ldif_file, sep); - if (NULL == p) { - sprintf(this_ldif_file, "%s_%s", *inp, ldif_file); - } else { - char *q; - - q = p + 1; - *p = '\0'; - sprintf(this_ldif_file, "%s%c%s_%s", - ldif_file, sep, *inp, q); - *p = sep; - } - pb->pb_ldif_file = this_ldif_file; - release_me = 1; - } - } + p = strrchr(ldif_file, sep); + if (NULL == p) { + sprintf(this_ldif_file, "%s_%s", *inp, ldif_file); + } else { + char *q; + + q = p + 1; + *p = '\0'; + sprintf(this_ldif_file, "%s%c%s_%s", + ldif_file, sep, *inp, q); + *p = sep; + } + pb->pb_ldif_file = this_ldif_file; + release_me = 1; + } + } slapi_task_log_notice(task, "Beginning export of '%s'", *inp); LDAPDebug(LDAP_DEBUG_ANY, "Beginning export of '%s'\n", *inp, 0, 0); @@ -714,10 +715,11 @@ task->task_exitcode = rv; task->task_state = SLAPI_TASK_FINISHED; slapi_task_status_changed(task); + g_decr_active_threadcnt(); } static int task_export_add(Slapi_PBlock *pb, Slapi_Entry *e, - Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) + Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) { Slapi_Attr *attr; Slapi_Value *val = NULL; @@ -748,16 +750,16 @@ goto out; } - decrypt_on_export = fetch_attr(e, "nsExportDecrypt", NULL); + decrypt_on_export = fetch_attr(e, "nsExportDecrypt", NULL); /* nsInstances -- from here on, memory has been allocated */ if (slapi_entry_attr_find(e, "nsInstance", &attr) == 0) { - for (idx = slapi_attr_first_value(attr, &val); + for (idx = slapi_attr_first_value(attr, &val); idx >= 0; idx = slapi_attr_next_value(attr, idx, &val)) { charray_add(&instance_names, slapi_ch_strdup(slapi_value_get_string(val))); instance_cnt++; - } + } } /* include/exclude suffixes */ @@ -879,7 +881,7 @@ } if (be->be_database->plg_db2ldif == NULL) { LDAPDebug(LDAP_DEBUG_ANY, "ERROR: no db2ldif function defined for " - "backend %s\n", be->be_database->plg_name, 0, 0); + "backend %s\n", be->be_database->plg_name, 0, 0); *returncode = LDAP_UNWILLING_TO_PERFORM; rv = SLAPI_DSE_CALLBACK_ERROR; goto out; @@ -914,14 +916,14 @@ mypb->pb_instance_name = (char *)instance_names; mypb->pb_task = task; mypb->pb_task_flags = TASK_RUNNING_AS_TASK; - if (NULL != decrypt_on_export && 0 == strcasecmp(decrypt_on_export, "true") ) { - mypb->pb_ldif_encrypt = 1; - } + if (NULL != decrypt_on_export && 0 == strcasecmp(decrypt_on_export, "true") ) { + mypb->pb_ldif_encrypt = 1; + } /* start the export as a separate thread */ thread = PR_CreateThread(PR_USER_THREAD, task_export_thread, - (void *)mypb, PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, - PR_UNJOINABLE_THREAD, SLAPD_DEFAULT_THREAD_STACKSIZE); + (void *)mypb, PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, + PR_UNJOINABLE_THREAD, SLAPD_DEFAULT_THREAD_STACKSIZE); if (thread == NULL) { LDAPDebug(LDAP_DEBUG_ANY, "unable to create ldbm2ldif thread!\n", 0, 0, 0); @@ -955,6 +957,7 @@ Slapi_Task *task = pb->pb_task; int rv; + g_incr_active_threadcnt(); task->task_work = 1; task->task_progress = 0; task->task_state = SLAPI_TASK_RUNNING; @@ -983,10 +986,11 @@ slapi_ch_free((void **)&pb->pb_seq_val); slapi_pblock_destroy(pb); + g_decr_active_threadcnt(); } static int task_backup_add(Slapi_PBlock *pb, Slapi_Entry *e, - Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) + Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) { Slapi_Backend *be = NULL; PRThread *thread = NULL; @@ -1070,8 +1074,8 @@ /* start the backup as a separate thread */ thread = PR_CreateThread(PR_USER_THREAD, task_backup_thread, - (void *)mypb, PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, - PR_UNJOINABLE_THREAD, SLAPD_DEFAULT_THREAD_STACKSIZE); + (void *)mypb, PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, + PR_UNJOINABLE_THREAD, SLAPD_DEFAULT_THREAD_STACKSIZE); if (thread == NULL) { LDAPDebug(LDAP_DEBUG_ANY, "unable to create backup thread!\n", 0, 0, 0); @@ -1099,6 +1103,7 @@ Slapi_Task *task = pb->pb_task; int rv; + g_incr_active_threadcnt(); task->task_work = 1; task->task_progress = 0; task->task_state = SLAPI_TASK_RUNNING; @@ -1127,10 +1132,11 @@ slapi_ch_free((void **)&pb->pb_seq_val); slapi_pblock_destroy(pb); + g_decr_active_threadcnt(); } static int task_restore_add(Slapi_PBlock *pb, Slapi_Entry *e, - Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) + Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) { Slapi_Backend *be = NULL; const char *cn = NULL; @@ -1222,8 +1228,8 @@ /* start the restore as a separate thread */ thread = PR_CreateThread(PR_USER_THREAD, task_restore_thread, - (void *)mypb, PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, - PR_UNJOINABLE_THREAD, SLAPD_DEFAULT_THREAD_STACKSIZE); + (void *)mypb, PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, + PR_UNJOINABLE_THREAD, SLAPD_DEFAULT_THREAD_STACKSIZE); if (thread == NULL) { LDAPDebug(LDAP_DEBUG_ANY, "unable to create restore thread!\n", 0, 0, 0); @@ -1251,6 +1257,7 @@ Slapi_Task *task = pb->pb_task; int rv; + g_incr_active_threadcnt(); task->task_work = 1; task->task_progress = 0; task->task_state = SLAPI_TASK_RUNNING; @@ -1271,10 +1278,11 @@ charray_free(pb->pb_db2index_attrs); slapi_ch_free((void **)&pb->pb_instance_name); slapi_pblock_destroy(pb); + g_decr_active_threadcnt(); } static int task_index_add(Slapi_PBlock *pb, Slapi_Entry *e, - Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) + Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) { const char *instance_name; const char *cn; @@ -1317,7 +1325,7 @@ /* normal indexes */ if (slapi_entry_attr_find(e, "nsIndexAttribute", &attr) == 0) { - for (idx = slapi_attr_first_value(attr, &val); + for (idx = slapi_attr_first_value(attr, &val); idx >= 0; idx = slapi_attr_next_value(attr, idx, &val)) { const char *indexname = slapi_value_get_string(val); char *index = slapi_ch_smprintf("t%s", indexname); @@ -1325,12 +1333,12 @@ if (index != NULL) { charray_add(&indexlist, index); } - } + } } /* vlv indexes */ if (slapi_entry_attr_find(e, "nsIndexVlvAttribute", &attr) == 0) { - for (idx = slapi_attr_first_value(attr, &val); + for (idx = slapi_attr_first_value(attr, &val); idx >= 0; idx = slapi_attr_next_value(attr, idx, &val)) { const char *indexname = slapi_value_get_string(val); char *index = slapi_ch_smprintf("T%s", indexname); @@ -1338,7 +1346,7 @@ if (index != NULL) { charray_add(&indexlist, index); } - } + } } if (NULL == indexlist) { @@ -1375,8 +1383,8 @@ /* start the db2index as a separate thread */ thread = PR_CreateThread(PR_USER_THREAD, task_index_thread, - (void *)mypb, PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, - PR_UNJOINABLE_THREAD, SLAPD_DEFAULT_THREAD_STACKSIZE); + (void *)mypb, PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, + PR_UNJOINABLE_THREAD, SLAPD_DEFAULT_THREAD_STACKSIZE); if (thread == NULL) { LDAPDebug(LDAP_DEBUG_ANY, "unable to create index thread!\n", 0, 0, 0); @@ -1576,62 +1584,62 @@ */ void task_cleanup(void) { - Slapi_PBlock *pb = slapi_pblock_new(); - Slapi_Entry **entries = NULL; - int ret = 0, i, x; - Slapi_DN *rootDN; - - slapi_search_internal_set_pb(pb, TASK_BASE_DN, LDAP_SCOPE_SUBTREE, - "(objectclass=*)", NULL, 0, NULL, NULL, - (void *)plugin_get_default_component_id(), 0); - slapi_search_internal_pb(pb); - slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_RESULT, &ret); - if (ret != LDAP_SUCCESS) { - LDAPDebug(LDAP_DEBUG_ANY, "WARNING: entire cn=tasks tree seems to " - "be AWOL!\n", 0, 0, 0); - slapi_pblock_destroy(pb); - return; - } - - slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES, &entries); - if (NULL == entries) { - LDAPDebug(LDAP_DEBUG_ANY, "WARNING: entire cn=tasks tree seems to " - "be AWOL!\n", 0, 0, 0); - slapi_pblock_destroy(pb); - return; - } - - rootDN = slapi_sdn_new_dn_byval(TASK_BASE_DN); - - /* rotate through entries, skipping the base dn */ - for (i = 0; entries[i] != NULL; i++) { - const Slapi_DN *sdn = slapi_entry_get_sdn_const(entries[i]); - Slapi_PBlock *mypb; - Slapi_Operation *op; - - if (slapi_sdn_compare(sdn, rootDN) == 0) - continue; - - mypb = slapi_pblock_new(); - if (mypb == NULL) { - continue; - } - slapi_delete_internal_set_pb(mypb, slapi_sdn_get_dn(sdn), NULL, NULL, - plugin_get_default_component_id(), 0); - - /* Make sure these deletes don't appear in the audit and change logs */ - slapi_pblock_get(mypb, SLAPI_OPERATION, &op); - operation_set_flag(op, OP_FLAG_ACTION_NOLOG); - - x = 1; - slapi_pblock_set(mypb, SLAPI_DSE_DONT_WRITE_WHEN_ADDING, &x); - slapi_delete_internal_pb(mypb); - slapi_pblock_destroy(mypb); - } - - slapi_sdn_free(&rootDN); - slapi_free_search_results_internal(pb); - slapi_pblock_destroy(pb); + Slapi_PBlock *pb = slapi_pblock_new(); + Slapi_Entry **entries = NULL; + int ret = 0, i, x; + Slapi_DN *rootDN; + + slapi_search_internal_set_pb(pb, TASK_BASE_DN, LDAP_SCOPE_SUBTREE, + "(objectclass=*)", NULL, 0, NULL, NULL, + (void *)plugin_get_default_component_id(), 0); + slapi_search_internal_pb(pb); + slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_RESULT, &ret); + if (ret != LDAP_SUCCESS) { + LDAPDebug(LDAP_DEBUG_ANY, "WARNING: entire cn=tasks tree seems to " + "be AWOL!\n", 0, 0, 0); + slapi_pblock_destroy(pb); + return; + } + + slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES, &entries); + if (NULL == entries) { + LDAPDebug(LDAP_DEBUG_ANY, "WARNING: entire cn=tasks tree seems to " + "be AWOL!\n", 0, 0, 0); + slapi_pblock_destroy(pb); + return; + } + + rootDN = slapi_sdn_new_dn_byval(TASK_BASE_DN); + + /* rotate through entries, skipping the base dn */ + for (i = 0; entries[i] != NULL; i++) { + const Slapi_DN *sdn = slapi_entry_get_sdn_const(entries[i]); + Slapi_PBlock *mypb; + Slapi_Operation *op; + + if (slapi_sdn_compare(sdn, rootDN) == 0) + continue; + + mypb = slapi_pblock_new(); + if (mypb == NULL) { + continue; + } + slapi_delete_internal_set_pb(mypb, slapi_sdn_get_dn(sdn), NULL, NULL, + plugin_get_default_component_id(), 0); + + /* Make sure these deletes don't appear in the audit and change logs */ + slapi_pblock_get(mypb, SLAPI_OPERATION, &op); + operation_set_flag(op, OP_FLAG_ACTION_NOLOG); + + x = 1; + slapi_pblock_set(mypb, SLAPI_DSE_DONT_WRITE_WHEN_ADDING, &x); + slapi_delete_internal_pb(mypb); + slapi_pblock_destroy(mypb); + } + + slapi_sdn_free(&rootDN); + slapi_free_search_results_internal(pb); + slapi_pblock_destroy(pb); } /* name is, for exmaple, "import" */ @@ -1639,7 +1647,7 @@ { char *dn = NULL; Slapi_PBlock *pb = NULL; - Slapi_Operation *op; + Slapi_Operation *op; LDAPMod *mods[3]; LDAPMod mod[3]; const char *objectclass[3]; @@ -1676,10 +1684,10 @@ plugin_get_default_component_id(), 0); x = 1; slapi_pblock_set(pb, SLAPI_DSE_DONT_WRITE_WHEN_ADDING, &x); - /* Make sure these adds don't appear in the audit and change logs */ - slapi_pblock_get(pb, SLAPI_OPERATION, &op); - operation_set_flag(op, OP_FLAG_ACTION_NOLOG); - + /* Make sure these adds don't appear in the audit and change logs */ + slapi_pblock_get(pb, SLAPI_OPERATION, &op); + operation_set_flag(op, OP_FLAG_ACTION_NOLOG); + slapi_add_internal_pb(pb); slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_RESULT, &x); if ((x != LDAP_SUCCESS) && (x != LDAP_ALREADY_EXISTS)) { @@ -1692,12 +1700,12 @@ /* register add callback */ slapi_config_register_callback(SLAPI_OPERATION_ADD, DSE_FLAG_PREOP, - dn, LDAP_SCOPE_SUBTREE, "(objectclass=*)", func, NULL); + dn, LDAP_SCOPE_SUBTREE, "(objectclass=*)", func, NULL); /* deny modify/delete of the root task entry */ slapi_config_register_callback(SLAPI_OPERATION_MODIFY, DSE_FLAG_PREOP, - dn, LDAP_SCOPE_BASE, "(objectclass=*)", task_deny, NULL); + dn, LDAP_SCOPE_BASE, "(objectclass=*)", task_deny, NULL); slapi_config_register_callback(SLAPI_OPERATION_DELETE, DSE_FLAG_PREOP, - dn, LDAP_SCOPE_BASE, "(objectclass=*)", task_deny, NULL); + dn, LDAP_SCOPE_BASE, "(objectclass=*)", task_deny, NULL); ret = 0; Index: monitor.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/monitor.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- monitor.c 10 Nov 2006 23:45:40 -0000 1.6 +++ monitor.c 20 Sep 2007 16:54:38 -0000 1.7 @@ -86,7 +86,7 @@ attrlist_replace( &e->e_attrs, "version", vals ); slapi_ch_free( (void **) &val.bv_val ); - sprintf( buf, "%d", active_threads ); + sprintf( buf, "%d", g_get_active_threadcnt() ); val.bv_val = buf; val.bv_len = strlen( buf ); attrlist_replace( &e->e_attrs, "threads", vals ); Index: psearch.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/psearch.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- psearch.c 10 Nov 2006 23:45:40 -0000 1.8 +++ psearch.c 20 Sep 2007 16:54:38 -0000 1.9 @@ -295,7 +295,7 @@ char **pbattrs = NULL; int conn_acq_flag = 0; - PR_AtomicIncrement( &active_threads ); + g_incr_active_threadcnt(); /* need to acquire a reference to this connection so that it will not be released or cleaned up out from under us */ @@ -443,7 +443,7 @@ pe_ch_free( &peq ); } slapi_ch_free((void **) &ps ); - PR_AtomicDecrement(&active_threads); + g_decr_active_threadcnt(); } Index: fe.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/fe.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- fe.h 3 Aug 2007 22:14:41 -0000 1.7 +++ fe.h 20 Sep 2007 16:54:38 -0000 1.8 @@ -56,7 +56,6 @@ #endif /* DONT_DECLARE_SLAPD_LDAP_DEBUG */ #endif #endif -extern int active_threads; extern PRInt32 ops_initiated; extern PRInt32 ops_completed; extern PRLock *ops_mutex; Index: globals.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/globals.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- globals.c 10 Nov 2006 23:45:40 -0000 1.6 +++ globals.c 20 Sep 2007 16:54:38 -0000 1.7 @@ -88,14 +88,12 @@ /* * global variables that need mutex protection */ -int active_threads; PRInt32 ops_initiated; PRInt32 ops_completed; PRLock *ops_mutex; int num_conns; PRLock *num_conns_mutex; - /* DEC/COMPAQ has released a patch for 4.0d (e?) which will speed up malloc/free considerably in multithreaded multiprocessor From fedora-directory-commits at redhat.com Thu Sep 20 16:58:43 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Thu, 20 Sep 2007 12:58:43 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm ldif2ldbm.c, 1.12, 1.13 vlv_srch.c, 1.7, 1.8 Message-ID: <200709201658.l8KGwhV4032424@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv32368/back-ldbm Modified Files: ldif2ldbm.c vlv_srch.c Log Message: Resolves: #243820 Summary: Online browsing indexing hangs Description: 1. adding more shutdown checks in the indexing code to achieve the swift shutdown even in the long running browsing indexing. 2. in the error case, cleaning up the index file. 3. found minor memory leaks. Index: ldif2ldbm.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/ldif2ldbm.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- ldif2ldbm.c 13 Dec 2006 22:21:22 -0000 1.12 +++ ldif2ldbm.c 20 Sep 2007 16:58:41 -0000 1.13 @@ -1264,7 +1264,7 @@ int numvlv = 0; int return_value = -1; ID temp_id; - int i, j; + int i, j, vlvidx; ID lastid; struct backentry *ep; char *type; @@ -1277,6 +1277,9 @@ int index_aid = 0; /* index ancestorid */ LDAPDebug( LDAP_DEBUG_TRACE, "=> ldbm_back_ldbm2index\n", 0, 0, 0 ); + if ( g_get_shutdown() || c_get_shutdown() ) { + return -1; + } slapi_pblock_get(pb, SLAPI_BACKEND_INSTANCE_NAME, &instance_name); slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &li); @@ -1387,6 +1390,10 @@ slapi_pblock_get(pb, SLAPI_DB2INDEX_ATTRS, &attrs); for (i = 0; attrs[i] != NULL; i++) { + if ( g_get_shutdown() || c_get_shutdown() ) { + ret = -1; + goto out; + } switch(attrs[i][0]) { case 't': /* attribute type to index */ db2index_add_indexed_attr(be, attrs[i]); @@ -1495,6 +1502,10 @@ */ vlv_acquire_lock(be); while (1) { + if ( g_get_shutdown() || c_get_shutdown() ) { + ret = -1; + goto out; + } if (idl) { if (idindex >= idl->b_nids) break; @@ -1597,6 +1608,10 @@ slapi_attr_get_type( attr, &type ); for ( j = 0; indexAttrs[j] != NULL; j++ ) { + if ( g_get_shutdown() || c_get_shutdown() ) { + ret = -1; + goto out; + } if (slapi_attr_type_cmp(indexAttrs[j], type, SLAPI_TYPE_CMP_SUBTYPE) == 0 ) { back_txn txn; @@ -1679,9 +1694,13 @@ /* * Update the Virtual List View indexes */ - for ( j = 0; jinst_name, indexAttrs[j], 0); + inst->inst_name, indexAttrs[vlvidx], 0); LDAPDebug(LDAP_DEBUG_ANY, "%s: Error %d: %s\n", inst->inst_name, rc, dblayer_strerror(rc)); @@ -1701,20 +1720,20 @@ slapi_task_log_notice(task, "%s: ERROR: failed to begin txn for update index '%s' " "(err %d: %s)", inst->inst_name, - indexAttrs[j], rc, dblayer_strerror(rc)); + indexAttrs[vlvidx], rc, dblayer_strerror(rc)); } ret = -2; goto out; } } - vlv_update_index(pvlv[j], &txn, li, pb, NULL, ep); + vlv_update_index(pvlv[vlvidx], &txn, li, pb, NULL, ep); if (!run_from_cmdline) { rc = dblayer_txn_commit(li, &txn); if (0 != rc) { LDAPDebug(LDAP_DEBUG_ANY, "%s: ERROR: failed to commit txn for update index '%s'\n", - inst->inst_name, indexAttrs[j], 0); + inst->inst_name, indexAttrs[vlvidx], 0); LDAPDebug(LDAP_DEBUG_ANY, "%s: Error %d: %s\n", inst->inst_name, rc, dblayer_strerror(rc)); @@ -1722,7 +1741,7 @@ slapi_task_log_notice(task, "%s: ERROR: failed to commit txn for update index '%s' " "(err %d: %s)", inst->inst_name, - indexAttrs[j], rc, dblayer_strerror(rc)); + indexAttrs[vlvidx], rc, dblayer_strerror(rc)); } ret = -2; goto out; @@ -1810,6 +1829,16 @@ } else { dbc->c_close(dbc); } + if (ret < 0) {/* error case: undo vlv indexing */ + struct vlvIndex *p = NULL; + /* if jumped to out due to an error, vlv lock has not been released */ + vlv_release_lock(be); + for ( vlvidx = 0; vlvidx < numvlv; vlvidx++ ) { + p = pvlv[vlvidx]; + vlvIndex_go_offline(p, be); + vlvIndex_delete(&p); + } + } dblayer_release_id2entry( be, db ); instance_set_not_busy(inst); Index: vlv_srch.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/vlv_srch.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- vlv_srch.c 10 Nov 2006 23:45:39 -0000 1.7 +++ vlv_srch.c 20 Sep 2007 16:58:41 -0000 1.8 @@ -245,9 +245,9 @@ for(pi= (*ppvs)->vlv_index;pi!=NULL;) { ni= pi->vlv_next; - if(pi->vlv_be != NULL) { - vlvIndex_go_offline(pi,pi->vlv_be); - } + if(pi->vlv_be != NULL) { + vlvIndex_go_offline(pi,pi->vlv_be); + } vlvIndex_delete(&pi); pi= ni; } @@ -569,6 +569,8 @@ } ldap_free_sort_keylist((*ppvs)->vlv_sortkey); attrinfo_delete(&((*ppvs)->vlv_attrinfo)); + slapi_ch_free((void**)&((*ppvs)->vlv_name)); + slapi_ch_free((void**)&((*ppvs)->vlv_filename)); slapi_ch_free((void**)&((*ppvs)->vlv_mrpb)); slapi_ch_free((void**)&((*ppvs)->vlv_syntax_plugin)); PR_DestroyLock((*ppvs)->vlv_indexlength_lock); From fedora-directory-commits at redhat.com Thu Sep 20 20:27:36 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Thu, 20 Sep 2007 16:27:36 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/admin/src/scripts DSMigration.pm.in, 1.14, 1.15 Message-ID: <200709202027.l8KKRaMv005999@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/admin/src/scripts In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv5955/ldapserver/ldap/admin/src/scripts Modified Files: DSMigration.pm.in Log Message: Resolves: bug 262021 Bug Description: Migration script does not migrate nsDS5ReplicaCredentials correctly. Reviewed by: nhosoi (Thanks!) Fix Description: We still need to be able to decrypt passwords using the broken method. I guess it works on Solaris and HP because the values are already in network byte order. But when the values were encrypted on x86, they were encrypted the wrong way. It is safe to use MIGRATE_BROKEN_PWD on Solaris and HP because it is essentially a no-op. But this allows us to decrypt x86 passwords and store them correctly. Platforms tested: RHEL4 i386, RHEL5 x86_64 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: DSMigration.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/DSMigration.pm.in,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- DSMigration.pm.in 14 Sep 2007 21:24:12 -0000 1.14 +++ DSMigration.pm.in 20 Sep 2007 20:27:34 -0000 1.15 @@ -180,7 +180,9 @@ my ($ent, $attr, $mig, $inst) = @_; my $oldval = $ent->getValues($attr); debug(3, "Executing @bindir@/migratecred -o $mig->{actualsroot}/$inst -n @instconfigdir@/$inst -c \'$oldval\' . . .\n"); + $ENV{MIGRATE_BROKEN_PWD} = "1"; # passwords prior to 8.0 were encrypted incorrectly my $newval = `@bindir@/migratecred -o $mig->{actualsroot}/$inst -n @instconfigdir@/$inst -c \'$oldval\'`; + delete $ENV{MIGRATE_BROKEN_PWD}; # clear the flag debug(3, "Converted old value [$oldval] to new value [$newval] for attr $attr in entry ", $ent->getDN(), "\n"); return $newval; } From fedora-directory-commits at redhat.com Thu Sep 20 20:27:37 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Thu, 20 Sep 2007 16:27:37 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/rever des.c, 1.7, 1.8 Message-ID: <200709202027.l8KKRbkP006006@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/rever In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv5955/ldapserver/ldap/servers/plugins/rever Modified Files: des.c Log Message: Resolves: bug 262021 Bug Description: Migration script does not migrate nsDS5ReplicaCredentials correctly. Reviewed by: nhosoi (Thanks!) Fix Description: We still need to be able to decrypt passwords using the broken method. I guess it works on Solaris and HP because the values are already in network byte order. But when the values were encrypted on x86, they were encrypted the wrong way. It is safe to use MIGRATE_BROKEN_PWD on Solaris and HP because it is essentially a no-op. But this allows us to decrypt x86 passwords and store them correctly. Platforms tested: RHEL4 i386, RHEL5 x86_64 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: des.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/rever/des.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- des.c 10 Nov 2006 23:45:23 -0000 1.7 +++ des.c 20 Sep 2007 20:27:34 -0000 1.8 @@ -478,9 +478,21 @@ return err; } +/* + The UUID name based generator was broken on x86 platforms. We use + this to generate the password encryption key. During migration, + we have to fix this so we can use the fixed generator. The env. + var USE_BROKEN_UUID tells the uuid generator to use the old + broken method to create the UUID. That will allow us to decrypt + the password to the correct clear text, then we can turn off + the broken method and use the fixed method to encrypt the + password. +*/ char * migrateCredentials(char *oldpath, char *newpath, char *oldcred) { + static char *useBrokenUUID = "USE_BROKEN_UUID=1"; + static char *disableBrokenUUID = "USE_BROKEN_UUID"; char *plain = NULL; char *cipher = NULL; @@ -489,8 +501,15 @@ slapd_pk11_configurePKCS11(NULL, NULL, tokDes, ptokDes, NULL, NULL, NULL, NULL, 0, 0 ); NSS_NoDB_Init(NULL); + if (getenv("MIGRATE_BROKEN_PWD")) { + putenv(useBrokenUUID); + } + if ( decode_path(oldcred, &plain, oldpath) == 0 ) { + if (getenv("MIGRATE_BROKEN_PWD")) { + putenv(disableBrokenUUID); + } if ( encode_path(plain, &cipher, newpath) != 0 ) return(NULL); else From fedora-directory-commits at redhat.com Thu Sep 20 20:27:37 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Thu, 20 Sep 2007 16:27:37 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd uuid.c, 1.7, 1.8 Message-ID: <200709202027.l8KKRbw8006013@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/servers/slapd In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv5955/ldapserver/ldap/servers/slapd Modified Files: uuid.c Log Message: Resolves: bug 262021 Bug Description: Migration script does not migrate nsDS5ReplicaCredentials correctly. Reviewed by: nhosoi (Thanks!) Fix Description: We still need to be able to decrypt passwords using the broken method. I guess it works on Solaris and HP because the values are already in network byte order. But when the values were encrypted on x86, they were encrypted the wrong way. It is safe to use MIGRATE_BROKEN_PWD on Solaris and HP because it is essentially a no-op. But this allows us to decrypt x86 passwords and store them correctly. Platforms tested: RHEL4 i386, RHEL5 x86_64 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: uuid.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/uuid.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- uuid.c 30 Aug 2007 00:18:10 -0000 1.7 +++ uuid.c 20 Sep 2007 20:27:35 -0000 1.8 @@ -856,10 +856,14 @@ memcpy(uuid, hash, sizeof(guid_t)); - /* convert UUID to local byte order */ - uuid->time_low = PR_ntohl(uuid->time_low); - uuid->time_mid = PR_ntohs(uuid->time_mid); - uuid->time_hi_and_version = PR_ntohs(uuid->time_hi_and_version); + /* when migrating, we skip the ntohl in order to read in old, + incorrectly formatted uuids */ + if (!getenv("USE_BROKEN_UUID")) { + /* convert UUID to local byte order */ + uuid->time_low = PR_ntohl(uuid->time_low); + uuid->time_mid = PR_ntohs(uuid->time_mid); + uuid->time_hi_and_version = PR_ntohs(uuid->time_hi_and_version); + } /* put in the variant and version bits */ uuid->time_hi_and_version &= 0x0FFF; From fedora-directory-commits at redhat.com Thu Sep 20 21:47:31 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Thu, 20 Sep 2007 17:47:31 -0400 Subject: [Fedora-directory-commits] adminserver/admserv/newinst/src AdminUtil.pm.in, 1.14, 1.15 register-ds-admin.res.in, 1.2, 1.3 setup-ds-admin.res.in, 1.7, 1.8 Message-ID: <200709202147.l8KLlVNQ017026@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/adminserver/admserv/newinst/src In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv17005/adminserver/admserv/newinst/src Modified Files: AdminUtil.pm.in register-ds-admin.res.in setup-ds-admin.res.in Log Message: Resolves: bug 299261 Bug Description: setup-ds-admin: Error: unknown resource key error_connection_failed Reviewed by: nhosoi (Thanks!) Fix Description: Moved the resource key from register-ds-admin.res to setup-ds-admin.res since it's used by setup and migrate too. I also added the host, port, user, and ldap error string to the error message. Platforms tested: RHEL5 x86_64 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: AdminUtil.pm.in =================================================================== RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/AdminUtil.pm.in,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- AdminUtil.pm.in 23 Aug 2007 23:51:24 -0000 1.14 +++ AdminUtil.pm.in 20 Sep 2007 21:47:28 -0000 1.15 @@ -245,7 +245,9 @@ $inf->{slapd}->{RootDNPwd}, $inf->{General}->{certdir}); if (!$conn) { - @{$errs} = ('error_connection_failed'); + @{$errs} = ('error_connection_failed', $inf->{General}->{FullMachineName}, + $inf->{slapd}->{ServerPort}, $inf->{slapd}->{RootDN}, + $conn->getErrorString()); return 0; } @@ -330,7 +332,9 @@ $inf->{slapd}->{RootDNPwd}, $inf->{General}->{certdir}); if (!$conn) { - @{$errs} = ('error_connection_failed'); + @{$errs} = ('error_connection_failed', $inf->{General}->{FullMachineName}, + $inf->{slapd}->{ServerPort}, $inf->{slapd}->{RootDN}, + $conn->getErrorString()); return 0; } Index: register-ds-admin.res.in =================================================================== RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/register-ds-admin.res.in,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- register-ds-admin.res.in 23 Aug 2007 23:51:24 -0000 1.2 +++ register-ds-admin.res.in 20 Sep 2007 21:47:28 -0000 1.3 @@ -39,5 +39,3 @@ error_register_subds = Error: failed to register the additional server info to the Configuration Directory Server %s.\n error_unregister_ds = Error: failed to clean up the configuration info from the old Configuration\nDirectory Server %s.\n - -error_connection_failed = Error: failed to open an LDAP connection.\n Index: setup-ds-admin.res.in =================================================================== RCS file: /cvs/dirsec/adminserver/admserv/newinst/src/setup-ds-admin.res.in,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- setup-ds-admin.res.in 14 Sep 2007 21:26:08 -0000 1.7 +++ setup-ds-admin.res.in 20 Sep 2007 21:47:28 -0000 1.8 @@ -128,3 +128,4 @@ error_return_certutil = The certutil program returned error code '%s' from attempting to add the CA certificate. Error: %s error_return2_certutil = The certutil program returned error code '%s' from attempting to add the CA certificate. Error: %s\nHere is the output of the command: %s cacert_already_exists = The certificate database in '%s' already contains a CA certificate. Please remove it first, or use the certutil program to add the CA certificate with a different name.\n +error_connection_failed = Error: failed to open an LDAP connection to host '%s' port '%s' as user '%s'. Error: %s.\n From fedora-directory-commits at redhat.com Thu Sep 20 23:32:20 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Thu, 20 Sep 2007 19:32:20 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/replication windows_protocol_util.c, 1.33, 1.34 Message-ID: <200709202332.l8KNWKiC002039@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/replication In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv2018 Modified Files: windows_protocol_util.c Log Message: Resolves: 299361 Summary: Handle initials and streetAddress attributes when doing a sync total update. Index: windows_protocol_util.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windows_protocol_util.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -r1.33 -r1.34 --- windows_protocol_util.c 17 Sep 2007 19:18:30 -0000 1.33 +++ windows_protocol_util.c 20 Sep 2007 23:32:17 -0000 1.34 @@ -2971,6 +2971,7 @@ return ret; } +/* Generate the mods for an update in either direction. Be careful... the "remote" entry is the DS entry in the to_windows case, but the AD entry in the other case. */ static int windows_generate_update_mods(Private_Repl_Protocol *prp,Slapi_Entry *remote_entry,Slapi_Entry *local_entry, int to_windows, Slapi_Mods *smods, int *do_modify) { @@ -3033,7 +3034,13 @@ } continue; } - slapi_entry_attr_find(local_entry,local_type,&local_attr); + + if (to_windows && (0 == slapi_attr_type_cmp(local_type, "streetAddress", SLAPI_TYPE_CMP_SUBTYPE))) { + slapi_entry_attr_find(local_entry,FAKE_STREET_ATTR_NAME,&local_attr); + } else { + slapi_entry_attr_find(local_entry,local_type,&local_attr); + } + is_present_local = (NULL == local_attr) ? 0 : 1; /* Is the attribute present on the local entry ? */ if (is_present_local && !is_guid) @@ -3041,14 +3048,21 @@ if (!mapdn) { int values_equal = 0; - /* AD has a legth contraint on the initials attribute, * so treat is as a special case. */ - if (0 == slapi_attr_type_cmp(type, "initials", SLAPI_TYPE_CMP_SUBTYPE) && !to_windows) { + if (0 == slapi_attr_type_cmp(type, "initials", SLAPI_TYPE_CMP_SUBTYPE)) { values_equal = attr_compare_equal(attr, local_attr, AD_INITIALS_LENGTH); + /* If we're getting a streetAddress (a fake attr name is used) from AD, then + * we just check if the value in AD is present in our entry in DS. In this + * case, attr is from the AD entry, and local_attr is from the DS entry. */ } else if (0 == slapi_attr_type_cmp(type, FAKE_STREET_ATTR_NAME, SLAPI_TYPE_CMP_SUBTYPE) && !to_windows) { - /* Need to check if attr is present in local_attr */ values_equal = attr_compare_present(attr, local_attr); + /* If we are checking if we should send a street attribute to AD, then + * we want to first see if the AD entry already contains any street value + * that is present in the DS entry. In this case, attr is from the DS + * entry, and local_attr is from the AD entry. */ + } else if ((0 == slapi_attr_type_cmp(type, "street", SLAPI_TYPE_CMP_SUBTYPE) && to_windows)) { + values_equal = attr_compare_present(local_attr, attr); } else { /* Compare the entire attribute values */ values_equal = attr_compare_equal(attr, local_attr, 0); @@ -3058,8 +3072,58 @@ if (!values_equal) { slapi_log_error(SLAPI_LOG_REPL, windows_repl_plugin_name, - "windows_generate_update_mods: %s, %s : values are different\n", slapi_sdn_get_dn(slapi_entry_get_sdn_const(local_entry)), local_type); - slapi_mods_add_mod_values(smods,LDAP_MOD_REPLACE,local_type,valueset_get_valuearray(vs)); + "windows_generate_update_mods: %s, %s : values are different\n", + slapi_sdn_get_dn(slapi_entry_get_sdn_const(local_entry)), local_type); + + if ((0 == slapi_attr_type_cmp(local_type, "streetAddress", + SLAPI_TYPE_CMP_SUBTYPE) && to_windows)) { + /* streetAddress is single-valued in AD, so make + * sure we don't try to send more than one value. */ + if (slapi_valueset_count(vs) > 1) { + int i = 0; + const char *street_value = NULL; + Slapi_Value *value = NULL; + Slapi_Value *new_value = NULL; + + i = slapi_valueset_first_value(vs,&value); + if (i >= 0) { + /* Dup the first value, trash the valueset, then copy + * in the dup'd value. */ + new_value = slapi_value_dup(value); + slapi_valueset_done(vs); + /* The below hands off the memory to the valueset */ + slapi_valueset_add_value_ext(vs, new_value, SLAPI_VALUE_FLAG_PASSIN); + } + } + } else if ((0 == slapi_attr_type_cmp(local_type, "initials", + SLAPI_TYPE_CMP_SUBTYPE) && to_windows)) { + /* initials is constratined to a max length of + * 6 characters in AD, so trim the value if + * needed before sending. */ + int i = 0; + const char *initials_value = NULL; + Slapi_Value *value = NULL; + + i = slapi_valueset_first_value(vs,&value); + while (i >= 0) { + initials_value = slapi_value_get_string(value); + + /* If > AD_INITIALS_LENGTH, trim the value */ + if (strlen(initials_value) > AD_INITIALS_LENGTH) { + char *new_initials = PL_strndup(initials_value, AD_INITIALS_LENGTH); + /* the below hands off memory */ + slapi_value_set_string_passin(value, new_initials); + slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name, + "%s: windows_generate_update_mods: " + "Trimming initials attribute to %d characters.\n", + agmt_get_long_name(prp->agmt), AD_INITIALS_LENGTH); + } + + i = slapi_valueset_next_value(vs, i, &value); + } + } + slapi_mods_add_mod_values(smods,LDAP_MOD_REPLACE, + local_type,valueset_get_valuearray(vs)); *do_modify = 1; } else { @@ -3125,6 +3189,53 @@ } } else { + if ((0 == slapi_attr_type_cmp(local_type, "streetAddress", + SLAPI_TYPE_CMP_SUBTYPE) && to_windows)) { + /* streetAddress is single-valued in AD, so make + * sure we don't try to send more than one value. */ + if (slapi_valueset_count(vs) > 1) { + int i = 0; + const char *street_value = NULL; + Slapi_Value *value = NULL; + Slapi_Value *new_value = NULL; + + i = slapi_valueset_first_value(vs,&value); + if (i >= 0) { + /* Dup the first value, trash the valueset, then copy + * in the dup'd value. */ + new_value = slapi_value_dup(value); + slapi_valueset_done(vs); + /* The below hands off the memory to the valueset */ + slapi_valueset_add_value_ext(vs, new_value, SLAPI_VALUE_FLAG_PASSIN); + } + } + } else if ((0 == slapi_attr_type_cmp(local_type, "initials", + SLAPI_TYPE_CMP_SUBTYPE) && to_windows)) { + /* initials is constratined to a max length of + * 6 characters in AD, so trim the value if + * needed before sending. */ + int i = 0; + const char *initials_value = NULL; + Slapi_Value *value = NULL; + + i = slapi_valueset_first_value(vs,&value); + while (i >= 0) { + initials_value = slapi_value_get_string(value); + + /* If > AD_INITIALS_LENGTH, trim the value */ + if (strlen(initials_value) > AD_INITIALS_LENGTH) { + char *new_initials = PL_strndup(initials_value, AD_INITIALS_LENGTH); + /* the below hands off memory */ + slapi_value_set_string_passin(value, new_initials); + slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name, + "%s: windows_generate_update_mods: " + "Trimming initials attribute to %d characters.\n", + agmt_get_long_name(prp->agmt), AD_INITIALS_LENGTH); + } + + i = slapi_valueset_next_value(vs, i, &value); + } + } slapi_mods_add_mod_values(smods,LDAP_MOD_ADD,local_type,valueset_get_valuearray(vs)); } } From fedora-directory-commits at redhat.com Sat Sep 22 03:34:08 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Fri, 21 Sep 2007 23:34:08 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/admin/src/scripts DSMigration.pm.in, 1.15, 1.16 Message-ID: <200709220334.l8M3Y8V5029129@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/admin/src/scripts In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv29098 Modified Files: DSMigration.pm.in Log Message: Resolves: bug 301431 Description: Show-Stopper - Migration path rhel21_ds621_TO_rhel4_32bit Fix Description: not actually a fix, but with -dd this will print out the entries that were ignored during migration, which should be the presence plugin config entries and possibly others Index: DSMigration.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/DSMigration.pm.in,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- DSMigration.pm.in 20 Sep 2007 20:27:34 -0000 1.15 +++ DSMigration.pm.in 22 Sep 2007 03:34:06 -0000 1.16 @@ -625,6 +625,8 @@ fixAttrsInEntry($oldent, $mig, $inst); $rc = $dest->add($oldent); $op = "add"; + } else { + debug(2, "Ignoring entry $dn - configuration not supported\n"); } } elsif (!$oldent && $newent) { if ($dn =~ /o=deleteAfterMigration/i) { From fedora-directory-commits at redhat.com Mon Sep 24 18:27:18 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Mon, 24 Sep 2007 14:27:18 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm ldif2ldbm.c, 1.13, 1.14 vlv.c, 1.13, 1.14 Message-ID: <200709241827.l8OIRIIV026155@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv26035 Modified Files: ldif2ldbm.c vlv.c Log Message: Resolves: #171081 Summary: ldapsearch hung at browsing index creation (comment #4) Fix Description: 1. instead of covering all the reindexing look, set vlv lock just around vlv_update_index, where vlv update is executed. 2. actually, lock is not meant to use for excluding the operation against vlv reconfiguration. This ldbm_back_ldbm2index function first calls instance_set_busy_and_readonly and protects the backend from the operation done by other threads. vlv delete was just ignoring the busy/readonly setting. Thus, changed the vlv code to respect the setting. Found the backend is busy, deleting a vlv index fails and returns. 3. cleaned up the instance_set_busy_and_readonly function not to leak memory. 4. fixed minor memory leak. Index: ldif2ldbm.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/ldif2ldbm.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- ldif2ldbm.c 20 Sep 2007 16:58:41 -0000 1.13 +++ ldif2ldbm.c 24 Sep 2007 18:27:15 -0000 1.14 @@ -58,7 +58,7 @@ static int db2index_add_indexed_attr(backend *be, char *attrString); static int ldbm_exclude_attr_from_export( struct ldbminfo *li, - const char *attr, int dump_uniqueid ); + const char *attr, int dump_uniqueid ); /********** common routines for classic/deluxe import code **********/ @@ -92,14 +92,14 @@ void import_subcount_stuff_init(import_subcount_stuff *stuff) { stuff->hashtable = PL_NewHashTable(IMPORT_SUBCOUNT_HASHTABLE_SIZE, - import_subcount_hash_fn, import_subcount_hash_compare_keys, - import_subcount_hash_compare_values, NULL, NULL); + import_subcount_hash_fn, import_subcount_hash_compare_keys, + import_subcount_hash_compare_values, NULL, NULL); } void import_subcount_stuff_term(import_subcount_stuff *stuff) { if ( stuff != NULL && stuff->hashtable != NULL ) { - PL_HashTableDestroy(stuff->hashtable); + PL_HashTableDestroy(stuff->hashtable); } } @@ -108,7 +108,7 @@ * [used by both ldif2db and db2ldif] */ int ldbm_back_fetch_incl_excl(Slapi_PBlock *pb, char ***include, - char ***exclude) + char ***exclude) { char **pb_incl, **pb_excl; char subtreeDn[BUFSIZ]; @@ -121,18 +121,18 @@ /* normalize */ if (pb_excl) { - for (i = 0; pb_excl[i]; i++) { - PL_strncpyz(subtreeDn, pb_excl[i], sizeof(subtreeDn)); - normSubtreeDn = slapi_dn_normalize_case(subtreeDn); - charray_add(exclude, slapi_ch_strdup(normSubtreeDn)); - } + for (i = 0; pb_excl[i]; i++) { + PL_strncpyz(subtreeDn, pb_excl[i], sizeof(subtreeDn)); + normSubtreeDn = slapi_dn_normalize_case(subtreeDn); + charray_add(exclude, slapi_ch_strdup(normSubtreeDn)); + } } if (pb_incl) { - for (i = 0; pb_incl[i]; i++) { - PL_strncpyz(subtreeDn, pb_incl[i], sizeof(subtreeDn)); - normSubtreeDn = slapi_dn_normalize_case(subtreeDn); - charray_add(include, slapi_ch_strdup(normSubtreeDn)); - } + for (i = 0; pb_incl[i]; i++) { + PL_strncpyz(subtreeDn, pb_incl[i], sizeof(subtreeDn)); + normSubtreeDn = slapi_dn_normalize_case(subtreeDn); + charray_add(include, slapi_ch_strdup(normSubtreeDn)); + } } return (pb_incl || pb_excl); } @@ -140,10 +140,10 @@ void ldbm_back_free_incl_excl(char **include, char **exclude) { if (include) { - charray_free(include); + charray_free(include); } if (exclude) { - charray_free(exclude); + charray_free(exclude); } } @@ -155,26 +155,26 @@ int i = 0; if (!(include || exclude)) - return(1); + return(1); if (exclude) { - i = 0; - while (exclude[i]) { - if (slapi_dn_issuffix(dn,exclude[i])) - return(0); - i++; - } + i = 0; + while (exclude[i]) { + if (slapi_dn_issuffix(dn,exclude[i])) + return(0); + i++; + } } if (include) { - i = 0; - while (include[i]) { - if (slapi_dn_issuffix(dn,include[i])) - return(1); - i++; - } - /* not in include... bye. */ - return(0); + i = 0; + while (include[i]) { + if (slapi_dn_issuffix(dn,include[i])) + return(1); + i++; + } + /* not in include... bye. */ + return(0); } return(1); @@ -190,10 +190,10 @@ * Currenty the list of these is: numSubordinates, hasSubordinates */ int add_op_attrs(Slapi_PBlock *pb, struct ldbminfo *li, struct backentry *ep, - int *status) + int *status) { backend *be; - const char *pdn; + char *pdn; ID pid = 0; slapi_pblock_get(pb, SLAPI_BACKEND, &be); @@ -203,46 +203,46 @@ */ if (NULL != status) { - *status = IMPORT_ADD_OP_ATTRS_OK; + *status = IMPORT_ADD_OP_ATTRS_OK; } /* parentid */ if ( (pdn = slapi_dn_parent( backentry_get_ndn(ep))) != NULL ) { - struct berval bv; - IDList *idl; - int err = 0; - - /* - * read the entrydn index to get the id of the parent - * If this entry's parent is not present in the index, - * we'll get a DB_NOTFOUND error here. - * In olden times, we just ignored this, but now... - * we see this as meaning that the entry is either a - * suffix entry, or its erroneous. So, we signal this to the - * caller via the status parameter. - */ - bv.bv_val = (char *)pdn; - bv.bv_len = strlen(pdn); - if ( (idl = index_read( be, "entrydn", indextype_EQUALITY, &bv, NULL, - &err )) != NULL ) { - pid = idl_firstid( idl ); - idl_free( idl ); - } else { - /* empty idl */ - if ( 0 != err && DB_NOTFOUND != err ) { - LDAPDebug( LDAP_DEBUG_ANY, "database error %d\n", err, 0, 0 ); - slapi_ch_free( (void**)&pdn ); - return( -1 ); - } - if (NULL != status) { - *status = IMPORT_ADD_OP_ATTRS_NO_PARENT; - } - } - slapi_ch_free( (void**)&pdn ); + struct berval bv; + IDList *idl; + int err = 0; + + /* + * read the entrydn index to get the id of the parent + * If this entry's parent is not present in the index, + * we'll get a DB_NOTFOUND error here. + * In olden times, we just ignored this, but now... + * we see this as meaning that the entry is either a + * suffix entry, or its erroneous. So, we signal this to the + * caller via the status parameter. + */ + bv.bv_val = pdn; + bv.bv_len = strlen(pdn); + if ( (idl = index_read( be, "entrydn", indextype_EQUALITY, &bv, NULL, + &err )) != NULL ) { + pid = idl_firstid( idl ); + idl_free( idl ); + } else { + /* empty idl */ + if ( 0 != err && DB_NOTFOUND != err ) { + LDAPDebug( LDAP_DEBUG_ANY, "database error %d\n", err, 0, 0 ); + slapi_ch_free_string( &pdn ); + return( -1 ); + } + if (NULL != status) { + *status = IMPORT_ADD_OP_ATTRS_NO_PARENT; + } + } + slapi_ch_free_string( &pdn ); } else { - if (NULL != status) { - *status = IMPORT_ADD_OP_ATTRS_NO_PARENT; - } + if (NULL != status) { + *status = IMPORT_ADD_OP_ATTRS_NO_PARENT; + } } /* Get rid of attributes you're not allowed to specify yourself */ @@ -260,7 +260,7 @@ /* Update subordinate count in a hint list, given the parent's ID */ int import_subcount_mother_init(import_subcount_stuff *mothers, ID parent_id, - size_t count) + size_t count) { PR_ASSERT(NULL == PL_HashTableLookup(mothers->hashtable,(void*)parent_id)); PL_HashTableAdd(mothers->hashtable,(void*)parent_id,(void*)count); @@ -269,18 +269,18 @@ /* Look for a subordinate count in a hint list, given the parent's ID */ static int import_subcount_mothers_lookup(import_subcount_stuff *mothers, - ID parent_id, size_t *count) + ID parent_id, size_t *count) { size_t stored_count = 0; *count = 0; /* Lookup hash table for ID */ stored_count = (size_t)PL_HashTableLookup(mothers->hashtable, - (void*)parent_id); + (void*)parent_id); /* If present, return the count found */ if (0 != stored_count) { - *count = stored_count; - return 0; + *count = stored_count; + return 0; } return -1; } @@ -292,7 +292,7 @@ /* Lookup the hash table for the target ID */ stored_count = (size_t)PL_HashTableLookup(mothers->hashtable, - (void*)parent_id); + (void*)parent_id); PR_ASSERT(0 != stored_count); /* Increment the count */ stored_count++; @@ -301,7 +301,7 @@ } static int import_update_entry_subcount(backend *be, ID parentid, - size_t sub_count) + size_t sub_count) { ldbm_instance *inst = (ldbm_instance *) be->be_instance_info; int ret = 0; @@ -313,8 +313,8 @@ /* Get hold of the parent */ e = id2entry(be,parentid,NULL,&ret); if ( (NULL == e) || (0 != ret)) { - ldbm_nasty(sourcefile,5,ret); - return (0 == ret) ? -1 : ret; + ldbm_nasty(sourcefile,5,ret); + return (0 == ret) ? -1 : ret; } /* Lock it (not really required since we're single-threaded here, but * let's do it so we can reuse the modify routines) */ @@ -325,19 +325,19 @@ let's check whether it's already there or not */ isreplace = (attrlist_find(e->ep_entry->e_attrs, numsubordinates) != NULL); { - int op = isreplace ? LDAP_MOD_REPLACE : LDAP_MOD_ADD; - Slapi_Mods *smods= slapi_mods_new(); + int op = isreplace ? LDAP_MOD_REPLACE : LDAP_MOD_ADD; + Slapi_Mods *smods= slapi_mods_new(); slapi_mods_add(smods, op | LDAP_MOD_BVALUES, numsubordinates, - strlen(value_buffer), value_buffer); - ret = modify_apply_mods(&mc,smods); /* smods passed in */ + strlen(value_buffer), value_buffer); + ret = modify_apply_mods(&mc,smods); /* smods passed in */ } if (0 == ret || LDAP_TYPE_OR_VALUE_EXISTS == ret) { - /* This will correctly index subordinatecount: */ - ret = modify_update_all(be,NULL,&mc,NULL); - if (0 == ret) { - modify_switch_entries( &mc,be); - } + /* This will correctly index subordinatecount: */ + ret = modify_update_all(be,NULL,&mc,NULL); + if (0 == ret) { + modify_switch_entries( &mc,be); + } } modify_term(&mc,be); return ret; @@ -418,136 +418,136 @@ * */ int update_subordinatecounts(backend *be, import_subcount_stuff *mothers, - DB_TXN *txn) + DB_TXN *txn) { - int ret = 0; - DB *db = NULL; - DBC *dbc = NULL; - struct attrinfo *ai = NULL; - DBT key = {0}; - DBT data = {0}; - import_subcount_trawl_info *trawl_list = NULL; - - /* Open the parentid index */ - ainfo_get( be, "parentid", &ai ); - - /* Open the parentid index file */ - if ( (ret = dblayer_get_index_file( be, ai, &db, DBOPEN_CREATE )) != 0 ) { - ldbm_nasty(sourcefile,67,ret); - return(ret); - } - - /* Get a cursor so we can walk through the parentid */ - ret = db->cursor(db,txn,&dbc,0); - if (ret != 0 ) { - ldbm_nasty(sourcefile,68,ret); + int ret = 0; + DB *db = NULL; + DBC *dbc = NULL; + struct attrinfo *ai = NULL; + DBT key = {0}; + DBT data = {0}; + import_subcount_trawl_info *trawl_list = NULL; + + /* Open the parentid index */ + ainfo_get( be, "parentid", &ai ); + + /* Open the parentid index file */ + if ( (ret = dblayer_get_index_file( be, ai, &db, DBOPEN_CREATE )) != 0 ) { + ldbm_nasty(sourcefile,67,ret); + return(ret); + } + + /* Get a cursor so we can walk through the parentid */ + ret = db->cursor(db,txn,&dbc,0); + if (ret != 0 ) { + ldbm_nasty(sourcefile,68,ret); dblayer_release_index_file( be, ai, db ); - return ret; - } + return ret; + } - /* Walk along the index */ - while (1) { - size_t sub_count = 0; - int found_count = 1; - ID parentid = 0; - - /* Foreach key which is an equality key : */ - data.flags = DB_DBT_MALLOC; - key.flags = DB_DBT_MALLOC; - ret = dbc->c_get(dbc,&key,&data,DB_NEXT_NODUP); - if (NULL != data.data) { - free(data.data); - data.data = NULL; - } - if (0 != ret) { - if (ret != DB_NOTFOUND) { - ldbm_nasty(sourcefile,62,ret); - } - if (NULL != key.data) { - free(key.data); - key.data = NULL; - } - break; - } - if (*(char*)key.data == EQ_PREFIX) { - char *idptr = NULL; - - /* construct the parent's ID from the key */ - /* Look for the ID in the hint list supplied by the caller */ - /* If its there, we know the answer already */ - idptr = (((char *) key.data) + 1); - parentid = (ID) atol(idptr); - PR_ASSERT(0 != parentid); - ret = import_subcount_mothers_lookup(mothers,parentid,&sub_count); - if (0 != ret) { - IDList *idl = NULL; - - /* If it's not, we need to compute it ourselves: */ - /* Load the IDL matching the key */ - key.flags = DB_DBT_REALLOC; - ret = NEW_IDL_NO_ALLID; - idl = idl_fetch(be,db,&key,NULL,NULL,&ret); - if ( (NULL == idl) || (0 != ret)) { - ldbm_nasty(sourcefile,4,ret); + /* Walk along the index */ + while (1) { + size_t sub_count = 0; + int found_count = 1; + ID parentid = 0; + + /* Foreach key which is an equality key : */ + data.flags = DB_DBT_MALLOC; + key.flags = DB_DBT_MALLOC; + ret = dbc->c_get(dbc,&key,&data,DB_NEXT_NODUP); + if (NULL != data.data) { + free(data.data); + data.data = NULL; + } + if (0 != ret) { + if (ret != DB_NOTFOUND) { + ldbm_nasty(sourcefile,62,ret); + } + if (NULL != key.data) { + free(key.data); + key.data = NULL; + } + break; + } + if (*(char*)key.data == EQ_PREFIX) { + char *idptr = NULL; + + /* construct the parent's ID from the key */ + /* Look for the ID in the hint list supplied by the caller */ + /* If its there, we know the answer already */ + idptr = (((char *) key.data) + 1); + parentid = (ID) atol(idptr); + PR_ASSERT(0 != parentid); + ret = import_subcount_mothers_lookup(mothers,parentid,&sub_count); + if (0 != ret) { + IDList *idl = NULL; + + /* If it's not, we need to compute it ourselves: */ + /* Load the IDL matching the key */ + key.flags = DB_DBT_REALLOC; + ret = NEW_IDL_NO_ALLID; + idl = idl_fetch(be,db,&key,NULL,NULL,&ret); + if ( (NULL == idl) || (0 != ret)) { + ldbm_nasty(sourcefile,4,ret); dblayer_release_index_file( be, ai, db ); - return (0 == ret) ? -1 : ret; - } - /* The number of IDs in the IDL tells us the number of - * subordinates for the entry */ - /* Except, the number might be above the allidsthreshold, - * in which case */ - if (ALLIDS(idl)) { - /* We add this ID to the list for which to trawl */ - import_subcount_trawl_add(&trawl_list,parentid); - found_count = 0; - } else { - /* We get the count from the IDL */ - sub_count = idl->b_nids; - } - idl_free(idl); - } - /* Did we get the count ? */ - if (found_count) { - PR_ASSERT(0 != sub_count); - /* If so, update the parent now */ - import_update_entry_subcount(be,parentid,sub_count); - } - } - if (NULL != key.data) { - free(key.data); - key.data = NULL; - } - } - - ret = dbc->c_close(dbc); - if (0 != ret) { - ldbm_nasty(sourcefile,6,ret); - } - dblayer_release_index_file( be, ai, db ); - - /* Now see if we need to go trawling through id2entry for the info - * we need */ - if (NULL != trawl_list) { - ret = import_subcount_trawl(be,trawl_list); - if (0 != ret) { - ldbm_nasty(sourcefile,7,ret); - } - } - return(ret); + return (0 == ret) ? -1 : ret; + } + /* The number of IDs in the IDL tells us the number of + * subordinates for the entry */ + /* Except, the number might be above the allidsthreshold, + * in which case */ + if (ALLIDS(idl)) { + /* We add this ID to the list for which to trawl */ + import_subcount_trawl_add(&trawl_list,parentid); + found_count = 0; + } else { + /* We get the count from the IDL */ + sub_count = idl->b_nids; + } + idl_free(idl); + } + /* Did we get the count ? */ + if (found_count) { + PR_ASSERT(0 != sub_count); + /* If so, update the parent now */ + import_update_entry_subcount(be,parentid,sub_count); + } + } + if (NULL != key.data) { + free(key.data); + key.data = NULL; + } + } + + ret = dbc->c_close(dbc); + if (0 != ret) { + ldbm_nasty(sourcefile,6,ret); + } + dblayer_release_index_file( be, ai, db ); + + /* Now see if we need to go trawling through id2entry for the info + * we need */ + if (NULL != trawl_list) { + ret = import_subcount_trawl(be,trawl_list); + if (0 != ret) { + ldbm_nasty(sourcefile,7,ret); + } + } + return(ret); } /********** ldif2db entry point **********/ /* - Some notes about this stuff: + Some notes about this stuff: - The front-end does call our init routine before calling us here. - So, we get the regular chance to parse the config file etc. - However, it does _NOT_ call our start routine, so we need to - do whatever work that did and which we need for this work , here. - Furthermore, the front-end simply exits after calling us, so we need - to do any cleanup work here also. + The front-end does call our init routine before calling us here. + So, we get the regular chance to parse the config file etc. + However, it does _NOT_ call our start routine, so we need to + do whatever work that did and which we need for this work , here. + Furthermore, the front-end simply exits after calling us, so we need + to do any cleanup work here also. */ /* @@ -600,7 +600,7 @@ cache_clear(&inst->inst_cache); dblayer_instance_close(inst->inst_be); - dblayer_delete_indices(inst); + dblayer_delete_indices(inst); } else { /* from the command line, libdb needs to be started up */ ldbm_config_internal_set(li, CONFIG_DB_TRANSACTION_LOGGING, "off"); @@ -665,14 +665,14 @@ /* for each subtree spec... */ for (i = 0; include[i]; i++) { - IDList *idl = NULL; + IDList *idl = NULL; /* * First map the suffix to its entry ID. * Note that the suffix is already normalized. */ - bv.bv_val = include[i]; - bv.bv_len = strlen(include[i]); + bv.bv_val = include[i]; + bv.bv_len = strlen(include[i]); idl = index_read(be, "entrydn", indextype_EQUALITY, &bv, txn, err); if (idl == NULL) { LDAPDebug(LDAP_DEBUG_ANY, "warning: entrydn not indexed on '%s'\n", @@ -697,14 +697,14 @@ idl_insert(&idl, id); /* Merge the idlists */ - if (! idltotal) { - idltotal = idl; - } else if (idl) { - idltmp = idl_union(be, idltotal, idl); - idl_free(idltotal); - idl_free(idl); - idltotal = idltmp; - } + if (! idltotal) { + idltotal = idl; + } else if (idl) { + idltmp = idl_union(be, idltotal, idl); + idl_free(idltotal); + idl_free(idl); + idltotal = idltmp; + } } return idltotal; @@ -1104,7 +1104,7 @@ /* do not output attributes that are in the "exclude" list */ - /* Also, decrypt any encrypted attributes, if we're asked to */ + /* Also, decrypt any encrypted attributes, if we're asked to */ rc = slapi_entry_first_attr( ep->ep_entry, &this_attr ); while (0 == rc) { rc = slapi_entry_next_attr( ep->ep_entry, @@ -1115,13 +1115,13 @@ } this_attr = next_attr; } - if (decrypt) { - /* Decrypt in place */ - rc = attrcrypt_decrypt_entry(be, ep); - if (rc) { - LDAPDebug(LDAP_DEBUG_ANY,"Failed to decrypt entry%s\n", ep->ep_entry->e_sdn , 0, 0); - } - } + if (decrypt) { + /* Decrypt in place */ + rc = attrcrypt_decrypt_entry(be, ep); + if (rc) { + LDAPDebug(LDAP_DEBUG_ANY,"Failed to decrypt entry%s\n", ep->ep_entry->e_sdn , 0, 0); + } + } data.data = slapi_entry2str_with_options( ep->ep_entry, &len, options ); data.size = len + 1; @@ -1181,7 +1181,7 @@ if (idl) { idl_free(idl); } - if (dbc) { + if (dbc) { dbc->c_close(dbc); } @@ -1239,7 +1239,7 @@ "ldbm2index: Unknown VLV Index named '%s'\n", index, 0, 0); LDAPDebug(LDAP_DEBUG_ANY, "ldbm2index: Known VLV Indexes are: %s\n", text, 0, 0); - slapi_ch_free((void**)&text); + slapi_ch_free_string(&text); } /* @@ -1263,22 +1263,24 @@ IDList *idl = NULL; /* optimization for vlv index creation */ int numvlv = 0; int return_value = -1; + int rc = -1; ID temp_id; int i, j, vlvidx; ID lastid; - struct backentry *ep; + struct backentry *ep = NULL; char *type; NIDS idindex = 0; int count = 0; Slapi_Attr *attr; Slapi_Task *task; - int ret = 0; int isfirst = 1; int index_aid = 0; /* index ancestorid */ + struct vlvIndex *vlvip = NULL; + back_txn txn; LDAPDebug( LDAP_DEBUG_TRACE, "=> ldbm_back_ldbm2index\n", 0, 0, 0 ); if ( g_get_shutdown() || c_get_shutdown() ) { - return -1; + return return_value; } slapi_pblock_get(pb, SLAPI_BACKEND_INSTANCE_NAME, &instance_name); @@ -1291,6 +1293,7 @@ /* No ldbm backend exists until we process the config info. */ li->li_flags |= TASK_RUNNING_FROM_COMMANDLINE; ldbm_config_load_dse_info(li); + txn.back_txn_txn = NULL; /* no transaction */ } inst = ldbm_instance_find_by_name(li, instance_name); @@ -1301,7 +1304,7 @@ } LDAPDebug(LDAP_DEBUG_ANY, "Unknown ldbm instance %s\n", instance_name, 0, 0); - return -1; + return return_value; } be = inst->inst_be; slapi_pblock_set(pb, SLAPI_BACKEND, be); @@ -1316,14 +1319,14 @@ if (0 != dblayer_start(li,DBLAYER_INDEX_MODE)) { LDAPDebug( LDAP_DEBUG_ANY, "ldbm2index: Failed to init database\n", 0, 0, 0 ); - return( -1 ); + return return_value; } /* dblayer_instance_start will init the id2entry index. */ if (0 != dblayer_instance_start(be, DBLAYER_INDEX_MODE)) { LDAPDebug(LDAP_DEBUG_ANY, "db2ldif: Failed to init instance\n", 0, 0, 0); - return -1; + return return_value; } /* Initialise the Virtual List View code */ @@ -1335,34 +1338,31 @@ LDAPDebug(LDAP_DEBUG_ANY, "ldbm: '%s' is already in the middle of " "another task and cannot be disturbed.\n", inst->inst_name, 0, 0); - return -1; + return return_value; } if ((( dblayer_get_id2entry( be, &db )) != 0 ) || (db == NULL)) { LDAPDebug( LDAP_DEBUG_ANY, "Could not open/create id2entry\n", 0, 0, 0 ); - instance_set_not_busy(inst); - return( -1 ); + goto err_min; } /* get a cursor to we can walk over the table */ - return_value = db->cursor(db, NULL, &dbc, 0); - if (0 != return_value ) { + rc = db->cursor(db, NULL, &dbc, 0); + if (0 != rc) { LDAPDebug( LDAP_DEBUG_ANY, "Failed to get cursor for ldbm2index\n", 0, 0, 0 ); - dblayer_release_id2entry(be, db); - instance_set_not_busy(inst); - return( -1 ); + goto err_min; } /* ask for the last id so we can give cute percentages */ key.flags = DB_DBT_MALLOC; data.flags = DB_DBT_MALLOC; - return_value = dbc->c_get(dbc, &key, &data, DB_LAST); - if (return_value == DB_NOTFOUND) { + rc = dbc->c_get(dbc, &key, &data, DB_LAST); + if (rc == DB_NOTFOUND) { lastid = 0; isfirst = 0; /* neither a first nor a last */ - } else if (return_value == 0) { + } else if (rc == 0) { lastid = id_stored_to_internal((char *)key.data); free(key.data); free(data.data); @@ -1371,10 +1371,7 @@ LDAPDebug(LDAP_DEBUG_ANY, "Failed to seek within id2entry (BAD %d)\n", return_value, 0 ,0); - dbc->c_close(dbc); - dblayer_release_id2entry(be, db); - instance_set_not_busy(inst); - return( -1 ); + goto err_out; } /* Work out which indexes we should build */ @@ -1385,14 +1382,12 @@ */ { char **attrs = NULL; - struct vlvIndex *p = NULL; struct attrinfo *ai = NULL; slapi_pblock_get(pb, SLAPI_DB2INDEX_ATTRS, &attrs); for (i = 0; attrs[i] != NULL; i++) { if ( g_get_shutdown() || c_get_shutdown() ) { - ret = -1; - goto out; + goto err_out; } switch(attrs[i][0]) { case 't': /* attribute type to index */ @@ -1421,13 +1416,11 @@ dblayer_erase_index_file(be, ai, i/* chkpt; 1st time only */); break; case 'T': /* VLV Search to index */ - p = vlv_find_searchname((attrs[i])+1, be); - if (p == NULL) { + vlvip = vlv_find_searchname((attrs[i])+1, be); + if (vlvip == NULL) { ldbm2index_bad_vlv(task, inst, attrs[i]+1); - ret = -1; - goto out; } else { - vlvIndex_go_offline(p, be); + vlvIndex_go_offline(vlvip, be); if (pvlv == NULL) { pvlv = (struct vlvIndex **)slapi_ch_calloc(1, sizeof(struct vlvIndex *)); @@ -1435,10 +1428,10 @@ pvlv = (struct vlvIndex **)slapi_ch_realloc((char*)pvlv, (numvlv+1)*sizeof(struct vlvIndex *)); } - pvlv[numvlv] = p; + pvlv[numvlv] = vlvip; numvlv++; /* Get rid of the index if it already exists */ - PR_Delete(vlvIndex_filename(p)); + PR_Delete(vlvIndex_filename(vlvip)); if (task) { slapi_task_log_notice(task, "%s: Indexing VLV: %s", inst->inst_name, attrs[i]+1); @@ -1456,12 +1449,12 @@ * entire database. */ if (!indexAttrs && !index_aid && pvlv) { - int i, err; + int err; char **suffix_list = NULL; /* create suffix list */ - for (i = 0; i < numvlv; i++) { - char *s = slapi_ch_strdup(slapi_sdn_get_dn(vlvIndex_getBase(pvlv[i]))); + for (vlvidx = 0; vlvidx < numvlv; vlvidx++) { + char *s = slapi_ch_strdup(slapi_sdn_get_dn(vlvIndex_getBase(pvlv[vlvidx]))); s = slapi_dn_normalize_case(s); charray_add(&suffix_list, s); @@ -1497,14 +1490,9 @@ idindex = 0; } - /* Bug 603120: slapd dumps core while indexing and deleting the db at the - * same time. Now added the lock for the indexing code too. - */ - vlv_acquire_lock(be); while (1) { if ( g_get_shutdown() || c_get_shutdown() ) { - ret = -1; - goto out; + goto err_out; } if (idl) { if (idindex >= idl->b_nids) @@ -1514,17 +1502,15 @@ key.size = sizeof(temp_id); data.flags = DB_DBT_MALLOC; - return_value = db->get(db, NULL, &key, &data, 0); - if (return_value) { + rc = db->get(db, NULL, &key, &data, 0); + if (rc) { LDAPDebug(LDAP_DEBUG_ANY, "%s: Failed " "to read database, errno=%d (%s)\n", - inst->inst_name, return_value, - dblayer_strerror(return_value)); + inst->inst_name, rc, dblayer_strerror(rc)); if (task) { slapi_task_log_notice(task, "%s: Failed to read database, err %d (%s)", - inst->inst_name, return_value, - dblayer_strerror(return_value)); + inst->inst_name, rc, dblayer_strerror(rc)); } break; } @@ -1535,27 +1521,24 @@ key.flags = DB_DBT_MALLOC; data.flags = DB_DBT_MALLOC; if (isfirst) { - return_value = dbc->c_get(dbc, &key, &data, DB_FIRST); + rc = dbc->c_get(dbc, &key, &data, DB_FIRST); isfirst = 0; } else{ - return_value = dbc->c_get(dbc, &key, &data, DB_NEXT); + rc = dbc->c_get(dbc, &key, &data, DB_NEXT); } - if (0 != return_value) { - if (DB_NOTFOUND == return_value) { - break; - } else { - LDAPDebug(LDAP_DEBUG_ANY, "%s: Failed to read database, " - "errno=%d (%s)\n", inst->inst_name, return_value, - dblayer_strerror(return_value)); - if (task) { - slapi_task_log_notice(task, + if (DB_NOTFOUND == rc) { + break; + } else if (0 != rc) { + LDAPDebug(LDAP_DEBUG_ANY, "%s: Failed to read database, " + "errno=%d (%s)\n", inst->inst_name, rc, + dblayer_strerror(rc)); + if (task) { + slapi_task_log_notice(task, "%s: Failed to read database, err %d (%s)", - inst->inst_name, return_value, - dblayer_strerror(return_value)); - } - break; + inst->inst_name, rc, dblayer_strerror(rc)); } + break; } temp_id = id_stored_to_internal((char *)key.data); free(key.data); @@ -1592,9 +1575,7 @@ LDAPDebug(LDAP_DEBUG_ANY, "%s: ERROR: Could not add op attrs to entry (id %lu)\n", inst->inst_name, (u_long)ep->ep_id, 0); - backentry_free( &ep ); - ret = -1; - goto out; + goto err_out; } /* @@ -1604,25 +1585,17 @@ for (i = slapi_entry_first_attr(ep->ep_entry, &attr); i == 0; i = slapi_entry_next_attr(ep->ep_entry, attr, &attr)) { Slapi_Value **svals; - int rc = 0; slapi_attr_get_type( attr, &type ); for ( j = 0; indexAttrs[j] != NULL; j++ ) { if ( g_get_shutdown() || c_get_shutdown() ) { - ret = -1; - goto out; + goto err_out; } if (slapi_attr_type_cmp(indexAttrs[j], type, SLAPI_TYPE_CMP_SUBTYPE) == 0 ) { - back_txn txn; svals = attr_get_present_values(attr); - if (run_from_cmdline) - { - txn.back_txn_txn = NULL; - } - else - { + if (!run_from_cmdline) { rc = dblayer_txn_begin(li, NULL, &txn); if (0 != rc) { LDAPDebug(LDAP_DEBUG_ANY, @@ -1639,8 +1612,8 @@ inst->inst_name, indexAttrs[j], rc, dblayer_strerror(rc)); } - ret = -2; - goto out; + return_value = -2; + goto err_out; } } rc = index_addordel_values_sv( @@ -1659,13 +1632,13 @@ "(err %d: %s)", inst->inst_name, indexAttrs[j], rc, dblayer_strerror(rc)); } - if (!run_from_cmdline) - dblayer_txn_abort(li, &txn); - ret = -2; - goto out; + if (!run_from_cmdline) { + dblayer_txn_abort(li, &txn); + } + return_value = -2; + goto err_out; } - if (!run_from_cmdline) - { + if (!run_from_cmdline) { rc = dblayer_txn_commit(li, &txn); if (0 != rc) { LDAPDebug(LDAP_DEBUG_ANY, @@ -1682,8 +1655,8 @@ "(err %d: %s)", inst->inst_name, indexAttrs[j], rc, dblayer_strerror(rc)); } - ret = -2; - goto out; + return_value = -2; + goto err_out; } } } @@ -1695,19 +1668,10 @@ * Update the Virtual List View indexes */ for ( vlvidx = 0; vlvidx < numvlv; vlvidx++ ) { - back_txn txn; - int rc = 0; if ( g_get_shutdown() || c_get_shutdown() ) { - ret = -1; - goto out; - } - if (run_from_cmdline) - { - txn.back_txn_txn = NULL; + goto err_out; } - else - if (!run_from_cmdline) - { + if (!run_from_cmdline) { rc = dblayer_txn_begin(li, NULL, &txn); if (0 != rc) { LDAPDebug(LDAP_DEBUG_ANY, @@ -1722,11 +1686,17 @@ "(err %d: %s)", inst->inst_name, indexAttrs[vlvidx], rc, dblayer_strerror(rc)); } - ret = -2; - goto out; + return_value = -2; + goto err_out; } } + /* + * lock is needed around vlv_update_index to protect the + * vlv structure. + */ + vlv_acquire_lock(be); vlv_update_index(pvlv[vlvidx], &txn, li, pb, NULL, ep); + vlv_release_lock(be); if (!run_from_cmdline) { rc = dblayer_txn_commit(li, &txn); @@ -1743,8 +1713,8 @@ "(err %d: %s)", inst->inst_name, indexAttrs[vlvidx], rc, dblayer_strerror(rc)); } - ret = -2; - goto out; + return_value = -2; + goto err_out; } } } @@ -1753,8 +1723,6 @@ * Update the ancestorid index */ if (index_aid) { - int rc; - rc = ldbm_ancestorid_index_entry(be, ep, BE_INDEX_ADD, NULL); if (rc != 0) { LDAPDebug(LDAP_DEBUG_ANY, @@ -1769,8 +1737,8 @@ "(err %d: %s)", inst->inst_name, rc, dblayer_strerror(rc)); } - ret = -2; - goto out; + return_value = -2; + goto err_out; } } @@ -1798,7 +1766,6 @@ backentry_free( &ep ); } - vlv_release_lock(be); /* if we got here, we finished successfully */ @@ -1810,8 +1777,8 @@ PR_ASSERT(ai != NULL); ai->ai_indexmask &= ~INDEX_OFFLINE; } - for (i = 0; i < numvlv; i++) { - vlvIndex_go_online(pvlv[i], be); + for ( vlvidx = 0; vlvidx < numvlv; vlvidx++ ) { + vlvIndex_go_online(pvlv[vlvidx], be); } if (task) { @@ -1822,29 +1789,28 @@ } LDAPDebug(LDAP_DEBUG_ANY, "%s: Finished indexing.\n", inst->inst_name, 0, 0); - -out: + return_value = 0; /* success */ +err_out: + backentry_free( &ep ); /* if ep or *ep is NULL, it does nothing */ if (idl) { idl_free(idl); } else { dbc->c_close(dbc); } - if (ret < 0) {/* error case: undo vlv indexing */ - struct vlvIndex *p = NULL; + if (return_value < 0) {/* error case: undo vlv indexing */ + struct vlvIndex *vlvip = NULL; /* if jumped to out due to an error, vlv lock has not been released */ - vlv_release_lock(be); for ( vlvidx = 0; vlvidx < numvlv; vlvidx++ ) { - p = pvlv[vlvidx]; - vlvIndex_go_offline(p, be); - vlvIndex_delete(&p); + vlvIndex_go_offline(pvlv[vlvidx], be); + vlv_acquire_lock(be); + vlvIndex_delete(&pvlv[vlvidx]); + vlv_release_lock(be); } } - dblayer_release_id2entry( be, db ); - +err_min: + dblayer_release_id2entry( be, db ); /* nope */ instance_set_not_busy(inst); - LDAPDebug( LDAP_DEBUG_TRACE, "<= ldbm_back_ldbm2index\n", 0, 0, 0 ); - if (run_from_cmdline) { if (0 != dblayer_flush(li)) { LDAPDebug(LDAP_DEBUG_ANY, @@ -1860,8 +1826,13 @@ if (indexAttrs) { slapi_ch_free((void **)&indexAttrs); } + if (pvlv) { + slapi_ch_free((void **)&pvlv); + } - return (ret); + LDAPDebug( LDAP_DEBUG_TRACE, "<= ldbm_back_ldbm2index\n", 0, 0, 0 ); + + return return_value; } /* @@ -1903,7 +1874,7 @@ attr_index_config(be, "from db2index()", 0, argc, nsslapd_index_value, 0); for ( i=0; ili_attrs_to_exclude_from_export ) { - for ( i = 0; li->li_attrs_to_exclude_from_export[i] != NULL; ++i ) { - if ( 0 == strcasecmp( li->li_attrs_to_exclude_from_export[i], - attr )) { - rc = 1; /* exclude */ - break; - } - } - } + } else if ( NULL != li && NULL != li->li_attrs_to_exclude_from_export ) { + for ( i = 0; li->li_attrs_to_exclude_from_export[i] != NULL; ++i ) { + if ( 0 == strcasecmp( li->li_attrs_to_exclude_from_export[i], + attr )) { + rc = 1; /* exclude */ + break; + } + } + } - return( rc ); + return( rc ); } /* Index: vlv.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/vlv.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- vlv.c 14 Mar 2007 16:36:13 -0000 1.13 +++ vlv.c 24 Sep 2007 18:27:15 -0000 1.14 @@ -101,11 +101,11 @@ if(parent!=NULL) { struct vlvIndex* newVlvIndex= vlvIndex_new(); - newVlvIndex->vlv_be=be; + newVlvIndex->vlv_be=be; vlvIndex_init(newVlvIndex, be, parent, entryBefore); - vlvSearch_addIndex(parent, newVlvIndex); + vlvSearch_addIndex(parent, newVlvIndex); } - PR_RWLock_Unlock(be->vlvSearchList_lock); + PR_RWLock_Unlock(be->vlvSearchList_lock); } slapi_sdn_done(&parentdn); return SLAPI_DSE_CALLBACK_OK; @@ -116,18 +116,28 @@ int vlv_DeleteSearchEntry(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* entryAfter, int *returncode, char *returntext, void *arg) { struct vlvSearch* p=NULL; - backend *be= ((ldbm_instance*)arg)->inst_be; - + ldbm_instance *inst = (ldbm_instance*)arg; + backend *be= inst->inst_be; + + if (instance_set_busy(inst) != 0) + { + LDAPDebug( LDAP_DEBUG_ANY, + "Backend instance: '%s' is already in the middle of " + "another task and cannot be disturbed.\n", + inst->inst_name, 0, 0); + return SLAPI_DSE_CALLBACK_ERROR; + } /* vlvSearchList is modified; need Wlock */ PR_RWLock_Wlock(be->vlvSearchList_lock); p = vlvSearch_finddn((struct vlvSearch *)be->vlvSearchList, slapi_entry_get_sdn(entryBefore)); if(p!=NULL) - { - LDAPDebug( LDAP_DEBUG_ANY, "Deleted Virtual List View Search (%s).\n", p->vlv_name, 0, 0); - vlvSearch_removefromlist((struct vlvSearch **)&be->vlvSearchList,p->vlv_dn); - vlvSearch_delete(&p); + { + LDAPDebug( LDAP_DEBUG_ANY, "Deleted Virtual List View Search (%s).\n", p->vlv_name, 0, 0); + vlvSearch_removefromlist((struct vlvSearch **)&be->vlvSearchList,p->vlv_dn); + vlvSearch_delete(&p); } - PR_RWLock_Unlock(be->vlvSearchList_lock); + PR_RWLock_Unlock(be->vlvSearchList_lock); + instance_set_not_busy(inst); return SLAPI_DSE_CALLBACK_OK; } @@ -136,8 +146,18 @@ int vlv_DeleteIndexEntry(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* entryAfter, int *returncode, char *returntext, void *arg) { - LDAPDebug( LDAP_DEBUG_ANY, "Deleted Virtual List View Index.\n", 0, 0, 0); - return SLAPI_DSE_CALLBACK_OK; + ldbm_instance *inst = (ldbm_instance*)arg; + if (inst && (inst->inst_flags & INST_FLAG_BUSY)) { + LDAPDebug( LDAP_DEBUG_ANY, + "Backend instance: '%s' is already in the middle of " + "another task and cannot be disturbed.\n", + inst->inst_name, 0, 0); + return SLAPI_DSE_CALLBACK_ERROR; + } else { + LDAPDebug( LDAP_DEBUG_ANY, + "Deleted Virtual List View Index.\n", 0, 0, 0); + return SLAPI_DSE_CALLBACK_OK; + } } @@ -1500,8 +1520,9 @@ if ( e == NULL ) { int rval; - LDAPDebug( LDAP_DEBUG_ANY, "vlv_trim_candidates_byvalue: Candidate ID %lu not found err=%d\n", (u_long)id, err, 0 ); - rval = idl_delete(&candidates, id); + LDAPDebug( LDAP_DEBUG_ANY, "vlv_trim_candidates_byvalue: " + "Candidate ID %lu not found err=%d\n", (u_long)id, err, 0 ); + rval = idl_delete((IDList **)&candidates, id); if (0 == rval || 1 == rval || 2 == rval) { goto retry; } else { @@ -1953,6 +1974,14 @@ const char *dn= slapi_sdn_get_dn(&e->e_sdn); backend *be= inst->inst_be; + if (instance_set_busy(inst) != 0) + { + LDAPDebug( LDAP_DEBUG_ANY, + "Backend instance: '%s' is already in the middle of " + "another task and cannot be disturbed.\n", + inst->inst_name, 0, 0); + return LDAP_OPERATIONS_ERROR; + } tag1=create_vlv_search_tag(dn); buf=slapi_ch_smprintf("%s%s%s%s%s","cn=MCC ",tag1,", cn=",inst->inst_name,LDBM_PLUGIN_ROOT); newdn=slapi_sdn_new_dn_byval(buf); @@ -1960,7 +1989,7 @@ PR_RWLock_Wlock(be->vlvSearchList_lock); p = vlvSearch_finddn((struct vlvSearch *)be->vlvSearchList, newdn); if(p!=NULL) - { + { LDAPDebug( LDAP_DEBUG_ANY, "Deleted Virtual List View Search (%s).\n", p->vlv_name, 0, 0); tag2=create_vlv_search_tag(dn); buf2=slapi_ch_smprintf("%s%s,%s",TAG,tag2,buf); @@ -1991,6 +2020,7 @@ } else { PR_RWLock_Unlock(be->vlvSearchList_lock); } + instance_set_not_busy(inst); slapi_ch_free((void **)&tag1); slapi_ch_free((void **)&buf); slapi_sdn_free(&newdn); From fedora-directory-commits at redhat.com Mon Sep 24 22:54:57 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Mon, 24 Sep 2007 18:54:57 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/rever des.c, 1.8, 1.9 Message-ID: <200709242254.l8OMsvsF001150@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/rever In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1102/ldapserver/ldap/servers/plugins/rever Modified Files: des.c Log Message: Resolves: bug 262021 Bug Description: Migration script does not migrate nsDS5ReplicaCredentials correctly. Reviewed by: nkinder (Thanks!) Fix Description: 7.1 and earlier chaining and replication credentials were stored incorrectly on little endian machines (x86 and itanium). They were "accidentally" stored correctly on big endian machines (sparc, pa-risc) because val == ntohl(val) on those platforms. When migrating from a little endian machine, we need to decode the password using the broken algorithm and re-encode it using the good method. We determine if the password is encode incorrectly by the following method: we use migratecred to decode and encode using the old path. If the values are equal, this means the password was already encoded correctly and we don't need to fix it. Otherwise, we set the flag that tells migratecred to fix it. In order to decode the broken password correctly on big endian machines, we have to swap the byte order to convert the values to little endian. Platforms tested: RHEL5 x86_64, RHEL5 i386, Solaris 9 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: des.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/rever/des.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- des.c 20 Sep 2007 20:27:34 -0000 1.8 +++ des.c 24 Sep 2007 22:54:54 -0000 1.9 @@ -492,7 +492,7 @@ migrateCredentials(char *oldpath, char *newpath, char *oldcred) { static char *useBrokenUUID = "USE_BROKEN_UUID=1"; - static char *disableBrokenUUID = "USE_BROKEN_UUID"; + static char *disableBrokenUUID = "USE_BROKEN_UUID=0"; char *plain = NULL; char *cipher = NULL; From fedora-directory-commits at redhat.com Mon Sep 24 22:54:59 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Mon, 24 Sep 2007 18:54:59 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd uuid.c, 1.8, 1.9 Message-ID: <200709242255.l8OMsx1A001185@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/servers/slapd In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1102/ldapserver/ldap/servers/slapd Modified Files: uuid.c Log Message: Resolves: bug 262021 Bug Description: Migration script does not migrate nsDS5ReplicaCredentials correctly. Reviewed by: nkinder (Thanks!) Fix Description: 7.1 and earlier chaining and replication credentials were stored incorrectly on little endian machines (x86 and itanium). They were "accidentally" stored correctly on big endian machines (sparc, pa-risc) because val == ntohl(val) on those platforms. When migrating from a little endian machine, we need to decode the password using the broken algorithm and re-encode it using the good method. We determine if the password is encode incorrectly by the following method: we use migratecred to decode and encode using the old path. If the values are equal, this means the password was already encoded correctly and we don't need to fix it. Otherwise, we set the flag that tells migratecred to fix it. In order to decode the broken password correctly on big endian machines, we have to swap the byte order to convert the values to little endian. Platforms tested: RHEL5 x86_64, RHEL5 i386, Solaris 9 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: uuid.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/uuid.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- uuid.c 20 Sep 2007 20:27:35 -0000 1.8 +++ uuid.c 24 Sep 2007 22:54:55 -0000 1.9 @@ -847,10 +847,16 @@ memcpy(&uuid->node, &_state.genstate.node, sizeof (uuid->node)); } +/* when converting broken values, we may need to swap the bytes */ +#define BSWAP16(x) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) +#define BSWAP32(x) ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ + (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) + /* format_uuid_v3 -- make a UUID from a (pseudo)random 128 bit number */ static void format_uuid_v3(guid_t * uuid, unsigned char hash[16]) { + char *use_broken_uuid = getenv("USE_BROKEN_UUID"); /* Construct a version 3 uuid with the (pseudo-)random number * plus a few constants. */ @@ -858,11 +864,18 @@ /* when migrating, we skip the ntohl in order to read in old, incorrectly formatted uuids */ - if (!getenv("USE_BROKEN_UUID")) { + if (!use_broken_uuid || (*use_broken_uuid == '0')) { /* convert UUID to local byte order */ uuid->time_low = PR_ntohl(uuid->time_low); uuid->time_mid = PR_ntohs(uuid->time_mid); uuid->time_hi_and_version = PR_ntohs(uuid->time_hi_and_version); + } else { +#if defined(IS_BIG_ENDIAN) + /* convert UUID to b0rken byte order */ + uuid->time_low = BSWAP32(uuid->time_low); + uuid->time_mid = BSWAP16(uuid->time_mid); + uuid->time_hi_and_version = BSWAP16(uuid->time_hi_and_version); +#endif } /* put in the variant and version bits */ From fedora-directory-commits at redhat.com Mon Sep 24 22:54:57 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Mon, 24 Sep 2007 18:54:57 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/admin/src/scripts DSMigration.pm.in, 1.16, 1.17 Migration.pm.in, 1.6, 1.7 Message-ID: <200709242255.l8OMtRpR001193@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/admin/src/scripts In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1102/ldapserver/ldap/admin/src/scripts Modified Files: DSMigration.pm.in Migration.pm.in Log Message: Resolves: bug 262021 Bug Description: Migration script does not migrate nsDS5ReplicaCredentials correctly. Reviewed by: nkinder (Thanks!) Fix Description: 7.1 and earlier chaining and replication credentials were stored incorrectly on little endian machines (x86 and itanium). They were "accidentally" stored correctly on big endian machines (sparc, pa-risc) because val == ntohl(val) on those platforms. When migrating from a little endian machine, we need to decode the password using the broken algorithm and re-encode it using the good method. We determine if the password is encode incorrectly by the following method: we use migratecred to decode and encode using the old path. If the values are equal, this means the password was already encoded correctly and we don't need to fix it. Otherwise, we set the flag that tells migratecred to fix it. In order to decode the broken password correctly on big endian machines, we have to swap the byte order to convert the values to little endian. Platforms tested: RHEL5 x86_64, RHEL5 i386, Solaris 9 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: DSMigration.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/DSMigration.pm.in,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- DSMigration.pm.in 22 Sep 2007 03:34:06 -0000 1.16 +++ DSMigration.pm.in 24 Sep 2007 22:54:47 -0000 1.17 @@ -179,10 +179,20 @@ sub migrateCredentials { my ($ent, $attr, $mig, $inst) = @_; my $oldval = $ent->getValues($attr); + + # Older versions of the server on x86 systems and other systems that do not use network byte order + # stored the credentials incorrectly. The first step is to determine if this is the case. We + # migrate using the same server root to see if we get the same output as we input. + debug(3, "In migrateCredentials - see how old credentials were encoded.\n"); + my $testval = `@bindir@/migratecred -o $mig->{actualsroot}/$inst -n $mig->{actualsroot}/$inst -c \'$oldval\'`; + if ($testval ne $oldval) { # need to turn on the special flag + debug(3, "Credentials not encoded correctly. oldval $oldval not equal to testval $testval. The value will be re-encoded correctly.\n"); + $ENV{MIGRATE_BROKEN_PWD} = "1"; # decode and re-encode correctly + } + debug(3, "Executing @bindir@/migratecred -o $mig->{actualsroot}/$inst -n @instconfigdir@/$inst -c \'$oldval\' . . .\n"); - $ENV{MIGRATE_BROKEN_PWD} = "1"; # passwords prior to 8.0 were encrypted incorrectly my $newval = `@bindir@/migratecred -o $mig->{actualsroot}/$inst -n @instconfigdir@/$inst -c \'$oldval\'`; - delete $ENV{MIGRATE_BROKEN_PWD}; # clear the flag + delete $ENV{MIGRATE_BROKEN_PWD}; # clear the flag, if set debug(3, "Converted old value [$oldval] to new value [$newval] for attr $attr in entry ", $ent->getDN(), "\n"); return $newval; } Index: Migration.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/Migration.pm.in,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Migration.pm.in 14 Sep 2007 02:41:13 -0000 1.6 +++ Migration.pm.in 24 Sep 2007 22:54:47 -0000 1.7 @@ -128,17 +128,7 @@ or "slapd.Suffix=dc=example, dc=com" Values passed in this manner will override values in an .inf file -given with the -f argument. If you need to specify the cleartext -directory manager password (e.g. in order to do remote migration), -you must specify the password for each instance in a section whose -name is the instance name e.g. - [slapd-ldap1] - RootDNPwd=ldap1password - [slapd-ldap2] - RootDNPwd=ldap2password -or on the command line like this: - command ... slapd-ldap1.RootDNPwd=ldap1password \ - slapd-ldap2.RootDNPwd=ldap2password ... +given with the -f argument. actualsroot: This is used when you must migrate from one machine to another. The @@ -373,3 +363,10 @@ # Mandatory TRUE return value. # 1; + +# emacs settings +# Local Variables: +# mode:perl +# indent-tabs-mode: nil +# tab-width: 4 +# End: From fedora-directory-commits at redhat.com Mon Sep 24 23:39:30 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Mon, 24 Sep 2007 19:39:30 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/tools dbscan.c, 1.16, 1.17 Message-ID: <200709242339.l8ONdUhn009475@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/tools In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv9381/slapd/tools Modified Files: dbscan.c Log Message: Resolves: 304191 Summary: Make dbscan handle special RUV related changelog entries. Index: dbscan.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/tools/dbscan.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- dbscan.c 13 Aug 2007 15:35:35 -0000 1.16 +++ dbscan.c 24 Sep 2007 23:39:23 -0000 1.17 @@ -93,6 +93,12 @@ #define SLAPI_OPERATION_ANY 0xFFFFFFFFUL #define SLAPI_OPERATION_NONE 0x00000000UL +/* changelog ruv info. These correspond with some special csn + * timestamps from cl5_api.c */ +#define ENTRY_COUNT_KEY "0000006f" /* 111 csn timestamp */ +#define PURGE_RUV_KEY "000000de" /* 222 csn timestamp */ +#define MAX_RUV_KEY "0000014d" /* 333 csn timestamp */ + #define ONEMEG (1024*1024) #if defined(linux) @@ -431,6 +437,25 @@ free(type); } +/* data format: ..... */ +void print_ruv(unsigned char *buff) +{ + char *pos = buff; + uint32 i; + uint32 val_count; + + /* need to do the copy first, to skirt around alignment problems on + certain architectures */ + memcpy((char *)&val_count, pos, sizeof(val_count)); + val_count = ntohl(val_count); + pos += sizeof (uint32); + + for (i = 0; i < val_count; i++) + { + print_ber_attr(NULL, &pos); + } +} + /* *** Copied from cl5_api:cl5DBData2Entry *** Data in db format: @@ -674,7 +699,17 @@ } else if (file_type & CHANGELOGTYPE) { /* changelog db file */ printf("\ndbid: %s\n", format(key->data, key->size, buf, buflen)); - print_changelog(data->data, data->size); + if (strncasecmp((char *)key->data, ENTRY_COUNT_KEY, 8) == 0) { + printf("\tentry count: %d\n", *(int*)data->data); + } else if (strncasecmp((char *)key->data, PURGE_RUV_KEY, 8) == 0) { + printf("\tpurge ruv:\n"); + print_ruv(data->data); + } else if (strncasecmp((char *)key->data, MAX_RUV_KEY, 8) == 0) { + printf("\tmax ruv:\n"); + print_ruv(data->data); + } else { + print_changelog(data->data, data->size); + } return; } else if (file_type & ENTRYTYPE) { /* id2entry file */ From fedora-directory-commits at redhat.com Mon Sep 24 23:39:26 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Mon, 24 Sep 2007 19:39:26 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/replication cl5_api.c, 1.15, 1.16 Message-ID: <200709242339.l8ONdu9R009492@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/replication In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv9381/plugins/replication Modified Files: cl5_api.c Log Message: Resolves: 304191 Summary: Make dbscan handle special RUV related changelog entries. Index: cl5_api.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/cl5_api.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- cl5_api.c 11 Jun 2007 17:22:37 -0000 1.15 +++ cl5_api.c 24 Sep 2007 23:39:22 -0000 1.16 @@ -6643,7 +6643,7 @@ CSN *csn= csn_new(); char *rt; - csn_set_time(csn, type); + csn_set_time(csn, (time_t)type); csn_set_replicaid(csn, 0); rt = csn_as_string(csn, PR_FALSE, csnStr); From fedora-directory-commits at redhat.com Tue Sep 25 19:43:52 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Tue, 25 Sep 2007 15:43:52 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd schema.c, 1.10, 1.11 Message-ID: <200709251943.l8PJhqjU020703@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/servers/slapd In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv20603 Modified Files: schema.c Log Message: Resolves: #287961 Summary: server crashes in schema replication Description: resetting the global linked list head when the first objectclass is removed from the list. Index: schema.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/schema.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- schema.c 10 Nov 2006 23:45:40 -0000 1.10 +++ schema.c 25 Sep 2007 19:43:50 -0000 1.11 @@ -2553,6 +2553,10 @@ /* the names match -- remove from the current list */ if ( tmpocp == curlisthead ) { curlisthead = tmpocp->oc_next; + /* The global oc list is scanned in read_oc_ldif above, + if there are multiple objectclasses to be updated. + Needs to maintain the list dynamically. */ + g_set_global_oc_nolock( curlisthead ); } else { prevocp->oc_next = tmpocp->oc_next; } From fedora-directory-commits at redhat.com Tue Sep 25 22:03:22 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Tue, 25 Sep 2007 18:03:22 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm proto-back-ldbm.h, 1.12, 1.13 dblayer.c, 1.20, 1.21 perfctrs.c, 1.7, 1.8 Message-ID: <200709252203.l8PM3MMu016323@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv16176 Modified Files: proto-back-ldbm.h dblayer.c perfctrs.c Log Message: Resolves: #241089 Summary: reset db statistics between restarts Description: cleaning up the db stats when the server is shutdown Index: proto-back-ldbm.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/proto-back-ldbm.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- proto-back-ldbm.h 7 Sep 2007 19:08:45 -0000 1.12 +++ proto-back-ldbm.h 25 Sep 2007 22:03:19 -0000 1.13 @@ -382,7 +382,7 @@ */ void perfctrs_wait(size_t milliseconds,perfctrs_private *priv,DB_ENV *db_env); void perfctrs_init(struct ldbminfo *li,perfctrs_private **priv); -void perfctrs_terminate(perfctrs_private **priv); +void perfctrs_terminate(perfctrs_private **priv, DB_ENV *db_env); void perfctrs_as_entry( Slapi_Entry *e, perfctrs_private *priv, DB_ENV *db_env ); /* Index: dblayer.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/dblayer.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- dblayer.c 7 Sep 2007 19:08:45 -0000 1.20 +++ dblayer.c 25 Sep 2007 22:03:19 -0000 1.21 @@ -2481,7 +2481,7 @@ /* Shutdown the performance counter stuff */ if (DBLAYER_NORMAL_MODE & dbmode) { if (priv->perf_private) { - perfctrs_terminate(&priv->perf_private); + perfctrs_terminate(&priv->perf_private, priv->dblayer_env->dblayer_DB_ENV); } } Index: perfctrs.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/perfctrs.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- perfctrs.c 8 Aug 2007 14:04:45 -0000 1.7 +++ perfctrs.c 25 Sep 2007 22:03:19 -0000 1.8 @@ -219,8 +219,21 @@ } /* Terminate perf ctrs */ -void perfctrs_terminate(perfctrs_private **priv) +void perfctrs_terminate(perfctrs_private **priv, DB_ENV *db_env) { + DB_MPOOL_STAT *mpstat = NULL; + DB_TXN_STAT *txnstat = NULL; + DB_LOG_STAT *logstat = NULL; + DB_LOCK_STATi *lockstat = NULL; + + MEMP_STAT(db_env, &mpstat, NULL, DB_STAT_CLEAR, malloc); + slapi_ch_free((void**)&mpstat); + TXN_STAT(db_env, &txnstat, DB_STAT_CLEAR, malloc); + slapi_ch_free((void**)&txnstat); + LOG_STAT(db_env, &logstat, DB_STAT_CLEAR, malloc); + slapi_ch_free((void**)&logstat); + LOCK_STAT(db_env, &lockstat, DB_STAT_CLEAR, malloc); + slapi_ch_free((void**)&lockstat); #if defined(_WIN32) if (NULL != (*priv)->memory) { UnmapViewOfFile((*priv)->memory); From fedora-directory-commits at redhat.com Tue Sep 25 22:12:29 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Tue, 25 Sep 2007 18:12:29 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd mapping_tree.c, 1.10, 1.11 Message-ID: <200709252212.l8PMCTTM016774@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/ldapserver/ldap/servers/slapd In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv16755/ldapserver/ldap/servers/slapd Modified Files: mapping_tree.c Log Message: Resolves: bug 301811 Bug Description: reliab15: slapd hangs on goblin5 Reviewed by: nhosoi (Thanks!) Fix Description: We are calling the mtn_lock() twice in the same thread. The proposed fix is to move the mtn_lock() so this doesn't happen. Platforms tested: RHEL5 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: mapping_tree.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/mapping_tree.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- mapping_tree.c 23 Aug 2007 20:52:13 -0000 1.10 +++ mapping_tree.c 25 Sep 2007 22:12:26 -0000 1.11 @@ -2237,6 +2237,7 @@ int index; Slapi_Operation *op; int ret; + int need_unlock = 0; if(mapping_tree_freed){ return LDAP_OPERATIONS_ERROR; @@ -2246,14 +2247,17 @@ slapi_pblock_get(pb, SLAPI_OPERATION, &op); target_sdn = operation_get_target_spec (op); - mtn_lock(); - * referral = NULL; ret = slapi_mapping_tree_select(pb, be, referral, errorbuf); if (ret) goto unlock_and_return; slapi_sdn_init_dn_byref(&dn_newdn,newdn); + + /* acquire lock now, after slapi_mapping_tree_select() which also locks, + because we are accessing mt internals */ + mtn_lock(); + need_unlock = 1; /* we have now acquired the lock */ target_node = slapi_get_mapping_tree_node_by_dn(&dn_newdn); if (target_node == NULL) target_node = mapping_tree_root; @@ -2270,6 +2274,11 @@ } unlock_and_return: + /* if slapi_mapping_tree_select failed, we won't have the lock */ + if (need_unlock) { + mtn_unlock(); + } + slapi_sdn_done(&dn_newdn); if (new_be) @@ -2291,8 +2300,6 @@ *referral = NULL; } } - - mtn_unlock(); return ret; } From fedora-directory-commits at redhat.com Wed Sep 26 05:43:37 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Wed, 26 Sep 2007 01:43:37 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/replication windows_inc_protocol.c, 1.13, 1.14 windows_tot_protocol.c, 1.10, 1.11 Message-ID: <200709260543.l8Q5hbPU018069@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/replication In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv18050 Modified Files: windows_inc_protocol.c windows_tot_protocol.c Log Message: Resolves: 170560 Summary: Make sync total update deal with an empty changelog. Index: windows_inc_protocol.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windows_inc_protocol.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- windows_inc_protocol.c 10 Nov 2006 23:45:17 -0000 1.13 +++ windows_inc_protocol.c 26 Sep 2007 05:43:34 -0000 1.14 @@ -1128,12 +1128,23 @@ slapi_operation_parameters op; int return_value; int rc; + int set_mincsn = 0; CL5ReplayIterator *changelog_iterator = NULL; RUV *current_ruv = ruv_dup(remote_update_vector); + CSN *mincsn = NULL; LDAPDebug( LDAP_DEBUG_TRACE, "=> send_updates\n", 0, 0, 0 ); *num_changes_sent = 0; + + /* Check if the min csn is set in our RUV to see if we need to set it below. */ + ruv_get_min_csn(current_ruv, &mincsn); + if (!mincsn) { + set_mincsn = 1; + } else { + csn_free(&mincsn); + } + /* * Iterate over the changelog. Retrieve each update, * construct an appropriate LDAP operation, @@ -1341,7 +1352,22 @@ } if (mark_record_done) { - /* bring the consumers (AD) RUV up to date */ + /* If this is the very first change being sent, + * it's possible that we haven't set a min csn + * in the RUV yet. This is possible because we + * simply copy the supplier RUV during the total + * update process. The supplier RUV will not have + * a min or max csn set if no changes have ever + * been written to it's changelog. We need to set + * the min csn for the consumer here to prevent + * problems with further sync operations. */ + if (set_mincsn) { + ruv_set_min_csn(current_ruv, entry.op->csn, NULL); + set_mincsn = 0; + } + + /* Bring the consumers (AD) RUV up to date. + * This sets the max csn. */ ruv_force_csn_update(current_ruv, entry.op->csn); } break; @@ -1637,14 +1663,7 @@ } else { - /* Check for the case where part of the RUV remote is missing */ - if (ruv_has_both_csns(remote_ruv)) - { - return_value = EXAMINE_RUV_OK; - } else - { - return_value = EXAMINE_RUV_PRISTINE_REPLICA; - } + return_value = EXAMINE_RUV_OK; } slapi_ch_free((void**)&remote_gen); slapi_ch_free((void**)&local_gen); Index: windows_tot_protocol.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windows_tot_protocol.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- windows_tot_protocol.c 4 Sep 2007 15:45:57 -0000 1.10 +++ windows_tot_protocol.c 26 Sep 2007 05:43:34 -0000 1.11 @@ -142,14 +142,6 @@ goto done; } - /* Get the current replica RUV. - * If the total update succeeds, we will set the consumer RUV to this value. - */ - replica = object_get_data(prp->replica_object); - local_ruv_obj = replica_get_ruv (replica); - starting_ruv = ruv_dup((RUV*) object_get_data ( local_ruv_obj )); - object_release (local_ruv_obj); - agmt_set_last_init_status(prp->agmt, 0, 0, "Total schema update in progress"); remote_schema_csn = agmt_get_consumer_schema_csn ( prp->agmt ); @@ -165,6 +157,18 @@ cookie_has_more = windows_private_dirsync_has_more(prp->agmt); windows_private_save_dirsync_cookie(prp->agmt); + + /* If we got a change from dirsync, we should have a good RUV + * that has a min & max value. If no change was generated, + * the RUV will have NULL min and max csns. We deal with + * updating these values when we process the first change in + * the incremental sync protocol ( send_updates() ). We will + * use this value for setting the consumer RUV if the total + * update succeeds. */ + replica = object_get_data(prp->replica_object); + local_ruv_obj = replica_get_ruv (replica); + starting_ruv = ruv_dup((RUV*) object_get_data ( local_ruv_obj )); + object_release (local_ruv_obj); /* send everything */ From fedora-directory-commits at redhat.com Wed Sep 26 17:32:43 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Wed, 26 Sep 2007 13:32:43 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm perfctrs.c, 1.8, 1.9 Message-ID: <200709261732.l8QHWhNm007267@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv7231 Modified Files: perfctrs.c Log Message: Fixed a typo I put in in the previous checkin. Index: perfctrs.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/perfctrs.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- perfctrs.c 25 Sep 2007 22:03:19 -0000 1.8 +++ perfctrs.c 26 Sep 2007 17:32:41 -0000 1.9 @@ -224,7 +224,7 @@ DB_MPOOL_STAT *mpstat = NULL; DB_TXN_STAT *txnstat = NULL; DB_LOG_STAT *logstat = NULL; - DB_LOCK_STATi *lockstat = NULL; + DB_LOCK_STAT *lockstat = NULL; MEMP_STAT(db_env, &mpstat, NULL, DB_STAT_CLEAR, malloc); slapi_ch_free((void**)&mpstat); From fedora-directory-commits at redhat.com Thu Sep 27 16:54:33 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Thu, 27 Sep 2007 12:54:33 -0400 Subject: [Fedora-directory-commits] adminserver/admserv/cfgstuff admserv.conf.in, 1.8, 1.9 Message-ID: <200709271654.l8RGsXpF024309@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/adminserver/admserv/cfgstuff In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv24142/admserv/cfgstuff Modified Files: admserv.conf.in Log Message: Resolves: #251090 Summary: ds_remove cannot remove/rename directories (comment #7) Changes: 1) let ds_remove (CGI) run with the root permission. 2) acl names for SIE group were identical for all the DS instances: "SIE Group", which should be different for each instance. Index: admserv.conf.in =================================================================== RCS file: /cvs/dirsec/adminserver/admserv/cfgstuff/admserv.conf.in,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- admserv.conf.in 10 Aug 2007 02:23:29 -0000 1.8 +++ admserv.conf.in 27 Sep 2007 16:54:30 -0000 1.9 @@ -119,7 +119,7 @@ # Handle Stop, Start, Restart, Instance Creation - invoke mod_restartd # need to add instance creation because you may want to create an instance # of DS on a low port, and instance creation starts the instance as well - + AuthUserFile @configdir@/admpw AuthType basic AuthName "Admin Server" From fedora-directory-commits at redhat.com Thu Sep 27 16:54:34 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Thu, 27 Sep 2007 12:54:34 -0400 Subject: [Fedora-directory-commits] adminserver/admserv/schema/ldif 10dsdata.ldif.tmpl, 1.8, 1.9 Message-ID: <200709271654.l8RGsYYq024315@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/adminserver/admserv/schema/ldif In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv24142/admserv/schema/ldif Modified Files: 10dsdata.ldif.tmpl Log Message: Resolves: #251090 Summary: ds_remove cannot remove/rename directories (comment #7) Changes: 1) let ds_remove (CGI) run with the root permission. 2) acl names for SIE group were identical for all the DS instances: "SIE Group", which should be different for each instance. Index: 10dsdata.ldif.tmpl =================================================================== RCS file: /cvs/dirsec/adminserver/admserv/schema/ldif/10dsdata.ldif.tmpl,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- 10dsdata.ldif.tmpl 26 Jun 2007 18:50:28 -0000 1.8 +++ 10dsdata.ldif.tmpl 27 Sep 2007 16:54:31 -0000 1.9 @@ -20,7 +20,7 @@ dn: o=NetscapeRoot changetype: modify add: aci -aci: (targetattr = "*")(version 3.0; acl "SIE Group"; allow (all) groupdn = "ldap:///cn=slapd-%dsid%, cn=%brand% Directory Server, cn=Server Group, cn=%fqdn%, ou=%domain%, o=NetscapeRoot";) +aci: (targetattr = "*")(version 3.0; acl "SIE Group (%dsid%)"; allow (all) groupdn = "ldap:///cn=slapd-%dsid%, cn=%brand% Directory Server, cn=Server Group, cn=%fqdn%, ou=%domain%, o=NetscapeRoot";) dn: cn=%brand% Directory Server, cn=Server Group, cn=%fqdn%, ou=%domain%, o=NetscapeRoot objectClass: nsApplication From fedora-directory-commits at redhat.com Thu Sep 27 16:55:33 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Thu, 27 Sep 2007 12:55:33 -0400 Subject: [Fedora-directory-commits] mod_restartd mod_restartd.c,1.4,1.5 Message-ID: <200709271655.l8RGtXOe024370@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/mod_restartd In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv24321/mod_restartd Modified Files: mod_restartd.c Log Message: Resolves: #251090 Summary: ds_remove cannot remove/rename directories (comment #7) Change: let ds_remove (CGI) run with the root permission. Index: mod_restartd.c =================================================================== RCS file: /cvs/dirsec/mod_restartd/mod_restartd.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- mod_restartd.c 17 Nov 2005 17:44:44 -0000 1.4 +++ mod_restartd.c 27 Sep 2007 16:55:31 -0000 1.5 @@ -839,7 +839,7 @@ } } - regcomp(&uriPat, "/.*/tasks/operation/(start|restart|stop|startconfigds|create)$", + regcomp(&uriPat, "/.*/tasks/operation/(start|restart|stop|startconfigds|create|remove)$", REG_EXTENDED|REG_NOSUB|REG_ICASE); return OK; From fedora-directory-commits at redhat.com Thu Sep 27 16:57:11 2007 From: fedora-directory-commits at redhat.com (Richard Allen Megginson (rmeggins)) Date: Thu, 27 Sep 2007 12:57:11 -0400 Subject: [Fedora-directory-commits] adminserver configure.ac, 1.20, 1.21 aclocal.m4, 1.31, 1.32 configure, 1.35, 1.36 missing, 1.21, 1.22 install-sh, 1.21, 1.22 Makefile.in, 1.38, 1.39 depcomp, 1.21, 1.22 config.sub, 1.21, 1.22 config.guess, 1.21, 1.22 compile, 1.20, 1.21 Message-ID: <200709271657.l8RGvBqp024422@cvs-int.fedora.redhat.com> Author: rmeggins Update of /cvs/dirsec/adminserver In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv24394/adminserver Modified Files: configure.ac aclocal.m4 configure missing install-sh Makefile.in depcomp config.sub config.guess compile Log Message: Resolves: bug 304081 Bug Description: Admin server cgi binaries are being built incorrectly with an rpath of /usr/lib64 Reviewed by: mlum (Thanks!) Fix Description: libtool, in its nearly infinite wisdom, appends -rpath $libdir to each executable, and there is apparently no standard way to disable this behavior. Since RPATH overrides LD_LIBRARY_PATH on ELF systems, you are stuck if you have an old version of nss/nspr installed in $libdir but you want to use a different version at runtime. So, the solution is to whip out my scalpel and excise the offending code from the libtool which is generated by configure. There is precedent for this in the code already, to accommodate the "broken" libtool on rhel/fedora platforms. Platforms tested: RHEL4 x86_64, RHEL5 x86_64 Flag Day: no Doc impact: no QA impact: should be covered by regular nightly and manual testing New Tests integrated into TET: none Index: configure.ac =================================================================== RCS file: /cvs/dirsec/adminserver/configure.ac,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- configure.ac 21 Aug 2007 20:46:45 -0000 1.20 +++ configure.ac 27 Sep 2007 16:57:08 -0000 1.21 @@ -90,6 +90,16 @@ ]) AM_CONDITIONAL(BUNDLE,test "$bundle" = "1") +# libtool automatically adds --rpath $libdir to each executable, and +# there is apparently no standard way to disable this. Also, you cannot +# override rpath with LD_LIBRARY_PATH, so this causes problems if you have +# and old version of nss/nspr installed in the system $libdir, but you +# want to use a different one. So we're disabling this rpath thing by +# default and adding a --enable-rpath flag if you really, really want +# to do this. +AC_MSG_CHECKING(for --enable-rpath) +AC_ARG_ENABLE(rpath, AS_HELP_STRING([--enable-rpath], [Allow libtool to add an rpath to $libdir (default: no)])) + m4_include(m4/fhs.m4) # server userid, groupid @@ -377,6 +387,17 @@ rm -f libtool.tmp fi +if test "$enable_rpath" != "yes" ; then + AC_MSG_NOTICE([Fixing libtool to remove automatic rpath to $libdir . . .]) + cp -p libtool libtool.orig + cp -p libtool libtool.tmp + sed -e '/^runpath_var/ d' \ + -e '/^hardcode_libdir_flag_spec/ d' \ + libtool > libtool.tmp + cp -p libtool.tmp libtool + rm -f libtool.tmp +fi + AC_CONFIG_FILES([Makefile]) # if doing a recursive configure, add --with-adminserver Index: aclocal.m4 =================================================================== RCS file: /cvs/dirsec/adminserver/aclocal.m4,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- aclocal.m4 5 Sep 2007 16:45:58 -0000 1.31 +++ aclocal.m4 27 Sep 2007 16:57:08 -0000 1.32 @@ -1578,10 +1578,27 @@ # before this can be enabled. hardcode_into_libs=yes + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -4288,6 +4305,9 @@ # Is the compiler the GNU C compiler? with_gcc=$_LT_AC_TAGVAR(GCC, $1) +gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` +gcc_ver=\`gcc -dumpversion\` + # An ERE matcher. EGREP=$lt_EGREP @@ -4421,11 +4441,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) +predep_objects=\`echo $lt_[]_LT_AC_TAGVAR(predep_objects, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) +postdep_objects=\`echo $lt_[]_LT_AC_TAGVAR(postdep_objects, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place before the objects being linked to create a # shared library. @@ -4437,7 +4457,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) +compiler_lib_search_path=\`echo $lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -4517,7 +4537,7 @@ link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) # Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec +sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -6353,6 +6373,7 @@ done done done +IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris @@ -6385,6 +6406,7 @@ done ]) SED=$lt_cv_path_SED +AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ]) Index: configure =================================================================== RCS file: /cvs/dirsec/adminserver/configure,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- configure 5 Sep 2007 16:45:58 -0000 1.35 +++ configure 27 Sep 2007 16:57:08 -0000 1.36 @@ -468,7 +468,7 @@ ac_default_prefix=/opt/dirsrv ac_subdirs_all="$ac_subdirs_all mod_admserv" ac_subdirs_all="$ac_subdirs_all mod_restartd" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CX! XCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS PACKAGE_BASE_NAME PACKAGE_BASE_VERSION debug_defs BUNDLE_TRUE BUNDLE_FALSE LIBSOCKET LIBNSL LIBCSTD LIBCRUN initdir perlexec CXXLINK_REQUIRED_TRUE CXXLINK_REQUIRED_FALSE HPUX_TRUE HPUX_FALSE SOLARIS_TRUE SOLARIS_FALSE HTTPD APXS APR_CONFIG PKG_CONFIG ICU_CONFIG nsspcache instconfigdir dslibdir nspr_inc nspr_lib nspr_libdir nss_inc nss_lib nss_libdir sasl_inc sasl_lib sasl_libdir ldapsdk_inc ldapsdk_lib ldapsdk_libdir adminutil_inc adminutil_lib adminutil_libdir adminutil_ver icu_lib icu_libdir icu_inc icu_bin instancename cgibindir cmdbindir moddir modnssbindir propertydir htmldir icondir manualdir httpdconf httpdconfdir mimemagic httpduser httpdgroup admlogdir piddir pidfile admservport ldifdir admmoddir nssmoddir infdir perldir brand capbrand vendor WINNT_TRUE WINNT_FALSE APACHE22_TRUE APACHE22_FALSE subdirs MOD_ADMSERV_TRUE MOD_ADMSERV_FALSE MOD_RESTARTD_TRUE MOD_RESTARTD_FALSE LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE SED EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CP! P CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS PACKAGE_BASE_NAME PACKAGE_BASE_VERSION debug_defs BUNDLE_TRUE BUNDLE_FALSE LIBSOCKET LIBNSL LIBCSTD LIBCRUN initdir perlexec CXXLINK_REQUIRED_TRUE CXXLINK_REQUIRED_FALSE HPUX_TRUE HPUX_FALSE SOLARIS_TRUE SOLARIS_FALSE HTTPD APXS APR_CONFIG PKG_CONFIG ICU_CONFIG nsspcache instconfigdir dslibdir nspr_inc nspr_lib nspr_libdir nss_inc nss_lib nss_libdir sasl_inc sasl_lib sasl_libdir ldapsdk_inc ldapsdk_lib ldapsdk_libdir adminutil_inc adminutil_lib adminutil_libdir adminutil_ver icu_lib icu_libdir icu_inc icu_bin instancename cgibindir cmdbindir moddir modnssbindir propertydir htmldir icondir manualdir httpdconf httpdconfdir mimemagic httpduser httpdgroup admlogdir piddir pidfile admservport ldifdir admmoddir nssmoddir infdir perldir brand capbrand vendor WINNT_TRUE WINNT_FALSE APACHE22_TRUE APACHE22_FALSE subdirs MOD_ADMSERV_TRUE MOD_ADMSERV_FALSE MOD_RESTARTD_TRUE MOD_RESTARTD_FALSE LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -1043,6 +1043,8 @@ --disable-libtool-lock avoid locking (might break parallel builds) --enable-debug Enable debug features (default: no) --enable-bundle Enable bundled dependencies (default: no) + --enable-rpath Allow libtool to add an rpath to $libdir (default: + no) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -3837,6 +3839,7 @@ done done done +IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris @@ -3871,6 +3874,7 @@ fi SED=$lt_cv_path_SED + echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 @@ -4311,7 +4315,7 @@ ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 4314 "configure"' > conftest.$ac_ext + echo '#line 4318 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -5446,7 +5450,7 @@ # Provide some information about the compiler. -echo "$as_me:5449:" \ +echo "$as_me:5453:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 @@ -6509,11 +6513,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6512: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6516: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6516: \$? = $ac_status" >&5 + echo "$as_me:6520: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -6777,11 +6781,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6780: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6784: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6784: \$? = $ac_status" >&5 + echo "$as_me:6788: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -6881,11 +6885,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6884: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6888: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:6888: \$? = $ac_status" >&5 + echo "$as_me:6892: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -8346,10 +8350,31 @@ # before this can be enabled. hardcode_into_libs=yes + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '#line 8357 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -9226,7 +9251,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:11697: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:11673: \$? = $ac_status" >&5 + echo "$as_me:11701: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -11770,11 +11798,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11773: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11801: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:11777: \$? = $ac_status" >&5 + echo "$as_me:11805: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -12302,10 +12330,31 @@ # before this can be enabled. hardcode_into_libs=yes + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '#line 12337 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -12689,6 +12738,9 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX +gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` +gcc_ver=\`gcc -dumpversion\` + # An ERE matcher. EGREP=$lt_EGREP @@ -12822,11 +12874,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=$lt_predep_objects_CXX +predep_objects=\`echo $lt_predep_objects_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=$lt_postdep_objects_CXX +postdep_objects=\`echo $lt_postdep_objects_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place before the objects being linked to create a # shared library. @@ -12838,7 +12890,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX +compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_CXX | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -12918,7 +12970,7 @@ link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec +sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -13340,11 +13392,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13343: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13395: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:13347: \$? = $ac_status" >&5 + echo "$as_me:13399: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -13444,11 +13496,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13447: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13499: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13451: \$? = $ac_status" >&5 + echo "$as_me:13503: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -14889,10 +14941,31 @@ # before this can be enabled. hardcode_into_libs=yes + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '#line 14948 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -15276,6 +15349,9 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 +gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` +gcc_ver=\`gcc -dumpversion\` + # An ERE matcher. EGREP=$lt_EGREP @@ -15409,11 +15485,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=$lt_predep_objects_F77 +predep_objects=\`echo $lt_predep_objects_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=$lt_postdep_objects_F77 +postdep_objects=\`echo $lt_postdep_objects_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place before the objects being linked to create a # shared library. @@ -15425,7 +15501,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_F77 +compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_F77 | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -15505,7 +15581,7 @@ link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec +sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -15647,11 +15723,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15650: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15726: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15654: \$? = $ac_status" >&5 + echo "$as_me:15730: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -15915,11 +15991,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15918: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15994: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15922: \$? = $ac_status" >&5 + echo "$as_me:15998: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -16019,11 +16095,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16022: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16098: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:16026: \$? = $ac_status" >&5 + echo "$as_me:16102: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17484,10 +17560,31 @@ # before this can be enabled. hardcode_into_libs=yes + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '#line 17567 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -17871,6 +17968,9 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ +gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` +gcc_ver=\`gcc -dumpversion\` + # An ERE matcher. EGREP=$lt_EGREP @@ -18004,11 +18104,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=$lt_predep_objects_GCJ +predep_objects=\`echo $lt_predep_objects_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=$lt_postdep_objects_GCJ +postdep_objects=\`echo $lt_postdep_objects_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place before the objects being linked to create a # shared library. @@ -18020,7 +18120,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ +compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_GCJ | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -18100,7 +18200,7 @@ link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec +sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -18352,6 +18452,9 @@ # Is the compiler the GNU C compiler? with_gcc=$GCC_RC +gcc_dir=\`gcc -print-file-name=. | $SED 's,/\.$,,'\` +gcc_ver=\`gcc -dumpversion\` + # An ERE matcher. EGREP=$lt_EGREP @@ -18485,11 +18588,11 @@ # Dependencies to place before the objects being linked to create a # shared library. -predep_objects=$lt_predep_objects_RC +predep_objects=\`echo $lt_predep_objects_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects=$lt_postdep_objects_RC +postdep_objects=\`echo $lt_postdep_objects_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Dependencies to place before the objects being linked to create a # shared library. @@ -18501,7 +18604,7 @@ # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_RC +compiler_lib_search_path=\`echo $lt_compiler_lib_search_path_RC | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -18581,7 +18684,7 @@ link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec +sys_lib_search_path_spec=\`echo $lt_sys_lib_search_path_spec | \$SED -e "s@\${gcc_dir}@\\\${gcc_dir}@g;s@\${gcc_ver}@\\\${gcc_ver}@g"\` # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec @@ -22832,6 +22935,21 @@ fi +# libtool automatically adds --rpath $libdir to each executable, and +# there is apparently no standard way to disable this. Also, you cannot +# override rpath with LD_LIBRARY_PATH, so this causes problems if you have +# and old version of nss/nspr installed in the system $libdir, but you +# want to use a different one. So we're disabling this rpath thing by +# default and adding a --enable-rpath flag if you really, really want +# to do this. +echo "$as_me:$LINENO: checking for --enable-rpath" >&5 +echo $ECHO_N "checking for --enable-rpath... $ECHO_C" >&6 +# Check whether --enable-rpath or --disable-rpath was given. +if test "${enable_rpath+set}" = set; then + enableval="$enable_rpath" + +fi; + # BEGIN COPYRIGHT BLOCK # Copyright (C) 2006 Red Hat, Inc. # All rights reserved. @@ -24973,6 +25091,18 @@ rm -f libtool.tmp fi +if test "$enable_rpath" != "yes" ; then + { echo "$as_me:$LINENO: Fixing libtool to remove automatic rpath to $libdir . . ." >&5 +echo "$as_me: Fixing libtool to remove automatic rpath to $libdir . . ." >&6;} + cp -p libtool libtool.orig + cp -p libtool libtool.tmp + sed -e '/^runpath_var/ d' \ + -e '/^hardcode_libdir_flag_spec/ d' \ + libtool > libtool.tmp + cp -p libtool.tmp libtool + rm -f libtool.tmp +fi + ac_config_files="$ac_config_files Makefile" @@ -25778,6 +25908,7 @@ s, at CCDEPMODE@,$CCDEPMODE,;t t s, at am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s, at am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +s, at SED@,$SED,;t t s, at EGREP@,$EGREP,;t t s, at LN_S@,$LN_S,;t t s, at ECHO@,$ECHO,;t t Index: Makefile.in =================================================================== RCS file: /cvs/dirsec/adminserver/Makefile.in,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- Makefile.in 5 Sep 2007 16:45:58 -0000 1.38 +++ Makefile.in 27 Sep 2007 16:57:08 -0000 1.39 @@ -398,6 +398,7 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOLARIS_FALSE = @SOLARIS_FALSE@ From fedora-directory-commits at redhat.com Thu Sep 27 18:33:33 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Thu, 27 Sep 2007 14:33:33 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/replication windows_connection.c, 1.16, 1.17 windows_protocol_util.c, 1.34, 1.35 windowsrepl.h, 1.13, 1.14 Message-ID: <200709271833.l8RIXXf8015657@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/replication In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv15634 Modified Files: windows_connection.c windows_protocol_util.c windowsrepl.h Log Message: Resolves: 238504 Summary: Don't replay AD originated password changes back to AD. Index: windows_connection.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windows_connection.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- windows_connection.c 12 Sep 2007 23:05:24 -0000 1.16 +++ windows_connection.c 27 Sep 2007 18:33:30 -0000 1.17 @@ -1796,6 +1796,34 @@ } } +/* Attempt to bind as a user to AD in order to see if we posess the + * most current password. Returns the LDAP return code of the bind. */ +int +windows_check_user_password(Repl_Connection *conn, Slapi_DN *sdn, char *password) +{ + const char *binddn = NULL; + LDAPMessage *res = NULL; + int rc = 0; + int msgid = 0; + + /* If we're already connected, this will just return success */ + windows_conn_connect(conn); + + /* Get binddn from sdn */ + binddn = slapi_sdn_get_dn(sdn); + + /* Attempt to do a bind on the existing connection + * using the dn and password that were passed in. */ + msgid = do_simple_bind(conn, conn->ld, (char *) binddn, password); + ldap_result(conn->ld, msgid, LDAP_MSG_ALL, NULL, &res); + ldap_parse_result( conn->ld, res, &rc, NULL, NULL, NULL, NULL, 1 /* Free res */); + + /* rebind as the DN specified in the sync agreement */ + do_simple_bind(conn, conn->ld, conn->binddn, conn->plain); + + return rc; +} + static int do_simple_bind (Repl_Connection *conn, LDAP *ld, char * binddn, char *password) { Index: windows_protocol_util.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windows_protocol_util.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- windows_protocol_util.c 20 Sep 2007 23:32:17 -0000 1.34 +++ windows_protocol_util.c 27 Sep 2007 18:33:30 -0000 1.35 @@ -741,49 +741,62 @@ } else { - char *quoted_password = NULL; - /* AD wants the password in quotes ! */ - quoted_password = PR_smprintf("\"%s\"",password); - if (quoted_password) - { - LDAPMod *pw_mods[2]; - LDAPMod pw_mod; - struct berval bv = {0}; - UChar *unicode_password = NULL; - int32_t unicode_password_length = 0; /* Length in _characters_ */ - int32_t buffer_size = 0; /* Size in _characters_ */ - UErrorCode error = U_ZERO_ERROR; - struct berval *bvals[2]; - /* Need to UNICODE encode the password here */ - /* It's one of those 'ask me first and I will tell you the buffer size' functions */ - u_strFromUTF8(NULL, 0, &unicode_password_length, quoted_password, strlen(quoted_password), &error); - buffer_size = unicode_password_length; - unicode_password = (UChar *)slapi_ch_malloc(unicode_password_length * sizeof(UChar)); - if (unicode_password) { - error = U_ZERO_ERROR; - u_strFromUTF8(unicode_password, buffer_size, &unicode_password_length, quoted_password, strlen(quoted_password), &error); - - /* As an extra special twist, we need to send the unicode in little-endian order for AD to be happy */ - to_little_endian_double_bytes(unicode_password, unicode_password_length); - - bv.bv_len = unicode_password_length * sizeof(UChar); - bv.bv_val = (char*)unicode_password; + /* We will attempt to bind to AD with the new password first. We do + * this to avoid playing a password change that originated from AD + * back to AD. If we just played the password change back, then + * both sides would be in sync, but AD would contain the new password + * twice in it's password history, which undermines the password + * history policies in AD. */ + if (windows_check_user_password(prp->conn, sdn, password)) { + char *quoted_password = NULL; + /* AD wants the password in quotes ! */ + quoted_password = PR_smprintf("\"%s\"",password); + if (quoted_password) + { + LDAPMod *pw_mods[2]; + LDAPMod pw_mod; + struct berval bv = {0}; + UChar *unicode_password = NULL; + int32_t unicode_password_length = 0; /* Length in _characters_ */ + int32_t buffer_size = 0; /* Size in _characters_ */ + UErrorCode error = U_ZERO_ERROR; + struct berval *bvals[2]; + /* Need to UNICODE encode the password here */ + /* It's one of those 'ask me first and I will tell you the buffer size' functions */ + u_strFromUTF8(NULL, 0, &unicode_password_length, quoted_password, strlen(quoted_password), &error); + buffer_size = unicode_password_length; + unicode_password = (UChar *)slapi_ch_malloc(unicode_password_length * sizeof(UChar)); + if (unicode_password) { + error = U_ZERO_ERROR; + u_strFromUTF8(unicode_password, buffer_size, &unicode_password_length, quoted_password, strlen(quoted_password), &error); + + /* As an extra special twist, we need to send the unicode in little-endian order for AD to be happy */ + to_little_endian_double_bytes(unicode_password, unicode_password_length); + + bv.bv_len = unicode_password_length * sizeof(UChar); + bv.bv_val = (char*)unicode_password; - bvals[0] = &bv; - bvals[1] = NULL; + bvals[0] = &bv; + bvals[1] = NULL; - pw_mod.mod_type = "UnicodePwd"; - pw_mod.mod_op = LDAP_MOD_REPLACE | LDAP_MOD_BVALUES; - pw_mod.mod_bvalues = bvals; + pw_mod.mod_type = "UnicodePwd"; + pw_mod.mod_op = LDAP_MOD_REPLACE | LDAP_MOD_BVALUES; + pw_mod.mod_bvalues = bvals; - pw_mods[0] = &pw_mod; - pw_mods[1] = NULL; + pw_mods[0] = &pw_mod; + pw_mods[1] = NULL; - pw_return = windows_conn_send_modify(prp->conn, slapi_sdn_get_dn(sdn), pw_mods, NULL, NULL ); + pw_return = windows_conn_send_modify(prp->conn, slapi_sdn_get_dn(sdn), pw_mods, NULL, NULL ); - slapi_ch_free((void**)&unicode_password); + slapi_ch_free((void**)&unicode_password); + } + PR_smprintf_free(quoted_password); } - PR_smprintf_free(quoted_password); + } else { + slapi_log_error(SLAPI_LOG_REPL, windows_repl_plugin_name, + "%s: AD already has the current password for %s. " + "Not sending password modify to AD.\n", + agmt_get_long_name(prp->agmt), slapi_sdn_get_dn(sdn)); } } @@ -1230,15 +1243,32 @@ } if (password) { - return_value = send_password_modify(remote_dn, password, prp); + /* We need to have a non-GUID dn in send_password_modify in order to + * bind as the user to check if we need to send the password change. + * You are supposed to be able to bind using a GUID dn, but it doesn't + * seem to work over plain LDAP. */ + if (is_guid_dn(remote_dn)) { + Slapi_DN *remote_dn_norm = NULL; + int norm_missing = 0; + + map_entry_dn_outbound(local_entry,&remote_dn_norm,prp,&norm_missing, 0); + return_value = send_password_modify(remote_dn_norm, password, prp); + slapi_sdn_free(&remote_dn_norm); + } else { + return_value = send_password_modify(remote_dn, password, prp); + } + if (return_value) { - slapi_log_error(SLAPI_LOG_REPL, windows_repl_plugin_name, "%s: windows_replay_update: update password returned %d\n", + slapi_log_error(SLAPI_LOG_REPL, windows_repl_plugin_name, + "%s: windows_replay_update: update password returned %d\n", agmt_get_long_name(prp->agmt), return_value ); } else { - /* If we successfully added an entry, and then subsequently changed its password, THEN we need to change its status in AD - * in order that it can be used (otherwise the user is marked as disabled). To do this we set this attribute and value: - * userAccountControl: 512 */ + /* If we successfully added an entry, and then subsequently changed + * its password, THEN we need to change its status in AD in order + * that it can be used (otherwise the user is marked as disabled). + * To do this we set this attribute and value: + * userAccountControl: 512 */ if (op->operation_type == SLAPI_OPERATION_ADD && missing_entry) { return_value = send_accountcontrol_modify(remote_dn, prp); Index: windowsrepl.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/windowsrepl.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- windowsrepl.h 17 Sep 2007 19:18:30 -0000 1.13 +++ windowsrepl.h 27 Sep 2007 18:33:30 -0000 1.14 @@ -100,6 +100,7 @@ ConnResult windows_conn_push_schema(Repl_Connection *conn, CSN **remotecsn); void windows_conn_set_timeout(Repl_Connection *conn, long timeout); void windows_conn_set_agmt_changed(Repl_Connection *conn); +int windows_check_user_password(Repl_Connection *conn, Slapi_DN *sdn, char *password); /* Used to work around a schema incompatibility between Microsoft and the IETF */ #define FAKE_STREET_ATTR_NAME "in#place#of#streetaddress" From fedora-directory-commits at redhat.com Thu Sep 27 21:33:39 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Thu, 27 Sep 2007 17:33:39 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm ldbm_search.c, 1.10, 1.11 Message-ID: <200709272133.l8RLXdGX013482@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv13436 Modified Files: ldbm_search.c Log Message: Resolves: 288521 Summary: Presence filter using attribute subtype returns incorrect search results. Index: ldbm_search.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/ldbm_search.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- ldbm_search.c 17 Sep 2007 19:18:31 -0000 1.10 +++ ldbm_search.c 27 Sep 2007 21:33:37 -0000 1.11 @@ -943,10 +943,12 @@ IDList *idl ) { + int rc = 0; + /* Is the ID list ALLIDS ? */ if ( ALLIDS(idl)) { /* If so, then can't optimize */ - return 0; + return rc; } /* Is this a base scope search? */ @@ -956,11 +958,40 @@ * the entrydn index in producing our 1 candidate, and that means * we have not used the filter to produce the candidate list. */ - return 0; + return rc; } - + /* Grok the filter and tell me if it has only equality components in it */ - return grok_filter(f); + rc = grok_filter(f); + + /* If we haven't determined that we can't skip the filter test already, + * do one last check for attribute subtypes. We don't need to worry + * about any complex filters here since grok_filter() will have already + * assumed that we can't skip the filter test in those cases. */ + if (rc != 0) { + char *type = NULL; + char *basetype = NULL; + + /* We don't need to free type since that's taken + * care of when the filter is free'd later. We + * do need to free basetype when we are done. */ + slapi_filter_get_attribute_type(f, &type); + basetype = slapi_attr_basetype(type, NULL, 0); + + /* Is the filter using an attribute subtype? */ + if (strcasecmp(type, basetype) != 0) { + /* If so, we can't optimize since attribute subtypes + * are simply indexed under their basetype attribute. + * The basetype index has no knowledge of the subtype + * itself. In the future, we should add support for + * indexing the subtypes so we can optimize this type + * of search. */ + rc = 0; + } + slapi_ch_free_string(&basetype); + } + + return rc; } From fedora-directory-commits at redhat.com Fri Sep 28 22:41:11 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Fri, 28 Sep 2007 18:41:11 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/replication repl5_agmt.c, 1.11, 1.12 Message-ID: <200709282241.l8SMfBR6004069@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/replication In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv4048 Modified Files: repl5_agmt.c Log Message: Resolves: 158667 Summary: Fractional replication log statement needed a newline. Index: repl5_agmt.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/replication/repl5_agmt.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- repl5_agmt.c 10 Nov 2006 23:45:17 -0000 1.11 +++ repl5_agmt.c 28 Sep 2007 22:41:09 -0000 1.12 @@ -399,7 +399,7 @@ { /* Report the error to the client */ slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name, "WARNING: " - "Attempt to exclude illegal attributes from a fractional agreement"); + "Attempt to exclude illegal attributes from a fractional agreement\n"); /* Free the list */ slapi_ch_array_free(denied_attrs); goto loser; From fedora-directory-commits at redhat.com Fri Sep 28 22:46:52 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Fri, 28 Sep 2007 18:46:52 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/passthru ptconfig.c, 1.6, 1.7 Message-ID: <200709282246.l8SMkq4o004156@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/passthru In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv4136 Modified Files: ptconfig.c Log Message: Resolves: 197997 Summary: Fixed PTA config parsing to use a comma delimiter instread of a space. Index: ptconfig.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/passthru/ptconfig.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ptconfig.c 10 Nov 2006 23:45:04 -0000 1.6 +++ ptconfig.c 28 Sep 2007 22:46:50 -0000 1.7 @@ -134,7 +134,7 @@ srvr = (PassThruServer *)slapi_ch_calloc( 1, sizeof( PassThruServer )); srvr->ptsrvr_url = slapi_ch_strdup( argv[i] ); - if (( p = strchr( srvr->ptsrvr_url, ' ' )) == NULL ) { + if (( p = strchr( srvr->ptsrvr_url, ',' )) == NULL ) { /* * use defaults for maxconnections, maxconcurrency, timeout, * LDAP version, and connlifetime. From fedora-directory-commits at redhat.com Fri Sep 28 22:54:18 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Fri, 28 Sep 2007 18:54:18 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm index.c, 1.10, 1.11 Message-ID: <200709282254.l8SMsIS6004316@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv4287 Modified Files: index.c Log Message: Resolves: 219586 Summary: Fixed leak of Slapi_Value in index code. Index: index.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/index.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- index.c 10 Nov 2006 23:45:39 -0000 1.10 +++ index.c 28 Sep 2007 22:54:16 -0000 1.11 @@ -535,7 +535,8 @@ slapi_entry_attr_find( olde->ep_entry, mods[i]->mod_type, &curr_attr ); if ( mods_valueArray != NULL ) { for ( j = 0; mods_valueArray[j] != NULL; j++ ) { - valuearray_remove_value(curr_attr, evals, mods_valueArray[j]); + Slapi_Value *rval = valuearray_remove_value(curr_attr, evals, mods_valueArray[j]); + slapi_value_free( &rval ); } } @@ -549,7 +550,8 @@ } } else { /* Remove duplicate value from deleted value array */ - valuearray_remove_value(curr_attr, deleted_valueArray, deleted_valueArray[j]); + Slapi_Value *rval = valuearray_remove_value(curr_attr, deleted_valueArray, deleted_valueArray[j]); + slapi_value_free( &rval ); j--; } } @@ -615,7 +617,8 @@ } } else { /* Remove duplicate value from the mod list */ - valuearray_remove_value(curr_attr, deleted_valueArray, deleted_valueArray[j]); + Slapi_Value *rval = valuearray_remove_value(curr_attr, deleted_valueArray, deleted_valueArray[j]); + slapi_value_free( &rval ); j--; } } From fedora-directory-commits at redhat.com Fri Sep 28 23:34:57 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Fri, 28 Sep 2007 19:34:57 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/admin/src/scripts DSCreate.pm.in, 1.6, 1.7 Message-ID: <200709282334.l8SNYvpM012410@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/admin/src/scripts In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv12366/admin/src/scripts Modified Files: DSCreate.pm.in Log Message: Resolves: 311851 Summary: Remove hard-coded SASL mappings and use config based regex mappings instead. Index: DSCreate.pm.in =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/scripts/DSCreate.pm.in,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DSCreate.pm.in 7 Sep 2007 15:02:25 -0000 1.6 +++ DSCreate.pm.in 28 Sep 2007 23:34:55 -0000 1.7 @@ -295,7 +295,8 @@ } my @ldiffiles = ("$inf->{General}->{prefix}@templatedir@/template-dse.ldif", - "$inf->{General}->{prefix}@templatedir@/template-suffix-db.ldif"); + "$inf->{General}->{prefix}@templatedir@/template-suffix-db.ldif", + "$inf->{General}->{prefix}@templatedir@/template-sasl.ldif"); if ("@enable_pam_passthru@") { push @ldiffiles, "$inf->{General}->{prefix}@templatedir@/template-pampta.ldif"; } From fedora-directory-commits at redhat.com Fri Sep 28 23:34:57 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Fri, 28 Sep 2007 19:34:57 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/ldif template-sasl.ldif.in, NONE, 1.1 Message-ID: <200709282334.l8SNYviG012415@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/ldif In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv12366/ldif Added Files: template-sasl.ldif.in Log Message: Resolves: 311851 Summary: Remove hard-coded SASL mappings and use config based regex mappings instead. --- NEW FILE template-sasl.ldif.in --- # replace the Suffix token with your suffix e.g. dc=example,dc=com dn: cn=Kerberos uid mapping,cn=mapping,cn=sasl,cn=config objectClass: top objectClass: nsSaslMapping cn: Kerberos uid mapping nsSaslMapRegexString: \(.*\)@\(.*\)\.\(.*\) nsSaslMapBaseDNTemplate: dc=\2,dc=\3 nsSaslMapFilterTemplate: (uid=\1) dn: cn=rfc 2829 dn syntax,cn=mapping,cn=sasl,cn=config objectClass: top objectClass: nsSaslMapping cn: rfc 2829 dn syntax nsSaslMapRegexString: ^dn:\(.*\) nsSaslMapBaseDNTemplate: \1 nsSaslMapFilterTemplate: (objectclass=*) dn: cn=rfc 2829 u syntax,cn=mapping,cn=sasl,cn=config objectClass: top objectClass: nsSaslMapping cn: rfc 2829 u syntax nsSaslMapRegexString: ^u:\(.*\) nsSaslMapBaseDNTemplate: %ds_suffix% nsSaslMapFilterTemplate: (uid=\1) dn: cn=uid mapping,cn=mapping,cn=sasl,cn=config objectClass: top objectClass: nsSaslMapping cn: uid mapping nsSaslMapRegexString: ^[^:@]+$ nsSaslMapBaseDNTemplate: %ds_suffix% nsSaslMapFilterTemplate: (uid=&) From fedora-directory-commits at redhat.com Fri Sep 28 23:34:58 2007 From: fedora-directory-commits at redhat.com (Nathan Kinder (nkinder)) Date: Fri, 28 Sep 2007 19:34:58 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd saslbind.c, 1.24, 1.25 Message-ID: <200709282334.l8SNYwtu012421@cvs-int.fedora.redhat.com> Author: nkinder Update of /cvs/dirsec/ldapserver/ldap/servers/slapd In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv12366/servers/slapd Modified Files: saslbind.c Log Message: Resolves: 311851 Summary: Remove hard-coded SASL mappings and use config based regex mappings instead. Index: saslbind.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/saslbind.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- saslbind.c 8 Jun 2007 23:19:18 -0000 1.24 +++ saslbind.c 28 Sep 2007 23:34:55 -0000 1.25 @@ -290,115 +290,55 @@ ) { int found = 0; - unsigned fsize = 0, ulen, rlen = 0; int attrsonly = 0, scope = LDAP_SCOPE_SUBTREE; - char filter[1024], *fptr = filter; LDAPControl **ctrls = NULL; Slapi_Entry *entry = NULL; Slapi_DN *sdn; char **attrs = NULL; - char *userattr = "uid", *realmattr = NULL, *ufilter = NULL; - void *node; int regexmatch = 0; - char *regex_ldap_search_base = NULL; - char *regex_ldap_search_filter = NULL; + char *base = NULL; + char *filter = NULL; - /* TODO: userattr & realmattr should be configurable */ - - /* - * Check for dn: prefix. See RFC 2829 section 9. - */ - if (strncasecmp(user, "dn:", 3) == 0) { - sprintf(fptr, "(objectclass=*)"); - scope = LDAP_SCOPE_BASE; - ids_sasl_user_search((char*)user+3, scope, filter, + /* Check for wildcards in the authid and realm. If we encounter one, + * just fail the mapping without performing a costly internal search. */ + if (user && strchr(user, '*')) { + LDAPDebug(LDAP_DEBUG_TRACE, "sasl user search encountered a wildcard in " + "the authid. Not attempting to map to entry. (authid=%s)\n", user, 0, 0); + return NULL; + } else if (user_realm && strchr(user_realm, '*')) { + LDAPDebug(LDAP_DEBUG_TRACE, "sasl user search encountered a wildcard in " + "the realm. Not attempting to map to entry. (realm=%s)\n", user_realm, 0, 0); + return NULL; + } + + /* New regex-based identity mapping */ + regexmatch = sasl_map_domap((char*)user, (char*)user_realm, &base, &filter); + if (regexmatch) { + ids_sasl_user_search(base, scope, filter, ctrls, attrs, attrsonly, &entry, &found); - } else { - int offset = 0; - if (strncasecmp(user,"u:",2) == 0 ) - offset = 2; - /* TODO: quote the filter values */ - - /* New regex-based identity mapping : we call it here before the old code. - * If there's a match, we skip the old way, otherwise we plow ahead for backwards compatibility reasons - */ - regexmatch = sasl_map_domap((char*)user, (char*)user_realm, ®ex_ldap_search_base, ®ex_ldap_search_filter); - if (regexmatch) { - - ids_sasl_user_search(regex_ldap_search_base, scope, regex_ldap_search_filter, - ctrls, attrs, attrsonly, - &entry, &found); - - /* Free the filter etc */ - slapi_ch_free((void**)®ex_ldap_search_base); - slapi_ch_free((void**)®ex_ldap_search_filter); - } else { - - /* Ensure no buffer overflow. */ - /* We don't know what the upper limits on username and - * realm lengths are. There don't seem to be any defined - * in the relevant standards. We may find in the future - * that a 1K buffer is insufficient for some mechanism, - * but it seems unlikely given that the values are exposed - * to the end user. - */ - ulen = strlen(user+offset); - fsize += strlen(userattr) + ulen; - if (realmattr && user_realm) { - rlen = strlen(user_realm); - fsize += strlen(realmattr) + rlen; - } - if (ufilter) fsize += strlen(ufilter); - fsize += 100; /* includes a good safety margin */ - if (fsize > 1024) { - LDAPDebug(LDAP_DEBUG_ANY, "sasl user name and/or realm too long" - " (ulen=%u, rlen=%u)\n", ulen, rlen, 0); - return NULL; - } - - /* now we can safely write the filter */ - sprintf(fptr, "(&(%s=%s)", userattr, user+offset); - fptr += strlen(fptr); - if (realmattr && user_realm) { - sprintf(fptr, "(%s=%s)", realmattr, user_realm); - fptr += strlen(fptr); - } - if (ufilter) { - if (*ufilter == '(') { - sprintf(fptr, "%s", ufilter); - } else { - sprintf(fptr, "(%s)", ufilter); - } - fptr += strlen(fptr); - } - sprintf(fptr, ")"); - - /* iterate through the naming contexts */ - for (sdn = slapi_get_first_suffix(&node, 0); sdn != NULL; - sdn = slapi_get_next_suffix(&node, 0)) { - - ids_sasl_user_search((char*)slapi_sdn_get_dn(sdn), scope, filter, - ctrls, attrs, attrsonly, - &entry, &found); + if (found == 1) { + LDAPDebug(LDAP_DEBUG_TRACE, "sasl user search found this entry: dn:%s, " + "matching filter=%s\n", entry->e_sdn.dn, filter, 0); + } else if (found == 0) { + LDAPDebug(LDAP_DEBUG_TRACE, "sasl user search found no entries matching " + "filter=%s\n", filter, 0, 0); + } else { + LDAPDebug(LDAP_DEBUG_TRACE, "sasl user search found more than one entry " + "matching filter=%s\n", filter, 0, 0); + if (entry) { + slapi_entry_free(entry); + entry = NULL; } } - } - if (found == 1) { - LDAPDebug(LDAP_DEBUG_TRACE, "sasl user search found this entry: dn:%s, matching filter=%s\n", entry->e_sdn.dn, filter, 0); - return entry; - } - - if (found == 0) { - LDAPDebug(LDAP_DEBUG_TRACE, "sasl user search found no entries matching filter=%s\n", filter, 0, 0); - } else { - LDAPDebug(LDAP_DEBUG_TRACE, "sasl user search found more than one entry matching filter=%s\n", filter, 0, 0); + /* Free the filter etc */ + slapi_ch_free_string(&base); + slapi_ch_free_string(&filter); } - if (entry) slapi_entry_free(entry); - return NULL; + return entry; } static char *buf2str(const char *buf, unsigned buflen) From fedora-directory-commits at redhat.com Fri Sep 28 23:46:42 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Fri, 28 Sep 2007 19:46:42 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/plugins/syntaxes string.c, 1.8, 1.9 Message-ID: <200709282346.l8SNkgnx012798@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/syntaxes In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv12769/servers/plugins/syntaxes Modified Files: string.c Log Message: Resolves #222918 Summary: server crash after deleting supposedly deleted attribute Description: index.c: if there is no attribute to delete, don't call index_addordel_values_svstring.c: changed string_values2keys to handle NULL bvals Index: string.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/syntaxes/string.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- string.c 19 Sep 2007 19:32:03 -0000 1.8 +++ string.c 28 Sep 2007 23:46:40 -0000 1.9 @@ -310,59 +310,54 @@ string_values2keys( Slapi_PBlock *pb, Slapi_Value **bvals, Slapi_Value ***ivals, int syntax, int ftype ) { - int nsubs, numbvals, i, n, j; - Slapi_Value **nbvals; + int nsubs, numbvals = 0, n; + Slapi_Value **nbvals, **nbvlp; + Slapi_Value **bvlp; char *w, *c, *p; - char buf[SUBLEN+1]; switch ( ftype ) { case LDAP_FILTER_EQUALITY: /* allocate a new array for the normalized values */ - for ( numbvals = 0; bvals[numbvals] != NULL; numbvals++ ) { - /* NULL */ + for ( bvlp = bvals; bvlp && *bvlp; bvlp++ ) { + numbvals++; } - nbvals = (Slapi_Value **) slapi_ch_malloc( (numbvals+1) * sizeof(Slapi_Value *)); + nbvals = (Slapi_Value **) slapi_ch_calloc( (numbvals + 1), sizeof(Slapi_Value *)); - for ( i = 0; i < numbvals; i++ ) + for ( bvlp = bvals, nbvlp = nbvals; bvlp && *bvlp; bvlp++, nbvlp++ ) { - c = slapi_ch_strdup(slapi_value_get_string(bvals[i])); + c = slapi_ch_strdup(slapi_value_get_string(*bvlp)); /* if the NORMALIZED flag is set, skip normalizing */ - if (!(slapi_value_get_flags(bvals[i]) & SLAPI_ATTR_FLAG_NORMALIZED)) + if (!(slapi_value_get_flags(*bvlp) & SLAPI_ATTR_FLAG_NORMALIZED)) value_normalize( c, syntax, 1 /* trim leading blanks */ ); - nbvals[i] = slapi_value_new_string_passin(c); + *nbvlp = slapi_value_new_string_passin(c); } - nbvals[i] = NULL; *ivals = nbvals; break; case LDAP_FILTER_APPROX: /* XXX should not do this twice! XXX */ /* get an upper bound on the number of ivals */ - numbvals = 0; - for ( i = 0; bvals[i] != NULL; i++ ) { - for ( w = first_word( (char*)slapi_value_get_string(bvals[i]) ); w != NULL; - w = next_word( w ) ) { + for ( bvlp = bvals; bvlp && *bvlp; bvlp++ ) { + for ( w = first_word( (char*)slapi_value_get_string(*bvlp) ); + w != NULL; w = next_word( w ) ) { numbvals++; } } - nbvals = (Slapi_Value **) slapi_ch_malloc( (numbvals + 1) * sizeof(Slapi_Value *) ); + nbvals = (Slapi_Value **) slapi_ch_calloc( (numbvals + 1), sizeof(Slapi_Value *) ); n = 0; - for ( i = 0; bvals[i] != NULL; i++ ) { - for ( w = first_word( (char*)slapi_value_get_string(bvals[i]) ); w != NULL; - w = next_word( w ) ) { + nbvlp = nbvals; + for ( bvlp = bvals; bvlp && *bvlp; bvlp++ ) { + for ( w = first_word( (char*)slapi_value_get_string(*bvlp) ); + w != NULL; w = next_word( w ) ) { if ( (c = phonetic( w )) != NULL ) { - nbvals[n] = slapi_value_new_string_passin(c); - n++; + *nbvlp = slapi_value_new_string_passin(c); + nbvlp++; } } } - nbvals[n] = NULL; - if ( n == 0 ) { - slapi_ch_free((void**)ivals ); - return( 0 ); - } + /* even if (n == 0), we should return the array nbvals w/ NULL items */ *ivals = nbvals; break; @@ -370,9 +365,11 @@ { /* XXX should remove duplicates! XXX */ Slapi_Value *bvdup; - const struct berval *bvp; + const struct berval *bvp; + char buf[SUBLEN+1]; + int i; nsubs = 0; - for ( i = 0; bvals[i] != NULL; i++ ) { + for ( bvlp = bvals; bvlp && *bvlp; bvlp++ ) { /* * Note: this calculation may err on the high side, * because value_normalize(), which is called below @@ -384,27 +381,26 @@ * the only downside is that we allocate more space than * we really need. */ - nsubs += slapi_value_get_length(bvals[i]) - SUBLEN + 3; + nsubs += slapi_value_get_length(*bvlp) - SUBLEN + 3; } - *ivals = (Slapi_Value **) slapi_ch_malloc( (nsubs + 1) * sizeof(Slapi_Value *) ); + *ivals = (Slapi_Value **) slapi_ch_calloc( (nsubs + 1), sizeof(Slapi_Value *) ); buf[SUBLEN] = '\0'; n = 0; bvdup= slapi_value_new(); - for ( i = 0; bvals[i] != NULL; i++ ) - { - c = slapi_ch_strdup(slapi_value_get_string(bvals[i])); + for ( bvlp = bvals; bvlp && *bvlp; bvlp++ ) { + c = slapi_ch_strdup(slapi_value_get_string(*bvlp)); value_normalize( c, syntax, 1 /* trim leading blanks */ ); - slapi_value_set_string_passin(bvdup, c); + slapi_value_set_string_passin(bvdup, c); - bvp = slapi_value_get_berval(bvdup); + bvp = slapi_value_get_berval(bvdup); /* leading */ if ( bvp->bv_len > SUBLEN - 2 ) { buf[0] = '^'; - for ( j = 0; j < SUBLEN - 1; j++ ) { - buf[j + 1] = bvp->bv_val[j]; + for ( i = 0; i < SUBLEN - 1; i++ ) { + buf[i + 1] = bvp->bv_val[i]; } (*ivals)[n] = slapi_value_new_string(buf); n++; @@ -414,8 +410,8 @@ for ( p = bvp->bv_val; p < (bvp->bv_val + bvp->bv_len - SUBLEN + 1); p++ ) { - for ( j = 0; j < SUBLEN; j++ ) { - buf[j] = p[j]; + for ( i = 0; i < SUBLEN; i++ ) { + buf[i] = p[i]; } buf[SUBLEN] = '\0'; (*ivals)[n] = slapi_value_new_string(buf); @@ -425,8 +421,8 @@ /* trailing */ if ( bvp->bv_len > SUBLEN - 2 ) { p = bvp->bv_val + bvp->bv_len - SUBLEN + 1; - for ( j = 0; j < SUBLEN - 1; j++ ) { - buf[j] = p[j]; + for ( i = 0; i < SUBLEN - 1; i++ ) { + buf[i] = p[i]; } buf[SUBLEN - 1] = '$'; (*ivals)[n] = slapi_value_new_string(buf); @@ -434,7 +430,6 @@ } } slapi_value_free(&bvdup); - (*ivals)[n] = NULL; } break; } From fedora-directory-commits at redhat.com Fri Sep 28 23:46:43 2007 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Fri, 28 Sep 2007 19:46:43 -0400 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm index.c, 1.11, 1.12 Message-ID: <200709282346.l8SNkhHl012804@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv12769/servers/slapd/back-ldbm Modified Files: index.c Log Message: Resolves #222918 Summary: server crash after deleting supposedly deleted attribute Description: index.c: if there is no attribute to delete, don't call index_addordel_values_svstring.c: changed string_values2keys to handle NULL bvals Index: index.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/index.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- index.c 28 Sep 2007 22:54:16 -0000 1.11 +++ index.c 28 Sep 2007 23:46:40 -0000 1.12 @@ -628,9 +628,12 @@ flags = BE_INDEX_DEL|BE_INDEX_PRESENCE|BE_INDEX_EQUALITY; } - /* Update the index */ - index_addordel_values_sv( be, mods[i]->mod_type, - deleted_valueArray, evals, id, flags, txn); + /* Update the index, if necessary */ + if (deleted_valueArray) { + index_addordel_values_sv( be, mods[i]->mod_type, + deleted_valueArray, evals, id, + flags, txn ); + } slapi_valueset_free(mod_vals); } else { @@ -645,18 +648,18 @@ flags = BE_INDEX_DEL; } - /* If the same value doesn't exist in a subtype, set - * BE_INDEX_EQUALITY flag so the equality index is - * removed. - */ - slapi_entry_attr_find( olde->ep_entry, mods[i]->mod_type, &curr_attr); + /* If the same value doesn't exist in a subtype, set + * BE_INDEX_EQUALITY flag so the equality index is + * removed. + */ + slapi_entry_attr_find( olde->ep_entry, mods[i]->mod_type, &curr_attr); for (j = 0; mods_valueArray[j] != NULL; j++ ) { - if ( valuearray_find(curr_attr, evals, mods_valueArray[j]) == -1 ) { + if ( valuearray_find(curr_attr, evals, mods_valueArray[j]) == -1 ) { if (!(flags & BE_INDEX_EQUALITY)) { - flags |= BE_INDEX_EQUALITY; + flags |= BE_INDEX_EQUALITY; } } - } + } rc = index_addordel_values_sv( be, basetype, mods_valueArray,